@ds-mo/ui 12.9.0 → 13.1.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 (470) hide show
  1. package/README.md +1 -0
  2. package/dist/.package-ready.json +1 -0
  3. package/dist/agent-patterns.json +124 -135
  4. package/dist/agent.json +249 -1108
  5. package/dist/angular/ds-bar-nav.d.ts +1 -1
  6. package/dist/angular/ds-bar-nav.js +3 -3
  7. package/dist/angular/ds-button-filled.d.ts +1 -1
  8. package/dist/angular/ds-button-filled.js +3 -3
  9. package/dist/angular/ds-card-data-viz.d.ts +18 -0
  10. package/dist/angular/{ds-card-data-viz-donut.js → ds-card-data-viz.js} +12 -12
  11. package/dist/angular/ds-card-overview.d.ts +1 -1
  12. package/dist/angular/ds-card-overview.js +3 -3
  13. package/dist/angular/ds-chart-bar.d.ts +1 -1
  14. package/dist/angular/ds-chart-bar.js +3 -3
  15. package/dist/angular/ds-menu.d.ts +1 -7
  16. package/dist/angular/ds-menu.js +2 -5
  17. package/dist/angular/ds-mobile-header.d.ts +1 -1
  18. package/dist/angular/ds-mobile-header.js +3 -3
  19. package/dist/angular/ds-mobile-section-switcher.d.ts +1 -1
  20. package/dist/angular/ds-mobile-section-switcher.js +3 -3
  21. package/dist/angular/ds-panel-tools.d.ts +1 -1
  22. package/dist/angular/ds-panel-tools.js +3 -3
  23. package/dist/angular/ds-select.d.ts +5 -4
  24. package/dist/angular/ds-select.js +3 -3
  25. package/dist/angular/ds-shell-app.d.ts +90 -1
  26. package/dist/angular/ds-shell-app.js +44 -4
  27. package/dist/angular/ds-shell-tools.d.ts +1 -1
  28. package/dist/angular/ds-shell-tools.js +3 -3
  29. package/dist/angular/index.d.ts +1 -1
  30. package/dist/angular/index.js +1 -8
  31. package/dist/angular/proxies.d.ts +1 -8
  32. package/dist/angular/proxies.js +1 -8
  33. package/dist/components/ds-agent-activity.js +1 -1
  34. package/dist/components/ds-agent-response.js +1 -1
  35. package/dist/components/ds-agent-source-list.js +1 -1
  36. package/dist/components/ds-agent-tool-call.js +1 -1
  37. package/dist/components/ds-attachment-list.js +1 -1
  38. package/dist/components/ds-badge.js +1 -1
  39. package/dist/components/ds-bar-nav.js +1 -1
  40. package/dist/components/ds-bar-nav.js.map +1 -1
  41. package/dist/components/ds-bar-title.js +1 -1
  42. package/dist/components/ds-bar-title.js.map +1 -1
  43. package/dist/components/ds-bar-workflow.js +1 -1
  44. package/dist/components/ds-breadcrumb.js +1 -1
  45. package/dist/components/ds-button-filled.js +1 -1
  46. package/dist/components/ds-button-unfilled.js +1 -1
  47. package/dist/components/{ds-select-multi.d.ts → ds-card-data-viz.d.ts} +4 -4
  48. package/dist/components/ds-card-data-viz.js +2 -0
  49. package/dist/components/ds-card-data-viz.js.map +1 -0
  50. package/dist/components/ds-card-overview.js +1 -1
  51. package/dist/components/ds-card-overview.js.map +1 -1
  52. package/dist/components/ds-card-setting.js +1 -1
  53. package/dist/components/ds-chart-bar.js +1 -1
  54. package/dist/components/ds-chart-bar.js.map +1 -1
  55. package/dist/components/ds-chart-donut.js +1 -1
  56. package/dist/components/ds-chart-donut.js.map +1 -1
  57. package/dist/components/ds-chart-legend.js +1 -1
  58. package/dist/components/ds-chart-legend.js.map +1 -1
  59. package/dist/components/ds-chart-line.js +1 -1
  60. package/dist/components/ds-chart-line.js.map +1 -1
  61. package/dist/components/ds-checkbox.js +1 -1
  62. package/dist/components/ds-chip.js +1 -1
  63. package/dist/components/ds-chip.js.map +1 -1
  64. package/dist/components/ds-code-block.js +1 -1
  65. package/dist/components/ds-conversation-list-item.js +1 -1
  66. package/dist/components/ds-conversation-list-item.js.map +1 -1
  67. package/dist/components/ds-conversation-list-section.js +1 -1
  68. package/dist/components/ds-conversation-list.js +1 -1
  69. package/dist/components/ds-divider.js +1 -1
  70. package/dist/components/ds-empty-state.js +1 -1
  71. package/dist/components/ds-field.js +1 -1
  72. package/dist/components/ds-input.js +1 -1
  73. package/dist/components/ds-input.js.map +1 -1
  74. package/dist/components/ds-markdown.js +1 -1
  75. package/dist/components/ds-menu.js +1 -1
  76. package/dist/components/ds-message-bubble.js +1 -1
  77. package/dist/components/ds-message-composer.js +1 -1
  78. package/dist/components/ds-message-composer.js.map +1 -1
  79. package/dist/components/ds-message-scroller.js +1 -1
  80. package/dist/components/ds-message.js +1 -1
  81. package/dist/components/ds-mobile-bar-nav.js +1 -1
  82. package/dist/components/ds-mobile-bar-nav.js.map +1 -1
  83. package/dist/components/ds-mobile-header.js +1 -1
  84. package/dist/components/ds-mobile-section-switcher.js +1 -1
  85. package/dist/components/ds-mobile-sheet-nav.js +1 -1
  86. package/dist/components/ds-mobile-sheet-nav.js.map +1 -1
  87. package/dist/components/ds-modal.js +1 -1
  88. package/dist/components/ds-panel-nav.js +1 -1
  89. package/dist/components/ds-panel-nav.js.map +1 -1
  90. package/dist/components/ds-panel-sub-nav.js +1 -1
  91. package/dist/components/ds-panel-sub-nav.js.map +1 -1
  92. package/dist/components/ds-panel-tool-header.js +1 -1
  93. package/dist/components/ds-panel-tool-search.js +1 -1
  94. package/dist/components/ds-panel-tools.js +1 -1
  95. package/dist/components/ds-radio.js +1 -1
  96. package/dist/components/ds-radio.js.map +1 -1
  97. package/dist/components/ds-scroll-overlay.js +1 -1
  98. package/dist/components/ds-select.js +1 -1
  99. package/dist/components/ds-select.js.map +1 -1
  100. package/dist/components/ds-shell-app.js +1 -1
  101. package/dist/components/ds-shell-app.js.map +1 -1
  102. package/dist/components/ds-shell-page.js +1 -1
  103. package/dist/components/ds-shell-page.js.map +1 -1
  104. package/dist/components/ds-shell-tools.js +1 -1
  105. package/dist/components/ds-shell-tools.js.map +1 -1
  106. package/dist/components/ds-skeleton.js +1 -1
  107. package/dist/components/ds-slider.js +1 -1
  108. package/dist/components/ds-slider.js.map +1 -1
  109. package/dist/components/ds-swatch-picker.js +1 -1
  110. package/dist/components/ds-switch.js +1 -1
  111. package/dist/components/ds-tab-group.js +1 -1
  112. package/dist/components/ds-tag.js +1 -1
  113. package/dist/components/ds-tag.js.map +1 -1
  114. package/dist/components/ds-text.js +1 -1
  115. package/dist/components/ds-toast.js +1 -1
  116. package/dist/components/ds-tooltip-data-viz.js +1 -1
  117. package/dist/components/ds-tooltip.js +1 -1
  118. package/dist/components/ds-typing-indicator.js +1 -1
  119. package/dist/components/{p-CgEYdMee.js → p-6qXDqCj_.js} +2 -2
  120. package/dist/components/{p-Cr3tEx7o.js → p-Ay1AX7Ql.js} +2 -2
  121. package/dist/components/p-B-qDb_Zo.js +2 -0
  122. package/dist/components/p-B-qDb_Zo.js.map +1 -0
  123. package/dist/components/{p-BOCfICln.js → p-B1XW4VSn.js} +2 -2
  124. package/dist/components/p-B9p6w-_T.js +2 -0
  125. package/dist/components/p-B9p6w-_T.js.map +1 -0
  126. package/dist/components/p-BBFEhNzM.js +2 -0
  127. package/dist/components/p-BBFEhNzM.js.map +1 -0
  128. package/dist/components/p-BGUK8-Qm.js +2 -0
  129. package/dist/components/p-BGUK8-Qm.js.map +1 -0
  130. package/dist/components/p-BO4cj3iX.js +2 -0
  131. package/dist/components/{p-DCvA3Dc9.js.map → p-BO4cj3iX.js.map} +1 -1
  132. package/dist/components/{p-BKOlvCGS.js → p-BUZXuod2.js} +2 -2
  133. package/dist/components/p-BYWkksDO.js +2 -0
  134. package/dist/components/p-BYWkksDO.js.map +1 -0
  135. package/dist/components/p-BbMJTilO.js +2 -0
  136. package/dist/components/p-BbMJTilO.js.map +1 -0
  137. package/dist/components/{p-BO5aqZcf.js → p-BcTYhmku.js} +2 -2
  138. package/dist/components/p-BnQXAbif.js +2 -0
  139. package/dist/components/p-BnQXAbif.js.map +1 -0
  140. package/dist/components/p-BnbbnuVC.js +2 -0
  141. package/dist/components/p-BnbbnuVC.js.map +1 -0
  142. package/dist/components/{p-BDKtu6Wb.js → p-BroVnDzE.js} +2 -2
  143. package/dist/components/{p-CIiBpjCn.js → p-BsoqsbBh.js} +2 -2
  144. package/dist/components/p-BybqPD8K.js +2 -0
  145. package/dist/components/p-BybqPD8K.js.map +1 -0
  146. package/dist/components/{p-CCzG5xDD.js → p-C-aCzwhA.js} +2 -2
  147. package/dist/components/p-C-aCzwhA.js.map +1 -0
  148. package/dist/components/p-C-kzknkR.js +2 -0
  149. package/dist/components/p-C-kzknkR.js.map +1 -0
  150. package/dist/components/p-C-vRkDyn.js +2 -0
  151. package/dist/components/p-C-vRkDyn.js.map +1 -0
  152. package/dist/components/p-C4uYvyq6.js +2 -0
  153. package/dist/components/p-C4uYvyq6.js.map +1 -0
  154. package/dist/components/{p-C8HU4W8q.js → p-CBazaRlE.js} +2 -2
  155. package/dist/components/p-CH9yArA1.js +2 -0
  156. package/dist/components/p-CH9yArA1.js.map +1 -0
  157. package/dist/components/p-CHpNyAo1.js +2 -0
  158. package/dist/components/{p-CChcuL04.js.map → p-CHpNyAo1.js.map} +1 -1
  159. package/dist/components/{p-BhV5e6vF.js → p-CHuh71-U.js} +2 -2
  160. package/dist/components/p-CJDTh9Tg.js +2 -0
  161. package/dist/components/p-CJDTh9Tg.js.map +1 -0
  162. package/dist/components/p-CJbLY1tu.js +2 -0
  163. package/dist/components/p-CJbLY1tu.js.map +1 -0
  164. package/dist/components/p-CreGah0j.js +2 -0
  165. package/dist/components/p-Cvxm1OZB.js +2 -0
  166. package/dist/components/p-Cvxm1OZB.js.map +1 -0
  167. package/dist/components/p-D2xWcVv6.js +2 -0
  168. package/dist/components/p-D2xWcVv6.js.map +1 -0
  169. package/dist/components/p-DAW6G8Sl.js +2 -0
  170. package/dist/components/p-DAW6G8Sl.js.map +1 -0
  171. package/dist/components/p-DEaszb15.js +2 -0
  172. package/dist/components/p-DEaszb15.js.map +1 -0
  173. package/dist/components/{p-BgGP65Nn.js → p-DOUk4KoT.js} +1 -1
  174. package/dist/components/p-DOUk4KoT.js.map +1 -0
  175. package/dist/components/p-DbQr7Kwr.js +2 -0
  176. package/dist/components/p-DbQr7Kwr.js.map +1 -0
  177. package/dist/components/{p-Cuih680v.js → p-Df17mJqI.js} +2 -2
  178. package/dist/components/p-DhEdICfD.js +2 -0
  179. package/dist/components/p-DhEdICfD.js.map +1 -0
  180. package/dist/components/p-bxoryr-3.js +2 -0
  181. package/dist/components/p-bxoryr-3.js.map +1 -0
  182. package/dist/components/p-eAfNzlMa.js +2 -0
  183. package/dist/components/p-eAfNzlMa.js.map +1 -0
  184. package/dist/components/p-gZni7A2L.js +2 -0
  185. package/dist/components/p-gZni7A2L.js.map +1 -0
  186. package/dist/components/{p-YR1XeuZf.js → p-ohsLFap_.js} +2 -2
  187. package/dist/components/{p-DjbTFy2B.js → p-ymtdhOU5.js} +1 -1
  188. package/dist/components/p-ymtdhOU5.js.map +1 -0
  189. package/dist/docs/components.json +929 -2371
  190. package/dist/framework/angular.d.ts +0 -1
  191. package/dist/framework/angular.js +0 -1
  192. package/dist/lib/components/BarTitle/bar-title-types.d.ts +28 -0
  193. package/dist/lib/components/Breadcrumb/breadcrumb-types.d.ts +16 -0
  194. package/dist/lib/components/ButtonFilled/ButtonFilled.d.ts +83 -0
  195. package/dist/lib/components/MobileHeader/mobile-header-types.d.ts +4 -0
  196. package/dist/lib/components/PanelTools/panel-tools-types.d.ts +21 -7
  197. package/dist/lib/components/ShellApp/shell-app-types.d.ts +91 -0
  198. package/dist/lib/shell/index.d.ts +5 -13
  199. package/dist/lib/shell/index.js +87 -358
  200. package/dist/lib/shell/index.js.map +3 -3
  201. package/dist/lib/shell/shell-responsive.d.ts +2 -1
  202. package/dist/lib/utils/button-render.d.ts +17 -0
  203. package/dist/lib/utils/button-types.d.ts +10 -0
  204. package/dist/lib/utils/choice-list.d.ts +25 -0
  205. package/dist/lib/utils/control-press.d.ts +8 -0
  206. package/dist/lib/utils/form-association.d.ts +22 -0
  207. package/dist/lib/utils/index.d.ts +4 -0
  208. package/dist/lib/utils/index.js +63 -0
  209. package/dist/lib/utils/index.js.map +3 -3
  210. package/dist/lib/utils/required-validity.d.ts +1 -1
  211. package/dist/lib/utils/safe-url.d.ts +11 -0
  212. package/dist/mcp/cli.js +38 -10
  213. package/dist/mcp-data/registry/agent-activity.json +1 -1
  214. package/dist/mcp-data/registry/agent-response.json +1 -1
  215. package/dist/mcp-data/registry/agent-source-list.json +2 -2
  216. package/dist/mcp-data/registry/agent-tool-call.json +1 -1
  217. package/dist/mcp-data/registry/attachment-list.json +2 -2
  218. package/dist/mcp-data/registry/avatar.json +1 -1
  219. package/dist/mcp-data/registry/badge.json +1 -1
  220. package/dist/mcp-data/registry/bar-nav.json +4 -22
  221. package/dist/mcp-data/registry/bar-title.json +1 -1
  222. package/dist/mcp-data/registry/bar-workflow.json +1 -1
  223. package/dist/mcp-data/registry/breadcrumb.json +2 -2
  224. package/dist/mcp-data/registry/button-filled.json +5 -20
  225. package/dist/mcp-data/registry/button-unfilled.json +15 -12
  226. package/dist/mcp-data/registry/card-data-viz.json +241 -0
  227. package/dist/mcp-data/registry/card-overview.json +39 -11
  228. package/dist/mcp-data/registry/card-setting.json +3 -3
  229. package/dist/mcp-data/registry/chart-bar.json +67 -19
  230. package/dist/mcp-data/registry/chart-donut.json +8 -8
  231. package/dist/mcp-data/registry/chart-legend.json +9 -11
  232. package/dist/mcp-data/registry/chart-line.json +2 -3
  233. package/dist/mcp-data/registry/checkbox.json +3 -3
  234. package/dist/mcp-data/registry/chip.json +1 -1
  235. package/dist/mcp-data/registry/code-block.json +1 -1
  236. package/dist/mcp-data/registry/conversation-list-item.json +2 -2
  237. package/dist/mcp-data/registry/conversation-list-section.json +1 -1
  238. package/dist/mcp-data/registry/conversation-list.json +1 -1
  239. package/dist/mcp-data/registry/divider.json +1 -1
  240. package/dist/mcp-data/registry/empty-state.json +1 -1
  241. package/dist/mcp-data/registry/field.json +3 -4
  242. package/dist/mcp-data/registry/icon.json +1 -1
  243. package/dist/mcp-data/registry/input.json +2 -2
  244. package/dist/mcp-data/registry/loader.json +1 -1
  245. package/dist/mcp-data/registry/markdown.json +2 -2
  246. package/dist/mcp-data/registry/menu.json +11 -22
  247. package/dist/mcp-data/registry/message-bubble.json +1 -1
  248. package/dist/mcp-data/registry/message-composer.json +1 -1
  249. package/dist/mcp-data/registry/message-scroller.json +1 -1
  250. package/dist/mcp-data/registry/message.json +1 -1
  251. package/dist/mcp-data/registry/mobile-bar-nav.json +2 -2
  252. package/dist/mcp-data/registry/mobile-header.json +2 -38
  253. package/dist/mcp-data/registry/mobile-section-switcher.json +2 -20
  254. package/dist/mcp-data/registry/mobile-sheet-nav.json +1 -1
  255. package/dist/mcp-data/registry/modal.json +1 -1
  256. package/dist/mcp-data/registry/panel-nav.json +3 -3
  257. package/dist/mcp-data/registry/panel-sub-nav.json +1 -1
  258. package/dist/mcp-data/registry/panel-tool-header.json +1 -1
  259. package/dist/mcp-data/registry/panel-tool-search.json +2 -2
  260. package/dist/mcp-data/registry/panel-tools.json +20 -56
  261. package/dist/mcp-data/registry/radio.json +2 -2
  262. package/dist/mcp-data/registry/registry.json +295 -1175
  263. package/dist/mcp-data/registry/scroll-overlay.json +1 -1
  264. package/dist/mcp-data/registry/select.json +60 -26
  265. package/dist/mcp-data/registry/shell-app.json +346 -21
  266. package/dist/mcp-data/registry/shell-page.json +2 -2
  267. package/dist/mcp-data/registry/shell-tools.json +13 -44
  268. package/dist/mcp-data/registry/skeleton.json +1 -1
  269. package/dist/mcp-data/registry/slider.json +2 -2
  270. package/dist/mcp-data/registry/swatch-picker.json +1 -1
  271. package/dist/mcp-data/registry/switch.json +2 -2
  272. package/dist/mcp-data/registry/tab-group.json +1 -1
  273. package/dist/mcp-data/registry/tag.json +1 -1
  274. package/dist/mcp-data/registry/text.json +1 -1
  275. package/dist/mcp-data/registry/toast.json +1 -1
  276. package/dist/mcp-data/registry/tooltip-data-viz.json +1 -1
  277. package/dist/mcp-data/registry/tooltip.json +1 -1
  278. package/dist/mcp-data/registry/typing-indicator.json +1 -1
  279. package/dist/react/components.d.ts +1 -8
  280. package/dist/react/components.js +1 -8
  281. package/dist/react/ds-card-data-viz.d.ts +12 -0
  282. package/dist/react/ds-card-data-viz.js +12 -0
  283. package/dist/react/ds-menu.d.ts +1 -2
  284. package/dist/react/ds-menu.js +0 -1
  285. package/dist/react/ds-select.d.ts +2 -2
  286. package/dist/react/ds-shell-app.d.ts +24 -1
  287. package/dist/react/ds-shell-app.js +16 -1
  288. package/dist/types/components/AgentSourceList/AgentSourceList.d.ts +0 -1
  289. package/dist/types/components/BarNav/BarNav.d.ts +0 -2
  290. package/dist/types/components/BarNav/bar-nav-utils.d.ts +2 -4
  291. package/dist/types/components/ButtonFilled/ButtonFilled.d.ts +5 -11
  292. package/dist/types/components/ButtonUnfilled/ButtonUnfilled.d.ts +13 -10
  293. package/dist/types/components/CardDataViz/CardDataViz.d.ts +32 -0
  294. package/dist/types/components/CardDataViz/index.d.ts +2 -0
  295. package/dist/types/components/CardOverview/CardOverview.d.ts +17 -0
  296. package/dist/types/components/CardOverview/card-overview-controller.d.ts +16 -0
  297. package/dist/types/components/ChartBar/ChartBar.d.ts +12 -1
  298. package/dist/types/components/ChartBar/index.d.ts +2 -1
  299. package/dist/types/components/Menu/Menu.d.ts +0 -4
  300. package/dist/types/components/Menu/menu-sections.d.ts +4 -0
  301. package/dist/types/components/Menu/menu-types.d.ts +2 -11
  302. package/dist/types/components/MobileHeader/MobileHeader.d.ts +0 -5
  303. package/dist/types/components/MobileSectionSwitcher/MobileSectionSwitcher.d.ts +0 -2
  304. package/dist/types/components/PanelTools/PanelTools.d.ts +0 -4
  305. package/dist/types/components/PanelTools/index.d.ts +1 -1
  306. package/dist/types/components/PanelTools/panel-tools-types.d.ts +21 -7
  307. package/dist/types/components/PanelTools/panel-tools-utils.d.ts +1 -1
  308. package/dist/types/components/Select/Select.d.ts +12 -4
  309. package/dist/types/components/Select/index.d.ts +1 -1
  310. package/dist/types/components/ShellApp/ShellApp.d.ts +98 -0
  311. package/dist/types/components/ShellApp/shell-app-types.d.ts +92 -0
  312. package/dist/types/components/ShellPage/ShellPage.d.ts +5 -0
  313. package/dist/types/components/ShellTools/ShellTools.d.ts +2 -2
  314. package/dist/types/components.d.ts +210 -889
  315. package/dist/types/shell/index.d.ts +5 -13
  316. package/dist/types/shell/shell-responsive.d.ts +2 -1
  317. package/dist/types/utils/button-render.d.ts +18 -0
  318. package/dist/types/utils/button-story-foundation.d.ts +9 -0
  319. package/dist/types/utils/button-types.d.ts +11 -0
  320. package/dist/types/utils/form-association.d.ts +23 -0
  321. package/dist/types/utils/index.d.ts +4 -0
  322. package/dist/types/utils/required-validity.d.ts +1 -1
  323. package/dist/types/utils/safe-url.d.ts +12 -0
  324. package/dist/types/utils/select-controller.d.ts +1 -1
  325. package/package.json +18 -10
  326. package/dist/.build-stamp +0 -1
  327. package/dist/angular/ds-card-data-viz-bar.d.ts +0 -18
  328. package/dist/angular/ds-card-data-viz-bar.js +0 -42
  329. package/dist/angular/ds-card-data-viz-donut.d.ts +0 -18
  330. package/dist/angular/ds-card-data-viz-line.d.ts +0 -18
  331. package/dist/angular/ds-card-data-viz-line.js +0 -42
  332. package/dist/angular/ds-card-shell-data-viz.d.ts +0 -12
  333. package/dist/angular/ds-card-shell-data-viz.js +0 -38
  334. package/dist/angular/ds-chart-bar-stacked.d.ts +0 -12
  335. package/dist/angular/ds-chart-bar-stacked.js +0 -38
  336. package/dist/angular/ds-select-multi.d.ts +0 -28
  337. package/dist/angular/ds-select-multi.js +0 -49
  338. package/dist/angular/ds-shell-gradient-picker.d.ts +0 -16
  339. package/dist/angular/ds-shell-gradient-picker.js +0 -42
  340. package/dist/angular/ds-shell-gradient-swatch.d.ts +0 -16
  341. package/dist/angular/ds-shell-gradient-swatch.js +0 -42
  342. package/dist/components/ds-card-data-viz-bar.d.ts +0 -11
  343. package/dist/components/ds-card-data-viz-bar.js +0 -2
  344. package/dist/components/ds-card-data-viz-bar.js.map +0 -1
  345. package/dist/components/ds-card-data-viz-donut.d.ts +0 -11
  346. package/dist/components/ds-card-data-viz-donut.js +0 -2
  347. package/dist/components/ds-card-data-viz-donut.js.map +0 -1
  348. package/dist/components/ds-card-data-viz-line.d.ts +0 -11
  349. package/dist/components/ds-card-data-viz-line.js +0 -2
  350. package/dist/components/ds-card-data-viz-line.js.map +0 -1
  351. package/dist/components/ds-card-shell-data-viz.d.ts +0 -11
  352. package/dist/components/ds-card-shell-data-viz.js +0 -2
  353. package/dist/components/ds-card-shell-data-viz.js.map +0 -1
  354. package/dist/components/ds-chart-bar-stacked.d.ts +0 -11
  355. package/dist/components/ds-chart-bar-stacked.js +0 -2
  356. package/dist/components/ds-chart-bar-stacked.js.map +0 -1
  357. package/dist/components/ds-select-multi.js +0 -2
  358. package/dist/components/ds-select-multi.js.map +0 -1
  359. package/dist/components/ds-shell-gradient-picker.d.ts +0 -11
  360. package/dist/components/ds-shell-gradient-picker.js +0 -2
  361. package/dist/components/ds-shell-gradient-picker.js.map +0 -1
  362. package/dist/components/ds-shell-gradient-swatch.d.ts +0 -11
  363. package/dist/components/ds-shell-gradient-swatch.js +0 -2
  364. package/dist/components/ds-shell-gradient-swatch.js.map +0 -1
  365. package/dist/components/p-2foAUsDN.js +0 -2
  366. package/dist/components/p-2foAUsDN.js.map +0 -1
  367. package/dist/components/p-8GK7B7K4.js +0 -2
  368. package/dist/components/p-8GK7B7K4.js.map +0 -1
  369. package/dist/components/p-B5tMlca-.js +0 -2
  370. package/dist/components/p-B5tMlca-.js.map +0 -1
  371. package/dist/components/p-B88n0pO3.js +0 -2
  372. package/dist/components/p-B88n0pO3.js.map +0 -1
  373. package/dist/components/p-BBePKRHC.js +0 -2
  374. package/dist/components/p-BBePKRHC.js.map +0 -1
  375. package/dist/components/p-BOQnc-M4.js +0 -2
  376. package/dist/components/p-BOQnc-M4.js.map +0 -1
  377. package/dist/components/p-BgGP65Nn.js.map +0 -1
  378. package/dist/components/p-BrusnEYP.js +0 -2
  379. package/dist/components/p-BrusnEYP.js.map +0 -1
  380. package/dist/components/p-C61yJkfr.js +0 -2
  381. package/dist/components/p-C61yJkfr.js.map +0 -1
  382. package/dist/components/p-CChcuL04.js +0 -2
  383. package/dist/components/p-CCzG5xDD.js.map +0 -1
  384. package/dist/components/p-CGVXbXv9.js +0 -2
  385. package/dist/components/p-CGVXbXv9.js.map +0 -1
  386. package/dist/components/p-CH3w-P2H.js +0 -2
  387. package/dist/components/p-CH3w-P2H.js.map +0 -1
  388. package/dist/components/p-Cuqxh-Tq.js +0 -2
  389. package/dist/components/p-Cuqxh-Tq.js.map +0 -1
  390. package/dist/components/p-D1HFMTdC.js +0 -2
  391. package/dist/components/p-D1HFMTdC.js.map +0 -1
  392. package/dist/components/p-D2x17ei-.js +0 -2
  393. package/dist/components/p-D2x17ei-.js.map +0 -1
  394. package/dist/components/p-DCvA3Dc9.js +0 -2
  395. package/dist/components/p-DLZm_-sU.js +0 -2
  396. package/dist/components/p-DLZm_-sU.js.map +0 -1
  397. package/dist/components/p-DRnIuCiT.js +0 -2
  398. package/dist/components/p-DjKkSqrG.js +0 -2
  399. package/dist/components/p-DjKkSqrG.js.map +0 -1
  400. package/dist/components/p-DjbTFy2B.js.map +0 -1
  401. package/dist/components/p-DlscFn2m.js +0 -2
  402. package/dist/components/p-DlscFn2m.js.map +0 -1
  403. package/dist/components/p-DxkEC0hR.js +0 -2
  404. package/dist/components/p-DxkEC0hR.js.map +0 -1
  405. package/dist/components/p-Re2kPrXm.js +0 -2
  406. package/dist/components/p-Re2kPrXm.js.map +0 -1
  407. package/dist/components/p-XMZCaXs7.js +0 -2
  408. package/dist/components/p-XMZCaXs7.js.map +0 -1
  409. package/dist/components/p-dyUp3Adm.js +0 -2
  410. package/dist/components/p-dyUp3Adm.js.map +0 -1
  411. package/dist/components/p-nkYN0Bub.js +0 -2
  412. package/dist/components/p-nkYN0Bub.js.map +0 -1
  413. package/dist/framework/select-multi-value-accessor.d.ts +0 -9
  414. package/dist/framework/select-multi-value-accessor.js +0 -40
  415. package/dist/lib/shell/badge-gradient-ring.d.ts +0 -27
  416. package/dist/lib/shell/chrome-transition.d.ts +0 -32
  417. package/dist/lib/shell/shell-chrome-metrics.d.ts +0 -11
  418. package/dist/lib/shell/shell-gradient.d.ts +0 -41
  419. package/dist/lib/shell/shell-view-transition.d.ts +0 -23
  420. package/dist/mcp-data/registry/card-data-viz-bar.json +0 -213
  421. package/dist/mcp-data/registry/card-data-viz-donut.json +0 -214
  422. package/dist/mcp-data/registry/card-data-viz-line.json +0 -207
  423. package/dist/mcp-data/registry/card-shell-data-viz.json +0 -180
  424. package/dist/mcp-data/registry/chart-bar-stacked.json +0 -230
  425. package/dist/mcp-data/registry/select-multi.json +0 -758
  426. package/dist/mcp-data/registry/shell-gradient-picker.json +0 -195
  427. package/dist/mcp-data/registry/shell-gradient-swatch.json +0 -215
  428. package/dist/react/ds-card-data-viz-bar.d.ts +0 -12
  429. package/dist/react/ds-card-data-viz-bar.js +0 -12
  430. package/dist/react/ds-card-data-viz-donut.d.ts +0 -12
  431. package/dist/react/ds-card-data-viz-donut.js +0 -12
  432. package/dist/react/ds-card-data-viz-line.d.ts +0 -12
  433. package/dist/react/ds-card-data-viz-line.js +0 -12
  434. package/dist/react/ds-card-shell-data-viz.d.ts +0 -9
  435. package/dist/react/ds-card-shell-data-viz.js +0 -12
  436. package/dist/react/ds-chart-bar-stacked.d.ts +0 -9
  437. package/dist/react/ds-chart-bar-stacked.js +0 -12
  438. package/dist/react/ds-select-multi.d.ts +0 -14
  439. package/dist/react/ds-select-multi.js +0 -16
  440. package/dist/react/ds-shell-gradient-picker.d.ts +0 -12
  441. package/dist/react/ds-shell-gradient-picker.js +0 -12
  442. package/dist/react/ds-shell-gradient-swatch.d.ts +0 -12
  443. package/dist/react/ds-shell-gradient-swatch.js +0 -12
  444. package/dist/types/components/CardDataVizBar/CardDataVizBar.d.ts +0 -24
  445. package/dist/types/components/CardDataVizBar/index.d.ts +0 -2
  446. package/dist/types/components/CardDataVizDonut/CardDataVizDonut.d.ts +0 -28
  447. package/dist/types/components/CardDataVizDonut/index.d.ts +0 -2
  448. package/dist/types/components/CardDataVizLine/CardDataVizLine.d.ts +0 -24
  449. package/dist/types/components/CardDataVizLine/index.d.ts +0 -2
  450. package/dist/types/components/CardShellDataViz/CardShellDataViz.d.ts +0 -13
  451. package/dist/types/components/CardShellDataViz/index.d.ts +0 -2
  452. package/dist/types/components/ChartBarStacked/ChartBarStacked.d.ts +0 -26
  453. package/dist/types/components/ChartBarStacked/index.d.ts +0 -3
  454. package/dist/types/components/SelectMulti/SelectMulti.d.ts +0 -121
  455. package/dist/types/components/SelectMulti/index.d.ts +0 -2
  456. package/dist/types/components/ShellGradientPicker/ShellGradientPicker.d.ts +0 -12
  457. package/dist/types/components/ShellGradientSwatch/ShellGradientSwatch.d.ts +0 -15
  458. package/dist/types/components/ShellGradientSwatch/shell-gradient-swatch-types.d.ts +0 -4
  459. /package/dist/components/{p-CgEYdMee.js.map → p-6qXDqCj_.js.map} +0 -0
  460. /package/dist/components/{p-Cr3tEx7o.js.map → p-Ay1AX7Ql.js.map} +0 -0
  461. /package/dist/components/{p-BOCfICln.js.map → p-B1XW4VSn.js.map} +0 -0
  462. /package/dist/components/{p-BKOlvCGS.js.map → p-BUZXuod2.js.map} +0 -0
  463. /package/dist/components/{p-BO5aqZcf.js.map → p-BcTYhmku.js.map} +0 -0
  464. /package/dist/components/{p-BDKtu6Wb.js.map → p-BroVnDzE.js.map} +0 -0
  465. /package/dist/components/{p-CIiBpjCn.js.map → p-BsoqsbBh.js.map} +0 -0
  466. /package/dist/components/{p-C8HU4W8q.js.map → p-CBazaRlE.js.map} +0 -0
  467. /package/dist/components/{p-BhV5e6vF.js.map → p-CHuh71-U.js.map} +0 -0
  468. /package/dist/components/{p-DRnIuCiT.js.map → p-CreGah0j.js.map} +0 -0
  469. /package/dist/components/{p-Cuih680v.js.map → p-Df17mJqI.js.map} +0 -0
  470. /package/dist/components/{p-YR1XeuZf.js.map → p-ohsLFap_.js.map} +0 -0
@@ -1,2 +1,2 @@
1
- import{p as e,H as s,c as t,h as l,a as i,t as n}from"./index.js";import{D as a,b as o,n as h,a as p}from"./p-D1HFMTdC.js";import{e as r,c as d,r as c,a as f,b}from"./p-D2x17ei-.js";import{a as u}from"./p-BrusnEYP.js";const m="--ds-shell-gradient-image";const v="--ds-shell-gradient-size";const _="--ds-shell-gradient-position-panel";const g="--ds-shell-gradient-position-bar";const y="--ds-shell-gradient-opacity";function w(e=a){return o(e)}function x(e){const s=typeof globalThis.window!=="undefined"?globalThis.window:undefined;if(!s)return{width:0,height:0};const t=s.visualViewport;return{width:Math.round(t?.width??s.innerWidth),height:Math.round(t?.height??s.innerHeight)}}function k(e){return`${Math.round(e.width)}px ${Math.round(e.height)}px`}function z(){return"0 0"}function S(e){return`${-Math.round(e)}px 0`}const P={k:"search",a:"agents",s:"stacks",m:"messages",n:"activity","/":"help"};function C(e){return!e.metaKey&&!e.ctrlKey&&!e.altKey&&!e.shiftKey}function M(e){if(!e||typeof e!=="object")return false;if(!("closest"in e)||typeof e.closest!=="function")return false;const s=e;const t=s.closest('input, textarea, select, [contenteditable=""], [contenteditable="true"], [contenteditable="plaintext-only"]');if(t)return true;const l=s.getAttribute("role");if(l==="textbox"||l==="combobox"||l==="searchbox")return true;return Boolean(s.isContentEditable)}function D(e){if(e.key==="["||e.code==="BracketLeft")return"[";if(e.key==="]"||e.code==="BracketRight")return"]";return e.key.length===1?e.key.toLowerCase():e.key.toLowerCase()}function L(e){if(!C(e))return null;const s=D(e);if(s==="[")return"toggle-panel-nav";if(s==="]")return"close-panel-tools";const t=P[s];if(t)return`open-tool:${t}`;return null}function j(e,s){if(typeof document==="undefined")return 0;const t=document.createElement("div");t.style.cssText="position:absolute;visibility:hidden;pointer-events:none;height:0;width:var("+s+");";e.appendChild(t);const l=t.getBoundingClientRect().width;e.removeChild(t);return l}function O(e){return{expandedPx:j(e,"--_nav-width"),collapsedPx:j(e,"--_nav-width-collapsed")}}function T(e,s){if(s?.classList.contains("panel-nav--collapsed"))return true;const t=e?.collapsed;return t===true}function V(e,s){return s?e.collapsedPx:e.expandedPx}const $=()=>`.sc-ds-shell-app-h{display:block;height:100%;min-height:0;box-sizing:border-box;overflow:hidden;overscroll-behavior:none;--ds-shell-panel-tools-width:var(--dimension-panel-width-xs)}.shell-app.sc-ds-shell-app{display:flex;flex-direction:column;height:100%;min-height:0;box-sizing:border-box;overflow:hidden;overscroll-behavior:none;font-family:var(--typography-font-family, system-ui)}.sc-ds-shell-app-h{--_shell-chrome-bg:var(--color-background-secondary)}.shell-app__row.sc-ds-shell-app{display:flex;flex:1 1 auto;min-height:0;height:100%;position:relative}.shell-app__chrome.sc-ds-shell-app{position:absolute;inset:0;pointer-events:none;z-index:0;background-color:var(--_shell-chrome-bg)}.shell-app--gradient.sc-ds-shell-app-h .shell-app__chrome.sc-ds-shell-app::before{content:'';position:absolute;inset:0;pointer-events:none;background-position:0 0;background-attachment:fixed;z-index:1;opacity:var(--ds-shell-gradient-opacity, 1);background-image:var(--ds-shell-gradient-image, none);background-size:var(--ds-shell-gradient-size, auto);background-repeat:no-repeat}.shell-app__panel.sc-ds-shell-app{flex:0 0 auto;min-height:0;height:100%;position:relative;z-index:2}.shell-app__panel.sc-ds-shell-app-s>ds-panel-nav,.shell-app__panel .sc-ds-shell-app-s>ds-panel-nav{display:block;height:100%}.shell-app__main.sc-ds-shell-app{flex:1 1 auto;min-width:0;min-height:0;display:grid;grid-template-columns:minmax(0, 1fr) auto;grid-template-rows:auto minmax(0, 1fr);grid-template-areas:'bar tools' 'content tools';position:relative;z-index:1}.shell-app__mobile-sheet-nav.sc-ds-shell-app,.shell-app__mobile-bar-nav.sc-ds-shell-app{display:none}.shell-app__bar.sc-ds-shell-app{grid-area:bar;flex:0 0 auto;min-width:0}.shell-app__bar.sc-ds-shell-app-s>ds-bar-nav,.shell-app__bar .sc-ds-shell-app-s>ds-bar-nav{display:block}.shell-app__content.sc-ds-shell-app{grid-area:content;flex:1 1 auto;min-width:0;min-height:0;overflow:auto;overscroll-behavior:none;contain:layout}.shell-app__content.sc-ds-shell-app{position:relative;z-index:1;background-color:var(--color-background-primary)}.shell-app__tools.sc-ds-shell-app{grid-area:tools;flex:0 0 auto;min-width:0;min-height:0;height:100%;display:flex;position:relative;z-index:0;overflow:hidden}.shell-app__tools.sc-ds-shell-app-s>ds-panel-tools,.shell-app__tools .sc-ds-shell-app-s>ds-panel-tools{display:block;height:100%;min-height:0}.shell-app__tools.sc-ds-shell-app-s>ds-shell-tools,.shell-app__tools .sc-ds-shell-app-s>ds-shell-tools{display:block;height:100%;min-height:0}.shell-app--tools-fullscreen.sc-ds-shell-app-h .shell-app__panel.sc-ds-shell-app,.shell-app--tools-fullscreen.sc-ds-shell-app-h .shell-app__bar.sc-ds-shell-app,.shell-app--tools-fullscreen.sc-ds-shell-app-h .shell-app__content.sc-ds-shell-app{visibility:hidden}.shell-app--mobile.sc-ds-shell-app-h{--_shell-chrome-bg:var(--color-background-primary)}.shell-app--mobile.sc-ds-shell-app-h .shell-app__chrome.sc-ds-shell-app,.shell-app--mobile.sc-ds-shell-app-h .shell-app__panel.sc-ds-shell-app,.shell-app--mobile.sc-ds-shell-app-h .shell-app__bar.sc-ds-shell-app{display:none}.shell-app--mobile.sc-ds-shell-app-h .shell-app__main.sc-ds-shell-app{width:100%;padding-block-start:env(safe-area-inset-top);box-sizing:border-box;grid-template-columns:minmax(0, 1fr);grid-template-rows:minmax(0, 1fr) auto;grid-template-areas:'stage' 'mobile-bar-nav';background:var(--color-background-primary)}.shell-app--mobile.sc-ds-shell-app-h .shell-app__content.sc-ds-shell-app,.shell-app--mobile.sc-ds-shell-app-h .shell-app__tools.sc-ds-shell-app,.shell-app--mobile.sc-ds-shell-app-h .shell-app__mobile-sheet-nav.sc-ds-shell-app{grid-area:stage;min-width:0;min-height:0;height:100%;position:relative}.shell-app--mobile.sc-ds-shell-app-h .shell-app__content.sc-ds-shell-app{z-index:1;overflow:auto}.shell-app--mobile.sc-ds-shell-app-h .shell-app__tools.sc-ds-shell-app{z-index:2;width:100%;overflow:hidden;background:var(--color-background-primary)}.shell-app--mobile.sc-ds-shell-app-h .shell-app__mobile-sheet-nav.sc-ds-shell-app{display:block;z-index:3;overflow:hidden;background:var(--color-background-primary)}.shell-app--mobile.sc-ds-shell-app-h .shell-app__mobile-bar-nav.sc-ds-shell-app{grid-area:mobile-bar-nav;display:block;min-width:0;position:relative;z-index:4}.shell-app--mobile.sc-ds-shell-app-h .shell-app__tools[hidden].sc-ds-shell-app,.shell-app--mobile.sc-ds-shell-app-h .shell-app__mobile-sheet-nav[hidden].sc-ds-shell-app,.shell-app--mobile.sc-ds-shell-app-h .shell-app__mobile-bar-nav[hidden].sc-ds-shell-app{display:none}.shell-app--mobile-tool-active.sc-ds-shell-app-h .shell-app__content.sc-ds-shell-app,.shell-app--mobile-sheet-nav-open.sc-ds-shell-app-h .shell-app__content.sc-ds-shell-app,.shell-app--mobile-sheet-nav-open.sc-ds-shell-app-h .shell-app__tools.sc-ds-shell-app{visibility:hidden}`;const E=e(class e extends s{constructor(e){super();if(e!==false){this.__registerHost()}this.dsResponsiveModeChange=t(this,"dsResponsiveModeChange");this.navStyle="dashboard";this.gradientPreset=a;this.shortcutsEnabled=true;this.mobileDestination="area";this.mobileSheetNavOpen=false;this.toolsFullscreen=false;this.resolvedMode="desktop";this.resizeObserver=null;this.hasLoaded=false;this.panelNavTransition=new r;this.chromeSyncCoalescer=d((()=>this.syncChrome()));this.panelWidthTokens={expandedPx:0,collapsedPx:0};this.cachedViewportWidth=0;this.cachedViewportHeight=0;this.onWindowResize=()=>{this.updateResponsiveMode();if(this.panelNavTransition.isActive)return;this.scheduleChromeSync()};this.onVisualViewportChange=()=>{if(this.panelNavTransition.isActive)return;this.scheduleChromeSync()};this.onChromeTransitionStart=e=>{if(c(e)!=="panel-nav")return;this.panelNavTransition.enter();const s=x();this.cachedViewportWidth=s.width;this.cachedViewportHeight=s.height;this.syncChrome()};this.onChromeTransitionEnd=e=>{if(c(e)!=="panel-nav")return;this.panelNavTransition.exit();if(!this.panelNavTransition.isActive){this.scheduleChromeSync()}}}componentWillLoad(){if(typeof window!=="undefined"){this.resolvedMode=u(window.innerWidth)}}componentDidLoad(){this.hasLoaded=true;this.syncSlottedNavStyle();this.syncSlottedMobileState();this.connectMetricsObserver();this.connectViewportListeners();this.el.addEventListener(f,this.onChromeTransitionStart);this.el.addEventListener(b,this.onChromeTransitionEnd);requestAnimationFrame((()=>{this.cachePanelWidthTokens();this.scheduleChromeSync()}));const e=this.el.querySelector("ds-shell-tools, ds-panel-tools");this.toolsFullscreen=e?.getAttribute("presentation")==="fullscreen"}handleToolsPresentation(e){this.toolsFullscreen=e.detail?.presentation==="fullscreen"}disconnectedCallback(){this.resizeObserver?.disconnect();this.resizeObserver=null;this.disconnectViewportListeners();this.chromeSyncCoalescer.cancel();this.el.removeEventListener(f,this.onChromeTransitionStart);this.el.removeEventListener(b,this.onChromeTransitionEnd)}onShellPropsChange(){this.syncSlottedNavStyle();this.scheduleChromeSync()}onMobileStateChange(e,t){this.syncSlottedMobileState();if(t===true&&!this.mobileSheetNavOpen&&this.resolvedMode==="mobile"){requestAnimationFrame((()=>{const e=this.el.querySelector("ds-mobile-bar-nav");const t=document.activeElement;if(t instanceof s&&e?.contains(t))return;void e?.focusDestination?.("sheet-nav")}))}}updateResponsiveMode(){if(typeof window==="undefined")return;const e=u(window.innerWidth);if(e===this.resolvedMode)return;this.resolvedMode=e;this.syncSlottedMobileState();this.scheduleChromeSync();if(this.hasLoaded)this.dsResponsiveModeChange.emit({mode:e})}scheduleChromeSync(){this.chromeSyncCoalescer.schedule()}syncSlottedNavStyle(){const e=this.el.querySelector("ds-panel-nav");const s=this.el.querySelector("ds-bar-nav");if(e){e.setAttribute("nav-style",this.navStyle);e.navStyle=this.navStyle}if(s){s.setAttribute("nav-style",this.navStyle);s.navStyle=this.navStyle}}syncSlottedMobileState(){const e=this.el.querySelector("ds-shell-tools");const s=this.el.querySelector("ds-mobile-bar-nav");const t=this.el.querySelector("ds-mobile-sheet-nav");if(e){e.setAttribute("responsive-mode",this.resolvedMode);e.responsiveMode=this.resolvedMode}if(s){s.activeDestination=this.mobileDestination;s.sheetNavExpanded=this.mobileSheetNavOpen}if(t){t.open=this.mobileSheetNavOpen}}connectMetricsObserver(){this.resizeObserver=new ResizeObserver((()=>{if(this.panelNavTransition.isActive)return;this.scheduleChromeSync()}));this.resizeObserver.observe(this.el);const e=this.el.querySelector(".shell-app__panel");if(e)this.resizeObserver.observe(e)}connectViewportListeners(){if(typeof window==="undefined")return;window.addEventListener("resize",this.onWindowResize,{passive:true});const e=window.visualViewport;if(e){e.addEventListener("resize",this.onVisualViewportChange,{passive:true});e.addEventListener("scroll",this.onVisualViewportChange,{passive:true})}}disconnectViewportListeners(){if(typeof window==="undefined")return;window.removeEventListener("resize",this.onWindowResize);const e=window.visualViewport;if(e){e.removeEventListener("resize",this.onVisualViewportChange);e.removeEventListener("scroll",this.onVisualViewportChange)}}cachePanelWidthTokens(){const e=this.el.querySelector("ds-panel-nav .panel-nav");if(!e)return;this.panelWidthTokens=O(e)}applyGradientVars(e,s){const t=e.style;for(const[e,l]of Object.entries(s)){if(l===null)t.removeProperty(e);else t.setProperty(e,l)}}clearGradientPaintVars(e){const s=[m,v,y];for(const t of e){for(const e of s)t.style.removeProperty(e)}}syncChromeLayoutVars(e,s,t,l){if(e){e.style.setProperty(_,t)}if(s){s.style.setProperty(g,l)}}resolvePanelWidthPx(e){const s=e?.querySelector(".panel-nav");if(this.panelNavTransition.isActive&&this.panelWidthTokens.expandedPx>0){const t=T(e,s);return V(this.panelWidthTokens,t)}const t=this.el.querySelector(".shell-app__panel");const l=t?.getBoundingClientRect().width??0;if(l>0)return l;if(this.panelWidthTokens.expandedPx>0){const t=T(e,s);return V(this.panelWidthTokens,t)}return 0}resolveViewportDimensions(){if(this.panelNavTransition.isActive&&this.cachedViewportWidth>0){return{width:this.cachedViewportWidth,height:this.cachedViewportHeight}}return x()}chromeLayerActive(){return this.resolvedMode!=="mobile"&&h(this.gradientPreset)!=="none"}handleWindowKeyDown(e){if(!this.shortcutsEnabled)return;if(M(e.target))return;const s=L(e);if(!s)return;e.preventDefault();const t=this.el.querySelector("ds-panel-nav");const l=this.el.querySelector("ds-shell-tools, ds-panel-tools");if(s==="toggle-panel-nav"){void t?.toggleCollapsed();return}if(s==="close-panel-tools"){void l?.closeDrawer?.();return}if(s.startsWith("open-tool:")&&l){const e=s.slice("open-tool:".length);void l.activateTool?.(e)}}syncChrome(){const e=this.el.querySelector("ds-panel-nav");const s=this.el.querySelector("ds-bar-nav");const t=[this.el,e,s].filter((e=>e!==null));const l=()=>{if(e)e.style.removeProperty(_);if(s)s.style.removeProperty(g)};const i=h(this.gradientPreset);if(i==="none"||this.resolvedMode==="mobile"){this.clearGradientPaintVars(t);l();return}const n=this.resolveViewportDimensions();const a=this.resolvePanelWidthPx(e);const o=z();const r=S(a);this.syncChromeLayoutVars(e,s,o,r);const d=w(i);const c=k({width:n.width,height:n.height});const f=p(i);for(const e of t){if(e===this.el){this.applyGradientVars(e,{[m]:d,[v]:c,[_]:o,[g]:r,[y]:f});continue}const s=e.tagName.toLowerCase()==="ds-bar-nav";this.applyGradientVars(e,{[m]:d,[v]:c,[y]:f,[_]:s?null:o,[g]:s?r:null})}}render(){const e=this.chromeLayerActive();const s=this.resolvedMode==="mobile";const t=s&&this.mobileDestination!=="area";const n=s&&(t||this.mobileSheetNavOpen);const a=!s&&this.toolsFullscreen;const o={"shell-app":true,"shell-app--gradient":e,[`shell-app--${this.navStyle}`]:true,[`shell-app--${this.resolvedMode}`]:true,"shell-app--tools-fullscreen":a,"shell-app--mobile-tool-active":t,"shell-app--mobile-sheet-nav-open":s&&this.mobileSheetNavOpen};return l(i,{key:"dfccd0b7adb0d90fc3be812e4aead2fdd52d5abe",class:o,"responsive-mode":this.resolvedMode},l("div",{key:"e0eb3e61f53f06ee4a949c80a3cda880e295d83d",class:"shell-app__row"},l("div",{key:"789e837db16aba82dc42ca6727dbee919fabd2cf",class:"shell-app__chrome","aria-hidden":"true"}),l("div",{key:"57c3d81ed9e386eb8b4cf5d36329e4e15747a856",class:"shell-app__panel","aria-hidden":a?"true":undefined,inert:a?true:undefined},l("slot",{key:"afb663a54e0ba4b041ef3f343be8ebdfb8054c0e",name:"panel"})),l("div",{key:"cc30330168ba12b9a3ba00ccf2bde23c30f7f396",class:"shell-app__main"},l("div",{key:"9cce7d4ae71c81d850dcabf2ef8427feed8b6f33",class:"shell-app__bar","aria-hidden":a?"true":undefined,inert:a?true:undefined},l("slot",{key:"e78006f1b2f4cab14d0f0c585e804672047b8682",name:"bar"})),l("div",{key:"a45b4fdea6fece941d934500d9cb1d9eb5e0b9b5",class:"shell-app__tools","aria-hidden":s&&(!t||this.mobileSheetNavOpen)?"true":undefined,inert:s&&(!t||this.mobileSheetNavOpen)?true:undefined,hidden:s&&!t},l("slot",{key:"268e11cff999127fa0f60db6f2a85126fe6235ce",name:"tools"})),l("div",{key:"6641b922340e328c513548dc9818776e6ed95089",class:"shell-app__content","aria-hidden":a||n?"true":undefined,inert:a||n?true:undefined},l("slot",{key:"c7f3219e71e413e262c67352c93a8ef04b0e5afa"})),l("div",{key:"84f01804fd07751188776abb8e7ab131c545921b",class:"shell-app__mobile-sheet-nav",hidden:!s||!this.mobileSheetNavOpen,"aria-hidden":s&&this.mobileSheetNavOpen?undefined:"true",inert:s&&this.mobileSheetNavOpen?undefined:true},l("slot",{key:"42dc121812e65a0e846b64aaa46e34776059c2ed",name:"mobile-sheet-nav"})),l("div",{key:"ad42e4e13c59e65d62f4d9be234edc3dab68b5f1",class:"shell-app__mobile-bar-nav",hidden:!s},l("slot",{key:"4f77df72c74422c2d7d669eb8141d3e69650dae8",name:"mobile-bar-nav"})))))}get el(){return this}static get watchers(){return{navStyle:[{onShellPropsChange:0}],gradientPreset:[{onShellPropsChange:0}],mobileDestination:[{onMobileStateChange:0}],mobileSheetNavOpen:[{onMobileStateChange:0}]}}static get style(){return $()}},[262,"ds-shell-app",{navStyle:[513,"nav-style"],gradientPreset:[513,"gradient-preset"],shortcutsEnabled:[4,"shortcuts-enabled"],mobileDestination:[1,"mobile-destination"],mobileSheetNavOpen:[4,"mobile-sheet-nav-open"],toolsFullscreen:[32],resolvedMode:[32]},[[0,"dsPresentationChange","handleToolsPresentation"],[10,"keydown","handleWindowKeyDown"]],{navStyle:[{onShellPropsChange:0}],gradientPreset:[{onShellPropsChange:0}],mobileDestination:[{onMobileStateChange:0}],mobileSheetNavOpen:[{onMobileStateChange:0}]}]);function W(){if(typeof customElements==="undefined"){return}const e=["ds-shell-app"];e.forEach((e=>{switch(e){case"ds-shell-app":if(!customElements.get(n(e))){customElements.define(n(e),E)}break}}))}W();const B=E;const F=W;export{B as DsShellApp,F as defineCustomElement};
1
+ import{p as s,H as e,c as t,h as i,a,t as n}from"./index.js";import{c as o,d as l}from"./p-bxoryr-3.js";import{C as h,c as r,r as d,a as p,b as c,d as u}from"./p-Cvxm1OZB.js";import{i as b,a as m,r as f,b as g,S as v,c as _}from"./p-BnQXAbif.js";import{d as k}from"./p-yhj1lIPx.js";import{d as y}from"./p-BsoqsbBh.js";import{d as w}from"./p-CH9yArA1.js";import{d as x}from"./p-DbQr7Kwr.js";import{d as C}from"./p-BGUK8-Qm.js";import{d as S}from"./p-eAfNzlMa.js";import{d as D}from"./p-BAfG3M8z.js";import{d as M}from"./p-Ca-I2UnB.js";import{d as A}from"./p-BBFEhNzM.js";import{d as L}from"./p-BbMJTilO.js";import{d as B}from"./p-CJDTh9Tg.js";import{d as z}from"./p-C-aCzwhA.js";import{d as E}from"./p-gZni7A2L.js";import{d as P}from"./p-CJbLY1tu.js";import{d as T}from"./p-B1XW4VSn.js";import{d as j}from"./p-DEaszb15.js";import{d as N}from"./p-C-kzknkR.js";import{d as I}from"./p-BO4cj3iX.js";import{d as O}from"./p-BYWkksDO.js";import{d as $}from"./p-CHpNyAo1.js";import{d as F}from"./p-Ay1AX7Ql.js";import{d as G}from"./p-ohsLFap_.js";const H=["none","cool","neutral","warm","fresh"];const U="neutral";const V={cool:{opacity:.1,stops:[{color:"var(--color-background-transparent)",position:0},{color:"var(--color-color-intent-blue-strong-background)",position:100}]},neutral:{opacity:.1,stops:[{color:"var(--color-background-transparent)",position:0},{color:"var(--color-color-intent-grey-strong-background)",position:100}]},warm:{opacity:.1,stops:[{color:"var(--color-background-transparent)",position:0},{color:"var(--color-color-intent-yellow-strong-background)",position:100}]},fresh:{opacity:.4,stops:[{color:"var(--color-color-intent-cyan-faint-background)",position:0},{color:"var(--color-background-transparent)",position:47},{color:"var(--color-background-transparent)",position:58},{color:"var(--color-color-intent-red-faint-background)",position:83},{color:"var(--color-color-intent-pink-faint-background)",position:100}]}};const W="100% 100% at 0% 0%";function K(s){const e=X(s);return e==="none"?null:V[e]}function R(s){return String(K(s)?.opacity??0)}function Q(s){return H.includes(s)}function X(s){return s!=null&&Q(s)?s:U}function q(s){const e=X(s);if(e==="none")return"none";return J(V[e].stops)}function J(s){const e=s.map((s=>`${s.color} ${s.position}%`)).join(", ");return`radial-gradient(${W}, ${e})`}const Y="--ds-shell-gradient-image";const Z="--ds-shell-gradient-size";const ss="--ds-shell-gradient-position-panel";const es="--ds-shell-gradient-position-bar";const ts="--ds-shell-gradient-opacity";function is(s=U){return q(s)}function as(s){const e=typeof globalThis.window!=="undefined"?globalThis.window:undefined;if(!e)return{width:0,height:0};const t=e.visualViewport;return{width:Math.round(t?.width??e.innerWidth),height:Math.round(t?.height??e.innerHeight)}}function ns(s){return`${Math.round(s.width)}px ${Math.round(s.height)}px`}function os(){return"0 0"}function ls(s){return`${-Math.round(s)}px 0`}const hs={k:"search",a:"agents",s:"stacks",m:"messages",n:"activity","/":"help"};function rs(s){return!s.metaKey&&!s.ctrlKey&&!s.altKey&&!s.shiftKey}function ds(s){if(!s||typeof s!=="object")return false;if(!("closest"in s)||typeof s.closest!=="function")return false;const e=s;const t=e.closest('input, textarea, select, [contenteditable=""], [contenteditable="true"], [contenteditable="plaintext-only"]');if(t)return true;const i=e.getAttribute("role");if(i==="textbox"||i==="combobox"||i==="searchbox")return true;return Boolean(e.isContentEditable)}function ps(s){if(s.key==="["||s.code==="BracketLeft")return"[";if(s.key==="]"||s.code==="BracketRight")return"]";return s.key.length===1?s.key.toLowerCase():s.key.toLowerCase()}function cs(s){if(!rs(s))return null;const e=ps(s);if(e==="[")return"toggle-panel-nav";if(e==="]")return"close-panel-tools";const t=hs[e];if(t)return`open-tool:${t}`;return null}function us(s,e){if(typeof document==="undefined")return 0;const t=document.createElement("div");t.style.cssText="position:absolute;visibility:hidden;pointer-events:none;height:0;width:var("+e+");";s.appendChild(t);const i=t.getBoundingClientRect().width;s.removeChild(t);return i}function bs(s){return{expandedPx:us(s,"--_nav-width"),collapsedPx:us(s,"--_nav-width-collapsed")}}function ms(s,e){if(e?.classList.contains("panel-nav--collapsed"))return true;const t=s?.collapsed;return t===true}function fs(s,e){return e?s.collapsedPx:s.expandedPx}const gs=()=>`.sc-ds-shell-app-h{display:block;height:100%;min-height:0;box-sizing:border-box;overflow:hidden;overscroll-behavior:none;--ds-shell-panel-tools-width:var(--dimension-panel-width-xs)}.shell-app.sc-ds-shell-app{display:flex;flex-direction:column;height:100%;min-height:0;box-sizing:border-box;overflow:hidden;overscroll-behavior:none;font-family:var(--typography-font-family, system-ui)}.sc-ds-shell-app-h{--_shell-chrome-bg:var(--color-background-secondary)}.shell-app__row.sc-ds-shell-app{display:flex;flex:1 1 auto;min-height:0;height:100%;position:relative}.shell-app__chrome.sc-ds-shell-app{position:absolute;inset:0;pointer-events:none;z-index:0;background-color:var(--_shell-chrome-bg)}.shell-app--gradient.sc-ds-shell-app-h .shell-app__chrome.sc-ds-shell-app::before{content:'';position:absolute;inset:0;pointer-events:none;background-position:0 0;background-attachment:fixed;z-index:1;opacity:var(--ds-shell-gradient-opacity, 1);background-image:var(--ds-shell-gradient-image, none);background-size:var(--ds-shell-gradient-size, auto);background-repeat:no-repeat}.shell-app__panel.sc-ds-shell-app{flex:0 0 auto;min-height:0;height:100%;position:relative;z-index:2}.shell-app__panel.sc-ds-shell-app-s>ds-panel-nav,.shell-app__panel .sc-ds-shell-app-s>ds-panel-nav{display:block;height:100%}.shell-app__panel.sc-ds-shell-app>ds-panel-nav.sc-ds-shell-app{display:block;height:100%}.shell-app__main.sc-ds-shell-app{flex:1 1 auto;min-width:0;min-height:0;display:grid;grid-template-columns:minmax(0, 1fr) auto;grid-template-rows:auto minmax(0, 1fr);grid-template-areas:'bar tools' 'content tools';position:relative;z-index:1}.shell-app__mobile-sheet-nav.sc-ds-shell-app,.shell-app__mobile-bar-nav.sc-ds-shell-app{display:none}.shell-app__bar.sc-ds-shell-app{grid-area:bar;flex:0 0 auto;min-width:0}.shell-app__bar.sc-ds-shell-app-s>ds-bar-nav,.shell-app__bar .sc-ds-shell-app-s>ds-bar-nav{display:block}.shell-app__bar.sc-ds-shell-app>ds-bar-nav.sc-ds-shell-app{display:block}.shell-app__content.sc-ds-shell-app{grid-area:content;flex:1 1 auto;min-width:0;min-height:0;overflow:auto;overscroll-behavior:none;contain:layout}.shell-app__content.sc-ds-shell-app{position:relative;z-index:1;background-color:var(--color-background-primary)}.shell-app__tools.sc-ds-shell-app{grid-area:tools;flex:0 0 auto;min-width:0;min-height:0;height:100%;display:flex;position:relative;z-index:0;overflow:hidden}.shell-app__tools.sc-ds-shell-app-s>ds-panel-tools,.shell-app__tools .sc-ds-shell-app-s>ds-panel-tools{display:block;height:100%;min-height:0}.shell-app__tools.sc-ds-shell-app-s>ds-shell-tools,.shell-app__tools .sc-ds-shell-app-s>ds-shell-tools{display:block;height:100%;min-height:0}.shell-app__tools.sc-ds-shell-app>ds-shell-tools.sc-ds-shell-app{display:block;height:100%;min-height:0}.shell-app__content.sc-ds-shell-app>ds-shell-page.sc-ds-shell-app{display:block;min-height:100%}.shell-app--tools-fullscreen.sc-ds-shell-app-h .shell-app__panel.sc-ds-shell-app,.shell-app--tools-fullscreen.sc-ds-shell-app-h .shell-app__bar.sc-ds-shell-app,.shell-app--tools-fullscreen.sc-ds-shell-app-h .shell-app__content.sc-ds-shell-app{visibility:hidden}.shell-app--mobile.sc-ds-shell-app-h{--_shell-chrome-bg:var(--color-background-primary)}.shell-app--mobile.sc-ds-shell-app-h .shell-app__chrome.sc-ds-shell-app,.shell-app--mobile.sc-ds-shell-app-h .shell-app__panel.sc-ds-shell-app,.shell-app--mobile.sc-ds-shell-app-h .shell-app__bar.sc-ds-shell-app{display:none}.shell-app--mobile.sc-ds-shell-app-h .shell-app__main.sc-ds-shell-app{width:100%;padding-block-start:env(safe-area-inset-top);box-sizing:border-box;grid-template-columns:minmax(0, 1fr);grid-template-rows:minmax(0, 1fr) auto;grid-template-areas:'stage' 'mobile-bar-nav';background:var(--color-background-primary)}.shell-app--mobile.sc-ds-shell-app-h .shell-app__content.sc-ds-shell-app,.shell-app--mobile.sc-ds-shell-app-h .shell-app__tools.sc-ds-shell-app,.shell-app--mobile.sc-ds-shell-app-h .shell-app__mobile-sheet-nav.sc-ds-shell-app{grid-area:stage;min-width:0;min-height:0;height:100%;position:relative}.shell-app--mobile.sc-ds-shell-app-h .shell-app__content.sc-ds-shell-app{z-index:1;overflow:auto}.shell-app--mobile.sc-ds-shell-app-h .shell-app__tools.sc-ds-shell-app{z-index:2;width:100%;overflow:hidden;background:var(--color-background-primary)}.shell-app--mobile.sc-ds-shell-app-h .shell-app__mobile-sheet-nav.sc-ds-shell-app{display:block;z-index:3;overflow:hidden;background:var(--color-background-primary)}.shell-app--mobile.sc-ds-shell-app-h .shell-app__mobile-bar-nav.sc-ds-shell-app{grid-area:mobile-bar-nav;display:block;min-width:0;position:relative;z-index:4}.shell-app--mobile.sc-ds-shell-app-h .shell-app__tools[hidden].sc-ds-shell-app,.shell-app--mobile.sc-ds-shell-app-h .shell-app__mobile-sheet-nav[hidden].sc-ds-shell-app,.shell-app--mobile.sc-ds-shell-app-h .shell-app__mobile-bar-nav[hidden].sc-ds-shell-app{display:none}.shell-app--mobile-tool-active.sc-ds-shell-app-h .shell-app__content.sc-ds-shell-app,.shell-app--mobile-sheet-nav-open.sc-ds-shell-app-h .shell-app__content.sc-ds-shell-app,.shell-app--mobile-sheet-nav-open.sc-ds-shell-app-h .shell-app__tools.sc-ds-shell-app{visibility:hidden}`;const vs=s(class s extends e{constructor(s){super();if(s!==false){this.__registerHost()}this.dsResponsiveModeChange=t(this,"dsResponsiveModeChange");this.dsNavSelect=t(this,"dsNavSelect");this.dsTabChange=t(this,"dsTabChange");this.dsSubsectionChange=t(this,"dsSubsectionChange");this.dsPageBack=t(this,"dsPageBack");this.dsBreadcrumbSelect=t(this,"dsBreadcrumbSelect");this.dsPageAction=t(this,"dsPageAction");this.dsToolChange=t(this,"dsToolChange");this.dsHeaderBack=t(this,"dsHeaderBack");this.dsHeaderAction=t(this,"dsHeaderAction");this.dsPresentationChange=t(this,"dsPresentationChange");this.dsBrowseContextChange=t(this,"dsBrowseContextChange");this.dsNavFooterAction=t(this,"dsNavFooterAction");this.dsNavUserAction=t(this,"dsNavUserAction");this.composition="managed";this.navigation={};this.pageChrome={};this.tools={};this.navStyle="dashboard";this.gradientPreset=U;this.shortcutsEnabled=true;this.mobileDestination="area";this.mobileSheetNavOpen=false;this.toolsFullscreen=false;this.resolvedMode="desktop";this.managedToolsOpen=false;this.managedActiveTool="";this.managedToolPresentation="drawer";this.managedMobileDestination="area";this.managedMobileSheetNavOpen=false;this.managedInboxTool="";this.managedBrowseContext="dashboard";this.resizeObserver=null;this.hasLoaded=false;this.panelNavTransition=new h;this.chromeSyncCoalescer=r((()=>this.syncChrome()));this.panelWidthTokens={expandedPx:0,collapsedPx:0};this.cachedViewportWidth=0;this.cachedViewportHeight=0;this.onWindowResize=()=>{this.updateResponsiveMode();if(this.panelNavTransition.isActive)return;this.scheduleChromeSync()};this.onVisualViewportChange=()=>{if(this.panelNavTransition.isActive)return;this.scheduleChromeSync()};this.onChromeTransitionStart=s=>{if(d(s)!=="panel-nav")return;this.panelNavTransition.enter();const e=as();this.cachedViewportWidth=e.width;this.cachedViewportHeight=e.height;this.syncChrome()};this.onChromeTransitionEnd=s=>{if(d(s)!=="panel-nav")return;this.panelNavTransition.exit();if(!this.panelNavTransition.isActive){this.scheduleChromeSync()}};this.handleManagedNavSelect=s=>{s.stopPropagation();this.dsNavSelect.emit(s.detail)};this.handleManagedTabChange=s=>{s.stopPropagation();this.dsTabChange.emit(s.detail)};this.handleManagedPageBack=s=>{s.stopPropagation();this.dsPageBack.emit(s.detail)};this.handleManagedBreadcrumbSelect=s=>{s.stopPropagation();const e=this.dsBreadcrumbSelect.emit(s.detail);if(e.defaultPrevented)s.preventDefault()};this.handleManagedSubsectionChange=s=>{s.stopPropagation();this.dsSubsectionChange.emit(s.detail)};this.handleManagedPageAction=s=>{s.stopPropagation();this.dsPageAction.emit(s.detail)};this.handleManagedToolChange=s=>{s.stopPropagation();const{id:e,selected:t}=s.detail;this.managedActiveTool=e;this.managedToolsOpen=t;const i=this.resolvedToolItems.find((s=>s.id===e));if(i?.mobileDestination==="inbox"||b(e)){this.managedInboxTool=e}this.managedMobileDestination=t?i?.mobileDestination??m(true,e):"area";this.managedMobileSheetNavOpen=false;this.dsToolChange.emit(s.detail)};this.handleManagedPresentationChange=s=>{s.stopPropagation();this.managedToolPresentation=s.detail.presentation;this.toolsFullscreen=s.detail.presentation==="fullscreen";this.dsPresentationChange.emit(s.detail)};this.handleManagedHeaderBack=s=>{s.stopPropagation();this.dsHeaderBack.emit(s.detail)};this.handleManagedHeaderAction=s=>{s.stopPropagation();this.dsHeaderAction.emit(s.detail)};this.handleManagedSheetToggle=s=>{s.stopPropagation();this.managedMobileSheetNavOpen=s.detail;if(s.detail){this.managedMobileDestination="area";this.managedToolsOpen=false}};this.handleManagedMobileDestination=s=>{s.stopPropagation();const e=s.detail.destination;this.managedMobileSheetNavOpen=false;this.managedMobileDestination=e;if(e==="area"){this.managedToolsOpen=false;return}const t=e==="inbox"?f(this.managedInboxTool,this.availableInboxTools):e;if(!t)return;const i=this.resolvedToolItems.find((s=>s.id===t||e!=="inbox"&&s.mobileDestination===e));if(!i||i.isInactive)return;const a=i.id;this.managedActiveTool=a;this.managedToolsOpen=true;if(b(a))this.managedInboxTool=a;this.dsToolChange.emit({id:a,selected:true})};this.handleManagedAreaSelect=s=>{s.stopPropagation();this.managedMobileSheetNavOpen=false;this.managedMobileDestination="area";this.dsNavSelect.emit(s.detail)};this.handleManagedBrowseContext=s=>{s.stopPropagation();this.managedBrowseContext=s.detail;this.dsBrowseContextChange.emit(s.detail)};this.handleManagedSheetClose=s=>{s.stopPropagation();this.managedMobileSheetNavOpen=false};this.handleManagedNavFooterAction=s=>{s.stopPropagation();this.dsNavFooterAction.emit()};this.handleManagedNavUserAction=s=>{s.stopPropagation();this.dsNavUserAction.emit(s.detail)}}get managed(){return this.composition==="managed"}get effectiveMobileDestination(){return this.managed?this.managedMobileDestination:this.mobileDestination}get effectiveMobileSheetNavOpen(){return this.managed?this.managedMobileSheetNavOpen:this.mobileSheetNavOpen}get resolvedNavigationGroups(){if(this.navigation.groups?.length)return this.navigation.groups;return this.managedBrowseContext==="settings"?this.navigation.settingsGroups??[]:this.navigation.dashboardGroups??[]}get resolvedToolItems(){return this.tools.items??o}get availableInboxTools(){return this.resolvedToolItems.filter((s=>!s.isInactive&&(s.mobileDestination==="inbox"||b(s.id)))).map((s=>s.id))}componentWillLoad(){if(typeof window!=="undefined"){this.resolvedMode=g(window.innerWidth)}this.managedBrowseContext=this.navigation.browseContext??this.navStyle;this.managedMobileDestination=this.mobileDestination;this.managedMobileSheetNavOpen=this.mobileSheetNavOpen;this.managedInboxTool=f("",this.availableInboxTools)}componentDidLoad(){this.hasLoaded=true;this.syncSlottedNavStyle();this.syncSlottedMobileState();this.connectMetricsObserver();this.connectViewportListeners();this.el.addEventListener(p,this.onChromeTransitionStart);this.el.addEventListener(c,this.onChromeTransitionEnd);requestAnimationFrame((()=>{this.cachePanelWidthTokens();this.scheduleChromeSync()}));const s=this.el.querySelector("ds-shell-tools, ds-panel-tools");this.toolsFullscreen=s?.getAttribute("presentation")==="fullscreen"}handleToolsPresentation(s){this.toolsFullscreen=s.detail?.presentation==="fullscreen"}disconnectedCallback(){this.resizeObserver?.disconnect();this.resizeObserver=null;this.disconnectViewportListeners();this.chromeSyncCoalescer.cancel();this.el.removeEventListener(p,this.onChromeTransitionStart);this.el.removeEventListener(c,this.onChromeTransitionEnd)}onShellPropsChange(){this.syncSlottedNavStyle();this.scheduleChromeSync()}handleNavigationChange(){this.managedBrowseContext=this.navigation.browseContext??this.navStyle}handleToolsChange(){if(this.managedActiveTool&&!this.resolvedToolItems.some((s=>s.id===this.managedActiveTool))){this.managedToolsOpen=false;this.managedActiveTool="";this.managedMobileDestination="area"}this.managedInboxTool=f(this.managedInboxTool,this.availableInboxTools)}onMobileStateChange(s,t){if(this.managed){this.managedMobileDestination=this.mobileDestination;this.managedMobileSheetNavOpen=this.mobileSheetNavOpen}this.syncSlottedMobileState();if(t===true&&!this.effectiveMobileSheetNavOpen&&this.resolvedMode==="mobile"){requestAnimationFrame((()=>{const s=this.el.querySelector("ds-mobile-bar-nav");const t=document.activeElement;if(t instanceof e&&s?.contains(t))return;void s?.focusDestination?.("sheet-nav")}))}}updateResponsiveMode(){if(typeof window==="undefined")return;const s=g(window.innerWidth);if(s===this.resolvedMode)return;this.resolvedMode=s;this.syncSlottedMobileState();this.scheduleChromeSync();if(this.hasLoaded)this.dsResponsiveModeChange.emit({mode:s})}scheduleChromeSync(){this.chromeSyncCoalescer.schedule()}syncSlottedNavStyle(){const s=this.el.querySelector("ds-panel-nav");const e=this.el.querySelector("ds-bar-nav");if(s){s.setAttribute("nav-style",this.navStyle);s.navStyle=this.navStyle}if(e){e.setAttribute("nav-style",this.navStyle);e.navStyle=this.navStyle}}syncSlottedMobileState(){const s=this.el.querySelector("ds-shell-tools");const e=this.el.querySelector("ds-mobile-bar-nav");const t=this.el.querySelector("ds-mobile-sheet-nav");if(s){s.setAttribute("responsive-mode",this.resolvedMode);s.responsiveMode=this.resolvedMode}if(e){e.activeDestination=this.effectiveMobileDestination;e.sheetNavExpanded=this.effectiveMobileSheetNavOpen}if(t){t.open=this.effectiveMobileSheetNavOpen}}connectMetricsObserver(){this.resizeObserver=new ResizeObserver((()=>{if(this.panelNavTransition.isActive)return;this.scheduleChromeSync()}));this.resizeObserver.observe(this.el);const s=this.el.querySelector(".shell-app__panel");if(s)this.resizeObserver.observe(s)}connectViewportListeners(){if(typeof window==="undefined")return;window.addEventListener("resize",this.onWindowResize,{passive:true});const s=window.visualViewport;if(s){s.addEventListener("resize",this.onVisualViewportChange,{passive:true});s.addEventListener("scroll",this.onVisualViewportChange,{passive:true})}}disconnectViewportListeners(){if(typeof window==="undefined")return;window.removeEventListener("resize",this.onWindowResize);const s=window.visualViewport;if(s){s.removeEventListener("resize",this.onVisualViewportChange);s.removeEventListener("scroll",this.onVisualViewportChange)}}cachePanelWidthTokens(){const s=this.el.querySelector("ds-panel-nav .panel-nav");if(!s)return;this.panelWidthTokens=bs(s)}applyGradientVars(s,e){const t=s.style;for(const[s,i]of Object.entries(e)){if(i===null)t.removeProperty(s);else t.setProperty(s,i)}}clearGradientPaintVars(s){const e=[Y,Z,ts];for(const t of s){for(const s of e)t.style.removeProperty(s)}}syncChromeLayoutVars(s,e,t,i){if(s){s.style.setProperty(ss,t)}if(e){e.style.setProperty(es,i)}}resolvePanelWidthPx(s){const e=s?.querySelector(".panel-nav");if(this.panelNavTransition.isActive&&this.panelWidthTokens.expandedPx>0){const t=ms(s,e);return fs(this.panelWidthTokens,t)}const t=this.el.querySelector(".shell-app__panel");const i=t?.getBoundingClientRect().width??0;if(i>0)return i;if(this.panelWidthTokens.expandedPx>0){const t=ms(s,e);return fs(this.panelWidthTokens,t)}return 0}resolveViewportDimensions(){if(this.panelNavTransition.isActive&&this.cachedViewportWidth>0){return{width:this.cachedViewportWidth,height:this.cachedViewportHeight}}return as()}chromeLayerActive(){return this.resolvedMode!=="mobile"&&X(this.gradientPreset)!=="none"}handleWindowKeyDown(s){if(!this.shortcutsEnabled)return;if(ds(s.target))return;const e=cs(s);if(!e)return;s.preventDefault();const t=this.el.querySelector("ds-panel-nav");const i=this.el.querySelector("ds-shell-tools, ds-panel-tools");if(e==="toggle-panel-nav"){void t?.toggleCollapsed();return}if(e==="close-panel-tools"){void i?.closeDrawer?.();return}if(e.startsWith("open-tool:")&&i){const s=e.slice("open-tool:".length);void i.activateTool?.(s)}}async activateTool(s){const e=this.el.querySelector("ds-shell-tools, ds-panel-tools");await(e?.activateTool?.(s))}async closeGlobalSurface(){if(this.managedMobileSheetNavOpen){this.managedMobileSheetNavOpen=false;return}const s=this.el.querySelector("ds-shell-tools, ds-panel-tools");await(s?.closeDrawer?.())}async setToolPresentation(s){this.managedToolPresentation=s;this.toolsFullscreen=s==="fullscreen"}get currentArea(){const s=[...this.navigation.dashboardGroups??[],...this.navigation.settingsGroups??[],...this.resolvedNavigationGroups];const e=s.flatMap((s=>s.items));const t=this.navigation.activeId||k(this.navigation.currentUrl??this.pageChrome.currentUrl??"",e);return e.find((s=>s.id===t))??e[0]??{id:"area",icon:"MapPage",label:this.pageChrome.heading||"Area"}}toolDot(s){return this.resolvedToolItems.find((e=>e.id===s))?.dot??false}syncChrome(){const s=this.el.querySelector("ds-panel-nav");const e=this.el.querySelector("ds-bar-nav");const t=[this.el,s,e].filter((s=>s!==null));const i=()=>{if(s)s.style.removeProperty(ss);if(e)e.style.removeProperty(es)};const a=X(this.gradientPreset);if(a==="none"||this.resolvedMode==="mobile"){this.clearGradientPaintVars(t);i();return}const n=this.resolveViewportDimensions();const o=this.resolvePanelWidthPx(s);const l=os();const h=ls(o);this.syncChromeLayoutVars(s,e,l,h);const r=is(a);const d=ns({width:n.width,height:n.height});const p=R(a);for(const s of t){if(s===this.el){this.applyGradientVars(s,{[Y]:r,[Z]:d,[ss]:l,[es]:h,[ts]:p});continue}const e=s.tagName.toLowerCase()==="ds-bar-nav";this.applyGradientVars(s,{[Y]:r,[Z]:d,[ts]:p,[ss]:e?null:l,[es]:e?h:null})}}renderManagedPanelNav(){const s=this.navigation;return i("ds-panel-nav",{navStyle:this.navStyle,groups:this.resolvedNavigationGroups,breakpoint:v,routerMode:s.routerMode??"event",activeId:s.activeId??"",currentUrl:s.currentUrl??this.pageChrome.currentUrl??"",storageKey:s.storageKey??"",userName:s.userName??"",userInitial:s.userInitial??"",accountMenuExpanded:s.accountMenuExpanded??false,dashboardLabel:s.dashboardLabel??"Dashboard",settingsLabel:s.settingsLabel??"Settings",accountLabel:s.accountLabel??"Account",dashboardNavigationLabel:s.dashboardNavigationLabel??"Dashboard navigation",settingsNavigationLabel:s.settingsNavigationLabel??"Settings navigation",navigationItemsLabel:s.navigationLabel??"Navigation items",onDsNavSelect:this.handleManagedNavSelect,onDsNavFooterAction:this.handleManagedNavFooterAction,onDsNavUserAction:this.handleManagedNavUserAction})}renderManagedBarNav(){return i("ds-bar-nav",{navStyle:this.navStyle,tabs:this.pageChrome.tabs??[],value:this.pageChrome.value??"",heading:this.pageChrome.routeHeading??this.pageChrome.heading,basePath:this.pageChrome.basePath??"",currentUrl:this.pageChrome.currentUrl??this.navigation.currentUrl??"",onDsTabChange:this.handleManagedTabChange})}renderManagedToolSlots(){const s=this.resolvedToolItems.map((s=>s.id));return s.flatMap((s=>[i("slot",{name:s,slot:s}),i("slot",{name:`${s}-view`,slot:`${s}-view`})]))}renderManagedTools(){const s=this.tools;return i("ds-shell-tools",{responsiveMode:this.resolvedMode,open:this.managedToolsOpen,activeTool:this.managedActiveTool,presentation:this.managedToolPresentation,fullscreenHeaderMode:s.fullscreenHeaderMode??"shared",items:this.resolvedToolItems,headers:s.headers??{},storageKey:s.storageKey??"",toolsLabel:s.toolsLabel??"Tools",toolShortcutsLabel:s.toolShortcutsLabel??"Tool shortcuts",inboxLabel:s.inboxLabel??"Inbox",inboxNavigationLabel:s.inboxNavigationLabel??"Inbox sections",onDsToolChange:this.handleManagedToolChange,onDsPresentationChange:this.handleManagedPresentationChange,onDsHeaderBack:this.handleManagedHeaderBack,onDsHeaderAction:this.handleManagedHeaderAction},this.renderManagedToolSlots())}renderManagedMobileSheetNav(){const s=this.navigation;return i("ds-mobile-sheet-nav",{open:this.managedMobileSheetNavOpen,browseContext:this.managedBrowseContext,dashboardGroups:s.dashboardGroups??s.groups??[],settingsGroups:s.settingsGroups??[],currentUrl:s.currentUrl??this.pageChrome.currentUrl??"",navigationLabel:s.navigationLabel??"Application navigation",dashboardLabel:s.dashboardLabel??"Dashboard",settingsLabel:s.settingsLabel??"Settings",accountLabel:s.accountLabel??"Account",onDsAreaSelect:this.handleManagedAreaSelect,onDsBrowseContextChange:this.handleManagedBrowseContext,onDsClose:this.handleManagedSheetClose})}renderManagedMobileBarNav(){return i("ds-mobile-bar-nav",{hidden:this.tools.mobileBarHidden??false,activeDestination:this.managedMobileDestination,currentArea:this.currentArea,sheetNavExpanded:this.managedMobileSheetNavOpen,searchLabel:this.tools.items?.find((s=>s.id==="search"))?.ariaLabel??"Search",agentsLabel:this.tools.items?.find((s=>s.id==="agents"))?.ariaLabel??"Agents",inboxLabel:this.tools.inboxLabel??"Inbox",helpLabel:this.tools.items?.find((s=>s.id==="help"))?.ariaLabel??"Help & Support",searchDot:this.toolDot("search"),agentsDot:this.toolDot("agents"),inboxDot:this.toolDot("messages")||this.toolDot("stacks")||this.toolDot("activity"),onDsSheetNavToggle:this.handleManagedSheetToggle,onDsDestinationChange:this.handleManagedMobileDestination})}renderManagedMobileLeading(){if(!this.pageChrome.showBack){return i("slot",{name:"page-header-leading",slot:"leading"})}return[i("ds-tooltip",{slot:"leading",label:this.pageChrome.backAriaLabel??"Back",side:"bottom",size:"sm"},i("ds-button-unfilled",{variant:"icon",icon:this.pageChrome.backIcon??"ChevronLeft",size:"md","aria-label":this.pageChrome.backAriaLabel??"Back",activeFill:false,hasBorder:false,onDsClick:s=>this.dsPageBack.emit(s.detail)})),i("slot",{name:"page-header-leading",slot:"leading"})]}renderManagedMobileActions(){const s=this.pageChrome.mobileActions??[];return[...s.map((s=>i("ds-tooltip",{slot:"trailing",key:s.id,label:s.ariaLabel,side:"bottom",size:"sm"},i("ds-button-unfilled",{id:s.triggerId||undefined,variant:"icon",icon:s.icon,size:"md","aria-label":s.ariaLabel,haspopup:s.haspopup,controls:s.controls,expanded:s.expanded,pressed:s.pressed,isActive:!!s.expanded,isInactive:s.isInactive,activeFill:false,hasBorder:false,onDsClick:()=>this.dsPageAction.emit(s.id)})))),i("slot",{name:"page-header-trailing",slot:"trailing"})]}renderManagedPage(){const s=this.pageChrome;const e=s.showBack?[]:s.tabs??[];const t=(s.subsections??[]).map((s=>"type"in s?{type:"divider"}:{id:s.id,label:s.label,isInactive:s.isInactive}));return i("ds-shell-page",{responsiveMode:this.resolvedMode,headerCapacity:_(this.resolvedMode,this.managedToolsOpen),contentInset:s.contentInset??"default"},i("ds-bar-title",{slot:"header",heading:s.heading??"",description:s.description??"",showBack:s.showBack??false,backAriaLabel:s.backAriaLabel??"Back",backLabel:s.backLabel??"Back",breadcrumbs:s.breadcrumbs??[],breadcrumbAriaLabel:s.breadcrumbAriaLabel??"Breadcrumb",sections:t,value:s.subvalue??"",sectionsAriaLabel:s.subsectionsAriaLabel??"Change page subsection",primaryAction:s.primaryAction??null,actions:s.actions??[],actionsAriaLabel:s.actionsAriaLabel??"More page actions",onDsBack:this.handleManagedPageBack,onDsBreadcrumbSelect:this.handleManagedBreadcrumbSelect,onDsSectionChange:this.handleManagedSubsectionChange,onDsAction:this.handleManagedPageAction}),i("ds-mobile-header",{slot:"mobile-header",heading:s.heading??"",headingLevel:s.headingLevel??"h1",sections:e,value:s.showBack?"":s.value??"",sectionsAriaLabel:s.sectionsAriaLabel??"Change page section",subsections:s.subsections??[],subvalue:s.subvalue??"",subsectionsAriaLabel:s.subsectionsAriaLabel??"Change page subsection",tone:s.tone??"default",onDsSectionChange:this.handleManagedTabChange,onDsSubsectionChange:this.handleManagedSubsectionChange},this.renderManagedMobileLeading(),this.renderManagedMobileActions()),i("slot",null))}renderSlottedShell(s,e,t,n,o){return i(a,{class:s,"responsive-mode":this.resolvedMode},i("div",{class:"shell-app__row"},i("div",{class:"shell-app__chrome","aria-hidden":"true"}),i("div",{class:"shell-app__panel","aria-hidden":o?"true":undefined,inert:o?true:undefined},i("slot",{name:"panel"})),i("div",{class:"shell-app__main"},i("div",{class:"shell-app__bar","aria-hidden":o?"true":undefined,inert:o?true:undefined},i("slot",{name:"bar"})),i("div",{class:"shell-app__tools","aria-hidden":e&&(!t||this.mobileSheetNavOpen)?"true":undefined,inert:e&&(!t||this.mobileSheetNavOpen)?true:undefined,hidden:e&&!t},i("slot",{name:"tools"})),i("div",{class:"shell-app__content","aria-hidden":o||n?"true":undefined,inert:o||n?true:undefined},i("slot",null)),i("div",{class:"shell-app__mobile-sheet-nav",hidden:!e||!this.mobileSheetNavOpen,"aria-hidden":e&&this.mobileSheetNavOpen?undefined:"true",inert:e&&this.mobileSheetNavOpen?undefined:true},i("slot",{name:"mobile-sheet-nav"})),i("div",{class:"shell-app__mobile-bar-nav",hidden:!e},i("slot",{name:"mobile-bar-nav"})))))}render(){const s=this.chromeLayerActive();const e=this.resolvedMode==="mobile";const t=e&&this.effectiveMobileDestination!=="area";const n=e&&(t||this.effectiveMobileSheetNavOpen);const o=!e&&this.toolsFullscreen;const l={"shell-app":true,"shell-app--gradient":s,[`shell-app--${this.navStyle}`]:true,[`shell-app--${this.resolvedMode}`]:true,"shell-app--tools-fullscreen":o,"shell-app--mobile-tool-active":t,"shell-app--mobile-sheet-nav-open":e&&this.effectiveMobileSheetNavOpen,"shell-app--managed":this.managed,"shell-app--slotted":!this.managed};if(!this.managed){return this.renderSlottedShell(l,e,t,n,o)}return i(a,{class:l,"responsive-mode":this.resolvedMode},i("div",{class:"shell-app__row"},i("div",{class:"shell-app__chrome","aria-hidden":"true"}),i("div",{class:"shell-app__panel","aria-hidden":o?"true":undefined,inert:o?true:undefined},this.renderManagedPanelNav()),i("div",{class:"shell-app__main"},i("div",{class:"shell-app__bar","aria-hidden":o?"true":undefined,inert:o?true:undefined},this.renderManagedBarNav()),i("div",{class:"shell-app__tools","aria-hidden":e&&(!t||this.effectiveMobileSheetNavOpen)?"true":undefined,inert:e&&(!t||this.effectiveMobileSheetNavOpen)?true:undefined,hidden:e&&!t},this.renderManagedTools()),i("div",{class:"shell-app__content","aria-hidden":o||n?"true":undefined,inert:o||n?true:undefined},this.renderManagedPage()),i("div",{class:"shell-app__mobile-sheet-nav",hidden:!e||!this.effectiveMobileSheetNavOpen,"aria-hidden":e&&this.effectiveMobileSheetNavOpen?undefined:"true",inert:e&&this.effectiveMobileSheetNavOpen?undefined:true},this.renderManagedMobileSheetNav()),i("div",{class:"shell-app__mobile-bar-nav",hidden:!e},this.renderManagedMobileBarNav()))))}get el(){return this}static get watchers(){return{navStyle:[{onShellPropsChange:0}],gradientPreset:[{onShellPropsChange:0}],navigation:[{handleNavigationChange:0}],tools:[{handleToolsChange:0}],mobileDestination:[{onMobileStateChange:0}],mobileSheetNavOpen:[{onMobileStateChange:0}]}}static get style(){return gs()}},[262,"ds-shell-app",{composition:[513],navigation:[16],pageChrome:[16],tools:[16],navStyle:[513,"nav-style"],gradientPreset:[513,"gradient-preset"],shortcutsEnabled:[4,"shortcuts-enabled"],mobileDestination:[1,"mobile-destination"],mobileSheetNavOpen:[4,"mobile-sheet-nav-open"],toolsFullscreen:[32],resolvedMode:[32],managedToolsOpen:[32],managedActiveTool:[32],managedToolPresentation:[32],managedMobileDestination:[32],managedMobileSheetNavOpen:[32],managedInboxTool:[32],managedBrowseContext:[32],activateTool:[64],closeGlobalSurface:[64],setToolPresentation:[64]},[[0,"dsPresentationChange","handleToolsPresentation"],[10,"keydown","handleWindowKeyDown"]],{navStyle:[{onShellPropsChange:0}],gradientPreset:[{onShellPropsChange:0}],navigation:[{handleNavigationChange:0}],tools:[{handleToolsChange:0}],mobileDestination:[{onMobileStateChange:0}],mobileSheetNavOpen:[{onMobileStateChange:0}]}]);function _s(){if(typeof customElements==="undefined"){return}const s=["ds-shell-app","ds-badge","ds-bar-nav","ds-bar-title","ds-breadcrumb","ds-button-filled","ds-button-unfilled","ds-icon","ds-loader","ds-menu","ds-mobile-bar-nav","ds-mobile-header","ds-mobile-section-switcher","ds-mobile-sheet-nav","ds-panel-nav","ds-panel-tool-header","ds-panel-tools","ds-shell-page","ds-shell-tools","ds-swatch-picker","ds-switch","ds-tab-group","ds-text","ds-tooltip"];s.forEach((s=>{switch(s){case"ds-shell-app":if(!customElements.get(n(s))){customElements.define(n(s),vs)}break;case"ds-badge":if(!customElements.get(n(s))){y()}break;case"ds-bar-nav":if(!customElements.get(n(s))){u()}break;case"ds-bar-title":if(!customElements.get(n(s))){w()}break;case"ds-breadcrumb":if(!customElements.get(n(s))){x()}break;case"ds-button-filled":if(!customElements.get(n(s))){C()}break;case"ds-button-unfilled":if(!customElements.get(n(s))){S()}break;case"ds-icon":if(!customElements.get(n(s))){D()}break;case"ds-loader":if(!customElements.get(n(s))){M()}break;case"ds-menu":if(!customElements.get(n(s))){A()}break;case"ds-mobile-bar-nav":if(!customElements.get(n(s))){L()}break;case"ds-mobile-header":if(!customElements.get(n(s))){B()}break;case"ds-mobile-section-switcher":if(!customElements.get(n(s))){z()}break;case"ds-mobile-sheet-nav":if(!customElements.get(n(s))){E()}break;case"ds-panel-nav":if(!customElements.get(n(s))){P()}break;case"ds-panel-tool-header":if(!customElements.get(n(s))){T()}break;case"ds-panel-tools":if(!customElements.get(n(s))){l()}break;case"ds-shell-page":if(!customElements.get(n(s))){j()}break;case"ds-shell-tools":if(!customElements.get(n(s))){N()}break;case"ds-swatch-picker":if(!customElements.get(n(s))){I()}break;case"ds-switch":if(!customElements.get(n(s))){O()}break;case"ds-tab-group":if(!customElements.get(n(s))){$()}break;case"ds-text":if(!customElements.get(n(s))){F()}break;case"ds-tooltip":if(!customElements.get(n(s))){G()}break}}))}_s();const ks=vs;const ys=_s;export{ks as DsShellApp,ys as defineCustomElement};
2
2
  //# sourceMappingURL=ds-shell-app.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["SHELL_GRADIENT_IMAGE_VAR","SHELL_GRADIENT_SIZE_VAR","SHELL_GRADIENT_POSITION_PANEL_VAR","SHELL_GRADIENT_POSITION_BAR_VAR","SHELL_GRADIENT_OPACITY_VAR","buildShellRadialGradient","preset","DEFAULT_SHELL_GRADIENT_PRESET","buildShellRadialGradientForPreset","readShellViewportDimensions","win","w","globalThis","window","undefined","width","height","visual","visualViewport","Math","round","innerWidth","innerHeight","shellGradientSize","layout","shellGradientPositionPanel","shellGradientPositionBar","panelWidth","TOOL_SHORTCUT_KEYS","k","a","s","m","n","isBareShellShortcutKey","e","metaKey","ctrlKey","altKey","shiftKey","isEditableShortcutTarget","target","closest","el","editable","role","getAttribute","Boolean","isContentEditable","normalizedShortcutKey","key","code","length","toLowerCase","resolveShellShortcut","toolId","readCssVarWidthPx","context","cssVarName","document","probe","createElement","style","cssText","appendChild","getBoundingClientRect","removeChild","readPanelNavWidthTokens","navRoot","expandedPx","collapsedPx","isPanelNavCollapsed","panelNavHost","classList","contains","collapsedProp","collapsed","panelWidthPxFromTokens","tokens","shellAppCss","ShellApp","__stencil_proxyCustomElement","HTMLElement","constructor","registerHost","this","navStyle","gradientPreset","shortcutsEnabled","mobileDestination","mobileSheetNavOpen","toolsFullscreen","resolvedMode","resizeObserver","hasLoaded","panelNavTransition","ChromeTransitionDepth","chromeSyncCoalescer","createRafCoalescer","syncChrome","panelWidthTokens","cachedViewportWidth","cachedViewportHeight","onWindowResize","updateResponsiveMode","isActive","scheduleChromeSync","onVisualViewportChange","onChromeTransitionStart","event","readChromeTransitionSource","enter","viewport","onChromeTransitionEnd","exit","componentWillLoad","resolveShellResponsiveMode","componentDidLoad","syncSlottedNavStyle","syncSlottedMobileState","connectMetricsObserver","connectViewportListeners","addEventListener","CHROME_TRANSITION_START","CHROME_TRANSITION_END","requestAnimationFrame","cachePanelWidthTokens","tools","querySelector","handleToolsPresentation","detail","presentation","disconnectedCallback","disconnect","disconnectViewportListeners","cancel","removeEventListener","onShellPropsChange","onMobileStateChange","_next","previous","bar","activeElement","focusDestination","next","dsResponsiveModeChange","emit","mode","schedule","panel","setAttribute","sheetNav","responsiveMode","activeDestination","sheetNavExpanded","open","ResizeObserver","observe","panelWrap","passive","applyGradientVars","vars","name","value","Object","entries","removeProperty","setProperty","clearGradientPaintVars","targets","keys","syncChromeLayoutVars","panelPosition","barPosition","resolvePanelWidthPx","panelNav","measured","resolveViewportDimensions","chromeLayerActive","normalizeShellGradientPreset","handleWindowKeyDown","action","preventDefault","toggleCollapsed","closeDrawer","startsWith","slice","activateTool","filter","clearLayoutVars","image","size","opacity","shellGradientPresetOpacity","isBar","tagName","render","chromeActive","mobile","mobileToolActive","mobileStageBlocked","fullscreen","shellCls","h","Host","class","inert","hidden"],"sources":["src/wc/shell/shell-gradient.ts","src/wc/shell/shell-shortcuts.ts","src/wc/shell/shell-chrome-metrics.ts","src/wc/components/ShellApp/ShellApp.css?tag=ds-shell-app&encapsulation=scoped","src/wc/components/ShellApp/ShellApp.tsx"],"sourcesContent":["/** CSS var names consumed by `ds-panel-nav` / `ds-bar-nav` inside `ds-shell-app`. */\nimport type { ShellGradientPreset } from './shell-gradient-presets';\nimport {\n DEFAULT_SHELL_GRADIENT_PRESET,\n buildShellRadialGradientForPreset,\n normalizeShellGradientPreset,\n} from './shell-gradient-presets';\n\nexport type { ShellGradientPreset } from './shell-gradient-presets';\nexport {\n DEFAULT_SHELL_GRADIENT_PRESET,\n SHELL_GRADIENT_PRESETS,\n SHELL_GRADIENT_PRESET_LABELS,\n buildShellRadialGradientForPreset,\n buildShellRadialGradientFromStops,\n isShellGradientPreset,\n shellGradientPresetOpacity,\n shellGradientPresetRecipe,\n shellGradientPresetStopToken,\n} from './shell-gradient-presets';\n\nexport const SHELL_GRADIENT_IMAGE_VAR = '--ds-shell-gradient-image';\nexport const SHELL_GRADIENT_SIZE_VAR = '--ds-shell-gradient-size';\nexport const SHELL_GRADIENT_POSITION_PANEL_VAR = '--ds-shell-gradient-position-panel';\nexport const SHELL_GRADIENT_POSITION_BAR_VAR = '--ds-shell-gradient-position-bar';\nexport const SHELL_GRADIENT_OPACITY_VAR = '--ds-shell-gradient-opacity';\n/** Per chrome-surface background-position — offsets wash + grid to shell row origin. */\nexport const SHELL_CHROME_SURFACE_POSITION_VAR = '--ds-shell-chrome-surface-position';\n\n/** Whether the shared chrome layer (secondary bg + optional wash) should mount. */\nexport function shellChromeLayerActive(preset: ShellGradientPreset): boolean {\n return normalizeShellGradientPreset(preset) !== 'none';\n}\n\n/**\n * Shell radial wash — same for panel and bar nav.\n * Tokens follow `data-theme` (light/dark intent stops).\n */\nexport function buildShellRadialGradient(\n preset: ShellGradientPreset = DEFAULT_SHELL_GRADIENT_PRESET,\n): string {\n return buildShellRadialGradientForPreset(preset);\n}\n\n/** Built-in radial image for the selected shell preset. */\nexport function shellGradientImage(\n preset: ShellGradientPreset = DEFAULT_SHELL_GRADIENT_PRESET,\n): string {\n return buildShellRadialGradient(preset);\n}\n\nexport interface ShellViewportDimensions {\n width: number;\n height: number;\n}\n\n/**\n * Viewport size for shell chrome with `background-attachment: fixed`.\n * Must not use the `ds-shell-app` element box — the shell can be shorter or\n * taller than the viewport when host height chains break or content overflows.\n */\nexport function readShellViewportDimensions(win?: Window): ShellViewportDimensions {\n const w = win ?? (typeof globalThis.window !== 'undefined' ? globalThis.window : undefined);\n if (!w) return { width: 0, height: 0 };\n\n const visual = w.visualViewport;\n return {\n width: Math.round(visual?.width ?? w.innerWidth),\n height: Math.round(visual?.height ?? w.innerHeight),\n };\n}\n\nexport interface ShellGradientLayout {\n width: number;\n height: number;\n panelWidth: number;\n}\n\n/** Pixel `background-size` for the fixed-attachment radial wash. */\nexport function shellGradientSize(layout: Pick<ShellGradientLayout, 'width' | 'height'>): string {\n return `${Math.round(layout.width)}px ${Math.round(layout.height)}px`;\n}\n\nexport function shellGradientPositionPanel(): string {\n return '0 0';\n}\n\nexport function shellGradientPositionBar(panelWidth: number): string {\n return `${-Math.round(panelWidth)}px 0`;\n}\n\n/** Phase-lock a chrome rect to the shell row coordinate system (wash + grid). */\nexport function shellChromeSurfacePosition(leftPx: number, topPx: number): string {\n return `${-Math.round(leftPx)}px ${-Math.round(topPx)}px`;\n}\n","import type { PanelToolsToolId } from '../components/PanelTools/panel-tools-types';\n\nexport type ShellShortcutAction =\n | 'toggle-panel-nav'\n | 'close-panel-tools'\n | `open-tool:${PanelToolsToolId}`;\n\nconst TOOL_SHORTCUT_KEYS: Record<string, PanelToolsToolId> = {\n k: 'search',\n a: 'agents',\n s: 'stacks',\n m: 'messages',\n n: 'activity',\n '/': 'help',\n};\n\n/** Tool shortcut keys (K, A, S, M, N, /) toggle open/closed via `ds-panel-tools.activateTool`. */\n\n/** True when no modifier keys are held — avoids browser/app chords like ⌘N. */\nexport function isBareShellShortcutKey(\n e: Pick<KeyboardEvent, 'metaKey' | 'ctrlKey' | 'altKey' | 'shiftKey'>,\n): boolean {\n return !e.metaKey && !e.ctrlKey && !e.altKey && !e.shiftKey;\n}\n\n/** Skip shell shortcuts while typing in an editable control. */\nexport function isEditableShortcutTarget(target: EventTarget | null): boolean {\n if (!target || typeof target !== 'object') return false;\n if (!('closest' in target) || typeof target.closest !== 'function') return false;\n\n const el = target as Element & { isContentEditable?: boolean };\n\n const editable = el.closest(\n 'input, textarea, select, [contenteditable=\"\"], [contenteditable=\"true\"], [contenteditable=\"plaintext-only\"]',\n );\n if (editable) return true;\n\n const role = el.getAttribute('role');\n if (role === 'textbox' || role === 'combobox' || role === 'searchbox') return true;\n\n return Boolean(el.isContentEditable);\n}\n\nfunction normalizedShortcutKey(e: Pick<KeyboardEvent, 'key' | 'code'>): string {\n if (e.key === '[' || e.code === 'BracketLeft') return '[';\n if (e.key === ']' || e.code === 'BracketRight') return ']';\n return e.key.length === 1 ? e.key.toLowerCase() : e.key.toLowerCase();\n}\n\n/** Resolve a shell chrome shortcut, or `null` when the key is not handled. */\nexport function resolveShellShortcut(\n e: Pick<KeyboardEvent, 'key' | 'code' | 'metaKey' | 'ctrlKey' | 'altKey' | 'shiftKey'>,\n): ShellShortcutAction | null {\n if (!isBareShellShortcutKey(e)) return null;\n\n const key = normalizedShortcutKey(e);\n if (key === '[') return 'toggle-panel-nav';\n if (key === ']') return 'close-panel-tools';\n\n const toolId = TOOL_SHORTCUT_KEYS[key];\n if (toolId) return `open-tool:${toolId}`;\n\n return null;\n}\n","import { shellGradientPositionBar } from './shell-gradient';\n\n/** Read a `var(--token)` width in px using a hidden probe (works with calc() tokens). */\nexport function readCssVarWidthPx(context: HTMLElement, cssVarName: string): number {\n if (typeof document === 'undefined') return 0;\n\n const probe = document.createElement('div');\n probe.style.cssText =\n 'position:absolute;visibility:hidden;pointer-events:none;height:0;width:var(' +\n cssVarName +\n ');';\n context.appendChild(probe);\n const width = probe.getBoundingClientRect().width;\n context.removeChild(probe);\n return width;\n}\n\nexport interface PanelNavWidthTokens {\n expandedPx: number;\n collapsedPx: number;\n}\n\n/** Resolve panel-nav expanded/collapsed widths from scoped CSS vars on `.panel-nav`. */\nexport function readPanelNavWidthTokens(navRoot: HTMLElement): PanelNavWidthTokens {\n return {\n expandedPx: readCssVarWidthPx(navRoot, '--_nav-width'),\n collapsedPx: readCssVarWidthPx(navRoot, '--_nav-width-collapsed'),\n };\n}\n\nexport function isPanelNavCollapsed(\n panelNavHost: HTMLElement | null,\n navRoot: HTMLElement | null,\n): boolean {\n if (navRoot?.classList.contains('panel-nav--collapsed')) return true;\n const collapsedProp = (panelNavHost as (HTMLElement & { collapsed?: boolean }) | null)?.collapsed;\n return collapsedProp === true;\n}\n\nexport function panelWidthPxFromTokens(\n tokens: PanelNavWidthTokens,\n collapsed: boolean,\n): number {\n return collapsed ? tokens.collapsedPx : tokens.expandedPx;\n}\n\nexport function barGradientPositionFromPanelWidth(panelWidthPx: number): string {\n return shellGradientPositionBar(panelWidthPx);\n}\n",":host {\n display: block;\n height: 100%;\n min-height: 0;\n box-sizing: border-box;\n overflow: hidden;\n overscroll-behavior: none;\n --ds-shell-panel-tools-width: var(--dimension-panel-width-xs);\n}\n\n.shell-app {\n display: flex;\n flex-direction: column;\n height: 100%;\n min-height: 0;\n box-sizing: border-box;\n overflow: hidden;\n overscroll-behavior: none;\n font-family: var(--typography-font-family, system-ui);\n}\n\n:host {\n --_shell-chrome-bg: var(--color-background-secondary);\n}\n\n.shell-app__row {\n display: flex;\n flex: 1 1 auto;\n min-height: 0;\n height: 100%;\n position: relative;\n}\n\n/*\n * One chrome layer behind the shell row. Wash uses background-attachment: fixed\n * so the pattern is locked to the viewport — panel/tools collapse only changes the\n * transparent window, not the pattern phase. JS sets wash background-size from\n * readShellViewportDimensions(), not the shell element box.\n */\n.shell-app__chrome {\n position: absolute;\n inset: 0;\n pointer-events: none;\n z-index: 0;\n background-color: var(--_shell-chrome-bg);\n}\n\n:host(.shell-app--gradient) .shell-app__chrome::before {\n content: '';\n position: absolute;\n inset: 0;\n pointer-events: none;\n background-position: 0 0;\n background-attachment: fixed;\n z-index: 1;\n opacity: var(--ds-shell-gradient-opacity, 1);\n background-image: var(--ds-shell-gradient-image, none);\n background-size: var(--ds-shell-gradient-size, auto);\n background-repeat: no-repeat;\n}\n\n.shell-app__panel {\n flex: 0 0 auto;\n min-height: 0;\n height: 100%;\n position: relative;\n /* Above main so resize handle line can paint over the workspace edge */\n z-index: 2;\n}\n\n.shell-app__panel ::slotted(ds-panel-nav) {\n display: block;\n height: 100%;\n}\n\n.shell-app__main {\n flex: 1 1 auto;\n min-width: 0;\n min-height: 0;\n display: grid;\n grid-template-columns: minmax(0, 1fr) auto;\n grid-template-rows: auto minmax(0, 1fr);\n grid-template-areas:\n 'bar tools'\n 'content tools';\n position: relative;\n z-index: 1;\n}\n\n.shell-app__mobile-sheet-nav,\n.shell-app__mobile-bar-nav {\n display: none;\n}\n\n.shell-app__bar {\n grid-area: bar;\n flex: 0 0 auto;\n min-width: 0;\n}\n\n.shell-app__bar ::slotted(ds-bar-nav) {\n display: block;\n}\n\n.shell-app__content {\n grid-area: content;\n flex: 1 1 auto;\n min-width: 0;\n min-height: 0;\n overflow: auto;\n overscroll-behavior: none;\n /* Limit reflow to the page column — not on __main (breaks tools flex shrink). */\n contain: layout;\n}\n\n/* Opaque page surface — masks the fixed chrome layer in the content column. */\n.shell-app__content {\n position: relative;\n z-index: 1;\n background-color: var(--color-background-primary);\n}\n\n.shell-app__tools {\n grid-area: tools;\n flex: 0 0 auto;\n min-width: 0;\n min-height: 0;\n height: 100%;\n display: flex;\n position: relative;\n z-index: 0;\n overflow: hidden;\n}\n\n.shell-app__tools ::slotted(ds-panel-tools) {\n display: block;\n height: 100%;\n min-height: 0;\n}\n\n.shell-app__tools ::slotted(ds-shell-tools) {\n display: block;\n height: 100%;\n min-height: 0;\n}\n\n:host(.shell-app--tools-fullscreen) .shell-app__panel,\n:host(.shell-app--tools-fullscreen) .shell-app__bar,\n:host(.shell-app--tools-fullscreen) .shell-app__content {\n visibility: hidden;\n}\n\n:host(.shell-app--mobile) {\n --_shell-chrome-bg: var(--color-background-primary);\n}\n\n:host(.shell-app--mobile) .shell-app__chrome,\n:host(.shell-app--mobile) .shell-app__panel,\n:host(.shell-app--mobile) .shell-app__bar {\n display: none;\n}\n\n:host(.shell-app--mobile) .shell-app__main {\n width: 100%;\n padding-block-start: env(safe-area-inset-top);\n box-sizing: border-box;\n grid-template-columns: minmax(0, 1fr);\n grid-template-rows: minmax(0, 1fr) auto;\n grid-template-areas:\n 'stage'\n 'mobile-bar-nav';\n background: var(--color-background-primary);\n}\n\n:host(.shell-app--mobile) .shell-app__content,\n:host(.shell-app--mobile) .shell-app__tools,\n:host(.shell-app--mobile) .shell-app__mobile-sheet-nav {\n grid-area: stage;\n min-width: 0;\n min-height: 0;\n height: 100%;\n position: relative;\n}\n\n:host(.shell-app--mobile) .shell-app__content {\n z-index: 1;\n overflow: auto;\n}\n\n:host(.shell-app--mobile) .shell-app__tools {\n z-index: 2;\n width: 100%;\n overflow: hidden;\n background: var(--color-background-primary);\n}\n\n:host(.shell-app--mobile) .shell-app__mobile-sheet-nav {\n display: block;\n z-index: 3;\n overflow: hidden;\n background: var(--color-background-primary);\n}\n\n:host(.shell-app--mobile) .shell-app__mobile-bar-nav {\n grid-area: mobile-bar-nav;\n display: block;\n min-width: 0;\n position: relative;\n z-index: 4;\n}\n\n:host(.shell-app--mobile) .shell-app__tools[hidden],\n:host(.shell-app--mobile) .shell-app__mobile-sheet-nav[hidden],\n:host(.shell-app--mobile) .shell-app__mobile-bar-nav[hidden] {\n display: none;\n}\n\n:host(.shell-app--mobile-tool-active) .shell-app__content,\n:host(.shell-app--mobile-sheet-nav-open) .shell-app__content,\n:host(.shell-app--mobile-sheet-nav-open) .shell-app__tools {\n visibility: hidden;\n}\n","import {\n Component,\n Prop,\n Element,\n Event,\n EventEmitter,\n State,\n Watch,\n Listen,\n h,\n Host,\n} from '@stencil/core';\nimport type { NavChromeStyle } from '../../shell/nav-chrome';\nimport {\n isEditableShortcutTarget,\n resolveShellShortcut,\n} from '../../shell/shell-shortcuts';\nimport type { PanelToolsToolId } from '../PanelTools/panel-tools-types';\nimport {\n DEFAULT_SHELL_GRADIENT_PRESET,\n normalizeShellGradientPreset,\n type ShellGradientPreset,\n} from '../../shell/shell-gradient-presets';\nimport {\n CHROME_TRANSITION_END,\n CHROME_TRANSITION_START,\n ChromeTransitionDepth,\n createRafCoalescer,\n readChromeTransitionSource,\n} from '../../shell/chrome-transition';\nimport {\n isPanelNavCollapsed,\n panelWidthPxFromTokens,\n readPanelNavWidthTokens,\n type PanelNavWidthTokens,\n} from '../../shell/shell-chrome-metrics';\nimport {\n SHELL_GRADIENT_IMAGE_VAR,\n SHELL_GRADIENT_OPACITY_VAR,\n SHELL_GRADIENT_POSITION_BAR_VAR,\n SHELL_GRADIENT_POSITION_PANEL_VAR,\n SHELL_GRADIENT_SIZE_VAR,\n buildShellRadialGradient,\n readShellViewportDimensions,\n shellGradientPositionBar,\n shellGradientPositionPanel,\n shellGradientPresetOpacity,\n shellGradientSize,\n} from '../../shell/shell-gradient';\nimport {\n resolveShellResponsiveMode,\n type MobileDestination,\n type ShellResponsiveMode,\n} from '../../shell/shell-responsive';\n\n@Component({\n tag: 'ds-shell-app',\n styleUrl: 'ShellApp.css',\n scoped: true,\n})\nexport class ShellApp {\n /** Chrome style propagated to slotted `ds-panel-nav` and `ds-bar-nav`. */\n @Prop({ attribute: 'nav-style', reflect: true }) navStyle: NavChromeStyle = 'dashboard';\n\n /**\n * Shell chrome wash preset. `none` renders solid chrome; the remaining\n * presets use token-based washes that adapt to the active color theme.\n */\n @Prop({ attribute: 'gradient-preset', reflect: true }) gradientPreset: ShellGradientPreset =\n DEFAULT_SHELL_GRADIENT_PRESET;\n\n /** When `true` (default), registers global shell keyboard shortcuts. `[` toggles panel nav; `]` closes tools; K, A, S, M, N, and / toggle tool drawers. Modifiers are ignored so browser chords like ⌘N stay native. */\n @Prop({ attribute: 'shortcuts-enabled' }) shortcutsEnabled: boolean = true;\n\n /** Controlled mobile surface shown above the persistent bottom bar. */\n @Prop({ attribute: 'mobile-destination' })\n mobileDestination: MobileDestination = 'area';\n\n /** Controlled full-stage Mobile Sheet Nav state. */\n @Prop({ attribute: 'mobile-sheet-nav-open' })\n mobileSheetNavOpen: boolean = false;\n\n /** Emitted after crossing the fixed 768px or 1200px shell boundaries. */\n @Event() dsResponsiveModeChange!: EventEmitter<{ mode: ShellResponsiveMode }>;\n\n @Element() el!: HTMLElement;\n @State() private toolsFullscreen = false;\n @State() private resolvedMode: ShellResponsiveMode = 'desktop';\n\n private resizeObserver: ResizeObserver | null = null;\n private hasLoaded = false;\n private readonly panelNavTransition = new ChromeTransitionDepth();\n private readonly chromeSyncCoalescer = createRafCoalescer(() => this.syncChrome());\n private panelWidthTokens: PanelNavWidthTokens = { expandedPx: 0, collapsedPx: 0 };\n private cachedViewportWidth = 0;\n private cachedViewportHeight = 0;\n private onWindowResize = () => {\n this.updateResponsiveMode();\n if (this.panelNavTransition.isActive) return;\n this.scheduleChromeSync();\n };\n private onVisualViewportChange = () => {\n if (this.panelNavTransition.isActive) return;\n this.scheduleChromeSync();\n };\n\n componentWillLoad() {\n if (typeof window !== 'undefined') {\n this.resolvedMode = resolveShellResponsiveMode(window.innerWidth);\n }\n }\n\n componentDidLoad() {\n this.hasLoaded = true;\n this.syncSlottedNavStyle();\n this.syncSlottedMobileState();\n this.connectMetricsObserver();\n this.connectViewportListeners();\n this.el.addEventListener(CHROME_TRANSITION_START, this.onChromeTransitionStart);\n this.el.addEventListener(CHROME_TRANSITION_END, this.onChromeTransitionEnd);\n requestAnimationFrame(() => {\n this.cachePanelWidthTokens();\n this.scheduleChromeSync();\n });\n const tools = this.el.querySelector('ds-shell-tools, ds-panel-tools');\n this.toolsFullscreen = tools?.getAttribute('presentation') === 'fullscreen';\n }\n\n @Listen('dsPresentationChange')\n handleToolsPresentation(event: CustomEvent<{ presentation?: string }>) {\n this.toolsFullscreen = event.detail?.presentation === 'fullscreen';\n }\n\n disconnectedCallback() {\n this.resizeObserver?.disconnect();\n this.resizeObserver = null;\n this.disconnectViewportListeners();\n this.chromeSyncCoalescer.cancel();\n this.el.removeEventListener(CHROME_TRANSITION_START, this.onChromeTransitionStart);\n this.el.removeEventListener(CHROME_TRANSITION_END, this.onChromeTransitionEnd);\n }\n\n @Watch('navStyle')\n @Watch('gradientPreset')\n onShellPropsChange() {\n this.syncSlottedNavStyle();\n this.scheduleChromeSync();\n }\n\n @Watch('mobileDestination')\n @Watch('mobileSheetNavOpen')\n onMobileStateChange(_next: unknown, previous: unknown) {\n this.syncSlottedMobileState();\n if (\n previous === true &&\n !this.mobileSheetNavOpen &&\n this.resolvedMode === 'mobile'\n ) {\n requestAnimationFrame(() => {\n const bar = this.el.querySelector('ds-mobile-bar-nav') as\n | (HTMLElement & {\n focusDestination?: (\n destination: MobileDestination | 'sheet-nav'\n ) => Promise<void>;\n })\n | null;\n const activeElement = document.activeElement;\n if (activeElement instanceof HTMLElement && bar?.contains(activeElement)) return;\n void bar?.focusDestination?.('sheet-nav');\n });\n }\n }\n\n private updateResponsiveMode() {\n if (typeof window === 'undefined') return;\n const next = resolveShellResponsiveMode(window.innerWidth);\n if (next === this.resolvedMode) return;\n this.resolvedMode = next;\n this.syncSlottedMobileState();\n this.scheduleChromeSync();\n if (this.hasLoaded) this.dsResponsiveModeChange.emit({ mode: next });\n }\n\n private onChromeTransitionStart = (event: Event) => {\n if (readChromeTransitionSource(event) !== 'panel-nav') return;\n\n this.panelNavTransition.enter();\n const viewport = readShellViewportDimensions();\n this.cachedViewportWidth = viewport.width;\n this.cachedViewportHeight = viewport.height;\n this.syncChrome();\n };\n\n private onChromeTransitionEnd = (event: Event) => {\n if (readChromeTransitionSource(event) !== 'panel-nav') return;\n\n this.panelNavTransition.exit();\n if (!this.panelNavTransition.isActive) {\n this.scheduleChromeSync();\n }\n };\n\n /** Coalesce ResizeObserver bursts to one layout read per frame. */\n private scheduleChromeSync() {\n this.chromeSyncCoalescer.schedule();\n }\n\n private syncSlottedNavStyle() {\n const panel = this.el.querySelector('ds-panel-nav') as (HTMLElement & { navStyle: NavChromeStyle }) | null;\n const bar = this.el.querySelector('ds-bar-nav') as (HTMLElement & { navStyle: NavChromeStyle }) | null;\n if (panel) {\n panel.setAttribute('nav-style', this.navStyle);\n panel.navStyle = this.navStyle;\n }\n if (bar) {\n bar.setAttribute('nav-style', this.navStyle);\n bar.navStyle = this.navStyle;\n }\n }\n\n private syncSlottedMobileState() {\n const tools = this.el.querySelector('ds-shell-tools') as\n | (HTMLElement & { responsiveMode: ShellResponsiveMode })\n | null;\n const bar = this.el.querySelector('ds-mobile-bar-nav') as\n | (HTMLElement & {\n activeDestination: MobileDestination;\n sheetNavExpanded: boolean;\n })\n | null;\n const sheetNav = this.el.querySelector('ds-mobile-sheet-nav') as\n | (HTMLElement & { open: boolean })\n | null;\n\n if (tools) {\n tools.setAttribute('responsive-mode', this.resolvedMode);\n tools.responsiveMode = this.resolvedMode;\n }\n if (bar) {\n bar.activeDestination = this.mobileDestination;\n bar.sheetNavExpanded = this.mobileSheetNavOpen;\n }\n if (sheetNav) {\n sheetNav.open = this.mobileSheetNavOpen;\n }\n }\n\n private connectMetricsObserver() {\n this.resizeObserver = new ResizeObserver(() => {\n if (this.panelNavTransition.isActive) return;\n this.scheduleChromeSync();\n });\n this.resizeObserver.observe(this.el);\n const panelWrap = this.el.querySelector('.shell-app__panel');\n if (panelWrap) this.resizeObserver.observe(panelWrap);\n }\n\n private connectViewportListeners() {\n if (typeof window === 'undefined') return;\n\n window.addEventListener('resize', this.onWindowResize, { passive: true });\n\n const visual = window.visualViewport;\n if (visual) {\n visual.addEventListener('resize', this.onVisualViewportChange, { passive: true });\n visual.addEventListener('scroll', this.onVisualViewportChange, { passive: true });\n }\n }\n\n private disconnectViewportListeners() {\n if (typeof window === 'undefined') return;\n\n window.removeEventListener('resize', this.onWindowResize);\n\n const visual = window.visualViewport;\n if (visual) {\n visual.removeEventListener('resize', this.onVisualViewportChange);\n visual.removeEventListener('scroll', this.onVisualViewportChange);\n }\n }\n\n private cachePanelWidthTokens() {\n const navRoot = this.el.querySelector('ds-panel-nav .panel-nav') as HTMLElement | null;\n if (!navRoot) return;\n this.panelWidthTokens = readPanelNavWidthTokens(navRoot);\n }\n\n private applyGradientVars(target: HTMLElement, vars: Record<string, string | null>) {\n const style = target.style;\n for (const [name, value] of Object.entries(vars)) {\n if (value === null) style.removeProperty(name);\n else style.setProperty(name, value);\n }\n }\n\n private clearGradientPaintVars(targets: HTMLElement[]) {\n const keys = [\n SHELL_GRADIENT_IMAGE_VAR,\n SHELL_GRADIENT_SIZE_VAR,\n SHELL_GRADIENT_OPACITY_VAR,\n ];\n for (const target of targets) {\n for (const key of keys) target.style.removeProperty(key);\n }\n }\n\n /** Panel/bar wash offsets for scroll fades and badge rings. */\n private syncChromeLayoutVars(\n panel: HTMLElement | null,\n bar: HTMLElement | null,\n panelPosition: string,\n barPosition: string,\n ) {\n if (panel) {\n panel.style.setProperty(SHELL_GRADIENT_POSITION_PANEL_VAR, panelPosition);\n }\n if (bar) {\n bar.style.setProperty(SHELL_GRADIENT_POSITION_BAR_VAR, barPosition);\n }\n }\n\n private resolvePanelWidthPx(panelNav: HTMLElement | null): number {\n const navRoot = panelNav?.querySelector('.panel-nav') as HTMLElement | null;\n\n if (this.panelNavTransition.isActive && this.panelWidthTokens.expandedPx > 0) {\n const collapsed = isPanelNavCollapsed(panelNav, navRoot);\n return panelWidthPxFromTokens(this.panelWidthTokens, collapsed);\n }\n\n const panelWrap = this.el.querySelector('.shell-app__panel') as HTMLElement | null;\n const measured = panelWrap?.getBoundingClientRect().width ?? 0;\n if (measured > 0) return measured;\n\n if (this.panelWidthTokens.expandedPx > 0) {\n const collapsed = isPanelNavCollapsed(panelNav, navRoot);\n return panelWidthPxFromTokens(this.panelWidthTokens, collapsed);\n }\n\n return 0;\n }\n\n /** Fixed-attachment wash/grid size — always the viewport, never the shell element box. */\n private resolveViewportDimensions(): { width: number; height: number } {\n if (this.panelNavTransition.isActive && this.cachedViewportWidth > 0) {\n return {\n width: this.cachedViewportWidth,\n height: this.cachedViewportHeight,\n };\n }\n\n return readShellViewportDimensions();\n }\n\n private chromeLayerActive(): boolean {\n return (\n this.resolvedMode !== 'mobile' &&\n normalizeShellGradientPreset(this.gradientPreset) !== 'none'\n );\n }\n\n @Listen('keydown', { target: 'window', capture: true })\n handleWindowKeyDown(e: KeyboardEvent) {\n if (!this.shortcutsEnabled) return;\n if (isEditableShortcutTarget(e.target)) return;\n\n const action = resolveShellShortcut(e);\n if (!action) return;\n\n e.preventDefault();\n\n const panel = this.el.querySelector('ds-panel-nav') as HTMLDsPanelNavElement | null;\n const tools = this.el.querySelector('ds-shell-tools, ds-panel-tools') as\n | (HTMLElement & {\n closeDrawer?: () => Promise<void>;\n activateTool?: (id: PanelToolsToolId) => Promise<void>;\n })\n | null;\n\n if (action === 'toggle-panel-nav') {\n void panel?.toggleCollapsed();\n return;\n }\n\n if (action === 'close-panel-tools') {\n void tools?.closeDrawer?.();\n return;\n }\n\n if (action.startsWith('open-tool:') && tools) {\n const toolId = action.slice('open-tool:'.length) as PanelToolsToolId;\n void tools.activateTool?.(toolId);\n }\n }\n\n private syncChrome() {\n const panelNav = this.el.querySelector('ds-panel-nav') as HTMLElement | null;\n const bar = this.el.querySelector('ds-bar-nav') as HTMLElement | null;\n const targets = [this.el, panelNav, bar].filter((el): el is HTMLElement => el !== null);\n\n const clearLayoutVars = () => {\n if (panelNav) panelNav.style.removeProperty(SHELL_GRADIENT_POSITION_PANEL_VAR);\n if (bar) bar.style.removeProperty(SHELL_GRADIENT_POSITION_BAR_VAR);\n };\n\n const preset = normalizeShellGradientPreset(this.gradientPreset);\n if (preset === 'none' || this.resolvedMode === 'mobile') {\n this.clearGradientPaintVars(targets);\n clearLayoutVars();\n return;\n }\n\n const viewport = this.resolveViewportDimensions();\n const panelWidth = this.resolvePanelWidthPx(panelNav);\n\n const panelPosition = shellGradientPositionPanel();\n const barPosition = shellGradientPositionBar(panelWidth);\n\n this.syncChromeLayoutVars(panelNav, bar, panelPosition, barPosition);\n\n const image = buildShellRadialGradient(preset);\n\n const size = shellGradientSize({\n width: viewport.width,\n height: viewport.height,\n });\n const opacity = shellGradientPresetOpacity(preset);\n\n for (const target of targets) {\n if (target === this.el) {\n this.applyGradientVars(target, {\n [SHELL_GRADIENT_IMAGE_VAR]: image,\n [SHELL_GRADIENT_SIZE_VAR]: size,\n [SHELL_GRADIENT_POSITION_PANEL_VAR]: panelPosition,\n [SHELL_GRADIENT_POSITION_BAR_VAR]: barPosition,\n [SHELL_GRADIENT_OPACITY_VAR]: opacity,\n });\n continue;\n }\n\n const isBar = target.tagName.toLowerCase() === 'ds-bar-nav';\n this.applyGradientVars(target, {\n [SHELL_GRADIENT_IMAGE_VAR]: image,\n [SHELL_GRADIENT_SIZE_VAR]: size,\n [SHELL_GRADIENT_OPACITY_VAR]: opacity,\n [SHELL_GRADIENT_POSITION_PANEL_VAR]: isBar ? null : panelPosition,\n [SHELL_GRADIENT_POSITION_BAR_VAR]: isBar ? barPosition : null,\n });\n }\n }\n\n render() {\n const chromeActive = this.chromeLayerActive();\n const mobile = this.resolvedMode === 'mobile';\n const mobileToolActive = mobile && this.mobileDestination !== 'area';\n const mobileStageBlocked = mobile && (mobileToolActive || this.mobileSheetNavOpen);\n const fullscreen = !mobile && this.toolsFullscreen;\n const shellCls: Record<string, boolean> = {\n 'shell-app': true,\n 'shell-app--gradient': chromeActive,\n [`shell-app--${this.navStyle}`]: true,\n [`shell-app--${this.resolvedMode}`]: true,\n 'shell-app--tools-fullscreen': fullscreen,\n 'shell-app--mobile-tool-active': mobileToolActive,\n 'shell-app--mobile-sheet-nav-open': mobile && this.mobileSheetNavOpen,\n };\n\n return (\n <Host class={shellCls} responsive-mode={this.resolvedMode}>\n <div class=\"shell-app__row\">\n <div class=\"shell-app__chrome\" aria-hidden=\"true\" />\n <div class=\"shell-app__panel\" aria-hidden={fullscreen ? 'true' : undefined} inert={fullscreen ? true : undefined}>\n <slot name=\"panel\" />\n </div>\n <div class=\"shell-app__main\">\n <div class=\"shell-app__bar\" aria-hidden={fullscreen ? 'true' : undefined} inert={fullscreen ? true : undefined}>\n <slot name=\"bar\" />\n </div>\n <div\n class=\"shell-app__tools\"\n aria-hidden={mobile && (!mobileToolActive || this.mobileSheetNavOpen) ? 'true' : undefined}\n inert={mobile && (!mobileToolActive || this.mobileSheetNavOpen) ? true : undefined}\n hidden={mobile && !mobileToolActive}\n >\n <slot name=\"tools\" />\n </div>\n <div\n class=\"shell-app__content\"\n aria-hidden={fullscreen || mobileStageBlocked ? 'true' : undefined}\n inert={fullscreen || mobileStageBlocked ? true : undefined}\n >\n <slot />\n </div>\n <div\n class=\"shell-app__mobile-sheet-nav\"\n hidden={!mobile || !this.mobileSheetNavOpen}\n aria-hidden={mobile && this.mobileSheetNavOpen ? undefined : 'true'}\n inert={mobile && this.mobileSheetNavOpen ? undefined : true}\n >\n <slot name=\"mobile-sheet-nav\" />\n </div>\n <div class=\"shell-app__mobile-bar-nav\" hidden={!mobile}>\n <slot name=\"mobile-bar-nav\" />\n </div>\n </div>\n </div>\n </Host>\n );\n }\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["SHELL_GRADIENT_PRESETS","DEFAULT_SHELL_GRADIENT_PRESET","SHELL_GRADIENT_RECIPES","cool","opacity","stops","color","position","neutral","warm","fresh","GRADIENT_GEOMETRY","shellGradientPresetRecipe","preset","normalized","normalizeShellGradientPreset","shellGradientPresetOpacity","String","isShellGradientPreset","value","includes","buildShellRadialGradientForPreset","buildShellRadialGradientFromStops","serialized","map","stop","join","SHELL_GRADIENT_IMAGE_VAR","SHELL_GRADIENT_SIZE_VAR","SHELL_GRADIENT_POSITION_PANEL_VAR","SHELL_GRADIENT_POSITION_BAR_VAR","SHELL_GRADIENT_OPACITY_VAR","buildShellRadialGradient","readShellViewportDimensions","win","w","globalThis","window","undefined","width","height","visual","visualViewport","Math","round","innerWidth","innerHeight","shellGradientSize","layout","shellGradientPositionPanel","shellGradientPositionBar","panelWidth","TOOL_SHORTCUT_KEYS","k","a","s","m","n","isBareShellShortcutKey","e","metaKey","ctrlKey","altKey","shiftKey","isEditableShortcutTarget","target","closest","el","editable","role","getAttribute","Boolean","isContentEditable","normalizedShortcutKey","key","code","length","toLowerCase","resolveShellShortcut","toolId","readCssVarWidthPx","context","cssVarName","document","probe","createElement","style","cssText","appendChild","getBoundingClientRect","removeChild","readPanelNavWidthTokens","navRoot","expandedPx","collapsedPx","isPanelNavCollapsed","panelNavHost","classList","contains","collapsedProp","collapsed","panelWidthPxFromTokens","tokens","shellAppCss","ShellApp","__stencil_proxyCustomElement","HTMLElement","constructor","registerHost","this","composition","navigation","pageChrome","tools","navStyle","gradientPreset","shortcutsEnabled","mobileDestination","mobileSheetNavOpen","toolsFullscreen","resolvedMode","managedToolsOpen","managedActiveTool","managedToolPresentation","managedMobileDestination","managedMobileSheetNavOpen","managedInboxTool","managedBrowseContext","resizeObserver","hasLoaded","panelNavTransition","ChromeTransitionDepth","chromeSyncCoalescer","createRafCoalescer","syncChrome","panelWidthTokens","cachedViewportWidth","cachedViewportHeight","onWindowResize","updateResponsiveMode","isActive","scheduleChromeSync","onVisualViewportChange","onChromeTransitionStart","event","readChromeTransitionSource","enter","viewport","onChromeTransitionEnd","exit","handleManagedNavSelect","stopPropagation","dsNavSelect","emit","detail","handleManagedTabChange","dsTabChange","handleManagedPageBack","dsPageBack","handleManagedBreadcrumbSelect","forwarded","dsBreadcrumbSelect","defaultPrevented","preventDefault","handleManagedSubsectionChange","dsSubsectionChange","handleManagedPageAction","dsPageAction","handleManagedToolChange","id","selected","item","resolvedToolItems","find","candidate","isShellInboxTool","shellMobileDestinationForTool","dsToolChange","handleManagedPresentationChange","presentation","dsPresentationChange","handleManagedHeaderBack","dsHeaderBack","handleManagedHeaderAction","dsHeaderAction","handleManagedSheetToggle","handleManagedMobileDestination","destination","canonicalId","resolveAvailableInboxTool","availableInboxTools","isInactive","handleManagedAreaSelect","handleManagedBrowseContext","dsBrowseContextChange","handleManagedSheetClose","handleManagedNavFooterAction","dsNavFooterAction","handleManagedNavUserAction","dsNavUserAction","managed","effectiveMobileDestination","effectiveMobileSheetNavOpen","resolvedNavigationGroups","groups","settingsGroups","dashboardGroups","items","PANEL_TOOLS_DEFAULT_ITEMS","filter","componentWillLoad","resolveShellResponsiveMode","browseContext","componentDidLoad","syncSlottedNavStyle","syncSlottedMobileState","connectMetricsObserver","connectViewportListeners","addEventListener","CHROME_TRANSITION_START","CHROME_TRANSITION_END","requestAnimationFrame","cachePanelWidthTokens","querySelector","handleToolsPresentation","disconnectedCallback","disconnect","disconnectViewportListeners","cancel","removeEventListener","onShellPropsChange","handleNavigationChange","handleToolsChange","some","onMobileStateChange","_next","previous","bar","activeElement","focusDestination","next","dsResponsiveModeChange","mode","schedule","panel","setAttribute","sheetNav","responsiveMode","activeDestination","sheetNavExpanded","open","ResizeObserver","observe","panelWrap","passive","applyGradientVars","vars","name","Object","entries","removeProperty","setProperty","clearGradientPaintVars","targets","keys","syncChromeLayoutVars","panelPosition","barPosition","resolvePanelWidthPx","panelNav","measured","resolveViewportDimensions","chromeLayerActive","handleWindowKeyDown","action","toggleCollapsed","closeDrawer","startsWith","slice","activateTool","closeGlobalSurface","setToolPresentation","currentArea","flatMap","group","activeId","deriveActiveIdFromUrl","currentUrl","icon","label","heading","toolDot","dot","clearLayoutVars","image","size","isBar","tagName","renderManagedPanelNav","h","breakpoint","SHELL_DESKTOP_BREAKPOINT","routerMode","storageKey","userName","userInitial","accountMenuExpanded","dashboardLabel","settingsLabel","accountLabel","dashboardNavigationLabel","settingsNavigationLabel","navigationItemsLabel","navigationLabel","onDsNavSelect","onDsNavFooterAction","onDsNavUserAction","renderManagedBarNav","tabs","routeHeading","basePath","onDsTabChange","renderManagedToolSlots","ids","slot","renderManagedTools","activeTool","fullscreenHeaderMode","headers","toolsLabel","toolShortcutsLabel","inboxLabel","inboxNavigationLabel","onDsToolChange","onDsPresentationChange","onDsHeaderBack","onDsHeaderAction","renderManagedMobileSheetNav","onDsAreaSelect","onDsBrowseContextChange","onDsClose","renderManagedMobileBarNav","hidden","mobileBarHidden","searchLabel","ariaLabel","agentsLabel","helpLabel","searchDot","agentsDot","inboxDot","onDsSheetNavToggle","onDsDestinationChange","renderManagedMobileLeading","showBack","backAriaLabel","side","variant","backIcon","activeFill","hasBorder","onDsClick","renderManagedMobileActions","actions","mobileActions","triggerId","haspopup","controls","expanded","pressed","renderManagedPage","page","mobileSections","barTitleSections","subsections","type","headerCapacity","resolveManagedShellPageCapacity","contentInset","description","backLabel","breadcrumbs","breadcrumbAriaLabel","sections","subvalue","sectionsAriaLabel","subsectionsAriaLabel","primaryAction","actionsAriaLabel","onDsBack","onDsBreadcrumbSelect","onDsSectionChange","onDsAction","headingLevel","tone","onDsSubsectionChange","renderSlottedShell","shellCls","mobile","mobileToolActive","mobileStageBlocked","fullscreen","Host","class","inert","render","chromeActive"],"sources":["src/wc/shell/shell-gradient-presets.ts","src/wc/shell/shell-gradient.ts","src/wc/shell/shell-shortcuts.ts","src/wc/shell/shell-chrome-metrics.ts","src/wc/components/ShellApp/ShellApp.css?tag=ds-shell-app&encapsulation=scoped","src/wc/components/ShellApp/ShellApp.tsx"],"sourcesContent":["/** Built-in shell chrome wash presets. */\nexport type ShellGradientPreset = 'none' | 'cool' | 'neutral' | 'warm' | 'fresh';\n\nexport const SHELL_GRADIENT_PRESETS: ShellGradientPreset[] = [\n 'none',\n 'cool',\n 'neutral',\n 'warm',\n 'fresh',\n];\n\n/** Wash presets shown after the `none` option in pickers. */\nexport const SHELL_GRADIENT_WASH_PRESETS: Exclude<ShellGradientPreset, 'none'>[] = [\n 'cool',\n 'neutral',\n 'warm',\n 'fresh',\n];\n\n/** Default wash when `gradient-preset` is omitted. */\nexport const DEFAULT_SHELL_GRADIENT_PRESET: ShellGradientPreset = 'neutral';\n\nexport const SHELL_GRADIENT_PRESET_LABELS: Record<ShellGradientPreset, string> = {\n none: 'None',\n cool: 'Cool',\n neutral: 'Neutral',\n warm: 'Warm',\n fresh: 'Fresh',\n};\n\nexport interface ShellGradientStop {\n color: string;\n position: number;\n}\n\nexport interface ShellGradientRecipe {\n opacity: number;\n stops: readonly ShellGradientStop[];\n}\n\nexport interface ShellGradientPickerPreview {\n backgroundColor: string;\n backgroundImage?: string;\n opacity?: number;\n}\n\nexport interface ShellGradientPickerOption {\n value: ShellGradientPreset;\n label: string;\n preview: ShellGradientPickerPreview;\n}\n\nexport interface ShellGradientPickerSection {\n options: ShellGradientPickerOption[];\n}\n\nconst SHELL_GRADIENT_RECIPES: Record<Exclude<ShellGradientPreset, 'none'>, ShellGradientRecipe> = {\n cool: {\n opacity: 0.1,\n stops: [\n { color: 'var(--color-background-transparent)', position: 0 },\n { color: 'var(--color-color-intent-blue-strong-background)', position: 100 },\n ],\n },\n neutral: {\n opacity: 0.1,\n stops: [\n { color: 'var(--color-background-transparent)', position: 0 },\n { color: 'var(--color-color-intent-grey-strong-background)', position: 100 },\n ],\n },\n warm: {\n opacity: 0.1,\n stops: [\n { color: 'var(--color-background-transparent)', position: 0 },\n { color: 'var(--color-color-intent-yellow-strong-background)', position: 100 },\n ],\n },\n fresh: {\n opacity: 0.4,\n stops: [\n { color: 'var(--color-color-intent-cyan-faint-background)', position: 0 },\n { color: 'var(--color-background-transparent)', position: 47 },\n { color: 'var(--color-background-transparent)', position: 58 },\n { color: 'var(--color-color-intent-red-faint-background)', position: 83 },\n { color: 'var(--color-color-intent-pink-faint-background)', position: 100 },\n ],\n },\n};\n\nconst GRADIENT_GEOMETRY = '100% 100% at 0% 0%';\n\nexport function shellGradientPresetStopToken(preset: ShellGradientPreset): string | null {\n if (preset === 'none') return null;\n const stops = SHELL_GRADIENT_RECIPES[preset].stops;\n return stops[stops.length - 1]?.color ?? null;\n}\n\nexport function shellGradientPresetRecipe(preset: ShellGradientPreset): ShellGradientRecipe | null {\n const normalized = normalizeShellGradientPreset(preset);\n return normalized === 'none' ? null : SHELL_GRADIENT_RECIPES[normalized];\n}\n\nexport function shellGradientPresetOpacity(preset: ShellGradientPreset): string {\n return String(shellGradientPresetRecipe(preset)?.opacity ?? 0);\n}\n\nexport function isShellGradientPreset(value: string): value is ShellGradientPreset {\n return (SHELL_GRADIENT_PRESETS as string[]).includes(value);\n}\n\n/**\n * Coerce unknown/absent presets to the default. Runtime values escape the\n * type: removing the reflected `gradient-preset` attribute (e.g. an Angular\n * `[attr.gradient-preset]=\"null\"` binding) drives the prop to null past its\n * field default — without normalization the stop lookup interpolates the\n * literal string \"undefined\" into CSS and the wash silently disappears.\n */\nexport function normalizeShellGradientPreset(\n value: string | null | undefined,\n): ShellGradientPreset {\n return value != null && isShellGradientPreset(value) ? value : DEFAULT_SHELL_GRADIENT_PRESET;\n}\n\n/** Radial wash for a preset — transparent at top-left into the intent stop. `none` returns no image. */\nexport function buildShellRadialGradientForPreset(preset: ShellGradientPreset): string {\n const normalized = normalizeShellGradientPreset(preset);\n if (normalized === 'none') return 'none';\n\n return buildShellRadialGradientFromStops(SHELL_GRADIENT_RECIPES[normalized].stops);\n}\n\n/** Build the production shell geometry from an ordered set of design-time stops. */\nexport function buildShellRadialGradientFromStops(stops: readonly ShellGradientStop[]): string {\n const serialized = stops.map(stop => `${stop.color} ${stop.position}%`).join(', ');\n return `radial-gradient(${GRADIENT_GEOMETRY}, ${serialized})`;\n}\n\n/** Generic SwatchPicker sections for the fixed shell appearance presets. */\nexport function shellGradientPickerSections(): ShellGradientPickerSection[] {\n return [\n {\n options: [{\n value: 'none',\n label: SHELL_GRADIENT_PRESET_LABELS.none,\n preview: {\n backgroundColor: 'var(--color-background-secondary)',\n },\n }],\n },\n {\n options: SHELL_GRADIENT_WASH_PRESETS.map(preset => ({\n value: preset,\n label: SHELL_GRADIENT_PRESET_LABELS[preset],\n preview: {\n backgroundColor: 'var(--color-background-secondary)',\n backgroundImage: buildShellRadialGradientForPreset(preset),\n opacity: Number(shellGradientPresetOpacity(preset)),\n },\n })),\n },\n ];\n}\n","/** CSS var names consumed by `ds-panel-nav` / `ds-bar-nav` inside `ds-shell-app`. */\nimport type { ShellGradientPreset } from './shell-gradient-presets';\nimport {\n DEFAULT_SHELL_GRADIENT_PRESET,\n buildShellRadialGradientForPreset,\n normalizeShellGradientPreset,\n} from './shell-gradient-presets';\n\nexport type { ShellGradientPreset } from './shell-gradient-presets';\nexport {\n DEFAULT_SHELL_GRADIENT_PRESET,\n SHELL_GRADIENT_PRESETS,\n SHELL_GRADIENT_PRESET_LABELS,\n buildShellRadialGradientForPreset,\n buildShellRadialGradientFromStops,\n isShellGradientPreset,\n shellGradientPresetOpacity,\n shellGradientPresetRecipe,\n shellGradientPresetStopToken,\n} from './shell-gradient-presets';\n\nexport const SHELL_GRADIENT_IMAGE_VAR = '--ds-shell-gradient-image';\nexport const SHELL_GRADIENT_SIZE_VAR = '--ds-shell-gradient-size';\nexport const SHELL_GRADIENT_POSITION_PANEL_VAR = '--ds-shell-gradient-position-panel';\nexport const SHELL_GRADIENT_POSITION_BAR_VAR = '--ds-shell-gradient-position-bar';\nexport const SHELL_GRADIENT_OPACITY_VAR = '--ds-shell-gradient-opacity';\n/** Per chrome-surface background-position — offsets wash + grid to shell row origin. */\nexport const SHELL_CHROME_SURFACE_POSITION_VAR = '--ds-shell-chrome-surface-position';\n\n/** Whether the shared chrome layer (secondary bg + optional wash) should mount. */\nexport function shellChromeLayerActive(preset: ShellGradientPreset): boolean {\n return normalizeShellGradientPreset(preset) !== 'none';\n}\n\n/**\n * Shell radial wash — same for panel and bar nav.\n * Tokens follow `data-theme` (light/dark intent stops).\n */\nexport function buildShellRadialGradient(\n preset: ShellGradientPreset = DEFAULT_SHELL_GRADIENT_PRESET,\n): string {\n return buildShellRadialGradientForPreset(preset);\n}\n\n/** Built-in radial image for the selected shell preset. */\nexport function shellGradientImage(\n preset: ShellGradientPreset = DEFAULT_SHELL_GRADIENT_PRESET,\n): string {\n return buildShellRadialGradient(preset);\n}\n\nexport interface ShellViewportDimensions {\n width: number;\n height: number;\n}\n\n/**\n * Viewport size for shell chrome with `background-attachment: fixed`.\n * Must not use the `ds-shell-app` element box — the shell can be shorter or\n * taller than the viewport when host height chains break or content overflows.\n */\nexport function readShellViewportDimensions(win?: Window): ShellViewportDimensions {\n const w = win ?? (typeof globalThis.window !== 'undefined' ? globalThis.window : undefined);\n if (!w) return { width: 0, height: 0 };\n\n const visual = w.visualViewport;\n return {\n width: Math.round(visual?.width ?? w.innerWidth),\n height: Math.round(visual?.height ?? w.innerHeight),\n };\n}\n\nexport interface ShellGradientLayout {\n width: number;\n height: number;\n panelWidth: number;\n}\n\n/** Pixel `background-size` for the fixed-attachment radial wash. */\nexport function shellGradientSize(layout: Pick<ShellGradientLayout, 'width' | 'height'>): string {\n return `${Math.round(layout.width)}px ${Math.round(layout.height)}px`;\n}\n\nexport function shellGradientPositionPanel(): string {\n return '0 0';\n}\n\nexport function shellGradientPositionBar(panelWidth: number): string {\n return `${-Math.round(panelWidth)}px 0`;\n}\n\n/** Phase-lock a chrome rect to the shell row coordinate system (wash + grid). */\nexport function shellChromeSurfacePosition(leftPx: number, topPx: number): string {\n return `${-Math.round(leftPx)}px ${-Math.round(topPx)}px`;\n}\n","import type { PanelToolsToolId } from '../components/PanelTools/panel-tools-types';\n\nexport type ShellShortcutAction =\n | 'toggle-panel-nav'\n | 'close-panel-tools'\n | `open-tool:${PanelToolsToolId}`;\n\nconst TOOL_SHORTCUT_KEYS: Record<string, PanelToolsToolId> = {\n k: 'search',\n a: 'agents',\n s: 'stacks',\n m: 'messages',\n n: 'activity',\n '/': 'help',\n};\n\n/** Tool shortcut keys (K, A, S, M, N, /) toggle open/closed via `ds-panel-tools.activateTool`. */\n\n/** True when no modifier keys are held — avoids browser/app chords like ⌘N. */\nexport function isBareShellShortcutKey(\n e: Pick<KeyboardEvent, 'metaKey' | 'ctrlKey' | 'altKey' | 'shiftKey'>,\n): boolean {\n return !e.metaKey && !e.ctrlKey && !e.altKey && !e.shiftKey;\n}\n\n/** Skip shell shortcuts while typing in an editable control. */\nexport function isEditableShortcutTarget(target: EventTarget | null): boolean {\n if (!target || typeof target !== 'object') return false;\n if (!('closest' in target) || typeof target.closest !== 'function') return false;\n\n const el = target as Element & { isContentEditable?: boolean };\n\n const editable = el.closest(\n 'input, textarea, select, [contenteditable=\"\"], [contenteditable=\"true\"], [contenteditable=\"plaintext-only\"]',\n );\n if (editable) return true;\n\n const role = el.getAttribute('role');\n if (role === 'textbox' || role === 'combobox' || role === 'searchbox') return true;\n\n return Boolean(el.isContentEditable);\n}\n\nfunction normalizedShortcutKey(e: Pick<KeyboardEvent, 'key' | 'code'>): string {\n if (e.key === '[' || e.code === 'BracketLeft') return '[';\n if (e.key === ']' || e.code === 'BracketRight') return ']';\n return e.key.length === 1 ? e.key.toLowerCase() : e.key.toLowerCase();\n}\n\n/** Resolve a shell chrome shortcut, or `null` when the key is not handled. */\nexport function resolveShellShortcut(\n e: Pick<KeyboardEvent, 'key' | 'code' | 'metaKey' | 'ctrlKey' | 'altKey' | 'shiftKey'>,\n): ShellShortcutAction | null {\n if (!isBareShellShortcutKey(e)) return null;\n\n const key = normalizedShortcutKey(e);\n if (key === '[') return 'toggle-panel-nav';\n if (key === ']') return 'close-panel-tools';\n\n const toolId = TOOL_SHORTCUT_KEYS[key];\n if (toolId) return `open-tool:${toolId}`;\n\n return null;\n}\n","import { shellGradientPositionBar } from './shell-gradient';\n\n/** Read a `var(--token)` width in px using a hidden probe (works with calc() tokens). */\nexport function readCssVarWidthPx(context: HTMLElement, cssVarName: string): number {\n if (typeof document === 'undefined') return 0;\n\n const probe = document.createElement('div');\n probe.style.cssText =\n 'position:absolute;visibility:hidden;pointer-events:none;height:0;width:var(' +\n cssVarName +\n ');';\n context.appendChild(probe);\n const width = probe.getBoundingClientRect().width;\n context.removeChild(probe);\n return width;\n}\n\nexport interface PanelNavWidthTokens {\n expandedPx: number;\n collapsedPx: number;\n}\n\n/** Resolve panel-nav expanded/collapsed widths from scoped CSS vars on `.panel-nav`. */\nexport function readPanelNavWidthTokens(navRoot: HTMLElement): PanelNavWidthTokens {\n return {\n expandedPx: readCssVarWidthPx(navRoot, '--_nav-width'),\n collapsedPx: readCssVarWidthPx(navRoot, '--_nav-width-collapsed'),\n };\n}\n\nexport function isPanelNavCollapsed(\n panelNavHost: HTMLElement | null,\n navRoot: HTMLElement | null,\n): boolean {\n if (navRoot?.classList.contains('panel-nav--collapsed')) return true;\n const collapsedProp = (panelNavHost as (HTMLElement & { collapsed?: boolean }) | null)?.collapsed;\n return collapsedProp === true;\n}\n\nexport function panelWidthPxFromTokens(\n tokens: PanelNavWidthTokens,\n collapsed: boolean,\n): number {\n return collapsed ? tokens.collapsedPx : tokens.expandedPx;\n}\n\nexport function barGradientPositionFromPanelWidth(panelWidthPx: number): string {\n return shellGradientPositionBar(panelWidthPx);\n}\n",":host {\n display: block;\n height: 100%;\n min-height: 0;\n box-sizing: border-box;\n overflow: hidden;\n overscroll-behavior: none;\n --ds-shell-panel-tools-width: var(--dimension-panel-width-xs);\n}\n\n.shell-app {\n display: flex;\n flex-direction: column;\n height: 100%;\n min-height: 0;\n box-sizing: border-box;\n overflow: hidden;\n overscroll-behavior: none;\n font-family: var(--typography-font-family, system-ui);\n}\n\n:host {\n --_shell-chrome-bg: var(--color-background-secondary);\n}\n\n.shell-app__row {\n display: flex;\n flex: 1 1 auto;\n min-height: 0;\n height: 100%;\n position: relative;\n}\n\n/*\n * One chrome layer behind the shell row. Wash uses background-attachment: fixed\n * so the pattern is locked to the viewport — panel/tools collapse only changes the\n * transparent window, not the pattern phase. JS sets wash background-size from\n * readShellViewportDimensions(), not the shell element box.\n */\n.shell-app__chrome {\n position: absolute;\n inset: 0;\n pointer-events: none;\n z-index: 0;\n background-color: var(--_shell-chrome-bg);\n}\n\n:host(.shell-app--gradient) .shell-app__chrome::before {\n content: '';\n position: absolute;\n inset: 0;\n pointer-events: none;\n background-position: 0 0;\n background-attachment: fixed;\n z-index: 1;\n opacity: var(--ds-shell-gradient-opacity, 1);\n background-image: var(--ds-shell-gradient-image, none);\n background-size: var(--ds-shell-gradient-size, auto);\n background-repeat: no-repeat;\n}\n\n.shell-app__panel {\n flex: 0 0 auto;\n min-height: 0;\n height: 100%;\n position: relative;\n /* Above main so resize handle line can paint over the workspace edge */\n z-index: 2;\n}\n\n.shell-app__panel ::slotted(ds-panel-nav) {\n display: block;\n height: 100%;\n}\n\n.shell-app__panel > ds-panel-nav {\n display: block;\n height: 100%;\n}\n\n.shell-app__main {\n flex: 1 1 auto;\n min-width: 0;\n min-height: 0;\n display: grid;\n grid-template-columns: minmax(0, 1fr) auto;\n grid-template-rows: auto minmax(0, 1fr);\n grid-template-areas:\n 'bar tools'\n 'content tools';\n position: relative;\n z-index: 1;\n}\n\n.shell-app__mobile-sheet-nav,\n.shell-app__mobile-bar-nav {\n display: none;\n}\n\n.shell-app__bar {\n grid-area: bar;\n flex: 0 0 auto;\n min-width: 0;\n}\n\n.shell-app__bar ::slotted(ds-bar-nav) {\n display: block;\n}\n\n.shell-app__bar > ds-bar-nav {\n display: block;\n}\n\n.shell-app__content {\n grid-area: content;\n flex: 1 1 auto;\n min-width: 0;\n min-height: 0;\n overflow: auto;\n overscroll-behavior: none;\n /* Limit reflow to the page column — not on __main (breaks tools flex shrink). */\n contain: layout;\n}\n\n/* Opaque page surface — masks the fixed chrome layer in the content column. */\n.shell-app__content {\n position: relative;\n z-index: 1;\n background-color: var(--color-background-primary);\n}\n\n.shell-app__tools {\n grid-area: tools;\n flex: 0 0 auto;\n min-width: 0;\n min-height: 0;\n height: 100%;\n display: flex;\n position: relative;\n z-index: 0;\n overflow: hidden;\n}\n\n.shell-app__tools ::slotted(ds-panel-tools) {\n display: block;\n height: 100%;\n min-height: 0;\n}\n\n.shell-app__tools ::slotted(ds-shell-tools) {\n display: block;\n height: 100%;\n min-height: 0;\n}\n\n.shell-app__tools > ds-shell-tools {\n display: block;\n height: 100%;\n min-height: 0;\n}\n\n.shell-app__content > ds-shell-page {\n display: block;\n min-height: 100%;\n}\n\n:host(.shell-app--tools-fullscreen) .shell-app__panel,\n:host(.shell-app--tools-fullscreen) .shell-app__bar,\n:host(.shell-app--tools-fullscreen) .shell-app__content {\n visibility: hidden;\n}\n\n:host(.shell-app--mobile) {\n --_shell-chrome-bg: var(--color-background-primary);\n}\n\n:host(.shell-app--mobile) .shell-app__chrome,\n:host(.shell-app--mobile) .shell-app__panel,\n:host(.shell-app--mobile) .shell-app__bar {\n display: none;\n}\n\n:host(.shell-app--mobile) .shell-app__main {\n width: 100%;\n padding-block-start: env(safe-area-inset-top);\n box-sizing: border-box;\n grid-template-columns: minmax(0, 1fr);\n grid-template-rows: minmax(0, 1fr) auto;\n grid-template-areas:\n 'stage'\n 'mobile-bar-nav';\n background: var(--color-background-primary);\n}\n\n:host(.shell-app--mobile) .shell-app__content,\n:host(.shell-app--mobile) .shell-app__tools,\n:host(.shell-app--mobile) .shell-app__mobile-sheet-nav {\n grid-area: stage;\n min-width: 0;\n min-height: 0;\n height: 100%;\n position: relative;\n}\n\n:host(.shell-app--mobile) .shell-app__content {\n z-index: 1;\n overflow: auto;\n}\n\n:host(.shell-app--mobile) .shell-app__tools {\n z-index: 2;\n width: 100%;\n overflow: hidden;\n background: var(--color-background-primary);\n}\n\n:host(.shell-app--mobile) .shell-app__mobile-sheet-nav {\n display: block;\n z-index: 3;\n overflow: hidden;\n background: var(--color-background-primary);\n}\n\n:host(.shell-app--mobile) .shell-app__mobile-bar-nav {\n grid-area: mobile-bar-nav;\n display: block;\n min-width: 0;\n position: relative;\n z-index: 4;\n}\n\n:host(.shell-app--mobile) .shell-app__tools[hidden],\n:host(.shell-app--mobile) .shell-app__mobile-sheet-nav[hidden],\n:host(.shell-app--mobile) .shell-app__mobile-bar-nav[hidden] {\n display: none;\n}\n\n:host(.shell-app--mobile-tool-active) .shell-app__content,\n:host(.shell-app--mobile-sheet-nav-open) .shell-app__content,\n:host(.shell-app--mobile-sheet-nav-open) .shell-app__tools {\n visibility: hidden;\n}\n","import {\n Component,\n Prop,\n Element,\n Event,\n EventEmitter,\n State,\n Watch,\n Listen,\n Method,\n h,\n Host,\n} from '@stencil/core';\nimport type { NavChromeStyle } from '../../shell/nav-chrome';\nimport {\n isEditableShortcutTarget,\n resolveShellShortcut,\n} from '../../shell/shell-shortcuts';\nimport type {\n PanelToolsToolId,\n PanelToolsHeaderAction,\n} from '../PanelTools/panel-tools-types';\nimport { PANEL_TOOLS_DEFAULT_ITEMS } from '../PanelTools/panel-tools-types';\nimport type { BarTitleSectionItem } from '../BarTitle/bar-title-types';\nimport type { BreadcrumbSelectDetail } from '../Breadcrumb/breadcrumb-types';\nimport {\n DEFAULT_SHELL_GRADIENT_PRESET,\n normalizeShellGradientPreset,\n type ShellGradientPreset,\n} from '../../shell/shell-gradient-presets';\nimport {\n CHROME_TRANSITION_END,\n CHROME_TRANSITION_START,\n ChromeTransitionDepth,\n createRafCoalescer,\n readChromeTransitionSource,\n} from '../../shell/chrome-transition';\nimport {\n isPanelNavCollapsed,\n panelWidthPxFromTokens,\n readPanelNavWidthTokens,\n type PanelNavWidthTokens,\n} from '../../shell/shell-chrome-metrics';\nimport {\n SHELL_GRADIENT_IMAGE_VAR,\n SHELL_GRADIENT_OPACITY_VAR,\n SHELL_GRADIENT_POSITION_BAR_VAR,\n SHELL_GRADIENT_POSITION_PANEL_VAR,\n SHELL_GRADIENT_SIZE_VAR,\n buildShellRadialGradient,\n readShellViewportDimensions,\n shellGradientPositionBar,\n shellGradientPositionPanel,\n shellGradientPresetOpacity,\n shellGradientSize,\n} from '../../shell/shell-gradient';\nimport {\n isShellInboxTool,\n resolveAvailableInboxTool,\n resolveManagedShellPageCapacity,\n resolveShellResponsiveMode,\n SHELL_DESKTOP_BREAKPOINT,\n shellMobileDestinationForTool,\n type MobileDestination,\n type ShellInboxToolId,\n type ShellResponsiveMode,\n} from '../../shell/shell-responsive';\nimport { deriveActiveIdFromUrl } from '../PanelNav/panel-nav-utils';\nimport type { PanelNavItem } from '../PanelNav/panel-nav-types';\nimport type { PanelNavUserActionDetail } from '../PanelNav/panel-nav-types';\nimport type { MobileBarNavDestinationDetail } from '../MobileBarNav/mobile-bar-nav-types';\nimport type {\n ShellAppComposition,\n ShellNavigationConfig,\n ShellPageChromeConfig,\n ShellToolsConfig,\n} from './shell-app-types';\n\n@Component({\n tag: 'ds-shell-app',\n styleUrl: 'ShellApp.css',\n scoped: true,\n})\nexport class ShellApp {\n /** Managed renders the complete responsive chrome; slotted exposes the advanced composition. */\n @Prop({ reflect: true }) composition: ShellAppComposition = 'managed';\n\n /** Router-owned navigation data used by managed composition. */\n @Prop() navigation: ShellNavigationConfig = {};\n\n /** Route-owned page title and section data used by managed composition. */\n @Prop({ attribute: 'page-chrome' }) pageChrome: ShellPageChromeConfig = {};\n\n /** Product-owned global tool definitions used by managed composition. */\n @Prop() tools: ShellToolsConfig = {};\n\n /** Chrome style propagated to slotted `ds-panel-nav` and `ds-bar-nav`. */\n @Prop({ attribute: 'nav-style', reflect: true }) navStyle: NavChromeStyle = 'dashboard';\n\n /**\n * Shell chrome wash preset. `none` renders solid chrome; the remaining\n * presets use token-based washes that adapt to the active color theme.\n */\n @Prop({ attribute: 'gradient-preset', reflect: true }) gradientPreset: ShellGradientPreset =\n DEFAULT_SHELL_GRADIENT_PRESET;\n\n /** When `true` (default), registers global shell keyboard shortcuts. `[` toggles panel nav; `]` closes tools; K, A, S, M, N, and / toggle tool drawers. Modifiers are ignored so browser chords like ⌘N stay native. */\n @Prop({ attribute: 'shortcuts-enabled' }) shortcutsEnabled: boolean = true;\n\n /** Controlled mobile surface shown above the persistent bottom bar. */\n @Prop({ attribute: 'mobile-destination' })\n mobileDestination: MobileDestination = 'area';\n\n /** Controlled full-stage Mobile Sheet Nav state. */\n @Prop({ attribute: 'mobile-sheet-nav-open' })\n mobileSheetNavOpen: boolean = false;\n\n /** Emitted after crossing the fixed 768px or 1200px shell boundaries. */\n @Event() dsResponsiveModeChange!: EventEmitter<{ mode: ShellResponsiveMode }>;\n\n /** Managed primary-navigation intent; the application router performs navigation. */\n @Event() dsNavSelect!: EventEmitter<string>;\n\n /** Managed desktop BarNav or mobile section-selection intent. */\n @Event() dsTabChange!: EventEmitter<string>;\n\n /** Managed page-subsection intent from BarTitle or MobileHeader. */\n @Event() dsSubsectionChange!: EventEmitter<string>;\n\n /** Managed page-level Back intent. */\n @Event() dsPageBack!: EventEmitter<MouseEvent>;\n\n /** Managed breadcrumb intent from BarTitle. */\n @Event({ cancelable: true })\n dsBreadcrumbSelect!: EventEmitter<BreadcrumbSelectDetail>;\n\n /** Managed page action intent from BarTitle. */\n @Event() dsPageAction!: EventEmitter<string>;\n\n /** Managed tools selection state. */\n @Event() dsToolChange!: EventEmitter<{ id: PanelToolsToolId; selected: boolean }>;\n\n /** Managed tool-header Back intent. */\n @Event() dsHeaderBack!: EventEmitter<{ tool: PanelToolsToolId }>;\n\n /** Managed tool-header action intent. */\n @Event() dsHeaderAction!: EventEmitter<{ tool: PanelToolsToolId; id: string }>;\n\n /** Managed drawer/fullscreen presentation state. */\n @Event() dsPresentationChange!: EventEmitter<{ presentation: 'drawer' | 'fullscreen' }>;\n\n /** Managed mobile Dashboard/Settings browsing intent. */\n @Event() dsBrowseContextChange!: EventEmitter<NavChromeStyle>;\n\n /** Managed account-footer action intent. */\n @Event() dsNavFooterAction!: EventEmitter<void>;\n\n /** Managed user/account trigger intent. */\n @Event() dsNavUserAction!: EventEmitter<PanelNavUserActionDetail>;\n\n @Element() el!: HTMLElement;\n @State() private toolsFullscreen = false;\n @State() private resolvedMode: ShellResponsiveMode = 'desktop';\n @State() private managedToolsOpen = false;\n @State() private managedActiveTool: PanelToolsToolId | '' = '';\n @State() private managedToolPresentation: 'drawer' | 'fullscreen' = 'drawer';\n @State() private managedMobileDestination: MobileDestination = 'area';\n @State() private managedMobileSheetNavOpen = false;\n @State() private managedInboxTool: ShellInboxToolId | '' = '';\n @State() private managedBrowseContext: NavChromeStyle = 'dashboard';\n\n private resizeObserver: ResizeObserver | null = null;\n private hasLoaded = false;\n private readonly panelNavTransition = new ChromeTransitionDepth();\n private readonly chromeSyncCoalescer = createRafCoalescer(() => this.syncChrome());\n private panelWidthTokens: PanelNavWidthTokens = { expandedPx: 0, collapsedPx: 0 };\n private cachedViewportWidth = 0;\n private cachedViewportHeight = 0;\n private onWindowResize = () => {\n this.updateResponsiveMode();\n if (this.panelNavTransition.isActive) return;\n this.scheduleChromeSync();\n };\n private onVisualViewportChange = () => {\n if (this.panelNavTransition.isActive) return;\n this.scheduleChromeSync();\n };\n\n private get managed(): boolean {\n return this.composition === 'managed';\n }\n\n private get effectiveMobileDestination(): MobileDestination {\n return this.managed ? this.managedMobileDestination : this.mobileDestination;\n }\n\n private get effectiveMobileSheetNavOpen(): boolean {\n return this.managed ? this.managedMobileSheetNavOpen : this.mobileSheetNavOpen;\n }\n\n private get resolvedNavigationGroups() {\n if (this.navigation.groups?.length) return this.navigation.groups;\n return this.managedBrowseContext === 'settings'\n ? (this.navigation.settingsGroups ?? [])\n : (this.navigation.dashboardGroups ?? []);\n }\n\n private get resolvedToolItems() {\n return this.tools.items ?? PANEL_TOOLS_DEFAULT_ITEMS;\n }\n\n private get availableInboxTools(): ShellInboxToolId[] {\n return this.resolvedToolItems\n .filter(\n item =>\n !item.isInactive &&\n (item.mobileDestination === 'inbox' || isShellInboxTool(item.id))\n )\n .map(item => item.id as ShellInboxToolId);\n }\n\n componentWillLoad() {\n if (typeof window !== 'undefined') {\n this.resolvedMode = resolveShellResponsiveMode(window.innerWidth);\n }\n this.managedBrowseContext = this.navigation.browseContext ?? this.navStyle;\n this.managedMobileDestination = this.mobileDestination;\n this.managedMobileSheetNavOpen = this.mobileSheetNavOpen;\n this.managedInboxTool = resolveAvailableInboxTool('', this.availableInboxTools);\n }\n\n componentDidLoad() {\n this.hasLoaded = true;\n this.syncSlottedNavStyle();\n this.syncSlottedMobileState();\n this.connectMetricsObserver();\n this.connectViewportListeners();\n this.el.addEventListener(CHROME_TRANSITION_START, this.onChromeTransitionStart);\n this.el.addEventListener(CHROME_TRANSITION_END, this.onChromeTransitionEnd);\n requestAnimationFrame(() => {\n this.cachePanelWidthTokens();\n this.scheduleChromeSync();\n });\n const tools = this.el.querySelector('ds-shell-tools, ds-panel-tools');\n this.toolsFullscreen = tools?.getAttribute('presentation') === 'fullscreen';\n }\n\n @Listen('dsPresentationChange')\n handleToolsPresentation(event: CustomEvent<{ presentation?: string }>) {\n this.toolsFullscreen = event.detail?.presentation === 'fullscreen';\n }\n\n disconnectedCallback() {\n this.resizeObserver?.disconnect();\n this.resizeObserver = null;\n this.disconnectViewportListeners();\n this.chromeSyncCoalescer.cancel();\n this.el.removeEventListener(CHROME_TRANSITION_START, this.onChromeTransitionStart);\n this.el.removeEventListener(CHROME_TRANSITION_END, this.onChromeTransitionEnd);\n }\n\n @Watch('navStyle')\n @Watch('gradientPreset')\n onShellPropsChange() {\n this.syncSlottedNavStyle();\n this.scheduleChromeSync();\n }\n\n @Watch('navigation')\n handleNavigationChange() {\n this.managedBrowseContext = this.navigation.browseContext ?? this.navStyle;\n }\n\n @Watch('tools')\n handleToolsChange() {\n if (\n this.managedActiveTool &&\n !this.resolvedToolItems.some(item => item.id === this.managedActiveTool)\n ) {\n this.managedToolsOpen = false;\n this.managedActiveTool = '';\n this.managedMobileDestination = 'area';\n }\n this.managedInboxTool = resolveAvailableInboxTool(\n this.managedInboxTool,\n this.availableInboxTools\n );\n }\n\n @Watch('mobileDestination')\n @Watch('mobileSheetNavOpen')\n onMobileStateChange(_next: unknown, previous: unknown) {\n if (this.managed) {\n this.managedMobileDestination = this.mobileDestination;\n this.managedMobileSheetNavOpen = this.mobileSheetNavOpen;\n }\n this.syncSlottedMobileState();\n if (\n previous === true &&\n !this.effectiveMobileSheetNavOpen &&\n this.resolvedMode === 'mobile'\n ) {\n requestAnimationFrame(() => {\n const bar = this.el.querySelector('ds-mobile-bar-nav') as\n | (HTMLElement & {\n focusDestination?: (\n destination: MobileDestination | 'sheet-nav'\n ) => Promise<void>;\n })\n | null;\n const activeElement = document.activeElement;\n if (activeElement instanceof HTMLElement && bar?.contains(activeElement)) return;\n void bar?.focusDestination?.('sheet-nav');\n });\n }\n }\n\n private updateResponsiveMode() {\n if (typeof window === 'undefined') return;\n const next = resolveShellResponsiveMode(window.innerWidth);\n if (next === this.resolvedMode) return;\n this.resolvedMode = next;\n this.syncSlottedMobileState();\n this.scheduleChromeSync();\n if (this.hasLoaded) this.dsResponsiveModeChange.emit({ mode: next });\n }\n\n private onChromeTransitionStart = (event: Event) => {\n if (readChromeTransitionSource(event) !== 'panel-nav') return;\n\n this.panelNavTransition.enter();\n const viewport = readShellViewportDimensions();\n this.cachedViewportWidth = viewport.width;\n this.cachedViewportHeight = viewport.height;\n this.syncChrome();\n };\n\n private onChromeTransitionEnd = (event: Event) => {\n if (readChromeTransitionSource(event) !== 'panel-nav') return;\n\n this.panelNavTransition.exit();\n if (!this.panelNavTransition.isActive) {\n this.scheduleChromeSync();\n }\n };\n\n /** Coalesce ResizeObserver bursts to one layout read per frame. */\n private scheduleChromeSync() {\n this.chromeSyncCoalescer.schedule();\n }\n\n private syncSlottedNavStyle() {\n const panel = this.el.querySelector('ds-panel-nav') as (HTMLElement & { navStyle: NavChromeStyle }) | null;\n const bar = this.el.querySelector('ds-bar-nav') as (HTMLElement & { navStyle: NavChromeStyle }) | null;\n if (panel) {\n panel.setAttribute('nav-style', this.navStyle);\n panel.navStyle = this.navStyle;\n }\n if (bar) {\n bar.setAttribute('nav-style', this.navStyle);\n bar.navStyle = this.navStyle;\n }\n }\n\n private syncSlottedMobileState() {\n const tools = this.el.querySelector('ds-shell-tools') as\n | (HTMLElement & { responsiveMode: ShellResponsiveMode })\n | null;\n const bar = this.el.querySelector('ds-mobile-bar-nav') as\n | (HTMLElement & {\n activeDestination: MobileDestination;\n sheetNavExpanded: boolean;\n })\n | null;\n const sheetNav = this.el.querySelector('ds-mobile-sheet-nav') as\n | (HTMLElement & { open: boolean })\n | null;\n\n if (tools) {\n tools.setAttribute('responsive-mode', this.resolvedMode);\n tools.responsiveMode = this.resolvedMode;\n }\n if (bar) {\n bar.activeDestination = this.effectiveMobileDestination;\n bar.sheetNavExpanded = this.effectiveMobileSheetNavOpen;\n }\n if (sheetNav) {\n sheetNav.open = this.effectiveMobileSheetNavOpen;\n }\n }\n\n private connectMetricsObserver() {\n this.resizeObserver = new ResizeObserver(() => {\n if (this.panelNavTransition.isActive) return;\n this.scheduleChromeSync();\n });\n this.resizeObserver.observe(this.el);\n const panelWrap = this.el.querySelector('.shell-app__panel');\n if (panelWrap) this.resizeObserver.observe(panelWrap);\n }\n\n private connectViewportListeners() {\n if (typeof window === 'undefined') return;\n\n window.addEventListener('resize', this.onWindowResize, { passive: true });\n\n const visual = window.visualViewport;\n if (visual) {\n visual.addEventListener('resize', this.onVisualViewportChange, { passive: true });\n visual.addEventListener('scroll', this.onVisualViewportChange, { passive: true });\n }\n }\n\n private disconnectViewportListeners() {\n if (typeof window === 'undefined') return;\n\n window.removeEventListener('resize', this.onWindowResize);\n\n const visual = window.visualViewport;\n if (visual) {\n visual.removeEventListener('resize', this.onVisualViewportChange);\n visual.removeEventListener('scroll', this.onVisualViewportChange);\n }\n }\n\n private cachePanelWidthTokens() {\n const navRoot = this.el.querySelector('ds-panel-nav .panel-nav') as HTMLElement | null;\n if (!navRoot) return;\n this.panelWidthTokens = readPanelNavWidthTokens(navRoot);\n }\n\n private applyGradientVars(target: HTMLElement, vars: Record<string, string | null>) {\n const style = target.style;\n for (const [name, value] of Object.entries(vars)) {\n if (value === null) style.removeProperty(name);\n else style.setProperty(name, value);\n }\n }\n\n private clearGradientPaintVars(targets: HTMLElement[]) {\n const keys = [\n SHELL_GRADIENT_IMAGE_VAR,\n SHELL_GRADIENT_SIZE_VAR,\n SHELL_GRADIENT_OPACITY_VAR,\n ];\n for (const target of targets) {\n for (const key of keys) target.style.removeProperty(key);\n }\n }\n\n /** Panel/bar wash offsets for scroll fades and badge rings. */\n private syncChromeLayoutVars(\n panel: HTMLElement | null,\n bar: HTMLElement | null,\n panelPosition: string,\n barPosition: string,\n ) {\n if (panel) {\n panel.style.setProperty(SHELL_GRADIENT_POSITION_PANEL_VAR, panelPosition);\n }\n if (bar) {\n bar.style.setProperty(SHELL_GRADIENT_POSITION_BAR_VAR, barPosition);\n }\n }\n\n private resolvePanelWidthPx(panelNav: HTMLElement | null): number {\n const navRoot = panelNav?.querySelector('.panel-nav') as HTMLElement | null;\n\n if (this.panelNavTransition.isActive && this.panelWidthTokens.expandedPx > 0) {\n const collapsed = isPanelNavCollapsed(panelNav, navRoot);\n return panelWidthPxFromTokens(this.panelWidthTokens, collapsed);\n }\n\n const panelWrap = this.el.querySelector('.shell-app__panel') as HTMLElement | null;\n const measured = panelWrap?.getBoundingClientRect().width ?? 0;\n if (measured > 0) return measured;\n\n if (this.panelWidthTokens.expandedPx > 0) {\n const collapsed = isPanelNavCollapsed(panelNav, navRoot);\n return panelWidthPxFromTokens(this.panelWidthTokens, collapsed);\n }\n\n return 0;\n }\n\n /** Fixed-attachment wash/grid size — always the viewport, never the shell element box. */\n private resolveViewportDimensions(): { width: number; height: number } {\n if (this.panelNavTransition.isActive && this.cachedViewportWidth > 0) {\n return {\n width: this.cachedViewportWidth,\n height: this.cachedViewportHeight,\n };\n }\n\n return readShellViewportDimensions();\n }\n\n private chromeLayerActive(): boolean {\n return (\n this.resolvedMode !== 'mobile' &&\n normalizeShellGradientPreset(this.gradientPreset) !== 'none'\n );\n }\n\n @Listen('keydown', { target: 'window', capture: true })\n handleWindowKeyDown(e: KeyboardEvent) {\n if (!this.shortcutsEnabled) return;\n if (isEditableShortcutTarget(e.target)) return;\n\n const action = resolveShellShortcut(e);\n if (!action) return;\n\n e.preventDefault();\n\n const panel = this.el.querySelector('ds-panel-nav') as HTMLDsPanelNavElement | null;\n const tools = this.el.querySelector('ds-shell-tools, ds-panel-tools') as\n | (HTMLElement & {\n closeDrawer?: () => Promise<void>;\n activateTool?: (id: PanelToolsToolId) => Promise<void>;\n })\n | null;\n\n if (action === 'toggle-panel-nav') {\n void panel?.toggleCollapsed();\n return;\n }\n\n if (action === 'close-panel-tools') {\n void tools?.closeDrawer?.();\n return;\n }\n\n if (action.startsWith('open-tool:') && tools) {\n const toolId = action.slice('open-tool:'.length) as PanelToolsToolId;\n void tools.activateTool?.(toolId);\n }\n }\n\n /** Open or toggle a managed global tool from application-owned UI. */\n @Method()\n async activateTool(id: PanelToolsToolId) {\n const tools = this.el.querySelector('ds-shell-tools, ds-panel-tools') as\n | (HTMLElement & { activateTool?: (tool: PanelToolsToolId) => Promise<void> })\n | null;\n await tools?.activateTool?.(id);\n }\n\n /** Close whichever managed global surface is currently visible. */\n @Method()\n async closeGlobalSurface() {\n if (this.managedMobileSheetNavOpen) {\n this.managedMobileSheetNavOpen = false;\n return;\n }\n const tools = this.el.querySelector('ds-shell-tools, ds-panel-tools') as\n | (HTMLElement & { closeDrawer?: () => Promise<void> })\n | null;\n await tools?.closeDrawer?.();\n }\n\n /** Request drawer or fullscreen presentation for the active managed tool. */\n @Method()\n async setToolPresentation(presentation: 'drawer' | 'fullscreen') {\n this.managedToolPresentation = presentation;\n this.toolsFullscreen = presentation === 'fullscreen';\n }\n\n private handleManagedNavSelect = (event: CustomEvent<string>) => {\n event.stopPropagation();\n this.dsNavSelect.emit(event.detail);\n };\n\n private handleManagedTabChange = (event: CustomEvent<string>) => {\n event.stopPropagation();\n this.dsTabChange.emit(event.detail);\n };\n\n private handleManagedPageBack = (event: CustomEvent<MouseEvent>) => {\n event.stopPropagation();\n this.dsPageBack.emit(event.detail);\n };\n\n private handleManagedBreadcrumbSelect = (\n event: CustomEvent<BreadcrumbSelectDetail>\n ) => {\n event.stopPropagation();\n const forwarded = this.dsBreadcrumbSelect.emit(event.detail);\n if (forwarded.defaultPrevented) event.preventDefault();\n };\n\n private handleManagedSubsectionChange = (event: CustomEvent<string>) => {\n event.stopPropagation();\n this.dsSubsectionChange.emit(event.detail);\n };\n\n private handleManagedPageAction = (event: CustomEvent<string>) => {\n event.stopPropagation();\n this.dsPageAction.emit(event.detail);\n };\n\n private handleManagedToolChange = (\n event: CustomEvent<{ id: PanelToolsToolId; selected: boolean }>\n ) => {\n event.stopPropagation();\n const { id, selected } = event.detail;\n this.managedActiveTool = id;\n this.managedToolsOpen = selected;\n const item = this.resolvedToolItems.find(candidate => candidate.id === id);\n if (item?.mobileDestination === 'inbox' || isShellInboxTool(id)) {\n this.managedInboxTool = id;\n }\n this.managedMobileDestination = selected\n ? (item?.mobileDestination ?? shellMobileDestinationForTool(true, id))\n : 'area';\n this.managedMobileSheetNavOpen = false;\n this.dsToolChange.emit(event.detail);\n };\n\n private handleManagedPresentationChange = (\n event: CustomEvent<{ presentation: 'drawer' | 'fullscreen' }>\n ) => {\n event.stopPropagation();\n this.managedToolPresentation = event.detail.presentation;\n this.toolsFullscreen = event.detail.presentation === 'fullscreen';\n this.dsPresentationChange.emit(event.detail);\n };\n\n private handleManagedHeaderBack = (event: CustomEvent<{ tool: PanelToolsToolId }>) => {\n event.stopPropagation();\n this.dsHeaderBack.emit(event.detail);\n };\n\n private handleManagedHeaderAction = (\n event: CustomEvent<{ tool: PanelToolsToolId; id: string }>\n ) => {\n event.stopPropagation();\n this.dsHeaderAction.emit(event.detail);\n };\n\n private handleManagedSheetToggle = (event: CustomEvent<boolean>) => {\n event.stopPropagation();\n this.managedMobileSheetNavOpen = event.detail;\n if (event.detail) {\n this.managedMobileDestination = 'area';\n this.managedToolsOpen = false;\n }\n };\n\n private handleManagedMobileDestination = (\n event: CustomEvent<MobileBarNavDestinationDetail>\n ) => {\n event.stopPropagation();\n const destination = event.detail.destination;\n this.managedMobileSheetNavOpen = false;\n this.managedMobileDestination = destination;\n\n if (destination === 'area') {\n this.managedToolsOpen = false;\n return;\n }\n\n const canonicalId =\n destination === 'inbox'\n ? resolveAvailableInboxTool(this.managedInboxTool, this.availableInboxTools)\n : destination;\n if (!canonicalId) return;\n\n const item = this.resolvedToolItems.find(\n candidate =>\n candidate.id === canonicalId ||\n (destination !== 'inbox' && candidate.mobileDestination === destination)\n );\n if (!item || item.isInactive) return;\n const id = item.id;\n this.managedActiveTool = id;\n this.managedToolsOpen = true;\n if (isShellInboxTool(id)) this.managedInboxTool = id;\n this.dsToolChange.emit({ id: id as PanelToolsToolId, selected: true });\n };\n\n private handleManagedAreaSelect = (event: CustomEvent<string>) => {\n event.stopPropagation();\n this.managedMobileSheetNavOpen = false;\n this.managedMobileDestination = 'area';\n this.dsNavSelect.emit(event.detail);\n };\n\n private handleManagedBrowseContext = (event: CustomEvent<NavChromeStyle>) => {\n event.stopPropagation();\n this.managedBrowseContext = event.detail;\n this.dsBrowseContextChange.emit(event.detail);\n };\n\n private handleManagedSheetClose = (event: CustomEvent<void>) => {\n event.stopPropagation();\n this.managedMobileSheetNavOpen = false;\n };\n\n private handleManagedNavFooterAction = (event: CustomEvent<void>) => {\n event.stopPropagation();\n this.dsNavFooterAction.emit();\n };\n\n private handleManagedNavUserAction = (\n event: CustomEvent<PanelNavUserActionDetail>\n ) => {\n event.stopPropagation();\n this.dsNavUserAction.emit(event.detail);\n };\n\n private get currentArea(): PanelNavItem {\n const groups = [\n ...(this.navigation.dashboardGroups ?? []),\n ...(this.navigation.settingsGroups ?? []),\n ...this.resolvedNavigationGroups,\n ];\n const items = groups.flatMap(group => group.items);\n const activeId =\n this.navigation.activeId ||\n deriveActiveIdFromUrl(\n this.navigation.currentUrl ?? this.pageChrome.currentUrl ?? '',\n items\n );\n return (\n items.find(item => item.id === activeId) ??\n items[0] ?? {\n id: 'area',\n icon: 'MapPage',\n label: this.pageChrome.heading || 'Area',\n }\n );\n }\n\n private toolDot(id: PanelToolsToolId): boolean {\n return this.resolvedToolItems.find(item => item.id === id)?.dot ?? false;\n }\n\n private syncChrome() {\n const panelNav = this.el.querySelector('ds-panel-nav') as HTMLElement | null;\n const bar = this.el.querySelector('ds-bar-nav') as HTMLElement | null;\n const targets = [this.el, panelNav, bar].filter((el): el is HTMLElement => el !== null);\n\n const clearLayoutVars = () => {\n if (panelNav) panelNav.style.removeProperty(SHELL_GRADIENT_POSITION_PANEL_VAR);\n if (bar) bar.style.removeProperty(SHELL_GRADIENT_POSITION_BAR_VAR);\n };\n\n const preset = normalizeShellGradientPreset(this.gradientPreset);\n if (preset === 'none' || this.resolvedMode === 'mobile') {\n this.clearGradientPaintVars(targets);\n clearLayoutVars();\n return;\n }\n\n const viewport = this.resolveViewportDimensions();\n const panelWidth = this.resolvePanelWidthPx(panelNav);\n\n const panelPosition = shellGradientPositionPanel();\n const barPosition = shellGradientPositionBar(panelWidth);\n\n this.syncChromeLayoutVars(panelNav, bar, panelPosition, barPosition);\n\n const image = buildShellRadialGradient(preset);\n\n const size = shellGradientSize({\n width: viewport.width,\n height: viewport.height,\n });\n const opacity = shellGradientPresetOpacity(preset);\n\n for (const target of targets) {\n if (target === this.el) {\n this.applyGradientVars(target, {\n [SHELL_GRADIENT_IMAGE_VAR]: image,\n [SHELL_GRADIENT_SIZE_VAR]: size,\n [SHELL_GRADIENT_POSITION_PANEL_VAR]: panelPosition,\n [SHELL_GRADIENT_POSITION_BAR_VAR]: barPosition,\n [SHELL_GRADIENT_OPACITY_VAR]: opacity,\n });\n continue;\n }\n\n const isBar = target.tagName.toLowerCase() === 'ds-bar-nav';\n this.applyGradientVars(target, {\n [SHELL_GRADIENT_IMAGE_VAR]: image,\n [SHELL_GRADIENT_SIZE_VAR]: size,\n [SHELL_GRADIENT_OPACITY_VAR]: opacity,\n [SHELL_GRADIENT_POSITION_PANEL_VAR]: isBar ? null : panelPosition,\n [SHELL_GRADIENT_POSITION_BAR_VAR]: isBar ? barPosition : null,\n });\n }\n }\n\n private renderManagedPanelNav() {\n const navigation = this.navigation;\n return (\n <ds-panel-nav\n navStyle={this.navStyle}\n groups={this.resolvedNavigationGroups}\n breakpoint={SHELL_DESKTOP_BREAKPOINT}\n routerMode={navigation.routerMode ?? 'event'}\n activeId={navigation.activeId ?? ''}\n currentUrl={navigation.currentUrl ?? this.pageChrome.currentUrl ?? ''}\n storageKey={navigation.storageKey ?? ''}\n userName={navigation.userName ?? ''}\n userInitial={navigation.userInitial ?? ''}\n accountMenuExpanded={navigation.accountMenuExpanded ?? false}\n dashboardLabel={navigation.dashboardLabel ?? 'Dashboard'}\n settingsLabel={navigation.settingsLabel ?? 'Settings'}\n accountLabel={navigation.accountLabel ?? 'Account'}\n dashboardNavigationLabel={\n navigation.dashboardNavigationLabel ?? 'Dashboard navigation'\n }\n settingsNavigationLabel={\n navigation.settingsNavigationLabel ?? 'Settings navigation'\n }\n navigationItemsLabel={navigation.navigationLabel ?? 'Navigation items'}\n onDsNavSelect={this.handleManagedNavSelect}\n onDsNavFooterAction={this.handleManagedNavFooterAction}\n onDsNavUserAction={this.handleManagedNavUserAction}\n />\n );\n }\n\n private renderManagedBarNav() {\n return (\n <ds-bar-nav\n navStyle={this.navStyle}\n tabs={this.pageChrome.tabs ?? []}\n value={this.pageChrome.value ?? ''}\n heading={this.pageChrome.routeHeading ?? this.pageChrome.heading}\n basePath={this.pageChrome.basePath ?? ''}\n currentUrl={this.pageChrome.currentUrl ?? this.navigation.currentUrl ?? ''}\n onDsTabChange={this.handleManagedTabChange}\n />\n );\n }\n\n private renderManagedToolSlots() {\n const ids = this.resolvedToolItems.map(item => item.id);\n return ids.flatMap(id => [\n <slot name={id} slot={id} />,\n <slot name={`${id}-view`} slot={`${id}-view`} />,\n ]);\n }\n\n private renderManagedTools() {\n const tools = this.tools;\n return (\n <ds-shell-tools\n responsiveMode={this.resolvedMode}\n open={this.managedToolsOpen}\n activeTool={this.managedActiveTool}\n presentation={this.managedToolPresentation}\n fullscreenHeaderMode={tools.fullscreenHeaderMode ?? 'shared'}\n items={this.resolvedToolItems}\n headers={tools.headers ?? {}}\n storageKey={tools.storageKey ?? ''}\n toolsLabel={tools.toolsLabel ?? 'Tools'}\n toolShortcutsLabel={tools.toolShortcutsLabel ?? 'Tool shortcuts'}\n inboxLabel={tools.inboxLabel ?? 'Inbox'}\n inboxNavigationLabel={tools.inboxNavigationLabel ?? 'Inbox sections'}\n onDsToolChange={this.handleManagedToolChange}\n onDsPresentationChange={this.handleManagedPresentationChange}\n onDsHeaderBack={this.handleManagedHeaderBack}\n onDsHeaderAction={this.handleManagedHeaderAction}\n >\n {this.renderManagedToolSlots()}\n </ds-shell-tools>\n );\n }\n\n private renderManagedMobileSheetNav() {\n const navigation = this.navigation;\n return (\n <ds-mobile-sheet-nav\n open={this.managedMobileSheetNavOpen}\n browseContext={this.managedBrowseContext}\n dashboardGroups={navigation.dashboardGroups ?? navigation.groups ?? []}\n settingsGroups={navigation.settingsGroups ?? []}\n currentUrl={navigation.currentUrl ?? this.pageChrome.currentUrl ?? ''}\n navigationLabel={navigation.navigationLabel ?? 'Application navigation'}\n dashboardLabel={navigation.dashboardLabel ?? 'Dashboard'}\n settingsLabel={navigation.settingsLabel ?? 'Settings'}\n accountLabel={navigation.accountLabel ?? 'Account'}\n onDsAreaSelect={this.handleManagedAreaSelect}\n onDsBrowseContextChange={this.handleManagedBrowseContext}\n onDsClose={this.handleManagedSheetClose}\n />\n );\n }\n\n private renderManagedMobileBarNav() {\n return (\n <ds-mobile-bar-nav\n hidden={this.tools.mobileBarHidden ?? false}\n activeDestination={this.managedMobileDestination}\n currentArea={this.currentArea}\n sheetNavExpanded={this.managedMobileSheetNavOpen}\n searchLabel={this.tools.items?.find(item => item.id === 'search')?.ariaLabel ?? 'Search'}\n agentsLabel={this.tools.items?.find(item => item.id === 'agents')?.ariaLabel ?? 'Agents'}\n inboxLabel={this.tools.inboxLabel ?? 'Inbox'}\n helpLabel={this.tools.items?.find(item => item.id === 'help')?.ariaLabel ?? 'Help & Support'}\n searchDot={this.toolDot('search')}\n agentsDot={this.toolDot('agents')}\n inboxDot={\n this.toolDot('messages') || this.toolDot('stacks') || this.toolDot('activity')\n }\n onDsSheetNavToggle={this.handleManagedSheetToggle}\n onDsDestinationChange={this.handleManagedMobileDestination}\n />\n );\n }\n\n private renderManagedMobileLeading() {\n if (!this.pageChrome.showBack) {\n return <slot name=\"page-header-leading\" slot=\"leading\" />;\n }\n return [\n <ds-tooltip\n slot=\"leading\"\n label={this.pageChrome.backAriaLabel ?? 'Back'}\n side=\"bottom\"\n size=\"sm\"\n >\n <ds-button-unfilled\n variant=\"icon\"\n icon={this.pageChrome.backIcon ?? 'ChevronLeft'}\n size=\"md\"\n aria-label={this.pageChrome.backAriaLabel ?? 'Back'}\n activeFill={false}\n hasBorder={false}\n onDsClick={(event: CustomEvent<MouseEvent>) =>\n this.dsPageBack.emit(event.detail)\n }\n />\n </ds-tooltip>,\n <slot name=\"page-header-leading\" slot=\"leading\" />,\n ];\n }\n\n private renderManagedMobileActions() {\n const actions = this.pageChrome.mobileActions ?? [];\n return [\n ...actions.map((action: PanelToolsHeaderAction) => (\n <ds-tooltip\n slot=\"trailing\"\n key={action.id}\n label={action.ariaLabel}\n side=\"bottom\"\n size=\"sm\"\n >\n <ds-button-unfilled\n id={action.triggerId || undefined}\n variant=\"icon\"\n icon={action.icon}\n size=\"md\"\n aria-label={action.ariaLabel}\n haspopup={action.haspopup}\n controls={action.controls}\n expanded={action.expanded}\n pressed={action.pressed}\n isActive={!!action.expanded}\n isInactive={action.isInactive}\n activeFill={false}\n hasBorder={false}\n onDsClick={() => this.dsPageAction.emit(action.id)}\n />\n </ds-tooltip>\n )),\n <slot name=\"page-header-trailing\" slot=\"trailing\" />,\n ];\n }\n\n private renderManagedPage() {\n const page = this.pageChrome;\n const mobileSections = page.showBack ? [] : (page.tabs ?? []);\n const barTitleSections: BarTitleSectionItem[] = (page.subsections ?? []).map(item =>\n 'type' in item\n ? { type: 'divider' }\n : {\n id: item.id,\n label: item.label,\n isInactive: item.isInactive,\n }\n );\n return (\n <ds-shell-page\n responsiveMode={this.resolvedMode}\n headerCapacity={resolveManagedShellPageCapacity(\n this.resolvedMode,\n this.managedToolsOpen\n )}\n contentInset={page.contentInset ?? 'default'}\n >\n <ds-bar-title\n slot=\"header\"\n heading={page.heading ?? ''}\n description={page.description ?? ''}\n showBack={page.showBack ?? false}\n backAriaLabel={page.backAriaLabel ?? 'Back'}\n backLabel={page.backLabel ?? 'Back'}\n breadcrumbs={page.breadcrumbs ?? []}\n breadcrumbAriaLabel={page.breadcrumbAriaLabel ?? 'Breadcrumb'}\n sections={barTitleSections}\n value={page.subvalue ?? ''}\n sectionsAriaLabel={page.subsectionsAriaLabel ?? 'Change page subsection'}\n primaryAction={page.primaryAction ?? null}\n actions={page.actions ?? []}\n actionsAriaLabel={page.actionsAriaLabel ?? 'More page actions'}\n onDsBack={this.handleManagedPageBack}\n onDsBreadcrumbSelect={this.handleManagedBreadcrumbSelect}\n onDsSectionChange={this.handleManagedSubsectionChange}\n onDsAction={this.handleManagedPageAction}\n />\n <ds-mobile-header\n slot=\"mobile-header\"\n heading={page.heading ?? ''}\n headingLevel={page.headingLevel ?? 'h1'}\n sections={mobileSections}\n value={page.showBack ? '' : (page.value ?? '')}\n sectionsAriaLabel={page.sectionsAriaLabel ?? 'Change page section'}\n subsections={page.subsections ?? []}\n subvalue={page.subvalue ?? ''}\n subsectionsAriaLabel={\n page.subsectionsAriaLabel ?? 'Change page subsection'\n }\n tone={page.tone ?? 'default'}\n onDsSectionChange={this.handleManagedTabChange}\n onDsSubsectionChange={this.handleManagedSubsectionChange}\n >\n {this.renderManagedMobileLeading()}\n {this.renderManagedMobileActions()}\n </ds-mobile-header>\n <slot />\n </ds-shell-page>\n );\n }\n\n private renderSlottedShell(\n shellCls: Record<string, boolean>,\n mobile: boolean,\n mobileToolActive: boolean,\n mobileStageBlocked: boolean,\n fullscreen: boolean\n ) {\n return (\n <Host class={shellCls} responsive-mode={this.resolvedMode}>\n <div class=\"shell-app__row\">\n <div class=\"shell-app__chrome\" aria-hidden=\"true\" />\n <div\n class=\"shell-app__panel\"\n aria-hidden={fullscreen ? 'true' : undefined}\n inert={fullscreen ? true : undefined}\n >\n <slot name=\"panel\" />\n </div>\n <div class=\"shell-app__main\">\n <div\n class=\"shell-app__bar\"\n aria-hidden={fullscreen ? 'true' : undefined}\n inert={fullscreen ? true : undefined}\n >\n <slot name=\"bar\" />\n </div>\n <div\n class=\"shell-app__tools\"\n aria-hidden={\n mobile && (!mobileToolActive || this.mobileSheetNavOpen)\n ? 'true'\n : undefined\n }\n inert={\n mobile && (!mobileToolActive || this.mobileSheetNavOpen)\n ? true\n : undefined\n }\n hidden={mobile && !mobileToolActive}\n >\n <slot name=\"tools\" />\n </div>\n <div\n class=\"shell-app__content\"\n aria-hidden={fullscreen || mobileStageBlocked ? 'true' : undefined}\n inert={fullscreen || mobileStageBlocked ? true : undefined}\n >\n <slot />\n </div>\n <div\n class=\"shell-app__mobile-sheet-nav\"\n hidden={!mobile || !this.mobileSheetNavOpen}\n aria-hidden={\n mobile && this.mobileSheetNavOpen ? undefined : 'true'\n }\n inert={mobile && this.mobileSheetNavOpen ? undefined : true}\n >\n <slot name=\"mobile-sheet-nav\" />\n </div>\n <div class=\"shell-app__mobile-bar-nav\" hidden={!mobile}>\n <slot name=\"mobile-bar-nav\" />\n </div>\n </div>\n </div>\n </Host>\n );\n }\n\n render() {\n const chromeActive = this.chromeLayerActive();\n const mobile = this.resolvedMode === 'mobile';\n const mobileToolActive = mobile && this.effectiveMobileDestination !== 'area';\n const mobileStageBlocked =\n mobile && (mobileToolActive || this.effectiveMobileSheetNavOpen);\n const fullscreen = !mobile && this.toolsFullscreen;\n const shellCls: Record<string, boolean> = {\n 'shell-app': true,\n 'shell-app--gradient': chromeActive,\n [`shell-app--${this.navStyle}`]: true,\n [`shell-app--${this.resolvedMode}`]: true,\n 'shell-app--tools-fullscreen': fullscreen,\n 'shell-app--mobile-tool-active': mobileToolActive,\n 'shell-app--mobile-sheet-nav-open':\n mobile && this.effectiveMobileSheetNavOpen,\n 'shell-app--managed': this.managed,\n 'shell-app--slotted': !this.managed,\n };\n\n if (!this.managed) {\n return this.renderSlottedShell(\n shellCls,\n mobile,\n mobileToolActive,\n mobileStageBlocked,\n fullscreen\n );\n }\n\n return (\n <Host class={shellCls} responsive-mode={this.resolvedMode}>\n <div class=\"shell-app__row\">\n <div class=\"shell-app__chrome\" aria-hidden=\"true\" />\n <div class=\"shell-app__panel\" aria-hidden={fullscreen ? 'true' : undefined} inert={fullscreen ? true : undefined}>\n {this.renderManagedPanelNav()}\n </div>\n <div class=\"shell-app__main\">\n <div class=\"shell-app__bar\" aria-hidden={fullscreen ? 'true' : undefined} inert={fullscreen ? true : undefined}>\n {this.renderManagedBarNav()}\n </div>\n <div\n class=\"shell-app__tools\"\n aria-hidden={\n mobile && (!mobileToolActive || this.effectiveMobileSheetNavOpen)\n ? 'true'\n : undefined\n }\n inert={\n mobile && (!mobileToolActive || this.effectiveMobileSheetNavOpen)\n ? true\n : undefined\n }\n hidden={mobile && !mobileToolActive}\n >\n {this.renderManagedTools()}\n </div>\n <div\n class=\"shell-app__content\"\n aria-hidden={fullscreen || mobileStageBlocked ? 'true' : undefined}\n inert={fullscreen || mobileStageBlocked ? true : undefined}\n >\n {this.renderManagedPage()}\n </div>\n <div\n class=\"shell-app__mobile-sheet-nav\"\n hidden={!mobile || !this.effectiveMobileSheetNavOpen}\n aria-hidden={\n mobile && this.effectiveMobileSheetNavOpen ? undefined : 'true'\n }\n inert={mobile && this.effectiveMobileSheetNavOpen ? undefined : true}\n >\n {this.renderManagedMobileSheetNav()}\n </div>\n <div class=\"shell-app__mobile-bar-nav\" hidden={!mobile}>\n {this.renderManagedMobileBarNav()}\n </div>\n </div>\n </div>\n </Host>\n );\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1,2 +1,2 @@
1
- import{p as e,H as s,h as t,a as i,t as a}from"./index.js";import{r as h}from"./p-BJMRBHKW.js";function n(e,s,t){if(e!=="auto")return e;if(s==="constrained")return"constrained";if(s==="compact"||!t)return"compact";return"expanded"}const l=()=>`.sc-ds-shell-page-h{display:block;position:relative;min-width:0;min-height:100%;box-sizing:border-box;background:var(--color-background-primary)}.shell-page__scroll-sentinel.sc-ds-shell-page{position:absolute;inset-block-start:var(--ds-shell-page-header-travel, 0);inset-inline-start:0;width:var(--dimension-stroke-width-012);height:var(--dimension-stroke-width-012);pointer-events:none}.shell-page__sticky-header.sc-ds-shell-page{position:sticky;inset-block-start:var(--ds-shell-page-sticky-offset, 0);z-index:var(--dimension-z-index-raised);min-width:0;background:var(--color-background-primary);overflow:visible;overflow-anchor:none}.shell-page__desktop-header.sc-ds-shell-page-s>ds-bar-title,.shell-page__desktop-header .sc-ds-shell-page-s>ds-bar-title,.shell-page__desktop-header.sc-ds-shell-page-s>ds-bar-workflow,.shell-page__desktop-header .sc-ds-shell-page-s>ds-bar-workflow,.shell-page__mobile-header.sc-ds-shell-page-s>ds-mobile-header,.shell-page__mobile-header .sc-ds-shell-page-s>ds-mobile-header{display:block;min-width:0}.shell-page__desktop-header[hidden].sc-ds-shell-page,.shell-page__mobile-header[hidden].sc-ds-shell-page{display:none}.shell-page-host--mobile.sc-ds-shell-page-h .shell-page__scroll-sentinel.sc-ds-shell-page,.shell-page-host--mobile.sc-ds-shell-page-h .shell-page__flow-spacer.sc-ds-shell-page{display:none}.shell-page__flow-spacer.sc-ds-shell-page{height:var(--ds-shell-page-flow-spacer, 0);background:var(--color-background-primary)}.shell-page__content.sc-ds-shell-page{min-width:0;box-sizing:border-box;background:var(--color-background-primary)}.shell-page-host--inset-default.sc-ds-shell-page-h .shell-page__content.sc-ds-shell-page{padding:var(--dimension-space-400) var(--dimension-space-400) var(--dimension-space-800)}.shell-page-host--inset-default[responsive-mode='tablet'].sc-ds-shell-page-h .shell-page__content.sc-ds-shell-page,.shell-page-host--inset-default[responsive-mode='mobile'].sc-ds-shell-page-h .shell-page__content.sc-ds-shell-page{padding:var(--dimension-space-200) var(--dimension-space-200) var(--dimension-space-800)}.shell-page-host--inset-none.sc-ds-shell-page-h .shell-page__content.sc-ds-shell-page{padding:0}`;const r=e(class e extends s{constructor(e){super();if(e!==false){this.__registerHost()}this.headerPresentation="auto";this.contentInset="default";this.responsiveMode="desktop";this.pageTopVisible=true;this.sentinelEl=null;this.spacerEl=null;this.stickyHeaderEl=null;this.headerEl=null;this.expandedHeaderHeight=0;this.headerTravel=0;this.expandedGeometryFrozen=false;this.headerResizeObserver=null;this.headerMutationObserver=null;this.headerRevealFrame=null;this.headerGeometryFrame=null;this.scrollRoot=null;this.handleScroll=()=>{if(!this.sentinelEl||!this.scrollRoot)return;const e=this.scrollRoot===window?0:this.scrollRoot.getBoundingClientRect().top;this.syncHeaderDividerInset(e);const s=this.sentinelEl.getBoundingClientRect().top>=e;if(!s&&this.pageTopVisible&&this.headerEl?.classList.contains(this.variantClass("expanded"))){this.captureExpandedHeaderGeometry(this.headerEl);this.expandedGeometryFrozen=true}if(s&&this.expandedGeometryFrozen&&this.el.getBoundingClientRect().top>=e){this.expandedGeometryFrozen=false;if(this.headerEl?.classList.contains(this.variantClass("expanded"))){this.captureExpandedHeaderGeometry(this.headerEl)}}this.pageTopVisible=s};this.handleHeaderSlotChange=e=>{if(this.responsiveMode==="mobile")return;const s=e.target;const t=s.assignedElements().find((e=>e.tagName.toLowerCase()==="ds-bar-title"));this.observeHeader(t??null)}}handleHeaderContractChange(){this.syncHeaderVariant(true)}handleResponsiveModeChange(){this.observeHeader(this.responsiveMode==="mobile"?null:this.findHeader())}componentDidLoad(){this.observeHeader(this.responsiveMode==="mobile"?null:this.findHeader());this.connectScrollRoot()}componentDidRender(){this.syncHeaderVariant()}disconnectedCallback(){this.headerResizeObserver?.disconnect();this.headerResizeObserver=null;this.headerMutationObserver?.disconnect();this.headerMutationObserver=null;this.cancelHeaderReveal();this.cancelHeaderGeometrySync();this.headerEl?.style.removeProperty("--ds-bar-title-divider-inset");this.scrollRoot?.removeEventListener("scroll",this.handleScroll);this.scrollRoot=null}get effectiveVariant(){return n(this.headerPresentation,this.headerCapacity??"roomy",this.pageTopVisible)}get headerContractResolved(){return this.headerPresentation!=="auto"||this.headerCapacity!==undefined}get isScrollCompacted(){return this.headerPresentation==="auto"&&this.headerCapacity==="roomy"&&!this.pageTopVisible}composedParent(e){return e.assignedSlot?.parentElement??e.parentElement}findScrollRoot(){let e=this.composedParent(this.el);while(e&&e!==document.documentElement){const s=getComputedStyle(e).overflowY;if(s==="auto"||s==="scroll"||s==="overlay"){return e}e=this.composedParent(e)}return window}connectScrollRoot(){const e=this.findScrollRoot();if(e===this.scrollRoot)return;this.scrollRoot?.removeEventListener("scroll",this.handleScroll);this.scrollRoot=e;this.scrollRoot.addEventListener("scroll",this.handleScroll,{passive:true});this.handleScroll()}findHeader(){return this.el.querySelector("ds-bar-title")}get compactHeaderHeight(){return h("--dimension-size-600",0)}syncHeaderDividerInset(e){const s=this.headerEl;if(!s)return;const t=this.headerPresentation==="auto"&&this.headerCapacity==="roomy";const i=h("--dimension-space-400",0);if(!t||!this.sentinelEl||!this.scrollRoot||this.headerTravel<=0||i<=0){s.style.removeProperty("--ds-bar-title-divider-inset");return}const a=e??(this.scrollRoot===window?0:this.scrollRoot.getBoundingClientRect().top);const n=this.sentinelEl.getBoundingClientRect().top-a;const l=Math.min(1,Math.max(0,1-n/this.headerTravel));s.style.setProperty("--ds-bar-title-divider-inset",`${i*(1-l)}px`)}setHeaderTravel(e){const s=Math.max(0,e);if(Math.abs(s-this.headerTravel)<.5)return;this.headerTravel=s;this.el.style.setProperty("--ds-shell-page-header-travel",`${s}px`);this.handleScroll()}measureHeaderTravel(e){const s=e.querySelector("[data-shell-page-header-anchor]");const t=this.compactHeaderHeight;if(!s||t<=0)return;const i=e.getBoundingClientRect();const a=s.getBoundingClientRect();if(i.height<=0||a.height<=0)return;const h=a.top-i.top;const n=Math.max(0,(t-a.height)/2);this.setHeaderTravel(h-n)}captureExpandedHeaderGeometry(e){this.expandedHeaderHeight=e.getBoundingClientRect().height;this.measureHeaderTravel(e)}setSpacerHeight(e){if(!this.spacerEl)return;this.spacerEl.style.setProperty("--ds-shell-page-flow-spacer",`${Math.max(0,e)}px`)}variantClass(e){return`bar-title-host--${e}`}setStickyHeaderOffset(e){this.stickyHeaderEl?.style.setProperty("--ds-shell-page-sticky-offset",e==="expanded"&&this.headerPresentation==="auto"&&this.headerCapacity==="roomy"?`${-this.headerTravel}px`:"0px")}syncRenderedHeaderGeometry(e){const s=this.effectiveVariant;if(!e.classList.contains(this.variantClass(s)))return;this.setSpacerHeight(this.isScrollCompacted?this.expandedHeaderHeight-this.compactHeaderHeight:0);this.setStickyHeaderOffset(s);if(s==="expanded"&&!this.expandedGeometryFrozen){this.captureExpandedHeaderGeometry(e);this.setStickyHeaderOffset(s)}}cancelHeaderGeometrySync(){if(this.headerGeometryFrame!==null)cancelAnimationFrame(this.headerGeometryFrame);this.headerGeometryFrame=null}scheduleHeaderGeometrySync(s){this.cancelHeaderGeometrySync();let t=e.MAX_HEADER_GEOMETRY_FRAMES;let i=0;const a=()=>{if(this.headerEl!==s)return;t-=1;i+=1;this.connectScrollRoot();this.syncRenderedHeaderGeometry(s);const e=this.effectiveVariant!=="expanded"||this.expandedHeaderHeight>0&&this.headerTravel>0;if(e&&i>=2||t<=0){this.headerGeometryFrame=null;return}this.headerGeometryFrame=requestAnimationFrame(a)};this.headerGeometryFrame=requestAnimationFrame(a)}cancelHeaderReveal(){if(this.headerRevealFrame!==null)cancelAnimationFrame(this.headerRevealFrame);this.headerRevealFrame=null;this.headerEl?.removeAttribute("data-shell-page-syncing")}revealHeaderWhenSynced(s,t){let i=e.MAX_HEADER_REVEAL_FRAMES;const a=()=>{if(this.headerEl!==s){s.removeAttribute("data-shell-page-syncing");return}i-=1;if(s.classList.contains(this.variantClass(t))){s.removeAttribute("data-shell-page-syncing");this.headerRevealFrame=null;return}if(i<=0){this.headerRevealFrame=null;return}this.headerRevealFrame=requestAnimationFrame(a)};this.headerRevealFrame=requestAnimationFrame(a)}syncHeaderVariant(e=false){const s=this.headerEl;if(!s)return;this.syncHeaderDividerInset();if(!this.headerContractResolved){this.cancelHeaderReveal();s.setAttribute("data-shell-page-syncing","");return}const t=this.effectiveVariant;const i=!s.classList.contains(this.variantClass(t));if(!i)this.syncRenderedHeaderGeometry(s);if(e){this.cancelHeaderReveal();s.setAttribute("data-shell-page-syncing","")}if(s.variant!==t)s.variant=t;if(e){this.revealHeaderWhenSynced(s,t)}}observeHeader(e){this.cancelHeaderReveal();this.cancelHeaderGeometrySync();this.headerResizeObserver?.disconnect();this.headerResizeObserver=null;this.headerMutationObserver?.disconnect();this.headerMutationObserver=null;this.headerEl?.style.removeProperty("--ds-bar-title-divider-inset");this.headerEl=e;this.expandedHeaderHeight=0;this.expandedGeometryFrozen=false;this.setHeaderTravel(0);this.setSpacerHeight(0);this.stickyHeaderEl?.style.setProperty("--ds-shell-page-sticky-offset","0px");if(!e)return;if(e.classList.contains(this.variantClass("expanded"))){this.captureExpandedHeaderGeometry(e)}if(typeof ResizeObserver!=="undefined"){this.headerResizeObserver=new ResizeObserver((()=>{this.syncRenderedHeaderGeometry(e)}));this.headerResizeObserver.observe(e)}if(typeof MutationObserver!=="undefined"){this.headerMutationObserver=new MutationObserver((()=>{this.syncRenderedHeaderGeometry(e)}));this.headerMutationObserver.observe(e,{attributes:true,attributeFilter:["class"]})}this.syncHeaderVariant(true);this.scheduleHeaderGeometrySync(e)}render(){const e=this.responsiveMode==="mobile";return t(i,{key:"e78de902ef1800df25420a1651879433fa1812c2",role:"main",class:{"shell-page-host--inset-default":this.contentInset==="default","shell-page-host--inset-none":this.contentInset==="none","shell-page-host--mobile":e,[`shell-page-host--header-${this.effectiveVariant}`]:true}},t("div",{key:"1e18afcc001851231833380b6c89a712a3ff0be7",ref:e=>{this.sentinelEl=e??null},class:"shell-page__scroll-sentinel","aria-hidden":"true"}),t("div",{key:"4477270ee94231623060eab14372ef133b13e7d1",ref:e=>{this.stickyHeaderEl=e??null},class:"shell-page__sticky-header"},t("div",{key:"474e4abae3121d0b3fa9d732827817b35d227f8b",class:"shell-page__desktop-header",hidden:e,"aria-hidden":e?"true":undefined,inert:e?true:undefined},t("slot",{key:"ba7257356edfb8f75088e1923f6c1857e5637937",name:"header",onSlotchange:this.handleHeaderSlotChange})),t("div",{key:"3389d5eff199ad917c1518ecb658d28a567af0b5",class:"shell-page__mobile-header",hidden:!e,"aria-hidden":!e?"true":undefined,inert:!e?true:undefined},t("slot",{key:"958426ac6d7b0b027531cbb068bdc2308e10f26b",name:"mobile-header"}))),t("div",{key:"7a6c92816aa532f7edf76da9d75496e9013467cd",ref:e=>{this.spacerEl=e??null},class:"shell-page__flow-spacer","aria-hidden":"true"}),t("div",{key:"579758454829db63e97ba776c44ab49b2fa74665",class:"shell-page__content"},t("slot",{key:"e7a365f7ccff71c5d380d05669a190c92936078e"})))}get el(){return this}static get watchers(){return{headerCapacity:[{handleHeaderContractChange:0}],headerPresentation:[{handleHeaderContractChange:0}],responsiveMode:[{handleResponsiveModeChange:0}]}}static get style(){return l()}},[262,"ds-shell-page",{headerPresentation:[1,"header-presentation"],headerCapacity:[1,"header-capacity"],contentInset:[1,"content-inset"],responsiveMode:[513,"responsive-mode"],pageTopVisible:[32]},undefined,{headerCapacity:[{handleHeaderContractChange:0}],headerPresentation:[{handleHeaderContractChange:0}],responsiveMode:[{handleResponsiveModeChange:0}]}]);r.MAX_HEADER_REVEAL_FRAMES=12;r.MAX_HEADER_GEOMETRY_FRAMES=12;function d(){if(typeof customElements==="undefined"){return}const e=["ds-shell-page"];e.forEach((e=>{switch(e){case"ds-shell-page":if(!customElements.get(a(e))){customElements.define(a(e),r)}break}}))}d();const o=r;const c=d;export{o as DsShellPage,c as defineCustomElement};
1
+ import{S as s,d as o}from"./p-DEaszb15.js";const t=s;const a=o;export{t as DsShellPage,a as defineCustomElement};
2
2
  //# sourceMappingURL=ds-shell-page.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["resolveShellPageHeaderVariant","presentation","capacity","pageTopVisible","shellPageCss","ShellPage","__stencil_proxyCustomElement","HTMLElement","constructor","registerHost","this","headerPresentation","contentInset","responsiveMode","sentinelEl","spacerEl","stickyHeaderEl","headerEl","expandedHeaderHeight","headerTravel","expandedGeometryFrozen","headerResizeObserver","headerMutationObserver","headerRevealFrame","headerGeometryFrame","scrollRoot","handleScroll","rootTop","window","getBoundingClientRect","top","syncHeaderDividerInset","nextPageTopVisible","classList","contains","variantClass","captureExpandedHeaderGeometry","el","handleHeaderSlotChange","event","slot","target","header","assignedElements","find","element","tagName","toLowerCase","observeHeader","handleHeaderContractChange","syncHeaderVariant","handleResponsiveModeChange","findHeader","componentDidLoad","connectScrollRoot","componentDidRender","disconnectedCallback","disconnect","cancelHeaderReveal","cancelHeaderGeometrySync","style","removeProperty","removeEventListener","effectiveVariant","headerCapacity","headerContractResolved","undefined","isScrollCompacted","composedParent","assignedSlot","parentElement","findScrollRoot","ancestor","document","documentElement","overflow","getComputedStyle","overflowY","next","addEventListener","passive","querySelector","compactHeaderHeight","resolveCssLengthPx","ownsScrollTransition","expandedInset","scrollRootTop","remainingTravel","progress","Math","min","max","setProperty","setHeaderTravel","distance","abs","measureHeaderTravel","anchor","compactHeight","headerRect","anchorRect","height","expandedAnchorTop","compactAnchorTop","setSpacerHeight","variant","setStickyHeaderOffset","renderedVariant","syncRenderedHeaderGeometry","cancelAnimationFrame","scheduleHeaderGeometrySync","framesRemaining","MAX_HEADER_GEOMETRY_FRAMES","framesElapsed","sync","geometryReady","requestAnimationFrame","removeAttribute","revealHeaderWhenSynced","MAX_HEADER_REVEAL_FRAMES","reveal","concealUntilSynced","setAttribute","renderedVariantIsStale","ResizeObserver","observe","MutationObserver","attributes","attributeFilter","render","mobile","h","Host","key","role","class","ref","hidden","inert","name","onSlotchange"],"sources":["src/wc/components/ShellPage/shell-page-responsive.ts","src/wc/components/ShellPage/ShellPage.css?tag=ds-shell-page&encapsulation=scoped","src/wc/components/ShellPage/ShellPage.tsx"],"sourcesContent":["import type { ShellPageCapacity, ShellPageHeaderPresentation } from './shell-page-types';\nimport type { BarTitleVariant } from '../BarTitle/bar-title-types';\n\nexport function resolveShellPageHeaderVariant(\n presentation: ShellPageHeaderPresentation,\n capacity: ShellPageCapacity,\n pageTopVisible: boolean\n): BarTitleVariant {\n if (presentation !== 'auto') return presentation;\n if (capacity === 'constrained') return 'constrained';\n if (capacity === 'compact' || !pageTopVisible) return 'compact';\n return 'expanded';\n}\n",":host {\n display: block;\n position: relative;\n min-width: 0;\n min-height: 100%;\n box-sizing: border-box;\n background: var(--color-background-primary);\n}\n\n.shell-page__scroll-sentinel {\n position: absolute;\n inset-block-start: var(--ds-shell-page-header-travel, 0);\n inset-inline-start: 0;\n width: var(--dimension-stroke-width-012);\n height: var(--dimension-stroke-width-012);\n pointer-events: none;\n}\n\n.shell-page__sticky-header {\n position: sticky;\n inset-block-start: var(--ds-shell-page-sticky-offset, 0);\n z-index: var(--dimension-z-index-raised);\n min-width: 0;\n background: var(--color-background-primary);\n overflow: visible;\n overflow-anchor: none;\n}\n\n.shell-page__desktop-header ::slotted(ds-bar-title),\n.shell-page__desktop-header ::slotted(ds-bar-workflow),\n.shell-page__mobile-header ::slotted(ds-mobile-header) {\n display: block;\n min-width: 0;\n}\n\n.shell-page__desktop-header[hidden],\n.shell-page__mobile-header[hidden] {\n display: none;\n}\n\n:host(.shell-page-host--mobile) .shell-page__scroll-sentinel,\n:host(.shell-page-host--mobile) .shell-page__flow-spacer {\n display: none;\n}\n\n.shell-page__flow-spacer {\n height: var(--ds-shell-page-flow-spacer, 0);\n background: var(--color-background-primary);\n}\n\n.shell-page__content {\n min-width: 0;\n box-sizing: border-box;\n background: var(--color-background-primary);\n}\n\n:host(.shell-page-host--inset-default) .shell-page__content {\n padding: var(--dimension-space-400) var(--dimension-space-400) var(--dimension-space-800);\n}\n\n:host(.shell-page-host--inset-default[responsive-mode='tablet']) .shell-page__content,\n:host(.shell-page-host--inset-default[responsive-mode='mobile']) .shell-page__content {\n padding: var(--dimension-space-200) var(--dimension-space-200) var(--dimension-space-800);\n}\n\n:host(.shell-page-host--inset-none) .shell-page__content {\n padding: 0;\n}\n","import { Component, Element, h, Host, Prop, State, Watch } from '@stencil/core';\nimport type { ShellResponsiveMode } from '../../shell/shell-responsive';\nimport { resolveCssLengthPx } from '../../utils/resolve-css-length-px';\nimport type { BarTitleVariant } from '../BarTitle/bar-title-types';\nimport { resolveShellPageHeaderVariant } from './shell-page-responsive';\nimport type {\n ShellPageCapacity,\n ShellPageContentInset,\n ShellPageHeaderPresentation,\n} from './shell-page-types';\n\ntype BarTitleElement = HTMLElement & { variant: BarTitleVariant };\n\n@Component({\n tag: 'ds-shell-page',\n styleUrl: 'ShellPage.css',\n scoped: true,\n})\nexport class ShellPage {\n private static readonly MAX_HEADER_REVEAL_FRAMES = 12;\n private static readonly MAX_HEADER_GEOMETRY_FRAMES = 12;\n\n @Element() el!: HTMLElement;\n\n /** Automatic capacity/scroll behavior, or an explicit header variant override. */\n @Prop() headerPresentation: ShellPageHeaderPresentation = 'auto';\n\n /** Available page-header capacity supplied by the owning application shell. */\n @Prop() headerCapacity?: ShellPageCapacity;\n\n /** Standard page gutters, or no inset for full-bleed page content. */\n @Prop() contentInset: ShellPageContentInset = 'default';\n\n /** Explicit shell breakpoint presentation. Mobile uses the dedicated mobile-header slot. */\n @Prop({ attribute: 'responsive-mode', reflect: true })\n responsiveMode: ShellResponsiveMode = 'desktop';\n\n @State() private pageTopVisible = true;\n\n private sentinelEl: HTMLElement | null = null;\n private spacerEl: HTMLElement | null = null;\n private stickyHeaderEl: HTMLElement | null = null;\n private headerEl: BarTitleElement | null = null;\n private expandedHeaderHeight = 0;\n private headerTravel = 0;\n private expandedGeometryFrozen = false;\n private headerResizeObserver: ResizeObserver | null = null;\n private headerMutationObserver: MutationObserver | null = null;\n private headerRevealFrame: number | null = null;\n private headerGeometryFrame: number | null = null;\n private scrollRoot: HTMLElement | Window | null = null;\n\n @Watch('headerCapacity')\n @Watch('headerPresentation')\n handleHeaderContractChange() {\n this.syncHeaderVariant(true);\n }\n\n @Watch('responsiveMode')\n handleResponsiveModeChange() {\n this.observeHeader(this.responsiveMode === 'mobile' ? null : this.findHeader());\n }\n\n componentDidLoad() {\n this.observeHeader(this.responsiveMode === 'mobile' ? null : this.findHeader());\n this.connectScrollRoot();\n }\n\n componentDidRender() {\n this.syncHeaderVariant();\n }\n\n disconnectedCallback() {\n this.headerResizeObserver?.disconnect();\n this.headerResizeObserver = null;\n this.headerMutationObserver?.disconnect();\n this.headerMutationObserver = null;\n this.cancelHeaderReveal();\n this.cancelHeaderGeometrySync();\n this.headerEl?.style.removeProperty('--ds-bar-title-divider-inset');\n this.scrollRoot?.removeEventListener('scroll', this.handleScroll);\n this.scrollRoot = null;\n }\n\n private get effectiveVariant(): BarTitleVariant {\n return resolveShellPageHeaderVariant(\n this.headerPresentation,\n this.headerCapacity ?? 'roomy',\n this.pageTopVisible\n );\n }\n\n private get headerContractResolved(): boolean {\n return this.headerPresentation !== 'auto' || this.headerCapacity !== undefined;\n }\n\n private get isScrollCompacted(): boolean {\n return (\n this.headerPresentation === 'auto' && this.headerCapacity === 'roomy' && !this.pageTopVisible\n );\n }\n\n private composedParent(element: Element): Element | null {\n return (element as HTMLElement).assignedSlot?.parentElement ?? element.parentElement;\n }\n\n private findScrollRoot(): HTMLElement | Window {\n let ancestor = this.composedParent(this.el);\n while (ancestor && ancestor !== document.documentElement) {\n const overflow = getComputedStyle(ancestor).overflowY;\n if (overflow === 'auto' || overflow === 'scroll' || overflow === 'overlay') {\n return ancestor as HTMLElement;\n }\n ancestor = this.composedParent(ancestor);\n }\n return window;\n }\n\n private connectScrollRoot() {\n const next = this.findScrollRoot();\n if (next === this.scrollRoot) return;\n this.scrollRoot?.removeEventListener('scroll', this.handleScroll);\n this.scrollRoot = next;\n this.scrollRoot.addEventListener('scroll', this.handleScroll, { passive: true });\n this.handleScroll();\n }\n\n private handleScroll = () => {\n if (!this.sentinelEl || !this.scrollRoot) return;\n const rootTop =\n this.scrollRoot === window ? 0 : (this.scrollRoot as HTMLElement).getBoundingClientRect().top;\n this.syncHeaderDividerInset(rootTop);\n const nextPageTopVisible = this.sentinelEl.getBoundingClientRect().top >= rootTop;\n if (\n !nextPageTopVisible &&\n this.pageTopVisible &&\n this.headerEl?.classList.contains(this.variantClass('expanded'))\n ) {\n this.captureExpandedHeaderGeometry(this.headerEl);\n this.expandedGeometryFrozen = true;\n }\n if (\n nextPageTopVisible &&\n this.expandedGeometryFrozen &&\n this.el.getBoundingClientRect().top >= rootTop\n ) {\n this.expandedGeometryFrozen = false;\n if (this.headerEl?.classList.contains(this.variantClass('expanded'))) {\n this.captureExpandedHeaderGeometry(this.headerEl);\n }\n }\n this.pageTopVisible = nextPageTopVisible;\n };\n\n private findHeader(): BarTitleElement | null {\n return this.el.querySelector<BarTitleElement>('ds-bar-title');\n }\n\n private get compactHeaderHeight(): number {\n return resolveCssLengthPx('--dimension-size-600', 0);\n }\n\n private syncHeaderDividerInset(rootTop?: number) {\n const header = this.headerEl;\n if (!header) return;\n\n const ownsScrollTransition =\n this.headerPresentation === 'auto' && this.headerCapacity === 'roomy';\n const expandedInset = resolveCssLengthPx('--dimension-space-400', 0);\n if (\n !ownsScrollTransition ||\n !this.sentinelEl ||\n !this.scrollRoot ||\n this.headerTravel <= 0 ||\n expandedInset <= 0\n ) {\n header.style.removeProperty('--ds-bar-title-divider-inset');\n return;\n }\n\n const scrollRootTop =\n rootTop ??\n (this.scrollRoot === window\n ? 0\n : (this.scrollRoot as HTMLElement).getBoundingClientRect().top);\n const remainingTravel = this.sentinelEl.getBoundingClientRect().top - scrollRootTop;\n const progress = Math.min(1, Math.max(0, 1 - remainingTravel / this.headerTravel));\n header.style.setProperty('--ds-bar-title-divider-inset', `${expandedInset * (1 - progress)}px`);\n }\n\n private setHeaderTravel(distance: number) {\n const next = Math.max(0, distance);\n if (Math.abs(next - this.headerTravel) < 0.5) return;\n this.headerTravel = next;\n this.el.style.setProperty('--ds-shell-page-header-travel', `${next}px`);\n this.handleScroll();\n }\n\n private measureHeaderTravel(header: BarTitleElement) {\n const anchor = header.querySelector<HTMLElement>('[data-shell-page-header-anchor]');\n const compactHeight = this.compactHeaderHeight;\n if (!anchor || compactHeight <= 0) return;\n\n const headerRect = header.getBoundingClientRect();\n const anchorRect = anchor.getBoundingClientRect();\n if (headerRect.height <= 0 || anchorRect.height <= 0) return;\n\n const expandedAnchorTop = anchorRect.top - headerRect.top;\n const compactAnchorTop = Math.max(0, (compactHeight - anchorRect.height) / 2);\n this.setHeaderTravel(expandedAnchorTop - compactAnchorTop);\n }\n\n private captureExpandedHeaderGeometry(header: BarTitleElement) {\n this.expandedHeaderHeight = header.getBoundingClientRect().height;\n this.measureHeaderTravel(header);\n }\n\n private setSpacerHeight(height: number) {\n if (!this.spacerEl) return;\n this.spacerEl.style.setProperty('--ds-shell-page-flow-spacer', `${Math.max(0, height)}px`);\n }\n\n private variantClass(variant: BarTitleVariant): string {\n return `bar-title-host--${variant}`;\n }\n\n private setStickyHeaderOffset(renderedVariant: BarTitleVariant) {\n this.stickyHeaderEl?.style.setProperty(\n '--ds-shell-page-sticky-offset',\n renderedVariant === 'expanded' &&\n this.headerPresentation === 'auto' &&\n this.headerCapacity === 'roomy'\n ? `${-this.headerTravel}px`\n : '0px'\n );\n }\n\n private syncRenderedHeaderGeometry(header: BarTitleElement) {\n const renderedVariant = this.effectiveVariant;\n if (!header.classList.contains(this.variantClass(renderedVariant))) return;\n\n // Update both flow-preservation pieces before reading layout. Otherwise a\n // reverse compact → expanded render can briefly contain the tall header and\n // the compact spacer together, giving browser scroll anchoring a transient\n // height change to compensate.\n this.setSpacerHeight(\n this.isScrollCompacted ? this.expandedHeaderHeight - this.compactHeaderHeight : 0\n );\n this.setStickyHeaderOffset(renderedVariant);\n\n if (renderedVariant === 'expanded' && !this.expandedGeometryFrozen) {\n this.captureExpandedHeaderGeometry(header);\n this.setStickyHeaderOffset(renderedVariant);\n }\n }\n\n private cancelHeaderGeometrySync() {\n if (this.headerGeometryFrame !== null) cancelAnimationFrame(this.headerGeometryFrame);\n this.headerGeometryFrame = null;\n }\n\n private scheduleHeaderGeometrySync(header: BarTitleElement) {\n this.cancelHeaderGeometrySync();\n let framesRemaining = ShellPage.MAX_HEADER_GEOMETRY_FRAMES;\n let framesElapsed = 0;\n const sync = () => {\n if (this.headerEl !== header) return;\n framesRemaining -= 1;\n framesElapsed += 1;\n // In WebKit a child's componentDidLoad can precede its assignment into\n // the parent's rendered slot. Revalidate after ShellApp has had a frame\n // to expose the actual content scroller.\n this.connectScrollRoot();\n this.syncRenderedHeaderGeometry(header);\n const geometryReady =\n this.effectiveVariant !== 'expanded' ||\n (this.expandedHeaderHeight > 0 && this.headerTravel > 0);\n if ((geometryReady && framesElapsed >= 2) || framesRemaining <= 0) {\n this.headerGeometryFrame = null;\n return;\n }\n this.headerGeometryFrame = requestAnimationFrame(sync);\n };\n this.headerGeometryFrame = requestAnimationFrame(sync);\n }\n\n private cancelHeaderReveal() {\n if (this.headerRevealFrame !== null) cancelAnimationFrame(this.headerRevealFrame);\n this.headerRevealFrame = null;\n this.headerEl?.removeAttribute('data-shell-page-syncing');\n }\n\n private revealHeaderWhenSynced(header: BarTitleElement, variant: BarTitleVariant) {\n // Stencil normally re-renders within a frame or two of a prop change. Stop\n // polling at the cap, but fail closed: a stale variant must never paint.\n let framesRemaining = ShellPage.MAX_HEADER_REVEAL_FRAMES;\n const reveal = () => {\n if (this.headerEl !== header) {\n header.removeAttribute('data-shell-page-syncing');\n return;\n }\n framesRemaining -= 1;\n if (header.classList.contains(this.variantClass(variant))) {\n header.removeAttribute('data-shell-page-syncing');\n this.headerRevealFrame = null;\n return;\n }\n if (framesRemaining <= 0) {\n this.headerRevealFrame = null;\n return;\n }\n this.headerRevealFrame = requestAnimationFrame(reveal);\n };\n this.headerRevealFrame = requestAnimationFrame(reveal);\n }\n\n private syncHeaderVariant(concealUntilSynced = false) {\n const header = this.headerEl;\n if (!header) return;\n\n this.syncHeaderDividerInset();\n if (!this.headerContractResolved) {\n this.cancelHeaderReveal();\n header.setAttribute('data-shell-page-syncing', '');\n return;\n }\n\n const next = this.effectiveVariant;\n const renderedVariantIsStale = !header.classList.contains(this.variantClass(next));\n if (!renderedVariantIsStale) this.syncRenderedHeaderGeometry(header);\n if (concealUntilSynced) {\n this.cancelHeaderReveal();\n header.setAttribute('data-shell-page-syncing', '');\n }\n if (header.variant !== next) header.variant = next;\n if (concealUntilSynced) {\n this.revealHeaderWhenSynced(header, next);\n }\n }\n\n private observeHeader(header: BarTitleElement | null) {\n this.cancelHeaderReveal();\n this.cancelHeaderGeometrySync();\n this.headerResizeObserver?.disconnect();\n this.headerResizeObserver = null;\n this.headerMutationObserver?.disconnect();\n this.headerMutationObserver = null;\n this.headerEl?.style.removeProperty('--ds-bar-title-divider-inset');\n this.headerEl = header;\n this.expandedHeaderHeight = 0;\n this.expandedGeometryFrozen = false;\n this.setHeaderTravel(0);\n this.setSpacerHeight(0);\n this.stickyHeaderEl?.style.setProperty('--ds-shell-page-sticky-offset', '0px');\n\n if (!header) return;\n if (header.classList.contains(this.variantClass('expanded'))) {\n this.captureExpandedHeaderGeometry(header);\n }\n if (typeof ResizeObserver !== 'undefined') {\n this.headerResizeObserver = new ResizeObserver(() => {\n this.syncRenderedHeaderGeometry(header);\n });\n this.headerResizeObserver.observe(header);\n }\n if (typeof MutationObserver !== 'undefined') {\n this.headerMutationObserver = new MutationObserver(() => {\n this.syncRenderedHeaderGeometry(header);\n });\n this.headerMutationObserver.observe(header, {\n attributes: true,\n attributeFilter: ['class'],\n });\n }\n this.syncHeaderVariant(true);\n this.scheduleHeaderGeometrySync(header);\n }\n\n private handleHeaderSlotChange = (event: Event) => {\n if (this.responsiveMode === 'mobile') return;\n const slot = event.target as HTMLSlotElement;\n const header = slot\n .assignedElements()\n .find(element => element.tagName.toLowerCase() === 'ds-bar-title');\n this.observeHeader((header as BarTitleElement | undefined) ?? null);\n };\n\n render() {\n const mobile = this.responsiveMode === 'mobile';\n return (\n <Host\n role=\"main\"\n class={{\n 'shell-page-host--inset-default': this.contentInset === 'default',\n 'shell-page-host--inset-none': this.contentInset === 'none',\n 'shell-page-host--mobile': mobile,\n [`shell-page-host--header-${this.effectiveVariant}`]: true,\n }}\n >\n <div\n ref={el => {\n this.sentinelEl = el ?? null;\n }}\n class=\"shell-page__scroll-sentinel\"\n aria-hidden=\"true\"\n />\n <div\n ref={el => {\n this.stickyHeaderEl = el ?? null;\n }}\n class=\"shell-page__sticky-header\"\n >\n <div\n class=\"shell-page__desktop-header\"\n hidden={mobile}\n aria-hidden={mobile ? 'true' : undefined}\n inert={mobile ? true : undefined}\n >\n <slot name=\"header\" onSlotchange={this.handleHeaderSlotChange} />\n </div>\n <div\n class=\"shell-page__mobile-header\"\n hidden={!mobile}\n aria-hidden={!mobile ? 'true' : undefined}\n inert={!mobile ? true : undefined}\n >\n <slot name=\"mobile-header\" />\n </div>\n </div>\n <div\n ref={el => {\n this.spacerEl = el ?? null;\n }}\n class=\"shell-page__flow-spacer\"\n aria-hidden=\"true\"\n />\n <div class=\"shell-page__content\">\n <slot />\n </div>\n </Host>\n );\n }\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":[],"sources":[],"mappings":"","ignoreList":[]}