@xleddyl/443-components-vue 0.5.0 → 0.6.2
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 +25 -6
- package/dist/chart/BarChart.vue +11 -4
- package/dist/chart/BarChart.vue.d.ts +2 -0
- package/dist/chart/ChartLegend.vue +43 -4
- package/dist/chart/ChartLegend.vue.d.ts +4 -2
- package/dist/chart/ChartPanel.vue +10 -10
- package/dist/chart/ChartPanel.vue.d.ts +11 -8
- package/dist/chart/ChartSummary.vue +8 -3
- package/dist/chart/ChartSummary.vue.d.ts +3 -1
- package/dist/chart/DoughnutChart.vue +11 -4
- package/dist/chart/LineChart.vue +8 -2
- package/dist/chart/LineChart.vue.d.ts +2 -0
- package/dist/chart/chart.css +19 -0
- package/dist/chart/patterns.d.ts +6 -0
- package/dist/chart/patterns.mjs +79 -0
- package/dist/chart/types.d.ts +5 -0
- package/dist/chart/useChartColors.mjs +1 -1
- package/dist/components/core/Button.vue +11 -1
- package/dist/components/core/Button.vue.d.ts +1 -1
- package/dist/components/core/FieldMessage.vue +6 -0
- package/dist/components/core/FieldMessage.vue.d.ts +1 -1
- package/dist/components/core/Form.vue +18 -1
- package/dist/components/core/FormAlerts.vue +41 -3
- package/dist/components/core/FormField.vue +43 -24
- package/dist/components/core/Input.vue.d.ts +6 -6
- package/dist/components/core/Root.vue +6 -1
- package/dist/components/core/Root.vue.d.ts +2 -2
- package/dist/components/core/Spinner.vue +6 -11
- package/dist/components/core/Spinner.vue.d.ts +2 -2
- package/dist/components/core/Textarea.vue.d.ts +2 -2
- package/dist/components/core/VisuallyHidden.vue.d.ts +2 -2
- package/dist/components/data/Avatar.vue +8 -5
- package/dist/components/data/AvatarGroup.vue +6 -3
- package/dist/components/data/Badge.vue.d.ts +1 -1
- package/dist/components/data/FilterPills.vue +18 -2
- package/dist/components/data/Pagination.vue +24 -18
- package/dist/components/data/Pagination.vue.d.ts +2 -2
- package/dist/components/data/SelectionBar.vue +32 -3
- package/dist/components/data/Stat.vue +7 -1
- package/dist/components/data/Stat.vue.d.ts +2 -2
- package/dist/components/data/Table.vue +62 -14
- package/dist/components/data/Tag.vue +24 -4
- package/dist/components/data/Tag.vue.d.ts +3 -3
- package/dist/components/data/Timeline.vue +12 -1
- package/dist/components/data/Tree.vue +137 -36
- package/dist/components/data/Tree.vue.d.ts +13 -14
- package/dist/components/data/types.d.ts +2 -1
- package/dist/components/feedback/Alert.vue +18 -9
- package/dist/components/feedback/Alert.vue.d.ts +2 -2
- package/dist/components/feedback/LoadingOverlay.vue +35 -3
- package/dist/components/feedback/Meter.vue +28 -3
- package/dist/components/feedback/Progress.vue +2 -7
- package/dist/components/feedback/Progress.vue.d.ts +1 -1
- package/dist/components/feedback/ProgressRing.vue +2 -6
- package/dist/components/feedback/ProgressRing.vue.d.ts +1 -1
- package/dist/components/forms/Calendar.vue +49 -26
- package/dist/components/forms/Calendar.vue.d.ts +9 -5
- package/dist/components/forms/CheckboxGroup.vue +14 -4
- package/dist/components/forms/CheckboxGroup.vue.d.ts +1 -0
- package/dist/components/forms/ColorInput.vue +68 -15
- package/dist/components/forms/ColorInput.vue.d.ts +16 -13
- package/dist/components/forms/Combobox.vue +18 -4
- package/dist/components/forms/DateInput.vue.d.ts +6 -6
- package/dist/components/forms/DatePicker.vue +23 -7
- package/dist/components/forms/DatePicker.vue.d.ts +4 -2
- package/dist/components/forms/FileInput.vue +31 -13
- package/dist/components/forms/FileInput.vue.d.ts +2 -2
- package/dist/components/forms/InputAddon.vue +18 -2
- package/dist/components/forms/InputGroup.vue +27 -0
- package/dist/components/forms/InputGroup.vue.d.ts +2 -0
- package/dist/components/forms/NumberInput.vue +6 -7
- package/dist/components/forms/NumberInput.vue.d.ts +6 -6
- package/dist/components/forms/PasswordInput.vue +12 -6
- package/dist/components/forms/PasswordInput.vue.d.ts +6 -7
- package/dist/components/forms/PinInput.vue +11 -1
- package/dist/components/forms/PinInput.vue.d.ts +8 -6
- package/dist/components/forms/RadioGroup.vue +15 -5
- package/dist/components/forms/RadioGroup.vue.d.ts +1 -0
- package/dist/components/forms/SegmentedControl.vue +15 -10
- package/dist/components/forms/SegmentedControl.vue.d.ts +1 -0
- package/dist/components/forms/Slider.vue +9 -0
- package/dist/components/forms/Slider.vue.d.ts +8 -6
- package/dist/components/forms/Switch.vue +7 -0
- package/dist/components/forms/Switch.vue.d.ts +2 -2
- package/dist/components/forms/TimeInput.vue.d.ts +6 -6
- package/dist/components/forms/types.d.ts +4 -0
- package/dist/components/layout/Accordion.vue.d.ts +2 -2
- package/dist/components/layout/AppShell.vue +40 -18
- package/dist/components/layout/AppShell.vue.d.ts +11 -9
- package/dist/components/layout/Card.vue +50 -16
- package/dist/components/layout/Card.vue.d.ts +13 -11
- package/dist/components/layout/CopyButton.vue +13 -5
- package/dist/components/layout/CopyButton.vue.d.ts +3 -3
- package/dist/components/layout/NavLink.vue +10 -1
- package/dist/components/layout/NavLink.vue.d.ts +2 -2
- package/dist/components/layout/PageHeader.vue +2 -2
- package/dist/components/layout/Separator.vue +6 -3
- package/dist/components/layout/Sidebar.vue +14 -7
- package/dist/components/layout/Sidebar.vue.d.ts +0 -2
- package/dist/components/layout/SidebarNav.vue +16 -44
- package/dist/components/layout/Stack.vue.d.ts +2 -2
- package/dist/components/layout/Tabs.vue +10 -18
- package/dist/components/layout/Tabs.vue.d.ts +2 -2
- package/dist/components/layout/Toolbar.vue +10 -4
- package/dist/components/layout/Toolbar.vue.d.ts +1 -0
- package/dist/components/layout/types.d.ts +1 -0
- package/dist/components/overlays/CommandPalette.vue +8 -4
- package/dist/components/overlays/CommandPalette.vue.d.ts +3 -8
- package/dist/components/overlays/ConfirmDialog.vue +7 -5
- package/dist/components/overlays/ConfirmDialog.vue.d.ts +12 -8
- package/dist/components/overlays/ConfirmHost.vue +22 -19
- package/dist/components/overlays/ConfirmHost.vue.d.ts +8 -6
- package/dist/components/overlays/ContextMenu.vue +9 -11
- package/dist/components/overlays/ContextMenu.vue.d.ts +2 -2
- package/dist/components/overlays/Drawer.vue +2 -0
- package/dist/components/overlays/Drawer.vue.d.ts +4 -2
- package/dist/components/overlays/DropdownMenu.vue +13 -21
- package/dist/components/overlays/DropdownMenu.vue.d.ts +2 -2
- package/dist/components/overlays/HoverCard.vue +8 -2
- package/dist/components/overlays/HoverCard.vue.d.ts +2 -2
- package/dist/components/overlays/Modal.vue +2 -0
- package/dist/components/overlays/Modal.vue.d.ts +4 -2
- package/dist/components/overlays/Popover.vue +19 -4
- package/dist/components/overlays/Popover.vue.d.ts +2 -2
- package/dist/components/overlays/Toaster.vue +39 -7
- package/dist/components/overlays/Tooltip.vue +39 -14
- package/dist/components/overlays/types.d.ts +6 -0
- package/dist/components/templates/AccountMenu.vue.d.ts +2 -2
- package/dist/components/templates/AppearanceSettings.vue +83 -77
- package/dist/components/templates/AppearanceSettings.vue.d.ts +2 -2
- package/dist/components/templates/AuthLayout.vue +2 -2
- package/dist/components/templates/Brand.vue.d.ts +2 -2
- package/dist/components/templates/DashboardLayout.vue +3 -7
- package/dist/components/templates/DashboardLayout.vue.d.ts +8 -18
- package/dist/components/templates/DetailPage.vue +3 -1
- package/dist/components/templates/DetailPage.vue.d.ts +2 -2
- package/dist/components/templates/ErrorPage.vue +11 -5
- package/dist/components/templates/ErrorPage.vue.d.ts +10 -6
- package/dist/components/templates/FormPage.vue +16 -3
- package/dist/components/templates/ListPage.vue +19 -6
- package/dist/components/templates/ListPage.vue.d.ts +1 -0
- package/dist/components/templates/NotFoundPage.vue +2 -0
- package/dist/components/templates/NotFoundPage.vue.d.ts +4 -0
- package/dist/components/templates/SaveBar.vue +18 -3
- package/dist/components/templates/SaveBar.vue.d.ts +5 -5
- package/dist/components/templates/SettingsGroup.vue +1 -1
- package/dist/components/templates/SettingsGroup.vue.d.ts +3 -1
- package/dist/components/templates/SettingsModal.vue +73 -46
- package/dist/components/templates/SettingsModal.vue.d.ts +9 -11
- package/dist/components/templates/SettingsPage.vue.d.ts +2 -2
- package/dist/components/templates/SettingsSection.vue.d.ts +4 -2
- package/dist/components/templates/types.d.ts +4 -0
- package/dist/composables/useAlert.mjs +5 -10
- package/dist/composables/useConfirm.mjs +5 -5
- package/dist/composables/useField.d.ts +4 -0
- package/dist/composables/useField.mjs +16 -5
- package/dist/composables/useFileDrop.mjs +2 -1
- package/dist/composables/useOverlay.mjs +2 -1
- package/dist/composables/usePreset.mjs +4 -10
- package/dist/composables/usePrompt.mjs +6 -13
- package/dist/composables/useScrollLock.mjs +4 -3
- package/dist/composables/useTheme.mjs +3 -11
- package/dist/composables/useToast.mjs +2 -1
- package/dist/editor/RichTextEditor.vue +31 -6
- package/dist/editor/RichTextEditor.vue.d.ts +2 -2
- package/dist/editor/rich-text-editor.css +9 -4
- package/dist/grid/DataGrid.vue +72 -12
- package/dist/grid/GridToolbar.vue +1 -1
- package/dist/grid/GridToolbar.vue.d.ts +2 -2
- package/dist/grid/cells/BadgeCell.vue +3 -1
- package/dist/grid/cells/BadgeCell.vue.d.ts +17 -3
- package/dist/grid/cells/DateCell.vue +3 -1
- package/dist/grid/cells/DateCell.vue.d.ts +17 -3
- package/dist/grid/cells/EmptyCell.vue +15 -0
- package/dist/grid/cells/EmptyCell.vue.d.ts +392 -0
- package/dist/grid/cells/LinkCell.vue +9 -2
- package/dist/grid/cells/LinkCell.vue.d.ts +17 -3
- package/dist/grid/data-grid.css +5 -5
- package/dist/grid/types.d.ts +2 -0
- package/dist/internal/core/ButtonContent.vue +3 -0
- package/dist/internal/core/LiveRegion.vue +26 -0
- package/dist/internal/core/LiveRegion.vue.d.ts +393 -0
- package/dist/internal/core/copy.d.ts +6 -0
- package/dist/internal/core/copy.mjs +14 -0
- package/dist/internal/core/focus.d.ts +6 -0
- package/dist/internal/core/focus.mjs +46 -0
- package/dist/internal/core/intl.d.ts +4 -2
- package/dist/internal/core/intl.mjs +23 -22
- package/dist/internal/core/live.d.ts +6 -0
- package/dist/internal/core/live.mjs +22 -0
- package/dist/internal/core/preset.d.ts +0 -1
- package/dist/internal/core/preset.mjs +4 -14
- package/dist/internal/core/resize.d.ts +1 -0
- package/dist/internal/core/resize.mjs +11 -0
- package/dist/internal/core/roving.d.ts +7 -0
- package/dist/internal/core/roving.mjs +19 -1
- package/dist/internal/core/scroll-edges.d.ts +5 -0
- package/dist/internal/core/scroll-edges.mjs +63 -0
- package/dist/internal/core/storage.d.ts +2 -0
- package/dist/internal/core/storage.mjs +8 -0
- package/dist/internal/core/theme.d.ts +0 -1
- package/dist/internal/core/theme.mjs +4 -13
- package/dist/internal/core/tone.d.ts +1 -0
- package/dist/internal/core/tone.mjs +4 -0
- package/dist/internal/core/transition.d.ts +1 -0
- package/dist/internal/core/transition.mjs +20 -0
- package/dist/internal/data/rows.mjs +6 -5
- package/dist/internal/data/tree.d.ts +2 -3
- package/dist/internal/feedback/LoadingHost.vue +16 -6
- package/dist/internal/feedback/loading.mjs +2 -1
- package/dist/internal/feedback/progress.d.ts +12 -0
- package/dist/internal/feedback/progress.mjs +13 -0
- package/dist/internal/floating/layer.d.ts +1 -1
- package/dist/internal/floating/layer.mjs +17 -10
- package/dist/internal/forms/keys.d.ts +4 -0
- package/dist/internal/forms/keys.mjs +1 -0
- package/dist/internal/forms/name.d.ts +2 -0
- package/dist/internal/forms/name.mjs +12 -0
- package/dist/internal/forms/standard-schema.d.ts +0 -2
- package/dist/internal/forms/standard-schema.mjs +0 -18
- package/dist/internal/layout/NavGroup.vue +104 -0
- package/dist/internal/layout/NavGroup.vue.d.ts +412 -0
- package/dist/internal/overlays/DialogFrame.vue +53 -6
- package/dist/internal/overlays/DialogFrame.vue.d.ts +5 -2
- package/dist/internal/overlays/MenuList.vue +4 -11
- package/dist/internal/overlays/MenuList.vue.d.ts +6 -6
- package/dist/internal/overlays/OverlayView.vue +2 -0
- package/dist/internal/overlays/OverlayView.vue.d.ts +8 -6
- package/dist/internal/overlays/confirm.d.ts +6 -1
- package/dist/internal/overlays/confirm.mjs +5 -2
- package/dist/internal/overlays/dialog.d.ts +1 -0
- package/dist/internal/overlays/dialog.mjs +9 -9
- package/dist/internal/overlays/hover.d.ts +1 -0
- package/dist/internal/overlays/hover.mjs +20 -3
- package/dist/internal/overlays/menu.d.ts +9 -0
- package/dist/internal/overlays/menu.mjs +15 -0
- package/dist/internal/overlays/stack.d.ts +1 -0
- package/dist/locale/en.mjs +70 -18
- package/dist/locale/index.d.ts +1 -1
- package/dist/locale/index.mjs +5 -11
- package/dist/locale/it.mjs +70 -18
- package/dist/locale/types.d.ts +54 -2
- package/dist/nuxt/runtime/RouteAnnouncer.vue +21 -0
- package/dist/nuxt/runtime/RouteAnnouncer.vue.d.ts +3 -0
- package/dist/nuxt/runtime/layout-head.d.ts +2 -0
- package/dist/nuxt/runtime/layout-head.mjs +13 -0
- package/dist/nuxt/runtime/layouts/auth.vue +4 -0
- package/dist/nuxt/runtime/layouts/auth.vue.d.ts +2 -2
- package/dist/nuxt/runtime/layouts/dashboard.vue +4 -0
- package/dist/nuxt/runtime/layouts/dashboard.vue.d.ts +2 -2
- package/dist/nuxt/runtime/locale.mjs +9 -1
- package/dist/nuxt/runtime/theme.mjs +17 -12
- package/dist/styles/base.css +0 -13
- package/dist/styles/core/button.css +8 -8
- package/dist/styles/core/field-message.css +2 -2
- package/dist/styles/core/form-field.css +11 -2
- package/dist/styles/core/input.css +4 -7
- package/dist/styles/core/kbd.css +0 -1
- package/dist/styles/data/badge.css +8 -4
- package/dist/styles/data/description-list.css +2 -2
- package/dist/styles/data/filter-pills.css +5 -8
- package/dist/styles/data/pagination.css +2 -2
- package/dist/styles/data/stat.css +3 -3
- package/dist/styles/data/table.css +2 -2
- package/dist/styles/data/tag.css +1 -2
- package/dist/styles/data/timeline.css +1 -1
- package/dist/styles/data/tree.css +31 -10
- package/dist/styles/feedback/alert.css +0 -3
- package/dist/styles/feedback/loading-host.css +4 -0
- package/dist/styles/feedback/loading-overlay.css +4 -0
- package/dist/styles/forced-colors.css +215 -0
- package/dist/styles/forms/calendar.css +2 -2
- package/dist/styles/forms/choice.css +2 -2
- package/dist/styles/forms/color-input.css +1 -1
- package/dist/styles/forms/combobox.css +2 -24
- package/dist/styles/forms/date-input.css +2 -2
- package/dist/styles/forms/date-picker.css +3 -7
- package/dist/styles/forms/file-input.css +4 -3
- package/dist/styles/forms/input-group.css +6 -0
- package/dist/styles/forms/number-input.css +2 -2
- package/dist/styles/forms/password-input.css +5 -2
- package/dist/styles/forms/pin-input.css +4 -2
- package/dist/styles/forms/segmented.css +2 -2
- package/dist/styles/forms/select.css +6 -6
- package/dist/styles/forms/slider.css +5 -4
- package/dist/styles/forms/switch.css +5 -1
- package/dist/styles/index.css +1 -0
- package/dist/styles/layout/app-shell.css +15 -3
- package/dist/styles/layout/copy-button.css +1 -1
- package/dist/styles/layout/nav-link.css +1 -33
- package/dist/styles/layout/separator.css +1 -1
- package/dist/styles/layout/sidebar-nav.css +15 -4
- package/dist/styles/layout/sidebar.css +20 -6
- package/dist/styles/layout/tabs.css +9 -4
- package/dist/styles/layout/theme-switch.css +0 -6
- package/dist/styles/overlays/command.css +9 -15
- package/dist/styles/overlays/confirm.css +1 -1
- package/dist/styles/overlays/drawer.css +0 -1
- package/dist/styles/overlays/menu.css +2 -17
- package/dist/styles/overlays/modal.css +29 -6
- package/dist/styles/overlays/toast.css +1 -2
- package/dist/styles/presets.css +4 -4
- package/dist/styles/shared.css +96 -3
- package/dist/styles/templates/account-menu.css +3 -3
- package/dist/styles/templates/auth-layout.css +1 -1
- package/dist/styles/templates/brand.css +3 -3
- package/dist/styles/templates/empty-page.css +1 -1
- package/dist/styles/templates/form-page.css +10 -0
- package/dist/styles/templates/save-bar.css +10 -0
- package/dist/styles/templates/settings-modal.css +42 -44
- package/dist/styles/templates/settings-page.css +3 -3
- package/dist/styles/tokens.css +12 -2
- package/package.json +1 -1
- package/dist/internal/overlays/focus.d.ts +0 -1
- package/dist/internal/overlays/focus.mjs +0 -24
|
@@ -17,12 +17,15 @@ declare const __VLS_export: import("vue").DefineComponent<{
|
|
|
17
17
|
value?: any;
|
|
18
18
|
form?: string | undefined;
|
|
19
19
|
pattern?: string | undefined;
|
|
20
|
+
checked?: (boolean | "true" | "false") | any[] | Set<any> | undefined;
|
|
21
|
+
indeterminate?: boolean | undefined;
|
|
20
22
|
title?: string | undefined;
|
|
21
23
|
style?: unknown;
|
|
22
24
|
list?: string | undefined;
|
|
23
25
|
results?: (string | number) | undefined;
|
|
24
26
|
placeholder?: string | undefined;
|
|
25
27
|
name?: string | undefined;
|
|
28
|
+
dir?: string | undefined;
|
|
26
29
|
class?: unknown;
|
|
27
30
|
role?: string | undefined;
|
|
28
31
|
'aria-label'?: string | undefined;
|
|
@@ -180,7 +183,6 @@ declare const __VLS_export: import("vue").DefineComponent<{
|
|
|
180
183
|
accesskey?: string | undefined;
|
|
181
184
|
contenteditable?: (boolean | "true" | "false") | "inherit" | "plaintext-only" | undefined;
|
|
182
185
|
contextmenu?: string | undefined;
|
|
183
|
-
dir?: string | undefined;
|
|
184
186
|
draggable?: (boolean | "true" | "false") | undefined;
|
|
185
187
|
enterkeyhint?: "enter" | "done" | "go" | "next" | "previous" | "search" | "send" | undefined;
|
|
186
188
|
enterKeyHint?: import("vue").HTMLAttributes["enterkeyhint"];
|
|
@@ -233,9 +235,7 @@ declare const __VLS_export: import("vue").DefineComponent<{
|
|
|
233
235
|
accept?: string | undefined;
|
|
234
236
|
alt?: string | undefined;
|
|
235
237
|
capture?: boolean | "user" | "environment" | undefined;
|
|
236
|
-
checked?: (boolean | "true" | "false") | any[] | Set<any> | undefined;
|
|
237
238
|
crossorigin?: string | undefined;
|
|
238
|
-
indeterminate?: boolean | undefined;
|
|
239
239
|
maxlength?: (string | number) | undefined;
|
|
240
240
|
minlength?: (string | number) | undefined;
|
|
241
241
|
multiple?: (boolean | "true" | "false") | undefined;
|
|
@@ -262,12 +262,15 @@ declare const __VLS_export: import("vue").DefineComponent<{
|
|
|
262
262
|
value?: any;
|
|
263
263
|
form?: string | undefined;
|
|
264
264
|
pattern?: string | undefined;
|
|
265
|
+
checked?: (boolean | "true" | "false") | any[] | Set<any> | undefined;
|
|
266
|
+
indeterminate?: boolean | undefined;
|
|
265
267
|
title?: string | undefined;
|
|
266
268
|
style?: unknown;
|
|
267
269
|
list?: string | undefined;
|
|
268
270
|
results?: (string | number) | undefined;
|
|
269
271
|
placeholder?: string | undefined;
|
|
270
272
|
name?: string | undefined;
|
|
273
|
+
dir?: string | undefined;
|
|
271
274
|
class?: unknown;
|
|
272
275
|
role?: string | undefined;
|
|
273
276
|
'aria-label'?: string | undefined;
|
|
@@ -425,7 +428,6 @@ declare const __VLS_export: import("vue").DefineComponent<{
|
|
|
425
428
|
accesskey?: string | undefined;
|
|
426
429
|
contenteditable?: (boolean | "true" | "false") | "inherit" | "plaintext-only" | undefined;
|
|
427
430
|
contextmenu?: string | undefined;
|
|
428
|
-
dir?: string | undefined;
|
|
429
431
|
draggable?: (boolean | "true" | "false") | undefined;
|
|
430
432
|
enterkeyhint?: "enter" | "done" | "go" | "next" | "previous" | "search" | "send" | undefined;
|
|
431
433
|
enterKeyHint?: import("vue").HTMLAttributes["enterkeyhint"];
|
|
@@ -478,9 +480,7 @@ declare const __VLS_export: import("vue").DefineComponent<{
|
|
|
478
480
|
accept?: string | undefined;
|
|
479
481
|
alt?: string | undefined;
|
|
480
482
|
capture?: boolean | "user" | "environment" | undefined;
|
|
481
|
-
checked?: (boolean | "true" | "false") | any[] | Set<any> | undefined;
|
|
482
483
|
crossorigin?: string | undefined;
|
|
483
|
-
indeterminate?: boolean | undefined;
|
|
484
484
|
maxlength?: (string | number) | undefined;
|
|
485
485
|
minlength?: (string | number) | undefined;
|
|
486
486
|
multiple?: (boolean | "true" | "false") | undefined;
|
|
@@ -11,11 +11,19 @@
|
|
|
11
11
|
<button
|
|
12
12
|
ref="triggerRef"
|
|
13
13
|
:id="control.id.value"
|
|
14
|
+
:aria-labelledby="
|
|
15
|
+
control.labelledBy.value && !$attrs['aria-label'] ? `${control.labelledBy.value} ${valueId}` : void 0
|
|
16
|
+
"
|
|
14
17
|
v-bind="$attrs"
|
|
15
18
|
:disabled="control.disabled.value || void 0"
|
|
16
|
-
:aria-required="control.required.value ? 'true' : void 0"
|
|
17
19
|
:aria-invalid="control.invalid.value ? 'true' : void 0"
|
|
18
|
-
:aria-describedby="
|
|
20
|
+
:aria-describedby="
|
|
21
|
+
joinIds(
|
|
22
|
+
$attrs['aria-describedby'],
|
|
23
|
+
control.describedBy.value,
|
|
24
|
+
readonly ? readonlyId : void 0
|
|
25
|
+
)
|
|
26
|
+
"
|
|
19
27
|
:popovertarget="interactive ? panelId : void 0"
|
|
20
28
|
type="button"
|
|
21
29
|
class="k-field k-date-picker-trigger"
|
|
@@ -32,15 +40,17 @@
|
|
|
32
40
|
:aria-controls="panelId"
|
|
33
41
|
>
|
|
34
42
|
<Icon name="calendar" class="k-date-picker-icon" />
|
|
35
|
-
<span class="k-date-picker-value">{{
|
|
43
|
+
<span :id="valueId" class="k-date-picker-value">{{
|
|
44
|
+
displayValue || placeholderText
|
|
45
|
+
}}</span>
|
|
36
46
|
<Icon name="chevron-up-down" class="k-date-picker-chevron" />
|
|
37
47
|
</button>
|
|
48
|
+
<span v-if="readonly" :id="readonlyId" hidden>{{ t("common.readonly") }}</span>
|
|
38
49
|
<button
|
|
39
50
|
v-if="showClear"
|
|
40
51
|
type="button"
|
|
41
52
|
class="k-date-picker-clear"
|
|
42
53
|
:aria-label="clearText"
|
|
43
|
-
:title="clearText"
|
|
44
54
|
@click="clear"
|
|
45
55
|
>
|
|
46
56
|
<Icon name="x-mark" />
|
|
@@ -53,7 +63,7 @@
|
|
|
53
63
|
class="k-floating k-form-popover k-date-picker-panel"
|
|
54
64
|
:data-side="layer.side.value"
|
|
55
65
|
:aria-label="dialogText"
|
|
56
|
-
@keydown.esc.stop
|
|
66
|
+
@keydown.esc.stop="close"
|
|
57
67
|
>
|
|
58
68
|
<Calendar
|
|
59
69
|
ref="calendarRef"
|
|
@@ -64,6 +74,7 @@
|
|
|
64
74
|
:is-date-disabled="isDateDisabled"
|
|
65
75
|
:locale="resolvedLocale"
|
|
66
76
|
:week-starts-on="weekStartsOn"
|
|
77
|
+
:level="level"
|
|
67
78
|
@update:model-value="onCalendarChange"
|
|
68
79
|
>
|
|
69
80
|
<template v-if="$slots.footer" #footer><slot name="footer" :close="close" /></template>
|
|
@@ -104,6 +115,7 @@ const props = defineProps({
|
|
|
104
115
|
clearLabel: { type: String, required: false },
|
|
105
116
|
dialogLabel: { type: String, required: false },
|
|
106
117
|
closeOnSelect: { type: Boolean, required: false, default: true },
|
|
118
|
+
level: { type: Number, required: false },
|
|
107
119
|
invalid: { type: Boolean, required: false, default: void 0 },
|
|
108
120
|
disabled: { type: Boolean, required: false },
|
|
109
121
|
readonly: { type: Boolean, required: false },
|
|
@@ -119,13 +131,16 @@ const dialogText = computed(() => props.dialogLabel ?? t("datePicker.dialog"));
|
|
|
119
131
|
const model = defineModel({ type: null });
|
|
120
132
|
const baseId = useId();
|
|
121
133
|
const panelId = `${baseId}-dialog`;
|
|
134
|
+
const valueId = `${baseId}-value`;
|
|
135
|
+
const readonlyId = `${baseId}-readonly`;
|
|
122
136
|
const triggerRef = useTemplateRef("triggerRef");
|
|
123
137
|
const panelRef = useTemplateRef("panelRef");
|
|
124
138
|
const calendarRef = useTemplateRef("calendarRef");
|
|
125
139
|
const control = useFieldControl({
|
|
126
140
|
invalid: () => props.invalid,
|
|
127
141
|
disabled: () => props.disabled,
|
|
128
|
-
required: () => props.required
|
|
142
|
+
required: () => props.required,
|
|
143
|
+
requiredHint: true
|
|
129
144
|
});
|
|
130
145
|
const layer = useFloatingLayer({
|
|
131
146
|
floating: panelRef,
|
|
@@ -146,7 +161,8 @@ const displayValue = computed(() => {
|
|
|
146
161
|
if (!props.range) return show(singleValue.value);
|
|
147
162
|
const { start, end } = rangeValue.value;
|
|
148
163
|
if (!start) return "";
|
|
149
|
-
return t("datePicker.
|
|
164
|
+
if (!end) return t("datePicker.rangePending", { start: show(start) });
|
|
165
|
+
return t("datePicker.range", { start: show(start), end: show(end) });
|
|
150
166
|
});
|
|
151
167
|
const showClear = computed(
|
|
152
168
|
() => props.clearable && interactive.value && Boolean(displayValue.value)
|
|
@@ -22,6 +22,7 @@ declare const __VLS_base: import("vue").DefineComponent<{
|
|
|
22
22
|
clearLabel?: string;
|
|
23
23
|
dialogLabel?: string;
|
|
24
24
|
closeOnSelect?: boolean;
|
|
25
|
+
level?: 1 | 2 | 3 | 4 | 5 | 6;
|
|
25
26
|
invalid?: boolean;
|
|
26
27
|
disabled?: (boolean | "true" | "false") | undefined;
|
|
27
28
|
readonly?: boolean;
|
|
@@ -35,6 +36,7 @@ declare const __VLS_base: import("vue").DefineComponent<{
|
|
|
35
36
|
form?: string | undefined | undefined;
|
|
36
37
|
title?: string | undefined | undefined;
|
|
37
38
|
results?: (string | number) | undefined;
|
|
39
|
+
dir?: string | undefined | undefined;
|
|
38
40
|
role?: string | undefined | undefined;
|
|
39
41
|
'aria-label'?: string | undefined | undefined;
|
|
40
42
|
'aria-hidden'?: (boolean | "true" | "false") | undefined;
|
|
@@ -190,7 +192,6 @@ declare const __VLS_base: import("vue").DefineComponent<{
|
|
|
190
192
|
accesskey?: string | undefined | undefined;
|
|
191
193
|
contenteditable?: (boolean | "true" | "false") | "inherit" | "plaintext-only" | undefined;
|
|
192
194
|
contextmenu?: string | undefined | undefined;
|
|
193
|
-
dir?: string | undefined | undefined;
|
|
194
195
|
draggable?: (boolean | "true" | "false") | undefined;
|
|
195
196
|
enterkeyhint?: "enter" | "done" | "go" | "next" | "previous" | "search" | "send" | undefined | undefined;
|
|
196
197
|
enterKeyHint?: "search" | "done" | "previous" | "next" | "enter" | "go" | "send" | undefined;
|
|
@@ -250,6 +251,7 @@ declare const __VLS_base: import("vue").DefineComponent<{
|
|
|
250
251
|
clearLabel?: string;
|
|
251
252
|
dialogLabel?: string;
|
|
252
253
|
closeOnSelect?: boolean;
|
|
254
|
+
level?: 1 | 2 | 3 | 4 | 5 | 6;
|
|
253
255
|
invalid?: boolean;
|
|
254
256
|
disabled?: (boolean | "true" | "false") | undefined;
|
|
255
257
|
readonly?: boolean;
|
|
@@ -263,6 +265,7 @@ declare const __VLS_base: import("vue").DefineComponent<{
|
|
|
263
265
|
form?: string | undefined | undefined;
|
|
264
266
|
title?: string | undefined | undefined;
|
|
265
267
|
results?: (string | number) | undefined;
|
|
268
|
+
dir?: string | undefined | undefined;
|
|
266
269
|
role?: string | undefined | undefined;
|
|
267
270
|
'aria-label'?: string | undefined | undefined;
|
|
268
271
|
'aria-hidden'?: (boolean | "true" | "false") | undefined;
|
|
@@ -418,7 +421,6 @@ declare const __VLS_base: import("vue").DefineComponent<{
|
|
|
418
421
|
accesskey?: string | undefined | undefined;
|
|
419
422
|
contenteditable?: (boolean | "true" | "false") | "inherit" | "plaintext-only" | undefined;
|
|
420
423
|
contextmenu?: string | undefined | undefined;
|
|
421
|
-
dir?: string | undefined | undefined;
|
|
422
424
|
draggable?: (boolean | "true" | "false") | undefined;
|
|
423
425
|
enterkeyhint?: "enter" | "done" | "go" | "next" | "previous" | "search" | "send" | undefined | undefined;
|
|
424
426
|
enterKeyHint?: "search" | "done" | "previous" | "next" | "enter" | "go" | "send" | undefined;
|
|
@@ -19,9 +19,11 @@
|
|
|
19
19
|
ref="buttonRef"
|
|
20
20
|
:id="control.id.value"
|
|
21
21
|
data-k-shake
|
|
22
|
+
:aria-labelledby="
|
|
23
|
+
$attrs['aria-label'] ? void 0 : joinIds(control.labelledBy.value, titleId)
|
|
24
|
+
"
|
|
22
25
|
v-bind="$attrs"
|
|
23
26
|
:disabled="control.disabled.value || void 0"
|
|
24
|
-
:aria-required="control.required.value ? 'true' : void 0"
|
|
25
27
|
:aria-invalid="control.invalid.value ? 'true' : void 0"
|
|
26
28
|
:aria-disabled="readonly || loading ? 'true' : void 0"
|
|
27
29
|
:aria-busy="loading ? 'true' : void 0"
|
|
@@ -41,7 +43,7 @@
|
|
|
41
43
|
<Icon v-else :name="over ? 'arrow-up-tray' : icon" />
|
|
42
44
|
</span>
|
|
43
45
|
<span class="k-file-input-dropzone-text">
|
|
44
|
-
<span class="k-file-input-dropzone-title">
|
|
46
|
+
<span :id="titleId" class="k-file-input-dropzone-title">
|
|
45
47
|
<slot name="title" :over="over" :loading="loading">{{ currentTitle }}</slot>
|
|
46
48
|
</span>
|
|
47
49
|
<span v-if="hasHint" :id="hintId" class="k-file-input-dropzone-hint">
|
|
@@ -108,13 +110,13 @@
|
|
|
108
110
|
variant="ghost"
|
|
109
111
|
tone="neutral"
|
|
110
112
|
icon="x-mark"
|
|
111
|
-
:aria-label="
|
|
112
|
-
:title="removeText"
|
|
113
|
+
:aria-label="removeText(walksFolders ? filePath(file) : file.name)"
|
|
114
|
+
:title="removeText(walksFolders ? filePath(file) : file.name)"
|
|
113
115
|
@click="removeFile(file)"
|
|
114
116
|
/>
|
|
115
117
|
</li>
|
|
116
118
|
</ul>
|
|
117
|
-
<
|
|
119
|
+
<LiveRegion :message="live.message.value" />
|
|
118
120
|
</div>
|
|
119
121
|
</template>
|
|
120
122
|
|
|
@@ -131,6 +133,7 @@ import {
|
|
|
131
133
|
} from "vue";
|
|
132
134
|
import { useFieldControl } from "../../composables/useField";
|
|
133
135
|
import { useLocale } from "../../composables/useLocale";
|
|
136
|
+
import { translateOr } from "../../locale";
|
|
134
137
|
import { joinIds } from "../../internal/forms/control";
|
|
135
138
|
import { readDroppedFiles, useFileDrop } from "../../composables/useFileDrop";
|
|
136
139
|
import {
|
|
@@ -143,6 +146,8 @@ import {
|
|
|
143
146
|
parseAccept,
|
|
144
147
|
setFilePath
|
|
145
148
|
} from "../../internal/forms/files";
|
|
149
|
+
import LiveRegion from "../../internal/core/LiveRegion.vue";
|
|
150
|
+
import { useLiveMessage } from "../../internal/core/live";
|
|
146
151
|
import Button from "../core/Button.vue";
|
|
147
152
|
import Icon from "../core/Icon.vue";
|
|
148
153
|
import Spinner from "../core/Spinner.vue";
|
|
@@ -192,7 +197,9 @@ const directoryActionText = computed(
|
|
|
192
197
|
);
|
|
193
198
|
const loadingLabel = computed(() => props.loadingText ?? t("fileInput.loading"));
|
|
194
199
|
const dropLabel = computed(() => props.dropText ?? t("fileInput.drop"));
|
|
195
|
-
|
|
200
|
+
function removeText(label) {
|
|
201
|
+
return translateOr(appLocale.value, props.removeLabel, "common.removeItem", { label });
|
|
202
|
+
}
|
|
196
203
|
const listText = computed(() => props.listLabel ?? t("fileInput.list"));
|
|
197
204
|
function announceCount(count) {
|
|
198
205
|
return props.announce ? props.announce(count) : t("fileInput.selected", { count });
|
|
@@ -202,18 +209,21 @@ function announceAdded(count) {
|
|
|
202
209
|
}
|
|
203
210
|
const model = defineModel({ type: null });
|
|
204
211
|
const emit = defineEmits(["invalid", "reject", "add", "remove"]);
|
|
205
|
-
const
|
|
212
|
+
const baseId = useId();
|
|
213
|
+
const hintId = `${baseId}-hint`;
|
|
214
|
+
const titleId = `${baseId}-title`;
|
|
206
215
|
const rootRef = useTemplateRef("rootRef");
|
|
207
216
|
const inputRef = useTemplateRef("inputRef");
|
|
208
217
|
const directoryInputRef = useTemplateRef("directoryInputRef");
|
|
209
218
|
const buttonRef = useTemplateRef("buttonRef");
|
|
210
219
|
const previews = reactive({});
|
|
211
|
-
const
|
|
220
|
+
const live = useLiveMessage();
|
|
212
221
|
const mounted = ref(false);
|
|
213
222
|
const control = useFieldControl({
|
|
214
223
|
invalid: () => props.invalid,
|
|
215
224
|
disabled: () => props.disabled,
|
|
216
|
-
required: () => props.required
|
|
225
|
+
required: () => props.required,
|
|
226
|
+
requiredHint: true
|
|
217
227
|
});
|
|
218
228
|
const files = computed(() => {
|
|
219
229
|
const value = model.value;
|
|
@@ -309,13 +319,21 @@ function addEntries(incomingEntries, origin) {
|
|
|
309
319
|
if (!multiple && incoming.length > 1)
|
|
310
320
|
for (const file of incoming.slice(1)) reject({ reason: "count", file, limit: 1 });
|
|
311
321
|
const detail = { ...origin, entries: toEntries(accepted) };
|
|
322
|
+
const rejectedText = rejected.length ? t("fileInput.rejected", { count: rejected.length }) : void 0;
|
|
312
323
|
if (rejected.length) emit("reject", rejected, detail);
|
|
313
|
-
if (
|
|
324
|
+
if (rejectedText) control.setControlError(rejectedText);
|
|
325
|
+
else if (accepted.length) control.setControlError(void 0);
|
|
326
|
+
const announceRejected = control.field ? void 0 : rejectedText;
|
|
327
|
+
if (!accepted.length && !origin.directories.length) {
|
|
328
|
+
if (announceRejected) live.announce(announceRejected);
|
|
329
|
+
return;
|
|
330
|
+
}
|
|
314
331
|
if (props.list && accepted.length)
|
|
315
332
|
model.value = multiple ? [...files.value, ...accepted] : accepted[0];
|
|
316
333
|
emit("add", accepted, detail);
|
|
317
|
-
|
|
318
|
-
|
|
334
|
+
const addedText = accepted.length ? props.list ? announceCount(multiple ? files.value.length : 1) : announceAdded(accepted.length) : void 0;
|
|
335
|
+
const text = [addedText, announceRejected].filter(Boolean).join(". ");
|
|
336
|
+
if (text) live.announce(text);
|
|
319
337
|
}
|
|
320
338
|
function onNativeChange(event) {
|
|
321
339
|
const target = event.target;
|
|
@@ -339,7 +357,7 @@ function removeFile(file) {
|
|
|
339
357
|
const key = fileKey(file);
|
|
340
358
|
model.value = isMultiple.value ? files.value.filter((entry) => fileKey(entry) !== key) : null;
|
|
341
359
|
emit("remove", file);
|
|
342
|
-
|
|
360
|
+
live.announce(announceCount(isMultiple.value ? files.value.length : 0));
|
|
343
361
|
buttonRef.value?.focus();
|
|
344
362
|
}
|
|
345
363
|
function syncPreviews(current) {
|
|
@@ -54,6 +54,7 @@ declare const __VLS_base: import("vue").DefineComponent<{
|
|
|
54
54
|
form?: string | undefined | undefined;
|
|
55
55
|
results?: (string | number) | undefined;
|
|
56
56
|
placeholder?: string | undefined | undefined;
|
|
57
|
+
dir?: string | undefined | undefined;
|
|
57
58
|
role?: string | undefined | undefined;
|
|
58
59
|
'aria-label'?: string | undefined | undefined;
|
|
59
60
|
'aria-hidden'?: (boolean | "true" | "false") | undefined;
|
|
@@ -208,7 +209,6 @@ declare const __VLS_base: import("vue").DefineComponent<{
|
|
|
208
209
|
accesskey?: string | undefined | undefined;
|
|
209
210
|
contenteditable?: (boolean | "true" | "false") | "inherit" | "plaintext-only" | undefined;
|
|
210
211
|
contextmenu?: string | undefined | undefined;
|
|
211
|
-
dir?: string | undefined | undefined;
|
|
212
212
|
draggable?: (boolean | "true" | "false") | undefined;
|
|
213
213
|
enterkeyhint?: "enter" | "done" | "go" | "next" | "previous" | "search" | "send" | undefined | undefined;
|
|
214
214
|
enterKeyHint?: "search" | "done" | "previous" | "next" | "enter" | "go" | "send" | undefined;
|
|
@@ -296,6 +296,7 @@ declare const __VLS_base: import("vue").DefineComponent<{
|
|
|
296
296
|
form?: string | undefined | undefined;
|
|
297
297
|
results?: (string | number) | undefined;
|
|
298
298
|
placeholder?: string | undefined | undefined;
|
|
299
|
+
dir?: string | undefined | undefined;
|
|
299
300
|
role?: string | undefined | undefined;
|
|
300
301
|
'aria-label'?: string | undefined | undefined;
|
|
301
302
|
'aria-hidden'?: (boolean | "true" | "false") | undefined;
|
|
@@ -450,7 +451,6 @@ declare const __VLS_base: import("vue").DefineComponent<{
|
|
|
450
451
|
accesskey?: string | undefined | undefined;
|
|
451
452
|
contenteditable?: (boolean | "true" | "false") | "inherit" | "plaintext-only" | undefined;
|
|
452
453
|
contextmenu?: string | undefined | undefined;
|
|
453
|
-
dir?: string | undefined | undefined;
|
|
454
454
|
draggable?: (boolean | "true" | "false") | undefined;
|
|
455
455
|
enterkeyhint?: "enter" | "done" | "go" | "next" | "previous" | "search" | "send" | undefined | undefined;
|
|
456
456
|
enterKeyHint?: "search" | "done" | "previous" | "next" | "enter" | "go" | "send" | undefined;
|
|
@@ -1,15 +1,31 @@
|
|
|
1
1
|
<template>
|
|
2
|
-
<span class="k-input-addon" :class="`k-input-addon-${size}`">
|
|
2
|
+
<span :id="id" class="k-input-addon" :class="`k-input-addon-${size}`">
|
|
3
3
|
<Icon v-if="icon" :name="icon" />
|
|
4
4
|
<slot>{{ label }}</slot>
|
|
5
5
|
</span>
|
|
6
6
|
</template>
|
|
7
7
|
|
|
8
8
|
<script setup>
|
|
9
|
+
import { computed, inject, onBeforeUnmount, useId, useSlots, watch } from "vue";
|
|
10
|
+
import { INPUT_GROUP_KEY } from "../../internal/forms/keys";
|
|
9
11
|
import Icon from "../core/Icon.vue";
|
|
10
|
-
defineProps({
|
|
12
|
+
const props = defineProps({
|
|
11
13
|
label: { type: String, required: false },
|
|
12
14
|
icon: { type: null, required: false },
|
|
13
15
|
size: { type: String, required: false, default: "md" }
|
|
14
16
|
});
|
|
17
|
+
const id = useId();
|
|
18
|
+
const slots = useSlots();
|
|
19
|
+
const group = inject(INPUT_GROUP_KEY, null);
|
|
20
|
+
const hasText = computed(() => Boolean(props.label || slots.default));
|
|
21
|
+
let unregister;
|
|
22
|
+
watch(
|
|
23
|
+
hasText,
|
|
24
|
+
(value) => {
|
|
25
|
+
unregister?.();
|
|
26
|
+
unregister = value ? group?.register(id) : void 0;
|
|
27
|
+
},
|
|
28
|
+
{ immediate: true }
|
|
29
|
+
);
|
|
30
|
+
onBeforeUnmount(() => unregister?.());
|
|
15
31
|
</script>
|
|
@@ -3,14 +3,41 @@
|
|
|
3
3
|
class="k-input-group"
|
|
4
4
|
:class="[`k-input-group-${size}`, { 'is-block': block }]"
|
|
5
5
|
role="group"
|
|
6
|
+
:aria-label="label"
|
|
7
|
+
:aria-labelledby="
|
|
8
|
+
label ? void 0 : field?.hasLabel?.value ?? true ? field?.labelId : void 0
|
|
9
|
+
"
|
|
10
|
+
:aria-describedby="field ? void 0 : addonIds"
|
|
6
11
|
>
|
|
7
12
|
<slot />
|
|
8
13
|
</div>
|
|
9
14
|
</template>
|
|
10
15
|
|
|
11
16
|
<script setup>
|
|
17
|
+
import { computed, provide, shallowReactive } from "vue";
|
|
18
|
+
import { useField } from "../../composables/useField";
|
|
19
|
+
import { FIELD_KEY } from "../../internal/keys";
|
|
20
|
+
import { joinIds } from "../../internal/forms/control";
|
|
21
|
+
import { INPUT_GROUP_KEY } from "../../internal/forms/keys";
|
|
12
22
|
defineProps({
|
|
23
|
+
label: { type: String, required: false },
|
|
13
24
|
size: { type: String, required: false, default: "md" },
|
|
14
25
|
block: { type: Boolean, required: false, default: true }
|
|
15
26
|
});
|
|
27
|
+
const field = useField();
|
|
28
|
+
const ids = shallowReactive(/* @__PURE__ */ new Set());
|
|
29
|
+
const addonIds = computed(() => joinIds(...ids));
|
|
30
|
+
provide(INPUT_GROUP_KEY, {
|
|
31
|
+
register(id) {
|
|
32
|
+
ids.add(id);
|
|
33
|
+
return () => ids.delete(id);
|
|
34
|
+
}
|
|
35
|
+
});
|
|
36
|
+
if (field) {
|
|
37
|
+
const context = {
|
|
38
|
+
...field,
|
|
39
|
+
describedBy: computed(() => joinIds(field.describedBy.value, addonIds.value))
|
|
40
|
+
};
|
|
41
|
+
provide(FIELD_KEY, context);
|
|
42
|
+
}
|
|
16
43
|
</script>
|
|
@@ -4,6 +4,7 @@ type __VLS_Slots = {} & {
|
|
|
4
4
|
default?: (props: typeof __VLS_1) => any;
|
|
5
5
|
};
|
|
6
6
|
declare const __VLS_base: import("vue").DefineComponent<{
|
|
7
|
+
label?: string;
|
|
7
8
|
size?: FieldSize;
|
|
8
9
|
block?: boolean;
|
|
9
10
|
innerHTML?: string | undefined | undefined;
|
|
@@ -199,6 +200,7 @@ declare const __VLS_base: import("vue").DefineComponent<{
|
|
|
199
200
|
ref_for?: boolean | undefined | undefined;
|
|
200
201
|
ref_key?: string | undefined | undefined;
|
|
201
202
|
}, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{
|
|
203
|
+
label?: string;
|
|
202
204
|
size?: FieldSize;
|
|
203
205
|
block?: boolean;
|
|
204
206
|
innerHTML?: string | undefined | undefined;
|
|
@@ -79,8 +79,10 @@
|
|
|
79
79
|
import { computed, onBeforeUnmount, ref, useTemplateRef } from "vue";
|
|
80
80
|
import { useFieldControl } from "../../composables/useField";
|
|
81
81
|
import { useLocale } from "../../composables/useLocale";
|
|
82
|
+
import { numberFormat } from "../../internal/core/intl";
|
|
82
83
|
import { joinIds } from "../../internal/forms/control";
|
|
83
84
|
import Icon from "../core/Icon.vue";
|
|
85
|
+
import { isClient } from "../../internal/core/env";
|
|
84
86
|
defineOptions({ inheritAttrs: false });
|
|
85
87
|
const props = defineProps({
|
|
86
88
|
min: { type: Number, required: false },
|
|
@@ -121,15 +123,12 @@ const control = useFieldControl({
|
|
|
121
123
|
required: () => props.required
|
|
122
124
|
});
|
|
123
125
|
const isPercent = computed(() => props.formatOptions?.style === "percent");
|
|
124
|
-
const formatter = computed(() =>
|
|
126
|
+
const formatter = computed(() => numberFormat(resolvedLocale.value, props.formatOptions));
|
|
125
127
|
const editFormatter = computed(
|
|
126
|
-
() =>
|
|
127
|
-
useGrouping: false,
|
|
128
|
-
maximumFractionDigits: 20
|
|
129
|
-
})
|
|
128
|
+
() => numberFormat(resolvedLocale.value, { useGrouping: false, maximumFractionDigits: 20 })
|
|
130
129
|
);
|
|
131
130
|
const separators = computed(() => {
|
|
132
|
-
const parts =
|
|
131
|
+
const parts = numberFormat(resolvedLocale.value).formatToParts(-12345.6);
|
|
133
132
|
return {
|
|
134
133
|
decimal: parts.find((part) => part.type === "decimal")?.value ?? ".",
|
|
135
134
|
group: parts.find((part) => part.type === "group")?.value ?? ","
|
|
@@ -275,7 +274,7 @@ function onStepClick(event, direction) {
|
|
|
275
274
|
onBeforeUnmount(() => {
|
|
276
275
|
clearTimeout(repeatDelay);
|
|
277
276
|
clearInterval(repeatTimer);
|
|
278
|
-
if (
|
|
277
|
+
if (isClient()) {
|
|
279
278
|
window.removeEventListener("pointerup", stopRepeat);
|
|
280
279
|
window.removeEventListener("pointercancel", stopRepeat);
|
|
281
280
|
}
|
|
@@ -27,10 +27,13 @@ declare const __VLS_export: import("vue").DefineComponent<{
|
|
|
27
27
|
value?: any;
|
|
28
28
|
form?: string | undefined | undefined;
|
|
29
29
|
pattern?: string | undefined | undefined;
|
|
30
|
+
checked?: any[] | Set<any> | (boolean | "true" | "false") | undefined;
|
|
31
|
+
indeterminate?: boolean | undefined | undefined;
|
|
30
32
|
title?: string | undefined | undefined;
|
|
31
33
|
list?: string | undefined | undefined;
|
|
32
34
|
results?: (string | number) | undefined;
|
|
33
35
|
name?: string | undefined | undefined;
|
|
36
|
+
dir?: string | undefined | undefined;
|
|
34
37
|
role?: string | undefined | undefined;
|
|
35
38
|
'aria-label'?: string | undefined | undefined;
|
|
36
39
|
'aria-hidden'?: (boolean | "true" | "false") | undefined;
|
|
@@ -188,7 +191,6 @@ declare const __VLS_export: import("vue").DefineComponent<{
|
|
|
188
191
|
accesskey?: string | undefined | undefined;
|
|
189
192
|
contenteditable?: (boolean | "true" | "false") | "inherit" | "plaintext-only" | undefined;
|
|
190
193
|
contextmenu?: string | undefined | undefined;
|
|
191
|
-
dir?: string | undefined | undefined;
|
|
192
194
|
draggable?: (boolean | "true" | "false") | undefined;
|
|
193
195
|
enterkeyhint?: "enter" | "done" | "go" | "next" | "previous" | "search" | "send" | undefined | undefined;
|
|
194
196
|
enterKeyHint?: "search" | "done" | "previous" | "next" | "enter" | "go" | "send" | undefined;
|
|
@@ -231,9 +233,7 @@ declare const __VLS_export: import("vue").DefineComponent<{
|
|
|
231
233
|
accept?: string | undefined | undefined;
|
|
232
234
|
alt?: string | undefined | undefined;
|
|
233
235
|
capture?: boolean | "user" | "environment" | undefined | undefined;
|
|
234
|
-
checked?: any[] | Set<any> | (boolean | "true" | "false") | undefined;
|
|
235
236
|
crossorigin?: string | undefined | undefined;
|
|
236
|
-
indeterminate?: boolean | undefined | undefined;
|
|
237
237
|
maxlength?: (string | number) | undefined;
|
|
238
238
|
minlength?: (string | number) | undefined;
|
|
239
239
|
multiple?: (boolean | "true" | "false") | undefined;
|
|
@@ -271,10 +271,13 @@ declare const __VLS_export: import("vue").DefineComponent<{
|
|
|
271
271
|
value?: any;
|
|
272
272
|
form?: string | undefined | undefined;
|
|
273
273
|
pattern?: string | undefined | undefined;
|
|
274
|
+
checked?: any[] | Set<any> | (boolean | "true" | "false") | undefined;
|
|
275
|
+
indeterminate?: boolean | undefined | undefined;
|
|
274
276
|
title?: string | undefined | undefined;
|
|
275
277
|
list?: string | undefined | undefined;
|
|
276
278
|
results?: (string | number) | undefined;
|
|
277
279
|
name?: string | undefined | undefined;
|
|
280
|
+
dir?: string | undefined | undefined;
|
|
278
281
|
role?: string | undefined | undefined;
|
|
279
282
|
'aria-label'?: string | undefined | undefined;
|
|
280
283
|
'aria-hidden'?: (boolean | "true" | "false") | undefined;
|
|
@@ -432,7 +435,6 @@ declare const __VLS_export: import("vue").DefineComponent<{
|
|
|
432
435
|
accesskey?: string | undefined | undefined;
|
|
433
436
|
contenteditable?: (boolean | "true" | "false") | "inherit" | "plaintext-only" | undefined;
|
|
434
437
|
contextmenu?: string | undefined | undefined;
|
|
435
|
-
dir?: string | undefined | undefined;
|
|
436
438
|
draggable?: (boolean | "true" | "false") | undefined;
|
|
437
439
|
enterkeyhint?: "enter" | "done" | "go" | "next" | "previous" | "search" | "send" | undefined | undefined;
|
|
438
440
|
enterKeyHint?: "search" | "done" | "previous" | "next" | "enter" | "go" | "send" | undefined;
|
|
@@ -475,9 +477,7 @@ declare const __VLS_export: import("vue").DefineComponent<{
|
|
|
475
477
|
accept?: string | undefined | undefined;
|
|
476
478
|
alt?: string | undefined | undefined;
|
|
477
479
|
capture?: boolean | "user" | "environment" | undefined | undefined;
|
|
478
|
-
checked?: any[] | Set<any> | (boolean | "true" | "false") | undefined;
|
|
479
480
|
crossorigin?: string | undefined | undefined;
|
|
480
|
-
indeterminate?: boolean | undefined | undefined;
|
|
481
481
|
maxlength?: (string | number) | undefined;
|
|
482
482
|
minlength?: (string | number) | undefined;
|
|
483
483
|
multiple?: (boolean | "true" | "false") | undefined;
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
ref="inputRef"
|
|
9
9
|
:spellcheck="false"
|
|
10
10
|
autocapitalize="off"
|
|
11
|
-
:autocomplete="
|
|
11
|
+
:autocomplete="autocompleteValue"
|
|
12
12
|
v-bind="$attrs"
|
|
13
13
|
:aria-describedby="
|
|
14
14
|
joinIds($attrs['aria-describedby'], strength && value ? meterId : void 0)
|
|
@@ -43,7 +43,7 @@
|
|
|
43
43
|
type="button"
|
|
44
44
|
class="k-password-input-action"
|
|
45
45
|
:class="{ 'is-done': copied }"
|
|
46
|
-
:aria-label="
|
|
46
|
+
:aria-label="copyText"
|
|
47
47
|
:title="copied ? copiedText : copyText"
|
|
48
48
|
:disabled="!value || disabled || void 0"
|
|
49
49
|
@click="copyValue"
|
|
@@ -77,16 +77,18 @@
|
|
|
77
77
|
</span>
|
|
78
78
|
<span class="k-password-meter-label">{{ label }}</span>
|
|
79
79
|
</div>
|
|
80
|
+
<LiveRegion v-if="copy" :message="message" />
|
|
80
81
|
</div>
|
|
81
82
|
</template>
|
|
82
83
|
|
|
83
84
|
<script setup>
|
|
84
85
|
import { computed, ref, useId, useTemplateRef } from "vue";
|
|
85
|
-
import {
|
|
86
|
+
import { useAnnouncedCopy } from "../../internal/core/copy";
|
|
86
87
|
import { useFieldControl } from "../../composables/useField";
|
|
87
88
|
import { useLocale } from "../../composables/useLocale";
|
|
88
89
|
import { generatePassword, usePasswordStrength } from "../../composables/usePasswordStrength";
|
|
89
90
|
import { joinIds } from "../../internal/forms/control";
|
|
91
|
+
import LiveRegion from "../../internal/core/LiveRegion.vue";
|
|
90
92
|
import Icon from "../core/Icon.vue";
|
|
91
93
|
import Input from "../core/Input.vue";
|
|
92
94
|
defineOptions({ inheritAttrs: false });
|
|
@@ -96,7 +98,7 @@ const props = defineProps({
|
|
|
96
98
|
strength: { type: Boolean, required: false },
|
|
97
99
|
minLength: { type: Number, required: false, default: 8 },
|
|
98
100
|
strengthLabels: { type: Array, required: false },
|
|
99
|
-
autocomplete: { type: String, required: false
|
|
101
|
+
autocomplete: { type: String, required: false },
|
|
100
102
|
icon: { type: null, required: false },
|
|
101
103
|
size: { type: String, required: false, default: "md" },
|
|
102
104
|
showLabel: { type: String, required: false },
|
|
@@ -124,7 +126,10 @@ const emit = defineEmits(["generate"]);
|
|
|
124
126
|
const meterId = `${useId()}-strength`;
|
|
125
127
|
const inputRef = useTemplateRef("inputRef");
|
|
126
128
|
const visible = ref(false);
|
|
127
|
-
const { copied, copy: writeClipboard } =
|
|
129
|
+
const { copied, copy: writeClipboard, message } = useAnnouncedCopy(() => copiedText.value);
|
|
130
|
+
const autocompleteValue = computed(
|
|
131
|
+
() => props.autocomplete ?? (props.generate || props.strength ? "new-password" : "current-password")
|
|
132
|
+
);
|
|
128
133
|
const { score, label } = usePasswordStrength(() => value.value, {
|
|
129
134
|
minLength: () => props.minLength,
|
|
130
135
|
labels: () => props.strengthLabels
|
|
@@ -142,7 +147,8 @@ function regenerate() {
|
|
|
142
147
|
emit("generate", next);
|
|
143
148
|
}
|
|
144
149
|
async function copyValue() {
|
|
145
|
-
if (value.value)
|
|
150
|
+
if (!value.value) return;
|
|
151
|
+
await writeClipboard(value.value);
|
|
146
152
|
}
|
|
147
153
|
defineExpose({ focus: () => inputRef.value?.focus() });
|
|
148
154
|
</script>
|