@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
package/dist/agent.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schemaVersion": "1.0.0",
|
|
3
3
|
"package": "@ds-mo/ui",
|
|
4
|
-
"packageVersion": "12.
|
|
4
|
+
"packageVersion": "12.3.0",
|
|
5
5
|
"kind": "components",
|
|
6
6
|
"entries": [
|
|
7
7
|
{
|
|
@@ -777,16 +777,16 @@
|
|
|
777
777
|
"tag": "ds-bar-title",
|
|
778
778
|
"name": "bar-title",
|
|
779
779
|
"title": "BarTitle",
|
|
780
|
-
"summary": "Page-level title chrome with optional route
|
|
780
|
+
"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.",
|
|
781
781
|
"intentStatus": "complete",
|
|
782
782
|
"intent": {
|
|
783
783
|
"audience": "general",
|
|
784
784
|
"status": "stable",
|
|
785
|
-
"summary": "Page-level title chrome with optional route
|
|
785
|
+
"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.",
|
|
786
786
|
"useWhen": [
|
|
787
787
|
"A top-level page needs one h1 above its content.",
|
|
788
788
|
"A list or detail page has multiple route-level sections that belong in the inline active-section menu.",
|
|
789
|
-
"A detail page needs a page-level Back action.",
|
|
789
|
+
"A detail page needs route ancestors in expanded presentation and a page-level Back action in compact chrome.",
|
|
790
790
|
"A page needs one primary action plus optional secondary or destructive overflow commands."
|
|
791
791
|
],
|
|
792
792
|
"avoidWhen": [
|
|
@@ -817,6 +817,7 @@
|
|
|
817
817
|
"component:ds-shell-page",
|
|
818
818
|
"component:ds-button-filled",
|
|
819
819
|
"component:ds-button-unfilled",
|
|
820
|
+
"component:ds-breadcrumb",
|
|
820
821
|
"component:ds-menu",
|
|
821
822
|
"component:ds-text"
|
|
822
823
|
],
|
|
@@ -825,7 +826,8 @@
|
|
|
825
826
|
],
|
|
826
827
|
"accessibility": [
|
|
827
828
|
"Provide one concise heading; BarTitle renders exactly one h1 and changes only its visual recipe between variants.",
|
|
828
|
-
"Give Back a destination-specific accessible name such as Back to Drivers
|
|
829
|
+
"Give compact Back a destination-specific accessible name such as Back to Drivers and handle dsBack in the route owner.",
|
|
830
|
+
"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.",
|
|
829
831
|
"Keep value synchronized with the current child route; dsSectionChange returns the selected section id.",
|
|
830
832
|
"Section and overflow triggers expose menu relationships and restore focus after selection or dismissal.",
|
|
831
833
|
"Use one filled primary action in the page decision area and mark destructive overflow actions explicitly."
|
|
@@ -834,7 +836,8 @@
|
|
|
834
836
|
"Omitting Back, sections, primaryAction, and actions produces the top-level title-only header.",
|
|
835
837
|
"Two or more selectable sections add the inline section trigger; one section does not render a redundant menu.",
|
|
836
838
|
"Dividers in sections or actions create separate Menu groups without becoming selectable rows.",
|
|
837
|
-
"
|
|
839
|
+
"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.",
|
|
840
|
+
"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.",
|
|
838
841
|
"primaryAction collapse defaults to auto. Use never for exceptional actions whose hierarchy must remain visible in constrained layouts."
|
|
839
842
|
],
|
|
840
843
|
"responsiveBehavior": [
|
|
@@ -845,15 +848,15 @@
|
|
|
845
848
|
],
|
|
846
849
|
"frameworkCaveats": {
|
|
847
850
|
"customElements": [
|
|
848
|
-
"Assign sections, primaryAction, and actions as JavaScript properties and replace array or object identities when controlled state changes.",
|
|
849
|
-
"Handle dsBack
|
|
851
|
+
"Assign breadcrumbs, sections, primaryAction, and actions as JavaScript properties and replace array or object identities when controlled state changes.",
|
|
852
|
+
"Handle dsBack for compact navigation and dsBreadcrumbSelect for application-owned expanded breadcrumb navigation, update value after dsSectionChange, and execute product commands from dsAction."
|
|
850
853
|
],
|
|
851
854
|
"react": [
|
|
852
|
-
"Pass
|
|
855
|
+
"Pass breadcrumb, section, and action arrays directly to DsBarTitle and keep value controlled from route state.",
|
|
853
856
|
"Place DsBarTitle in DsShellPage with slot=header when automatic page behavior is required."
|
|
854
857
|
],
|
|
855
858
|
"angular": [
|
|
856
|
-
"Bind complex values on the standalone DsBarTitle adapter and handle
|
|
859
|
+
"Bind complex values on the standalone DsBarTitle adapter and handle Back, breadcrumb, section, and action intent events in the route shell.",
|
|
857
860
|
"Place ds-bar-title in ds-shell-page with slot=header; do not render router-outlet inside BarTitle."
|
|
858
861
|
]
|
|
859
862
|
},
|
|
@@ -890,6 +893,14 @@
|
|
|
890
893
|
"type": "string",
|
|
891
894
|
"required": false
|
|
892
895
|
},
|
|
896
|
+
"breadcrumbAriaLabel": {
|
|
897
|
+
"type": "string",
|
|
898
|
+
"required": false
|
|
899
|
+
},
|
|
900
|
+
"breadcrumbs": {
|
|
901
|
+
"type": "BreadcrumbItem[]",
|
|
902
|
+
"required": false
|
|
903
|
+
},
|
|
893
904
|
"description": {
|
|
894
905
|
"type": "string",
|
|
895
906
|
"required": false
|
|
@@ -932,6 +943,10 @@
|
|
|
932
943
|
"name": "dsBack",
|
|
933
944
|
"detail": "MouseEvent"
|
|
934
945
|
},
|
|
946
|
+
{
|
|
947
|
+
"name": "dsBreadcrumbSelect",
|
|
948
|
+
"detail": "BreadcrumbSelectDetail"
|
|
949
|
+
},
|
|
935
950
|
{
|
|
936
951
|
"name": "dsSectionChange",
|
|
937
952
|
"detail": "string"
|
|
@@ -950,6 +965,7 @@
|
|
|
950
965
|
"@ds-mo/icons"
|
|
951
966
|
],
|
|
952
967
|
"componentDependencies": [
|
|
968
|
+
"breadcrumb",
|
|
953
969
|
"button-filled",
|
|
954
970
|
"button-unfilled",
|
|
955
971
|
"icon",
|
|
@@ -1116,6 +1132,119 @@
|
|
|
1116
1132
|
"tooltip"
|
|
1117
1133
|
]
|
|
1118
1134
|
},
|
|
1135
|
+
{
|
|
1136
|
+
"id": "component:ds-breadcrumb",
|
|
1137
|
+
"tag": "ds-breadcrumb",
|
|
1138
|
+
"name": "breadcrumb",
|
|
1139
|
+
"title": "Breadcrumb",
|
|
1140
|
+
"summary": "Compact hierarchical page navigation with native links or application-owned selection, optional current-page semantics, and slash separators.",
|
|
1141
|
+
"intentStatus": "complete",
|
|
1142
|
+
"intent": {
|
|
1143
|
+
"audience": "general",
|
|
1144
|
+
"status": "stable",
|
|
1145
|
+
"summary": "Compact hierarchical page navigation with native links or application-owned selection, optional current-page semantics, and slash separators.",
|
|
1146
|
+
"useWhen": [
|
|
1147
|
+
"A page needs to expose its hierarchical ancestors above the current page title.",
|
|
1148
|
+
"Users need to move directly to a broader page in the current route hierarchy.",
|
|
1149
|
+
"BarTitle expanded presentation needs an ancestor path instead of a directional Back button."
|
|
1150
|
+
],
|
|
1151
|
+
"avoidWhen": [
|
|
1152
|
+
"The navigation represents primary application destinations; use PanelNav or BarNav.",
|
|
1153
|
+
"The choices switch peer views within the current page; use TabGroup or the BarTitle section selector.",
|
|
1154
|
+
"Only a directional return command is needed in compact chrome; use the owning header's Back action.",
|
|
1155
|
+
"The path would repeat the same current-page label already communicated by a nearby h1 without adding useful ancestors."
|
|
1156
|
+
],
|
|
1157
|
+
"alternatives": [
|
|
1158
|
+
{
|
|
1159
|
+
"when": "The title and breadcrumb belong to responsive page chrome with page-level actions.",
|
|
1160
|
+
"component": "component:ds-bar-title",
|
|
1161
|
+
"reason": "BarTitle composes Breadcrumb in expanded mode and preserves compact Back behavior."
|
|
1162
|
+
},
|
|
1163
|
+
{
|
|
1164
|
+
"when": "A small set of peer content views should remain directly selectable.",
|
|
1165
|
+
"component": "component:ds-tab-group",
|
|
1166
|
+
"reason": "TabGroup communicates peer selection rather than route ancestry."
|
|
1167
|
+
}
|
|
1168
|
+
],
|
|
1169
|
+
"commonlyComposedWith": [
|
|
1170
|
+
"component:ds-bar-title",
|
|
1171
|
+
"component:ds-text",
|
|
1172
|
+
"component:ds-shell-page"
|
|
1173
|
+
],
|
|
1174
|
+
"accessibility": [
|
|
1175
|
+
"The component renders a named navigation landmark containing an ordered list.",
|
|
1176
|
+
"Provide href for native navigation or handle dsSelect when the application router owns navigation.",
|
|
1177
|
+
"Mark at most one item current; it renders without interaction and exposes aria-current=page.",
|
|
1178
|
+
"Visible caption labels use secondary foreground and slash separators are decorative and hidden from assistive technology.",
|
|
1179
|
+
"Every interactive item remains keyboard reachable and receives the shared focus ring."
|
|
1180
|
+
],
|
|
1181
|
+
"states": [
|
|
1182
|
+
"Items with href render native anchors; items without href render buttons and emit the same dsSelect detail.",
|
|
1183
|
+
"Preventing dsSelect cancels native anchor navigation.",
|
|
1184
|
+
"A current item is static text and never emits selection.",
|
|
1185
|
+
"Links have no resting underline and add a quaternary-foreground solid underline on hover; focus remains communicated by the shared focus ring."
|
|
1186
|
+
],
|
|
1187
|
+
"responsiveBehavior": [
|
|
1188
|
+
"The path stays on one caption line and truncates long labels within the available width.",
|
|
1189
|
+
"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.",
|
|
1190
|
+
"A fully collapsed item keeps its complete label available to assistive technology while rendering only the literal ellipsis visually.",
|
|
1191
|
+
"Separators remain visible while labels yield width."
|
|
1192
|
+
],
|
|
1193
|
+
"frameworkCaveats": {
|
|
1194
|
+
"customElements": [
|
|
1195
|
+
"Assign items as a JavaScript property and replace its array identity when the route changes.",
|
|
1196
|
+
"Use relative or absolute href values for native navigation; omit href when the host router handles dsSelect."
|
|
1197
|
+
],
|
|
1198
|
+
"react": [
|
|
1199
|
+
"Pass items to DsBreadcrumb and handle onDsSelect when navigation is application-owned."
|
|
1200
|
+
],
|
|
1201
|
+
"angular": [
|
|
1202
|
+
"Bind items on the standalone DsBreadcrumb adapter and handle dsSelect when navigation is application-owned."
|
|
1203
|
+
]
|
|
1204
|
+
},
|
|
1205
|
+
"references": [
|
|
1206
|
+
{
|
|
1207
|
+
"label": "Storybook examples",
|
|
1208
|
+
"path": "src/wc/components/Breadcrumb/Breadcrumb.stories.ts"
|
|
1209
|
+
},
|
|
1210
|
+
{
|
|
1211
|
+
"label": "Expanded page-header composition",
|
|
1212
|
+
"path": "src/wc/components/BarTitle/BarTitle.tsx"
|
|
1213
|
+
}
|
|
1214
|
+
]
|
|
1215
|
+
},
|
|
1216
|
+
"api": {
|
|
1217
|
+
"props": {
|
|
1218
|
+
"ariaLabel": {
|
|
1219
|
+
"type": "string",
|
|
1220
|
+
"required": false
|
|
1221
|
+
},
|
|
1222
|
+
"items": {
|
|
1223
|
+
"type": "BreadcrumbItem[]",
|
|
1224
|
+
"required": false
|
|
1225
|
+
}
|
|
1226
|
+
},
|
|
1227
|
+
"events": [
|
|
1228
|
+
{
|
|
1229
|
+
"name": "dsSelect",
|
|
1230
|
+
"detail": "BreadcrumbSelectDetail"
|
|
1231
|
+
}
|
|
1232
|
+
],
|
|
1233
|
+
"slots": []
|
|
1234
|
+
},
|
|
1235
|
+
"exports": {
|
|
1236
|
+
"customElement": "ds-breadcrumb",
|
|
1237
|
+
"react": "DsBreadcrumb",
|
|
1238
|
+
"angular": "DsBreadcrumb"
|
|
1239
|
+
},
|
|
1240
|
+
"dependencies": [
|
|
1241
|
+
"@ds-mo/ui",
|
|
1242
|
+
"@ds-mo/tokens"
|
|
1243
|
+
],
|
|
1244
|
+
"componentDependencies": [
|
|
1245
|
+
"text"
|
|
1246
|
+
]
|
|
1247
|
+
},
|
|
1119
1248
|
{
|
|
1120
1249
|
"id": "component:ds-button-filled",
|
|
1121
1250
|
"tag": "ds-button-filled",
|
|
@@ -1475,6 +1604,120 @@
|
|
|
1475
1604
|
"text"
|
|
1476
1605
|
]
|
|
1477
1606
|
},
|
|
1607
|
+
{
|
|
1608
|
+
"id": "component:ds-card-data-viz-bar",
|
|
1609
|
+
"tag": "ds-card-data-viz-bar",
|
|
1610
|
+
"name": "card-data-viz-bar",
|
|
1611
|
+
"title": "CardDataVizBar",
|
|
1612
|
+
"summary": "Canonical bar-chart dashboard card with shared data-viz chrome, a filter action, a fill chart region, and an optional static legend.",
|
|
1613
|
+
"intentStatus": "complete",
|
|
1614
|
+
"intent": {
|
|
1615
|
+
"audience": "specialized",
|
|
1616
|
+
"status": "experimental",
|
|
1617
|
+
"summary": "Canonical bar-chart dashboard card with shared data-viz chrome, a filter action, a fill chart region, and an optional static legend.",
|
|
1618
|
+
"useWhen": [
|
|
1619
|
+
"A dashboard widget needs a regular, stacked, or percentage bar chart in the standard data-viz card.",
|
|
1620
|
+
"A stacked bar chart needs a visible static series key beneath the chart."
|
|
1621
|
+
],
|
|
1622
|
+
"avoidWhen": [
|
|
1623
|
+
"The visualization needs selectable legend rows or chart-to-legend hover synchronization.",
|
|
1624
|
+
"The product needs supporting metrics or an alternate chart layout beyond the chart and optional legend."
|
|
1625
|
+
],
|
|
1626
|
+
"alternatives": [
|
|
1627
|
+
{
|
|
1628
|
+
"when": "The bar chart needs a custom layout without card chrome.",
|
|
1629
|
+
"component": "component:ds-chart-bar",
|
|
1630
|
+
"reason": "Compose ChartBar directly in the product-owned layout."
|
|
1631
|
+
},
|
|
1632
|
+
{
|
|
1633
|
+
"when": "The visualization communicates change as continuous lines.",
|
|
1634
|
+
"component": "component:ds-card-data-viz-line",
|
|
1635
|
+
"reason": "CardDataVizLine owns the canonical line-chart card layout."
|
|
1636
|
+
},
|
|
1637
|
+
{
|
|
1638
|
+
"when": "The visualization communicates parts of one total with synchronized slice emphasis.",
|
|
1639
|
+
"component": "component:ds-card-data-viz-donut",
|
|
1640
|
+
"reason": "CardDataVizDonut owns the donut layout and bidirectional hover synchronization."
|
|
1641
|
+
}
|
|
1642
|
+
],
|
|
1643
|
+
"commonlyComposedWith": [
|
|
1644
|
+
"component:ds-card-shell-data-viz",
|
|
1645
|
+
"component:ds-chart-bar",
|
|
1646
|
+
"component:ds-chart-bar-stacked",
|
|
1647
|
+
"component:ds-chart-legend",
|
|
1648
|
+
"component:ds-button-unfilled"
|
|
1649
|
+
],
|
|
1650
|
+
"accessibility": [
|
|
1651
|
+
"Provide a concise heading that identifies the measure and meaningful visible labels for every legend entry.",
|
|
1652
|
+
"Keep essential series and value context available textually rather than relying on bar color alone.",
|
|
1653
|
+
"The card disables decorative legend-row hover; genuine legend links retain native link semantics and affordances."
|
|
1654
|
+
],
|
|
1655
|
+
"states": [
|
|
1656
|
+
"The chart region fills the remaining card body while an optional legend remains content-sized.",
|
|
1657
|
+
"The card disables local hover highlighting on a slotted ChartLegend because bar legends are static keys.",
|
|
1658
|
+
"Chart and legend regions render only when their corresponding slots contain content, avoiding empty region spacing.",
|
|
1659
|
+
"The owning product controls data, filtering, loading, empty, and error state; the card emits the filter action only."
|
|
1660
|
+
],
|
|
1661
|
+
"responsiveBehavior": [
|
|
1662
|
+
"The selected sm, md, or lg shell size controls the card dimensions while the bar chart shrinks within its chart region.",
|
|
1663
|
+
"The horizontal legend wraps complete entries when the available width is constrained.",
|
|
1664
|
+
"The parent dashboard owns card wrapping and breakpoint changes."
|
|
1665
|
+
],
|
|
1666
|
+
"frameworkCaveats": {
|
|
1667
|
+
"customElements": [
|
|
1668
|
+
"Assign data or series and categories as JavaScript properties, then place the bar chart and optional legend in their named slots."
|
|
1669
|
+
],
|
|
1670
|
+
"react": [
|
|
1671
|
+
"Keep filter and dataset state in the owner; pass the chart and optional legend with chart and legend slot attributes."
|
|
1672
|
+
],
|
|
1673
|
+
"angular": [
|
|
1674
|
+
"Keep filter and dataset state in the owner; project the chart and optional legend into the chart and legend slots."
|
|
1675
|
+
]
|
|
1676
|
+
},
|
|
1677
|
+
"references": [
|
|
1678
|
+
{
|
|
1679
|
+
"label": "Storybook examples",
|
|
1680
|
+
"path": "src/wc/components/CardDataVizBar/CardDataVizBar.stories.ts"
|
|
1681
|
+
}
|
|
1682
|
+
]
|
|
1683
|
+
},
|
|
1684
|
+
"api": {
|
|
1685
|
+
"props": {
|
|
1686
|
+
"cardWidth": {
|
|
1687
|
+
"type": "CardDataVizBarWidth",
|
|
1688
|
+
"required": false
|
|
1689
|
+
},
|
|
1690
|
+
"filterLabel": {
|
|
1691
|
+
"type": "string",
|
|
1692
|
+
"required": false
|
|
1693
|
+
},
|
|
1694
|
+
"heading": {
|
|
1695
|
+
"type": "string",
|
|
1696
|
+
"required": true
|
|
1697
|
+
}
|
|
1698
|
+
},
|
|
1699
|
+
"events": [
|
|
1700
|
+
{
|
|
1701
|
+
"name": "dsFilterClick",
|
|
1702
|
+
"detail": "void"
|
|
1703
|
+
}
|
|
1704
|
+
],
|
|
1705
|
+
"slots": []
|
|
1706
|
+
},
|
|
1707
|
+
"exports": {
|
|
1708
|
+
"customElement": "ds-card-data-viz-bar",
|
|
1709
|
+
"react": "DsCardDataVizBar",
|
|
1710
|
+
"angular": "DsCardDataVizBar"
|
|
1711
|
+
},
|
|
1712
|
+
"dependencies": [
|
|
1713
|
+
"@ds-mo/ui",
|
|
1714
|
+
"@ds-mo/tokens"
|
|
1715
|
+
],
|
|
1716
|
+
"componentDependencies": [
|
|
1717
|
+
"button-unfilled",
|
|
1718
|
+
"card-shell-data-viz"
|
|
1719
|
+
]
|
|
1720
|
+
},
|
|
1478
1721
|
{
|
|
1479
1722
|
"id": "component:ds-card-data-viz-donut",
|
|
1480
1723
|
"tag": "ds-card-data-viz-donut",
|
|
@@ -1589,6 +1832,114 @@
|
|
|
1589
1832
|
"card-shell-data-viz"
|
|
1590
1833
|
]
|
|
1591
1834
|
},
|
|
1835
|
+
{
|
|
1836
|
+
"id": "component:ds-card-data-viz-line",
|
|
1837
|
+
"tag": "ds-card-data-viz-line",
|
|
1838
|
+
"name": "card-data-viz-line",
|
|
1839
|
+
"title": "CardDataVizLine",
|
|
1840
|
+
"summary": "Canonical line-chart dashboard card with shared data-viz chrome, a filter action, fill chart region, and a static horizontal legend.",
|
|
1841
|
+
"intentStatus": "complete",
|
|
1842
|
+
"intent": {
|
|
1843
|
+
"audience": "specialized",
|
|
1844
|
+
"status": "experimental",
|
|
1845
|
+
"summary": "Canonical line-chart dashboard card with shared data-viz chrome, a filter action, fill chart region, and a static horizontal legend.",
|
|
1846
|
+
"useWhen": [
|
|
1847
|
+
"A dashboard widget needs the standard line chart and visible series key in one data-viz card.",
|
|
1848
|
+
"The legend identifies static line series and should not highlight or dim rows on hover."
|
|
1849
|
+
],
|
|
1850
|
+
"avoidWhen": [
|
|
1851
|
+
"The visualization needs chart-to-legend hover synchronization or selectable series controls.",
|
|
1852
|
+
"The product needs a custom legend treatment, supporting metrics, or an alternate chart layout."
|
|
1853
|
+
],
|
|
1854
|
+
"alternatives": [
|
|
1855
|
+
{
|
|
1856
|
+
"when": "The line chart and legend need a custom layout without card chrome.",
|
|
1857
|
+
"component": "component:ds-chart-line",
|
|
1858
|
+
"reason": "Compose ChartLine and a static ChartLegend directly in the product-owned layout."
|
|
1859
|
+
},
|
|
1860
|
+
{
|
|
1861
|
+
"when": "The visualization communicates parts of a total with synchronized slice emphasis.",
|
|
1862
|
+
"component": "component:ds-card-data-viz-donut",
|
|
1863
|
+
"reason": "CardDataVizDonut owns the donut layout and bidirectional hover synchronization."
|
|
1864
|
+
}
|
|
1865
|
+
],
|
|
1866
|
+
"commonlyComposedWith": [
|
|
1867
|
+
"component:ds-card-shell-data-viz",
|
|
1868
|
+
"component:ds-chart-line",
|
|
1869
|
+
"component:ds-chart-legend",
|
|
1870
|
+
"component:ds-button-unfilled"
|
|
1871
|
+
],
|
|
1872
|
+
"accessibility": [
|
|
1873
|
+
"Provide a concise heading that identifies the trend and meaningful visible labels for every legend entry.",
|
|
1874
|
+
"Keep essential series and value context available textually rather than relying on line color alone.",
|
|
1875
|
+
"The card disables decorative legend-row hover; genuine legend links retain native link semantics and affordances."
|
|
1876
|
+
],
|
|
1877
|
+
"states": [
|
|
1878
|
+
"The chart region fills the remaining card body while the legend remains content-sized.",
|
|
1879
|
+
"The card disables local hover highlighting on a slotted ChartLegend because the line chart is static.",
|
|
1880
|
+
"Chart and legend regions render only when their corresponding slots contain content, avoiding empty region spacing.",
|
|
1881
|
+
"The owning product controls data, filtering, loading, empty, and error state; the card emits the filter action only."
|
|
1882
|
+
],
|
|
1883
|
+
"responsiveBehavior": [
|
|
1884
|
+
"The selected sm, md, or lg shell size controls the card dimensions while the line chart shrinks within its chart region.",
|
|
1885
|
+
"The horizontal legend wraps complete entries when the available width is constrained.",
|
|
1886
|
+
"The parent dashboard owns card wrapping and breakpoint changes."
|
|
1887
|
+
],
|
|
1888
|
+
"frameworkCaveats": {
|
|
1889
|
+
"customElements": [
|
|
1890
|
+
"Assign series, categories, and legend items as JavaScript properties, then place the chart and legend in their named slots."
|
|
1891
|
+
],
|
|
1892
|
+
"react": [
|
|
1893
|
+
"Keep filter and dataset state in the owner; pass the chart and legend with chart and legend slot attributes."
|
|
1894
|
+
],
|
|
1895
|
+
"angular": [
|
|
1896
|
+
"Keep filter and dataset state in the owner; project the chart and legend into the chart and legend slots."
|
|
1897
|
+
]
|
|
1898
|
+
},
|
|
1899
|
+
"references": [
|
|
1900
|
+
{
|
|
1901
|
+
"label": "Storybook examples",
|
|
1902
|
+
"path": "src/wc/components/CardDataVizLine/CardDataVizLine.stories.ts"
|
|
1903
|
+
}
|
|
1904
|
+
]
|
|
1905
|
+
},
|
|
1906
|
+
"api": {
|
|
1907
|
+
"props": {
|
|
1908
|
+
"cardWidth": {
|
|
1909
|
+
"type": "CardDataVizLineWidth",
|
|
1910
|
+
"required": false
|
|
1911
|
+
},
|
|
1912
|
+
"filterLabel": {
|
|
1913
|
+
"type": "string",
|
|
1914
|
+
"required": false
|
|
1915
|
+
},
|
|
1916
|
+
"heading": {
|
|
1917
|
+
"type": "string",
|
|
1918
|
+
"required": true
|
|
1919
|
+
}
|
|
1920
|
+
},
|
|
1921
|
+
"events": [
|
|
1922
|
+
{
|
|
1923
|
+
"name": "dsFilterClick",
|
|
1924
|
+
"detail": "void"
|
|
1925
|
+
}
|
|
1926
|
+
],
|
|
1927
|
+
"slots": []
|
|
1928
|
+
},
|
|
1929
|
+
"exports": {
|
|
1930
|
+
"customElement": "ds-card-data-viz-line",
|
|
1931
|
+
"react": "DsCardDataVizLine",
|
|
1932
|
+
"angular": "DsCardDataVizLine"
|
|
1933
|
+
},
|
|
1934
|
+
"dependencies": [
|
|
1935
|
+
"@ds-mo/ui",
|
|
1936
|
+
"@ds-mo/tokens"
|
|
1937
|
+
],
|
|
1938
|
+
"componentDependencies": [
|
|
1939
|
+
"button-unfilled",
|
|
1940
|
+
"card-shell-data-viz"
|
|
1941
|
+
]
|
|
1942
|
+
},
|
|
1592
1943
|
{
|
|
1593
1944
|
"id": "component:ds-card-setting",
|
|
1594
1945
|
"tag": "ds-card-setting",
|
|
@@ -1764,13 +2115,20 @@
|
|
|
1764
2115
|
"when": "The composition is the standard donut chart plus synchronized legend.",
|
|
1765
2116
|
"component": "component:ds-card-data-viz-donut",
|
|
1766
2117
|
"reason": "CardDataVizDonut composes this shell with donut-specific regions and hover synchronization."
|
|
2118
|
+
},
|
|
2119
|
+
{
|
|
2120
|
+
"when": "The composition is the standard line chart plus static horizontal legend.",
|
|
2121
|
+
"component": "component:ds-card-data-viz-line",
|
|
2122
|
+
"reason": "CardDataVizLine composes this shell with line-specific regions and disables decorative legend hover."
|
|
1767
2123
|
}
|
|
1768
2124
|
],
|
|
1769
2125
|
"commonlyComposedWith": [
|
|
1770
2126
|
"component:ds-chart-bar",
|
|
2127
|
+
"component:ds-chart-bar-stacked",
|
|
1771
2128
|
"component:ds-chart-donut",
|
|
1772
2129
|
"component:ds-chart-line",
|
|
1773
2130
|
"component:ds-chart-legend",
|
|
2131
|
+
"component:ds-card-data-viz-line",
|
|
1774
2132
|
"component:ds-button-unfilled"
|
|
1775
2133
|
],
|
|
1776
2134
|
"accessibility": [
|
|
@@ -1856,6 +2214,11 @@
|
|
|
1856
2214
|
"The data communicates a part-to-whole relationship."
|
|
1857
2215
|
],
|
|
1858
2216
|
"alternatives": [
|
|
2217
|
+
{
|
|
2218
|
+
"when": "Each category contains several additive series or needs normalized composition.",
|
|
2219
|
+
"component": "component:ds-chart-bar-stacked",
|
|
2220
|
+
"reason": "ChartBarStacked compares raw stacked totals or normalized 0–100% composition."
|
|
2221
|
+
},
|
|
1859
2222
|
{
|
|
1860
2223
|
"when": "Users need to follow one or more trends across ordered categories.",
|
|
1861
2224
|
"component": "component:ds-chart-line",
|
|
@@ -1868,6 +2231,7 @@
|
|
|
1868
2231
|
}
|
|
1869
2232
|
],
|
|
1870
2233
|
"commonlyComposedWith": [
|
|
2234
|
+
"component:ds-chart-bar-stacked",
|
|
1871
2235
|
"component:ds-card-shell-data-viz",
|
|
1872
2236
|
"component:ds-tooltip-data-viz"
|
|
1873
2237
|
],
|
|
@@ -1879,6 +2243,7 @@
|
|
|
1879
2243
|
"states": [
|
|
1880
2244
|
"The chart is currently a static single-series rendering without hover, selection, loading, or empty-state policy.",
|
|
1881
2245
|
"An empty dataset renders no bars; the owning card or product supplies meaningful empty-state messaging.",
|
|
2246
|
+
"Bars use 2px top corner radii while the lower corners touching the zero axis remain square.",
|
|
1882
2247
|
"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.",
|
|
1883
2248
|
"Authored datum colors override the shared categorical palette."
|
|
1884
2249
|
],
|
|
@@ -1934,6 +2299,123 @@
|
|
|
1934
2299
|
],
|
|
1935
2300
|
"componentDependencies": []
|
|
1936
2301
|
},
|
|
2302
|
+
{
|
|
2303
|
+
"id": "component:ds-chart-bar-stacked",
|
|
2304
|
+
"tag": "ds-chart-bar-stacked",
|
|
2305
|
+
"name": "chart-bar-stacked",
|
|
2306
|
+
"title": "ChartBarStacked",
|
|
2307
|
+
"summary": "Multi-series stacked bar chart for comparing raw totals or normalized 0–100% composition across ordered categories and time buckets.",
|
|
2308
|
+
"intentStatus": "complete",
|
|
2309
|
+
"intent": {
|
|
2310
|
+
"audience": "specialized",
|
|
2311
|
+
"status": "experimental",
|
|
2312
|
+
"summary": "Multi-series stacked bar chart for comparing raw totals or normalized 0–100% composition across ordered categories and time buckets.",
|
|
2313
|
+
"useWhen": [
|
|
2314
|
+
"Users need to compare both a category total and the contribution of several consistent series.",
|
|
2315
|
+
"A time series needs to show how its composition changes across equal time buckets.",
|
|
2316
|
+
"Every category should normalize to 100% so proportional composition can be compared independently of total magnitude."
|
|
2317
|
+
],
|
|
2318
|
+
"avoidWhen": [
|
|
2319
|
+
"Users need to compare individual series values precisely across categories; use grouped bars or separate charts.",
|
|
2320
|
+
"The visualization has only one measure per category; use ChartBar.",
|
|
2321
|
+
"The primary task is following continuous trends; use ChartLine.",
|
|
2322
|
+
"Series contain negative values or do not align with the shared category list."
|
|
2323
|
+
],
|
|
2324
|
+
"alternatives": [
|
|
2325
|
+
{
|
|
2326
|
+
"when": "Each category contains one independent value.",
|
|
2327
|
+
"component": "component:ds-chart-bar",
|
|
2328
|
+
"reason": "ChartBar provides the simpler single-series magnitude comparison."
|
|
2329
|
+
},
|
|
2330
|
+
{
|
|
2331
|
+
"when": "Users need to follow one or more trends rather than compare stack composition.",
|
|
2332
|
+
"component": "component:ds-chart-line",
|
|
2333
|
+
"reason": "ChartLine preserves each series as a continuous path across the ordered axis."
|
|
2334
|
+
},
|
|
2335
|
+
{
|
|
2336
|
+
"when": "One category's parts-to-whole composition is the focus.",
|
|
2337
|
+
"component": "component:ds-chart-donut",
|
|
2338
|
+
"reason": "ChartDonut provides the dedicated single-total composition treatment."
|
|
2339
|
+
}
|
|
2340
|
+
],
|
|
2341
|
+
"commonlyComposedWith": [
|
|
2342
|
+
"component:ds-chart-legend",
|
|
2343
|
+
"component:ds-card-shell-data-viz",
|
|
2344
|
+
"component:ds-tooltip-data-viz"
|
|
2345
|
+
],
|
|
2346
|
+
"accessibility": [
|
|
2347
|
+
"Provide a visible legend or adjacent textual summary that names every series; do not rely on segment color alone.",
|
|
2348
|
+
"The chart image name includes each category and series value, using normalized percentages in percentage mode.",
|
|
2349
|
+
"Use an adjacent data table when exact cross-category comparisons are necessary to complete the task."
|
|
2350
|
+
],
|
|
2351
|
+
"states": [
|
|
2352
|
+
"Stacked mode preserves raw magnitudes and scales the y-axis to the largest category total.",
|
|
2353
|
+
"Percentage mode normalizes each non-empty category independently and renders a fixed 0%, 25%, 50%, 75%, and 100% axis.",
|
|
2354
|
+
"Series render bottom-to-top in authored order; keep that order and color mapping stable across categories.",
|
|
2355
|
+
"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.",
|
|
2356
|
+
"Adjacent segments are separated by a non-scaling 1px gap; the stack's outer edges do not receive that separator.",
|
|
2357
|
+
"Negative values are unsupported and render as zero; the owning product supplies loading, empty, and error states."
|
|
2358
|
+
],
|
|
2359
|
+
"responsiveBehavior": [
|
|
2360
|
+
"The SVG preserves its authored aspect ratio while shrinking to fit a narrower parent.",
|
|
2361
|
+
"The parent supplies dimensions and chooses how many time buckets remain legible at each width.",
|
|
2362
|
+
"Pre-format category labels and reduce bucket count before rendering when horizontal space becomes constrained."
|
|
2363
|
+
],
|
|
2364
|
+
"frameworkCaveats": {
|
|
2365
|
+
"customElements": [
|
|
2366
|
+
"Assign series and categories as JavaScript properties and keep every series aligned to the category count."
|
|
2367
|
+
],
|
|
2368
|
+
"react": [
|
|
2369
|
+
"Pass stable series and category arrays; choose percentage variant only when each category represents a meaningful whole."
|
|
2370
|
+
],
|
|
2371
|
+
"angular": [
|
|
2372
|
+
"Bind series and categories as properties; choose percentage variant only when each category represents a meaningful whole."
|
|
2373
|
+
]
|
|
2374
|
+
},
|
|
2375
|
+
"references": [
|
|
2376
|
+
{
|
|
2377
|
+
"label": "Storybook examples",
|
|
2378
|
+
"path": "src/wc/components/ChartBarStacked/ChartBarStacked.stories.ts"
|
|
2379
|
+
}
|
|
2380
|
+
]
|
|
2381
|
+
},
|
|
2382
|
+
"api": {
|
|
2383
|
+
"props": {
|
|
2384
|
+
"categories": {
|
|
2385
|
+
"type": "string[]",
|
|
2386
|
+
"required": false
|
|
2387
|
+
},
|
|
2388
|
+
"height": {
|
|
2389
|
+
"type": "number",
|
|
2390
|
+
"required": false
|
|
2391
|
+
},
|
|
2392
|
+
"series": {
|
|
2393
|
+
"type": "ChartSeries[]",
|
|
2394
|
+
"required": false
|
|
2395
|
+
},
|
|
2396
|
+
"variant": {
|
|
2397
|
+
"type": "ChartBarStackedVariant",
|
|
2398
|
+
"required": false
|
|
2399
|
+
},
|
|
2400
|
+
"width": {
|
|
2401
|
+
"type": "number",
|
|
2402
|
+
"required": false
|
|
2403
|
+
}
|
|
2404
|
+
},
|
|
2405
|
+
"events": [],
|
|
2406
|
+
"slots": []
|
|
2407
|
+
},
|
|
2408
|
+
"exports": {
|
|
2409
|
+
"customElement": "ds-chart-bar-stacked",
|
|
2410
|
+
"react": "DsChartBarStacked",
|
|
2411
|
+
"angular": "DsChartBarStacked"
|
|
2412
|
+
},
|
|
2413
|
+
"dependencies": [
|
|
2414
|
+
"@ds-mo/ui",
|
|
2415
|
+
"@ds-mo/tokens"
|
|
2416
|
+
],
|
|
2417
|
+
"componentDependencies": []
|
|
2418
|
+
},
|
|
1937
2419
|
{
|
|
1938
2420
|
"id": "component:ds-chart-donut",
|
|
1939
2421
|
"tag": "ds-chart-donut",
|
|
@@ -2107,12 +2589,19 @@
|
|
|
2107
2589
|
"when": "The donut belongs in the canonical dashboard card.",
|
|
2108
2590
|
"component": "component:ds-card-data-viz-donut",
|
|
2109
2591
|
"reason": "The dedicated card places the legend and handles bidirectional highlight synchronization."
|
|
2592
|
+
},
|
|
2593
|
+
{
|
|
2594
|
+
"when": "A static line chart and series key belong in the canonical dashboard card.",
|
|
2595
|
+
"component": "component:ds-card-data-viz-line",
|
|
2596
|
+
"reason": "The dedicated card places the horizontal legend and disables decorative local hover highlighting."
|
|
2110
2597
|
}
|
|
2111
2598
|
],
|
|
2112
2599
|
"commonlyComposedWith": [
|
|
2113
2600
|
"component:ds-chart-donut",
|
|
2601
|
+
"component:ds-chart-bar-stacked",
|
|
2114
2602
|
"component:ds-chart-line",
|
|
2115
2603
|
"component:ds-card-data-viz-donut",
|
|
2604
|
+
"component:ds-card-data-viz-line",
|
|
2116
2605
|
"component:ds-card-shell-data-viz"
|
|
2117
2606
|
],
|
|
2118
2607
|
"accessibility": [
|
|
@@ -2122,7 +2611,8 @@
|
|
|
2122
2611
|
"Do not rely on swatch color alone; every entry requires a meaningful visible label."
|
|
2123
2612
|
],
|
|
2124
2613
|
"states": [
|
|
2125
|
-
"Local pointer or focus interaction and external chart highlight remain separate; both may dim peers, but only a real link row receives
|
|
2614
|
+
"Local pointer or focus interaction and external chart highlight remain separate; both may dim peers, but only a real link row receives navigation affordances.",
|
|
2615
|
+
"Disable local hover highlighting for static keys such as a line-chart legend; externally controlled activeLabel highlighting and genuine link affordances remain available.",
|
|
2126
2616
|
"Hover synchronization is temporary emphasis, never filtering, toggling, or selected state.",
|
|
2127
2617
|
"Percentage values use one consistent precision across the complete legend.",
|
|
2128
2618
|
"The list owns pointer leave so moving across row gaps does not clear and reapply highlight."
|
|
@@ -2164,6 +2654,10 @@
|
|
|
2164
2654
|
"type": "ChartLegendDirection",
|
|
2165
2655
|
"required": false
|
|
2166
2656
|
},
|
|
2657
|
+
"highlightOnHover": {
|
|
2658
|
+
"type": "boolean",
|
|
2659
|
+
"required": false
|
|
2660
|
+
},
|
|
2167
2661
|
"items": {
|
|
2168
2662
|
"type": "ChartLegendItem[]",
|
|
2169
2663
|
"required": false
|
|
@@ -2242,6 +2736,7 @@
|
|
|
2242
2736
|
],
|
|
2243
2737
|
"commonlyComposedWith": [
|
|
2244
2738
|
"component:ds-chart-legend",
|
|
2739
|
+
"component:ds-card-data-viz-line",
|
|
2245
2740
|
"component:ds-card-shell-data-viz",
|
|
2246
2741
|
"component:ds-tooltip-data-viz"
|
|
2247
2742
|
],
|
|
@@ -2252,11 +2747,12 @@
|
|
|
2252
2747
|
],
|
|
2253
2748
|
"states": [
|
|
2254
2749
|
"The chart is currently static and does not own hover, selection, loading, or empty-state policy.",
|
|
2750
|
+
"Its standard horizontal legend is a static key with local hover highlighting disabled.",
|
|
2255
2751
|
"Point markers may be shown or hidden without changing the underlying series meaning.",
|
|
2256
2752
|
"Authored series colors override the shared categorical palette."
|
|
2257
2753
|
],
|
|
2258
2754
|
"responsiveBehavior": [
|
|
2259
|
-
"The owner supplies dimensions
|
|
2755
|
+
"The owner supplies intrinsic dimensions; the SVG preserves its aspect ratio while shrinking to fit a narrower parent.",
|
|
2260
2756
|
"Category positions are always equally spaced, even when labels represent time.",
|
|
2261
2757
|
"Reduce or pre-format dense labels before passing them; the chart renders authored labels without a continuous time scale."
|
|
2262
2758
|
],
|
|
@@ -2766,7 +3262,7 @@
|
|
|
2766
3262
|
],
|
|
2767
3263
|
"states": [
|
|
2768
3264
|
"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.",
|
|
2769
|
-
"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
|
|
3265
|
+
"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.",
|
|
2770
3266
|
"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.",
|
|
2771
3267
|
"Hover and press use the shared interaction hover and pressed overlays. Only the selected conversation uses the persistent active fill.",
|
|
2772
3268
|
"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.",
|
|
@@ -3982,10 +4478,11 @@
|
|
|
3982
4478
|
],
|
|
3983
4479
|
"accessibility": [
|
|
3984
4480
|
"Author and time metadata remain textual when they are necessary to interpret the transcript.",
|
|
3985
|
-
"Delivery failure uses negative Failed to send text in the footer while the message bubble keeps its normal outgoing treatment."
|
|
4481
|
+
"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."
|
|
3986
4482
|
],
|
|
3987
4483
|
"states": [
|
|
3988
4484
|
"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.",
|
|
4485
|
+
"A visible incoming author uses body-small emphasis with primary foreground; timestamp and delivery metadata remain caption text.",
|
|
3989
4486
|
"Visible author, bubble content, and timestamp or delivery footer use consistent 4px vertical gaps.",
|
|
3990
4487
|
"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.",
|
|
3991
4488
|
"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."
|
|
@@ -4265,7 +4762,9 @@
|
|
|
4265
4762
|
"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."
|
|
4266
4763
|
],
|
|
4267
4764
|
"responsiveBehavior": [
|
|
4268
|
-
"Transcript width is readable while the scroll region fills available height."
|
|
4765
|
+
"Transcript width is readable while the scroll region fills available height.",
|
|
4766
|
+
"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.",
|
|
4767
|
+
"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."
|
|
4269
4768
|
],
|
|
4270
4769
|
"references": [
|
|
4271
4770
|
{
|
|
@@ -6384,15 +6883,15 @@
|
|
|
6384
6883
|
"tag": "ds-shell-page",
|
|
6385
6884
|
"name": "shell-page",
|
|
6386
6885
|
"title": "ShellPage",
|
|
6387
|
-
"summary": "The standard routed-page boundary inside ShellApp, owning sticky BarTitle or BarWorkflow placement,
|
|
6886
|
+
"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.",
|
|
6388
6887
|
"intentStatus": "complete",
|
|
6389
6888
|
"intent": {
|
|
6390
6889
|
"audience": "general",
|
|
6391
6890
|
"status": "stable",
|
|
6392
|
-
"summary": "The standard routed-page boundary inside ShellApp, owning sticky BarTitle or BarWorkflow placement,
|
|
6891
|
+
"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.",
|
|
6393
6892
|
"useWhen": [
|
|
6394
6893
|
"Rendering a standard routed page inside ShellApp's default content region.",
|
|
6395
|
-
"BarTitle should expand at a roomy page top, compact after scroll, or use constrained action layout when the
|
|
6894
|
+
"BarTitle should expand at a roomy page top, compact after scroll, or use constrained action layout when the application shell reports reduced capacity.",
|
|
6396
6895
|
"BarWorkflow needs sticky page-level placement while remaining compact.",
|
|
6397
6896
|
"Pages need consistent content gutters with an explicit full-bleed option."
|
|
6398
6897
|
],
|
|
@@ -6429,16 +6928,18 @@
|
|
|
6429
6928
|
"Responsive variant changes preserve the same heading, controls, accessible names, and keyboard focus targets."
|
|
6430
6929
|
],
|
|
6431
6930
|
"states": [
|
|
6432
|
-
"
|
|
6931
|
+
"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.",
|
|
6932
|
+
"headerPresentation=auto selects the matching header variant from headerCapacity and scroll position.",
|
|
6433
6933
|
"expanded, compact, and constrained are explicit overrides for exceptional layouts and deterministic examples.",
|
|
6434
6934
|
"contentInset=default supplies standard page gutters; none permits maps, canvases, and other full-bleed content.",
|
|
6435
6935
|
"The required header slot accepts one BarTitle or BarWorkflow. The default slot owns router output and all page product content."
|
|
6436
6936
|
],
|
|
6437
6937
|
"responsiveBehavior": [
|
|
6438
|
-
"
|
|
6439
|
-
"Roomy
|
|
6440
|
-
"A
|
|
6441
|
-
"
|
|
6938
|
+
"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.",
|
|
6939
|
+
"Roomy capacity expands at the top and compacts after scroll; compact capacity stays compact; constrained capacity uses the constrained action layout.",
|
|
6940
|
+
"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.",
|
|
6941
|
+
"Update headerCapacity synchronously with shell layout state so opening tools or crossing application breakpoints cannot briefly render the wrong presentation.",
|
|
6942
|
+
"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.",
|
|
6442
6943
|
"Scroll compaction preserves the expanded page flow offset so content never jumps beneath the sticky header.",
|
|
6443
6944
|
"ShellPage relies on ShellApp's content scroller and never introduces nested scrolling.",
|
|
6444
6945
|
"BarWorkflow remains compact and is not assigned BarTitle's capacity or scroll variants."
|
|
@@ -6478,6 +6979,10 @@
|
|
|
6478
6979
|
"type": "ShellPageContentInset",
|
|
6479
6980
|
"required": false
|
|
6480
6981
|
},
|
|
6982
|
+
"headerCapacity": {
|
|
6983
|
+
"type": "ShellPageCapacity",
|
|
6984
|
+
"required": false
|
|
6985
|
+
},
|
|
6481
6986
|
"headerPresentation": {
|
|
6482
6987
|
"type": "ShellPageHeaderPresentation",
|
|
6483
6988
|
"required": false
|
|
@@ -8014,12 +8519,12 @@
|
|
|
8014
8519
|
"pattern:conversation"
|
|
8015
8520
|
],
|
|
8016
8521
|
"accessibility": [
|
|
8017
|
-
"Provide concise localized status text
|
|
8522
|
+
"Provide concise localized status text; the standard label is Typing followed by a three-dot ellipsis.",
|
|
8018
8523
|
"The polite atomic status announces typing without representing it as a message bubble."
|
|
8019
8524
|
],
|
|
8020
8525
|
"states": [
|
|
8021
8526
|
"TypingIndicator is transient conversation status, never persisted message content.",
|
|
8022
|
-
"Its body-
|
|
8527
|
+
"Its body-medium secondary text may shimmer, while reduced-motion preferences retain a static readable status."
|
|
8023
8528
|
],
|
|
8024
8529
|
"responsiveBehavior": [
|
|
8025
8530
|
"The indicator fills the message content width and wraps only when localized status text requires it."
|