@ds-mo/ui 14.27.1 → 14.28.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 +2 -2
- package/dist/agent.json +290 -10
- package/dist/angular/ds-card-navigation.d.ts +20 -0
- package/dist/angular/ds-card-navigation.js +42 -0
- package/dist/angular/ds-card-settings-scope.d.ts +19 -0
- package/dist/angular/ds-card-settings-scope.js +42 -0
- package/dist/angular/ds-menu.d.ts +1 -1
- package/dist/angular/ds-menu.js +3 -3
- package/dist/angular/ds-mobile-bar-nav.d.ts +1 -1
- package/dist/angular/ds-mobile-bar-nav.js +3 -3
- package/dist/angular/ds-mobile-header.d.ts +1 -1
- package/dist/angular/ds-mobile-header.js +3 -3
- package/dist/angular/ds-mobile-section-switcher.d.ts +1 -1
- package/dist/angular/ds-mobile-section-switcher.js +3 -3
- package/dist/angular/ds-mobile-sheet-nav.d.ts +7 -1
- package/dist/angular/ds-mobile-sheet-nav.js +7 -4
- package/dist/angular/index.d.ts +1 -1
- package/dist/angular/index.js +2 -0
- package/dist/angular/proxies.d.ts +2 -0
- package/dist/angular/proxies.js +2 -0
- package/dist/components/ds-agent-activity.js +1 -1
- package/dist/components/ds-agent-questionnaire.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.js +1 -1
- package/dist/components/ds-bar-action.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-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-chart.js +1 -1
- package/dist/components/ds-card-navigation.d.ts +11 -0
- package/dist/components/ds-card-navigation.js +2 -0
- package/dist/components/ds-card-navigation.js.map +1 -0
- package/dist/components/ds-card-overview.js +1 -1
- package/dist/components/ds-card-setting.js +1 -1
- package/dist/components/ds-card-settings-scope.d.ts +11 -0
- package/dist/components/ds-card-settings-scope.js +2 -0
- package/dist/components/ds-card-settings-scope.js.map +1 -0
- package/dist/components/ds-chart-legend.js +1 -1
- package/dist/components/ds-chart.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-filter-menu.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-actions.js +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-pagination.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-paper-texture.js +1 -1
- package/dist/components/ds-radio.js +1 -1
- package/dist/components/ds-score.js +1 -1
- package/dist/components/ds-scroll-overlay.js +1 -1
- package/dist/components/ds-select.js +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-table-filter.js +1 -1
- package/dist/components/ds-table-group.js +1 -1
- package/dist/components/ds-table-saved-views.js +1 -1
- package/dist/components/ds-table-search.js +1 -1
- package/dist/components/ds-table-sort.js +1 -1
- package/dist/components/ds-table-toolbar.js +1 -1
- package/dist/components/ds-table.js +1 -1
- package/dist/components/ds-tag.js +1 -1
- package/dist/components/ds-text.js +1 -1
- package/dist/components/ds-textarea.js +1 -1
- package/dist/components/ds-toast.js +1 -1
- package/dist/components/ds-tooltip-chart.js +1 -1
- package/dist/components/ds-tooltip.js +1 -1
- package/dist/components/ds-typing-indicator.js +1 -1
- package/dist/components/{p-Is1lFmwp.js → p-1gt8QlyW.js} +2 -2
- package/dist/components/{p-CGQnHNuW.js → p-6iF6gdoc.js} +2 -2
- package/dist/components/{p-B3sRZBZk.js → p-8atLxerP.js} +2 -2
- package/dist/components/{p-DkxOEFHN.js → p-B3iy9Rl_.js} +2 -2
- package/dist/components/{p-Q7AOgrg5.js → p-BCFpqnAg.js} +2 -2
- package/dist/components/p-BFHWoNH3.js +2 -0
- package/dist/components/{p-BVz-r3g0.js.map → p-BFHWoNH3.js.map} +1 -1
- package/dist/components/{p-Ctnm9NJP.js → p-BLTHIBsE.js} +2 -2
- package/dist/components/p-BWDbER5T.js +2 -0
- package/dist/components/p-BWDbER5T.js.map +1 -0
- package/dist/components/{p-C68oSTb1.js → p-BXT2opmZ.js} +2 -2
- package/dist/components/{p-B9esvbYk.js → p-B_NN7k8H.js} +2 -2
- package/dist/components/p-BdU6FPu4.js +2 -0
- package/dist/components/{p-BXDLR072.js.map → p-BdU6FPu4.js.map} +1 -1
- package/dist/components/{p-BVpn_e-r.js → p-BdXUd-tK.js} +2 -2
- package/dist/components/p-BdXUd-tK.js.map +1 -0
- package/dist/components/{p-BRLDf-NK.js → p-Bj018KMC.js} +2 -2
- package/dist/components/{p-DGkn8FwV.js → p-Bl5wd3v3.js} +2 -2
- package/dist/components/{p-Bb9dA7sl.js → p-BpB2EF9g.js} +2 -2
- package/dist/components/{p-537t6oRD.js → p-BxLF8b8a.js} +2 -2
- package/dist/components/{p-BIGpc__9.js → p-C1BJgnHY.js} +2 -2
- package/dist/components/p-C78uTz-n.js +2 -0
- package/dist/components/p-C78uTz-n.js.map +1 -0
- package/dist/components/p-C82vesh_.js +2 -0
- package/dist/components/p-C82vesh_.js.map +1 -0
- package/dist/components/{p-DW8ssbfI.js → p-CN8PQLZu.js} +2 -2
- package/dist/components/{p-DQsFmleZ.js → p-COn7l__5.js} +2 -2
- package/dist/components/{p-Cf5Ai4xx.js → p-CW7JhWlS.js} +2 -2
- package/dist/components/{p-CaF5WCci.js → p-Cocq-utR.js} +2 -2
- package/dist/components/{p-to8BxxgT.js → p-CsW_2w-s.js} +2 -2
- package/dist/components/p-CvB76TJn.js +2 -0
- package/dist/components/p-CvB76TJn.js.map +1 -0
- package/dist/components/{p-2wIPUcSL.js → p-CxbGZJBU.js} +2 -2
- package/dist/components/p-D4-RkuER.js +2 -0
- package/dist/components/p-D4-RkuER.js.map +1 -0
- package/dist/components/{p-Bjt_8sLe.js → p-DB_tlJ2d.js} +2 -2
- package/dist/components/{p-VT-5XDkB.js → p-DDOuPq-N.js} +2 -2
- package/dist/components/{p-B3Z5sQin.js → p-DGHeKNfG.js} +2 -2
- package/dist/components/{p-DDqRCDXh.js → p-DSJSnQ1U.js} +2 -2
- package/dist/components/{p-Cr6pDY-e.js → p-DYK0slTb.js} +2 -2
- package/dist/components/{p-D9wZlB_N.js → p-D_QtZZR8.js} +2 -2
- package/dist/components/{p-Bv6FSDPR.js → p-DbDYEEWq.js} +2 -2
- package/dist/components/{p-Q0dkeoJ6.js → p-DmYZLH_L.js} +2 -2
- package/dist/components/{p-BEXkJ9lg.js → p-DnQN0pLp.js} +2 -2
- package/dist/components/{p-DIqAdmui.js → p-FiM3rF7B.js} +2 -2
- package/dist/components/{p-WFo1x6dN.js → p-Hzz2j1Je.js} +2 -2
- package/dist/components/{p-BZiGtBBk.js → p-Kp8ifB1g.js} +2 -2
- package/dist/components/{p-1604KY3B.js → p-NB-SoVpo.js} +2 -2
- package/dist/components/{p-GEi3hDJQ.js → p-P9My22Z1.js} +2 -2
- package/dist/components/{p-CQjUOHiN.js → p-WM1GTEun.js} +2 -2
- package/dist/components/{p-DQQsS9Rx.js → p-aMyflqva.js} +2 -2
- package/dist/components/{p-DZcIt_JJ.js → p-dgep63_i.js} +2 -2
- package/dist/components/{p-6_CNVbqa.js → p-oAbq-DLk.js} +2 -2
- package/dist/components/{p-BMzn2Cmw.js → p-rSC7ZUpy.js} +2 -2
- package/dist/docs/components.json +838 -39
- package/dist/mcp-data/registry/card-navigation.json +255 -0
- package/dist/mcp-data/registry/card-settings-scope.json +314 -0
- package/dist/mcp-data/registry/menu.json +21 -2
- package/dist/mcp-data/registry/mobile-bar-nav.json +20 -1
- package/dist/mcp-data/registry/mobile-header.json +23 -3
- package/dist/mcp-data/registry/mobile-section-switcher.json +45 -6
- package/dist/mcp-data/registry/mobile-sheet-nav.json +40 -3
- package/dist/mcp-data/registry/panel-nav.json +2 -2
- package/dist/mcp-data/registry/registry.json +295 -9
- package/dist/mcp-data/registry/shell-app.json +7 -6
- package/dist/react/components.d.ts +2 -0
- package/dist/react/components.js +2 -0
- package/dist/react/ds-card-navigation.d.ts +12 -0
- package/dist/react/ds-card-navigation.js +12 -0
- package/dist/react/ds-card-settings-scope.d.ts +12 -0
- package/dist/react/ds-card-settings-scope.js +12 -0
- package/dist/react/ds-mobile-sheet-nav.d.ts +2 -1
- package/dist/react/ds-mobile-sheet-nav.js +1 -0
- package/dist/types/components/CardNavigation/CardNavigation.d.ts +31 -0
- package/dist/types/components/CardNavigation/index.d.ts +2 -0
- package/dist/types/components/CardSettingsScope/CardSettingsScope.d.ts +33 -0
- package/dist/types/components/CardSettingsScope/index.d.ts +2 -0
- package/dist/types/components/Menu/Menu.d.ts +4 -0
- package/dist/types/components/MobileBarNav/MobileBarNav.d.ts +2 -0
- package/dist/types/components/MobileHeader/MobileHeader.d.ts +3 -0
- package/dist/types/components/MobileSectionSwitcher/MobileSectionSwitcher.d.ts +17 -0
- package/dist/types/components/MobileSheetNav/MobileSheetNav.d.ts +15 -2
- package/dist/types/components/ShellApp/ShellApp.d.ts +4 -2
- package/dist/types/components.d.ts +300 -2
- package/dist/vue/components.d.ts +2 -0
- package/dist/vue/components.js +2 -0
- package/dist/vue/ds-card-navigation.d.ts +3 -0
- package/dist/vue/ds-card-navigation.js +15 -0
- package/dist/vue/ds-card-settings-scope.d.ts +3 -0
- package/dist/vue/ds-card-settings-scope.js +20 -0
- package/dist/vue/ds-menu.js +1 -0
- package/dist/vue/ds-mobile-bar-nav.js +1 -0
- package/dist/vue/ds-mobile-header.js +1 -0
- package/dist/vue/ds-mobile-section-switcher.js +2 -0
- package/dist/vue/ds-mobile-sheet-nav.js +3 -0
- package/package.json +1 -1
- package/dist/components/p-BUh2GkPJ.js +0 -2
- package/dist/components/p-BUh2GkPJ.js.map +0 -1
- package/dist/components/p-BVpn_e-r.js.map +0 -1
- package/dist/components/p-BVz-r3g0.js +0 -2
- package/dist/components/p-BXDLR072.js +0 -2
- package/dist/components/p-BssZ4SbT.js +0 -2
- package/dist/components/p-BssZ4SbT.js.map +0 -1
- package/dist/components/p-Cy1oWIaV.js +0 -2
- package/dist/components/p-Cy1oWIaV.js.map +0 -1
- package/dist/components/p-DlbhmXjH.js +0 -2
- package/dist/components/p-DlbhmXjH.js.map +0 -1
- package/dist/components/p-LMmrjmI_.js +0 -2
- package/dist/components/p-LMmrjmI_.js.map +0 -1
- /package/dist/components/{p-Is1lFmwp.js.map → p-1gt8QlyW.js.map} +0 -0
- /package/dist/components/{p-CGQnHNuW.js.map → p-6iF6gdoc.js.map} +0 -0
- /package/dist/components/{p-B3sRZBZk.js.map → p-8atLxerP.js.map} +0 -0
- /package/dist/components/{p-DkxOEFHN.js.map → p-B3iy9Rl_.js.map} +0 -0
- /package/dist/components/{p-Q7AOgrg5.js.map → p-BCFpqnAg.js.map} +0 -0
- /package/dist/components/{p-Ctnm9NJP.js.map → p-BLTHIBsE.js.map} +0 -0
- /package/dist/components/{p-C68oSTb1.js.map → p-BXT2opmZ.js.map} +0 -0
- /package/dist/components/{p-B9esvbYk.js.map → p-B_NN7k8H.js.map} +0 -0
- /package/dist/components/{p-BRLDf-NK.js.map → p-Bj018KMC.js.map} +0 -0
- /package/dist/components/{p-DGkn8FwV.js.map → p-Bl5wd3v3.js.map} +0 -0
- /package/dist/components/{p-Bb9dA7sl.js.map → p-BpB2EF9g.js.map} +0 -0
- /package/dist/components/{p-537t6oRD.js.map → p-BxLF8b8a.js.map} +0 -0
- /package/dist/components/{p-BIGpc__9.js.map → p-C1BJgnHY.js.map} +0 -0
- /package/dist/components/{p-DW8ssbfI.js.map → p-CN8PQLZu.js.map} +0 -0
- /package/dist/components/{p-DQsFmleZ.js.map → p-COn7l__5.js.map} +0 -0
- /package/dist/components/{p-Cf5Ai4xx.js.map → p-CW7JhWlS.js.map} +0 -0
- /package/dist/components/{p-CaF5WCci.js.map → p-Cocq-utR.js.map} +0 -0
- /package/dist/components/{p-to8BxxgT.js.map → p-CsW_2w-s.js.map} +0 -0
- /package/dist/components/{p-2wIPUcSL.js.map → p-CxbGZJBU.js.map} +0 -0
- /package/dist/components/{p-Bjt_8sLe.js.map → p-DB_tlJ2d.js.map} +0 -0
- /package/dist/components/{p-VT-5XDkB.js.map → p-DDOuPq-N.js.map} +0 -0
- /package/dist/components/{p-B3Z5sQin.js.map → p-DGHeKNfG.js.map} +0 -0
- /package/dist/components/{p-DDqRCDXh.js.map → p-DSJSnQ1U.js.map} +0 -0
- /package/dist/components/{p-Cr6pDY-e.js.map → p-DYK0slTb.js.map} +0 -0
- /package/dist/components/{p-D9wZlB_N.js.map → p-D_QtZZR8.js.map} +0 -0
- /package/dist/components/{p-Bv6FSDPR.js.map → p-DbDYEEWq.js.map} +0 -0
- /package/dist/components/{p-Q0dkeoJ6.js.map → p-DmYZLH_L.js.map} +0 -0
- /package/dist/components/{p-BEXkJ9lg.js.map → p-DnQN0pLp.js.map} +0 -0
- /package/dist/components/{p-DIqAdmui.js.map → p-FiM3rF7B.js.map} +0 -0
- /package/dist/components/{p-WFo1x6dN.js.map → p-Hzz2j1Je.js.map} +0 -0
- /package/dist/components/{p-BZiGtBBk.js.map → p-Kp8ifB1g.js.map} +0 -0
- /package/dist/components/{p-1604KY3B.js.map → p-NB-SoVpo.js.map} +0 -0
- /package/dist/components/{p-GEi3hDJQ.js.map → p-P9My22Z1.js.map} +0 -0
- /package/dist/components/{p-CQjUOHiN.js.map → p-WM1GTEun.js.map} +0 -0
- /package/dist/components/{p-DQQsS9Rx.js.map → p-aMyflqva.js.map} +0 -0
- /package/dist/components/{p-DZcIt_JJ.js.map → p-dgep63_i.js.map} +0 -0
- /package/dist/components/{p-6_CNVbqa.js.map → p-oAbq-DLk.js.map} +0 -0
- /package/dist/components/{p-BMzn2Cmw.js.map → p-rSC7ZUpy.js.map} +0 -0
|
@@ -0,0 +1,255 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://ui.shadcn.com/schema/registry-item.json",
|
|
3
|
+
"name": "card-navigation",
|
|
4
|
+
"title": "CardNavigation",
|
|
5
|
+
"description": "Settings-style navigation surface with a native destination link, optional supporting copy, a fixed ChevronRight affordance, and an optional application-owned body.",
|
|
6
|
+
"type": "registry:ui",
|
|
7
|
+
"meta": {
|
|
8
|
+
"library": "@ds-mo/ui",
|
|
9
|
+
"distribution": "npm",
|
|
10
|
+
"storybook": "https://zainadeel.github.io/compomo/?path=/story/card-navigation",
|
|
11
|
+
"source": "src/wc/components/CardNavigation/CardNavigation.tsx",
|
|
12
|
+
"intentStatus": "complete",
|
|
13
|
+
"intent": {
|
|
14
|
+
"audience": "general",
|
|
15
|
+
"status": "stable",
|
|
16
|
+
"summary": "Settings-style navigation surface with a native destination link, optional supporting copy, a fixed ChevronRight affordance, and an optional application-owned body.",
|
|
17
|
+
"useWhen": [
|
|
18
|
+
"A settings page needs a card that leads to a deeper settings destination.",
|
|
19
|
+
"A compact destination card needs the complete surface to act as one link.",
|
|
20
|
+
"A settings summary must remain visible in a body while only the card header navigates."
|
|
21
|
+
],
|
|
22
|
+
"avoidWhen": [
|
|
23
|
+
"The card edits its contents in place; use CardSetting for the edit-save-cancel workflow.",
|
|
24
|
+
"The destination is an action without a navigable URL.",
|
|
25
|
+
"The surface contains a chart, legend, metric visualization, or other data-visualization composition."
|
|
26
|
+
],
|
|
27
|
+
"alternatives": [
|
|
28
|
+
{
|
|
29
|
+
"when": "The section switches between read-only and editable content in place.",
|
|
30
|
+
"component": "component:ds-card-setting",
|
|
31
|
+
"reason": "CardSetting owns the controlled edit-save-cancel workflow."
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
"when": "The surface contains a chart or specialized data-visualization composition.",
|
|
35
|
+
"component": "component:ds-card-chart",
|
|
36
|
+
"reason": "CardChart owns the independently evolving chart-card contract."
|
|
37
|
+
}
|
|
38
|
+
],
|
|
39
|
+
"commonlyComposedWith": [
|
|
40
|
+
"component:ds-text",
|
|
41
|
+
"component:ds-card-setting"
|
|
42
|
+
],
|
|
43
|
+
"accessibility": [
|
|
44
|
+
"CardNavigation renders a native link whenever href resolves to an allowed URL, so Enter activation, link context menus, and modified-click behavior remain available.",
|
|
45
|
+
"The heading is rendered as an h2 and the optional description contributes to the link's accessible name.",
|
|
46
|
+
"The ChevronRight icon is decorative because the link text already names the destination.",
|
|
47
|
+
"Use the content variant only when interactive body content must remain outside the header link; never place interactive descendants inside the navigation-only card.",
|
|
48
|
+
"dsNavigate is cancelable so client-side routers can prevent native navigation after accepting an unmodified activation."
|
|
49
|
+
],
|
|
50
|
+
"states": [
|
|
51
|
+
"The native link owns hover, pressed, and focus-visible states across the complete card in navigation-only mode.",
|
|
52
|
+
"In content mode, the native link owns those interaction states only across the header while the body remains application-owned.",
|
|
53
|
+
"An empty or unsafe href renders non-interactive card chrome without a false keyboard target.",
|
|
54
|
+
"The application owns destination loading, authorization, not-found, and recovery states after navigation."
|
|
55
|
+
],
|
|
56
|
+
"responsiveBehavior": [
|
|
57
|
+
"Choose sm, md, or lg from the parent layout; the surface never exceeds its parent width.",
|
|
58
|
+
"Supporting copy wraps while the chevron remains visible at the trailing edge.",
|
|
59
|
+
"The parent owns wrapping, columns, stacking, and breakpoint changes between cards."
|
|
60
|
+
],
|
|
61
|
+
"frameworkCaveats": {
|
|
62
|
+
"customElements": [
|
|
63
|
+
"Set href to a valid relative or HTTP(S) URL.",
|
|
64
|
+
"Prevent dsNavigate only when an application router takes ownership of the same activation."
|
|
65
|
+
],
|
|
66
|
+
"react": [
|
|
67
|
+
"Pass href for native link semantics and use onDsNavigate only when coordinating with a client-side router.",
|
|
68
|
+
"Use variant content when projecting interactive body content so those controls stay outside the link."
|
|
69
|
+
],
|
|
70
|
+
"angular": [
|
|
71
|
+
"Bind href and prevent dsNavigate before calling Router.navigateByUrl for unmodified primary activations.",
|
|
72
|
+
"Use variant content when projecting interactive body content so those controls stay outside the link."
|
|
73
|
+
]
|
|
74
|
+
},
|
|
75
|
+
"references": [
|
|
76
|
+
{
|
|
77
|
+
"label": "Storybook navigation-only and content examples",
|
|
78
|
+
"path": "src/wc/components/CardNavigation/CardNavigation.stories.ts"
|
|
79
|
+
},
|
|
80
|
+
{
|
|
81
|
+
"label": "Rendered navigation and interaction coverage",
|
|
82
|
+
"path": "tests/e2e/card-navigation.spec.ts"
|
|
83
|
+
}
|
|
84
|
+
]
|
|
85
|
+
},
|
|
86
|
+
"api": {
|
|
87
|
+
"props": {
|
|
88
|
+
"cardWidth": {
|
|
89
|
+
"type": "CardNavigationWidth",
|
|
90
|
+
"resolvedType": "\"lg\" | \"md\" | \"sm\"",
|
|
91
|
+
"attribute": "card-width",
|
|
92
|
+
"default": "'md'",
|
|
93
|
+
"required": false,
|
|
94
|
+
"mutable": false,
|
|
95
|
+
"description": "Card width token (`sm` / `md` / `lg`)."
|
|
96
|
+
},
|
|
97
|
+
"description": {
|
|
98
|
+
"type": "string | undefined",
|
|
99
|
+
"resolvedType": "string | undefined",
|
|
100
|
+
"attribute": "description",
|
|
101
|
+
"required": false,
|
|
102
|
+
"mutable": false,
|
|
103
|
+
"description": "Optional supporting copy shown below the heading."
|
|
104
|
+
},
|
|
105
|
+
"heading": {
|
|
106
|
+
"type": "string",
|
|
107
|
+
"resolvedType": "string",
|
|
108
|
+
"attribute": "heading",
|
|
109
|
+
"required": true,
|
|
110
|
+
"mutable": false,
|
|
111
|
+
"description": "Section or destination heading shown in the card header."
|
|
112
|
+
},
|
|
113
|
+
"href": {
|
|
114
|
+
"type": "string",
|
|
115
|
+
"resolvedType": "string",
|
|
116
|
+
"attribute": "href",
|
|
117
|
+
"required": true,
|
|
118
|
+
"mutable": false,
|
|
119
|
+
"description": "Destination for the card's native link."
|
|
120
|
+
},
|
|
121
|
+
"variant": {
|
|
122
|
+
"type": "CardNavigationVariant",
|
|
123
|
+
"resolvedType": "\"content\" | \"navigation-only\"",
|
|
124
|
+
"attribute": "variant",
|
|
125
|
+
"default": "'navigation-only'",
|
|
126
|
+
"required": false,
|
|
127
|
+
"mutable": false,
|
|
128
|
+
"description": "`navigation-only` makes the complete card the link. `content` keeps the\nheader as the link and exposes a non-interactive body slot below it."
|
|
129
|
+
}
|
|
130
|
+
},
|
|
131
|
+
"events": [
|
|
132
|
+
{
|
|
133
|
+
"name": "dsNavigate",
|
|
134
|
+
"detail": "CardNavigationDetail",
|
|
135
|
+
"bubbles": true,
|
|
136
|
+
"cancelable": true,
|
|
137
|
+
"composed": true,
|
|
138
|
+
"description": "Emits before native navigation. Prevent this event to take over routing;\nthe component will then prevent the original link navigation."
|
|
139
|
+
}
|
|
140
|
+
],
|
|
141
|
+
"methods": [],
|
|
142
|
+
"slots": []
|
|
143
|
+
},
|
|
144
|
+
"props": {
|
|
145
|
+
"cardWidth": {
|
|
146
|
+
"type": "CardNavigationWidth",
|
|
147
|
+
"resolvedType": "\"lg\" | \"md\" | \"sm\"",
|
|
148
|
+
"attribute": "card-width",
|
|
149
|
+
"default": "'md'",
|
|
150
|
+
"required": false,
|
|
151
|
+
"mutable": false,
|
|
152
|
+
"description": "Card width token (`sm` / `md` / `lg`)."
|
|
153
|
+
},
|
|
154
|
+
"description": {
|
|
155
|
+
"type": "string | undefined",
|
|
156
|
+
"resolvedType": "string | undefined",
|
|
157
|
+
"attribute": "description",
|
|
158
|
+
"required": false,
|
|
159
|
+
"mutable": false,
|
|
160
|
+
"description": "Optional supporting copy shown below the heading."
|
|
161
|
+
},
|
|
162
|
+
"heading": {
|
|
163
|
+
"type": "string",
|
|
164
|
+
"resolvedType": "string",
|
|
165
|
+
"attribute": "heading",
|
|
166
|
+
"required": true,
|
|
167
|
+
"mutable": false,
|
|
168
|
+
"description": "Section or destination heading shown in the card header."
|
|
169
|
+
},
|
|
170
|
+
"href": {
|
|
171
|
+
"type": "string",
|
|
172
|
+
"resolvedType": "string",
|
|
173
|
+
"attribute": "href",
|
|
174
|
+
"required": true,
|
|
175
|
+
"mutable": false,
|
|
176
|
+
"description": "Destination for the card's native link."
|
|
177
|
+
},
|
|
178
|
+
"variant": {
|
|
179
|
+
"type": "CardNavigationVariant",
|
|
180
|
+
"resolvedType": "\"content\" | \"navigation-only\"",
|
|
181
|
+
"attribute": "variant",
|
|
182
|
+
"default": "'navigation-only'",
|
|
183
|
+
"required": false,
|
|
184
|
+
"mutable": false,
|
|
185
|
+
"description": "`navigation-only` makes the complete card the link. `content` keeps the\nheader as the link and exposes a non-interactive body slot below it."
|
|
186
|
+
}
|
|
187
|
+
},
|
|
188
|
+
"events": [
|
|
189
|
+
{
|
|
190
|
+
"name": "dsNavigate",
|
|
191
|
+
"detail": "CardNavigationDetail",
|
|
192
|
+
"bubbles": true,
|
|
193
|
+
"cancelable": true,
|
|
194
|
+
"composed": true,
|
|
195
|
+
"description": "Emits before native navigation. Prevent this event to take over routing;\nthe component will then prevent the original link navigation."
|
|
196
|
+
}
|
|
197
|
+
],
|
|
198
|
+
"methods": [],
|
|
199
|
+
"slots": [],
|
|
200
|
+
"exports": {
|
|
201
|
+
"customElement": "ds-card-navigation",
|
|
202
|
+
"react": "DsCardNavigation",
|
|
203
|
+
"vue": "DsCardNavigation",
|
|
204
|
+
"angular": "DsCardNavigation"
|
|
205
|
+
},
|
|
206
|
+
"consumption": {
|
|
207
|
+
"install": "npm install @ds-mo/ui @ds-mo/tokens @ds-mo/icons",
|
|
208
|
+
"cssSetup": "import '@ds-mo/tokens';\nimport '@ds-mo/tokens/reset';\nimport '@ds-mo/tokens/globals';",
|
|
209
|
+
"customElements": {
|
|
210
|
+
"import": "import '@ds-mo/ui/dist/components/ds-card-navigation.js';",
|
|
211
|
+
"example": "<ds-card-navigation></ds-card-navigation>"
|
|
212
|
+
},
|
|
213
|
+
"react": {
|
|
214
|
+
"import": "import { DsCardNavigation } from '@ds-mo/ui/react';",
|
|
215
|
+
"example": "<DsCardNavigation />"
|
|
216
|
+
},
|
|
217
|
+
"vue": {
|
|
218
|
+
"import": "import { DsCardNavigation } from '@ds-mo/ui/vue';",
|
|
219
|
+
"example": "<DsCardNavigation />"
|
|
220
|
+
},
|
|
221
|
+
"angular": {
|
|
222
|
+
"import": "import { DsCardNavigation } from '@ds-mo/ui/angular/ds-card-navigation';",
|
|
223
|
+
"example": "<ds-card-navigation></ds-card-navigation>"
|
|
224
|
+
},
|
|
225
|
+
"peerDependencies": {
|
|
226
|
+
"required": [
|
|
227
|
+
"@ds-mo/tokens ^6.5.1",
|
|
228
|
+
"@ds-mo/icons ^7.0.0"
|
|
229
|
+
],
|
|
230
|
+
"frameworks": "Custom Elements; React 18/19 wrappers; Vue 3 wrappers; Angular 19-22 standalone adapters."
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
},
|
|
234
|
+
"dependencies": [
|
|
235
|
+
"@ds-mo/ui",
|
|
236
|
+
"@ds-mo/tokens",
|
|
237
|
+
"@ds-mo/icons"
|
|
238
|
+
],
|
|
239
|
+
"registryDependencies": [
|
|
240
|
+
"icon",
|
|
241
|
+
"text"
|
|
242
|
+
],
|
|
243
|
+
"files": [
|
|
244
|
+
{
|
|
245
|
+
"path": "src/wc/components/CardNavigation/CardNavigation.css",
|
|
246
|
+
"content": "@import '../../utils/chrome-header.css';\n@import '../../utils/interaction-fill.css';\n@import '../../utils/focus-ring.css';\n@import '../../utils/forced-colors.css';\n\n:host {\n position: relative;\n display: flex;\n flex-direction: column;\n box-sizing: border-box;\n width: var(--_card-navigation-width);\n max-width: 100%;\n overflow: hidden;\n border: none;\n border-radius: var(--dimension-radius-125);\n background-color: var(--color-background-primary);\n box-shadow: var(--effect-shadow-elevated-sm);\n}\n\n:host(.card-navigation--content) {\n min-height: var(--_card-navigation-min-height);\n}\n\n:host::after {\n content: '';\n position: absolute;\n inset: 0;\n z-index: 4;\n border-radius: inherit;\n box-shadow: var(--effect-highlight-elevated-sm);\n pointer-events: none;\n}\n\n.card-navigation__target {\n color: inherit;\n text-decoration: none;\n cursor: pointer;\n}\n\n.card-navigation__header {\n flex: 0 0 auto;\n border-radius: inherit;\n}\n\n:host(.card-navigation--content) .card-navigation__header {\n border-radius: var(--dimension-radius-125) var(--dimension-radius-125) 0 0;\n --ds-interaction-divider-width: var(--dimension-stroke-width-012);\n --ds-interaction-divider-color: var(--color-border-tertiary);\n}\n\n.card-navigation__copy {\n min-height: var(--dimension-size-400);\n justify-content: center;\n}\n\nds-text.card-navigation__title,\nds-text.card-navigation__description {\n overflow-wrap: anywhere;\n}\n\n.card-navigation__chevron {\n justify-content: center;\n width: var(--dimension-size-400);\n color: var(--color-foreground-secondary);\n}\n\n.card-navigation__body {\n display: flex;\n flex: 1 1 auto;\n flex-direction: column;\n min-height: 0;\n box-sizing: border-box;\n background-color: var(--color-background-primary);\n border-radius: 0 0 var(--dimension-radius-125) var(--dimension-radius-125);\n}\n\n@media (forced-colors: active) {\n :host {\n box-shadow: none;\n outline: var(--dimension-stroke-width-012) solid var(--ds-forced-color-content);\n outline-offset: calc(-1 * var(--dimension-stroke-width-012));\n }\n\n :host::after {\n box-shadow: none;\n }\n}\n",
|
|
247
|
+
"type": "registry:ui"
|
|
248
|
+
},
|
|
249
|
+
{
|
|
250
|
+
"path": "src/wc/components/CardNavigation/CardNavigation.tsx",
|
|
251
|
+
"content": "import { Component, Event, EventEmitter, h, Host, Prop } from '@stencil/core';\nimport { resolveSafeUrl } from '../../utils';\n\nexport type CardNavigationWidth = 'sm' | 'md' | 'lg';\nexport type CardNavigationVariant = 'navigation-only' | 'content';\n\nexport interface CardNavigationDetail {\n href: string;\n originalEvent: MouseEvent;\n}\n\nconst CARD_WIDTH_VARS: Record<CardNavigationWidth, string> = {\n sm: 'var(--dimension-card-width-sm)',\n md: 'var(--dimension-card-width-md)',\n lg: 'var(--dimension-card-width-lg)',\n};\n\nconst CARD_HEIGHT_VARS: Record<CardNavigationWidth, string> = {\n sm: 'var(--dimension-card-height-sm)',\n md: 'var(--dimension-card-height-md)',\n lg: 'var(--dimension-card-height-lg)',\n};\n\n@Component({\n tag: 'ds-card-navigation',\n styleUrl: 'CardNavigation.css',\n scoped: true,\n})\nexport class CardNavigation {\n /** Destination for the card's native link. */\n @Prop() href!: string;\n\n /** Section or destination heading shown in the card header. */\n @Prop() heading!: string;\n\n /** Optional supporting copy shown below the heading. */\n @Prop() description: string | undefined;\n\n /**\n * `navigation-only` makes the complete card the link. `content` keeps the\n * header as the link and exposes a non-interactive body slot below it.\n */\n @Prop() variant: CardNavigationVariant = 'navigation-only';\n\n /** Card width token (`sm` / `md` / `lg`). */\n @Prop() cardWidth: CardNavigationWidth = 'md';\n\n /**\n * Emits before native navigation. Prevent this event to take over routing;\n * the component will then prevent the original link navigation.\n */\n @Event({ cancelable: true }) dsNavigate!: EventEmitter<CardNavigationDetail>;\n\n private handleNavigation(href: string, originalEvent: MouseEvent) {\n const navigateEvent = this.dsNavigate.emit({ href, originalEvent });\n if (navigateEvent.defaultPrevented) originalEvent.preventDefault();\n }\n\n private renderHeader(href: string | undefined) {\n const Target = href ? 'a' : 'div';\n const description = this.description?.trim();\n\n return (\n <Target\n class={{\n 'card-navigation__target': true,\n 'card-navigation__header': true,\n 'ds-chrome-header': true,\n 'ds-interaction-fill': !!href,\n 'ds-focus-ring-inset': !!href,\n }}\n href={href}\n onClick={href ? (event: MouseEvent) => this.handleNavigation(href, event) : undefined}\n >\n <div\n class={{\n 'card-navigation__copy': true,\n 'ds-chrome-header__copy': true,\n 'ds-chrome-header__copy--stacked': !!description,\n 'ds-control--md': true,\n 'ds-interaction-fill__content': true,\n }}\n >\n <ds-text\n class=\"card-navigation__title ds-chrome-header__heading\"\n variant=\"text-title-small\"\n emphasis\n color=\"primary\"\n as=\"h2\"\n >\n {this.heading}\n </ds-text>\n {description ? (\n <ds-text\n class=\"card-navigation__description ds-chrome-header__description\"\n variant=\"text-body-small\"\n color=\"secondary\"\n as=\"span\"\n >\n {description}\n </ds-text>\n ) : null}\n </div>\n <span class=\"card-navigation__chevron ds-chrome-header__trailing ds-interaction-fill__content\">\n <ds-icon name=\"ChevronRight\" size=\"md\" color=\"inherit\" aria-hidden=\"true\" />\n </span>\n </Target>\n );\n }\n\n render() {\n const href = resolveSafeUrl(this.href);\n const hasContent = this.variant === 'content';\n\n return (\n <Host\n class={{\n 'card-navigation': true,\n 'card-navigation--navigation-only': !hasContent,\n 'card-navigation--content': hasContent,\n }}\n style={{\n '--_card-navigation-width': CARD_WIDTH_VARS[this.cardWidth],\n '--_card-navigation-min-height': CARD_HEIGHT_VARS[this.cardWidth],\n }}\n >\n {this.renderHeader(href)}\n {hasContent ? (\n <div class=\"card-navigation__body\">\n <slot />\n </div>\n ) : null}\n </Host>\n );\n }\n}\n",
|
|
252
|
+
"type": "registry:ui"
|
|
253
|
+
}
|
|
254
|
+
]
|
|
255
|
+
}
|
|
@@ -0,0 +1,314 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://ui.shadcn.com/schema/registry-item.json",
|
|
3
|
+
"name": "card-settings-scope",
|
|
4
|
+
"title": "CardSettingsScope",
|
|
5
|
+
"description": "Compact, theme-aware settings context card with inline product-area and profile menu triggers.",
|
|
6
|
+
"type": "registry:ui",
|
|
7
|
+
"meta": {
|
|
8
|
+
"library": "@ds-mo/ui",
|
|
9
|
+
"distribution": "npm",
|
|
10
|
+
"storybook": "https://zainadeel.github.io/compomo/?path=/story/card-settings-scope",
|
|
11
|
+
"source": "src/wc/components/CardSettingsScope/CardSettingsScope.tsx",
|
|
12
|
+
"intentStatus": "complete",
|
|
13
|
+
"intent": {
|
|
14
|
+
"audience": "general",
|
|
15
|
+
"status": "stable",
|
|
16
|
+
"summary": "Compact, theme-aware settings context card with inline product-area and profile menu triggers.",
|
|
17
|
+
"useWhen": [
|
|
18
|
+
"A settings workspace needs to show and change both its product area and the organization or profile being managed."
|
|
19
|
+
],
|
|
20
|
+
"avoidWhen": [
|
|
21
|
+
"The content is a reporting period and metrics summary; use CardOverview.",
|
|
22
|
+
"The card edits settings in place; use CardSetting."
|
|
23
|
+
],
|
|
24
|
+
"commonlyComposedWith": [
|
|
25
|
+
"component:ds-menu",
|
|
26
|
+
"component:ds-card-setting"
|
|
27
|
+
],
|
|
28
|
+
"accessibility": [
|
|
29
|
+
"Both scope values are native buttons with popup relationships and controlled expanded state.",
|
|
30
|
+
"Use the emitted native anchor for menu placement and focus return.",
|
|
31
|
+
"An empty informational profiles popup uses dialog semantics.",
|
|
32
|
+
"The shared text-action recipe supplies brand foreground, hover underline, and keyboard focus indication."
|
|
33
|
+
],
|
|
34
|
+
"states": [
|
|
35
|
+
"The application owns the selected area, profile, available choices, permissions, and empty-state copy.",
|
|
36
|
+
"The card reports popup requests without changing selection or expanded state.",
|
|
37
|
+
"The surface follows the active theme rather than imposing always-dark colors."
|
|
38
|
+
],
|
|
39
|
+
"responsiveBehavior": [
|
|
40
|
+
"The parent owns sticky positioning and shell offsets.",
|
|
41
|
+
"The compact sentence wraps when space is constrained so both controls remain available."
|
|
42
|
+
],
|
|
43
|
+
"frameworkCaveats": {
|
|
44
|
+
"angular": [
|
|
45
|
+
"Import the generated standalone adapter; bind controlled labels and expanded states and handle dsScopeRequest."
|
|
46
|
+
]
|
|
47
|
+
},
|
|
48
|
+
"references": [
|
|
49
|
+
{
|
|
50
|
+
"label": "Storybook examples",
|
|
51
|
+
"path": "src/wc/components/CardSettingsScope/CardSettingsScope.stories.ts"
|
|
52
|
+
}
|
|
53
|
+
]
|
|
54
|
+
},
|
|
55
|
+
"api": {
|
|
56
|
+
"props": {
|
|
57
|
+
"areaControls": {
|
|
58
|
+
"type": "string | undefined",
|
|
59
|
+
"resolvedType": "string | undefined",
|
|
60
|
+
"attribute": "area-controls",
|
|
61
|
+
"required": false,
|
|
62
|
+
"mutable": false,
|
|
63
|
+
"description": "ID of the application-owned product-area menu."
|
|
64
|
+
},
|
|
65
|
+
"areaExpanded": {
|
|
66
|
+
"type": "boolean",
|
|
67
|
+
"resolvedType": "boolean",
|
|
68
|
+
"attribute": "area-expanded",
|
|
69
|
+
"default": "false",
|
|
70
|
+
"required": false,
|
|
71
|
+
"mutable": false,
|
|
72
|
+
"description": "Whether the product-area menu is open."
|
|
73
|
+
},
|
|
74
|
+
"areaLabel": {
|
|
75
|
+
"type": "string",
|
|
76
|
+
"resolvedType": "string",
|
|
77
|
+
"attribute": "area-label",
|
|
78
|
+
"default": "'All settings'",
|
|
79
|
+
"required": false,
|
|
80
|
+
"mutable": false,
|
|
81
|
+
"description": "Current product area or the label for the combined settings view."
|
|
82
|
+
},
|
|
83
|
+
"forLabel": {
|
|
84
|
+
"type": "string",
|
|
85
|
+
"resolvedType": "string",
|
|
86
|
+
"attribute": "for-label",
|
|
87
|
+
"default": "'for'",
|
|
88
|
+
"required": false,
|
|
89
|
+
"mutable": false,
|
|
90
|
+
"description": "Sentence connector, supplied separately for localization."
|
|
91
|
+
},
|
|
92
|
+
"managingLabel": {
|
|
93
|
+
"type": "string",
|
|
94
|
+
"resolvedType": "string",
|
|
95
|
+
"attribute": "managing-label",
|
|
96
|
+
"default": "'Managing'",
|
|
97
|
+
"required": false,
|
|
98
|
+
"mutable": false,
|
|
99
|
+
"description": "Sentence prefix, supplied separately for localization."
|
|
100
|
+
},
|
|
101
|
+
"profileControls": {
|
|
102
|
+
"type": "string | undefined",
|
|
103
|
+
"resolvedType": "string | undefined",
|
|
104
|
+
"attribute": "profile-controls",
|
|
105
|
+
"required": false,
|
|
106
|
+
"mutable": false,
|
|
107
|
+
"description": "ID of the application-owned profiles popup."
|
|
108
|
+
},
|
|
109
|
+
"profileExpanded": {
|
|
110
|
+
"type": "boolean",
|
|
111
|
+
"resolvedType": "boolean",
|
|
112
|
+
"attribute": "profile-expanded",
|
|
113
|
+
"default": "false",
|
|
114
|
+
"required": false,
|
|
115
|
+
"mutable": false,
|
|
116
|
+
"description": "Whether the profiles popup is open."
|
|
117
|
+
},
|
|
118
|
+
"profileLabel": {
|
|
119
|
+
"type": "string",
|
|
120
|
+
"resolvedType": "string",
|
|
121
|
+
"attribute": "profile-label",
|
|
122
|
+
"default": "'Organization'",
|
|
123
|
+
"required": false,
|
|
124
|
+
"mutable": false,
|
|
125
|
+
"description": "Current organization or settings profile."
|
|
126
|
+
},
|
|
127
|
+
"profilePopup": {
|
|
128
|
+
"type": "'menu' | 'dialog'",
|
|
129
|
+
"resolvedType": "\"dialog\" | \"menu\"",
|
|
130
|
+
"attribute": "profile-popup",
|
|
131
|
+
"default": "'menu'",
|
|
132
|
+
"required": false,
|
|
133
|
+
"mutable": false,
|
|
134
|
+
"description": "Empty informational profile popups use dialog semantics instead of a menu."
|
|
135
|
+
},
|
|
136
|
+
"scopeLabel": {
|
|
137
|
+
"type": "string",
|
|
138
|
+
"resolvedType": "string",
|
|
139
|
+
"attribute": "scope-label",
|
|
140
|
+
"default": "'Settings scope'",
|
|
141
|
+
"required": false,
|
|
142
|
+
"mutable": false,
|
|
143
|
+
"description": "Accessible name for this context region."
|
|
144
|
+
}
|
|
145
|
+
},
|
|
146
|
+
"events": [
|
|
147
|
+
{
|
|
148
|
+
"name": "dsScopeRequest",
|
|
149
|
+
"detail": "SettingsScopeRequest",
|
|
150
|
+
"bubbles": true,
|
|
151
|
+
"cancelable": true,
|
|
152
|
+
"composed": true,
|
|
153
|
+
"description": "Requests a popup; the owner supplies choices, open state, and selection."
|
|
154
|
+
}
|
|
155
|
+
],
|
|
156
|
+
"methods": [],
|
|
157
|
+
"slots": []
|
|
158
|
+
},
|
|
159
|
+
"props": {
|
|
160
|
+
"areaControls": {
|
|
161
|
+
"type": "string | undefined",
|
|
162
|
+
"resolvedType": "string | undefined",
|
|
163
|
+
"attribute": "area-controls",
|
|
164
|
+
"required": false,
|
|
165
|
+
"mutable": false,
|
|
166
|
+
"description": "ID of the application-owned product-area menu."
|
|
167
|
+
},
|
|
168
|
+
"areaExpanded": {
|
|
169
|
+
"type": "boolean",
|
|
170
|
+
"resolvedType": "boolean",
|
|
171
|
+
"attribute": "area-expanded",
|
|
172
|
+
"default": "false",
|
|
173
|
+
"required": false,
|
|
174
|
+
"mutable": false,
|
|
175
|
+
"description": "Whether the product-area menu is open."
|
|
176
|
+
},
|
|
177
|
+
"areaLabel": {
|
|
178
|
+
"type": "string",
|
|
179
|
+
"resolvedType": "string",
|
|
180
|
+
"attribute": "area-label",
|
|
181
|
+
"default": "'All settings'",
|
|
182
|
+
"required": false,
|
|
183
|
+
"mutable": false,
|
|
184
|
+
"description": "Current product area or the label for the combined settings view."
|
|
185
|
+
},
|
|
186
|
+
"forLabel": {
|
|
187
|
+
"type": "string",
|
|
188
|
+
"resolvedType": "string",
|
|
189
|
+
"attribute": "for-label",
|
|
190
|
+
"default": "'for'",
|
|
191
|
+
"required": false,
|
|
192
|
+
"mutable": false,
|
|
193
|
+
"description": "Sentence connector, supplied separately for localization."
|
|
194
|
+
},
|
|
195
|
+
"managingLabel": {
|
|
196
|
+
"type": "string",
|
|
197
|
+
"resolvedType": "string",
|
|
198
|
+
"attribute": "managing-label",
|
|
199
|
+
"default": "'Managing'",
|
|
200
|
+
"required": false,
|
|
201
|
+
"mutable": false,
|
|
202
|
+
"description": "Sentence prefix, supplied separately for localization."
|
|
203
|
+
},
|
|
204
|
+
"profileControls": {
|
|
205
|
+
"type": "string | undefined",
|
|
206
|
+
"resolvedType": "string | undefined",
|
|
207
|
+
"attribute": "profile-controls",
|
|
208
|
+
"required": false,
|
|
209
|
+
"mutable": false,
|
|
210
|
+
"description": "ID of the application-owned profiles popup."
|
|
211
|
+
},
|
|
212
|
+
"profileExpanded": {
|
|
213
|
+
"type": "boolean",
|
|
214
|
+
"resolvedType": "boolean",
|
|
215
|
+
"attribute": "profile-expanded",
|
|
216
|
+
"default": "false",
|
|
217
|
+
"required": false,
|
|
218
|
+
"mutable": false,
|
|
219
|
+
"description": "Whether the profiles popup is open."
|
|
220
|
+
},
|
|
221
|
+
"profileLabel": {
|
|
222
|
+
"type": "string",
|
|
223
|
+
"resolvedType": "string",
|
|
224
|
+
"attribute": "profile-label",
|
|
225
|
+
"default": "'Organization'",
|
|
226
|
+
"required": false,
|
|
227
|
+
"mutable": false,
|
|
228
|
+
"description": "Current organization or settings profile."
|
|
229
|
+
},
|
|
230
|
+
"profilePopup": {
|
|
231
|
+
"type": "'menu' | 'dialog'",
|
|
232
|
+
"resolvedType": "\"dialog\" | \"menu\"",
|
|
233
|
+
"attribute": "profile-popup",
|
|
234
|
+
"default": "'menu'",
|
|
235
|
+
"required": false,
|
|
236
|
+
"mutable": false,
|
|
237
|
+
"description": "Empty informational profile popups use dialog semantics instead of a menu."
|
|
238
|
+
},
|
|
239
|
+
"scopeLabel": {
|
|
240
|
+
"type": "string",
|
|
241
|
+
"resolvedType": "string",
|
|
242
|
+
"attribute": "scope-label",
|
|
243
|
+
"default": "'Settings scope'",
|
|
244
|
+
"required": false,
|
|
245
|
+
"mutable": false,
|
|
246
|
+
"description": "Accessible name for this context region."
|
|
247
|
+
}
|
|
248
|
+
},
|
|
249
|
+
"events": [
|
|
250
|
+
{
|
|
251
|
+
"name": "dsScopeRequest",
|
|
252
|
+
"detail": "SettingsScopeRequest",
|
|
253
|
+
"bubbles": true,
|
|
254
|
+
"cancelable": true,
|
|
255
|
+
"composed": true,
|
|
256
|
+
"description": "Requests a popup; the owner supplies choices, open state, and selection."
|
|
257
|
+
}
|
|
258
|
+
],
|
|
259
|
+
"methods": [],
|
|
260
|
+
"slots": [],
|
|
261
|
+
"exports": {
|
|
262
|
+
"customElement": "ds-card-settings-scope",
|
|
263
|
+
"react": "DsCardSettingsScope",
|
|
264
|
+
"vue": "DsCardSettingsScope",
|
|
265
|
+
"angular": "DsCardSettingsScope"
|
|
266
|
+
},
|
|
267
|
+
"consumption": {
|
|
268
|
+
"install": "npm install @ds-mo/ui @ds-mo/tokens @ds-mo/icons",
|
|
269
|
+
"cssSetup": "import '@ds-mo/tokens';\nimport '@ds-mo/tokens/reset';\nimport '@ds-mo/tokens/globals';",
|
|
270
|
+
"customElements": {
|
|
271
|
+
"import": "import '@ds-mo/ui/dist/components/ds-card-settings-scope.js';",
|
|
272
|
+
"example": "<ds-card-settings-scope></ds-card-settings-scope>"
|
|
273
|
+
},
|
|
274
|
+
"react": {
|
|
275
|
+
"import": "import { DsCardSettingsScope } from '@ds-mo/ui/react';",
|
|
276
|
+
"example": "<DsCardSettingsScope />"
|
|
277
|
+
},
|
|
278
|
+
"vue": {
|
|
279
|
+
"import": "import { DsCardSettingsScope } from '@ds-mo/ui/vue';",
|
|
280
|
+
"example": "<DsCardSettingsScope />"
|
|
281
|
+
},
|
|
282
|
+
"angular": {
|
|
283
|
+
"import": "import { DsCardSettingsScope } from '@ds-mo/ui/angular/ds-card-settings-scope';",
|
|
284
|
+
"example": "<ds-card-settings-scope></ds-card-settings-scope>"
|
|
285
|
+
},
|
|
286
|
+
"peerDependencies": {
|
|
287
|
+
"required": [
|
|
288
|
+
"@ds-mo/tokens ^6.5.1",
|
|
289
|
+
"@ds-mo/icons ^7.0.0"
|
|
290
|
+
],
|
|
291
|
+
"frameworks": "Custom Elements; React 18/19 wrappers; Vue 3 wrappers; Angular 19-22 standalone adapters."
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
},
|
|
295
|
+
"dependencies": [
|
|
296
|
+
"@ds-mo/ui",
|
|
297
|
+
"@ds-mo/tokens"
|
|
298
|
+
],
|
|
299
|
+
"registryDependencies": [
|
|
300
|
+
"text"
|
|
301
|
+
],
|
|
302
|
+
"files": [
|
|
303
|
+
{
|
|
304
|
+
"path": "src/wc/components/CardSettingsScope/CardSettingsScope.css",
|
|
305
|
+
"content": "@import '../../utils/text-decoration.css';\n@import '../../utils/focus-ring.css';\n@import '../../styles/control-elevation.css';\n\n:host {\n display: block;\n min-width: 0;\n width: var(--dimension-card-width-md);\n max-width: 100%;\n}\n\n.card-settings-scope {\n display: flex;\n align-items: center;\n flex-wrap: wrap;\n gap: 0 var(--dimension-space-050);\n box-sizing: border-box;\n min-height: var(--dimension-size-600);\n padding: var(--dimension-space-100) var(--dimension-space-200);\n border-radius: var(--dimension-radius-125);\n background: var(--color-background-primary);\n color: var(--color-foreground-primary);\n}\n\n.card-settings-scope__action {\n display: inline-flex;\n align-items: center;\n min-height: var(--dimension-size-400);\n max-width: 100%;\n margin: 0;\n padding: 0;\n border: 0;\n border-radius: var(--dimension-radius-025);\n background: transparent;\n cursor: pointer;\n}\n\n.card-settings-scope__action ds-text {\n overflow-wrap: anywhere;\n text-align: start;\n}\n\n@media (forced-colors: active) {\n .card-settings-scope {\n outline: var(--dimension-stroke-width-012) solid var(--ds-forced-color-content);\n outline-offset: calc(-1 * var(--dimension-stroke-width-012));\n }\n}\n",
|
|
306
|
+
"type": "registry:ui"
|
|
307
|
+
},
|
|
308
|
+
{
|
|
309
|
+
"path": "src/wc/components/CardSettingsScope/CardSettingsScope.tsx",
|
|
310
|
+
"content": "import { Component, Event, EventEmitter, h, Host, Prop } from '@stencil/core';\n\nexport interface SettingsScopeRequest {\n scope: 'area' | 'profile';\n anchor: HTMLButtonElement;\n originalEvent: MouseEvent;\n}\n\n@Component({\n tag: 'ds-card-settings-scope',\n styleUrl: 'CardSettingsScope.css',\n scoped: true,\n})\nexport class CardSettingsScope {\n /** Current product area or the label for the combined settings view. */\n @Prop() areaLabel: string = 'All settings';\n /** Current organization or settings profile. */\n @Prop() profileLabel: string = 'Organization';\n /** Sentence prefix, supplied separately for localization. */\n @Prop() managingLabel: string = 'Managing';\n /** Sentence connector, supplied separately for localization. */\n @Prop() forLabel: string = 'for';\n /** Accessible name for this context region. */\n @Prop() scopeLabel: string = 'Settings scope';\n /** ID of the application-owned product-area menu. */\n @Prop() areaControls: string | undefined;\n /** ID of the application-owned profiles popup. */\n @Prop() profileControls: string | undefined;\n /** Whether the product-area menu is open. */\n @Prop() areaExpanded: boolean = false;\n /** Whether the profiles popup is open. */\n @Prop() profileExpanded: boolean = false;\n /** Empty informational profile popups use dialog semantics instead of a menu. */\n @Prop() profilePopup: 'menu' | 'dialog' = 'menu';\n\n /** Requests a popup; the owner supplies choices, open state, and selection. */\n @Event() dsScopeRequest!: EventEmitter<SettingsScopeRequest>;\n\n private request(scope: SettingsScopeRequest['scope'], event: MouseEvent) {\n this.dsScopeRequest.emit({\n scope,\n anchor: event.currentTarget as HTMLButtonElement,\n originalEvent: event,\n });\n }\n\n render() {\n return (\n <Host>\n <div\n class=\"card-settings-scope ds-control-elevation ds-control-elevation--sm\"\n role=\"region\"\n aria-label={this.scopeLabel}\n >\n <ds-text as=\"span\" variant=\"text-body-medium\" color=\"primary\">\n {this.managingLabel}\n </ds-text>\n <button\n type=\"button\"\n class=\"card-settings-scope__action ds-text-action ds-focus-ring\"\n aria-haspopup=\"menu\"\n aria-controls={this.areaControls}\n aria-expanded={String(this.areaExpanded)}\n onClick={event => this.request('area', event)}\n >\n <ds-text as=\"span\" variant=\"text-body-medium\" color=\"inherit\">\n {this.areaLabel}\n </ds-text>\n </button>\n <ds-text as=\"span\" variant=\"text-body-medium\" color=\"primary\">\n {this.forLabel}\n </ds-text>\n <button\n type=\"button\"\n class=\"card-settings-scope__action ds-text-action ds-focus-ring\"\n aria-haspopup={this.profilePopup}\n aria-controls={this.profileControls}\n aria-expanded={String(this.profileExpanded)}\n onClick={event => this.request('profile', event)}\n >\n <ds-text as=\"span\" variant=\"text-body-medium\" color=\"inherit\">\n {this.profileLabel}\n </ds-text>\n </button>\n </div>\n </Host>\n );\n }\n}\n",
|
|
311
|
+
"type": "registry:ui"
|
|
312
|
+
}
|
|
313
|
+
]
|
|
314
|
+
}
|