@ds-mo/ui 12.4.1 → 12.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (291) hide show
  1. package/README.md +16 -0
  2. package/dist/.build-stamp +1 -1
  3. package/dist/agent-patterns.json +21 -12
  4. package/dist/agent.json +1541 -1426
  5. package/dist/angular/ds-bar-workflow.d.ts +1 -1
  6. package/dist/angular/ds-bar-workflow.js +3 -3
  7. package/dist/angular/ds-mobile-bar-nav.d.ts +18 -0
  8. package/dist/angular/{ds-shell-mobile-bar.js → ds-mobile-bar-nav.js} +15 -15
  9. package/dist/angular/ds-mobile-header.d.ts +23 -0
  10. package/dist/angular/ds-mobile-header.js +45 -0
  11. package/dist/angular/ds-mobile-section-switcher.d.ts +18 -0
  12. package/dist/angular/{ds-shell-mobile-section-nav.js → ds-mobile-section-switcher.js} +15 -15
  13. package/dist/angular/ds-mobile-sheet-nav.d.ts +20 -0
  14. package/dist/angular/{ds-shell-mobile-nav.js → ds-mobile-sheet-nav.js} +13 -16
  15. package/dist/angular/ds-shell-app.d.ts +1 -1
  16. package/dist/angular/ds-shell-app.js +3 -3
  17. package/dist/angular/ds-shell-page.d.ts +1 -1
  18. package/dist/angular/ds-shell-page.js +3 -3
  19. package/dist/angular/index.d.ts +1 -1
  20. package/dist/angular/index.js +4 -3
  21. package/dist/angular/proxies.d.ts +4 -3
  22. package/dist/angular/proxies.js +4 -3
  23. package/dist/components/ds-agent-activity.js +1 -1
  24. package/dist/components/ds-agent-response.js +1 -1
  25. package/dist/components/ds-agent-tool-call.js +1 -1
  26. package/dist/components/ds-avatar.js +1 -1
  27. package/dist/components/ds-avatar.js.map +1 -1
  28. package/dist/components/ds-badge.js +1 -1
  29. package/dist/components/ds-bar-nav.js +1 -1
  30. package/dist/components/ds-bar-nav.js.map +1 -1
  31. package/dist/components/ds-bar-title.js +1 -1
  32. package/dist/components/ds-bar-title.js.map +1 -1
  33. package/dist/components/ds-bar-workflow.js +1 -1
  34. package/dist/components/ds-bar-workflow.js.map +1 -1
  35. package/dist/components/ds-breadcrumb.js +1 -1
  36. package/dist/components/ds-button-filled.js +1 -1
  37. package/dist/components/ds-button-unfilled.js +1 -1
  38. package/dist/components/ds-card-data-viz-bar.js +1 -1
  39. package/dist/components/ds-card-data-viz-donut.js +1 -1
  40. package/dist/components/ds-card-data-viz-line.js +1 -1
  41. package/dist/components/ds-card-setting.js +1 -1
  42. package/dist/components/ds-chart-bar.js +1 -1
  43. package/dist/components/ds-chart-donut.js +1 -1
  44. package/dist/components/ds-chart-legend.js +1 -1
  45. package/dist/components/ds-chart-legend.js.map +1 -1
  46. package/dist/components/ds-chart-line.js +1 -1
  47. package/dist/components/ds-checkbox.js +1 -1
  48. package/dist/components/ds-chip.js +1 -1
  49. package/dist/components/ds-chip.js.map +1 -1
  50. package/dist/components/ds-code-block.js +1 -1
  51. package/dist/components/ds-conversation-list-item.js +1 -1
  52. package/dist/components/ds-conversation-list-item.js.map +1 -1
  53. package/dist/components/ds-conversation-list-section.js +1 -1
  54. package/dist/components/ds-conversation-list.js +1 -1
  55. package/dist/components/ds-conversation-list.js.map +1 -1
  56. package/dist/components/ds-empty-state.js +1 -1
  57. package/dist/components/ds-field.js +1 -1
  58. package/dist/components/ds-input.js +1 -1
  59. package/dist/components/ds-input.js.map +1 -1
  60. package/dist/components/ds-loader.js +1 -1
  61. package/dist/components/ds-markdown.js +1 -1
  62. package/dist/components/ds-menu.js +1 -1
  63. package/dist/components/ds-message-composer.js +1 -1
  64. package/dist/components/ds-message-composer.js.map +1 -1
  65. package/dist/components/ds-message-scroller.js +1 -1
  66. package/dist/components/ds-message-scroller.js.map +1 -1
  67. package/dist/components/ds-message.js +1 -1
  68. package/dist/components/{ds-shell-mobile-nav.d.ts → ds-mobile-bar-nav.d.ts} +4 -4
  69. package/dist/components/ds-mobile-bar-nav.js +2 -0
  70. package/dist/components/ds-mobile-bar-nav.js.map +1 -0
  71. package/dist/components/ds-mobile-header.d.ts +11 -0
  72. package/dist/components/ds-mobile-header.js +2 -0
  73. package/dist/components/ds-mobile-header.js.map +1 -0
  74. package/dist/components/ds-mobile-section-switcher.d.ts +11 -0
  75. package/dist/components/ds-mobile-section-switcher.js +2 -0
  76. package/dist/components/ds-mobile-section-switcher.js.map +1 -0
  77. package/dist/components/{ds-shell-mobile-bar.d.ts → ds-mobile-sheet-nav.d.ts} +4 -4
  78. package/dist/components/ds-mobile-sheet-nav.js +2 -0
  79. package/dist/components/ds-mobile-sheet-nav.js.map +1 -0
  80. package/dist/components/ds-modal.js +1 -1
  81. package/dist/components/ds-modal.js.map +1 -1
  82. package/dist/components/ds-panel-nav.js +1 -1
  83. package/dist/components/ds-panel-nav.js.map +1 -1
  84. package/dist/components/ds-panel-sub-nav.js +1 -1
  85. package/dist/components/ds-panel-sub-nav.js.map +1 -1
  86. package/dist/components/ds-panel-tool-header.js +1 -1
  87. package/dist/components/ds-panel-tool-search.js +1 -1
  88. package/dist/components/ds-panel-tool-search.js.map +1 -1
  89. package/dist/components/ds-panel-tools.js +1 -1
  90. package/dist/components/ds-radio.js +1 -1
  91. package/dist/components/ds-radio.js.map +1 -1
  92. package/dist/components/ds-select-multi.js +1 -1
  93. package/dist/components/ds-select-multi.js.map +1 -1
  94. package/dist/components/ds-select.js +1 -1
  95. package/dist/components/ds-select.js.map +1 -1
  96. package/dist/components/ds-shell-app.js +1 -1
  97. package/dist/components/ds-shell-app.js.map +1 -1
  98. package/dist/components/ds-shell-gradient-picker.js +1 -1
  99. package/dist/components/ds-shell-gradient-picker.js.map +1 -1
  100. package/dist/components/ds-shell-gradient-swatch.js +1 -1
  101. package/dist/components/ds-shell-page.js +1 -1
  102. package/dist/components/ds-shell-page.js.map +1 -1
  103. package/dist/components/ds-shell-tools.js +1 -1
  104. package/dist/components/ds-shell-tools.js.map +1 -1
  105. package/dist/components/ds-skeleton.js +1 -1
  106. package/dist/components/ds-skeleton.js.map +1 -1
  107. package/dist/components/ds-swatch-picker.js +1 -1
  108. package/dist/components/ds-switch.js +1 -1
  109. package/dist/components/ds-tab-group.js +1 -1
  110. package/dist/components/ds-tag.js +1 -1
  111. package/dist/components/ds-tag.js.map +1 -1
  112. package/dist/components/ds-toast.js +1 -1
  113. package/dist/components/ds-toast.js.map +1 -1
  114. package/dist/components/ds-tooltip-data-viz.js +1 -1
  115. package/dist/components/ds-tooltip.js +1 -1
  116. package/dist/components/ds-typing-indicator.js +1 -1
  117. package/dist/components/p--bSkr_yn.js +2 -0
  118. package/dist/components/p--bSkr_yn.js.map +1 -0
  119. package/dist/components/p-46nk9-RO.js +2 -0
  120. package/dist/components/p-46nk9-RO.js.map +1 -0
  121. package/dist/components/{p-9dQQSgwT.js → p-BHYrsGBw.js} +2 -2
  122. package/dist/components/p-BY0PzkUp.js +2 -0
  123. package/dist/components/p-BgGP65Nn.js +2 -0
  124. package/dist/components/p-BgGP65Nn.js.map +1 -0
  125. package/dist/components/p-BkAMkjIR.js +2 -0
  126. package/dist/components/{p-Co8hD3P-.js.map → p-BkAMkjIR.js.map} +1 -1
  127. package/dist/components/p-BrusnEYP.js.map +1 -1
  128. package/dist/components/p-C2ym_Ich.js +2 -0
  129. package/dist/components/{p-Biz6xo-z.js → p-CFpWrYAH.js} +2 -2
  130. package/dist/components/p-CICGtu7H.js +2 -0
  131. package/dist/components/{p-CtD24EyI.js.map → p-CICGtu7H.js.map} +1 -1
  132. package/dist/components/p-CLzlL3G4.js +2 -0
  133. package/dist/components/p-CLzlL3G4.js.map +1 -0
  134. package/dist/components/p-CXcjwduV.js +2 -0
  135. package/dist/components/{p-BhxwpOH8.js.map → p-CXcjwduV.js.map} +1 -1
  136. package/dist/components/p-Ca-I2UnB.js +2 -0
  137. package/dist/components/p-Ca-I2UnB.js.map +1 -0
  138. package/dist/components/p-CaRyxTMz.js +2 -0
  139. package/dist/components/p-CaRyxTMz.js.map +1 -0
  140. package/dist/components/{p-g40DTeV8.js → p-CvKKmZJj.js} +2 -2
  141. package/dist/components/p-D4o2D1hk.js +2 -0
  142. package/dist/components/p-D4o2D1hk.js.map +1 -0
  143. package/dist/components/{p-DXnFhmZF.js → p-D9iN80yX.js} +2 -2
  144. package/dist/components/p-DD1Lgs7O.js +2 -0
  145. package/dist/components/p-DD1Lgs7O.js.map +1 -0
  146. package/dist/components/{p-DjPZxzIG.js → p-DQDpDYyF.js} +2 -2
  147. package/dist/components/p-DTea1Du7.js +2 -0
  148. package/dist/components/p-DTea1Du7.js.map +1 -0
  149. package/dist/components/p-DWdRSOBV.js +2 -0
  150. package/dist/components/{p-BPS9VExm.js.map → p-DWdRSOBV.js.map} +1 -1
  151. package/dist/components/p-DcFfilOX.js +2 -0
  152. package/dist/components/p-DcFfilOX.js.map +1 -0
  153. package/dist/components/p-Dg3xLna0.js +2 -0
  154. package/dist/components/{p-C_0Q8Cnp.js.map → p-Dg3xLna0.js.map} +1 -1
  155. package/dist/components/p-DvVW0hxm.js +2 -0
  156. package/dist/components/p-DvVW0hxm.js.map +1 -0
  157. package/dist/components/p-YtgcuJYx.js +2 -0
  158. package/dist/components/{p-PZ6R_nGI.js.map → p-YtgcuJYx.js.map} +1 -1
  159. package/dist/components/p-loq_--ce.js +2 -0
  160. package/dist/components/{p-NUNsefU1.js.map → p-loq_--ce.js.map} +1 -1
  161. package/dist/docs/components.json +3586 -3064
  162. package/dist/lib/shell/index.d.ts +1 -1
  163. package/dist/lib/shell/index.js +2 -1
  164. package/dist/lib/shell/index.js.map +2 -2
  165. package/dist/lib/shell/shell-responsive.d.ts +3 -3
  166. package/dist/lib/utils/index.d.ts +1 -0
  167. package/dist/lib/utils/index.js +8 -0
  168. package/dist/lib/utils/index.js.map +3 -3
  169. package/dist/lib/utils/required-validity.d.ts +14 -0
  170. package/dist/mcp-data/registry/agent-activity.json +2 -2
  171. package/dist/mcp-data/registry/badge.json +2 -2
  172. package/dist/mcp-data/registry/bar-nav.json +2 -2
  173. package/dist/mcp-data/registry/bar-title.json +2 -2
  174. package/dist/mcp-data/registry/bar-workflow.json +25 -4
  175. package/dist/mcp-data/registry/breadcrumb.json +2 -2
  176. package/dist/mcp-data/registry/button-unfilled.json +3 -3
  177. package/dist/mcp-data/registry/chart-legend.json +1 -1
  178. package/dist/mcp-data/registry/checkbox.json +1 -1
  179. package/dist/mcp-data/registry/conversation-list-item.json +4 -3
  180. package/dist/mcp-data/registry/conversation-list.json +4 -3
  181. package/dist/mcp-data/registry/input.json +1 -1
  182. package/dist/mcp-data/registry/loader.json +2 -2
  183. package/dist/mcp-data/registry/message-scroller.json +3 -2
  184. package/dist/mcp-data/registry/mobile-bar-nav.json +333 -0
  185. package/dist/mcp-data/registry/mobile-header.json +351 -0
  186. package/dist/mcp-data/registry/mobile-section-switcher.json +210 -0
  187. package/dist/mcp-data/registry/mobile-sheet-nav.json +317 -0
  188. package/dist/mcp-data/registry/panel-nav.json +2 -2
  189. package/dist/mcp-data/registry/panel-tools.json +2 -2
  190. package/dist/mcp-data/registry/radio.json +1 -1
  191. package/dist/mcp-data/registry/registry.json +1549 -1431
  192. package/dist/mcp-data/registry/select-multi.json +1 -1
  193. package/dist/mcp-data/registry/select.json +2 -2
  194. package/dist/mcp-data/registry/shell-app.json +17 -17
  195. package/dist/mcp-data/registry/shell-page.json +26 -7
  196. package/dist/mcp-data/registry/shell-tools.json +10 -7
  197. package/dist/mcp-data/registry/switch.json +1 -1
  198. package/dist/mcp-data/registry/toast.json +2 -2
  199. package/dist/react/components.d.ts +4 -3
  200. package/dist/react/components.js +4 -3
  201. package/dist/react/ds-mobile-bar-nav.d.ts +13 -0
  202. package/dist/react/ds-mobile-bar-nav.js +15 -0
  203. package/dist/react/ds-mobile-header.d.ts +13 -0
  204. package/dist/react/ds-mobile-header.js +15 -0
  205. package/dist/react/ds-mobile-section-switcher.d.ts +12 -0
  206. package/dist/react/ds-mobile-section-switcher.js +12 -0
  207. package/dist/react/ds-mobile-sheet-nav.d.ts +14 -0
  208. package/dist/react/ds-mobile-sheet-nav.js +16 -0
  209. package/dist/styles/control-elevation.css +40 -0
  210. package/dist/types/components/BarWorkflow/BarWorkflow.d.ts +6 -0
  211. package/dist/types/components/ButtonUnfilled/ButtonUnfilled.d.ts +1 -1
  212. package/dist/types/components/MobileBarNav/MobileBarNav.d.ts +26 -0
  213. package/dist/types/components/MobileBarNav/index.d.ts +4 -0
  214. package/dist/types/components/MobileBarNav/mobile-bar-nav-types.d.ts +5 -0
  215. package/dist/types/components/MobileHeader/MobileHeader.d.ts +39 -0
  216. package/dist/types/components/MobileHeader/index.d.ts +2 -0
  217. package/dist/types/components/MobileHeader/mobile-header-types.d.ts +5 -0
  218. package/dist/types/components/MobileSectionSwitcher/MobileSectionSwitcher.d.ts +35 -0
  219. package/dist/types/components/MobileSectionSwitcher/index.d.ts +3 -0
  220. package/dist/types/components/MobileSectionSwitcher/mobile-section-switcher-types.d.ts +4 -0
  221. package/dist/types/components/MobileSectionSwitcher/mobile-section-switcher-utils.d.ts +10 -0
  222. package/dist/types/components/{ShellMobileNav/ShellMobileNav.d.ts → MobileSheetNav/MobileSheetNav.d.ts} +5 -7
  223. package/dist/types/components/MobileSheetNav/index.d.ts +1 -0
  224. package/dist/types/components/ShellApp/ShellApp.d.ts +4 -4
  225. package/dist/types/components/ShellPage/ShellPage.d.ts +4 -0
  226. package/dist/types/components.d.ts +530 -381
  227. package/dist/types/shell/index.d.ts +1 -1
  228. package/dist/types/shell/shell-responsive.d.ts +3 -3
  229. package/dist/types/utils/index.d.ts +1 -0
  230. package/dist/types/utils/required-validity.d.ts +15 -0
  231. package/package.json +2 -1
  232. package/dist/angular/ds-shell-mobile-bar.d.ts +0 -18
  233. package/dist/angular/ds-shell-mobile-nav.d.ts +0 -23
  234. package/dist/angular/ds-shell-mobile-section-nav.d.ts +0 -18
  235. package/dist/components/ds-shell-mobile-bar.js +0 -2
  236. package/dist/components/ds-shell-mobile-bar.js.map +0 -1
  237. package/dist/components/ds-shell-mobile-nav.js +0 -2
  238. package/dist/components/ds-shell-mobile-nav.js.map +0 -1
  239. package/dist/components/ds-shell-mobile-section-nav.d.ts +0 -11
  240. package/dist/components/ds-shell-mobile-section-nav.js +0 -2
  241. package/dist/components/ds-shell-mobile-section-nav.js.map +0 -1
  242. package/dist/components/p-B6Vuayt6.js +0 -2
  243. package/dist/components/p-B6Vuayt6.js.map +0 -1
  244. package/dist/components/p-BPS9VExm.js +0 -2
  245. package/dist/components/p-BVV_rlIP.js +0 -2
  246. package/dist/components/p-BVV_rlIP.js.map +0 -1
  247. package/dist/components/p-BhxwpOH8.js +0 -2
  248. package/dist/components/p-BtEjlcB9.js +0 -2
  249. package/dist/components/p-BtEjlcB9.js.map +0 -1
  250. package/dist/components/p-CH6cNXXF.js +0 -2
  251. package/dist/components/p-CH6cNXXF.js.map +0 -1
  252. package/dist/components/p-C_0Q8Cnp.js +0 -2
  253. package/dist/components/p-Ce52yVXF.js +0 -2
  254. package/dist/components/p-Ce52yVXF.js.map +0 -1
  255. package/dist/components/p-CgHTNfC1.js +0 -2
  256. package/dist/components/p-CgHTNfC1.js.map +0 -1
  257. package/dist/components/p-Co8hD3P-.js +0 -2
  258. package/dist/components/p-CoYFJD-w.js +0 -2
  259. package/dist/components/p-CoYFJD-w.js.map +0 -1
  260. package/dist/components/p-Cpr3K41-.js +0 -2
  261. package/dist/components/p-Cpr3K41-.js.map +0 -1
  262. package/dist/components/p-CtD24EyI.js +0 -2
  263. package/dist/components/p-DYqReipj.js +0 -2
  264. package/dist/components/p-DYqReipj.js.map +0 -1
  265. package/dist/components/p-NUNsefU1.js +0 -2
  266. package/dist/components/p-PZ6R_nGI.js +0 -2
  267. package/dist/components/p-jCWtxthA.js +0 -2
  268. package/dist/components/p-yhj1lIPx.js +0 -2
  269. package/dist/mcp-data/registry/shell-mobile-bar.json +0 -314
  270. package/dist/mcp-data/registry/shell-mobile-nav.json +0 -348
  271. package/dist/mcp-data/registry/shell-mobile-section-nav.json +0 -267
  272. package/dist/react/ds-shell-mobile-bar.d.ts +0 -13
  273. package/dist/react/ds-shell-mobile-bar.js +0 -15
  274. package/dist/react/ds-shell-mobile-nav.d.ts +0 -15
  275. package/dist/react/ds-shell-mobile-nav.js +0 -17
  276. package/dist/react/ds-shell-mobile-section-nav.d.ts +0 -12
  277. package/dist/react/ds-shell-mobile-section-nav.js +0 -12
  278. package/dist/types/components/ShellMobileBar/ShellMobileBar.d.ts +0 -25
  279. package/dist/types/components/ShellMobileBar/index.d.ts +0 -4
  280. package/dist/types/components/ShellMobileBar/shell-mobile-bar-types.d.ts +0 -5
  281. package/dist/types/components/ShellMobileNav/index.d.ts +0 -2
  282. package/dist/types/components/ShellMobileNav/shell-mobile-nav-types.d.ts +0 -6
  283. package/dist/types/components/ShellMobileSectionNav/ShellMobileSectionNav.d.ts +0 -30
  284. package/dist/types/components/ShellMobileSectionNav/index.d.ts +0 -2
  285. /package/dist/components/{p-9dQQSgwT.js.map → p-BHYrsGBw.js.map} +0 -0
  286. /package/dist/components/{p-jCWtxthA.js.map → p-BY0PzkUp.js.map} +0 -0
  287. /package/dist/components/{p-yhj1lIPx.js.map → p-C2ym_Ich.js.map} +0 -0
  288. /package/dist/components/{p-Biz6xo-z.js.map → p-CFpWrYAH.js.map} +0 -0
  289. /package/dist/components/{p-g40DTeV8.js.map → p-CvKKmZJj.js.map} +0 -0
  290. /package/dist/components/{p-DXnFhmZF.js.map → p-D9iN80yX.js.map} +0 -0
  291. /package/dist/components/{p-DjPZxzIG.js.map → p-DQDpDYyF.js.map} +0 -0
package/README.md CHANGED
@@ -126,6 +126,22 @@ Safe semantic DOM produced by Markdown, CMS, or documentation renderers can use
126
126
 
127
127
  The application remains responsible for parsing and content safety. Use `data-ds-prose="off"` on embedded product UI, and wrap wide tables in `.ds-prose__table-scroll`. See the [prose foundation decision](docs/prose-foundation.md).
128
128
 
129
+ ## Elevated control wrappers
130
+
131
+ When a control needs elevation on an outer wrapper, use the split-shadow utility so an opaque child cannot cover TokoMo's inset highlight:
132
+
133
+ ```css
134
+ @import '@ds-mo/ui/control-elevation.css';
135
+ ```
136
+
137
+ ```html
138
+ <div class="my-control-shell ds-control-elevation ds-control-elevation--md">
139
+ <ds-button-filled label="Create" has-border="false"></ds-button-filled>
140
+ </div>
141
+ ```
142
+
143
+ The wrapper owns its radius, surface, outer shadow, and topmost highlight. Keep the wrapped control's optional resting border off; focus, error, selected, hover, and press strokes remain owned and rendered by the control beneath that highlight.
144
+
129
145
  ## Icon pattern
130
146
 
131
147
  Components that accept icons use a named `icon` slot:
package/dist/.build-stamp CHANGED
@@ -1 +1 @@
1
- 1784862378719
1
+ 1785028523719
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "schemaVersion": "1.0.0",
3
3
  "package": "@ds-mo/ui",
4
- "packageVersion": "12.4.1",
4
+ "packageVersion": "12.6.0",
5
5
  "kind": "patterns",
6
6
  "entries": [
7
7
  {
@@ -117,17 +117,22 @@
117
117
  "required": true
118
118
  },
119
119
  {
120
- "component": "component:ds-shell-mobile-nav",
120
+ "component": "component:ds-mobile-sheet-nav",
121
121
  "role": "Browses Dashboard and Settings primary areas in the mobile stage without navigating until an area is selected.",
122
122
  "required": true
123
123
  },
124
124
  {
125
- "component": "component:ds-shell-mobile-section-nav",
126
- "role": "Renders the active area's secondary routes in a horizontally scrollable mobile row.",
125
+ "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
128
+ },
129
+ {
130
+ "component": "component:ds-mobile-header",
131
+ "role": "Combines mobile page identity, peer-section switching, depth navigation, and contextual actions in one top bar.",
127
132
  "required": true
128
133
  },
129
134
  {
130
- "component": "component:ds-shell-mobile-bar",
135
+ "component": "component:ds-mobile-bar-nav",
131
136
  "role": "Provides persistent Menu, current area, Search, Agents, and Inbox destinations below 768px.",
132
137
  "required": true
133
138
  }
@@ -137,7 +142,9 @@
137
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.",
138
143
  "PanelNav owns primary-destination presentation and the user-controlled desktop collapse preference.",
139
144
  "BarNav derives the active secondary route from currentUrl and basePath and receives the active PanelNav destination label as heading.",
140
- "The application owns mobileDestination, mobileNavigationOpen, the actual active tool, and the last Inbox segment; ShellTools preserves product owners and presentation.",
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.",
141
148
  "The application router owns only the routed workspace. Search, Agents, Inbox, and Menu changes never change router history.",
142
149
  "PanelNav groups and BarNav dividers visually organize peers and never introduce nested navigation hierarchy."
143
150
  ],
@@ -145,7 +152,8 @@
145
152
  "Render one main landmark in the default content region.",
146
153
  "Use PanelNav exclusively for primary destinations and BarNav exclusively for secondary route sections.",
147
154
  "Keep localized visible labels and accessible names available when navigation is collapsed or moved into overflow.",
148
- "Provide visible labels for all five mobile-bar items and Search and Help in the available shell actions.",
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.",
149
157
  "Preserve keyboard focus and route state across responsive and Dashboard/Settings context changes."
150
158
  ],
151
159
  "responsiveBehavior": [
@@ -153,6 +161,7 @@
153
161
  "Desktop permits PanelNav expansion and collapse and restores the persisted user preference.",
154
162
  "Tablet keeps PanelNav permanently collapsed and does not overwrite the desktop preference.",
155
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.",
156
165
  "The routed workspace stays mounted and is only concealed and inert while a global surface or navigation pane occupies the stage.",
157
166
  "Messages, Stacks, and Activity map to mobile Inbox and preserve the selected segment across destination and breakpoint changes."
158
167
  ],
@@ -168,12 +177,12 @@
168
177
  {
169
178
  "path": "app-shell.html",
170
179
  "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>"
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>"
172
181
  },
173
182
  {
174
183
  "path": "app-shell.ts",
175
184
  "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))"
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))"
177
186
  }
178
187
  ],
179
188
  "notes": [
@@ -198,7 +207,7 @@
198
207
  {
199
208
  "path": "AppShell.tsx",
200
209
  "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}"
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}"
202
211
  }
203
212
  ],
204
213
  "notes": [
@@ -222,12 +231,12 @@
222
231
  {
223
232
  "path": "app-shell.component.html",
224
233
  "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>"
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>"
226
235
  },
227
236
  {
228
237
  "path": "app-shell.component.ts",
229
238
  "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}"
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}"
231
240
  }
232
241
  ],
233
242
  "notes": [