@ds-mo/ui 12.2.0 → 12.4.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 (301) hide show
  1. package/README.md +8 -2
  2. package/dist/.build-stamp +1 -1
  3. package/dist/agent-patterns.json +94 -16
  4. package/dist/agent.json +1092 -53
  5. package/dist/angular/ds-bar-title.d.ts +7 -1
  6. package/dist/angular/ds-bar-title.js +7 -4
  7. package/dist/angular/ds-breadcrumb.d.ts +19 -0
  8. package/dist/angular/ds-breadcrumb.js +42 -0
  9. package/dist/angular/ds-card-data-viz-bar.d.ts +18 -0
  10. package/dist/angular/ds-card-data-viz-bar.js +42 -0
  11. package/dist/angular/ds-card-data-viz-line.d.ts +18 -0
  12. package/dist/angular/ds-card-data-viz-line.js +42 -0
  13. package/dist/angular/ds-chart-bar-stacked.d.ts +12 -0
  14. package/dist/angular/ds-chart-bar-stacked.js +38 -0
  15. package/dist/angular/ds-chart-legend.d.ts +1 -1
  16. package/dist/angular/ds-chart-legend.js +3 -3
  17. package/dist/angular/ds-shell-app.d.ts +13 -2
  18. package/dist/angular/ds-shell-app.js +9 -5
  19. package/dist/angular/ds-shell-mobile-bar.d.ts +18 -0
  20. package/dist/angular/ds-shell-mobile-bar.js +46 -0
  21. package/dist/angular/ds-shell-mobile-nav.d.ts +23 -0
  22. package/dist/angular/ds-shell-mobile-nav.js +51 -0
  23. package/dist/angular/ds-shell-mobile-section-nav.d.ts +18 -0
  24. package/dist/angular/ds-shell-mobile-section-nav.js +42 -0
  25. package/dist/angular/ds-shell-page.d.ts +1 -1
  26. package/dist/angular/ds-shell-page.js +3 -3
  27. package/dist/angular/ds-shell-tools.d.ts +42 -0
  28. package/dist/angular/ds-shell-tools.js +52 -0
  29. package/dist/angular/index.d.ts +1 -1
  30. package/dist/angular/index.js +8 -0
  31. package/dist/angular/proxies.d.ts +8 -0
  32. package/dist/angular/proxies.js +8 -0
  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-title.js +1 -1
  41. package/dist/components/ds-bar-title.js.map +1 -1
  42. package/dist/components/ds-bar-workflow.js +1 -1
  43. package/dist/components/ds-breadcrumb.d.ts +11 -0
  44. package/dist/components/ds-breadcrumb.js +2 -0
  45. package/dist/components/ds-breadcrumb.js.map +1 -0
  46. package/dist/components/ds-button-filled.js +1 -1
  47. package/dist/components/ds-button-unfilled.js +1 -1
  48. package/dist/components/ds-card-data-viz-bar.d.ts +11 -0
  49. package/dist/components/ds-card-data-viz-bar.js +2 -0
  50. package/dist/components/ds-card-data-viz-bar.js.map +1 -0
  51. package/dist/components/ds-card-data-viz-donut.js +1 -1
  52. package/dist/components/ds-card-data-viz-donut.js.map +1 -1
  53. package/dist/components/ds-card-data-viz-line.d.ts +11 -0
  54. package/dist/components/ds-card-data-viz-line.js +2 -0
  55. package/dist/components/ds-card-data-viz-line.js.map +1 -0
  56. package/dist/components/ds-card-setting.js +1 -1
  57. package/dist/components/ds-card-setting.js.map +1 -1
  58. package/dist/components/ds-card-shell-data-viz.js +1 -1
  59. package/dist/components/ds-chart-bar-stacked.d.ts +11 -0
  60. package/dist/components/ds-chart-bar-stacked.js +2 -0
  61. package/dist/components/ds-chart-bar-stacked.js.map +1 -0
  62. package/dist/components/ds-chart-bar.js +1 -1
  63. package/dist/components/ds-chart-bar.js.map +1 -1
  64. package/dist/components/ds-chart-donut.js +1 -1
  65. package/dist/components/ds-chart-legend.js +1 -1
  66. package/dist/components/ds-chart-legend.js.map +1 -1
  67. package/dist/components/ds-chart-line.js +1 -1
  68. package/dist/components/ds-chart-line.js.map +1 -1
  69. package/dist/components/ds-checkbox.js +1 -1
  70. package/dist/components/ds-chip.js +1 -1
  71. package/dist/components/ds-code-block.js +1 -1
  72. package/dist/components/ds-conversation-list-item.js +1 -1
  73. package/dist/components/ds-conversation-list-item.js.map +1 -1
  74. package/dist/components/ds-conversation-list-section.js +1 -1
  75. package/dist/components/ds-conversation-list.js +1 -1
  76. package/dist/components/ds-divider.js +1 -1
  77. package/dist/components/ds-empty-state.js +1 -1
  78. package/dist/components/ds-field.js +1 -1
  79. package/dist/components/ds-input.js +1 -1
  80. package/dist/components/ds-markdown.js +1 -1
  81. package/dist/components/ds-menu.js +1 -1
  82. package/dist/components/ds-message-bubble.js +1 -1
  83. package/dist/components/ds-message-bubble.js.map +1 -1
  84. package/dist/components/ds-message-composer.js +1 -1
  85. package/dist/components/ds-message-scroller.js +1 -1
  86. package/dist/components/ds-message-scroller.js.map +1 -1
  87. package/dist/components/ds-message.js +1 -1
  88. package/dist/components/ds-modal.js +1 -1
  89. package/dist/components/ds-modal.js.map +1 -1
  90. package/dist/components/ds-panel-nav.js +1 -1
  91. package/dist/components/ds-panel-nav.js.map +1 -1
  92. package/dist/components/ds-panel-sub-nav.js +1 -1
  93. package/dist/components/ds-panel-tool-header.js +1 -1
  94. package/dist/components/ds-panel-tool-search.js +1 -1
  95. package/dist/components/ds-panel-tools.js +1 -1
  96. package/dist/components/ds-panel-tools.js.map +1 -1
  97. package/dist/components/ds-radio.js +1 -1
  98. package/dist/components/ds-scroll-overlay.js +1 -1
  99. package/dist/components/ds-scroll-overlay.js.map +1 -1
  100. package/dist/components/ds-select-multi.js +1 -1
  101. package/dist/components/ds-select-multi.js.map +1 -1
  102. package/dist/components/ds-select.js +1 -1
  103. package/dist/components/ds-select.js.map +1 -1
  104. package/dist/components/ds-shell-app.js +1 -1
  105. package/dist/components/ds-shell-app.js.map +1 -1
  106. package/dist/components/ds-shell-gradient-picker.js +1 -1
  107. package/dist/components/ds-shell-gradient-picker.js.map +1 -1
  108. package/dist/components/ds-shell-gradient-swatch.js +1 -1
  109. package/dist/components/ds-shell-mobile-bar.d.ts +11 -0
  110. package/dist/components/ds-shell-mobile-bar.js +2 -0
  111. package/dist/components/ds-shell-mobile-bar.js.map +1 -0
  112. package/dist/components/ds-shell-mobile-nav.d.ts +11 -0
  113. package/dist/components/ds-shell-mobile-nav.js +2 -0
  114. package/dist/components/ds-shell-mobile-nav.js.map +1 -0
  115. package/dist/components/ds-shell-mobile-section-nav.d.ts +11 -0
  116. package/dist/components/ds-shell-mobile-section-nav.js +2 -0
  117. package/dist/components/ds-shell-mobile-section-nav.js.map +1 -0
  118. package/dist/components/ds-shell-page.js +1 -1
  119. package/dist/components/ds-shell-page.js.map +1 -1
  120. package/dist/components/ds-shell-tools.d.ts +11 -0
  121. package/dist/components/ds-shell-tools.js +2 -0
  122. package/dist/components/ds-shell-tools.js.map +1 -0
  123. package/dist/components/ds-skeleton.js +1 -1
  124. package/dist/components/ds-slider.js +1 -1
  125. package/dist/components/ds-slider.js.map +1 -1
  126. package/dist/components/ds-swatch-picker.js +1 -1
  127. package/dist/components/ds-switch.js +1 -1
  128. package/dist/components/ds-tab-group.js +1 -1
  129. package/dist/components/ds-tab-group.js.map +1 -1
  130. package/dist/components/ds-tag.js +1 -1
  131. package/dist/components/ds-text.js +1 -1
  132. package/dist/components/ds-toast.js +1 -1
  133. package/dist/components/ds-toast.js.map +1 -1
  134. package/dist/components/ds-tooltip-data-viz.js +1 -1
  135. package/dist/components/ds-tooltip.js +1 -1
  136. package/dist/components/ds-typing-indicator.js +1 -1
  137. package/dist/components/ds-typing-indicator.js.map +1 -1
  138. package/dist/components/{p-DcGpdIlT.js → p-9dQQSgwT.js} +2 -2
  139. package/dist/components/p-B3rbhRAk.js +2 -0
  140. package/dist/components/p-B3rbhRAk.js.map +1 -0
  141. package/dist/components/p-B6Vuayt6.js +2 -0
  142. package/dist/components/p-B6Vuayt6.js.map +1 -0
  143. package/dist/components/{p-BWUTr_XN.js → p-BJMRBHKW.js} +2 -2
  144. package/dist/components/p-BJMRBHKW.js.map +1 -0
  145. package/dist/components/p-BPS9VExm.js +2 -0
  146. package/dist/components/{p-CCHqsF_H.js.map → p-BPS9VExm.js.map} +1 -1
  147. package/dist/components/p-BVV_rlIP.js +2 -0
  148. package/dist/components/p-BVV_rlIP.js.map +1 -0
  149. package/dist/components/{p-GMDGgtY8.js → p-BhxwpOH8.js} +2 -2
  150. package/dist/components/{p-2W-ZjZCR.js → p-Biz6xo-z.js} +2 -2
  151. package/dist/components/p-BrusnEYP.js +2 -0
  152. package/dist/components/p-BrusnEYP.js.map +1 -0
  153. package/dist/components/{p-CG5EX4NW.js → p-BtEjlcB9.js} +2 -2
  154. package/dist/components/{p-C0_8K4y7.js → p-BwGnhInj.js} +2 -2
  155. package/dist/components/p-BwGnhInj.js.map +1 -0
  156. package/dist/components/{p-D6jK2Hyi.js → p-C7bZ-jiU.js} +2 -2
  157. package/dist/components/p-CH3w-P2H.js +2 -0
  158. package/dist/components/p-CH3w-P2H.js.map +1 -0
  159. package/dist/components/{p-DOCKtrS4.js → p-CH6cNXXF.js} +2 -2
  160. package/dist/components/{p-BE_CDJeL.js → p-CY19gMiz.js} +2 -2
  161. package/dist/components/p-C_0Q8Cnp.js +2 -0
  162. package/dist/components/{p-Dg3xLna0.js.map → p-C_0Q8Cnp.js.map} +1 -1
  163. package/dist/components/p-C_ewSXTT.js +2 -0
  164. package/dist/components/p-C_ewSXTT.js.map +1 -0
  165. package/dist/components/{p-CHkI3oIS.js → p-Ce52yVXF.js} +2 -2
  166. package/dist/components/p-CgHTNfC1.js +2 -0
  167. package/dist/components/p-CgHTNfC1.js.map +1 -0
  168. package/dist/components/p-Co8hD3P-.js +2 -0
  169. package/dist/components/{p-Cxpl-rzP.js.map → p-Co8hD3P-.js.map} +1 -1
  170. package/dist/components/{p-xY3TjBF5.js → p-CoYFJD-w.js} +2 -2
  171. package/dist/components/{p-DBi1bmOL.js → p-CtD24EyI.js} +2 -2
  172. package/dist/components/{p-BRLDJmkh.js → p-D-xttdpn.js} +2 -2
  173. package/dist/components/{p-CNffejay.js → p-DSa0Hnd3.js} +2 -2
  174. package/dist/components/p-DXewjzkM.js +2 -0
  175. package/dist/components/p-DXewjzkM.js.map +1 -0
  176. package/dist/components/p-DXnFhmZF.js +2 -0
  177. package/dist/components/{p-BpA9uYKX.js.map → p-DXnFhmZF.js.map} +1 -1
  178. package/dist/components/{p-DyGB97Oy.js → p-DYqReipj.js} +2 -2
  179. package/dist/components/{p-ky1msbJ8.js → p-DjPZxzIG.js} +2 -2
  180. package/dist/components/{p-ky1msbJ8.js.map → p-DjPZxzIG.js.map} +1 -1
  181. package/dist/components/p-NUNsefU1.js +2 -0
  182. package/dist/components/{p-8OOCLGph.js.map → p-NUNsefU1.js.map} +1 -1
  183. package/dist/components/p-PZ6R_nGI.js +2 -0
  184. package/dist/components/p-PZ6R_nGI.js.map +1 -0
  185. package/dist/components/{p-B8CubPgQ.js → p-g40DTeV8.js} +2 -2
  186. package/dist/components/p-jCWtxthA.js +2 -0
  187. package/dist/components/{p-XgIQ3oI_.js.map → p-jCWtxthA.js.map} +1 -1
  188. package/dist/components/p-yhj1lIPx.js +2 -0
  189. package/dist/components/p-yhj1lIPx.js.map +1 -0
  190. package/dist/docs/components.json +8860 -6021
  191. package/dist/lib/components/BarNav/bar-nav-types.d.ts +2 -0
  192. package/dist/lib/components/PanelNav/panel-nav-types.d.ts +29 -0
  193. package/dist/lib/components/PanelTools/panel-tools-types.d.ts +40 -0
  194. package/dist/lib/components/TabGroup/tab-item-utils.d.ts +31 -0
  195. package/dist/lib/shell/index.d.ts +5 -0
  196. package/dist/lib/shell/index.js +36 -0
  197. package/dist/lib/shell/index.js.map +3 -3
  198. package/dist/lib/shell/shell-responsive.d.ts +13 -0
  199. package/dist/lib/utils/index.js +3 -1
  200. package/dist/lib/utils/index.js.map +2 -2
  201. package/dist/mcp/cli.js +142 -18
  202. package/dist/mcp-data/registry/agent-source-list.json +1 -1
  203. package/dist/mcp-data/registry/bar-title.json +68 -14
  204. package/dist/mcp-data/registry/breadcrumb.json +205 -0
  205. package/dist/mcp-data/registry/card-data-viz-bar.json +212 -0
  206. package/dist/mcp-data/registry/card-data-viz-line.json +206 -0
  207. package/dist/mcp-data/registry/card-shell-data-viz.json +7 -0
  208. package/dist/mcp-data/registry/chart-bar-stacked.json +225 -0
  209. package/dist/mcp-data/registry/chart-bar.json +9 -2
  210. package/dist/mcp-data/registry/chart-legend.json +29 -3
  211. package/dist/mcp-data/registry/chart-line.json +4 -2
  212. package/dist/mcp-data/registry/conversation-list-item.json +3 -3
  213. package/dist/mcp-data/registry/message-scroller.json +4 -2
  214. package/dist/mcp-data/registry/message.json +3 -2
  215. package/dist/mcp-data/registry/modal.json +1 -1
  216. package/dist/mcp-data/registry/registry.json +1107 -44
  217. package/dist/mcp-data/registry/shell-app.json +71 -11
  218. package/dist/mcp-data/registry/shell-mobile-bar.json +314 -0
  219. package/dist/mcp-data/registry/shell-mobile-nav.json +348 -0
  220. package/dist/mcp-data/registry/shell-mobile-section-nav.json +267 -0
  221. package/dist/mcp-data/registry/shell-page.json +31 -13
  222. package/dist/mcp-data/registry/shell-tools.json +450 -0
  223. package/dist/mcp-data/registry/text.json +1 -1
  224. package/dist/mcp-data/registry/typing-indicator.json +7 -7
  225. package/dist/react/components.d.ts +8 -0
  226. package/dist/react/components.js +8 -0
  227. package/dist/react/ds-bar-title.d.ts +2 -1
  228. package/dist/react/ds-bar-title.js +1 -0
  229. package/dist/react/ds-breadcrumb.d.ts +12 -0
  230. package/dist/react/ds-breadcrumb.js +12 -0
  231. package/dist/react/ds-card-data-viz-bar.d.ts +12 -0
  232. package/dist/react/ds-card-data-viz-bar.js +12 -0
  233. package/dist/react/ds-card-data-viz-line.d.ts +12 -0
  234. package/dist/react/ds-card-data-viz-line.js +12 -0
  235. package/dist/react/ds-chart-bar-stacked.d.ts +9 -0
  236. package/dist/react/ds-chart-bar-stacked.js +12 -0
  237. package/dist/react/ds-shell-app.d.ts +7 -2
  238. package/dist/react/ds-shell-app.js +1 -1
  239. package/dist/react/ds-shell-mobile-bar.d.ts +13 -0
  240. package/dist/react/ds-shell-mobile-bar.js +15 -0
  241. package/dist/react/ds-shell-mobile-nav.d.ts +15 -0
  242. package/dist/react/ds-shell-mobile-nav.js +17 -0
  243. package/dist/react/ds-shell-mobile-section-nav.d.ts +12 -0
  244. package/dist/react/ds-shell-mobile-section-nav.js +12 -0
  245. package/dist/react/ds-shell-tools.d.ts +25 -0
  246. package/dist/react/ds-shell-tools.js +17 -0
  247. package/dist/styles/prose.css +1 -0
  248. package/dist/types/components/BarTitle/BarTitle.d.ts +13 -1
  249. package/dist/types/components/Breadcrumb/Breadcrumb.d.ts +31 -0
  250. package/dist/types/components/Breadcrumb/breadcrumb-types.d.ts +17 -0
  251. package/dist/types/components/CardDataVizBar/CardDataVizBar.d.ts +24 -0
  252. package/dist/types/components/CardDataVizBar/index.d.ts +2 -0
  253. package/dist/types/components/CardDataVizLine/CardDataVizLine.d.ts +24 -0
  254. package/dist/types/components/CardDataVizLine/index.d.ts +2 -0
  255. package/dist/types/components/ChartBarStacked/ChartBarStacked.d.ts +15 -0
  256. package/dist/types/components/ChartBarStacked/index.d.ts +3 -0
  257. package/dist/types/components/ChartLegend/ChartLegend.d.ts +3 -0
  258. package/dist/types/components/ShellApp/ShellApp.d.ts +16 -0
  259. package/dist/types/components/ShellMobileBar/ShellMobileBar.d.ts +25 -0
  260. package/dist/types/components/ShellMobileBar/index.d.ts +4 -0
  261. package/dist/types/components/ShellMobileBar/shell-mobile-bar-types.d.ts +5 -0
  262. package/dist/types/components/ShellMobileNav/ShellMobileNav.d.ts +32 -0
  263. package/dist/types/components/ShellMobileNav/index.d.ts +2 -0
  264. package/dist/types/components/ShellMobileNav/shell-mobile-nav-types.d.ts +6 -0
  265. package/dist/types/components/ShellMobileSectionNav/ShellMobileSectionNav.d.ts +30 -0
  266. package/dist/types/components/ShellMobileSectionNav/index.d.ts +2 -0
  267. package/dist/types/components/ShellPage/ShellPage.d.ts +19 -7
  268. package/dist/types/components/ShellPage/shell-page-responsive.d.ts +0 -8
  269. package/dist/types/components/ShellTools/ShellTools.d.ts +61 -0
  270. package/dist/types/components/ShellTools/index.d.ts +3 -0
  271. package/dist/types/components/TypingIndicator/TypingIndicator.d.ts +1 -1
  272. package/dist/types/components.d.ts +953 -19
  273. package/dist/types/shell/index.d.ts +5 -0
  274. package/dist/types/shell/shell-responsive.d.ts +14 -0
  275. package/package.json +1 -1
  276. package/dist/components/p-8OOCLGph.js +0 -2
  277. package/dist/components/p-BWUTr_XN.js.map +0 -1
  278. package/dist/components/p-BpA9uYKX.js +0 -2
  279. package/dist/components/p-C0_8K4y7.js.map +0 -1
  280. package/dist/components/p-CA3kLO7K.js +0 -2
  281. package/dist/components/p-CA3kLO7K.js.map +0 -1
  282. package/dist/components/p-CCHqsF_H.js +0 -2
  283. package/dist/components/p-Cxpl-rzP.js +0 -2
  284. package/dist/components/p-CzBnvtcz.js +0 -2
  285. package/dist/components/p-CzBnvtcz.js.map +0 -1
  286. package/dist/components/p-Dg3xLna0.js +0 -2
  287. package/dist/components/p-XgIQ3oI_.js +0 -2
  288. /package/dist/components/{p-DcGpdIlT.js.map → p-9dQQSgwT.js.map} +0 -0
  289. /package/dist/components/{p-GMDGgtY8.js.map → p-BhxwpOH8.js.map} +0 -0
  290. /package/dist/components/{p-2W-ZjZCR.js.map → p-Biz6xo-z.js.map} +0 -0
  291. /package/dist/components/{p-CG5EX4NW.js.map → p-BtEjlcB9.js.map} +0 -0
  292. /package/dist/components/{p-D6jK2Hyi.js.map → p-C7bZ-jiU.js.map} +0 -0
  293. /package/dist/components/{p-DOCKtrS4.js.map → p-CH6cNXXF.js.map} +0 -0
  294. /package/dist/components/{p-BE_CDJeL.js.map → p-CY19gMiz.js.map} +0 -0
  295. /package/dist/components/{p-CHkI3oIS.js.map → p-Ce52yVXF.js.map} +0 -0
  296. /package/dist/components/{p-xY3TjBF5.js.map → p-CoYFJD-w.js.map} +0 -0
  297. /package/dist/components/{p-DBi1bmOL.js.map → p-CtD24EyI.js.map} +0 -0
  298. /package/dist/components/{p-BRLDJmkh.js.map → p-D-xttdpn.js.map} +0 -0
  299. /package/dist/components/{p-CNffejay.js.map → p-DSa0Hnd3.js.map} +0 -0
  300. /package/dist/components/{p-DyGB97Oy.js.map → p-DYqReipj.js.map} +0 -0
  301. /package/dist/components/{p-B8CubPgQ.js.map → p-g40DTeV8.js.map} +0 -0
package/README.md CHANGED
@@ -76,6 +76,12 @@ instruction telling agents to retrieve the applicable pattern before composing
76
76
  multiple design-system components; connecting the MCP makes recipes available,
77
77
  while the instruction makes their use consistent.
78
78
 
79
+ Registry-oriented tools return both readable Markdown and schema-validated
80
+ `structuredContent`. Compatible MCP clients can consume the generated component
81
+ API, authored design intent, dependencies, and executable pattern recipes as JSON
82
+ without reparsing prose; text content remains available for older clients. Every
83
+ tool is annotated as read-only, idempotent, and closed-world.
84
+
79
85
  ## Components
80
86
 
81
87
  All tags are `ds-*` custom elements. Grouped by role (see Storybook for props and stories):
@@ -93,11 +99,11 @@ All tags are `ds-*` custom elements. Grouped by role (see Storybook for props an
93
99
  - **Modal**, **Menu**, **Tooltip**, **Select**, **Toast**
94
100
 
95
101
  ### Navigation
96
- - **TabGroup** (horizontal local views), **PanelSubNav** (vertical local views)
102
+ - **Breadcrumb** (hierarchical page ancestors), **TabGroup** (horizontal local views), **PanelSubNav** (vertical local views)
97
103
  - **ShellApp**, **ShellPage**, **PanelNav**, **BarNav**, **BarTitle**, **BarWorkflow**, **PanelTools**
98
104
 
99
105
  ### Status & layout
100
- - **EmptyState**, **Loader**, **Skeleton**, **CardSetting**, **CardDataVizDonut**
106
+ - **EmptyState**, **Loader**, **Skeleton**, **CardSetting**, **CardDataVizDonut**, **CardDataVizLine**
101
107
 
102
108
  ## Token dependency
103
109
 
package/dist/.build-stamp CHANGED
@@ -1 +1 @@
1
- 1784783184986
1
+ 1784854799753
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "schemaVersion": "1.0.0",
3
3
  "package": "@ds-mo/ui",
4
- "packageVersion": "12.2.0",
4
+ "packageVersion": "12.4.0",
5
5
  "kind": "patterns",
6
6
  "entries": [
7
7
  {
@@ -112,51 +112,129 @@
112
112
  "required": true
113
113
  },
114
114
  {
115
- "component": "component:ds-panel-tools",
116
- "role": "Provides required tools chrome with Search and Help as the minimum standard tools and optional additional product tools.",
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-shell-mobile-nav",
121
+ "role": "Browses Dashboard and Settings primary areas in the mobile stage without navigating until an area is selected.",
122
+ "required": true
123
+ },
124
+ {
125
+ "component": "component:ds-shell-mobile-section-nav",
126
+ "role": "Renders the active area's secondary routes in a horizontally scrollable mobile row.",
127
+ "required": true
128
+ },
129
+ {
130
+ "component": "component:ds-shell-mobile-bar",
131
+ "role": "Provides persistent Menu, current area, Search, Agents, and Inbox destinations below 768px.",
117
132
  "required": true
118
133
  }
119
134
  ],
120
135
  "stateOwnership": [
121
136
  "The application router owns the current route, Dashboard or Settings context, authorization filtering, destination and section collections, localized labels, and navigation execution.",
122
- "ShellApp owns desktop, tablet, and mobile composition, shell geometry, navStyle propagation, gradient alignment, chrome transitions, metrics, and shell shortcuts.",
137
+ "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.",
123
138
  "PanelNav owns primary-destination presentation and the user-controlled desktop collapse preference.",
124
139
  "BarNav derives the active secondary route from currentUrl and basePath and receives the active PanelNav destination label as heading.",
125
- "PanelTools owns tool-rail and drawer interaction while the application owns available tool content and active-tool state.",
140
+ "The application owns mobileDestination, mobileNavigationOpen, the actual active tool, and the last Inbox segment; ShellTools preserves product owners and presentation.",
141
+ "The application router owns only the routed workspace. Search, Agents, Inbox, and Menu changes never change router history.",
126
142
  "PanelNav groups and BarNav dividers visually organize peers and never introduce nested navigation hierarchy."
127
143
  ],
128
144
  "accessibility": [
129
145
  "Render one main landmark in the default content region.",
130
146
  "Use PanelNav exclusively for primary destinations and BarNav exclusively for secondary route sections.",
131
147
  "Keep localized visible labels and accessible names available when navigation is collapsed or moved into overflow.",
132
- "Provide Search and Help as the minimum accessible PanelTools actions.",
148
+ "Provide visible labels for all five mobile-bar items and Search and Help in the available shell actions.",
133
149
  "Preserve keyboard focus and route state across responsive and Dashboard/Settings context changes."
134
150
  ],
135
151
  "responsiveBehavior": [
136
152
  "Use fixed system breakpoints: desktop at 1200px and wider, tablet from 768px through 1199px, and mobile below 768px.",
137
153
  "Desktop permits PanelNav expansion and collapse and restores the persisted user preference.",
138
154
  "Tablet keeps PanelNav permanently collapsed and does not overwrite the desktop preference.",
139
- "Mobile keeps ShellApp as the root while replacing desktop navigation with a future dedicated mobile navigation design.",
140
- "Keep BarNav height, PanelTools chrome, and main-content origin stable across route changes.",
141
- "Treat the complete responsive composition as an intended contract that is not yet fully implemented by the current ShellApp runtime."
155
+ "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.",
156
+ "The routed workspace stays mounted and is only concealed and inert while a global surface or navigation pane occupies the stage.",
157
+ "Messages, Stacks, and Activity map to mobile Inbox and preserve the selected segment across destination and breakpoint changes."
142
158
  ],
143
159
  "implementations": {
144
160
  "customElements": {
145
161
  "status": "verified",
162
+ "recipes": [
163
+ {
164
+ "id": "responsive-shell",
165
+ "title": "Responsive application shell",
166
+ "summary": "One routed workspace and one set of persistent tool owners shared across desktop, tablet, and mobile presentations.",
167
+ "files": [
168
+ {
169
+ "path": "app-shell.html",
170
+ "language": "html",
171
+ "content": "<ds-shell-app id=\"shell\" mobile-destination=\"area\">\n <ds-panel-nav id=\"panel\" slot=\"panel\"></ds-panel-nav>\n <ds-shell-mobile-nav id=\"mobile-nav\" slot=\"mobile-navigation\"></ds-shell-mobile-nav>\n <ds-bar-nav id=\"bar\" slot=\"bar\"></ds-bar-nav>\n <ds-shell-mobile-section-nav id=\"mobile-sections\" slot=\"mobile-section-nav\"></ds-shell-mobile-section-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 <main><!-- routed workspace --></main>\n <ds-shell-mobile-bar id=\"mobile-bar\" slot=\"mobile-bar\"></ds-shell-mobile-bar>\n</ds-shell-app>"
172
+ },
173
+ {
174
+ "path": "app-shell.ts",
175
+ "language": "typescript",
176
+ "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-shell-tools.js'\nimport '@ds-mo/ui/components/ds-shell-mobile-nav.js'\nimport '@ds-mo/ui/components/ds-shell-mobile-section-nav.js'\nimport '@ds-mo/ui/components/ds-shell-mobile-bar.js'\nimport type { ShellMobileDestination } from '@ds-mo/ui/shell'\n\nconst shell = document.querySelector<HTMLDsShellAppElement>('#shell')!\nconst bar = document.querySelector<HTMLDsShellMobileBarElement>('#mobile-bar')!\nconst mobileNav = document.querySelector<HTMLDsShellMobileNavElement>('#mobile-nav')!\n\nfunction setMobileState(destination: ShellMobileDestination, navigationOpen = false) {\n shell.mobileDestination = destination\n shell.mobileNavigationOpen = navigationOpen\n bar.activeDestination = destination\n bar.navigationExpanded = navigationOpen\n mobileNav.open = navigationOpen\n}\n\nbar.addEventListener('dsNavigationToggle', event => setMobileState(shell.mobileDestination, event.detail))\nbar.addEventListener('dsDestinationChange', event => setMobileState(event.detail.destination))"
177
+ }
178
+ ],
179
+ "notes": [
180
+ "Assign navigation groups, tabs, items, headers, and current-area data as JavaScript properties.",
181
+ "The router outlet remains in the default slot and global destination changes do not navigate."
182
+ ]
183
+ }
184
+ ],
146
185
  "references": [
147
186
  "src/wc/components/ShellApp/ShellApp.stories.ts",
148
187
  "docs/framework-integration.md"
149
188
  ]
150
189
  },
151
190
  "react": {
152
- "status": "planned",
191
+ "status": "verified",
192
+ "recipes": [
193
+ {
194
+ "id": "responsive-shell",
195
+ "title": "Responsive application shell",
196
+ "summary": "A controlled React shell coordinator with stable routed and tool children.",
197
+ "files": [
198
+ {
199
+ "path": "AppShell.tsx",
200
+ "language": "tsx",
201
+ "content": "import { useState } from 'react'\nimport type { ShellMobileDestination } from '@ds-mo/ui/shell'\nimport { DsBarNav, DsPanelNav, DsShellApp, DsShellMobileBar, DsShellMobileNav, DsShellMobileSectionNav, DsShellTools } from '@ds-mo/ui/react'\n\nexport function AppShell() {\n const [destination, setDestination] = useState<ShellMobileDestination>('area')\n const [navigationOpen, setNavigationOpen] = useState(false)\n return (\n <DsShellApp mobileDestination={destination} mobileNavigationOpen={navigationOpen}>\n <DsPanelNav slot=\"panel\" />\n <DsShellMobileNav slot=\"mobile-navigation\" open={navigationOpen} />\n <DsBarNav slot=\"bar\" />\n <DsShellMobileSectionNav slot=\"mobile-section-nav\" />\n <DsShellTools slot=\"tools\"><div slot=\"search-view\">Search</div></DsShellTools>\n <main>{/* routed workspace */}</main>\n <DsShellMobileBar slot=\"mobile-bar\" activeDestination={destination} navigationExpanded={navigationOpen} onDsNavigationToggle={event => setNavigationOpen(event.detail)} onDsDestinationChange={event => { setNavigationOpen(false); setDestination(event.detail.destination) }} />\n </DsShellApp>\n )\n}"
202
+ }
203
+ ],
204
+ "notes": [
205
+ "Keep routed and tool-owner element identity stable; control only shell visibility and selection state."
206
+ ]
207
+ }
208
+ ],
153
209
  "references": [
154
- "scripts/verify-package-imports.mjs",
210
+ "src/react/components.ts",
155
211
  "docs/framework-integration.md"
156
212
  ]
157
213
  },
158
214
  "angular": {
159
215
  "status": "verified",
216
+ "recipes": [
217
+ {
218
+ "id": "responsive-shell",
219
+ "title": "Responsive application shell",
220
+ "summary": "A controlled Angular shell using generated standalone adapters and native slot names.",
221
+ "files": [
222
+ {
223
+ "path": "app-shell.component.html",
224
+ "language": "html",
225
+ "content": "<ds-shell-app [mobileDestination]=\"destination\" [mobileNavigationOpen]=\"navigationOpen\">\n <ds-panel-nav slot=\"panel\"></ds-panel-nav>\n <ds-shell-mobile-nav slot=\"mobile-navigation\" [open]=\"navigationOpen\"></ds-shell-mobile-nav>\n <ds-bar-nav slot=\"bar\"></ds-bar-nav>\n <ds-shell-mobile-section-nav slot=\"mobile-section-nav\"></ds-shell-mobile-section-nav>\n <ds-shell-tools slot=\"tools\"><app-search slot=\"search-view\" /></ds-shell-tools>\n <router-outlet />\n <ds-shell-mobile-bar slot=\"mobile-bar\" [activeDestination]=\"destination\" [navigationExpanded]=\"navigationOpen\" (dsNavigationToggle)=\"navigationOpen = $event.detail\" (dsDestinationChange)=\"selectDestination($event.detail.destination)\"></ds-shell-mobile-bar>\n</ds-shell-app>"
226
+ },
227
+ {
228
+ "path": "app-shell.component.ts",
229
+ "language": "typescript",
230
+ "content": "import { Component } from '@angular/core'\nimport { RouterOutlet } from '@angular/router'\nimport type { ShellMobileDestination } from '@ds-mo/ui/shell'\nimport { DsBarNav } from '@ds-mo/ui/angular/ds-bar-nav'\nimport { DsPanelNav } from '@ds-mo/ui/angular/ds-panel-nav'\nimport { DsShellApp } from '@ds-mo/ui/angular/ds-shell-app'\nimport { DsShellMobileBar } from '@ds-mo/ui/angular/ds-shell-mobile-bar'\nimport { DsShellMobileNav } from '@ds-mo/ui/angular/ds-shell-mobile-nav'\nimport { DsShellMobileSectionNav } from '@ds-mo/ui/angular/ds-shell-mobile-section-nav'\nimport { DsShellTools } from '@ds-mo/ui/angular/ds-shell-tools'\n\n@Component({ selector: 'app-shell', standalone: true, imports: [RouterOutlet, DsBarNav, DsPanelNav, DsShellApp, DsShellMobileBar, DsShellMobileNav, DsShellMobileSectionNav, DsShellTools], templateUrl: './app-shell.component.html' })\nexport class AppShellComponent {\n destination: ShellMobileDestination = 'area'\n navigationOpen = false\n selectDestination(destination: ShellMobileDestination) { this.navigationOpen = false; this.destination = destination }\n}"
231
+ }
232
+ ],
233
+ "notes": [
234
+ "Bind structured navigation and tool data as properties and update router-derived inputs together."
235
+ ]
236
+ }
237
+ ],
160
238
  "references": [
161
239
  "scripts/verify-package-imports.mjs",
162
240
  "docs/framework-integration.md"
@@ -443,7 +521,7 @@
443
521
  "Keep route loading, error, empty, success, and validation communication in the ShellPage content slot."
444
522
  ],
445
523
  "responsiveBehavior": [
446
- "Let ShellPage select expanded, compact, and constrained variants from its own capacity and scroll position.",
524
+ "Resolve viewport and persistent shell chrome into ShellPage.headerCapacity; ShellPage uses that explicit capacity plus scroll position to select expanded, compact, or constrained presentation.",
447
525
  "Set primaryAction.collapse to never only when an ordinary routed-page action must preserve visible hierarchy; create and edit workflows use BarWorkflow instead.",
448
526
  "Use contentInset none only for deliberately full-bleed products such as maps and canvases.",
449
527
  "Place TabGroup inside ShellPage content for inner-page panels; route-level sections remain in BarTitle."
@@ -460,7 +538,7 @@
460
538
  {
461
539
  "path": "page.html",
462
540
  "language": "html",
463
- "content": "<ds-shell-app>\n <ds-shell-page>\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>"
541
+ "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>"
464
542
  },
465
543
  {
466
544
  "path": "page.ts",
@@ -490,7 +568,7 @@
490
568
  {
491
569
  "path": "DriversPage.tsx",
492
570
  "language": "tsx",
493
- "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>\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}"
571
+ "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}"
494
572
  }
495
573
  ],
496
574
  "notes": [
@@ -515,12 +593,12 @@
515
593
  {
516
594
  "path": "drivers-page.component.html",
517
595
  "language": "html",
518
- "content": "<ds-shell-page>\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>"
596
+ "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>"
519
597
  },
520
598
  {
521
599
  "path": "drivers-page.component.ts",
522
600
  "language": "typescript",
523
- "content": "import { Component } from '@angular/core'\nimport { RouterOutlet } from '@angular/router'\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 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}"
601
+ "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}"
524
602
  }
525
603
  ],
526
604
  "notes": [