@ds-mo/ui 12.8.0 → 13.0.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 (439) 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 +260 -1104
  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-legend.js +1 -1
  57. package/dist/components/ds-chart-legend.js.map +1 -1
  58. package/dist/components/ds-chart-line.js +1 -1
  59. package/dist/components/ds-chart-line.js.map +1 -1
  60. package/dist/components/ds-checkbox.js +1 -1
  61. package/dist/components/ds-chip.js +1 -1
  62. package/dist/components/ds-code-block.js +1 -1
  63. package/dist/components/ds-conversation-list-item.js +1 -1
  64. package/dist/components/ds-conversation-list-item.js.map +1 -1
  65. package/dist/components/ds-conversation-list-section.js +1 -1
  66. package/dist/components/ds-conversation-list.js +1 -1
  67. package/dist/components/ds-divider.js +1 -1
  68. package/dist/components/ds-empty-state.js +1 -1
  69. package/dist/components/ds-field.js +1 -1
  70. package/dist/components/ds-input.js +1 -1
  71. package/dist/components/ds-input.js.map +1 -1
  72. package/dist/components/ds-markdown.js +1 -1
  73. package/dist/components/ds-menu.js +1 -1
  74. package/dist/components/ds-message-bubble.js +1 -1
  75. package/dist/components/ds-message-composer.js +1 -1
  76. package/dist/components/ds-message-composer.js.map +1 -1
  77. package/dist/components/ds-message-scroller.js +1 -1
  78. package/dist/components/ds-message.js +1 -1
  79. package/dist/components/ds-mobile-bar-nav.js +1 -1
  80. package/dist/components/ds-mobile-bar-nav.js.map +1 -1
  81. package/dist/components/ds-mobile-header.js +1 -1
  82. package/dist/components/ds-mobile-section-switcher.js +1 -1
  83. package/dist/components/ds-mobile-sheet-nav.js +1 -1
  84. package/dist/components/ds-mobile-sheet-nav.js.map +1 -1
  85. package/dist/components/ds-modal.js +1 -1
  86. package/dist/components/ds-panel-nav.js +1 -1
  87. package/dist/components/ds-panel-nav.js.map +1 -1
  88. package/dist/components/ds-panel-sub-nav.js +1 -1
  89. package/dist/components/ds-panel-tool-header.js +1 -1
  90. package/dist/components/ds-panel-tool-search.js +1 -1
  91. package/dist/components/ds-panel-tools.js +1 -1
  92. package/dist/components/ds-radio.js +1 -1
  93. package/dist/components/ds-radio.js.map +1 -1
  94. package/dist/components/ds-scroll-overlay.js +1 -1
  95. package/dist/components/ds-select.js +1 -1
  96. package/dist/components/ds-select.js.map +1 -1
  97. package/dist/components/ds-shell-app.js +1 -1
  98. package/dist/components/ds-shell-app.js.map +1 -1
  99. package/dist/components/ds-shell-page.js +1 -1
  100. package/dist/components/ds-shell-page.js.map +1 -1
  101. package/dist/components/ds-shell-tools.js +1 -1
  102. package/dist/components/ds-shell-tools.js.map +1 -1
  103. package/dist/components/ds-skeleton.js +1 -1
  104. package/dist/components/ds-slider.js +1 -1
  105. package/dist/components/ds-slider.js.map +1 -1
  106. package/dist/components/ds-swatch-picker.js +1 -1
  107. package/dist/components/ds-switch.js +1 -1
  108. package/dist/components/ds-tab-group.js +1 -1
  109. package/dist/components/ds-tag.js +1 -1
  110. package/dist/components/ds-text.js +1 -1
  111. package/dist/components/ds-toast.js +1 -1
  112. package/dist/components/ds-tooltip-data-viz.js +1 -1
  113. package/dist/components/ds-tooltip.js +1 -1
  114. package/dist/components/ds-typing-indicator.js +1 -1
  115. package/dist/components/{p-DB9XJm2c.js → p-6qXDqCj_.js} +2 -2
  116. package/dist/components/{p-CPwpgUWT.js → p-Ay1AX7Ql.js} +2 -2
  117. package/dist/components/p-Ay1AX7Ql.js.map +1 -0
  118. package/dist/components/p-B-qDb_Zo.js +2 -0
  119. package/dist/components/p-B-qDb_Zo.js.map +1 -0
  120. package/dist/components/{p-DhLmoCe_.js → p-B1cbQ0SG.js} +2 -2
  121. package/dist/components/p-BBxcMVqk.js +2 -0
  122. package/dist/components/p-BBxcMVqk.js.map +1 -0
  123. package/dist/components/{p-BKOlvCGS.js → p-BUZXuod2.js} +2 -2
  124. package/dist/components/{p-Utr23NC-.js → p-BaUsq_VK.js} +2 -2
  125. package/dist/components/p-BbMJTilO.js +2 -0
  126. package/dist/components/p-BbMJTilO.js.map +1 -0
  127. package/dist/components/{p-BO5aqZcf.js → p-BcTYhmku.js} +2 -2
  128. package/dist/components/p-Bkv3UjZz.js +2 -0
  129. package/dist/components/p-Bkv3UjZz.js.map +1 -0
  130. package/dist/components/p-BnQXAbif.js +2 -0
  131. package/dist/components/p-BnQXAbif.js.map +1 -0
  132. package/dist/components/p-BnbbnuVC.js +2 -0
  133. package/dist/components/p-BnbbnuVC.js.map +1 -0
  134. package/dist/components/{p-BlHzmszE.js → p-BroVnDzE.js} +2 -2
  135. package/dist/components/{p-BFRMwl93.js → p-BsoqsbBh.js} +2 -2
  136. package/dist/components/p-BwT6B5Fi.js +2 -0
  137. package/dist/components/p-BwT6B5Fi.js.map +1 -0
  138. package/dist/components/p-BybqPD8K.js +2 -0
  139. package/dist/components/p-BybqPD8K.js.map +1 -0
  140. package/dist/components/p-C-vRkDyn.js +2 -0
  141. package/dist/components/p-C-vRkDyn.js.map +1 -0
  142. package/dist/components/p-C3ArcO50.js +2 -0
  143. package/dist/components/p-C3ArcO50.js.map +1 -0
  144. package/dist/components/p-C4uYvyq6.js +2 -0
  145. package/dist/components/p-C4uYvyq6.js.map +1 -0
  146. package/dist/components/{p-ukB-dPOK.js → p-CBazaRlE.js} +2 -2
  147. package/dist/components/{p-CNgPwd11.js → p-CHuh71-U.js} +2 -2
  148. package/dist/components/{p-D9u1_OEZ.js → p-CMWata9g.js} +2 -2
  149. package/dist/components/p-CS6CHlHK.js +2 -0
  150. package/dist/components/p-CS6CHlHK.js.map +1 -0
  151. package/dist/components/p-CTTnM7cE.js +2 -0
  152. package/dist/components/p-CTTnM7cE.js.map +1 -0
  153. package/dist/components/{p-CsX3ICz7.js → p-CWoXKe_h.js} +2 -2
  154. package/dist/components/p-CWoXKe_h.js.map +1 -0
  155. package/dist/components/p-CwwuSGER.js +2 -0
  156. package/dist/components/p-CwwuSGER.js.map +1 -0
  157. package/dist/components/p-D09HINr_.js +2 -0
  158. package/dist/components/p-D09HINr_.js.map +1 -0
  159. package/dist/components/p-D2xWcVv6.js +2 -0
  160. package/dist/components/p-D2xWcVv6.js.map +1 -0
  161. package/dist/components/p-DAW6G8Sl.js +2 -0
  162. package/dist/components/p-DAW6G8Sl.js.map +1 -0
  163. package/dist/components/p-DEaszb15.js +2 -0
  164. package/dist/components/p-DEaszb15.js.map +1 -0
  165. package/dist/components/{p-BgGP65Nn.js → p-DOUk4KoT.js} +1 -1
  166. package/dist/components/p-DOUk4KoT.js.map +1 -0
  167. package/dist/components/p-DbQr7Kwr.js +2 -0
  168. package/dist/components/p-DbQr7Kwr.js.map +1 -0
  169. package/dist/components/p-DdvEZyX4.js +2 -0
  170. package/dist/components/p-DdvEZyX4.js.map +1 -0
  171. package/dist/components/{p-38PfdMkF.js → p-DeQwkbT1.js} +2 -2
  172. package/dist/components/{p-Vdufoj7G.js → p-Df17mJqI.js} +2 -2
  173. package/dist/components/p-Dg1LBXJ2.js +2 -0
  174. package/dist/components/p-Dg1LBXJ2.js.map +1 -0
  175. package/dist/components/p-DsiCDzoF.js +2 -0
  176. package/dist/components/p-DsiCDzoF.js.map +1 -0
  177. package/dist/components/p-_DzUXA86.js +2 -0
  178. package/dist/components/p-_DzUXA86.js.map +1 -0
  179. package/dist/components/p-lyZNvRvO.js +2 -0
  180. package/dist/components/p-lyZNvRvO.js.map +1 -0
  181. package/dist/components/{p-69lHhJiX.js → p-ohsLFap_.js} +2 -2
  182. package/dist/components/{p-DjbTFy2B.js → p-ymtdhOU5.js} +1 -1
  183. package/dist/components/p-ymtdhOU5.js.map +1 -0
  184. package/dist/components/p-z5RIrXuX.js +2 -0
  185. package/dist/components/p-z5RIrXuX.js.map +1 -0
  186. package/dist/docs/components.json +1006 -2356
  187. package/dist/framework/angular.d.ts +0 -1
  188. package/dist/framework/angular.js +0 -1
  189. package/dist/lib/components/BarTitle/bar-title-types.d.ts +28 -0
  190. package/dist/lib/components/Breadcrumb/breadcrumb-types.d.ts +16 -0
  191. package/dist/lib/components/ButtonFilled/ButtonFilled.d.ts +83 -0
  192. package/dist/lib/components/MobileHeader/mobile-header-types.d.ts +4 -0
  193. package/dist/lib/components/PanelTools/panel-tools-types.d.ts +21 -7
  194. package/dist/lib/components/ShellApp/shell-app-types.d.ts +91 -0
  195. package/dist/lib/shell/index.d.ts +5 -13
  196. package/dist/lib/shell/index.js +87 -358
  197. package/dist/lib/shell/index.js.map +3 -3
  198. package/dist/lib/shell/shell-responsive.d.ts +2 -1
  199. package/dist/lib/utils/button-render.d.ts +17 -0
  200. package/dist/lib/utils/button-types.d.ts +10 -0
  201. package/dist/lib/utils/choice-list.d.ts +25 -0
  202. package/dist/lib/utils/control-press.d.ts +8 -0
  203. package/dist/lib/utils/form-association.d.ts +22 -0
  204. package/dist/lib/utils/index.d.ts +4 -0
  205. package/dist/lib/utils/index.js +63 -0
  206. package/dist/lib/utils/index.js.map +3 -3
  207. package/dist/lib/utils/required-validity.d.ts +1 -1
  208. package/dist/lib/utils/safe-url.d.ts +11 -0
  209. package/dist/mcp/cli.js +38 -10
  210. package/dist/mcp-data/registry/agent-source-list.json +1 -1
  211. package/dist/mcp-data/registry/attachment-list.json +1 -1
  212. package/dist/mcp-data/registry/bar-nav.json +3 -21
  213. package/dist/mcp-data/registry/breadcrumb.json +1 -1
  214. package/dist/mcp-data/registry/button-filled.json +4 -19
  215. package/dist/mcp-data/registry/button-unfilled.json +14 -11
  216. package/dist/mcp-data/registry/card-data-viz.json +241 -0
  217. package/dist/mcp-data/registry/card-overview.json +87 -16
  218. package/dist/mcp-data/registry/card-setting.json +2 -2
  219. package/dist/mcp-data/registry/chart-bar.json +66 -18
  220. package/dist/mcp-data/registry/chart-donut.json +5 -5
  221. package/dist/mcp-data/registry/chart-legend.json +7 -9
  222. package/dist/mcp-data/registry/chart-line.json +1 -2
  223. package/dist/mcp-data/registry/checkbox.json +2 -2
  224. package/dist/mcp-data/registry/conversation-list-item.json +1 -1
  225. package/dist/mcp-data/registry/field.json +2 -3
  226. package/dist/mcp-data/registry/input.json +1 -1
  227. package/dist/mcp-data/registry/markdown.json +1 -1
  228. package/dist/mcp-data/registry/menu.json +10 -21
  229. package/dist/mcp-data/registry/mobile-bar-nav.json +1 -1
  230. package/dist/mcp-data/registry/mobile-header.json +1 -37
  231. package/dist/mcp-data/registry/mobile-section-switcher.json +1 -19
  232. package/dist/mcp-data/registry/panel-nav.json +2 -2
  233. package/dist/mcp-data/registry/panel-tool-search.json +1 -1
  234. package/dist/mcp-data/registry/panel-tools.json +19 -55
  235. package/dist/mcp-data/registry/radio.json +1 -1
  236. package/dist/mcp-data/registry/registry.json +309 -1174
  237. package/dist/mcp-data/registry/select.json +59 -25
  238. package/dist/mcp-data/registry/shell-app.json +345 -20
  239. package/dist/mcp-data/registry/shell-page.json +1 -1
  240. package/dist/mcp-data/registry/shell-tools.json +12 -43
  241. package/dist/mcp-data/registry/slider.json +1 -1
  242. package/dist/mcp-data/registry/switch.json +1 -1
  243. package/dist/mcp-data/registry/text.json +2 -2
  244. package/dist/react/components.d.ts +1 -8
  245. package/dist/react/components.js +1 -8
  246. package/dist/react/ds-card-data-viz.d.ts +12 -0
  247. package/dist/react/ds-card-data-viz.js +12 -0
  248. package/dist/react/ds-menu.d.ts +1 -2
  249. package/dist/react/ds-menu.js +0 -1
  250. package/dist/react/ds-select.d.ts +2 -2
  251. package/dist/react/ds-shell-app.d.ts +24 -1
  252. package/dist/react/ds-shell-app.js +16 -1
  253. package/dist/types/components/AgentSourceList/AgentSourceList.d.ts +0 -1
  254. package/dist/types/components/BarNav/BarNav.d.ts +0 -2
  255. package/dist/types/components/BarNav/bar-nav-utils.d.ts +2 -4
  256. package/dist/types/components/ButtonFilled/ButtonFilled.d.ts +5 -11
  257. package/dist/types/components/ButtonUnfilled/ButtonUnfilled.d.ts +13 -10
  258. package/dist/types/components/CardDataViz/CardDataViz.d.ts +32 -0
  259. package/dist/types/components/CardDataViz/index.d.ts +2 -0
  260. package/dist/types/components/CardOverview/CardOverview.d.ts +25 -3
  261. package/dist/types/components/CardOverview/card-overview-controller.d.ts +16 -0
  262. package/dist/types/components/CardOverview/card-overview-types.d.ts +2 -0
  263. package/dist/types/components/CardOverview/index.d.ts +1 -1
  264. package/dist/types/components/ChartBar/ChartBar.d.ts +12 -1
  265. package/dist/types/components/ChartBar/index.d.ts +2 -1
  266. package/dist/types/components/Menu/Menu.d.ts +0 -5
  267. package/dist/types/components/Menu/menu-sections.d.ts +4 -0
  268. package/dist/types/components/Menu/menu-types.d.ts +2 -11
  269. package/dist/types/components/MobileHeader/MobileHeader.d.ts +0 -5
  270. package/dist/types/components/MobileSectionSwitcher/MobileSectionSwitcher.d.ts +0 -2
  271. package/dist/types/components/PanelTools/PanelTools.d.ts +0 -4
  272. package/dist/types/components/PanelTools/index.d.ts +1 -1
  273. package/dist/types/components/PanelTools/panel-tools-types.d.ts +21 -7
  274. package/dist/types/components/PanelTools/panel-tools-utils.d.ts +1 -1
  275. package/dist/types/components/Select/Select.d.ts +12 -4
  276. package/dist/types/components/Select/index.d.ts +1 -1
  277. package/dist/types/components/ShellApp/ShellApp.d.ts +98 -0
  278. package/dist/types/components/ShellApp/shell-app-types.d.ts +92 -0
  279. package/dist/types/components/ShellPage/ShellPage.d.ts +5 -0
  280. package/dist/types/components/ShellTools/ShellTools.d.ts +2 -2
  281. package/dist/types/components.d.ts +238 -895
  282. package/dist/types/shell/index.d.ts +5 -13
  283. package/dist/types/shell/shell-responsive.d.ts +2 -1
  284. package/dist/types/utils/anchored-position-controller.d.ts +9 -0
  285. package/dist/types/utils/button-render.d.ts +18 -0
  286. package/dist/types/utils/button-story-foundation.d.ts +9 -0
  287. package/dist/types/utils/button-types.d.ts +11 -0
  288. package/dist/types/utils/form-association.d.ts +23 -0
  289. package/dist/types/utils/index.d.ts +4 -0
  290. package/dist/types/utils/required-validity.d.ts +1 -1
  291. package/dist/types/utils/safe-url.d.ts +12 -0
  292. package/dist/types/utils/select-controller.d.ts +1 -1
  293. package/package.json +16 -8
  294. package/dist/.build-stamp +0 -1
  295. package/dist/angular/ds-card-data-viz-bar.d.ts +0 -18
  296. package/dist/angular/ds-card-data-viz-bar.js +0 -42
  297. package/dist/angular/ds-card-data-viz-donut.d.ts +0 -18
  298. package/dist/angular/ds-card-data-viz-line.d.ts +0 -18
  299. package/dist/angular/ds-card-data-viz-line.js +0 -42
  300. package/dist/angular/ds-card-shell-data-viz.d.ts +0 -12
  301. package/dist/angular/ds-card-shell-data-viz.js +0 -38
  302. package/dist/angular/ds-chart-bar-stacked.d.ts +0 -12
  303. package/dist/angular/ds-chart-bar-stacked.js +0 -38
  304. package/dist/angular/ds-select-multi.d.ts +0 -28
  305. package/dist/angular/ds-select-multi.js +0 -49
  306. package/dist/angular/ds-shell-gradient-picker.d.ts +0 -16
  307. package/dist/angular/ds-shell-gradient-picker.js +0 -42
  308. package/dist/angular/ds-shell-gradient-swatch.d.ts +0 -16
  309. package/dist/angular/ds-shell-gradient-swatch.js +0 -42
  310. package/dist/components/ds-card-data-viz-bar.d.ts +0 -11
  311. package/dist/components/ds-card-data-viz-bar.js +0 -2
  312. package/dist/components/ds-card-data-viz-bar.js.map +0 -1
  313. package/dist/components/ds-card-data-viz-donut.d.ts +0 -11
  314. package/dist/components/ds-card-data-viz-donut.js +0 -2
  315. package/dist/components/ds-card-data-viz-donut.js.map +0 -1
  316. package/dist/components/ds-card-data-viz-line.d.ts +0 -11
  317. package/dist/components/ds-card-data-viz-line.js +0 -2
  318. package/dist/components/ds-card-data-viz-line.js.map +0 -1
  319. package/dist/components/ds-card-shell-data-viz.d.ts +0 -11
  320. package/dist/components/ds-card-shell-data-viz.js +0 -2
  321. package/dist/components/ds-card-shell-data-viz.js.map +0 -1
  322. package/dist/components/ds-chart-bar-stacked.d.ts +0 -11
  323. package/dist/components/ds-chart-bar-stacked.js +0 -2
  324. package/dist/components/ds-chart-bar-stacked.js.map +0 -1
  325. package/dist/components/ds-select-multi.js +0 -2
  326. package/dist/components/ds-select-multi.js.map +0 -1
  327. package/dist/components/ds-shell-gradient-picker.d.ts +0 -11
  328. package/dist/components/ds-shell-gradient-picker.js +0 -2
  329. package/dist/components/ds-shell-gradient-picker.js.map +0 -1
  330. package/dist/components/ds-shell-gradient-swatch.d.ts +0 -11
  331. package/dist/components/ds-shell-gradient-swatch.js +0 -2
  332. package/dist/components/ds-shell-gradient-swatch.js.map +0 -1
  333. package/dist/components/p-2foAUsDN.js +0 -2
  334. package/dist/components/p-2foAUsDN.js.map +0 -1
  335. package/dist/components/p-B6NvVdeO.js +0 -2
  336. package/dist/components/p-B6NvVdeO.js.map +0 -1
  337. package/dist/components/p-B6vE3ujd.js +0 -2
  338. package/dist/components/p-B6vE3ujd.js.map +0 -1
  339. package/dist/components/p-BBePKRHC.js +0 -2
  340. package/dist/components/p-BBePKRHC.js.map +0 -1
  341. package/dist/components/p-BOQnc-M4.js +0 -2
  342. package/dist/components/p-BOQnc-M4.js.map +0 -1
  343. package/dist/components/p-BXaieghV.js +0 -2
  344. package/dist/components/p-BXaieghV.js.map +0 -1
  345. package/dist/components/p-BgGP65Nn.js.map +0 -1
  346. package/dist/components/p-BrusnEYP.js +0 -2
  347. package/dist/components/p-BrusnEYP.js.map +0 -1
  348. package/dist/components/p-By_s1wNN.js +0 -2
  349. package/dist/components/p-By_s1wNN.js.map +0 -1
  350. package/dist/components/p-C61yJkfr.js +0 -2
  351. package/dist/components/p-C61yJkfr.js.map +0 -1
  352. package/dist/components/p-CH3w-P2H.js +0 -2
  353. package/dist/components/p-CH3w-P2H.js.map +0 -1
  354. package/dist/components/p-CNjOyUQu.js +0 -2
  355. package/dist/components/p-CNjOyUQu.js.map +0 -1
  356. package/dist/components/p-CPwpgUWT.js.map +0 -1
  357. package/dist/components/p-CU2673IJ.js +0 -2
  358. package/dist/components/p-CU2673IJ.js.map +0 -1
  359. package/dist/components/p-CsX3ICz7.js.map +0 -1
  360. package/dist/components/p-D0e77tkd.js +0 -2
  361. package/dist/components/p-D0e77tkd.js.map +0 -1
  362. package/dist/components/p-D1HFMTdC.js +0 -2
  363. package/dist/components/p-D1HFMTdC.js.map +0 -1
  364. package/dist/components/p-D1bNvIpb.js +0 -2
  365. package/dist/components/p-D1bNvIpb.js.map +0 -1
  366. package/dist/components/p-D2x17ei-.js +0 -2
  367. package/dist/components/p-D2x17ei-.js.map +0 -1
  368. package/dist/components/p-DIFUsoM-.js +0 -2
  369. package/dist/components/p-DIFUsoM-.js.map +0 -1
  370. package/dist/components/p-DjbTFy2B.js.map +0 -1
  371. package/dist/components/p-DmAHufd5.js +0 -2
  372. package/dist/components/p-DmAHufd5.js.map +0 -1
  373. package/dist/components/p-DzM3SzPz.js +0 -2
  374. package/dist/components/p-DzM3SzPz.js.map +0 -1
  375. package/dist/components/p-G3qIxpQj.js +0 -2
  376. package/dist/components/p-G3qIxpQj.js.map +0 -1
  377. package/dist/components/p-Re2kPrXm.js +0 -2
  378. package/dist/components/p-Re2kPrXm.js.map +0 -1
  379. package/dist/components/p-huw1oRbt.js +0 -2
  380. package/dist/components/p-huw1oRbt.js.map +0 -1
  381. package/dist/framework/select-multi-value-accessor.d.ts +0 -9
  382. package/dist/framework/select-multi-value-accessor.js +0 -40
  383. package/dist/lib/shell/badge-gradient-ring.d.ts +0 -27
  384. package/dist/lib/shell/chrome-transition.d.ts +0 -32
  385. package/dist/lib/shell/shell-chrome-metrics.d.ts +0 -11
  386. package/dist/lib/shell/shell-gradient.d.ts +0 -41
  387. package/dist/lib/shell/shell-view-transition.d.ts +0 -23
  388. package/dist/mcp-data/registry/card-data-viz-bar.json +0 -213
  389. package/dist/mcp-data/registry/card-data-viz-donut.json +0 -214
  390. package/dist/mcp-data/registry/card-data-viz-line.json +0 -207
  391. package/dist/mcp-data/registry/card-shell-data-viz.json +0 -180
  392. package/dist/mcp-data/registry/chart-bar-stacked.json +0 -230
  393. package/dist/mcp-data/registry/select-multi.json +0 -758
  394. package/dist/mcp-data/registry/shell-gradient-picker.json +0 -195
  395. package/dist/mcp-data/registry/shell-gradient-swatch.json +0 -215
  396. package/dist/react/ds-card-data-viz-bar.d.ts +0 -12
  397. package/dist/react/ds-card-data-viz-bar.js +0 -12
  398. package/dist/react/ds-card-data-viz-donut.d.ts +0 -12
  399. package/dist/react/ds-card-data-viz-donut.js +0 -12
  400. package/dist/react/ds-card-data-viz-line.d.ts +0 -12
  401. package/dist/react/ds-card-data-viz-line.js +0 -12
  402. package/dist/react/ds-card-shell-data-viz.d.ts +0 -9
  403. package/dist/react/ds-card-shell-data-viz.js +0 -12
  404. package/dist/react/ds-chart-bar-stacked.d.ts +0 -9
  405. package/dist/react/ds-chart-bar-stacked.js +0 -12
  406. package/dist/react/ds-select-multi.d.ts +0 -14
  407. package/dist/react/ds-select-multi.js +0 -16
  408. package/dist/react/ds-shell-gradient-picker.d.ts +0 -12
  409. package/dist/react/ds-shell-gradient-picker.js +0 -12
  410. package/dist/react/ds-shell-gradient-swatch.d.ts +0 -12
  411. package/dist/react/ds-shell-gradient-swatch.js +0 -12
  412. package/dist/types/components/CardDataVizBar/CardDataVizBar.d.ts +0 -24
  413. package/dist/types/components/CardDataVizBar/index.d.ts +0 -2
  414. package/dist/types/components/CardDataVizDonut/CardDataVizDonut.d.ts +0 -28
  415. package/dist/types/components/CardDataVizDonut/index.d.ts +0 -2
  416. package/dist/types/components/CardDataVizLine/CardDataVizLine.d.ts +0 -24
  417. package/dist/types/components/CardDataVizLine/index.d.ts +0 -2
  418. package/dist/types/components/CardShellDataViz/CardShellDataViz.d.ts +0 -13
  419. package/dist/types/components/CardShellDataViz/index.d.ts +0 -2
  420. package/dist/types/components/ChartBarStacked/ChartBarStacked.d.ts +0 -26
  421. package/dist/types/components/ChartBarStacked/index.d.ts +0 -3
  422. package/dist/types/components/SelectMulti/SelectMulti.d.ts +0 -121
  423. package/dist/types/components/SelectMulti/index.d.ts +0 -2
  424. package/dist/types/components/ShellGradientPicker/ShellGradientPicker.d.ts +0 -12
  425. package/dist/types/components/ShellGradientSwatch/ShellGradientSwatch.d.ts +0 -15
  426. package/dist/types/components/ShellGradientSwatch/shell-gradient-swatch-types.d.ts +0 -4
  427. /package/dist/components/{p-DB9XJm2c.js.map → p-6qXDqCj_.js.map} +0 -0
  428. /package/dist/components/{p-DhLmoCe_.js.map → p-B1cbQ0SG.js.map} +0 -0
  429. /package/dist/components/{p-BKOlvCGS.js.map → p-BUZXuod2.js.map} +0 -0
  430. /package/dist/components/{p-Utr23NC-.js.map → p-BaUsq_VK.js.map} +0 -0
  431. /package/dist/components/{p-BO5aqZcf.js.map → p-BcTYhmku.js.map} +0 -0
  432. /package/dist/components/{p-BlHzmszE.js.map → p-BroVnDzE.js.map} +0 -0
  433. /package/dist/components/{p-BFRMwl93.js.map → p-BsoqsbBh.js.map} +0 -0
  434. /package/dist/components/{p-ukB-dPOK.js.map → p-CBazaRlE.js.map} +0 -0
  435. /package/dist/components/{p-CNgPwd11.js.map → p-CHuh71-U.js.map} +0 -0
  436. /package/dist/components/{p-D9u1_OEZ.js.map → p-CMWata9g.js.map} +0 -0
  437. /package/dist/components/{p-38PfdMkF.js.map → p-DeQwkbT1.js.map} +0 -0
  438. /package/dist/components/{p-Vdufoj7G.js.map → p-Df17mJqI.js.map} +0 -0
  439. /package/dist/components/{p-69lHhJiX.js.map → p-ohsLFap_.js.map} +0 -0
@@ -1,3 +1,73 @@
1
+ // src/wc/components/PanelTools/panel-tools-types.ts
2
+ var PANEL_TOOLS_LABELS = {
3
+ search: "Search",
4
+ messages: "Messages",
5
+ stacks: "Stacks",
6
+ activity: "Activity",
7
+ agents: "Agents",
8
+ help: "Help & Support"
9
+ };
10
+ var PANEL_TOOLS_SHORTCUTS = {
11
+ search: "K",
12
+ agents: "A",
13
+ messages: "M",
14
+ stacks: "S",
15
+ activity: "N",
16
+ help: "/"
17
+ };
18
+ var PANEL_TOOLS_DEFAULT_ITEMS = [
19
+ {
20
+ id: "search",
21
+ icon: "MagnifyingGlass",
22
+ label: PANEL_TOOLS_LABELS.search,
23
+ railPlacement: "header",
24
+ order: 0,
25
+ shortcutKey: PANEL_TOOLS_SHORTCUTS.search,
26
+ mobileDestination: "search"
27
+ },
28
+ {
29
+ id: "agents",
30
+ icon: "AI",
31
+ label: PANEL_TOOLS_LABELS.agents,
32
+ order: 1,
33
+ shortcutKey: PANEL_TOOLS_SHORTCUTS.agents,
34
+ mobileDestination: "agents"
35
+ },
36
+ {
37
+ id: "messages",
38
+ icon: "MessageBubbleStack",
39
+ label: PANEL_TOOLS_LABELS.messages,
40
+ order: 2,
41
+ shortcutKey: PANEL_TOOLS_SHORTCUTS.messages,
42
+ mobileDestination: "inbox"
43
+ },
44
+ {
45
+ id: "stacks",
46
+ icon: "ViewMenu",
47
+ label: PANEL_TOOLS_LABELS.stacks,
48
+ order: 3,
49
+ shortcutKey: PANEL_TOOLS_SHORTCUTS.stacks,
50
+ mobileDestination: "inbox"
51
+ },
52
+ {
53
+ id: "activity",
54
+ icon: "Bell",
55
+ label: PANEL_TOOLS_LABELS.activity,
56
+ order: 4,
57
+ shortcutKey: PANEL_TOOLS_SHORTCUTS.activity,
58
+ mobileDestination: "inbox"
59
+ },
60
+ {
61
+ id: "help",
62
+ icon: "CircleQuestion",
63
+ label: PANEL_TOOLS_LABELS.help,
64
+ railPlacement: "footer",
65
+ order: 5,
66
+ shortcutKey: PANEL_TOOLS_SHORTCUTS.help,
67
+ mobileDestination: "help"
68
+ }
69
+ ];
70
+
1
71
  // src/wc/shell/nav-chrome.ts
2
72
  var NAV_STYLE_HINT_ATTR = "data-nav-style";
3
73
  function readNavStyleAttr(attr) {
@@ -12,122 +82,22 @@ function clearNavStyleHint() {
12
82
  if (typeof document === "undefined") return;
13
83
  document.documentElement.removeAttribute(NAV_STYLE_HINT_ATTR);
14
84
  }
15
- function resolveNavChromeStyle(styleProp, hostAttr, docHint) {
16
- const fromHost = readNavStyleAttr(hostAttr);
17
- if (fromHost) return fromHost;
18
- const hint = docHint !== void 0 ? docHint : typeof document !== "undefined" ? document.documentElement.getAttribute(NAV_STYLE_HINT_ATTR) : null;
19
- const fromHint = readNavStyleAttr(hint);
20
- if (fromHint) return fromHint;
21
- return styleProp;
22
- }
23
- function shouldResyncNavChromeStyle(renderedStyle, style) {
24
- return renderedStyle !== style;
25
- }
26
85
 
27
- // src/wc/utils/resolve-css-time-ms.ts
28
- function parseCssTimeMs(value, fallback) {
29
- const firstToken = value.trim().split(/\s+/)[0] ?? "";
30
- const num = parseFloat(firstToken);
31
- if (Number.isNaN(num)) return fallback;
32
- if (/ms\s*$/.test(firstToken)) return num;
33
- if (/s\s*$/.test(firstToken)) return num * 1e3;
34
- return num;
35
- }
36
- function prefersReducedMotion() {
37
- return typeof window !== "undefined" && typeof window.matchMedia === "function" && window.matchMedia("(prefers-reduced-motion: reduce)").matches;
38
- }
39
-
40
- // src/wc/shell/shell-view-transition.ts
41
- var SHELL_BAR_NAV_VT_NAME = "ds-shell-bar-nav";
42
- var VT_STYLE_ID = "ds-shell-nav-vt-style";
43
- var SHELL_NAV_REVEAL_DURATION_VAR = "--effect-animation-duration-medium-3";
44
- var SHELL_NAV_REVEAL_EASING_VAR = "--effect-animation-easing-ease-in-out";
45
- var SHELL_NAV_REVEAL_DURATION_FALLBACK_MS = 500;
46
- var SHELL_NAV_REVEAL_EASING_FALLBACK = "ease-in-out";
47
- function readCssCustomProperty(name, fallback) {
48
- if (typeof document === "undefined") return fallback;
49
- const value = getComputedStyle(document.documentElement).getPropertyValue(name).trim();
50
- return value || fallback;
51
- }
52
- function ensureShellNavVtStyle() {
53
- if (typeof document === "undefined") return;
54
- const reduceMotion = prefersReducedMotion();
55
- const content = [
56
- "::view-transition-old(root),::view-transition-new(root){animation:none;mix-blend-mode:normal}",
57
- `::view-transition-old(${SHELL_BAR_NAV_VT_NAME}),::view-transition-new(${SHELL_BAR_NAV_VT_NAME}){animation:none;mix-blend-mode:normal}`,
58
- `::view-transition-old(${SHELL_BAR_NAV_VT_NAME}){z-index:1}`,
59
- `::view-transition-new(${SHELL_BAR_NAV_VT_NAME}){z-index:2${reduceMotion ? "" : ";clip-path:circle(0px at var(--vt-x,50%) var(--vt-y,50%))"}}`,
60
- reduceMotion ? "" : "::view-transition-new(root){clip-path:circle(0px at var(--vt-x,50%) var(--vt-y,50%))}"
61
- ].join("\n");
62
- const existing = document.getElementById(VT_STYLE_ID);
63
- if (existing) {
64
- if (existing.textContent !== content) existing.textContent = content;
65
- return;
66
- }
67
- const style = document.createElement("style");
68
- style.id = VT_STYLE_ID;
69
- style.textContent = content;
70
- document.head.appendChild(style);
71
- }
72
- function resolveShellNavRevealOrigin(originEl) {
73
- const btn = originEl ?? document.querySelector(".panel-nav__footer-btn");
74
- const rect = btn?.getBoundingClientRect();
75
- const x = rect ? Math.round(rect.left + rect.width / 2) : Math.round(window.innerWidth / 2);
76
- const y = rect ? Math.round(rect.top + rect.height / 2) : Math.round(window.innerHeight / 2);
77
- const maxRadius = Math.ceil(
78
- Math.hypot(Math.max(x, window.innerWidth - x), Math.max(y, window.innerHeight - y))
79
- );
80
- return { x, y, maxRadius };
81
- }
82
- function setShellNavRevealOriginVars(origin) {
83
- document.documentElement.style.setProperty("--vt-x", `${origin.x}px`);
84
- document.documentElement.style.setProperty("--vt-y", `${origin.y}px`);
85
- }
86
- function animateShellNavRadialReveal(origin, durationMs) {
87
- if (prefersReducedMotion()) {
88
- ensureShellNavVtStyle();
89
- return;
90
- }
91
- const duration = durationMs ?? parseCssTimeMs(
92
- readCssCustomProperty(SHELL_NAV_REVEAL_DURATION_VAR, "400ms"),
93
- SHELL_NAV_REVEAL_DURATION_FALLBACK_MS
94
- );
95
- const easing = readCssCustomProperty(
96
- SHELL_NAV_REVEAL_EASING_VAR,
97
- SHELL_NAV_REVEAL_EASING_FALLBACK
98
- );
99
- const keyframes = {
100
- clipPath: [
101
- `circle(0px at ${origin.x}px ${origin.y}px)`,
102
- `circle(${origin.maxRadius}px at ${origin.x}px ${origin.y}px)`
103
- ]
104
- };
105
- const options = {
106
- duration,
107
- easing,
108
- fill: "forwards"
109
- };
110
- document.documentElement.animate(keyframes, {
111
- ...options,
112
- pseudoElement: "::view-transition-new(root)"
113
- });
114
- document.documentElement.animate(keyframes, {
115
- ...options,
116
- pseudoElement: `::view-transition-new(${SHELL_BAR_NAV_VT_NAME})`
117
- });
118
- }
119
- function runShellNavStyleRevealOnReady(transition, originEl) {
120
- ensureShellNavVtStyle();
121
- if (prefersReducedMotion()) {
122
- transition.ready.catch(() => {
123
- });
124
- return;
125
- }
126
- const origin = resolveShellNavRevealOrigin(originEl);
127
- setShellNavRevealOriginVars(origin);
128
- transition.ready.then(() => animateShellNavRadialReveal(origin)).catch(() => {
129
- });
130
- }
86
+ // src/wc/components/Menu/menu-placement.ts
87
+ var PANEL_NAV_USER_MENU_PLACEMENT = {
88
+ side: "right",
89
+ align: "end",
90
+ anchorAlignment: "choice-cell",
91
+ sideOffset: "calc(var(--dimension-space-100) + var(--dimension-space-050))",
92
+ alignOffset: 0
93
+ };
94
+ var PANEL_TOOLS_HEADER_MENU_PLACEMENT = {
95
+ side: "bottom",
96
+ align: "end",
97
+ anchorAlignment: "choice-cell",
98
+ sideOffset: "calc(var(--dimension-space-100) + var(--dimension-space-050))",
99
+ alignOffset: 0
100
+ };
131
101
 
132
102
  // src/wc/shell/shell-gradient-presets.ts
133
103
  var SHELL_GRADIENT_PRESETS = [
@@ -185,11 +155,6 @@ var SHELL_GRADIENT_RECIPES = {
185
155
  }
186
156
  };
187
157
  var GRADIENT_GEOMETRY = "100% 100% at 0% 0%";
188
- function shellGradientPresetStopToken(preset) {
189
- if (preset === "none") return null;
190
- const stops = SHELL_GRADIENT_RECIPES[preset].stops;
191
- return stops[stops.length - 1]?.color ?? null;
192
- }
193
158
  function shellGradientPresetRecipe(preset) {
194
159
  const normalized = normalizeShellGradientPreset(preset);
195
160
  return normalized === "none" ? null : SHELL_GRADIENT_RECIPES[normalized];
@@ -237,130 +202,6 @@ function shellGradientPickerSections() {
237
202
  ];
238
203
  }
239
204
 
240
- // src/wc/shell/shell-gradient.ts
241
- var SHELL_GRADIENT_IMAGE_VAR = "--ds-shell-gradient-image";
242
- var SHELL_GRADIENT_SIZE_VAR = "--ds-shell-gradient-size";
243
- var SHELL_GRADIENT_POSITION_PANEL_VAR = "--ds-shell-gradient-position-panel";
244
- var SHELL_GRADIENT_POSITION_BAR_VAR = "--ds-shell-gradient-position-bar";
245
- var SHELL_GRADIENT_OPACITY_VAR = "--ds-shell-gradient-opacity";
246
- var SHELL_CHROME_SURFACE_POSITION_VAR = "--ds-shell-chrome-surface-position";
247
- function shellChromeLayerActive(preset) {
248
- return normalizeShellGradientPreset(preset) !== "none";
249
- }
250
- function buildShellRadialGradient(preset = DEFAULT_SHELL_GRADIENT_PRESET) {
251
- return buildShellRadialGradientForPreset(preset);
252
- }
253
- function shellGradientImage(preset = DEFAULT_SHELL_GRADIENT_PRESET) {
254
- return buildShellRadialGradient(preset);
255
- }
256
- function readShellViewportDimensions(win) {
257
- const w = win ?? (typeof globalThis.window !== "undefined" ? globalThis.window : void 0);
258
- if (!w) return { width: 0, height: 0 };
259
- const visual = w.visualViewport;
260
- return {
261
- width: Math.round(visual?.width ?? w.innerWidth),
262
- height: Math.round(visual?.height ?? w.innerHeight)
263
- };
264
- }
265
- function shellGradientSize(layout) {
266
- return `${Math.round(layout.width)}px ${Math.round(layout.height)}px`;
267
- }
268
- function shellGradientPositionPanel() {
269
- return "0 0";
270
- }
271
- function shellGradientPositionBar(panelWidth) {
272
- return `${-Math.round(panelWidth)}px 0`;
273
- }
274
- function shellChromeSurfacePosition(leftPx, topPx) {
275
- return `${-Math.round(leftPx)}px ${-Math.round(topPx)}px`;
276
- }
277
-
278
- // src/wc/components/Menu/menu-placement.ts
279
- var PANEL_NAV_USER_MENU_PLACEMENT = {
280
- side: "right",
281
- align: "end",
282
- anchorAlignment: "choice-cell",
283
- sideOffset: "calc(var(--dimension-space-100) + var(--dimension-space-050))",
284
- alignOffset: 0
285
- };
286
- var PANEL_TOOLS_HEADER_MENU_PLACEMENT = {
287
- side: "bottom",
288
- align: "end",
289
- anchorAlignment: "choice-cell",
290
- sideOffset: "calc(var(--dimension-space-100) + var(--dimension-space-050))",
291
- alignOffset: 0
292
- };
293
-
294
- // src/wc/shell/chrome-transition.ts
295
- var CHROME_TRANSITION_START = "dsChromeTransitionStart";
296
- var CHROME_TRANSITION_END = "dsChromeTransitionEnd";
297
- var ChromeTransitionDepth = class {
298
- constructor() {
299
- this.depth = 0;
300
- }
301
- enter() {
302
- this.depth += 1;
303
- }
304
- exit() {
305
- this.depth = Math.max(0, this.depth - 1);
306
- }
307
- get isActive() {
308
- return this.depth > 0;
309
- }
310
- };
311
- function createRafCoalescer(onFrame) {
312
- let rafId = 0;
313
- return {
314
- schedule() {
315
- if (rafId !== 0) return;
316
- rafId = requestAnimationFrame(() => {
317
- rafId = 0;
318
- onFrame();
319
- });
320
- },
321
- cancel() {
322
- if (rafId !== 0) {
323
- cancelAnimationFrame(rafId);
324
- rafId = 0;
325
- }
326
- }
327
- };
328
- }
329
- function readChromeTransitionSource(event) {
330
- return event.detail?.source;
331
- }
332
- function readChromeTransitionPhase(event) {
333
- return event.detail?.phase;
334
- }
335
-
336
- // src/wc/shell/shell-chrome-metrics.ts
337
- function readCssVarWidthPx(context, cssVarName) {
338
- if (typeof document === "undefined") return 0;
339
- const probe = document.createElement("div");
340
- probe.style.cssText = "position:absolute;visibility:hidden;pointer-events:none;height:0;width:var(" + cssVarName + ");";
341
- context.appendChild(probe);
342
- const width = probe.getBoundingClientRect().width;
343
- context.removeChild(probe);
344
- return width;
345
- }
346
- function readPanelNavWidthTokens(navRoot) {
347
- return {
348
- expandedPx: readCssVarWidthPx(navRoot, "--_nav-width"),
349
- collapsedPx: readCssVarWidthPx(navRoot, "--_nav-width-collapsed")
350
- };
351
- }
352
- function isPanelNavCollapsed(panelNavHost, navRoot) {
353
- if (navRoot?.classList.contains("panel-nav--collapsed")) return true;
354
- const collapsedProp = panelNavHost?.collapsed;
355
- return collapsedProp === true;
356
- }
357
- function panelWidthPxFromTokens(tokens, collapsed) {
358
- return collapsed ? tokens.collapsedPx : tokens.expandedPx;
359
- }
360
- function barGradientPositionFromPanelWidth(panelWidthPx) {
361
- return shellGradientPositionBar(panelWidthPx);
362
- }
363
-
364
205
  // src/wc/shell/shell-responsive.ts
365
206
  var SHELL_DESKTOP_BREAKPOINT = 1200;
366
207
  var SHELL_MOBILE_BREAKPOINT = 768;
@@ -389,137 +230,25 @@ function resolveAvailableInboxTool(preferred, available) {
389
230
  function shouldEmitMobileDestinationChange(active, next, navigationOpen) {
390
231
  return navigationOpen || active !== next;
391
232
  }
392
-
393
- // src/wc/shell/badge-gradient-ring.ts
394
- var BADGE_GRADIENT_POSITION_VAR = "--_badge-gradient-position";
395
- function isShellGradientActive(from) {
396
- const shell = from.closest("ds-shell-app");
397
- return shell !== null && shell.getAttribute("gradient-preset") !== "none";
398
- }
399
- function findGradientSurface(from) {
400
- const barHost = from.closest("ds-bar-nav");
401
- if (barHost) {
402
- const root = barHost.shadowRoot ?? barHost;
403
- const element = root.querySelector(".bar-nav");
404
- if (element) {
405
- return {
406
- element,
407
- chromeHost: barHost,
408
- positionVar: SHELL_GRADIENT_POSITION_BAR_VAR
409
- };
410
- }
411
- }
412
- const panelHost = from.closest("ds-panel-nav");
413
- if (panelHost) {
414
- const root = panelHost.shadowRoot ?? panelHost;
415
- const element = root.querySelector(".panel-nav");
416
- if (element) {
417
- return {
418
- element,
419
- chromeHost: panelHost,
420
- positionVar: SHELL_GRADIENT_POSITION_PANEL_VAR
421
- };
422
- }
423
- }
424
- return null;
425
- }
426
- function parseCssBackgroundPosition(value) {
427
- const trimmed = value.trim();
428
- if (!trimmed) return { x: 0, y: 0 };
429
- const parts = trimmed.split(/\s+/);
430
- const x = parseLength(parts[0] ?? "0");
431
- const y = parseLength(parts[1] ?? "0");
432
- return { x, y };
433
- }
434
- function parseLength(token) {
435
- const px = token.match(/^(-?[\d.]+)px$/);
436
- if (px) return Number(px[1]);
437
- return 0;
438
- }
439
- function badgeGradientPosition(badgeHost, surface, shellPosition) {
440
- const badgeRect = badgeHost.getBoundingClientRect();
441
- const surfaceRect = surface.element.getBoundingClientRect();
442
- const anchorX = badgeRect.left + badgeRect.width / 2 - surfaceRect.left;
443
- const anchorY = badgeRect.top + badgeRect.height / 2 - surfaceRect.top;
444
- const { x, y } = parseCssBackgroundPosition(shellPosition);
445
- return `${Math.round(x - anchorX)}px ${Math.round(y - anchorY)}px`;
446
- }
447
- function readShellGradientPosition(surface) {
448
- const styles = getComputedStyle(surface.chromeHost);
449
- return styles.getPropertyValue(surface.positionVar).trim() || "0 0";
450
- }
451
- function syncBadgeGradientPosition(badgeHost) {
452
- if (!isShellGradientActive(badgeHost)) {
453
- badgeHost.style.removeProperty(BADGE_GRADIENT_POSITION_VAR);
454
- return;
455
- }
456
- badgeHost.style.setProperty(BADGE_GRADIENT_POSITION_VAR, "0 0");
457
- }
458
233
  export {
459
- BADGE_GRADIENT_POSITION_VAR,
460
- CHROME_TRANSITION_END,
461
- CHROME_TRANSITION_START,
462
- ChromeTransitionDepth,
463
234
  DEFAULT_SHELL_GRADIENT_PRESET,
464
235
  NAV_STYLE_HINT_ATTR,
465
236
  PANEL_NAV_USER_MENU_PLACEMENT,
237
+ PANEL_TOOLS_DEFAULT_ITEMS,
466
238
  PANEL_TOOLS_HEADER_MENU_PLACEMENT,
467
- SHELL_BAR_NAV_VT_NAME,
468
- SHELL_CHROME_SURFACE_POSITION_VAR,
469
239
  SHELL_DEFAULT_INBOX_TOOL,
470
- SHELL_DESKTOP_BREAKPOINT,
471
- SHELL_GRADIENT_IMAGE_VAR,
472
- SHELL_GRADIENT_OPACITY_VAR,
473
- SHELL_GRADIENT_POSITION_BAR_VAR,
474
- SHELL_GRADIENT_POSITION_PANEL_VAR,
475
240
  SHELL_GRADIENT_PRESETS,
476
241
  SHELL_GRADIENT_PRESET_LABELS,
477
- SHELL_GRADIENT_SIZE_VAR,
478
- SHELL_MOBILE_BREAKPOINT,
479
- SHELL_NAV_REVEAL_DURATION_VAR,
480
- SHELL_NAV_REVEAL_EASING_VAR,
481
- animateShellNavRadialReveal,
482
- badgeGradientPosition,
483
- barGradientPositionFromPanelWidth,
484
- buildShellRadialGradient,
485
- buildShellRadialGradientForPreset,
486
242
  clearNavStyleHint,
487
- createRafCoalescer,
488
- ensureShellNavVtStyle,
489
- findGradientSurface,
490
- isPanelNavCollapsed,
491
- isShellGradientActive,
492
243
  isShellGradientPreset,
493
244
  isShellInboxTool,
494
245
  normalizeShellGradientPreset,
495
- panelWidthPxFromTokens,
496
- parseCssBackgroundPosition,
497
- parseCssTimeMs,
498
- readChromeTransitionPhase,
499
- readChromeTransitionSource,
500
- readCssVarWidthPx,
501
246
  readNavStyleAttr,
502
- readPanelNavWidthTokens,
503
- readShellGradientPosition,
504
- readShellViewportDimensions,
505
247
  resolveAvailableInboxTool,
506
- resolveNavChromeStyle,
507
- resolveShellNavRevealOrigin,
508
248
  resolveShellResponsiveMode,
509
- runShellNavStyleRevealOnReady,
510
249
  setNavStyleHint,
511
- setShellNavRevealOriginVars,
512
- shellChromeLayerActive,
513
- shellChromeSurfacePosition,
514
- shellGradientImage,
515
250
  shellGradientPickerSections,
516
- shellGradientPositionBar,
517
- shellGradientPositionPanel,
518
- shellGradientPresetStopToken,
519
- shellGradientSize,
520
251
  shellMobileDestinationForTool,
521
- shouldEmitMobileDestinationChange,
522
- shouldResyncNavChromeStyle,
523
- syncBadgeGradientPosition
252
+ shouldEmitMobileDestinationChange
524
253
  };
525
254
  //# sourceMappingURL=index.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../../../src/wc/shell/nav-chrome.ts", "../../../src/wc/utils/resolve-css-time-ms.ts", "../../../src/wc/shell/shell-view-transition.ts", "../../../src/wc/shell/shell-gradient-presets.ts", "../../../src/wc/shell/shell-gradient.ts", "../../../src/wc/components/Menu/menu-placement.ts", "../../../src/wc/shell/chrome-transition.ts", "../../../src/wc/shell/shell-chrome-metrics.ts", "../../../src/wc/shell/shell-responsive.ts", "../../../src/wc/shell/badge-gradient-ring.ts"],
4
- "sourcesContent": ["/** Nav chrome style slot \u2014 dashboard vs settings. Colors unified for now; texture hooks use the class. */\nexport type NavChromeStyle = 'dashboard' | 'settings';\n\n/** Document hint for first paint before framework props land. */\nexport const NAV_STYLE_HINT_ATTR = 'data-nav-style';\n\nexport function readNavStyleAttr(attr: string | null): NavChromeStyle | undefined {\n if (attr === 'dashboard' || attr === 'settings') return attr;\n return undefined;\n}\n\nexport function setNavStyleHint(style: NavChromeStyle): void {\n if (typeof document === 'undefined') return;\n document.documentElement.setAttribute(NAV_STYLE_HINT_ATTR, style);\n}\n\nexport function clearNavStyleHint(): void {\n if (typeof document === 'undefined') return;\n document.documentElement.removeAttribute(NAV_STYLE_HINT_ATTR);\n}\n\nexport function resolveNavChromeStyle(\n styleProp: NavChromeStyle,\n hostAttr: string | null,\n docHint?: string | null,\n): NavChromeStyle {\n const fromHost = readNavStyleAttr(hostAttr);\n if (fromHost) return fromHost;\n\n const hint =\n docHint !== undefined\n ? docHint\n : typeof document !== 'undefined'\n ? document.documentElement.getAttribute(NAV_STYLE_HINT_ATTR)\n : null;\n const fromHint = readNavStyleAttr(hint);\n if (fromHint) return fromHint;\n\n return styleProp;\n}\n\nexport function shouldResyncNavChromeStyle(\n renderedStyle: NavChromeStyle,\n style: NavChromeStyle,\n): boolean {\n return renderedStyle !== style;\n}\n", "/** Parse a CSS <time> value (or motion shorthand's first token) to milliseconds. */\nexport function parseCssTimeMs(value: string, fallback: number): number {\n const firstToken = value.trim().split(/\\s+/)[0] ?? '';\n const num = parseFloat(firstToken);\n if (Number.isNaN(num)) return fallback;\n if (/ms\\s*$/.test(firstToken)) return num;\n if (/s\\s*$/.test(firstToken)) return num * 1000;\n return num;\n}\n\nfunction extractCssCustomProp(ref: string): string | null {\n const varMatch = ref.match(/^var\\(\\s*(--[^),]+)/);\n if (varMatch) return varMatch[1].trim();\n if (ref.startsWith('--')) return ref.trim();\n return null;\n}\n\nfunction readTokenTimeMs(token: string, fallback: number): number {\n if (typeof document === 'undefined') return fallback;\n\n const prop = extractCssCustomProp(token);\n if (!prop) return parseCssTimeMs(token, fallback);\n\n const raw = getComputedStyle(document.documentElement).getPropertyValue(prop).trim();\n return parseCssTimeMs(raw, fallback);\n}\n\n/**\n * Resolve a duration to milliseconds for JS timers aligned with CSS motion tokens.\n * Accepts numbers (ms), raw times (`200ms`, `0.75s`), or `var(--effect-*)` references.\n */\nexport function resolveCssTimeMs(\n value: number | string | undefined,\n fallbackToken: string,\n): number {\n if (typeof value === 'number') return value;\n\n const token = typeof value === 'string' && value.trim() ? value.trim() : fallbackToken;\n const prop = extractCssCustomProp(token);\n\n if (prop) {\n return readTokenTimeMs(token, readTokenTimeMs(fallbackToken, 200));\n }\n\n return parseCssTimeMs(token, readTokenTimeMs(fallbackToken, 200));\n}\n\n/** Whether the user has requested reduced non-essential motion. */\nexport function prefersReducedMotion(): boolean {\n return typeof window !== 'undefined' &&\n typeof window.matchMedia === 'function' &&\n window.matchMedia('(prefers-reduced-motion: reduce)').matches;\n}\n\n/**\n * Resolve an animation-coupled duration. Returns zero under reduced motion so\n * JS cleanup stays synchronized with CSS that removes the corresponding motion.\n */\nexport function resolveMotionTimeMs(\n value: number | string | undefined,\n fallbackToken: string,\n): number {\n return prefersReducedMotion() ? 0 : resolveCssTimeMs(value, fallbackToken);\n}\n", "import { parseCssTimeMs, prefersReducedMotion } from '../utils/resolve-css-time-ms';\n\n/** `view-transition-name` on `ds-bar-nav` \u2014 pairs with root reveal in shell apps. */\nexport const SHELL_BAR_NAV_VT_NAME = 'ds-shell-bar-nav';\n\nexport { parseCssTimeMs };\n\nconst VT_STYLE_ID = 'ds-shell-nav-vt-style';\n\n/** TokoMo tokens for the dashboard \u2194 settings radial reveal (WAAPI). */\nexport const SHELL_NAV_REVEAL_DURATION_VAR = '--effect-animation-duration-medium-3';\nexport const SHELL_NAV_REVEAL_EASING_VAR = '--effect-animation-easing-ease-in-out';\nconst SHELL_NAV_REVEAL_DURATION_FALLBACK_MS = 500;\nconst SHELL_NAV_REVEAL_EASING_FALLBACK = 'ease-in-out';\n\nfunction readCssCustomProperty(name: string, fallback: string): string {\n if (typeof document === 'undefined') return fallback;\n const value = getComputedStyle(document.documentElement).getPropertyValue(name).trim();\n return value || fallback;\n}\n\n/** Suppress default cross-fade and pin new snapshots to a 0px circle for WAAPI reveal. */\nexport function ensureShellNavVtStyle(): void {\n if (typeof document === 'undefined') return;\n\n const reduceMotion = prefersReducedMotion();\n const content = [\n '::view-transition-old(root),::view-transition-new(root){animation:none;mix-blend-mode:normal}',\n `::view-transition-old(${SHELL_BAR_NAV_VT_NAME}),::view-transition-new(${SHELL_BAR_NAV_VT_NAME}){animation:none;mix-blend-mode:normal}`,\n `::view-transition-old(${SHELL_BAR_NAV_VT_NAME}){z-index:1}`,\n `::view-transition-new(${SHELL_BAR_NAV_VT_NAME}){z-index:2${reduceMotion ? '' : ';clip-path:circle(0px at var(--vt-x,50%) var(--vt-y,50%))'}}`,\n reduceMotion ? '' : '::view-transition-new(root){clip-path:circle(0px at var(--vt-x,50%) var(--vt-y,50%))}',\n ].join('\\n');\n\n const existing = document.getElementById(VT_STYLE_ID) as HTMLStyleElement | null;\n if (existing) {\n if (existing.textContent !== content) existing.textContent = content;\n return;\n }\n\n const style = document.createElement('style');\n style.id = VT_STYLE_ID;\n style.textContent = content;\n document.head.appendChild(style);\n}\n\nexport interface ShellNavRevealOrigin {\n x: number;\n y: number;\n maxRadius: number;\n}\n\n/** Origin for the radial reveal \u2014 defaults to panel-nav footer gear, then viewport center. */\nexport function resolveShellNavRevealOrigin(originEl?: HTMLElement | null): ShellNavRevealOrigin {\n const btn =\n originEl ??\n document.querySelector<HTMLElement>('.panel-nav__footer-btn');\n const rect = btn?.getBoundingClientRect();\n const x = rect ? Math.round(rect.left + rect.width / 2) : Math.round(window.innerWidth / 2);\n const y = rect ? Math.round(rect.top + rect.height / 2) : Math.round(window.innerHeight / 2);\n const maxRadius = Math.ceil(\n Math.hypot(Math.max(x, window.innerWidth - x), Math.max(y, window.innerHeight - y)),\n );\n return { x, y, maxRadius };\n}\n\nexport function setShellNavRevealOriginVars(origin: ShellNavRevealOrigin): void {\n document.documentElement.style.setProperty('--vt-x', `${origin.x}px`);\n document.documentElement.style.setProperty('--vt-y', `${origin.y}px`);\n}\n\n/** Animate root + bar-nav snapshots with the same radial clip-path reveal. */\nexport function animateShellNavRadialReveal(\n origin: ShellNavRevealOrigin,\n durationMs?: number,\n): void {\n if (prefersReducedMotion()) {\n ensureShellNavVtStyle();\n return;\n }\n\n const duration =\n durationMs ??\n parseCssTimeMs(\n readCssCustomProperty(SHELL_NAV_REVEAL_DURATION_VAR, '400ms'),\n SHELL_NAV_REVEAL_DURATION_FALLBACK_MS,\n );\n const easing = readCssCustomProperty(\n SHELL_NAV_REVEAL_EASING_VAR,\n SHELL_NAV_REVEAL_EASING_FALLBACK,\n );\n const keyframes = {\n clipPath: [\n `circle(0px at ${origin.x}px ${origin.y}px)`,\n `circle(${origin.maxRadius}px at ${origin.x}px ${origin.y}px)`,\n ],\n };\n const options = {\n duration,\n easing,\n fill: 'forwards' as const,\n };\n\n document.documentElement.animate(keyframes, {\n ...options,\n pseudoElement: '::view-transition-new(root)',\n });\n document.documentElement.animate(keyframes, {\n ...options,\n pseudoElement: `::view-transition-new(${SHELL_BAR_NAV_VT_NAME})`,\n });\n}\n\n/** Run radial reveal when a view transition's `ready` promise settles (app/router driver). */\nexport function runShellNavStyleRevealOnReady(\n transition: { ready: Promise<void> },\n originEl?: HTMLElement | null,\n): void {\n ensureShellNavVtStyle();\n if (prefersReducedMotion()) {\n transition.ready.catch(() => {\n /* transition skipped or superseded */\n });\n return;\n }\n const origin = resolveShellNavRevealOrigin(originEl);\n setShellNavRevealOriginVars(origin);\n\n transition.ready\n .then(() => animateShellNavRadialReveal(origin))\n .catch(() => {\n /* transition skipped or superseded */\n });\n}\n", "/** 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 \u2014 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 \u2014 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 \u2014 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 \u2014 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 \u2014 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 { ChoicePopupAnchorAlignment } from '../../utils/choice-popup-alignment';\nimport type { MenuAlign, MenuSide } from './menu-position';\n\n/** Placement props bindable on `ds-menu` (side, align, offsets). */\nexport interface MenuPlacement {\n side: MenuSide;\n align: MenuAlign;\n anchorAlignment: ChoicePopupAnchorAlignment;\n sideOffset: number | string;\n alignOffset: number | string;\n}\n\n/**\n * Canonical `ds-menu` placement for the **panel-nav footer user menu**.\n * Anchor from `dsNavUserAction` detail `{ anchor }` (id `ds-panel-nav-user-menu-anchor`).\n *\n * Not for BarNav overflow menus \u2014 those use `side=\"bottom\"` / `align=\"end\"` internally.\n * `align: 'end'` bottom-aligns the last choice cell on the anchor; the side offset nudges into the content area:\n * - `sideOffset` space-100 + space-050 (12px): 4px past the panel-nav outer edge (anchor is ~8px inset).\n * - `anchorAlignment: 'choice-cell'`: the shared section inset puts the last row edge on the footer user row.\n */\nexport const PANEL_NAV_USER_MENU_PLACEMENT = {\n side: 'right',\n align: 'end',\n anchorAlignment: 'choice-cell',\n sideOffset: 'calc(var(--dimension-space-100) + var(--dimension-space-050))',\n alignOffset: 0,\n} as const satisfies MenuPlacement;\n\n/**\n * Canonical placement for a menu opened by a PanelTools header action.\n * Matches BarNav overflow: the 32px trigger is 8px inside the 48px header, so\n * a 12px side offset places the popup 4px below the header edge. Choice-cell\n * alignment keeps the final menu item edge aligned with the trigger.\n */\nexport const PANEL_TOOLS_HEADER_MENU_PLACEMENT = {\n side: 'bottom',\n align: 'end',\n anchorAlignment: 'choice-cell',\n sideOffset: 'calc(var(--dimension-space-100) + var(--dimension-space-050))',\n alignOffset: 0,\n} as const satisfies MenuPlacement;\n", "/** Bubbling/composed events \u2014 `ds-shell-app` and `ds-bar-nav` coordinate during width motion. */\n\nexport const CHROME_TRANSITION_START = 'dsChromeTransitionStart';\nexport const CHROME_TRANSITION_END = 'dsChromeTransitionEnd';\n\nexport type ChromeTransitionSource = 'panel-nav' | 'panel-tools';\n\nexport interface ChromeTransitionDetail {\n source: ChromeTransitionSource;\n /** Panel-tools drawer motion direction; omitted for panel-nav. */\n phase?: 'opening' | 'closing';\n}\n\n/** Reference-counted gate \u2014 used while panel-nav width is transitioning. */\nexport class ChromeTransitionDepth {\n private depth = 0;\n\n enter(): void {\n this.depth += 1;\n }\n\n exit(): void {\n this.depth = Math.max(0, this.depth - 1);\n }\n\n get isActive(): boolean {\n return this.depth > 0;\n }\n}\n\n/** Idempotent gate for one physical chrome surface.\n * Duplicate start notifications still require only one matching end. */\nexport class ChromeTransitionGate {\n private active = false;\n\n enter(): void {\n this.active = true;\n }\n\n exit(): void {\n this.active = false;\n }\n\n get isActive(): boolean {\n return this.active;\n }\n}\n\nexport interface RafCoalescer {\n schedule(): void;\n cancel(): void;\n}\n\n/** Coalesce bursty layout work (ResizeObserver, prop churn) to one callback per frame. */\nexport function createRafCoalescer(onFrame: () => void): RafCoalescer {\n let rafId = 0;\n return {\n schedule() {\n if (rafId !== 0) return;\n rafId = requestAnimationFrame(() => {\n rafId = 0;\n onFrame();\n });\n },\n cancel() {\n if (rafId !== 0) {\n cancelAnimationFrame(rafId);\n rafId = 0;\n }\n },\n };\n}\n\nexport function readChromeTransitionSource(event: Event): ChromeTransitionSource | undefined {\n return (event as CustomEvent<ChromeTransitionDetail>).detail?.source;\n}\n\nexport function readChromeTransitionPhase(event: Event): ChromeTransitionDetail['phase'] {\n return (event as CustomEvent<ChromeTransitionDetail>).detail?.phase;\n}\n", "import { 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", "import type { PanelToolsToolId } from '../components/PanelTools/panel-tools-types';\n\nexport type ShellResponsiveMode = 'desktop' | 'tablet' | 'mobile';\nexport type MobileDestination = 'area' | 'search' | 'agents' | 'inbox' | 'help';\nexport type ShellInboxToolId = Extract<PanelToolsToolId, 'messages' | 'stacks' | 'activity'>;\n\nexport const SHELL_DESKTOP_BREAKPOINT = 1200;\nexport const SHELL_MOBILE_BREAKPOINT = 768;\nexport const SHELL_DEFAULT_INBOX_TOOL: ShellInboxToolId = 'messages';\n\nexport function resolveShellResponsiveMode(width: number): ShellResponsiveMode {\n if (width >= SHELL_DESKTOP_BREAKPOINT) return 'desktop';\n if (width >= SHELL_MOBILE_BREAKPOINT) return 'tablet';\n return 'mobile';\n}\n\nexport function shellMobileDestinationForTool(\n open: boolean,\n tool: PanelToolsToolId | ''\n): MobileDestination {\n if (!open || !tool) return 'area';\n if (tool === 'help') return 'help';\n if (tool === 'search') return 'search';\n if (tool === 'agents') return 'agents';\n return 'inbox';\n}\n\nexport function isShellInboxTool(tool: string): tool is ShellInboxToolId {\n return tool === 'messages' || tool === 'stacks' || tool === 'activity';\n}\n\nexport function resolveAvailableInboxTool(\n preferred: string,\n available: readonly PanelToolsToolId[]\n): ShellInboxToolId | '' {\n const inbox = available.filter(isShellInboxTool);\n if (isShellInboxTool(preferred) && inbox.includes(preferred)) return preferred;\n if (inbox.includes(SHELL_DEFAULT_INBOX_TOOL)) return SHELL_DEFAULT_INBOX_TOOL;\n return inbox[0] ?? '';\n}\n\n/** Active-destination reselects are inert unless they also dismiss the Menu pane. */\nexport function shouldEmitMobileDestinationChange(\n active: MobileDestination,\n next: MobileDestination,\n navigationOpen: boolean\n): boolean {\n return navigationOpen || active !== next;\n}\n", "import {\n SHELL_GRADIENT_POSITION_BAR_VAR,\n SHELL_GRADIENT_POSITION_PANEL_VAR,\n} from './shell-gradient';\n\n/** Per-badge background-position for shell gradient ring sampling. */\nexport const BADGE_GRADIENT_POSITION_VAR = '--_badge-gradient-position';\n\nexport interface GradientSurface {\n element: HTMLElement;\n chromeHost: HTMLElement;\n positionVar: string;\n}\n\n/** Whether the badge sits under a shell with an active wash preset. */\nexport function isShellGradientActive(from: HTMLElement): boolean {\n // Explicit <HTMLElement>: the inferred HTMLDsShellAppElement type only\n // resolves where @stencil/core types are installed \u2014 consumers importing\n // `@ds-mo/ui/shell` (raw TS) compile this without them.\n const shell = from.closest<HTMLElement>('ds-shell-app');\n return shell !== null && shell.getAttribute('gradient-preset') !== 'none';\n}\n\n/** Bar or panel chrome surface that owns the shell gradient stack. */\nexport function findGradientSurface(from: HTMLElement): GradientSurface | null {\n const barHost = from.closest('ds-bar-nav') as HTMLElement | null;\n if (barHost) {\n const root = barHost.shadowRoot ?? barHost;\n const element = root.querySelector('.bar-nav');\n if (element) {\n return {\n element: element as HTMLElement,\n chromeHost: barHost,\n positionVar: SHELL_GRADIENT_POSITION_BAR_VAR,\n };\n }\n }\n\n const panelHost = from.closest('ds-panel-nav') as HTMLElement | null;\n if (panelHost) {\n const root = panelHost.shadowRoot ?? panelHost;\n const element = root.querySelector('.panel-nav');\n if (element) {\n return {\n element: element as HTMLElement,\n chromeHost: panelHost,\n positionVar: SHELL_GRADIENT_POSITION_PANEL_VAR,\n };\n }\n }\n\n return null;\n}\n\ninterface ParsedPosition {\n x: number;\n y: number;\n}\n\n/** Parse a two-value CSS background-position (e.g. `-200px 0`). */\nexport function parseCssBackgroundPosition(value: string): ParsedPosition {\n const trimmed = value.trim();\n if (!trimmed) return { x: 0, y: 0 };\n\n const parts = trimmed.split(/\\s+/);\n const x = parseLength(parts[0] ?? '0');\n const y = parseLength(parts[1] ?? '0');\n return { x, y };\n}\n\nfunction parseLength(token: string): number {\n const px = token.match(/^(-?[\\d.]+)px$/);\n if (px) return Number(px[1]);\n return 0;\n}\n\n/**\n * Background position for a badge ring so the shell gradient aligns with nav chrome.\n * Uses badge center relative to the painted chrome surface.\n */\nexport function badgeGradientPosition(\n badgeHost: HTMLElement,\n surface: GradientSurface,\n shellPosition: string,\n): string {\n const badgeRect = badgeHost.getBoundingClientRect();\n const surfaceRect = surface.element.getBoundingClientRect();\n const anchorX = badgeRect.left + badgeRect.width / 2 - surfaceRect.left;\n const anchorY = badgeRect.top + badgeRect.height / 2 - surfaceRect.top;\n const { x, y } = parseCssBackgroundPosition(shellPosition);\n\n return `${Math.round(x - anchorX)}px ${Math.round(y - anchorY)}px`;\n}\n\n/** Resolve shell gradient position from chrome host custom properties. */\nexport function readShellGradientPosition(surface: GradientSurface): string {\n const styles = getComputedStyle(surface.chromeHost);\n return styles.getPropertyValue(surface.positionVar).trim() || '0 0';\n}\n\n/** Stamp `--_badge-gradient-position` on the badge host (fixed viewport chrome). */\nexport function syncBadgeGradientPosition(badgeHost: HTMLElement): void {\n if (!isShellGradientActive(badgeHost)) {\n badgeHost.style.removeProperty(BADGE_GRADIENT_POSITION_VAR);\n return;\n }\n\n badgeHost.style.setProperty(BADGE_GRADIENT_POSITION_VAR, '0 0');\n}\n"],
5
- "mappings": "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",
3
+ "sources": ["../../../src/wc/components/PanelTools/panel-tools-types.ts", "../../../src/wc/shell/nav-chrome.ts", "../../../src/wc/components/Menu/menu-placement.ts", "../../../src/wc/shell/shell-gradient-presets.ts", "../../../src/wc/shell/shell-responsive.ts"],
4
+ "sourcesContent": ["/** Application-owned tool id for the shell rail and responsive tool views. */\nexport type PanelToolsToolId = string;\n\n/** Canonical Motive shell recipe used when item metadata is omitted. */\nexport type CanonicalPanelToolsToolId =\n | 'search'\n | 'agents'\n | 'messages'\n | 'stacks'\n | 'activity'\n | 'help';\n\nexport const PANEL_TOOLS_TOOL_IDS: CanonicalPanelToolsToolId[] = [\n 'search',\n 'agents',\n 'messages',\n 'stacks',\n 'activity',\n 'help',\n];\n\n/** Rail header slot \u2014 mirrors panel-nav M logo row. */\nexport const PANEL_TOOLS_PRIMARY_TOOL_ID: CanonicalPanelToolsToolId = 'search';\n\n/** Rail footer slot \u2014 flush to the bottom of the tools column. */\nexport const PANEL_TOOLS_FOOTER_TOOL_ID: CanonicalPanelToolsToolId = 'help';\n\nexport const PANEL_TOOLS_LABELS: Record<CanonicalPanelToolsToolId, string> = {\n search: 'Search',\n messages: 'Messages',\n stacks: 'Stacks',\n activity: 'Activity',\n agents: 'Agents',\n help: 'Help & Support',\n};\n\nexport const PANEL_TOOLS_SHORTCUTS: Partial<Record<CanonicalPanelToolsToolId, string>> = {\n search: 'K',\n agents: 'A',\n messages: 'M',\n stacks: 'S',\n activity: 'N',\n help: '/',\n};\n\nexport interface PanelToolsItem {\n id: PanelToolsToolId;\n /** Icon name for <ds-icon>. */\n icon: string;\n /** Visible and accessible fallback label for custom tool ids. */\n label?: string;\n /** Explicit rail region; canonical Search/Help placement is the fallback. */\n railPlacement?: 'header' | 'body' | 'footer';\n /** Stable ordering within the selected rail region. */\n order?: number;\n /** Optional shortcut label displayed by the tooltip. */\n shortcutKey?: string;\n /** Mobile destination recipe; canonical ids retain their existing defaults. */\n mobileDestination?: 'search' | 'agents' | 'inbox' | 'help';\n /** Whether this rail button is currently pressed/active. */\n selected?: boolean;\n /** Show a notification dot. */\n dot?: boolean;\n isInactive?: boolean;\n ariaLabel?: string;\n}\n\n/** Canonical shell recipe used by Lab and by managed ShellApp examples. */\nexport const PANEL_TOOLS_DEFAULT_ITEMS: PanelToolsItem[] = [\n {\n id: 'search',\n icon: 'MagnifyingGlass',\n label: PANEL_TOOLS_LABELS.search,\n railPlacement: 'header',\n order: 0,\n shortcutKey: PANEL_TOOLS_SHORTCUTS.search,\n mobileDestination: 'search',\n },\n {\n id: 'agents',\n icon: 'AI',\n label: PANEL_TOOLS_LABELS.agents,\n order: 1,\n shortcutKey: PANEL_TOOLS_SHORTCUTS.agents,\n mobileDestination: 'agents',\n },\n {\n id: 'messages',\n icon: 'MessageBubbleStack',\n label: PANEL_TOOLS_LABELS.messages,\n order: 2,\n shortcutKey: PANEL_TOOLS_SHORTCUTS.messages,\n mobileDestination: 'inbox',\n },\n {\n id: 'stacks',\n icon: 'ViewMenu',\n label: PANEL_TOOLS_LABELS.stacks,\n order: 3,\n shortcutKey: PANEL_TOOLS_SHORTCUTS.stacks,\n mobileDestination: 'inbox',\n },\n {\n id: 'activity',\n icon: 'Bell',\n label: PANEL_TOOLS_LABELS.activity,\n order: 4,\n shortcutKey: PANEL_TOOLS_SHORTCUTS.activity,\n mobileDestination: 'inbox',\n },\n {\n id: 'help',\n icon: 'CircleQuestion',\n label: PANEL_TOOLS_LABELS.help,\n railPlacement: 'footer',\n order: 5,\n shortcutKey: PANEL_TOOLS_SHORTCUTS.help,\n mobileDestination: 'help',\n },\n];\n\nexport interface PanelToolsHeaderAction {\n id: string;\n icon: string;\n ariaLabel: string;\n triggerId?: string;\n controls?: string;\n expanded?: boolean;\n haspopup?: 'menu' | 'dialog' | 'listbox' | 'tree' | 'grid';\n pressed?: boolean;\n isInactive?: boolean;\n}\n\nexport interface PanelToolsHeaderConfig {\n title?: string;\n showBack?: boolean;\n backIcon?: string;\n backAriaLabel?: string;\n actions?: PanelToolsHeaderAction[];\n}\n\n/** Per-tool header state. The application replaces the object when a tool changes depth or actions. */\nexport type PanelToolsHeaders = Partial<Record<PanelToolsToolId, PanelToolsHeaderConfig>>;\n", "/** Nav chrome style slot \u2014 dashboard vs settings. Colors unified for now; texture hooks use the class. */\nexport type NavChromeStyle = 'dashboard' | 'settings';\n\n/** Document hint for first paint before framework props land. */\nexport const NAV_STYLE_HINT_ATTR = 'data-nav-style';\n\nexport function readNavStyleAttr(attr: string | null): NavChromeStyle | undefined {\n if (attr === 'dashboard' || attr === 'settings') return attr;\n return undefined;\n}\n\nexport function setNavStyleHint(style: NavChromeStyle): void {\n if (typeof document === 'undefined') return;\n document.documentElement.setAttribute(NAV_STYLE_HINT_ATTR, style);\n}\n\nexport function clearNavStyleHint(): void {\n if (typeof document === 'undefined') return;\n document.documentElement.removeAttribute(NAV_STYLE_HINT_ATTR);\n}\n\nexport function resolveNavChromeStyle(\n styleProp: NavChromeStyle,\n hostAttr: string | null,\n docHint?: string | null,\n): NavChromeStyle {\n const fromHost = readNavStyleAttr(hostAttr);\n if (fromHost) return fromHost;\n\n const hint =\n docHint !== undefined\n ? docHint\n : typeof document !== 'undefined'\n ? document.documentElement.getAttribute(NAV_STYLE_HINT_ATTR)\n : null;\n const fromHint = readNavStyleAttr(hint);\n if (fromHint) return fromHint;\n\n return styleProp;\n}\n\nexport function shouldResyncNavChromeStyle(\n renderedStyle: NavChromeStyle,\n style: NavChromeStyle,\n): boolean {\n return renderedStyle !== style;\n}\n", "import type { ChoicePopupAnchorAlignment } from '../../utils/choice-popup-alignment';\nimport type { MenuAlign, MenuSide } from './menu-position';\n\n/** Placement props bindable on `ds-menu` (side, align, offsets). */\nexport interface MenuPlacement {\n side: MenuSide;\n align: MenuAlign;\n anchorAlignment: ChoicePopupAnchorAlignment;\n sideOffset: number | string;\n alignOffset: number | string;\n}\n\n/**\n * Canonical `ds-menu` placement for the **panel-nav footer user menu**.\n * Anchor from `dsNavUserAction` detail `{ anchor }` (id `ds-panel-nav-user-menu-anchor`).\n *\n * Not for BarNav overflow menus \u2014 those use `side=\"bottom\"` / `align=\"end\"` internally.\n * `align: 'end'` bottom-aligns the last choice cell on the anchor; the side offset nudges into the content area:\n * - `sideOffset` space-100 + space-050 (12px): 4px past the panel-nav outer edge (anchor is ~8px inset).\n * - `anchorAlignment: 'choice-cell'`: the shared section inset puts the last row edge on the footer user row.\n */\nexport const PANEL_NAV_USER_MENU_PLACEMENT = {\n side: 'right',\n align: 'end',\n anchorAlignment: 'choice-cell',\n sideOffset: 'calc(var(--dimension-space-100) + var(--dimension-space-050))',\n alignOffset: 0,\n} as const satisfies MenuPlacement;\n\n/**\n * Canonical placement for a menu opened by a PanelTools header action.\n * Matches BarNav overflow: the 32px trigger is 8px inside the 48px header, so\n * a 12px side offset places the popup 4px below the header edge. Choice-cell\n * alignment keeps the final menu item edge aligned with the trigger.\n */\nexport const PANEL_TOOLS_HEADER_MENU_PLACEMENT = {\n side: 'bottom',\n align: 'end',\n anchorAlignment: 'choice-cell',\n sideOffset: 'calc(var(--dimension-space-100) + var(--dimension-space-050))',\n alignOffset: 0,\n} as const satisfies MenuPlacement;\n", "/** 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 \u2014 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 \u2014 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", "import type { PanelToolsToolId } from '../components/PanelTools/panel-tools-types';\n\nexport type ShellResponsiveMode = 'desktop' | 'tablet' | 'mobile';\nexport type MobileDestination = 'area' | 'search' | 'agents' | 'inbox' | 'help';\nexport type ShellInboxToolId = PanelToolsToolId;\n\nexport const SHELL_DESKTOP_BREAKPOINT = 1200;\nexport const SHELL_MOBILE_BREAKPOINT = 768;\nexport const SHELL_DEFAULT_INBOX_TOOL: ShellInboxToolId = 'messages';\n\nexport function resolveShellResponsiveMode(width: number): ShellResponsiveMode {\n if (width >= SHELL_DESKTOP_BREAKPOINT) return 'desktop';\n if (width >= SHELL_MOBILE_BREAKPOINT) return 'tablet';\n return 'mobile';\n}\n\nexport function resolveManagedShellPageCapacity(\n mode: ShellResponsiveMode,\n toolsOpen: boolean\n): 'roomy' | 'compact' | 'constrained' {\n if (mode === 'desktop') return toolsOpen ? 'compact' : 'roomy';\n return toolsOpen ? 'constrained' : 'compact';\n}\n\nexport function shellMobileDestinationForTool(\n open: boolean,\n tool: PanelToolsToolId | ''\n): MobileDestination {\n if (!open || !tool) return 'area';\n if (tool === 'help') return 'help';\n if (tool === 'search') return 'search';\n if (tool === 'agents') return 'agents';\n return 'inbox';\n}\n\nexport function isShellInboxTool(tool: string): tool is ShellInboxToolId {\n return tool === 'messages' || tool === 'stacks' || tool === 'activity';\n}\n\nexport function resolveAvailableInboxTool(\n preferred: string,\n available: readonly PanelToolsToolId[]\n): ShellInboxToolId | '' {\n const inbox = available.filter(isShellInboxTool);\n if (isShellInboxTool(preferred) && inbox.includes(preferred)) return preferred;\n if (inbox.includes(SHELL_DEFAULT_INBOX_TOOL)) return SHELL_DEFAULT_INBOX_TOOL;\n return inbox[0] ?? '';\n}\n\n/** Active-destination reselects are inert unless they also dismiss the Menu pane. */\nexport function shouldEmitMobileDestinationChange(\n active: MobileDestination,\n next: MobileDestination,\n navigationOpen: boolean\n): boolean {\n return navigationOpen || active !== next;\n}\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -1,11 +1,12 @@
1
1
  import type { PanelToolsToolId } from '../components/PanelTools/panel-tools-types';
2
2
  export type ShellResponsiveMode = 'desktop' | 'tablet' | 'mobile';
3
3
  export type MobileDestination = 'area' | 'search' | 'agents' | 'inbox' | 'help';
4
- export type ShellInboxToolId = Extract<PanelToolsToolId, 'messages' | 'stacks' | 'activity'>;
4
+ export type ShellInboxToolId = PanelToolsToolId;
5
5
  export declare const SHELL_DESKTOP_BREAKPOINT = 1200;
6
6
  export declare const SHELL_MOBILE_BREAKPOINT = 768;
7
7
  export declare const SHELL_DEFAULT_INBOX_TOOL: ShellInboxToolId;
8
8
  export declare function resolveShellResponsiveMode(width: number): ShellResponsiveMode;
9
+ export declare function resolveManagedShellPageCapacity(mode: ShellResponsiveMode, toolsOpen: boolean): 'roomy' | 'compact' | 'constrained';
9
10
  export declare function shellMobileDestinationForTool(open: boolean, tool: PanelToolsToolId | ''): MobileDestination;
10
11
  export declare function isShellInboxTool(tool: string): tool is ShellInboxToolId;
11
12
  export declare function resolveAvailableInboxTool(preferred: string, available: readonly PanelToolsToolId[]): ShellInboxToolId | '';