@ds-mo/ui 14.13.0 → 14.15.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 +10 -2
- package/dist/.package-ready.json +1 -1
- package/dist/agent-patterns.json +50 -1
- package/dist/agent.json +107 -6
- package/dist/angular/ds-input.d.ts +1 -1
- package/dist/angular/ds-input.js +3 -3
- package/dist/components/ds-input.js +1 -1
- package/dist/components/ds-paper-texture.js +1 -1
- package/dist/components/ds-shell-app.js +1 -1
- package/dist/components/ds-table-saved-views.js +1 -1
- package/dist/components/{p-DIEx1e0M.js → p-B80NfEqc.js} +2 -2
- package/dist/components/p-B80NfEqc.js.map +1 -0
- package/dist/components/{p-iBuPFJL9.js → p-CKY989vF.js} +2 -2
- package/dist/components/p-CKY989vF.js.map +1 -0
- package/dist/docs/components.json +86 -4
- package/dist/mcp/cli.js +19 -4
- package/dist/mcp-data/registry/agent-activity.json +6 -1
- package/dist/mcp-data/registry/agent-questionnaire.json +6 -1
- package/dist/mcp-data/registry/agent-response.json +6 -1
- package/dist/mcp-data/registry/agent-source-list.json +6 -1
- package/dist/mcp-data/registry/agent-tool-call.json +6 -1
- package/dist/mcp-data/registry/attachment-list.json +6 -1
- package/dist/mcp-data/registry/avatar.json +6 -1
- package/dist/mcp-data/registry/badge.json +6 -1
- package/dist/mcp-data/registry/banner.json +6 -1
- package/dist/mcp-data/registry/bar-action.json +6 -1
- package/dist/mcp-data/registry/bar-nav.json +6 -1
- package/dist/mcp-data/registry/bar-title.json +6 -1
- package/dist/mcp-data/registry/bar-workflow.json +6 -1
- package/dist/mcp-data/registry/breadcrumb.json +6 -1
- package/dist/mcp-data/registry/button-filled.json +6 -1
- package/dist/mcp-data/registry/button-unfilled.json +6 -1
- package/dist/mcp-data/registry/card-chart.json +6 -1
- package/dist/mcp-data/registry/card-overview.json +6 -1
- package/dist/mcp-data/registry/card-setting.json +6 -1
- package/dist/mcp-data/registry/chart-legend.json +6 -1
- package/dist/mcp-data/registry/chart.json +6 -1
- package/dist/mcp-data/registry/checkbox.json +9 -1
- package/dist/mcp-data/registry/chip.json +6 -1
- package/dist/mcp-data/registry/code-block.json +6 -1
- package/dist/mcp-data/registry/conversation-list-item.json +6 -1
- package/dist/mcp-data/registry/conversation-list-section.json +6 -1
- package/dist/mcp-data/registry/conversation-list.json +6 -1
- package/dist/mcp-data/registry/divider.json +6 -1
- package/dist/mcp-data/registry/empty-state.json +6 -1
- package/dist/mcp-data/registry/field.json +6 -1
- package/dist/mcp-data/registry/filter-menu.json +6 -1
- package/dist/mcp-data/registry/icon.json +6 -1
- package/dist/mcp-data/registry/input.json +65 -8
- package/dist/mcp-data/registry/loader.json +6 -1
- package/dist/mcp-data/registry/markdown.json +6 -1
- package/dist/mcp-data/registry/menu.json +6 -1
- package/dist/mcp-data/registry/message-actions.json +6 -1
- package/dist/mcp-data/registry/message-bubble.json +6 -1
- package/dist/mcp-data/registry/message-composer.json +6 -1
- package/dist/mcp-data/registry/message-scroller.json +6 -1
- package/dist/mcp-data/registry/message.json +6 -1
- package/dist/mcp-data/registry/mobile-bar-nav.json +6 -1
- package/dist/mcp-data/registry/mobile-header.json +6 -1
- package/dist/mcp-data/registry/mobile-section-switcher.json +6 -1
- package/dist/mcp-data/registry/mobile-sheet-nav.json +6 -1
- package/dist/mcp-data/registry/modal.json +6 -1
- package/dist/mcp-data/registry/pagination.json +6 -1
- package/dist/mcp-data/registry/panel-nav.json +6 -1
- package/dist/mcp-data/registry/panel-sub-nav.json +6 -1
- package/dist/mcp-data/registry/panel-tool-header.json +6 -1
- package/dist/mcp-data/registry/panel-tool-search.json +6 -1
- package/dist/mcp-data/registry/panel-tools.json +6 -1
- package/dist/mcp-data/registry/paper-texture.json +7 -2
- package/dist/mcp-data/registry/radio.json +9 -1
- package/dist/mcp-data/registry/registry.json +108 -7
- package/dist/mcp-data/registry/scroll-overlay.json +6 -1
- package/dist/mcp-data/registry/select.json +10 -2
- package/dist/mcp-data/registry/shell-app.json +6 -1
- package/dist/mcp-data/registry/shell-page.json +6 -1
- package/dist/mcp-data/registry/shell-tools.json +6 -1
- package/dist/mcp-data/registry/skeleton.json +6 -1
- package/dist/mcp-data/registry/slider.json +6 -1
- package/dist/mcp-data/registry/swatch-picker.json +6 -1
- package/dist/mcp-data/registry/switch.json +9 -1
- package/dist/mcp-data/registry/tab-group.json +6 -1
- package/dist/mcp-data/registry/table-saved-views.json +6 -1
- package/dist/mcp-data/registry/table-toolbar.json +6 -1
- package/dist/mcp-data/registry/table.json +6 -1
- package/dist/mcp-data/registry/tag.json +6 -1
- package/dist/mcp-data/registry/text.json +6 -1
- package/dist/mcp-data/registry/toast.json +6 -1
- package/dist/mcp-data/registry/tooltip-chart.json +6 -1
- package/dist/mcp-data/registry/tooltip.json +6 -1
- package/dist/mcp-data/registry/typing-indicator.json +6 -1
- package/dist/types/components/Input/Input.d.ts +7 -1
- package/dist/types/components/PaperTexture/PaperTexture.d.ts +1 -0
- package/dist/types/components.d.ts +27 -0
- package/dist/vue/components.d.ts +77 -0
- package/dist/vue/components.js +79 -0
- package/dist/vue/ds-agent-activity.d.ts +3 -0
- package/dist/vue/ds-agent-activity.js +10 -0
- package/dist/vue/ds-agent-questionnaire.d.ts +3 -0
- package/dist/vue/ds-agent-questionnaire.js +19 -0
- package/dist/vue/ds-agent-response.d.ts +3 -0
- package/dist/vue/ds-agent-response.js +15 -0
- package/dist/vue/ds-agent-source-list.d.ts +3 -0
- package/dist/vue/ds-agent-source-list.js +13 -0
- package/dist/vue/ds-agent-tool-call.d.ts +3 -0
- package/dist/vue/ds-agent-tool-call.js +18 -0
- package/dist/vue/ds-attachment-list.d.ts +3 -0
- package/dist/vue/ds-attachment-list.js +9 -0
- package/dist/vue/ds-avatar.d.ts +3 -0
- package/dist/vue/ds-avatar.js +11 -0
- package/dist/vue/ds-badge.d.ts +3 -0
- package/dist/vue/ds-badge.js +15 -0
- package/dist/vue/ds-banner.d.ts +3 -0
- package/dist/vue/ds-banner.js +20 -0
- package/dist/vue/ds-bar-action.d.ts +3 -0
- package/dist/vue/ds-bar-action.js +14 -0
- package/dist/vue/ds-bar-nav.d.ts +3 -0
- package/dist/vue/ds-bar-nav.js +17 -0
- package/dist/vue/ds-bar-title.d.ts +3 -0
- package/dist/vue/ds-bar-title.js +32 -0
- package/dist/vue/ds-bar-workflow.d.ts +3 -0
- package/dist/vue/ds-bar-workflow.js +24 -0
- package/dist/vue/ds-breadcrumb.d.ts +3 -0
- package/dist/vue/ds-breadcrumb.js +12 -0
- package/dist/vue/ds-button-filled.d.ts +3 -0
- package/dist/vue/ds-button-filled.js +31 -0
- package/dist/vue/ds-button-unfilled.d.ts +3 -0
- package/dist/vue/ds-button-unfilled.js +36 -0
- package/dist/vue/ds-card-chart.d.ts +3 -0
- package/dist/vue/ds-card-chart.js +15 -0
- package/dist/vue/ds-card-overview.d.ts +3 -0
- package/dist/vue/ds-card-overview.js +21 -0
- package/dist/vue/ds-card-setting.d.ts +3 -0
- package/dist/vue/ds-card-setting.js +16 -0
- package/dist/vue/ds-chart-legend.d.ts +3 -0
- package/dist/vue/ds-chart-legend.js +19 -0
- package/dist/vue/ds-chart.d.ts +3 -0
- package/dist/vue/ds-chart.js +17 -0
- package/dist/vue/ds-checkbox.d.ts +3 -0
- package/dist/vue/ds-checkbox.js +22 -0
- package/dist/vue/ds-chip.d.ts +3 -0
- package/dist/vue/ds-chip.js +17 -0
- package/dist/vue/ds-code-block.d.ts +3 -0
- package/dist/vue/ds-code-block.js +10 -0
- package/dist/vue/ds-conversation-list-item.d.ts +3 -0
- package/dist/vue/ds-conversation-list-item.js +19 -0
- package/dist/vue/ds-conversation-list-section.d.ts +3 -0
- package/dist/vue/ds-conversation-list-section.js +9 -0
- package/dist/vue/ds-conversation-list.d.ts +3 -0
- package/dist/vue/ds-conversation-list.js +8 -0
- package/dist/vue/ds-divider.d.ts +3 -0
- package/dist/vue/ds-divider.js +12 -0
- package/dist/vue/ds-empty-state.d.ts +3 -0
- package/dist/vue/ds-empty-state.js +10 -0
- package/dist/vue/ds-field.d.ts +3 -0
- package/dist/vue/ds-field.js +12 -0
- package/dist/vue/ds-filter-menu.d.ts +3 -0
- package/dist/vue/ds-filter-menu.js +43 -0
- package/dist/vue/ds-icon.d.ts +3 -0
- package/dist/vue/ds-icon.js +11 -0
- package/dist/vue/ds-input.d.ts +3 -0
- package/dist/vue/ds-input.js +40 -0
- package/dist/vue/ds-loader.d.ts +3 -0
- package/dist/vue/ds-loader.js +10 -0
- package/dist/vue/ds-markdown.d.ts +3 -0
- package/dist/vue/ds-markdown.js +9 -0
- package/dist/vue/ds-menu.d.ts +3 -0
- package/dist/vue/ds-menu.js +34 -0
- package/dist/vue/ds-message-actions.d.ts +3 -0
- package/dist/vue/ds-message-actions.js +15 -0
- package/dist/vue/ds-message-bubble.d.ts +3 -0
- package/dist/vue/ds-message-bubble.js +8 -0
- package/dist/vue/ds-message-composer.d.ts +3 -0
- package/dist/vue/ds-message-composer.js +21 -0
- package/dist/vue/ds-message-scroller.d.ts +3 -0
- package/dist/vue/ds-message-scroller.js +14 -0
- package/dist/vue/ds-message.d.ts +3 -0
- package/dist/vue/ds-message.js +17 -0
- package/dist/vue/ds-mobile-bar-nav.d.ts +3 -0
- package/dist/vue/ds-mobile-bar-nav.js +25 -0
- package/dist/vue/ds-mobile-header.d.ts +3 -0
- package/dist/vue/ds-mobile-header.js +23 -0
- package/dist/vue/ds-mobile-section-switcher.d.ts +3 -0
- package/dist/vue/ds-mobile-section-switcher.js +13 -0
- package/dist/vue/ds-mobile-sheet-nav.d.ts +3 -0
- package/dist/vue/ds-mobile-sheet-nav.js +26 -0
- package/dist/vue/ds-modal.d.ts +3 -0
- package/dist/vue/ds-modal.js +18 -0
- package/dist/vue/ds-pagination.d.ts +3 -0
- package/dist/vue/ds-pagination.js +25 -0
- package/dist/vue/ds-panel-nav.d.ts +3 -0
- package/dist/vue/ds-panel-nav.js +40 -0
- package/dist/vue/ds-panel-sub-nav.d.ts +3 -0
- package/dist/vue/ds-panel-sub-nav.js +15 -0
- package/dist/vue/ds-panel-tool-header.d.ts +3 -0
- package/dist/vue/ds-panel-tool-header.js +24 -0
- package/dist/vue/ds-panel-tool-search.d.ts +3 -0
- package/dist/vue/ds-panel-tool-search.js +25 -0
- package/dist/vue/ds-panel-tools.d.ts +3 -0
- package/dist/vue/ds-panel-tools.js +29 -0
- package/dist/vue/ds-paper-texture.d.ts +3 -0
- package/dist/vue/ds-paper-texture.js +8 -0
- package/dist/vue/ds-radio.d.ts +3 -0
- package/dist/vue/ds-radio.js +22 -0
- package/dist/vue/ds-scroll-overlay.d.ts +3 -0
- package/dist/vue/ds-scroll-overlay.js +11 -0
- package/dist/vue/ds-select.d.ts +3 -0
- package/dist/vue/ds-select.js +57 -0
- package/dist/vue/ds-shell-app.d.ts +3 -0
- package/dist/vue/ds-shell-app.js +46 -0
- package/dist/vue/ds-shell-page.d.ts +3 -0
- package/dist/vue/ds-shell-page.js +16 -0
- package/dist/vue/ds-shell-tools.d.ts +3 -0
- package/dist/vue/ds-shell-tools.js +28 -0
- package/dist/vue/ds-skeleton.d.ts +3 -0
- package/dist/vue/ds-skeleton.js +15 -0
- package/dist/vue/ds-slider.d.ts +3 -0
- package/dist/vue/ds-slider.js +40 -0
- package/dist/vue/ds-swatch-picker.d.ts +3 -0
- package/dist/vue/ds-swatch-picker.js +14 -0
- package/dist/vue/ds-switch.d.ts +3 -0
- package/dist/vue/ds-switch.js +22 -0
- package/dist/vue/ds-tab-group.d.ts +3 -0
- package/dist/vue/ds-tab-group.js +17 -0
- package/dist/vue/ds-table-saved-views.d.ts +3 -0
- package/dist/vue/ds-table-saved-views.js +28 -0
- package/dist/vue/ds-table-toolbar.d.ts +3 -0
- package/dist/vue/ds-table-toolbar.js +8 -0
- package/dist/vue/ds-table.d.ts +3 -0
- package/dist/vue/ds-table.js +86 -0
- package/dist/vue/ds-tag.d.ts +3 -0
- package/dist/vue/ds-tag.js +23 -0
- package/dist/vue/ds-text.d.ts +3 -0
- package/dist/vue/ds-text.js +20 -0
- package/dist/vue/ds-toast.d.ts +3 -0
- package/dist/vue/ds-toast.js +21 -0
- package/dist/vue/ds-tooltip-chart.d.ts +3 -0
- package/dist/vue/ds-tooltip-chart.js +14 -0
- package/dist/vue/ds-tooltip.d.ts +3 -0
- package/dist/vue/ds-tooltip.js +18 -0
- package/dist/vue/ds-typing-indicator.d.ts +3 -0
- package/dist/vue/ds-typing-indicator.js +8 -0
- package/dist/vue/vue-runtime.d.ts +32 -0
- package/dist/vue/vue-runtime.js +218 -0
- package/package.json +14 -2
- package/dist/components/p-DIEx1e0M.js.map +0 -1
- package/dist/components/p-iBuPFJL9.js.map +0 -1
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"$schema": "https://ui.shadcn.com/schema/registry-item.json",
|
|
3
3
|
"name": "input",
|
|
4
4
|
"title": "Input",
|
|
5
|
-
"description": "Form-associated single-line text field for primary and secondary application backgrounds, with native
|
|
5
|
+
"description": "Form-associated single-line text and number field for primary and secondary application backgrounds, with native input behavior, four control densities, optional leading and trailing content, search clearing, and validation.",
|
|
6
6
|
"type": "registry:ui",
|
|
7
7
|
"meta": {
|
|
8
8
|
"library": "@ds-mo/ui",
|
|
@@ -13,10 +13,10 @@
|
|
|
13
13
|
"intent": {
|
|
14
14
|
"audience": "general",
|
|
15
15
|
"status": "stable",
|
|
16
|
-
"summary": "Form-associated single-line text field for primary and secondary application backgrounds, with native
|
|
16
|
+
"summary": "Form-associated single-line text and number field for primary and secondary application backgrounds, with native input behavior, four control densities, optional leading and trailing content, search clearing, and validation.",
|
|
17
17
|
"useWhen": [
|
|
18
|
-
"A user must enter or edit one line of text, an email address, telephone number, URL, search query, or
|
|
19
|
-
"The value must participate in native, Angular, or
|
|
18
|
+
"A user must enter or edit one line of text, an email address, telephone number, URL, search query, password, or exact number.",
|
|
19
|
+
"The value must participate in native, Angular, React, or Vue form state.",
|
|
20
20
|
"A compact filter or toolbar needs a single-line search field that follows the shared control-density recipe."
|
|
21
21
|
],
|
|
22
22
|
"avoidWhen": [
|
|
@@ -61,6 +61,7 @@
|
|
|
61
61
|
"Search fields show a standard borderless CrossCircle icon action only while they contain a value. Clearing emits the empty value and restores focus to the native field.",
|
|
62
62
|
"The suffix slot is for compact units or decorations. The optional leading icon is decorative and does not replace the field label.",
|
|
63
63
|
"Use autoComplete, inputMode, and enterKeyHint to provide browser and virtual-keyboard hints without changing the value's semantic type.",
|
|
64
|
+
"Number fields preserve native spinbutton semantics, stepping, and min/max constraint behavior while dsChange continues to report the native string value.",
|
|
64
65
|
"The host exposes focused, filled, dirty, touched, invalid, disabled, read-only, and required data attributes for Field integration and diagnostics.",
|
|
65
66
|
"Use Input only on primary or secondary application backgrounds. It intentionally does not expose alternate surface contexts."
|
|
66
67
|
],
|
|
@@ -77,6 +78,9 @@
|
|
|
77
78
|
"react": [
|
|
78
79
|
"Use DsInput, bind value for controlled application state, and handle onDsChange and onDsClear."
|
|
79
80
|
],
|
|
81
|
+
"vue": [
|
|
82
|
+
"Use DsInput with v-model for the value, and listen for dsChange and dsClear."
|
|
83
|
+
],
|
|
80
84
|
"angular": [
|
|
81
85
|
"Import DsInput with TextValueAccessor when integrating with Angular Forms."
|
|
82
86
|
]
|
|
@@ -221,6 +225,22 @@
|
|
|
221
225
|
"required": false,
|
|
222
226
|
"mutable": false
|
|
223
227
|
},
|
|
228
|
+
"max": {
|
|
229
|
+
"type": "number | undefined",
|
|
230
|
+
"resolvedType": "number | undefined",
|
|
231
|
+
"attribute": "max",
|
|
232
|
+
"required": false,
|
|
233
|
+
"mutable": false,
|
|
234
|
+
"description": "Maximum accepted value when type is number."
|
|
235
|
+
},
|
|
236
|
+
"min": {
|
|
237
|
+
"type": "number | undefined",
|
|
238
|
+
"resolvedType": "number | undefined",
|
|
239
|
+
"attribute": "min",
|
|
240
|
+
"required": false,
|
|
241
|
+
"mutable": false,
|
|
242
|
+
"description": "Minimum accepted value when type is number."
|
|
243
|
+
},
|
|
224
244
|
"name": {
|
|
225
245
|
"type": "string | undefined",
|
|
226
246
|
"resolvedType": "string | undefined",
|
|
@@ -269,9 +289,17 @@
|
|
|
269
289
|
"mutable": false,
|
|
270
290
|
"description": "Control density."
|
|
271
291
|
},
|
|
292
|
+
"step": {
|
|
293
|
+
"type": "number | undefined",
|
|
294
|
+
"resolvedType": "number | undefined",
|
|
295
|
+
"attribute": "step",
|
|
296
|
+
"required": false,
|
|
297
|
+
"mutable": false,
|
|
298
|
+
"description": "Numeric increment used by native stepping and constraint validation."
|
|
299
|
+
},
|
|
272
300
|
"type": {
|
|
273
301
|
"type": "InputType",
|
|
274
|
-
"resolvedType": "\"email\" | \"password\" | \"search\" | \"tel\" | \"text\" | \"url\"",
|
|
302
|
+
"resolvedType": "\"email\" | \"number\" | \"password\" | \"search\" | \"tel\" | \"text\" | \"url\"",
|
|
275
303
|
"attribute": "type",
|
|
276
304
|
"default": "'text'",
|
|
277
305
|
"required": false,
|
|
@@ -447,6 +475,22 @@
|
|
|
447
475
|
"required": false,
|
|
448
476
|
"mutable": false
|
|
449
477
|
},
|
|
478
|
+
"max": {
|
|
479
|
+
"type": "number | undefined",
|
|
480
|
+
"resolvedType": "number | undefined",
|
|
481
|
+
"attribute": "max",
|
|
482
|
+
"required": false,
|
|
483
|
+
"mutable": false,
|
|
484
|
+
"description": "Maximum accepted value when type is number."
|
|
485
|
+
},
|
|
486
|
+
"min": {
|
|
487
|
+
"type": "number | undefined",
|
|
488
|
+
"resolvedType": "number | undefined",
|
|
489
|
+
"attribute": "min",
|
|
490
|
+
"required": false,
|
|
491
|
+
"mutable": false,
|
|
492
|
+
"description": "Minimum accepted value when type is number."
|
|
493
|
+
},
|
|
450
494
|
"name": {
|
|
451
495
|
"type": "string | undefined",
|
|
452
496
|
"resolvedType": "string | undefined",
|
|
@@ -495,9 +539,17 @@
|
|
|
495
539
|
"mutable": false,
|
|
496
540
|
"description": "Control density."
|
|
497
541
|
},
|
|
542
|
+
"step": {
|
|
543
|
+
"type": "number | undefined",
|
|
544
|
+
"resolvedType": "number | undefined",
|
|
545
|
+
"attribute": "step",
|
|
546
|
+
"required": false,
|
|
547
|
+
"mutable": false,
|
|
548
|
+
"description": "Numeric increment used by native stepping and constraint validation."
|
|
549
|
+
},
|
|
498
550
|
"type": {
|
|
499
551
|
"type": "InputType",
|
|
500
|
-
"resolvedType": "\"email\" | \"password\" | \"search\" | \"tel\" | \"text\" | \"url\"",
|
|
552
|
+
"resolvedType": "\"email\" | \"number\" | \"password\" | \"search\" | \"tel\" | \"text\" | \"url\"",
|
|
501
553
|
"attribute": "type",
|
|
502
554
|
"default": "'text'",
|
|
503
555
|
"required": false,
|
|
@@ -547,6 +599,7 @@
|
|
|
547
599
|
"exports": {
|
|
548
600
|
"customElement": "ds-input",
|
|
549
601
|
"react": "DsInput",
|
|
602
|
+
"vue": "DsInput",
|
|
550
603
|
"angular": "DsInput"
|
|
551
604
|
},
|
|
552
605
|
"consumption": {
|
|
@@ -560,6 +613,10 @@
|
|
|
560
613
|
"import": "import { DsInput } from '@ds-mo/ui/react';",
|
|
561
614
|
"example": "<DsInput />"
|
|
562
615
|
},
|
|
616
|
+
"vue": {
|
|
617
|
+
"import": "import { DsInput } from '@ds-mo/ui/vue';",
|
|
618
|
+
"example": "<DsInput />"
|
|
619
|
+
},
|
|
563
620
|
"angular": {
|
|
564
621
|
"import": "import { DsInput } from '@ds-mo/ui/angular/ds-input';",
|
|
565
622
|
"example": "<ds-input></ds-input>"
|
|
@@ -569,7 +626,7 @@
|
|
|
569
626
|
"@ds-mo/tokens ^6.5.0",
|
|
570
627
|
"@ds-mo/icons ^7.0.0"
|
|
571
628
|
],
|
|
572
|
-
"frameworks": "Custom Elements; React 18/19 wrappers; Angular 19-22 standalone adapters."
|
|
629
|
+
"frameworks": "Custom Elements; React 18/19 wrappers; Vue 3 wrappers; Angular 19-22 standalone adapters."
|
|
573
630
|
}
|
|
574
631
|
}
|
|
575
632
|
},
|
|
@@ -591,7 +648,7 @@
|
|
|
591
648
|
},
|
|
592
649
|
{
|
|
593
650
|
"path": "src/wc/components/Input/Input.tsx",
|
|
594
|
-
"content": "import { AttachInternals, Component, Prop, State, Event, EventEmitter, Element, Method, Watch, h, Host } from '@stencil/core';\nimport {\n controlWidthClass,\n CONTROL_TEXT_VARIANT,\n DEFAULT_REQUIRED_MESSAGE,\n restoreStringFormState,\n setFormControlValue,\n setRequiredValidity,\n type ControlWidth,\n} from '../../utils';\n\nexport type InputType = 'text' | 'email' | 'tel' | 'url' | 'search' | 'password';\nexport type InputSize = 'lg' | 'md' | 'sm' | 'xs';\nexport type InputWidth = ControlWidth;\n\nconst ICON_SIZE: Record<InputSize, 'lg' | 'md' | 'sm' | 'xs'> = {\n lg: 'lg',\n md: 'md',\n sm: 'sm',\n xs: 'xs',\n};\n\nconst CLEAR_BUTTON_SIZE: Record<InputSize, 'md' | 'sm' | 'xs'> = {\n lg: 'md',\n md: 'sm',\n sm: 'xs',\n xs: 'xs',\n};\n\nlet idCounter = 0;\n\n@Component({\n tag: 'ds-input',\n styleUrl: 'Input.css',\n scoped: true,\n formAssociated: true,\n})\nexport class Input {\n @Element() el!: HTMLElement;\n @AttachInternals() internals!: ElementInternals;\n\n private generatedId = `ds-input-${++idCounter}`;\n private errorId = `${this.generatedId}-error`;\n\n @Prop({ mutable: true }) value: string = '';\n @Prop({ reflect: true }) name: string | undefined;\n @Prop({ reflect: true }) form: string | undefined;\n @Prop({ reflect: true }) disabled: boolean = false;\n /** Keeps the value focusable and submittable while preventing edits. */\n @Prop({ reflect: true }) readOnly: boolean = false;\n @Prop({ reflect: true }) required: boolean = false;\n @Prop() requiredMessage: string = DEFAULT_REQUIRED_MESSAGE;\n @Prop() clearLabel: string = 'Clear';\n @Prop() placeholder: string | undefined;\n @Prop() type: InputType = 'text';\n /** Native browser autofill hint. */\n @Prop({ attribute: 'autocomplete' }) autoComplete: string | undefined;\n /** Preferred virtual keyboard without changing the value semantics. */\n @Prop({ attribute: 'inputmode' }) inputMode: string = '';\n /** Preferred virtual-keyboard action label. */\n @Prop({ attribute: 'enterkeyhint' }) enterKeyHint: string = '';\n /** Control density. */\n @Prop() size: InputSize = 'md';\n /** Width fit — fill the parent (default) or hug the available content. */\n @Prop() width: InputWidth = 'fill';\n /** Show the standard inset border, including focused and invalid strokes. */\n @Prop() hasBorder: boolean = true;\n /** Optional leading icon name. */\n @Prop() icon: string | undefined;\n @Prop() isInactive: boolean = false;\n @Prop() autoFocus: boolean = false;\n @Prop() error: boolean = false;\n @Prop() errorMessage: string | undefined;\n /** Associates the internal input with an external <label>. */\n @Prop() inputId: string | undefined;\n @Prop({ attribute: 'aria-label' }) ariaLabel: string | null = null;\n @Prop({ attribute: 'aria-labelledby' }) ariaLabelledby: string | undefined;\n @Prop({ attribute: 'aria-describedby' }) ariaDescribedby: string | undefined;\n\n @Event() dsChange!: EventEmitter<string>;\n @Event() dsClear!: EventEmitter<void>;\n\n private initialValue = '';\n @State() private formDisabled = false;\n @State() private hasSuffix = false;\n @State() private focused = false;\n @State() private touched = false;\n\n componentWillLoad() {\n this.initialValue = this.value;\n this.hasSuffix = Boolean(this.el.querySelector('[slot=\"suffix\"]'));\n this.syncFormValue();\n }\n\n componentDidRender() {\n const hasSuffix = Boolean(this.el.querySelector('[slot=\"suffix\"]'));\n if (hasSuffix !== this.hasSuffix) this.hasSuffix = hasSuffix;\n }\n\n @Watch('value')\n @Watch('disabled')\n @Watch('isInactive')\n @Watch('required')\n syncFormValue() {\n const inactive = this.isInactive || this.disabled || this.formDisabled;\n setFormControlValue(this.internals, this.value, { inactive });\n const missing = this.required && !inactive && this.value.length === 0;\n setRequiredValidity(this.internals, missing, this.requiredMessage);\n }\n\n formDisabledCallback(disabled: boolean) {\n this.formDisabled = disabled;\n this.syncFormValue();\n }\n\n formResetCallback() {\n this.value = this.initialValue;\n }\n\n formStateRestoreCallback(state: string | File | FormData | null) {\n this.value = restoreStringFormState(state);\n }\n\n @Method()\n async setFocus() {\n this.el.querySelector('input')?.focus();\n }\n\n private handleInput = (e: Event) => {\n this.value = (e.target as HTMLInputElement).value;\n this.dsChange.emit(this.value);\n };\n\n private handleFocus = () => {\n this.focused = true;\n };\n\n private handleBlur = () => {\n this.focused = false;\n this.touched = true;\n };\n\n private handleClear = () => {\n this.value = '';\n this.dsChange.emit('');\n this.dsClear.emit();\n this.el.querySelector('input')?.focus();\n };\n\n render() {\n const inputId = this.inputId ?? this.generatedId;\n const inactive = this.isInactive || this.disabled || this.formDisabled;\n const filled = this.value.length > 0;\n const dirty = this.value !== this.initialValue;\n const showClear = this.type === 'search' && filled && !inactive && !this.readOnly;\n const showError = this.error && Boolean(this.errorMessage);\n const textVariant = CONTROL_TEXT_VARIANT[this.size];\n const iconSize = ICON_SIZE[this.size];\n\n const describedBy = [\n this.ariaDescribedby,\n showError ? this.errorId : undefined,\n ].filter(Boolean).join(' ') || undefined;\n\n return (\n <Host\n class={{\n 'input-host': true,\n 'ds-field-stack': true,\n 'ds-control-inactive': inactive,\n [`ds-control--${this.size}`]: true,\n ...controlWidthClass(this.width),\n }}\n data-disabled={inactive ? '' : undefined}\n data-readonly={this.readOnly ? '' : undefined}\n data-required={this.required ? '' : undefined}\n data-invalid={this.error ? '' : undefined}\n data-filled={filled ? '' : undefined}\n data-focused={this.focused ? '' : undefined}\n data-dirty={dirty ? '' : undefined}\n data-touched={this.touched ? '' : undefined}\n >\n <div\n class={{\n 'input-control': true,\n 'ds-control-frame': true,\n 'input-control--bordered': this.hasBorder,\n 'input-control--error': this.hasBorder && this.error,\n 'ds-interaction-fill': true,\n [`ds-control--${this.size}`]: true,\n }}\n >\n {this.icon && (\n <span class=\"input-control__prefix ds-control-icon-box ds-interaction-fill__content\" aria-hidden=\"true\">\n <ds-icon name={this.icon} size={iconSize} color=\"inherit\" />\n </span>\n )}\n <input\n type={this.type}\n id={inputId}\n value={this.value}\n placeholder={this.placeholder}\n disabled={inactive}\n readOnly={this.readOnly}\n required={this.required}\n autoFocus={this.autoFocus}\n autoComplete={this.autoComplete}\n inputMode={this.inputMode || undefined}\n enterKeyHint={this.enterKeyHint || undefined}\n class={`native-input ds-control-label-box ds-text--${textVariant.replace('text-', '')} ds-text--regular ds-interaction-fill__content`}\n aria-label={this.ariaLabel}\n aria-labelledby={this.ariaLabelledby}\n aria-describedby={describedBy}\n aria-invalid={this.error ? 'true' : undefined}\n onInput={this.handleInput}\n onFocus={this.handleFocus}\n onBlur={this.handleBlur}\n />\n <span class={{ 'input-control__suffix': true, 'ds-control-icon-box': true, 'input-control__suffix--empty': !this.hasSuffix }}>\n <slot name=\"suffix\" />\n </span>\n {showClear && (\n <ds-button-unfilled\n class=\"input-control__clear\"\n variant=\"icon\"\n size={CLEAR_BUTTON_SIZE[this.size]}\n icon=\"CrossCircle\"\n hasBorder={false}\n rounded\n ariaLabel={this.clearLabel}\n onDsClick={this.handleClear}\n />\n )}\n </div>\n {showError && (\n <ds-text\n class=\"error-text\"\n as=\"div\"\n variant=\"text-body-small\"\n color=\"negative\"\n textId={this.errorId}\n role=\"alert\"\n >\n {this.errorMessage}\n </ds-text>\n )}\n </Host>\n );\n }\n}\n",
|
|
651
|
+
"content": "import { AttachInternals, Component, Prop, State, Event, EventEmitter, Element, Method, Watch, h, Host } from '@stencil/core';\nimport {\n controlWidthClass,\n CONTROL_TEXT_VARIANT,\n DEFAULT_REQUIRED_MESSAGE,\n restoreStringFormState,\n setFormControlValue,\n setRequiredValidity,\n type ControlWidth,\n} from '../../utils';\n\nexport type InputType = 'text' | 'email' | 'tel' | 'url' | 'search' | 'password' | 'number';\nexport type InputSize = 'lg' | 'md' | 'sm' | 'xs';\nexport type InputWidth = ControlWidth;\n\nconst ICON_SIZE: Record<InputSize, 'lg' | 'md' | 'sm' | 'xs'> = {\n lg: 'lg',\n md: 'md',\n sm: 'sm',\n xs: 'xs',\n};\n\nconst CLEAR_BUTTON_SIZE: Record<InputSize, 'md' | 'sm' | 'xs'> = {\n lg: 'md',\n md: 'sm',\n sm: 'xs',\n xs: 'xs',\n};\n\nlet idCounter = 0;\n\n@Component({\n tag: 'ds-input',\n styleUrl: 'Input.css',\n scoped: true,\n formAssociated: true,\n})\nexport class Input {\n @Element() el!: HTMLElement;\n @AttachInternals() internals!: ElementInternals;\n\n private generatedId = `ds-input-${++idCounter}`;\n private errorId = `${this.generatedId}-error`;\n\n @Prop({ mutable: true }) value: string = '';\n @Prop({ reflect: true }) name: string | undefined;\n @Prop({ reflect: true }) form: string | undefined;\n @Prop({ reflect: true }) disabled: boolean = false;\n /** Keeps the value focusable and submittable while preventing edits. */\n @Prop({ reflect: true }) readOnly: boolean = false;\n @Prop({ reflect: true }) required: boolean = false;\n @Prop() requiredMessage: string = DEFAULT_REQUIRED_MESSAGE;\n @Prop() clearLabel: string = 'Clear';\n @Prop() placeholder: string | undefined;\n @Prop() type: InputType = 'text';\n /** Minimum accepted value when type is number. */\n @Prop() min: number | undefined;\n /** Maximum accepted value when type is number. */\n @Prop() max: number | undefined;\n /** Numeric increment used by native stepping and constraint validation. */\n @Prop() step: number | undefined;\n /** Native browser autofill hint. */\n @Prop({ attribute: 'autocomplete' }) autoComplete: string | undefined;\n /** Preferred virtual keyboard without changing the value semantics. */\n @Prop({ attribute: 'inputmode' }) inputMode: string = '';\n /** Preferred virtual-keyboard action label. */\n @Prop({ attribute: 'enterkeyhint' }) enterKeyHint: string = '';\n /** Control density. */\n @Prop() size: InputSize = 'md';\n /** Width fit — fill the parent (default) or hug the available content. */\n @Prop() width: InputWidth = 'fill';\n /** Show the standard inset border, including focused and invalid strokes. */\n @Prop() hasBorder: boolean = true;\n /** Optional leading icon name. */\n @Prop() icon: string | undefined;\n @Prop() isInactive: boolean = false;\n @Prop() autoFocus: boolean = false;\n @Prop() error: boolean = false;\n @Prop() errorMessage: string | undefined;\n /** Associates the internal input with an external <label>. */\n @Prop() inputId: string | undefined;\n @Prop({ attribute: 'aria-label' }) ariaLabel: string | null = null;\n @Prop({ attribute: 'aria-labelledby' }) ariaLabelledby: string | undefined;\n @Prop({ attribute: 'aria-describedby' }) ariaDescribedby: string | undefined;\n\n @Event() dsChange!: EventEmitter<string>;\n @Event() dsClear!: EventEmitter<void>;\n\n private initialValue = '';\n @State() private formDisabled = false;\n @State() private hasSuffix = false;\n @State() private focused = false;\n @State() private touched = false;\n\n componentWillLoad() {\n this.initialValue = this.value;\n this.hasSuffix = Boolean(this.el.querySelector('[slot=\"suffix\"]'));\n this.syncFormValue();\n }\n\n componentDidRender() {\n const hasSuffix = Boolean(this.el.querySelector('[slot=\"suffix\"]'));\n if (hasSuffix !== this.hasSuffix) this.hasSuffix = hasSuffix;\n }\n\n @Watch('value')\n @Watch('disabled')\n @Watch('isInactive')\n @Watch('required')\n syncFormValue() {\n const inactive = this.isInactive || this.disabled || this.formDisabled;\n setFormControlValue(this.internals, this.value, { inactive });\n const missing = this.required && !inactive && this.value.length === 0;\n setRequiredValidity(this.internals, missing, this.requiredMessage);\n }\n\n formDisabledCallback(disabled: boolean) {\n this.formDisabled = disabled;\n this.syncFormValue();\n }\n\n formResetCallback() {\n this.value = this.initialValue;\n }\n\n formStateRestoreCallback(state: string | File | FormData | null) {\n this.value = restoreStringFormState(state);\n }\n\n @Method()\n async setFocus() {\n this.el.querySelector('input')?.focus();\n }\n\n private handleInput = (e: Event) => {\n this.value = (e.target as HTMLInputElement).value;\n this.dsChange.emit(this.value);\n };\n\n private handleFocus = () => {\n this.focused = true;\n };\n\n private handleBlur = () => {\n this.focused = false;\n this.touched = true;\n };\n\n private handleClear = () => {\n this.value = '';\n this.dsChange.emit('');\n this.dsClear.emit();\n this.el.querySelector('input')?.focus();\n };\n\n render() {\n const inputId = this.inputId ?? this.generatedId;\n const inactive = this.isInactive || this.disabled || this.formDisabled;\n const filled = this.value.length > 0;\n const dirty = this.value !== this.initialValue;\n const showClear = this.type === 'search' && filled && !inactive && !this.readOnly;\n const showError = this.error && Boolean(this.errorMessage);\n const textVariant = CONTROL_TEXT_VARIANT[this.size];\n const iconSize = ICON_SIZE[this.size];\n const numeric = this.type === 'number';\n\n const describedBy = [\n this.ariaDescribedby,\n showError ? this.errorId : undefined,\n ].filter(Boolean).join(' ') || undefined;\n\n return (\n <Host\n class={{\n 'input-host': true,\n 'ds-field-stack': true,\n 'ds-control-inactive': inactive,\n [`ds-control--${this.size}`]: true,\n ...controlWidthClass(this.width),\n }}\n data-disabled={inactive ? '' : undefined}\n data-readonly={this.readOnly ? '' : undefined}\n data-required={this.required ? '' : undefined}\n data-invalid={this.error ? '' : undefined}\n data-filled={filled ? '' : undefined}\n data-focused={this.focused ? '' : undefined}\n data-dirty={dirty ? '' : undefined}\n data-touched={this.touched ? '' : undefined}\n >\n <div\n class={{\n 'input-control': true,\n 'ds-control-frame': true,\n 'input-control--bordered': this.hasBorder,\n 'input-control--error': this.hasBorder && this.error,\n 'ds-interaction-fill': true,\n [`ds-control--${this.size}`]: true,\n }}\n >\n {this.icon && (\n <span class=\"input-control__prefix ds-control-icon-box ds-interaction-fill__content\" aria-hidden=\"true\">\n <ds-icon name={this.icon} size={iconSize} color=\"inherit\" />\n </span>\n )}\n <input\n type={this.type}\n id={inputId}\n value={this.value}\n placeholder={this.placeholder}\n min={numeric ? this.min : undefined}\n max={numeric ? this.max : undefined}\n step={numeric ? this.step : undefined}\n disabled={inactive}\n readOnly={this.readOnly}\n required={this.required}\n autoFocus={this.autoFocus}\n autoComplete={this.autoComplete}\n inputMode={this.inputMode || undefined}\n enterKeyHint={this.enterKeyHint || undefined}\n class={`native-input ds-control-label-box ds-text--${textVariant.replace('text-', '')} ds-text--regular ds-interaction-fill__content`}\n aria-label={this.ariaLabel}\n aria-labelledby={this.ariaLabelledby}\n aria-describedby={describedBy}\n aria-invalid={this.error ? 'true' : undefined}\n onInput={this.handleInput}\n onFocus={this.handleFocus}\n onBlur={this.handleBlur}\n />\n <span class={{ 'input-control__suffix': true, 'ds-control-icon-box': true, 'input-control__suffix--empty': !this.hasSuffix }}>\n <slot name=\"suffix\" />\n </span>\n {showClear && (\n <ds-button-unfilled\n class=\"input-control__clear\"\n variant=\"icon\"\n size={CLEAR_BUTTON_SIZE[this.size]}\n icon=\"CrossCircle\"\n hasBorder={false}\n rounded\n ariaLabel={this.clearLabel}\n onDsClick={this.handleClear}\n />\n )}\n </div>\n {showError && (\n <ds-text\n class=\"error-text\"\n as=\"div\"\n variant=\"text-body-small\"\n color=\"negative\"\n textId={this.errorId}\n role=\"alert\"\n >\n {this.errorMessage}\n </ds-text>\n )}\n </Host>\n );\n }\n}\n",
|
|
595
652
|
"type": "registry:ui"
|
|
596
653
|
}
|
|
597
654
|
]
|
|
@@ -146,6 +146,7 @@
|
|
|
146
146
|
"exports": {
|
|
147
147
|
"customElement": "ds-loader",
|
|
148
148
|
"react": "DsLoader",
|
|
149
|
+
"vue": "DsLoader",
|
|
149
150
|
"angular": "DsLoader"
|
|
150
151
|
},
|
|
151
152
|
"consumption": {
|
|
@@ -159,6 +160,10 @@
|
|
|
159
160
|
"import": "import { DsLoader } from '@ds-mo/ui/react';",
|
|
160
161
|
"example": "<DsLoader />"
|
|
161
162
|
},
|
|
163
|
+
"vue": {
|
|
164
|
+
"import": "import { DsLoader } from '@ds-mo/ui/vue';",
|
|
165
|
+
"example": "<DsLoader />"
|
|
166
|
+
},
|
|
162
167
|
"angular": {
|
|
163
168
|
"import": "import { DsLoader } from '@ds-mo/ui/angular/ds-loader';",
|
|
164
169
|
"example": "<ds-loader></ds-loader>"
|
|
@@ -168,7 +173,7 @@
|
|
|
168
173
|
"@ds-mo/tokens ^6.5.0",
|
|
169
174
|
"@ds-mo/icons ^7.0.0"
|
|
170
175
|
],
|
|
171
|
-
"frameworks": "Custom Elements; React 18/19 wrappers; Angular 19-22 standalone adapters."
|
|
176
|
+
"frameworks": "Custom Elements; React 18/19 wrappers; Vue 3 wrappers; Angular 19-22 standalone adapters."
|
|
172
177
|
}
|
|
173
178
|
}
|
|
174
179
|
},
|
|
@@ -98,6 +98,7 @@
|
|
|
98
98
|
"exports": {
|
|
99
99
|
"customElement": "ds-markdown",
|
|
100
100
|
"react": "DsMarkdown",
|
|
101
|
+
"vue": "DsMarkdown",
|
|
101
102
|
"angular": "DsMarkdown"
|
|
102
103
|
},
|
|
103
104
|
"consumption": {
|
|
@@ -111,6 +112,10 @@
|
|
|
111
112
|
"import": "import { DsMarkdown } from '@ds-mo/ui/react';",
|
|
112
113
|
"example": "<DsMarkdown />"
|
|
113
114
|
},
|
|
115
|
+
"vue": {
|
|
116
|
+
"import": "import { DsMarkdown } from '@ds-mo/ui/vue';",
|
|
117
|
+
"example": "<DsMarkdown />"
|
|
118
|
+
},
|
|
114
119
|
"angular": {
|
|
115
120
|
"import": "import { DsMarkdown } from '@ds-mo/ui/angular/ds-markdown';",
|
|
116
121
|
"example": "<ds-markdown></ds-markdown>"
|
|
@@ -120,7 +125,7 @@
|
|
|
120
125
|
"@ds-mo/tokens ^6.5.0",
|
|
121
126
|
"@ds-mo/icons ^7.0.0"
|
|
122
127
|
],
|
|
123
|
-
"frameworks": "Custom Elements; React 18/19 wrappers; Angular 19-22 standalone adapters."
|
|
128
|
+
"frameworks": "Custom Elements; React 18/19 wrappers; Vue 3 wrappers; Angular 19-22 standalone adapters."
|
|
124
129
|
}
|
|
125
130
|
}
|
|
126
131
|
},
|
|
@@ -456,6 +456,7 @@
|
|
|
456
456
|
"exports": {
|
|
457
457
|
"customElement": "ds-menu",
|
|
458
458
|
"react": "DsMenu",
|
|
459
|
+
"vue": "DsMenu",
|
|
459
460
|
"angular": "DsMenu"
|
|
460
461
|
},
|
|
461
462
|
"consumption": {
|
|
@@ -469,6 +470,10 @@
|
|
|
469
470
|
"import": "import { DsMenu } from '@ds-mo/ui/react';",
|
|
470
471
|
"example": "<DsMenu />"
|
|
471
472
|
},
|
|
473
|
+
"vue": {
|
|
474
|
+
"import": "import { DsMenu } from '@ds-mo/ui/vue';",
|
|
475
|
+
"example": "<DsMenu />"
|
|
476
|
+
},
|
|
472
477
|
"angular": {
|
|
473
478
|
"import": "import { DsMenu } from '@ds-mo/ui/angular/ds-menu';",
|
|
474
479
|
"example": "<ds-menu></ds-menu>"
|
|
@@ -479,7 +484,7 @@
|
|
|
479
484
|
"@ds-mo/tokens ^6.5.0",
|
|
480
485
|
"@ds-mo/icons ^7.0.0"
|
|
481
486
|
],
|
|
482
|
-
"frameworks": "Custom Elements; React 18/19 wrappers; Angular 19-22 standalone adapters."
|
|
487
|
+
"frameworks": "Custom Elements; React 18/19 wrappers; Vue 3 wrappers; Angular 19-22 standalone adapters."
|
|
483
488
|
}
|
|
484
489
|
}
|
|
485
490
|
},
|
|
@@ -138,6 +138,7 @@
|
|
|
138
138
|
"exports": {
|
|
139
139
|
"customElement": "ds-message-actions",
|
|
140
140
|
"react": "DsMessageActions",
|
|
141
|
+
"vue": "DsMessageActions",
|
|
141
142
|
"angular": "DsMessageActions"
|
|
142
143
|
},
|
|
143
144
|
"consumption": {
|
|
@@ -151,6 +152,10 @@
|
|
|
151
152
|
"import": "import { DsMessageActions } from '@ds-mo/ui/react';",
|
|
152
153
|
"example": "<DsMessageActions />"
|
|
153
154
|
},
|
|
155
|
+
"vue": {
|
|
156
|
+
"import": "import { DsMessageActions } from '@ds-mo/ui/vue';",
|
|
157
|
+
"example": "<DsMessageActions />"
|
|
158
|
+
},
|
|
154
159
|
"angular": {
|
|
155
160
|
"import": "import { DsMessageActions } from '@ds-mo/ui/angular/ds-message-actions';",
|
|
156
161
|
"example": "<ds-message-actions></ds-message-actions>"
|
|
@@ -160,7 +165,7 @@
|
|
|
160
165
|
"@ds-mo/tokens ^6.5.0",
|
|
161
166
|
"@ds-mo/icons ^7.0.0"
|
|
162
167
|
],
|
|
163
|
-
"frameworks": "Custom Elements; React 18/19 wrappers; Angular 19-22 standalone adapters."
|
|
168
|
+
"frameworks": "Custom Elements; React 18/19 wrappers; Vue 3 wrappers; Angular 19-22 standalone adapters."
|
|
164
169
|
}
|
|
165
170
|
}
|
|
166
171
|
},
|
|
@@ -78,6 +78,7 @@
|
|
|
78
78
|
"exports": {
|
|
79
79
|
"customElement": "ds-message-bubble",
|
|
80
80
|
"react": "DsMessageBubble",
|
|
81
|
+
"vue": "DsMessageBubble",
|
|
81
82
|
"angular": "DsMessageBubble"
|
|
82
83
|
},
|
|
83
84
|
"consumption": {
|
|
@@ -91,6 +92,10 @@
|
|
|
91
92
|
"import": "import { DsMessageBubble } from '@ds-mo/ui/react';",
|
|
92
93
|
"example": "<DsMessageBubble />"
|
|
93
94
|
},
|
|
95
|
+
"vue": {
|
|
96
|
+
"import": "import { DsMessageBubble } from '@ds-mo/ui/vue';",
|
|
97
|
+
"example": "<DsMessageBubble />"
|
|
98
|
+
},
|
|
94
99
|
"angular": {
|
|
95
100
|
"import": "import { DsMessageBubble } from '@ds-mo/ui/angular/ds-message-bubble';",
|
|
96
101
|
"example": "<ds-message-bubble></ds-message-bubble>"
|
|
@@ -100,7 +105,7 @@
|
|
|
100
105
|
"@ds-mo/tokens ^6.5.0",
|
|
101
106
|
"@ds-mo/icons ^7.0.0"
|
|
102
107
|
],
|
|
103
|
-
"frameworks": "Custom Elements; React 18/19 wrappers; Angular 19-22 standalone adapters."
|
|
108
|
+
"frameworks": "Custom Elements; React 18/19 wrappers; Vue 3 wrappers; Angular 19-22 standalone adapters."
|
|
104
109
|
}
|
|
105
110
|
}
|
|
106
111
|
},
|
|
@@ -238,6 +238,7 @@
|
|
|
238
238
|
"exports": {
|
|
239
239
|
"customElement": "ds-message-composer",
|
|
240
240
|
"react": "DsMessageComposer",
|
|
241
|
+
"vue": "DsMessageComposer",
|
|
241
242
|
"angular": "DsMessageComposer"
|
|
242
243
|
},
|
|
243
244
|
"consumption": {
|
|
@@ -251,6 +252,10 @@
|
|
|
251
252
|
"import": "import { DsMessageComposer } from '@ds-mo/ui/react';",
|
|
252
253
|
"example": "<DsMessageComposer />"
|
|
253
254
|
},
|
|
255
|
+
"vue": {
|
|
256
|
+
"import": "import { DsMessageComposer } from '@ds-mo/ui/vue';",
|
|
257
|
+
"example": "<DsMessageComposer />"
|
|
258
|
+
},
|
|
254
259
|
"angular": {
|
|
255
260
|
"import": "import { DsMessageComposer } from '@ds-mo/ui/angular/ds-message-composer';",
|
|
256
261
|
"example": "<ds-message-composer></ds-message-composer>"
|
|
@@ -260,7 +265,7 @@
|
|
|
260
265
|
"@ds-mo/tokens ^6.5.0",
|
|
261
266
|
"@ds-mo/icons ^7.0.0"
|
|
262
267
|
],
|
|
263
|
-
"frameworks": "Custom Elements; React 18/19 wrappers; Angular 19-22 standalone adapters."
|
|
268
|
+
"frameworks": "Custom Elements; React 18/19 wrappers; Vue 3 wrappers; Angular 19-22 standalone adapters."
|
|
264
269
|
}
|
|
265
270
|
}
|
|
266
271
|
},
|
|
@@ -175,6 +175,7 @@
|
|
|
175
175
|
"exports": {
|
|
176
176
|
"customElement": "ds-message-scroller",
|
|
177
177
|
"react": "DsMessageScroller",
|
|
178
|
+
"vue": "DsMessageScroller",
|
|
178
179
|
"angular": "DsMessageScroller"
|
|
179
180
|
},
|
|
180
181
|
"consumption": {
|
|
@@ -188,6 +189,10 @@
|
|
|
188
189
|
"import": "import { DsMessageScroller } from '@ds-mo/ui/react';",
|
|
189
190
|
"example": "<DsMessageScroller />"
|
|
190
191
|
},
|
|
192
|
+
"vue": {
|
|
193
|
+
"import": "import { DsMessageScroller } from '@ds-mo/ui/vue';",
|
|
194
|
+
"example": "<DsMessageScroller />"
|
|
195
|
+
},
|
|
191
196
|
"angular": {
|
|
192
197
|
"import": "import { DsMessageScroller } from '@ds-mo/ui/angular/ds-message-scroller';",
|
|
193
198
|
"example": "<ds-message-scroller></ds-message-scroller>"
|
|
@@ -197,7 +202,7 @@
|
|
|
197
202
|
"@ds-mo/tokens ^6.5.0",
|
|
198
203
|
"@ds-mo/icons ^7.0.0"
|
|
199
204
|
],
|
|
200
|
-
"frameworks": "Custom Elements; React 18/19 wrappers; Angular 19-22 standalone adapters."
|
|
205
|
+
"frameworks": "Custom Elements; React 18/19 wrappers; Vue 3 wrappers; Angular 19-22 standalone adapters."
|
|
201
206
|
}
|
|
202
207
|
}
|
|
203
208
|
},
|
|
@@ -230,6 +230,7 @@
|
|
|
230
230
|
"exports": {
|
|
231
231
|
"customElement": "ds-message",
|
|
232
232
|
"react": "DsMessage",
|
|
233
|
+
"vue": "DsMessage",
|
|
233
234
|
"angular": "DsMessage"
|
|
234
235
|
},
|
|
235
236
|
"consumption": {
|
|
@@ -243,6 +244,10 @@
|
|
|
243
244
|
"import": "import { DsMessage } from '@ds-mo/ui/react';",
|
|
244
245
|
"example": "<DsMessage />"
|
|
245
246
|
},
|
|
247
|
+
"vue": {
|
|
248
|
+
"import": "import { DsMessage } from '@ds-mo/ui/vue';",
|
|
249
|
+
"example": "<DsMessage />"
|
|
250
|
+
},
|
|
246
251
|
"angular": {
|
|
247
252
|
"import": "import { DsMessage } from '@ds-mo/ui/angular/ds-message';",
|
|
248
253
|
"example": "<ds-message></ds-message>"
|
|
@@ -252,7 +257,7 @@
|
|
|
252
257
|
"@ds-mo/tokens ^6.5.0",
|
|
253
258
|
"@ds-mo/icons ^7.0.0"
|
|
254
259
|
],
|
|
255
|
-
"frameworks": "Custom Elements; React 18/19 wrappers; Angular 19-22 standalone adapters."
|
|
260
|
+
"frameworks": "Custom Elements; React 18/19 wrappers; Vue 3 wrappers; Angular 19-22 standalone adapters."
|
|
256
261
|
}
|
|
257
262
|
}
|
|
258
263
|
},
|
|
@@ -311,6 +311,7 @@
|
|
|
311
311
|
"exports": {
|
|
312
312
|
"customElement": "ds-mobile-bar-nav",
|
|
313
313
|
"react": "DsMobileBarNav",
|
|
314
|
+
"vue": "DsMobileBarNav",
|
|
314
315
|
"angular": "DsMobileBarNav"
|
|
315
316
|
},
|
|
316
317
|
"consumption": {
|
|
@@ -324,6 +325,10 @@
|
|
|
324
325
|
"import": "import { DsMobileBarNav } from '@ds-mo/ui/react';",
|
|
325
326
|
"example": "<DsMobileBarNav />"
|
|
326
327
|
},
|
|
328
|
+
"vue": {
|
|
329
|
+
"import": "import { DsMobileBarNav } from '@ds-mo/ui/vue';",
|
|
330
|
+
"example": "<DsMobileBarNav />"
|
|
331
|
+
},
|
|
327
332
|
"angular": {
|
|
328
333
|
"import": "import { DsMobileBarNav } from '@ds-mo/ui/angular/ds-mobile-bar-nav';",
|
|
329
334
|
"example": "<ds-mobile-bar-nav></ds-mobile-bar-nav>"
|
|
@@ -334,7 +339,7 @@
|
|
|
334
339
|
"@ds-mo/tokens ^6.5.0",
|
|
335
340
|
"@ds-mo/icons ^7.0.0"
|
|
336
341
|
],
|
|
337
|
-
"frameworks": "Custom Elements; React 18/19 wrappers; Angular 19-22 standalone adapters."
|
|
342
|
+
"frameworks": "Custom Elements; React 18/19 wrappers; Vue 3 wrappers; Angular 19-22 standalone adapters."
|
|
338
343
|
}
|
|
339
344
|
}
|
|
340
345
|
},
|
|
@@ -298,6 +298,7 @@
|
|
|
298
298
|
"exports": {
|
|
299
299
|
"customElement": "ds-mobile-header",
|
|
300
300
|
"react": "DsMobileHeader",
|
|
301
|
+
"vue": "DsMobileHeader",
|
|
301
302
|
"angular": "DsMobileHeader"
|
|
302
303
|
},
|
|
303
304
|
"consumption": {
|
|
@@ -311,6 +312,10 @@
|
|
|
311
312
|
"import": "import { DsMobileHeader } from '@ds-mo/ui/react';",
|
|
312
313
|
"example": "<DsMobileHeader />"
|
|
313
314
|
},
|
|
315
|
+
"vue": {
|
|
316
|
+
"import": "import { DsMobileHeader } from '@ds-mo/ui/vue';",
|
|
317
|
+
"example": "<DsMobileHeader />"
|
|
318
|
+
},
|
|
314
319
|
"angular": {
|
|
315
320
|
"import": "import { DsMobileHeader } from '@ds-mo/ui/angular/ds-mobile-header';",
|
|
316
321
|
"example": "<ds-mobile-header></ds-mobile-header>"
|
|
@@ -321,7 +326,7 @@
|
|
|
321
326
|
"@ds-mo/tokens ^6.5.0",
|
|
322
327
|
"@ds-mo/icons ^7.0.0"
|
|
323
328
|
],
|
|
324
|
-
"frameworks": "Custom Elements; React 18/19 wrappers; Angular 19-22 standalone adapters."
|
|
329
|
+
"frameworks": "Custom Elements; React 18/19 wrappers; Vue 3 wrappers; Angular 19-22 standalone adapters."
|
|
325
330
|
}
|
|
326
331
|
}
|
|
327
332
|
},
|
|
@@ -133,6 +133,7 @@
|
|
|
133
133
|
"exports": {
|
|
134
134
|
"customElement": "ds-mobile-section-switcher",
|
|
135
135
|
"react": "DsMobileSectionSwitcher",
|
|
136
|
+
"vue": "DsMobileSectionSwitcher",
|
|
136
137
|
"angular": "DsMobileSectionSwitcher"
|
|
137
138
|
},
|
|
138
139
|
"consumption": {
|
|
@@ -146,6 +147,10 @@
|
|
|
146
147
|
"import": "import { DsMobileSectionSwitcher } from '@ds-mo/ui/react';",
|
|
147
148
|
"example": "<DsMobileSectionSwitcher />"
|
|
148
149
|
},
|
|
150
|
+
"vue": {
|
|
151
|
+
"import": "import { DsMobileSectionSwitcher } from '@ds-mo/ui/vue';",
|
|
152
|
+
"example": "<DsMobileSectionSwitcher />"
|
|
153
|
+
},
|
|
149
154
|
"angular": {
|
|
150
155
|
"import": "import { DsMobileSectionSwitcher } from '@ds-mo/ui/angular/ds-mobile-section-switcher';",
|
|
151
156
|
"example": "<ds-mobile-section-switcher></ds-mobile-section-switcher>"
|
|
@@ -156,7 +161,7 @@
|
|
|
156
161
|
"@ds-mo/tokens ^6.5.0",
|
|
157
162
|
"@ds-mo/icons ^7.0.0"
|
|
158
163
|
],
|
|
159
|
-
"frameworks": "Custom Elements; React 18/19 wrappers; Angular 19-22 standalone adapters."
|
|
164
|
+
"frameworks": "Custom Elements; React 18/19 wrappers; Vue 3 wrappers; Angular 19-22 standalone adapters."
|
|
160
165
|
}
|
|
161
166
|
}
|
|
162
167
|
},
|
|
@@ -303,6 +303,7 @@
|
|
|
303
303
|
"exports": {
|
|
304
304
|
"customElement": "ds-mobile-sheet-nav",
|
|
305
305
|
"react": "DsMobileSheetNav",
|
|
306
|
+
"vue": "DsMobileSheetNav",
|
|
306
307
|
"angular": "DsMobileSheetNav"
|
|
307
308
|
},
|
|
308
309
|
"consumption": {
|
|
@@ -316,6 +317,10 @@
|
|
|
316
317
|
"import": "import { DsMobileSheetNav } from '@ds-mo/ui/react';",
|
|
317
318
|
"example": "<DsMobileSheetNav />"
|
|
318
319
|
},
|
|
320
|
+
"vue": {
|
|
321
|
+
"import": "import { DsMobileSheetNav } from '@ds-mo/ui/vue';",
|
|
322
|
+
"example": "<DsMobileSheetNav />"
|
|
323
|
+
},
|
|
319
324
|
"angular": {
|
|
320
325
|
"import": "import { DsMobileSheetNav } from '@ds-mo/ui/angular/ds-mobile-sheet-nav';",
|
|
321
326
|
"example": "<ds-mobile-sheet-nav></ds-mobile-sheet-nav>"
|
|
@@ -326,7 +331,7 @@
|
|
|
326
331
|
"@ds-mo/tokens ^6.5.0",
|
|
327
332
|
"@ds-mo/icons ^7.0.0"
|
|
328
333
|
],
|
|
329
|
-
"frameworks": "Custom Elements; React 18/19 wrappers; Angular 19-22 standalone adapters."
|
|
334
|
+
"frameworks": "Custom Elements; React 18/19 wrappers; Vue 3 wrappers; Angular 19-22 standalone adapters."
|
|
330
335
|
}
|
|
331
336
|
}
|
|
332
337
|
},
|
|
@@ -251,6 +251,7 @@
|
|
|
251
251
|
"exports": {
|
|
252
252
|
"customElement": "ds-modal",
|
|
253
253
|
"react": "DsModal",
|
|
254
|
+
"vue": "DsModal",
|
|
254
255
|
"angular": "DsModal"
|
|
255
256
|
},
|
|
256
257
|
"consumption": {
|
|
@@ -264,6 +265,10 @@
|
|
|
264
265
|
"import": "import { DsModal } from '@ds-mo/ui/react';",
|
|
265
266
|
"example": "<DsModal />"
|
|
266
267
|
},
|
|
268
|
+
"vue": {
|
|
269
|
+
"import": "import { DsModal } from '@ds-mo/ui/vue';",
|
|
270
|
+
"example": "<DsModal />"
|
|
271
|
+
},
|
|
267
272
|
"angular": {
|
|
268
273
|
"import": "import { DsModal } from '@ds-mo/ui/angular/ds-modal';",
|
|
269
274
|
"example": "<ds-modal></ds-modal>"
|
|
@@ -273,7 +278,7 @@
|
|
|
273
278
|
"@ds-mo/tokens ^6.5.0",
|
|
274
279
|
"@ds-mo/icons ^7.0.0"
|
|
275
280
|
],
|
|
276
|
-
"frameworks": "Custom Elements; React 18/19 wrappers; Angular 19-22 standalone adapters."
|
|
281
|
+
"frameworks": "Custom Elements; React 18/19 wrappers; Vue 3 wrappers; Angular 19-22 standalone adapters."
|
|
277
282
|
}
|
|
278
283
|
}
|
|
279
284
|
},
|
|
@@ -358,6 +358,7 @@
|
|
|
358
358
|
"exports": {
|
|
359
359
|
"customElement": "ds-pagination",
|
|
360
360
|
"react": "DsPagination",
|
|
361
|
+
"vue": "DsPagination",
|
|
361
362
|
"angular": "DsPagination"
|
|
362
363
|
},
|
|
363
364
|
"consumption": {
|
|
@@ -371,6 +372,10 @@
|
|
|
371
372
|
"import": "import { DsPagination } from '@ds-mo/ui/react';",
|
|
372
373
|
"example": "<DsPagination />"
|
|
373
374
|
},
|
|
375
|
+
"vue": {
|
|
376
|
+
"import": "import { DsPagination } from '@ds-mo/ui/vue';",
|
|
377
|
+
"example": "<DsPagination />"
|
|
378
|
+
},
|
|
374
379
|
"angular": {
|
|
375
380
|
"import": "import { DsPagination } from '@ds-mo/ui/angular/ds-pagination';",
|
|
376
381
|
"example": "<ds-pagination></ds-pagination>"
|
|
@@ -381,7 +386,7 @@
|
|
|
381
386
|
"@ds-mo/tokens ^6.5.0",
|
|
382
387
|
"@ds-mo/icons ^7.0.0"
|
|
383
388
|
],
|
|
384
|
-
"frameworks": "Custom Elements; React 18/19 wrappers; Angular 19-22 standalone adapters."
|
|
389
|
+
"frameworks": "Custom Elements; React 18/19 wrappers; Vue 3 wrappers; Angular 19-22 standalone adapters."
|
|
385
390
|
}
|
|
386
391
|
}
|
|
387
392
|
},
|
|
@@ -579,6 +579,7 @@
|
|
|
579
579
|
"exports": {
|
|
580
580
|
"customElement": "ds-panel-nav",
|
|
581
581
|
"react": "DsPanelNav",
|
|
582
|
+
"vue": "DsPanelNav",
|
|
582
583
|
"angular": "DsPanelNav"
|
|
583
584
|
},
|
|
584
585
|
"consumption": {
|
|
@@ -592,6 +593,10 @@
|
|
|
592
593
|
"import": "import { DsPanelNav } from '@ds-mo/ui/react';",
|
|
593
594
|
"example": "<DsPanelNav />"
|
|
594
595
|
},
|
|
596
|
+
"vue": {
|
|
597
|
+
"import": "import { DsPanelNav } from '@ds-mo/ui/vue';",
|
|
598
|
+
"example": "<DsPanelNav />"
|
|
599
|
+
},
|
|
595
600
|
"angular": {
|
|
596
601
|
"import": "import { DsPanelNav } from '@ds-mo/ui/angular/ds-panel-nav';",
|
|
597
602
|
"example": "<ds-panel-nav></ds-panel-nav>"
|
|
@@ -601,7 +606,7 @@
|
|
|
601
606
|
"@ds-mo/tokens ^6.5.0",
|
|
602
607
|
"@ds-mo/icons ^7.0.0"
|
|
603
608
|
],
|
|
604
|
-
"frameworks": "Custom Elements; React 18/19 wrappers; Angular 19-22 standalone adapters."
|
|
609
|
+
"frameworks": "Custom Elements; React 18/19 wrappers; Vue 3 wrappers; Angular 19-22 standalone adapters."
|
|
605
610
|
}
|
|
606
611
|
}
|
|
607
612
|
},
|