@ds-mo/ui 12.2.0 → 12.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +8 -2
- package/dist/.build-stamp +1 -1
- package/dist/agent-patterns.json +6 -6
- package/dist/agent.json +530 -25
- package/dist/angular/ds-bar-title.d.ts +7 -1
- package/dist/angular/ds-bar-title.js +7 -4
- package/dist/angular/ds-breadcrumb.d.ts +19 -0
- package/dist/angular/ds-breadcrumb.js +42 -0
- package/dist/angular/ds-card-data-viz-bar.d.ts +18 -0
- package/dist/angular/ds-card-data-viz-bar.js +42 -0
- package/dist/angular/ds-card-data-viz-line.d.ts +18 -0
- package/dist/angular/ds-card-data-viz-line.js +42 -0
- package/dist/angular/ds-chart-bar-stacked.d.ts +12 -0
- package/dist/angular/ds-chart-bar-stacked.js +38 -0
- package/dist/angular/ds-chart-legend.d.ts +1 -1
- package/dist/angular/ds-chart-legend.js +3 -3
- package/dist/angular/ds-shell-page.d.ts +1 -1
- package/dist/angular/ds-shell-page.js +3 -3
- package/dist/angular/index.d.ts +1 -1
- package/dist/angular/index.js +4 -0
- package/dist/angular/proxies.d.ts +4 -0
- package/dist/angular/proxies.js +4 -0
- package/dist/components/ds-agent-activity.js +1 -1
- package/dist/components/ds-agent-response.js +1 -1
- package/dist/components/ds-agent-source-list.js +1 -1
- package/dist/components/ds-agent-tool-call.js +1 -1
- package/dist/components/ds-attachment-list.js +1 -1
- package/dist/components/ds-badge.js +1 -1
- package/dist/components/ds-bar-nav.js +1 -1
- package/dist/components/ds-bar-title.js +1 -1
- package/dist/components/ds-bar-title.js.map +1 -1
- package/dist/components/ds-bar-workflow.js +1 -1
- package/dist/components/ds-breadcrumb.d.ts +11 -0
- package/dist/components/ds-breadcrumb.js +2 -0
- package/dist/components/ds-breadcrumb.js.map +1 -0
- package/dist/components/ds-button-filled.js +1 -1
- package/dist/components/ds-button-unfilled.js +1 -1
- package/dist/components/ds-card-data-viz-bar.d.ts +11 -0
- package/dist/components/ds-card-data-viz-bar.js +2 -0
- package/dist/components/ds-card-data-viz-bar.js.map +1 -0
- package/dist/components/ds-card-data-viz-donut.js +1 -1
- package/dist/components/ds-card-data-viz-donut.js.map +1 -1
- package/dist/components/ds-card-data-viz-line.d.ts +11 -0
- package/dist/components/ds-card-data-viz-line.js +2 -0
- package/dist/components/ds-card-data-viz-line.js.map +1 -0
- package/dist/components/ds-card-setting.js +1 -1
- package/dist/components/ds-card-setting.js.map +1 -1
- package/dist/components/ds-card-shell-data-viz.js +1 -1
- package/dist/components/ds-chart-bar-stacked.d.ts +11 -0
- package/dist/components/ds-chart-bar-stacked.js +2 -0
- package/dist/components/ds-chart-bar-stacked.js.map +1 -0
- package/dist/components/ds-chart-bar.js +1 -1
- package/dist/components/ds-chart-bar.js.map +1 -1
- package/dist/components/ds-chart-donut.js +1 -1
- package/dist/components/ds-chart-legend.js +1 -1
- package/dist/components/ds-chart-legend.js.map +1 -1
- package/dist/components/ds-chart-line.js +1 -1
- package/dist/components/ds-chart-line.js.map +1 -1
- package/dist/components/ds-checkbox.js +1 -1
- package/dist/components/ds-chip.js +1 -1
- package/dist/components/ds-code-block.js +1 -1
- package/dist/components/ds-conversation-list-item.js +1 -1
- package/dist/components/ds-conversation-list-item.js.map +1 -1
- package/dist/components/ds-conversation-list-section.js +1 -1
- package/dist/components/ds-conversation-list.js +1 -1
- package/dist/components/ds-divider.js +1 -1
- package/dist/components/ds-empty-state.js +1 -1
- package/dist/components/ds-field.js +1 -1
- package/dist/components/ds-input.js +1 -1
- package/dist/components/ds-markdown.js +1 -1
- package/dist/components/ds-menu.js +1 -1
- package/dist/components/ds-message-bubble.js +1 -1
- package/dist/components/ds-message-bubble.js.map +1 -1
- package/dist/components/ds-message-composer.js +1 -1
- package/dist/components/ds-message-scroller.js +1 -1
- package/dist/components/ds-message-scroller.js.map +1 -1
- package/dist/components/ds-message.js +1 -1
- package/dist/components/ds-modal.js +1 -1
- package/dist/components/ds-panel-nav.js +1 -1
- package/dist/components/ds-panel-sub-nav.js +1 -1
- package/dist/components/ds-panel-tool-header.js +1 -1
- package/dist/components/ds-panel-tool-search.js +1 -1
- package/dist/components/ds-panel-tools.js +1 -1
- package/dist/components/ds-radio.js +1 -1
- package/dist/components/ds-scroll-overlay.js +1 -1
- package/dist/components/ds-scroll-overlay.js.map +1 -1
- package/dist/components/ds-select-multi.js +1 -1
- package/dist/components/ds-select-multi.js.map +1 -1
- package/dist/components/ds-select.js +1 -1
- package/dist/components/ds-select.js.map +1 -1
- package/dist/components/ds-shell-app.js +1 -1
- package/dist/components/ds-shell-app.js.map +1 -1
- package/dist/components/ds-shell-gradient-picker.js +1 -1
- package/dist/components/ds-shell-gradient-swatch.js +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-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/ds-typing-indicator.js.map +1 -1
- package/dist/components/{p-DcGpdIlT.js → p-9dQQSgwT.js} +2 -2
- package/dist/components/p-B3rbhRAk.js +2 -0
- package/dist/components/p-B3rbhRAk.js.map +1 -0
- package/dist/components/{p-BWUTr_XN.js → p-BJMRBHKW.js} +2 -2
- package/dist/components/p-BJMRBHKW.js.map +1 -0
- package/dist/components/p-BVV_rlIP.js +2 -0
- package/dist/components/p-BVV_rlIP.js.map +1 -0
- package/dist/components/{p-GMDGgtY8.js → p-BhxwpOH8.js} +2 -2
- package/dist/components/{p-2W-ZjZCR.js → p-Bi_bxbih.js} +2 -2
- package/dist/components/{p-CG5EX4NW.js → p-BtEjlcB9.js} +2 -2
- package/dist/components/{p-C0_8K4y7.js → p-BwGnhInj.js} +2 -2
- package/dist/components/p-BwGnhInj.js.map +1 -0
- package/dist/components/p-C0NPJ0h2.js +2 -0
- package/dist/components/{p-BpA9uYKX.js.map → p-C0NPJ0h2.js.map} +1 -1
- package/dist/components/{p-D6jK2Hyi.js → p-C7bZ-jiU.js} +2 -2
- package/dist/components/p-CH3w-P2H.js +2 -0
- package/dist/components/p-CH3w-P2H.js.map +1 -0
- package/dist/components/{p-DOCKtrS4.js → p-CH6cNXXF.js} +2 -2
- package/dist/components/p-CWlh7HAg.js +2 -0
- package/dist/components/{p-8OOCLGph.js.map → p-CWlh7HAg.js.map} +1 -1
- package/dist/components/{p-BE_CDJeL.js → p-CY19gMiz.js} +2 -2
- package/dist/components/p-C_ewSXTT.js +2 -0
- package/dist/components/p-C_ewSXTT.js.map +1 -0
- package/dist/components/{p-CHkI3oIS.js → p-Ce52yVXF.js} +2 -2
- package/dist/components/{p-xY3TjBF5.js → p-CoYFJD-w.js} +2 -2
- package/dist/components/{p-DBi1bmOL.js → p-Cuw2Lo2g.js} +2 -2
- package/dist/components/{p-BRLDJmkh.js → p-D-xttdpn.js} +2 -2
- package/dist/components/{p-CCHqsF_H.js → p-D3DYxbC5.js} +2 -2
- package/dist/components/{p-Cxpl-rzP.js → p-DC7yOUQx.js} +2 -2
- package/dist/components/{p-CNffejay.js → p-DSa0Hnd3.js} +2 -2
- package/dist/components/p-DXewjzkM.js +2 -0
- package/dist/components/p-DXewjzkM.js.map +1 -0
- package/dist/components/{p-DyGB97Oy.js → p-DYqReipj.js} +2 -2
- package/dist/components/{p-ky1msbJ8.js → p-DjPZxzIG.js} +2 -2
- package/dist/components/{p-ky1msbJ8.js.map → p-DjPZxzIG.js.map} +1 -1
- package/dist/components/p-J6xK6Ihq.js +2 -0
- package/dist/components/p-jCWtxthA.js +2 -0
- package/dist/components/{p-XgIQ3oI_.js.map → p-jCWtxthA.js.map} +1 -1
- package/dist/docs/components.json +956 -145
- package/dist/lib/utils/index.js +3 -1
- package/dist/lib/utils/index.js.map +2 -2
- package/dist/mcp/cli.js +142 -18
- package/dist/mcp-data/registry/agent-source-list.json +1 -1
- package/dist/mcp-data/registry/bar-title.json +68 -14
- package/dist/mcp-data/registry/breadcrumb.json +205 -0
- package/dist/mcp-data/registry/card-data-viz-bar.json +212 -0
- package/dist/mcp-data/registry/card-data-viz-line.json +206 -0
- package/dist/mcp-data/registry/card-shell-data-viz.json +7 -0
- package/dist/mcp-data/registry/chart-bar-stacked.json +225 -0
- package/dist/mcp-data/registry/chart-bar.json +9 -2
- package/dist/mcp-data/registry/chart-legend.json +29 -3
- package/dist/mcp-data/registry/chart-line.json +4 -2
- package/dist/mcp-data/registry/conversation-list-item.json +2 -2
- package/dist/mcp-data/registry/message-scroller.json +4 -2
- package/dist/mcp-data/registry/message.json +3 -2
- package/dist/mcp-data/registry/registry.json +541 -24
- package/dist/mcp-data/registry/shell-page.json +31 -13
- package/dist/mcp-data/registry/text.json +1 -1
- package/dist/mcp-data/registry/typing-indicator.json +7 -7
- package/dist/react/components.d.ts +4 -0
- package/dist/react/components.js +4 -0
- package/dist/react/ds-bar-title.d.ts +2 -1
- package/dist/react/ds-bar-title.js +1 -0
- package/dist/react/ds-breadcrumb.d.ts +12 -0
- package/dist/react/ds-breadcrumb.js +12 -0
- package/dist/react/ds-card-data-viz-bar.d.ts +12 -0
- package/dist/react/ds-card-data-viz-bar.js +12 -0
- package/dist/react/ds-card-data-viz-line.d.ts +12 -0
- package/dist/react/ds-card-data-viz-line.js +12 -0
- package/dist/react/ds-chart-bar-stacked.d.ts +9 -0
- package/dist/react/ds-chart-bar-stacked.js +12 -0
- package/dist/styles/prose.css +1 -0
- package/dist/types/components/BarTitle/BarTitle.d.ts +13 -1
- package/dist/types/components/Breadcrumb/Breadcrumb.d.ts +31 -0
- package/dist/types/components/Breadcrumb/breadcrumb-types.d.ts +17 -0
- package/dist/types/components/CardDataVizBar/CardDataVizBar.d.ts +24 -0
- package/dist/types/components/CardDataVizBar/index.d.ts +2 -0
- package/dist/types/components/CardDataVizLine/CardDataVizLine.d.ts +24 -0
- package/dist/types/components/CardDataVizLine/index.d.ts +2 -0
- package/dist/types/components/ChartBarStacked/ChartBarStacked.d.ts +15 -0
- package/dist/types/components/ChartBarStacked/index.d.ts +3 -0
- package/dist/types/components/ChartLegend/ChartLegend.d.ts +3 -0
- package/dist/types/components/ShellPage/ShellPage.d.ts +19 -7
- package/dist/types/components/ShellPage/shell-page-responsive.d.ts +0 -8
- package/dist/types/components/TypingIndicator/TypingIndicator.d.ts +1 -1
- package/dist/types/components.d.ts +339 -10
- package/package.json +1 -1
- package/dist/components/p-8OOCLGph.js +0 -2
- package/dist/components/p-B8CubPgQ.js +0 -2
- package/dist/components/p-BWUTr_XN.js.map +0 -1
- package/dist/components/p-BpA9uYKX.js +0 -2
- package/dist/components/p-C0_8K4y7.js.map +0 -1
- package/dist/components/p-CA3kLO7K.js +0 -2
- package/dist/components/p-CA3kLO7K.js.map +0 -1
- package/dist/components/p-CzBnvtcz.js +0 -2
- package/dist/components/p-CzBnvtcz.js.map +0 -1
- package/dist/components/p-XgIQ3oI_.js +0 -2
- /package/dist/components/{p-DcGpdIlT.js.map → p-9dQQSgwT.js.map} +0 -0
- /package/dist/components/{p-GMDGgtY8.js.map → p-BhxwpOH8.js.map} +0 -0
- /package/dist/components/{p-2W-ZjZCR.js.map → p-Bi_bxbih.js.map} +0 -0
- /package/dist/components/{p-CG5EX4NW.js.map → p-BtEjlcB9.js.map} +0 -0
- /package/dist/components/{p-D6jK2Hyi.js.map → p-C7bZ-jiU.js.map} +0 -0
- /package/dist/components/{p-DOCKtrS4.js.map → p-CH6cNXXF.js.map} +0 -0
- /package/dist/components/{p-BE_CDJeL.js.map → p-CY19gMiz.js.map} +0 -0
- /package/dist/components/{p-CHkI3oIS.js.map → p-Ce52yVXF.js.map} +0 -0
- /package/dist/components/{p-xY3TjBF5.js.map → p-CoYFJD-w.js.map} +0 -0
- /package/dist/components/{p-DBi1bmOL.js.map → p-Cuw2Lo2g.js.map} +0 -0
- /package/dist/components/{p-BRLDJmkh.js.map → p-D-xttdpn.js.map} +0 -0
- /package/dist/components/{p-CCHqsF_H.js.map → p-D3DYxbC5.js.map} +0 -0
- /package/dist/components/{p-Cxpl-rzP.js.map → p-DC7yOUQx.js.map} +0 -0
- /package/dist/components/{p-CNffejay.js.map → p-DSa0Hnd3.js.map} +0 -0
- /package/dist/components/{p-DyGB97Oy.js.map → p-DYqReipj.js.map} +0 -0
- /package/dist/components/{p-B8CubPgQ.js.map → p-J6xK6Ihq.js.map} +0 -0
|
@@ -815,7 +815,7 @@
|
|
|
815
815
|
{
|
|
816
816
|
"name": "bar-title",
|
|
817
817
|
"title": "BarTitle",
|
|
818
|
-
"description": "Page-level title chrome with optional route
|
|
818
|
+
"description": "Page-level title chrome with an optional expanded route breadcrumb, compact Back action, supporting description, inline active-section menu, one primary action, grouped overflow actions, and explicit expanded, compact, or constrained variants.",
|
|
819
819
|
"type": "registry:ui",
|
|
820
820
|
"meta": {
|
|
821
821
|
"library": "@ds-mo/ui",
|
|
@@ -826,11 +826,11 @@
|
|
|
826
826
|
"intent": {
|
|
827
827
|
"audience": "general",
|
|
828
828
|
"status": "stable",
|
|
829
|
-
"summary": "Page-level title chrome with optional route
|
|
829
|
+
"summary": "Page-level title chrome with an optional expanded route breadcrumb, compact Back action, supporting description, inline active-section menu, one primary action, grouped overflow actions, and explicit expanded, compact, or constrained variants.",
|
|
830
830
|
"useWhen": [
|
|
831
831
|
"A top-level page needs one h1 above its content.",
|
|
832
832
|
"A list or detail page has multiple route-level sections that belong in the inline active-section menu.",
|
|
833
|
-
"A detail page needs a page-level Back action.",
|
|
833
|
+
"A detail page needs route ancestors in expanded presentation and a page-level Back action in compact chrome.",
|
|
834
834
|
"A page needs one primary action plus optional secondary or destructive overflow commands."
|
|
835
835
|
],
|
|
836
836
|
"avoidWhen": [
|
|
@@ -861,6 +861,7 @@
|
|
|
861
861
|
"component:ds-shell-page",
|
|
862
862
|
"component:ds-button-filled",
|
|
863
863
|
"component:ds-button-unfilled",
|
|
864
|
+
"component:ds-breadcrumb",
|
|
864
865
|
"component:ds-menu",
|
|
865
866
|
"component:ds-text"
|
|
866
867
|
],
|
|
@@ -869,7 +870,8 @@
|
|
|
869
870
|
],
|
|
870
871
|
"accessibility": [
|
|
871
872
|
"Provide one concise heading; BarTitle renders exactly one h1 and changes only its visual recipe between variants.",
|
|
872
|
-
"Give Back a destination-specific accessible name such as Back to Drivers
|
|
873
|
+
"Give compact Back a destination-specific accessible name such as Back to Drivers and handle dsBack in the route owner.",
|
|
874
|
+
"Provide ordered breadcrumb items for deeper expanded paths and handle dsBreadcrumbSelect when native href navigation is not used; backLabel remains the single-parent expanded fallback.",
|
|
873
875
|
"Keep value synchronized with the current child route; dsSectionChange returns the selected section id.",
|
|
874
876
|
"Section and overflow triggers expose menu relationships and restore focus after selection or dismissal.",
|
|
875
877
|
"Use one filled primary action in the page decision area and mark destructive overflow actions explicitly."
|
|
@@ -878,7 +880,8 @@
|
|
|
878
880
|
"Omitting Back, sections, primaryAction, and actions produces the top-level title-only header.",
|
|
879
881
|
"Two or more selectable sections add the inline section trigger; one section does not render a redundant menu.",
|
|
880
882
|
"Dividers in sections or actions create separate Menu groups without becoming selectable rows.",
|
|
881
|
-
"
|
|
883
|
+
"The overflow trigger uses its bordered treatment whenever the primary action is visible beside it; overflow-only and auto-collapsed-primary presentations keep the trigger borderless.",
|
|
884
|
+
"expanded renders the larger heading, optional description, inset divider, and a full-width caption breadcrumb row above the title. The breadcrumb begins after 32px top padding; the following title and right-side actions share one top alignment. Compact renders 48px chrome with the existing icon Back action; constrained uses compact chrome and moves an auto-collapse primary action into overflow.",
|
|
882
885
|
"primaryAction collapse defaults to auto. Use never for exceptional actions whose hierarchy must remain visible in constrained layouts."
|
|
883
886
|
],
|
|
884
887
|
"responsiveBehavior": [
|
|
@@ -889,15 +892,15 @@
|
|
|
889
892
|
],
|
|
890
893
|
"frameworkCaveats": {
|
|
891
894
|
"customElements": [
|
|
892
|
-
"Assign sections, primaryAction, and actions as JavaScript properties and replace array or object identities when controlled state changes.",
|
|
893
|
-
"Handle dsBack
|
|
895
|
+
"Assign breadcrumbs, sections, primaryAction, and actions as JavaScript properties and replace array or object identities when controlled state changes.",
|
|
896
|
+
"Handle dsBack for compact navigation and dsBreadcrumbSelect for application-owned expanded breadcrumb navigation, update value after dsSectionChange, and execute product commands from dsAction."
|
|
894
897
|
],
|
|
895
898
|
"react": [
|
|
896
|
-
"Pass
|
|
899
|
+
"Pass breadcrumb, section, and action arrays directly to DsBarTitle and keep value controlled from route state.",
|
|
897
900
|
"Place DsBarTitle in DsShellPage with slot=header when automatic page behavior is required."
|
|
898
901
|
],
|
|
899
902
|
"angular": [
|
|
900
|
-
"Bind complex values on the standalone DsBarTitle adapter and handle
|
|
903
|
+
"Bind complex values on the standalone DsBarTitle adapter and handle Back, breadcrumb, section, and action intent events in the route shell.",
|
|
901
904
|
"Place ds-bar-title in ds-shell-page with slot=header; do not render router-outlet inside BarTitle."
|
|
902
905
|
]
|
|
903
906
|
},
|
|
@@ -933,6 +936,14 @@
|
|
|
933
936
|
"type": "string",
|
|
934
937
|
"required": false
|
|
935
938
|
},
|
|
939
|
+
"breadcrumbAriaLabel": {
|
|
940
|
+
"type": "string",
|
|
941
|
+
"required": false
|
|
942
|
+
},
|
|
943
|
+
"breadcrumbs": {
|
|
944
|
+
"type": "BreadcrumbItem[]",
|
|
945
|
+
"required": false
|
|
946
|
+
},
|
|
936
947
|
"description": {
|
|
937
948
|
"type": "string",
|
|
938
949
|
"required": false
|
|
@@ -975,6 +986,10 @@
|
|
|
975
986
|
"name": "dsBack",
|
|
976
987
|
"detail": "MouseEvent"
|
|
977
988
|
},
|
|
989
|
+
{
|
|
990
|
+
"name": "dsBreadcrumbSelect",
|
|
991
|
+
"detail": "BreadcrumbSelectDetail"
|
|
992
|
+
},
|
|
978
993
|
{
|
|
979
994
|
"name": "dsSectionChange",
|
|
980
995
|
"detail": "string"
|
|
@@ -993,6 +1008,7 @@
|
|
|
993
1008
|
"@ds-mo/icons"
|
|
994
1009
|
],
|
|
995
1010
|
"registryDependencies": [
|
|
1011
|
+
"breadcrumb",
|
|
996
1012
|
"button-filled",
|
|
997
1013
|
"button-unfilled",
|
|
998
1014
|
"icon",
|
|
@@ -1162,6 +1178,122 @@
|
|
|
1162
1178
|
"tooltip"
|
|
1163
1179
|
]
|
|
1164
1180
|
},
|
|
1181
|
+
{
|
|
1182
|
+
"name": "breadcrumb",
|
|
1183
|
+
"title": "Breadcrumb",
|
|
1184
|
+
"description": "Compact hierarchical page navigation with native links or application-owned selection, optional current-page semantics, and slash separators.",
|
|
1185
|
+
"type": "registry:ui",
|
|
1186
|
+
"meta": {
|
|
1187
|
+
"library": "@ds-mo/ui",
|
|
1188
|
+
"distribution": "npm",
|
|
1189
|
+
"storybook": "https://zainadeel.github.io/compomo/?path=/story/breadcrumb",
|
|
1190
|
+
"source": "src/wc/components/Breadcrumb/Breadcrumb.tsx",
|
|
1191
|
+
"intentStatus": "complete",
|
|
1192
|
+
"intent": {
|
|
1193
|
+
"audience": "general",
|
|
1194
|
+
"status": "stable",
|
|
1195
|
+
"summary": "Compact hierarchical page navigation with native links or application-owned selection, optional current-page semantics, and slash separators.",
|
|
1196
|
+
"useWhen": [
|
|
1197
|
+
"A page needs to expose its hierarchical ancestors above the current page title.",
|
|
1198
|
+
"Users need to move directly to a broader page in the current route hierarchy.",
|
|
1199
|
+
"BarTitle expanded presentation needs an ancestor path instead of a directional Back button."
|
|
1200
|
+
],
|
|
1201
|
+
"avoidWhen": [
|
|
1202
|
+
"The navigation represents primary application destinations; use PanelNav or BarNav.",
|
|
1203
|
+
"The choices switch peer views within the current page; use TabGroup or the BarTitle section selector.",
|
|
1204
|
+
"Only a directional return command is needed in compact chrome; use the owning header's Back action.",
|
|
1205
|
+
"The path would repeat the same current-page label already communicated by a nearby h1 without adding useful ancestors."
|
|
1206
|
+
],
|
|
1207
|
+
"alternatives": [
|
|
1208
|
+
{
|
|
1209
|
+
"when": "The title and breadcrumb belong to responsive page chrome with page-level actions.",
|
|
1210
|
+
"component": "component:ds-bar-title",
|
|
1211
|
+
"reason": "BarTitle composes Breadcrumb in expanded mode and preserves compact Back behavior."
|
|
1212
|
+
},
|
|
1213
|
+
{
|
|
1214
|
+
"when": "A small set of peer content views should remain directly selectable.",
|
|
1215
|
+
"component": "component:ds-tab-group",
|
|
1216
|
+
"reason": "TabGroup communicates peer selection rather than route ancestry."
|
|
1217
|
+
}
|
|
1218
|
+
],
|
|
1219
|
+
"commonlyComposedWith": [
|
|
1220
|
+
"component:ds-bar-title",
|
|
1221
|
+
"component:ds-text",
|
|
1222
|
+
"component:ds-shell-page"
|
|
1223
|
+
],
|
|
1224
|
+
"accessibility": [
|
|
1225
|
+
"The component renders a named navigation landmark containing an ordered list.",
|
|
1226
|
+
"Provide href for native navigation or handle dsSelect when the application router owns navigation.",
|
|
1227
|
+
"Mark at most one item current; it renders without interaction and exposes aria-current=page.",
|
|
1228
|
+
"Visible caption labels use secondary foreground and slash separators are decorative and hidden from assistive technology.",
|
|
1229
|
+
"Every interactive item remains keyboard reachable and receives the shared focus ring."
|
|
1230
|
+
],
|
|
1231
|
+
"states": [
|
|
1232
|
+
"Items with href render native anchors; items without href render buttons and emit the same dsSelect detail.",
|
|
1233
|
+
"Preventing dsSelect cancels native anchor navigation.",
|
|
1234
|
+
"A current item is static text and never emits selection.",
|
|
1235
|
+
"Links have no resting underline and add a quaternary-foreground solid underline on hover; focus remains communicated by the shared focus ring."
|
|
1236
|
+
],
|
|
1237
|
+
"responsiveBehavior": [
|
|
1238
|
+
"The path stays on one caption line and truncates long labels within the available width.",
|
|
1239
|
+
"Width is protected newest-to-oldest: the oldest ancestor collapses to a literal ellipsis before the next ancestor yields width, and the current location truncates only after every ancestor reaches its minimum.",
|
|
1240
|
+
"A fully collapsed item keeps its complete label available to assistive technology while rendering only the literal ellipsis visually.",
|
|
1241
|
+
"Separators remain visible while labels yield width."
|
|
1242
|
+
],
|
|
1243
|
+
"frameworkCaveats": {
|
|
1244
|
+
"customElements": [
|
|
1245
|
+
"Assign items as a JavaScript property and replace its array identity when the route changes.",
|
|
1246
|
+
"Use relative or absolute href values for native navigation; omit href when the host router handles dsSelect."
|
|
1247
|
+
],
|
|
1248
|
+
"react": [
|
|
1249
|
+
"Pass items to DsBreadcrumb and handle onDsSelect when navigation is application-owned."
|
|
1250
|
+
],
|
|
1251
|
+
"angular": [
|
|
1252
|
+
"Bind items on the standalone DsBreadcrumb adapter and handle dsSelect when navigation is application-owned."
|
|
1253
|
+
]
|
|
1254
|
+
},
|
|
1255
|
+
"references": [
|
|
1256
|
+
{
|
|
1257
|
+
"label": "Storybook examples",
|
|
1258
|
+
"path": "src/wc/components/Breadcrumb/Breadcrumb.stories.ts"
|
|
1259
|
+
},
|
|
1260
|
+
{
|
|
1261
|
+
"label": "Expanded page-header composition",
|
|
1262
|
+
"path": "src/wc/components/BarTitle/BarTitle.tsx"
|
|
1263
|
+
}
|
|
1264
|
+
]
|
|
1265
|
+
},
|
|
1266
|
+
"props": {
|
|
1267
|
+
"ariaLabel": {
|
|
1268
|
+
"type": "string",
|
|
1269
|
+
"required": false
|
|
1270
|
+
},
|
|
1271
|
+
"items": {
|
|
1272
|
+
"type": "BreadcrumbItem[]",
|
|
1273
|
+
"required": false
|
|
1274
|
+
}
|
|
1275
|
+
},
|
|
1276
|
+
"events": [
|
|
1277
|
+
{
|
|
1278
|
+
"name": "dsSelect",
|
|
1279
|
+
"detail": "BreadcrumbSelectDetail"
|
|
1280
|
+
}
|
|
1281
|
+
],
|
|
1282
|
+
"slots": [],
|
|
1283
|
+
"exports": {
|
|
1284
|
+
"customElement": "ds-breadcrumb",
|
|
1285
|
+
"react": "DsBreadcrumb",
|
|
1286
|
+
"angular": "DsBreadcrumb"
|
|
1287
|
+
}
|
|
1288
|
+
},
|
|
1289
|
+
"dependencies": [
|
|
1290
|
+
"@ds-mo/ui",
|
|
1291
|
+
"@ds-mo/tokens"
|
|
1292
|
+
],
|
|
1293
|
+
"registryDependencies": [
|
|
1294
|
+
"text"
|
|
1295
|
+
]
|
|
1296
|
+
},
|
|
1165
1297
|
{
|
|
1166
1298
|
"name": "button-filled",
|
|
1167
1299
|
"title": "ButtonFilled",
|
|
@@ -1527,6 +1659,123 @@
|
|
|
1527
1659
|
"text"
|
|
1528
1660
|
]
|
|
1529
1661
|
},
|
|
1662
|
+
{
|
|
1663
|
+
"name": "card-data-viz-bar",
|
|
1664
|
+
"title": "CardDataVizBar",
|
|
1665
|
+
"description": "Canonical bar-chart dashboard card with shared data-viz chrome, a filter action, a fill chart region, and an optional static legend.",
|
|
1666
|
+
"type": "registry:ui",
|
|
1667
|
+
"meta": {
|
|
1668
|
+
"library": "@ds-mo/ui",
|
|
1669
|
+
"distribution": "npm",
|
|
1670
|
+
"storybook": "https://zainadeel.github.io/compomo/?path=/story/card-data-viz-bar",
|
|
1671
|
+
"source": "src/wc/components/CardDataVizBar/CardDataVizBar.tsx",
|
|
1672
|
+
"intentStatus": "complete",
|
|
1673
|
+
"intent": {
|
|
1674
|
+
"audience": "specialized",
|
|
1675
|
+
"status": "experimental",
|
|
1676
|
+
"summary": "Canonical bar-chart dashboard card with shared data-viz chrome, a filter action, a fill chart region, and an optional static legend.",
|
|
1677
|
+
"useWhen": [
|
|
1678
|
+
"A dashboard widget needs a regular, stacked, or percentage bar chart in the standard data-viz card.",
|
|
1679
|
+
"A stacked bar chart needs a visible static series key beneath the chart."
|
|
1680
|
+
],
|
|
1681
|
+
"avoidWhen": [
|
|
1682
|
+
"The visualization needs selectable legend rows or chart-to-legend hover synchronization.",
|
|
1683
|
+
"The product needs supporting metrics or an alternate chart layout beyond the chart and optional legend."
|
|
1684
|
+
],
|
|
1685
|
+
"alternatives": [
|
|
1686
|
+
{
|
|
1687
|
+
"when": "The bar chart needs a custom layout without card chrome.",
|
|
1688
|
+
"component": "component:ds-chart-bar",
|
|
1689
|
+
"reason": "Compose ChartBar directly in the product-owned layout."
|
|
1690
|
+
},
|
|
1691
|
+
{
|
|
1692
|
+
"when": "The visualization communicates change as continuous lines.",
|
|
1693
|
+
"component": "component:ds-card-data-viz-line",
|
|
1694
|
+
"reason": "CardDataVizLine owns the canonical line-chart card layout."
|
|
1695
|
+
},
|
|
1696
|
+
{
|
|
1697
|
+
"when": "The visualization communicates parts of one total with synchronized slice emphasis.",
|
|
1698
|
+
"component": "component:ds-card-data-viz-donut",
|
|
1699
|
+
"reason": "CardDataVizDonut owns the donut layout and bidirectional hover synchronization."
|
|
1700
|
+
}
|
|
1701
|
+
],
|
|
1702
|
+
"commonlyComposedWith": [
|
|
1703
|
+
"component:ds-card-shell-data-viz",
|
|
1704
|
+
"component:ds-chart-bar",
|
|
1705
|
+
"component:ds-chart-bar-stacked",
|
|
1706
|
+
"component:ds-chart-legend",
|
|
1707
|
+
"component:ds-button-unfilled"
|
|
1708
|
+
],
|
|
1709
|
+
"accessibility": [
|
|
1710
|
+
"Provide a concise heading that identifies the measure and meaningful visible labels for every legend entry.",
|
|
1711
|
+
"Keep essential series and value context available textually rather than relying on bar color alone.",
|
|
1712
|
+
"The card disables decorative legend-row hover; genuine legend links retain native link semantics and affordances."
|
|
1713
|
+
],
|
|
1714
|
+
"states": [
|
|
1715
|
+
"The chart region fills the remaining card body while an optional legend remains content-sized.",
|
|
1716
|
+
"The card disables local hover highlighting on a slotted ChartLegend because bar legends are static keys.",
|
|
1717
|
+
"Chart and legend regions render only when their corresponding slots contain content, avoiding empty region spacing.",
|
|
1718
|
+
"The owning product controls data, filtering, loading, empty, and error state; the card emits the filter action only."
|
|
1719
|
+
],
|
|
1720
|
+
"responsiveBehavior": [
|
|
1721
|
+
"The selected sm, md, or lg shell size controls the card dimensions while the bar chart shrinks within its chart region.",
|
|
1722
|
+
"The horizontal legend wraps complete entries when the available width is constrained.",
|
|
1723
|
+
"The parent dashboard owns card wrapping and breakpoint changes."
|
|
1724
|
+
],
|
|
1725
|
+
"frameworkCaveats": {
|
|
1726
|
+
"customElements": [
|
|
1727
|
+
"Assign data or series and categories as JavaScript properties, then place the bar chart and optional legend in their named slots."
|
|
1728
|
+
],
|
|
1729
|
+
"react": [
|
|
1730
|
+
"Keep filter and dataset state in the owner; pass the chart and optional legend with chart and legend slot attributes."
|
|
1731
|
+
],
|
|
1732
|
+
"angular": [
|
|
1733
|
+
"Keep filter and dataset state in the owner; project the chart and optional legend into the chart and legend slots."
|
|
1734
|
+
]
|
|
1735
|
+
},
|
|
1736
|
+
"references": [
|
|
1737
|
+
{
|
|
1738
|
+
"label": "Storybook examples",
|
|
1739
|
+
"path": "src/wc/components/CardDataVizBar/CardDataVizBar.stories.ts"
|
|
1740
|
+
}
|
|
1741
|
+
]
|
|
1742
|
+
},
|
|
1743
|
+
"props": {
|
|
1744
|
+
"cardWidth": {
|
|
1745
|
+
"type": "CardDataVizBarWidth",
|
|
1746
|
+
"required": false
|
|
1747
|
+
},
|
|
1748
|
+
"filterLabel": {
|
|
1749
|
+
"type": "string",
|
|
1750
|
+
"required": false
|
|
1751
|
+
},
|
|
1752
|
+
"heading": {
|
|
1753
|
+
"type": "string",
|
|
1754
|
+
"required": true
|
|
1755
|
+
}
|
|
1756
|
+
},
|
|
1757
|
+
"events": [
|
|
1758
|
+
{
|
|
1759
|
+
"name": "dsFilterClick",
|
|
1760
|
+
"detail": "void"
|
|
1761
|
+
}
|
|
1762
|
+
],
|
|
1763
|
+
"slots": [],
|
|
1764
|
+
"exports": {
|
|
1765
|
+
"customElement": "ds-card-data-viz-bar",
|
|
1766
|
+
"react": "DsCardDataVizBar",
|
|
1767
|
+
"angular": "DsCardDataVizBar"
|
|
1768
|
+
}
|
|
1769
|
+
},
|
|
1770
|
+
"dependencies": [
|
|
1771
|
+
"@ds-mo/ui",
|
|
1772
|
+
"@ds-mo/tokens"
|
|
1773
|
+
],
|
|
1774
|
+
"registryDependencies": [
|
|
1775
|
+
"button-unfilled",
|
|
1776
|
+
"card-shell-data-viz"
|
|
1777
|
+
]
|
|
1778
|
+
},
|
|
1530
1779
|
{
|
|
1531
1780
|
"name": "card-data-viz-donut",
|
|
1532
1781
|
"title": "CardDataVizDonut",
|
|
@@ -1644,6 +1893,117 @@
|
|
|
1644
1893
|
"card-shell-data-viz"
|
|
1645
1894
|
]
|
|
1646
1895
|
},
|
|
1896
|
+
{
|
|
1897
|
+
"name": "card-data-viz-line",
|
|
1898
|
+
"title": "CardDataVizLine",
|
|
1899
|
+
"description": "Canonical line-chart dashboard card with shared data-viz chrome, a filter action, fill chart region, and a static horizontal legend.",
|
|
1900
|
+
"type": "registry:ui",
|
|
1901
|
+
"meta": {
|
|
1902
|
+
"library": "@ds-mo/ui",
|
|
1903
|
+
"distribution": "npm",
|
|
1904
|
+
"storybook": "https://zainadeel.github.io/compomo/?path=/story/card-data-viz-line",
|
|
1905
|
+
"source": "src/wc/components/CardDataVizLine/CardDataVizLine.tsx",
|
|
1906
|
+
"intentStatus": "complete",
|
|
1907
|
+
"intent": {
|
|
1908
|
+
"audience": "specialized",
|
|
1909
|
+
"status": "experimental",
|
|
1910
|
+
"summary": "Canonical line-chart dashboard card with shared data-viz chrome, a filter action, fill chart region, and a static horizontal legend.",
|
|
1911
|
+
"useWhen": [
|
|
1912
|
+
"A dashboard widget needs the standard line chart and visible series key in one data-viz card.",
|
|
1913
|
+
"The legend identifies static line series and should not highlight or dim rows on hover."
|
|
1914
|
+
],
|
|
1915
|
+
"avoidWhen": [
|
|
1916
|
+
"The visualization needs chart-to-legend hover synchronization or selectable series controls.",
|
|
1917
|
+
"The product needs a custom legend treatment, supporting metrics, or an alternate chart layout."
|
|
1918
|
+
],
|
|
1919
|
+
"alternatives": [
|
|
1920
|
+
{
|
|
1921
|
+
"when": "The line chart and legend need a custom layout without card chrome.",
|
|
1922
|
+
"component": "component:ds-chart-line",
|
|
1923
|
+
"reason": "Compose ChartLine and a static ChartLegend directly in the product-owned layout."
|
|
1924
|
+
},
|
|
1925
|
+
{
|
|
1926
|
+
"when": "The visualization communicates parts of a total with synchronized slice emphasis.",
|
|
1927
|
+
"component": "component:ds-card-data-viz-donut",
|
|
1928
|
+
"reason": "CardDataVizDonut owns the donut layout and bidirectional hover synchronization."
|
|
1929
|
+
}
|
|
1930
|
+
],
|
|
1931
|
+
"commonlyComposedWith": [
|
|
1932
|
+
"component:ds-card-shell-data-viz",
|
|
1933
|
+
"component:ds-chart-line",
|
|
1934
|
+
"component:ds-chart-legend",
|
|
1935
|
+
"component:ds-button-unfilled"
|
|
1936
|
+
],
|
|
1937
|
+
"accessibility": [
|
|
1938
|
+
"Provide a concise heading that identifies the trend and meaningful visible labels for every legend entry.",
|
|
1939
|
+
"Keep essential series and value context available textually rather than relying on line color alone.",
|
|
1940
|
+
"The card disables decorative legend-row hover; genuine legend links retain native link semantics and affordances."
|
|
1941
|
+
],
|
|
1942
|
+
"states": [
|
|
1943
|
+
"The chart region fills the remaining card body while the legend remains content-sized.",
|
|
1944
|
+
"The card disables local hover highlighting on a slotted ChartLegend because the line chart is static.",
|
|
1945
|
+
"Chart and legend regions render only when their corresponding slots contain content, avoiding empty region spacing.",
|
|
1946
|
+
"The owning product controls data, filtering, loading, empty, and error state; the card emits the filter action only."
|
|
1947
|
+
],
|
|
1948
|
+
"responsiveBehavior": [
|
|
1949
|
+
"The selected sm, md, or lg shell size controls the card dimensions while the line chart shrinks within its chart region.",
|
|
1950
|
+
"The horizontal legend wraps complete entries when the available width is constrained.",
|
|
1951
|
+
"The parent dashboard owns card wrapping and breakpoint changes."
|
|
1952
|
+
],
|
|
1953
|
+
"frameworkCaveats": {
|
|
1954
|
+
"customElements": [
|
|
1955
|
+
"Assign series, categories, and legend items as JavaScript properties, then place the chart and legend in their named slots."
|
|
1956
|
+
],
|
|
1957
|
+
"react": [
|
|
1958
|
+
"Keep filter and dataset state in the owner; pass the chart and legend with chart and legend slot attributes."
|
|
1959
|
+
],
|
|
1960
|
+
"angular": [
|
|
1961
|
+
"Keep filter and dataset state in the owner; project the chart and legend into the chart and legend slots."
|
|
1962
|
+
]
|
|
1963
|
+
},
|
|
1964
|
+
"references": [
|
|
1965
|
+
{
|
|
1966
|
+
"label": "Storybook examples",
|
|
1967
|
+
"path": "src/wc/components/CardDataVizLine/CardDataVizLine.stories.ts"
|
|
1968
|
+
}
|
|
1969
|
+
]
|
|
1970
|
+
},
|
|
1971
|
+
"props": {
|
|
1972
|
+
"cardWidth": {
|
|
1973
|
+
"type": "CardDataVizLineWidth",
|
|
1974
|
+
"required": false
|
|
1975
|
+
},
|
|
1976
|
+
"filterLabel": {
|
|
1977
|
+
"type": "string",
|
|
1978
|
+
"required": false
|
|
1979
|
+
},
|
|
1980
|
+
"heading": {
|
|
1981
|
+
"type": "string",
|
|
1982
|
+
"required": true
|
|
1983
|
+
}
|
|
1984
|
+
},
|
|
1985
|
+
"events": [
|
|
1986
|
+
{
|
|
1987
|
+
"name": "dsFilterClick",
|
|
1988
|
+
"detail": "void"
|
|
1989
|
+
}
|
|
1990
|
+
],
|
|
1991
|
+
"slots": [],
|
|
1992
|
+
"exports": {
|
|
1993
|
+
"customElement": "ds-card-data-viz-line",
|
|
1994
|
+
"react": "DsCardDataVizLine",
|
|
1995
|
+
"angular": "DsCardDataVizLine"
|
|
1996
|
+
}
|
|
1997
|
+
},
|
|
1998
|
+
"dependencies": [
|
|
1999
|
+
"@ds-mo/ui",
|
|
2000
|
+
"@ds-mo/tokens"
|
|
2001
|
+
],
|
|
2002
|
+
"registryDependencies": [
|
|
2003
|
+
"button-unfilled",
|
|
2004
|
+
"card-shell-data-viz"
|
|
2005
|
+
]
|
|
2006
|
+
},
|
|
1647
2007
|
{
|
|
1648
2008
|
"name": "card-setting",
|
|
1649
2009
|
"title": "CardSetting",
|
|
@@ -1826,13 +2186,20 @@
|
|
|
1826
2186
|
"when": "The composition is the standard donut chart plus synchronized legend.",
|
|
1827
2187
|
"component": "component:ds-card-data-viz-donut",
|
|
1828
2188
|
"reason": "CardDataVizDonut composes this shell with donut-specific regions and hover synchronization."
|
|
2189
|
+
},
|
|
2190
|
+
{
|
|
2191
|
+
"when": "The composition is the standard line chart plus static horizontal legend.",
|
|
2192
|
+
"component": "component:ds-card-data-viz-line",
|
|
2193
|
+
"reason": "CardDataVizLine composes this shell with line-specific regions and disables decorative legend hover."
|
|
1829
2194
|
}
|
|
1830
2195
|
],
|
|
1831
2196
|
"commonlyComposedWith": [
|
|
1832
2197
|
"component:ds-chart-bar",
|
|
2198
|
+
"component:ds-chart-bar-stacked",
|
|
1833
2199
|
"component:ds-chart-donut",
|
|
1834
2200
|
"component:ds-chart-line",
|
|
1835
2201
|
"component:ds-chart-legend",
|
|
2202
|
+
"component:ds-card-data-viz-line",
|
|
1836
2203
|
"component:ds-button-unfilled"
|
|
1837
2204
|
],
|
|
1838
2205
|
"accessibility": [
|
|
@@ -1921,6 +2288,11 @@
|
|
|
1921
2288
|
"The data communicates a part-to-whole relationship."
|
|
1922
2289
|
],
|
|
1923
2290
|
"alternatives": [
|
|
2291
|
+
{
|
|
2292
|
+
"when": "Each category contains several additive series or needs normalized composition.",
|
|
2293
|
+
"component": "component:ds-chart-bar-stacked",
|
|
2294
|
+
"reason": "ChartBarStacked compares raw stacked totals or normalized 0–100% composition."
|
|
2295
|
+
},
|
|
1924
2296
|
{
|
|
1925
2297
|
"when": "Users need to follow one or more trends across ordered categories.",
|
|
1926
2298
|
"component": "component:ds-chart-line",
|
|
@@ -1933,6 +2305,7 @@
|
|
|
1933
2305
|
}
|
|
1934
2306
|
],
|
|
1935
2307
|
"commonlyComposedWith": [
|
|
2308
|
+
"component:ds-chart-bar-stacked",
|
|
1936
2309
|
"component:ds-card-shell-data-viz",
|
|
1937
2310
|
"component:ds-tooltip-data-viz"
|
|
1938
2311
|
],
|
|
@@ -1944,6 +2317,7 @@
|
|
|
1944
2317
|
"states": [
|
|
1945
2318
|
"The chart is currently a static single-series rendering without hover, selection, loading, or empty-state policy.",
|
|
1946
2319
|
"An empty dataset renders no bars; the owning card or product supplies meaningful empty-state messaging.",
|
|
2320
|
+
"Bars use 2px top corner radii while the lower corners touching the zero axis remain square.",
|
|
1947
2321
|
"Use one consistent bar color across time buckets when every bar is the same measure at a different interval; categorical color changes are for genuinely distinct categories.",
|
|
1948
2322
|
"Authored datum colors override the shared categorical palette."
|
|
1949
2323
|
],
|
|
@@ -1998,6 +2372,126 @@
|
|
|
1998
2372
|
],
|
|
1999
2373
|
"registryDependencies": []
|
|
2000
2374
|
},
|
|
2375
|
+
{
|
|
2376
|
+
"name": "chart-bar-stacked",
|
|
2377
|
+
"title": "ChartBarStacked",
|
|
2378
|
+
"description": "Multi-series stacked bar chart for comparing raw totals or normalized 0–100% composition across ordered categories and time buckets.",
|
|
2379
|
+
"type": "registry:ui",
|
|
2380
|
+
"meta": {
|
|
2381
|
+
"library": "@ds-mo/ui",
|
|
2382
|
+
"distribution": "npm",
|
|
2383
|
+
"storybook": "https://zainadeel.github.io/compomo/?path=/story/chart-bar-stacked",
|
|
2384
|
+
"source": "src/wc/components/ChartBarStacked/ChartBarStacked.tsx",
|
|
2385
|
+
"intentStatus": "complete",
|
|
2386
|
+
"intent": {
|
|
2387
|
+
"audience": "specialized",
|
|
2388
|
+
"status": "experimental",
|
|
2389
|
+
"summary": "Multi-series stacked bar chart for comparing raw totals or normalized 0–100% composition across ordered categories and time buckets.",
|
|
2390
|
+
"useWhen": [
|
|
2391
|
+
"Users need to compare both a category total and the contribution of several consistent series.",
|
|
2392
|
+
"A time series needs to show how its composition changes across equal time buckets.",
|
|
2393
|
+
"Every category should normalize to 100% so proportional composition can be compared independently of total magnitude."
|
|
2394
|
+
],
|
|
2395
|
+
"avoidWhen": [
|
|
2396
|
+
"Users need to compare individual series values precisely across categories; use grouped bars or separate charts.",
|
|
2397
|
+
"The visualization has only one measure per category; use ChartBar.",
|
|
2398
|
+
"The primary task is following continuous trends; use ChartLine.",
|
|
2399
|
+
"Series contain negative values or do not align with the shared category list."
|
|
2400
|
+
],
|
|
2401
|
+
"alternatives": [
|
|
2402
|
+
{
|
|
2403
|
+
"when": "Each category contains one independent value.",
|
|
2404
|
+
"component": "component:ds-chart-bar",
|
|
2405
|
+
"reason": "ChartBar provides the simpler single-series magnitude comparison."
|
|
2406
|
+
},
|
|
2407
|
+
{
|
|
2408
|
+
"when": "Users need to follow one or more trends rather than compare stack composition.",
|
|
2409
|
+
"component": "component:ds-chart-line",
|
|
2410
|
+
"reason": "ChartLine preserves each series as a continuous path across the ordered axis."
|
|
2411
|
+
},
|
|
2412
|
+
{
|
|
2413
|
+
"when": "One category's parts-to-whole composition is the focus.",
|
|
2414
|
+
"component": "component:ds-chart-donut",
|
|
2415
|
+
"reason": "ChartDonut provides the dedicated single-total composition treatment."
|
|
2416
|
+
}
|
|
2417
|
+
],
|
|
2418
|
+
"commonlyComposedWith": [
|
|
2419
|
+
"component:ds-chart-legend",
|
|
2420
|
+
"component:ds-card-shell-data-viz",
|
|
2421
|
+
"component:ds-tooltip-data-viz"
|
|
2422
|
+
],
|
|
2423
|
+
"accessibility": [
|
|
2424
|
+
"Provide a visible legend or adjacent textual summary that names every series; do not rely on segment color alone.",
|
|
2425
|
+
"The chart image name includes each category and series value, using normalized percentages in percentage mode.",
|
|
2426
|
+
"Use an adjacent data table when exact cross-category comparisons are necessary to complete the task."
|
|
2427
|
+
],
|
|
2428
|
+
"states": [
|
|
2429
|
+
"Stacked mode preserves raw magnitudes and scales the y-axis to the largest category total.",
|
|
2430
|
+
"Percentage mode normalizes each non-empty category independently and renders a fixed 0%, 25%, 50%, 75%, and 100% axis.",
|
|
2431
|
+
"Series render bottom-to-top in authored order; keep that order and color mapping stable across categories.",
|
|
2432
|
+
"Stacked mode gives only the top visible segment 2px top corners. Percentage mode keeps every corner square because the normalized stack touches both axis edges.",
|
|
2433
|
+
"Adjacent segments are separated by a non-scaling 1px gap; the stack's outer edges do not receive that separator.",
|
|
2434
|
+
"Negative values are unsupported and render as zero; the owning product supplies loading, empty, and error states."
|
|
2435
|
+
],
|
|
2436
|
+
"responsiveBehavior": [
|
|
2437
|
+
"The SVG preserves its authored aspect ratio while shrinking to fit a narrower parent.",
|
|
2438
|
+
"The parent supplies dimensions and chooses how many time buckets remain legible at each width.",
|
|
2439
|
+
"Pre-format category labels and reduce bucket count before rendering when horizontal space becomes constrained."
|
|
2440
|
+
],
|
|
2441
|
+
"frameworkCaveats": {
|
|
2442
|
+
"customElements": [
|
|
2443
|
+
"Assign series and categories as JavaScript properties and keep every series aligned to the category count."
|
|
2444
|
+
],
|
|
2445
|
+
"react": [
|
|
2446
|
+
"Pass stable series and category arrays; choose percentage variant only when each category represents a meaningful whole."
|
|
2447
|
+
],
|
|
2448
|
+
"angular": [
|
|
2449
|
+
"Bind series and categories as properties; choose percentage variant only when each category represents a meaningful whole."
|
|
2450
|
+
]
|
|
2451
|
+
},
|
|
2452
|
+
"references": [
|
|
2453
|
+
{
|
|
2454
|
+
"label": "Storybook examples",
|
|
2455
|
+
"path": "src/wc/components/ChartBarStacked/ChartBarStacked.stories.ts"
|
|
2456
|
+
}
|
|
2457
|
+
]
|
|
2458
|
+
},
|
|
2459
|
+
"props": {
|
|
2460
|
+
"categories": {
|
|
2461
|
+
"type": "string[]",
|
|
2462
|
+
"required": false
|
|
2463
|
+
},
|
|
2464
|
+
"height": {
|
|
2465
|
+
"type": "number",
|
|
2466
|
+
"required": false
|
|
2467
|
+
},
|
|
2468
|
+
"series": {
|
|
2469
|
+
"type": "ChartSeries[]",
|
|
2470
|
+
"required": false
|
|
2471
|
+
},
|
|
2472
|
+
"variant": {
|
|
2473
|
+
"type": "ChartBarStackedVariant",
|
|
2474
|
+
"required": false
|
|
2475
|
+
},
|
|
2476
|
+
"width": {
|
|
2477
|
+
"type": "number",
|
|
2478
|
+
"required": false
|
|
2479
|
+
}
|
|
2480
|
+
},
|
|
2481
|
+
"events": [],
|
|
2482
|
+
"slots": [],
|
|
2483
|
+
"exports": {
|
|
2484
|
+
"customElement": "ds-chart-bar-stacked",
|
|
2485
|
+
"react": "DsChartBarStacked",
|
|
2486
|
+
"angular": "DsChartBarStacked"
|
|
2487
|
+
}
|
|
2488
|
+
},
|
|
2489
|
+
"dependencies": [
|
|
2490
|
+
"@ds-mo/ui",
|
|
2491
|
+
"@ds-mo/tokens"
|
|
2492
|
+
],
|
|
2493
|
+
"registryDependencies": []
|
|
2494
|
+
},
|
|
2001
2495
|
{
|
|
2002
2496
|
"name": "chart-donut",
|
|
2003
2497
|
"title": "ChartDonut",
|
|
@@ -2178,12 +2672,19 @@
|
|
|
2178
2672
|
"when": "The donut belongs in the canonical dashboard card.",
|
|
2179
2673
|
"component": "component:ds-card-data-viz-donut",
|
|
2180
2674
|
"reason": "The dedicated card places the legend and handles bidirectional highlight synchronization."
|
|
2675
|
+
},
|
|
2676
|
+
{
|
|
2677
|
+
"when": "A static line chart and series key belong in the canonical dashboard card.",
|
|
2678
|
+
"component": "component:ds-card-data-viz-line",
|
|
2679
|
+
"reason": "The dedicated card places the horizontal legend and disables decorative local hover highlighting."
|
|
2181
2680
|
}
|
|
2182
2681
|
],
|
|
2183
2682
|
"commonlyComposedWith": [
|
|
2184
2683
|
"component:ds-chart-donut",
|
|
2684
|
+
"component:ds-chart-bar-stacked",
|
|
2185
2685
|
"component:ds-chart-line",
|
|
2186
2686
|
"component:ds-card-data-viz-donut",
|
|
2687
|
+
"component:ds-card-data-viz-line",
|
|
2187
2688
|
"component:ds-card-shell-data-viz"
|
|
2188
2689
|
],
|
|
2189
2690
|
"accessibility": [
|
|
@@ -2193,7 +2694,8 @@
|
|
|
2193
2694
|
"Do not rely on swatch color alone; every entry requires a meaningful visible label."
|
|
2194
2695
|
],
|
|
2195
2696
|
"states": [
|
|
2196
|
-
"Local pointer or focus interaction and external chart highlight remain separate; both may dim peers, but only a real link row receives
|
|
2697
|
+
"Local pointer or focus interaction and external chart highlight remain separate; both may dim peers, but only a real link row receives navigation affordances.",
|
|
2698
|
+
"Disable local hover highlighting for static keys such as a line-chart legend; externally controlled activeLabel highlighting and genuine link affordances remain available.",
|
|
2197
2699
|
"Hover synchronization is temporary emphasis, never filtering, toggling, or selected state.",
|
|
2198
2700
|
"Percentage values use one consistent precision across the complete legend.",
|
|
2199
2701
|
"The list owns pointer leave so moving across row gaps does not clear and reapply highlight."
|
|
@@ -2234,6 +2736,10 @@
|
|
|
2234
2736
|
"type": "ChartLegendDirection",
|
|
2235
2737
|
"required": false
|
|
2236
2738
|
},
|
|
2739
|
+
"highlightOnHover": {
|
|
2740
|
+
"type": "boolean",
|
|
2741
|
+
"required": false
|
|
2742
|
+
},
|
|
2237
2743
|
"items": {
|
|
2238
2744
|
"type": "ChartLegendItem[]",
|
|
2239
2745
|
"required": false
|
|
@@ -2316,6 +2822,7 @@
|
|
|
2316
2822
|
],
|
|
2317
2823
|
"commonlyComposedWith": [
|
|
2318
2824
|
"component:ds-chart-legend",
|
|
2825
|
+
"component:ds-card-data-viz-line",
|
|
2319
2826
|
"component:ds-card-shell-data-viz",
|
|
2320
2827
|
"component:ds-tooltip-data-viz"
|
|
2321
2828
|
],
|
|
@@ -2326,11 +2833,12 @@
|
|
|
2326
2833
|
],
|
|
2327
2834
|
"states": [
|
|
2328
2835
|
"The chart is currently static and does not own hover, selection, loading, or empty-state policy.",
|
|
2836
|
+
"Its standard horizontal legend is a static key with local hover highlighting disabled.",
|
|
2329
2837
|
"Point markers may be shown or hidden without changing the underlying series meaning.",
|
|
2330
2838
|
"Authored series colors override the shared categorical palette."
|
|
2331
2839
|
],
|
|
2332
2840
|
"responsiveBehavior": [
|
|
2333
|
-
"The owner supplies dimensions
|
|
2841
|
+
"The owner supplies intrinsic dimensions; the SVG preserves its aspect ratio while shrinking to fit a narrower parent.",
|
|
2334
2842
|
"Category positions are always equally spaced, even when labels represent time.",
|
|
2335
2843
|
"Reduce or pre-format dense labels before passing them; the chart renders authored labels without a continuous time scale."
|
|
2336
2844
|
],
|
|
@@ -2855,7 +3363,7 @@
|
|
|
2855
3363
|
],
|
|
2856
3364
|
"states": [
|
|
2857
3365
|
"Rows reuse the md choice-item label/subtext recipe used by Menu, including 6px row padding, 2px text inset, and the shared content gap. The enclosing conversation-list scroll region supplies the larger 8px outer container padding.",
|
|
2858
|
-
"Busy and error are generic channel-neutral states; the owning product supplies suitable status wording. A busy row pairs its body-small status with the sm 16px Loader at
|
|
3366
|
+
"Busy and error are generic channel-neutral states; the owning product supplies suitable status wording. A busy row pairs its body-small status with the sm 16px Loader at a 4px gap.",
|
|
2859
3367
|
"Any positive unreadCount renders one dot on the title row rather than a visible counter; the accessible row name may still announce the exact unread quantity.",
|
|
2860
3368
|
"Hover and press use the shared interaction hover and pressed overlays. Only the selected conversation uses the persistent active fill.",
|
|
2861
3369
|
"The title uses body-medium, not title-small, and the body-small preview truncates after one line. Unread titles use emphasis with primary foreground; read titles use regular weight with secondary foreground.",
|
|
@@ -4101,10 +4609,11 @@
|
|
|
4101
4609
|
],
|
|
4102
4610
|
"accessibility": [
|
|
4103
4611
|
"Author and time metadata remain textual when they are necessary to interpret the transcript.",
|
|
4104
|
-
"Delivery failure uses negative Failed to send text in the footer while the message bubble keeps its normal outgoing treatment."
|
|
4612
|
+
"Delivery failure uses negative Failed to send text in the footer while the message bubble keeps its normal outgoing treatment; when time is also visible, a tertiary middle dot separates the failure label and timestamp."
|
|
4105
4613
|
],
|
|
4106
4614
|
"states": [
|
|
4107
4615
|
"Pass an ISO timestamp. Message keeps the full value in dateTime and formats the visible value as a localized time; applications must not render a raw ISO string as visible transcript metadata.",
|
|
4616
|
+
"A visible incoming author uses body-small emphasis with primary foreground; timestamp and delivery metadata remain caption text.",
|
|
4108
4617
|
"Visible author, bubble content, and timestamp or delivery footer use consistent 4px vertical gaps.",
|
|
4109
4618
|
"Grouping joins adjacent bubble corners, shows the incoming author only at the start, and shows delivery/time metadata only at the end. Outgoing author remains in the accessible message label without repeating a visible You label.",
|
|
4110
4619
|
"Set showAuthor false only when the product makes participant and assistant roles visually self-evident; continue passing author so the accessible message label remains specific."
|
|
@@ -4393,7 +4902,9 @@
|
|
|
4393
4902
|
"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."
|
|
4394
4903
|
],
|
|
4395
4904
|
"responsiveBehavior": [
|
|
4396
|
-
"Transcript width is readable while the scroll region fills available height."
|
|
4905
|
+
"Transcript width is readable while the scroll region fills available height.",
|
|
4906
|
+
"For a narrower fullscreen conversation lane, set --ds-message-scroller-content-max-width on the host instead of constraining the host; the full-width viewport then keeps its scrollbar at the outer edge while the transcript remains centered.",
|
|
4907
|
+
"The custom property sizes the padded transcript box. If the target is the usable conversation width, add the transcript's two 16px inline paddings and size the centered overlay container to the same target plus its two 8px paddings so messages and the visible composer align."
|
|
4397
4908
|
],
|
|
4398
4909
|
"references": [
|
|
4399
4910
|
{
|
|
@@ -6548,7 +7059,7 @@
|
|
|
6548
7059
|
{
|
|
6549
7060
|
"name": "shell-page",
|
|
6550
7061
|
"title": "ShellPage",
|
|
6551
|
-
"description": "The standard routed-page boundary inside ShellApp, owning sticky BarTitle or BarWorkflow placement,
|
|
7062
|
+
"description": "The standard routed-page boundary inside ShellApp, owning sticky BarTitle or BarWorkflow placement, application-supplied BarTitle capacity, stable scroll compaction, and optional page-content inset without creating a nested scroll container.",
|
|
6552
7063
|
"type": "registry:ui",
|
|
6553
7064
|
"meta": {
|
|
6554
7065
|
"library": "@ds-mo/ui",
|
|
@@ -6559,10 +7070,10 @@
|
|
|
6559
7070
|
"intent": {
|
|
6560
7071
|
"audience": "general",
|
|
6561
7072
|
"status": "stable",
|
|
6562
|
-
"summary": "The standard routed-page boundary inside ShellApp, owning sticky BarTitle or BarWorkflow placement,
|
|
7073
|
+
"summary": "The standard routed-page boundary inside ShellApp, owning sticky BarTitle or BarWorkflow placement, application-supplied BarTitle capacity, stable scroll compaction, and optional page-content inset without creating a nested scroll container.",
|
|
6563
7074
|
"useWhen": [
|
|
6564
7075
|
"Rendering a standard routed page inside ShellApp's default content region.",
|
|
6565
|
-
"BarTitle should expand at a roomy page top, compact after scroll, or use constrained action layout when the
|
|
7076
|
+
"BarTitle should expand at a roomy page top, compact after scroll, or use constrained action layout when the application shell reports reduced capacity.",
|
|
6566
7077
|
"BarWorkflow needs sticky page-level placement while remaining compact.",
|
|
6567
7078
|
"Pages need consistent content gutters with an explicit full-bleed option."
|
|
6568
7079
|
],
|
|
@@ -6599,16 +7110,18 @@
|
|
|
6599
7110
|
"Responsive variant changes preserve the same heading, controls, accessible names, and keyboard focus targets."
|
|
6600
7111
|
],
|
|
6601
7112
|
"states": [
|
|
6602
|
-
"
|
|
7113
|
+
"headerCapacity=roomy, compact, or constrained is supplied before paint by the owning application shell and describes the page-header space available after viewport and shell-chrome policy are applied.",
|
|
7114
|
+
"headerPresentation=auto selects the matching header variant from headerCapacity and scroll position.",
|
|
6603
7115
|
"expanded, compact, and constrained are explicit overrides for exceptional layouts and deterministic examples.",
|
|
6604
7116
|
"contentInset=default supplies standard page gutters; none permits maps, canvases, and other full-bleed content.",
|
|
6605
7117
|
"The required header slot accepts one BarTitle or BarWorkflow. The default slot owns router output and all page product content."
|
|
6606
7118
|
],
|
|
6607
7119
|
"responsiveBehavior": [
|
|
6608
|
-
"
|
|
6609
|
-
"Roomy
|
|
6610
|
-
"A
|
|
6611
|
-
"
|
|
7120
|
+
"The owning application shell resolves viewport and persistent-chrome state into the explicit headerCapacity prop; ShellPage never guesses the cause of reduced width from its own rendered size.",
|
|
7121
|
+
"Roomy capacity expands at the top and compacts after scroll; compact capacity stays compact; constrained capacity uses the constrained action layout.",
|
|
7122
|
+
"A ShellPage-managed BarTitle remains concealed until headerCapacity is available and its rendered variant matches the resolved presentation, preventing a default-variant flash during route activation.",
|
|
7123
|
+
"Update headerCapacity synchronously with shell layout state so opening tools or crossing application breakpoints cannot briefly render the wrong presentation.",
|
|
7124
|
+
"On roomy pages, the expanded header scrolls upward until its title and action row reaches the compact row position, then snaps variants without moving that shared visual anchor.",
|
|
6612
7125
|
"Scroll compaction preserves the expanded page flow offset so content never jumps beneath the sticky header.",
|
|
6613
7126
|
"ShellPage relies on ShellApp's content scroller and never introduces nested scrolling.",
|
|
6614
7127
|
"BarWorkflow remains compact and is not assigned BarTitle's capacity or scroll variants."
|
|
@@ -6647,6 +7160,10 @@
|
|
|
6647
7160
|
"type": "ShellPageContentInset",
|
|
6648
7161
|
"required": false
|
|
6649
7162
|
},
|
|
7163
|
+
"headerCapacity": {
|
|
7164
|
+
"type": "ShellPageCapacity",
|
|
7165
|
+
"required": false
|
|
7166
|
+
},
|
|
6650
7167
|
"headerPresentation": {
|
|
6651
7168
|
"type": "ShellPageHeaderPresentation",
|
|
6652
7169
|
"required": false
|
|
@@ -8217,12 +8734,12 @@
|
|
|
8217
8734
|
"pattern:conversation"
|
|
8218
8735
|
],
|
|
8219
8736
|
"accessibility": [
|
|
8220
|
-
"Provide concise localized status text
|
|
8737
|
+
"Provide concise localized status text; the standard label is Typing followed by a three-dot ellipsis.",
|
|
8221
8738
|
"The polite atomic status announces typing without representing it as a message bubble."
|
|
8222
8739
|
],
|
|
8223
8740
|
"states": [
|
|
8224
8741
|
"TypingIndicator is transient conversation status, never persisted message content.",
|
|
8225
|
-
"Its body-
|
|
8742
|
+
"Its body-medium secondary text may shimmer, while reduced-motion preferences retain a static readable status."
|
|
8226
8743
|
],
|
|
8227
8744
|
"responsiveBehavior": [
|
|
8228
8745
|
"The indicator fills the message content width and wraps only when localized status text requires it."
|