@ds-mo/ui 14.31.0 → 14.31.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +0,0 @@
1
- {"version":3,"names":["resolveMobileSectionPosition","sections","value","selectable","getSelectableTabs","matchedIndex","findIndex","section","id","selectedIndex","selected","hasPrevious","hasNext","length","mobileSectionSwitcherCss","nextMobileSectionSwitcherId","MobileSectionSwitcher","__stencil_proxyCustomElement","HTMLElement","constructor","registerHost","this","navigationLabel","presentation","pageLabel","menuOpen","menuSurfaceOpen","initialFocusVisible","sheetClosing","focusedSection","instanceId","triggerId","menuId","triggerEl","dialogEl","closeTimer","handleSheetKeyDown","event","key","preventDefault","stopPropagation","closeMenu","selectableSections","filter","isInactive","index","Math","max","next","ctrlKey","metaKey","altKey","match","_","offset","label","toLowerCase","startsWith","focusSheetItem","toggleMenu","detail","selectedSection","open","handleSelect","String","find","candidate","dsChange","emit","requestAnimationFrame","focus","componentDidLoad","visibilityObserver","ResizeObserver","getClientRects","finishSheetClose","observe","el","componentDidRender","initialSection","showModal","duration","resolveMotionTimeMs","TOKEN_DEFAULTS","motionShort2","animationDurationShort3","setTimeout","disconnectedCallback","disconnect","handlePresentationChange","handleContextChange","restoreFocus","clearTimeout","wasOpen","close","buttons","Array","from","querySelectorAll","button","item","disabled","resolvedSections","triggerAriaLabel","menuSections","groups","items","commit","push","isTabDivider","dot","isSelected","handleSectionsChange","renderSheet","h","ref","element","class","tabIndex","onCancel","onKeyDown","onClick","target","rect","getBoundingClientRect","clientY","top","bottom","clientX","left","right","role","map","type","undefined","onFocus","as","variant","color","emphasis","lineTruncation","render","Host","combined","anchorId","align","menuLabel","onDsClose","onDsAfterClose","onDsSelect"],"sources":["src/wc/components/MobileSectionSwitcher/mobile-section-switcher-utils.ts","src/wc/components/MobileSectionSwitcher/MobileSectionSwitcher.css?tag=ds-mobile-section-switcher&encapsulation=scoped","src/wc/components/MobileSectionSwitcher/MobileSectionSwitcher.tsx"],"sourcesContent":["import { getSelectableTabs, type TabItem, type TabItemTab } from '../TabGroup/tab-item-utils';\n\nexport interface MobileSectionPosition {\n selectedIndex: number;\n selected?: TabItemTab;\n hasPrevious: boolean;\n hasNext: boolean;\n}\n\n/** Resolve ordered selectable neighbors while ignoring visual divider entries. */\nexport function resolveMobileSectionPosition(\n sections: TabItem[],\n value: string\n): MobileSectionPosition {\n const selectable = getSelectableTabs(sections);\n const matchedIndex = selectable.findIndex(section => section.id === value);\n const selectedIndex = matchedIndex >= 0 ? matchedIndex : 0;\n return {\n selectedIndex,\n selected: selectable[selectedIndex],\n hasPrevious: selectedIndex > 0,\n hasNext: selectedIndex < selectable.length - 1,\n };\n}\n","@import '../../utils/focus-ring.css';\n@import '../../utils/interaction-fill.css';\n@import '../../utils/control-density.css';\n\n:host {\n display: block;\n min-width: 0;\n max-width: 100%;\n color: var(--color-foreground-primary);\n}\n\n.mobile-section-switcher {\n appearance: none;\n display: grid;\n grid-template-columns: var(--dimension-size-100) minmax(0, auto) var(--dimension-size-100);\n align-items: center;\n justify-content: center;\n gap: var(--dimension-space-050);\n max-width: 100%;\n min-height: var(--dimension-size-400);\n padding-inline: var(--dimension-space-100);\n border: 0;\n border-radius: var(--dimension-radius-100);\n background: var(--color-background-secondary);\n color: inherit;\n box-sizing: border-box;\n cursor: default;\n}\n\n.mobile-section-switcher__label {\n min-width: 0;\n max-width: 100%;\n text-align: center;\n}\n\n.mobile-section-switcher__position {\n width: var(--dimension-size-050);\n height: var(--dimension-size-050);\n border-radius: var(--dimension-radius-half);\n background: currentColor;\n opacity: 0;\n}\n\n.mobile-section-switcher__position--visible {\n opacity: 1;\n}\n\n.mobile-section-switcher--sheet {\n grid-template-columns: minmax(0, auto);\n min-height: var(--dimension-size-500);\n padding-inline: var(--dimension-space-150);\n border-radius: var(--dimension-radius-half);\n background: transparent;\n --ds-interaction-border-width: var(--dimension-stroke-width-012);\n --ds-interaction-border-color: var(--color-border-tertiary);\n}\n\n.mobile-section-switcher--combined {\n display: flex;\n}\n\n.mobile-section-switcher__page-label {\n flex: 0 1 auto;\n min-width: 0;\n}\n\n.mobile-section-switcher__separator {\n flex: 0 0 auto;\n}\n\n.mobile-section-switcher--combined .mobile-section-switcher__label {\n flex: 0 0 auto;\n max-width: 50%;\n}\n\n.mobile-section-sheet {\n position: fixed;\n inset: 0 0 auto;\n width: 100%;\n max-width: none;\n max-height: calc(100dvh - var(--dimension-size-500) - var(--dimension-space-200));\n margin: 0;\n padding: 0;\n border: 0;\n border-radius: 0;\n box-sizing: border-box;\n overflow: hidden;\n background: var(--color-background-primary);\n color: var(--color-foreground-secondary);\n box-shadow: var(--effect-elevation-elevated-floating);\n outline: none;\n}\n\n.mobile-section-sheet[open] {\n display: flex;\n flex-direction: column;\n animation: mobileSectionSheetIn var(--effect-motion-short-2) both;\n}\n\n.mobile-section-sheet::backdrop {\n background: var(--color-background-shade);\n animation: mobileSectionShadeIn var(--effect-motion-short-2) both;\n}\n\n.mobile-section-sheet--closing[open] {\n animation-name: mobileSectionSheetOut;\n}\n\n.mobile-section-sheet--closing::backdrop {\n animation-name: mobileSectionShadeOut;\n}\n\n.mobile-section-sheet__items {\n display: flex;\n flex-direction: column;\n gap: var(--dimension-space-100);\n min-height: 0;\n padding: var(--dimension-space-100);\n padding-block-start: max(var(--dimension-space-100), env(safe-area-inset-top, 0px));\n overflow-y: auto;\n overscroll-behavior: contain;\n}\n\n.mobile-section-sheet__item {\n appearance: none;\n flex: 0 0 auto;\n display: flex;\n align-items: center;\n height: var(--ds-control-height);\n width: 100%;\n min-width: 0;\n padding: 0 var(--ds-control-padding-inline);\n box-sizing: border-box;\n border: 0;\n border-radius: var(--ds-control-radius);\n background: transparent;\n color: inherit;\n text-align: start;\n}\n\n.mobile-section-sheet__item[aria-current='page'] {\n color: var(--color-foreground-primary);\n}\n\n.mobile-section-sheet__item:disabled {\n color: var(--color-foreground-tertiary);\n}\n\n.mobile-section-sheet__label {\n min-width: 0;\n padding-inline: var(--ds-control-label-inset);\n}\n\n.mobile-section-sheet__divider {\n flex: 0 0 auto;\n height: var(--dimension-stroke-width-012);\n margin-inline: var(--dimension-space-100);\n background: var(--color-border-tertiary);\n}\n\n@keyframes mobileSectionSheetIn {\n from {\n transform: translateY(-100%);\n }\n to {\n transform: translateY(0);\n }\n}\n\n@keyframes mobileSectionSheetOut {\n from {\n transform: translateY(0);\n }\n to {\n transform: translateY(-100%);\n }\n}\n\n@keyframes mobileSectionShadeIn {\n from {\n opacity: 0;\n }\n to {\n opacity: 1;\n }\n}\n\n@keyframes mobileSectionShadeOut {\n from {\n opacity: 1;\n }\n to {\n opacity: 0;\n }\n}\n\n@media (prefers-reduced-motion: reduce) {\n .mobile-section-sheet[open],\n .mobile-section-sheet::backdrop {\n animation: none;\n }\n}\n","import {\n Component,\n Element,\n Event,\n EventEmitter,\n h,\n Host,\n Prop,\n State,\n Watch,\n} from '@stencil/core';\nimport type { MenuItemData, MenuSection } from '../Menu/menu-types';\nimport {\n getSelectableTabs,\n isTabDivider,\n type TabItem,\n type TabItemTab,\n} from '../TabGroup/tab-item-utils';\nimport { resolveMobileSectionPosition } from './mobile-section-switcher-utils';\nimport { resolveMotionTimeMs, TOKEN_DEFAULTS } from '../../utils';\n\nlet nextMobileSectionSwitcherId = 0;\n\n@Component({\n tag: 'ds-mobile-section-switcher',\n styleUrl: 'MobileSectionSwitcher.css',\n scoped: true,\n})\nexport class MobileSectionSwitcher {\n @Element() el!: HTMLElement;\n\n /** Ordered controlled sections. Divider entries group the popup menu. */\n @Prop() sections: TabItem[] = [];\n /** Controlled selected section id. */\n @Prop() value: string = '';\n /** Accessible name for the section chooser. */\n @Prop() navigationLabel: string = 'Change page section';\n /** Anchored local-view menu or viewport-edge sheet for primary page sections. */\n @Prop() presentation: 'menu' | 'sheet' = 'menu';\n /** Stable page identity shown before the selected section in a sheet trigger. */\n @Prop() pageLabel: string = '';\n\n /** Selection intent. The route, tool, or workflow owner updates `value`. */\n @Event() dsChange!: EventEmitter<string>;\n\n @State() private menuOpen = false;\n @State() private menuSurfaceOpen = false;\n @State() private initialFocusVisible = false;\n @State() private sheetClosing = false;\n @State() private focusedSection = '';\n\n private readonly instanceId = nextMobileSectionSwitcherId++;\n private readonly triggerId = `ds-mobile-section-switcher-trigger-${this.instanceId}`;\n private readonly menuId = `ds-mobile-section-switcher-menu-${this.instanceId}`;\n private triggerEl: HTMLButtonElement | null = null;\n private dialogEl: HTMLDialogElement | null = null;\n private closeTimer: ReturnType<typeof setTimeout> | null = null;\n private visibilityObserver?: ResizeObserver;\n\n componentDidLoad() {\n this.visibilityObserver = new ResizeObserver(() => {\n if (this.dialogEl?.open && !this.triggerEl?.getClientRects().length) {\n this.finishSheetClose(false);\n }\n });\n this.visibilityObserver.observe(this.el);\n }\n\n componentDidRender() {\n if (!this.dialogEl) return;\n if (this.presentation === 'sheet' && this.menuOpen && !this.dialogEl.open) {\n const initialSection = this.focusedSection;\n this.dialogEl.showModal();\n this.focusSheetItem(initialSection);\n }\n if (this.sheetClosing && this.dialogEl.open && !this.closeTimer) {\n const duration = resolveMotionTimeMs(\n TOKEN_DEFAULTS.motionShort2,\n TOKEN_DEFAULTS.animationDurationShort3\n );\n if (!duration) this.finishSheetClose();\n else this.closeTimer = setTimeout(() => this.finishSheetClose(), duration);\n }\n }\n\n disconnectedCallback() {\n this.visibilityObserver?.disconnect();\n this.menuSurfaceOpen = false;\n this.finishSheetClose(false);\n }\n\n @Watch('presentation')\n handlePresentationChange() {\n this.menuSurfaceOpen = false;\n this.closeMenu();\n }\n\n @Watch('value')\n @Watch('pageLabel')\n handleContextChange() {\n this.closeMenu();\n }\n\n private finishSheetClose(restoreFocus = true) {\n if (this.closeTimer) clearTimeout(this.closeTimer);\n this.closeTimer = null;\n const wasOpen = this.dialogEl?.open;\n this.dialogEl?.close();\n this.menuOpen = false;\n this.sheetClosing = false;\n if (wasOpen && restoreFocus && this.triggerEl?.getClientRects().length) this.triggerEl.focus();\n }\n\n private focusSheetItem(id: string) {\n const buttons = Array.from(this.dialogEl?.querySelectorAll<HTMLButtonElement>('button') ?? []);\n const button =\n buttons.find(item => item.value === id && !item.disabled) ??\n buttons.find(item => !item.disabled);\n if (button) {\n this.focusedSection = button.value;\n button.focus();\n } else this.dialogEl?.focus();\n }\n\n private handleSheetKeyDown = (event: KeyboardEvent) => {\n if (event.key === 'Escape') {\n event.preventDefault();\n event.stopPropagation();\n this.closeMenu();\n return;\n }\n const sections = this.selectableSections.filter(section => !section.isInactive);\n if (!sections.length) return;\n const index = Math.max(\n 0,\n sections.findIndex(section => section.id === this.focusedSection)\n );\n let next: number;\n if (event.key === 'ArrowDown') next = (index + 1) % sections.length;\n else if (event.key === 'ArrowUp') next = (index + sections.length - 1) % sections.length;\n else if (event.key === 'Home') next = 0;\n else if (event.key === 'End') next = sections.length - 1;\n else if (event.key === 'Tab') next = index;\n else if (\n event.key.length === 1 &&\n !event.ctrlKey &&\n !event.metaKey &&\n !event.altKey &&\n event.key !== ' '\n ) {\n const match = sections.findIndex((_, offset) =>\n sections[(index + offset + 1) % sections.length].label\n .toLowerCase()\n .startsWith(event.key.toLowerCase())\n );\n if (match < 0) return;\n next = (index + match + 1) % sections.length;\n } else return;\n event.preventDefault();\n this.initialFocusVisible = true;\n this.focusSheetItem(sections[next].id);\n };\n\n private get resolvedSections(): TabItem[] {\n return this.sections ?? [];\n }\n\n private get selectableSections(): TabItemTab[] {\n return getSelectableTabs(this.resolvedSections);\n }\n\n private get selectedIndex(): number {\n return resolveMobileSectionPosition(this.resolvedSections, this.value).selectedIndex;\n }\n\n private get selectedSection(): TabItemTab | undefined {\n return this.selectableSections[this.selectedIndex];\n }\n\n private get hasPrevious(): boolean {\n return resolveMobileSectionPosition(this.resolvedSections, this.value).hasPrevious;\n }\n\n private get hasNext(): boolean {\n return resolveMobileSectionPosition(this.resolvedSections, this.value).hasNext;\n }\n\n private get triggerAriaLabel(): string {\n return `${this.presentation === 'sheet' && this.pageLabel ? `${this.pageLabel}. ` : ''}${this.navigationLabel}. Current section: ${this.selectedSection?.label ?? ''}`;\n }\n\n private get menuSections(): MenuSection[] {\n const groups: MenuSection[] = [];\n let items: MenuItemData[] = [];\n const commit = () => {\n if (items.length) groups.push({ items });\n items = [];\n };\n\n for (const section of this.resolvedSections) {\n if (isTabDivider(section)) {\n commit();\n continue;\n }\n items.push({\n label: section.label,\n value: section.id,\n dot: section.dot,\n isSelected: section.id === this.selectedSection?.id,\n isInactive: section.isInactive,\n });\n }\n commit();\n return groups;\n }\n\n @Watch('sections')\n handleSectionsChange() {\n if (this.selectableSections.length <= 1) {\n this.closeMenu();\n this.menuSurfaceOpen = false;\n } else if (this.dialogEl?.open && !this.sheetClosing) this.focusSheetItem(this.focusedSection);\n }\n\n private toggleMenu = (event: MouseEvent) => {\n if (this.selectableSections.length <= 1) return;\n this.initialFocusVisible = event.detail === 0;\n if (this.presentation === 'sheet') {\n if (this.menuOpen) this.closeMenu();\n else {\n this.focusedSection = this.selectedSection?.id ?? '';\n this.menuOpen = true;\n }\n return;\n }\n this.menuOpen = !this.menuOpen;\n if (this.menuOpen) this.menuSurfaceOpen = true;\n };\n\n private closeMenu = () => {\n this.menuOpen = false;\n if (this.dialogEl?.open) this.sheetClosing = true;\n };\n\n private renderSheet() {\n return (\n <dialog\n id={this.menuId}\n ref={element => {\n this.dialogEl = element ?? null;\n }}\n class={{ 'mobile-section-sheet': true, 'mobile-section-sheet--closing': this.sheetClosing }}\n aria-label={this.navigationLabel}\n tabIndex={-1}\n onCancel={event => {\n event.preventDefault();\n this.closeMenu();\n }}\n onKeyDown={this.handleSheetKeyDown}\n onClick={event => {\n if (!this.dialogEl || event.target !== this.dialogEl) return;\n const rect = this.dialogEl.getBoundingClientRect();\n if (\n event.clientY < rect.top ||\n event.clientY > rect.bottom ||\n event.clientX < rect.left ||\n event.clientX > rect.right\n )\n this.closeMenu();\n }}\n >\n <div class=\"mobile-section-sheet__items\" role=\"menu\" aria-label={this.navigationLabel}>\n {this.resolvedSections.map(section =>\n isTabDivider(section) ? (\n <div class=\"mobile-section-sheet__divider\" role=\"separator\" />\n ) : (\n <button\n type=\"button\"\n role=\"menuitem\"\n value={section.id}\n disabled={section.isInactive}\n aria-current={section.id === this.selectedSection?.id ? 'page' : undefined}\n tabIndex={section.id === this.focusedSection ? 0 : -1}\n class={{\n 'mobile-section-sheet__item': true,\n 'ds-control--lg': true,\n 'ds-interaction-fill': true,\n 'ds-focus-ring-inset': true,\n 'ds-focus-ring--visible':\n this.initialFocusVisible && section.id === this.focusedSection,\n }}\n onFocus={() => {\n this.focusedSection = section.id;\n }}\n onClick={() => {\n if (this.sheetClosing || section.isInactive) return;\n this.closeMenu();\n if (section.id !== this.selectedSection?.id) this.dsChange.emit(section.id);\n }}\n >\n <ds-text\n class=\"mobile-section-sheet__label ds-interaction-fill__content\"\n as=\"span\"\n variant=\"text-body-large\"\n color=\"inherit\"\n emphasis={section.id === this.selectedSection?.id}\n lineTruncation={1}\n >\n {section.label}\n </ds-text>\n </button>\n )\n )}\n </div>\n </dialog>\n );\n }\n\n private handleSelect = (event: CustomEvent<MenuItemData>) => {\n const id = String(event.detail.value ?? '');\n const section = this.selectableSections.find(candidate => candidate.id === id);\n if (!section || section.isInactive) return;\n this.closeMenu();\n if (id !== this.selectedSection?.id) this.dsChange.emit(id);\n requestAnimationFrame(() => this.triggerEl?.focus());\n };\n\n render() {\n const selected = this.selectedSection;\n if (!selected) return <Host />;\n const combined = this.presentation === 'sheet' && !!this.pageLabel;\n\n return (\n <Host>\n <button\n ref={element => {\n this.triggerEl = element ?? null;\n }}\n id={this.triggerId}\n class={{\n 'mobile-section-switcher': true,\n 'mobile-section-switcher--expanded': this.menuOpen,\n 'ds-interaction-fill--surface-open':\n this.menuSurfaceOpen || this.menuOpen || this.sheetClosing,\n 'mobile-section-switcher--sheet': this.presentation === 'sheet',\n 'mobile-section-switcher--combined': combined,\n 'ds-focus-ring-inset': true,\n 'ds-interaction-fill': true,\n }}\n type=\"button\"\n aria-haspopup={this.presentation === 'sheet' ? 'dialog' : 'menu'}\n aria-controls={this.menuId}\n aria-expanded={String(this.menuOpen)}\n aria-label={this.triggerAriaLabel}\n onClick={this.toggleMenu}\n >\n {this.presentation === 'menu' ? (\n <span\n class={{\n 'mobile-section-switcher__position': true,\n 'mobile-section-switcher__position--visible': this.hasPrevious,\n 'ds-interaction-fill__content': true,\n }}\n aria-hidden=\"true\"\n />\n ) : null}\n {combined\n ? [\n <ds-text\n class=\"mobile-section-switcher__page-label ds-interaction-fill__content\"\n as=\"span\"\n variant=\"text-body-large\"\n emphasis\n color=\"inherit\"\n lineTruncation={1}\n >\n {this.pageLabel}\n </ds-text>,\n <ds-text\n class=\"mobile-section-switcher__separator ds-interaction-fill__content\"\n as=\"span\"\n variant=\"text-body-large\"\n color=\"inherit\"\n aria-hidden=\"true\"\n >\n ·\n </ds-text>,\n ]\n : null}\n <ds-text\n class=\"mobile-section-switcher__label ds-interaction-fill__content\"\n as=\"span\"\n variant={this.presentation === 'sheet' ? 'text-body-large' : 'text-body-medium'}\n emphasis\n color=\"inherit\"\n lineTruncation={1}\n >\n {selected.label}\n </ds-text>\n {this.presentation === 'menu' ? (\n <span\n class={{\n 'mobile-section-switcher__position': true,\n 'mobile-section-switcher__position--visible': this.hasNext,\n 'ds-interaction-fill__content': true,\n }}\n aria-hidden=\"true\"\n />\n ) : null}\n </button>\n\n {this.presentation === 'sheet' || this.sheetClosing ? (\n this.renderSheet()\n ) : this.selectableSections.length > 1 ? (\n <ds-menu\n id={this.menuId}\n anchorId={this.triggerId}\n align=\"center\"\n menuLabel={this.navigationLabel}\n open={this.menuOpen}\n initialFocusVisible={this.initialFocusVisible}\n sections={this.menuSections}\n onDsClose={this.closeMenu}\n onDsAfterClose={() => {\n if (!this.menuOpen) this.menuSurfaceOpen = false;\n }}\n onDsSelect={this.handleSelect}\n />\n ) : null}\n </Host>\n );\n }\n}\n"],"mappings":"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","ignoreList":[]}