@ds-mo/ui 13.4.0 → 13.6.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/dist/.package-ready.json +1 -1
- package/dist/agent-patterns.json +8 -1
- package/dist/agent.json +187 -26
- package/dist/angular/ds-banner.d.ts +23 -0
- package/dist/angular/ds-banner.js +45 -0
- package/dist/angular/ds-modal.d.ts +1 -1
- package/dist/angular/ds-modal.js +3 -3
- package/dist/angular/index.d.ts +1 -1
- package/dist/angular/index.js +1 -0
- package/dist/angular/proxies.d.ts +1 -0
- package/dist/angular/proxies.js +1 -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-banner.d.ts +11 -0
- package/dist/components/ds-banner.js +2 -0
- package/dist/components/ds-banner.js.map +1 -0
- package/dist/components/ds-bar-nav.js +1 -1
- package/dist/components/ds-bar-title.js +1 -1
- package/dist/components/ds-bar-workflow.js +1 -1
- package/dist/components/ds-breadcrumb.js +1 -1
- 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.js +1 -1
- package/dist/components/ds-card-overview.js +1 -1
- package/dist/components/ds-card-overview.js.map +1 -1
- package/dist/components/ds-card-setting.js +1 -1
- package/dist/components/ds-card-setting.js.map +1 -1
- package/dist/components/ds-chart-bar.js +1 -1
- package/dist/components/ds-chart-donut.js +1 -1
- package/dist/components/ds-chart-legend.js +1 -1
- package/dist/components/ds-chart-line.js +1 -1
- package/dist/components/ds-checkbox.js +1 -1
- package/dist/components/ds-chip.js +1 -1
- package/dist/components/ds-code-block.js +1 -1
- package/dist/components/ds-conversation-list-item.js +1 -1
- package/dist/components/ds-conversation-list-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-input.js.map +1 -1
- package/dist/components/ds-markdown.js +1 -1
- package/dist/components/ds-menu.js +1 -1
- package/dist/components/ds-message-actions.js +1 -1
- package/dist/components/ds-message-actions.js.map +1 -1
- package/dist/components/ds-message-bubble.js +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.js +1 -1
- package/dist/components/ds-mobile-bar-nav.js +1 -1
- package/dist/components/ds-mobile-header.js +1 -1
- package/dist/components/ds-mobile-section-switcher.js +1 -1
- package/dist/components/ds-mobile-sheet-nav.js +1 -1
- package/dist/components/ds-modal.js +1 -1
- package/dist/components/ds-modal.js.map +1 -1
- package/dist/components/ds-panel-nav.js +1 -1
- package/dist/components/ds-panel-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.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-page.js +1 -1
- package/dist/components/ds-shell-tools.js +1 -1
- package/dist/components/ds-skeleton.js +1 -1
- package/dist/components/ds-slider.js +1 -1
- package/dist/components/ds-swatch-picker.js +1 -1
- package/dist/components/ds-switch.js +1 -1
- package/dist/components/ds-tab-group.js +1 -1
- package/dist/components/ds-tag.js +1 -1
- package/dist/components/ds-text.js +1 -1
- package/dist/components/ds-toast.js +1 -1
- package/dist/components/ds-tooltip-data-viz.js +1 -1
- package/dist/components/ds-tooltip.js +1 -1
- package/dist/components/ds-typing-indicator.js +1 -1
- package/dist/components/{p-BN9FZESH.js → p-1S9AW2MA.js} +2 -2
- package/dist/components/{p-D4bVE7e4.js → p-6B411hQA.js} +2 -2
- package/dist/components/{p-D5PN6zdD.js → p-B-kRByho.js} +2 -2
- package/dist/components/{p-CmUGA_q4.js → p-B4_0Ys4w.js} +2 -2
- package/dist/components/{p-BApNi_xA.js → p-B6RrZQqw.js} +2 -2
- package/dist/components/{p-CQ4vAZ9j.js → p-BBtjABBS.js} +2 -2
- package/dist/components/{p-CmMfRM1s.js → p-BFfHIu6y.js} +2 -2
- package/dist/components/{p-CBiAsFAZ.js → p-BPyymeuR.js} +2 -2
- package/dist/components/{p-Bgh0uG51.js → p-BR_oMaas.js} +2 -2
- package/dist/components/{p-w2kKeG_h.js → p-Bb4f5SuF.js} +2 -2
- package/dist/components/p-Bl6A5AJq.js +2 -0
- package/dist/components/{p-CIgag7g2.js.map → p-Bl6A5AJq.js.map} +1 -1
- package/dist/components/{p-B5snQKiP.js → p-BmNpPyzf.js} +2 -2
- package/dist/components/{p-CWItD0gL.js → p-Bmo4T96l.js} +2 -2
- package/dist/components/{p-DHAuidt1.js → p-Bsfpxto1.js} +2 -2
- package/dist/components/{p-a6cnCKWk.js → p-BtuYufL3.js} +2 -2
- package/dist/components/{p-BxEOlO5k.js → p-CKRJX0Y0.js} +2 -2
- package/dist/components/{p-1moOgMI-.js → p-Ca6s5fLR.js} +2 -2
- package/dist/components/{p-RT1mts9U.js → p-CbjFUpOj.js} +2 -2
- package/dist/components/{p-CqOswTy8.js → p-CuJ3J6OJ.js} +2 -2
- package/dist/components/{p-BQTJ7ePr.js → p-CxgMUvqg.js} +2 -2
- package/dist/components/{p-CWKrq35a.js → p-D0bM3cKj.js} +2 -2
- package/dist/components/{p-UtfErnpX.js → p-D2cjoj2r.js} +2 -2
- package/dist/components/{p-CGwVooB6.js → p-DHF5cLzr.js} +2 -2
- package/dist/components/{p-BgjtMMye.js → p-DVuxzrCC.js} +2 -2
- package/dist/components/p-DX4c3kZ1.js +2 -0
- package/dist/components/p-DX4c3kZ1.js.map +1 -0
- package/dist/components/p-DaqFuVKZ.js +2 -0
- package/dist/components/p-DaqFuVKZ.js.map +1 -0
- package/dist/components/{p-DXGKfXTh.js → p-DfvDNcoq.js} +2 -2
- package/dist/components/p-Di81y9Q2.js +2 -0
- package/dist/components/{p-C_3mZMFK.js → p-Eep5mxtv.js} +2 -2
- package/dist/components/{p-DoNdiEly.js → p-IYy-jODg.js} +2 -2
- package/dist/components/{p-DtV263qO.js → p-iCjUWcp7.js} +2 -2
- package/dist/components/{p-BgASe-BH.js → p-og48Kh2i.js} +2 -2
- package/dist/components/{p-BSocHH2X.js → p-wOOAzVMC.js} +2 -2
- package/dist/docs/components.json +445 -16
- package/dist/mcp-data/registry/agent-activity.json +1 -1
- package/dist/mcp-data/registry/agent-response.json +1 -1
- package/dist/mcp-data/registry/agent-source-list.json +1 -1
- package/dist/mcp-data/registry/agent-tool-call.json +1 -1
- package/dist/mcp-data/registry/attachment-list.json +1 -1
- package/dist/mcp-data/registry/avatar.json +1 -1
- package/dist/mcp-data/registry/badge.json +1 -1
- package/dist/mcp-data/registry/banner.json +333 -0
- package/dist/mcp-data/registry/bar-nav.json +1 -1
- package/dist/mcp-data/registry/bar-title.json +4 -4
- package/dist/mcp-data/registry/bar-workflow.json +1 -1
- package/dist/mcp-data/registry/breadcrumb.json +1 -1
- package/dist/mcp-data/registry/button-filled.json +1 -1
- package/dist/mcp-data/registry/button-unfilled.json +1 -1
- package/dist/mcp-data/registry/card-data-viz.json +1 -1
- package/dist/mcp-data/registry/card-overview.json +33 -35
- package/dist/mcp-data/registry/card-setting.json +1 -1
- package/dist/mcp-data/registry/chart-bar.json +1 -1
- package/dist/mcp-data/registry/chart-donut.json +1 -1
- package/dist/mcp-data/registry/chart-legend.json +1 -1
- package/dist/mcp-data/registry/chart-line.json +1 -1
- package/dist/mcp-data/registry/checkbox.json +1 -1
- package/dist/mcp-data/registry/chip.json +1 -1
- package/dist/mcp-data/registry/code-block.json +1 -1
- package/dist/mcp-data/registry/conversation-list-item.json +1 -1
- package/dist/mcp-data/registry/conversation-list-section.json +1 -1
- package/dist/mcp-data/registry/conversation-list.json +1 -1
- package/dist/mcp-data/registry/divider.json +1 -1
- package/dist/mcp-data/registry/empty-state.json +1 -1
- package/dist/mcp-data/registry/field.json +1 -1
- package/dist/mcp-data/registry/icon.json +1 -1
- package/dist/mcp-data/registry/input.json +6 -6
- package/dist/mcp-data/registry/loader.json +1 -1
- package/dist/mcp-data/registry/markdown.json +1 -1
- package/dist/mcp-data/registry/menu.json +1 -1
- package/dist/mcp-data/registry/message-actions.json +3 -2
- package/dist/mcp-data/registry/message-bubble.json +1 -1
- package/dist/mcp-data/registry/message-composer.json +1 -1
- package/dist/mcp-data/registry/message-scroller.json +1 -1
- package/dist/mcp-data/registry/message.json +1 -1
- package/dist/mcp-data/registry/mobile-bar-nav.json +1 -1
- package/dist/mcp-data/registry/mobile-header.json +1 -1
- package/dist/mcp-data/registry/mobile-section-switcher.json +1 -1
- package/dist/mcp-data/registry/mobile-sheet-nav.json +1 -1
- package/dist/mcp-data/registry/modal.json +26 -6
- package/dist/mcp-data/registry/panel-nav.json +1 -1
- package/dist/mcp-data/registry/panel-sub-nav.json +1 -1
- package/dist/mcp-data/registry/panel-tool-header.json +4 -4
- package/dist/mcp-data/registry/panel-tool-search.json +1 -1
- package/dist/mcp-data/registry/panel-tools.json +4 -3
- package/dist/mcp-data/registry/radio.json +1 -1
- package/dist/mcp-data/registry/registry.json +190 -26
- package/dist/mcp-data/registry/scroll-overlay.json +1 -1
- package/dist/mcp-data/registry/select.json +5 -5
- package/dist/mcp-data/registry/shell-app.json +7 -3
- package/dist/mcp-data/registry/shell-page.json +1 -1
- package/dist/mcp-data/registry/shell-tools.json +1 -1
- package/dist/mcp-data/registry/skeleton.json +1 -1
- package/dist/mcp-data/registry/slider.json +1 -1
- package/dist/mcp-data/registry/swatch-picker.json +1 -1
- package/dist/mcp-data/registry/switch.json +1 -1
- package/dist/mcp-data/registry/tab-group.json +1 -1
- package/dist/mcp-data/registry/tag.json +1 -1
- package/dist/mcp-data/registry/text.json +1 -1
- package/dist/mcp-data/registry/toast.json +1 -1
- package/dist/mcp-data/registry/tooltip-data-viz.json +1 -1
- package/dist/mcp-data/registry/tooltip.json +1 -1
- package/dist/mcp-data/registry/typing-indicator.json +1 -1
- package/dist/react/components.d.ts +1 -0
- package/dist/react/components.js +1 -0
- package/dist/react/ds-banner.d.ts +13 -0
- package/dist/react/ds-banner.js +15 -0
- package/dist/types/components/Banner/Banner.d.ts +50 -0
- package/dist/types/components/CardOverview/CardOverview.d.ts +10 -9
- package/dist/types/components/CardOverview/card-overview-controller.d.ts +13 -1
- package/dist/types/components/CardOverview/card-overview-types.d.ts +8 -2
- package/dist/types/components/CardOverview/index.d.ts +1 -1
- package/dist/types/components/Input/Input.d.ts +1 -1
- package/dist/types/components/Modal/Modal.d.ts +4 -0
- package/dist/types/components/PanelTools/PanelTools.d.ts +7 -0
- package/dist/types/components/Select/Select.d.ts +1 -1
- package/dist/types/components.d.ts +154 -16
- package/package.json +3 -3
- package/dist/components/p-4scN0Mgn.js +0 -2
- package/dist/components/p-B3PdrMP0.js +0 -2
- package/dist/components/p-B3PdrMP0.js.map +0 -1
- package/dist/components/p-CIgag7g2.js +0 -2
- package/dist/components/p-CUSz0JFa.js +0 -2
- package/dist/components/p-CUSz0JFa.js.map +0 -1
- /package/dist/components/{p-BN9FZESH.js.map → p-1S9AW2MA.js.map} +0 -0
- /package/dist/components/{p-D4bVE7e4.js.map → p-6B411hQA.js.map} +0 -0
- /package/dist/components/{p-D5PN6zdD.js.map → p-B-kRByho.js.map} +0 -0
- /package/dist/components/{p-CmUGA_q4.js.map → p-B4_0Ys4w.js.map} +0 -0
- /package/dist/components/{p-BApNi_xA.js.map → p-B6RrZQqw.js.map} +0 -0
- /package/dist/components/{p-CQ4vAZ9j.js.map → p-BBtjABBS.js.map} +0 -0
- /package/dist/components/{p-CmMfRM1s.js.map → p-BFfHIu6y.js.map} +0 -0
- /package/dist/components/{p-CBiAsFAZ.js.map → p-BPyymeuR.js.map} +0 -0
- /package/dist/components/{p-Bgh0uG51.js.map → p-BR_oMaas.js.map} +0 -0
- /package/dist/components/{p-w2kKeG_h.js.map → p-Bb4f5SuF.js.map} +0 -0
- /package/dist/components/{p-B5snQKiP.js.map → p-BmNpPyzf.js.map} +0 -0
- /package/dist/components/{p-CWItD0gL.js.map → p-Bmo4T96l.js.map} +0 -0
- /package/dist/components/{p-DHAuidt1.js.map → p-Bsfpxto1.js.map} +0 -0
- /package/dist/components/{p-a6cnCKWk.js.map → p-BtuYufL3.js.map} +0 -0
- /package/dist/components/{p-BxEOlO5k.js.map → p-CKRJX0Y0.js.map} +0 -0
- /package/dist/components/{p-1moOgMI-.js.map → p-Ca6s5fLR.js.map} +0 -0
- /package/dist/components/{p-RT1mts9U.js.map → p-CbjFUpOj.js.map} +0 -0
- /package/dist/components/{p-CqOswTy8.js.map → p-CuJ3J6OJ.js.map} +0 -0
- /package/dist/components/{p-BQTJ7ePr.js.map → p-CxgMUvqg.js.map} +0 -0
- /package/dist/components/{p-CWKrq35a.js.map → p-D0bM3cKj.js.map} +0 -0
- /package/dist/components/{p-UtfErnpX.js.map → p-D2cjoj2r.js.map} +0 -0
- /package/dist/components/{p-CGwVooB6.js.map → p-DHF5cLzr.js.map} +0 -0
- /package/dist/components/{p-BgjtMMye.js.map → p-DVuxzrCC.js.map} +0 -0
- /package/dist/components/{p-DXGKfXTh.js.map → p-DfvDNcoq.js.map} +0 -0
- /package/dist/components/{p-4scN0Mgn.js.map → p-Di81y9Q2.js.map} +0 -0
- /package/dist/components/{p-C_3mZMFK.js.map → p-Eep5mxtv.js.map} +0 -0
- /package/dist/components/{p-DoNdiEly.js.map → p-IYy-jODg.js.map} +0 -0
- /package/dist/components/{p-DtV263qO.js.map → p-iCjUWcp7.js.map} +0 -0
- /package/dist/components/{p-BgASe-BH.js.map → p-og48Kh2i.js.map} +0 -0
- /package/dist/components/{p-BSocHH2X.js.map → p-wOOAzVMC.js.map} +0 -0
package/dist/.package-ready.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"schemaVersion":1,"package":"@ds-mo/ui","version":"13.
|
|
1
|
+
{"schemaVersion":1,"package":"@ds-mo/ui","version":"13.6.0","components":67,"digest":"84ce2e759f2ff321dd30c1b78861490f685e0d92ce638b6461ae59f9e7f69381","completedAt":"2026-08-01T22:51:04.828Z"}
|
package/dist/agent-patterns.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schemaVersion": "1.0.0",
|
|
3
3
|
"package": "@ds-mo/ui",
|
|
4
|
-
"packageVersion": "13.
|
|
4
|
+
"packageVersion": "13.6.0",
|
|
5
5
|
"kind": "patterns",
|
|
6
6
|
"entries": [
|
|
7
7
|
{
|
|
@@ -136,6 +136,11 @@
|
|
|
136
136
|
"component": "component:ds-mobile-bar-nav",
|
|
137
137
|
"role": "Managed persistent mobile destinations for Menu, current area, Search, Agents, Inbox, and Help.",
|
|
138
138
|
"required": false
|
|
139
|
+
},
|
|
140
|
+
{
|
|
141
|
+
"component": "component:ds-banner",
|
|
142
|
+
"role": "Optional application-owned global message placed in the single shell banner lane.",
|
|
143
|
+
"required": false
|
|
139
144
|
}
|
|
140
145
|
],
|
|
141
146
|
"stateOwnership": [
|
|
@@ -145,6 +150,7 @@
|
|
|
145
150
|
"ShellApp owns responsive mode, PanelNav presentation, tool open state, active tool, mobile Inbox grouping, Menu state, fullscreen presentation, focus restoration, and breakpoint state preservation.",
|
|
146
151
|
"Tool products and routed content are instantiated once by the application in named tool-view and default slots; ShellApp changes presentation without recreating those owners.",
|
|
147
152
|
"The application owns account menus, tool product data, page actions, and the consequences of every emitted intent event.",
|
|
153
|
+
"The application resolves competing global messages to one Banner and owns its actions, controlled open state, orientation for the available shell capacity, dismissal persistence, and removal after exit motion.",
|
|
148
154
|
"Use composition=\"slotted\" only when a team intentionally needs to assemble the public lower-level chrome components itself."
|
|
149
155
|
],
|
|
150
156
|
"accessibility": [
|
|
@@ -158,6 +164,7 @@
|
|
|
158
164
|
"ShellApp automatically resolves desktop at 1200px and wider, tablet from 768px through 1199px, and mobile below 768px.",
|
|
159
165
|
"Desktop and tablet use PanelNav, BarNav, PanelTools through ShellTools, and ShellPage chrome.",
|
|
160
166
|
"Mobile uses MobileSheetNav, MobileBarNav, MobileHeader, ShellTools mobile presentation, and the same routed content owner.",
|
|
167
|
+
"An optional Banner spans the complete application above desktop navigation, workspace, tools, and mobile global surfaces while remaining below the operating-system top safe area.",
|
|
161
168
|
"Switching breakpoints changes presentation and inert state without recreating route or tool elements.",
|
|
162
169
|
"Messages, Stacks, and Activity use explicit mobile grouping metadata and default to the canonical Inbox recipe."
|
|
163
170
|
],
|
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": "13.
|
|
4
|
+
"packageVersion": "13.6.0",
|
|
5
5
|
"kind": "components",
|
|
6
6
|
"entries": [
|
|
7
7
|
{
|
|
@@ -620,6 +620,157 @@
|
|
|
620
620
|
"text"
|
|
621
621
|
]
|
|
622
622
|
},
|
|
623
|
+
{
|
|
624
|
+
"id": "component:ds-banner",
|
|
625
|
+
"tag": "ds-banner",
|
|
626
|
+
"name": "banner",
|
|
627
|
+
"title": "Banner",
|
|
628
|
+
"summary": "Persistent in-flow application banner with semantic color intent, explicit announcement urgency, horizontal actions, and controlled dismissal motion.",
|
|
629
|
+
"intentStatus": "complete",
|
|
630
|
+
"intent": {
|
|
631
|
+
"audience": "general",
|
|
632
|
+
"status": "stable",
|
|
633
|
+
"summary": "Persistent in-flow application banner with semantic color intent, explicit announcement urgency, horizontal actions, and controlled dismissal motion.",
|
|
634
|
+
"useWhen": [
|
|
635
|
+
"A persistent application-wide condition or announcement must remain visible while the user works.",
|
|
636
|
+
"A shell-level message needs optional actions and dismissal while reflowing the application rather than floating over it.",
|
|
637
|
+
"Message urgency and color intent must be selected independently."
|
|
638
|
+
],
|
|
639
|
+
"avoidWhen": [
|
|
640
|
+
"Feedback is transient, queued, promise-driven, or anchored to a control; use Toast.",
|
|
641
|
+
"The message belongs inside a field, card, or bounded content section; use the future inline banner rather than shrinking the application shell.",
|
|
642
|
+
"Several global messages must be prioritized or queued; the application must resolve them to one active banner before rendering."
|
|
643
|
+
],
|
|
644
|
+
"alternatives": [
|
|
645
|
+
{
|
|
646
|
+
"when": "Feedback is transient or follows a completed action.",
|
|
647
|
+
"component": "component:ds-toast",
|
|
648
|
+
"reason": "Toast owns queues, timers, stacking, swipe dismissal, and anchored feedback."
|
|
649
|
+
},
|
|
650
|
+
{
|
|
651
|
+
"when": "A bounded region has no content to show.",
|
|
652
|
+
"component": "component:ds-empty-state",
|
|
653
|
+
"reason": "EmptyState explains an empty result without creating global application urgency."
|
|
654
|
+
}
|
|
655
|
+
],
|
|
656
|
+
"commonlyComposedWith": [
|
|
657
|
+
"component:ds-shell-app",
|
|
658
|
+
"component:ds-button-unfilled"
|
|
659
|
+
],
|
|
660
|
+
"patterns": [
|
|
661
|
+
"pattern:application-shell"
|
|
662
|
+
],
|
|
663
|
+
"accessibility": [
|
|
664
|
+
"Choose announcement=none for content present at page load, polite for non-urgent dynamic changes, and assertive only when immediate interruption is necessary.",
|
|
665
|
+
"Visual intent never chooses live-region urgency; a negative banner can be persistent and non-urgent, while a neutral banner can require prompt attention.",
|
|
666
|
+
"The close control is always available. Localize dismissLabel and keep the banner mounted until dsAfterClose before removing it.",
|
|
667
|
+
"Slotted actions retain their own accessible names, keyboard behavior, and outcome messaging."
|
|
668
|
+
],
|
|
669
|
+
"states": [
|
|
670
|
+
"The application owns open. The always-present close control emits dsClose, and the application sets open=false to begin exit motion.",
|
|
671
|
+
"dsAfterClose fires once after the closing banner is inert, hidden from assistive technology, and no longer occupies layout space.",
|
|
672
|
+
"The opaque surface slides by its complete block size while occupied-shell space expands with the same short-3 duration. Opening uses the shell tool panel's ease-out curve; dismissal reverses with its ease-in curve, keeping the Banner boundary flush with the shell throughout.",
|
|
673
|
+
"Heading is optional and description is required. With orientation=horizontal they share one inline copy flow, so description begins after the heading and continuation lines use the complete text width beneath it. With orientation=vertical, description starts on the next line with a 4px gap.",
|
|
674
|
+
"The actions slot accepts at most two ds-button-unfilled controls. They stay in one horizontal trailing lane, align to the top of the dismiss control when sharing the copy row, and must receive the matching parent-surface background context.",
|
|
675
|
+
"Intent selects neutral, brand, positive, warning, caution, or negative hue. Contrast independently selects faint, medium, strong, or bold fill.",
|
|
676
|
+
"Banner has a real bottom boundary, no radius, no elevation, no icon, no timeout, and no internal queue."
|
|
677
|
+
],
|
|
678
|
+
"responsiveBehavior": [
|
|
679
|
+
"Applications select orientation explicitly. Horizontal keeps copy and actions in one row, with actions top-aligned to dismissal. Vertical puts actions below copy on the 16px text boundary and keeps controls 16px above the bottom boundary.",
|
|
680
|
+
"When placed in ShellApp's banner slot, the banner spans the complete application above navigation, workspace, and tools.",
|
|
681
|
+
"ShellApp reserves the mobile top safe area once above the banner and keeps the banner visible while mobile tools or navigation surfaces replace the routed stage."
|
|
682
|
+
],
|
|
683
|
+
"frameworkCaveats": {
|
|
684
|
+
"customElements": [
|
|
685
|
+
"Listen for dsClose, set open=false, and wait for dsAfterClose before conditionally removing the element.",
|
|
686
|
+
"Place at most one ds-banner in ShellApp's banner slot, choose horizontal or vertical orientation for the available shell capacity, and assign no more than two ds-button-unfilled elements slot=actions."
|
|
687
|
+
],
|
|
688
|
+
"react": [
|
|
689
|
+
"Keep the component mounted while open changes from true to false; remove it in onDsAfterClose when unmounting is required.",
|
|
690
|
+
"Project no more than two ds-button-unfilled actions and pass each the matching background context."
|
|
691
|
+
],
|
|
692
|
+
"angular": [
|
|
693
|
+
"Bind open as controlled application state, handle dsClose to update it, and wait for dsAfterClose before removing an ngIf owner.",
|
|
694
|
+
"Import and project no more than two DsButtonUnfilled actions with slot=actions and their matching background input."
|
|
695
|
+
]
|
|
696
|
+
},
|
|
697
|
+
"references": [
|
|
698
|
+
{
|
|
699
|
+
"label": "Storybook examples",
|
|
700
|
+
"path": "src/wc/components/Banner/Banner.stories.ts"
|
|
701
|
+
},
|
|
702
|
+
{
|
|
703
|
+
"label": "Rendered behavior coverage",
|
|
704
|
+
"path": "tests/e2e/banner.spec.ts"
|
|
705
|
+
},
|
|
706
|
+
{
|
|
707
|
+
"label": "Application shell contract",
|
|
708
|
+
"path": "agent/patterns/application-shell/pattern.agent.json"
|
|
709
|
+
}
|
|
710
|
+
]
|
|
711
|
+
},
|
|
712
|
+
"api": {
|
|
713
|
+
"props": {
|
|
714
|
+
"announcement": {
|
|
715
|
+
"type": "BannerAnnouncement",
|
|
716
|
+
"required": false
|
|
717
|
+
},
|
|
718
|
+
"contrast": {
|
|
719
|
+
"type": "BannerContrast",
|
|
720
|
+
"required": false
|
|
721
|
+
},
|
|
722
|
+
"description": {
|
|
723
|
+
"type": "string",
|
|
724
|
+
"required": true
|
|
725
|
+
},
|
|
726
|
+
"dismissLabel": {
|
|
727
|
+
"type": "string",
|
|
728
|
+
"required": false
|
|
729
|
+
},
|
|
730
|
+
"heading": {
|
|
731
|
+
"type": "string",
|
|
732
|
+
"required": false
|
|
733
|
+
},
|
|
734
|
+
"intent": {
|
|
735
|
+
"type": "BannerIntent",
|
|
736
|
+
"required": false
|
|
737
|
+
},
|
|
738
|
+
"open": {
|
|
739
|
+
"type": "boolean",
|
|
740
|
+
"required": false
|
|
741
|
+
},
|
|
742
|
+
"orientation": {
|
|
743
|
+
"type": "BannerOrientation",
|
|
744
|
+
"required": false
|
|
745
|
+
}
|
|
746
|
+
},
|
|
747
|
+
"events": [
|
|
748
|
+
{
|
|
749
|
+
"name": "dsAfterClose",
|
|
750
|
+
"detail": "void"
|
|
751
|
+
},
|
|
752
|
+
{
|
|
753
|
+
"name": "dsClose",
|
|
754
|
+
"detail": "MouseEvent"
|
|
755
|
+
}
|
|
756
|
+
],
|
|
757
|
+
"slots": []
|
|
758
|
+
},
|
|
759
|
+
"exports": {
|
|
760
|
+
"customElement": "ds-banner",
|
|
761
|
+
"react": "DsBanner",
|
|
762
|
+
"angular": "DsBanner"
|
|
763
|
+
},
|
|
764
|
+
"dependencies": [
|
|
765
|
+
"@ds-mo/ui",
|
|
766
|
+
"@ds-mo/tokens"
|
|
767
|
+
],
|
|
768
|
+
"componentDependencies": [
|
|
769
|
+
"button-unfilled",
|
|
770
|
+
"text",
|
|
771
|
+
"tooltip"
|
|
772
|
+
]
|
|
773
|
+
},
|
|
623
774
|
{
|
|
624
775
|
"id": "component:ds-bar-nav",
|
|
625
776
|
"tag": "ds-bar-nav",
|
|
@@ -846,7 +997,7 @@
|
|
|
846
997
|
"responsiveBehavior": [
|
|
847
998
|
"BarTitle does not observe viewport, shell, scroll, or container state. Its owner selects an explicit variant.",
|
|
848
999
|
"ShellPage is the standard owner for automatic expanded, compact, and constrained selection.",
|
|
849
|
-
"Compact titles use the shared md control inset so top-level headings align with BarNav and inline Back geometry aligns with PanelToolHeader. Long headings and section labels truncate independently while Back and action controls retain complete hit targets and accessible names.",
|
|
1000
|
+
"Compact titles use the shared compact-header geometry and md control inset so top-level headings align with BarNav and inline Back geometry aligns with PanelToolHeader. Long headings and section labels truncate independently while Back and action controls retain complete hit targets and accessible names.",
|
|
850
1001
|
"A never-collapse primary action remains visible in constrained mode; the title and section label yield space first."
|
|
851
1002
|
],
|
|
852
1003
|
"frameworkCaveats": {
|
|
@@ -1790,12 +1941,12 @@
|
|
|
1790
1941
|
"tag": "ds-card-overview",
|
|
1791
1942
|
"name": "card-overview",
|
|
1792
1943
|
"title": "CardOverview",
|
|
1793
|
-
"summary": "Page-level summary
|
|
1944
|
+
"summary": "Page-level summary with a persistent 48px reporting bar above an equal-track grid of an optional safety score and comparable measures, plus an elevated page-controlled collapse surface.",
|
|
1794
1945
|
"intentStatus": "complete",
|
|
1795
1946
|
"intent": {
|
|
1796
1947
|
"audience": "general",
|
|
1797
1948
|
"status": "experimental",
|
|
1798
|
-
"summary": "Page-level summary
|
|
1949
|
+
"summary": "Page-level summary with a persistent 48px reporting bar above an equal-track grid of an optional safety score and comparable measures, plus an elevated page-controlled collapse surface.",
|
|
1799
1950
|
"useWhen": [
|
|
1800
1951
|
"A page opens with one headline figure that the surrounding measures explain.",
|
|
1801
1952
|
"Every measure is compared against the same period, so one caption describes the comparison for all of them.",
|
|
@@ -1827,8 +1978,7 @@
|
|
|
1827
1978
|
],
|
|
1828
1979
|
"accessibility": [
|
|
1829
1980
|
"The bar is a labelled region; set overviewLabel to name what is being summarised, such as Safety summary.",
|
|
1830
|
-
"
|
|
1831
|
-
"Colour never carries the trend meaning alone; the arrow direction and the value are both present.",
|
|
1981
|
+
"Colour never carries trend meaning alone; the arrow direction and formatted change value are both included in the accessible text.",
|
|
1832
1982
|
"Measures become selectable only when they are not inactive. Selectable measures form one roving tab stop, so the grid is a single stop and arrow keys move between measures.",
|
|
1833
1983
|
"Set labelTooltip when a measure's label needs qualifying rather than shortening the label into something ambiguous.",
|
|
1834
1984
|
"While loading, the region exposes a busy state and renders skeletons whose type metrics match the resolved content."
|
|
@@ -1837,20 +1987,21 @@
|
|
|
1837
1987
|
"Score and measures are supplied as data; the component owns their type treatment so summary bars stay consistent across pages.",
|
|
1838
1988
|
"Trend is supplied already resolved as a direction, a formatted value, and a tone. Whether a rise reads well is a product decision, so the component never infers tone from the numbers. Derive it with resolveMetricTrend.",
|
|
1839
1989
|
"Omit a trend when there is nothing to report; resolveMetricTrend returns null in that case so no zero change is rendered.",
|
|
1840
|
-
"Omit score to render
|
|
1990
|
+
"Omit score to render a centered Score unavailable cell with a tertiary border and no score fill. Set scoreErrorMessage to replace that copy while the measures remain readable.",
|
|
1841
1991
|
"Loading replaces the score and the measures with skeletons and does not alter the slotted period control.",
|
|
1842
|
-
"At most
|
|
1843
|
-
"The period
|
|
1844
|
-
"
|
|
1845
|
-
"
|
|
1992
|
+
"At most seven measures are shown. Keep larger collections outside the summary bar rather than turning it into a dense dashboard.",
|
|
1993
|
+
"The period and filter controls are slotted rather than owned. Use the period slot when the current range is selectable; otherwise periodLabel supplies fixed current copy in the same md control-frame and label-inset anatomy. Use the filter slot for the application-owned comparison-window control. Slotted Selects use hasBorder false so the 48px bar owns their surrounding boundary.",
|
|
1994
|
+
"A numeric safety score infers fair from 0–50, good from 51–80, and excellent from 81–100. The level can be supplied explicitly when the displayed value is not numeric. The deprecated band field is ignored.",
|
|
1995
|
+
"The safety score is the first grid cell and uses the same track, 8px outer inset, 6px inner padding, dividers, and responsive behavior as metric cells. The display value removes 12px from both block edges of its line box so it does not increase the shared row height. Score remains nonselectable and excluded from metric roving focus.",
|
|
1996
|
+
"During page-controlled scroll collapse, the component preserves its expanded flow height and stationary reporting bar while the metric grid moves and clips beneath it. Elevation remains fitted to the visible surface.",
|
|
1997
|
+
"compact is exactly 48px high and renders only the reporting bar. It omits Score, measures, and footer."
|
|
1846
1998
|
],
|
|
1847
1999
|
"responsiveBehavior": [
|
|
1848
|
-
"The measure grid reflows to fewer columns and finally stacks
|
|
2000
|
+
"The measure grid reflows to fewer columns and finally stacks without horizontal scrolling. Even cell totals prefer complete rows; odd totals retain the densest fitting layout and may leave an orphan in the final row.",
|
|
1849
2001
|
"Every occupied grid track has the same width. When a final row is incomplete, its measures keep the same width as the row above and the unused tracks remain empty.",
|
|
1850
2002
|
"Set metricMinWidth to change the width a measure may shrink to before the grid drops a column.",
|
|
1851
|
-
"The score
|
|
1852
|
-
"
|
|
1853
|
-
"In that stacked summary, the score and trend share one line at the start, while the score band is hidden to preserve space. The period control stays at the upper end, while the current period and comparison sit on separate right-aligned lines beside the score.",
|
|
2003
|
+
"The safety score participates in the same equal-width tracks as measures rather than occupying a separate rail.",
|
|
2004
|
+
"The reporting bar owns an exact 8px inset on every edge. Fixed current copy and slotted controls begin at that inset; their labels share md control-frame geometry and truncate before changing the 48px height.",
|
|
1854
2005
|
"Every measure occupies a full-width row in the stacked state.",
|
|
1855
2006
|
"Set layout to stacked when the owning page shell enters a responsive mode before the card's own container reaches its narrow threshold.",
|
|
1856
2007
|
"CardOverview does not observe scroll, choose sticky offsets, or switch its own presentation. The page owner supplies collapse progress, keeps the card sticky at the appropriate shell inset, and swaps to compact at the 48px endpoint.",
|
|
@@ -1859,7 +2010,7 @@
|
|
|
1859
2010
|
"frameworkCaveats": {
|
|
1860
2011
|
"customElements": [
|
|
1861
2012
|
"Assign score and metrics as JavaScript properties; both are objects and cannot be expressed as HTML attributes.",
|
|
1862
|
-
"Place the period control in the filter slot; the component reserves
|
|
2013
|
+
"Place an optional current-range control in the period slot and the comparison-window control in the filter slot; the component reserves their layout but never computes or renders controls.",
|
|
1863
2014
|
"When driving scroll collapse, update scrollCollapseProgress from page-owned geometry and swap to a separate compact presentation at the endpoint."
|
|
1864
2015
|
],
|
|
1865
2016
|
"react": [
|
|
@@ -1870,7 +2021,7 @@
|
|
|
1870
2021
|
"angular": [
|
|
1871
2022
|
"Bind [score] and [metrics] as properties and read the selected measure from $event.detail on (dsMetricSelect).",
|
|
1872
2023
|
"Derive each trend with resolveMetricTrend so tone stays an explicit product decision.",
|
|
1873
|
-
"Keep sticky geometry and [scrollCollapseProgress] in the page owner; CardOverview only renders the visual collapse."
|
|
2024
|
+
"Keep date math, sticky geometry, and [scrollCollapseProgress] in the page owner; CardOverview only renders the supplied composition and visual collapse."
|
|
1874
2025
|
]
|
|
1875
2026
|
},
|
|
1876
2027
|
"references": [
|
|
@@ -1946,11 +2097,9 @@
|
|
|
1946
2097
|
},
|
|
1947
2098
|
"dependencies": [
|
|
1948
2099
|
"@ds-mo/ui",
|
|
1949
|
-
"@ds-mo/tokens"
|
|
1950
|
-
"@ds-mo/icons"
|
|
2100
|
+
"@ds-mo/tokens"
|
|
1951
2101
|
],
|
|
1952
2102
|
"componentDependencies": [
|
|
1953
|
-
"icon",
|
|
1954
2103
|
"skeleton",
|
|
1955
2104
|
"text",
|
|
1956
2105
|
"tooltip"
|
|
@@ -3720,7 +3869,7 @@
|
|
|
3720
3869
|
],
|
|
3721
3870
|
"states": [
|
|
3722
3871
|
"Every size applies one complete control-density recipe across frame height, inline padding, icon zones, text-container inset, gap, and radius; supporting error content follows the shared 4px field flow.",
|
|
3723
|
-
"The normal field boundary uses the shared secondary inset border. Focus promotes it to the thicker bold-brand inset stroke, while error uses the thicker bold-negative inset stroke without changing geometry.",
|
|
3872
|
+
"The normal field boundary uses the shared secondary inset border. Focus promotes it to the thicker bold-brand inset stroke, while error uses the thicker bold-negative inset stroke without changing geometry. Set hasBorder to false only in chrome that supplies enough surrounding structure; the control then remains borderless at rest, while focused, and while invalid, with semantics and supporting error copy unchanged.",
|
|
3724
3873
|
"Placeholder text is secondary at rest and quaternary while the editable field is focused because it becomes decorative once typing begins.",
|
|
3725
3874
|
"Entered values use the parent surface's primary foreground; prefix icons, suffix content, and resting placeholder text use its secondary foreground.",
|
|
3726
3875
|
"Search fields show a standard borderless CrossCircle icon action only while they contain a value. Clearing emits the empty value and restores focus to the native field.",
|
|
@@ -4402,6 +4551,7 @@
|
|
|
4402
4551
|
"states": [
|
|
4403
4552
|
"The component owns clipboard execution and temporary copied feedback while the application supplies the exact copyable text.",
|
|
4404
4553
|
"Feedback is controlled: the component emits the requested positive, negative, or cleared value while the application owns persistence and consequences.",
|
|
4554
|
+
"Selected feedback changes to the filled thumb icon without adding a persistent selected fill; hover and press feedback remain available.",
|
|
4405
4555
|
"Copy, positive feedback, and negative feedback retain one stable order."
|
|
4406
4556
|
],
|
|
4407
4557
|
"responsiveBehavior": [
|
|
@@ -5165,12 +5315,12 @@
|
|
|
5165
5315
|
"tag": "ds-modal",
|
|
5166
5316
|
"name": "modal",
|
|
5167
5317
|
"title": "Modal",
|
|
5168
|
-
"summary": "Dismissible native top-layer dialog for a focused confirmation or short blocking task, with a
|
|
5318
|
+
"summary": "Dismissible native top-layer dialog for a focused confirmation or short blocking task, with a compact title-and-close header, optional supporting description, composable content, and an optional two-action footer.",
|
|
5169
5319
|
"intentStatus": "complete",
|
|
5170
5320
|
"intent": {
|
|
5171
5321
|
"audience": "general",
|
|
5172
5322
|
"status": "stable",
|
|
5173
|
-
"summary": "Dismissible native top-layer dialog for a focused confirmation or short blocking task, with a
|
|
5323
|
+
"summary": "Dismissible native top-layer dialog for a focused confirmation or short blocking task, with a compact title-and-close header, optional supporting description, composable content, and an optional two-action footer.",
|
|
5174
5324
|
"useWhen": [
|
|
5175
5325
|
"The user must confirm or cancel one focused decision before returning to the underlying interface.",
|
|
5176
5326
|
"A short blocking task or compact form needs dialog semantics, focus containment, and explicit completion actions.",
|
|
@@ -5208,6 +5358,7 @@
|
|
|
5208
5358
|
],
|
|
5209
5359
|
"accessibility": [
|
|
5210
5360
|
"Provide a concise visible heading; the component uses it as the dialog's accessible name.",
|
|
5361
|
+
"When concise supporting context belongs in the header, provide description; it stays below the title and is included in the dialog's accessible description.",
|
|
5211
5362
|
"Give the primary explanatory copy a stable id and pass it through aria-describedby so assistive technology receives the decision context.",
|
|
5212
5363
|
"Opening the native modal dialog moves focus to the header Close action, whose visible tooltip matches its accessible name, traps Tab navigation inside the top layer, and makes outside content inert.",
|
|
5213
5364
|
"Close, Escape, and backdrop activation emit dsClose with close-button, escape, or backdrop reason before beginning dismissal; use the component only when every dismissal path is safe.",
|
|
@@ -5220,12 +5371,13 @@
|
|
|
5220
5371
|
"The owner opens the modal through the open property and responds to the typed dsClose detail for application state synchronization or dismissal analytics.",
|
|
5221
5372
|
"The component mutates open to false for Close, Escape, and backdrop dismissal while retaining its rendered surface through exit motion.",
|
|
5222
5373
|
"The default slot owns task content; the named footer slot is optional and is hidden when no actions are assigned.",
|
|
5374
|
+
"The optional header description remains stacked beneath the title with the shared compact-header rhythm; longer task content belongs in the default slot.",
|
|
5223
5375
|
"Primary actions use a bold filled button with semantic intent. Secondary and cancel actions use bordered label-only unfilled buttons.",
|
|
5224
5376
|
"The owner performs save, delete, cancel, and other product consequences before or while closing the modal."
|
|
5225
5377
|
],
|
|
5226
5378
|
"responsiveBehavior": [
|
|
5227
5379
|
"Choose the smallest sm, md, or lg width that fits the focused task; the top-layer dialog clamps to the viewport with token-based outer space.",
|
|
5228
|
-
"Content scrolls independently when needed while the
|
|
5380
|
+
"Content scrolls independently when needed while the header and optional 64px footer remain fixed. The title-only header uses the shared 48px compact geometry and grows when its optional description wraps.",
|
|
5229
5381
|
"Avoid layouts whose minimum content width exceeds the narrow viewport clamp.",
|
|
5230
5382
|
"The native top layer escapes transformed ancestors, clipping containers, and application stacking contexts without moving slotted content."
|
|
5231
5383
|
],
|
|
@@ -5271,6 +5423,10 @@
|
|
|
5271
5423
|
"type": "string",
|
|
5272
5424
|
"required": false
|
|
5273
5425
|
},
|
|
5426
|
+
"description": {
|
|
5427
|
+
"type": "string",
|
|
5428
|
+
"required": false
|
|
5429
|
+
},
|
|
5274
5430
|
"heading": {
|
|
5275
5431
|
"type": "string",
|
|
5276
5432
|
"required": true
|
|
@@ -5699,7 +5855,7 @@
|
|
|
5699
5855
|
],
|
|
5700
5856
|
"states": [
|
|
5701
5857
|
"The title remains left aligned whether the header has no actions, Back, one trailing action, or several trailing actions.",
|
|
5702
|
-
"Leading and trailing control zones never shrink; only the title consumes and truncates within the remaining width,
|
|
5858
|
+
"Leading and trailing control zones never shrink; only the title consumes and truncates within the remaining width. The header uses the shared 8px compact-header zone gap, while adjacent trailing actions retain their 4px control gap.",
|
|
5703
5859
|
"Header chrome text is not selectable; actions remain keyboard focusable and interactive.",
|
|
5704
5860
|
"Adjacent trailing actions keep the shared 4px control gap in drawer and fullscreen presentations.",
|
|
5705
5861
|
"When fullscreen and overflow actions appear together, author fullscreen before overflow so Ellipses remains the rightmost action.",
|
|
@@ -5983,6 +6139,7 @@
|
|
|
5983
6139
|
"Provide localized accessible labels for the rail, shortcut group, and every rendered tool.",
|
|
5984
6140
|
"Use the canonical default recipe when the product needs Search first and Help last; custom recipes must preserve a deliberate keyboard and visual order.",
|
|
5985
6141
|
"Keep focus on the selected rail action when opening a drawer and allow normal Tab navigation into its content.",
|
|
6142
|
+
"When the shortcut rail overflows, its labeled body becomes a keyboard-focusable scroll region without changing the rail action order.",
|
|
5986
6143
|
"Do not trigger global shortcuts while focus is in an editable control.",
|
|
5987
6144
|
"Use notification dots only as supplemental unread or new-content status and never as the sole status indication.",
|
|
5988
6145
|
"Explain temporarily inactive tools through an accessible label or adjacent product guidance; omit unauthorized tools entirely."
|
|
@@ -6434,7 +6591,7 @@
|
|
|
6434
6591
|
"An empty filtered list composes the message-only body variant of EmptyState. Keep the default neutral no-results message unless localized product guidance makes the outcome clearer.",
|
|
6435
6592
|
"Enable searchable for more than roughly 20 options, user-managed listings, large domains such as addresses, or sets users cannot efficiently scan. Local matching includes option labels, subtext, and section headings; the owner resolves remote data before assigning options.",
|
|
6436
6593
|
"Validation timing belongs to the form owner and may be immediate or deferred until blur or submit; the Select exposes validity and error presentation without imposing that policy.",
|
|
6437
|
-
"The error trigger uses a 1.5px bold-negative inset stroke so invalid state remains distinguishable from the normal 1px border without changing control geometry.",
|
|
6594
|
+
"The error trigger uses a 1.5px bold-negative inset stroke so invalid state remains distinguishable from the normal 1px border without changing control geometry. Set hasBorder to false for chrome where the trigger must remain borderless at rest, when selected or focused, and when invalid; error semantics and supporting copy remain available.",
|
|
6438
6595
|
"An initially empty option set is not an expected Select use case. The no-results state describes a search with no matches, not a source with no choices.",
|
|
6439
6596
|
"Use options for a flat list or sections for grouped choices; when sections are present they take precedence.",
|
|
6440
6597
|
"The background prop describes the actual parent surface and uses the same surface set as ButtonUnfilled."
|
|
@@ -6659,6 +6816,7 @@
|
|
|
6659
6816
|
"component:ds-mobile-header",
|
|
6660
6817
|
"component:ds-mobile-bar-nav",
|
|
6661
6818
|
"component:ds-shell-page",
|
|
6819
|
+
"component:ds-banner",
|
|
6662
6820
|
"component:ds-swatch-picker"
|
|
6663
6821
|
],
|
|
6664
6822
|
"patterns": [
|
|
@@ -6668,6 +6826,7 @@
|
|
|
6668
6826
|
"accessibility": [
|
|
6669
6827
|
"Supply primary destinations through navigation and secondary route sections through pageChrome so managed ShellApp preserves their correct semantics.",
|
|
6670
6828
|
"Ensure the default content region contains the page's single main landmark.",
|
|
6829
|
+
"Keep the shell-owned routed-content scroller keyboard-focusable while its page landmark retains content semantics.",
|
|
6671
6830
|
"Keep the managed desktop/tablet and mobile presentations available without conditionally recreating routed or tool content.",
|
|
6672
6831
|
"Do not override browser keyboard chords when enabling shell shortcuts.",
|
|
6673
6832
|
"Require Search and Help as the minimum PanelTools actions and provide accessible labels for every tool.",
|
|
@@ -6680,6 +6839,7 @@
|
|
|
6680
6839
|
"ShellApp renders the lower-level desktop, tablet, and mobile chrome, coordinates layout, gradient alignment, transitions, shortcuts, global surfaces, Inbox state, focus restoration, and mobile-stage visibility.",
|
|
6681
6840
|
"The application router owns authorization, current URLs, history, and route execution; ShellApp forwards navigation and page intent events without routing.",
|
|
6682
6841
|
"The application supplies each routed content owner and tool view once. ShellApp changes visibility, inert state, and presentation without recreating those nodes.",
|
|
6842
|
+
"The optional banner slot accepts one application-owned ds-banner above the complete shell row. The application owns its open state, orientation for the current shell capacity, action consequences, dismissal persistence, and resolution when several messages compete.",
|
|
6683
6843
|
"Use composition=slotted only for advanced application architectures that intentionally own all lower-level chrome wiring.",
|
|
6684
6844
|
"Set gradientPreset to the single resolved global chrome preference: neutral by default, none for solid chrome, or cool, neutral, warm, and fresh for token-based washes.",
|
|
6685
6845
|
"The application owns gradient preference persistence, cross-tab synchronization, and server or account precedence; ShellApp owns rendering the resolved preset across authenticated routes.",
|
|
@@ -6695,6 +6855,7 @@
|
|
|
6695
6855
|
"On tablet, ShellApp keeps PanelNav permanently collapsed and prevents user expansion without overwriting the desktop preference.",
|
|
6696
6856
|
"On mobile, ShellApp hides and inerts desktop chrome, uses a solid primary stage, and composes MobileHeader, MobileSheetNav, ShellTools, and the persistent MobileBarNav around the same application-owned content.",
|
|
6697
6857
|
"When the application enables viewport-fit=cover, ShellApp reserves the shared top safe-area inset once for the complete mobile stage; nested routed, sheet, and tool headers must not add a second top inset.",
|
|
6858
|
+
"A slotted Banner remains below the top safe-area inset and above routed, navigation, fullscreen-tool, and mobile global-surface presentations.",
|
|
6698
6859
|
"Mobile global surfaces conceal and inert the routed workspace without unmounting it, preserving nested routes and scroll state.",
|
|
6699
6860
|
"Keep PanelNav width, BarNav height, PanelTools chrome, and main-content origin stable except during intentional responsive or collapse transitions.",
|
|
6700
6861
|
"The bottom bar remains visible at all route and tool depths in the foundation release."
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { ChangeDetectorRef, ElementRef, NgZone, EventEmitter } from '@angular/core';
|
|
2
|
+
import type { Components } from '@ds-mo/ui/components';
|
|
3
|
+
import type { DsBannerCustomEvent } from '@ds-mo/ui/components';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
export declare class DsBanner {
|
|
6
|
+
protected z: NgZone;
|
|
7
|
+
protected el: HTMLDsBannerElement;
|
|
8
|
+
dsClose: EventEmitter<DsBannerCustomEvent<MouseEvent>>;
|
|
9
|
+
dsAfterClose: EventEmitter<DsBannerCustomEvent<void>>;
|
|
10
|
+
constructor(c: ChangeDetectorRef, r: ElementRef, z: NgZone);
|
|
11
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<DsBanner, never>;
|
|
12
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<DsBanner, "ds-banner", never, { "announcement": { "alias": "announcement"; "required": false; }; "contrast": { "alias": "contrast"; "required": false; }; "description": { "alias": "description"; "required": true; }; "dismissLabel": { "alias": "dismissLabel"; "required": false; }; "heading": { "alias": "heading"; "required": false; }; "intent": { "alias": "intent"; "required": false; }; "open": { "alias": "open"; "required": false; }; "orientation": { "alias": "orientation"; "required": false; }; }, { "dsClose": "dsClose"; "dsAfterClose": "dsAfterClose"; }, never, ["*"], true, never>;
|
|
13
|
+
}
|
|
14
|
+
export declare interface DsBanner extends Components.DsBanner {
|
|
15
|
+
/**
|
|
16
|
+
* Emitted when the close control requests dismissal. The application controls open.
|
|
17
|
+
*/
|
|
18
|
+
dsClose: EventEmitter<DsBannerCustomEvent<MouseEvent>>;
|
|
19
|
+
/**
|
|
20
|
+
* Emitted once after controlled exit motion and layout collapse complete.
|
|
21
|
+
*/
|
|
22
|
+
dsAfterClose: EventEmitter<DsBannerCustomEvent<void>>;
|
|
23
|
+
}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
/* tslint:disable */
|
|
8
|
+
/* auto-generated angular directive proxies */
|
|
9
|
+
import { ChangeDetectionStrategy, Component, EventEmitter, Output } from '@angular/core';
|
|
10
|
+
import { ProxyCmp } from './angular-component-lib/utils.js';
|
|
11
|
+
import { defineCustomElement as defineDsBanner } from '@ds-mo/ui/components/ds-banner.js';
|
|
12
|
+
import * as i0 from "@angular/core";
|
|
13
|
+
let DsBanner = class DsBanner {
|
|
14
|
+
constructor(c, r, z) {
|
|
15
|
+
this.z = z;
|
|
16
|
+
this.dsClose = new EventEmitter();
|
|
17
|
+
this.dsAfterClose = new EventEmitter();
|
|
18
|
+
c.detach();
|
|
19
|
+
this.el = r.nativeElement;
|
|
20
|
+
}
|
|
21
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: DsBanner, deps: [{ token: i0.ChangeDetectorRef }, { token: i0.ElementRef }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
22
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.1.0", type: DsBanner, isStandalone: true, selector: "ds-banner", inputs: { announcement: "announcement", contrast: "contrast", description: "description", dismissLabel: "dismissLabel", heading: "heading", intent: "intent", open: "open", orientation: "orientation" }, outputs: { dsClose: "dsClose", dsAfterClose: "dsAfterClose" }, ngImport: i0, template: '<ng-content></ng-content>', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
23
|
+
};
|
|
24
|
+
DsBanner = __decorate([
|
|
25
|
+
ProxyCmp({
|
|
26
|
+
defineCustomElementFn: defineDsBanner,
|
|
27
|
+
inputs: ['announcement', 'contrast', 'description', 'dismissLabel', 'heading', 'intent', 'open', 'orientation']
|
|
28
|
+
})
|
|
29
|
+
], DsBanner);
|
|
30
|
+
export { DsBanner };
|
|
31
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: DsBanner, decorators: [{
|
|
32
|
+
type: Component,
|
|
33
|
+
args: [{
|
|
34
|
+
selector: 'ds-banner',
|
|
35
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
36
|
+
template: '<ng-content></ng-content>',
|
|
37
|
+
// eslint-disable-next-line @angular-eslint/no-inputs-metadata-property
|
|
38
|
+
inputs: ['announcement', 'contrast', { name: 'description', required: true }, 'dismissLabel', 'heading', 'intent', 'open', 'orientation'],
|
|
39
|
+
outputs: ['dsClose', 'dsAfterClose'],
|
|
40
|
+
}]
|
|
41
|
+
}], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i0.ElementRef }, { type: i0.NgZone }], propDecorators: { dsClose: [{
|
|
42
|
+
type: Output
|
|
43
|
+
}], dsAfterClose: [{
|
|
44
|
+
type: Output
|
|
45
|
+
}] } });
|
|
@@ -10,7 +10,7 @@ export declare class DsModal {
|
|
|
10
10
|
dsAfterClose: EventEmitter<DsModalCustomEvent<void>>;
|
|
11
11
|
constructor(c: ChangeDetectorRef, r: ElementRef, z: NgZone);
|
|
12
12
|
static ɵfac: i0.ɵɵFactoryDeclaration<DsModal, never>;
|
|
13
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<DsModal, "ds-modal", never, { "ariaDescribedby": { "alias": "ariaDescribedby"; "required": false; }; "closeAriaLabel": { "alias": "closeAriaLabel"; "required": false; }; "heading": { "alias": "heading"; "required": true; }; "modalWidth": { "alias": "modalWidth"; "required": false; }; "open": { "alias": "open"; "required": false; }; }, { "dsClose": "dsClose"; "dsAfterClose": "dsAfterClose"; }, never, ["*"], true, never>;
|
|
13
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<DsModal, "ds-modal", never, { "ariaDescribedby": { "alias": "ariaDescribedby"; "required": false; }; "closeAriaLabel": { "alias": "closeAriaLabel"; "required": false; }; "description": { "alias": "description"; "required": false; }; "heading": { "alias": "heading"; "required": true; }; "modalWidth": { "alias": "modalWidth"; "required": false; }; "open": { "alias": "open"; "required": false; }; }, { "dsClose": "dsClose"; "dsAfterClose": "dsAfterClose"; }, never, ["*"], true, never>;
|
|
14
14
|
}
|
|
15
15
|
export declare interface DsModal extends Components.DsModal {
|
|
16
16
|
/**
|
package/dist/angular/ds-modal.js
CHANGED
|
@@ -19,12 +19,12 @@ let DsModal = class DsModal {
|
|
|
19
19
|
this.el = r.nativeElement;
|
|
20
20
|
}
|
|
21
21
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: DsModal, deps: [{ token: i0.ChangeDetectorRef }, { token: i0.ElementRef }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
22
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.1.0", type: DsModal, isStandalone: true, selector: "ds-modal", inputs: { ariaDescribedby: "ariaDescribedby", closeAriaLabel: "closeAriaLabel", heading: "heading", modalWidth: "modalWidth", open: "open" }, outputs: { dsClose: "dsClose", dsAfterClose: "dsAfterClose" }, ngImport: i0, template: '<ng-content></ng-content>', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
22
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.1.0", type: DsModal, isStandalone: true, selector: "ds-modal", inputs: { ariaDescribedby: "ariaDescribedby", closeAriaLabel: "closeAriaLabel", description: "description", heading: "heading", modalWidth: "modalWidth", open: "open" }, outputs: { dsClose: "dsClose", dsAfterClose: "dsAfterClose" }, ngImport: i0, template: '<ng-content></ng-content>', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
23
23
|
};
|
|
24
24
|
DsModal = __decorate([
|
|
25
25
|
ProxyCmp({
|
|
26
26
|
defineCustomElementFn: defineDsModal,
|
|
27
|
-
inputs: ['ariaDescribedby', 'closeAriaLabel', 'heading', 'modalWidth', 'open']
|
|
27
|
+
inputs: ['ariaDescribedby', 'closeAriaLabel', 'description', 'heading', 'modalWidth', 'open']
|
|
28
28
|
})
|
|
29
29
|
], DsModal);
|
|
30
30
|
export { DsModal };
|
|
@@ -35,7 +35,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.0", ngImpor
|
|
|
35
35
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
36
36
|
template: '<ng-content></ng-content>',
|
|
37
37
|
// eslint-disable-next-line @angular-eslint/no-inputs-metadata-property
|
|
38
|
-
inputs: ['ariaDescribedby', 'closeAriaLabel', { name: 'heading', required: true }, 'modalWidth', 'open'],
|
|
38
|
+
inputs: ['ariaDescribedby', 'closeAriaLabel', 'description', { name: 'heading', required: true }, 'modalWidth', 'open'],
|
|
39
39
|
outputs: ['dsClose', 'dsAfterClose'],
|
|
40
40
|
}]
|
|
41
41
|
}], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i0.ElementRef }, { type: i0.NgZone }], propDecorators: { dsClose: [{
|
package/dist/angular/index.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import * as d from './proxies';
|
|
2
|
-
export declare const DIRECTIVES: (typeof d.DsAgentActivity | typeof d.DsAgentResponse | typeof d.DsAgentSourceList | typeof d.DsAgentToolCall | typeof d.DsAttachmentList | typeof d.DsAvatar | typeof d.DsBadge | typeof d.DsBarNav | typeof d.DsBarTitle | typeof d.DsBarWorkflow | typeof d.DsBreadcrumb | typeof d.DsButtonFilled | typeof d.DsButtonUnfilled | typeof d.DsCardDataViz | typeof d.DsCardOverview | typeof d.DsCardSetting | typeof d.DsChartBar | typeof d.DsChartDonut | typeof d.DsChartLegend | typeof d.DsChartLine | typeof d.DsCheckbox | typeof d.DsChip | typeof d.DsCodeBlock | typeof d.DsConversationListItem | typeof d.DsConversationListSection | typeof d.DsConversationList | typeof d.DsDivider | typeof d.DsEmptyState | typeof d.DsField | typeof d.DsIcon | typeof d.DsInput | typeof d.DsLoader | typeof d.DsMarkdown | typeof d.DsMenu | typeof d.DsMessageActions | typeof d.DsMessageBubble | typeof d.DsMessageComposer | typeof d.DsMessageScroller | typeof d.DsMessage | typeof d.DsMobileBarNav | typeof d.DsMobileHeader | typeof d.DsMobileSectionSwitcher | typeof d.DsMobileSheetNav | typeof d.DsModal | typeof d.DsPanelNav | typeof d.DsPanelSubNav | typeof d.DsPanelToolHeader | typeof d.DsPanelToolSearch | typeof d.DsPanelTools | typeof d.DsRadio | typeof d.DsScrollOverlay | typeof d.DsSelect | typeof d.DsShellApp | typeof d.DsShellPage | typeof d.DsShellTools | typeof d.DsSkeleton | typeof d.DsSlider | typeof d.DsSwatchPicker | typeof d.DsSwitch | typeof d.DsTabGroup | typeof d.DsTag | typeof d.DsText | typeof d.DsToast | typeof d.DsTooltipDataViz | typeof d.DsTooltip | typeof d.DsTypingIndicator)[];
|
|
2
|
+
export declare const DIRECTIVES: (typeof d.DsAgentActivity | typeof d.DsAgentResponse | typeof d.DsAgentSourceList | typeof d.DsAgentToolCall | typeof d.DsAttachmentList | typeof d.DsAvatar | typeof d.DsBadge | typeof d.DsBanner | typeof d.DsBarNav | typeof d.DsBarTitle | typeof d.DsBarWorkflow | typeof d.DsBreadcrumb | typeof d.DsButtonFilled | typeof d.DsButtonUnfilled | typeof d.DsCardDataViz | typeof d.DsCardOverview | typeof d.DsCardSetting | typeof d.DsChartBar | typeof d.DsChartDonut | typeof d.DsChartLegend | typeof d.DsChartLine | typeof d.DsCheckbox | typeof d.DsChip | typeof d.DsCodeBlock | typeof d.DsConversationListItem | typeof d.DsConversationListSection | typeof d.DsConversationList | typeof d.DsDivider | typeof d.DsEmptyState | typeof d.DsField | typeof d.DsIcon | typeof d.DsInput | typeof d.DsLoader | typeof d.DsMarkdown | typeof d.DsMenu | typeof d.DsMessageActions | typeof d.DsMessageBubble | typeof d.DsMessageComposer | typeof d.DsMessageScroller | typeof d.DsMessage | typeof d.DsMobileBarNav | typeof d.DsMobileHeader | typeof d.DsMobileSectionSwitcher | typeof d.DsMobileSheetNav | typeof d.DsModal | typeof d.DsPanelNav | typeof d.DsPanelSubNav | typeof d.DsPanelToolHeader | typeof d.DsPanelToolSearch | typeof d.DsPanelTools | typeof d.DsRadio | typeof d.DsScrollOverlay | typeof d.DsSelect | typeof d.DsShellApp | typeof d.DsShellPage | typeof d.DsShellTools | typeof d.DsSkeleton | typeof d.DsSlider | typeof d.DsSwatchPicker | typeof d.DsSwitch | typeof d.DsTabGroup | typeof d.DsTag | typeof d.DsText | typeof d.DsToast | typeof d.DsTooltipDataViz | typeof d.DsTooltip | typeof d.DsTypingIndicator)[];
|
package/dist/angular/index.js
CHANGED
|
@@ -9,6 +9,7 @@ export { DsAgentToolCall } from './ds-agent-tool-call';
|
|
|
9
9
|
export { DsAttachmentList } from './ds-attachment-list';
|
|
10
10
|
export { DsAvatar } from './ds-avatar';
|
|
11
11
|
export { DsBadge } from './ds-badge';
|
|
12
|
+
export { DsBanner } from './ds-banner';
|
|
12
13
|
export { DsBarNav } from './ds-bar-nav';
|
|
13
14
|
export { DsBarTitle } from './ds-bar-title';
|
|
14
15
|
export { DsBarWorkflow } from './ds-bar-workflow';
|
package/dist/angular/proxies.js
CHANGED
|
@@ -10,6 +10,7 @@ export { DsAgentToolCall } from './ds-agent-tool-call.js';
|
|
|
10
10
|
export { DsAttachmentList } from './ds-attachment-list.js';
|
|
11
11
|
export { DsAvatar } from './ds-avatar.js';
|
|
12
12
|
export { DsBadge } from './ds-badge.js';
|
|
13
|
+
export { DsBanner } from './ds-banner.js';
|
|
13
14
|
export { DsBarNav } from './ds-bar-nav.js';
|
|
14
15
|
export { DsBarTitle } from './ds-bar-title.js';
|
|
15
16
|
export { DsBarWorkflow } from './ds-bar-workflow.js';
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{A as o,d as s}from"./p-
|
|
1
|
+
import{A as o,d as s}from"./p-wOOAzVMC.js";const t=o;const p=s;export{t as DsAgentActivity,p as defineCustomElement};
|
|
2
2
|
//# sourceMappingURL=ds-agent-activity.js.map
|