@ds-mo/ui 14.31.2 → 14.32.0

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 (291) hide show
  1. package/dist/.package-ready.json +1 -1
  2. package/dist/agent-patterns.json +15 -5
  3. package/dist/agent.json +229 -23
  4. package/dist/angular/ds-bar-page-title.d.ts +28 -0
  5. package/dist/angular/ds-bar-page-title.js +48 -0
  6. package/dist/angular/ds-card-settings-scope.d.ts +1 -1
  7. package/dist/angular/ds-card-settings-scope.js +3 -3
  8. package/dist/angular/index.d.ts +1 -1
  9. package/dist/angular/index.js +1 -0
  10. package/dist/angular/proxies.d.ts +1 -0
  11. package/dist/angular/proxies.js +1 -0
  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-avatar.js +1 -1
  15. package/dist/components/ds-avatar.js.map +1 -1
  16. package/dist/components/ds-banner.js +1 -1
  17. package/dist/components/ds-banner.js.map +1 -1
  18. package/dist/components/ds-bar-action.js +1 -1
  19. package/dist/components/ds-bar-action.js.map +1 -1
  20. package/dist/components/ds-bar-nav.js +1 -1
  21. package/dist/components/ds-bar-page-title.d.ts +11 -0
  22. package/dist/components/ds-bar-page-title.js +2 -0
  23. package/dist/components/ds-bar-page-title.js.map +1 -0
  24. package/dist/components/ds-bar-title.js +1 -1
  25. package/dist/components/ds-bar-workflow.js +1 -1
  26. package/dist/components/ds-bar-workflow.js.map +1 -1
  27. package/dist/components/ds-button-filled.js +1 -1
  28. package/dist/components/ds-button-unfilled.js +1 -1
  29. package/dist/components/ds-card-chart.js +1 -1
  30. package/dist/components/ds-card-chart.js.map +1 -1
  31. package/dist/components/ds-card-navigation.js +1 -1
  32. package/dist/components/ds-card-navigation.js.map +1 -1
  33. package/dist/components/ds-card-overview.js +1 -1
  34. package/dist/components/ds-card-overview.js.map +1 -1
  35. package/dist/components/ds-card-setting.js +1 -1
  36. package/dist/components/ds-card-setting.js.map +1 -1
  37. package/dist/components/ds-card-settings-scope.js +1 -1
  38. package/dist/components/ds-card-settings-scope.js.map +1 -1
  39. package/dist/components/ds-chart-legend.js +1 -1
  40. package/dist/components/ds-chart-legend.js.map +1 -1
  41. package/dist/components/ds-chart.js +1 -1
  42. package/dist/components/ds-checkbox.js +1 -1
  43. package/dist/components/ds-chip.js +1 -1
  44. package/dist/components/ds-code-block.js +1 -1
  45. package/dist/components/ds-conversation-list-item.js +1 -1
  46. package/dist/components/ds-conversation-list-item.js.map +1 -1
  47. package/dist/components/ds-conversation-list-section.js +1 -1
  48. package/dist/components/ds-empty-state.js +1 -1
  49. package/dist/components/ds-field.js +1 -1
  50. package/dist/components/ds-filter-menu.js +1 -1
  51. package/dist/components/ds-input.js +1 -1
  52. package/dist/components/ds-markdown.js +1 -1
  53. package/dist/components/ds-menu.js +1 -1
  54. package/dist/components/ds-message-actions.js +1 -1
  55. package/dist/components/ds-message-composer.js +1 -1
  56. package/dist/components/ds-message-scroller.js +1 -1
  57. package/dist/components/ds-message.js +1 -1
  58. package/dist/components/ds-mobile-bar-nav.js +1 -1
  59. package/dist/components/ds-mobile-header.js +1 -1
  60. package/dist/components/ds-mobile-section-switcher.js +1 -1
  61. package/dist/components/ds-mobile-sheet-nav.js +1 -1
  62. package/dist/components/ds-modal.js +1 -1
  63. package/dist/components/ds-pagination.js +1 -1
  64. package/dist/components/ds-panel-nav.js +1 -1
  65. package/dist/components/ds-panel-sub-nav.js +1 -1
  66. package/dist/components/ds-panel-sub-nav.js.map +1 -1
  67. package/dist/components/ds-panel-tool-header.js +1 -1
  68. package/dist/components/ds-panel-tool-search.js +1 -1
  69. package/dist/components/ds-panel-tool-search.js.map +1 -1
  70. package/dist/components/ds-panel-tools.js +1 -1
  71. package/dist/components/ds-paper-texture.js +1 -1
  72. package/dist/components/ds-radio.js +1 -1
  73. package/dist/components/ds-score.js +1 -1
  74. package/dist/components/ds-select.js +1 -1
  75. package/dist/components/ds-shell-app.js +1 -1
  76. package/dist/components/ds-shell-app.js.map +1 -1
  77. package/dist/components/ds-shell-page.js +1 -1
  78. package/dist/components/ds-shell-tools.js +1 -1
  79. package/dist/components/ds-skeleton.js +1 -1
  80. package/dist/components/ds-swatch-picker.js +1 -1
  81. package/dist/components/ds-tab-group.js +1 -1
  82. package/dist/components/ds-table-filter.js +1 -1
  83. package/dist/components/ds-table-group.js +1 -1
  84. package/dist/components/ds-table-group.js.map +1 -1
  85. package/dist/components/ds-table-saved-views.js +1 -1
  86. package/dist/components/ds-table-search.js +1 -1
  87. package/dist/components/ds-table-search.js.map +1 -1
  88. package/dist/components/ds-table-sort.js +1 -1
  89. package/dist/components/ds-table-toolbar.js +1 -1
  90. package/dist/components/ds-table.js +1 -1
  91. package/dist/components/ds-table.js.map +1 -1
  92. package/dist/components/ds-tag.js +1 -1
  93. package/dist/components/ds-textarea.js +1 -1
  94. package/dist/components/ds-textarea.js.map +1 -1
  95. package/dist/components/ds-toast.js +1 -1
  96. package/dist/components/ds-toast.js.map +1 -1
  97. package/dist/components/ds-tooltip-chart.js +1 -1
  98. package/dist/components/ds-tooltip.js +1 -1
  99. package/dist/components/ds-typing-indicator.js +1 -1
  100. package/dist/components/p--VKxPUoV.js +2 -0
  101. package/dist/components/p--VKxPUoV.js.map +1 -0
  102. package/dist/components/p-14sMoeTr.js +2 -0
  103. package/dist/components/p-14sMoeTr.js.map +1 -0
  104. package/dist/components/p-9rzbZP-F.js +2 -0
  105. package/dist/components/p-9rzbZP-F.js.map +1 -0
  106. package/dist/components/p-B5W_r4vV.js +2 -0
  107. package/dist/components/p-B5W_r4vV.js.map +1 -0
  108. package/dist/components/{p-DjF2m7bf.js → p-B8ZonS3S.js} +2 -2
  109. package/dist/components/{p-BrW77sNB.js → p-B9WwU5vu.js} +2 -2
  110. package/dist/components/p-BCRPg1Xs.js +2 -0
  111. package/dist/components/p-BCRPg1Xs.js.map +1 -0
  112. package/dist/components/{p-KV3_5Cgo.js → p-BFd18avA.js} +2 -2
  113. package/dist/components/{p-DLDFPn9F.js → p-BGGIEmQj.js} +2 -2
  114. package/dist/components/p-BG_n-zQT.js +2 -0
  115. package/dist/components/p-BG_n-zQT.js.map +1 -0
  116. package/dist/components/p-BINlT3xz.js +2 -0
  117. package/dist/components/p-BINlT3xz.js.map +1 -0
  118. package/dist/components/p-BPTqn5zL.js +2 -0
  119. package/dist/components/p-BPTqn5zL.js.map +1 -0
  120. package/dist/components/p-BnWxbhFP.js +2 -0
  121. package/dist/components/p-BnWxbhFP.js.map +1 -0
  122. package/dist/components/{p-DhibZEq-.js → p-BonnrRtE.js} +2 -2
  123. package/dist/components/p-BxduVc5g.js +2 -0
  124. package/dist/components/p-BxduVc5g.js.map +1 -0
  125. package/dist/components/p-CD9AbaHQ.js +2 -0
  126. package/dist/components/p-CD9AbaHQ.js.map +1 -0
  127. package/dist/components/p-CN3roaMg.js +2 -0
  128. package/dist/components/p-CN3roaMg.js.map +1 -0
  129. package/dist/components/p-CR7G2BI6.js +2 -0
  130. package/dist/components/p-CR7G2BI6.js.map +1 -0
  131. package/dist/components/p-CakRq92x.js +2 -0
  132. package/dist/components/p-CakRq92x.js.map +1 -0
  133. package/dist/components/p-CumGY3uN.js +2 -0
  134. package/dist/components/p-CumGY3uN.js.map +1 -0
  135. package/dist/components/p-D59xX7JN.js +2 -0
  136. package/dist/components/p-D59xX7JN.js.map +1 -0
  137. package/dist/components/p-DFWJmuaR.js +2 -0
  138. package/dist/components/p-DFWJmuaR.js.map +1 -0
  139. package/dist/components/p-DGQUm3WL.js +2 -0
  140. package/dist/components/p-DGQUm3WL.js.map +1 -0
  141. package/dist/components/{p-DmTnBu5r.js → p-DJHshyyC.js} +2 -2
  142. package/dist/components/{p-BtUYEMwA.js → p-DPPM5T7q.js} +2 -2
  143. package/dist/components/p-DVRL3oem.js +2 -0
  144. package/dist/components/p-DVRL3oem.js.map +1 -0
  145. package/dist/components/p-DceM6xWR.js +2 -0
  146. package/dist/components/p-DceM6xWR.js.map +1 -0
  147. package/dist/components/p-Dhw_W8nk.js +2 -0
  148. package/dist/components/p-Dhw_W8nk.js.map +1 -0
  149. package/dist/components/{p-pkGqqLm-.js → p-DwxKwC5i.js} +2 -2
  150. package/dist/components/{p-DnhDgPJv.js → p-DzHXk0IG.js} +2 -2
  151. package/dist/components/p-OHT7lQVt.js +2 -0
  152. package/dist/components/p-OHT7lQVt.js.map +1 -0
  153. package/dist/components/{p-BQko6Yz3.js → p-P60MGUqZ.js} +2 -2
  154. package/dist/components/{p-BQko6Yz3.js.map → p-P60MGUqZ.js.map} +1 -1
  155. package/dist/components/{p-Bu-gu0mN.js → p-UxIgD24y.js} +2 -2
  156. package/dist/components/{p-BiIDQ5RW.js → p-YFrD62Ml.js} +2 -2
  157. package/dist/components/p-gR6G5azA.js +2 -0
  158. package/dist/components/p-gR6G5azA.js.map +1 -0
  159. package/dist/components/{p-ehZFKett.js → p-oFbI_M5B.js} +2 -2
  160. package/dist/components/p-r5td84fg.js +2 -0
  161. package/dist/components/p-r5td84fg.js.map +1 -0
  162. package/dist/components/p-skVhQk9d.js +2 -0
  163. package/dist/components/p-skVhQk9d.js.map +1 -0
  164. package/dist/components/p-z7Zj26BA.js +2 -0
  165. package/dist/components/p-z7Zj26BA.js.map +1 -0
  166. package/dist/components/{p-YDUM8xDg.js → p-zunBF381.js} +2 -2
  167. package/dist/docs/components.json +586 -40
  168. package/dist/mcp-data/registry/avatar.json +1 -1
  169. package/dist/mcp-data/registry/banner.json +1 -1
  170. package/dist/mcp-data/registry/bar-action.json +5 -5
  171. package/dist/mcp-data/registry/bar-nav.json +1 -1
  172. package/dist/mcp-data/registry/bar-page-title.json +433 -0
  173. package/dist/mcp-data/registry/bar-title.json +21 -5
  174. package/dist/mcp-data/registry/bar-workflow.json +1 -1
  175. package/dist/mcp-data/registry/button-filled.json +1 -1
  176. package/dist/mcp-data/registry/button-unfilled.json +1 -1
  177. package/dist/mcp-data/registry/card-chart.json +1 -1
  178. package/dist/mcp-data/registry/card-navigation.json +1 -1
  179. package/dist/mcp-data/registry/card-overview.json +1 -1
  180. package/dist/mcp-data/registry/card-setting.json +1 -1
  181. package/dist/mcp-data/registry/card-settings-scope.json +23 -5
  182. package/dist/mcp-data/registry/chart-legend.json +1 -1
  183. package/dist/mcp-data/registry/checkbox.json +1 -1
  184. package/dist/mcp-data/registry/chip.json +3 -2
  185. package/dist/mcp-data/registry/conversation-list-item.json +1 -1
  186. package/dist/mcp-data/registry/filter-menu.json +1 -1
  187. package/dist/mcp-data/registry/input.json +1 -1
  188. package/dist/mcp-data/registry/menu.json +1 -1
  189. package/dist/mcp-data/registry/mobile-section-switcher.json +1 -1
  190. package/dist/mcp-data/registry/mobile-sheet-nav.json +1 -1
  191. package/dist/mcp-data/registry/modal.json +1 -1
  192. package/dist/mcp-data/registry/pagination.json +10 -10
  193. package/dist/mcp-data/registry/panel-nav.json +1 -1
  194. package/dist/mcp-data/registry/panel-sub-nav.json +1 -1
  195. package/dist/mcp-data/registry/panel-tool-header.json +1 -1
  196. package/dist/mcp-data/registry/panel-tool-search.json +1 -1
  197. package/dist/mcp-data/registry/panel-tools.json +4 -2
  198. package/dist/mcp-data/registry/radio.json +1 -1
  199. package/dist/mcp-data/registry/registry.json +231 -22
  200. package/dist/mcp-data/registry/select.json +5 -4
  201. package/dist/mcp-data/registry/shell-app.json +9 -7
  202. package/dist/mcp-data/registry/skeleton.json +1 -1
  203. package/dist/mcp-data/registry/tab-group.json +1 -1
  204. package/dist/mcp-data/registry/table-group.json +1 -1
  205. package/dist/mcp-data/registry/table-search.json +1 -1
  206. package/dist/mcp-data/registry/table.json +2 -2
  207. package/dist/mcp-data/registry/tag.json +1 -1
  208. package/dist/mcp-data/registry/textarea.json +1 -1
  209. package/dist/mcp-data/registry/toast.json +1 -1
  210. package/dist/mcp-data/registry/tooltip-chart.json +1 -1
  211. package/dist/mcp-data/registry/tooltip.json +1 -1
  212. package/dist/react/components.d.ts +1 -0
  213. package/dist/react/components.js +1 -0
  214. package/dist/react/ds-bar-page-title.d.ts +14 -0
  215. package/dist/react/ds-bar-page-title.js +16 -0
  216. package/dist/styles/prose.css +20 -0
  217. package/dist/styles/table.css +1 -1
  218. package/dist/types/components/BarPageTitle/BarPageTitle.d.ts +124 -0
  219. package/dist/types/components/BarPageTitle/index.d.ts +2 -0
  220. package/dist/types/components/BarTitle/BarTitle.d.ts +1 -7
  221. package/dist/types/components/BarTitle/bar-title-action-chrome.d.ts +76 -0
  222. package/dist/types/components/BarTitle/bar-title-actions.d.ts +1 -0
  223. package/dist/types/components/BarTitle/bar-title-sections.d.ts +11 -0
  224. package/dist/types/components/CardSettingsScope/CardSettingsScope.d.ts +3 -1
  225. package/dist/types/components/ShellApp/ShellApp.d.ts +1 -0
  226. package/dist/types/components.d.ts +183 -6
  227. package/dist/vue/components.d.ts +1 -0
  228. package/dist/vue/components.js +1 -0
  229. package/dist/vue/ds-bar-page-title.d.ts +3 -0
  230. package/dist/vue/ds-bar-page-title.js +26 -0
  231. package/dist/vue/ds-card-settings-scope.js +1 -0
  232. package/package.json +1 -1
  233. package/dist/components/p-BTsFFzfR.js +0 -2
  234. package/dist/components/p-BTsFFzfR.js.map +0 -1
  235. package/dist/components/p-BpSPAlOx.js +0 -2
  236. package/dist/components/p-BpSPAlOx.js.map +0 -1
  237. package/dist/components/p-Bwszi9p7.js +0 -2
  238. package/dist/components/p-Bwszi9p7.js.map +0 -1
  239. package/dist/components/p-C-MaZPyA.js +0 -2
  240. package/dist/components/p-C-MaZPyA.js.map +0 -1
  241. package/dist/components/p-CB5-uIY2.js +0 -2
  242. package/dist/components/p-CB5-uIY2.js.map +0 -1
  243. package/dist/components/p-CG4Fp3SY.js +0 -2
  244. package/dist/components/p-CG4Fp3SY.js.map +0 -1
  245. package/dist/components/p-CHCsDvJK.js +0 -2
  246. package/dist/components/p-CHCsDvJK.js.map +0 -1
  247. package/dist/components/p-CImwNex7.js +0 -2
  248. package/dist/components/p-CImwNex7.js.map +0 -1
  249. package/dist/components/p-CNZwk176.js +0 -2
  250. package/dist/components/p-CNZwk176.js.map +0 -1
  251. package/dist/components/p-CSZlbQ8_.js +0 -2
  252. package/dist/components/p-CSZlbQ8_.js.map +0 -1
  253. package/dist/components/p-CVNYRTEH.js +0 -2
  254. package/dist/components/p-CVNYRTEH.js.map +0 -1
  255. package/dist/components/p-D3sJXjcg.js +0 -2
  256. package/dist/components/p-D3sJXjcg.js.map +0 -1
  257. package/dist/components/p-D7Jc72Lw.js +0 -2
  258. package/dist/components/p-D7Jc72Lw.js.map +0 -1
  259. package/dist/components/p-DFOhxUQP.js +0 -2
  260. package/dist/components/p-DFOhxUQP.js.map +0 -1
  261. package/dist/components/p-DI7qbahC.js +0 -2
  262. package/dist/components/p-DI7qbahC.js.map +0 -1
  263. package/dist/components/p-DP75OhfU.js +0 -2
  264. package/dist/components/p-DP75OhfU.js.map +0 -1
  265. package/dist/components/p-DR1jV6Q5.js +0 -2
  266. package/dist/components/p-DR1jV6Q5.js.map +0 -1
  267. package/dist/components/p-DuJuqbcg.js +0 -2
  268. package/dist/components/p-DuJuqbcg.js.map +0 -1
  269. package/dist/components/p-E3RCUE7a.js +0 -2
  270. package/dist/components/p-E3RCUE7a.js.map +0 -1
  271. package/dist/components/p-JuKGR7Ay.js +0 -2
  272. package/dist/components/p-JuKGR7Ay.js.map +0 -1
  273. package/dist/components/p-Ui0Ir5li.js +0 -2
  274. package/dist/components/p-Ui0Ir5li.js.map +0 -1
  275. package/dist/components/p-eAX_M_QY.js +0 -2
  276. package/dist/components/p-eAX_M_QY.js.map +0 -1
  277. package/dist/components/p-eaCtnww1.js +0 -2
  278. package/dist/components/p-eaCtnww1.js.map +0 -1
  279. /package/dist/components/{p-DjF2m7bf.js.map → p-B8ZonS3S.js.map} +0 -0
  280. /package/dist/components/{p-BrW77sNB.js.map → p-B9WwU5vu.js.map} +0 -0
  281. /package/dist/components/{p-KV3_5Cgo.js.map → p-BFd18avA.js.map} +0 -0
  282. /package/dist/components/{p-DLDFPn9F.js.map → p-BGGIEmQj.js.map} +0 -0
  283. /package/dist/components/{p-DhibZEq-.js.map → p-BonnrRtE.js.map} +0 -0
  284. /package/dist/components/{p-DmTnBu5r.js.map → p-DJHshyyC.js.map} +0 -0
  285. /package/dist/components/{p-BtUYEMwA.js.map → p-DPPM5T7q.js.map} +0 -0
  286. /package/dist/components/{p-pkGqqLm-.js.map → p-DwxKwC5i.js.map} +0 -0
  287. /package/dist/components/{p-DnhDgPJv.js.map → p-DzHXk0IG.js.map} +0 -0
  288. /package/dist/components/{p-Bu-gu0mN.js.map → p-UxIgD24y.js.map} +0 -0
  289. /package/dist/components/{p-BiIDQ5RW.js.map → p-YFrD62Ml.js.map} +0 -0
  290. /package/dist/components/{p-ehZFKett.js.map → p-oFbI_M5B.js.map} +0 -0
  291. /package/dist/components/{p-YDUM8xDg.js.map → p-zunBF381.js.map} +0 -0
@@ -1 +0,0 @@
1
- {"version":3,"names":["tabGroupCss","TabGroup","__stencil_proxyCustomElement","HTMLElement","constructor","registerHost","this","value","tabs","size","width","hasContainer","ariaLabel","selectableTabs","getSelectableTabs","focusableTabId","some","tab","id","isInactive","find","selectTab","options","dsChange","emit","focus","focusTab","btn","el","querySelector","preventScroll","onValueChange","next","prev","undefined","requestAnimationFrame","active","document","activeElement","contains","activeId","getAttribute","focusId","nextTab","blur","findEnabled","from","step","len","length","n","i","handleKeyDown","e","focusedId","target","closest","dataset","currentIdx","findIndex","t","nextIdx","key","first","lastEnabled","reverse","preventDefault","getBgClass","background","render","bgClass","h","Host","class","controlWidthClass","role","ariaLabelledby","map","index","isTabDivider","isSelected","variant","showIcon","showLabel","emphasizeLabel","type","label","String","panelId","disabled","tabIndex","onClick","tab__content","dot","name","icon","color","as","CONTROL_TEXT_VARIANT","emphasis","hasRing"],"sources":["src/wc/components/TabGroup/TabGroup.css?tag=ds-tab-group&encapsulation=scoped","src/wc/components/TabGroup/TabGroup.tsx"],"sourcesContent":["@import '../../utils/control-density.css';\n@import '../../utils/control-density-inset.css';\n@import '../../utils/control-width.css';\n@import '../../utils/focus-ring.css';\n@import '../../utils/interaction-fill.css';\n@import '../../utils/control-inactive.css';\n\n:host {\n display: block;\n --_tab-group-surface-border: var(--color-border-tertiary);\n --_tab-group-divider: var(--color-border-secondary);\n}\n\n:host(.tab-group-host--on-faint) {\n --_tab-group-selected-fill: var(--color-interaction-active);\n}\n\n:host(.tab-group-host--on-medium) {\n --_tab-group-surface-border: var(--color-border-on-medium-background-tertiary);\n --_tab-group-divider: var(--color-border-on-medium-background-secondary);\n --_tab-group-selected-fill: var(--color-interaction-on-medium-background-active);\n}\n\n:host(.tab-group-host--on-bold) {\n --_tab-group-surface-border: var(--color-border-on-bold-background-tertiary);\n --_tab-group-divider: var(--color-border-on-bold-background-secondary);\n --_tab-group-selected-fill: var(--color-interaction-on-bold-background-active);\n}\n\n:host(.tab-group-host--on-strong) {\n --_tab-group-surface-border: var(--color-border-on-strong-background-tertiary);\n --_tab-group-divider: var(--color-border-on-strong-background-secondary);\n --_tab-group-selected-fill: var(--color-interaction-on-strong-background-active);\n}\n\n:host(.tab-group-host--on-translucent) {\n --_tab-group-surface-border: var(--color-translucent-border-tertiary);\n --_tab-group-divider: var(--color-translucent-border-secondary);\n --_tab-group-selected-fill: var(--color-translucent-interaction-active);\n}\n\n:host(.tab-group-host--on-inverted) {\n --_tab-group-surface-border: var(--color-inverted-border-tertiary);\n --_tab-group-divider: var(--color-inverted-border-secondary);\n --_tab-group-selected-fill: var(--color-inverted-interaction-active);\n}\n\n:host(.tab-group-host--on-media) {\n --_tab-group-surface-border: var(--color-media-border-tertiary);\n --_tab-group-divider: var(--color-media-border-secondary);\n --_tab-group-selected-fill: var(--color-media-interaction-active);\n}\n\n:host(.tab-group-host--on-always-dark) {\n --_tab-group-surface-border: var(--color-always-dark-border-tertiary);\n --_tab-group-divider: var(--color-always-dark-border-secondary);\n --_tab-group-selected-fill: var(--color-always-dark-interaction-active);\n}\n\n.tab-list {\n display: flex;\n align-items: center;\n gap: var(--ds-control-gap);\n position: relative;\n width: max-content;\n max-width: 100%;\n height: var(--ds-control-height);\n padding: calc(var(--dimension-space-025) - var(--dimension-stroke-width-012));\n background-color: var(--color-background-secondary);\n border: var(--dimension-stroke-width-012) solid var(--_tab-group-surface-border);\n border-radius: var(--dimension-radius-half);\n box-sizing: border-box;\n}\n\n:host(.ds-control-width--fill) .tab-list {\n width: 100%;\n}\n\n:host(.tab-group-host--surface) .tab-list {\n background-color: transparent;\n}\n\n:host(.tab-group-host--containerless) .tab-list {\n padding: 0;\n border: 0;\n background-color: transparent;\n}\n\n.tab {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: var(--ds-control-gap);\n padding: 0 var(--ds-control-padding-inline);\n background-color: transparent;\n border: none;\n border-radius: var(--dimension-radius-half);\n cursor: default;\n -webkit-user-select: none;\n user-select: none;\n color: var(--color-foreground-secondary);\n transition: color var(--effect-motion-short-2);\n flex-shrink: 0;\n height: var(--ds-control-height);\n min-width: var(--ds-control-height);\n box-sizing: border-box;\n --_dot: var(--color-foreground-bold-brand);\n /* Hover/press: `.ds-interaction-fill` fills cover the complete segment. */\n}\n\n:host(.ds-control-width--fill) .tab {\n flex: 1 1 0;\n min-width: 0;\n overflow: hidden;\n}\n\n:host(.ds-control-width--fill) .tab__content {\n max-width: 100%;\n overflow: hidden;\n}\n\n:host(.ds-control-width--fill) .tab__label {\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.tab--selected {\n color: var(--color-foreground-primary);\n background-color: var(--color-background-primary);\n /* Inset stroke on interaction-fill ::after — stays above hover wash. */\n --ds-interaction-border-width: var(--dimension-stroke-width-012);\n --ds-interaction-border-color: var(--_tab-group-surface-border);\n}\n\n:host(.tab-group-host--surface) .tab--selected {\n background-color: var(--_tab-group-selected-fill);\n}\n\n.tab--selected:not(.ds-interaction-fill) {\n box-shadow: inset 0 0 0 var(--ds-interaction-border-width) var(--ds-interaction-border-color);\n}\n\n/* Inactive: `.ds-control-inactive` (50% opacity) — applied via class in TSX. */\n\n.tab__content {\n position: relative;\n z-index: 2;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: var(--ds-control-gap);\n min-width: 0;\n}\n\n.tab__content--dot {\n padding-right: var(--dimension-space-050);\n}\n\n.tab__label {\n padding: 0 var(--ds-control-label-inset);\n white-space: nowrap;\n}\n\n.tab__icon {\n flex-shrink: 0;\n}\n\n.tab__dot {\n position: absolute;\n top: 0;\n right: 0;\n z-index: 2;\n pointer-events: none;\n}\n\n.on-medium {\n color: var(--color-foreground-on-medium-background-secondary);\n}\n\n.on-medium.tab--selected {\n color: var(--color-foreground-on-medium-background-primary);\n}\n\n.on-bold {\n color: var(--color-foreground-on-bold-background-secondary);\n}\n\n.on-bold.tab--selected {\n color: var(--color-foreground-on-bold-background-primary);\n}\n\n.on-strong {\n color: var(--color-foreground-on-strong-background-secondary);\n}\n\n.on-strong.tab--selected {\n color: var(--color-foreground-on-strong-background-primary);\n}\n\n.on-translucent {\n color: var(--color-translucent-foreground-secondary);\n}\n\n.on-translucent.tab--selected {\n color: var(--color-translucent-foreground-primary);\n}\n\n.on-inverted {\n color: var(--color-inverted-foreground-secondary);\n}\n\n.on-inverted.tab--selected {\n color: var(--color-inverted-foreground-primary);\n}\n\n.on-media {\n color: var(--color-media-foreground-secondary);\n}\n\n.on-media.tab--selected {\n color: var(--color-media-foreground-primary);\n}\n\n.on-always-dark {\n color: var(--color-always-dark-foreground-secondary);\n}\n\n.on-always-dark.tab--selected {\n color: var(--color-always-dark-foreground-primary);\n}\n\n.tab-divider {\n display: flex;\n align-items: center;\n justify-content: center;\n box-sizing: border-box;\n width: var(--dimension-stroke-width-012);\n align-self: center;\n padding: 0;\n flex-shrink: 0;\n pointer-events: none;\n}\n\n.tab-divider__line {\n width: var(--dimension-stroke-width-012);\n height: var(--typography-lineheight-sm);\n flex-shrink: 0;\n background-color: var(--_tab-group-divider);\n}\n","import {\n Component,\n Prop,\n Event,\n EventEmitter,\n Element,\n Listen,\n Watch,\n h,\n Host,\n} from '@stencil/core';\nimport { controlWidthClass, CONTROL_TEXT_VARIANT, type ControlWidth } from '../../utils';\nimport {\n getSelectableTabs,\n isTabDivider,\n type TabGroupItem,\n type TabItemTab,\n} from './tab-item-utils';\n\nexport type TabBackground =\n | 'faint'\n | 'medium'\n | 'bold'\n | 'strong'\n | 'translucent'\n | 'inverted'\n | 'media'\n | 'always-dark';\n\nexport type TabGroupSize = 'sm' | 'md' | 'lg';\nexport type TabGroupWidth = ControlWidth;\n\n@Component({\n tag: 'ds-tab-group',\n styleUrl: 'TabGroup.css',\n scoped: true,\n})\nexport class TabGroup {\n @Element() el!: HTMLElement;\n\n @Prop({ mutable: true }) value: string = '';\n @Prop() tabs: TabGroupItem[] = [];\n /** Control density: 24px small, 32px medium, or 40px large track. */\n @Prop() size: TabGroupSize = 'md';\n /** Width fit — hug content (default) or fill the parent with equal-width segments. */\n @Prop() width: TabGroupWidth = 'hug';\n /** Show the segmented control's outer background, border, and inset. */\n @Prop() hasContainer: boolean = true;\n @Prop() background: TabBackground | undefined;\n @Prop({ attribute: 'aria-label' }) ariaLabel: string | null = null;\n @Prop({ attribute: 'aria-labelledby' }) ariaLabelledby: string | undefined;\n\n @Event() dsChange!: EventEmitter<string>;\n\n private get selectableTabs(): TabItemTab[] {\n return getSelectableTabs(this.tabs);\n }\n\n private get focusableTabId(): string {\n return this.selectableTabs.some(tab => tab.id === this.value && !tab.isInactive)\n ? this.value\n : (this.selectableTabs.find(tab => !tab.isInactive)?.id ?? '');\n }\n\n private selectTab(id: string, options?: { focus?: boolean }) {\n this.value = id;\n this.dsChange.emit(id);\n if (options?.focus !== false) {\n this.focusTab(id);\n }\n }\n\n private focusTab(id: string) {\n const btn = this.el.querySelector(`[data-tab-id=\"${id}\"]`) as HTMLElement | null;\n btn?.focus({ preventScroll: true });\n }\n\n /** Keep focus on the selected tab when value changes externally (e.g. BarNav menu). */\n @Watch('value')\n onValueChange(next: string, prev: string | undefined) {\n if (prev === undefined || next === prev) return;\n\n requestAnimationFrame(() => {\n const active = document.activeElement as HTMLElement | null;\n if (!active || !this.el.contains(active)) return;\n\n const activeId = active.getAttribute('data-tab-id');\n if (activeId === next) return;\n\n const focusId = this.selectableTabs.some(tab => tab.id === next && !tab.isInactive)\n ? next\n : this.focusableTabId;\n const nextTab = this.el.querySelector(`[data-tab-id=\"${focusId}\"]`) as HTMLElement | null;\n if (nextTab) {\n nextTab.focus({ preventScroll: true });\n } else {\n active.blur();\n }\n });\n }\n\n /**\n * Find the next non-inactive tab index relative to `from`, stepping by `step`.\n * Returns `from` unchanged if no other enabled tab exists.\n */\n private findEnabled(from: number, step: 1 | -1): number {\n const tabs = this.selectableTabs;\n const len = tabs.length;\n for (let n = 0; n < len; n++) {\n const i = (from + step * (n + 1) + len * (n + 1)) % len;\n if (!tabs[i]?.isInactive) return i;\n }\n return from;\n }\n\n @Listen('keydown')\n handleKeyDown(e: KeyboardEvent) {\n const tabs = this.selectableTabs;\n if (!tabs.length) return;\n\n const focusedId = (e.target as Element | null)?.closest<HTMLElement>('[data-tab-id]')?.dataset[\n 'tabId'\n ];\n const currentIdx = tabs.findIndex(t => t.id === (focusedId ?? this.focusableTabId));\n\n let nextIdx: number | null = null;\n\n if (e.key === 'ArrowRight') {\n nextIdx = this.findEnabled(currentIdx, 1);\n } else if (e.key === 'ArrowLeft') {\n nextIdx = this.findEnabled(currentIdx, -1);\n }\n\n if (e.key === 'Home') {\n const first = tabs.findIndex(t => !t.isInactive);\n nextIdx = first === -1 ? null : first;\n } else if (e.key === 'End') {\n const lastEnabled = [...tabs].reverse().findIndex(t => !t.isInactive);\n nextIdx = lastEnabled === -1 ? null : tabs.length - 1 - lastEnabled;\n }\n\n if (nextIdx !== null) {\n e.preventDefault();\n const next = tabs[nextIdx];\n this.selectTab(next.id);\n }\n }\n\n private getBgClass(): string {\n if (!this.background) return '';\n if (this.background === 'always-dark') return 'on-always-dark';\n return `on-${this.background}`;\n }\n\n render() {\n const bgClass = this.getBgClass();\n const focusableTabId = this.focusableTabId;\n\n return (\n <Host\n class={{\n 'tab-group-host': true,\n [`tab-group-host--${this.size}`]: true,\n [`ds-control--${this.size}`]: true,\n 'tab-group-host--containerless': !this.hasContainer,\n 'tab-group-host--surface': !!bgClass,\n [`tab-group-host--${bgClass}`]: !!bgClass,\n ...controlWidthClass(this.width),\n }}\n >\n <div\n role=\"tablist\"\n class=\"tab-list\"\n aria-label={this.ariaLabel}\n aria-labelledby={this.ariaLabelledby}\n >\n {this.tabs.map((tab, index) => {\n if (isTabDivider(tab)) {\n return (\n <div key={`divider-${index}`} class=\"tab-divider\" aria-hidden=\"true\">\n <div class=\"tab-divider__line\" />\n </div>\n );\n }\n\n const isSelected = tab.id === this.value;\n const variant = tab.variant ?? 'label';\n const showIcon = variant === 'icon' || variant === 'icon-label';\n const showLabel = variant === 'label' || variant === 'icon-label';\n const emphasizeLabel = isSelected && !bgClass;\n return (\n <button\n key={tab.id}\n type=\"button\"\n role=\"tab\"\n data-tab-id={tab.id}\n class={{\n tab: true,\n 'tab--selected': isSelected,\n [`ds-control--${this.size}`]: true,\n 'ds-control--inset': true,\n 'ds-focus-ring-inset': true,\n 'ds-interaction-fill': !tab.isInactive,\n 'ds-interaction-fill--on-faint': bgClass === 'on-faint',\n 'ds-interaction-fill--on-medium': bgClass === 'on-medium',\n 'ds-interaction-fill--on-bold': bgClass === 'on-bold',\n 'ds-interaction-fill--on-strong': bgClass === 'on-strong',\n 'ds-interaction-fill--on-translucent': bgClass === 'on-translucent',\n 'ds-interaction-fill--on-inverted': bgClass === 'on-inverted',\n 'ds-interaction-fill--on-media': bgClass === 'on-media',\n 'ds-interaction-fill--on-always-dark': bgClass === 'on-always-dark',\n 'ds-control-inactive': !!tab.isInactive,\n [bgClass]: !!bgClass,\n }}\n aria-label={variant === 'icon' ? tab.label : undefined}\n aria-selected={String(isSelected)}\n aria-disabled={tab.isInactive ? 'true' : undefined}\n aria-controls={tab.panelId ?? undefined}\n disabled={tab.isInactive}\n tabIndex={tab.id === focusableTabId ? 0 : -1}\n onClick={() => !tab.isInactive && this.selectTab(tab.id)}\n >\n <span\n class={{\n tab__content: true,\n [`tab__content--${variant}`]: true,\n 'tab__content--dot': !!tab.dot,\n }}\n >\n {showIcon && (\n <ds-icon class=\"tab__icon\" name={tab.icon} size={this.size} color=\"inherit\" />\n )}\n {showLabel && (\n <ds-text\n class=\"tab__label\"\n as=\"span\"\n variant={CONTROL_TEXT_VARIANT[this.size]}\n emphasis={emphasizeLabel}\n color=\"inherit\"\n >\n {tab.label}\n </ds-text>\n )}\n {tab.dot && (\n <ds-badge\n class=\"tab__dot\"\n variant=\"dot\"\n hasRing={false}\n label=\"\"\n aria-hidden=\"true\"\n />\n )}\n </span>\n </button>\n );\n })}\n </div>\n </Host>\n );\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1,2 +0,0 @@
1
- import{p as s,H as o,c as e,h as d,a,t as i}from"./index.js";import{d as t}from"./p-DQpw21HO.js";import{d as r}from"./p-CG4Fp3SY.js";import{d as n}from"./p-Cea7rROU.js";import{d as c}from"./p-0XTyQNRG.js";import{d as l}from"./p-B9oadFSC.js";import{d as m}from"./p-JuKGR7Ay.js";import{a as h,T as p}from"./p-CUL5_8JM.js";const f=()=>`.ds-control--lg.sc-ds-modal,.ds-control--lg.sc-ds-modal-h,.ds-control--md.sc-ds-modal-h,.ds-control--md.sc-ds-modal,.ds-control--sm.sc-ds-modal-h,.ds-control--sm.sc-ds-modal,.ds-control--xs.sc-ds-modal-h,.ds-control--xs.sc-ds-modal{--ds-control-radius:var(--dimension-radius-025)}.ds-control--lg.sc-ds-modal-h,.ds-control--lg.sc-ds-modal{--ds-control-height:var(--dimension-size-500);--ds-control-icon:var(--dimension-iconography-lg);--ds-control-padding-inline:var(--dimension-space-100);--ds-control-label-inset:var(--dimension-space-050);--ds-control-gap:var(--dimension-space-050)}.ds-control--md.sc-ds-modal-h,.ds-control--md.sc-ds-modal{--ds-control-height:var(--dimension-size-400);--ds-control-icon:var(--dimension-iconography-md);--ds-control-padding-inline:var(--dimension-space-075);--ds-control-label-inset:var(--dimension-space-025);--ds-control-gap:var(--dimension-space-050)}.ds-control--sm.sc-ds-modal-h,.ds-control--sm.sc-ds-modal{--ds-control-height:var(--dimension-size-300);--ds-control-icon:var(--dimension-iconography-sm);--ds-control-padding-inline:var(--dimension-space-050);--ds-control-label-inset:var(--dimension-space-025);--ds-control-gap:var(--dimension-space-025)}.ds-control--xs.sc-ds-modal-h,.ds-control--xs.sc-ds-modal{--ds-control-height:var(--dimension-size-200);--ds-control-icon:var(--dimension-iconography-xs);--ds-control-padding-inline:var(--dimension-space-025);--ds-control-label-inset:var(--dimension-space-025);--ds-control-gap:0}.ds-chrome-header.sc-ds-modal{display:flex;align-items:center;box-sizing:border-box;min-width:0;min-block-size:var(--dimension-size-600);padding:var(--dimension-space-100);gap:var(--dimension-space-100)}.ds-chrome-header--wrapping.sc-ds-modal{flex-wrap:wrap}.ds-chrome-header--bounded.sc-ds-modal{border-block-end:var(--dimension-stroke-width-012) solid var(--color-border-tertiary)}.ds-chrome-header__leading.sc-ds-modal,.ds-chrome-header__trailing.sc-ds-modal{display:flex;align-items:center;flex:0 0 auto;min-width:0}.ds-chrome-header__trailing.sc-ds-modal{margin-inline-start:auto;gap:var(--dimension-space-100)}.ds-chrome-header__copy.sc-ds-modal{display:flex;flex:1 1 0;min-width:0;padding:var(--ds-control-padding-inline, var(--dimension-space-075));box-sizing:border-box}.ds-chrome-header__copy--wrapping.sc-ds-modal{align-items:baseline;flex-wrap:wrap;column-gap:var(--dimension-space-100);row-gap:var(--dimension-space-050)}.ds-chrome-header__copy--stacked.sc-ds-modal{align-items:stretch;flex-direction:column;gap:var(--dimension-space-050)}.ds-chrome-header__heading.sc-ds-modal,.ds-chrome-header__description.sc-ds-modal{width:auto;min-width:0;padding-inline:var(--ds-control-label-inset, var(--dimension-space-025));box-sizing:border-box}.ds-chrome-header__heading.sc-ds-modal{flex:0 1 auto}.ds-chrome-header__copy--wrapping.sc-ds-modal .ds-chrome-header__description.sc-ds-modal{flex:1 1 var(--dimension-card-width-xs)}.ds-chrome-space--sm.sc-ds-modal-h,.ds-chrome-space--sm.sc-ds-modal{--ds-chrome-padding:var(--dimension-space-050);--ds-chrome-gap:var(--dimension-space-050)}.ds-chrome-space--md.sc-ds-modal-h,.ds-chrome-space--md.sc-ds-modal{--ds-chrome-padding:var(--dimension-space-100);--ds-chrome-gap:var(--dimension-space-100)}.ds-chrome-space--lg.sc-ds-modal-h,.ds-chrome-space--lg.sc-ds-modal{--ds-chrome-padding:var(--dimension-space-200);--ds-chrome-gap:var(--dimension-space-200)}.ds-chrome-row.sc-ds-modal-h,.ds-chrome-row.sc-ds-modal,.ds-chrome-column.sc-ds-modal-h,.ds-chrome-column.sc-ds-modal,.ds-chrome-grid.sc-ds-modal-h,.ds-chrome-grid.sc-ds-modal{display:flex;box-sizing:border-box;gap:var(--ds-chrome-gap, var(--dimension-space-100));padding:var(--ds-chrome-padding, var(--dimension-space-100))}.ds-chrome-row.sc-ds-modal-h,.ds-chrome-row.sc-ds-modal{flex-direction:row;align-items:center}.ds-chrome-column.sc-ds-modal-h,.ds-chrome-column.sc-ds-modal{flex-direction:column}.ds-chrome-grid.sc-ds-modal-h,.ds-chrome-grid.sc-ds-modal{display:grid;align-items:center}@media (forced-colors: active){.sc-ds-modal:root,.sc-ds-modal-h,.ds-forced-colors-scope.sc-ds-modal{--ds-forced-color-surface:Canvas;--ds-forced-color-content:CanvasText;--ds-forced-color-control-boundary:ButtonText;--ds-forced-color-selected:Highlight;--ds-forced-color-on-selected:HighlightText;--ds-forced-color-disabled:GrayText}}.sc-ds-modal-h{display:contents}.modal-dialog.sc-ds-modal{display:none;flex-direction:column;max-width:none;max-height:calc(100vh - 2 * var(--dimension-space-200));margin:auto;padding:0;overflow:hidden;color:var(--color-foreground-primary);background-color:var(--color-background-primary);border:0;border-radius:var(--dimension-radius-050);box-shadow:var(--effect-elevation-elevated-floating);outline:none;box-sizing:border-box;animation:modalDialogIn var(--effect-motion-short-2) forwards}.modal-dialog[open].sc-ds-modal{display:flex}.modal-dialog.sc-ds-modal::backdrop{background-color:var(--color-background-shade);animation:modalBackdropIn var(--effect-motion-short-2) forwards}.modal-dialog--closing.sc-ds-modal{animation:modalDialogOut var(--effect-motion-short-2) forwards}.modal-dialog--closing.sc-ds-modal::backdrop{animation:modalBackdropOut var(--effect-motion-short-2) forwards}@keyframes modalBackdropIn{from{opacity:0}to{opacity:1}}@keyframes modalBackdropOut{from{opacity:1}to{opacity:0}}@keyframes modalDialogIn{from{opacity:0;transform:scale(0.97) translateY(4px)}to{opacity:1;transform:scale(1) translateY(0)}}@keyframes modalDialogOut{from{opacity:1;transform:scale(1) translateY(0)}to{opacity:0;transform:scale(0.97) translateY(4px)}}@media (prefers-reduced-motion: reduce){.modal-dialog[open].sc-ds-modal,.modal-dialog--closing.sc-ds-modal{animation:none;transform:none}.modal-dialog.sc-ds-modal::backdrop{animation:none;opacity:1}.modal-dialog--closing.sc-ds-modal,.modal-dialog--closing.sc-ds-modal::backdrop{opacity:0}}.modal-header.sc-ds-modal{align-items:flex-start;flex:0 0 auto;color:var(--color-foreground-primary)}.modal-copy.sc-ds-modal,ds-text.modal-heading.sc-ds-modal,ds-text.modal-description.sc-ds-modal{width:auto;text-align:left}ds-text.modal-heading.sc-ds-modal{-webkit-user-select:none;user-select:none}.modal-close-tooltip.sc-ds-modal{flex:0 0 auto}.modal-content.sc-ds-modal{min-height:0;padding:var(--dimension-space-200);overflow-y:auto;flex:1 1 auto;box-sizing:border-box}.modal-footer.sc-ds-modal{justify-content:flex-start;height:var(--dimension-size-800);flex:0 0 auto;border-top:var(--dimension-stroke-width-012) solid var(--color-border-tertiary)}.modal-footer__actions.sc-ds-modal{display:flex;align-items:center;gap:var(--dimension-space-100);min-width:0}.modal-footer--empty.sc-ds-modal{display:none}.modal-footer__actions.sc-ds-modal slot.sc-ds-modal{display:contents}@media (forced-colors: active){.modal-dialog.sc-ds-modal{box-shadow:none;outline:var(--dimension-stroke-width-012) solid var(--ds-forced-color-content);outline-offset:calc(-1 * var(--dimension-stroke-width-012))}}`;const g={sm:"var(--dimension-modal-width-sm)",md:"var(--dimension-modal-width-md)",lg:"var(--dimension-modal-width-lg)"};const b=["a[href]","area[href]","button:not([disabled])",'input:not([disabled]):not([type="hidden"])',"select:not([disabled])","textarea:not([disabled])","iframe",'[contenteditable="true"]','[tabindex]:not([tabindex="-1"])'].join(",");let u=0;const v=s(class s extends o{constructor(s){super();if(s!==false){this.__registerHost()}this.dsClose=e(this,"dsClose",7);this.dsAfterClose=e(this,"dsAfterClose",7);this.open=false;this.description="";this.closeAriaLabel="Close";this.modalWidth="md";this.closing=false;this.hasFooter=false;this.titleId=`ds-modal-title-${++u}`;this.descriptionId=`${this.titleId}-description`;this.dialogEl=null;this.previousFocus=null;this.closeTimer=null}componentDidLoad(){this.updateFooterPresence();if(this.open)this.onOpenChange(true)}componentDidRender(){if(!this.closing||!this.dialogEl?.open||this.closeTimer)return;const s=this.closeAnimationMs;if(s<=0){this.finishClose();return}this.closeTimer=setTimeout((()=>{this.closeTimer=null;this.finishClose()}),s)}disconnectedCallback(){this.clearCloseTimer();if(this.dialogEl?.open)this.dialogEl.close()}onOpenChange(s){if(s){this.clearCloseTimer();const s=!!this.dialogEl?.open;this.closing=false;if(!this.dialogEl||s)return;this.previousFocus=document.activeElement;this.dialogEl.showModal();requestAnimationFrame((()=>{if(this.open&&this.dialogEl?.open)this.focusClose()}))}else if(this.dialogEl?.open){this.closing=true}}focusClose(){const s=this.el.querySelector("ds-button-unfilled.modal-close");void s?.setFocus?.()}clearCloseTimer(){if(this.closeTimer){clearTimeout(this.closeTimer);this.closeTimer=null}}requestClose(s,o){if(!this.open||this.closing||!this.dialogEl?.open)return;this.dsClose.emit({reason:s,originalEvent:o});this.open=false}updateFooterPresence(s){const o=s?.assignedNodes()??[];this.hasFooter=o.some((s=>s.nodeType!==Node.TEXT_NODE||!!s.textContent?.trim()))||this.el.querySelector('[slot="footer"]')!==null}handleCancel(s){s.preventDefault();this.requestClose("escape",s)}handleBackdropPointerDown(s){if(s.target===this.dialogEl)this.requestClose("backdrop",s)}handleKeyDown(s){if(s.key==="Escape"){s.preventDefault();this.requestClose("escape",s);return}if(s.key!=="Tab"||!this.dialogEl)return;const o=Array.from(this.dialogEl.querySelectorAll(b)).filter((s=>!s.hasAttribute("disabled")&&s.getAttribute("aria-hidden")!=="true"));if(!o.length){s.preventDefault();this.dialogEl.focus();return}const e=o[0];const d=o[o.length-1];const a=document.activeElement;if(s.shiftKey&&(a===e||a===this.dialogEl)){s.preventDefault();d.focus()}else if(!s.shiftKey&&a===d){s.preventDefault();e.focus()}}get resolvedWidth(){if(this.modalWidth==="sm"||this.modalWidth==="md"||this.modalWidth==="lg"){return g[this.modalWidth]}return this.modalWidth}get describedBy(){const s=[this.description?this.descriptionId:"",this.ariaDescribedby??""].filter(Boolean);return s.length>0?s.join(" "):undefined}get closeAnimationMs(){return h(p.motionShort2,p.animationDurationShort3)}finishClose(){if(!this.dialogEl?.open)return;this.dialogEl.close();this.closing=false;this.clearCloseTimer();this.previousFocus?.focus?.();this.previousFocus=null;this.dsAfterClose.emit()}render(){return d(a,{key:"ba28d6368acd5ea9e14ee4b63868c2cddd90aa52"},d("dialog",{key:"13ca0e3fde5a3ba797ea12ab7db28c96240ec4a8",ref:s=>{this.dialogEl=s??null},class:{"modal-dialog":true,"modal-dialog--closing":this.closing},"aria-labelledby":this.titleId,"aria-describedby":this.describedBy,onCancel:s=>this.handleCancel(s),onPointerDown:s=>this.handleBackdropPointerDown(s),onKeyDown:s=>this.handleKeyDown(s),style:{width:`min(${this.resolvedWidth}, calc(100vw - 2 * var(--dimension-space-200)))`}},d("div",{key:"a93231cc9bae3a3260499a9fd93b13fd5d553345",class:"modal-header ds-chrome-header ds-chrome-header--bounded"},d("div",{key:"c9ef1e928019514347a9069dd579709f3de6fcae",class:"modal-copy ds-chrome-header__copy ds-chrome-header__copy--stacked ds-control--md"},d("ds-text",{key:"b7160087be9de28f95eff191a809521ffcbb12c4",class:"modal-heading ds-chrome-header__heading",as:"h2",variant:"text-title-small",emphasis:true,color:"primary",lineTruncation:1,textId:this.titleId},this.heading),this.description?d("ds-text",{class:"modal-description ds-chrome-header__description",as:"p",variant:"text-body-medium",color:"secondary",wrap:"wrap",textId:this.descriptionId},this.description):null),d("ds-tooltip",{key:"7eb379139114d18046ae30567e611be077b53966",class:"modal-close-tooltip ds-chrome-header__trailing",label:this.closeAriaLabel,side:"bottom",size:"sm"},d("ds-button-unfilled",{key:"ce2fb50ff9b2555d3795544a34b894f70a24ead1",class:"modal-close",variant:"icon",icon:"Cross",size:"md","aria-label":this.closeAriaLabel,activeFill:false,hasBorder:false,onDsClick:s=>this.requestClose("close-button",s.detail)}))),d("div",{key:"4c36c8ef7b16838b83a57048d7a1f41b691fd485",class:"modal-content"},d("slot",{key:"9aa663efc1c792c6313ea610b767461a803dc5d8"})),d("div",{key:"4f96bf0e9ec463e122154be5d6254d79abb30d14",class:{"modal-footer":true,"ds-chrome-row":true,"ds-chrome-space--lg":true,"modal-footer--empty":!this.hasFooter}},d("div",{key:"830c722f8e9a6979534baa407ebeb6c519660209",class:"modal-footer__actions"},d("slot",{key:"51ffdf44b5d8f21e61b83769415d447b42b9031a",name:"footer",onSlotchange:s=>this.updateFooterPresence(s.currentTarget)})))))}get el(){return this}static get watchers(){return{open:[{onOpenChange:0}]}}static get style(){return f()}},[262,"ds-modal",{open:[1028],heading:[1],description:[1],closeAriaLabel:[1,"close-aria-label"],modalWidth:[1,"modal-width"],ariaDescribedby:[1,"aria-describedby"],closing:[32],hasFooter:[32]},undefined,{open:[{onOpenChange:0}]}]);function y(){if(typeof customElements==="undefined"){return}const s=["ds-modal","ds-badge","ds-button-unfilled","ds-icon","ds-loader","ds-text","ds-tooltip"];s.forEach((s=>{switch(s){case"ds-modal":if(!customElements.get(i(s))){customElements.define(i(s),v)}break;case"ds-badge":if(!customElements.get(i(s))){t()}break;case"ds-button-unfilled":if(!customElements.get(i(s))){r()}break;case"ds-icon":if(!customElements.get(i(s))){n()}break;case"ds-loader":if(!customElements.get(i(s))){c()}break;case"ds-text":if(!customElements.get(i(s))){l()}break;case"ds-tooltip":if(!customElements.get(i(s))){m()}break}}))}y();export{v as M,y as d};
2
- //# sourceMappingURL=p-DuJuqbcg.js.map
@@ -1 +0,0 @@
1
- {"version":3,"names":["modalCss","WIDTH_MAP","sm","md","lg","FOCUSABLE_SEL","join","modalIdCounter","Modal","__stencil_proxyCustomElement","HTMLElement","constructor","registerHost","this","open","description","closeAriaLabel","modalWidth","closing","hasFooter","titleId","descriptionId","dialogEl","previousFocus","closeTimer","componentDidLoad","updateFooterPresence","onOpenChange","componentDidRender","closeAnimationMs","finishClose","setTimeout","disconnectedCallback","clearCloseTimer","close","isOpen","alreadyOpen","document","activeElement","showModal","requestAnimationFrame","focusClose","el","querySelector","setFocus","clearTimeout","requestClose","reason","originalEvent","dsClose","emit","slot","assignedNodes","some","node","nodeType","Node","TEXT_NODE","textContent","trim","handleCancel","event","preventDefault","handleBackdropPointerDown","target","handleKeyDown","key","focusables","Array","from","querySelectorAll","filter","element","hasAttribute","getAttribute","length","focus","first","last","active","shiftKey","resolvedWidth","describedBy","ids","ariaDescribedby","Boolean","undefined","resolveMotionTimeMs","TOKEN_DEFAULTS","motionShort2","animationDurationShort3","dsAfterClose","render","h","Host","ref","class","onCancel","onPointerDown","onKeyDown","style","width","as","variant","emphasis","color","lineTruncation","textId","heading","wrap","label","side","size","icon","activeFill","hasBorder","onDsClick","detail","name","onSlotchange","currentTarget"],"sources":["src/wc/components/Modal/Modal.css?tag=ds-modal&encapsulation=scoped","src/wc/components/Modal/Modal.tsx"],"sourcesContent":["@import '../../utils/chrome-header.css';\n@import '../../utils/chrome-layout.css';\n@import '../../utils/forced-colors.css';\n\n:host {\n display: contents;\n}\n\n.modal-dialog {\n display: none;\n flex-direction: column;\n max-width: none;\n max-height: calc(100vh - 2 * var(--dimension-space-200));\n margin: auto;\n padding: 0;\n overflow: hidden;\n color: var(--color-foreground-primary);\n background-color: var(--color-background-primary);\n border: 0;\n border-radius: var(--dimension-radius-050);\n box-shadow: var(--effect-elevation-elevated-floating);\n outline: none;\n box-sizing: border-box;\n animation: modalDialogIn var(--effect-motion-short-2) forwards;\n}\n\n.modal-dialog[open] {\n display: flex;\n}\n\n.modal-dialog::backdrop {\n background-color: var(--color-background-shade);\n animation: modalBackdropIn var(--effect-motion-short-2) forwards;\n}\n\n.modal-dialog--closing {\n animation: modalDialogOut var(--effect-motion-short-2) forwards;\n}\n\n.modal-dialog--closing::backdrop {\n animation: modalBackdropOut var(--effect-motion-short-2) forwards;\n}\n\n@keyframes modalBackdropIn {\n from {\n opacity: 0;\n }\n to {\n opacity: 1;\n }\n}\n\n@keyframes modalBackdropOut {\n from {\n opacity: 1;\n }\n to {\n opacity: 0;\n }\n}\n\n@keyframes modalDialogIn {\n from {\n opacity: 0;\n transform: scale(0.97) translateY(4px);\n }\n to {\n opacity: 1;\n transform: scale(1) translateY(0);\n }\n}\n\n@keyframes modalDialogOut {\n from {\n opacity: 1;\n transform: scale(1) translateY(0);\n }\n to {\n opacity: 0;\n transform: scale(0.97) translateY(4px);\n }\n}\n\n@media (prefers-reduced-motion: reduce) {\n .modal-dialog[open],\n .modal-dialog--closing {\n animation: none;\n transform: none;\n }\n\n .modal-dialog::backdrop {\n animation: none;\n opacity: 1;\n }\n\n .modal-dialog--closing,\n .modal-dialog--closing::backdrop {\n opacity: 0;\n }\n}\n\n.modal-header {\n align-items: flex-start;\n flex: 0 0 auto;\n color: var(--color-foreground-primary);\n}\n\n.modal-copy,\nds-text.modal-heading,\nds-text.modal-description {\n width: auto;\n text-align: left;\n}\n\nds-text.modal-heading {\n -webkit-user-select: none;\n user-select: none;\n}\n\n.modal-close-tooltip {\n flex: 0 0 auto;\n}\n\n.modal-content {\n min-height: 0;\n padding: var(--dimension-space-200);\n overflow-y: auto;\n flex: 1 1 auto;\n box-sizing: border-box;\n}\n\n.modal-footer {\n justify-content: flex-start;\n height: var(--dimension-size-800);\n flex: 0 0 auto;\n border-top: var(--dimension-stroke-width-012) solid var(--color-border-tertiary);\n}\n\n.modal-footer__actions {\n display: flex;\n align-items: center;\n gap: var(--dimension-space-100);\n min-width: 0;\n}\n\n.modal-footer--empty {\n display: none;\n}\n\n.modal-footer__actions slot {\n display: contents;\n}\n\n@media (forced-colors: active) {\n .modal-dialog {\n box-shadow: none;\n outline: var(--dimension-stroke-width-012) solid var(--ds-forced-color-content);\n outline-offset: calc(-1 * var(--dimension-stroke-width-012));\n }\n}\n","import {\n Component,\n Prop,\n State,\n Event,\n EventEmitter,\n Element,\n Watch,\n h,\n Host,\n} from '@stencil/core';\nimport { resolveMotionTimeMs, TOKEN_DEFAULTS } from '../../utils';\n\nexport type ModalWidth = 'sm' | 'md' | 'lg';\nexport type ModalCloseReason = 'close-button' | 'escape' | 'backdrop';\n\nexport interface ModalCloseDetail {\n reason: ModalCloseReason;\n originalEvent: Event;\n}\n\nconst WIDTH_MAP: Record<ModalWidth, string> = {\n sm: 'var(--dimension-modal-width-sm)',\n md: 'var(--dimension-modal-width-md)',\n lg: 'var(--dimension-modal-width-lg)',\n};\n\nconst FOCUSABLE_SEL = [\n 'a[href]',\n 'area[href]',\n 'button:not([disabled])',\n 'input:not([disabled]):not([type=\"hidden\"])',\n 'select:not([disabled])',\n 'textarea:not([disabled])',\n 'iframe',\n '[contenteditable=\"true\"]',\n '[tabindex]:not([tabindex=\"-1\"])',\n].join(',');\n\nlet modalIdCounter = 0;\n\n@Component({\n tag: 'ds-modal',\n styleUrl: 'Modal.css',\n scoped: true,\n})\nexport class Modal {\n @Element() el!: HTMLElement;\n\n @Prop({ mutable: true }) open: boolean = false;\n @Prop() heading!: string;\n /** Optional supporting copy shown below the heading. */\n @Prop() description: string = '';\n @Prop() closeAriaLabel: string = 'Close';\n @Prop() modalWidth: ModalWidth | string = 'md';\n /** Optional id reference for explanatory content in the default slot. */\n @Prop({ attribute: 'aria-describedby' }) ariaDescribedby: string | undefined;\n\n @State() private closing: boolean = false;\n @State() private hasFooter: boolean = false;\n\n /** Emitted when an internal dismissal control requests that the modal close. */\n @Event() dsClose!: EventEmitter<ModalCloseDetail>;\n /** Emitted after exit motion completes, the top layer closes, and focus is restored. */\n @Event() dsAfterClose!: EventEmitter<void>;\n\n private titleId = `ds-modal-title-${++modalIdCounter}`;\n private descriptionId = `${this.titleId}-description`;\n private dialogEl: HTMLDialogElement | null = null;\n private previousFocus: HTMLElement | null = null;\n private closeTimer: ReturnType<typeof setTimeout> | null = null;\n\n componentDidLoad() {\n this.updateFooterPresence();\n if (this.open) this.onOpenChange(true);\n }\n\n componentDidRender() {\n if (!this.closing || !this.dialogEl?.open || this.closeTimer) return;\n const closeAnimationMs = this.closeAnimationMs;\n if (closeAnimationMs <= 0) {\n this.finishClose();\n return;\n }\n this.closeTimer = setTimeout(() => {\n this.closeTimer = null;\n this.finishClose();\n }, closeAnimationMs);\n }\n\n disconnectedCallback() {\n this.clearCloseTimer();\n if (this.dialogEl?.open) this.dialogEl.close();\n }\n\n @Watch('open')\n onOpenChange(isOpen: boolean) {\n if (isOpen) {\n this.clearCloseTimer();\n const alreadyOpen = !!this.dialogEl?.open;\n this.closing = false;\n if (!this.dialogEl || alreadyOpen) return;\n this.previousFocus = document.activeElement as HTMLElement | null;\n this.dialogEl.showModal();\n requestAnimationFrame(() => {\n if (this.open && this.dialogEl?.open) this.focusClose();\n });\n } else if (this.dialogEl?.open) {\n this.closing = true;\n }\n }\n\n private focusClose() {\n const close = this.el.querySelector('ds-button-unfilled.modal-close') as\n | (HTMLElement & { setFocus?: () => Promise<void> })\n | null;\n void close?.setFocus?.();\n }\n\n private clearCloseTimer() {\n if (this.closeTimer) {\n clearTimeout(this.closeTimer);\n this.closeTimer = null;\n }\n }\n\n private requestClose(reason: ModalCloseReason, originalEvent: Event) {\n if (!this.open || this.closing || !this.dialogEl?.open) return;\n this.dsClose.emit({ reason, originalEvent });\n this.open = false;\n }\n\n private updateFooterPresence(slot?: HTMLSlotElement) {\n const assignedNodes = slot?.assignedNodes() ?? [];\n this.hasFooter =\n assignedNodes.some(node => node.nodeType !== Node.TEXT_NODE || !!node.textContent?.trim()) ||\n this.el.querySelector('[slot=\"footer\"]') !== null;\n }\n\n private handleCancel(event: Event) {\n event.preventDefault();\n this.requestClose('escape', event);\n }\n\n private handleBackdropPointerDown(event: PointerEvent) {\n if (event.target === this.dialogEl) this.requestClose('backdrop', event);\n }\n\n private handleKeyDown(event: KeyboardEvent) {\n if (event.key === 'Escape') {\n event.preventDefault();\n this.requestClose('escape', event);\n return;\n }\n if (event.key !== 'Tab' || !this.dialogEl) return;\n const focusables = Array.from(\n this.dialogEl.querySelectorAll<HTMLElement>(FOCUSABLE_SEL)\n ).filter(\n element => !element.hasAttribute('disabled') && element.getAttribute('aria-hidden') !== 'true'\n );\n if (!focusables.length) {\n event.preventDefault();\n this.dialogEl.focus();\n return;\n }\n const first = focusables[0];\n const last = focusables[focusables.length - 1];\n const active = document.activeElement;\n if (event.shiftKey && (active === first || active === this.dialogEl)) {\n event.preventDefault();\n last.focus();\n } else if (!event.shiftKey && active === last) {\n event.preventDefault();\n first.focus();\n }\n }\n\n private get resolvedWidth(): string {\n if (this.modalWidth === 'sm' || this.modalWidth === 'md' || this.modalWidth === 'lg') {\n return WIDTH_MAP[this.modalWidth];\n }\n return this.modalWidth as string;\n }\n\n private get describedBy(): string | undefined {\n const ids = [this.description ? this.descriptionId : '', this.ariaDescribedby ?? ''].filter(\n Boolean\n );\n return ids.length > 0 ? ids.join(' ') : undefined;\n }\n\n private get closeAnimationMs(): number {\n return resolveMotionTimeMs(TOKEN_DEFAULTS.motionShort2, TOKEN_DEFAULTS.animationDurationShort3);\n }\n\n private finishClose() {\n if (!this.dialogEl?.open) return;\n this.dialogEl.close();\n this.closing = false;\n this.clearCloseTimer();\n this.previousFocus?.focus?.();\n this.previousFocus = null;\n this.dsAfterClose.emit();\n }\n\n render() {\n return (\n <Host>\n <dialog\n ref={(element?: HTMLDialogElement) => {\n this.dialogEl = element ?? null;\n }}\n class={{ 'modal-dialog': true, 'modal-dialog--closing': this.closing }}\n aria-labelledby={this.titleId}\n aria-describedby={this.describedBy}\n onCancel={(event: Event) => this.handleCancel(event)}\n onPointerDown={(event: PointerEvent) => this.handleBackdropPointerDown(event)}\n onKeyDown={(event: KeyboardEvent) => this.handleKeyDown(event)}\n style={{\n width: `min(${this.resolvedWidth}, calc(100vw - 2 * var(--dimension-space-200)))`,\n }}\n >\n <div class=\"modal-header ds-chrome-header ds-chrome-header--bounded\">\n <div class=\"modal-copy ds-chrome-header__copy ds-chrome-header__copy--stacked ds-control--md\">\n <ds-text\n class=\"modal-heading ds-chrome-header__heading\"\n as=\"h2\"\n variant=\"text-title-small\"\n emphasis\n color=\"primary\"\n lineTruncation={1}\n textId={this.titleId}\n >\n {this.heading}\n </ds-text>\n {this.description ? (\n <ds-text\n class=\"modal-description ds-chrome-header__description\"\n as=\"p\"\n variant=\"text-body-medium\"\n color=\"secondary\"\n wrap=\"wrap\"\n textId={this.descriptionId}\n >\n {this.description}\n </ds-text>\n ) : null}\n </div>\n <ds-tooltip\n class=\"modal-close-tooltip ds-chrome-header__trailing\"\n label={this.closeAriaLabel}\n side=\"bottom\"\n size=\"sm\"\n >\n <ds-button-unfilled\n class=\"modal-close\"\n variant=\"icon\"\n icon=\"Cross\"\n size=\"md\"\n aria-label={this.closeAriaLabel}\n activeFill={false}\n hasBorder={false}\n onDsClick={(event: CustomEvent<MouseEvent>) =>\n this.requestClose('close-button', event.detail)\n }\n />\n </ds-tooltip>\n </div>\n <div class=\"modal-content\">\n <slot />\n </div>\n <div\n class={{\n 'modal-footer': true,\n 'ds-chrome-row': true,\n 'ds-chrome-space--lg': true,\n 'modal-footer--empty': !this.hasFooter,\n }}\n >\n <div class=\"modal-footer__actions\">\n <slot\n name=\"footer\"\n onSlotchange={(event: Event) =>\n this.updateFooterPresence(event.currentTarget as HTMLSlotElement)\n }\n />\n </div>\n </div>\n </dialog>\n </Host>\n );\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1,2 +0,0 @@
1
- import{p as s,H as e,c as t,h as i,a as n,t as r}from"./index.js";import{g as a,i as o}from"./p-BQq26pt9.js";import{d}from"./p-DQpw21HO.js";import{d as c}from"./p-CG4Fp3SY.js";import{d as l}from"./p-Cea7rROU.js";import{d as h}from"./p-0XTyQNRG.js";import{d as b}from"./p-CHCsDvJK.js";import{d as v}from"./p-DhibZEq-.js";import{d as f}from"./p-DC69DgAR.js";import{d as u}from"./p-BpSPAlOx.js";import{d as p}from"./p-B9oadFSC.js";import{d as g}from"./p-JuKGR7Ay.js";function m(s,e,t){if(!s||!e){return{value:"",hideTabs:false}}if(s!==e&&!s.startsWith(`${e}/`)){return{value:"",hideTabs:false}}const i=s.slice(e.length);const n=i.startsWith("/")?i.slice(1).split("/")[0]:"";const r=a(t);if(!n){return{value:r[0]?.id??"",hideTabs:false}}const o=r.find((s=>s.id===n));if(o){return{value:o.id,hideTabs:false}}return{value:"",hideTabs:true}}function _(s,e){return s.length===0&&(e?.length??0)>0}function y(s,e){const t=[];let i=[];for(const n of s){if(o(n)){if(i.length>0){t.push({items:i});i=[]}continue}i.push({label:n.label,value:n.id,dot:n.dot,isSelected:n.id===e,isInactive:n.isInactive})}if(i.length>0){t.push({items:i})}return t}function w(s,e){return y(T(s),e)}function x(s,e,t,i=2){const n=s-e;if(t){return n>-i}return n>i}function C(s,e,t,i,n){if(s.length===0||e<=0)return 0;const r=S(s,s.length,i,n);if(r<=e)return s.length;const a=Math.max(0,e-t);let o=0;for(let e=1;e<=s.length;e++){const t=S(s,e,i,n);if(t>a)break;o=e}return o}function k(s){let e=s.length;while(e>0&&o(s[e-1])){e-=1}return s.slice(0,e)}function T(s){let e=0;while(e<s.length&&o(s[e])){e+=1}return s.slice(e)}function S(s,e,t,i){if(e<=0)return 0;const n=s.slice(0,e).reduce(((s,e)=>s+e),0);return i+n+t*Math.max(0,e-1)}const F="dsChromeTransitionStart";const D="dsChromeTransitionEnd";class E{constructor(){this.depth=0}enter(){this.depth+=1}exit(){this.depth=Math.max(0,this.depth-1)}get isActive(){return this.depth>0}}class O{constructor(){this.active=false}enter(){this.active=true}exit(){this.active=false}get isActive(){return this.active}}function A(s){let e=0;return{schedule(){if(e!==0)return;e=requestAnimationFrame((()=>{e=0;s()}))},cancel(){if(e!==0){cancelAnimationFrame(e);e=0}}}}function M(s){return s.detail?.source}function H(s){return s.detail?.phase}const z=()=>`.ds-control--lg.sc-ds-bar-nav,.ds-control--lg.sc-ds-bar-nav-h,.ds-control--md.sc-ds-bar-nav-h,.ds-control--md.sc-ds-bar-nav,.ds-control--sm.sc-ds-bar-nav-h,.ds-control--sm.sc-ds-bar-nav,.ds-control--xs.sc-ds-bar-nav-h,.ds-control--xs.sc-ds-bar-nav{--ds-control-radius:var(--dimension-radius-025)}.ds-control--lg.sc-ds-bar-nav-h,.ds-control--lg.sc-ds-bar-nav{--ds-control-height:var(--dimension-size-500);--ds-control-icon:var(--dimension-iconography-lg);--ds-control-padding-inline:var(--dimension-space-100);--ds-control-label-inset:var(--dimension-space-050);--ds-control-gap:var(--dimension-space-050)}.ds-control--md.sc-ds-bar-nav-h,.ds-control--md.sc-ds-bar-nav{--ds-control-height:var(--dimension-size-400);--ds-control-icon:var(--dimension-iconography-md);--ds-control-padding-inline:var(--dimension-space-075);--ds-control-label-inset:var(--dimension-space-025);--ds-control-gap:var(--dimension-space-050)}.ds-control--sm.sc-ds-bar-nav-h,.ds-control--sm.sc-ds-bar-nav{--ds-control-height:var(--dimension-size-300);--ds-control-icon:var(--dimension-iconography-sm);--ds-control-padding-inline:var(--dimension-space-050);--ds-control-label-inset:var(--dimension-space-025);--ds-control-gap:var(--dimension-space-025)}.ds-control--xs.sc-ds-bar-nav-h,.ds-control--xs.sc-ds-bar-nav{--ds-control-height:var(--dimension-size-200);--ds-control-icon:var(--dimension-iconography-xs);--ds-control-padding-inline:var(--dimension-space-025);--ds-control-label-inset:var(--dimension-space-025);--ds-control-gap:0}.ds-control-frame.sc-ds-bar-nav{display:inline-flex;align-items:center;box-sizing:border-box;height:var(--ds-control-height, var(--dimension-size-400));padding-inline:var(--ds-control-padding-inline, var(--dimension-space-075));gap:var(--ds-control-gap, var(--dimension-space-050));border-radius:var(--ds-control-radius, var(--dimension-radius-025))}.ds-control-section-heading.sc-ds-bar-nav{display:flex;align-items:center;box-sizing:border-box;height:var(--ds-control-height, var(--dimension-size-400));padding-inline:calc( var(--ds-control-padding-inline, var(--dimension-space-075)) + var(--ds-control-label-inset, var(--dimension-space-025)) )}.ds-control-icon-box.sc-ds-bar-nav{display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;width:var(--ds-control-icon, var(--dimension-iconography-md));height:var(--ds-control-icon, var(--dimension-iconography-md))}.ds-control-label-box.sc-ds-bar-nav{min-width:0;padding-inline:var(--ds-control-label-inset, var(--dimension-space-025))}.ds-control-label-dot.sc-ds-bar-nav{position:relative;padding-inline-end:calc( var(--ds-control-label-inset, var(--dimension-space-025)) + var(--ds-control-gap, var(--dimension-space-050)) )}.ds-control-label-dot__badge.sc-ds-bar-nav{position:absolute;inset-block-start:0;inset-inline-end:0;pointer-events:none}.ds-chrome-space--sm.sc-ds-bar-nav-h,.ds-chrome-space--sm.sc-ds-bar-nav{--ds-chrome-padding:var(--dimension-space-050);--ds-chrome-gap:var(--dimension-space-050)}.ds-chrome-space--md.sc-ds-bar-nav-h,.ds-chrome-space--md.sc-ds-bar-nav{--ds-chrome-padding:var(--dimension-space-100);--ds-chrome-gap:var(--dimension-space-100)}.ds-chrome-space--lg.sc-ds-bar-nav-h,.ds-chrome-space--lg.sc-ds-bar-nav{--ds-chrome-padding:var(--dimension-space-200);--ds-chrome-gap:var(--dimension-space-200)}.ds-chrome-row.sc-ds-bar-nav-h,.ds-chrome-row.sc-ds-bar-nav,.ds-chrome-column.sc-ds-bar-nav-h,.ds-chrome-column.sc-ds-bar-nav,.ds-chrome-grid.sc-ds-bar-nav-h,.ds-chrome-grid.sc-ds-bar-nav{display:flex;box-sizing:border-box;gap:var(--ds-chrome-gap, var(--dimension-space-100));padding:var(--ds-chrome-padding, var(--dimension-space-100))}.ds-chrome-row.sc-ds-bar-nav-h,.ds-chrome-row.sc-ds-bar-nav{flex-direction:row;align-items:center}.ds-chrome-column.sc-ds-bar-nav-h,.ds-chrome-column.sc-ds-bar-nav{flex-direction:column}.ds-chrome-grid.sc-ds-bar-nav-h,.ds-chrome-grid.sc-ds-bar-nav{display:grid;align-items:center}@media (forced-colors: active){.sc-ds-bar-nav:root,.sc-ds-bar-nav-h,.ds-forced-colors-scope.sc-ds-bar-nav{--ds-forced-color-surface:Canvas;--ds-forced-color-content:CanvasText;--ds-forced-color-control-boundary:ButtonText;--ds-forced-color-selected:Highlight;--ds-forced-color-on-selected:HighlightText;--ds-forced-color-disabled:GrayText}}.sc-ds-bar-nav-h{--ds-focus-ring-width:var(--dimension-stroke-width-025, 2px);--ds-focus-ring-offset:var(--dimension-space-025, 2px);--ds-focus-ring-color:var(--color-interaction-focus)}.ds-focus-ring.sc-ds-bar-nav-h,.ds-focus-ring.sc-ds-bar-nav,.ds-focus-ring-inset.sc-ds-bar-nav-h,.ds-focus-ring-inset.sc-ds-bar-nav{outline:none;-webkit-tap-highlight-color:transparent;touch-action:manipulation}.ds-focus-ring.sc-ds-bar-nav-h:focus-visible,.ds-focus-ring.sc-ds-bar-nav:focus-visible{outline:var(--ds-focus-ring-width) solid var(--ds-focus-ring-color);outline-offset:var(--ds-focus-ring-offset)}.ds-focus-ring.ds-focus-ring--visible.sc-ds-bar-nav-h,.ds-focus-ring.ds-focus-ring--visible.sc-ds-bar-nav{outline:var(--ds-focus-ring-width) solid var(--ds-focus-ring-color);outline-offset:var(--ds-focus-ring-offset)}.ds-focus-ring-inset.sc-ds-bar-nav-h:focus-visible,.ds-focus-ring-inset.sc-ds-bar-nav:focus-visible{outline:none}.ds-focus-ring-inset.sc-ds-bar-nav-h:focus-visible::after,.ds-focus-ring-inset.sc-ds-bar-nav:focus-visible::after{outline:var(--ds-focus-ring-width) solid var(--ds-focus-ring-color);outline-offset:calc(-1 * var(--ds-focus-ring-width))}.ds-focus-ring-inset.ds-focus-ring--visible.sc-ds-bar-nav-h,.ds-focus-ring-inset.ds-focus-ring--visible.sc-ds-bar-nav{outline:none}.ds-focus-ring-inset.ds-focus-ring--visible.sc-ds-bar-nav-h::after,.ds-focus-ring-inset.ds-focus-ring--visible.sc-ds-bar-nav::after{outline:var(--ds-focus-ring-width) solid var(--ds-focus-ring-color);outline-offset:calc(-1 * var(--ds-focus-ring-width))}@media (forced-colors: active){.sc-ds-bar-nav-h{--ds-focus-ring-color:var(--ds-forced-color-selected)}}@media (forced-colors: active){.sc-ds-bar-nav:root,.sc-ds-bar-nav-h,.ds-forced-colors-scope.sc-ds-bar-nav{--ds-forced-color-surface:Canvas;--ds-forced-color-content:CanvasText;--ds-forced-color-control-boundary:ButtonText;--ds-forced-color-selected:Highlight;--ds-forced-color-on-selected:HighlightText;--ds-forced-color-disabled:GrayText}}.ds-control-inactive.sc-ds-bar-nav-h,.ds-control-inactive.sc-ds-bar-nav{opacity:var(--effect-opacity-medium);pointer-events:none;cursor:not-allowed}@media (forced-colors: active){.ds-control-inactive.sc-ds-bar-nav-h,.ds-control-inactive.sc-ds-bar-nav{color:var(--ds-forced-color-disabled);opacity:1}}.sc-ds-bar-nav-h{display:block}.bar-nav.sc-ds-bar-nav{position:relative;height:var(--dimension-size-600);border-bottom:var(--dimension-stroke-width-012) solid var(--_bar-nav-border);background-color:var(--_bar-nav-bg);color:var(--_bar-nav-fg-primary);-webkit-user-select:none;user-select:none;overflow:hidden;transition:background-color var(--effect-motion-short-3), border-color var(--effect-motion-short-3), color var(--effect-motion-short-3);isolation:isolate;--_bar-nav-bg:var(--color-background-secondary);--_bar-nav-border:var(--color-border-tertiary);--_bar-nav-fg-primary:var(--color-foreground-primary);--_bar-nav-fg-secondary:var(--color-foreground-secondary);--_bar-nav-hover:var(--color-interaction-hover);--_bar-nav-pressed:var(--color-interaction-pressed);--_bar-nav-focus:var(--color-interaction-focus);--_bar-nav-dot:var(--color-foreground-bold-brand);--ds-focus-ring-color:var(--_bar-nav-focus)}.bar-nav--dashboard.sc-ds-bar-nav,.bar-nav--settings.sc-ds-bar-nav{--_bar-nav-bg:var(--color-background-secondary);--_bar-nav-border:var(--color-border-tertiary);--_bar-nav-fg-primary:var(--color-foreground-primary);--_bar-nav-fg-secondary:var(--color-foreground-secondary);--_bar-nav-hover:var(--color-interaction-hover);--_bar-nav-pressed:var(--color-interaction-pressed);--_bar-nav-focus:var(--color-interaction-focus);--_bar-nav-dot:var(--color-foreground-bold-brand)}ds-shell-app.sc-ds-bar-nav-h:not([gradient-preset='none']) .bar-nav.sc-ds-bar-nav,ds-shell-app:not([gradient-preset='none']) .sc-ds-bar-nav-h .bar-nav.sc-ds-bar-nav,ds-shell-app.shell-app--paper-texture.sc-ds-bar-nav-h .bar-nav.sc-ds-bar-nav,ds-shell-app.shell-app--paper-texture .sc-ds-bar-nav-h .bar-nav.sc-ds-bar-nav{background-color:transparent}.bar-nav.sc-ds-bar-nav>.sc-ds-bar-nav:not(.bar-nav__tabs-probe){position:relative;z-index:3}.bar-nav--tabs-collapsed.sc-ds-bar-nav{display:flex;gap:var(--dimension-space-100);align-items:center}.bar-nav__left.sc-ds-bar-nav{position:relative;flex:1 1 0%;min-width:0;width:0;display:flex;align-items:center}.bar-nav__tabs-visible.sc-ds-bar-nav{flex:1;min-width:0;width:100%}.bar-nav__tabs-probe.sc-ds-bar-nav{position:absolute;left:0;top:0;visibility:hidden;pointer-events:none;overflow:visible;width:max-content;max-width:none;z-index:-1}.bar-nav__tabs-probe.sc-ds-bar-nav>div.sc-ds-bar-nav{width:max-content}.bar-nav__tab-list.sc-ds-bar-nav{display:flex;align-items:center;gap:var(--dimension-space-050);position:relative;width:max-content}.bar-nav__tab.sc-ds-bar-nav{display:flex;align-items:center;justify-content:center;gap:var(--ds-control-gap);height:var(--ds-control-height);min-width:var(--ds-control-height);padding:0 var(--ds-control-padding-inline);box-sizing:border-box;border:none;border-radius:var(--ds-control-radius);background-color:transparent;color:var(--_bar-nav-fg-secondary);cursor:default;position:relative;flex-shrink:0;-webkit-user-select:none;user-select:none;transition:color var(--effect-motion-short-2)}.bar-nav__tab.sc-ds-bar-nav::after{content:'';position:absolute;inset:0;border-radius:var(--ds-control-radius);background:transparent;pointer-events:none;cursor:inherit}@media (hover: hover) and (pointer: fine){.bar-nav__tab.sc-ds-bar-nav:hover::after{background:var(--_bar-nav-hover)}}.bar-nav__tab.sc-ds-bar-nav:active::after{background:var(--_bar-nav-pressed)}.bar-nav__tab--selected.sc-ds-bar-nav{color:var(--_bar-nav-fg-primary)}.bar-nav__tab-label.sc-ds-bar-nav{display:inline-flex;align-items:center;white-space:nowrap}.bar-nav__tab-divider.sc-ds-bar-nav{display:flex;align-items:center;justify-content:center;box-sizing:border-box;width:var(--dimension-space-100);height:var(--ds-control-height);padding-block:var(--ds-control-padding-inline);flex-shrink:0;pointer-events:none}.bar-nav__tab-divider-line.sc-ds-bar-nav{width:var(--dimension-stroke-width-012);align-self:stretch;background-color:var(--_bar-nav-border)}.bar-nav__tabs-pending.sc-ds-bar-nav{flex:1;min-width:0;height:var(--ds-control-height);visibility:hidden;pointer-events:none}.bar-nav__overflow-trigger.sc-ds-bar-nav{margin-left:auto;--ds-button-unfilled-fg:var(--_bar-nav-fg-secondary);--ds-button-unfilled-fg-active:var(--_bar-nav-fg-primary);--ds-interaction-hover:var(--_bar-nav-hover);--ds-interaction-pressed:var(--_bar-nav-pressed);--ds-focus-ring-color:var(--_bar-nav-focus)}ds-text.bar-nav__heading.sc-ds-bar-nav{display:inline-flex;align-items:center;height:var(--ds-control-height);padding-inline:calc(var(--ds-control-padding-inline) + var(--ds-control-label-inset));-webkit-user-select:none;user-select:none}`;const P=s(class s extends e{constructor(s){super();if(s!==false){this.__registerHost()}this.dsTabChange=t(this,"dsTabChange",7);this.navStyle="dashboard";this.tabs=[];this.value="";this.basePath="";this.currentUrl="";this.moreTabsLabel="More tabs";this.resolvedTabs=[];this.urlDerivedValue="";this.hideTabsForDetailRoute=false;this.tabsCollapsed=false;this.menuOpen=false;this.menuTriggerActive=false;this.tabLayoutCommitted=false;this.visibleTabs=[];this.overflowTabs=[];this.menuInitialFocusVisible=false;this.overflowRovingFocused=false;this.focusedTabId="";this.headerEl=null;this.triggerEl=null;this.menuEl=null;this.visibleTabListEl=null;this.probeTabListEl=null;this.resizeObserver=null;this.intrinsicWidthRetryCount=0;this.tabLayoutPendingFrames=0;this.panelNavTransition=new O;this.panelToolsTransition=new O;this.overflowCoalescer=A((()=>{this.updateTabsCollapsed()}));this.chromeTransitionShell=null;this.committedSection="";this.pendingSection="";this.onChromeTransitionStart=s=>{const e=M(s);if(e==="panel-nav"){this.panelNavTransition.enter();return}if(e==="panel-tools"){const e=H(s)??"opening";if(e==="closing"){this.panelToolsTransition.enter()}}};this.onChromeTransitionEnd=s=>{const e=M(s);if(e==="panel-nav"){this.panelNavTransition.exit();if(!this.panelNavTransition.isActive){this.scheduleOverflowCheck()}return}if(e==="panel-tools"){this.panelToolsTransition.exit();this.scheduleOverflowCheck()}};this.handleOverflowFocus=()=>{this.overflowRovingFocused=true};this.handleOverflowBlur=()=>{this.overflowRovingFocused=false}}get effectiveValue(){if(this.currentUrl&&this.basePath){return this.urlDerivedValue}return this.value}get renderedSelectableTabs(){const s=this.hasOverflowTabs?this.visibleTabs:this.resolvedTabs;return a(s)}get hasOverflowTabs(){return this.tabLayoutCommitted&&this.tabsCollapsed&&this.overflowTabs.length>0}syncFocusedTabId(s,e){if(e.some((e=>e.id===s&&!e.isInactive))){this.focusedTabId=s;return}const t=e.find((s=>!s.isInactive));this.focusedTabId=t?.id??""}digestTabsConfig(s){return s.map((s=>o(s)?"|":s.id)).join(",")}resetTabOverflowLayout(){this.tabLayoutCommitted=false;this.tabsCollapsed=false;this.menuOpen=false;this.menuTriggerActive=false;this.menuInitialFocusVisible=false;this.intrinsicWidthRetryCount=0;this.tabLayoutPendingFrames=0;this.visibleTabs=[];this.overflowTabs=[]}onHostPropsChange(){this.applyHostProps()}onSelectionChange(){this.syncFocusedTabId(this.effectiveValue,this.renderedSelectableTabs);this.syncMenuSections();this.scheduleOverflowCheck()}onMenuOpenChange(s){if(this.menuEl){this.menuEl.open=s}}onTabsCollapsedChange(s,e){if(!s){this.menuOpen=false;this.menuTriggerActive=false;this.menuInitialFocusVisible=false;this.menuEl=null}this.scheduleOverflowCheck();if(s){requestAnimationFrame((()=>{this.scheduleOverflowCheck()}))}if(s||e===undefined||e===s)return;requestAnimationFrame((()=>this.scheduleOverflowCheck()));queueMicrotask((()=>this.focusVisibleSelectedTab()))}componentWillLoad(){this.applyHostProps();this.syncFocusedTabId(this.effectiveValue,a(this.resolvedTabs))}componentDidLoad(){this.syncHostPropsIfNeeded();this.scheduleDeferredHostPropSync();this.setupOverflowObserver();this.bindChromeTransitionListeners();this.scheduleOverflowCheck()}componentDidRender(){if(this.chromeOverflowPaused()){this.syncMenuAnchor();return}this.scheduleOverflowCheck();this.syncMenuAnchor()}disconnectedCallback(){this.resizeObserver?.disconnect();this.resizeObserver=null;this.overflowCoalescer.cancel();this.unbindChromeTransitionListeners()}bindChromeTransitionListeners(){const s=this.el.closest("ds-shell-app");if(!s)return;this.chromeTransitionShell=s;s.addEventListener(F,this.onChromeTransitionStart);s.addEventListener(D,this.onChromeTransitionEnd)}unbindChromeTransitionListeners(){if(!this.chromeTransitionShell)return;this.chromeTransitionShell.removeEventListener(F,this.onChromeTransitionStart);this.chromeTransitionShell.removeEventListener(D,this.onChromeTransitionEnd);this.chromeTransitionShell=null}chromeOverflowPaused(){return this.panelNavTransition.isActive||this.panelToolsTransition.isActive}syncHostPropsIfNeeded(){if(_(this.resolvedTabs,this.tabs)){this.applyHostProps()}else if(this.currentUrl&&this.basePath){this.syncValueFromUrl()}}scheduleDeferredHostPropSync(){let e=s.HOST_PROP_SYNC_BUDGET;const t=()=>{this.syncHostPropsIfNeeded();if(--e>0){requestAnimationFrame(t)}};queueMicrotask(t)}setupOverflowObserver(){if(typeof ResizeObserver==="undefined"||!this.headerEl)return;this.resizeObserver?.disconnect();this.resizeObserver=new ResizeObserver((()=>{if(this.chromeOverflowPaused())return;this.scheduleOverflowCheck()}));this.resizeObserver.observe(this.headerEl)}scheduleOverflowCheck(){if(this.chromeOverflowPaused())return;this.overflowCoalescer.schedule()}getLeftZoneAvailableWidth(){if(!this.headerEl)return 0;const s=getComputedStyle(this.headerEl);const e=(parseFloat(s.paddingLeft)||0)+(parseFloat(s.paddingRight)||0);return Math.max(0,this.headerEl.clientWidth-e)}getTabsIntrinsicWidth(){return this.probeTabListEl?.scrollWidth??0}getHeaderGap(){if(!this.headerEl)return 0;const s=getComputedStyle(this.headerEl);return parseFloat(s.columnGap||s.gap)||0}getOverflowTriggerReserveWidth(){if(!this.triggerEl){return 40}return this.triggerEl.getBoundingClientRect().width+this.getHeaderGap()}getProbeTabMetrics(){const s=this.probeTabListEl;if(!s)return null;const e=Array.from(s.children);const t=e.map((s=>s.getBoundingClientRect().width));if(t.length===0||t.some((s=>s===0)))return null;const i=getComputedStyle(s);const n=parseFloat(i.columnGap||i.gap)||0;const r=t.reduce(((s,e)=>s+e),0);const a=n*Math.max(0,t.length-1);const o=Math.max(0,s.scrollWidth-r-a);return{itemWidths:t,itemGap:n,listExtraWidth:o}}setOverflowTabLayout(s,e){const t=e.length>0;const i=this.digestTabsConfig(s)!==this.digestTabsConfig(this.visibleTabs);const n=this.digestTabsConfig(e)!==this.digestTabsConfig(this.overflowTabs);if(i){this.visibleTabs=s}if(n){this.overflowTabs=e}if(t!==this.tabsCollapsed){this.tabsCollapsed=t;if(!t){this.menuOpen=false;this.menuTriggerActive=false}}this.syncFocusedTabId(this.effectiveValue,a(t?s:this.resolvedTabs))}scheduleIntrinsicWidthRetry(){if(this.intrinsicWidthRetryCount>=s.INTRINSIC_WIDTH_RETRY_MAX)return;this.intrinsicWidthRetryCount++;requestAnimationFrame((()=>this.scheduleOverflowCheck()))}forceTabLayoutCommit(s){this.intrinsicWidthRetryCount=0;this.tabLayoutPendingFrames=0;this.setOverflowTabLayout(s?[]:this.resolvedTabs,s?this.resolvedTabs:[]);this.tabLayoutCommitted=true}updateTabsCollapsed(){if(!this.headerEl||this.resolvedTabs.length===0||this.hideTabsForDetailRoute){if(this.tabsCollapsed){this.setOverflowTabLayout([],[])}this.intrinsicWidthRetryCount=0;this.tabLayoutPendingFrames=0;this.tabLayoutCommitted=true;return}const e=this.getProbeTabMetrics();const t=this.getTabsIntrinsicWidth();if(!e||t===0){this.tabLayoutPendingFrames+=1;if(this.intrinsicWidthRetryCount>=s.INTRINSIC_WIDTH_RETRY_MAX){this.forceTabLayoutCommit(false)}else if(this.tabLayoutPendingFrames>=s.TAB_LAYOUT_COMMIT_MAX_FRAMES){this.forceTabLayoutCommit(false)}else{this.scheduleIntrinsicWidthRetry()}return}this.intrinsicWidthRetryCount=0;this.tabLayoutPendingFrames=0;const i=x(t,this.getLeftZoneAvailableWidth(),this.tabsCollapsed,s.OVERFLOW_HYSTERESIS_PX);if(!i){this.setOverflowTabLayout(this.resolvedTabs,[]);this.tabLayoutCommitted=true;return}const n=C(e.itemWidths,this.getLeftZoneAvailableWidth(),this.getOverflowTriggerReserveWidth(),e.itemGap,e.listExtraWidth);const r=k(this.resolvedTabs.slice(0,n));const a=this.resolvedTabs.slice(r.length);this.setOverflowTabLayout(r,a);this.tabLayoutCommitted=true}syncMenuAnchor(){if(!this.menuEl||!this.triggerEl||!this.hasOverflowTabs)return;this.menuEl.anchor=this.triggerEl;this.syncMenuSections()}handleMenuSelect(s){const e=s.detail;if(e?.value!==undefined){this.selectTab(String(e.value))}this.menuOpen=false;this.menuInitialFocusVisible=false}handleMenuClose(){this.menuOpen=false;this.menuInitialFocusVisible=false}handleMenuAfterClose(){if(!this.menuOpen)this.menuTriggerActive=false}incomingTabs(){return this.tabs??[]}applyHostProps(){const s=this.basePath;const e=s!==""&&this.committedSection!==""&&s!==this.committedSection;if(e){this.urlDerivedValue="";this.committedSection="";this.pendingSection=s;this.resolvedTabs=[];this.resetTabOverflowLayout();return}if(this.pendingSection){if(!s||s!==this.pendingSection){return}if(!this.currentUrl.startsWith(this.pendingSection)){return}const e=this.incomingTabs();if(e.length===0){return}this.pendingSection=""}const t=this.incomingTabs();const i=this.digestTabsConfig(t)!==this.digestTabsConfig(this.resolvedTabs);this.resolvedTabs=t;this.syncValueFromUrl();this.committedSection=s;if(i){this.resetTabOverflowLayout()}this.scheduleOverflowCheck()}syncMenuSections(){if(!this.menuEl)return;this.menuEl.sections=w(this.overflowTabs,this.effectiveValue)}syncValueFromUrl(){const s=this.incomingTabs();if(!this.currentUrl||!this.basePath){this.urlDerivedValue="";this.hideTabsForDetailRoute=false;return}if(!this.currentUrl.startsWith(this.basePath)){this.urlDerivedValue="";this.hideTabsForDetailRoute=false;return}const{value:e,hideTabs:t}=m(this.currentUrl,this.basePath,s);this.urlDerivedValue=e;this.hideTabsForDetailRoute=t}selectTab(s){this.value=s;this.dsTabChange.emit(s)}focusVisibleSelectedTab(){const s=this.visibleTabListEl?.querySelector(`[data-tab-id="${this.effectiveValue}"]`);s?.focus({preventScroll:true})}focusVisibleTab(s){this.focusedTabId=s;const e=this.visibleTabListEl?.querySelector(`[data-tab-id="${s}"]`);e?.focus({preventScroll:true})}focusLastVisibleTab(){const s=[...this.renderedSelectableTabs].reverse().find((s=>!s.isInactive));if(s)this.focusVisibleTab(s.id)}findEnabledVisibleTab(s,e){const t=this.renderedSelectableTabs;for(let i=s+e;i>=0&&i<t.length;i+=e){if(!t[i]?.isInactive)return i}return null}handleTabKeyDown(s){const e=this.renderedSelectableTabs;if(!e.length)return;const t=s.target?.getAttribute("data-tab-id");const i=t??this.focusedTabId;if(s.key==="Enter"||s.key===" "){const t=e.find((s=>s.id===i));if(!t||t.isInactive)return;s.preventDefault();this.selectTab(t.id);return}const n=e.findIndex((s=>s.id===i));if(n<0)return;let r;if(s.key==="ArrowRight"){r=this.findEnabledVisibleTab(n,1);if(r===null&&this.hasOverflowTabs){s.preventDefault();this.overflowRovingFocused=true;void this.triggerEl?.setFocus?.();return}}else if(s.key==="ArrowLeft"){r=this.findEnabledVisibleTab(n,-1)}else if(s.key==="Home"){r=e.findIndex((s=>!s.isInactive))}else if(s.key==="End"){const s=[...e].reverse().findIndex((s=>!s.isInactive));r=s<0?null:e.length-1-s}else{return}if(r===null||r<0||r===n)return;s.preventDefault();this.focusVisibleTab(e[r].id)}toggleTabMenu(s){if(this.menuOpen){this.menuOpen=false;this.menuInitialFocusVisible=false;return}if(this.menuEl&&this.triggerEl){this.menuEl.anchor=this.triggerEl;this.menuEl.minWidth="";this.syncMenuSections()}this.menuInitialFocusVisible=s?.focusVisible??false;this.menuTriggerActive=true;this.menuOpen=true}handleTriggerKeyDown(s){if(!this.hasOverflowTabs)return;if(!this.menuOpen){if(s.key==="ArrowLeft"){s.preventDefault();this.overflowRovingFocused=false;this.focusLastVisibleTab();return}if(s.key==="Enter"||s.key===" "){s.preventDefault();this.toggleTabMenu({focusVisible:true})}return}if(s.key==="Escape"){s.preventDefault();this.menuOpen=false;this.menuInitialFocusVisible=false;void this.triggerEl?.setFocus?.()}}renderTabList(s,e){return i("div",{role:"tablist",class:"bar-nav__tab-list","aria-label":this.heading,ref:s=>{if(e){const e=s??null;if(e===this.probeTabListEl)return;this.probeTabListEl=e;if(e){this.intrinsicWidthRetryCount=0;this.tabLayoutPendingFrames=0;this.scheduleOverflowCheck()}}else{this.visibleTabListEl=s??null}},onKeyDown:e?undefined:s=>this.handleTabKeyDown(s),onFocusin:e?undefined:()=>{this.overflowRovingFocused=false}},s.map(((s,t)=>{if(o(s)){return i("div",{class:"bar-nav__tab-divider",key:`divider-${t}`,"aria-hidden":"true"},i("div",{class:"bar-nav__tab-divider-line"}))}const n=s.id===this.effectiveValue;return i("button",{key:s.id,type:"button",role:"tab","data-tab-id":s.id,class:{"bar-nav__tab":true,"bar-nav__tab--selected":n,"ds-control--md":true,"ds-focus-ring-inset":true,"ds-control-inactive":!!s.isInactive},"aria-selected":n?"true":"false","aria-disabled":s.isInactive?"true":undefined,"aria-controls":s.panelId??undefined,disabled:s.isInactive,tabIndex:!e&&!this.overflowRovingFocused&&s.id===this.focusedTabId?0:-1,onClick:()=>!e&&!s.isInactive&&this.selectTab(s.id),onFocus:()=>{if(!e)this.focusedTabId=s.id}},i("span",{class:{"bar-nav__tab-label":true,"ds-control-label-box":true,"ds-control-label-dot":!!s.dot,"bar-nav__tab-label--dot":!!s.dot}},i("ds-text",{as:"span",variant:"text-body-medium",emphasis:n,color:"inherit"},s.label),s.dot&&i("ds-badge",{class:"bar-nav__tab-dot ds-control-label-dot__badge",variant:"dot",hasRing:false,label:"","aria-hidden":"true"})))})))}render(){const s=this.basePath===""||this.committedSection===this.basePath;const e=s&&this.resolvedTabs.length>0&&!this.hideTabsForDetailRoute;const t=this.basePath||"no-section";const r=this.hasOverflowTabs?this.visibleTabs:this.resolvedTabs;return i(n,{key:"407c524c8f879a989af9f9c902cd6d1f440a3d82"},i("header",{key:"e374feaae26b1fa10b21a394822333460057abac",class:{"bar-nav":true,"ds-control--md":true,"ds-chrome-row":true,"ds-chrome-space--md":true,"bar-nav--dashboard":this.navStyle==="dashboard","bar-nav--settings":this.navStyle==="settings","bar-nav--tabs-collapsed":e&&this.hasOverflowTabs},ref:s=>{this.headerEl=s;if(s&&!this.resizeObserver){this.setupOverflowObserver()}}},e&&i("div",{key:"4e349982788772aeb1f510ed4906c125e304c42e",class:"bar-nav__tabs-probe","aria-hidden":"true",inert:true},i("div",{key:`probe-${t}`},this.renderTabList(this.resolvedTabs,true))),e&&this.tabLayoutCommitted&&r.length>0&&i("div",{key:"6c405bb697367df6158cb6903da5c13d3bbc5d3b",class:"bar-nav__left"},i("div",{key:`visible-${t}`,class:"bar-nav__tabs-visible"},this.renderTabList(r,false))),e&&!this.tabLayoutCommitted&&i("div",{key:"54959ebdf77c51100d69ddc4fa8efb776e40df1b",class:"bar-nav__tabs-pending","aria-hidden":"true"}),!e&&this.heading&&i("ds-text",{key:"84f21c2398baa8866c527627f8b9d9e91d3c6791",class:"bar-nav__heading",lineTruncation:1,as:"span",variant:"text-body-medium",emphasis:true,color:"primary",wrap:"nowrap"},this.heading),e&&this.hasOverflowTabs&&i("ds-button-unfilled",{key:"e417925e6f3337da08ffcfe858e83cf6c99be6f1",variant:"icon",class:{"bar-nav__overflow-trigger":true},icon:"ChevronDown",activeFill:false,hasBorder:false,focusTabIndex:this.overflowRovingFocused?0:-1,ref:s=>{this.triggerEl=s??null},haspopup:"menu",expanded:this.menuOpen,surfaceOpen:this.menuTriggerActive,"aria-label":this.moreTabsLabel,onDsClick:()=>this.toggleTabMenu({focusVisible:false}),onFocusin:this.handleOverflowFocus,onFocusout:this.handleOverflowBlur,onKeyDown:s=>this.handleTriggerKeyDown(s)})),e&&this.hasOverflowTabs&&i("ds-menu",{key:"e9d2bd9ebe87c1310ed237b512acb38db3797494",ref:s=>{this.menuEl=s??null},open:this.menuOpen,sections:w(this.overflowTabs,this.effectiveValue),side:"bottom",align:"end",sideOffset:"calc(var(--dimension-space-100) + var(--dimension-space-050))",initialFocusVisible:this.menuInitialFocusVisible,onDsSelect:s=>this.handleMenuSelect(s),onDsClose:()=>this.handleMenuClose(),onDsAfterClose:()=>this.handleMenuAfterClose()}))}get el(){return this}static get watchers(){return{tabs:[{onHostPropsChange:0}],currentUrl:[{onHostPropsChange:0}],basePath:[{onHostPropsChange:0}],value:[{onSelectionChange:0}],urlDerivedValue:[{onSelectionChange:0}],menuOpen:[{onMenuOpenChange:0}],tabsCollapsed:[{onTabsCollapsedChange:0}]}}static get style(){return z()}},[2,"ds-bar-nav",{navStyle:[513,"nav-style"],tabs:[16],value:[1025],heading:[1],basePath:[1,"base-path"],currentUrl:[1,"current-url"],moreTabsLabel:[1,"more-tabs-label"],resolvedTabs:[32],urlDerivedValue:[32],hideTabsForDetailRoute:[32],tabsCollapsed:[32],menuOpen:[32],menuTriggerActive:[32],tabLayoutCommitted:[32],visibleTabs:[32],overflowTabs:[32],menuInitialFocusVisible:[32],overflowRovingFocused:[32],focusedTabId:[32],committedSection:[32],pendingSection:[32]},undefined,{tabs:[{onHostPropsChange:0}],currentUrl:[{onHostPropsChange:0}],basePath:[{onHostPropsChange:0}],value:[{onSelectionChange:0}],urlDerivedValue:[{onSelectionChange:0}],menuOpen:[{onMenuOpenChange:0}],tabsCollapsed:[{onTabsCollapsedChange:0}]}]);P.HOST_PROP_SYNC_BUDGET=8;P.INTRINSIC_WIDTH_RETRY_MAX=3;P.TAB_LAYOUT_COMMIT_MAX_FRAMES=16;P.OVERFLOW_HYSTERESIS_PX=8;function j(){if(typeof customElements==="undefined"){return}const s=["ds-bar-nav","ds-badge","ds-button-unfilled","ds-icon","ds-loader","ds-menu","ds-swatch-picker","ds-switch","ds-tag","ds-text","ds-tooltip"];s.forEach((s=>{switch(s){case"ds-bar-nav":if(!customElements.get(r(s))){customElements.define(r(s),P)}break;case"ds-badge":if(!customElements.get(r(s))){d()}break;case"ds-button-unfilled":if(!customElements.get(r(s))){c()}break;case"ds-icon":if(!customElements.get(r(s))){l()}break;case"ds-loader":if(!customElements.get(r(s))){h()}break;case"ds-menu":if(!customElements.get(r(s))){b()}break;case"ds-swatch-picker":if(!customElements.get(r(s))){v()}break;case"ds-switch":if(!customElements.get(r(s))){f()}break;case"ds-tag":if(!customElements.get(r(s))){u()}break;case"ds-text":if(!customElements.get(r(s))){p()}break;case"ds-tooltip":if(!customElements.get(r(s))){g()}break}}))}j();export{P as B,E as C,F as a,D as b,A as c,j as d,M as r};
2
- //# sourceMappingURL=p-E3RCUE7a.js.map
@@ -1 +0,0 @@
1
- {"version":3,"names":["deriveBarNavValueFromUrl","path","basePath","tabs","value","hideTabs","startsWith","remainder","slice","length","seg","split","selectableTabs","getSelectableTabs","id","tab","find","t","shouldResyncBarNavProps","resolvedTabs","tabsToMenuSections","selectedId","sections","batch","item","isTabDivider","push","items","label","dot","isSelected","isInactive","tabsToOverflowMenuSections","trimLeadingDividers","tabsOverflowContainer","tabListScrollWidth","containerClientWidth","collapsed","hysteresis","diff","visibleTabCountForWidth","itemWidths","availableWidth","overflowTriggerWidth","itemGap","listExtraWidth","fullWidth","widthForItemCount","availableForTabs","Math","max","count","i","width","trimTrailingDividers","end","start","itemsWidth","reduce","sum","CHROME_TRANSITION_START","CHROME_TRANSITION_END","ChromeTransitionDepth","constructor","this","depth","enter","exit","isActive","ChromeTransitionGate","active","createRafCoalescer","onFrame","rafId","schedule","requestAnimationFrame","cancel","cancelAnimationFrame","readChromeTransitionSource","event","detail","source","readChromeTransitionPhase","phase","barNavCss","BarNav","__stencil_proxyCustomElement","HTMLElement","registerHost","navStyle","currentUrl","moreTabsLabel","urlDerivedValue","hideTabsForDetailRoute","tabsCollapsed","menuOpen","menuTriggerActive","tabLayoutCommitted","visibleTabs","overflowTabs","menuInitialFocusVisible","overflowRovingFocused","focusedTabId","headerEl","triggerEl","menuEl","visibleTabListEl","probeTabListEl","resizeObserver","intrinsicWidthRetryCount","tabLayoutPendingFrames","panelNavTransition","panelToolsTransition","overflowCoalescer","updateTabsCollapsed","chromeTransitionShell","committedSection","pendingSection","onChromeTransitionStart","onChromeTransitionEnd","scheduleOverflowCheck","handleOverflowFocus","handleOverflowBlur","effectiveValue","renderedSelectableTabs","hasOverflowTabs","syncFocusedTabId","preferred","some","first","digestTabsConfig","map","join","resetTabOverflowLayout","onHostPropsChange","applyHostProps","onSelectionChange","syncMenuSections","onMenuOpenChange","open","onTabsCollapsedChange","prevCollapsed","undefined","queueMicrotask","focusVisibleSelectedTab","componentWillLoad","componentDidLoad","syncHostPropsIfNeeded","scheduleDeferredHostPropSync","setupOverflowObserver","bindChromeTransitionListeners","componentDidRender","chromeOverflowPaused","syncMenuAnchor","disconnectedCallback","disconnect","unbindChromeTransitionListeners","shell","el","closest","addEventListener","removeEventListener","syncValueFromUrl","remaining","HOST_PROP_SYNC_BUDGET","tick","ResizeObserver","observe","getLeftZoneAvailableWidth","headerStyle","getComputedStyle","horizontalPadding","parseFloat","paddingLeft","paddingRight","clientWidth","getTabsIntrinsicWidth","scrollWidth","getHeaderGap","style","columnGap","gap","getOverflowTriggerReserveWidth","getBoundingClientRect","getProbeTabMetrics","tabList","children","Array","from","child","childrenWidth","gapWidth","setOverflowTabLayout","nextCollapsed","visibleChanged","overflowChanged","scheduleIntrinsicWidthRetry","INTRINSIC_WIDTH_RETRY_MAX","forceTabLayoutCommit","fallbackCollapsed","metrics","intrinsicWidth","TAB_LAYOUT_COMMIT_MAX_FRAMES","shouldCollapse","OVERFLOW_HYSTERESIS_PX","visibleCount","anchor","handleMenuSelect","e","selectTab","String","handleMenuClose","handleMenuAfterClose","incomingTabs","nextBasePath","sectionChanged","tabsConfigChanged","dsTabChange","emit","querySelector","focus","preventScroll","focusVisibleTab","focusLastVisibleTab","last","reverse","findEnabledVisibleTab","step","index","handleTabKeyDown","targetId","target","getAttribute","focusedId","key","focused","preventDefault","currentIndex","findIndex","nextIndex","setFocus","reversedIndex","toggleTabMenu","options","minWidth","focusVisible","handleTriggerKeyDown","renderTabList","probe","h","role","class","heading","ref","next","onKeyDown","onFocusin","type","panelId","disabled","tabIndex","onClick","onFocus","as","variant","emphasis","color","hasRing","render","sectionReady","hasTabs","tabGroupKey","renderedTabs","Host","inert","lineTruncation","wrap","icon","activeFill","hasBorder","focusTabIndex","haspopup","expanded","surfaceOpen","onDsClick","onFocusout","side","align","sideOffset","initialFocusVisible","onDsSelect","onDsClose","onDsAfterClose"],"sources":["src/wc/components/BarNav/bar-nav-utils.ts","src/wc/components/BarNav/bar-nav-tabs-menu-utils.ts","src/wc/shell/chrome-transition.ts","src/wc/components/BarNav/BarNav.css?tag=ds-bar-nav&encapsulation=scoped","src/wc/components/BarNav/BarNav.tsx"],"sourcesContent":["import { getSelectableTabs } from '../TabGroup/tab-item-utils';\nimport type { BarNavTab } from './bar-nav-types';\n\nexport interface BarNavUrlState {\n /** Tab id derived from the URL, or empty when none applies. */\n value: string;\n /** When true, tabs should be hidden (e.g. non-tab child routes like detail pages). */\n hideTabs: boolean;\n}\n\n/** Derive BarNav tab selection from `currentUrl` relative to `basePath`.\n * Mirrors motive-webapp-lab `resolveBarNavState` tab-selection semantics. */\nexport function deriveBarNavValueFromUrl(\n path: string,\n basePath: string,\n tabs: BarNavTab[]\n): BarNavUrlState {\n if (!path || !basePath) {\n return { value: '', hideTabs: false };\n }\n\n if (path !== basePath && !path.startsWith(`${basePath}/`)) {\n return { value: '', hideTabs: false };\n }\n\n const remainder = path.slice(basePath.length);\n const seg = remainder.startsWith('/') ? remainder.slice(1).split('/')[0] : '';\n const selectableTabs = getSelectableTabs(tabs);\n\n if (!seg) {\n return { value: selectableTabs[0]?.id ?? '', hideTabs: false };\n }\n\n const tab = selectableTabs.find(t => t.id === seg);\n if (tab) {\n return { value: tab.id, hideTabs: false };\n }\n\n return { value: '', hideTabs: true };\n}\n\n/** True when host array props have data but resolved internal state is still empty. */\nexport function shouldResyncBarNavProps(resolvedTabs: BarNavTab[], tabs: BarNavTab[]): boolean {\n return resolvedTabs.length === 0 && (tabs?.length ?? 0) > 0;\n}\n","import type { MenuItemData, MenuSection } from '../Menu/menu-types';\nimport {\n getSelectableTabs,\n isTabDivider,\n type TabItem,\n type TabItemTab,\n} from '../TabGroup/tab-item-utils';\n\n/** Map BarNav tabs to menu sections, preserving `{ type: 'divider' }` as section breaks. */\nexport function tabsToMenuSections(tabs: TabItem[], selectedId: string): MenuSection[] {\n const sections: MenuSection[] = [];\n let batch: MenuItemData[] = [];\n\n for (const item of tabs) {\n if (isTabDivider(item)) {\n if (batch.length > 0) {\n sections.push({ items: batch });\n batch = [];\n }\n continue;\n }\n\n batch.push({\n label: item.label,\n value: item.id,\n dot: item.dot,\n isSelected: item.id === selectedId,\n isInactive: item.isInactive,\n });\n }\n\n if (batch.length > 0) {\n sections.push({ items: batch });\n }\n\n return sections;\n}\n\nexport function tabsToOverflowMenuSections(tabs: TabItem[], selectedId: string): MenuSection[] {\n return tabsToMenuSections(trimLeadingDividers(tabs), selectedId);\n}\n\nexport function getActiveTab(tabs: TabItem[], selectedId: string): TabItemTab | undefined {\n const selectable = getSelectableTabs(tabs);\n return selectable.find(tab => tab.id === selectedId) ?? selectable[0];\n}\n\nexport function getActiveTabLabel(tabs: TabItem[], selectedId: string): string {\n return getActiveTab(tabs, selectedId)?.label ?? 'Tabs';\n}\n\n/** True when tablist content exceeds the available width (with optional hysteresis). */\nexport function tabsOverflowContainer(\n tabListScrollWidth: number,\n containerClientWidth: number,\n collapsed: boolean,\n hysteresis = 2\n): boolean {\n const diff = tabListScrollWidth - containerClientWidth;\n if (collapsed) {\n return diff > -hysteresis;\n }\n return diff > hysteresis;\n}\n\nexport function visibleTabCountForWidth(\n itemWidths: number[],\n availableWidth: number,\n overflowTriggerWidth: number,\n itemGap: number,\n listExtraWidth: number\n): number {\n if (itemWidths.length === 0 || availableWidth <= 0) return 0;\n\n const fullWidth = widthForItemCount(itemWidths, itemWidths.length, itemGap, listExtraWidth);\n if (fullWidth <= availableWidth) return itemWidths.length;\n\n const availableForTabs = Math.max(0, availableWidth - overflowTriggerWidth);\n let count = 0;\n\n for (let i = 1; i <= itemWidths.length; i++) {\n const width = widthForItemCount(itemWidths, i, itemGap, listExtraWidth);\n if (width > availableForTabs) break;\n count = i;\n }\n\n return count;\n}\n\nexport function trimTrailingDividers(tabs: TabItem[]): TabItem[] {\n let end = tabs.length;\n while (end > 0 && isTabDivider(tabs[end - 1])) {\n end -= 1;\n }\n return tabs.slice(0, end);\n}\n\nfunction trimLeadingDividers(tabs: TabItem[]): TabItem[] {\n let start = 0;\n while (start < tabs.length && isTabDivider(tabs[start])) {\n start += 1;\n }\n return tabs.slice(start);\n}\n\nfunction widthForItemCount(\n itemWidths: number[],\n count: number,\n itemGap: number,\n listExtraWidth: number\n): number {\n if (count <= 0) return 0;\n const itemsWidth = itemWidths.slice(0, count).reduce((sum, width) => sum + width, 0);\n return listExtraWidth + itemsWidth + itemGap * Math.max(0, count - 1);\n}\n","/** Bubbling/composed events — `ds-shell-app` and `ds-bar-nav` coordinate during width motion. */\n\nexport const CHROME_TRANSITION_START = 'dsChromeTransitionStart';\nexport const CHROME_TRANSITION_END = 'dsChromeTransitionEnd';\n\nexport type ChromeTransitionSource = 'panel-nav' | 'panel-tools';\n\nexport interface ChromeTransitionDetail {\n source: ChromeTransitionSource;\n /** Panel-tools drawer motion direction; omitted for panel-nav. */\n phase?: 'opening' | 'closing';\n}\n\n/** Reference-counted gate — used while panel-nav width is transitioning. */\nexport class ChromeTransitionDepth {\n private depth = 0;\n\n enter(): void {\n this.depth += 1;\n }\n\n exit(): void {\n this.depth = Math.max(0, this.depth - 1);\n }\n\n get isActive(): boolean {\n return this.depth > 0;\n }\n}\n\n/** Idempotent gate for one physical chrome surface.\n * Duplicate start notifications still require only one matching end. */\nexport class ChromeTransitionGate {\n private active = false;\n\n enter(): void {\n this.active = true;\n }\n\n exit(): void {\n this.active = false;\n }\n\n get isActive(): boolean {\n return this.active;\n }\n}\n\nexport interface RafCoalescer {\n schedule(): void;\n cancel(): void;\n}\n\n/** Coalesce bursty layout work (ResizeObserver, prop churn) to one callback per frame. */\nexport function createRafCoalescer(onFrame: () => void): RafCoalescer {\n let rafId = 0;\n return {\n schedule() {\n if (rafId !== 0) return;\n rafId = requestAnimationFrame(() => {\n rafId = 0;\n onFrame();\n });\n },\n cancel() {\n if (rafId !== 0) {\n cancelAnimationFrame(rafId);\n rafId = 0;\n }\n },\n };\n}\n\nexport function readChromeTransitionSource(event: Event): ChromeTransitionSource | undefined {\n return (event as CustomEvent<ChromeTransitionDetail>).detail?.source;\n}\n\nexport function readChromeTransitionPhase(event: Event): ChromeTransitionDetail['phase'] {\n return (event as CustomEvent<ChromeTransitionDetail>).detail?.phase;\n}\n","@import '../../utils/control-density.css';\n@import '../../utils/control-parts.css';\n@import '../../utils/chrome-layout.css';\n@import '../../utils/focus-ring.css';\n@import '../../utils/control-inactive.css';\n\n:host {\n display: block;\n}\n\n.bar-nav {\n position: relative;\n height: var(--dimension-size-600);\n border-bottom: var(--dimension-stroke-width-012) solid var(--_bar-nav-border);\n background-color: var(--_bar-nav-bg);\n color: var(--_bar-nav-fg-primary);\n -webkit-user-select: none;\n user-select: none;\n overflow: hidden;\n transition:\n background-color var(--effect-motion-short-3),\n border-color var(--effect-motion-short-3),\n color var(--effect-motion-short-3);\n isolation: isolate;\n /* Default chrome — app surfaces */\n --_bar-nav-bg: var(--color-background-secondary);\n --_bar-nav-border: var(--color-border-tertiary);\n --_bar-nav-fg-primary: var(--color-foreground-primary);\n --_bar-nav-fg-secondary: var(--color-foreground-secondary);\n --_bar-nav-hover: var(--color-interaction-hover);\n --_bar-nav-pressed: var(--color-interaction-pressed);\n --_bar-nav-focus: var(--color-interaction-focus);\n --_bar-nav-dot: var(--color-foreground-bold-brand);\n --ds-focus-ring-color: var(--_bar-nav-focus);\n}\n\n/* Style slots — same app tokens for now; hook texture/glyph layers later. */\n.bar-nav--dashboard,\n.bar-nav--settings {\n --_bar-nav-bg: var(--color-background-secondary);\n --_bar-nav-border: var(--color-border-tertiary);\n --_bar-nav-fg-primary: var(--color-foreground-primary);\n --_bar-nav-fg-secondary: var(--color-foreground-secondary);\n --_bar-nav-hover: var(--color-interaction-hover);\n --_bar-nav-pressed: var(--color-interaction-pressed);\n --_bar-nav-focus: var(--color-interaction-focus);\n --_bar-nav-dot: var(--color-foreground-bold-brand);\n}\n\n/* Shell-owned chrome (bg + wash) — bar is a transparent frame. */\n:host-context(ds-shell-app:not([gradient-preset='none'])) .bar-nav,\n:host-context(ds-shell-app.shell-app--paper-texture) .bar-nav {\n background-color: transparent;\n}\n\n.bar-nav > :not(.bar-nav__tabs-probe) {\n position: relative;\n z-index: 3;\n}\n\n/* Overflow — keep fitting tabs visible and pin the overflow trigger to the far edge. */\n.bar-nav--tabs-collapsed {\n display: flex;\n gap: var(--dimension-space-100);\n align-items: center;\n}\n\n/* Expanded tabs — consume full header width */\n.bar-nav__left {\n position: relative;\n flex: 1 1 0%;\n min-width: 0;\n width: 0;\n display: flex;\n align-items: center;\n}\n\n.bar-nav__tabs-visible {\n flex: 1;\n min-width: 0;\n width: 100%;\n}\n\n/* Unconstrained width so intrinsic tab row width is measurable while collapsed */\n.bar-nav__tabs-probe {\n position: absolute;\n left: 0;\n top: 0;\n visibility: hidden;\n pointer-events: none;\n overflow: visible;\n width: max-content;\n max-width: none;\n z-index: -1;\n}\n\n.bar-nav__tabs-probe > div {\n width: max-content;\n}\n\n.bar-nav__tab-list {\n display: flex;\n align-items: center;\n gap: var(--dimension-space-050);\n position: relative;\n width: max-content;\n}\n\n.bar-nav__tab {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: var(--ds-control-gap);\n height: var(--ds-control-height);\n min-width: var(--ds-control-height);\n padding: 0 var(--ds-control-padding-inline);\n box-sizing: border-box;\n border: none;\n border-radius: var(--ds-control-radius);\n background-color: transparent;\n color: var(--_bar-nav-fg-secondary);\n cursor: default;\n position: relative;\n flex-shrink: 0;\n -webkit-user-select: none;\n user-select: none;\n transition: color var(--effect-motion-short-2);\n}\n\n.bar-nav__tab::after {\n content: '';\n position: absolute;\n inset: 0;\n border-radius: var(--ds-control-radius);\n background: transparent;\n pointer-events: none;\n cursor: inherit;\n}\n\n@media (hover: hover) and (pointer: fine) {\n .bar-nav__tab:hover::after {\n background: var(--_bar-nav-hover);\n }\n}\n\n.bar-nav__tab:active::after {\n background: var(--_bar-nav-pressed);\n}\n\n.bar-nav__tab--selected {\n color: var(--_bar-nav-fg-primary);\n}\n\n.bar-nav__tab-label {\n display: inline-flex;\n align-items: center;\n white-space: nowrap;\n}\n\n.bar-nav__tab-divider {\n display: flex;\n align-items: center;\n justify-content: center;\n box-sizing: border-box;\n width: var(--dimension-space-100);\n height: var(--ds-control-height);\n padding-block: var(--ds-control-padding-inline);\n flex-shrink: 0;\n pointer-events: none;\n}\n\n.bar-nav__tab-divider-line {\n width: var(--dimension-stroke-width-012);\n align-self: stretch;\n background-color: var(--_bar-nav-border);\n}\n\n/* In-flow placeholder while measuring overflow — avoids layout jump; hidden from view/accessibility. */\n.bar-nav__tabs-pending {\n flex: 1;\n min-width: 0;\n height: var(--ds-control-height);\n visibility: hidden;\n pointer-events: none;\n}\n\n/* Overflow trigger — compact icon button aligned to the right edge. */\n.bar-nav__overflow-trigger {\n margin-left: auto;\n --ds-button-unfilled-fg: var(--_bar-nav-fg-secondary);\n --ds-button-unfilled-fg-active: var(--_bar-nav-fg-primary);\n --ds-interaction-hover: var(--_bar-nav-hover);\n --ds-interaction-pressed: var(--_bar-nav-pressed);\n --ds-focus-ring-color: var(--_bar-nav-focus);\n}\n\n/* Fallback heading when no tabs — matches a single (selected) tab so the area\n name shares the tab label's type token, color, height and horizontal inset.\n Inset = tab button padding (space-075, 6px) + label inset (space-025, 2px).\n Color comes from ds-text color=\"primary\"; beat Text's inline-box display. */\nds-text.bar-nav__heading {\n display: inline-flex;\n align-items: center;\n height: var(--ds-control-height);\n padding-inline: calc(var(--ds-control-padding-inline) + var(--ds-control-label-inset));\n -webkit-user-select: none;\n user-select: none;\n}\n","import {\n Component,\n Prop,\n Event,\n EventEmitter,\n Element,\n Watch,\n State,\n h,\n Host,\n} from '@stencil/core';\nimport type { NavChromeStyle } from '../../shell/nav-chrome';\nimport type { MenuItemData } from '../Menu/menu-types';\nimport { getSelectableTabs, isTabDivider, type TabItemTab } from '../TabGroup/tab-item-utils';\nimport type { BarNavTab } from './bar-nav-types';\nimport { deriveBarNavValueFromUrl, shouldResyncBarNavProps } from './bar-nav-utils';\nimport {\n tabsOverflowContainer,\n tabsToOverflowMenuSections,\n trimTrailingDividers,\n visibleTabCountForWidth,\n} from './bar-nav-tabs-menu-utils';\nimport {\n CHROME_TRANSITION_END,\n CHROME_TRANSITION_START,\n ChromeTransitionGate,\n createRafCoalescer,\n readChromeTransitionSource,\n readChromeTransitionPhase,\n} from '../../shell/chrome-transition';\n\n@Component({\n tag: 'ds-bar-nav',\n styleUrl: 'BarNav.css',\n scoped: true,\n})\nexport class BarNav {\n /** Style slot: `dashboard` or `settings`. Colors match for now. */\n @Prop({ attribute: 'nav-style', reflect: true }) navStyle: NavChromeStyle = 'dashboard';\n\n @Element() el!: HTMLElement;\n\n /**\n * Tab items for the left section.\n * Set via JS property: `el.tabs = [...]`. Replace the array reference to update.\n */\n @Prop() tabs: BarNavTab[] = [];\n\n /** ID of the currently active tab. Overridden when `currentUrl` + `basePath` are set. */\n @Prop({ mutable: true }) value: string = '';\n\n /**\n * Fallback heading shown when no tabs are provided.\n * When tabs are present the heading is hidden.\n */\n @Prop() heading: string | undefined;\n\n /** Section base path (e.g. `/dashboard/safety`). Used with `currentUrl` to derive `value`. */\n @Prop() basePath: string = '';\n\n /** Current route URL. When set with `basePath`, the active tab is derived automatically. */\n @Prop() currentUrl: string = '';\n @Prop() moreTabsLabel: string = 'More tabs';\n\n /** Emitted when the active tab changes. Detail = tab id. */\n @Event() dsTabChange!: EventEmitter<string>;\n\n @State() private resolvedTabs: BarNavTab[] = [];\n @State() private urlDerivedValue: string = '';\n @State() private hideTabsForDetailRoute = false;\n @State() private tabsCollapsed = false;\n @State() private menuOpen = false;\n @State() private menuTriggerActive = false;\n /** When false, defer showing expanded tabs or the collapsed trigger until intrinsic width is measured (avoids a one-frame flash of the full tab row on narrow viewports). */\n @State() private tabLayoutCommitted = false;\n @State() private visibleTabs: BarNavTab[] = [];\n @State() private overflowTabs: BarNavTab[] = [];\n @State() private menuInitialFocusVisible = false;\n @State() private overflowRovingFocused = false;\n @State() private focusedTabId = '';\n\n private static readonly HOST_PROP_SYNC_BUDGET = 8;\n private static readonly INTRINSIC_WIDTH_RETRY_MAX = 3;\n private static readonly TAB_LAYOUT_COMMIT_MAX_FRAMES = 16;\n private static readonly OVERFLOW_HYSTERESIS_PX = 8;\n\n private headerEl: HTMLElement | null = null;\n private triggerEl: (HTMLElement & { setFocus?: () => Promise<void> }) | null = null;\n private menuEl: HTMLDsMenuElement | null = null;\n private visibleTabListEl: HTMLElement | null = null;\n private probeTabListEl: HTMLElement | null = null;\n private resizeObserver: ResizeObserver | null = null;\n private intrinsicWidthRetryCount = 0;\n private tabLayoutPendingFrames = 0;\n private readonly panelNavTransition = new ChromeTransitionGate();\n private readonly panelToolsTransition = new ChromeTransitionGate();\n private readonly overflowCoalescer = createRafCoalescer(() => {\n this.updateTabsCollapsed();\n });\n private chromeTransitionShell: HTMLElement | null = null;\n /** Matches `basePath` once tabs + URL are reconciled for the active section. */\n @State() private committedSection = '';\n /** Section waiting for URL + tabs to catch up after a cross-area navigation. */\n @State() private pendingSection = '';\n\n private get effectiveValue(): string {\n if (this.currentUrl && this.basePath) {\n return this.urlDerivedValue;\n }\n return this.value;\n }\n\n private get renderedSelectableTabs(): TabItemTab[] {\n const tabs = this.hasOverflowTabs ? this.visibleTabs : this.resolvedTabs;\n return getSelectableTabs(tabs);\n }\n\n private get hasOverflowTabs(): boolean {\n return this.tabLayoutCommitted && this.tabsCollapsed && this.overflowTabs.length > 0;\n }\n\n private syncFocusedTabId(preferred: string, tabs: TabItemTab[]) {\n if (tabs.some(tab => tab.id === preferred && !tab.isInactive)) {\n this.focusedTabId = preferred;\n return;\n }\n const first = tabs.find(tab => !tab.isInactive);\n this.focusedTabId = first?.id ?? '';\n }\n\n private digestTabsConfig(tabs: BarNavTab[]): string {\n return tabs.map(t => (isTabDivider(t) ? '|' : t.id)).join(',');\n }\n\n private resetTabOverflowLayout() {\n this.tabLayoutCommitted = false;\n this.tabsCollapsed = false;\n this.menuOpen = false;\n this.menuTriggerActive = false;\n this.menuInitialFocusVisible = false;\n this.intrinsicWidthRetryCount = 0;\n this.tabLayoutPendingFrames = 0;\n this.visibleTabs = [];\n this.overflowTabs = [];\n }\n\n @Watch('tabs')\n @Watch('currentUrl')\n @Watch('basePath')\n onHostPropsChange() {\n this.applyHostProps();\n }\n\n @Watch('value')\n @Watch('urlDerivedValue')\n onSelectionChange() {\n this.syncFocusedTabId(this.effectiveValue, this.renderedSelectableTabs);\n this.syncMenuSections();\n this.scheduleOverflowCheck();\n }\n\n @Watch('menuOpen')\n onMenuOpenChange(open: boolean) {\n if (this.menuEl) {\n this.menuEl.open = open;\n }\n }\n\n @Watch('tabsCollapsed')\n onTabsCollapsedChange(collapsed: boolean, prevCollapsed: boolean | undefined) {\n if (!collapsed) {\n this.menuOpen = false;\n this.menuTriggerActive = false;\n this.menuInitialFocusVisible = false;\n this.menuEl = null;\n }\n this.scheduleOverflowCheck();\n if (collapsed) {\n requestAnimationFrame(() => {\n this.scheduleOverflowCheck();\n });\n }\n if (collapsed || prevCollapsed === undefined || prevCollapsed === collapsed) return;\n requestAnimationFrame(() => this.scheduleOverflowCheck());\n queueMicrotask(() => this.focusVisibleSelectedTab());\n }\n\n componentWillLoad() {\n this.applyHostProps();\n this.syncFocusedTabId(this.effectiveValue, getSelectableTabs(this.resolvedTabs));\n }\n\n componentDidLoad() {\n this.syncHostPropsIfNeeded();\n this.scheduleDeferredHostPropSync();\n this.setupOverflowObserver();\n this.bindChromeTransitionListeners();\n this.scheduleOverflowCheck();\n }\n\n componentDidRender() {\n if (this.chromeOverflowPaused()) {\n this.syncMenuAnchor();\n return;\n }\n this.scheduleOverflowCheck();\n this.syncMenuAnchor();\n }\n\n disconnectedCallback() {\n this.resizeObserver?.disconnect();\n this.resizeObserver = null;\n this.overflowCoalescer.cancel();\n this.unbindChromeTransitionListeners();\n }\n\n private bindChromeTransitionListeners() {\n const shell = this.el.closest<HTMLElement>('ds-shell-app');\n if (!shell) return;\n this.chromeTransitionShell = shell;\n shell.addEventListener(CHROME_TRANSITION_START, this.onChromeTransitionStart);\n shell.addEventListener(CHROME_TRANSITION_END, this.onChromeTransitionEnd);\n }\n\n private unbindChromeTransitionListeners() {\n if (!this.chromeTransitionShell) return;\n this.chromeTransitionShell.removeEventListener(\n CHROME_TRANSITION_START,\n this.onChromeTransitionStart\n );\n this.chromeTransitionShell.removeEventListener(\n CHROME_TRANSITION_END,\n this.onChromeTransitionEnd\n );\n this.chromeTransitionShell = null;\n }\n\n private onChromeTransitionStart = (event: Event) => {\n const source = readChromeTransitionSource(event);\n if (source === 'panel-nav') {\n this.panelNavTransition.enter();\n return;\n }\n if (source === 'panel-tools') {\n const phase = readChromeTransitionPhase(event) ?? 'opening';\n if (phase === 'closing') {\n this.panelToolsTransition.enter();\n }\n }\n };\n\n private chromeOverflowPaused(): boolean {\n return this.panelNavTransition.isActive || this.panelToolsTransition.isActive;\n }\n\n private onChromeTransitionEnd = (event: Event) => {\n const source = readChromeTransitionSource(event);\n if (source === 'panel-nav') {\n this.panelNavTransition.exit();\n if (!this.panelNavTransition.isActive) {\n this.scheduleOverflowCheck();\n }\n return;\n }\n if (source === 'panel-tools') {\n this.panelToolsTransition.exit();\n this.scheduleOverflowCheck();\n }\n };\n\n /** Re-resolve props assigned by the host after componentWillLoad (Angular ngAfterViewInit). */\n private syncHostPropsIfNeeded() {\n if (shouldResyncBarNavProps(this.resolvedTabs, this.tabs)) {\n this.applyHostProps();\n } else if (this.currentUrl && this.basePath) {\n this.syncValueFromUrl();\n }\n }\n\n /** Poll across animation frames — host props may land without triggering @Watch. */\n private scheduleDeferredHostPropSync() {\n let remaining = BarNav.HOST_PROP_SYNC_BUDGET;\n const tick = () => {\n this.syncHostPropsIfNeeded();\n if (--remaining > 0) {\n requestAnimationFrame(tick);\n }\n };\n queueMicrotask(tick);\n }\n\n private setupOverflowObserver() {\n if (typeof ResizeObserver === 'undefined' || !this.headerEl) return;\n this.resizeObserver?.disconnect();\n this.resizeObserver = new ResizeObserver(() => {\n if (this.chromeOverflowPaused()) return;\n this.scheduleOverflowCheck();\n });\n this.resizeObserver.observe(this.headerEl);\n }\n\n private scheduleOverflowCheck() {\n if (this.chromeOverflowPaused()) return;\n this.overflowCoalescer.schedule();\n }\n\n /** Width available for the tab row or collapsed trigger. */\n private getLeftZoneAvailableWidth(): number {\n if (!this.headerEl) return 0;\n\n const headerStyle = getComputedStyle(this.headerEl);\n const horizontalPadding =\n (parseFloat(headerStyle.paddingLeft) || 0) + (parseFloat(headerStyle.paddingRight) || 0);\n\n return Math.max(0, this.headerEl.clientWidth - horizontalPadding);\n }\n\n private getTabsIntrinsicWidth(): number {\n return this.probeTabListEl?.scrollWidth ?? 0;\n }\n\n private getHeaderGap(): number {\n if (!this.headerEl) return 0;\n const style = getComputedStyle(this.headerEl);\n return parseFloat(style.columnGap || style.gap) || 0;\n }\n\n private getOverflowTriggerReserveWidth(): number {\n if (!this.triggerEl) {\n return 40;\n }\n return this.triggerEl.getBoundingClientRect().width + this.getHeaderGap();\n }\n\n private getProbeTabMetrics(): {\n itemWidths: number[];\n itemGap: number;\n listExtraWidth: number;\n } | null {\n const tabList = this.probeTabListEl;\n if (!tabList) return null;\n\n const children = Array.from(tabList.children) as HTMLElement[];\n const itemWidths = children.map(child => child.getBoundingClientRect().width);\n if (itemWidths.length === 0 || itemWidths.some(width => width === 0)) return null;\n\n const style = getComputedStyle(tabList);\n const itemGap = parseFloat(style.columnGap || style.gap) || 0;\n const childrenWidth = itemWidths.reduce((sum, width) => sum + width, 0);\n const gapWidth = itemGap * Math.max(0, itemWidths.length - 1);\n const listExtraWidth = Math.max(0, tabList.scrollWidth - childrenWidth - gapWidth);\n\n return { itemWidths, itemGap, listExtraWidth };\n }\n\n private setOverflowTabLayout(visibleTabs: BarNavTab[], overflowTabs: BarNavTab[]) {\n const nextCollapsed = overflowTabs.length > 0;\n const visibleChanged =\n this.digestTabsConfig(visibleTabs) !== this.digestTabsConfig(this.visibleTabs);\n const overflowChanged =\n this.digestTabsConfig(overflowTabs) !== this.digestTabsConfig(this.overflowTabs);\n\n if (visibleChanged) {\n this.visibleTabs = visibleTabs;\n }\n if (overflowChanged) {\n this.overflowTabs = overflowTabs;\n }\n if (nextCollapsed !== this.tabsCollapsed) {\n this.tabsCollapsed = nextCollapsed;\n if (!nextCollapsed) {\n this.menuOpen = false;\n this.menuTriggerActive = false;\n }\n }\n this.syncFocusedTabId(\n this.effectiveValue,\n getSelectableTabs(nextCollapsed ? visibleTabs : this.resolvedTabs)\n );\n }\n\n private scheduleIntrinsicWidthRetry() {\n if (this.intrinsicWidthRetryCount >= BarNav.INTRINSIC_WIDTH_RETRY_MAX) return;\n this.intrinsicWidthRetryCount++;\n requestAnimationFrame(() => this.scheduleOverflowCheck());\n }\n\n private forceTabLayoutCommit(fallbackCollapsed: boolean) {\n this.intrinsicWidthRetryCount = 0;\n this.tabLayoutPendingFrames = 0;\n this.setOverflowTabLayout(\n fallbackCollapsed ? [] : this.resolvedTabs,\n fallbackCollapsed ? this.resolvedTabs : []\n );\n this.tabLayoutCommitted = true;\n }\n\n private updateTabsCollapsed() {\n if (!this.headerEl || this.resolvedTabs.length === 0 || this.hideTabsForDetailRoute) {\n if (this.tabsCollapsed) {\n this.setOverflowTabLayout([], []);\n }\n this.intrinsicWidthRetryCount = 0;\n this.tabLayoutPendingFrames = 0;\n this.tabLayoutCommitted = true;\n return;\n }\n\n const metrics = this.getProbeTabMetrics();\n const intrinsicWidth = this.getTabsIntrinsicWidth();\n if (!metrics || intrinsicWidth === 0) {\n this.tabLayoutPendingFrames += 1;\n if (this.intrinsicWidthRetryCount >= BarNav.INTRINSIC_WIDTH_RETRY_MAX) {\n this.forceTabLayoutCommit(false);\n } else if (this.tabLayoutPendingFrames >= BarNav.TAB_LAYOUT_COMMIT_MAX_FRAMES) {\n this.forceTabLayoutCommit(false);\n } else {\n this.scheduleIntrinsicWidthRetry();\n }\n return;\n }\n this.intrinsicWidthRetryCount = 0;\n this.tabLayoutPendingFrames = 0;\n\n const shouldCollapse = tabsOverflowContainer(\n intrinsicWidth,\n this.getLeftZoneAvailableWidth(),\n this.tabsCollapsed,\n BarNav.OVERFLOW_HYSTERESIS_PX\n );\n\n if (!shouldCollapse) {\n this.setOverflowTabLayout(this.resolvedTabs, []);\n this.tabLayoutCommitted = true;\n return;\n }\n\n const visibleCount = visibleTabCountForWidth(\n metrics.itemWidths,\n this.getLeftZoneAvailableWidth(),\n this.getOverflowTriggerReserveWidth(),\n metrics.itemGap,\n metrics.listExtraWidth\n );\n const visibleTabs = trimTrailingDividers(this.resolvedTabs.slice(0, visibleCount));\n const overflowTabs = this.resolvedTabs.slice(visibleTabs.length);\n this.setOverflowTabLayout(visibleTabs, overflowTabs);\n this.tabLayoutCommitted = true;\n }\n\n private syncMenuAnchor() {\n if (!this.menuEl || !this.triggerEl || !this.hasOverflowTabs) return;\n this.menuEl.anchor = this.triggerEl;\n this.syncMenuSections();\n }\n\n private handleMenuSelect(e: Event) {\n const detail = (e as CustomEvent<MenuItemData>).detail;\n if (detail?.value !== undefined) {\n this.selectTab(String(detail.value));\n }\n this.menuOpen = false;\n this.menuInitialFocusVisible = false;\n }\n\n private handleMenuClose() {\n this.menuOpen = false;\n this.menuInitialFocusVisible = false;\n }\n\n private handleMenuAfterClose() {\n if (!this.menuOpen) this.menuTriggerActive = false;\n }\n\n /** Batch tabs/basePath/currentUrl updates so URL derivation never runs with a mixed section. */\n private incomingTabs(): BarNavTab[] {\n return this.tabs ?? [];\n }\n\n private applyHostProps() {\n const nextBasePath = this.basePath;\n const sectionChanged =\n nextBasePath !== '' && this.committedSection !== '' && nextBasePath !== this.committedSection;\n\n if (sectionChanged) {\n this.urlDerivedValue = '';\n this.committedSection = '';\n this.pendingSection = nextBasePath;\n this.resolvedTabs = [];\n this.resetTabOverflowLayout();\n return;\n }\n\n if (this.pendingSection) {\n if (!nextBasePath || nextBasePath !== this.pendingSection) {\n return;\n }\n if (!this.currentUrl.startsWith(this.pendingSection)) {\n return;\n }\n const tabs = this.incomingTabs();\n if (tabs.length === 0) {\n return;\n }\n this.pendingSection = '';\n }\n\n const tabs = this.incomingTabs();\n const tabsConfigChanged =\n this.digestTabsConfig(tabs) !== this.digestTabsConfig(this.resolvedTabs);\n\n this.resolvedTabs = tabs;\n this.syncValueFromUrl();\n this.committedSection = nextBasePath;\n if (tabsConfigChanged) {\n this.resetTabOverflowLayout();\n }\n this.scheduleOverflowCheck();\n }\n\n private syncMenuSections() {\n if (!this.menuEl) return;\n this.menuEl.sections = tabsToOverflowMenuSections(this.overflowTabs, this.effectiveValue);\n }\n\n private syncValueFromUrl() {\n const tabs = this.incomingTabs();\n\n if (!this.currentUrl || !this.basePath) {\n this.urlDerivedValue = '';\n this.hideTabsForDetailRoute = false;\n return;\n }\n\n if (!this.currentUrl.startsWith(this.basePath)) {\n this.urlDerivedValue = '';\n this.hideTabsForDetailRoute = false;\n return;\n }\n\n const { value, hideTabs } = deriveBarNavValueFromUrl(this.currentUrl, this.basePath, tabs);\n this.urlDerivedValue = value;\n this.hideTabsForDetailRoute = hideTabs;\n }\n\n private selectTab(id: string) {\n this.value = id;\n this.dsTabChange.emit(id);\n }\n\n /** Move focus to the selected tab in the visible tab group (after expand). */\n private focusVisibleSelectedTab() {\n const tab = this.visibleTabListEl?.querySelector(\n `[data-tab-id=\"${this.effectiveValue}\"]`\n ) as HTMLElement | null;\n tab?.focus({ preventScroll: true });\n }\n\n private focusVisibleTab(id: string) {\n this.focusedTabId = id;\n const tab = this.visibleTabListEl?.querySelector(`[data-tab-id=\"${id}\"]`) as HTMLElement | null;\n tab?.focus({ preventScroll: true });\n }\n\n private focusLastVisibleTab() {\n const last = [...this.renderedSelectableTabs].reverse().find(tab => !tab.isInactive);\n if (last) this.focusVisibleTab(last.id);\n }\n\n private findEnabledVisibleTab(from: number, step: 1 | -1): number | null {\n const tabs = this.renderedSelectableTabs;\n for (let index = from + step; index >= 0 && index < tabs.length; index += step) {\n if (!tabs[index]?.isInactive) return index;\n }\n return null;\n }\n\n private handleTabKeyDown(e: KeyboardEvent) {\n const tabs = this.renderedSelectableTabs;\n if (!tabs.length) return;\n const targetId = (e.target as HTMLElement | null)?.getAttribute('data-tab-id');\n const focusedId = targetId ?? this.focusedTabId;\n\n if (e.key === 'Enter' || e.key === ' ') {\n const focused = tabs.find(tab => tab.id === focusedId);\n if (!focused || focused.isInactive) return;\n e.preventDefault();\n this.selectTab(focused.id);\n return;\n }\n\n const currentIndex = tabs.findIndex(tab => tab.id === focusedId);\n if (currentIndex < 0) return;\n\n let nextIndex: number | null;\n if (e.key === 'ArrowRight') {\n nextIndex = this.findEnabledVisibleTab(currentIndex, 1);\n if (nextIndex === null && this.hasOverflowTabs) {\n e.preventDefault();\n this.overflowRovingFocused = true;\n void this.triggerEl?.setFocus?.();\n return;\n }\n } else if (e.key === 'ArrowLeft') {\n nextIndex = this.findEnabledVisibleTab(currentIndex, -1);\n } else if (e.key === 'Home') {\n nextIndex = tabs.findIndex(tab => !tab.isInactive);\n } else if (e.key === 'End') {\n const reversedIndex = [...tabs].reverse().findIndex(tab => !tab.isInactive);\n nextIndex = reversedIndex < 0 ? null : tabs.length - 1 - reversedIndex;\n } else {\n return;\n }\n\n if (nextIndex === null || nextIndex < 0 || nextIndex === currentIndex) return;\n e.preventDefault();\n this.focusVisibleTab(tabs[nextIndex].id);\n }\n\n private toggleTabMenu(options?: { focusVisible?: boolean }) {\n if (this.menuOpen) {\n this.menuOpen = false;\n this.menuInitialFocusVisible = false;\n return;\n }\n\n if (this.menuEl && this.triggerEl) {\n this.menuEl.anchor = this.triggerEl;\n this.menuEl.minWidth = '';\n this.syncMenuSections();\n }\n\n this.menuInitialFocusVisible = options?.focusVisible ?? false;\n this.menuTriggerActive = true;\n this.menuOpen = true;\n }\n\n private handleOverflowFocus = () => {\n this.overflowRovingFocused = true;\n };\n\n private handleOverflowBlur = () => {\n this.overflowRovingFocused = false;\n };\n\n private handleTriggerKeyDown(e: KeyboardEvent) {\n if (!this.hasOverflowTabs) return;\n\n if (!this.menuOpen) {\n if (e.key === 'ArrowLeft') {\n e.preventDefault();\n this.overflowRovingFocused = false;\n this.focusLastVisibleTab();\n return;\n }\n\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n this.toggleTabMenu({ focusVisible: true });\n }\n return;\n }\n\n if (e.key === 'Escape') {\n e.preventDefault();\n this.menuOpen = false;\n this.menuInitialFocusVisible = false;\n void this.triggerEl?.setFocus?.();\n }\n }\n\n private renderTabList(tabs: BarNavTab[], probe: boolean) {\n return (\n <div\n role=\"tablist\"\n class=\"bar-nav__tab-list\"\n aria-label={this.heading}\n ref={el => {\n if (probe) {\n const next = (el as HTMLElement) ?? null;\n if (next === this.probeTabListEl) return;\n this.probeTabListEl = next;\n if (next) {\n this.intrinsicWidthRetryCount = 0;\n this.tabLayoutPendingFrames = 0;\n this.scheduleOverflowCheck();\n }\n } else {\n this.visibleTabListEl = (el as HTMLElement) ?? null;\n }\n }}\n onKeyDown={probe ? undefined : (e: KeyboardEvent) => this.handleTabKeyDown(e)}\n onFocusin={\n probe\n ? undefined\n : () => {\n this.overflowRovingFocused = false;\n }\n }\n >\n {tabs.map((tab, index) => {\n if (isTabDivider(tab)) {\n return (\n <div class=\"bar-nav__tab-divider\" key={`divider-${index}`} aria-hidden=\"true\">\n <div class=\"bar-nav__tab-divider-line\" />\n </div>\n );\n }\n\n const isSelected = tab.id === this.effectiveValue;\n return (\n <button\n key={tab.id}\n type=\"button\"\n role=\"tab\"\n data-tab-id={tab.id}\n class={{\n 'bar-nav__tab': true,\n 'bar-nav__tab--selected': isSelected,\n 'ds-control--md': true,\n 'ds-focus-ring-inset': true,\n 'ds-control-inactive': !!tab.isInactive,\n }}\n aria-selected={isSelected ? 'true' : 'false'}\n aria-disabled={tab.isInactive ? 'true' : undefined}\n aria-controls={tab.panelId ?? undefined}\n disabled={tab.isInactive}\n tabIndex={\n !probe && !this.overflowRovingFocused && tab.id === this.focusedTabId ? 0 : -1\n }\n onClick={() => !probe && !tab.isInactive && this.selectTab(tab.id)}\n onFocus={() => {\n if (!probe) this.focusedTabId = tab.id;\n }}\n >\n <span\n class={{\n 'bar-nav__tab-label': true,\n 'ds-control-label-box': true,\n 'ds-control-label-dot': !!tab.dot,\n 'bar-nav__tab-label--dot': !!tab.dot,\n }}\n >\n <ds-text as=\"span\" variant=\"text-body-medium\" emphasis={isSelected} color=\"inherit\">\n {tab.label}\n </ds-text>\n {tab.dot && (\n <ds-badge\n class=\"bar-nav__tab-dot ds-control-label-dot__badge\"\n variant=\"dot\"\n hasRing={false}\n label=\"\"\n aria-hidden=\"true\"\n />\n )}\n </span>\n </button>\n );\n })}\n </div>\n );\n }\n\n render() {\n // Section gating only applies when `basePath` is set (SPA section sync).\n // Tabs without a base path must still render — otherwise a single-tab bar\n // (or any non-routed tabs) silently falls through to an empty header.\n const sectionReady = this.basePath === '' || this.committedSection === this.basePath;\n const hasTabs = sectionReady && this.resolvedTabs.length > 0 && !this.hideTabsForDetailRoute;\n const tabGroupKey = this.basePath || 'no-section';\n const renderedTabs = this.hasOverflowTabs ? this.visibleTabs : this.resolvedTabs;\n\n return (\n <Host>\n <header\n class={{\n 'bar-nav': true,\n 'ds-control--md': true,\n 'ds-chrome-row': true,\n 'ds-chrome-space--md': true,\n 'bar-nav--dashboard': this.navStyle === 'dashboard',\n 'bar-nav--settings': this.navStyle === 'settings',\n 'bar-nav--tabs-collapsed': hasTabs && this.hasOverflowTabs,\n }}\n ref={el => {\n this.headerEl = el as HTMLElement;\n if (el && !this.resizeObserver) {\n this.setupOverflowObserver();\n }\n }}\n >\n {hasTabs && (\n <div class=\"bar-nav__tabs-probe\" aria-hidden=\"true\" inert>\n <div key={`probe-${tabGroupKey}`}>{this.renderTabList(this.resolvedTabs, true)}</div>\n </div>\n )}\n\n {hasTabs && this.tabLayoutCommitted && renderedTabs.length > 0 && (\n <div class=\"bar-nav__left\">\n <div key={`visible-${tabGroupKey}`} class=\"bar-nav__tabs-visible\">\n {this.renderTabList(renderedTabs, false)}\n </div>\n </div>\n )}\n\n {hasTabs && !this.tabLayoutCommitted && (\n <div class=\"bar-nav__tabs-pending\" aria-hidden=\"true\" />\n )}\n\n {!hasTabs && this.heading && (\n <ds-text\n class=\"bar-nav__heading\"\n lineTruncation={1}\n as=\"span\"\n variant=\"text-body-medium\"\n emphasis\n color=\"primary\"\n wrap=\"nowrap\"\n >\n {this.heading}\n </ds-text>\n )}\n\n {hasTabs && this.hasOverflowTabs && (\n <ds-button-unfilled\n variant=\"icon\"\n class={{\n 'bar-nav__overflow-trigger': true,\n }}\n icon=\"ChevronDown\"\n activeFill={false}\n hasBorder={false}\n focusTabIndex={this.overflowRovingFocused ? 0 : -1}\n ref={(el?: HTMLDsButtonUnfilledElement) => {\n this.triggerEl = (el as HTMLElement & { setFocus?: () => Promise<void> }) ?? null;\n }}\n haspopup=\"menu\"\n expanded={this.menuOpen}\n surfaceOpen={this.menuTriggerActive}\n aria-label={this.moreTabsLabel}\n onDsClick={() => this.toggleTabMenu({ focusVisible: false })}\n onFocusin={this.handleOverflowFocus}\n onFocusout={this.handleOverflowBlur}\n onKeyDown={(e: KeyboardEvent) => this.handleTriggerKeyDown(e)}\n />\n )}\n </header>\n\n {hasTabs && this.hasOverflowTabs && (\n <ds-menu\n ref={el => {\n this.menuEl = (el as HTMLDsMenuElement) ?? null;\n }}\n open={this.menuOpen}\n sections={tabsToOverflowMenuSections(this.overflowTabs, this.effectiveValue)}\n side=\"bottom\"\n align=\"end\"\n sideOffset=\"calc(var(--dimension-space-100) + var(--dimension-space-050))\"\n initialFocusVisible={this.menuInitialFocusVisible}\n onDsSelect={(e: Event) => this.handleMenuSelect(e)}\n onDsClose={() => this.handleMenuClose()}\n onDsAfterClose={() => this.handleMenuAfterClose()}\n />\n )}\n </Host>\n );\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1,2 +0,0 @@
1
- import{p as t,H as o,h as i,a as s,t as n}from"./index.js";import{A as e,r}from"./p-DjF2m7bf.js";import{d}from"./p-B9oadFSC.js";import{b as a,T as l,r as c,a as h}from"./p-CUL5_8JM.js";import{r as p}from"./p-CochmPyg.js";import{C as u}from"./p-CuwopElg.js";const m=new Set(["⌘","⇧","⌥","⌃"]);const f={alt:"⌥",cmd:"⌘",command:"⌘",control:"⌃",ctrl:"⌃",option:"⌥",shift:"⇧"};function g(t){return f[t.toLowerCase()]??t}function v(t){const o=t.trim();if(!o)return[];if(o.includes("+")){return o.split("+").map((t=>t.trim())).filter(Boolean).map(g)}if(/\s/.test(o)){return o.split(/\s+/).filter(Boolean).map(g)}const i=Array.from(o);const s=[];while(i.length>1&&m.has(i[0])){s.push(i.shift())}s.push(i.join(""));return s}const y=()=>`.ds-control--lg.sc-ds-tooltip,.ds-control--lg.sc-ds-tooltip-h,.ds-control--md.sc-ds-tooltip-h,.ds-control--md.sc-ds-tooltip,.ds-control--sm.sc-ds-tooltip-h,.ds-control--sm.sc-ds-tooltip,.ds-control--xs.sc-ds-tooltip-h,.ds-control--xs.sc-ds-tooltip{--ds-control-radius:var(--dimension-radius-025)}.ds-control--lg.sc-ds-tooltip-h,.ds-control--lg.sc-ds-tooltip{--ds-control-height:var(--dimension-size-500);--ds-control-icon:var(--dimension-iconography-lg);--ds-control-padding-inline:var(--dimension-space-100);--ds-control-label-inset:var(--dimension-space-050);--ds-control-gap:var(--dimension-space-050)}.ds-control--md.sc-ds-tooltip-h,.ds-control--md.sc-ds-tooltip{--ds-control-height:var(--dimension-size-400);--ds-control-icon:var(--dimension-iconography-md);--ds-control-padding-inline:var(--dimension-space-075);--ds-control-label-inset:var(--dimension-space-025);--ds-control-gap:var(--dimension-space-050)}.ds-control--sm.sc-ds-tooltip-h,.ds-control--sm.sc-ds-tooltip{--ds-control-height:var(--dimension-size-300);--ds-control-icon:var(--dimension-iconography-sm);--ds-control-padding-inline:var(--dimension-space-050);--ds-control-label-inset:var(--dimension-space-025);--ds-control-gap:var(--dimension-space-025)}.ds-control--xs.sc-ds-tooltip-h,.ds-control--xs.sc-ds-tooltip{--ds-control-height:var(--dimension-size-200);--ds-control-icon:var(--dimension-iconography-xs);--ds-control-padding-inline:var(--dimension-space-025);--ds-control-label-inset:var(--dimension-space-025);--ds-control-gap:0}.ds-control--lg.sc-ds-tooltip,.ds-control--lg.sc-ds-tooltip-h,.ds-control--md.sc-ds-tooltip-h,.ds-control--md.sc-ds-tooltip,.ds-control--sm.sc-ds-tooltip-h,.ds-control--sm.sc-ds-tooltip,.ds-control--xs.sc-ds-tooltip-h,.ds-control--xs.sc-ds-tooltip{--ds-control-radius:var(--dimension-radius-025)}.ds-control--lg.sc-ds-tooltip-h,.ds-control--lg.sc-ds-tooltip{--ds-control-height:var(--dimension-size-500);--ds-control-icon:var(--dimension-iconography-lg);--ds-control-padding-inline:var(--dimension-space-100);--ds-control-label-inset:var(--dimension-space-050);--ds-control-gap:var(--dimension-space-050)}.ds-control--md.sc-ds-tooltip-h,.ds-control--md.sc-ds-tooltip{--ds-control-height:var(--dimension-size-400);--ds-control-icon:var(--dimension-iconography-md);--ds-control-padding-inline:var(--dimension-space-075);--ds-control-label-inset:var(--dimension-space-025);--ds-control-gap:var(--dimension-space-050)}.ds-control--sm.sc-ds-tooltip-h,.ds-control--sm.sc-ds-tooltip{--ds-control-height:var(--dimension-size-300);--ds-control-icon:var(--dimension-iconography-sm);--ds-control-padding-inline:var(--dimension-space-050);--ds-control-label-inset:var(--dimension-space-025);--ds-control-gap:var(--dimension-space-025)}.ds-control--xs.sc-ds-tooltip-h,.ds-control--xs.sc-ds-tooltip{--ds-control-height:var(--dimension-size-200);--ds-control-icon:var(--dimension-iconography-xs);--ds-control-padding-inline:var(--dimension-space-025);--ds-control-label-inset:var(--dimension-space-025);--ds-control-gap:0}.key-hint-group.sc-ds-tooltip{display:inline-flex;align-items:center;gap:var(--dimension-stroke-width-012);width:max-content;flex-shrink:0}.key-hint.sc-ds-tooltip{box-sizing:border-box;min-width:var(--ds-control-icon, var(--dimension-iconography-md));width:var(--ds-control-icon, var(--dimension-iconography-md));height:var(--ds-control-icon, var(--dimension-iconography-md));padding-inline:0;flex-shrink:0;display:inline-flex;align-items:center;justify-content:center;background-color:var(--color-background-secondary);border:var(--dimension-stroke-width-015) solid var(--color-border-tertiary);border-bottom-width:var(--dimension-stroke-width-025);border-radius:var(--dimension-radius-025);color:var(--color-foreground-secondary)}.key-hint--wide.sc-ds-tooltip{width:calc(var(--ds-control-icon, var(--dimension-iconography-md)) * 1.5)}.key-hint__label.sc-ds-tooltip{display:inline-flex;width:max-content;min-width:max-content;font-family:var(--typography-font-family-ui);font-size:var(--typography-fontsize-xs);line-height:1;font-weight:var(--typography-weight-regular);letter-spacing:0;text-transform:uppercase;color:inherit}.ds-control--xs.sc-ds-tooltip .key-hint__label.sc-ds-tooltip{font-size:calc(var(--typography-fontsize-xs) * 0.78)}@media (forced-colors: active){.sc-ds-tooltip:root,.sc-ds-tooltip-h,.ds-forced-colors-scope.sc-ds-tooltip{--ds-forced-color-surface:Canvas;--ds-forced-color-content:CanvasText;--ds-forced-color-control-boundary:ButtonText;--ds-forced-color-selected:Highlight;--ds-forced-color-on-selected:HighlightText;--ds-forced-color-disabled:GrayText}}.tooltip-popup.sc-ds-tooltip{box-sizing:border-box;background-color:var(--color-background-primary);border-radius:var(--ds-control-radius, var(--dimension-radius-025));box-shadow:var(--effect-elevation-elevated-floating);white-space:nowrap;pointer-events:none;animation:tooltipFadeIn var(--effect-motion-short-2) forwards;will-change:transform;backface-visibility:hidden}.tooltip-popup--instant.sc-ds-tooltip{animation:none;opacity:1}.tooltip-popup--closing.sc-ds-tooltip{animation:tooltipFadeOut var(--effect-motion-short-3) forwards}.tooltip-inner.sc-ds-tooltip{box-sizing:border-box;height:var(--ds-control-height, var(--dimension-size-400));display:flex;align-items:center;gap:var(--ds-control-gap, var(--dimension-space-050));padding:0 var(--ds-control-padding-inline, var(--dimension-space-075))}.tooltip-inner.sc-ds-tooltip>ds-text.sc-ds-tooltip{flex-shrink:0;min-width:max-content;max-width:none;padding:0 var(--ds-control-label-inset, var(--dimension-space-025));color:var(--color-foreground-primary)}.tooltip-popup--wrap.sc-ds-tooltip{white-space:normal;max-inline-size:var(--dimension-panel-width-xs)}.tooltip-popup--wrap.sc-ds-tooltip .tooltip-inner.sc-ds-tooltip{height:auto;min-height:var(--ds-control-height, var(--dimension-size-400));padding-block:var(--dimension-space-050);align-items:flex-start}.tooltip-popup--wrap.sc-ds-tooltip .tooltip-inner.sc-ds-tooltip>ds-text.sc-ds-tooltip{flex:1 1 auto;min-width:0;max-width:100%;white-space:pre-line}@keyframes tooltipFadeIn{from{opacity:0}to{opacity:1}}@keyframes tooltipFadeOut{from{opacity:1}to{opacity:0}}@media (prefers-reduced-motion: reduce){.tooltip-popup.sc-ds-tooltip,.tooltip-popup--instant.sc-ds-tooltip{animation:none;opacity:1}.tooltip-popup--closing.sc-ds-tooltip{animation:none;opacity:0}}@media (forced-colors: active){.tooltip-popup.sc-ds-tooltip{box-shadow:none;outline:var(--dimension-stroke-width-012) solid var(--ds-forced-color-content);outline-offset:calc(-1 * var(--dimension-stroke-width-012))}}`;const b={md:l.size400,sm:l.size300,xs:l.size200};let x=0;let w=0;let C=null;function k(t){const o=document.createElement("ds-text");o.as="span";o.variant=t.variant;o.emphasis=t.emphasis??false;o.color=t.color??"inherit";if(t.wrap)o.wrap=t.wrap;o.textContent=t.text;return o}function O(t,o=false){t.style.flexShrink=o?"1":"0";t.style.minWidth=o?"0":"max-content";t.style.maxWidth=o?"100%":"none";t.style.whiteSpace=o?"pre-line":"";t.style.padding="0 var(--ds-control-label-inset, var(--dimension-space-025))";t.style.color="var(--color-foreground-primary)"}const P=t(class t extends o{constructor(t){super();if(t!==false){this.__registerHost()}this.size="md";this.side="top";this.align="center";this.sideOffset=a.space050;this.alignOffset=0;this.delay=l.animationDelayMedium3;this.shortcutKeyPosition="end";this.describedBy=true;this.wrapLabel=false;this.tooltipId=`ds-tooltip-${++w}`;this.delayTimer=null;this.closeTimer=null;this.anchor=null;this.popupEl=null;this.anchorObserver=null;this.didLoad=false;this.position=new e({getAnchor:()=>this.anchor,getPopup:()=>this.popupEl,getOwnerDocument:()=>this.el.ownerDocument,measure:(t,o)=>({anchorRect:t.getBoundingClientRect(),popupWidth:o.offsetWidth||this.tooltipFallbackWidthPx,popupHeight:o.offsetHeight||this.tooltipFallbackHeightPx,side:this.side,align:this.align,sideOffsetPx:this.sideOffsetPx,alignOffsetPx:this.alignOffsetPx,viewportPadPx:this.viewportPadPx,viewportWidth:window.innerWidth,viewportHeight:window.innerHeight,collisionRect:r(t,this.boundary)}),apply:({x:t,y:o,resolvedSide:i})=>{if(!this.popupEl)return;this.popupEl.dataset.side=i;this.popupEl.style.transform=`translate(${Math.round(t)}px, ${Math.round(o)}px)`},liveUpdate:"frame",observeResize:true});this.skipEnterAnimation=false;this.isOpen=false;this.programmaticAnchor=false;this.lastInteractionWasKeyboard=false;this.pointerEnterHandler=t=>{if(t.pointerType==="touch")return;this.show()};this.pointerLeaveHandler=t=>{if(t.pointerType==="touch")return;this.hide()};this.pointerDownHandler=t=>{this.lastInteractionWasKeyboard=false;if(t.pointerType==="touch"&&(this.isOpen||this.popupEl))this.hideInstant()};this.keyDownHandler=()=>{this.lastInteractionWasKeyboard=true};this.focusHandler=()=>{if(this.lastInteractionWasKeyboard||this.anchor?.matches(":focus-visible"))this.show()};this.blurHandler=t=>{const o=t.relatedTarget;if(o&&this.anchor?.contains(o))return;this.hide()};this.escapeHandler=t=>{if(t.key!=="Escape"||!this.isOpen)return;t.preventDefault();this.hide()};this.handleSlotChange=()=>{if(this.programmaticAnchor)return;const t=this.el.querySelector("slot");const o=t?.assignedElements?.()[0]??this.el.firstElementChild;if(o===this.anchor||o?.tagName==="SLOT")return;if(this.isOpen||this.popupEl)this.hideInstant();this.unbindAnchor();this.bindAnchor()}}connectedCallback(){if(!this.didLoad)return;this.connectAnchor()}componentDidLoad(){this.didLoad=true;this.connectAnchor()}connectAnchor(){this.bindAnchor();if(this.anchorObserver)return;this.anchorObserver=new MutationObserver((()=>this.handleSlotChange()));this.anchorObserver.observe(this.el,{childList:true})}disconnectedCallback(){if(C===this)C=null;this.anchorObserver?.disconnect();this.anchorObserver=null;this.unbindAnchor();this.clearTimers();this.destroyPopup()}onContentOrPositionChange(){if(!this.label?.trim()){if(this.isOpen||this.popupEl)this.hideInstant();return}if(!this.popupEl||!this.isOpen)return;this.renderPopupContent();this.schedulePosition()}get viewportPadPx(){return p(l.space050,l.space050)}get sideOffsetPx(){return p(this.sideOffset,l.space050)}get alignOffsetPx(){return p(this.alignOffset,0)}get hoverDelayMs(){return c(this.delay,l.animationDelayMedium3)}get instantReopenMs(){return c(l.animationDurationMedium1,l.animationDurationMedium1)}get fadeOutMs(){return h(l.motionShort3,l.animationDurationShort3)}get tooltipFallbackWidthPx(){return p(l.tooltipFallbackWidth,l.tooltipFallbackWidth)}get tooltipFallbackHeightPx(){const t=b[this.size];return p(t,t)}async presentFrom(t,o){if(o!=null)this.label=o;if(!this.label?.trim()){this.hide();return}const i=this.anchor===t;if(!i){this.unbindAnchor();this.anchor=t;this.programmaticAnchor=true;if(this.popupEl&&this.describedBy)this.linkDescribedBy()}if(this.popupEl){this.renderPopupContent();this.schedulePosition();return}if(this.delayTimer&&i)return;this.show()}async dismiss(){this.hide()}bindAnchor(){if(this.programmaticAnchor)return;const t=this.el.querySelector("slot");const o=t?.assignedElements?.()??[];const i=o[0]??this.el.firstElementChild;if(!i||i.tagName==="SLOT"||i===this.anchor)return;this.anchor=i;i.addEventListener("pointerenter",this.pointerEnterHandler);i.addEventListener("pointerleave",this.pointerLeaveHandler);i.addEventListener("pointerdown",this.pointerDownHandler);i.addEventListener("keydown",this.keyDownHandler);i.addEventListener("focusin",this.focusHandler);i.addEventListener("focusout",this.blurHandler)}unbindAnchor(){if(!this.anchor)return;this.unlinkDescribedBy();if(!this.programmaticAnchor){this.anchor.removeEventListener("pointerenter",this.pointerEnterHandler);this.anchor.removeEventListener("pointerleave",this.pointerLeaveHandler);this.anchor.removeEventListener("pointerdown",this.pointerDownHandler);this.anchor.removeEventListener("keydown",this.keyDownHandler);this.anchor.removeEventListener("focusin",this.focusHandler);this.anchor.removeEventListener("focusout",this.blurHandler)}this.anchor=null;this.programmaticAnchor=false}linkDescribedBy(){if(!this.describedBy||!this.anchor||!this.popupEl)return;const t=new Set((this.anchor.getAttribute("aria-describedby")??"").split(/\s+/).filter(Boolean));t.add(this.tooltipId);this.anchor.setAttribute("aria-describedby",Array.from(t).join(" "))}unlinkDescribedBy(){if(!this.anchor)return;const t=(this.anchor.getAttribute("aria-describedby")??"").split(/\s+/).filter((t=>t&&t!==this.tooltipId));if(t.length)this.anchor.setAttribute("aria-describedby",t.join(" "));else this.anchor.removeAttribute("aria-describedby")}clearTimers(){if(this.delayTimer){clearTimeout(this.delayTimer);this.delayTimer=null}if(this.closeTimer){clearTimeout(this.closeTimer);this.closeTimer=null}}setupOpenListeners(){this.position.observe();document.addEventListener("keydown",this.escapeHandler)}teardownOpenListeners(){this.position.unobserve();document.removeEventListener("keydown",this.escapeHandler)}destroyPopup(){this.teardownOpenListeners();this.unlinkDescribedBy();if(!this.popupEl)return;this.popupEl.remove();this.popupEl=null}schedulePosition(){if(!this.popupEl)return;const t=()=>{const t=this.popupEl?.querySelector(":scope > .tooltip-inner > ds-text");if(t instanceof o)O(t,this.wrapLabel)};requestAnimationFrame((()=>{t();this.position.update();requestAnimationFrame((()=>{t();this.position.update()}))}));this.position.observeResizeTargets()}hideInstant(){this.clearTimers();x=Date.now();if(C===this)C=null;this.destroyPopup();this.isOpen=false;this.skipEnterAnimation=false}show(){if(!this.label?.trim())return;this.clearTimers();let t=Date.now()-x<this.instantReopenMs;if(C&&C!==this){C.hideInstant();t=true}C=this;this.skipEnterAnimation=t;if(t){this.mountPopup();return}this.delayTimer=setTimeout((()=>{this.delayTimer=null;if(!this.label?.trim())return;this.mountPopup()}),this.hoverDelayMs)}hide(){this.clearTimers();if(!this.popupEl&&!this.isOpen)return;x=Date.now();if(!this.popupEl){this.isOpen=false;return}this.popupEl.classList.remove("tooltip-popup--instant");this.popupEl.classList.add("tooltip-popup--closing");if(this.fadeOutMs===0){if(C===this)C=null;this.destroyPopup();this.isOpen=false;this.skipEnterAnimation=false;return}this.closeTimer=setTimeout((()=>{this.closeTimer=null;if(C===this)C=null;this.destroyPopup();this.isOpen=false;this.skipEnterAnimation=false}),this.fadeOutMs)}mountPopup(){if(!this.popupEl){const t=document.createElement("div");t.id=this.tooltipId;t.setAttribute("role","tooltip");t.className="tooltip-popup ds-forced-colors-scope sc-ds-tooltip";Object.assign(t.style,{position:"fixed",left:"0",top:"0",zIndex:"var(--dimension-z-index-tooltip)",pointerEvents:"none"});document.body.appendChild(t);this.popupEl=t}this.setupOpenListeners();this.linkDescribedBy();this.popupEl.classList.toggle("tooltip-popup--instant",this.skipEnterAnimation);this.popupEl.classList.toggle("tooltip-popup--wrap",this.wrapLabel);this.popupEl.classList.remove("tooltip-popup--closing");this.renderPopupContent();this.schedulePosition();this.isOpen=true}renderPopupContent(){if(!this.popupEl)return;this.popupEl.classList.toggle("tooltip-popup--wrap",this.wrapLabel);const t=u[this.size];const o=this.size==="md"?"ds-control--md":this.size==="sm"?"ds-control--sm":"ds-control--xs";const i="sc-ds-tooltip";const s=document.createElement("div");s.className=`tooltip-inner ${o} ${i}`;const n=t=>{if(!this.shortcutKey||this.shortcutKeyPosition!==t)return;const o=document.createElement("span");o.className=`key-hint-group ${i}`;o.setAttribute("aria-hidden","true");for(const t of v(this.shortcutKey)){const s=document.createElement("span");const n=Array.from(t).length>1?" key-hint--wide":"";s.className=`key-hint${n} ${i}`;const e=document.createElement("span");e.className=`key-hint__label ${i}`;e.textContent=t;s.appendChild(e);o.appendChild(s)}s.appendChild(o)};n("start");const e=k({variant:t,wrap:this.wrapLabel?"wrap":"nowrap",text:this.label});O(e,this.wrapLabel);s.appendChild(e);n("end");this.popupEl.replaceChildren(s)}render(){return i(s,{key:"19c43b3e1d01f71889e7050d780211ef790bc5ea",style:{display:"contents"}},i("slot",{key:"7d548d0149aa7694f74a5b9901d025c4798fd48a",onSlotchange:this.handleSlotChange}))}get el(){return this}static get watchers(){return{label:[{onContentOrPositionChange:0}],size:[{onContentOrPositionChange:0}],side:[{onContentOrPositionChange:0}],align:[{onContentOrPositionChange:0}],sideOffset:[{onContentOrPositionChange:0}],alignOffset:[{onContentOrPositionChange:0}],boundary:[{onContentOrPositionChange:0}],shortcutKey:[{onContentOrPositionChange:0}],shortcutKeyPosition:[{onContentOrPositionChange:0}],wrapLabel:[{onContentOrPositionChange:0}]}}static get style(){return y()}},[262,"ds-tooltip",{label:[1],size:[1],side:[1],align:[1],sideOffset:[8,"side-offset"],alignOffset:[8,"align-offset"],boundary:[1],delay:[8],shortcutKey:[1,"shortcut-key"],shortcutKeyPosition:[1,"shortcut-key-position"],describedBy:[4,"described-by"],wrapLabel:[4,"wrap-label"],presentFrom:[64],dismiss:[64]},undefined,{label:[{onContentOrPositionChange:0}],size:[{onContentOrPositionChange:0}],side:[{onContentOrPositionChange:0}],align:[{onContentOrPositionChange:0}],sideOffset:[{onContentOrPositionChange:0}],alignOffset:[{onContentOrPositionChange:0}],boundary:[{onContentOrPositionChange:0}],shortcutKey:[{onContentOrPositionChange:0}],shortcutKeyPosition:[{onContentOrPositionChange:0}],wrapLabel:[{onContentOrPositionChange:0}]}]);function z(){if(typeof customElements==="undefined"){return}const t=["ds-tooltip","ds-text"];t.forEach((t=>{switch(t){case"ds-tooltip":if(!customElements.get(n(t))){customElements.define(n(t),P)}break;case"ds-text":if(!customElements.get(n(t))){d()}break}}))}z();export{P as T,z as d};
2
- //# sourceMappingURL=p-JuKGR7Ay.js.map
@@ -1 +0,0 @@
1
- {"version":3,"names":["MODIFIER_GLYPHS","Set","MODIFIER_LABELS","alt","cmd","command","control","ctrl","option","shift","canonicalKeyLabel","label","toLowerCase","shortcutKeyLabels","shortcut","normalized","trim","includes","split","map","part","filter","Boolean","test","characters","Array","from","labels","length","has","push","join","tooltipCss","FALLBACK_HEIGHT","md","TOKEN_DEFAULTS","size400","sm","size300","xs","size200","lastDismissedAt","tooltipIdCounter","activeTooltip","createDsText","opts","el","document","createElement","as","variant","emphasis","color","wrap","textContent","text","styleTooltipLabel","wrapLabel","style","flexShrink","minWidth","maxWidth","whiteSpace","padding","Tooltip","__stencil_proxyCustomElement","HTMLElement","constructor","registerHost","this","size","side","align","sideOffset","TOKEN_CSS_LENGTHS","space050","alignOffset","delay","animationDelayMedium3","shortcutKeyPosition","describedBy","tooltipId","delayTimer","closeTimer","anchor","popupEl","anchorObserver","didLoad","position","AnchoredPositionController","getAnchor","getPopup","getOwnerDocument","ownerDocument","measure","tip","anchorRect","getBoundingClientRect","popupWidth","offsetWidth","tooltipFallbackWidthPx","popupHeight","offsetHeight","tooltipFallbackHeightPx","sideOffsetPx","alignOffsetPx","viewportPadPx","viewportWidth","window","innerWidth","viewportHeight","innerHeight","collisionRect","resolveAnchoredOverlayBoundaryRect","boundary","apply","x","y","resolvedSide","dataset","transform","Math","round","liveUpdate","observeResize","skipEnterAnimation","isOpen","programmaticAnchor","lastInteractionWasKeyboard","pointerEnterHandler","event","pointerType","show","pointerLeaveHandler","hide","pointerDownHandler","hideInstant","keyDownHandler","focusHandler","matches","blurHandler","e","next","relatedTarget","contains","escapeHandler","key","preventDefault","handleSlotChange","slot","querySelector","assignedElements","firstElementChild","tagName","unbindAnchor","bindAnchor","connectedCallback","connectAnchor","componentDidLoad","MutationObserver","observe","childList","disconnectedCallback","disconnect","clearTimers","destroyPopup","onContentOrPositionChange","renderPopupContent","schedulePosition","resolveCssLengthPx","hoverDelayMs","resolveCssTimeMs","instantReopenMs","animationDurationMedium1","fadeOutMs","resolveMotionTimeMs","motionShort3","animationDurationShort3","tooltipFallbackWidth","token","presentFrom","sameAnchor","linkDescribedBy","dismiss","slotted","child","addEventListener","unlinkDescribedBy","removeEventListener","ids","getAttribute","add","setAttribute","id","removeAttribute","clearTimeout","setupOpenListeners","teardownOpenListeners","unobserve","remove","reapplyLabelStyles","requestAnimationFrame","update","observeResizeTargets","Date","now","instant","mountPopup","setTimeout","classList","className","Object","assign","left","top","zIndex","pointerEvents","body","appendChild","toggle","textVariant","CONTROL_TEXT_VARIANT","density","sc","inner","appendShortcut","shortcutKey","group","hint","wide","replaceChildren","render","h","Host","display","onSlotchange"],"sources":["src/wc/utils/shortcut-key.ts","src/wc/components/Tooltip/Tooltip.css?tag=ds-tooltip&encapsulation=scoped","src/wc/components/Tooltip/Tooltip.tsx"],"sourcesContent":["const MODIFIER_GLYPHS = new Set(['⌘', '⇧', '⌥', '⌃']);\nconst MODIFIER_LABELS: Readonly<Record<string, string>> = {\n alt: '⌥',\n cmd: '⌘',\n command: '⌘',\n control: '⌃',\n ctrl: '⌃',\n option: '⌥',\n shift: '⇧',\n};\n\nfunction canonicalKeyLabel(label: string): string {\n return MODIFIER_LABELS[label.toLowerCase()] ?? label;\n}\n\n/** Split a shortcut chord into the labels rendered on individual keycaps. */\nexport function shortcutKeyLabels(shortcut: string): string[] {\n const normalized = shortcut.trim();\n if (!normalized) return [];\n\n if (normalized.includes('+')) {\n return normalized\n .split('+')\n .map(part => part.trim())\n .filter(Boolean)\n .map(canonicalKeyLabel);\n }\n\n if (/\\s/.test(normalized)) {\n return normalized.split(/\\s+/).filter(Boolean).map(canonicalKeyLabel);\n }\n\n const characters = Array.from(normalized);\n const labels: string[] = [];\n while (characters.length > 1 && MODIFIER_GLYPHS.has(characters[0])) {\n labels.push(characters.shift()!);\n }\n labels.push(characters.join(''));\n return labels;\n}\n","@import '../../utils/control-density.css';\n@import '../../utils/key-hint.css';\n@import '../../utils/forced-colors.css';\n\n.tooltip-popup {\n box-sizing: border-box;\n background-color: var(--color-background-primary);\n border-radius: var(--ds-control-radius, var(--dimension-radius-025));\n box-shadow: var(--effect-elevation-elevated-floating);\n white-space: nowrap;\n pointer-events: none;\n animation: tooltipFadeIn var(--effect-motion-short-2) forwards;\n will-change: transform;\n backface-visibility: hidden;\n}\n\n/* Warm handoff between nearby triggers — no enter fade (avoids 20–100ms lag). */\n.tooltip-popup--instant {\n animation: none;\n opacity: 1;\n}\n\n.tooltip-popup--closing {\n animation: tooltipFadeOut var(--effect-motion-short-3) forwards;\n}\n\n/* Density: md / sm / xs via `.ds-control--*` on `.tooltip-inner`. */\n.tooltip-inner {\n box-sizing: border-box;\n height: var(--ds-control-height, var(--dimension-size-400));\n display: flex;\n align-items: center;\n gap: var(--ds-control-gap, var(--dimension-space-050));\n padding: 0 var(--ds-control-padding-inline, var(--dimension-space-075));\n}\n\n/*\n * Label layout lives on ds-text (metric-box + control label-inset).\n * NOTE: Stencil scopes this to `ds-text.sc-ds-tooltip`, but portaled\n * createElement ds-text loses that class when Text's <Host class> renders.\n * `renderPopupContent` therefore also sets these as inline styles.\n */\n.tooltip-inner > ds-text {\n flex-shrink: 0;\n min-width: max-content;\n max-width: none;\n padding: 0 var(--ds-control-label-inset, var(--dimension-space-025));\n color: var(--color-foreground-primary);\n}\n\n.tooltip-popup--wrap {\n white-space: normal;\n max-inline-size: var(--dimension-panel-width-xs);\n}\n\n.tooltip-popup--wrap .tooltip-inner {\n height: auto;\n min-height: var(--ds-control-height, var(--dimension-size-400));\n padding-block: var(--dimension-space-050);\n align-items: flex-start;\n}\n\n.tooltip-popup--wrap .tooltip-inner > ds-text {\n flex: 1 1 auto;\n min-width: 0;\n max-width: 100%;\n white-space: pre-line;\n}\n\n@keyframes tooltipFadeIn {\n from {\n opacity: 0;\n }\n to {\n opacity: 1;\n }\n}\n\n@keyframes tooltipFadeOut {\n from {\n opacity: 1;\n }\n to {\n opacity: 0;\n }\n}\n\n@media (prefers-reduced-motion: reduce) {\n .tooltip-popup,\n .tooltip-popup--instant {\n animation: none;\n opacity: 1;\n }\n\n .tooltip-popup--closing {\n animation: none;\n opacity: 0;\n }\n}\n\n@media (forced-colors: active) {\n .tooltip-popup {\n box-shadow: none;\n outline: var(--dimension-stroke-width-012) solid var(--ds-forced-color-content);\n outline-offset: calc(-1 * var(--dimension-stroke-width-012));\n }\n}\n","import { Component, Prop, Element, Method, Watch, h, Host } from '@stencil/core';\nimport {\n CONTROL_TEXT_VARIANT,\n resolveCssLengthPx,\n resolveCssTimeMs,\n resolveMotionTimeMs,\n TOKEN_CSS_LENGTHS,\n TOKEN_DEFAULTS,\n} from '../../utils';\nimport type { TextVariant } from '../Text/text-types';\nimport { shortcutKeyLabels } from '../../utils/shortcut-key';\nimport { AnchoredPositionController } from '../../utils/anchored-position-controller';\nimport {\n resolveAnchoredOverlayBoundaryRect,\n type AnchoredOverlayBoundary,\n} from '../../utils/anchored-overlay-boundary';\n// Side-effect: register `ds-text` — the portal builds it via createElement, not JSX.\nimport '../Text/Text';\n\nexport type TooltipSide = 'top' | 'right' | 'bottom' | 'left';\nexport type TooltipAlign = 'start' | 'center' | 'end';\nexport type TooltipSize = 'md' | 'sm' | 'xs';\n\nconst FALLBACK_HEIGHT: Record<TooltipSize, string> = {\n md: TOKEN_DEFAULTS.size400,\n sm: TOKEN_DEFAULTS.size300,\n xs: TOKEN_DEFAULTS.size200,\n};\n\nlet lastDismissedAt = 0;\nlet tooltipIdCounter = 0;\n/** Currently open tooltip — force-cleared on warm handoff so tips don't cross-fade. */\nlet activeTooltip: Tooltip | null = null;\n\ntype DsTextEl = HTMLElement & {\n as: string;\n variant: TextVariant;\n emphasis: boolean;\n color: string;\n wrap: string;\n};\n\nfunction createDsText(opts: {\n variant: TextVariant;\n emphasis?: boolean;\n color?: string;\n wrap?: 'wrap' | 'nowrap' | 'balance' | 'pretty';\n text: string;\n}): DsTextEl {\n const el = document.createElement('ds-text') as DsTextEl;\n el.as = 'span';\n el.variant = opts.variant;\n el.emphasis = opts.emphasis ?? false;\n el.color = opts.color ?? 'inherit';\n if (opts.wrap) el.wrap = opts.wrap;\n el.textContent = opts.text;\n return el;\n}\n\n/**\n * Control-density label styles for portaled ds-text.\n * Scoped CSS requires `sc-ds-tooltip` on the host, but Text's `<Host class>`\n * overwrites imperative className — so these must be inline to stick.\n */\nfunction styleTooltipLabel(el: HTMLElement, wrapLabel = false) {\n el.style.flexShrink = wrapLabel ? '1' : '0';\n el.style.minWidth = wrapLabel ? '0' : 'max-content';\n el.style.maxWidth = wrapLabel ? '100%' : 'none';\n el.style.whiteSpace = wrapLabel ? 'pre-line' : '';\n el.style.padding = '0 var(--ds-control-label-inset, var(--dimension-space-025))';\n el.style.color = 'var(--color-foreground-primary)';\n}\n\n/**\n * Imperative body portal for the popup.\n * Stencil must not own the portaled node — moving a VDOM child to `document.body`\n * causes recreate → re-portal → @State loops that freeze the page.\n */\n@Component({\n tag: 'ds-tooltip',\n styleUrl: 'Tooltip.css',\n scoped: true,\n})\nexport class Tooltip {\n @Element() el!: HTMLElement;\n\n /**\n * Tooltip text. Empty/whitespace skips show — useful when the wrapper must stay\n * mounted for layout/animation stability (e.g. PanelNav expand/collapse).\n */\n @Prop() label!: string;\n\n /** Control density (height, padding, type). */\n @Prop() size: TooltipSize = 'md';\n\n @Prop() side: TooltipSide = 'top';\n @Prop() align: TooltipAlign = 'center';\n /** Gap between anchor and tooltip — number (px) or TokoMo length. */\n @Prop() sideOffset: number | string = TOKEN_CSS_LENGTHS.space050;\n /** Cross-axis offset — number (px) or TokoMo length. */\n @Prop() alignOffset: number | string = 0;\n /** Explicit collision owner, `viewport`, or the nearest data-ds-overlay-boundary ancestor. */\n @Prop() boundary: AnchoredOverlayBoundary | undefined;\n /**\n * Hover show delay before the tooltip appears.\n * Default: `--effect-animation-delay-medium-3` (1000ms). Accepts a number (ms)\n * or a TokoMo time token / `var(--effect-animation-delay-*)`. Applies to the\n * initial hover/focus show only — after a recent dismiss, reopen is instant.\n * Prefer the default; override only for denser chrome or rare/destructive actions.\n */\n @Prop() delay: number | string = TOKEN_DEFAULTS.animationDelayMedium3;\n @Prop() shortcutKey: string | undefined;\n @Prop() shortcutKeyPosition: 'start' | 'end' = 'end';\n /**\n * Link the trigger with aria-describedby while the popup is open. Disable when\n * the label is already in the DOM, such as a truncated table cell.\n */\n @Prop() describedBy = true;\n /** Allow wrapping at a panel-xs max width and preserve explicit line breaks. */\n @Prop() wrapLabel = false;\n\n private tooltipId = `ds-tooltip-${++tooltipIdCounter}`;\n private delayTimer: ReturnType<typeof setTimeout> | null = null;\n private closeTimer: ReturnType<typeof setTimeout> | null = null;\n private anchor: HTMLElement | null = null;\n private popupEl: HTMLElement | null = null;\n private anchorObserver: MutationObserver | null = null;\n private didLoad = false;\n private readonly position = new AnchoredPositionController({\n getAnchor: () => this.anchor,\n getPopup: () => this.popupEl,\n getOwnerDocument: () => this.el.ownerDocument,\n measure: (anchor, tip) => ({\n anchorRect: anchor.getBoundingClientRect(),\n // Fall back to token metrics until `ds-text` upgrades and reports a width.\n popupWidth: tip.offsetWidth || this.tooltipFallbackWidthPx,\n popupHeight: tip.offsetHeight || this.tooltipFallbackHeightPx,\n side: this.side,\n align: this.align,\n sideOffsetPx: this.sideOffsetPx,\n alignOffsetPx: this.alignOffsetPx,\n viewportPadPx: this.viewportPadPx,\n viewportWidth: window.innerWidth,\n viewportHeight: window.innerHeight,\n collisionRect: resolveAnchoredOverlayBoundaryRect(anchor, this.boundary),\n }),\n apply: ({ x, y, resolvedSide }) => {\n if (!this.popupEl) return;\n this.popupEl.dataset.side = resolvedSide;\n this.popupEl.style.transform = `translate(${Math.round(x)}px, ${Math.round(y)}px)`;\n },\n liveUpdate: 'frame',\n observeResize: true,\n });\n private skipEnterAnimation = false;\n private isOpen = false;\n private programmaticAnchor = false;\n private lastInteractionWasKeyboard = false;\n private pointerEnterHandler = (event: PointerEvent) => {\n if (event.pointerType === 'touch') return;\n this.show();\n };\n private pointerLeaveHandler = (event: PointerEvent) => {\n if (event.pointerType === 'touch') return;\n this.hide();\n };\n private pointerDownHandler = (event: PointerEvent) => {\n this.lastInteractionWasKeyboard = false;\n if (event.pointerType === 'touch' && (this.isOpen || this.popupEl)) this.hideInstant();\n };\n private keyDownHandler = () => {\n this.lastInteractionWasKeyboard = true;\n };\n /** focusin/focusout so nested focus targets (e.g. ds-button-* inner button) still open the tip. */\n private focusHandler = () => {\n if (this.lastInteractionWasKeyboard || this.anchor?.matches(':focus-visible')) this.show();\n };\n private blurHandler: (e: FocusEvent) => void = e => {\n const next = e.relatedTarget as Node | null;\n if (next && this.anchor?.contains(next)) return;\n this.hide();\n };\n private escapeHandler = (event: KeyboardEvent) => {\n if (event.key !== 'Escape' || !this.isOpen) return;\n event.preventDefault();\n this.hide();\n };\n\n connectedCallback() {\n if (!this.didLoad) return;\n this.connectAnchor();\n }\n\n componentDidLoad() {\n this.didLoad = true;\n this.connectAnchor();\n }\n\n private connectAnchor() {\n this.bindAnchor();\n if (this.anchorObserver) return;\n this.anchorObserver = new MutationObserver(() => this.handleSlotChange());\n this.anchorObserver.observe(this.el, { childList: true });\n }\n\n disconnectedCallback() {\n if (activeTooltip === this) activeTooltip = null;\n this.anchorObserver?.disconnect();\n this.anchorObserver = null;\n this.unbindAnchor();\n this.clearTimers();\n this.destroyPopup();\n }\n\n @Watch('label')\n @Watch('size')\n @Watch('side')\n @Watch('align')\n @Watch('sideOffset')\n @Watch('alignOffset')\n @Watch('boundary')\n @Watch('shortcutKey')\n @Watch('shortcutKeyPosition')\n @Watch('wrapLabel')\n onContentOrPositionChange() {\n if (!this.label?.trim()) {\n if (this.isOpen || this.popupEl) this.hideInstant();\n return;\n }\n if (!this.popupEl || !this.isOpen) return;\n this.renderPopupContent();\n this.schedulePosition();\n }\n\n private get viewportPadPx(): number {\n return resolveCssLengthPx(TOKEN_DEFAULTS.space050, TOKEN_DEFAULTS.space050);\n }\n\n private get sideOffsetPx(): number {\n return resolveCssLengthPx(this.sideOffset, TOKEN_DEFAULTS.space050);\n }\n\n private get alignOffsetPx(): number {\n return resolveCssLengthPx(this.alignOffset, 0);\n }\n\n private get hoverDelayMs(): number {\n return resolveCssTimeMs(this.delay, TOKEN_DEFAULTS.animationDelayMedium3);\n }\n\n private get instantReopenMs(): number {\n return resolveCssTimeMs(\n TOKEN_DEFAULTS.animationDurationMedium1,\n TOKEN_DEFAULTS.animationDurationMedium1\n );\n }\n\n private get fadeOutMs(): number {\n return resolveMotionTimeMs(TOKEN_DEFAULTS.motionShort3, TOKEN_DEFAULTS.animationDurationShort3);\n }\n\n private get tooltipFallbackWidthPx(): number {\n return resolveCssLengthPx(\n TOKEN_DEFAULTS.tooltipFallbackWidth,\n TOKEN_DEFAULTS.tooltipFallbackWidth\n );\n }\n\n private get tooltipFallbackHeightPx(): number {\n const token = FALLBACK_HEIGHT[this.size];\n return resolveCssLengthPx(token, token);\n }\n\n /**\n * Present against an external anchor the host already measured.\n * Does not bind hover or focus on that anchor — the owner drives show/hide.\n */\n @Method()\n async presentFrom(anchor: HTMLElement, label?: string) {\n if (label != null) this.label = label;\n if (!this.label?.trim()) {\n this.hide();\n return;\n }\n const sameAnchor = this.anchor === anchor;\n if (!sameAnchor) {\n this.unbindAnchor();\n this.anchor = anchor;\n this.programmaticAnchor = true;\n if (this.popupEl && this.describedBy) this.linkDescribedBy();\n }\n if (this.popupEl) {\n this.renderPopupContent();\n this.schedulePosition();\n return;\n }\n if (this.delayTimer && sameAnchor) return;\n this.show();\n }\n\n /** Dismiss a popup opened through presentFrom or the slotted trigger. */\n @Method()\n async dismiss() {\n this.hide();\n }\n\n private bindAnchor() {\n if (this.programmaticAnchor) return;\n const slot = this.el.querySelector('slot') as HTMLSlotElement | null;\n const slotted = slot?.assignedElements?.() ?? [];\n const child = (slotted[0] ?? this.el.firstElementChild) as HTMLElement | null;\n if (!child || child.tagName === 'SLOT' || child === this.anchor) return;\n this.anchor = child;\n child.addEventListener('pointerenter', this.pointerEnterHandler);\n child.addEventListener('pointerleave', this.pointerLeaveHandler);\n child.addEventListener('pointerdown', this.pointerDownHandler);\n child.addEventListener('keydown', this.keyDownHandler);\n child.addEventListener('focusin', this.focusHandler);\n child.addEventListener('focusout', this.blurHandler);\n }\n\n private unbindAnchor() {\n if (!this.anchor) return;\n this.unlinkDescribedBy();\n if (!this.programmaticAnchor) {\n this.anchor.removeEventListener('pointerenter', this.pointerEnterHandler);\n this.anchor.removeEventListener('pointerleave', this.pointerLeaveHandler);\n this.anchor.removeEventListener('pointerdown', this.pointerDownHandler);\n this.anchor.removeEventListener('keydown', this.keyDownHandler);\n this.anchor.removeEventListener('focusin', this.focusHandler);\n this.anchor.removeEventListener('focusout', this.blurHandler);\n }\n this.anchor = null;\n this.programmaticAnchor = false;\n }\n\n private linkDescribedBy() {\n if (!this.describedBy || !this.anchor || !this.popupEl) return;\n const ids = new Set(\n (this.anchor.getAttribute('aria-describedby') ?? '').split(/\\s+/).filter(Boolean)\n );\n ids.add(this.tooltipId);\n this.anchor.setAttribute('aria-describedby', Array.from(ids).join(' '));\n }\n\n private unlinkDescribedBy() {\n if (!this.anchor) return;\n const ids = (this.anchor.getAttribute('aria-describedby') ?? '')\n .split(/\\s+/)\n .filter(id => id && id !== this.tooltipId);\n if (ids.length) this.anchor.setAttribute('aria-describedby', ids.join(' '));\n else this.anchor.removeAttribute('aria-describedby');\n }\n\n private handleSlotChange = () => {\n if (this.programmaticAnchor) return;\n const slot = this.el.querySelector('slot') as HTMLSlotElement | null;\n const next = (slot?.assignedElements?.()[0] ?? this.el.firstElementChild) as HTMLElement | null;\n if (next === this.anchor || next?.tagName === 'SLOT') return;\n if (this.isOpen || this.popupEl) this.hideInstant();\n this.unbindAnchor();\n this.bindAnchor();\n };\n\n private clearTimers() {\n if (this.delayTimer) {\n clearTimeout(this.delayTimer);\n this.delayTimer = null;\n }\n if (this.closeTimer) {\n clearTimeout(this.closeTimer);\n this.closeTimer = null;\n }\n }\n\n private setupOpenListeners() {\n // Binds scroll/resize + the resize observer; placement itself is scheduled\n // by schedulePosition() so the label restyle stays interleaved.\n this.position.observe();\n document.addEventListener('keydown', this.escapeHandler);\n }\n\n private teardownOpenListeners() {\n this.position.unobserve();\n document.removeEventListener('keydown', this.escapeHandler);\n }\n\n private destroyPopup() {\n this.teardownOpenListeners();\n this.unlinkDescribedBy();\n if (!this.popupEl) return;\n this.popupEl.remove();\n this.popupEl = null;\n }\n\n /**\n * Position after `ds-text` upgrades and lays out. Measuring synchronously in\n * `mountPopup` reads a collapsed/fallback width and places left/right tips wrong.\n */\n private schedulePosition() {\n if (!this.popupEl) return;\n\n const reapplyLabelStyles = () => {\n const label = this.popupEl?.querySelector(':scope > .tooltip-inner > ds-text');\n if (label instanceof HTMLElement) styleTooltipLabel(label, this.wrapLabel);\n };\n\n requestAnimationFrame(() => {\n reapplyLabelStyles();\n this.position.update();\n requestAnimationFrame(() => {\n reapplyLabelStyles();\n this.position.update();\n });\n });\n\n // The popup remounts on every show, so re-target the observer bound in start().\n this.position.observeResizeTargets();\n }\n\n /** Drop the open tip immediately (warm handoff to another tooltip). */\n private hideInstant() {\n this.clearTimers();\n lastDismissedAt = Date.now();\n if (activeTooltip === this) activeTooltip = null;\n this.destroyPopup();\n this.isOpen = false;\n this.skipEnterAnimation = false;\n }\n\n private show() {\n // Empty label = wrapper present for DOM stability (e.g. PanelNav expand/collapse)\n // but no tip should appear.\n if (!this.label?.trim()) return;\n this.clearTimers();\n let instant = Date.now() - lastDismissedAt < this.instantReopenMs;\n if (activeTooltip && activeTooltip !== this) {\n activeTooltip.hideInstant();\n instant = true;\n }\n // eslint-disable-next-line @typescript-eslint/no-this-alias -- module singleton tracks the active instance\n activeTooltip = this;\n this.skipEnterAnimation = instant;\n if (instant) {\n this.mountPopup();\n return;\n }\n this.delayTimer = setTimeout(() => {\n this.delayTimer = null;\n if (!this.label?.trim()) return;\n this.mountPopup();\n }, this.hoverDelayMs);\n }\n\n private hide() {\n this.clearTimers();\n if (!this.popupEl && !this.isOpen) return;\n lastDismissedAt = Date.now();\n if (!this.popupEl) {\n this.isOpen = false;\n return;\n }\n this.popupEl.classList.remove('tooltip-popup--instant');\n this.popupEl.classList.add('tooltip-popup--closing');\n if (this.fadeOutMs === 0) {\n if (activeTooltip === this) activeTooltip = null;\n this.destroyPopup();\n this.isOpen = false;\n this.skipEnterAnimation = false;\n return;\n }\n this.closeTimer = setTimeout(() => {\n this.closeTimer = null;\n if (activeTooltip === this) activeTooltip = null;\n this.destroyPopup();\n this.isOpen = false;\n this.skipEnterAnimation = false;\n }, this.fadeOutMs);\n }\n\n private mountPopup() {\n if (!this.popupEl) {\n const tip = document.createElement('div');\n tip.id = this.tooltipId;\n tip.setAttribute('role', 'tooltip');\n // `sc-ds-tooltip` is required for Stencil scoped CSS to match outside the host.\n tip.className = 'tooltip-popup ds-forced-colors-scope sc-ds-tooltip';\n Object.assign(tip.style, {\n position: 'fixed',\n left: '0',\n top: '0',\n zIndex: 'var(--dimension-z-index-tooltip)',\n pointerEvents: 'none',\n });\n document.body.appendChild(tip);\n this.popupEl = tip;\n }\n\n this.setupOpenListeners();\n this.linkDescribedBy();\n this.popupEl.classList.toggle('tooltip-popup--instant', this.skipEnterAnimation);\n this.popupEl.classList.toggle('tooltip-popup--wrap', this.wrapLabel);\n this.popupEl.classList.remove('tooltip-popup--closing');\n this.renderPopupContent();\n this.schedulePosition();\n this.isOpen = true;\n }\n\n private renderPopupContent() {\n if (!this.popupEl) return;\n this.popupEl.classList.toggle('tooltip-popup--wrap', this.wrapLabel);\n const textVariant = CONTROL_TEXT_VARIANT[this.size];\n const density =\n this.size === 'md'\n ? 'ds-control--md'\n : this.size === 'sm'\n ? 'ds-control--sm'\n : 'ds-control--xs';\n // Every layout node needs `sc-ds-tooltip` so scoped selectors (`.foo.sc-ds-tooltip`) match.\n const sc = 'sc-ds-tooltip';\n\n const inner = document.createElement('div');\n inner.className = `tooltip-inner ${density} ${sc}`;\n\n const appendShortcut = (position: 'start' | 'end') => {\n if (!this.shortcutKey || this.shortcutKeyPosition !== position) return;\n const group = document.createElement('span');\n group.className = `key-hint-group ${sc}`;\n group.setAttribute('aria-hidden', 'true');\n\n for (const label of shortcutKeyLabels(this.shortcutKey)) {\n const hint = document.createElement('span');\n const wide = Array.from(label).length > 1 ? ' key-hint--wide' : '';\n hint.className = `key-hint${wide} ${sc}`;\n const text = document.createElement('span');\n text.className = `key-hint__label ${sc}`;\n text.textContent = label;\n hint.appendChild(text);\n group.appendChild(hint);\n }\n inner.appendChild(group);\n };\n\n appendShortcut('start');\n\n // ds-text is the layout box (metric-box + 2px control label-inset).\n // Inline styles required — see styleTooltipLabel.\n const label = createDsText({\n variant: textVariant,\n wrap: this.wrapLabel ? 'wrap' : 'nowrap',\n text: this.label,\n });\n styleTooltipLabel(label, this.wrapLabel);\n inner.appendChild(label);\n\n appendShortcut('end');\n\n this.popupEl.replaceChildren(inner);\n }\n\n render() {\n return (\n <Host style={{ display: 'contents' }}>\n <slot onSlotchange={this.handleSlotChange} />\n </Host>\n );\n }\n}\n"],"mappings":"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","ignoreList":[]}