@ds-mo/ui 12.1.0 → 12.2.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 +18 -1
- package/dist/.build-stamp +1 -1
- package/dist/agent-patterns.json +3 -2
- package/dist/agent.json +313 -47
- package/dist/angular/ds-avatar.d.ts +1 -1
- package/dist/angular/ds-avatar.js +3 -3
- package/dist/angular/ds-bar-title.d.ts +1 -1
- package/dist/angular/ds-bar-title.js +3 -3
- package/dist/angular/ds-bar-workflow.d.ts +28 -0
- package/dist/angular/ds-bar-workflow.js +48 -0
- package/dist/angular/ds-conversation-list.d.ts +1 -1
- package/dist/angular/ds-conversation-list.js +4 -3
- package/dist/angular/ds-scroll-overlay.d.ts +19 -0
- package/dist/angular/ds-scroll-overlay.js +43 -0
- package/dist/angular/index.d.ts +1 -1
- package/dist/angular/index.js +2 -0
- package/dist/angular/proxies.d.ts +2 -0
- package/dist/angular/proxies.js +2 -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-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-bar-title.js +1 -1
- package/dist/components/ds-bar-title.js.map +1 -1
- package/dist/components/ds-bar-workflow.d.ts +11 -0
- package/dist/components/ds-bar-workflow.js +2 -0
- package/dist/components/ds-bar-workflow.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-data-viz-donut.js.map +1 -1
- 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.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-chip.js.map +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-section.js.map +1 -1
- package/dist/components/ds-conversation-list.js +1 -1
- package/dist/components/ds-conversation-list.js.map +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-input.js.map +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-panel-nav.js +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-tools.js +1 -1
- package/dist/components/ds-radio.js +1 -1
- package/dist/components/ds-radio.js.map +1 -1
- package/dist/components/ds-scroll-overlay.d.ts +11 -0
- package/dist/components/ds-scroll-overlay.js +2 -0
- package/dist/components/ds-scroll-overlay.js.map +1 -0
- 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-swatch.js +1 -1
- package/dist/components/ds-shell-gradient-swatch.js.map +1 -1
- package/dist/components/ds-shell-page.js +1 -1
- package/dist/components/ds-shell-page.js.map +1 -1
- 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-tag.js.map +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-2W-ZjZCR.js +2 -0
- package/dist/components/{p-Dqwcw1-m.js.map → p-2W-ZjZCR.js.map} +1 -1
- package/dist/components/p-8OOCLGph.js +2 -0
- package/dist/components/p-8OOCLGph.js.map +1 -0
- package/dist/components/{p-CTV_QWC5.js → p-B8CubPgQ.js} +2 -2
- package/dist/components/p-BE_CDJeL.js +2 -0
- package/dist/components/p-BE_CDJeL.js.map +1 -0
- package/dist/components/{p-LFGbdi7Y.js → p-BRLDJmkh.js} +2 -2
- package/dist/components/p-BpA9uYKX.js +2 -0
- package/dist/components/p-BpA9uYKX.js.map +1 -0
- package/dist/components/{p-Bs6SS34m.js → p-C0_8K4y7.js} +2 -2
- package/dist/components/{p-BfEjWe8U.js → p-CA3kLO7K.js} +2 -2
- package/dist/components/{p-DfIch2Dk.js → p-CCHqsF_H.js} +2 -2
- package/dist/components/p-CG5EX4NW.js +2 -0
- package/dist/components/{p-DABj3qTX.js.map → p-CG5EX4NW.js.map} +1 -1
- package/dist/components/{p-tDXHTAJh.js → p-CHkI3oIS.js} +2 -2
- package/dist/components/{p-liMPkhUP.js → p-CNffejay.js} +2 -2
- package/dist/components/{p-CR7yMitN.js → p-Cxpl-rzP.js} +2 -2
- package/dist/components/p-CydY-v7X.js +2 -0
- package/dist/components/p-CydY-v7X.js.map +1 -0
- package/dist/components/{p-BkwBtZs3.js → p-D6jK2Hyi.js} +2 -2
- package/dist/components/{p-BzsITTZa.js → p-DBi1bmOL.js} +2 -2
- package/dist/components/{p-DxeHimqk.js → p-DOCKtrS4.js} +2 -2
- package/dist/components/p-DbpfpeQT.js +2 -0
- package/dist/components/p-DbpfpeQT.js.map +1 -0
- package/dist/components/{p-B9jvSGid.js → p-DcGpdIlT.js} +2 -2
- package/dist/components/p-DyGB97Oy.js +2 -0
- package/dist/components/{p-Dy_sZ-dI.js.map → p-DyGB97Oy.js.map} +1 -1
- package/dist/components/p-GMDGgtY8.js +2 -0
- package/dist/components/{p-DpyTrZa2.js.map → p-GMDGgtY8.js.map} +1 -1
- package/dist/components/p-XgIQ3oI_.js +2 -0
- package/dist/components/{p-Dfxnxx7L.js.map → p-XgIQ3oI_.js.map} +1 -1
- package/dist/components/{p-DszI94sZ.js → p-ky1msbJ8.js} +2 -2
- package/dist/components/p-xY3TjBF5.js +2 -0
- package/dist/components/{p-webARv8d.js.map → p-xY3TjBF5.js.map} +1 -1
- package/dist/docs/components.json +681 -98
- package/dist/lib/utils/anchored-popup.d.ts +5 -1
- package/dist/mcp-data/registry/agent-response.json +9 -4
- package/dist/mcp-data/registry/avatar.json +26 -7
- package/dist/mcp-data/registry/bar-title.json +13 -28
- package/dist/mcp-data/registry/bar-workflow.json +368 -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/checkbox.json +1 -1
- package/dist/mcp-data/registry/conversation-list-item.json +1 -1
- package/dist/mcp-data/registry/conversation-list-section.json +2 -2
- package/dist/mcp-data/registry/conversation-list.json +36 -9
- package/dist/mcp-data/registry/markdown.json +15 -10
- package/dist/mcp-data/registry/menu.json +9 -7
- package/dist/mcp-data/registry/message-scroller.json +3 -3
- package/dist/mcp-data/registry/panel-tool-search.json +1 -1
- package/dist/mcp-data/registry/registry.json +318 -46
- package/dist/mcp-data/registry/scroll-overlay.json +183 -0
- package/dist/mcp-data/registry/shell-gradient-swatch.json +1 -1
- package/dist/mcp-data/registry/shell-page.json +12 -9
- package/dist/mcp-data/registry/slider.json +1 -1
- package/dist/mcp-data/registry/switch.json +1 -1
- package/dist/mcp-data/registry/tab-group.json +1 -1
- package/dist/react/components.d.ts +2 -0
- package/dist/react/components.js +2 -0
- package/dist/react/ds-bar-workflow.d.ts +14 -0
- package/dist/react/ds-bar-workflow.js +16 -0
- package/dist/react/ds-scroll-overlay.d.ts +12 -0
- package/dist/react/ds-scroll-overlay.js +12 -0
- package/dist/styles/prose.css +214 -0
- package/dist/types/components/Avatar/Avatar.d.ts +4 -1
- package/dist/types/components/BarTitle/BarTitle.d.ts +1 -4
- package/dist/types/components/BarTitle/bar-title-types.d.ts +0 -1
- package/dist/types/components/BarWorkflow/BarWorkflow.d.ts +37 -0
- package/dist/types/components/BarWorkflow/bar-workflow-types.d.ts +12 -0
- package/dist/types/components/ConversationList/ConversationList.d.ts +12 -0
- package/dist/types/components/Menu/Menu.d.ts +1 -2
- package/dist/types/components/MessageScroller/MessageScroller.d.ts +1 -6
- package/dist/types/components/ScrollOverlay/ScrollOverlay.d.ts +28 -0
- package/dist/types/components.d.ts +233 -16
- package/dist/types/stories/isolated-overlay-docs.d.ts +13 -0
- package/dist/types/utils/anchored-popup.d.ts +5 -1
- package/dist/types/utils/scroll-overlay-controller.d.ts +35 -0
- package/package.json +4 -3
- package/dist/components/p-C3Zfn7hz.js +0 -2
- package/dist/components/p-C3Zfn7hz.js.map +0 -1
- package/dist/components/p-CUik7PCi.js +0 -2
- package/dist/components/p-CUik7PCi.js.map +0 -1
- package/dist/components/p-DABj3qTX.js +0 -2
- package/dist/components/p-Dfxnxx7L.js +0 -2
- package/dist/components/p-DpyTrZa2.js +0 -2
- package/dist/components/p-Dqwcw1-m.js +0 -2
- package/dist/components/p-Dy3Skua8.js +0 -2
- package/dist/components/p-Dy3Skua8.js.map +0 -1
- package/dist/components/p-Dy_sZ-dI.js +0 -2
- package/dist/components/p-l6PmnW_P.js +0 -2
- package/dist/components/p-l6PmnW_P.js.map +0 -1
- package/dist/components/p-webARv8d.js +0 -2
- /package/dist/components/{p-CTV_QWC5.js.map → p-B8CubPgQ.js.map} +0 -0
- /package/dist/components/{p-LFGbdi7Y.js.map → p-BRLDJmkh.js.map} +0 -0
- /package/dist/components/{p-Bs6SS34m.js.map → p-C0_8K4y7.js.map} +0 -0
- /package/dist/components/{p-BfEjWe8U.js.map → p-CA3kLO7K.js.map} +0 -0
- /package/dist/components/{p-DfIch2Dk.js.map → p-CCHqsF_H.js.map} +0 -0
- /package/dist/components/{p-tDXHTAJh.js.map → p-CHkI3oIS.js.map} +0 -0
- /package/dist/components/{p-liMPkhUP.js.map → p-CNffejay.js.map} +0 -0
- /package/dist/components/{p-CR7yMitN.js.map → p-Cxpl-rzP.js.map} +0 -0
- /package/dist/components/{p-BkwBtZs3.js.map → p-D6jK2Hyi.js.map} +0 -0
- /package/dist/components/{p-BzsITTZa.js.map → p-DBi1bmOL.js.map} +0 -0
- /package/dist/components/{p-DxeHimqk.js.map → p-DOCKtrS4.js.map} +0 -0
- /package/dist/components/{p-B9jvSGid.js.map → p-DcGpdIlT.js.map} +0 -0
- /package/dist/components/{p-DszI94sZ.js.map → p-ky1msbJ8.js.map} +0 -0
|
@@ -136,15 +136,20 @@
|
|
|
136
136
|
],
|
|
137
137
|
"states": [
|
|
138
138
|
"The owner replaces immutable part arrays as scripted or live output changes.",
|
|
139
|
-
"AgentResponse renders directly in Message without borrowing a plain MessageBubble surface."
|
|
139
|
+
"AgentResponse renders directly in Message without borrowing a plain MessageBubble surface.",
|
|
140
|
+
"Markdown parts use the optional safe renderer; prose CSS owns only semantic-tree styling and never response ordering or streaming state."
|
|
140
141
|
],
|
|
141
142
|
"responsiveBehavior": [
|
|
142
|
-
"Rich content uses the available transcript width while respecting readable measure and overflow constraints."
|
|
143
|
+
"Rich content uses the available transcript width while respecting readable measure and local overflow constraints."
|
|
143
144
|
],
|
|
144
145
|
"references": [
|
|
145
146
|
{
|
|
146
|
-
"label": "
|
|
147
|
-
"path": "src/wc/components/
|
|
147
|
+
"label": "Representative streamed response",
|
|
148
|
+
"path": "src/wc/components/AgentResponse/AgentResponse.stories.ts"
|
|
149
|
+
},
|
|
150
|
+
{
|
|
151
|
+
"label": "Prose distribution decision",
|
|
152
|
+
"path": "docs/prose-foundation.md"
|
|
148
153
|
}
|
|
149
154
|
]
|
|
150
155
|
},
|
|
@@ -449,7 +454,7 @@
|
|
|
449
454
|
"status": "experimental",
|
|
450
455
|
"summary": "Compact icon avatar for visually identifying a person, group, channel, or conversation type.",
|
|
451
456
|
"useWhen": [
|
|
452
|
-
"A list or message composition needs a consistent
|
|
457
|
+
"A list or message composition needs a consistent circular identity marker represented by an icon at md, sm, or xs control density."
|
|
453
458
|
],
|
|
454
459
|
"avoidWhen": [
|
|
455
460
|
"The identity has a supplied photograph, initials, presence state, or editable profile behavior; those variants are not part of this primitive."
|
|
@@ -460,10 +465,11 @@
|
|
|
460
465
|
],
|
|
461
466
|
"accessibility": [
|
|
462
467
|
"Provide label only when the icon communicates meaning that surrounding text does not already convey.",
|
|
463
|
-
"Omit label when the owning row or message already provides an equivalent accessible name."
|
|
468
|
+
"Omit label when the owning row or message already provides an equivalent accessible name.",
|
|
469
|
+
"Treat primary and secondary as general icon hierarchy; an owning product may map that hierarchy to states such as unread and read, but Avatar does not own those states."
|
|
464
470
|
],
|
|
465
471
|
"responsiveBehavior": [
|
|
466
|
-
"The
|
|
472
|
+
"The selected size stays fixed across viewports: md is a 32px circle with a 20px icon, sm is 24px with 16px, and xs is 16px with 12px."
|
|
467
473
|
],
|
|
468
474
|
"references": [
|
|
469
475
|
{
|
|
@@ -484,6 +490,10 @@
|
|
|
484
490
|
"label": {
|
|
485
491
|
"type": "string | undefined",
|
|
486
492
|
"required": false
|
|
493
|
+
},
|
|
494
|
+
"size": {
|
|
495
|
+
"type": "AvatarSize",
|
|
496
|
+
"required": false
|
|
487
497
|
}
|
|
488
498
|
},
|
|
489
499
|
"events": [],
|
|
@@ -805,7 +815,7 @@
|
|
|
805
815
|
{
|
|
806
816
|
"name": "bar-title",
|
|
807
817
|
"title": "BarTitle",
|
|
808
|
-
"description": "Page-level title chrome with
|
|
818
|
+
"description": "Page-level title chrome with optional route navigation, supporting description, inline active-section menu, one primary action, grouped overflow actions, and explicit expanded, compact, or constrained variants.",
|
|
809
819
|
"type": "registry:ui",
|
|
810
820
|
"meta": {
|
|
811
821
|
"library": "@ds-mo/ui",
|
|
@@ -816,11 +826,11 @@
|
|
|
816
826
|
"intent": {
|
|
817
827
|
"audience": "general",
|
|
818
828
|
"status": "stable",
|
|
819
|
-
"summary": "Page-level title chrome with
|
|
829
|
+
"summary": "Page-level title chrome with optional route navigation, supporting description, inline active-section menu, one primary action, grouped overflow actions, and explicit expanded, compact, or constrained variants.",
|
|
820
830
|
"useWhen": [
|
|
821
831
|
"A top-level page needs one h1 above its content.",
|
|
822
832
|
"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
|
|
833
|
+
"A detail page needs a page-level Back action.",
|
|
824
834
|
"A page needs one primary action plus optional secondary or destructive overflow commands."
|
|
825
835
|
],
|
|
826
836
|
"avoidWhen": [
|
|
@@ -831,6 +841,11 @@
|
|
|
831
841
|
"Automatic sticky or responsive page orchestration is required; compose BarTitle in ShellPage rather than implementing it in the header."
|
|
832
842
|
],
|
|
833
843
|
"alternatives": [
|
|
844
|
+
{
|
|
845
|
+
"when": "A create or edit workflow needs Exit, persistent step navigation, and a final Save or Submit action.",
|
|
846
|
+
"component": "component:ds-bar-workflow",
|
|
847
|
+
"reason": "BarWorkflow owns compact-only workflow progression rather than responsive page identity."
|
|
848
|
+
},
|
|
834
849
|
{
|
|
835
850
|
"when": "The header belongs to a PanelTools product view.",
|
|
836
851
|
"component": "component:ds-panel-tool-header",
|
|
@@ -864,15 +879,13 @@
|
|
|
864
879
|
"Two or more selectable sections add the inline section trigger; one section does not render a redundant menu.",
|
|
865
880
|
"Dividers in sections or actions create separate Menu groups without becoming selectable rows.",
|
|
866
881
|
"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
|
|
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."
|
|
882
|
+
"primaryAction collapse defaults to auto. Use never for exceptional actions whose hierarchy must remain visible in constrained layouts."
|
|
869
883
|
],
|
|
870
884
|
"responsiveBehavior": [
|
|
871
885
|
"BarTitle does not observe viewport, shell, scroll, or container state. Its owner selects an explicit variant.",
|
|
872
886
|
"ShellPage is the standard owner for automatic expanded, compact, and constrained selection.",
|
|
873
887
|
"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
|
|
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."
|
|
888
|
+
"A never-collapse primary action remains visible in constrained mode; the title and section label yield space first."
|
|
876
889
|
],
|
|
877
890
|
"frameworkCaveats": {
|
|
878
891
|
"customElements": [
|
|
@@ -928,10 +941,6 @@
|
|
|
928
941
|
"type": "string",
|
|
929
942
|
"required": true
|
|
930
943
|
},
|
|
931
|
-
"mode": {
|
|
932
|
-
"type": "BarTitleMode",
|
|
933
|
-
"required": false
|
|
934
|
-
},
|
|
935
944
|
"primaryAction": {
|
|
936
945
|
"type": "BarTitlePrimaryAction | null",
|
|
937
946
|
"required": false
|
|
@@ -992,6 +1001,167 @@
|
|
|
992
1001
|
"tooltip"
|
|
993
1002
|
]
|
|
994
1003
|
},
|
|
1004
|
+
{
|
|
1005
|
+
"name": "bar-workflow",
|
|
1006
|
+
"title": "BarWorkflow",
|
|
1007
|
+
"description": "Compact bold-brand create/edit workflow chrome with Exit, controlled previous and next step navigation, and a final Save or Submit action.",
|
|
1008
|
+
"type": "registry:ui",
|
|
1009
|
+
"meta": {
|
|
1010
|
+
"library": "@ds-mo/ui",
|
|
1011
|
+
"distribution": "npm",
|
|
1012
|
+
"storybook": "https://zainadeel.github.io/compomo/?path=/story/bar-workflow",
|
|
1013
|
+
"source": "src/wc/components/BarWorkflow/BarWorkflow.tsx",
|
|
1014
|
+
"intentStatus": "complete",
|
|
1015
|
+
"intent": {
|
|
1016
|
+
"audience": "general",
|
|
1017
|
+
"status": "stable",
|
|
1018
|
+
"summary": "Compact bold-brand create/edit workflow chrome with Exit, controlled previous and next step navigation, and a final Save or Submit action.",
|
|
1019
|
+
"useWhen": [
|
|
1020
|
+
"A create or edit flow needs persistent page-level Exit and step navigation.",
|
|
1021
|
+
"A single-step form needs the same compact workflow chrome and final Save or Submit action.",
|
|
1022
|
+
"Next or Submit must remain visible while the application owns validation and the current step."
|
|
1023
|
+
],
|
|
1024
|
+
"avoidWhen": [
|
|
1025
|
+
"The header identifies a routed page, list, or detail view; use BarTitle instead.",
|
|
1026
|
+
"The steps must be visibly enumerated or expose progress; BarWorkflow uses steps only to resolve its navigation controls.",
|
|
1027
|
+
"The header belongs to a PanelTools drawer or fullscreen pane; use PanelToolHeader through PanelTools instead.",
|
|
1028
|
+
"The interaction is a local wizard inside page content rather than page-level workflow chrome."
|
|
1029
|
+
],
|
|
1030
|
+
"alternatives": [
|
|
1031
|
+
{
|
|
1032
|
+
"when": "A routed page needs responsive title, section, Back, and page-action presentations.",
|
|
1033
|
+
"component": "component:ds-bar-title",
|
|
1034
|
+
"reason": "BarTitle owns page identity and capacity variants rather than workflow progression."
|
|
1035
|
+
},
|
|
1036
|
+
{
|
|
1037
|
+
"when": "The workflow belongs to a tool drawer or fullscreen tool pane.",
|
|
1038
|
+
"component": "component:ds-panel-tool-header",
|
|
1039
|
+
"reason": "PanelToolHeader owns tool-pane navigation and actions within PanelTools."
|
|
1040
|
+
}
|
|
1041
|
+
],
|
|
1042
|
+
"commonlyComposedWith": [
|
|
1043
|
+
"component:ds-shell-page",
|
|
1044
|
+
"component:ds-button-filled",
|
|
1045
|
+
"component:ds-button-unfilled",
|
|
1046
|
+
"component:ds-text",
|
|
1047
|
+
"component:ds-tooltip"
|
|
1048
|
+
],
|
|
1049
|
+
"patterns": [],
|
|
1050
|
+
"accessibility": [
|
|
1051
|
+
"Provide one concise workflow heading; BarWorkflow renders exactly one h1 and appends the controlled current-step count as heading · X/N only for multi-step workflows.",
|
|
1052
|
+
"Provide a workflow-specific Exit accessible name that describes the consequence or destination.",
|
|
1053
|
+
"Give every step a stable id and concise label even though step labels are not rendered as visible progress.",
|
|
1054
|
+
"Previous is omitted on the first step; it appears from step two onward. Next remains visible on intermediate steps and becomes the final labeled Check action on the last step.",
|
|
1055
|
+
"Use submitAction.type=submit inside a form so the final action preserves native submission semantics."
|
|
1056
|
+
],
|
|
1057
|
+
"states": [
|
|
1058
|
+
"BarWorkflow always renders compact 48px bold-brand chrome and has no expanded, constrained, or responsive variant.",
|
|
1059
|
+
"An unrecognized value resolves navigation from the first step without mutating the controlled value.",
|
|
1060
|
+
"The first step omits Previous. Intermediate steps show Previous and Next. The last step replaces Next with the Check Save or Submit action.",
|
|
1061
|
+
"The default empty steps array is a single-step flow with the plain heading, no Previous control, and the final action visible. An explicit one-step array behaves the same way.",
|
|
1062
|
+
"isNextInactive blocks forward navigation while preserving the Next control; the target step's isInactive state also blocks entry.",
|
|
1063
|
+
"submitAction owns the final label, native button type, inactive state, and loading state."
|
|
1064
|
+
],
|
|
1065
|
+
"responsiveBehavior": [
|
|
1066
|
+
"BarWorkflow does not expose a presentation variant and never collapses its navigation actions.",
|
|
1067
|
+
"The heading truncates before Exit, Previous, and Next or Submit lose their complete hit targets.",
|
|
1068
|
+
"When slotted into ShellPage, BarWorkflow remains compact while ShellPage continues to provide sticky placement."
|
|
1069
|
+
],
|
|
1070
|
+
"frameworkCaveats": {
|
|
1071
|
+
"customElements": [
|
|
1072
|
+
"Assign steps and submitAction as JavaScript properties and replace their identities when controlled state changes.",
|
|
1073
|
+
"Update value after dsStepChange, handle dsExit in the workflow owner, and use dsSubmit only when product behavior supplements native form submission."
|
|
1074
|
+
],
|
|
1075
|
+
"react": [
|
|
1076
|
+
"Pass steps and submitAction directly to DsBarWorkflow and keep value controlled in the workflow route.",
|
|
1077
|
+
"Place DsBarWorkflow in DsShellPage with slot=header when sticky page placement is required."
|
|
1078
|
+
],
|
|
1079
|
+
"angular": [
|
|
1080
|
+
"Bind steps and submitAction on the standalone DsBarWorkflow adapter and update value from dsStepChange.",
|
|
1081
|
+
"Place ds-bar-workflow in ds-shell-page with slot=header and keep the form or router outlet in ShellPage content."
|
|
1082
|
+
]
|
|
1083
|
+
},
|
|
1084
|
+
"references": [
|
|
1085
|
+
{
|
|
1086
|
+
"label": "Workflow states and controlled navigation",
|
|
1087
|
+
"path": "src/wc/components/BarWorkflow/BarWorkflow.stories.ts"
|
|
1088
|
+
},
|
|
1089
|
+
{
|
|
1090
|
+
"label": "Cross-browser workflow behavior",
|
|
1091
|
+
"path": "tests/e2e/bar-workflow.spec.ts"
|
|
1092
|
+
}
|
|
1093
|
+
]
|
|
1094
|
+
},
|
|
1095
|
+
"props": {
|
|
1096
|
+
"exitAriaLabel": {
|
|
1097
|
+
"type": "string",
|
|
1098
|
+
"required": false
|
|
1099
|
+
},
|
|
1100
|
+
"exitLabel": {
|
|
1101
|
+
"type": "string",
|
|
1102
|
+
"required": false
|
|
1103
|
+
},
|
|
1104
|
+
"heading": {
|
|
1105
|
+
"type": "string",
|
|
1106
|
+
"required": true
|
|
1107
|
+
},
|
|
1108
|
+
"isNextInactive": {
|
|
1109
|
+
"type": "boolean",
|
|
1110
|
+
"required": false
|
|
1111
|
+
},
|
|
1112
|
+
"nextLabel": {
|
|
1113
|
+
"type": "string",
|
|
1114
|
+
"required": false
|
|
1115
|
+
},
|
|
1116
|
+
"previousLabel": {
|
|
1117
|
+
"type": "string",
|
|
1118
|
+
"required": false
|
|
1119
|
+
},
|
|
1120
|
+
"steps": {
|
|
1121
|
+
"type": "BarWorkflowStep[]",
|
|
1122
|
+
"required": false
|
|
1123
|
+
},
|
|
1124
|
+
"submitAction": {
|
|
1125
|
+
"type": "BarWorkflowSubmitAction",
|
|
1126
|
+
"required": false
|
|
1127
|
+
},
|
|
1128
|
+
"value": {
|
|
1129
|
+
"type": "string",
|
|
1130
|
+
"required": false
|
|
1131
|
+
}
|
|
1132
|
+
},
|
|
1133
|
+
"events": [
|
|
1134
|
+
{
|
|
1135
|
+
"name": "dsExit",
|
|
1136
|
+
"detail": "MouseEvent"
|
|
1137
|
+
},
|
|
1138
|
+
{
|
|
1139
|
+
"name": "dsStepChange",
|
|
1140
|
+
"detail": "string"
|
|
1141
|
+
},
|
|
1142
|
+
{
|
|
1143
|
+
"name": "dsSubmit",
|
|
1144
|
+
"detail": "MouseEvent"
|
|
1145
|
+
}
|
|
1146
|
+
],
|
|
1147
|
+
"slots": [],
|
|
1148
|
+
"exports": {
|
|
1149
|
+
"customElement": "ds-bar-workflow",
|
|
1150
|
+
"react": "DsBarWorkflow",
|
|
1151
|
+
"angular": "DsBarWorkflow"
|
|
1152
|
+
}
|
|
1153
|
+
},
|
|
1154
|
+
"dependencies": [
|
|
1155
|
+
"@ds-mo/ui",
|
|
1156
|
+
"@ds-mo/tokens"
|
|
1157
|
+
],
|
|
1158
|
+
"registryDependencies": [
|
|
1159
|
+
"button-filled",
|
|
1160
|
+
"button-unfilled",
|
|
1161
|
+
"text",
|
|
1162
|
+
"tooltip"
|
|
1163
|
+
]
|
|
1164
|
+
},
|
|
995
1165
|
{
|
|
996
1166
|
"name": "button-filled",
|
|
997
1167
|
"title": "ButtonFilled",
|
|
@@ -2581,7 +2751,7 @@
|
|
|
2581
2751
|
{
|
|
2582
2752
|
"name": "conversation-list",
|
|
2583
2753
|
"title": "ConversationList",
|
|
2584
|
-
"description": "Scrollable conversation-list region with dedicated empty and
|
|
2754
|
+
"description": "Scrollable conversation-list region with dedicated empty and persistent action placement.",
|
|
2585
2755
|
"type": "registry:ui",
|
|
2586
2756
|
"meta": {
|
|
2587
2757
|
"library": "@ds-mo/ui",
|
|
@@ -2592,7 +2762,7 @@
|
|
|
2592
2762
|
"intent": {
|
|
2593
2763
|
"audience": "general",
|
|
2594
2764
|
"status": "experimental",
|
|
2595
|
-
"summary": "Scrollable conversation-list region with dedicated empty and
|
|
2765
|
+
"summary": "Scrollable conversation-list region with dedicated empty and persistent action placement.",
|
|
2596
2766
|
"useWhen": [
|
|
2597
2767
|
"A messaging-like surface needs a reusable history list with empty and action regions."
|
|
2598
2768
|
],
|
|
@@ -2602,17 +2772,24 @@
|
|
|
2602
2772
|
"commonlyComposedWith": [
|
|
2603
2773
|
"component:ds-conversation-list-section",
|
|
2604
2774
|
"component:ds-conversation-list-item",
|
|
2605
|
-
"component:ds-empty-state"
|
|
2775
|
+
"component:ds-empty-state",
|
|
2776
|
+
"component:ds-scroll-overlay"
|
|
2606
2777
|
],
|
|
2607
2778
|
"patterns": [
|
|
2608
2779
|
"pattern:conversation"
|
|
2609
2780
|
],
|
|
2610
2781
|
"accessibility": [
|
|
2611
2782
|
"Provide an accessible list label through the surrounding heading or region.",
|
|
2612
|
-
"Keep the empty message descriptive and
|
|
2783
|
+
"Keep the empty message descriptive and every persistent action explicitly named."
|
|
2784
|
+
],
|
|
2785
|
+
"states": [
|
|
2786
|
+
"The default floating action stays at the lower end corner.",
|
|
2787
|
+
"actionLayout footer stretches a long action between 8px side and bottom insets.",
|
|
2788
|
+
"Both action layouts share the always-active scroll-overlay fade controller, reserve measured end clearance, and begin fading 8px before the visible action.",
|
|
2789
|
+
"ConversationList paints its measured fade on a separate surface-aware layer so contextual row actions retain a real backdrop for blur; hovered, focused, and menu-open rows rise above that decorative fade."
|
|
2613
2790
|
],
|
|
2614
2791
|
"responsiveBehavior": [
|
|
2615
|
-
"The list fills its owner, scrolls independently, and keeps its action
|
|
2792
|
+
"The list fills its owner, scrolls independently, and keeps its persistent action above scrolling rows."
|
|
2616
2793
|
],
|
|
2617
2794
|
"references": [
|
|
2618
2795
|
{
|
|
@@ -2621,7 +2798,12 @@
|
|
|
2621
2798
|
}
|
|
2622
2799
|
]
|
|
2623
2800
|
},
|
|
2624
|
-
"props": {
|
|
2801
|
+
"props": {
|
|
2802
|
+
"actionLayout": {
|
|
2803
|
+
"type": "ConversationListActionLayout",
|
|
2804
|
+
"required": false
|
|
2805
|
+
}
|
|
2806
|
+
},
|
|
2625
2807
|
"events": [],
|
|
2626
2808
|
"slots": [],
|
|
2627
2809
|
"exports": {
|
|
@@ -2782,7 +2964,7 @@
|
|
|
2782
2964
|
"The visible heading labels the section and must describe the relationship shared by its rows."
|
|
2783
2965
|
],
|
|
2784
2966
|
"responsiveBehavior": [
|
|
2785
|
-
"Rows remain full width while the heading stays visible in document order."
|
|
2967
|
+
"Rows remain full width with a 4px gap between adjacent items while the heading stays visible in document order."
|
|
2786
2968
|
],
|
|
2787
2969
|
"references": [
|
|
2788
2970
|
{
|
|
@@ -3618,7 +3800,7 @@
|
|
|
3618
3800
|
{
|
|
3619
3801
|
"name": "markdown",
|
|
3620
3802
|
"title": "Markdown",
|
|
3621
|
-
"description": "
|
|
3803
|
+
"description": "Optional safe CommonMark and GFM renderer that emits semantic nodes without raw HTML injection and consumes the shared prose CSS contract.",
|
|
3622
3804
|
"type": "registry:ui",
|
|
3623
3805
|
"meta": {
|
|
3624
3806
|
"library": "@ds-mo/ui",
|
|
@@ -3629,19 +3811,19 @@
|
|
|
3629
3811
|
"intent": {
|
|
3630
3812
|
"audience": "specialized",
|
|
3631
3813
|
"status": "experimental",
|
|
3632
|
-
"summary": "
|
|
3814
|
+
"summary": "Optional safe CommonMark and GFM renderer that emits semantic nodes without raw HTML injection and consumes the shared prose CSS contract.",
|
|
3633
3815
|
"useWhen": [
|
|
3634
|
-
"
|
|
3816
|
+
"A serializable Markdown string needs the design system's safe, opinionated renderer for headings, lists, links, tables, tasks, quotes, and code."
|
|
3635
3817
|
],
|
|
3636
3818
|
"avoidWhen": [
|
|
3819
|
+
"The application already owns a safe semantic-DOM renderer and only needs @ds-mo/ui/prose.css.",
|
|
3637
3820
|
"The application needs arbitrary HTML, custom plugins, or a full document CMS renderer."
|
|
3638
3821
|
],
|
|
3639
3822
|
"commonlyComposedWith": [
|
|
3640
|
-
"component:ds-
|
|
3641
|
-
"component:ds-
|
|
3823
|
+
"component:ds-agent-response",
|
|
3824
|
+
"component:ds-code-block"
|
|
3642
3825
|
],
|
|
3643
3826
|
"patterns": [
|
|
3644
|
-
"pattern:conversation",
|
|
3645
3827
|
"pattern:agent-chat"
|
|
3646
3828
|
],
|
|
3647
3829
|
"accessibility": [
|
|
@@ -3650,7 +3832,8 @@
|
|
|
3650
3832
|
"Link text must remain descriptive in authored content."
|
|
3651
3833
|
],
|
|
3652
3834
|
"states": [
|
|
3653
|
-
"Streaming updates are coalesced to one parse and render per animation frame."
|
|
3835
|
+
"Streaming updates are coalesced to one parse and render per animation frame.",
|
|
3836
|
+
"Typography, rhythm, opt-out, and overflow styling come from the renderer-neutral .ds-prose source rather than a Markdown-only recipe."
|
|
3654
3837
|
],
|
|
3655
3838
|
"responsiveBehavior": [
|
|
3656
3839
|
"Tables and code scroll horizontally instead of forcing the transcript wider."
|
|
@@ -3658,7 +3841,11 @@
|
|
|
3658
3841
|
"references": [
|
|
3659
3842
|
{
|
|
3660
3843
|
"label": "Storybook examples",
|
|
3661
|
-
"path": "src/wc/components/
|
|
3844
|
+
"path": "src/wc/components/AgentResponse/AgentResponse.stories.ts"
|
|
3845
|
+
},
|
|
3846
|
+
{
|
|
3847
|
+
"label": "Prose distribution decision",
|
|
3848
|
+
"path": "docs/prose-foundation.md"
|
|
3662
3849
|
}
|
|
3663
3850
|
]
|
|
3664
3851
|
},
|
|
@@ -3750,14 +3937,14 @@
|
|
|
3750
3937
|
"states": [
|
|
3751
3938
|
"The host owns open state and responds to selection and close events.",
|
|
3752
3939
|
"Use either flat items or sections, not both.",
|
|
3753
|
-
"After dsSelect from a switch row,
|
|
3754
|
-
"For selectionMode single, keep exactly one item isSelected and
|
|
3940
|
+
"After dsSelect from a switch row, replace the items or sections array with updated switchValue data so the controlled indicator reflects the new state.",
|
|
3941
|
+
"For selectionMode single, keep exactly one item isSelected and replace the items or sections array after dsSelect; Menu never mutates consumer-owned selection data.",
|
|
3755
3942
|
"Arrays, objects, and element anchors must be assigned as JavaScript properties.",
|
|
3756
3943
|
"Use a swatch-picker section for a small curated visual preference and apply dsSwatchSelect immediately without closing the popup; the legacy gradient-picker section and dsGradientSelect remain compatibility-only."
|
|
3757
3944
|
],
|
|
3758
3945
|
"responsiveBehavior": [
|
|
3759
3946
|
"Keep the default choice-cell anchor alignment so the first or last interactive row edge aligns with its trigger, matching Select; use popup-frame only for deliberate custom frame geometry.",
|
|
3760
|
-
"
|
|
3947
|
+
"Treat side as the preferred placement. When the popup cannot fit there and the opposite side offers more room, Menu flips on that main axis before clamping the final position to the viewport.",
|
|
3761
3948
|
"Avoid fixed widths that exceed narrow viewports."
|
|
3762
3949
|
],
|
|
3763
3950
|
"frameworkCaveats": {
|
|
@@ -4203,7 +4390,7 @@
|
|
|
4203
4390
|
"Selection and transcript interaction release automatic following.",
|
|
4204
4391
|
"Opening saved history, message jumps, and prepended history preserve deliberate position.",
|
|
4205
4392
|
"The scroll-to-latest action is absent at the live edge, appears only after the reader moves away, and disappears again after returning to the newest message.",
|
|
4206
|
-
"Place a composer container with 8px padding on every side in the overlay slot so messages scroll behind it; the
|
|
4393
|
+
"Place a composer container with 8px padding on every side in the overlay slot so messages scroll behind it; the shared scroll-overlay controller tracks every composer growth step, reserves matching transcript clearance, begins the fade 8px before the visible composer, and keeps scroll-to-latest above it."
|
|
4207
4394
|
],
|
|
4208
4395
|
"responsiveBehavior": [
|
|
4209
4396
|
"Transcript width is readable while the scroll region fills available height."
|
|
@@ -4927,7 +5114,7 @@
|
|
|
4927
5114
|
],
|
|
4928
5115
|
"accessibility": [
|
|
4929
5116
|
"Provide an aria-label that names the searched domain, such as Search agent chats or Search messages.",
|
|
4930
|
-
"The standard search clear action restores focus,
|
|
5117
|
+
"The standard search clear action restores focus, uses the concise localized clearLabel by itself for both its tooltip and accessible name, and emits both the empty query and dsClear.",
|
|
4931
5118
|
"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."
|
|
4932
5119
|
],
|
|
4933
5120
|
"states": [
|
|
@@ -5407,6 +5594,88 @@
|
|
|
5407
5594
|
"text"
|
|
5408
5595
|
]
|
|
5409
5596
|
},
|
|
5597
|
+
{
|
|
5598
|
+
"name": "scroll-overlay",
|
|
5599
|
+
"title": "ScrollOverlay",
|
|
5600
|
+
"description": "Generic scroll owner for content that moves behind a persistent footer action or composer with an always-active alpha fade.",
|
|
5601
|
+
"type": "registry:ui",
|
|
5602
|
+
"meta": {
|
|
5603
|
+
"library": "@ds-mo/ui",
|
|
5604
|
+
"distribution": "npm",
|
|
5605
|
+
"storybook": "https://zainadeel.github.io/compomo/?path=/story/scroll-overlay",
|
|
5606
|
+
"source": "src/wc/components/ScrollOverlay/ScrollOverlay.tsx",
|
|
5607
|
+
"intentStatus": "complete",
|
|
5608
|
+
"intent": {
|
|
5609
|
+
"audience": "general",
|
|
5610
|
+
"status": "experimental",
|
|
5611
|
+
"summary": "Generic scroll owner for content that moves behind a persistent footer action or composer with an always-active alpha fade.",
|
|
5612
|
+
"useWhen": [
|
|
5613
|
+
"A bounded region owns scrolling while footer actions remain overlaid and continuously visible.",
|
|
5614
|
+
"The final content must clear a live-height footer while earlier content can move behind it."
|
|
5615
|
+
],
|
|
5616
|
+
"avoidWhen": [
|
|
5617
|
+
"The footer belongs in normal document flow rather than overlaying content.",
|
|
5618
|
+
"Another component already owns scrolling and cannot delegate its scrollport to this component."
|
|
5619
|
+
],
|
|
5620
|
+
"commonlyComposedWith": [
|
|
5621
|
+
"component:ds-button-filled",
|
|
5622
|
+
"component:ds-message-composer"
|
|
5623
|
+
],
|
|
5624
|
+
"accessibility": [
|
|
5625
|
+
"Provide scrollLabel when the scrollport needs its own named, keyboard-focusable region.",
|
|
5626
|
+
"Keep footer actions keyboard accessible and explicitly named; the fade is decorative and never intercepts pointer input."
|
|
5627
|
+
],
|
|
5628
|
+
"states": [
|
|
5629
|
+
"The alpha mask remains active at every scroll position and moves in content coordinates so it stays pinned behind the footer without masking native scrollbars.",
|
|
5630
|
+
"The component measures the complete overlay for end clearance, measures its visible child for fade depth, and begins the fade 8px before that visible content.",
|
|
5631
|
+
"An md 32px footer action with 8px bottom inset therefore produces a 48px fade; variable-height composers produce a correspondingly taller measured fade."
|
|
5632
|
+
],
|
|
5633
|
+
"responsiveBehavior": [
|
|
5634
|
+
"The scrollport and overlay fill the available width and height; the owner supplies responsive sizing and overlay insets."
|
|
5635
|
+
],
|
|
5636
|
+
"frameworkCaveats": {
|
|
5637
|
+
"customElements": [
|
|
5638
|
+
"Place scrollable content in the default slot and one footer wrapper in the overlay slot; use dsScroll only when the application needs position data."
|
|
5639
|
+
],
|
|
5640
|
+
"react": [
|
|
5641
|
+
"Use DsScrollOverlay with ordinary children plus an element carrying slot=\"overlay\"."
|
|
5642
|
+
],
|
|
5643
|
+
"angular": [
|
|
5644
|
+
"Import DsScrollOverlay and project the persistent footer wrapper with slot=\"overlay\"."
|
|
5645
|
+
]
|
|
5646
|
+
},
|
|
5647
|
+
"references": [
|
|
5648
|
+
{
|
|
5649
|
+
"label": "Storybook examples",
|
|
5650
|
+
"path": "src/wc/components/ScrollOverlay/ScrollOverlay.stories.ts"
|
|
5651
|
+
}
|
|
5652
|
+
]
|
|
5653
|
+
},
|
|
5654
|
+
"props": {
|
|
5655
|
+
"scrollLabel": {
|
|
5656
|
+
"type": "string | undefined",
|
|
5657
|
+
"required": false
|
|
5658
|
+
}
|
|
5659
|
+
},
|
|
5660
|
+
"events": [
|
|
5661
|
+
{
|
|
5662
|
+
"name": "dsScroll",
|
|
5663
|
+
"detail": "ScrollOverlayScrollDetail"
|
|
5664
|
+
}
|
|
5665
|
+
],
|
|
5666
|
+
"slots": [],
|
|
5667
|
+
"exports": {
|
|
5668
|
+
"customElement": "ds-scroll-overlay",
|
|
5669
|
+
"react": "DsScrollOverlay",
|
|
5670
|
+
"angular": "DsScrollOverlay"
|
|
5671
|
+
}
|
|
5672
|
+
},
|
|
5673
|
+
"dependencies": [
|
|
5674
|
+
"@ds-mo/ui",
|
|
5675
|
+
"@ds-mo/tokens"
|
|
5676
|
+
],
|
|
5677
|
+
"registryDependencies": []
|
|
5678
|
+
},
|
|
5410
5679
|
{
|
|
5411
5680
|
"name": "select",
|
|
5412
5681
|
"title": "Select",
|
|
@@ -6279,7 +6548,7 @@
|
|
|
6279
6548
|
{
|
|
6280
6549
|
"name": "shell-page",
|
|
6281
6550
|
"title": "ShellPage",
|
|
6282
|
-
"description": "The standard routed-page boundary inside ShellApp, owning sticky BarTitle placement, container-aware
|
|
6551
|
+
"description": "The standard routed-page boundary inside ShellApp, owning sticky BarTitle or BarWorkflow placement, container-aware BarTitle variants, stable scroll compaction, and optional page-content inset without creating a nested scroll container.",
|
|
6283
6552
|
"type": "registry:ui",
|
|
6284
6553
|
"meta": {
|
|
6285
6554
|
"library": "@ds-mo/ui",
|
|
@@ -6290,10 +6559,11 @@
|
|
|
6290
6559
|
"intent": {
|
|
6291
6560
|
"audience": "general",
|
|
6292
6561
|
"status": "stable",
|
|
6293
|
-
"summary": "The standard routed-page boundary inside ShellApp, owning sticky BarTitle placement, container-aware
|
|
6562
|
+
"summary": "The standard routed-page boundary inside ShellApp, owning sticky BarTitle or BarWorkflow placement, container-aware BarTitle variants, stable scroll compaction, and optional page-content inset without creating a nested scroll container.",
|
|
6294
6563
|
"useWhen": [
|
|
6295
6564
|
"Rendering a standard routed page inside ShellApp's default content region.",
|
|
6296
6565
|
"BarTitle should expand at a roomy page top, compact after scroll, or use constrained action layout when the page column narrows.",
|
|
6566
|
+
"BarWorkflow needs sticky page-level placement while remaining compact.",
|
|
6297
6567
|
"Pages need consistent content gutters with an explicit full-bleed option."
|
|
6298
6568
|
],
|
|
6299
6569
|
"avoidWhen": [
|
|
@@ -6316,6 +6586,7 @@
|
|
|
6316
6586
|
"commonlyComposedWith": [
|
|
6317
6587
|
"component:ds-shell-app",
|
|
6318
6588
|
"component:ds-bar-title",
|
|
6589
|
+
"component:ds-bar-workflow",
|
|
6319
6590
|
"component:ds-tab-group"
|
|
6320
6591
|
],
|
|
6321
6592
|
"patterns": [
|
|
@@ -6323,7 +6594,7 @@
|
|
|
6323
6594
|
],
|
|
6324
6595
|
"accessibility": [
|
|
6325
6596
|
"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.",
|
|
6597
|
+
"Provide exactly one BarTitle or BarWorkflow through the header slot so the page has one h1.",
|
|
6327
6598
|
"Keep loading, empty, validation, error, progress, success, and failure communication in the default product-content slot.",
|
|
6328
6599
|
"Responsive variant changes preserve the same heading, controls, accessible names, and keyboard focus targets."
|
|
6329
6600
|
],
|
|
@@ -6331,7 +6602,7 @@
|
|
|
6331
6602
|
"headerPresentation=auto selects expanded, compact, or constrained from ShellPage's own inline capacity and scroll position.",
|
|
6332
6603
|
"expanded, compact, and constrained are explicit overrides for exceptional layouts and deterministic examples.",
|
|
6333
6604
|
"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."
|
|
6605
|
+
"The required header slot accepts one BarTitle or BarWorkflow. The default slot owns router output and all page product content."
|
|
6335
6606
|
],
|
|
6336
6607
|
"responsiveBehavior": [
|
|
6337
6608
|
"ShellPage observes its own rendered width instead of viewport media queries or ShellApp desktop/tablet modes.",
|
|
@@ -6339,19 +6610,20 @@
|
|
|
6339
6610
|
"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
6611
|
"Token-based capacity bands use hysteresis so opening tools or resizing navigation cannot oscillate near a boundary.",
|
|
6341
6612
|
"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."
|
|
6613
|
+
"ShellPage relies on ShellApp's content scroller and never introduces nested scrolling.",
|
|
6614
|
+
"BarWorkflow remains compact and is not assigned BarTitle's capacity or scroll variants."
|
|
6343
6615
|
],
|
|
6344
6616
|
"frameworkCaveats": {
|
|
6345
6617
|
"customElements": [
|
|
6346
|
-
"Import ShellPage
|
|
6618
|
+
"Import ShellPage with BarTitle or BarWorkflow, place one header in slot=header, and render route content as default children.",
|
|
6347
6619
|
"Do not set BarTitle.variant while ShellPage owns headerPresentation."
|
|
6348
6620
|
],
|
|
6349
6621
|
"react": [
|
|
6350
|
-
"Render DsBarTitle with slot=header inside DsShellPage and keep routed content as the remaining children.",
|
|
6622
|
+
"Render DsBarTitle or DsBarWorkflow with slot=header inside DsShellPage and keep routed content as the remaining children.",
|
|
6351
6623
|
"Use contentInset none only for deliberately full-bleed page products."
|
|
6352
6624
|
],
|
|
6353
6625
|
"angular": [
|
|
6354
|
-
"Import the generated standalone DsShellPage
|
|
6626
|
+
"Import the generated standalone DsShellPage adapter with DsBarTitle or DsBarWorkflow, preserve slot=header, and place router-outlet in the ShellPage default slot.",
|
|
6355
6627
|
"Do not add another overflow auto wrapper around the routed page."
|
|
6356
6628
|
]
|
|
6357
6629
|
},
|