@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.
- package/README.md +8 -2
- package/dist/.build-stamp +1 -1
- package/dist/agent-patterns.json +94 -16
- package/dist/agent.json +1092 -53
- package/dist/angular/ds-bar-title.d.ts +7 -1
- package/dist/angular/ds-bar-title.js +7 -4
- package/dist/angular/ds-breadcrumb.d.ts +19 -0
- package/dist/angular/ds-breadcrumb.js +42 -0
- package/dist/angular/ds-card-data-viz-bar.d.ts +18 -0
- package/dist/angular/ds-card-data-viz-bar.js +42 -0
- package/dist/angular/ds-card-data-viz-line.d.ts +18 -0
- package/dist/angular/ds-card-data-viz-line.js +42 -0
- package/dist/angular/ds-chart-bar-stacked.d.ts +12 -0
- package/dist/angular/ds-chart-bar-stacked.js +38 -0
- package/dist/angular/ds-chart-legend.d.ts +1 -1
- package/dist/angular/ds-chart-legend.js +3 -3
- package/dist/angular/ds-shell-app.d.ts +13 -2
- package/dist/angular/ds-shell-app.js +9 -5
- package/dist/angular/ds-shell-mobile-bar.d.ts +18 -0
- package/dist/angular/ds-shell-mobile-bar.js +46 -0
- package/dist/angular/ds-shell-mobile-nav.d.ts +23 -0
- package/dist/angular/ds-shell-mobile-nav.js +51 -0
- package/dist/angular/ds-shell-mobile-section-nav.d.ts +18 -0
- package/dist/angular/ds-shell-mobile-section-nav.js +42 -0
- package/dist/angular/ds-shell-page.d.ts +1 -1
- package/dist/angular/ds-shell-page.js +3 -3
- package/dist/angular/ds-shell-tools.d.ts +42 -0
- package/dist/angular/ds-shell-tools.js +52 -0
- package/dist/angular/index.d.ts +1 -1
- package/dist/angular/index.js +8 -0
- package/dist/angular/proxies.d.ts +8 -0
- package/dist/angular/proxies.js +8 -0
- package/dist/components/ds-agent-activity.js +1 -1
- package/dist/components/ds-agent-response.js +1 -1
- package/dist/components/ds-agent-source-list.js +1 -1
- package/dist/components/ds-agent-tool-call.js +1 -1
- package/dist/components/ds-attachment-list.js +1 -1
- package/dist/components/ds-badge.js +1 -1
- package/dist/components/ds-bar-nav.js +1 -1
- package/dist/components/ds-bar-title.js +1 -1
- package/dist/components/ds-bar-title.js.map +1 -1
- package/dist/components/ds-bar-workflow.js +1 -1
- package/dist/components/ds-breadcrumb.d.ts +11 -0
- package/dist/components/ds-breadcrumb.js +2 -0
- package/dist/components/ds-breadcrumb.js.map +1 -0
- package/dist/components/ds-button-filled.js +1 -1
- package/dist/components/ds-button-unfilled.js +1 -1
- package/dist/components/ds-card-data-viz-bar.d.ts +11 -0
- package/dist/components/ds-card-data-viz-bar.js +2 -0
- package/dist/components/ds-card-data-viz-bar.js.map +1 -0
- package/dist/components/ds-card-data-viz-donut.js +1 -1
- package/dist/components/ds-card-data-viz-donut.js.map +1 -1
- package/dist/components/ds-card-data-viz-line.d.ts +11 -0
- package/dist/components/ds-card-data-viz-line.js +2 -0
- package/dist/components/ds-card-data-viz-line.js.map +1 -0
- package/dist/components/ds-card-setting.js +1 -1
- package/dist/components/ds-card-setting.js.map +1 -1
- package/dist/components/ds-card-shell-data-viz.js +1 -1
- package/dist/components/ds-chart-bar-stacked.d.ts +11 -0
- package/dist/components/ds-chart-bar-stacked.js +2 -0
- package/dist/components/ds-chart-bar-stacked.js.map +1 -0
- package/dist/components/ds-chart-bar.js +1 -1
- package/dist/components/ds-chart-bar.js.map +1 -1
- package/dist/components/ds-chart-donut.js +1 -1
- package/dist/components/ds-chart-legend.js +1 -1
- package/dist/components/ds-chart-legend.js.map +1 -1
- package/dist/components/ds-chart-line.js +1 -1
- package/dist/components/ds-chart-line.js.map +1 -1
- package/dist/components/ds-checkbox.js +1 -1
- package/dist/components/ds-chip.js +1 -1
- package/dist/components/ds-code-block.js +1 -1
- package/dist/components/ds-conversation-list-item.js +1 -1
- package/dist/components/ds-conversation-list-item.js.map +1 -1
- package/dist/components/ds-conversation-list-section.js +1 -1
- package/dist/components/ds-conversation-list.js +1 -1
- package/dist/components/ds-divider.js +1 -1
- package/dist/components/ds-empty-state.js +1 -1
- package/dist/components/ds-field.js +1 -1
- package/dist/components/ds-input.js +1 -1
- package/dist/components/ds-markdown.js +1 -1
- package/dist/components/ds-menu.js +1 -1
- package/dist/components/ds-message-bubble.js +1 -1
- package/dist/components/ds-message-bubble.js.map +1 -1
- package/dist/components/ds-message-composer.js +1 -1
- package/dist/components/ds-message-scroller.js +1 -1
- package/dist/components/ds-message-scroller.js.map +1 -1
- package/dist/components/ds-message.js +1 -1
- package/dist/components/ds-modal.js +1 -1
- package/dist/components/ds-modal.js.map +1 -1
- package/dist/components/ds-panel-nav.js +1 -1
- package/dist/components/ds-panel-nav.js.map +1 -1
- package/dist/components/ds-panel-sub-nav.js +1 -1
- package/dist/components/ds-panel-tool-header.js +1 -1
- package/dist/components/ds-panel-tool-search.js +1 -1
- package/dist/components/ds-panel-tools.js +1 -1
- package/dist/components/ds-panel-tools.js.map +1 -1
- package/dist/components/ds-radio.js +1 -1
- package/dist/components/ds-scroll-overlay.js +1 -1
- package/dist/components/ds-scroll-overlay.js.map +1 -1
- package/dist/components/ds-select-multi.js +1 -1
- package/dist/components/ds-select-multi.js.map +1 -1
- package/dist/components/ds-select.js +1 -1
- package/dist/components/ds-select.js.map +1 -1
- package/dist/components/ds-shell-app.js +1 -1
- package/dist/components/ds-shell-app.js.map +1 -1
- package/dist/components/ds-shell-gradient-picker.js +1 -1
- package/dist/components/ds-shell-gradient-picker.js.map +1 -1
- package/dist/components/ds-shell-gradient-swatch.js +1 -1
- package/dist/components/ds-shell-mobile-bar.d.ts +11 -0
- package/dist/components/ds-shell-mobile-bar.js +2 -0
- package/dist/components/ds-shell-mobile-bar.js.map +1 -0
- package/dist/components/ds-shell-mobile-nav.d.ts +11 -0
- package/dist/components/ds-shell-mobile-nav.js +2 -0
- package/dist/components/ds-shell-mobile-nav.js.map +1 -0
- package/dist/components/ds-shell-mobile-section-nav.d.ts +11 -0
- package/dist/components/ds-shell-mobile-section-nav.js +2 -0
- package/dist/components/ds-shell-mobile-section-nav.js.map +1 -0
- package/dist/components/ds-shell-page.js +1 -1
- package/dist/components/ds-shell-page.js.map +1 -1
- package/dist/components/ds-shell-tools.d.ts +11 -0
- package/dist/components/ds-shell-tools.js +2 -0
- package/dist/components/ds-shell-tools.js.map +1 -0
- package/dist/components/ds-skeleton.js +1 -1
- package/dist/components/ds-slider.js +1 -1
- package/dist/components/ds-slider.js.map +1 -1
- package/dist/components/ds-swatch-picker.js +1 -1
- package/dist/components/ds-switch.js +1 -1
- package/dist/components/ds-tab-group.js +1 -1
- package/dist/components/ds-tab-group.js.map +1 -1
- package/dist/components/ds-tag.js +1 -1
- package/dist/components/ds-text.js +1 -1
- package/dist/components/ds-toast.js +1 -1
- package/dist/components/ds-toast.js.map +1 -1
- package/dist/components/ds-tooltip-data-viz.js +1 -1
- package/dist/components/ds-tooltip.js +1 -1
- package/dist/components/ds-typing-indicator.js +1 -1
- package/dist/components/ds-typing-indicator.js.map +1 -1
- package/dist/components/{p-DcGpdIlT.js → p-9dQQSgwT.js} +2 -2
- package/dist/components/p-B3rbhRAk.js +2 -0
- package/dist/components/p-B3rbhRAk.js.map +1 -0
- package/dist/components/p-B6Vuayt6.js +2 -0
- package/dist/components/p-B6Vuayt6.js.map +1 -0
- package/dist/components/{p-BWUTr_XN.js → p-BJMRBHKW.js} +2 -2
- package/dist/components/p-BJMRBHKW.js.map +1 -0
- package/dist/components/p-BPS9VExm.js +2 -0
- package/dist/components/{p-CCHqsF_H.js.map → p-BPS9VExm.js.map} +1 -1
- package/dist/components/p-BVV_rlIP.js +2 -0
- package/dist/components/p-BVV_rlIP.js.map +1 -0
- package/dist/components/{p-GMDGgtY8.js → p-BhxwpOH8.js} +2 -2
- package/dist/components/{p-2W-ZjZCR.js → p-Biz6xo-z.js} +2 -2
- package/dist/components/p-BrusnEYP.js +2 -0
- package/dist/components/p-BrusnEYP.js.map +1 -0
- package/dist/components/{p-CG5EX4NW.js → p-BtEjlcB9.js} +2 -2
- package/dist/components/{p-C0_8K4y7.js → p-BwGnhInj.js} +2 -2
- package/dist/components/p-BwGnhInj.js.map +1 -0
- package/dist/components/{p-D6jK2Hyi.js → p-C7bZ-jiU.js} +2 -2
- package/dist/components/p-CH3w-P2H.js +2 -0
- package/dist/components/p-CH3w-P2H.js.map +1 -0
- package/dist/components/{p-DOCKtrS4.js → p-CH6cNXXF.js} +2 -2
- package/dist/components/{p-BE_CDJeL.js → p-CY19gMiz.js} +2 -2
- package/dist/components/p-C_0Q8Cnp.js +2 -0
- package/dist/components/{p-Dg3xLna0.js.map → p-C_0Q8Cnp.js.map} +1 -1
- package/dist/components/p-C_ewSXTT.js +2 -0
- package/dist/components/p-C_ewSXTT.js.map +1 -0
- package/dist/components/{p-CHkI3oIS.js → p-Ce52yVXF.js} +2 -2
- package/dist/components/p-CgHTNfC1.js +2 -0
- package/dist/components/p-CgHTNfC1.js.map +1 -0
- package/dist/components/p-Co8hD3P-.js +2 -0
- package/dist/components/{p-Cxpl-rzP.js.map → p-Co8hD3P-.js.map} +1 -1
- package/dist/components/{p-xY3TjBF5.js → p-CoYFJD-w.js} +2 -2
- package/dist/components/{p-DBi1bmOL.js → p-CtD24EyI.js} +2 -2
- package/dist/components/{p-BRLDJmkh.js → p-D-xttdpn.js} +2 -2
- package/dist/components/{p-CNffejay.js → p-DSa0Hnd3.js} +2 -2
- package/dist/components/p-DXewjzkM.js +2 -0
- package/dist/components/p-DXewjzkM.js.map +1 -0
- package/dist/components/p-DXnFhmZF.js +2 -0
- package/dist/components/{p-BpA9uYKX.js.map → p-DXnFhmZF.js.map} +1 -1
- package/dist/components/{p-DyGB97Oy.js → p-DYqReipj.js} +2 -2
- package/dist/components/{p-ky1msbJ8.js → p-DjPZxzIG.js} +2 -2
- package/dist/components/{p-ky1msbJ8.js.map → p-DjPZxzIG.js.map} +1 -1
- package/dist/components/p-NUNsefU1.js +2 -0
- package/dist/components/{p-8OOCLGph.js.map → p-NUNsefU1.js.map} +1 -1
- package/dist/components/p-PZ6R_nGI.js +2 -0
- package/dist/components/p-PZ6R_nGI.js.map +1 -0
- package/dist/components/{p-B8CubPgQ.js → p-g40DTeV8.js} +2 -2
- package/dist/components/p-jCWtxthA.js +2 -0
- package/dist/components/{p-XgIQ3oI_.js.map → p-jCWtxthA.js.map} +1 -1
- package/dist/components/p-yhj1lIPx.js +2 -0
- package/dist/components/p-yhj1lIPx.js.map +1 -0
- package/dist/docs/components.json +8860 -6021
- package/dist/lib/components/BarNav/bar-nav-types.d.ts +2 -0
- package/dist/lib/components/PanelNav/panel-nav-types.d.ts +29 -0
- package/dist/lib/components/PanelTools/panel-tools-types.d.ts +40 -0
- package/dist/lib/components/TabGroup/tab-item-utils.d.ts +31 -0
- package/dist/lib/shell/index.d.ts +5 -0
- package/dist/lib/shell/index.js +36 -0
- package/dist/lib/shell/index.js.map +3 -3
- package/dist/lib/shell/shell-responsive.d.ts +13 -0
- package/dist/lib/utils/index.js +3 -1
- package/dist/lib/utils/index.js.map +2 -2
- package/dist/mcp/cli.js +142 -18
- package/dist/mcp-data/registry/agent-source-list.json +1 -1
- package/dist/mcp-data/registry/bar-title.json +68 -14
- package/dist/mcp-data/registry/breadcrumb.json +205 -0
- package/dist/mcp-data/registry/card-data-viz-bar.json +212 -0
- package/dist/mcp-data/registry/card-data-viz-line.json +206 -0
- package/dist/mcp-data/registry/card-shell-data-viz.json +7 -0
- package/dist/mcp-data/registry/chart-bar-stacked.json +225 -0
- package/dist/mcp-data/registry/chart-bar.json +9 -2
- package/dist/mcp-data/registry/chart-legend.json +29 -3
- package/dist/mcp-data/registry/chart-line.json +4 -2
- package/dist/mcp-data/registry/conversation-list-item.json +3 -3
- package/dist/mcp-data/registry/message-scroller.json +4 -2
- package/dist/mcp-data/registry/message.json +3 -2
- package/dist/mcp-data/registry/modal.json +1 -1
- package/dist/mcp-data/registry/registry.json +1107 -44
- package/dist/mcp-data/registry/shell-app.json +71 -11
- package/dist/mcp-data/registry/shell-mobile-bar.json +314 -0
- package/dist/mcp-data/registry/shell-mobile-nav.json +348 -0
- package/dist/mcp-data/registry/shell-mobile-section-nav.json +267 -0
- package/dist/mcp-data/registry/shell-page.json +31 -13
- package/dist/mcp-data/registry/shell-tools.json +450 -0
- package/dist/mcp-data/registry/text.json +1 -1
- package/dist/mcp-data/registry/typing-indicator.json +7 -7
- package/dist/react/components.d.ts +8 -0
- package/dist/react/components.js +8 -0
- package/dist/react/ds-bar-title.d.ts +2 -1
- package/dist/react/ds-bar-title.js +1 -0
- package/dist/react/ds-breadcrumb.d.ts +12 -0
- package/dist/react/ds-breadcrumb.js +12 -0
- package/dist/react/ds-card-data-viz-bar.d.ts +12 -0
- package/dist/react/ds-card-data-viz-bar.js +12 -0
- package/dist/react/ds-card-data-viz-line.d.ts +12 -0
- package/dist/react/ds-card-data-viz-line.js +12 -0
- package/dist/react/ds-chart-bar-stacked.d.ts +9 -0
- package/dist/react/ds-chart-bar-stacked.js +12 -0
- package/dist/react/ds-shell-app.d.ts +7 -2
- package/dist/react/ds-shell-app.js +1 -1
- package/dist/react/ds-shell-mobile-bar.d.ts +13 -0
- package/dist/react/ds-shell-mobile-bar.js +15 -0
- package/dist/react/ds-shell-mobile-nav.d.ts +15 -0
- package/dist/react/ds-shell-mobile-nav.js +17 -0
- package/dist/react/ds-shell-mobile-section-nav.d.ts +12 -0
- package/dist/react/ds-shell-mobile-section-nav.js +12 -0
- package/dist/react/ds-shell-tools.d.ts +25 -0
- package/dist/react/ds-shell-tools.js +17 -0
- package/dist/styles/prose.css +1 -0
- package/dist/types/components/BarTitle/BarTitle.d.ts +13 -1
- package/dist/types/components/Breadcrumb/Breadcrumb.d.ts +31 -0
- package/dist/types/components/Breadcrumb/breadcrumb-types.d.ts +17 -0
- package/dist/types/components/CardDataVizBar/CardDataVizBar.d.ts +24 -0
- package/dist/types/components/CardDataVizBar/index.d.ts +2 -0
- package/dist/types/components/CardDataVizLine/CardDataVizLine.d.ts +24 -0
- package/dist/types/components/CardDataVizLine/index.d.ts +2 -0
- package/dist/types/components/ChartBarStacked/ChartBarStacked.d.ts +15 -0
- package/dist/types/components/ChartBarStacked/index.d.ts +3 -0
- package/dist/types/components/ChartLegend/ChartLegend.d.ts +3 -0
- package/dist/types/components/ShellApp/ShellApp.d.ts +16 -0
- package/dist/types/components/ShellMobileBar/ShellMobileBar.d.ts +25 -0
- package/dist/types/components/ShellMobileBar/index.d.ts +4 -0
- package/dist/types/components/ShellMobileBar/shell-mobile-bar-types.d.ts +5 -0
- package/dist/types/components/ShellMobileNav/ShellMobileNav.d.ts +32 -0
- package/dist/types/components/ShellMobileNav/index.d.ts +2 -0
- package/dist/types/components/ShellMobileNav/shell-mobile-nav-types.d.ts +6 -0
- package/dist/types/components/ShellMobileSectionNav/ShellMobileSectionNav.d.ts +30 -0
- package/dist/types/components/ShellMobileSectionNav/index.d.ts +2 -0
- package/dist/types/components/ShellPage/ShellPage.d.ts +19 -7
- package/dist/types/components/ShellPage/shell-page-responsive.d.ts +0 -8
- package/dist/types/components/ShellTools/ShellTools.d.ts +61 -0
- package/dist/types/components/ShellTools/index.d.ts +3 -0
- package/dist/types/components/TypingIndicator/TypingIndicator.d.ts +1 -1
- package/dist/types/components.d.ts +953 -19
- package/dist/types/shell/index.d.ts +5 -0
- package/dist/types/shell/shell-responsive.d.ts +14 -0
- package/package.json +1 -1
- package/dist/components/p-8OOCLGph.js +0 -2
- package/dist/components/p-BWUTr_XN.js.map +0 -1
- package/dist/components/p-BpA9uYKX.js +0 -2
- package/dist/components/p-C0_8K4y7.js.map +0 -1
- package/dist/components/p-CA3kLO7K.js +0 -2
- package/dist/components/p-CA3kLO7K.js.map +0 -1
- package/dist/components/p-CCHqsF_H.js +0 -2
- package/dist/components/p-Cxpl-rzP.js +0 -2
- package/dist/components/p-CzBnvtcz.js +0 -2
- package/dist/components/p-CzBnvtcz.js.map +0 -1
- package/dist/components/p-Dg3xLna0.js +0 -2
- package/dist/components/p-XgIQ3oI_.js +0 -2
- /package/dist/components/{p-DcGpdIlT.js.map → p-9dQQSgwT.js.map} +0 -0
- /package/dist/components/{p-GMDGgtY8.js.map → p-BhxwpOH8.js.map} +0 -0
- /package/dist/components/{p-2W-ZjZCR.js.map → p-Biz6xo-z.js.map} +0 -0
- /package/dist/components/{p-CG5EX4NW.js.map → p-BtEjlcB9.js.map} +0 -0
- /package/dist/components/{p-D6jK2Hyi.js.map → p-C7bZ-jiU.js.map} +0 -0
- /package/dist/components/{p-DOCKtrS4.js.map → p-CH6cNXXF.js.map} +0 -0
- /package/dist/components/{p-BE_CDJeL.js.map → p-CY19gMiz.js.map} +0 -0
- /package/dist/components/{p-CHkI3oIS.js.map → p-Ce52yVXF.js.map} +0 -0
- /package/dist/components/{p-xY3TjBF5.js.map → p-CoYFJD-w.js.map} +0 -0
- /package/dist/components/{p-DBi1bmOL.js.map → p-CtD24EyI.js.map} +0 -0
- /package/dist/components/{p-BRLDJmkh.js.map → p-D-xttdpn.js.map} +0 -0
- /package/dist/components/{p-CNffejay.js.map → p-DSa0Hnd3.js.map} +0 -0
- /package/dist/components/{p-DyGB97Oy.js.map → p-DYqReipj.js.map} +0 -0
- /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
|
-
|
|
1
|
+
1784854799753
|
package/dist/agent-patterns.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schemaVersion": "1.0.0",
|
|
3
3
|
"package": "@ds-mo/ui",
|
|
4
|
-
"packageVersion": "12.
|
|
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-
|
|
116
|
-
"role": "
|
|
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
|
-
"
|
|
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
|
|
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
|
|
140
|
-
"
|
|
141
|
-
"
|
|
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": "
|
|
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
|
-
"
|
|
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
|
-
"
|
|
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": [
|