@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
package/README.md CHANGED
@@ -76,6 +76,7 @@ co-located component agent JSON and executable patterns.
76
76
 
77
77
  - [Storybook introduction and usage](src/docs/Introduction.mdx)
78
78
  - [Framework integration](docs/framework-integration.md)
79
+ - [v13 migration guide](docs/migrations/v13.md)
79
80
  - [Maintainer documentation router](docs/index.md)
80
81
  - [Repository instructions](AGENTS.md)
81
82
 
@@ -0,0 +1 @@
1
+ {"schemaVersion":1,"package":"@ds-mo/ui","version":"13.0.0","components":65,"digest":"6856eab5a9588cd7e3571d4f5eaa15f389ac205ae692f0f84b5cfb164d24e64d","completedAt":"2026-07-30T22:46:20.194Z"}
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "schemaVersion": "1.0.0",
3
3
  "package": "@ds-mo/ui",
4
- "packageVersion": "12.8.0",
4
+ "packageVersion": "13.0.0",
5
5
  "kind": "patterns",
6
6
  "entries": [
7
7
  {
@@ -66,13 +66,13 @@
66
66
  "react": {
67
67
  "status": "planned",
68
68
  "references": [
69
- "src/react/components.ts"
69
+ "docs/framework-integration.md"
70
70
  ]
71
71
  },
72
72
  "angular": {
73
73
  "status": "planned",
74
74
  "references": [
75
- "src/angular/index.ts"
75
+ "docs/framework-integration.md"
76
76
  ]
77
77
  }
78
78
  },
@@ -83,111 +83,101 @@
83
83
  },
84
84
  {
85
85
  "id": "pattern:application-shell",
86
- "status": "experimental",
87
- "summary": "Required base-page composition for standard authenticated applications, with one ShellApp coordinating primary destinations, secondary route sections, tools chrome, responsive modes, and stable main content geometry.",
86
+ "status": "stable",
87
+ "summary": "Standard authenticated application architecture: one managed ShellApp receives router-owned navigation and page data plus product-owned tool data and persistent slotted content.",
88
88
  "useWhen": [
89
- "Building any standard authenticated product or workspace page with CompoMo.",
90
- "Application navigation and tools must remain consistent around changing route content.",
91
- "Creating a reusable base-page template for CompoMo applications."
89
+ "Building a standard authenticated application or workspace with CompoMo.",
90
+ "Navigation, page chrome, global tools, and routed content must adapt across desktop, tablet, and mobile without parallel implementations.",
91
+ "Tool owners and routed content must preserve element identity while their responsive presentation changes."
92
92
  ],
93
93
  "avoidWhen": [
94
94
  "Building authentication, onboarding, public, marketing, print, error, or intentionally focused full-screen experiences.",
95
- "The page is already rendered inside an ShellApp.",
96
- "A nested or second application shell is being considered."
95
+ "The content is already rendered inside a ShellApp.",
96
+ "A specialized product has a verified reason to own every chrome component through composition=\"slotted\"."
97
97
  ],
98
98
  "components": [
99
99
  {
100
100
  "component": "component:ds-shell-app",
101
- "role": "Provides the single workspace root and coordinates shell composition, shared chrome, responsive modes, and stable content geometry.",
101
+ "role": "Standard managed owner of responsive application chrome, global-surface state, focus restoration, and stable application content slots.",
102
102
  "required": true
103
103
  },
104
104
  {
105
105
  "component": "component:ds-panel-nav",
106
- "role": "Provides the application's one primary navigation with top-level destinations and standard Dashboard/Settings and account footer controls.",
107
- "required": true
106
+ "role": "Managed desktop and tablet primary-navigation presentation; remains public for advanced slotted shells.",
107
+ "required": false
108
108
  },
109
109
  {
110
110
  "component": "component:ds-bar-nav",
111
- "role": "Provides secondary route-section navigation or the active primary destination label while preserving shell height.",
112
- "required": true
111
+ "role": "Managed desktop and tablet route-section presentation; remains public for advanced slotted shells.",
112
+ "required": false
113
113
  },
114
114
  {
115
115
  "component": "component:ds-shell-tools",
116
- "role": "Keeps each product tool owner mounted once while adapting desktop/tablet rail and drawer chrome to full-stage mobile Search, Agents, and Inbox surfaces.",
117
- "required": true
118
- },
119
- {
120
- "component": "component:ds-mobile-sheet-nav",
121
- "role": "Browses Dashboard and Settings primary areas in the mobile stage without navigating until an area is selected.",
122
- "required": true
116
+ "role": "Managed responsive adapter that presents persistent product-owned tool views through PanelTools or the mobile stage.",
117
+ "required": false
123
118
  },
124
119
  {
125
120
  "component": "component:ds-shell-page",
126
- "role": "Owns routed page header stickiness and selects the desktop or mobile header presentation from explicit shell state.",
127
- "required": true
121
+ "role": "Managed routed-page boundary with desktop BarTitle and mobile MobileHeader presentations.",
122
+ "required": false
128
123
  },
129
124
  {
130
- "component": "component:ds-mobile-header",
131
- "role": "Combines mobile page identity, peer-section switching, depth navigation, and contextual actions in one top bar.",
132
- "required": true
125
+ "component": "component:ds-mobile-sheet-nav",
126
+ "role": "Managed mobile browser for Dashboard and Settings destinations.",
127
+ "required": false
133
128
  },
134
129
  {
135
130
  "component": "component:ds-mobile-bar-nav",
136
- "role": "Provides persistent Menu, current area, Search, Agents, and Inbox destinations below 768px.",
137
- "required": true
131
+ "role": "Managed persistent mobile destinations for Menu, current area, Search, Agents, Inbox, and Help.",
132
+ "required": false
138
133
  }
139
134
  ],
140
135
  "stateOwnership": [
141
- "The application router owns the current route, Dashboard or Settings context, authorization filtering, destination and section collections, localized labels, and navigation execution.",
142
- "ShellApp owns desktop, tablet, and mobile composition, shell geometry, navStyle and responsive-mode propagation, gradient alignment, chrome transitions, metrics, inert stage boundaries, and shell shortcuts.",
143
- "PanelNav owns primary-destination presentation and the user-controlled desktop collapse preference.",
144
- "BarNav derives the active secondary route from currentUrl and basePath and receives the active PanelNav destination label as heading.",
145
- "ShellPage receives responsiveMode explicitly and exposes the same route-derived peer-section collection through MobileHeader without creating parallel mobile route state.",
146
- "Nested page tabs stay subordinate: MobileHeader sections preserve the selected area page, while subsections carry local child views without promoting them into destinations.",
147
- "The application owns mobileDestination, mobileSheetNavOpen, the actual active tool, and the last Inbox segment; ShellTools preserves product owners and presentation.",
148
- "The application router owns only the routed workspace. Search, Agents, Inbox, and Menu changes never change router history.",
149
- "PanelNav groups and BarNav dividers visually organize peers and never introduce nested navigation hierarchy."
136
+ "Lab or the consuming application supplies navigation, pageChrome, and tools objects to managed ShellApp.",
137
+ "The application router owns authorization, current URLs, history, route changes, and the routed content placed in ShellApp's default slot.",
138
+ "ShellApp emits stable navigation and page intent events; it never mutates router history.",
139
+ "ShellApp owns responsive mode, PanelNav presentation, tool open state, active tool, mobile Inbox grouping, Menu state, fullscreen presentation, focus restoration, and breakpoint state preservation.",
140
+ "Tool products and routed content are instantiated once by the application in named tool-view and default slots; ShellApp changes presentation without recreating those owners.",
141
+ "The application owns account menus, tool product data, page actions, and the consequences of every emitted intent event.",
142
+ "Use composition=\"slotted\" only when a team intentionally needs to assemble the public lower-level chrome components itself."
150
143
  ],
151
144
  "accessibility": [
152
- "Render one main landmark in the default content region.",
153
- "Use PanelNav exclusively for primary destinations and BarNav exclusively for secondary route sections.",
154
- "Keep localized visible labels and accessible names available when navigation is collapsed or moved into overflow.",
155
- "Provide localized accessible names for all five Mobile Bar Nav items and for every icon-only Mobile Sheet Nav header control.",
156
- "Expose exactly one active page heading, preserve the current navigation level in MobileHeader, and keep peer-section and optional subsection switching available through separately named popup menus.",
157
- "Preserve keyboard focus and route state across responsive and Dashboard/Settings context changes."
145
+ "Render exactly one managed ShellApp and one active routed main landmark.",
146
+ "Provide visible labels and accessible names in navigation, pageChrome, and tool definitions before passing them to ShellApp.",
147
+ "Handle ShellApp intent events without replacing focusable owners during responsive or fullscreen transitions.",
148
+ "Keep the canonical Search and Help tools available and preserve Inbox unread state when Messages, Stacks, and Activity are grouped on mobile.",
149
+ "Do not override browser keyboard chords when enabling shell shortcuts."
158
150
  ],
159
151
  "responsiveBehavior": [
160
- "Use fixed system breakpoints: desktop at 1200px and wider, tablet from 768px through 1199px, and mobile below 768px.",
161
- "Desktop permits PanelNav expansion and collapse and restores the persisted user preference.",
162
- "Tablet keeps PanelNav permanently collapsed and does not overwrite the desktop preference.",
163
- "Mobile hides and inerts PanelNav and BarNav, removes the gradient wash, and uses a solid primary stage above a safe-area-aware persistent bottom bar.",
164
- "Each routed ShellPage renders one sticky MobileHeader; nested local views use its subordinate subsection lane while the primary lane retains the page or entity identity.",
165
- "The routed workspace stays mounted and is only concealed and inert while a global surface or navigation pane occupies the stage.",
166
- "Messages, Stacks, and Activity map to mobile Inbox and preserve the selected segment across destination and breakpoint changes."
152
+ "ShellApp automatically resolves desktop at 1200px and wider, tablet from 768px through 1199px, and mobile below 768px.",
153
+ "Desktop and tablet use PanelNav, BarNav, PanelTools through ShellTools, and ShellPage chrome.",
154
+ "Mobile uses MobileSheetNav, MobileBarNav, MobileHeader, ShellTools mobile presentation, and the same routed content owner.",
155
+ "Switching breakpoints changes presentation and inert state without recreating route or tool elements.",
156
+ "Messages, Stacks, and Activity use explicit mobile grouping metadata and default to the canonical Inbox recipe."
167
157
  ],
168
158
  "implementations": {
169
159
  "customElements": {
170
160
  "status": "verified",
171
161
  "recipes": [
172
162
  {
173
- "id": "responsive-shell",
174
- "title": "Responsive application shell",
175
- "summary": "One routed workspace and one set of persistent tool owners shared across desktop, tablet, and mobile presentations.",
163
+ "id": "managed-shell",
164
+ "title": "Managed application shell",
165
+ "summary": "Supply typed data and persistent application-owned content to one ShellApp.",
176
166
  "files": [
177
167
  {
178
168
  "path": "app-shell.html",
179
169
  "language": "html",
180
- "content": "<ds-shell-app id=\"shell\" mobile-destination=\"area\">\n <ds-panel-nav id=\"panel\" slot=\"panel\"></ds-panel-nav>\n <ds-mobile-sheet-nav id=\"mobile-sheet-nav\" slot=\"mobile-sheet-nav\"></ds-mobile-sheet-nav>\n <ds-bar-nav id=\"bar\" slot=\"bar\"></ds-bar-nav>\n <ds-shell-tools id=\"tools\" slot=\"tools\">\n <app-search slot=\"search-view\"></app-search>\n <app-agents slot=\"agents-view\"></app-agents>\n <app-messages slot=\"messages-view\"></app-messages>\n <app-stacks slot=\"stacks-view\"></app-stacks>\n <app-activity slot=\"activity-view\"></app-activity>\n <app-help slot=\"help-view\"></app-help>\n </ds-shell-tools>\n <ds-shell-page id=\"page\" responsive-mode=\"mobile\">\n <ds-bar-title slot=\"header\" heading=\"Live Map\"></ds-bar-title>\n <ds-mobile-header slot=\"mobile-header\" heading=\"Live Map\"></ds-mobile-header>\n <main><!-- routed workspace --></main>\n </ds-shell-page>\n <ds-mobile-bar-nav id=\"mobile-bar-nav\" slot=\"mobile-bar-nav\"></ds-mobile-bar-nav>\n</ds-shell-app>"
170
+ "content": "<ds-shell-app id=\"shell\">\n <app-search slot=\"search-view\"></app-search>\n <app-agents slot=\"agents-view\"></app-agents>\n <app-messages slot=\"messages-view\"></app-messages>\n <app-stacks slot=\"stacks-view\"></app-stacks>\n <app-activity slot=\"activity-view\"></app-activity>\n <app-help slot=\"help-view\"></app-help>\n <app-route-content><!-- router-owned page --></app-route-content>\n</ds-shell-app>"
181
171
  },
182
172
  {
183
173
  "path": "app-shell.ts",
184
174
  "language": "typescript",
185
- "content": "import '@ds-mo/ui/components/ds-shell-app.js'\nimport '@ds-mo/ui/components/ds-panel-nav.js'\nimport '@ds-mo/ui/components/ds-bar-nav.js'\nimport '@ds-mo/ui/components/ds-bar-title.js'\nimport '@ds-mo/ui/components/ds-shell-page.js'\nimport '@ds-mo/ui/components/ds-shell-tools.js'\nimport '@ds-mo/ui/components/ds-mobile-sheet-nav.js'\nimport '@ds-mo/ui/components/ds-mobile-header.js'\nimport '@ds-mo/ui/components/ds-mobile-bar-nav.js'\nimport type { MobileDestination } from '@ds-mo/ui/shell'\n\nconst shell = document.querySelector<HTMLDsShellAppElement>('#shell')!\nconst bar = document.querySelector<HTMLDsMobileBarNavElement>('#mobile-bar-nav')!\nconst sheetNav = document.querySelector<HTMLDsMobileSheetNavElement>('#mobile-sheet-nav')!\n\nfunction setMobileState(destination: MobileDestination, sheetNavOpen = false) {\n shell.mobileDestination = destination\n shell.mobileSheetNavOpen = sheetNavOpen\n bar.activeDestination = destination\n bar.sheetNavExpanded = sheetNavOpen\n sheetNav.open = sheetNavOpen\n}\n\nbar.addEventListener('dsSheetNavToggle', event => setMobileState(shell.mobileDestination, event.detail))\nbar.addEventListener('dsDestinationChange', event => setMobileState(event.detail.destination))"
175
+ "content": "import '@ds-mo/ui/components/ds-shell-app.js'\nimport { PANEL_TOOLS_DEFAULT_ITEMS } from '@ds-mo/ui/shell'\nimport type { ShellNavigationConfig, ShellPageChromeConfig, ShellToolsConfig } from '@ds-mo/ui/shell'\n\nconst shell = document.querySelector<HTMLDsShellAppElement>('#shell')!\nconst navigation: ShellNavigationConfig = {\n groups: [{ items: [{ id: 'overview', icon: 'Home', label: 'Overview', href: '/dashboard/overview' }] }],\n dashboardGroups: [{ items: [{ id: 'overview', icon: 'Home', label: 'Overview', href: '/dashboard/overview' }] }],\n currentUrl: location.pathname,\n browseContext: 'dashboard',\n routerMode: 'event',\n userName: 'User Name',\n userInitial: 'U',\n}\nconst pageChrome: ShellPageChromeConfig = {\n heading: 'Overview',\n tabs: [{ id: 'overview', label: 'Overview', href: '/dashboard/overview' }],\n value: 'overview',\n currentUrl: location.pathname,\n}\nconst tools: ShellToolsConfig = { items: PANEL_TOOLS_DEFAULT_ITEMS }\nshell.navigation = navigation\nshell.pageChrome = pageChrome\nshell.tools = tools\nshell.addEventListener('dsNavSelect', event => appRouter.navigate(event.detail))\nshell.addEventListener('dsTabChange', event => appRouter.navigate(event.detail))"
186
176
  }
187
177
  ],
188
178
  "notes": [
189
- "Assign navigation groups, tabs, items, headers, and current-area data as JavaScript properties.",
190
- "The router outlet remains in the default slot and global destination changes do not navigate."
179
+ "Update navigation and pageChrome together after router navigation.",
180
+ "Keep every tool owner and the router-owned page mounted in its slot."
191
181
  ]
192
182
  }
193
183
  ],
@@ -200,23 +190,24 @@
200
190
  "status": "verified",
201
191
  "recipes": [
202
192
  {
203
- "id": "responsive-shell",
204
- "title": "Responsive application shell",
205
- "summary": "A controlled React shell coordinator with stable routed and tool children.",
193
+ "id": "managed-shell",
194
+ "title": "Managed React application shell",
195
+ "summary": "Use the generated ShellApp wrapper with memoized router-owned configuration and stable children.",
206
196
  "files": [
207
197
  {
208
198
  "path": "AppShell.tsx",
209
199
  "language": "tsx",
210
- "content": "import { useState } from 'react'\nimport type { MobileDestination } from '@ds-mo/ui/shell'\nimport { DsBarNav, DsBarTitle, DsMobileBarNav, DsMobileHeader, DsMobileSheetNav, DsPanelNav, DsShellApp, DsShellPage, DsShellTools } from '@ds-mo/ui/react'\n\nexport function AppShell() {\n const [destination, setDestination] = useState<MobileDestination>('area')\n const [sheetNavOpen, setSheetNavOpen] = useState(false)\n return (\n <DsShellApp mobileDestination={destination} mobileSheetNavOpen={sheetNavOpen}>\n <DsPanelNav slot=\"panel\" />\n <DsMobileSheetNav slot=\"mobile-sheet-nav\" open={sheetNavOpen} />\n <DsBarNav slot=\"bar\" />\n <DsShellTools slot=\"tools\"><div slot=\"search-view\">Search</div></DsShellTools>\n <DsShellPage responsiveMode=\"mobile\"><DsBarTitle slot=\"header\" heading=\"Live Map\" /><DsMobileHeader slot=\"mobile-header\" heading=\"Live Map\" /><main>{/* routed workspace */}</main></DsShellPage>\n <DsMobileBarNav slot=\"mobile-bar-nav\" activeDestination={destination} sheetNavExpanded={sheetNavOpen} onDsSheetNavToggle={event => setSheetNavOpen(event.detail)} onDsDestinationChange={event => { setSheetNavOpen(false); setDestination(event.detail.destination) }} />\n </DsShellApp>\n )\n}"
200
+ "content": "import { useMemo } from 'react'\nimport { DsShellApp } from '@ds-mo/ui/react'\nimport { PANEL_TOOLS_DEFAULT_ITEMS } from '@ds-mo/ui/shell'\nimport type { ShellNavigationConfig, ShellPageChromeConfig } from '@ds-mo/ui/shell'\n\nexport function AppShell({ route, navigate, children }) {\n const navigation = useMemo<ShellNavigationConfig>(() => ({ groups: route.groups, dashboardGroups: route.dashboardGroups, settingsGroups: route.settingsGroups, currentUrl: route.url, browseContext: route.context, routerMode: 'event', userName: route.user.name, userInitial: route.user.initial }), [route])\n const pageChrome = useMemo<ShellPageChromeConfig>(() => ({ heading: route.heading, tabs: route.sections, value: route.section, currentUrl: route.url }), [route])\n return <DsShellApp navigation={navigation} pageChrome={pageChrome} tools={{ items: PANEL_TOOLS_DEFAULT_ITEMS }} onDsNavSelect={event => navigate(event.detail)} onDsTabChange={event => navigate(event.detail)}>\n <SearchProduct slot=\"search-view\" />\n <AgentsProduct slot=\"agents-view\" />\n <InboxProduct slot=\"messages-view\" />\n <HelpProduct slot=\"help-view\" />\n {children}\n </DsShellApp>\n}"
211
201
  }
212
202
  ],
213
203
  "notes": [
214
- "Keep routed and tool-owner element identity stable; control only shell visibility and selection state."
204
+ "Memoize structured configuration so unrelated product renders do not produce artificial shell input changes.",
205
+ "Do not conditionally recreate routed or tool children when responsive mode changes."
215
206
  ]
216
207
  }
217
208
  ],
218
209
  "references": [
219
- "src/react/components.ts",
210
+ "src/wc/components/ShellApp/ShellApp.mdx",
220
211
  "docs/framework-integration.md"
221
212
  ]
222
213
  },
@@ -224,23 +215,24 @@
224
215
  "status": "verified",
225
216
  "recipes": [
226
217
  {
227
- "id": "responsive-shell",
228
- "title": "Responsive application shell",
229
- "summary": "A controlled Angular shell using generated standalone adapters and native slot names.",
218
+ "id": "managed-shell",
219
+ "title": "Managed Angular application shell",
220
+ "summary": "Bind router-derived object properties to the generated standalone ShellApp adapter.",
230
221
  "files": [
231
222
  {
232
223
  "path": "app-shell.component.html",
233
224
  "language": "html",
234
- "content": "<ds-shell-app [mobileDestination]=\"destination\" [mobileSheetNavOpen]=\"sheetNavOpen\">\n <ds-panel-nav slot=\"panel\"></ds-panel-nav>\n <ds-mobile-sheet-nav slot=\"mobile-sheet-nav\" [open]=\"sheetNavOpen\"></ds-mobile-sheet-nav>\n <ds-bar-nav slot=\"bar\"></ds-bar-nav>\n <ds-shell-tools slot=\"tools\"><app-search slot=\"search-view\" /></ds-shell-tools>\n <ds-shell-page [responsiveMode]=\"mode\"><ds-bar-title slot=\"header\" heading=\"Live Map\"></ds-bar-title><ds-mobile-header slot=\"mobile-header\" heading=\"Live Map\"></ds-mobile-header><router-outlet /></ds-shell-page>\n <ds-mobile-bar-nav slot=\"mobile-bar-nav\" [activeDestination]=\"destination\" [sheetNavExpanded]=\"sheetNavOpen\" (dsSheetNavToggle)=\"sheetNavOpen = $event.detail\" (dsDestinationChange)=\"selectDestination($event.detail.destination)\"></ds-mobile-bar-nav>\n</ds-shell-app>"
225
+ "content": "<ds-shell-app [navigation]=\"navigation\" [pageChrome]=\"pageChrome\" [tools]=\"tools\" (dsNavSelect)=\"navigate($event.detail)\" (dsTabChange)=\"navigate($event.detail)\">\n <app-search slot=\"search-view\" />\n <app-agents slot=\"agents-view\" />\n <app-messages slot=\"messages-view\" />\n <app-help slot=\"help-view\" />\n <router-outlet />\n</ds-shell-app>"
235
226
  },
236
227
  {
237
228
  "path": "app-shell.component.ts",
238
229
  "language": "typescript",
239
- "content": "import { Component } from '@angular/core'\nimport { RouterOutlet } from '@angular/router'\nimport type { MobileDestination, ShellResponsiveMode } from '@ds-mo/ui/shell'\nimport { DsBarNav } from '@ds-mo/ui/angular/ds-bar-nav'\nimport { DsBarTitle } from '@ds-mo/ui/angular/ds-bar-title'\nimport { DsMobileBarNav } from '@ds-mo/ui/angular/ds-mobile-bar-nav'\nimport { DsMobileHeader } from '@ds-mo/ui/angular/ds-mobile-header'\nimport { DsMobileSheetNav } from '@ds-mo/ui/angular/ds-mobile-sheet-nav'\nimport { DsPanelNav } from '@ds-mo/ui/angular/ds-panel-nav'\nimport { DsShellApp } from '@ds-mo/ui/angular/ds-shell-app'\nimport { DsShellPage } from '@ds-mo/ui/angular/ds-shell-page'\nimport { DsShellTools } from '@ds-mo/ui/angular/ds-shell-tools'\n\n@Component({ selector: 'app-shell', standalone: true, imports: [RouterOutlet, DsBarNav, DsBarTitle, DsMobileBarNav, DsMobileHeader, DsMobileSheetNav, DsPanelNav, DsShellApp, DsShellPage, DsShellTools], templateUrl: './app-shell.component.html' })\nexport class AppShellComponent {\n destination: MobileDestination = 'area'\n sheetNavOpen = false\n mode: ShellResponsiveMode = 'desktop'\n selectDestination(destination: MobileDestination) { this.sheetNavOpen = false; this.destination = destination }\n}"
230
+ "content": "import { Component } from '@angular/core'\nimport { Router, RouterOutlet } from '@angular/router'\nimport { DsShellApp } from '@ds-mo/ui/angular/ds-shell-app'\nimport { PANEL_TOOLS_DEFAULT_ITEMS } from '@ds-mo/ui/shell'\nimport type { ShellNavigationConfig, ShellPageChromeConfig, ShellToolsConfig } from '@ds-mo/ui/shell'\n\n@Component({ selector: 'app-shell', standalone: true, imports: [DsShellApp, RouterOutlet], templateUrl: './app-shell.component.html' })\nexport class AppShellComponent {\n navigation: ShellNavigationConfig = { groups: [], dashboardGroups: [], settingsGroups: [], routerMode: 'event' }\n pageChrome: ShellPageChromeConfig = { heading: '' }\n tools: ShellToolsConfig = { items: PANEL_TOOLS_DEFAULT_ITEMS }\n constructor(private router: Router) {}\n navigate(target: string) { void this.router.navigateByUrl(target) }\n}"
240
231
  }
241
232
  ],
242
233
  "notes": [
243
- "Bind structured navigation and tool data as properties and update router-derived inputs together."
234
+ "Resolve and replace navigation and pageChrome on completed router navigation.",
235
+ "The router outlet and tool components remain application-owned slots."
244
236
  ]
245
237
  }
246
238
  ],
@@ -252,7 +244,8 @@
252
244
  },
253
245
  "references": [
254
246
  "src/wc/components/ShellApp/ShellApp.mdx",
255
- "docs/framework-integration.md"
247
+ "docs/framework-integration.md",
248
+ "docs/migrations/v13.md"
256
249
  ]
257
250
  },
258
251
  {
@@ -335,13 +328,13 @@
335
328
  "react": {
336
329
  "status": "planned",
337
330
  "references": [
338
- "src/react/components.ts"
331
+ "docs/framework-integration.md"
339
332
  ]
340
333
  },
341
334
  "angular": {
342
335
  "status": "planned",
343
336
  "references": [
344
- "src/angular/index.ts"
337
+ "docs/framework-integration.md"
345
338
  ]
346
339
  }
347
340
  },
@@ -461,8 +454,8 @@
461
454
  }
462
455
  ],
463
456
  "references": [
464
- "src/react/ds-button-unfilled.ts",
465
- "src/react/ds-menu.ts"
457
+ "docs/framework-integration.md",
458
+ "src/wc/components/Menu/Menu.stories.ts"
466
459
  ]
467
460
  },
468
461
  "angular": {
@@ -491,8 +484,8 @@
491
484
  }
492
485
  ],
493
486
  "references": [
494
- "src/angular/ds-button-unfilled.ts",
495
- "src/angular/ds-menu.ts"
487
+ "docs/framework-integration.md",
488
+ "src/wc/components/Menu/Menu.stories.ts"
496
489
  ]
497
490
  }
498
491
  },
@@ -505,135 +498,131 @@
505
498
  {
506
499
  "id": "pattern:shell-page",
507
500
  "status": "stable",
508
- "summary": "Compose one ShellPage inside ShellApp's content region with a slotted BarTitle and application-owned routed content.",
501
+ "summary": "Supply route-owned page chrome and content to managed ShellApp, which composes ShellPage, BarTitle, and MobileHeader without duplicate page state.",
509
502
  "useWhen": [
510
- "A standard authenticated route needs shared page title chrome, sticky scroll compaction, and consistent content inset.",
511
- "The page column can change width as global navigation or tools open and close."
503
+ "A standard authenticated route needs a shared heading, sections, depth, actions, sticky compaction, and content inset.",
504
+ "The routed page must keep one content owner while desktop and mobile header presentations differ."
512
505
  ],
513
506
  "avoidWhen": [
514
507
  "The experience does not use the standard authenticated ShellApp layout.",
515
- "The content belongs to a drawer, modal, card, or fullscreen tool pane.",
516
- "A ShellPage already owns the route; never nest ShellPages."
508
+ "The content belongs to a drawer, modal, card, or global tool pane.",
509
+ "Another route owner already supplies the active ShellApp pageChrome."
517
510
  ],
518
511
  "components": [
519
512
  {
520
513
  "component": "component:ds-shell-app",
521
- "role": "Owns global chrome and the single scrolling content region.",
514
+ "role": "Receives pageChrome and persistent routed content, then owns responsive page presentation.",
522
515
  "required": true
523
516
  },
524
517
  {
525
518
  "component": "component:ds-shell-page",
526
- "role": "Owns the page main landmark, sticky header orchestration, responsive variants, and content inset.",
527
- "required": true
519
+ "role": "Managed internal page boundary; remains public for advanced slotted ShellApp composition.",
520
+ "required": false
528
521
  },
529
522
  {
530
523
  "component": "component:ds-bar-title",
531
- "role": "Provides the page h1, inline route-section selector, Back intent, and page actions.",
532
- "required": true
524
+ "role": "Managed desktop/tablet page-header presentation; remains public for advanced slotted composition.",
525
+ "required": false
526
+ },
527
+ {
528
+ "component": "component:ds-mobile-header",
529
+ "role": "Managed mobile page-header presentation using the same route-owned pageChrome data.",
530
+ "required": false
533
531
  }
534
532
  ],
535
533
  "stateOwnership": [
536
- "ShellApp owns global navigation, tools, and scrolling; ShellPage never creates another scroll container.",
537
- "ShellPage owns automatic BarTitle variant selection. Consumers do not synchronize BarTitle.variant when headerPresentation is auto.",
538
- "The route owner owns heading copy, Back consequences, selected section value, available actions, data, forms, and product outcomes.",
539
- "Keep dsSectionChange controlled by updating the route and passing the resolved value back to BarTitle."
534
+ "The router owns heading copy, selected section, depth, available actions, route data, and product outcomes.",
535
+ "The application replaces pageChrome from completed route state and handles ShellApp page intent events.",
536
+ "ShellApp owns ShellPage, BarTitle, MobileHeader, the content scroller, sticky presentation, and responsive switching.",
537
+ "The default slot contains application-owned routed content and is not recreated for header compaction or breakpoint changes.",
538
+ "Use a directly slotted ShellPage only inside composition=\"slotted\"."
540
539
  ],
541
540
  "accessibility": [
542
- "Render one active ShellPage so the application contains one routed-page main landmark.",
543
- "Provide one BarTitle in slot=header and one concise heading so the page contains one h1.",
544
- "Use destination-specific Back labels and preserve action labels across inline and overflow presentations.",
545
- "Keep route loading, error, empty, success, and validation communication in the ShellPage content slot."
541
+ "Keep exactly one active routed main landmark, supplied by the managed ShellPage.",
542
+ "Provide one concise route heading and destination-specific Back and action labels through pageChrome.",
543
+ "Keep route loading, error, empty, success, and validation communication in the default page-content slot.",
544
+ "Handle section and Back intent through the router without replacing focused tool or page owners unnecessarily."
546
545
  ],
547
546
  "responsiveBehavior": [
548
- "Resolve viewport and persistent shell chrome into ShellPage.headerCapacity; ShellPage uses that explicit capacity plus scroll position to select expanded, compact, or constrained presentation.",
549
- "Set primaryAction.collapse to never only when an ordinary routed-page action must preserve visible hierarchy; create and edit workflows use BarWorkflow instead.",
547
+ "ShellApp derives the desktop BarTitle and mobile MobileHeader from the same pageChrome object.",
548
+ "Route-level sections remain pageChrome tabs; subordinate local views use subsections.",
550
549
  "Use contentInset none only for deliberately full-bleed products such as maps and canvases.",
551
- "Place TabGroup inside ShellPage content for inner-page panels; route-level sections remain in BarTitle."
550
+ "The routed content owner remains mounted while header presentation compacts or changes breakpoint."
552
551
  ],
553
552
  "implementations": {
554
553
  "customElements": {
555
554
  "status": "verified",
556
555
  "recipes": [
557
556
  {
558
- "id": "routed-page",
559
- "title": "Routed page shell",
560
- "summary": "A standard page with an inline section selector and application-owned content.",
557
+ "id": "managed-page-chrome",
558
+ "title": "Managed routed page chrome",
559
+ "summary": "Assign route state to ShellApp and leave page structure to the managed composition.",
561
560
  "files": [
562
561
  {
563
- "path": "page.html",
564
- "language": "html",
565
- "content": "<ds-shell-app>\n <ds-shell-page header-capacity=\"roomy\">\n <ds-bar-title\n id=\"drivers-header\"\n slot=\"header\"\n heading=\"Drivers\"\n value=\"active\"\n ></ds-bar-title>\n <section aria-label=\"Driver results\">Page content</section>\n </ds-shell-page>\n</ds-shell-app>"
566
- },
567
- {
568
- "path": "page.ts",
562
+ "path": "drivers-page.ts",
569
563
  "language": "typescript",
570
- "content": "import '@ds-mo/ui/dist/components/ds-shell-app.js'\nimport '@ds-mo/ui/dist/components/ds-shell-page.js'\nimport '@ds-mo/ui/dist/components/ds-bar-title.js'\n\nconst header = document.querySelector<HTMLDsBarTitleElement>('#drivers-header')!\nheader.sections = [\n { id: 'active', label: 'Active' },\n { id: 'inactive', label: 'Inactive' },\n]\nheader.primaryAction = { id: 'create', label: 'Create driver' }\nheader.addEventListener('dsSectionChange', event => {\n const value = (event as CustomEvent<string>).detail\n // Update the route, then pass the resolved route value back to the header.\n header.value = value\n})"
564
+ "content": "import type { ShellPageChromeConfig } from '@ds-mo/ui/shell'\n\nconst shell = document.querySelector<HTMLDsShellAppElement>('ds-shell-app')!\nconst pageChrome: ShellPageChromeConfig = {\n heading: 'Drivers',\n tabs: [{ id: 'active', label: 'Active' }, { id: 'inactive', label: 'Inactive' }],\n value: 'active',\n primaryAction: { id: 'create', label: 'Create driver' },\n}\nshell.pageChrome = pageChrome\nshell.addEventListener('dsTabChange', event => appRouter.navigate(event.detail))\nshell.addEventListener('dsPageAction', event => driverActions.run(event.detail))"
571
565
  }
572
566
  ],
573
567
  "notes": [
574
- "The complete application also supplies PanelNav, BarNav, and PanelTools through ShellApp's named slots.",
575
- "Do not put page content inside BarTitle."
568
+ "Replace pageChrome after router navigation instead of maintaining duplicate local route selection.",
569
+ "Render routed content in the managed ShellApp default slot."
576
570
  ]
577
571
  }
578
572
  ],
579
573
  "references": [
580
- "src/wc/components/ShellPage/ShellPage.stories.ts",
581
- "tests/e2e/fixtures/bar-title.html"
574
+ "src/wc/components/ShellApp/ShellApp.stories.ts",
575
+ "src/wc/components/ShellPage/ShellPage.stories.ts"
582
576
  ]
583
577
  },
584
578
  "react": {
585
579
  "status": "verified",
586
580
  "recipes": [
587
581
  {
588
- "id": "routed-page",
589
- "title": "React routed page shell",
590
- "summary": "Generated React wrappers with controlled route-section state.",
582
+ "id": "managed-page-chrome",
583
+ "title": "React managed routed page",
584
+ "summary": "Pass router-derived page chrome to the persistent ShellApp owner.",
591
585
  "files": [
592
586
  {
593
- "path": "DriversPage.tsx",
587
+ "path": "DriversRoute.tsx",
594
588
  "language": "tsx",
595
- "content": "import { useState } from 'react'\nimport { DsShellApp, DsBarTitle, DsShellPage } from '@ds-mo/ui/react'\n\nconst sections = [\n { id: 'active', label: 'Active' },\n { id: 'inactive', label: 'Inactive' },\n]\n\nexport function DriversPage() {\n const [value, setValue] = useState('active')\n return (\n <DsShellApp>\n <DsShellPage headerCapacity=\"roomy\">\n <DsBarTitle\n slot=\"header\"\n heading=\"Drivers\"\n sections={sections}\n value={value}\n primaryAction={{ id: 'create', label: 'Create driver' }}\n onDsSectionChange={event => setValue(event.detail)}\n />\n <section aria-label=\"Driver results\">Page content</section>\n </DsShellPage>\n </DsShellApp>\n )\n}"
589
+ "content": "import type { ShellPageChromeConfig } from '@ds-mo/ui/shell'\n\nexport const driversPageChrome: ShellPageChromeConfig = {\n heading: 'Drivers',\n tabs: [{ id: 'active', label: 'Active' }, { id: 'inactive', label: 'Inactive' }],\n value: 'active',\n primaryAction: { id: 'create', label: 'Create driver' },\n}\n\nexport function DriversRoute() {\n return <section aria-label=\"Driver results\">Page content</section>\n}"
596
590
  }
597
591
  ],
598
592
  "notes": [
599
- "Resolve value from router state in production rather than keeping duplicate local route state.",
600
- "Use contentInset=\"none\" only for full-bleed pages."
593
+ "The persistent application layout supplies driversPageChrome to DsShellApp.",
594
+ "Do not wrap the route in another ShellApp or ShellPage."
601
595
  ]
602
596
  }
603
597
  ],
604
598
  "references": [
605
- "src/react/ds-shell-page.ts",
606
- "src/react/ds-bar-title.ts"
599
+ "src/wc/components/ShellApp/ShellApp.mdx",
600
+ "docs/framework-integration.md"
607
601
  ]
608
602
  },
609
603
  "angular": {
610
604
  "status": "verified",
611
605
  "recipes": [
612
606
  {
613
- "id": "routed-page",
614
- "title": "Angular routed page shell",
615
- "summary": "Generated standalone adapters with router-owned page content.",
607
+ "id": "managed-page-chrome",
608
+ "title": "Angular managed routed page",
609
+ "summary": "Expose route-owned pageChrome to the persistent shell layout.",
616
610
  "files": [
617
611
  {
618
- "path": "drivers-page.component.html",
619
- "language": "html",
620
- "content": "<ds-shell-page [headerCapacity]=\"headerCapacity\">\n <ds-bar-title\n slot=\"header\"\n heading=\"Drivers\"\n [sections]=\"sections\"\n [value]=\"selectedSection\"\n [primaryAction]=\"primaryAction\"\n (dsSectionChange)=\"selectSection($event.detail)\"\n ></ds-bar-title>\n <router-outlet />\n</ds-shell-page>"
621
- },
622
- {
623
- "path": "drivers-page.component.ts",
612
+ "path": "drivers-page-chrome.ts",
624
613
  "language": "typescript",
625
- "content": "import { Component } from '@angular/core'\nimport { RouterOutlet } from '@angular/router'\nimport type { ShellPageCapacity } from '@ds-mo/ui'\nimport { DsBarTitle } from '@ds-mo/ui/angular/ds-bar-title'\nimport { DsShellPage } from '@ds-mo/ui/angular/ds-shell-page'\n\n@Component({\n standalone: true,\n imports: [DsBarTitle, DsShellPage, RouterOutlet],\n templateUrl: './drivers-page.component.html',\n})\nexport class DriversPageComponent {\n readonly headerCapacity: ShellPageCapacity = 'roomy'\n readonly sections = [\n { id: 'active', label: 'Active' },\n { id: 'inactive', label: 'Inactive' },\n ]\n readonly primaryAction = { id: 'create', label: 'Create driver' }\n selectedSection = 'active'\n\n selectSection(id: string) {\n this.selectedSection = id\n // Navigate to the matching child route.\n }\n}"
614
+ "content": "import type { ShellPageChromeConfig } from '@ds-mo/ui/shell'\n\nexport const DRIVERS_PAGE_CHROME: ShellPageChromeConfig = {\n heading: 'Drivers',\n tabs: [{ id: 'active', label: 'Active' }, { id: 'inactive', label: 'Inactive' }],\n value: 'active',\n primaryAction: { id: 'create', label: 'Create driver' },\n}"
626
615
  }
627
616
  ],
628
617
  "notes": [
629
- "ShellApp belongs in the persistent application layout; routed page components render ShellPage in its default content slot.",
630
- "Do not add an overflow-auto wrapper around ds-shell-page."
618
+ "The persistent Angular shell binds the resolved pageChrome object to DsShellApp.",
619
+ "The routed component renders only product content."
631
620
  ]
632
621
  }
633
622
  ],
634
623
  "references": [
635
- "src/angular/ds-shell-page.ts",
636
- "src/angular/ds-bar-title.ts"
624
+ "docs/framework-integration.md",
625
+ "scripts/verify-package-imports.mjs"
637
626
  ]
638
627
  }
639
628
  },