@ds-mo/ui 2.12.0 → 2.13.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/.build-stamp +1 -1
- package/dist/components/ds-app-shell.js +1 -1
- package/dist/components/ds-banner.js +1 -1
- package/dist/components/ds-bar-nav.js +1 -1
- package/dist/components/ds-bar-nav.js.map +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.d.ts → ds-card-data-viz-donut.d.ts} +4 -4
- package/dist/components/ds-card-data-viz-donut.js +2 -0
- package/dist/components/ds-card-data-viz-donut.js.map +1 -0
- package/dist/components/ds-card-setting.js +1 -1
- package/dist/components/ds-card-setting.js.map +1 -1
- package/dist/components/{ds-header.d.ts → ds-card.d.ts} +4 -4
- package/dist/components/ds-card.js +2 -0
- package/dist/components/ds-card.js.map +1 -0
- package/dist/components/ds-chart-bar.js +1 -1
- package/dist/components/ds-chart-bar.js.map +1 -1
- package/dist/components/ds-chart-donut.js +1 -1
- package/dist/components/ds-chart-donut.js.map +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-divider.js +1 -1
- package/dist/components/ds-empty-state.js +1 -1
- package/dist/components/ds-empty-state.js.map +1 -1
- package/dist/components/ds-field.js +1 -1
- package/dist/components/ds-field.js.map +1 -1
- package/dist/components/ds-icon.js +1 -1
- package/dist/components/ds-input.js +1 -1
- package/dist/components/ds-input.js.map +1 -1
- package/dist/components/ds-loader.js +1 -1
- package/dist/components/ds-menu.js +1 -1
- package/dist/components/ds-modal.js +1 -1
- package/dist/components/ds-panel-nav.js +1 -1
- package/dist/components/ds-panel-tools.js +1 -1
- package/dist/components/ds-panel-tools.js.map +1 -1
- package/dist/components/ds-radio-group.js +1 -1
- package/dist/components/ds-select.js +1 -1
- package/dist/components/ds-select.js.map +1 -1
- package/dist/components/ds-shell-gradient-picker.js +1 -1
- package/dist/components/ds-shell-gradient-swatch.js +1 -1
- package/dist/components/ds-slider.js +1 -1
- package/dist/components/ds-tab-group-nav.js +1 -1
- package/dist/components/ds-tab-group.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-toggle.js +1 -1
- package/dist/components/ds-tooltip-data-viz.js +1 -1
- package/dist/components/ds-tooltip.js +1 -1
- package/dist/components/{p-BPK76IsW.js → p-1m8r0wFg.js} +2 -2
- package/dist/components/{p-BZIOTcnM.js → p-3FLHei19.js} +2 -2
- package/dist/components/p-B2_D4IDN.js +2 -0
- package/dist/components/p-B2_D4IDN.js.map +1 -0
- package/dist/components/p-B5NcWtpp.js +2 -0
- package/dist/components/p-B5NcWtpp.js.map +1 -0
- package/dist/components/{p-CyFVn2Sc.js → p-B82KZX9D.js} +2 -2
- package/dist/components/p-B_g8X0eh.js +2 -0
- package/dist/components/p-B_g8X0eh.js.map +1 -0
- package/dist/components/{p-C3ORQUOp.js → p-Be3PHv34.js} +2 -2
- package/dist/components/{p-DkcH8mRl.js → p-CQmf2CeW.js} +2 -2
- package/dist/components/{p-DRqxVEye.js → p-CtwNUCnp.js} +2 -2
- package/dist/components/p-CuRjYmBk.js +2 -0
- package/dist/components/p-CuRjYmBk.js.map +1 -0
- package/dist/components/{p-DKdI8T8v.js → p-CwARVsZQ.js} +2 -2
- package/dist/components/{p-DKdI8T8v.js.map → p-CwARVsZQ.js.map} +1 -1
- package/dist/components/{p-UbKTMQjv.js → p-DohXlNCJ.js} +2 -2
- package/dist/components/p-DuFm-ieS.js +2 -0
- package/dist/components/p-DuFm-ieS.js.map +1 -0
- package/dist/lib/nav/index.js.map +2 -2
- package/dist/lib/utils/control-width.d.ts +4 -0
- package/dist/lib/utils/index.d.ts +2 -0
- package/dist/lib/utils/index.js +14 -1
- package/dist/lib/utils/index.js.map +3 -3
- package/dist/lib/utils/token-defaults.d.ts +4 -0
- package/dist/types/components/ButtonFilled/ButtonFilled.d.ts +4 -0
- package/dist/types/components/ButtonFilled/index.d.ts +1 -1
- package/dist/types/components/ButtonUnfilled/ButtonUnfilled.d.ts +7 -3
- package/dist/types/components/ButtonUnfilled/index.d.ts +1 -1
- package/dist/types/components/Card/Card.d.ts +20 -0
- package/dist/types/components/Card/index.d.ts +2 -0
- package/dist/types/components/CardDataVizDonut/CardDataVizDonut.d.ts +26 -0
- package/dist/types/components/CardDataVizDonut/index.d.ts +2 -0
- package/dist/types/components/CardSetting/CardSetting.d.ts +7 -2
- package/dist/types/components/ChartDonut/ChartDonut.d.ts +24 -1
- package/dist/types/components/Select/Select.d.ts +32 -0
- package/dist/types/components/Select/index.d.ts +2 -0
- package/dist/types/components.d.ts +207 -110
- package/dist/types/utils/control-width.d.ts +5 -0
- package/dist/types/utils/index.d.ts +2 -0
- package/dist/types/utils/token-defaults.d.ts +4 -0
- package/package.json +2 -2
- package/src/angular/index.ts +2 -3
- package/src/angular/proxies.ts +40 -56
- package/src/react/components.ts +2 -3
- package/src/react/ds-card-data-viz-donut.ts +27 -0
- package/src/react/{ds-header.ts → ds-card.ts} +7 -7
- package/src/wc/components/ButtonFilled/ButtonFilled.tsx +7 -0
- package/src/wc/components/ButtonFilled/index.ts +1 -0
- package/src/wc/components/ButtonUnfilled/ButtonUnfilled.tsx +10 -3
- package/src/wc/components/ButtonUnfilled/index.ts +1 -0
- package/src/wc/components/Card/Card.tsx +79 -0
- package/src/wc/components/Card/index.ts +1 -0
- package/src/wc/components/{CardDataViz/CardDataViz.tsx → CardDataVizDonut/CardDataVizDonut.tsx} +47 -40
- package/src/wc/components/CardDataVizDonut/index.ts +1 -0
- package/src/wc/components/CardSetting/CardSetting.tsx +22 -35
- package/src/wc/components/ChartDonut/ChartDonut.tsx +112 -11
- package/src/wc/components/Select/Select.tsx +141 -60
- package/src/wc/components/Select/index.ts +1 -0
- package/src/wc/components.d.ts +207 -113
- package/src/wc/utils/control-width.css +28 -0
- package/src/wc/utils/control-width.ts +10 -0
- package/src/wc/utils/index.ts +2 -0
- package/src/wc/utils/token-defaults.ts +4 -0
- package/dist/components/ds-card-data-viz.js +0 -2
- package/dist/components/ds-card-data-viz.js.map +0 -1
- package/dist/components/ds-header.js +0 -2
- package/dist/components/ds-header.js.map +0 -1
- package/dist/components/ds-scrollbar.d.ts +0 -11
- package/dist/components/ds-scrollbar.js +0 -2
- package/dist/components/ds-scrollbar.js.map +0 -1
- package/dist/components/p-B9dHCgY-.js +0 -2
- package/dist/components/p-B9dHCgY-.js.map +0 -1
- package/dist/components/p-BTC9Njj6.js +0 -2
- package/dist/components/p-BTC9Njj6.js.map +0 -1
- package/dist/components/p-DusYu-if.js +0 -2
- package/dist/components/p-DusYu-if.js.map +0 -1
- package/dist/types/components/CardDataViz/CardDataViz.d.ts +0 -22
- package/dist/types/components/CardDataViz/index.d.ts +0 -2
- package/dist/types/components/Header/Header.d.ts +0 -7
- package/dist/types/components/Scrollbar/Scrollbar.d.ts +0 -27
- package/src/react/ds-card-data-viz.ts +0 -26
- package/src/react/ds-scrollbar.ts +0 -26
- package/src/wc/components/CardDataViz/index.ts +0 -1
- package/src/wc/components/Header/Header.tsx +0 -33
- package/src/wc/components/Scrollbar/Scrollbar.tsx +0 -189
- /package/dist/components/{p-BPK76IsW.js.map → p-1m8r0wFg.js.map} +0 -0
- /package/dist/components/{p-BZIOTcnM.js.map → p-3FLHei19.js.map} +0 -0
- /package/dist/components/{p-CyFVn2Sc.js.map → p-B82KZX9D.js.map} +0 -0
- /package/dist/components/{p-C3ORQUOp.js.map → p-Be3PHv34.js.map} +0 -0
- /package/dist/components/{p-DkcH8mRl.js.map → p-CQmf2CeW.js.map} +0 -0
- /package/dist/components/{p-DRqxVEye.js.map → p-CtwNUCnp.js.map} +0 -0
- /package/dist/components/{p-UbKTMQjv.js.map → p-DohXlNCJ.js.map} +0 -0
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/** Shared width fit for interactive controls (buttons, select, …). */
|
|
2
|
+
export type ControlWidth = 'hug' | 'fill';
|
|
3
|
+
/** Host / control class map for `width="hug" | "fill"`. */
|
|
4
|
+
export declare function controlWidthClass(width: ControlWidth): Record<string, boolean>;
|
|
5
|
+
//# sourceMappingURL=control-width.d.ts.map
|
|
@@ -7,4 +7,6 @@ export { SCROLL_EDGE_FADE_DEFAULT_SIZE, SCROLL_EDGE_FADE_SIZE_VAR, isScrollAtEdg
|
|
|
7
7
|
export type { ScrollEdgeFadeEdge, ScrollEdgeFadeOptions, ScrollEdgeFadeSize, ScrollEdgeFadeSizeToken, } from './scroll-edge-fade';
|
|
8
8
|
export { TOKEN_DEFAULTS, TOKEN_CSS_LENGTHS } from './token-defaults';
|
|
9
9
|
export type { TokenDefaultKey } from './token-defaults';
|
|
10
|
+
export { controlWidthClass } from './control-width';
|
|
11
|
+
export type { ControlWidth } from './control-width';
|
|
10
12
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -33,6 +33,10 @@ export declare const TOKEN_DEFAULTS: {
|
|
|
33
33
|
readonly menuFallbackHeight: "calc(var(--dimension-size-base) * 20)";
|
|
34
34
|
/** Unmeasured tooltip width fallback: size-800 + size-200 (80px). */
|
|
35
35
|
readonly tooltipFallbackWidth: "calc(var(--dimension-size-800) + var(--dimension-size-200))";
|
|
36
|
+
/** Fill-mode donut diameter floor: 16× size-base (128px). */
|
|
37
|
+
readonly donutFillMin: "calc(var(--dimension-size-base) * 16)";
|
|
38
|
+
/** Fill-mode donut diameter ceiling: 24× size-base (192px). */
|
|
39
|
+
readonly donutFillMax: "calc(var(--dimension-size-base) * 24)";
|
|
36
40
|
};
|
|
37
41
|
export type TokenDefaultKey = keyof typeof TOKEN_DEFAULTS;
|
|
38
42
|
/** Valid CSS length strings for overlay offset props — bind on `sideOffset` / `alignOffset` in hosts. */
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ds-mo/ui",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.13.0",
|
|
4
4
|
"description": "CompoMo — composable web components styled with TokoMo design tokens",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"web-components",
|
|
@@ -67,7 +67,7 @@
|
|
|
67
67
|
"prebuild": "node scripts/generate-icon-catalog.mjs",
|
|
68
68
|
"pretypecheck": "node scripts/generate-icon-catalog.mjs",
|
|
69
69
|
"pretest": "node scripts/generate-icon-catalog.mjs",
|
|
70
|
-
"build": "stencil build && node scripts/patch-index-types.mjs && node scripts/
|
|
70
|
+
"build": "stencil build && node scripts/patch-index-types.mjs && node scripts/verify-icons-externalized.mjs && node scripts/write-build-stamp.mjs && node scripts/build-lib-exports.mjs",
|
|
71
71
|
"verify:pack": "node scripts/verify-npm-pack.mjs && node scripts/verify-nav-import.mjs",
|
|
72
72
|
"test": "node --import tsx/esm --test tests/panel-nav-utils.test.ts tests/panel-tools.test.ts tests/shell-shortcuts.test.ts tests/shell-gradient-presets.test.ts tests/shell-view-transition.test.ts tests/shell-gradient.test.ts tests/shell-chrome-metrics.test.ts tests/shell-chrome-layer.test.ts tests/chrome-transition.test.ts tests/bar-nav-overflow-hysteresis.test.ts tests/badge-gradient-ring.test.ts tests/scroll-edge-fade.test.ts tests/resolve-css-length-px.test.ts tests/resolve-css-time-ms.test.ts tests/overlay-positioning.test.ts tests/menu-position.test.ts tests/menu-placement.test.ts tests/bar-nav-utils.test.ts tests/bar-nav-tabs-menu-utils.test.ts tests/bar-nav-dom-utils.test.ts tests/icon-catalog.test.ts tests/icon-cache.test.ts tests/icon-svg.test.ts",
|
|
73
73
|
"test:e2e": "npm run build && playwright test",
|
package/src/angular/index.ts
CHANGED
|
@@ -8,7 +8,8 @@ export const DIRECTIVES = [
|
|
|
8
8
|
d.DsBarNav,
|
|
9
9
|
d.DsButtonFilled,
|
|
10
10
|
d.DsButtonUnfilled,
|
|
11
|
-
d.
|
|
11
|
+
d.DsCard,
|
|
12
|
+
d.DsCardDataVizDonut,
|
|
12
13
|
d.DsCardSetting,
|
|
13
14
|
d.DsChartBar,
|
|
14
15
|
d.DsChartDonut,
|
|
@@ -19,7 +20,6 @@ export const DIRECTIVES = [
|
|
|
19
20
|
d.DsDivider,
|
|
20
21
|
d.DsEmptyState,
|
|
21
22
|
d.DsField,
|
|
22
|
-
d.DsHeader,
|
|
23
23
|
d.DsIcon,
|
|
24
24
|
d.DsInput,
|
|
25
25
|
d.DsLoader,
|
|
@@ -29,7 +29,6 @@ export const DIRECTIVES = [
|
|
|
29
29
|
d.DsPanelNav,
|
|
30
30
|
d.DsPanelTools,
|
|
31
31
|
d.DsRadioGroup,
|
|
32
|
-
d.DsScrollbar,
|
|
33
32
|
d.DsSelect,
|
|
34
33
|
d.DsShellGradientPicker,
|
|
35
34
|
d.DsShellGradientSwatch,
|
package/src/angular/proxies.ts
CHANGED
|
@@ -112,7 +112,7 @@ export declare interface DsBarNav extends Components.DsBarNav {
|
|
|
112
112
|
|
|
113
113
|
|
|
114
114
|
@ProxyCmp({
|
|
115
|
-
inputs: ['ariaLabel', 'contrast', 'icon', 'intent', 'isInactive', 'label', 'size', 'type', 'variant'],
|
|
115
|
+
inputs: ['ariaLabel', 'contrast', 'icon', 'intent', 'isInactive', 'label', 'size', 'type', 'variant', 'width'],
|
|
116
116
|
methods: ['setFocus']
|
|
117
117
|
})
|
|
118
118
|
@Component({
|
|
@@ -120,7 +120,7 @@ export declare interface DsBarNav extends Components.DsBarNav {
|
|
|
120
120
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
121
121
|
template: '<ng-content></ng-content>',
|
|
122
122
|
// eslint-disable-next-line @angular-eslint/no-inputs-metadata-property
|
|
123
|
-
inputs: ['ariaLabel', 'contrast', 'icon', 'intent', 'isInactive', 'label', 'size', 'type', 'variant'],
|
|
123
|
+
inputs: ['ariaLabel', 'contrast', 'icon', 'intent', 'isInactive', 'label', 'size', 'type', 'variant', 'width'],
|
|
124
124
|
outputs: ['dsClick'],
|
|
125
125
|
standalone: false
|
|
126
126
|
})
|
|
@@ -141,7 +141,7 @@ export declare interface DsButtonFilled extends Components.DsButtonFilled {
|
|
|
141
141
|
|
|
142
142
|
|
|
143
143
|
@ProxyCmp({
|
|
144
|
-
inputs: ['activeFill', 'ariaLabel', 'background', 'backgroundContrast', 'controls', 'dot', 'expanded', 'focusTabIndex', 'hasBorder', 'haspopup', 'icon', 'isActive', 'isInactive', 'label', 'pressed', 'size', 'type', 'variant'],
|
|
144
|
+
inputs: ['activeFill', 'ariaLabel', 'background', 'backgroundContrast', 'controls', 'dot', 'expanded', 'focusTabIndex', 'hasBorder', 'haspopup', 'icon', 'isActive', 'isInactive', 'label', 'pressed', 'size', 'type', 'variant', 'width'],
|
|
145
145
|
methods: ['setFocus']
|
|
146
146
|
})
|
|
147
147
|
@Component({
|
|
@@ -149,7 +149,7 @@ export declare interface DsButtonFilled extends Components.DsButtonFilled {
|
|
|
149
149
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
150
150
|
template: '<ng-content></ng-content>',
|
|
151
151
|
// eslint-disable-next-line @angular-eslint/no-inputs-metadata-property
|
|
152
|
-
inputs: ['activeFill', 'ariaLabel', 'background', 'backgroundContrast', 'controls', 'dot', 'expanded', 'focusTabIndex', 'hasBorder', 'haspopup', 'icon', 'isActive', 'isInactive', 'label', 'pressed', 'size', 'type', 'variant'],
|
|
152
|
+
inputs: ['activeFill', 'ariaLabel', 'background', 'backgroundContrast', 'controls', 'dot', 'expanded', 'focusTabIndex', 'hasBorder', 'haspopup', 'icon', 'isActive', 'isInactive', 'label', 'pressed', 'size', 'type', 'variant', 'width'],
|
|
153
153
|
outputs: ['dsClick', 'dsChange'],
|
|
154
154
|
standalone: false
|
|
155
155
|
})
|
|
@@ -172,19 +172,44 @@ export declare interface DsButtonUnfilled extends Components.DsButtonUnfilled {
|
|
|
172
172
|
}
|
|
173
173
|
|
|
174
174
|
|
|
175
|
+
@ProxyCmp({
|
|
176
|
+
inputs: ['appearance', 'cardWidth', 'heading']
|
|
177
|
+
})
|
|
178
|
+
@Component({
|
|
179
|
+
selector: 'ds-card',
|
|
180
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
181
|
+
template: '<ng-content></ng-content>',
|
|
182
|
+
// eslint-disable-next-line @angular-eslint/no-inputs-metadata-property
|
|
183
|
+
inputs: ['appearance', 'cardWidth', { name: 'heading', required: true }],
|
|
184
|
+
standalone: false
|
|
185
|
+
})
|
|
186
|
+
export class DsCard {
|
|
187
|
+
protected el: HTMLDsCardElement;
|
|
188
|
+
constructor(c: ChangeDetectorRef, r: ElementRef, protected z: NgZone) {
|
|
189
|
+
c.detach();
|
|
190
|
+
this.el = r.nativeElement;
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
|
|
195
|
+
export declare interface DsCard extends Components.DsCard {}
|
|
196
|
+
|
|
197
|
+
|
|
175
198
|
@ProxyCmp({
|
|
176
199
|
inputs: ['cardWidth', 'heading']
|
|
177
200
|
})
|
|
178
201
|
@Component({
|
|
179
|
-
selector: 'ds-card-data-viz',
|
|
202
|
+
selector: 'ds-card-data-viz-donut',
|
|
180
203
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
181
204
|
template: '<ng-content></ng-content>',
|
|
182
205
|
// eslint-disable-next-line @angular-eslint/no-inputs-metadata-property
|
|
183
206
|
inputs: ['cardWidth', { name: 'heading', required: true }],
|
|
207
|
+
outputs: ['dsFilterClick'],
|
|
184
208
|
standalone: false
|
|
185
209
|
})
|
|
186
|
-
export class
|
|
187
|
-
protected el:
|
|
210
|
+
export class DsCardDataVizDonut {
|
|
211
|
+
protected el: HTMLDsCardDataVizDonutElement;
|
|
212
|
+
@Output() dsFilterClick = new EventEmitter<CustomEvent<void>>();
|
|
188
213
|
constructor(c: ChangeDetectorRef, r: ElementRef, protected z: NgZone) {
|
|
189
214
|
c.detach();
|
|
190
215
|
this.el = r.nativeElement;
|
|
@@ -192,7 +217,12 @@ export class DsCardDataViz {
|
|
|
192
217
|
}
|
|
193
218
|
|
|
194
219
|
|
|
195
|
-
export declare interface
|
|
220
|
+
export declare interface DsCardDataVizDonut extends Components.DsCardDataVizDonut {
|
|
221
|
+
/**
|
|
222
|
+
* Emits when the header filter control is activated.
|
|
223
|
+
*/
|
|
224
|
+
dsFilterClick: EventEmitter<CustomEvent<void>>;
|
|
225
|
+
}
|
|
196
226
|
|
|
197
227
|
|
|
198
228
|
@ProxyCmp({
|
|
@@ -467,29 +497,6 @@ export class DsField {
|
|
|
467
497
|
export declare interface DsField extends Components.DsField {}
|
|
468
498
|
|
|
469
499
|
|
|
470
|
-
@ProxyCmp({
|
|
471
|
-
inputs: ['background', 'heading']
|
|
472
|
-
})
|
|
473
|
-
@Component({
|
|
474
|
-
selector: 'ds-header',
|
|
475
|
-
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
476
|
-
template: '<ng-content></ng-content>',
|
|
477
|
-
// eslint-disable-next-line @angular-eslint/no-inputs-metadata-property
|
|
478
|
-
inputs: ['background', 'heading'],
|
|
479
|
-
standalone: false
|
|
480
|
-
})
|
|
481
|
-
export class DsHeader {
|
|
482
|
-
protected el: HTMLDsHeaderElement;
|
|
483
|
-
constructor(c: ChangeDetectorRef, r: ElementRef, protected z: NgZone) {
|
|
484
|
-
c.detach();
|
|
485
|
-
this.el = r.nativeElement;
|
|
486
|
-
}
|
|
487
|
-
}
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
export declare interface DsHeader extends Components.DsHeader {}
|
|
491
|
-
|
|
492
|
-
|
|
493
500
|
@ProxyCmp({
|
|
494
501
|
inputs: ['color', 'flag', 'label', 'name', 'size']
|
|
495
502
|
})
|
|
@@ -791,37 +798,14 @@ export declare interface DsRadioGroup extends Components.DsRadioGroup {
|
|
|
791
798
|
|
|
792
799
|
|
|
793
800
|
@ProxyCmp({
|
|
794
|
-
inputs: ['
|
|
795
|
-
})
|
|
796
|
-
@Component({
|
|
797
|
-
selector: 'ds-scrollbar',
|
|
798
|
-
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
799
|
-
template: '<ng-content></ng-content>',
|
|
800
|
-
// eslint-disable-next-line @angular-eslint/no-inputs-metadata-property
|
|
801
|
-
inputs: ['showTrackOnHover', 'variant'],
|
|
802
|
-
standalone: false
|
|
803
|
-
})
|
|
804
|
-
export class DsScrollbar {
|
|
805
|
-
protected el: HTMLDsScrollbarElement;
|
|
806
|
-
constructor(c: ChangeDetectorRef, r: ElementRef, protected z: NgZone) {
|
|
807
|
-
c.detach();
|
|
808
|
-
this.el = r.nativeElement;
|
|
809
|
-
}
|
|
810
|
-
}
|
|
811
|
-
|
|
812
|
-
|
|
813
|
-
export declare interface DsScrollbar extends Components.DsScrollbar {}
|
|
814
|
-
|
|
815
|
-
|
|
816
|
-
@ProxyCmp({
|
|
817
|
-
inputs: ['ariaLabel', 'ariaLabelledby', 'isInactive', 'options', 'placeholder', 'value']
|
|
801
|
+
inputs: ['activeFill', 'ariaLabel', 'ariaLabelledby', 'hasBorder', 'isInactive', 'options', 'placeholder', 'size', 'value', 'width']
|
|
818
802
|
})
|
|
819
803
|
@Component({
|
|
820
804
|
selector: 'ds-select',
|
|
821
805
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
822
806
|
template: '<ng-content></ng-content>',
|
|
823
807
|
// eslint-disable-next-line @angular-eslint/no-inputs-metadata-property
|
|
824
|
-
inputs: ['ariaLabel', 'ariaLabelledby', 'isInactive', 'options', 'placeholder', 'value'],
|
|
808
|
+
inputs: ['activeFill', 'ariaLabel', 'ariaLabelledby', 'hasBorder', 'isInactive', 'options', 'placeholder', 'size', 'value', 'width'],
|
|
825
809
|
outputs: ['dsChange'],
|
|
826
810
|
standalone: false
|
|
827
811
|
})
|
package/src/react/components.ts
CHANGED
|
@@ -10,8 +10,9 @@ export { DsBanner } from "./ds-banner.js";
|
|
|
10
10
|
export { DsBarNav } from "./ds-bar-nav.js";
|
|
11
11
|
export { DsButtonFilled } from "./ds-button-filled.js";
|
|
12
12
|
export { DsButtonUnfilled } from "./ds-button-unfilled.js";
|
|
13
|
-
export {
|
|
13
|
+
export { DsCardDataVizDonut } from "./ds-card-data-viz-donut.js";
|
|
14
14
|
export { DsCardSetting } from "./ds-card-setting.js";
|
|
15
|
+
export { DsCard } from "./ds-card.js";
|
|
15
16
|
export { DsChartBar } from "./ds-chart-bar.js";
|
|
16
17
|
export { DsChartDonut } from "./ds-chart-donut.js";
|
|
17
18
|
export { DsChartLegend } from "./ds-chart-legend.js";
|
|
@@ -21,7 +22,6 @@ export { DsChip } from "./ds-chip.js";
|
|
|
21
22
|
export { DsDivider } from "./ds-divider.js";
|
|
22
23
|
export { DsEmptyState } from "./ds-empty-state.js";
|
|
23
24
|
export { DsField } from "./ds-field.js";
|
|
24
|
-
export { DsHeader } from "./ds-header.js";
|
|
25
25
|
export { DsIcon } from "./ds-icon.js";
|
|
26
26
|
export { DsInput } from "./ds-input.js";
|
|
27
27
|
export { DsLoader } from "./ds-loader.js";
|
|
@@ -31,7 +31,6 @@ export { DsPagination } from "./ds-pagination.js";
|
|
|
31
31
|
export { DsPanelNav } from "./ds-panel-nav.js";
|
|
32
32
|
export { DsPanelTools } from "./ds-panel-tools.js";
|
|
33
33
|
export { DsRadioGroup } from "./ds-radio-group.js";
|
|
34
|
-
export { DsScrollbar } from "./ds-scrollbar.js";
|
|
35
34
|
export { DsSelect } from "./ds-select.js";
|
|
36
35
|
export { DsShellGradientPicker } from "./ds-shell-gradient-picker.js";
|
|
37
36
|
export { DsShellGradientSwatch } from "./ds-shell-gradient-swatch.js";
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* This file was automatically generated by the Stencil React Output Target.
|
|
5
|
+
* Changes to this file may cause incorrect behavior and will be lost if the code is regenerated.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
/* eslint-disable */
|
|
9
|
+
|
|
10
|
+
import type { EventName, StencilReactComponent } from '@stencil/react-output-target/runtime';
|
|
11
|
+
import { createComponent } from '@stencil/react-output-target/runtime';
|
|
12
|
+
import React from 'react';
|
|
13
|
+
|
|
14
|
+
import { type DsCardDataVizDonutCustomEvent } from "@ds-mo/ui";
|
|
15
|
+
import type { Components } from "@ds-mo/ui/dist/components";
|
|
16
|
+
import { DsCardDataVizDonut as DsCardDataVizDonutElement, defineCustomElement as defineDsCardDataVizDonut } from "@ds-mo/ui/dist/components/ds-card-data-viz-donut.js";
|
|
17
|
+
|
|
18
|
+
export type DsCardDataVizDonutEvents = { onDsFilterClick: EventName<DsCardDataVizDonutCustomEvent<void>> };
|
|
19
|
+
|
|
20
|
+
export const DsCardDataVizDonut: StencilReactComponent<DsCardDataVizDonutElement, DsCardDataVizDonutEvents, Components.DsCardDataVizDonut> = /*@__PURE__*/ createComponent<DsCardDataVizDonutElement, DsCardDataVizDonutEvents, Components.DsCardDataVizDonut>({
|
|
21
|
+
tagName: 'ds-card-data-viz-donut',
|
|
22
|
+
elementClass: DsCardDataVizDonutElement,
|
|
23
|
+
// @ts-ignore - ignore potential React type mismatches between the Stencil Output Target and your project.
|
|
24
|
+
react: React,
|
|
25
|
+
events: { onDsFilterClick: 'dsFilterClick' } as DsCardDataVizDonutEvents,
|
|
26
|
+
defineCustomElement: defineDsCardDataVizDonut
|
|
27
|
+
});
|
|
@@ -12,15 +12,15 @@ import { createComponent } from '@stencil/react-output-target/runtime';
|
|
|
12
12
|
import React from 'react';
|
|
13
13
|
|
|
14
14
|
import type { Components } from "@ds-mo/ui/dist/components";
|
|
15
|
-
import {
|
|
15
|
+
import { DsCard as DsCardElement, defineCustomElement as defineDsCard } from "@ds-mo/ui/dist/components/ds-card.js";
|
|
16
16
|
|
|
17
|
-
export type
|
|
17
|
+
export type DsCardEvents = NonNullable<unknown>;
|
|
18
18
|
|
|
19
|
-
export const
|
|
20
|
-
tagName: 'ds-
|
|
21
|
-
elementClass:
|
|
19
|
+
export const DsCard: StencilReactComponent<DsCardElement, DsCardEvents, Components.DsCard> = /*@__PURE__*/ createComponent<DsCardElement, DsCardEvents, Components.DsCard>({
|
|
20
|
+
tagName: 'ds-card',
|
|
21
|
+
elementClass: DsCardElement,
|
|
22
22
|
// @ts-ignore - ignore potential React type mismatches between the Stencil Output Target and your project.
|
|
23
23
|
react: React,
|
|
24
|
-
events: {} as
|
|
25
|
-
defineCustomElement:
|
|
24
|
+
events: {} as DsCardEvents,
|
|
25
|
+
defineCustomElement: defineDsCard
|
|
26
26
|
});
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { Component, Element, Event, EventEmitter, h, Host, Method, Prop } from '@stencil/core';
|
|
2
|
+
import { controlWidthClass, type ControlWidth } from '../../utils/control-width';
|
|
2
3
|
|
|
3
4
|
export type ButtonFilledIntent =
|
|
4
5
|
| 'neutral'
|
|
@@ -17,6 +18,8 @@ export type ButtonFilledVariant = 'icon' | 'label' | 'icon-label';
|
|
|
17
18
|
|
|
18
19
|
export type ButtonFilledSize = 'md' | 'sm' | 'xs';
|
|
19
20
|
|
|
21
|
+
export type ButtonFilledWidth = ControlWidth;
|
|
22
|
+
|
|
20
23
|
/** Emphasis text per control-density size (buttons use emphasis, unlike Tag). */
|
|
21
24
|
const TEXT_VARIANT: Record<ButtonFilledSize, string> = {
|
|
22
25
|
md: 'text-body-medium-emphasis',
|
|
@@ -51,6 +54,9 @@ export class ButtonFilled {
|
|
|
51
54
|
/** Control density (height, padding, icon, type). */
|
|
52
55
|
@Prop() size: ButtonFilledSize = 'md';
|
|
53
56
|
|
|
57
|
+
/** Width fit — hug content (default) or fill the parent. */
|
|
58
|
+
@Prop() width: ButtonFilledWidth = 'hug';
|
|
59
|
+
|
|
54
60
|
/** Visible text for `label` / `icon-label` variants. */
|
|
55
61
|
@Prop() label: string = '';
|
|
56
62
|
|
|
@@ -135,6 +141,7 @@ export class ButtonFilled {
|
|
|
135
141
|
'ds-control--md': this.size === 'md',
|
|
136
142
|
'ds-control--sm': this.size === 'sm',
|
|
137
143
|
'ds-control--xs': this.size === 'xs',
|
|
144
|
+
...controlWidthClass(this.width),
|
|
138
145
|
}}
|
|
139
146
|
tabIndex={-1}
|
|
140
147
|
>
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { Component, Element, Event, EventEmitter, h, Host, Method, Prop } from '@stencil/core';
|
|
2
|
+
import { controlWidthClass, type ControlWidth } from '../../utils/control-width';
|
|
2
3
|
|
|
3
4
|
export type ButtonUnfilledOnBackgroundContrast = 'default' | 'medium' | 'bold' | 'strong';
|
|
4
5
|
|
|
@@ -8,6 +9,8 @@ export type ButtonUnfilledVariant = 'icon' | 'label' | 'icon-label';
|
|
|
8
9
|
|
|
9
10
|
export type ButtonUnfilledSize = 'md' | 'sm' | 'xs';
|
|
10
11
|
|
|
12
|
+
export type ButtonUnfilledWidth = ControlWidth;
|
|
13
|
+
|
|
11
14
|
/** Emphasis text per control-density size (buttons use emphasis, unlike Tag). */
|
|
12
15
|
const TEXT_VARIANT: Record<ButtonUnfilledSize, string> = {
|
|
13
16
|
md: 'text-body-medium-emphasis',
|
|
@@ -42,23 +45,26 @@ export class ButtonUnfilled {
|
|
|
42
45
|
/** Control density (height, padding, icon, type). */
|
|
43
46
|
@Prop() size: ButtonUnfilledSize = 'md';
|
|
44
47
|
|
|
48
|
+
/** Width fit — hug content (default) or fill the parent. */
|
|
49
|
+
@Prop() width: ButtonUnfilledWidth = 'hug';
|
|
50
|
+
|
|
45
51
|
/** Visible text for `label` / `icon-label` variants. */
|
|
46
52
|
@Prop() label: string = '';
|
|
47
53
|
|
|
48
54
|
/** Icon name passed to <ds-icon> for `icon` / `icon-label` variants. */
|
|
49
55
|
@Prop() icon: string = '';
|
|
50
56
|
|
|
51
|
-
/** Active/selected visual state. */
|
|
57
|
+
/** Active/selected visual state. Always promotes foreground to primary. */
|
|
52
58
|
@Prop() isActive: boolean = false;
|
|
53
59
|
|
|
54
60
|
/**
|
|
55
61
|
* When active, render the selected interaction fill.
|
|
56
62
|
* Default `true` for general UI. Shell chrome (nav / tool rails) should pass
|
|
57
|
-
* `false` so selection is foreground-only.
|
|
63
|
+
* `false` so selection is foreground-only (primary color, no fill).
|
|
58
64
|
*/
|
|
59
65
|
@Prop() activeFill: boolean = true;
|
|
60
66
|
|
|
61
|
-
/** Show a 1px
|
|
67
|
+
/** Show a 1px secondary inset border. Default on; shell chrome can pass `false`. */
|
|
62
68
|
@Prop() hasBorder: boolean = true;
|
|
63
69
|
|
|
64
70
|
/** Show a notification dot at the top-right of the icon zone (icon variant only). */
|
|
@@ -179,6 +185,7 @@ export class ButtonUnfilled {
|
|
|
179
185
|
'ds-control--md': this.size === 'md',
|
|
180
186
|
'ds-control--sm': this.size === 'sm',
|
|
181
187
|
'ds-control--xs': this.size === 'xs',
|
|
188
|
+
...controlWidthClass(this.width),
|
|
182
189
|
}}
|
|
183
190
|
tabIndex={-1}
|
|
184
191
|
>
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { Component, h, Host, Prop } from '@stencil/core';
|
|
2
|
+
|
|
3
|
+
export type CardWidth = 'sm' | 'md' | 'lg';
|
|
4
|
+
|
|
5
|
+
/** Visual chrome recipe — default app surface, or settings edit wash. */
|
|
6
|
+
export type CardAppearance = 'default' | 'editing';
|
|
7
|
+
|
|
8
|
+
const CARD_WIDTH_VARS: Record<CardWidth, string> = {
|
|
9
|
+
sm: 'var(--dimension-card-width-sm)',
|
|
10
|
+
md: 'var(--dimension-card-width-md)',
|
|
11
|
+
lg: 'var(--dimension-card-width-lg)',
|
|
12
|
+
};
|
|
13
|
+
|
|
14
|
+
const CARD_HEIGHT_VARS: Record<CardWidth, string> = {
|
|
15
|
+
sm: 'var(--dimension-card-height-sm)',
|
|
16
|
+
md: 'var(--dimension-card-height-md)',
|
|
17
|
+
lg: 'var(--dimension-card-height-lg)',
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
const FAINT_BRAND_TITLE_COLOR = 'var(--color-foreground-faint-brand)';
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* Shared card chrome — width + matching min-height tokens, header (title + actions),
|
|
24
|
+
* and a flex body that fills leftover space. Compose this from settings / data-viz cards.
|
|
25
|
+
*/
|
|
26
|
+
@Component({
|
|
27
|
+
tag: 'ds-card',
|
|
28
|
+
styleUrl: 'Card.css',
|
|
29
|
+
scoped: true,
|
|
30
|
+
})
|
|
31
|
+
export class Card {
|
|
32
|
+
/** Section heading shown in the card header. */
|
|
33
|
+
@Prop() heading!: string;
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* Card width token (`sm` / `md` / `lg`). Also sets host `min-height` to the
|
|
37
|
+
* matching `--dimension-card-height-*` so empty bodies still fill the card.
|
|
38
|
+
*/
|
|
39
|
+
@Prop() cardWidth: CardWidth = 'md';
|
|
40
|
+
|
|
41
|
+
/** Chrome recipe — `editing` applies the settings edit wash. */
|
|
42
|
+
@Prop() appearance: CardAppearance = 'default';
|
|
43
|
+
|
|
44
|
+
render() {
|
|
45
|
+
const editing = this.appearance === 'editing';
|
|
46
|
+
|
|
47
|
+
return (
|
|
48
|
+
<Host
|
|
49
|
+
class={{
|
|
50
|
+
card: true,
|
|
51
|
+
'card--editing': editing,
|
|
52
|
+
}}
|
|
53
|
+
style={{
|
|
54
|
+
'--_card-width': CARD_WIDTH_VARS[this.cardWidth],
|
|
55
|
+
'--_card-min-height': CARD_HEIGHT_VARS[this.cardWidth],
|
|
56
|
+
}}
|
|
57
|
+
>
|
|
58
|
+
<header class="card__header">
|
|
59
|
+
<div class="card__title-wrap">
|
|
60
|
+
<ds-text
|
|
61
|
+
class="card__title"
|
|
62
|
+
variant="text-title-small"
|
|
63
|
+
color={editing ? FAINT_BRAND_TITLE_COLOR : 'primary'}
|
|
64
|
+
as="h2"
|
|
65
|
+
>
|
|
66
|
+
{this.heading}
|
|
67
|
+
</ds-text>
|
|
68
|
+
</div>
|
|
69
|
+
<div class="card__actions">
|
|
70
|
+
<slot name="actions" />
|
|
71
|
+
</div>
|
|
72
|
+
</header>
|
|
73
|
+
<div class="card__body">
|
|
74
|
+
<slot />
|
|
75
|
+
</div>
|
|
76
|
+
</Host>
|
|
77
|
+
);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export type { CardWidth, CardAppearance } from './Card';
|
package/src/wc/components/{CardDataViz/CardDataViz.tsx → CardDataVizDonut/CardDataVizDonut.tsx}
RENAMED
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import { Component, Element, State, h, Host, Prop } from '@stencil/core';
|
|
1
|
+
import { Component, Element, Event, EventEmitter, State, h, Host, Prop } from '@stencil/core';
|
|
2
|
+
import type { CardWidth } from '../Card/Card';
|
|
2
3
|
|
|
3
|
-
export type
|
|
4
|
+
export type CardDataVizDonutWidth = CardWidth;
|
|
4
5
|
|
|
5
6
|
/** Matches the `dsSliceHover`/`dsItemHover` detail shape emitted by `ds-chart-*` and `ds-chart-legend`. */
|
|
6
7
|
type HoveredDatum = { label: string } | null;
|
|
@@ -8,30 +9,26 @@ type HoveredDatum = { label: string } | null;
|
|
|
8
9
|
/** A slotted chart/legend that opts into hover sync by exposing an `activeLabel` prop. */
|
|
9
10
|
type SyncableSlot = HTMLElement & { activeLabel?: string | null };
|
|
10
11
|
|
|
11
|
-
const CARD_WIDTH_VARS: Record<CardDataVizWidth, string> = {
|
|
12
|
-
sm: 'var(--dimension-card-width-sm)',
|
|
13
|
-
md: 'var(--dimension-card-width-md)',
|
|
14
|
-
lg: 'var(--dimension-card-width-lg)',
|
|
15
|
-
};
|
|
16
|
-
|
|
17
12
|
/**
|
|
18
|
-
*
|
|
19
|
-
*
|
|
20
|
-
* once the data-viz card's real header actions (menu, caption, footer stat) are designed.
|
|
13
|
+
* Donut data-viz card — shared `ds-card` chrome with a fill chart region and
|
|
14
|
+
* content-sized legend. Hover sync between chart and legend stays here.
|
|
21
15
|
*/
|
|
22
16
|
@Component({
|
|
23
|
-
tag: 'ds-card-data-viz',
|
|
24
|
-
styleUrl: '
|
|
17
|
+
tag: 'ds-card-data-viz-donut',
|
|
18
|
+
styleUrl: 'CardDataVizDonut.css',
|
|
25
19
|
scoped: true,
|
|
26
20
|
})
|
|
27
|
-
export class
|
|
21
|
+
export class CardDataVizDonut {
|
|
28
22
|
@Element() el!: HTMLElement;
|
|
29
23
|
|
|
30
24
|
/** Widget heading shown in the card header. */
|
|
31
25
|
@Prop() heading!: string;
|
|
32
26
|
|
|
33
|
-
/** Card width token. */
|
|
34
|
-
@Prop() cardWidth:
|
|
27
|
+
/** Card width token — also sets matching min-height. */
|
|
28
|
+
@Prop() cardWidth: CardDataVizDonutWidth = 'md';
|
|
29
|
+
|
|
30
|
+
/** Emits when the header filter control is activated. */
|
|
31
|
+
@Event() dsFilterClick!: EventEmitter<void>;
|
|
35
32
|
|
|
36
33
|
// Scoped (light-DOM) components have no native slot projection to detect emptiness from CSS —
|
|
37
34
|
// check the actual children so an unused region (e.g. no legend) doesn't render a dangling
|
|
@@ -40,13 +37,16 @@ export class CardDataViz {
|
|
|
40
37
|
@State() private hasLegendSlot = false;
|
|
41
38
|
|
|
42
39
|
componentWillRender() {
|
|
43
|
-
|
|
44
|
-
|
|
40
|
+
// Not `:scope >` — Stencil's scoped slot polyfill relocates slotted children into
|
|
41
|
+
// region wrappers (and here into nested `ds-card`), so they may not stay direct
|
|
42
|
+
// host children across renders.
|
|
43
|
+
this.hasChartSlot = !!this.el.querySelector('[slot="chart"]');
|
|
44
|
+
this.hasLegendSlot = !!this.el.querySelector('[slot="legend"]');
|
|
45
45
|
}
|
|
46
46
|
|
|
47
47
|
componentDidLoad() {
|
|
48
48
|
// Sync the chart's and legend's `activeLabel` from each other's hover events, so any
|
|
49
|
-
// ds-chart
|
|
49
|
+
// ds-chart-donut + ds-chart-legend pair cross-highlights without every consumer having to
|
|
50
50
|
// wire it up by hand. Delegated on the host (rather than bound to the specific slotted
|
|
51
51
|
// elements) since Stencil events bubble and the slot content can be swapped at runtime.
|
|
52
52
|
this.el.addEventListener('dsSliceHover', this.handleChartHover);
|
|
@@ -60,8 +60,8 @@ export class CardDataViz {
|
|
|
60
60
|
|
|
61
61
|
private handleChartHover = (e: Event) => {
|
|
62
62
|
// Not `:scope >` — Stencil's slot polyfill for scoped (non-shadow) components relocates
|
|
63
|
-
// slotted children into an inner
|
|
64
|
-
//
|
|
63
|
+
// slotted children into an inner region wrapper on render, so they're no longer direct
|
|
64
|
+
// children of the host by the time this fires.
|
|
65
65
|
const legend = this.el.querySelector('[slot="legend"]') as SyncableSlot | null;
|
|
66
66
|
if (!legend || !('activeLabel' in legend)) return;
|
|
67
67
|
legend.activeLabel = (e as CustomEvent<HoveredDatum>).detail?.label ?? null;
|
|
@@ -73,28 +73,35 @@ export class CardDataViz {
|
|
|
73
73
|
chart.activeLabel = (e as CustomEvent<HoveredDatum>).detail?.label ?? null;
|
|
74
74
|
};
|
|
75
75
|
|
|
76
|
+
private handleFilterClick = () => {
|
|
77
|
+
this.dsFilterClick.emit();
|
|
78
|
+
};
|
|
79
|
+
|
|
76
80
|
render() {
|
|
77
81
|
return (
|
|
78
|
-
<Host class="card-data-viz"
|
|
79
|
-
<
|
|
80
|
-
<
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
82
|
+
<Host class="card-data-viz-donut">
|
|
83
|
+
<ds-card heading={this.heading} cardWidth={this.cardWidth}>
|
|
84
|
+
<ds-button-unfilled
|
|
85
|
+
slot="actions"
|
|
86
|
+
variant="icon"
|
|
87
|
+
type="button"
|
|
88
|
+
icon="Filters"
|
|
89
|
+
aria-label="Filter"
|
|
90
|
+
onDsClick={this.handleFilterClick}
|
|
91
|
+
/>
|
|
92
|
+
<div class="card-data-viz-donut__layout">
|
|
93
|
+
{this.hasChartSlot && (
|
|
94
|
+
<div class="card-data-viz-donut__chart-region">
|
|
95
|
+
<slot name="chart" />
|
|
96
|
+
</div>
|
|
97
|
+
)}
|
|
98
|
+
{this.hasLegendSlot && (
|
|
99
|
+
<div class="card-data-viz-donut__legend-region">
|
|
100
|
+
<slot name="legend" />
|
|
101
|
+
</div>
|
|
102
|
+
)}
|
|
84
103
|
</div>
|
|
85
|
-
</
|
|
86
|
-
<div class="card-data-viz__body">
|
|
87
|
-
{this.hasChartSlot && (
|
|
88
|
-
<div class="card-data-viz__chart-region">
|
|
89
|
-
<slot name="chart" />
|
|
90
|
-
</div>
|
|
91
|
-
)}
|
|
92
|
-
{this.hasLegendSlot && (
|
|
93
|
-
<div class="card-data-viz__legend-region">
|
|
94
|
-
<slot name="legend" />
|
|
95
|
-
</div>
|
|
96
|
-
)}
|
|
97
|
-
</div>
|
|
104
|
+
</ds-card>
|
|
98
105
|
</Host>
|
|
99
106
|
);
|
|
100
107
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export type { CardDataVizDonutWidth } from './CardDataVizDonut';
|