@ds-mo/ui 14.21.0 → 14.22.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.
Files changed (152) hide show
  1. package/dist/.package-ready.json +1 -1
  2. package/dist/agent-patterns.json +8 -4
  3. package/dist/agent.json +62 -12
  4. package/dist/angular/ds-bar-title.d.ts +1 -1
  5. package/dist/angular/ds-bar-title.js +3 -3
  6. package/dist/angular/ds-panel-nav.d.ts +7 -1
  7. package/dist/angular/ds-panel-nav.js +7 -4
  8. package/dist/angular/ds-shell-app.d.ts +7 -1
  9. package/dist/angular/ds-shell-app.js +7 -4
  10. package/dist/angular/ds-shell-page.d.ts +1 -1
  11. package/dist/angular/ds-shell-page.js +3 -3
  12. package/dist/components/ds-agent-questionnaire.js +1 -1
  13. package/dist/components/ds-agent-response.js +1 -1
  14. package/dist/components/ds-banner.js +1 -1
  15. package/dist/components/ds-bar-nav.js +1 -1
  16. package/dist/components/ds-bar-title.js +1 -1
  17. package/dist/components/ds-bar-workflow.js +1 -1
  18. package/dist/components/ds-button-unfilled.js +1 -1
  19. package/dist/components/ds-card-chart.js +1 -1
  20. package/dist/components/ds-card-overview.js +1 -1
  21. package/dist/components/ds-card-overview.js.map +1 -1
  22. package/dist/components/ds-card-setting.js +1 -1
  23. package/dist/components/ds-code-block.js +1 -1
  24. package/dist/components/ds-filter-menu.js +1 -1
  25. package/dist/components/ds-input.js +1 -1
  26. package/dist/components/ds-markdown.js +1 -1
  27. package/dist/components/ds-menu.js +1 -1
  28. package/dist/components/ds-message-actions.js +1 -1
  29. package/dist/components/ds-message-composer.js +1 -1
  30. package/dist/components/ds-message-scroller.js +1 -1
  31. package/dist/components/ds-mobile-header.js +1 -1
  32. package/dist/components/ds-mobile-section-switcher.js +1 -1
  33. package/dist/components/ds-mobile-sheet-nav.js +1 -1
  34. package/dist/components/ds-modal.js +1 -1
  35. package/dist/components/ds-pagination.js +1 -1
  36. package/dist/components/ds-panel-nav.js +1 -1
  37. package/dist/components/ds-panel-tool-header.js +1 -1
  38. package/dist/components/ds-panel-tool-search.js +1 -1
  39. package/dist/components/ds-panel-tools.js +1 -1
  40. package/dist/components/ds-select.js +1 -1
  41. package/dist/components/ds-shell-app.js +1 -1
  42. package/dist/components/ds-shell-app.js.map +1 -1
  43. package/dist/components/ds-shell-page.js +1 -1
  44. package/dist/components/ds-shell-tools.js +1 -1
  45. package/dist/components/ds-table-filter.js +1 -1
  46. package/dist/components/ds-table-group.js +1 -1
  47. package/dist/components/ds-table-saved-views.js +1 -1
  48. package/dist/components/ds-table-search.js +1 -1
  49. package/dist/components/ds-table-search.js.map +1 -1
  50. package/dist/components/ds-table-sort.js +1 -1
  51. package/dist/components/ds-table.js +1 -1
  52. package/dist/components/ds-table.js.map +1 -1
  53. package/dist/components/ds-toast.js +1 -1
  54. package/dist/components/ds-tooltip.js +1 -1
  55. package/dist/components/p--68f7nIx.js +2 -0
  56. package/dist/components/p--68f7nIx.js.map +1 -0
  57. package/dist/components/{p-CZ144LS5.js → p-0X-4KGQf.js} +2 -2
  58. package/dist/components/{p-DSy1oOnd.js → p-7MWaWl8w.js} +2 -2
  59. package/dist/components/{p-hYjmOPCI.js → p-9M0ak2q_.js} +2 -2
  60. package/dist/components/{p-pnO8tAYB.js → p-9X_p0bHr.js} +2 -2
  61. package/dist/components/p-B0OZx3JB.js +2 -0
  62. package/dist/components/p-B0OZx3JB.js.map +1 -0
  63. package/dist/components/{p-BFit8o0r.js → p-BIaHDBfP.js} +2 -2
  64. package/dist/components/{p-9ykZwPlI.js → p-CL0tECXf.js} +2 -2
  65. package/dist/components/{p-9ykZwPlI.js.map → p-CL0tECXf.js.map} +1 -1
  66. package/dist/components/{p-Bd8I2oXN.js → p-COFw_fcj.js} +2 -2
  67. package/dist/components/{p-D36EmETH.js → p-CilwchJH.js} +2 -2
  68. package/dist/components/{p-Cnsvgx1M.js → p-CrYJnDev.js} +2 -2
  69. package/dist/components/{p-_C-XRpCB.js → p-CvHrCyuz.js} +2 -2
  70. package/dist/components/p-D9wZlB_N.js +2 -0
  71. package/dist/components/p-D9wZlB_N.js.map +1 -0
  72. package/dist/components/{p-Bc_z1UwJ.js → p-DAFR4U9P.js} +2 -2
  73. package/dist/components/{p-CeKa4VbU.js → p-DXbryJHz.js} +2 -2
  74. package/dist/components/{p-CFkZSDwI.js → p-DeK_6Uym.js} +2 -2
  75. package/dist/components/{p-Dit6JmAK.js → p-DiyO47xX.js} +2 -2
  76. package/dist/components/{p-DCbKsABt.js → p-DjF2m7bf.js} +2 -2
  77. package/dist/components/{p-DCbKsABt.js.map → p-DjF2m7bf.js.map} +1 -1
  78. package/dist/components/p-DrVA5L25.js +2 -0
  79. package/dist/components/p-DrVA5L25.js.map +1 -0
  80. package/dist/components/{p-BbG7nOcz.js → p-DzVYGJJv.js} +2 -2
  81. package/dist/components/{p-B1wMpt1z.js → p-FitB53eM.js} +2 -2
  82. package/dist/components/{p-6rB0eAda.js → p-FxtgCvhA.js} +2 -2
  83. package/dist/components/{p-pxN8JGEh.js → p-nVv71P3f.js} +2 -2
  84. package/dist/docs/components.json +292 -13
  85. package/dist/lib/components/BarTitle/bar-title-types.d.ts +1 -0
  86. package/dist/lib/components/Menu/menu-placement.d.ts +13 -0
  87. package/dist/lib/components/PanelNav/panel-nav-types.d.ts +19 -0
  88. package/dist/lib/components/ShellApp/shell-app-types.d.ts +1 -0
  89. package/dist/lib/components/ShellPage/shell-page-types.d.ts +1 -0
  90. package/dist/lib/shell/index.d.ts +3 -3
  91. package/dist/lib/shell/index.js.map +2 -2
  92. package/dist/mcp-data/registry/bar-title.json +25 -4
  93. package/dist/mcp-data/registry/card-overview.json +1 -1
  94. package/dist/mcp-data/registry/menu.json +1 -1
  95. package/dist/mcp-data/registry/modal.json +1 -1
  96. package/dist/mcp-data/registry/panel-nav.json +71 -10
  97. package/dist/mcp-data/registry/registry.json +61 -11
  98. package/dist/mcp-data/registry/shell-app.json +47 -5
  99. package/dist/mcp-data/registry/shell-page.json +25 -5
  100. package/dist/mcp-data/registry/table-search.json +1 -1
  101. package/dist/mcp-data/registry/table.json +1 -1
  102. package/dist/react/ds-panel-nav.d.ts +2 -1
  103. package/dist/react/ds-panel-nav.js +1 -0
  104. package/dist/react/ds-shell-app.d.ts +2 -1
  105. package/dist/react/ds-shell-app.js +1 -0
  106. package/dist/types/components/BarTitle/BarTitle.d.ts +4 -1
  107. package/dist/types/components/BarTitle/bar-title-types.d.ts +1 -0
  108. package/dist/types/components/BarTitle/index.d.ts +1 -1
  109. package/dist/types/components/CardOverview/CardOverview.d.ts +1 -0
  110. package/dist/types/components/Menu/menu-placement.d.ts +13 -0
  111. package/dist/types/components/PanelNav/PanelNav.d.ts +29 -2
  112. package/dist/types/components/PanelNav/index.d.ts +2 -2
  113. package/dist/types/components/PanelNav/panel-nav-types.d.ts +19 -0
  114. package/dist/types/components/PanelNav/panel-nav-utils.d.ts +10 -2
  115. package/dist/types/components/ShellApp/ShellApp.d.ts +11 -1
  116. package/dist/types/components/ShellApp/shell-app-types.d.ts +1 -0
  117. package/dist/types/components/ShellPage/ShellPage.d.ts +6 -1
  118. package/dist/types/components/ShellPage/index.d.ts +1 -1
  119. package/dist/types/components/ShellPage/shell-page-types.d.ts +1 -0
  120. package/dist/types/components/Table/Table.d.ts +3 -0
  121. package/dist/types/components.d.ts +73 -8
  122. package/dist/types/shell/index.d.ts +3 -3
  123. package/dist/vue/ds-bar-title.js +1 -0
  124. package/dist/vue/ds-panel-nav.js +4 -0
  125. package/dist/vue/ds-shell-app.js +3 -0
  126. package/dist/vue/ds-shell-page.js +1 -0
  127. package/package.json +1 -1
  128. package/dist/components/p-CEnoPUn5.js +0 -2
  129. package/dist/components/p-CEnoPUn5.js.map +0 -1
  130. package/dist/components/p-Y5_MkCFn.js +0 -2
  131. package/dist/components/p-Y5_MkCFn.js.map +0 -1
  132. package/dist/components/p-YDxDyedE.js +0 -2
  133. package/dist/components/p-YDxDyedE.js.map +0 -1
  134. package/dist/components/p-rw0ZxIE4.js +0 -2
  135. package/dist/components/p-rw0ZxIE4.js.map +0 -1
  136. /package/dist/components/{p-CZ144LS5.js.map → p-0X-4KGQf.js.map} +0 -0
  137. /package/dist/components/{p-DSy1oOnd.js.map → p-7MWaWl8w.js.map} +0 -0
  138. /package/dist/components/{p-hYjmOPCI.js.map → p-9M0ak2q_.js.map} +0 -0
  139. /package/dist/components/{p-pnO8tAYB.js.map → p-9X_p0bHr.js.map} +0 -0
  140. /package/dist/components/{p-BFit8o0r.js.map → p-BIaHDBfP.js.map} +0 -0
  141. /package/dist/components/{p-Bd8I2oXN.js.map → p-COFw_fcj.js.map} +0 -0
  142. /package/dist/components/{p-D36EmETH.js.map → p-CilwchJH.js.map} +0 -0
  143. /package/dist/components/{p-Cnsvgx1M.js.map → p-CrYJnDev.js.map} +0 -0
  144. /package/dist/components/{p-_C-XRpCB.js.map → p-CvHrCyuz.js.map} +0 -0
  145. /package/dist/components/{p-Bc_z1UwJ.js.map → p-DAFR4U9P.js.map} +0 -0
  146. /package/dist/components/{p-CeKa4VbU.js.map → p-DXbryJHz.js.map} +0 -0
  147. /package/dist/components/{p-CFkZSDwI.js.map → p-DeK_6Uym.js.map} +0 -0
  148. /package/dist/components/{p-Dit6JmAK.js.map → p-DiyO47xX.js.map} +0 -0
  149. /package/dist/components/{p-BbG7nOcz.js.map → p-DzVYGJJv.js.map} +0 -0
  150. /package/dist/components/{p-B1wMpt1z.js.map → p-FitB53eM.js.map} +0 -0
  151. /package/dist/components/{p-6rB0eAda.js.map → p-FxtgCvhA.js.map} +0 -0
  152. /package/dist/components/{p-pxN8JGEh.js.map → p-nVv71P3f.js.map} +0 -0
@@ -1 +0,0 @@
1
- {"version":3,"names":["isBarTitleDivider","item","type","barTitleCss","nextBarTitleId","BarTitle","__stencil_proxyCustomElement","HTMLElement","constructor","registerHost","this","description","showBack","backAriaLabel","backLabel","breadcrumbs","breadcrumbAriaLabel","sections","value","sectionsAriaLabel","primaryAction","actions","actionsAriaLabel","variant","showDivider","sectionMenuOpen","actionMenuOpen","sectionMenuInitialFocusVisible","actionMenuInitialFocusVisible","instanceId","sectionMenuTriggerId","sectionMenuId","actionMenuTriggerId","actionMenuId","sectionTriggerEl","actionTriggerEl","toggleSectionMenu","event","detail","closeSectionMenu","handleSectionSelect","id","String","selected","selectableSections","find","section","isInactive","dsSectionChange","emit","requestAnimationFrame","focus","toggleActionMenu","closeActionMenu","handleActionSelect","primaryMatches","primaryCollapsed","action","selectableActions","candidate","isLoading","dsAction","setFocus","handleBreadcrumbSelect","length","dsBack","originalEvent","forwarded","dsBreadcrumbSelect","defaultPrevented","preventDefault","componentWillLoad","el","closest","setAttribute","handleSectionsChange","hasSectionSelector","handleActionsChange","showActionMenuTrigger","compact","dividerVisible","showCompactDivider","expandedBreadcrumbItems","label","ariaLabel","backTooltipLabel","collapse","filter","effectiveValue","some","selectedSectionLabel","sectionTriggerAriaLabel","groupsFromItems","source","map","groups","items","commit","push","sectionMenuSections","isSelected","actionMenuItem","primary","isDestructive","intent","actionMenuSections","renderSectionSelector","h","class","ref","onClick","as","emphasis","color","lineTruncation","name","size","renderActions","icon","contrast","onDsClick","side","activeFill","hasBorder","haspopup","controls","expanded","renderBreadcrumb","onDsSelect","renderBack","render","Host","key","heading","wrap","anchorId","menuLabel","open","initialFocusVisible","onDsClose","align"],"sources":["src/wc/components/BarTitle/bar-title-types.ts","src/wc/components/BarTitle/BarTitle.css?tag=ds-bar-title&encapsulation=scoped","src/wc/components/BarTitle/BarTitle.tsx"],"sourcesContent":["import type { ButtonFilledContrast, ButtonFilledIntent } from '../ButtonFilled/ButtonFilled';\n\nexport interface BarTitleSection {\n id: string;\n label: string;\n isInactive?: boolean;\n}\n\nexport interface BarTitleDivider {\n type: 'divider';\n}\n\nexport type BarTitleSectionItem = BarTitleSection | BarTitleDivider;\n\nexport interface BarTitleAction {\n id: string;\n label: string;\n isInactive?: boolean;\n isDestructive?: boolean;\n}\n\nexport interface BarTitlePrimaryAction extends BarTitleAction {\n icon?: string;\n intent?: ButtonFilledIntent;\n contrast?: ButtonFilledContrast;\n isLoading?: boolean;\n type?: 'button' | 'submit' | 'reset';\n collapse?: BarTitlePrimaryActionCollapse;\n}\n\nexport type BarTitleActionItem = BarTitleAction | BarTitleDivider;\n\nexport type BarTitleVariant = 'expanded' | 'compact' | 'constrained';\n\nexport type BarTitlePrimaryActionCollapse = 'auto' | 'never';\n\nexport function isBarTitleDivider(\n item: BarTitleSectionItem | BarTitleActionItem\n): item is BarTitleDivider {\n return 'type' in item && item.type === 'divider';\n}\n","@import '../../utils/control-density.css';\n@import '../../utils/chrome-header.css';\n@import '../../utils/focus-ring.css';\n@import '../../utils/interaction-fill.css';\n\n:host {\n display: block;\n min-width: 0;\n box-sizing: border-box;\n background: var(--_shell-page-header-background, var(--color-background-primary));\n}\n\n:host([data-shell-page-syncing]) {\n visibility: hidden;\n}\n\n.bar-title {\n position: relative;\n min-width: 0;\n box-sizing: border-box;\n background: var(--_shell-page-header-background, var(--color-background-primary));\n}\n\n.bar-title::after {\n content: '';\n position: absolute;\n inset: auto var(--ds-bar-title-divider-inset, var(--dimension-space-400)) 0;\n height: var(--dimension-stroke-width-012);\n background: var(--color-border-tertiary);\n pointer-events: none;\n}\n\n.bar-title--divider-hidden::after {\n display: none;\n}\n\n.bar-title__inner {\n position: relative;\n display: flex;\n flex-direction: column;\n align-items: stretch;\n gap: var(--dimension-space-100);\n padding: var(--dimension-space-400);\n box-sizing: border-box;\n}\n\n.bar-title__row {\n display: flex;\n align-items: flex-start;\n justify-content: space-between;\n gap: var(--dimension-space-100);\n min-height: var(--dimension-size-400);\n min-width: 0;\n}\n\n:host(.bar-title-host--expanded) .bar-title__row {\n gap: var(--dimension-space-400);\n}\n\n.bar-title__leading {\n display: flex;\n flex: 1 1 auto;\n flex-direction: column;\n gap: var(--dimension-space-100);\n min-width: 0;\n}\n\n.bar-title__title-row {\n display: flex;\n align-items: center;\n gap: var(--dimension-space-100);\n min-width: 0;\n min-height: var(--dimension-size-400);\n}\n\n.bar-title__identity {\n display: flex;\n flex: 0 1 auto;\n align-items: center;\n gap: var(--dimension-space-050);\n min-width: 0;\n}\n\n.bar-title__back,\n.bar-title__section-chevron {\n flex: 0 0 auto;\n}\n\n.bar-title__breadcrumb {\n display: block;\n width: 100%;\n min-width: 0;\n}\n\n.bar-title__heading {\n display: block;\n width: auto;\n min-width: 0;\n user-select: none;\n}\n\n.bar-title__divider {\n width: var(--dimension-stroke-width-012);\n height: var(--dimension-size-250);\n margin-inline-start: var(--dimension-space-100);\n flex: 0 0 var(--dimension-stroke-width-012);\n background: var(--color-border-tertiary);\n}\n\n.bar-title__section-selector {\n display: flex;\n flex: 0 1 auto;\n min-width: 0;\n max-width: var(--dimension-panel-width-sm);\n}\n\n.bar-title__section-trigger {\n --ds-control-radius: var(--dimension-radius-half);\n\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: var(--ds-control-gap);\n height: var(--ds-control-height);\n min-width: 0;\n max-width: 100%;\n padding-inline: var(--ds-control-padding-inline);\n border: none;\n border-radius: var(--ds-control-radius);\n box-sizing: border-box;\n background: transparent;\n color: var(--color-foreground-secondary);\n cursor: default;\n font-family: inherit;\n user-select: none;\n}\n\n.bar-title__section-trigger--expanded {\n color: var(--color-foreground-primary);\n --ds-interaction-hover: var(--ds-interaction-pressed);\n}\n\n.bar-title__section-trigger--expanded::after {\n background: var(--ds-interaction-pressed);\n}\n\n.bar-title__section-label {\n min-width: 0;\n padding-inline: var(--ds-control-label-inset);\n}\n\n.bar-title__actions {\n display: flex;\n align-items: center;\n gap: var(--dimension-space-100);\n flex: 0 0 auto;\n}\n\n.bar-title__description {\n display: block;\n min-width: 0;\n max-width: 100%;\n}\n\n:host(.bar-title-host--compact) .bar-title {\n height: var(--dimension-size-600);\n}\n\n:host(.bar-title-host--compact) .bar-title::after {\n inset-inline: 0;\n}\n\n:host(.bar-title-host--compact) .bar-title__inner {\n flex: 1 1 auto;\n height: 100%;\n min-width: 0;\n padding: 0;\n gap: 0;\n}\n\n:host(.bar-title-host--compact) .bar-title__row {\n height: 100%;\n align-items: center;\n}\n\n:host(.bar-title-host--compact) .bar-title__identity {\n height: var(--dimension-size-400);\n}\n\n:host(.bar-title-host--compact) .bar-title__divider {\n margin-inline-start: 0;\n}\n\n:host(.bar-title-host--compact) .bar-title__heading {\n display: inline-flex;\n flex: 1 1 auto;\n align-items: center;\n height: var(--dimension-size-400);\n padding-inline: calc(var(--ds-control-padding-inline) + var(--ds-control-label-inset));\n box-sizing: border-box;\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 { BreadcrumbItem, BreadcrumbSelectDetail } from '../Breadcrumb/breadcrumb-types';\nimport type { MenuItemData, MenuSection } from '../Menu/menu-types';\nimport {\n isBarTitleDivider,\n type BarTitleAction,\n type BarTitleActionItem,\n type BarTitlePrimaryAction,\n type BarTitleSection,\n type BarTitleSectionItem,\n type BarTitleVariant,\n} from './bar-title-types';\n\nlet nextBarTitleId = 0;\n\ntype FocusableButton = HTMLElement & { setFocus?: () => Promise<void> };\n\n@Component({\n tag: 'ds-bar-title',\n styleUrl: 'BarTitle.css',\n scoped: true,\n})\nexport class BarTitle {\n @Element() el!: HTMLElement;\n\n /** The page's single visible h1. */\n @Prop() heading!: string;\n\n /** Optional supporting copy shown in the expanded presentation. */\n @Prop() description: string = '';\n\n /** Show the leading page-level Back action. */\n @Prop({ attribute: 'show-back' }) showBack: boolean = false;\n\n /** Accessible name for the leading Back action. */\n @Prop() backAriaLabel: string = 'Back';\n\n /** Visible parent-page label used by the expanded breadcrumb when breadcrumbs is empty. */\n @Prop() backLabel: string = 'Back';\n\n /** Optional expanded ancestor path. Compact variants continue to use the Back action. */\n @Prop() breadcrumbs: BreadcrumbItem[] = [];\n\n /** Accessible name for the expanded breadcrumb navigation landmark. */\n @Prop() breadcrumbAriaLabel: string = 'Breadcrumb';\n\n /** Optional page sections exposed through the active-section menu. */\n @Prop() sections: BarTitleSectionItem[] = [];\n\n /** Id of the active page section. */\n @Prop() value: string = '';\n\n /** Accessible name for the page-section menu. */\n @Prop() sectionsAriaLabel: string = 'Change page section';\n\n /** The one highest-emphasis page action. */\n @Prop() primaryAction: BarTitlePrimaryAction | null = null;\n\n /** Secondary page actions shown in the overflow menu. Dividers create groups. */\n @Prop() actions: BarTitleActionItem[] = [];\n\n /** Accessible name for the page-actions menu. */\n @Prop() actionsAriaLabel: string = 'More page actions';\n\n /** Explicit visual/capacity variant. ShellPage owns automatic selection. */\n @Prop() variant: BarTitleVariant = 'expanded';\n\n /** Draw the page-title divider beneath the header. */\n @Prop() showDivider: boolean = true;\n\n /** Override divider visibility for compact and constrained variants. */\n @Prop() showCompactDivider?: boolean;\n\n /** Emitted when the leading Back action is activated. */\n @Event() dsBack!: EventEmitter<MouseEvent>;\n\n /** Emitted when an authored expanded breadcrumb item is activated. */\n @Event({ cancelable: true }) dsBreadcrumbSelect!: EventEmitter<BreadcrumbSelectDetail>;\n\n /** Emitted with the newly selected page-section id. */\n @Event() dsSectionChange!: EventEmitter<string>;\n\n /** Emitted with the activated primary or overflow action id. */\n @Event() dsAction!: EventEmitter<string>;\n\n @State() private sectionMenuOpen = false;\n @State() private actionMenuOpen = false;\n @State() private sectionMenuInitialFocusVisible = false;\n @State() private actionMenuInitialFocusVisible = false;\n\n private readonly instanceId = nextBarTitleId++;\n private readonly sectionMenuTriggerId = `bar-title-section-trigger-${this.instanceId}`;\n private readonly sectionMenuId = `bar-title-section-menu-${this.instanceId}`;\n private readonly actionMenuTriggerId = `bar-title-action-trigger-${this.instanceId}`;\n private readonly actionMenuId = `bar-title-action-menu-${this.instanceId}`;\n private sectionTriggerEl: HTMLButtonElement | null = null;\n private actionTriggerEl: FocusableButton | null = null;\n\n componentWillLoad() {\n if (this.el.closest('ds-shell-page')) {\n this.el.setAttribute('data-shell-page-syncing', '');\n }\n }\n\n @Watch('sections')\n handleSectionsChange() {\n if (!this.hasSectionSelector) this.closeSectionMenu();\n }\n\n @Watch('actions')\n @Watch('primaryAction')\n handleActionsChange() {\n if (!this.showActionMenuTrigger) this.closeActionMenu();\n }\n\n private get compact(): boolean {\n return this.variant !== 'expanded';\n }\n\n private get dividerVisible(): boolean {\n return this.compact ? (this.showCompactDivider ?? this.showDivider) : this.showDivider;\n }\n\n private get expandedBreadcrumbItems(): BreadcrumbItem[] {\n if (this.breadcrumbs.length > 0) return this.breadcrumbs;\n if (!this.showBack) return [];\n return [\n {\n id: 'back',\n label: this.backLabel,\n ariaLabel: this.backAriaLabel,\n },\n ];\n }\n\n /** Tooltip copy is fixed and generic; backAriaLabel/actionsAriaLabel stay page-specific. */\n private get backTooltipLabel(): string {\n return 'Go back';\n }\n\n private get primaryCollapsed(): boolean {\n return (\n this.variant === 'constrained' &&\n this.primaryAction !== null &&\n (this.primaryAction.collapse ?? 'auto') === 'auto'\n );\n }\n\n private get selectableSections(): BarTitleSection[] {\n return this.sections.filter((item): item is BarTitleSection => !isBarTitleDivider(item));\n }\n\n private get hasSectionSelector(): boolean {\n return this.selectableSections.length > 1;\n }\n\n private get effectiveValue(): string {\n return this.selectableSections.some(section => section.id === this.value)\n ? this.value\n : (this.selectableSections[0]?.id ?? '');\n }\n\n private get selectedSectionLabel(): string {\n return this.selectableSections.find(section => section.id === this.effectiveValue)?.label ?? '';\n }\n\n private get sectionTriggerAriaLabel(): string {\n return `${this.sectionsAriaLabel}. Current section: ${this.selectedSectionLabel}`;\n }\n\n private groupsFromItems<T extends BarTitleSection | BarTitleAction>(\n source: Array<T | { type: 'divider' }>,\n map: (item: T) => MenuItemData\n ): MenuSection[] {\n const groups: MenuSection[] = [];\n let items: MenuItemData[] = [];\n const commit = () => {\n if (items.length > 0) groups.push({ items });\n items = [];\n };\n\n for (const item of source) {\n if (isBarTitleDivider(item)) {\n commit();\n } else {\n items.push(map(item));\n }\n }\n commit();\n return groups;\n }\n\n private get sectionMenuSections(): MenuSection[] {\n return this.groupsFromItems(this.sections, section => ({\n label: section.label,\n value: section.id,\n isSelected: section.id === this.effectiveValue,\n isInactive: section.isInactive,\n }));\n }\n\n private get selectableActions(): BarTitleAction[] {\n return this.actions.filter((item): item is BarTitleAction => !isBarTitleDivider(item));\n }\n\n private get showActionMenuTrigger(): boolean {\n return (\n this.selectableActions.length > 0 || (this.primaryCollapsed && this.primaryAction !== null)\n );\n }\n\n private actionMenuItem(action: BarTitleAction | BarTitlePrimaryAction): MenuItemData {\n const primary = action as BarTitlePrimaryAction;\n return {\n label: action.label,\n value: action.id,\n isInactive: action.isInactive || primary.isLoading,\n isDestructive: action.isDestructive || primary.intent === 'negative',\n };\n }\n\n private get actionMenuSections(): MenuSection[] {\n const groups = this.groupsFromItems(this.actions, action => this.actionMenuItem(action));\n if (!this.primaryCollapsed || !this.primaryAction) return groups;\n return [{ items: [this.actionMenuItem(this.primaryAction)] }, ...groups];\n }\n\n private toggleSectionMenu = (event: MouseEvent) => {\n this.sectionMenuInitialFocusVisible = event.detail === 0;\n this.actionMenuOpen = false;\n this.sectionMenuOpen = !this.sectionMenuOpen;\n };\n\n private closeSectionMenu = () => {\n this.sectionMenuOpen = false;\n };\n\n private handleSectionSelect = (event: CustomEvent<MenuItemData>) => {\n const id = String(event.detail?.value ?? '');\n const selected = this.selectableSections.find(section => section.id === id);\n if (!selected || selected.isInactive) return;\n this.closeSectionMenu();\n this.dsSectionChange.emit(id);\n requestAnimationFrame(() => this.sectionTriggerEl?.focus());\n };\n\n private toggleActionMenu = (event: MouseEvent) => {\n this.actionMenuInitialFocusVisible = event.detail === 0;\n this.sectionMenuOpen = false;\n this.actionMenuOpen = !this.actionMenuOpen;\n };\n\n private closeActionMenu = () => {\n this.actionMenuOpen = false;\n };\n\n private handleActionSelect = (event: CustomEvent<MenuItemData>) => {\n const id = String(event.detail?.value ?? '');\n const primaryMatches = this.primaryCollapsed && this.primaryAction?.id === id;\n const action = this.selectableActions.find(candidate => candidate.id === id);\n if (!primaryMatches && !action) return;\n if (\n (primaryMatches && (this.primaryAction?.isInactive || this.primaryAction?.isLoading)) ||\n action?.isInactive\n ) {\n return;\n }\n this.closeActionMenu();\n this.dsAction.emit(id);\n requestAnimationFrame(() => void this.actionTriggerEl?.setFocus?.());\n };\n\n private renderSectionSelector() {\n if (!this.hasSectionSelector) return null;\n return [\n <div class=\"bar-title__divider\" aria-hidden=\"true\" />,\n <div class=\"bar-title__section-selector\">\n <button\n ref={el => {\n this.sectionTriggerEl = el ?? null;\n }}\n id={this.sectionMenuTriggerId}\n class={{\n 'bar-title__section-trigger': true,\n 'bar-title__section-trigger--expanded': this.sectionMenuOpen,\n 'ds-control--md': true,\n 'ds-focus-ring-inset': true,\n 'ds-interaction-fill': true,\n }}\n type=\"button\"\n aria-haspopup=\"menu\"\n aria-controls={this.sectionMenuId}\n aria-expanded={String(this.sectionMenuOpen)}\n aria-label={this.sectionTriggerAriaLabel}\n onClick={this.toggleSectionMenu}\n >\n <ds-text\n class=\"bar-title__section-label ds-interaction-fill__content\"\n as=\"span\"\n variant=\"text-body-medium\"\n emphasis\n color=\"primary\"\n lineTruncation={1}\n >\n {this.selectedSectionLabel}\n </ds-text>\n <ds-icon\n class=\"bar-title__section-chevron ds-interaction-fill__content\"\n name=\"ChevronUpDown\"\n size=\"md\"\n color=\"inherit\"\n aria-hidden=\"true\"\n />\n </button>\n </div>,\n ];\n }\n\n private renderActions() {\n const primary = this.primaryAction;\n if (!primary && !this.showActionMenuTrigger) return null;\n\n return (\n <div class=\"bar-title__actions\">\n {primary && !this.primaryCollapsed ? (\n <ds-button-filled\n class=\"bar-title__primary-action\"\n variant={primary.icon ? 'icon-label' : 'label'}\n icon={primary.icon ?? ''}\n label={primary.label}\n intent={primary.intent ?? 'brand'}\n contrast={primary.contrast ?? 'bold'}\n size=\"md\"\n type={primary.type ?? 'button'}\n isInactive={primary.isInactive}\n isLoading={primary.isLoading}\n onDsClick={() => this.dsAction.emit(primary.id)}\n />\n ) : null}\n {this.showActionMenuTrigger ? (\n <ds-tooltip label=\"Page options\" side=\"bottom\" size=\"sm\">\n <ds-button-unfilled\n ref={el => {\n this.actionTriggerEl = el ?? null;\n }}\n id={this.actionMenuTriggerId}\n class=\"bar-title__more-actions\"\n variant=\"icon\"\n icon=\"Ellipses\"\n aria-label={this.actionsAriaLabel}\n size=\"md\"\n activeFill={!this.compact}\n hasBorder={primary !== null && !this.primaryCollapsed}\n haspopup=\"menu\"\n controls={this.actionMenuId}\n expanded={this.actionMenuOpen}\n onDsClick={(event: CustomEvent<MouseEvent>) => this.toggleActionMenu(event.detail)}\n />\n </ds-tooltip>\n ) : null}\n </div>\n );\n }\n\n private handleBreadcrumbSelect = (event: CustomEvent<BreadcrumbSelectDetail>) => {\n if (this.breadcrumbs.length === 0) {\n this.dsBack.emit(event.detail.originalEvent);\n return;\n }\n const forwarded = this.dsBreadcrumbSelect.emit(event.detail);\n if (forwarded.defaultPrevented) event.preventDefault();\n };\n\n private renderBreadcrumb() {\n const items = this.expandedBreadcrumbItems;\n if (items.length === 0) return null;\n return (\n <ds-breadcrumb\n class=\"bar-title__breadcrumb\"\n items={items}\n ariaLabel={this.breadcrumbAriaLabel}\n onDsSelect={this.handleBreadcrumbSelect}\n />\n );\n }\n\n private renderBack() {\n if (!this.showBack) return null;\n return (\n <ds-tooltip label={this.backTooltipLabel} side=\"bottom\" size=\"sm\">\n <ds-button-unfilled\n class=\"bar-title__back\"\n variant=\"icon\"\n icon=\"ChevronLeft\"\n aria-label={this.backAriaLabel}\n size=\"md\"\n activeFill={false}\n hasBorder={false}\n onDsClick={(event: CustomEvent<MouseEvent>) => this.dsBack.emit(event.detail)}\n />\n </ds-tooltip>\n );\n }\n\n render() {\n const compact = this.compact;\n return (\n <Host\n class={{\n 'bar-title-host--compact': compact,\n 'bar-title-host--expanded': this.variant === 'expanded',\n 'bar-title-host--constrained': this.variant === 'constrained',\n 'bar-title-host--has-description': !!this.description,\n 'bar-title-host--has-back': this.showBack,\n 'bar-title-host--has-breadcrumb': !compact && this.expandedBreadcrumbItems.length > 0,\n }}\n >\n <div\n class={{\n 'bar-title': true,\n 'bar-title--divider-hidden': !this.dividerVisible,\n 'ds-chrome-header': compact,\n }}\n >\n <div class=\"bar-title__inner\">\n {!compact ? this.renderBreadcrumb() : null}\n <div class=\"bar-title__row\">\n <div class=\"bar-title__leading\">\n <div class=\"bar-title__title-row\" data-shell-page-header-anchor>\n <div class=\"bar-title__identity\">\n {compact ? this.renderBack() : null}\n <ds-text\n class=\"bar-title__heading ds-control--md\"\n variant={compact ? 'text-title-small' : 'text-title-medium'}\n emphasis\n color=\"primary\"\n as=\"h1\"\n lineTruncation={1}\n >\n {this.heading}\n </ds-text>\n </div>\n {this.renderSectionSelector()}\n </div>\n {this.description && !compact ? (\n <ds-text\n class=\"bar-title__description\"\n variant=\"text-body-small\"\n color=\"secondary\"\n lineTruncation={2}\n wrap=\"wrap\"\n as=\"p\"\n >\n {this.description}\n </ds-text>\n ) : null}\n </div>\n {this.renderActions()}\n </div>\n </div>\n </div>\n\n {this.hasSectionSelector ? (\n <ds-menu\n id={this.sectionMenuId}\n class=\"bar-title__section-menu\"\n anchorId={this.sectionMenuTriggerId}\n menuLabel={this.sectionsAriaLabel}\n open={this.sectionMenuOpen}\n initialFocusVisible={this.sectionMenuInitialFocusVisible}\n sections={this.sectionMenuSections}\n onDsClose={this.closeSectionMenu}\n onDsSelect={this.handleSectionSelect}\n />\n ) : null}\n\n {this.showActionMenuTrigger ? (\n <ds-menu\n id={this.actionMenuId}\n class=\"bar-title__action-menu\"\n anchorId={this.actionMenuTriggerId}\n align=\"end\"\n menuLabel={this.actionsAriaLabel}\n open={this.actionMenuOpen}\n initialFocusVisible={this.actionMenuInitialFocusVisible}\n sections={this.actionMenuSections}\n onDsClose={this.closeActionMenu}\n onDsSelect={this.handleActionSelect}\n />\n ) : null}\n </Host>\n );\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1,2 +0,0 @@
1
- import{p as n}from"./p-CUL5_8JM.js";function r(n,r){return n===r||n.startsWith(`${r}/`)}function t(n,t){if(!n)return"";let u="";let e=0;for(const f of t){if(!f.href)continue;if(r(n,f.href)&&f.href.length>e){u=f.id;e=f.href.length}}return u}function u(n){return n.reduce(((n,r)=>n+r.items.length),0)}function e(n,r){return r?null:!n}function f(r){return r.split(",").map((r=>n(r.trim(),0)))}function i(n){const r=n.transitionProperty.split(",").map((n=>n.trim()));const t=f(n.transitionDuration);const u=f(n.transitionDelay);return r.reduce(((n,r,e)=>{if(r!=="all"&&r!=="width"&&r!=="min-width")return n;const f=t[e%t.length]??0;const i=u[e%u.length]??0;return Math.max(n,f+i,0)}),0)}function o(n){if(Array.isArray(n))return n;if(typeof n==="string"){try{const r=JSON.parse(n);return Array.isArray(r)?r:[]}catch{return[]}}return[]}function c(n,r){if(n)return true;if(r===null)return false;return r!=="false"}function s(n,r){return u(n)===0&&u(o(r))>0}export{i as a,e as b,t as d,o as p,c as r,s};
2
- //# sourceMappingURL=p-rw0ZxIE4.js.map
@@ -1 +0,0 @@
1
- {"version":3,"names":["hrefMatchesPath","path","href","startsWith","deriveActiveIdFromUrl","items","bestId","bestLen","item","length","id","countPanelNavItems","groups","reduce","sum","g","resolvePanelNavToggle","collapsed","viewportNarrow","parseCssTimeList","value","split","map","parseCssTimeMs","trim","panelNavWidthTransitionMs","style","properties","transitionProperty","durations","transitionDuration","delays","transitionDelay","max","property","index","duration","delay","Math","parsePanelNavGroups","Array","isArray","parsed","JSON","parse","resolvePanelNavDisableVt","prop","attr","shouldResyncPanelNavGroups","parsedGroups"],"sources":["src/wc/components/PanelNav/panel-nav-utils.ts"],"sourcesContent":["import type { PanelNavGroup, PanelNavItem } from './panel-nav-types';\nimport { parseCssTimeMs } from '../../utils/resolve-css-time-ms';\nimport {\n NAV_STYLE_HINT_ATTR,\n clearNavStyleHint,\n readNavStyleAttr,\n resolveNavChromeStyle,\n setNavStyleHint,\n shouldResyncNavChromeStyle,\n} from '../../shell/nav-chrome';\n\nexport type { NavChromeStyle } from '../../shell/nav-chrome';\nexport {\n NAV_STYLE_HINT_ATTR,\n readNavStyleAttr,\n setNavStyleHint,\n clearNavStyleHint,\n resolveNavChromeStyle as resolvePanelNavStyle,\n shouldResyncNavChromeStyle as shouldResyncPanelNavStyle,\n};\n\n/** Whether `path` matches `href` at a segment boundary (exact or child path). */\nexport function hrefMatchesPath(path: string, href: string): boolean {\n return path === href || path.startsWith(`${href}/`);\n}\n\n/** Derive the active nav item id from a URL using longest segment-boundary prefix match. */\nexport function deriveActiveIdFromUrl(path: string, items: PanelNavItem[]): string {\n if (!path) return '';\n\n let bestId = '';\n let bestLen = 0;\n\n for (const item of items) {\n if (!item.href) continue;\n if (hrefMatchesPath(path, item.href) && item.href.length > bestLen) {\n bestId = item.id;\n bestLen = item.href.length;\n }\n }\n\n return bestId;\n}\n\n/** Total nav item count across all groups. */\nexport function countPanelNavItems(groups: PanelNavGroup[]): number {\n return groups.reduce((sum, g) => sum + g.items.length, 0);\n}\n\n/** Resolve a user toggle without mutating the persisted desktop preference while breakpoint-locked. */\nexport function resolvePanelNavToggle(collapsed: boolean, viewportNarrow: boolean): boolean | null {\n return viewportNarrow ? null : !collapsed;\n}\n\nexport interface PanelNavTransitionStyle {\n transitionProperty: string;\n transitionDuration: string;\n transitionDelay: string;\n}\n\nfunction parseCssTimeList(value: string): number[] {\n return value.split(',').map(item => parseCssTimeMs(item.trim(), 0));\n}\n\n/**\n * Maximum computed time for PanelNav's width transition. CSS repeats shorter\n * duration/delay lists to match the property list, so mirror that behavior.\n */\nexport function panelNavWidthTransitionMs(style: PanelNavTransitionStyle): number {\n const properties = style.transitionProperty.split(',').map(item => item.trim());\n const durations = parseCssTimeList(style.transitionDuration);\n const delays = parseCssTimeList(style.transitionDelay);\n\n return properties.reduce((max, property, index) => {\n if (property !== 'all' && property !== 'width' && property !== 'min-width') return max;\n const duration = durations[index % durations.length] ?? 0;\n const delay = delays[index % delays.length] ?? 0;\n return Math.max(max, duration + delay, 0);\n }, 0);\n}\n\n/** Parse `groups` from either a JSON attribute string or a JS property array. */\nexport function parsePanelNavGroups(groups: string | unknown): PanelNavGroup[] {\n if (Array.isArray(groups)) return groups;\n if (typeof groups === 'string') {\n try {\n const parsed = JSON.parse(groups);\n return Array.isArray(parsed) ? parsed : [];\n } catch {\n return [];\n }\n }\n return [];\n}\n\n/** Resolve whether VT is disabled from prop and/or host attribute. */\nexport function resolvePanelNavDisableVt(prop: boolean, attr: string | null): boolean {\n if (prop) return true;\n if (attr === null) return false;\n return attr !== 'false';\n}\n\n/** True when host `groups` has items but internal parsed state is still empty. */\nexport function shouldResyncPanelNavGroups(\n parsedGroups: PanelNavGroup[],\n groups: string | unknown\n): boolean {\n return (\n countPanelNavItems(parsedGroups) === 0 && countPanelNavItems(parsePanelNavGroups(groups)) > 0\n );\n}\n"],"mappings":"oCAsBM,SAAUA,EAAgBC,EAAcC,GAC5C,OAAOD,IAASC,GAAQD,EAAKE,WAAW,GAAGD,KAC7C,CAGM,SAAUE,EAAsBH,EAAcI,GAClD,IAAKJ,EAAM,MAAO,GAElB,IAAIK,EAAS,GACb,IAAIC,EAAU,EAEd,IAAK,MAAMC,KAAQH,EAAO,CACxB,IAAKG,EAAKN,KAAM,SAChB,GAAIF,EAAgBC,EAAMO,EAAKN,OAASM,EAAKN,KAAKO,OAASF,EAAS,CAClED,EAASE,EAAKE,GACdH,EAAUC,EAAKN,KAAKO,M,EAIxB,OAAOH,CACT,CAGM,SAAUK,EAAmBC,GACjC,OAAOA,EAAOC,QAAO,CAACC,EAAKC,IAAMD,EAAMC,EAAEV,MAAMI,QAAQ,EACzD,CAGM,SAAUO,EAAsBC,EAAoBC,GACxD,OAAOA,EAAiB,MAAQD,CAClC,CAQA,SAASE,EAAiBC,GACxB,OAAOA,EAAMC,MAAM,KAAKC,KAAId,GAAQe,EAAef,EAAKgB,OAAQ,IAClE,CAMM,SAAUC,EAA0BC,GACxC,MAAMC,EAAaD,EAAME,mBAAmBP,MAAM,KAAKC,KAAId,GAAQA,EAAKgB,SACxE,MAAMK,EAAYV,EAAiBO,EAAMI,oBACzC,MAAMC,EAASZ,EAAiBO,EAAMM,iBAEtC,OAAOL,EAAWd,QAAO,CAACoB,EAAKC,EAAUC,KACvC,GAAID,IAAa,OAASA,IAAa,SAAWA,IAAa,YAAa,OAAOD,EACnF,MAAMG,EAAWP,EAAUM,EAAQN,EAAUpB,SAAW,EACxD,MAAM4B,EAAQN,EAAOI,EAAQJ,EAAOtB,SAAW,EAC/C,OAAO6B,KAAKL,IAAIA,EAAKG,EAAWC,EAAO,EAAE,GACxC,EACL,CAGM,SAAUE,EAAoB3B,GAClC,GAAI4B,MAAMC,QAAQ7B,GAAS,OAAOA,EAClC,UAAWA,IAAW,SAAU,CAC9B,IACE,MAAM8B,EAASC,KAAKC,MAAMhC,GAC1B,OAAO4B,MAAMC,QAAQC,GAAUA,EAAS,E,CACxC,MACA,MAAO,E,EAGX,MAAO,EACT,CAGM,SAAUG,EAAyBC,EAAeC,GACtD,GAAID,EAAM,OAAO,KACjB,GAAIC,IAAS,KAAM,OAAO,MAC1B,OAAOA,IAAS,OAClB,CAGM,SAAUC,EACdC,EACArC,GAEA,OACED,EAAmBsC,KAAkB,GAAKtC,EAAmB4B,EAAoB3B,IAAW,CAEhG,Q","ignoreList":[]}