@ds-mo/ui 14.25.0 → 14.26.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 +1 -1
- package/dist/agent.json +339 -12
- package/dist/angular/ds-score.d.ts +12 -0
- package/dist/angular/ds-score.js +38 -0
- package/dist/angular/ds-textarea.d.ts +15 -0
- package/dist/angular/ds-textarea.js +43 -0
- package/dist/angular/index.d.ts +1 -1
- package/dist/angular/index.js +2 -0
- package/dist/angular/proxies.d.ts +2 -0
- package/dist/angular/proxies.js +2 -0
- package/dist/angular/text-value-accessor.d.ts +1 -1
- package/dist/angular/text-value-accessor.js +2 -2
- 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-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-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-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-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.d.ts +11 -0
- package/dist/components/ds-score.js +2 -0
- package/dist/components/ds-score.js.map +1 -0
- package/dist/components/ds-select.js +1 -1
- package/dist/components/ds-shell-app.js +1 -1
- package/dist/components/ds-shell-page.js +1 -1
- package/dist/components/ds-shell-tools.js +1 -1
- package/dist/components/ds-slider.js +1 -1
- package/dist/components/ds-swatch-picker.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-table.js.map +1 -1
- package/dist/components/ds-tag.js +1 -1
- package/dist/components/ds-text.js +1 -1
- package/dist/components/ds-textarea.d.ts +11 -0
- package/dist/components/ds-textarea.js +2 -0
- package/dist/components/ds-textarea.js.map +1 -0
- 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-DLaN9BPq.js → p-1604KY3B.js} +2 -2
- package/dist/components/{p-CYMKmJ2s.js → p-2wIPUcSL.js} +2 -2
- package/dist/components/{p-CEfxLsbX.js → p-537t6oRD.js} +2 -2
- package/dist/components/{p-kslioYhf.js → p-6_CNVbqa.js} +2 -2
- package/dist/components/{p-PXdvBMXB.js → p-B3Z5sQin.js} +2 -2
- package/dist/components/{p-CZjjDhUl.js → p-B3sRZBZk.js} +2 -2
- package/dist/components/{p-BZlhBJZL.js → p-B9esvbYk.js} +2 -2
- package/dist/components/{p-5Z4oYuiK.js → p-BEXkJ9lg.js} +2 -2
- package/dist/components/{p-DbLLH3hr.js → p-BIGpc__9.js} +2 -2
- package/dist/components/{p-DzPtYdXy.js → p-BMzn2Cmw.js} +2 -2
- package/dist/components/{p-BSRIF4m8.js → p-BRLDf-NK.js} +2 -2
- package/dist/components/{p-0X-4KGQf.js → p-BUh2GkPJ.js} +2 -2
- package/dist/components/{p-pUOA3iDG.js → p-BVpn_e-r.js} +2 -2
- package/dist/components/{p-CpeJMKJ5.js → p-BVz-r3g0.js} +2 -2
- package/dist/components/{p-CBymzuOO.js → p-BXDLR072.js} +2 -2
- package/dist/components/{p-DiS5BgLA.js → p-BZiGtBBk.js} +2 -2
- package/dist/components/{p-BcxidW9k.js → p-Bb9dA7sl.js} +2 -2
- package/dist/components/{p-BR1ayqMU.js → p-Bjt_8sLe.js} +2 -2
- package/dist/components/{p-BqbdABo3.js → p-BssZ4SbT.js} +2 -2
- package/dist/components/{p-bHnk8t5I.js → p-C68oSTb1.js} +2 -2
- package/dist/components/{p-C_FFU6W3.js → p-CGQnHNuW.js} +2 -2
- package/dist/components/{p-BqVXMEJm.js → p-CQjUOHiN.js} +2 -2
- package/dist/components/{p-w9fkkwL2.js → p-CaF5WCci.js} +2 -2
- package/dist/components/{p-Bjq1KP_Y.js → p-Cf5Ai4xx.js} +2 -2
- package/dist/components/{p-B0kSlcaw.js → p-Cr6pDY-e.js} +2 -2
- package/dist/components/{p-FxtgCvhA.js → p-Cy1oWIaV.js} +2 -2
- package/dist/components/{p-CTH3dSYg.js → p-DDqRCDXh.js} +2 -2
- package/dist/components/{p-x5u5Ueli.js → p-DIqAdmui.js} +2 -2
- package/dist/components/{p-Cd1JnnVK.js → p-DQQsS9Rx.js} +2 -2
- package/dist/components/{p-CZHIkVgj.js → p-DQsFmleZ.js} +2 -2
- package/dist/components/p-DRyrcR2k.js +2 -0
- package/dist/components/p-DRyrcR2k.js.map +1 -0
- package/dist/components/{p-CE2b5GPu.js → p-DVLghmNY.js} +2 -2
- package/dist/components/p-DW8ssbfI.js +2 -0
- package/dist/components/p-DW8ssbfI.js.map +1 -0
- package/dist/components/{p-BXv6RpoF.js → p-DZcIt_JJ.js} +2 -2
- package/dist/components/{p-CglHiyY2.js → p-DkxOEFHN.js} +2 -2
- package/dist/components/{p-DeK_6Uym.js → p-DlbhmXjH.js} +2 -2
- package/dist/components/{p-Bq8svcPs.js → p-GEi3hDJQ.js} +2 -2
- package/dist/components/p-LMmrjmI_.js +2 -0
- package/dist/components/p-LMmrjmI_.js.map +1 -0
- package/dist/components/{p-DI8DUozc.js → p-Q0dkeoJ6.js} +2 -2
- package/dist/components/{p-XaCYqck3.js → p-Q7AOgrg5.js} +2 -2
- package/dist/components/{p-B0OZx3JB.js → p-WFo1x6dN.js} +2 -2
- package/dist/components/{p-CEXchU5N.js → p-to8BxxgT.js} +2 -2
- package/dist/docs/components.json +1104 -3
- package/dist/mcp-data/registry/card-overview.json +8 -6
- package/dist/mcp-data/registry/field.json +5 -4
- package/dist/mcp-data/registry/panel-nav.json +2 -1
- package/dist/mcp-data/registry/registry.json +344 -11
- package/dist/mcp-data/registry/score.json +241 -0
- package/dist/mcp-data/registry/table.json +16 -13
- package/dist/mcp-data/registry/textarea.json +600 -0
- package/dist/mcp-data/registry/tooltip.json +5 -5
- package/dist/react/components.d.ts +2 -0
- package/dist/react/components.js +2 -0
- package/dist/react/ds-score.d.ts +9 -0
- package/dist/react/ds-score.js +12 -0
- package/dist/react/ds-textarea.d.ts +12 -0
- package/dist/react/ds-textarea.js +12 -0
- package/dist/styles/table.css +188 -69
- package/dist/types/components/CardOverview/card-overview-controller.d.ts +2 -2
- package/dist/types/components/CardOverview/card-overview-types.d.ts +2 -1
- package/dist/types/components/Score/Score.d.ts +21 -0
- package/dist/types/components/Score/index.d.ts +3 -0
- package/dist/types/components/Score/score-model.d.ts +14 -0
- package/dist/types/components/Score/score-types.d.ts +5 -0
- package/dist/types/components/Table/Table.d.ts +3 -0
- package/dist/types/components/Table/index.d.ts +1 -1
- package/dist/types/components/Table/table-cell-model.d.ts +12 -0
- package/dist/types/components/Table/table-model.d.ts +10 -1
- package/dist/types/components/Table/table-render-model.d.ts +3 -1
- package/dist/types/components/Table/table-types.d.ts +60 -1
- package/dist/types/components/Table/table-virtual-model.d.ts +6 -5
- package/dist/types/components/Textarea/Textarea.d.ts +66 -0
- package/dist/types/components/Textarea/index.d.ts +2 -0
- package/dist/types/components/Tooltip/Tooltip.d.ts +1 -1
- package/dist/types/components.d.ts +324 -2
- package/dist/vue/components.d.ts +2 -0
- package/dist/vue/components.js +2 -0
- package/dist/vue/ds-score.d.ts +3 -0
- package/dist/vue/ds-score.js +12 -0
- package/dist/vue/ds-textarea.d.ts +3 -0
- package/dist/vue/ds-textarea.js +36 -0
- package/package.json +1 -1
- package/dist/components/p-9X_p0bHr.js +0 -2
- package/dist/components/p-9X_p0bHr.js.map +0 -1
- package/dist/components/p-Bo6uW_8T.js +0 -2
- package/dist/components/p-Bo6uW_8T.js.map +0 -1
- /package/dist/components/{p-DLaN9BPq.js.map → p-1604KY3B.js.map} +0 -0
- /package/dist/components/{p-CYMKmJ2s.js.map → p-2wIPUcSL.js.map} +0 -0
- /package/dist/components/{p-CEfxLsbX.js.map → p-537t6oRD.js.map} +0 -0
- /package/dist/components/{p-kslioYhf.js.map → p-6_CNVbqa.js.map} +0 -0
- /package/dist/components/{p-PXdvBMXB.js.map → p-B3Z5sQin.js.map} +0 -0
- /package/dist/components/{p-CZjjDhUl.js.map → p-B3sRZBZk.js.map} +0 -0
- /package/dist/components/{p-BZlhBJZL.js.map → p-B9esvbYk.js.map} +0 -0
- /package/dist/components/{p-5Z4oYuiK.js.map → p-BEXkJ9lg.js.map} +0 -0
- /package/dist/components/{p-DbLLH3hr.js.map → p-BIGpc__9.js.map} +0 -0
- /package/dist/components/{p-DzPtYdXy.js.map → p-BMzn2Cmw.js.map} +0 -0
- /package/dist/components/{p-BSRIF4m8.js.map → p-BRLDf-NK.js.map} +0 -0
- /package/dist/components/{p-0X-4KGQf.js.map → p-BUh2GkPJ.js.map} +0 -0
- /package/dist/components/{p-pUOA3iDG.js.map → p-BVpn_e-r.js.map} +0 -0
- /package/dist/components/{p-CpeJMKJ5.js.map → p-BVz-r3g0.js.map} +0 -0
- /package/dist/components/{p-CBymzuOO.js.map → p-BXDLR072.js.map} +0 -0
- /package/dist/components/{p-DiS5BgLA.js.map → p-BZiGtBBk.js.map} +0 -0
- /package/dist/components/{p-BcxidW9k.js.map → p-Bb9dA7sl.js.map} +0 -0
- /package/dist/components/{p-BR1ayqMU.js.map → p-Bjt_8sLe.js.map} +0 -0
- /package/dist/components/{p-BqbdABo3.js.map → p-BssZ4SbT.js.map} +0 -0
- /package/dist/components/{p-bHnk8t5I.js.map → p-C68oSTb1.js.map} +0 -0
- /package/dist/components/{p-C_FFU6W3.js.map → p-CGQnHNuW.js.map} +0 -0
- /package/dist/components/{p-BqVXMEJm.js.map → p-CQjUOHiN.js.map} +0 -0
- /package/dist/components/{p-w9fkkwL2.js.map → p-CaF5WCci.js.map} +0 -0
- /package/dist/components/{p-Bjq1KP_Y.js.map → p-Cf5Ai4xx.js.map} +0 -0
- /package/dist/components/{p-B0kSlcaw.js.map → p-Cr6pDY-e.js.map} +0 -0
- /package/dist/components/{p-FxtgCvhA.js.map → p-Cy1oWIaV.js.map} +0 -0
- /package/dist/components/{p-CTH3dSYg.js.map → p-DDqRCDXh.js.map} +0 -0
- /package/dist/components/{p-x5u5Ueli.js.map → p-DIqAdmui.js.map} +0 -0
- /package/dist/components/{p-Cd1JnnVK.js.map → p-DQQsS9Rx.js.map} +0 -0
- /package/dist/components/{p-CZHIkVgj.js.map → p-DQsFmleZ.js.map} +0 -0
- /package/dist/components/{p-CE2b5GPu.js.map → p-DVLghmNY.js.map} +0 -0
- /package/dist/components/{p-BXv6RpoF.js.map → p-DZcIt_JJ.js.map} +0 -0
- /package/dist/components/{p-CglHiyY2.js.map → p-DkxOEFHN.js.map} +0 -0
- /package/dist/components/{p-DeK_6Uym.js.map → p-DlbhmXjH.js.map} +0 -0
- /package/dist/components/{p-Bq8svcPs.js.map → p-GEi3hDJQ.js.map} +0 -0
- /package/dist/components/{p-DI8DUozc.js.map → p-Q0dkeoJ6.js.map} +0 -0
- /package/dist/components/{p-XaCYqck3.js.map → p-Q7AOgrg5.js.map} +0 -0
- /package/dist/components/{p-B0OZx3JB.js.map → p-WFo1x6dN.js.map} +0 -0
- /package/dist/components/{p-CEXchU5N.js.map → p-to8BxxgT.js.map} +0 -0
|
@@ -0,0 +1,241 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://ui.shadcn.com/schema/registry-item.json",
|
|
3
|
+
"name": "score",
|
|
4
|
+
"title": "Score",
|
|
5
|
+
"description": "Safety-score figure in a semantic fill at the three control densities.",
|
|
6
|
+
"type": "registry:ui",
|
|
7
|
+
"meta": {
|
|
8
|
+
"library": "@ds-mo/ui",
|
|
9
|
+
"distribution": "npm",
|
|
10
|
+
"storybook": "https://zainadeel.github.io/compomo/?path=/story/score",
|
|
11
|
+
"source": "src/wc/components/Score/Score.tsx",
|
|
12
|
+
"intentStatus": "complete",
|
|
13
|
+
"intent": {
|
|
14
|
+
"audience": "general",
|
|
15
|
+
"status": "experimental",
|
|
16
|
+
"summary": "Safety-score figure in a semantic fill at the three control densities.",
|
|
17
|
+
"useWhen": [
|
|
18
|
+
"A driver or fleet safety score needs its fair, good, or excellent fill and the numeric figure in one place.",
|
|
19
|
+
"The same score treatment appears in Card Overview, an in-card summary, or a compact row such as a table group header."
|
|
20
|
+
],
|
|
21
|
+
"avoidWhen": [
|
|
22
|
+
"The figure is an ordinary metric without a safety-score color band; use Text.",
|
|
23
|
+
"The score is one cell in a comparable measures grid that also needs period chrome; use CardOverview, which composes Score.",
|
|
24
|
+
"The mark is a notification count or status label; use Badge or Tag.",
|
|
25
|
+
"A comparison trend should sit beside the fill; keep trend in the owner. Card Overview already renders score trend in its copy column."
|
|
26
|
+
],
|
|
27
|
+
"alternatives": [
|
|
28
|
+
{
|
|
29
|
+
"when": "The figure is one of several comparable measures under a shared period bar.",
|
|
30
|
+
"component": "component:ds-card-overview",
|
|
31
|
+
"reason": "CardOverview owns the summary grid, period chrome, score-cell alignment, and score trend; it renders Score at lg for the fill."
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
"when": "The quantity is ordinary readable content without a safety-score fill.",
|
|
35
|
+
"component": "component:ds-text",
|
|
36
|
+
"reason": "Text preserves the figure as body content."
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
"when": "The compact mark is unread count or notification presence.",
|
|
40
|
+
"component": "component:ds-badge",
|
|
41
|
+
"reason": "Badge owns supplemental notification chrome, not a scored figure."
|
|
42
|
+
}
|
|
43
|
+
],
|
|
44
|
+
"commonlyComposedWith": [
|
|
45
|
+
"component:ds-card-overview",
|
|
46
|
+
"component:ds-table",
|
|
47
|
+
"component:ds-text",
|
|
48
|
+
"component:ds-skeleton"
|
|
49
|
+
],
|
|
50
|
+
"accessibility": [
|
|
51
|
+
"Set label when the atomic score graphic needs a spoken prefix such as Safety score; the visible number remains in the fill.",
|
|
52
|
+
"Colour never carries score meaning alone; the numeric figure stays visible inside the fill.",
|
|
53
|
+
"Score is not interactive and is not a tab stop.",
|
|
54
|
+
"While loading, the host exposes a busy state and a skeleton whose type metrics match the resolved size."
|
|
55
|
+
],
|
|
56
|
+
"states": [
|
|
57
|
+
"lg is the Card Overview fill: 56 by 40, display-small emphasis. md is the 32px control treatment: 40 by 32, title-large emphasis. sm is the 24px compact fill: 28 by 24, title-small emphasis. The fill box crops the type canvas so line-height does not change the declared size.",
|
|
58
|
+
"A numeric value from 0–100 infers fair from 0–50, good from 51–80, and excellent from 81–100. Empty or whitespace-only values stay on the faint neutral surface. Supply level explicitly when another displayed value needs a semantic fill.",
|
|
59
|
+
"The fill uses the safety-score background and keeps its foreground at AA text contrast in light and dark themes.",
|
|
60
|
+
"isLoading replaces the figure with a skeleton at the matching type metrics. The skeleton uses the faint context when no score level is known and the bold context when a known or explicitly supplied level keeps its semantic fill."
|
|
61
|
+
],
|
|
62
|
+
"responsiveBehavior": [
|
|
63
|
+
"The owner selects sm, md, or lg to match the local layout. Score does not change size at breakpoints.",
|
|
64
|
+
"sm is the density for table group headers. md is the in-card summary fill. lg is the Card Overview fill."
|
|
65
|
+
],
|
|
66
|
+
"references": [
|
|
67
|
+
{
|
|
68
|
+
"label": "Storybook examples",
|
|
69
|
+
"path": "src/wc/components/Score/Score.stories.ts"
|
|
70
|
+
},
|
|
71
|
+
{
|
|
72
|
+
"label": "Safety-score level unit coverage",
|
|
73
|
+
"path": "tests/score-model.test.ts"
|
|
74
|
+
}
|
|
75
|
+
]
|
|
76
|
+
},
|
|
77
|
+
"api": {
|
|
78
|
+
"props": {
|
|
79
|
+
"isLoading": {
|
|
80
|
+
"type": "boolean",
|
|
81
|
+
"resolvedType": "boolean",
|
|
82
|
+
"attribute": "is-loading",
|
|
83
|
+
"default": "false",
|
|
84
|
+
"required": false,
|
|
85
|
+
"mutable": false,
|
|
86
|
+
"description": "Replace the figure with a skeleton while data resolves."
|
|
87
|
+
},
|
|
88
|
+
"label": {
|
|
89
|
+
"type": "string",
|
|
90
|
+
"resolvedType": "string",
|
|
91
|
+
"attribute": "label",
|
|
92
|
+
"default": "''",
|
|
93
|
+
"required": false,
|
|
94
|
+
"mutable": false,
|
|
95
|
+
"description": "Accessible name prefix, for example “Safety score”."
|
|
96
|
+
},
|
|
97
|
+
"level": {
|
|
98
|
+
"type": "SafetyScoreLevel | undefined",
|
|
99
|
+
"resolvedType": "\"excellent\" | \"fair\" | \"good\" | undefined",
|
|
100
|
+
"attribute": "level",
|
|
101
|
+
"required": false,
|
|
102
|
+
"mutable": false,
|
|
103
|
+
"description": "Safety-score color level. Numeric values from 0–100 infer fair (0–50),\ngood (51–80), or excellent (81–100) when this is omitted."
|
|
104
|
+
},
|
|
105
|
+
"size": {
|
|
106
|
+
"type": "ScoreSize",
|
|
107
|
+
"resolvedType": "\"lg\" | \"md\" | \"sm\"",
|
|
108
|
+
"attribute": "size",
|
|
109
|
+
"default": "'md'",
|
|
110
|
+
"required": false,
|
|
111
|
+
"mutable": false,
|
|
112
|
+
"description": "Visual density matching control height: `sm` 24px, `md` 32px, `lg` 40px.\n`lg` is the Card Overview recipe."
|
|
113
|
+
},
|
|
114
|
+
"value": {
|
|
115
|
+
"type": "string | number",
|
|
116
|
+
"resolvedType": "number | string",
|
|
117
|
+
"attribute": "value",
|
|
118
|
+
"default": "''",
|
|
119
|
+
"required": false,
|
|
120
|
+
"mutable": false,
|
|
121
|
+
"description": "Display-ready headline figure."
|
|
122
|
+
}
|
|
123
|
+
},
|
|
124
|
+
"events": [],
|
|
125
|
+
"methods": [],
|
|
126
|
+
"slots": []
|
|
127
|
+
},
|
|
128
|
+
"props": {
|
|
129
|
+
"isLoading": {
|
|
130
|
+
"type": "boolean",
|
|
131
|
+
"resolvedType": "boolean",
|
|
132
|
+
"attribute": "is-loading",
|
|
133
|
+
"default": "false",
|
|
134
|
+
"required": false,
|
|
135
|
+
"mutable": false,
|
|
136
|
+
"description": "Replace the figure with a skeleton while data resolves."
|
|
137
|
+
},
|
|
138
|
+
"label": {
|
|
139
|
+
"type": "string",
|
|
140
|
+
"resolvedType": "string",
|
|
141
|
+
"attribute": "label",
|
|
142
|
+
"default": "''",
|
|
143
|
+
"required": false,
|
|
144
|
+
"mutable": false,
|
|
145
|
+
"description": "Accessible name prefix, for example “Safety score”."
|
|
146
|
+
},
|
|
147
|
+
"level": {
|
|
148
|
+
"type": "SafetyScoreLevel | undefined",
|
|
149
|
+
"resolvedType": "\"excellent\" | \"fair\" | \"good\" | undefined",
|
|
150
|
+
"attribute": "level",
|
|
151
|
+
"required": false,
|
|
152
|
+
"mutable": false,
|
|
153
|
+
"description": "Safety-score color level. Numeric values from 0–100 infer fair (0–50),\ngood (51–80), or excellent (81–100) when this is omitted."
|
|
154
|
+
},
|
|
155
|
+
"size": {
|
|
156
|
+
"type": "ScoreSize",
|
|
157
|
+
"resolvedType": "\"lg\" | \"md\" | \"sm\"",
|
|
158
|
+
"attribute": "size",
|
|
159
|
+
"default": "'md'",
|
|
160
|
+
"required": false,
|
|
161
|
+
"mutable": false,
|
|
162
|
+
"description": "Visual density matching control height: `sm` 24px, `md` 32px, `lg` 40px.\n`lg` is the Card Overview recipe."
|
|
163
|
+
},
|
|
164
|
+
"value": {
|
|
165
|
+
"type": "string | number",
|
|
166
|
+
"resolvedType": "number | string",
|
|
167
|
+
"attribute": "value",
|
|
168
|
+
"default": "''",
|
|
169
|
+
"required": false,
|
|
170
|
+
"mutable": false,
|
|
171
|
+
"description": "Display-ready headline figure."
|
|
172
|
+
}
|
|
173
|
+
},
|
|
174
|
+
"events": [],
|
|
175
|
+
"methods": [],
|
|
176
|
+
"slots": [],
|
|
177
|
+
"exports": {
|
|
178
|
+
"customElement": "ds-score",
|
|
179
|
+
"react": "DsScore",
|
|
180
|
+
"vue": "DsScore",
|
|
181
|
+
"angular": "DsScore"
|
|
182
|
+
},
|
|
183
|
+
"consumption": {
|
|
184
|
+
"install": "npm install @ds-mo/ui @ds-mo/tokens @ds-mo/icons",
|
|
185
|
+
"cssSetup": "import '@ds-mo/tokens';\nimport '@ds-mo/tokens/reset';\nimport '@ds-mo/tokens/globals';",
|
|
186
|
+
"customElements": {
|
|
187
|
+
"import": "import '@ds-mo/ui/dist/components/ds-score.js';",
|
|
188
|
+
"example": "<ds-score></ds-score>"
|
|
189
|
+
},
|
|
190
|
+
"react": {
|
|
191
|
+
"import": "import { DsScore } from '@ds-mo/ui/react';",
|
|
192
|
+
"example": "<DsScore />"
|
|
193
|
+
},
|
|
194
|
+
"vue": {
|
|
195
|
+
"import": "import { DsScore } from '@ds-mo/ui/vue';",
|
|
196
|
+
"example": "<DsScore />"
|
|
197
|
+
},
|
|
198
|
+
"angular": {
|
|
199
|
+
"import": "import { DsScore } from '@ds-mo/ui/angular/ds-score';",
|
|
200
|
+
"example": "<ds-score></ds-score>"
|
|
201
|
+
},
|
|
202
|
+
"peerDependencies": {
|
|
203
|
+
"required": [
|
|
204
|
+
"@ds-mo/tokens ^6.5.1",
|
|
205
|
+
"@ds-mo/icons ^7.0.0"
|
|
206
|
+
],
|
|
207
|
+
"frameworks": "Custom Elements; React 18/19 wrappers; Vue 3 wrappers; Angular 19-22 standalone adapters."
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
},
|
|
211
|
+
"dependencies": [
|
|
212
|
+
"@ds-mo/ui",
|
|
213
|
+
"@ds-mo/tokens"
|
|
214
|
+
],
|
|
215
|
+
"registryDependencies": [
|
|
216
|
+
"skeleton",
|
|
217
|
+
"text"
|
|
218
|
+
],
|
|
219
|
+
"files": [
|
|
220
|
+
{
|
|
221
|
+
"path": "src/wc/components/Score/Score.css",
|
|
222
|
+
"content": "@import '../../utils/control-parts.css';\n@import '../../utils/forced-colors.css';\n\n:host {\n display: inline-flex;\n align-items: center;\n box-sizing: border-box;\n min-width: 0;\n --_score-badge-inline-size: var(--dimension-size-500);\n --_score-badge-block-size: var(--dimension-size-400);\n /* Matches the text skeleton’s 75% bar so the fill inset is even on all sides. */\n --_score-skeleton-inset: calc(var(--_score-badge-block-size) / 8);\n}\n\n:host(.score--sm) {\n --_score-badge-inline-size: calc(var(--dimension-size-400) - var(--dimension-space-050));\n --_score-badge-block-size: var(--dimension-size-300);\n}\n\n:host(.score--md) {\n --_score-badge-inline-size: var(--dimension-size-500);\n --_score-badge-block-size: var(--dimension-size-400);\n}\n\n:host(.score--lg) {\n --_score-badge-inline-size: calc(var(--dimension-size-600) + var(--dimension-space-100));\n --_score-badge-block-size: var(--dimension-size-500);\n}\n\n.score__badge {\n display: flex;\n flex: 0 0 auto;\n align-items: center;\n justify-content: center;\n box-sizing: border-box;\n inline-size: var(--_score-badge-inline-size);\n block-size: var(--_score-badge-block-size);\n overflow: hidden;\n border-radius: var(--dimension-radius-025);\n background: var(--color-background-faint-neutral);\n color: var(--color-foreground-bold-neutral);\n -webkit-user-select: none;\n user-select: none;\n}\n\n.score__badge--fair {\n background: var(--color-safety-score-background-fair);\n color: var(--color-safety-score-foreground-on-fair);\n}\n\n.score__badge--good {\n background: var(--color-safety-score-background-good);\n color: var(--color-foreground-primary);\n}\n\n.score__badge--excellent {\n background: var(--color-safety-score-background-excellent);\n color: var(--color-safety-score-foreground-on-excellent);\n}\n\n.score__value,\n.score__badge ds-skeleton {\n flex: 0 0 auto;\n}\n\n.score__badge--loading {\n padding-inline: var(--_score-skeleton-inset);\n}\n\n.score__badge--loading .score__value {\n flex: 1 1 auto;\n inline-size: 100%;\n block-size: 100%;\n max-inline-size: 100%;\n max-block-size: 100%;\n min-inline-size: 0;\n}\n\n@media (forced-colors: active) {\n .score__badge {\n border: var(--dimension-stroke-width-012) solid var(--ds-forced-color-content);\n background: var(--ds-forced-color-surface);\n color: var(--ds-forced-color-content);\n }\n}\n",
|
|
223
|
+
"type": "registry:ui"
|
|
224
|
+
},
|
|
225
|
+
{
|
|
226
|
+
"path": "src/wc/components/Score/Score.tsx",
|
|
227
|
+
"content": "import { Component, Prop, h, Host } from '@stencil/core';\nimport { SCORE_VALUE_VARIANT, resolveScoreLevel } from './score-model';\nimport type { SafetyScoreLevel, ScoreSize } from './score-types';\n\n@Component({\n tag: 'ds-score',\n styleUrl: 'Score.css',\n scoped: true,\n})\nexport class Score {\n /** Display-ready headline figure. */\n @Prop() value: string | number = '';\n /**\n * Visual density matching control height: `sm` 24px, `md` 32px, `lg` 40px.\n * `lg` is the Card Overview recipe.\n */\n @Prop() size: ScoreSize = 'md';\n /**\n * Safety-score color level. Numeric values from 0–100 infer fair (0–50),\n * good (51–80), or excellent (81–100) when this is omitted.\n */\n @Prop() level: SafetyScoreLevel | undefined;\n /** Replace the figure with a skeleton while data resolves. */\n @Prop() isLoading: boolean = false;\n /** Accessible name prefix, for example “Safety score”. */\n @Prop() label: string = '';\n\n render() {\n const size = this.size;\n const level = resolveScoreLevel(this.value, this.level);\n const valueVariant = SCORE_VALUE_VARIANT[size];\n const accessibleName = [this.label.trim(), this.isLoading ? '' : this.value]\n .filter(Boolean)\n .join(' ');\n\n return (\n <Host\n class={{\n score: true,\n [`score--${size}`]: true,\n 'score--loading': this.isLoading,\n }}\n role={accessibleName ? 'img' : undefined}\n aria-busy={this.isLoading ? 'true' : undefined}\n aria-label={accessibleName || undefined}\n >\n <span\n class={{\n score__badge: true,\n [`score__badge--${level}`]: Boolean(level),\n 'score__badge--loading': this.isLoading,\n }}\n >\n {this.isLoading ? (\n <ds-skeleton\n class=\"score__value\"\n variant=\"text\"\n textVariant={valueVariant}\n background={level ? 'bold' : 'faint'}\n />\n ) : (\n <ds-text\n as=\"span\"\n class=\"score__value ds-control-label-box\"\n variant={valueVariant}\n emphasis={true}\n color=\"inherit\"\n fontFeature=\"tabular-nums\"\n >\n {this.value}\n </ds-text>\n )}\n </span>\n </Host>\n );\n }\n}\n",
|
|
228
|
+
"type": "registry:ui"
|
|
229
|
+
},
|
|
230
|
+
{
|
|
231
|
+
"path": "src/wc/components/Score/score-model.ts",
|
|
232
|
+
"content": "import { SAFETY_SCORE_LEVELS, type SafetyScoreLevel, type ScoreSize } from './score-types';\n\nexport function isSafetyScoreLevel(value: unknown): value is SafetyScoreLevel {\n return typeof value === 'string' && (SAFETY_SCORE_LEVELS as readonly string[]).includes(value);\n}\n\n/**\n * Infer a safety-score color level from a 0–100 figure. Non-numeric or out-of-range\n * values return undefined so the owner can supply `level` explicitly.\n */\nexport function resolveSafetyScoreLevel(value: string | number): SafetyScoreLevel | undefined {\n if (typeof value === 'string' && value.trim() === '') return undefined;\n const numericValue = typeof value === 'number' ? value : Number(value);\n if (!Number.isFinite(numericValue) || numericValue < 0 || numericValue > 100) return undefined;\n if (numericValue <= 50) return 'fair';\n if (numericValue <= 80) return 'good';\n return 'excellent';\n}\n\nexport function resolveScoreLevel(\n value: string | number,\n level?: SafetyScoreLevel\n): SafetyScoreLevel | undefined {\n return isSafetyScoreLevel(level) ? level : resolveSafetyScoreLevel(value);\n}\n\nexport const SCORE_VALUE_VARIANT = {\n sm: 'text-title-small',\n md: 'text-title-large',\n lg: 'text-display-small',\n} as const satisfies Record<\n ScoreSize,\n 'text-title-small' | 'text-title-large' | 'text-display-small'\n>;\n",
|
|
233
|
+
"type": "registry:ui"
|
|
234
|
+
},
|
|
235
|
+
{
|
|
236
|
+
"path": "src/wc/components/Score/score-types.ts",
|
|
237
|
+
"content": "export type SafetyScoreLevel = 'fair' | 'good' | 'excellent';\nexport type ScoreSize = 'sm' | 'md' | 'lg';\n\nexport const SCORE_SIZES = ['sm', 'md', 'lg'] as const;\nexport const SAFETY_SCORE_LEVELS = ['fair', 'good', 'excellent'] as const;\n",
|
|
238
|
+
"type": "registry:ui"
|
|
239
|
+
}
|
|
240
|
+
]
|
|
241
|
+
}
|