Sync styleguide 2026.05.18.1
This commit is contained in:
1 parent
17e07d525b
commit
58c5912c30
5 files changed
+399
-102
No files matched your search
@@ -1,10 +1,11 @@
|
|||||||
(function initTooltipOverlayModule() {
|
(function initTooltipOverlayModule() {
|
||||||
const getViewportWidth = () => {
|
let tooltipId = 0;
|
||||||
if (window.visualViewport && typeof window.visualViewport.width === 'number') {
|
const states = new WeakMap();
|
||||||
return window.visualViewport.width;
|
|
||||||
}
|
const getViewport = () => ({
|
||||||
return window.innerWidth;
|
width: window.visualViewport?.width || window.innerWidth,
|
||||||
};
|
height: window.visualViewport?.height || window.innerHeight,
|
||||||
|
});
|
||||||
|
|
||||||
const getPixelValue = (propertyName) => {
|
const getPixelValue = (propertyName) => {
|
||||||
const rootStyles = getComputedStyle(document.documentElement);
|
const rootStyles = getComputedStyle(document.documentElement);
|
||||||
@@ -21,144 +22,323 @@
|
|||||||
return value;
|
return value;
|
||||||
};
|
};
|
||||||
|
|
||||||
const setTooltipState = (wrap, isOpen) => {
|
const getElements = (wrap) => ({
|
||||||
const trigger = wrap.querySelector('[data-component-part="tooltip-trigger"]');
|
trigger: wrap.querySelector('[data-component-part="tooltip-trigger"]'),
|
||||||
const panel = wrap.querySelector('[data-component-part="tooltip-panel"]');
|
panel: wrap.querySelector('[data-component-part="tooltip-panel"]'),
|
||||||
if (!trigger || !panel) {
|
});
|
||||||
return;
|
|
||||||
|
const ensureAccessibility = (state) => {
|
||||||
|
const { trigger, panel } = state;
|
||||||
|
panel.setAttribute('role', 'tooltip');
|
||||||
|
|
||||||
|
if (!panel.id) {
|
||||||
|
tooltipId += 1;
|
||||||
|
panel.id = `sg-tooltip-panel-${tooltipId}`;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const describedBy = (trigger.getAttribute('aria-describedby') || '')
|
||||||
|
.split(/\s+/)
|
||||||
|
.filter(Boolean);
|
||||||
|
if (!describedBy.includes(panel.id)) {
|
||||||
|
trigger.setAttribute('aria-describedby', [...describedBy, panel.id].join(' '));
|
||||||
|
}
|
||||||
|
|
||||||
|
const hasAccessibleName = Boolean(
|
||||||
|
trigger.getAttribute('aria-label')
|
||||||
|
|| trigger.getAttribute('aria-labelledby')
|
||||||
|
|| trigger.getAttribute('title')
|
||||||
|
|| trigger.textContent.trim(),
|
||||||
|
);
|
||||||
|
if (!hasAccessibleName && panel.textContent.trim()) {
|
||||||
|
trigger.setAttribute('aria-label', panel.textContent.trim());
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!trigger.matches('a,button,input,select,textarea,[tabindex]')) {
|
||||||
|
trigger.setAttribute('tabindex', '0');
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
const setOpenState = (state, isOpen) => {
|
||||||
|
const { wrap, panel, trigger } = state;
|
||||||
wrap.dataset.tooltipOpen = String(isOpen);
|
wrap.dataset.tooltipOpen = String(isOpen);
|
||||||
panel.hidden = !isOpen;
|
panel.hidden = !isOpen;
|
||||||
trigger.setAttribute('aria-expanded', String(isOpen));
|
|
||||||
|
if (trigger.matches('button,[role="button"],[aria-expanded]')) {
|
||||||
|
trigger.setAttribute('aria-expanded', String(isOpen));
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
const positionTooltip = (wrap) => {
|
const restorePanel = (state) => {
|
||||||
const trigger = wrap.querySelector('[data-component-part="tooltip-trigger"]');
|
const { panel, placeholder } = state;
|
||||||
const panel = wrap.querySelector('[data-component-part="tooltip-panel"]');
|
panel.hidden = true;
|
||||||
if (!trigger || !panel || panel.hidden) {
|
panel.removeAttribute('data-tooltip-portal');
|
||||||
|
panel.removeAttribute('data-tooltip-placement');
|
||||||
|
panel.style.removeProperty('left');
|
||||||
|
panel.style.removeProperty('top');
|
||||||
|
panel.style.removeProperty('visibility');
|
||||||
|
panel.style.removeProperty('--tooltip-arrow-offset');
|
||||||
|
|
||||||
|
if (placeholder.parentNode) {
|
||||||
|
placeholder.parentNode.insertBefore(panel, placeholder.nextSibling);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
const movePanelToPortal = (state) => {
|
||||||
|
const { panel } = state;
|
||||||
|
if (panel.parentNode !== document.body) {
|
||||||
|
document.body.appendChild(panel);
|
||||||
|
}
|
||||||
|
panel.setAttribute('data-tooltip-portal', 'true');
|
||||||
|
panel.hidden = false;
|
||||||
|
panel.style.visibility = 'hidden';
|
||||||
|
};
|
||||||
|
|
||||||
|
const setArrowOffset = (state, placement, panelLeft, panelTop, panelWidth, panelHeight) => {
|
||||||
|
const { trigger, panel } = state;
|
||||||
|
const triggerRect = trigger.getBoundingClientRect();
|
||||||
|
const offset = placement === 'left' || placement === 'right'
|
||||||
|
? triggerRect.top + (triggerRect.height / 2) - panelTop
|
||||||
|
: triggerRect.left + (triggerRect.width / 2) - panelLeft;
|
||||||
|
const maxOffset = placement === 'left' || placement === 'right' ? panelHeight : panelWidth;
|
||||||
|
panel.style.setProperty('--tooltip-arrow-offset', `${Math.max(0, Math.min(offset, maxOffset))}px`);
|
||||||
|
};
|
||||||
|
|
||||||
|
const positionTooltip = (state) => {
|
||||||
|
const { trigger, panel } = state;
|
||||||
|
if (panel.hidden || panel.parentNode !== document.body) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const viewportWidth = getViewportWidth();
|
const viewport = getViewport();
|
||||||
const safeInset = getPixelValue('--spacing-large');
|
const safeInset = getPixelValue('--spacing-large');
|
||||||
const triggerRect = trigger.getBoundingClientRect();
|
|
||||||
const panelRect = panel.getBoundingClientRect();
|
|
||||||
const gap = getPixelValue('--spacing-small');
|
const gap = getPixelValue('--spacing-small');
|
||||||
|
const triggerRect = trigger.getBoundingClientRect();
|
||||||
|
const panelWidth = panel.offsetWidth;
|
||||||
|
const panelHeight = panel.offsetHeight;
|
||||||
|
const centeredLeft = triggerRect.left + (triggerRect.width / 2) - (panelWidth / 2);
|
||||||
|
const centeredRight = centeredLeft + panelWidth;
|
||||||
|
const hasBottomSpace = triggerRect.bottom + gap + panelHeight <= viewport.height - safeInset;
|
||||||
|
const hasTopSpace = triggerRect.top - gap - panelHeight >= safeInset;
|
||||||
|
const hasLeftSpace = triggerRect.left - gap - panelWidth >= safeInset;
|
||||||
|
const hasRightSpace = triggerRect.right + gap + panelWidth <= viewport.width - safeInset;
|
||||||
|
|
||||||
let placement = 'bottom';
|
let placement = 'bottom';
|
||||||
if (triggerRect.right + (panelRect.width / 2) > viewportWidth - safeInset) {
|
if (centeredRight > viewport.width - safeInset && hasLeftSpace) {
|
||||||
placement = 'left';
|
placement = 'left';
|
||||||
} else if (triggerRect.left - (panelRect.width / 2) < safeInset) {
|
} else if (centeredLeft < safeInset && hasRightSpace) {
|
||||||
placement = 'right';
|
placement = 'right';
|
||||||
|
} else if (!hasBottomSpace && hasTopSpace) {
|
||||||
|
placement = 'top';
|
||||||
}
|
}
|
||||||
|
|
||||||
wrap.dataset.tooltipPlacement = placement;
|
let panelLeft = centeredLeft;
|
||||||
|
let panelTop = triggerRect.bottom + gap;
|
||||||
|
|
||||||
if (placement === 'bottom') {
|
if (placement === 'top') {
|
||||||
const nextPanelRect = panel.getBoundingClientRect();
|
panelTop = triggerRect.top - gap - panelHeight;
|
||||||
if (nextPanelRect.bottom > window.innerHeight - safeInset
|
} else if (placement === 'left') {
|
||||||
&& triggerRect.top - panelRect.height - gap >= safeInset) {
|
panelLeft = triggerRect.left - gap - panelWidth;
|
||||||
wrap.dataset.tooltipPlacement = 'top';
|
panelTop = triggerRect.top + (triggerRect.height / 2) - (panelHeight / 2);
|
||||||
}
|
} else if (placement === 'right') {
|
||||||
|
panelLeft = triggerRect.right + gap;
|
||||||
|
panelTop = triggerRect.top + (triggerRect.height / 2) - (panelHeight / 2);
|
||||||
|
}
|
||||||
|
|
||||||
|
panelLeft = Math.max(safeInset, Math.min(panelLeft, viewport.width - safeInset - panelWidth));
|
||||||
|
panelTop = Math.max(safeInset, Math.min(panelTop, viewport.height - safeInset - panelHeight));
|
||||||
|
|
||||||
|
panel.dataset.tooltipPlacement = placement;
|
||||||
|
state.wrap.dataset.tooltipPlacement = placement;
|
||||||
|
panel.style.left = `${Math.round(panelLeft)}px`;
|
||||||
|
panel.style.top = `${Math.round(panelTop)}px`;
|
||||||
|
setArrowOffset(state, placement, panelLeft, panelTop, panelWidth, panelHeight);
|
||||||
|
panel.style.visibility = 'visible';
|
||||||
|
};
|
||||||
|
|
||||||
|
const openTooltip = (state) => {
|
||||||
|
movePanelToPortal(state);
|
||||||
|
setOpenState(state, true);
|
||||||
|
positionTooltip(state);
|
||||||
|
};
|
||||||
|
|
||||||
|
const closeTooltip = (state) => {
|
||||||
|
state.pinned = false;
|
||||||
|
state.hoverTrigger = false;
|
||||||
|
state.hoverPanel = false;
|
||||||
|
state.focused = false;
|
||||||
|
state.dismissed = false;
|
||||||
|
setOpenState(state, false);
|
||||||
|
restorePanel(state);
|
||||||
|
};
|
||||||
|
|
||||||
|
const closeIfInactive = (state) => {
|
||||||
|
if (!state.pinned && !state.hoverTrigger && !state.hoverPanel && !state.focused) {
|
||||||
|
setOpenState(state, false);
|
||||||
|
restorePanel(state);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
const closeTooltip = (wrap) => {
|
const togglePinned = (state) => {
|
||||||
wrap.dataset.tooltipPinned = 'false';
|
if (state.pinned) {
|
||||||
wrap.dataset.tooltipHover = 'false';
|
state.pinned = false;
|
||||||
wrap.dataset.tooltipFocus = 'false';
|
state.dismissed = true;
|
||||||
wrap.dataset.tooltipDismissed = 'false';
|
setOpenState(state, false);
|
||||||
setTooltipState(wrap, false);
|
restorePanel(state);
|
||||||
};
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
const openTooltip = (wrap) => {
|
state.pinned = true;
|
||||||
setTooltipState(wrap, true);
|
state.dismissed = false;
|
||||||
positionTooltip(wrap);
|
openTooltip(state);
|
||||||
};
|
};
|
||||||
|
|
||||||
const initTooltip = (wrap) => {
|
const initTooltip = (wrap) => {
|
||||||
if (wrap.dataset.tooltipInit === 'true') {
|
if (states.has(wrap)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const elements = getElements(wrap);
|
||||||
|
if (!elements.trigger || !elements.panel || !elements.panel.parentNode) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const placeholder = document.createComment('sg-tooltip-panel-placeholder');
|
||||||
|
elements.panel.parentNode.insertBefore(placeholder, elements.panel);
|
||||||
|
|
||||||
|
const state = {
|
||||||
|
wrap,
|
||||||
|
trigger: elements.trigger,
|
||||||
|
panel: elements.panel,
|
||||||
|
placeholder,
|
||||||
|
pinned: false,
|
||||||
|
hoverTrigger: false,
|
||||||
|
hoverPanel: false,
|
||||||
|
focused: false,
|
||||||
|
dismissed: false,
|
||||||
|
};
|
||||||
wrap.dataset.tooltipInit = 'true';
|
wrap.dataset.tooltipInit = 'true';
|
||||||
wrap.dataset.tooltipPlacement = 'bottom';
|
wrap.dataset.tooltipPlacement = 'bottom';
|
||||||
wrap.dataset.tooltipPinned = 'false';
|
states.set(wrap, state);
|
||||||
wrap.dataset.tooltipHover = 'false';
|
ensureAccessibility(state);
|
||||||
wrap.dataset.tooltipFocus = 'false';
|
setOpenState(state, false);
|
||||||
wrap.dataset.tooltipDismissed = 'false';
|
|
||||||
setTooltipState(wrap, false);
|
|
||||||
|
|
||||||
const trigger = wrap.querySelector('[data-component-part="tooltip-trigger"]');
|
|
||||||
if (!trigger) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
wrap.addEventListener('pointerenter', () => {
|
wrap.addEventListener('pointerenter', () => {
|
||||||
if (wrap.dataset.tooltipDismissed === 'true') {
|
if (state.dismissed) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
wrap.dataset.tooltipHover = 'true';
|
state.hoverTrigger = true;
|
||||||
openTooltip(wrap);
|
openTooltip(state);
|
||||||
});
|
});
|
||||||
|
|
||||||
wrap.addEventListener('pointerleave', () => {
|
wrap.addEventListener('pointerleave', (event) => {
|
||||||
wrap.dataset.tooltipHover = 'false';
|
state.hoverTrigger = false;
|
||||||
wrap.dataset.tooltipDismissed = 'false';
|
state.dismissed = false;
|
||||||
if (wrap.dataset.tooltipPinned !== 'true' && wrap.dataset.tooltipFocus !== 'true') {
|
if (!state.panel.contains(event.relatedTarget)) {
|
||||||
setTooltipState(wrap, false);
|
closeIfInactive(state);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
state.panel.addEventListener('pointerenter', () => {
|
||||||
|
if (!state.dismissed) {
|
||||||
|
state.hoverPanel = true;
|
||||||
|
openTooltip(state);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
state.panel.addEventListener('pointerleave', () => {
|
||||||
|
state.hoverPanel = false;
|
||||||
|
state.dismissed = false;
|
||||||
|
closeIfInactive(state);
|
||||||
|
});
|
||||||
|
|
||||||
wrap.addEventListener('focusin', () => {
|
wrap.addEventListener('focusin', () => {
|
||||||
if (wrap.dataset.tooltipDismissed === 'true') {
|
if (!state.dismissed) {
|
||||||
return;
|
state.focused = true;
|
||||||
|
openTooltip(state);
|
||||||
}
|
}
|
||||||
wrap.dataset.tooltipFocus = 'true';
|
|
||||||
openTooltip(wrap);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
wrap.addEventListener('focusout', (event) => {
|
wrap.addEventListener('focusout', (event) => {
|
||||||
if (wrap.contains(event.relatedTarget)) {
|
if (wrap.contains(event.relatedTarget) || state.panel.contains(event.relatedTarget)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
wrap.dataset.tooltipFocus = 'false';
|
state.focused = false;
|
||||||
wrap.dataset.tooltipDismissed = 'false';
|
state.dismissed = false;
|
||||||
if (wrap.dataset.tooltipPinned !== 'true' && wrap.dataset.tooltipHover !== 'true') {
|
closeIfInactive(state);
|
||||||
setTooltipState(wrap, false);
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
|
||||||
trigger.addEventListener('click', (event) => {
|
state.trigger.addEventListener('click', (event) => {
|
||||||
event.stopPropagation();
|
event.stopPropagation();
|
||||||
const isPinned = wrap.dataset.tooltipPinned === 'true';
|
togglePinned(state);
|
||||||
wrap.dataset.tooltipPinned = String(!isPinned);
|
});
|
||||||
|
|
||||||
if (isPinned) {
|
state.trigger.addEventListener('keydown', (event) => {
|
||||||
wrap.dataset.tooltipDismissed = 'true';
|
const isNativeInteractive = state.trigger.matches('a,button,input,select,textarea');
|
||||||
setTooltipState(wrap, false);
|
if (!isNativeInteractive && (event.key === 'Enter' || event.key === ' ')) {
|
||||||
return;
|
event.preventDefault();
|
||||||
|
togglePinned(state);
|
||||||
}
|
}
|
||||||
|
|
||||||
wrap.dataset.tooltipDismissed = 'false';
|
|
||||||
openTooltip(wrap);
|
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
document.querySelectorAll('.sg-tooltip-wrap').forEach(initTooltip);
|
const initializeWithin = (root) => {
|
||||||
|
if (root.nodeType === Node.DOCUMENT_NODE) {
|
||||||
document.addEventListener('click', (event) => {
|
root.querySelectorAll('.sg-tooltip-wrap').forEach(initTooltip);
|
||||||
document.querySelectorAll('.sg-tooltip-wrap').forEach((wrap) => {
|
return;
|
||||||
if (!wrap.contains(event.target)) {
|
}
|
||||||
closeTooltip(wrap);
|
if (root.nodeType !== Node.ELEMENT_NODE) {
|
||||||
}
|
return;
|
||||||
});
|
}
|
||||||
});
|
const owningWrap = root.closest('.sg-tooltip-wrap');
|
||||||
|
if (owningWrap) {
|
||||||
const repositionOpenTooltips = () => {
|
initTooltip(owningWrap);
|
||||||
document.querySelectorAll('.sg-tooltip-wrap[data-tooltip-open="true"]').forEach(positionTooltip);
|
}
|
||||||
|
if (root.matches('.sg-tooltip-wrap')) {
|
||||||
|
initTooltip(root);
|
||||||
|
}
|
||||||
|
root.querySelectorAll('.sg-tooltip-wrap').forEach(initTooltip);
|
||||||
};
|
};
|
||||||
|
|
||||||
window.addEventListener('resize', repositionOpenTooltips);
|
const bootstrap = () => {
|
||||||
window.addEventListener('scroll', repositionOpenTooltips, true);
|
window.sgInitTooltips = (options = {}) => {
|
||||||
|
const root = options.root || document.body;
|
||||||
|
initializeWithin(root);
|
||||||
|
};
|
||||||
|
|
||||||
|
window.sgInitTooltips();
|
||||||
|
|
||||||
|
const observer = new MutationObserver((records) => {
|
||||||
|
records.forEach((record) => {
|
||||||
|
record.addedNodes.forEach(initializeWithin);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
observer.observe(document.body, { childList: true, subtree: true });
|
||||||
|
|
||||||
|
document.addEventListener('click', (event) => {
|
||||||
|
document.querySelectorAll('.sg-tooltip-wrap').forEach((wrap) => {
|
||||||
|
const state = states.get(wrap);
|
||||||
|
if (state && !wrap.contains(event.target) && !state.panel.contains(event.target)) {
|
||||||
|
closeTooltip(state);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
const repositionOpenTooltips = () => {
|
||||||
|
document.querySelectorAll('.sg-tooltip-wrap[data-tooltip-open="true"]').forEach((wrap) => {
|
||||||
|
const state = states.get(wrap);
|
||||||
|
if (state) {
|
||||||
|
positionTooltip(state);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
window.addEventListener('resize', repositionOpenTooltips);
|
||||||
|
window.addEventListener('scroll', repositionOpenTooltips, true);
|
||||||
|
};
|
||||||
|
|
||||||
|
if (document.readyState === 'loading') {
|
||||||
|
document.addEventListener('DOMContentLoaded', bootstrap, { once: true });
|
||||||
|
} else {
|
||||||
|
bootstrap();
|
||||||
|
}
|
||||||
})();
|
})();
|
||||||
@@ -1240,9 +1240,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
.sg-tooltip-wrap {
|
.sg-tooltip-wrap {
|
||||||
position: relative;
|
display: contents;
|
||||||
display: inline-flex;
|
|
||||||
vertical-align: middle;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.sg-tooltip-panel {
|
.sg-tooltip-panel {
|
||||||
@@ -1328,6 +1326,47 @@
|
|||||||
transform: translateY(-50%);
|
transform: translateY(-50%);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.sg-tooltip-panel[data-tooltip-portal="true"] {
|
||||||
|
position: fixed;
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
|
z-index: var(--layer-pulldown-panel);
|
||||||
|
max-width: calc(100vw - (2 * var(--spacing-large)));
|
||||||
|
transform: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.sg-tooltip-panel[data-tooltip-portal="true"][data-tooltip-placement="bottom"]::before {
|
||||||
|
top: calc(var(--spacing-small) * -1);
|
||||||
|
left: var(--tooltip-arrow-offset);
|
||||||
|
border-width: 0 var(--spacing-small) var(--spacing-small);
|
||||||
|
border-color: transparent transparent var(--surface-tooltip);
|
||||||
|
transform: translateX(-50%);
|
||||||
|
}
|
||||||
|
|
||||||
|
.sg-tooltip-panel[data-tooltip-portal="true"][data-tooltip-placement="top"]::before {
|
||||||
|
bottom: calc(var(--spacing-small) * -1);
|
||||||
|
left: var(--tooltip-arrow-offset);
|
||||||
|
border-width: var(--spacing-small) var(--spacing-small) 0;
|
||||||
|
border-color: var(--surface-tooltip) transparent transparent;
|
||||||
|
transform: translateX(-50%);
|
||||||
|
}
|
||||||
|
|
||||||
|
.sg-tooltip-panel[data-tooltip-portal="true"][data-tooltip-placement="left"]::before {
|
||||||
|
top: var(--tooltip-arrow-offset);
|
||||||
|
right: calc(var(--spacing-small) * -1);
|
||||||
|
border-width: var(--spacing-small) 0 var(--spacing-small) var(--spacing-small);
|
||||||
|
border-color: transparent transparent transparent var(--surface-tooltip);
|
||||||
|
transform: translateY(-50%);
|
||||||
|
}
|
||||||
|
|
||||||
|
.sg-tooltip-panel[data-tooltip-portal="true"][data-tooltip-placement="right"]::before {
|
||||||
|
top: var(--tooltip-arrow-offset);
|
||||||
|
left: calc(var(--spacing-small) * -1);
|
||||||
|
border-width: var(--spacing-small) var(--spacing-small) var(--spacing-small) 0;
|
||||||
|
border-color: transparent var(--surface-tooltip) transparent transparent;
|
||||||
|
transform: translateY(-50%);
|
||||||
|
}
|
||||||
|
|
||||||
.sg-pulldown-panel {
|
.sg-pulldown-panel {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
top: calc(100% + var(--spacing-small));
|
top: calc(100% + var(--spacing-small));
|
||||||
|
|||||||
@@ -1765,9 +1765,7 @@ section + section {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.sg-tooltip-wrap {
|
.sg-tooltip-wrap {
|
||||||
position: relative;
|
display: contents;
|
||||||
display: inline-flex;
|
|
||||||
vertical-align: middle;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.sg-tooltip-panel {
|
.sg-tooltip-panel {
|
||||||
@@ -1853,6 +1851,47 @@ section + section {
|
|||||||
transform: translateY(-50%);
|
transform: translateY(-50%);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.sg-tooltip-panel[data-tooltip-portal="true"] {
|
||||||
|
position: fixed;
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
|
z-index: var(--layer-pulldown-panel);
|
||||||
|
max-width: calc(100vw - (2 * var(--spacing-large)));
|
||||||
|
transform: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.sg-tooltip-panel[data-tooltip-portal="true"][data-tooltip-placement="bottom"]::before {
|
||||||
|
top: calc(var(--spacing-small) * -1);
|
||||||
|
left: var(--tooltip-arrow-offset);
|
||||||
|
border-width: 0 var(--spacing-small) var(--spacing-small);
|
||||||
|
border-color: transparent transparent var(--surface-tooltip);
|
||||||
|
transform: translateX(-50%);
|
||||||
|
}
|
||||||
|
|
||||||
|
.sg-tooltip-panel[data-tooltip-portal="true"][data-tooltip-placement="top"]::before {
|
||||||
|
bottom: calc(var(--spacing-small) * -1);
|
||||||
|
left: var(--tooltip-arrow-offset);
|
||||||
|
border-width: var(--spacing-small) var(--spacing-small) 0;
|
||||||
|
border-color: var(--surface-tooltip) transparent transparent;
|
||||||
|
transform: translateX(-50%);
|
||||||
|
}
|
||||||
|
|
||||||
|
.sg-tooltip-panel[data-tooltip-portal="true"][data-tooltip-placement="left"]::before {
|
||||||
|
top: var(--tooltip-arrow-offset);
|
||||||
|
right: calc(var(--spacing-small) * -1);
|
||||||
|
border-width: var(--spacing-small) 0 var(--spacing-small) var(--spacing-small);
|
||||||
|
border-color: transparent transparent transparent var(--surface-tooltip);
|
||||||
|
transform: translateY(-50%);
|
||||||
|
}
|
||||||
|
|
||||||
|
.sg-tooltip-panel[data-tooltip-portal="true"][data-tooltip-placement="right"]::before {
|
||||||
|
top: var(--tooltip-arrow-offset);
|
||||||
|
left: calc(var(--spacing-small) * -1);
|
||||||
|
border-width: var(--spacing-small) var(--spacing-small) var(--spacing-small) 0;
|
||||||
|
border-color: transparent var(--surface-tooltip) transparent transparent;
|
||||||
|
transform: translateY(-50%);
|
||||||
|
}
|
||||||
|
|
||||||
.sg-pulldown-panel {
|
.sg-pulldown-panel {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
top: calc(100% + var(--spacing-small));
|
top: calc(100% + var(--spacing-small));
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"styleguideVersion": "2026.05.18.1",
|
"styleguideVersion": "2026.05.18.1",
|
||||||
"styleguideCommit": "944d791",
|
"styleguideCommit": "060eb86",
|
||||||
"syncedAtUtc": "2026-09-21T12:42:55Z",
|
"syncedAtUtc": "2026-09-21T14:06:04Z",
|
||||||
"sourceRepo": "/Users/mathias/Documents/Dokumente Chouchou/Codebases/Styleguide",
|
"sourceRepo": "/Users/mathias/Documents/Dokumente Chouchou/Codebases/Styleguide",
|
||||||
"mirroredDocsPath": "docs/styleguide"
|
"mirroredDocsPath": "docs/styleguide"
|
||||||
}
|
}
|
||||||
@@ -1765,9 +1765,7 @@ section + section {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.sg-tooltip-wrap {
|
.sg-tooltip-wrap {
|
||||||
position: relative;
|
display: contents;
|
||||||
display: inline-flex;
|
|
||||||
vertical-align: middle;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.sg-tooltip-panel {
|
.sg-tooltip-panel {
|
||||||
@@ -1853,6 +1851,47 @@ section + section {
|
|||||||
transform: translateY(-50%);
|
transform: translateY(-50%);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.sg-tooltip-panel[data-tooltip-portal="true"] {
|
||||||
|
position: fixed;
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
|
z-index: var(--layer-pulldown-panel);
|
||||||
|
max-width: calc(100vw - (2 * var(--spacing-large)));
|
||||||
|
transform: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.sg-tooltip-panel[data-tooltip-portal="true"][data-tooltip-placement="bottom"]::before {
|
||||||
|
top: calc(var(--spacing-small) * -1);
|
||||||
|
left: var(--tooltip-arrow-offset);
|
||||||
|
border-width: 0 var(--spacing-small) var(--spacing-small);
|
||||||
|
border-color: transparent transparent var(--surface-tooltip);
|
||||||
|
transform: translateX(-50%);
|
||||||
|
}
|
||||||
|
|
||||||
|
.sg-tooltip-panel[data-tooltip-portal="true"][data-tooltip-placement="top"]::before {
|
||||||
|
bottom: calc(var(--spacing-small) * -1);
|
||||||
|
left: var(--tooltip-arrow-offset);
|
||||||
|
border-width: var(--spacing-small) var(--spacing-small) 0;
|
||||||
|
border-color: var(--surface-tooltip) transparent transparent;
|
||||||
|
transform: translateX(-50%);
|
||||||
|
}
|
||||||
|
|
||||||
|
.sg-tooltip-panel[data-tooltip-portal="true"][data-tooltip-placement="left"]::before {
|
||||||
|
top: var(--tooltip-arrow-offset);
|
||||||
|
right: calc(var(--spacing-small) * -1);
|
||||||
|
border-width: var(--spacing-small) 0 var(--spacing-small) var(--spacing-small);
|
||||||
|
border-color: transparent transparent transparent var(--surface-tooltip);
|
||||||
|
transform: translateY(-50%);
|
||||||
|
}
|
||||||
|
|
||||||
|
.sg-tooltip-panel[data-tooltip-portal="true"][data-tooltip-placement="right"]::before {
|
||||||
|
top: var(--tooltip-arrow-offset);
|
||||||
|
left: calc(var(--spacing-small) * -1);
|
||||||
|
border-width: var(--spacing-small) var(--spacing-small) var(--spacing-small) 0;
|
||||||
|
border-color: transparent var(--surface-tooltip) transparent transparent;
|
||||||
|
transform: translateY(-50%);
|
||||||
|
}
|
||||||
|
|
||||||
.sg-pulldown-panel {
|
.sg-pulldown-panel {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
top: calc(100% + var(--spacing-small));
|
top: calc(100% + var(--spacing-small));
|
||||||
|
|||||||
Reference in new issue
Block a user