@ds-mo/ui 11.1.0 → 12.1.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 +1 -1
- package/dist/.build-stamp +1 -1
- package/dist/agent-patterns.json +150 -9
- package/dist/agent.json +488 -174
- package/dist/angular/ds-bar-title.d.ts +28 -0
- package/dist/angular/ds-bar-title.js +48 -0
- package/dist/angular/ds-panel-nav.d.ts +1 -1
- package/dist/angular/{ds-app-shell.d.ts → ds-shell-app.d.ts} +5 -5
- package/dist/angular/{ds-app-shell.js → ds-shell-app.js} +10 -10
- package/dist/angular/ds-shell-page.d.ts +12 -0
- package/dist/angular/ds-shell-page.js +38 -0
- package/dist/angular/index.d.ts +1 -1
- package/dist/angular/index.js +3 -1
- package/dist/angular/proxies.d.ts +3 -1
- package/dist/angular/proxies.js +3 -1
- package/dist/components/ds-agent-activity.js +1 -1
- package/dist/components/ds-agent-response.js +1 -1
- package/dist/components/ds-agent-response.js.map +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-avatar.js +1 -1
- package/dist/components/ds-avatar.js.map +1 -1
- package/dist/components/ds-badge.js +1 -1
- package/dist/components/ds-bar-nav.js +1 -1
- package/dist/components/ds-bar-nav.js.map +1 -1
- package/dist/components/{ds-app-shell.d.ts → ds-bar-title.d.ts} +4 -4
- package/dist/components/ds-bar-title.js +2 -0
- package/dist/components/ds-bar-title.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-donut.js +1 -1
- package/dist/components/ds-card-setting.js +1 -1
- package/dist/components/ds-card-shell-data-viz.js +1 -1
- package/dist/components/ds-chart-bar.js +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-line.js +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-empty-state.js +1 -1
- package/dist/components/ds-field.js +1 -1
- package/dist/components/ds-icon.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-composer.js +1 -1
- package/dist/components/ds-message-composer.js.map +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-sub-nav.js.map +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-tool-search.js.map +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-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.d.ts +11 -0
- package/dist/components/ds-shell-app.js +2 -0
- package/dist/components/ds-shell-app.js.map +1 -0
- 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-page.d.ts +11 -0
- package/dist/components/ds-shell-page.js +2 -0
- package/dist/components/ds-shell-page.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-tag.js +1 -1
- package/dist/components/ds-text.js +1 -1
- package/dist/components/ds-toast.js +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/{p-DJ78wdNv.js → p-B9jvSGid.js} +2 -2
- package/dist/components/{p-DuNZGFkV.js → p-BAfG3M8z.js} +2 -2
- package/dist/components/p-BAfG3M8z.js.map +1 -0
- package/dist/components/{p-Dh4q5TSS.js → p-BfEjWe8U.js} +2 -2
- package/dist/components/{p-CZZYGqKz.js → p-Bs6SS34m.js} +2 -2
- package/dist/components/p-BzsITTZa.js +2 -0
- package/dist/components/p-BzsITTZa.js.map +1 -0
- package/dist/components/p-C3Zfn7hz.js +2 -0
- package/dist/components/p-C3Zfn7hz.js.map +1 -0
- package/dist/components/{p-bNpFhP5L.js → p-CR7yMitN.js} +2 -2
- package/dist/components/p-CTV_QWC5.js +2 -0
- package/dist/components/p-CTV_QWC5.js.map +1 -0
- package/dist/components/p-CUik7PCi.js +2 -0
- package/dist/components/p-CUik7PCi.js.map +1 -0
- package/dist/components/{p-BKhG2xrW.js → p-D2x17ei-.js} +1 -1
- package/dist/components/{p-BKhG2xrW.js.map → p-D2x17ei-.js.map} +1 -1
- package/dist/components/{p-CjP8sYlo.js → p-DABj3qTX.js} +2 -2
- package/dist/components/p-DfIch2Dk.js +2 -0
- package/dist/components/{p-BCCt2eT_.js.map → p-DfIch2Dk.js.map} +1 -1
- package/dist/components/{p-Bet_UjML.js → p-Dfxnxx7L.js} +2 -2
- package/dist/components/{p-CrwU83-g.js → p-Dg3xLna0.js} +2 -2
- package/dist/components/{p-BaZRP4Oo.js → p-DpyTrZa2.js} +2 -2
- package/dist/components/{p-P_4vE1ub.js → p-Dqwcw1-m.js} +2 -2
- package/dist/components/{p-CyoHRqy6.js → p-DszI94sZ.js} +2 -2
- package/dist/components/{p-DrDHC7V6.js → p-DxeHimqk.js} +2 -2
- package/dist/components/{p-DrDHC7V6.js.map → p-DxeHimqk.js.map} +1 -1
- package/dist/components/p-Dy3Skua8.js +2 -0
- package/dist/components/{p-B_qVPsEU.js.map → p-Dy3Skua8.js.map} +1 -1
- package/dist/components/{p-CLn7QnE0.js → p-Dy_sZ-dI.js} +2 -2
- package/dist/components/{p-BEWtqFX7.js → p-LFGbdi7Y.js} +2 -2
- package/dist/components/{p-0kEg-Z4f.js → p-liMPkhUP.js} +2 -2
- package/dist/components/{p-CPPAndX2.js → p-tDXHTAJh.js} +2 -2
- package/dist/components/{p-DTqCBjUj.js → p-webARv8d.js} +2 -2
- package/dist/docs/components.json +1122 -330
- package/dist/lib/shell/chrome-transition.d.ts +1 -1
- package/dist/lib/shell/index.js +1 -1
- package/dist/lib/shell/index.js.map +1 -1
- package/dist/lib/shell/shell-gradient.d.ts +2 -2
- package/dist/mcp-data/registry/agent-activity.json +1 -1
- package/dist/mcp-data/registry/agent-response.json +1 -1
- package/dist/mcp-data/registry/agent-source-list.json +1 -1
- package/dist/mcp-data/registry/agent-tool-call.json +1 -1
- package/dist/mcp-data/registry/attachment-list.json +1 -1
- package/dist/mcp-data/registry/avatar.json +2 -2
- package/dist/mcp-data/registry/badge.json +5 -5
- package/dist/mcp-data/registry/bar-nav.json +9 -9
- package/dist/mcp-data/registry/bar-title.json +451 -0
- package/dist/mcp-data/registry/button-filled.json +1 -1
- package/dist/mcp-data/registry/button-unfilled.json +1 -1
- package/dist/mcp-data/registry/card-data-viz-donut.json +1 -1
- package/dist/mcp-data/registry/card-setting.json +1 -1
- package/dist/mcp-data/registry/card-shell-data-viz.json +1 -1
- package/dist/mcp-data/registry/chart-bar.json +1 -1
- package/dist/mcp-data/registry/chart-donut.json +1 -1
- package/dist/mcp-data/registry/chart-legend.json +1 -1
- package/dist/mcp-data/registry/chart-line.json +1 -1
- package/dist/mcp-data/registry/checkbox.json +1 -1
- package/dist/mcp-data/registry/chip.json +1 -1
- package/dist/mcp-data/registry/code-block.json +5 -4
- package/dist/mcp-data/registry/conversation-list-item.json +1 -1
- package/dist/mcp-data/registry/conversation-list-section.json +1 -1
- package/dist/mcp-data/registry/conversation-list.json +1 -1
- package/dist/mcp-data/registry/divider.json +1 -1
- package/dist/mcp-data/registry/empty-state.json +1 -1
- package/dist/mcp-data/registry/field.json +1 -1
- package/dist/mcp-data/registry/icon.json +2 -2
- package/dist/mcp-data/registry/input.json +1 -1
- package/dist/mcp-data/registry/loader.json +1 -1
- package/dist/mcp-data/registry/markdown.json +1 -1
- package/dist/mcp-data/registry/menu.json +2 -2
- package/dist/mcp-data/registry/message-bubble.json +1 -1
- package/dist/mcp-data/registry/message-composer.json +8 -6
- package/dist/mcp-data/registry/message-scroller.json +5 -4
- package/dist/mcp-data/registry/message.json +1 -1
- package/dist/mcp-data/registry/modal.json +6 -5
- package/dist/mcp-data/registry/panel-nav.json +9 -9
- package/dist/mcp-data/registry/panel-sub-nav.json +2 -2
- package/dist/mcp-data/registry/panel-tool-header.json +5 -4
- package/dist/mcp-data/registry/panel-tool-search.json +7 -6
- package/dist/mcp-data/registry/panel-tools.json +14 -14
- package/dist/mcp-data/registry/radio.json +1 -1
- package/dist/mcp-data/registry/registry.json +497 -177
- package/dist/mcp-data/registry/select-multi.json +3 -2
- package/dist/mcp-data/registry/select.json +3 -2
- package/dist/mcp-data/registry/shell-app.json +213 -0
- package/dist/mcp-data/registry/shell-gradient-picker.json +9 -9
- package/dist/mcp-data/registry/shell-gradient-swatch.json +3 -3
- package/dist/mcp-data/registry/shell-page.json +200 -0
- package/dist/mcp-data/registry/skeleton.json +1 -1
- package/dist/mcp-data/registry/slider.json +1 -1
- package/dist/mcp-data/registry/swatch-picker.json +2 -2
- package/dist/mcp-data/registry/switch.json +1 -1
- package/dist/mcp-data/registry/tab-group.json +1 -1
- package/dist/mcp-data/registry/tag.json +1 -1
- package/dist/mcp-data/registry/text.json +1 -1
- package/dist/mcp-data/registry/toast.json +1 -1
- package/dist/mcp-data/registry/tooltip-data-viz.json +1 -1
- package/dist/mcp-data/registry/tooltip.json +1 -1
- package/dist/mcp-data/registry/typing-indicator.json +1 -1
- package/dist/react/components.d.ts +3 -1
- package/dist/react/components.js +3 -1
- package/dist/react/ds-bar-title.d.ts +14 -0
- package/dist/react/ds-bar-title.js +16 -0
- package/dist/react/{ds-app-shell.d.ts → ds-shell-app.d.ts} +3 -3
- package/dist/react/ds-shell-app.js +12 -0
- package/dist/react/ds-shell-page.d.ts +9 -0
- package/dist/react/ds-shell-page.js +12 -0
- package/dist/types/components/Badge/Badge.d.ts +1 -1
- package/dist/types/components/BarTitle/BarTitle.d.ts +76 -0
- package/dist/types/components/BarTitle/bar-title-types.d.ts +30 -0
- package/dist/types/components/BarTitle/index.d.ts +2 -0
- package/dist/types/components/Menu/Menu.d.ts +5 -0
- package/dist/types/components/PanelNav/PanelNav.d.ts +1 -1
- package/dist/types/components/{AppShell/AppShell.d.ts → ShellApp/ShellApp.d.ts} +3 -3
- package/dist/types/components/ShellPage/ShellPage.d.ts +42 -0
- package/dist/types/components/ShellPage/index.d.ts +3 -0
- package/dist/types/components/ShellPage/shell-page-responsive.d.ts +12 -0
- package/dist/types/components/ShellPage/shell-page-types.d.ts +5 -0
- package/dist/types/components.d.ts +278 -55
- package/dist/types/shell/chrome-transition.d.ts +1 -1
- package/dist/types/shell/shell-gradient.d.ts +2 -2
- package/dist/types/shell/shell-shortcuts.d.ts +1 -1
- package/package.json +3 -3
- package/dist/components/ds-app-shell.js +0 -2
- package/dist/components/ds-app-shell.js.map +0 -1
- package/dist/components/p-BCCt2eT_.js +0 -2
- package/dist/components/p-B_qVPsEU.js +0 -2
- package/dist/components/p-BsnezUUC.js +0 -2
- package/dist/components/p-BsnezUUC.js.map +0 -1
- package/dist/components/p-C1K5QGUZ.js +0 -2
- package/dist/components/p-C1K5QGUZ.js.map +0 -1
- package/dist/components/p-CKaJx0IX.js +0 -2
- package/dist/components/p-CKaJx0IX.js.map +0 -1
- package/dist/components/p-DuNZGFkV.js.map +0 -1
- package/dist/components/p-ZTugT4as.js +0 -2
- package/dist/components/p-ZTugT4as.js.map +0 -1
- package/dist/mcp-data/registry/app-shell.json +0 -210
- package/dist/react/ds-app-shell.js +0 -12
- /package/dist/components/{p-DJ78wdNv.js.map → p-B9jvSGid.js.map} +0 -0
- /package/dist/components/{p-Dh4q5TSS.js.map → p-BfEjWe8U.js.map} +0 -0
- /package/dist/components/{p-CZZYGqKz.js.map → p-Bs6SS34m.js.map} +0 -0
- /package/dist/components/{p-bNpFhP5L.js.map → p-CR7yMitN.js.map} +0 -0
- /package/dist/components/{p-CjP8sYlo.js.map → p-DABj3qTX.js.map} +0 -0
- /package/dist/components/{p-Bet_UjML.js.map → p-Dfxnxx7L.js.map} +0 -0
- /package/dist/components/{p-CrwU83-g.js.map → p-Dg3xLna0.js.map} +0 -0
- /package/dist/components/{p-BaZRP4Oo.js.map → p-DpyTrZa2.js.map} +0 -0
- /package/dist/components/{p-P_4vE1ub.js.map → p-Dqwcw1-m.js.map} +0 -0
- /package/dist/components/{p-CyoHRqy6.js.map → p-DszI94sZ.js.map} +0 -0
- /package/dist/components/{p-CLn7QnE0.js.map → p-Dy_sZ-dI.js.map} +0 -0
- /package/dist/components/{p-BEWtqFX7.js.map → p-LFGbdi7Y.js.map} +0 -0
- /package/dist/components/{p-0kEg-Z4f.js.map → p-liMPkhUP.js.map} +0 -0
- /package/dist/components/{p-CPPAndX2.js.map → p-tDXHTAJh.js.map} +0 -0
- /package/dist/components/{p-DTqCBjUj.js.map → p-webARv8d.js.map} +0 -0
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
"peerDependencies": {
|
|
14
14
|
"required": [
|
|
15
15
|
"@ds-mo/tokens ^3.1.1",
|
|
16
|
-
"@ds-mo/icons ^6.
|
|
16
|
+
"@ds-mo/icons ^6.4.0"
|
|
17
17
|
],
|
|
18
18
|
"optional": [],
|
|
19
19
|
"frameworks": "None required for Custom Elements; generated React and Angular adapters are included."
|
|
@@ -363,130 +363,6 @@
|
|
|
363
363
|
"text"
|
|
364
364
|
]
|
|
365
365
|
},
|
|
366
|
-
{
|
|
367
|
-
"name": "app-shell",
|
|
368
|
-
"title": "AppShell",
|
|
369
|
-
"description": "The single required workspace root for standard authenticated application pages, coordinating primary and secondary navigation, tools chrome, responsive composition, content geometry, shared styling, and shell behavior.",
|
|
370
|
-
"type": "registry:ui",
|
|
371
|
-
"meta": {
|
|
372
|
-
"library": "@ds-mo/ui",
|
|
373
|
-
"distribution": "npm",
|
|
374
|
-
"storybook": "https://zainadeel.github.io/compomo/?path=/story/app-shell",
|
|
375
|
-
"source": "src/wc/components/AppShell/AppShell.tsx",
|
|
376
|
-
"intentStatus": "complete",
|
|
377
|
-
"intent": {
|
|
378
|
-
"audience": "specialized",
|
|
379
|
-
"status": "stable",
|
|
380
|
-
"summary": "The single required workspace root for standard authenticated application pages, coordinating primary and secondary navigation, tools chrome, responsive composition, content geometry, shared styling, and shell behavior.",
|
|
381
|
-
"useWhen": [
|
|
382
|
-
"Building any standard authenticated product or workspace page with CompoMo.",
|
|
383
|
-
"PanelNav, BarNav, PanelTools, page content, shared chrome, responsive behavior, and shell shortcuts must be composed as one application frame.",
|
|
384
|
-
"Future application templates need the supported base-page composition boundary."
|
|
385
|
-
],
|
|
386
|
-
"avoidWhen": [
|
|
387
|
-
"Building authentication, onboarding, public, marketing, print, error, or intentionally focused full-screen experiences that require a different layout.",
|
|
388
|
-
"Another AppShell already exists in the page; applications must render exactly one and must never nest AppShells.",
|
|
389
|
-
"Building content inside an existing AppShell; render the page content rather than another shell."
|
|
390
|
-
],
|
|
391
|
-
"commonlyComposedWith": [
|
|
392
|
-
"component:ds-panel-nav",
|
|
393
|
-
"component:ds-bar-nav",
|
|
394
|
-
"component:ds-panel-tools",
|
|
395
|
-
"component:ds-swatch-picker"
|
|
396
|
-
],
|
|
397
|
-
"patterns": [
|
|
398
|
-
"pattern:application-shell"
|
|
399
|
-
],
|
|
400
|
-
"accessibility": [
|
|
401
|
-
"Keep primary destinations in PanelNav and secondary route sections in BarNav.",
|
|
402
|
-
"Ensure the default content region contains the page's single main landmark.",
|
|
403
|
-
"Keep PanelNav, BarNav, and PanelTools chrome available in the shell's supported desktop and tablet compositions.",
|
|
404
|
-
"Do not override browser keyboard chords when enabling shell shortcuts.",
|
|
405
|
-
"Require Search and Help as the minimum PanelTools actions and provide accessible labels for every tool.",
|
|
406
|
-
"Preserve focus and accessible names across navigation, collapse, overflow, and responsive presentation changes."
|
|
407
|
-
],
|
|
408
|
-
"states": [
|
|
409
|
-
"Render exactly one AppShell as the workspace root and never nest it.",
|
|
410
|
-
"PanelNav, BarNav, and PanelTools are required shell regions; PanelTools contains at least Search and Help even when no additional product tools apply.",
|
|
411
|
-
"The application router owns the current route, authorization filtering, Dashboard or Settings context, destination collections, section collections, and localized content labels.",
|
|
412
|
-
"AppShell propagates navStyle and coordinates layout, gradient alignment, transitions, metrics, shortcuts, and responsive composition.",
|
|
413
|
-
"Set gradientPreset to the single resolved global chrome preference: neutral by default, none for solid chrome, or cool, neutral, warm, and fresh for token-based washes.",
|
|
414
|
-
"The application owns gradient preference persistence, cross-tab synchronization, and server or account precedence; AppShell owns rendering the resolved preset across authenticated routes.",
|
|
415
|
-
"Dashboard represents day-to-day operational work while Settings represents administrative and configuration work; route state selects the context.",
|
|
416
|
-
"Update PanelNav groups, BarNav tabs and heading, navStyle, basePath, and currentUrl atomically from one resolved route state.",
|
|
417
|
-
"BarNav remains present: it shows route-section tabs when available and the active PanelNav destination label as heading otherwise.",
|
|
418
|
-
"The application filters unauthorized destinations, sections, and tools before passing them into shell components."
|
|
419
|
-
],
|
|
420
|
-
"responsiveBehavior": [
|
|
421
|
-
"AppShell owns the fixed system breakpoints and resolves desktop at 1200px and wider, tablet from 768px through 1199px, and mobile below 768px.",
|
|
422
|
-
"On desktop, PanelNav defaults expanded, permits user collapse or expansion, and respects the locally persisted desktop preference.",
|
|
423
|
-
"On tablet, AppShell keeps PanelNav permanently collapsed and prevents user expansion without overwriting the desktop preference.",
|
|
424
|
-
"On mobile, AppShell remains the page root but replaces PanelNav and desktop navigation composition with a future dedicated mobile navigation design.",
|
|
425
|
-
"Keep PanelNav width, BarNav height, PanelTools chrome, and main-content origin stable except during intentional responsive or collapse transitions.",
|
|
426
|
-
"The current runtime does not yet implement the complete desktop, tablet, and mobile composition contract; consuming applications must enforce missing breakpoint behavior until AppShell provides it."
|
|
427
|
-
],
|
|
428
|
-
"frameworkCaveats": {
|
|
429
|
-
"customElements": [
|
|
430
|
-
"Assign complex navigation and tool collections as JavaScript properties on the slotted components.",
|
|
431
|
-
"Stamp route-derived nav-style before components connect when deterministic first paint is required."
|
|
432
|
-
],
|
|
433
|
-
"react": [
|
|
434
|
-
"Use generated wrappers and preserve native slot names for PanelNav, BarNav, PanelTools, and main content.",
|
|
435
|
-
"Resolve all shell inputs from one router state before rendering the composition."
|
|
436
|
-
],
|
|
437
|
-
"angular": [
|
|
438
|
-
"Use generated standalone adapters and preserve slot attributes in templates.",
|
|
439
|
-
"Bind complex inputs as properties and update navigation inputs atomically from one resolved router state.",
|
|
440
|
-
"Bind both nav-style attributes and properties when deterministic first paint is required."
|
|
441
|
-
]
|
|
442
|
-
},
|
|
443
|
-
"references": [
|
|
444
|
-
{
|
|
445
|
-
"label": "Component guide",
|
|
446
|
-
"path": "src/wc/components/AppShell/AppShell.mdx"
|
|
447
|
-
},
|
|
448
|
-
{
|
|
449
|
-
"label": "Executable Storybook composition",
|
|
450
|
-
"path": "src/wc/components/AppShell/AppShell.stories.ts"
|
|
451
|
-
},
|
|
452
|
-
{
|
|
453
|
-
"label": "Framework integration",
|
|
454
|
-
"path": "docs/framework-integration.md"
|
|
455
|
-
},
|
|
456
|
-
{
|
|
457
|
-
"label": "Application shell contract",
|
|
458
|
-
"path": "agent/patterns/application-shell/pattern.agent.json"
|
|
459
|
-
}
|
|
460
|
-
]
|
|
461
|
-
},
|
|
462
|
-
"props": {
|
|
463
|
-
"gradientPreset": {
|
|
464
|
-
"type": "ShellGradientPreset",
|
|
465
|
-
"required": false
|
|
466
|
-
},
|
|
467
|
-
"navStyle": {
|
|
468
|
-
"type": "NavChromeStyle",
|
|
469
|
-
"required": false
|
|
470
|
-
},
|
|
471
|
-
"shortcutsEnabled": {
|
|
472
|
-
"type": "boolean",
|
|
473
|
-
"required": false
|
|
474
|
-
}
|
|
475
|
-
},
|
|
476
|
-
"events": [],
|
|
477
|
-
"slots": [],
|
|
478
|
-
"exports": {
|
|
479
|
-
"customElement": "ds-app-shell",
|
|
480
|
-
"react": "DsAppShell",
|
|
481
|
-
"angular": "DsAppShell"
|
|
482
|
-
}
|
|
483
|
-
},
|
|
484
|
-
"dependencies": [
|
|
485
|
-
"@ds-mo/ui",
|
|
486
|
-
"@ds-mo/tokens"
|
|
487
|
-
],
|
|
488
|
-
"registryDependencies": []
|
|
489
|
-
},
|
|
490
366
|
{
|
|
491
367
|
"name": "attachment-list",
|
|
492
368
|
"title": "AttachmentList",
|
|
@@ -690,7 +566,7 @@
|
|
|
690
566
|
"Badge keeps one brand treatment; semantic severity belongs to another component or adjacent content.",
|
|
691
567
|
"Use the ring only when Badge overlaps an icon or other content. Disable it in a reserved safe-area slot.",
|
|
692
568
|
"When enabled, the ring matches the immediate backing surface for both variants. Use a direct ring override only for a component-local fill that no surface preset represents.",
|
|
693
|
-
"Enabled shell gradient rings align automatically inside active
|
|
569
|
+
"Enabled shell gradient rings align automatically inside active ShellApp gradient chrome and may be explicitly enabled or disabled when composition requires it."
|
|
694
570
|
],
|
|
695
571
|
"responsiveBehavior": [
|
|
696
572
|
"The owning control or layout positions Badge and decides whether notification indicators remain visible, condense, or move at responsive breakpoints.",
|
|
@@ -767,7 +643,7 @@
|
|
|
767
643
|
{
|
|
768
644
|
"name": "bar-nav",
|
|
769
645
|
"title": "BarNav",
|
|
770
|
-
"description": "Required secondary route navigation within
|
|
646
|
+
"description": "Required secondary route navigation within ShellApp, showing peer sections of the active PanelNav destination or its destination label when no section tabs apply.",
|
|
771
647
|
"type": "registry:ui",
|
|
772
648
|
"meta": {
|
|
773
649
|
"library": "@ds-mo/ui",
|
|
@@ -778,9 +654,9 @@
|
|
|
778
654
|
"intent": {
|
|
779
655
|
"audience": "specialized",
|
|
780
656
|
"status": "stable",
|
|
781
|
-
"summary": "Required secondary route navigation within
|
|
657
|
+
"summary": "Required secondary route navigation within ShellApp, showing peer sections of the active PanelNav destination or its destination label when no section tabs apply.",
|
|
782
658
|
"useWhen": [
|
|
783
|
-
"Rendering the required secondary navigation region inside
|
|
659
|
+
"Rendering the required secondary navigation region inside ShellApp.",
|
|
784
660
|
"The active primary destination has peer route sections that users can navigate between.",
|
|
785
661
|
"The active primary destination has no route sections or is showing a detail route and its destination label must preserve the BarNav region."
|
|
786
662
|
],
|
|
@@ -789,7 +665,7 @@
|
|
|
789
665
|
"A third navigation level is needed; BarNav is never tertiary navigation.",
|
|
790
666
|
"The choices switch local content without navigating routes; use TabGroup instead.",
|
|
791
667
|
"Document-style tabs need reordering, pinning, closing, or user customization.",
|
|
792
|
-
"BarNav would be mounted outside the application's single
|
|
668
|
+
"BarNav would be mounted outside the application's single ShellApp."
|
|
793
669
|
],
|
|
794
670
|
"alternatives": [
|
|
795
671
|
{
|
|
@@ -809,7 +685,7 @@
|
|
|
809
685
|
}
|
|
810
686
|
],
|
|
811
687
|
"commonlyComposedWith": [
|
|
812
|
-
"component:ds-app
|
|
688
|
+
"component:ds-shell-app",
|
|
813
689
|
"component:ds-panel-nav",
|
|
814
690
|
"component:ds-panel-tools"
|
|
815
691
|
],
|
|
@@ -838,7 +714,7 @@
|
|
|
838
714
|
"Keep the BarNav region present so shell height and main-content origin remain stable across routes.",
|
|
839
715
|
"Allow the built-in overflow behavior to move trailing sections into Menu when the available width is insufficient.",
|
|
840
716
|
"The active section does not need to remain visible in the tab row when it moves into overflow because page content supplies the page title.",
|
|
841
|
-
"Do not infer mobile navigation behavior from desktop BarNav; future
|
|
717
|
+
"Do not infer mobile navigation behavior from desktop BarNav; future ShellApp mobile composition may use a different navigation design."
|
|
842
718
|
],
|
|
843
719
|
"frameworkCaveats": {
|
|
844
720
|
"customElements": [
|
|
@@ -926,6 +802,196 @@
|
|
|
926
802
|
"text"
|
|
927
803
|
]
|
|
928
804
|
},
|
|
805
|
+
{
|
|
806
|
+
"name": "bar-title",
|
|
807
|
+
"title": "BarTitle",
|
|
808
|
+
"description": "Page-level title chrome with default and create/edit editor modes, optional route navigation, supporting description, inline active-section menu, one primary action, grouped overflow actions, and explicit expanded, compact, or constrained variants.",
|
|
809
|
+
"type": "registry:ui",
|
|
810
|
+
"meta": {
|
|
811
|
+
"library": "@ds-mo/ui",
|
|
812
|
+
"distribution": "npm",
|
|
813
|
+
"storybook": "https://zainadeel.github.io/compomo/?path=/story/bar-title",
|
|
814
|
+
"source": "src/wc/components/BarTitle/BarTitle.tsx",
|
|
815
|
+
"intentStatus": "complete",
|
|
816
|
+
"intent": {
|
|
817
|
+
"audience": "general",
|
|
818
|
+
"status": "stable",
|
|
819
|
+
"summary": "Page-level title chrome with default and create/edit editor modes, optional route navigation, supporting description, inline active-section menu, one primary action, grouped overflow actions, and explicit expanded, compact, or constrained variants.",
|
|
820
|
+
"useWhen": [
|
|
821
|
+
"A top-level page needs one h1 above its content.",
|
|
822
|
+
"A list or detail page has multiple route-level sections that belong in the inline active-section menu.",
|
|
823
|
+
"A detail page needs a page-level Back action, or a create/edit page needs editor-mode Exit and Save chrome.",
|
|
824
|
+
"A page needs one primary action plus optional secondary or destructive overflow commands."
|
|
825
|
+
],
|
|
826
|
+
"avoidWhen": [
|
|
827
|
+
"The title belongs to a PanelTools drawer or fullscreen pane; use PanelToolHeader through PanelTools instead.",
|
|
828
|
+
"The choices are primary application destinations or BarNav destinations rather than sections within the current page.",
|
|
829
|
+
"The heading belongs to a card, modal, or other bounded region rather than the page.",
|
|
830
|
+
"Local panels inside page content should remain directly selectable; use TabGroup instead.",
|
|
831
|
+
"Automatic sticky or responsive page orchestration is required; compose BarTitle in ShellPage rather than implementing it in the header."
|
|
832
|
+
],
|
|
833
|
+
"alternatives": [
|
|
834
|
+
{
|
|
835
|
+
"when": "The header belongs to a PanelTools product view.",
|
|
836
|
+
"component": "component:ds-panel-tool-header",
|
|
837
|
+
"reason": "PanelToolHeader owns pane-level Back and actions without creating page chrome."
|
|
838
|
+
},
|
|
839
|
+
{
|
|
840
|
+
"when": "A small set of inner-page panels should remain visible as tabs.",
|
|
841
|
+
"component": "component:ds-tab-group",
|
|
842
|
+
"reason": "TabGroup is the local content-view control rather than route-level page title chrome."
|
|
843
|
+
}
|
|
844
|
+
],
|
|
845
|
+
"commonlyComposedWith": [
|
|
846
|
+
"component:ds-shell-page",
|
|
847
|
+
"component:ds-button-filled",
|
|
848
|
+
"component:ds-button-unfilled",
|
|
849
|
+
"component:ds-menu",
|
|
850
|
+
"component:ds-text"
|
|
851
|
+
],
|
|
852
|
+
"patterns": [
|
|
853
|
+
"pattern:shell-page"
|
|
854
|
+
],
|
|
855
|
+
"accessibility": [
|
|
856
|
+
"Provide one concise heading; BarTitle renders exactly one h1 and changes only its visual recipe between variants.",
|
|
857
|
+
"Give Back a destination-specific accessible name such as Back to Drivers, provide the concise parent label such as Drivers for the expanded breadcrumb, and handle dsBack in the route owner.",
|
|
858
|
+
"Keep value synchronized with the current child route; dsSectionChange returns the selected section id.",
|
|
859
|
+
"Section and overflow triggers expose menu relationships and restore focus after selection or dismissal.",
|
|
860
|
+
"Use one filled primary action in the page decision area and mark destructive overflow actions explicitly."
|
|
861
|
+
],
|
|
862
|
+
"states": [
|
|
863
|
+
"Omitting Back, sections, primaryAction, and actions produces the top-level title-only header.",
|
|
864
|
+
"Two or more selectable sections add the inline section trigger; one section does not render a redundant menu.",
|
|
865
|
+
"Dividers in sections or actions create separate Menu groups without becoming selectable rows.",
|
|
866
|
+
"expanded renders the larger heading, optional description, inset divider, and an xs icon-label Back breadcrumb in the top inset. The title and right-side actions share one top alignment whether Back is present, while the description remains in the left title column; compact renders 48px chrome with inline Back; constrained uses compact chrome and moves an auto-collapse primary action into overflow.",
|
|
867
|
+
"primaryAction collapse defaults to auto. Use never for exceptional default-mode actions whose hierarchy must remain visible in constrained layouts.",
|
|
868
|
+
"editor mode renders bold-brand chrome without the bottom boundary, treats the leading dsBack action as Exit, and keeps the primary Save action visible. Expanded uses Cross plus the Exit label and a label Save button; compact and constrained use Cross and Check icon buttons."
|
|
869
|
+
],
|
|
870
|
+
"responsiveBehavior": [
|
|
871
|
+
"BarTitle does not observe viewport, shell, scroll, or container state. Its owner selects an explicit variant.",
|
|
872
|
+
"ShellPage is the standard owner for automatic expanded, compact, and constrained selection.",
|
|
873
|
+
"Compact titles use the shared md control inset so top-level headings align with BarNav and inline Back geometry aligns with PanelToolHeader. Long headings and section labels truncate independently while Back and action controls retain complete hit targets and accessible names.",
|
|
874
|
+
"A never-collapse default-mode primary action remains visible in constrained mode; the title and section label yield space first.",
|
|
875
|
+
"Editor mode keeps Exit and Save available in every presentation. Supply a concise Exit accessible name through backAriaLabel, use backLabel for the expanded Exit label, and provide primaryAction so dsAction can identify Save."
|
|
876
|
+
],
|
|
877
|
+
"frameworkCaveats": {
|
|
878
|
+
"customElements": [
|
|
879
|
+
"Assign sections, primaryAction, and actions as JavaScript properties and replace array or object identities when controlled state changes.",
|
|
880
|
+
"Handle dsBack in the router owner, update value after dsSectionChange, and execute product commands from dsAction."
|
|
881
|
+
],
|
|
882
|
+
"react": [
|
|
883
|
+
"Pass arrays and objects directly to DsBarTitle and keep value controlled from route state.",
|
|
884
|
+
"Place DsBarTitle in DsShellPage with slot=header when automatic page behavior is required."
|
|
885
|
+
],
|
|
886
|
+
"angular": [
|
|
887
|
+
"Bind complex values on the standalone DsBarTitle adapter and handle the three intent events in the route shell.",
|
|
888
|
+
"Place ds-bar-title in ds-shell-page with slot=header; do not render router-outlet inside BarTitle."
|
|
889
|
+
]
|
|
890
|
+
},
|
|
891
|
+
"references": [
|
|
892
|
+
{
|
|
893
|
+
"label": "Explicit variant examples",
|
|
894
|
+
"path": "src/wc/components/BarTitle/BarTitle.stories.ts"
|
|
895
|
+
},
|
|
896
|
+
{
|
|
897
|
+
"label": "ShellPage composition and responsive examples",
|
|
898
|
+
"path": "src/wc/components/ShellPage/ShellPage.stories.ts"
|
|
899
|
+
},
|
|
900
|
+
{
|
|
901
|
+
"label": "Cross-browser shell-page and header coverage",
|
|
902
|
+
"path": "tests/e2e/bar-title.spec.ts"
|
|
903
|
+
}
|
|
904
|
+
]
|
|
905
|
+
},
|
|
906
|
+
"props": {
|
|
907
|
+
"actions": {
|
|
908
|
+
"type": "BarTitleActionItem[]",
|
|
909
|
+
"required": false
|
|
910
|
+
},
|
|
911
|
+
"actionsAriaLabel": {
|
|
912
|
+
"type": "string",
|
|
913
|
+
"required": false
|
|
914
|
+
},
|
|
915
|
+
"backAriaLabel": {
|
|
916
|
+
"type": "string",
|
|
917
|
+
"required": false
|
|
918
|
+
},
|
|
919
|
+
"backLabel": {
|
|
920
|
+
"type": "string",
|
|
921
|
+
"required": false
|
|
922
|
+
},
|
|
923
|
+
"description": {
|
|
924
|
+
"type": "string",
|
|
925
|
+
"required": false
|
|
926
|
+
},
|
|
927
|
+
"heading": {
|
|
928
|
+
"type": "string",
|
|
929
|
+
"required": true
|
|
930
|
+
},
|
|
931
|
+
"mode": {
|
|
932
|
+
"type": "BarTitleMode",
|
|
933
|
+
"required": false
|
|
934
|
+
},
|
|
935
|
+
"primaryAction": {
|
|
936
|
+
"type": "BarTitlePrimaryAction | null",
|
|
937
|
+
"required": false
|
|
938
|
+
},
|
|
939
|
+
"sections": {
|
|
940
|
+
"type": "BarTitleSectionItem[]",
|
|
941
|
+
"required": false
|
|
942
|
+
},
|
|
943
|
+
"sectionsAriaLabel": {
|
|
944
|
+
"type": "string",
|
|
945
|
+
"required": false
|
|
946
|
+
},
|
|
947
|
+
"showBack": {
|
|
948
|
+
"type": "boolean",
|
|
949
|
+
"required": false
|
|
950
|
+
},
|
|
951
|
+
"value": {
|
|
952
|
+
"type": "string",
|
|
953
|
+
"required": false
|
|
954
|
+
},
|
|
955
|
+
"variant": {
|
|
956
|
+
"type": "BarTitleVariant",
|
|
957
|
+
"required": false
|
|
958
|
+
}
|
|
959
|
+
},
|
|
960
|
+
"events": [
|
|
961
|
+
{
|
|
962
|
+
"name": "dsAction",
|
|
963
|
+
"detail": "string"
|
|
964
|
+
},
|
|
965
|
+
{
|
|
966
|
+
"name": "dsBack",
|
|
967
|
+
"detail": "MouseEvent"
|
|
968
|
+
},
|
|
969
|
+
{
|
|
970
|
+
"name": "dsSectionChange",
|
|
971
|
+
"detail": "string"
|
|
972
|
+
}
|
|
973
|
+
],
|
|
974
|
+
"slots": [],
|
|
975
|
+
"exports": {
|
|
976
|
+
"customElement": "ds-bar-title",
|
|
977
|
+
"react": "DsBarTitle",
|
|
978
|
+
"angular": "DsBarTitle"
|
|
979
|
+
}
|
|
980
|
+
},
|
|
981
|
+
"dependencies": [
|
|
982
|
+
"@ds-mo/ui",
|
|
983
|
+
"@ds-mo/tokens",
|
|
984
|
+
"@ds-mo/icons"
|
|
985
|
+
],
|
|
986
|
+
"registryDependencies": [
|
|
987
|
+
"button-filled",
|
|
988
|
+
"button-unfilled",
|
|
989
|
+
"icon",
|
|
990
|
+
"menu",
|
|
991
|
+
"text",
|
|
992
|
+
"tooltip"
|
|
993
|
+
]
|
|
994
|
+
},
|
|
929
995
|
{
|
|
930
996
|
"name": "button-filled",
|
|
931
997
|
"title": "ButtonFilled",
|
|
@@ -2467,7 +2533,7 @@
|
|
|
2467
2533
|
"component:ds-button-unfilled"
|
|
2468
2534
|
],
|
|
2469
2535
|
"accessibility": [
|
|
2470
|
-
"The copy action has
|
|
2536
|
+
"The copy action has matching accessible-name and visible-tooltip status wording, and the code remains selectable text.",
|
|
2471
2537
|
"Language and filename labels supplement rather than replace the code content."
|
|
2472
2538
|
],
|
|
2473
2539
|
"responsiveBehavior": [
|
|
@@ -2508,7 +2574,8 @@
|
|
|
2508
2574
|
],
|
|
2509
2575
|
"registryDependencies": [
|
|
2510
2576
|
"button-unfilled",
|
|
2511
|
-
"text"
|
|
2577
|
+
"text",
|
|
2578
|
+
"tooltip"
|
|
2512
2579
|
]
|
|
2513
2580
|
},
|
|
2514
2581
|
{
|
|
@@ -4017,16 +4084,16 @@
|
|
|
4017
4084
|
"pattern:conversation"
|
|
4018
4085
|
],
|
|
4019
4086
|
"accessibility": [
|
|
4020
|
-
"Always provide a localized textarea label and submit or stop action names.",
|
|
4087
|
+
"Always provide a localized textarea label and submit or stop action names; the built-in icon action exposes the same name in its tooltip.",
|
|
4021
4088
|
"Shift plus Enter inserts a newline while Enter submits non-empty content.",
|
|
4022
4089
|
"Streaming and error states remain perceivable without relying on icon shape alone."
|
|
4023
4090
|
],
|
|
4024
4091
|
"states": [
|
|
4025
4092
|
"The owner controls draft value and transport state; the composer emits intent without performing transport.",
|
|
4026
|
-
"Use the tools slot for leading actions such as add and the actions slot for trailing actions such as dictation; the built-in submit or stop action remains last with an 8px gap from the preceding action. These icon buttons use the standard non-rounded control radius.",
|
|
4093
|
+
"Use the tools slot for leading actions such as add and the actions slot for trailing actions such as dictation; the built-in submit or stop action remains last with an 8px gap from the preceding action. These icon buttons use the standard non-rounded control radius, and the application supplies tooltips for slotted icon actions.",
|
|
4027
4094
|
"The composer surface uses the 10px --dimension-radius-125 token.",
|
|
4028
4095
|
"Mouse or keyboard focus on the textarea gives the complete composer surface the same bold-brand inset stroke width and color as an active Input; the native textarea never draws a separate outline.",
|
|
4029
|
-
"The submit action
|
|
4096
|
+
"The empty or otherwise inactive submit action is a disabled bordered ButtonUnfilled. Ready submit actions use submitIntent, while the streaming stop action remains a bold-brand ButtonFilled."
|
|
4030
4097
|
],
|
|
4031
4098
|
"responsiveBehavior": [
|
|
4032
4099
|
"The textarea begins at two body-medium lines, grows one line at a time through six lines, and then scrolls internally."
|
|
@@ -4094,7 +4161,9 @@
|
|
|
4094
4161
|
"@ds-mo/tokens"
|
|
4095
4162
|
],
|
|
4096
4163
|
"registryDependencies": [
|
|
4097
|
-
"button-filled"
|
|
4164
|
+
"button-filled",
|
|
4165
|
+
"button-unfilled",
|
|
4166
|
+
"tooltip"
|
|
4098
4167
|
]
|
|
4099
4168
|
},
|
|
4100
4169
|
{
|
|
@@ -4128,7 +4197,7 @@
|
|
|
4128
4197
|
"accessibility": [
|
|
4129
4198
|
"Give each transcript a concise localized label.",
|
|
4130
4199
|
"New content is exposed through log semantics without stealing focus.",
|
|
4131
|
-
"The scroll-to-latest control remains keyboard accessible when follow behavior is released."
|
|
4200
|
+
"The scroll-to-latest control remains keyboard accessible when follow behavior is released and exposes its action name in a tooltip."
|
|
4132
4201
|
],
|
|
4133
4202
|
"states": [
|
|
4134
4203
|
"Selection and transcript interaction release automatic following.",
|
|
@@ -4182,7 +4251,8 @@
|
|
|
4182
4251
|
"@ds-mo/tokens"
|
|
4183
4252
|
],
|
|
4184
4253
|
"registryDependencies": [
|
|
4185
|
-
"button-unfilled"
|
|
4254
|
+
"button-unfilled",
|
|
4255
|
+
"tooltip"
|
|
4186
4256
|
]
|
|
4187
4257
|
},
|
|
4188
4258
|
{
|
|
@@ -4238,7 +4308,7 @@
|
|
|
4238
4308
|
"accessibility": [
|
|
4239
4309
|
"Provide a concise visible heading; the component uses it as the dialog's accessible name.",
|
|
4240
4310
|
"Give the primary explanatory copy a stable id and pass it through aria-describedby so assistive technology receives the decision context.",
|
|
4241
|
-
"Opening the native modal dialog moves focus to the header Close action, traps Tab navigation inside the top layer, and makes outside content inert.",
|
|
4311
|
+
"Opening the native modal dialog moves focus to the header Close action, whose visible tooltip matches its accessible name, traps Tab navigation inside the top layer, and makes outside content inert.",
|
|
4242
4312
|
"Close, Escape, and backdrop activation emit dsClose with close-button, escape, or backdrop reason before beginning dismissal; use the component only when every dismissal path is safe.",
|
|
4243
4313
|
"After exit motion completes, the native dialog leaves the top layer, focus returns to the previously focused element, and dsAfterClose emits.",
|
|
4244
4314
|
"Use visible label-only footer buttons. Keep at most two actions: one bold filled primary action followed by one bordered unfilled action, or two bordered unfilled actions.",
|
|
@@ -4335,7 +4405,8 @@
|
|
|
4335
4405
|
],
|
|
4336
4406
|
"registryDependencies": [
|
|
4337
4407
|
"button-unfilled",
|
|
4338
|
-
"text"
|
|
4408
|
+
"text",
|
|
4409
|
+
"tooltip"
|
|
4339
4410
|
]
|
|
4340
4411
|
},
|
|
4341
4412
|
{
|
|
@@ -4383,7 +4454,7 @@
|
|
|
4383
4454
|
}
|
|
4384
4455
|
],
|
|
4385
4456
|
"commonlyComposedWith": [
|
|
4386
|
-
"component:ds-app
|
|
4457
|
+
"component:ds-shell-app",
|
|
4387
4458
|
"component:ds-bar-nav",
|
|
4388
4459
|
"component:ds-panel-tools",
|
|
4389
4460
|
"component:ds-menu"
|
|
@@ -4414,7 +4485,7 @@
|
|
|
4414
4485
|
"At 1200px and wider, default to expanded, allow the user to expand or collapse, and restore the locally persisted desktop preference when available.",
|
|
4415
4486
|
"From 768px through 1199px, present PanelNav permanently collapsed and do not allow user expansion.",
|
|
4416
4487
|
"Below 768px, the consuming application replaces PanelNav with a dedicated mobile navigation component; PanelNav does not own mobile navigation.",
|
|
4417
|
-
"
|
|
4488
|
+
"ShellApp permanently owns responsive composition: it determines shell mode, enforces tablet collapse, and replaces PanelNav with future mobile navigation below 768px.",
|
|
4418
4489
|
"When the viewport is below breakpoint, PanelNav locks collapsed, disables its header toggle affordance, and preserves the persisted desktop collapse preference.",
|
|
4419
4490
|
"Collapsed presentation must preserve destination ordering, active state, notification status, and accessible names."
|
|
4420
4491
|
],
|
|
@@ -4425,12 +4496,12 @@
|
|
|
4425
4496
|
],
|
|
4426
4497
|
"react": [
|
|
4427
4498
|
"Pass groups as an array through the generated React wrapper and synchronize currentUrl with the host router.",
|
|
4428
|
-
"
|
|
4499
|
+
"ShellApp owns mobile replacement; PanelNav enforces its configured breakpoint expansion lock."
|
|
4429
4500
|
],
|
|
4430
4501
|
"angular": [
|
|
4431
4502
|
"Import DsPanelNav from @ds-mo/ui/angular/ds-panel-nav and bind groups as a property.",
|
|
4432
4503
|
"Bind both the nav-style attribute and navStyle property when first-paint route styling must be deterministic.",
|
|
4433
|
-
"
|
|
4504
|
+
"ShellApp owns mobile replacement; PanelNav enforces its configured breakpoint expansion lock."
|
|
4434
4505
|
]
|
|
4435
4506
|
},
|
|
4436
4507
|
"references": [
|
|
@@ -4616,7 +4687,7 @@
|
|
|
4616
4687
|
{
|
|
4617
4688
|
"when": "The choices are secondary application routes.",
|
|
4618
4689
|
"component": "component:ds-bar-nav",
|
|
4619
|
-
"reason": "BarNav owns route sections inside
|
|
4690
|
+
"reason": "BarNav owns route sections inside ShellApp."
|
|
4620
4691
|
},
|
|
4621
4692
|
{
|
|
4622
4693
|
"when": "The choices are transient actions or options.",
|
|
@@ -4731,7 +4802,7 @@
|
|
|
4731
4802
|
"component:ds-button-unfilled"
|
|
4732
4803
|
],
|
|
4733
4804
|
"accessibility": [
|
|
4734
|
-
"Leading navigation or dismiss actions and trailing icon actions require concise localized names.",
|
|
4805
|
+
"Leading navigation or dismiss actions and trailing icon actions require concise localized names; the header reuses each name as the action tooltip.",
|
|
4735
4806
|
"The visible heading names the active panel or subview."
|
|
4736
4807
|
],
|
|
4737
4808
|
"states": [
|
|
@@ -4821,7 +4892,8 @@
|
|
|
4821
4892
|
],
|
|
4822
4893
|
"registryDependencies": [
|
|
4823
4894
|
"button-unfilled",
|
|
4824
|
-
"text"
|
|
4895
|
+
"text",
|
|
4896
|
+
"tooltip"
|
|
4825
4897
|
]
|
|
4826
4898
|
},
|
|
4827
4899
|
{
|
|
@@ -4855,13 +4927,13 @@
|
|
|
4855
4927
|
],
|
|
4856
4928
|
"accessibility": [
|
|
4857
4929
|
"Provide an aria-label that names the searched domain, such as Search agent chats or Search messages.",
|
|
4858
|
-
"The standard search clear action restores focus and emits both the empty query and dsClear.",
|
|
4859
|
-
"When showFilter is enabled, provide stable filterTriggerId and filterControls values, synchronize filterExpanded with the controlled menu, and restore focus after selection."
|
|
4930
|
+
"The standard search clear action restores focus, exposes its localized name in a tooltip, and emits both the empty query and dsClear.",
|
|
4931
|
+
"When showFilter is enabled, provide stable filterTriggerId and filterControls values, synchronize filterExpanded with the controlled menu, and restore focus after selection; filterAriaLabel also labels its tooltip."
|
|
4860
4932
|
],
|
|
4861
4933
|
"states": [
|
|
4862
4934
|
"The row is always 48px high with 8px outer padding and a complete md search recipe: 32px control, text-body-medium at 14px/20px, and a 20px md search icon.",
|
|
4863
4935
|
"The search icon stays foreground-secondary at rest, hover, focus, active, and while the query is filled.",
|
|
4864
|
-
"The row and control surface remain transparent so the
|
|
4936
|
+
"The row and control surface remain transparent so the ShellApp chrome wash is visible behind them.",
|
|
4865
4937
|
"The row divider remains the same tertiary 1px boundary while the input is focused because it belongs to the 48px container rather than the input control.",
|
|
4866
4938
|
"With filtering enabled, the md search control, decorative vertical divider, and borderless md Filter action are separated by 8px; filterActive promotes only the trigger foreground without adding a selected fill."
|
|
4867
4939
|
],
|
|
@@ -4965,13 +5037,14 @@
|
|
|
4965
5037
|
"button-unfilled",
|
|
4966
5038
|
"divider",
|
|
4967
5039
|
"icon",
|
|
4968
|
-
"text"
|
|
5040
|
+
"text",
|
|
5041
|
+
"tooltip"
|
|
4969
5042
|
]
|
|
4970
5043
|
},
|
|
4971
5044
|
{
|
|
4972
5045
|
"name": "panel-tools",
|
|
4973
5046
|
"title": "PanelTools",
|
|
4974
|
-
"description": "Required
|
|
5047
|
+
"description": "Required ShellApp utility rail and persistent drawer host for the fixed set of global Search, Agents, Messages, Stacks, Activity, and Help products.",
|
|
4975
5048
|
"type": "registry:ui",
|
|
4976
5049
|
"meta": {
|
|
4977
5050
|
"library": "@ds-mo/ui",
|
|
@@ -4982,9 +5055,9 @@
|
|
|
4982
5055
|
"intent": {
|
|
4983
5056
|
"audience": "specialized",
|
|
4984
5057
|
"status": "stable",
|
|
4985
|
-
"summary": "Required
|
|
5058
|
+
"summary": "Required ShellApp utility rail and persistent drawer host for the fixed set of global Search, Agents, Messages, Stacks, Activity, and Help products.",
|
|
4986
5059
|
"useWhen": [
|
|
4987
|
-
"Composing the required global tools region inside the application's single
|
|
5060
|
+
"Composing the required global tools region inside the application's single ShellApp.",
|
|
4988
5061
|
"Users need to move between application-wide utilities without losing each tool's in-progress state.",
|
|
4989
5062
|
"Search, AI conversations, user messages, review stacks, notifications, or help content must remain available alongside route content."
|
|
4990
5063
|
],
|
|
@@ -4992,8 +5065,8 @@
|
|
|
4992
5065
|
"The action is specific to the current page or selected content rather than globally available across the application.",
|
|
4993
5066
|
"The item navigates to a primary or secondary route; use PanelNav or BarNav instead.",
|
|
4994
5067
|
"A consumer wants to add arbitrary tools, reorder fixed tools, or repurpose a semantic tool id.",
|
|
4995
|
-
"Building the mobile tools experience; future mobile
|
|
4996
|
-
"PanelTools would be mounted outside the application's single
|
|
5068
|
+
"Building the mobile tools experience; future mobile ShellApp composition uses a different bottom-bar and panel pattern.",
|
|
5069
|
+
"PanelTools would be mounted outside the application's single ShellApp."
|
|
4997
5070
|
],
|
|
4998
5071
|
"alternatives": [
|
|
4999
5072
|
{
|
|
@@ -5013,7 +5086,7 @@
|
|
|
5013
5086
|
}
|
|
5014
5087
|
],
|
|
5015
5088
|
"commonlyComposedWith": [
|
|
5016
|
-
"component:ds-app
|
|
5089
|
+
"component:ds-shell-app",
|
|
5017
5090
|
"component:ds-panel-nav",
|
|
5018
5091
|
"component:ds-bar-nav"
|
|
5019
5092
|
],
|
|
@@ -5041,7 +5114,7 @@
|
|
|
5041
5114
|
"Each tool supplies its current header title, base-versus-detail Back state, and right-side actions through the headers property. Base views omit Back; deeper views expose Back and update the same header in place.",
|
|
5042
5115
|
"Header Back and action events express intent only; the owning tool changes product navigation, menus, and data state. PanelTools keeps the final header action exactly 8px from the drawer edge.",
|
|
5043
5116
|
"Menus opened from a right-side header action use PANEL_TOOLS_HEADER_MENU_PLACEMENT: bottom/end choice-cell alignment and a 12px side offset, placing the popup 4px below the 48px header while aligning the final menu item edge with the trigger.",
|
|
5044
|
-
"Tool view roots stay transparent so
|
|
5117
|
+
"Tool view roots stay transparent so ShellApp's chrome wash remains visible; only explicitly designed child surfaces introduce a fill.",
|
|
5045
5118
|
"Tools with search compose ds-panel-tool-search immediately below the shared header. Its 48px row always contains the md search control and must not be reduced to sm or xs.",
|
|
5046
5119
|
"If an active optional tool becomes unavailable, PanelTools closes the drawer, clears activeTool, and emits its deselection.",
|
|
5047
5120
|
"Use isInactive only for a temporarily unavailable visible tool; omit tools the user is not authorized to access.",
|
|
@@ -5052,8 +5125,8 @@
|
|
|
5052
5125
|
],
|
|
5053
5126
|
"responsiveBehavior": [
|
|
5054
5127
|
"The open drawer reduces main-content width and uses --dimension-panel-width-xs (300px) on every supported desktop and tablet viewport.",
|
|
5055
|
-
"
|
|
5056
|
-
"Below 768px, do not reuse desktop PanelTools: future
|
|
5128
|
+
"ShellApp owns the fixed drawer-width variable; consumers must not hardcode alternate drawer widths.",
|
|
5129
|
+
"Below 768px, do not reuse desktop PanelTools: future ShellApp mobile composition uses a bottom bar for Search, Agents, Notifications, and Stacks, while Help moves into mobile primary navigation.",
|
|
5057
5130
|
"Keep named-slot content mounted while tools switch or the drawer closes so users can return to in-progress global work.",
|
|
5058
5131
|
"Conversation products may use fullscreenHeaderMode split for a 300px history rail beside a flexible detail pane, each with its own canonical header; the application owns that internal split layout.",
|
|
5059
5132
|
"Use fixed drawer widths for now; do not add user resizing or width persistence."
|
|
@@ -5062,10 +5135,10 @@
|
|
|
5062
5135
|
"customElements": [
|
|
5063
5136
|
"Assign items as a JavaScript property for structured data; items-json is the string fallback.",
|
|
5064
5137
|
"Assign headers as a JavaScript property and replace its object identity whenever an active tool changes title, depth, or actions.",
|
|
5065
|
-
"Keep PanelTools mounted at
|
|
5138
|
+
"Keep PanelTools mounted at ShellApp scope across route changes and provide each product through its matching named slot."
|
|
5066
5139
|
],
|
|
5067
5140
|
"react": [
|
|
5068
|
-
"Pass the fixed item collection through the generated React wrapper and keep named-slot product content mounted at
|
|
5141
|
+
"Pass the fixed item collection through the generated React wrapper and keep named-slot product content mounted at ShellApp scope.",
|
|
5069
5142
|
"Use storageKey only for same-browser last-tool continuity; do not persist the open drawer."
|
|
5070
5143
|
],
|
|
5071
5144
|
"angular": [
|
|
@@ -5591,7 +5664,8 @@
|
|
|
5591
5664
|
"empty-state",
|
|
5592
5665
|
"icon",
|
|
5593
5666
|
"loader",
|
|
5594
|
-
"text"
|
|
5667
|
+
"text",
|
|
5668
|
+
"tooltip"
|
|
5595
5669
|
]
|
|
5596
5670
|
},
|
|
5597
5671
|
{
|
|
@@ -5854,13 +5928,141 @@
|
|
|
5854
5928
|
"empty-state",
|
|
5855
5929
|
"icon",
|
|
5856
5930
|
"loader",
|
|
5857
|
-
"text"
|
|
5931
|
+
"text",
|
|
5932
|
+
"tooltip"
|
|
5858
5933
|
]
|
|
5859
5934
|
},
|
|
5935
|
+
{
|
|
5936
|
+
"name": "shell-app",
|
|
5937
|
+
"title": "ShellApp",
|
|
5938
|
+
"description": "The single required workspace root for standard authenticated application pages, coordinating primary and secondary navigation, tools chrome, responsive composition, content geometry, shared styling, and shell behavior.",
|
|
5939
|
+
"type": "registry:ui",
|
|
5940
|
+
"meta": {
|
|
5941
|
+
"library": "@ds-mo/ui",
|
|
5942
|
+
"distribution": "npm",
|
|
5943
|
+
"storybook": "https://zainadeel.github.io/compomo/?path=/story/shell-app",
|
|
5944
|
+
"source": "src/wc/components/ShellApp/ShellApp.tsx",
|
|
5945
|
+
"intentStatus": "complete",
|
|
5946
|
+
"intent": {
|
|
5947
|
+
"audience": "specialized",
|
|
5948
|
+
"status": "stable",
|
|
5949
|
+
"summary": "The single required workspace root for standard authenticated application pages, coordinating primary and secondary navigation, tools chrome, responsive composition, content geometry, shared styling, and shell behavior.",
|
|
5950
|
+
"useWhen": [
|
|
5951
|
+
"Building any standard authenticated product or workspace page with CompoMo.",
|
|
5952
|
+
"PanelNav, BarNav, PanelTools, page content, shared chrome, responsive behavior, and shell shortcuts must be composed as one application frame.",
|
|
5953
|
+
"Future application templates need the supported base-page composition boundary."
|
|
5954
|
+
],
|
|
5955
|
+
"avoidWhen": [
|
|
5956
|
+
"Building authentication, onboarding, public, marketing, print, error, or intentionally focused full-screen experiences that require a different layout.",
|
|
5957
|
+
"Another ShellApp already exists in the page; applications must render exactly one and must never nest ShellApps.",
|
|
5958
|
+
"Building content inside an existing ShellApp; render the page content rather than another shell."
|
|
5959
|
+
],
|
|
5960
|
+
"commonlyComposedWith": [
|
|
5961
|
+
"component:ds-panel-nav",
|
|
5962
|
+
"component:ds-bar-nav",
|
|
5963
|
+
"component:ds-panel-tools",
|
|
5964
|
+
"component:ds-shell-page",
|
|
5965
|
+
"component:ds-swatch-picker"
|
|
5966
|
+
],
|
|
5967
|
+
"patterns": [
|
|
5968
|
+
"pattern:application-shell",
|
|
5969
|
+
"pattern:shell-page"
|
|
5970
|
+
],
|
|
5971
|
+
"accessibility": [
|
|
5972
|
+
"Keep primary destinations in PanelNav and secondary route sections in BarNav.",
|
|
5973
|
+
"Ensure the default content region contains the page's single main landmark.",
|
|
5974
|
+
"Keep PanelNav, BarNav, and PanelTools chrome available in the shell's supported desktop and tablet compositions.",
|
|
5975
|
+
"Do not override browser keyboard chords when enabling shell shortcuts.",
|
|
5976
|
+
"Require Search and Help as the minimum PanelTools actions and provide accessible labels for every tool.",
|
|
5977
|
+
"Preserve focus and accessible names across navigation, collapse, overflow, and responsive presentation changes."
|
|
5978
|
+
],
|
|
5979
|
+
"states": [
|
|
5980
|
+
"Render exactly one ShellApp as the workspace root and never nest it.",
|
|
5981
|
+
"PanelNav, BarNav, and PanelTools are required shell regions; PanelTools contains at least Search and Help even when no additional product tools apply.",
|
|
5982
|
+
"The application router owns the current route, authorization filtering, Dashboard or Settings context, destination collections, section collections, and localized content labels.",
|
|
5983
|
+
"ShellApp propagates navStyle and coordinates layout, gradient alignment, transitions, metrics, shortcuts, and responsive composition.",
|
|
5984
|
+
"Set gradientPreset to the single resolved global chrome preference: neutral by default, none for solid chrome, or cool, neutral, warm, and fresh for token-based washes.",
|
|
5985
|
+
"The application owns gradient preference persistence, cross-tab synchronization, and server or account precedence; ShellApp owns rendering the resolved preset across authenticated routes.",
|
|
5986
|
+
"Dashboard represents day-to-day operational work while Settings represents administrative and configuration work; route state selects the context.",
|
|
5987
|
+
"Update PanelNav groups, BarNav tabs and heading, navStyle, basePath, and currentUrl atomically from one resolved route state.",
|
|
5988
|
+
"BarNav remains present: it shows route-section tabs when available and the active PanelNav destination label as heading otherwise.",
|
|
5989
|
+
"Render one ShellPage as the default-slot child for each standard routed page; ShellApp owns the content scroller while ShellPage owns page header stickiness and content inset.",
|
|
5990
|
+
"The application filters unauthorized destinations, sections, and tools before passing them into shell components."
|
|
5991
|
+
],
|
|
5992
|
+
"responsiveBehavior": [
|
|
5993
|
+
"ShellApp owns the fixed system breakpoints and resolves desktop at 1200px and wider, tablet from 768px through 1199px, and mobile below 768px.",
|
|
5994
|
+
"On desktop, PanelNav defaults expanded, permits user collapse or expansion, and respects the locally persisted desktop preference.",
|
|
5995
|
+
"On tablet, ShellApp keeps PanelNav permanently collapsed and prevents user expansion without overwriting the desktop preference.",
|
|
5996
|
+
"On mobile, ShellApp remains the page root but replaces PanelNav and desktop navigation composition with a future dedicated mobile navigation design.",
|
|
5997
|
+
"Keep PanelNav width, BarNav height, PanelTools chrome, and main-content origin stable except during intentional responsive or collapse transitions.",
|
|
5998
|
+
"The current runtime does not yet implement the complete desktop, tablet, and mobile composition contract; consuming applications must enforce missing breakpoint behavior until ShellApp provides it."
|
|
5999
|
+
],
|
|
6000
|
+
"frameworkCaveats": {
|
|
6001
|
+
"customElements": [
|
|
6002
|
+
"Assign complex navigation and tool collections as JavaScript properties on the slotted components.",
|
|
6003
|
+
"Stamp route-derived nav-style before components connect when deterministic first paint is required."
|
|
6004
|
+
],
|
|
6005
|
+
"react": [
|
|
6006
|
+
"Use generated wrappers and preserve native slot names for PanelNav, BarNav, PanelTools, and main content.",
|
|
6007
|
+
"Resolve all shell inputs from one router state before rendering the composition."
|
|
6008
|
+
],
|
|
6009
|
+
"angular": [
|
|
6010
|
+
"Use generated standalone adapters and preserve slot attributes in templates.",
|
|
6011
|
+
"Bind complex inputs as properties and update navigation inputs atomically from one resolved router state.",
|
|
6012
|
+
"Bind both nav-style attributes and properties when deterministic first paint is required."
|
|
6013
|
+
]
|
|
6014
|
+
},
|
|
6015
|
+
"references": [
|
|
6016
|
+
{
|
|
6017
|
+
"label": "Component guide",
|
|
6018
|
+
"path": "src/wc/components/ShellApp/ShellApp.mdx"
|
|
6019
|
+
},
|
|
6020
|
+
{
|
|
6021
|
+
"label": "Executable Storybook composition",
|
|
6022
|
+
"path": "src/wc/components/ShellApp/ShellApp.stories.ts"
|
|
6023
|
+
},
|
|
6024
|
+
{
|
|
6025
|
+
"label": "Framework integration",
|
|
6026
|
+
"path": "docs/framework-integration.md"
|
|
6027
|
+
},
|
|
6028
|
+
{
|
|
6029
|
+
"label": "Application shell contract",
|
|
6030
|
+
"path": "agent/patterns/application-shell/pattern.agent.json"
|
|
6031
|
+
}
|
|
6032
|
+
]
|
|
6033
|
+
},
|
|
6034
|
+
"props": {
|
|
6035
|
+
"gradientPreset": {
|
|
6036
|
+
"type": "ShellGradientPreset",
|
|
6037
|
+
"required": false
|
|
6038
|
+
},
|
|
6039
|
+
"navStyle": {
|
|
6040
|
+
"type": "NavChromeStyle",
|
|
6041
|
+
"required": false
|
|
6042
|
+
},
|
|
6043
|
+
"shortcutsEnabled": {
|
|
6044
|
+
"type": "boolean",
|
|
6045
|
+
"required": false
|
|
6046
|
+
}
|
|
6047
|
+
},
|
|
6048
|
+
"events": [],
|
|
6049
|
+
"slots": [],
|
|
6050
|
+
"exports": {
|
|
6051
|
+
"customElement": "ds-shell-app",
|
|
6052
|
+
"react": "DsShellApp",
|
|
6053
|
+
"angular": "DsShellApp"
|
|
6054
|
+
}
|
|
6055
|
+
},
|
|
6056
|
+
"dependencies": [
|
|
6057
|
+
"@ds-mo/ui",
|
|
6058
|
+
"@ds-mo/tokens"
|
|
6059
|
+
],
|
|
6060
|
+
"registryDependencies": []
|
|
6061
|
+
},
|
|
5860
6062
|
{
|
|
5861
6063
|
"name": "shell-gradient-picker",
|
|
5862
6064
|
"title": "ShellGradientPicker",
|
|
5863
|
-
"description": "Deprecated compatibility wrapper that maps the fixed
|
|
6065
|
+
"description": "Deprecated compatibility wrapper that maps the fixed ShellApp wash presets into SwatchPicker.",
|
|
5864
6066
|
"type": "registry:ui",
|
|
5865
6067
|
"meta": {
|
|
5866
6068
|
"library": "@ds-mo/ui",
|
|
@@ -5873,10 +6075,10 @@
|
|
|
5873
6075
|
"status": "deprecated",
|
|
5874
6076
|
"replacedBy": "component:ds-swatch-picker",
|
|
5875
6077
|
"replacementReason": "SwatchPicker now owns the same accessible interaction with a generic option model that supports both flat colors and gradients.",
|
|
5876
|
-
"summary": "Deprecated compatibility wrapper that maps the fixed
|
|
6078
|
+
"summary": "Deprecated compatibility wrapper that maps the fixed ShellApp wash presets into SwatchPicker.",
|
|
5877
6079
|
"useWhen": [
|
|
5878
6080
|
"Adding the Appearance or Theme section to the application's user or account menu.",
|
|
5879
|
-
"Users must choose the global
|
|
6081
|
+
"Users must choose the global ShellApp chrome treatment from none, cool, neutral, warm, or fresh."
|
|
5880
6082
|
],
|
|
5881
6083
|
"avoidWhen": [
|
|
5882
6084
|
"Choosing semantic intent, page background, chart, content, or brand colors.",
|
|
@@ -5892,7 +6094,7 @@
|
|
|
5892
6094
|
}
|
|
5893
6095
|
],
|
|
5894
6096
|
"commonlyComposedWith": [
|
|
5895
|
-
"component:ds-app
|
|
6097
|
+
"component:ds-shell-app",
|
|
5896
6098
|
"component:ds-menu"
|
|
5897
6099
|
],
|
|
5898
6100
|
"patterns": [
|
|
@@ -5906,7 +6108,7 @@
|
|
|
5906
6108
|
"states": [
|
|
5907
6109
|
"Neutral is the default preset; none renders solid shell chrome without a wash.",
|
|
5908
6110
|
"Cool, neutral, warm, and fresh use design tokens and automatically adapt to the active light or dark color theme.",
|
|
5909
|
-
"Apply dsChange immediately to
|
|
6111
|
+
"Apply dsChange immediately to ShellApp.gradientPreset and keep the containing account menu open.",
|
|
5910
6112
|
"The application owns local persistence, cross-tab synchronization, and server or account preference precedence; the picker owns only selection UI and events.",
|
|
5911
6113
|
"Treat the fixed preset union as the only supported values and do not construct custom gradients."
|
|
5912
6114
|
],
|
|
@@ -5916,7 +6118,7 @@
|
|
|
5916
6118
|
],
|
|
5917
6119
|
"frameworkCaveats": {
|
|
5918
6120
|
"customElements": [
|
|
5919
|
-
"Listen for dsChange, resolve application preference precedence, and assign the result to the single
|
|
6121
|
+
"Listen for dsChange, resolve application preference precedence, and assign the result to the single ShellApp gradientPreset property."
|
|
5920
6122
|
],
|
|
5921
6123
|
"react": [
|
|
5922
6124
|
"Use the generated wrapper and handle onDsChange without closing the containing account menu."
|
|
@@ -5931,8 +6133,8 @@
|
|
|
5931
6133
|
"path": "src/wc/components/SwatchPicker/SwatchPicker.stories.ts"
|
|
5932
6134
|
},
|
|
5933
6135
|
{
|
|
5934
|
-
"label": "
|
|
5935
|
-
"path": "src/wc/components/
|
|
6136
|
+
"label": "ShellApp gradient contract",
|
|
6137
|
+
"path": "src/wc/components/ShellApp/ShellApp.mdx"
|
|
5936
6138
|
},
|
|
5937
6139
|
{
|
|
5938
6140
|
"label": "Application shell composition",
|
|
@@ -5974,7 +6176,7 @@
|
|
|
5974
6176
|
{
|
|
5975
6177
|
"name": "shell-gradient-swatch",
|
|
5976
6178
|
"title": "ShellGradientSwatch",
|
|
5977
|
-
"description": "Deprecated internal compatibility component for one legacy
|
|
6179
|
+
"description": "Deprecated internal compatibility component for one legacy ShellApp gradient swatch.",
|
|
5978
6180
|
"type": "registry:ui",
|
|
5979
6181
|
"meta": {
|
|
5980
6182
|
"library": "@ds-mo/ui",
|
|
@@ -5987,7 +6189,7 @@
|
|
|
5987
6189
|
"status": "deprecated",
|
|
5988
6190
|
"replacedBy": "component:ds-swatch-picker",
|
|
5989
6191
|
"replacementReason": "SwatchPicker renders its option buttons internally so an individually published radio swatch is no longer needed.",
|
|
5990
|
-
"summary": "Deprecated internal compatibility component for one legacy
|
|
6192
|
+
"summary": "Deprecated internal compatibility component for one legacy ShellApp gradient swatch.",
|
|
5991
6193
|
"useWhen": [
|
|
5992
6194
|
"Maintaining or extending ShellGradientPicker inside CompoMo."
|
|
5993
6195
|
],
|
|
@@ -6074,6 +6276,124 @@
|
|
|
6074
6276
|
],
|
|
6075
6277
|
"registryDependencies": []
|
|
6076
6278
|
},
|
|
6279
|
+
{
|
|
6280
|
+
"name": "shell-page",
|
|
6281
|
+
"title": "ShellPage",
|
|
6282
|
+
"description": "The standard routed-page boundary inside ShellApp, owning sticky BarTitle placement, container-aware header variants, stable scroll compaction, and optional page-content inset without creating a nested scroll container.",
|
|
6283
|
+
"type": "registry:ui",
|
|
6284
|
+
"meta": {
|
|
6285
|
+
"library": "@ds-mo/ui",
|
|
6286
|
+
"distribution": "npm",
|
|
6287
|
+
"storybook": "https://zainadeel.github.io/compomo/?path=/story/shell-page",
|
|
6288
|
+
"source": "src/wc/components/ShellPage/ShellPage.tsx",
|
|
6289
|
+
"intentStatus": "complete",
|
|
6290
|
+
"intent": {
|
|
6291
|
+
"audience": "general",
|
|
6292
|
+
"status": "stable",
|
|
6293
|
+
"summary": "The standard routed-page boundary inside ShellApp, owning sticky BarTitle placement, container-aware header variants, stable scroll compaction, and optional page-content inset without creating a nested scroll container.",
|
|
6294
|
+
"useWhen": [
|
|
6295
|
+
"Rendering a standard routed page inside ShellApp's default content region.",
|
|
6296
|
+
"BarTitle should expand at a roomy page top, compact after scroll, or use constrained action layout when the page column narrows.",
|
|
6297
|
+
"Pages need consistent content gutters with an explicit full-bleed option."
|
|
6298
|
+
],
|
|
6299
|
+
"avoidWhen": [
|
|
6300
|
+
"Building authentication, onboarding, public, modal, drawer, or intentionally focused fullscreen layouts outside the standard ShellApp page region.",
|
|
6301
|
+
"Another ShellPage already owns the routed page; never nest ShellPages.",
|
|
6302
|
+
"A bounded card or pane needs its own header rather than a page-level main landmark."
|
|
6303
|
+
],
|
|
6304
|
+
"alternatives": [
|
|
6305
|
+
{
|
|
6306
|
+
"when": "The composition is a persistent application-wide workspace frame.",
|
|
6307
|
+
"component": "component:ds-shell-app",
|
|
6308
|
+
"reason": "ShellApp owns global navigation, tools, and the content scroll region; ShellPage belongs inside it."
|
|
6309
|
+
},
|
|
6310
|
+
{
|
|
6311
|
+
"when": "Only static page title chrome is required without sticky or responsive orchestration.",
|
|
6312
|
+
"component": "component:ds-bar-title",
|
|
6313
|
+
"reason": "BarTitle can be used standalone with an explicit variant."
|
|
6314
|
+
}
|
|
6315
|
+
],
|
|
6316
|
+
"commonlyComposedWith": [
|
|
6317
|
+
"component:ds-shell-app",
|
|
6318
|
+
"component:ds-bar-title",
|
|
6319
|
+
"component:ds-tab-group"
|
|
6320
|
+
],
|
|
6321
|
+
"patterns": [
|
|
6322
|
+
"pattern:shell-page"
|
|
6323
|
+
],
|
|
6324
|
+
"accessibility": [
|
|
6325
|
+
"ShellPage exposes the routed page as the main landmark; render exactly one active ShellPage inside ShellApp.",
|
|
6326
|
+
"Provide exactly one BarTitle through the header slot so the page has one h1.",
|
|
6327
|
+
"Keep loading, empty, validation, error, progress, success, and failure communication in the default product-content slot.",
|
|
6328
|
+
"Responsive variant changes preserve the same heading, controls, accessible names, and keyboard focus targets."
|
|
6329
|
+
],
|
|
6330
|
+
"states": [
|
|
6331
|
+
"headerPresentation=auto selects expanded, compact, or constrained from ShellPage's own inline capacity and scroll position.",
|
|
6332
|
+
"expanded, compact, and constrained are explicit overrides for exceptional layouts and deterministic examples.",
|
|
6333
|
+
"contentInset=default supplies standard page gutters; none permits maps, canvases, and other full-bleed content.",
|
|
6334
|
+
"The required header slot accepts one BarTitle. The default slot owns router output and all page product content."
|
|
6335
|
+
],
|
|
6336
|
+
"responsiveBehavior": [
|
|
6337
|
+
"ShellPage observes its own rendered width instead of viewport media queries or ShellApp desktop/tablet modes.",
|
|
6338
|
+
"Roomy pages expand at the top and compact after scroll; medium-capacity pages start compact; narrow pages use the constrained header variant.",
|
|
6339
|
+
"A newly navigated header resolves current page capacity before it is revealed, so persistent tool or navigation chrome cannot flash the expanded presentation first.",
|
|
6340
|
+
"Token-based capacity bands use hysteresis so opening tools or resizing navigation cannot oscillate near a boundary.",
|
|
6341
|
+
"Scroll compaction preserves the expanded page flow offset so content never jumps beneath the sticky header.",
|
|
6342
|
+
"ShellPage relies on ShellApp's content scroller and never introduces nested scrolling."
|
|
6343
|
+
],
|
|
6344
|
+
"frameworkCaveats": {
|
|
6345
|
+
"customElements": [
|
|
6346
|
+
"Import ShellPage and BarTitle, place one ds-bar-title in slot=header, and render route content as default children.",
|
|
6347
|
+
"Do not set BarTitle.variant while ShellPage owns headerPresentation."
|
|
6348
|
+
],
|
|
6349
|
+
"react": [
|
|
6350
|
+
"Render DsBarTitle with slot=header inside DsShellPage and keep routed content as the remaining children.",
|
|
6351
|
+
"Use contentInset none only for deliberately full-bleed page products."
|
|
6352
|
+
],
|
|
6353
|
+
"angular": [
|
|
6354
|
+
"Import the generated standalone DsShellPage and DsBarTitle adapters, preserve slot=header, and place router-outlet in the ShellPage default slot.",
|
|
6355
|
+
"Do not add another overflow auto wrapper around the routed page."
|
|
6356
|
+
]
|
|
6357
|
+
},
|
|
6358
|
+
"references": [
|
|
6359
|
+
{
|
|
6360
|
+
"label": "Page-family and responsive examples",
|
|
6361
|
+
"path": "src/wc/components/ShellPage/ShellPage.stories.ts"
|
|
6362
|
+
},
|
|
6363
|
+
{
|
|
6364
|
+
"label": "Cross-browser geometry and interaction coverage",
|
|
6365
|
+
"path": "tests/e2e/bar-title.spec.ts"
|
|
6366
|
+
},
|
|
6367
|
+
{
|
|
6368
|
+
"label": "Reusable framework composition",
|
|
6369
|
+
"path": "agent/patterns/shell-page/pattern.agent.json"
|
|
6370
|
+
}
|
|
6371
|
+
]
|
|
6372
|
+
},
|
|
6373
|
+
"props": {
|
|
6374
|
+
"contentInset": {
|
|
6375
|
+
"type": "ShellPageContentInset",
|
|
6376
|
+
"required": false
|
|
6377
|
+
},
|
|
6378
|
+
"headerPresentation": {
|
|
6379
|
+
"type": "ShellPageHeaderPresentation",
|
|
6380
|
+
"required": false
|
|
6381
|
+
}
|
|
6382
|
+
},
|
|
6383
|
+
"events": [],
|
|
6384
|
+
"slots": [],
|
|
6385
|
+
"exports": {
|
|
6386
|
+
"customElement": "ds-shell-page",
|
|
6387
|
+
"react": "DsShellPage",
|
|
6388
|
+
"angular": "DsShellPage"
|
|
6389
|
+
}
|
|
6390
|
+
},
|
|
6391
|
+
"dependencies": [
|
|
6392
|
+
"@ds-mo/ui",
|
|
6393
|
+
"@ds-mo/tokens"
|
|
6394
|
+
],
|
|
6395
|
+
"registryDependencies": []
|
|
6396
|
+
},
|
|
6077
6397
|
{
|
|
6078
6398
|
"name": "skeleton",
|
|
6079
6399
|
"title": "Skeleton",
|
|
@@ -6482,7 +6802,7 @@
|
|
|
6482
6802
|
],
|
|
6483
6803
|
"commonlyComposedWith": [
|
|
6484
6804
|
"component:ds-menu",
|
|
6485
|
-
"component:ds-app
|
|
6805
|
+
"component:ds-shell-app"
|
|
6486
6806
|
],
|
|
6487
6807
|
"accessibility": [
|
|
6488
6808
|
"Provide a localized groupLabel describing the complete choice.",
|