@xleddyl/443-components-vue 0.2.2 → 0.3.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.
Files changed (205) hide show
  1. package/README.md +79 -19
  2. package/dist/chart/BarChart.vue.d.ts +2 -2
  3. package/dist/chart/ChartLegend.vue.d.ts +4 -4
  4. package/dist/chart/ChartPanel.vue.d.ts +2 -2
  5. package/dist/chart/ChartSummary.vue.d.ts +2 -2
  6. package/dist/chart/DoughnutChart.vue.d.ts +2 -2
  7. package/dist/chart/LineChart.vue.d.ts +2 -2
  8. package/dist/components/core/Button.vue.d.ts +2 -2
  9. package/dist/components/core/FieldMessage.vue +28 -0
  10. package/dist/components/core/FieldMessage.vue.d.ts +409 -0
  11. package/dist/components/core/Form.vue +22 -3
  12. package/dist/components/core/Form.vue.d.ts +18 -4
  13. package/dist/components/core/FormField.vue +37 -15
  14. package/dist/components/core/FormField.vue.d.ts +5 -4
  15. package/dist/components/core/Icon.vue.d.ts +2 -2
  16. package/dist/components/core/Input.vue.d.ts +4 -4
  17. package/dist/components/core/Kbd.vue.d.ts +2 -2
  18. package/dist/components/core/Root.vue.d.ts +6 -6
  19. package/dist/components/core/Spinner.vue +13 -1
  20. package/dist/components/core/Spinner.vue.d.ts +4 -2
  21. package/dist/components/core/Textarea.vue.d.ts +4 -4
  22. package/dist/components/core/VisuallyHidden.vue.d.ts +6 -6
  23. package/dist/components/core/index.d.ts +1 -0
  24. package/dist/components/core/index.mjs +1 -0
  25. package/dist/components/data/Avatar.vue.d.ts +2 -2
  26. package/dist/components/data/AvatarGroup.vue.d.ts +2 -2
  27. package/dist/components/data/Badge.vue.d.ts +2 -2
  28. package/dist/components/data/DescriptionList.vue.d.ts +2 -2
  29. package/dist/components/data/FilterPill.vue +35 -0
  30. package/dist/components/data/FilterPill.vue.d.ts +445 -0
  31. package/dist/components/data/FilterPills.vue +49 -21
  32. package/dist/components/data/FilterPills.vue.d.ts +22 -5
  33. package/dist/components/data/Pagination.vue.d.ts +4 -4
  34. package/dist/components/data/SelectionBar.vue +78 -0
  35. package/dist/components/data/SelectionBar.vue.d.ts +427 -0
  36. package/dist/components/data/Stat.vue.d.ts +8 -8
  37. package/dist/components/data/Tag.vue.d.ts +4 -4
  38. package/dist/components/data/Timeline.vue.d.ts +2 -2
  39. package/dist/components/data/Tree.vue +237 -18
  40. package/dist/components/data/Tree.vue.d.ts +37 -10
  41. package/dist/components/data/index.d.ts +3 -0
  42. package/dist/components/data/index.mjs +3 -0
  43. package/dist/components/data/types.d.ts +19 -0
  44. package/dist/components/feedback/Alert.vue.d.ts +18 -18
  45. package/dist/components/feedback/EmptyState.vue.d.ts +2 -2
  46. package/dist/components/feedback/LoadingOverlay.vue.d.ts +2 -2
  47. package/dist/components/feedback/Meter.vue.d.ts +2 -2
  48. package/dist/components/feedback/Progress.vue.d.ts +2 -2
  49. package/dist/components/feedback/ProgressRing.vue.d.ts +2 -2
  50. package/dist/components/feedback/Skeleton.vue.d.ts +3 -3
  51. package/dist/components/forms/Calendar.vue.d.ts +4 -4
  52. package/dist/components/forms/ColorInput.vue.d.ts +6 -6
  53. package/dist/components/forms/DateInput.vue.d.ts +14 -14
  54. package/dist/components/forms/DatePicker.vue.d.ts +6 -6
  55. package/dist/components/forms/FileInput.vue +80 -26
  56. package/dist/components/forms/FileInput.vue.d.ts +21 -11
  57. package/dist/components/forms/InputAddon.vue.d.ts +2 -2
  58. package/dist/components/forms/InputGroup.vue.d.ts +2 -2
  59. package/dist/components/forms/NumberInput.vue.d.ts +6 -6
  60. package/dist/components/forms/PasswordInput.vue.d.ts +16 -16
  61. package/dist/components/forms/PinInput.vue.d.ts +6 -6
  62. package/dist/components/forms/Radio.vue.d.ts +2 -2
  63. package/dist/components/forms/SegmentedControl.vue +32 -8
  64. package/dist/components/forms/SegmentedControl.vue.d.ts +15 -7
  65. package/dist/components/forms/Slider.vue.d.ts +6 -6
  66. package/dist/components/forms/Switch.vue.d.ts +6 -6
  67. package/dist/components/forms/TimeInput.vue.d.ts +16 -16
  68. package/dist/components/forms/types.d.ts +14 -0
  69. package/dist/components/layout/Accordion.vue +25 -5
  70. package/dist/components/layout/Accordion.vue.d.ts +8 -5
  71. package/dist/components/layout/AppShell.vue.d.ts +5 -5
  72. package/dist/components/layout/Breadcrumbs.vue +28 -20
  73. package/dist/components/layout/Breadcrumbs.vue.d.ts +18 -3
  74. package/dist/components/layout/Card.vue +22 -3
  75. package/dist/components/layout/Card.vue.d.ts +10 -4
  76. package/dist/components/layout/CopyButton.vue.d.ts +4 -4
  77. package/dist/components/layout/Grid.vue.d.ts +2 -2
  78. package/dist/components/layout/NavLink.vue.d.ts +8 -8
  79. package/dist/components/layout/PageHeader.vue +10 -1
  80. package/dist/components/layout/PageHeader.vue.d.ts +17 -9
  81. package/dist/components/layout/Separator.vue.d.ts +2 -2
  82. package/dist/components/layout/Sidebar.vue.d.ts +2 -2
  83. package/dist/components/layout/SidebarSection.vue.d.ts +2 -2
  84. package/dist/components/layout/Stack.vue.d.ts +6 -6
  85. package/dist/components/layout/Tabs.vue +27 -6
  86. package/dist/components/layout/Tabs.vue.d.ts +7 -4
  87. package/dist/components/layout/ThemeSwitch.vue.d.ts +2 -2
  88. package/dist/components/layout/Toolbar.vue.d.ts +2 -2
  89. package/dist/components/layout/types.d.ts +7 -1
  90. package/dist/components/overlays/CommandPalette.vue +25 -4
  91. package/dist/components/overlays/CommandPalette.vue.d.ts +23 -9
  92. package/dist/components/overlays/ConfirmDialog.vue.d.ts +8 -6
  93. package/dist/components/overlays/ConfirmHost.vue +5 -1
  94. package/dist/components/overlays/ConfirmHost.vue.d.ts +10 -8
  95. package/dist/components/overlays/ContextMenu.vue.d.ts +4 -4
  96. package/dist/components/overlays/Drawer.vue +4 -2
  97. package/dist/components/overlays/Drawer.vue.d.ts +8 -6
  98. package/dist/components/overlays/DropdownMenu.vue.d.ts +2 -2
  99. package/dist/components/overlays/HoverCard.vue +2 -1
  100. package/dist/components/overlays/HoverCard.vue.d.ts +6 -6
  101. package/dist/components/overlays/Modal.vue +5 -3
  102. package/dist/components/overlays/Modal.vue.d.ts +8 -6
  103. package/dist/components/overlays/Popover.vue +2 -1
  104. package/dist/components/overlays/Popover.vue.d.ts +6 -6
  105. package/dist/components/overlays/Toaster.vue.d.ts +4 -4
  106. package/dist/components/overlays/Tooltip.vue.d.ts +2 -2
  107. package/dist/components/overlays/types.d.ts +4 -1
  108. package/dist/components/templates/AccountMenu.vue.d.ts +6 -6
  109. package/dist/components/templates/AppearanceSettings.vue.d.ts +2 -2
  110. package/dist/components/templates/AuthLayout.vue.d.ts +2 -2
  111. package/dist/components/templates/Brand.vue +34 -5
  112. package/dist/components/templates/Brand.vue.d.ts +20 -15
  113. package/dist/components/templates/DashboardLayout.vue +40 -4
  114. package/dist/components/templates/DashboardLayout.vue.d.ts +34 -22
  115. package/dist/components/templates/DashboardPage.vue.d.ts +2 -2
  116. package/dist/components/templates/DetailPage.vue.d.ts +4 -4
  117. package/dist/components/templates/EmptyPage.vue.d.ts +2 -2
  118. package/dist/components/templates/ErrorPage.vue.d.ts +2 -2
  119. package/dist/components/templates/ListPage.vue +16 -10
  120. package/dist/components/templates/NotFoundPage.vue.d.ts +1 -1
  121. package/dist/components/templates/SaveBar.vue.d.ts +4 -4
  122. package/dist/components/templates/SettingsGroup.vue.d.ts +2 -2
  123. package/dist/components/templates/SettingsModal.vue +5 -2
  124. package/dist/components/templates/SettingsModal.vue.d.ts +13 -8
  125. package/dist/components/templates/SettingsPage.vue.d.ts +4 -4
  126. package/dist/components/templates/SettingsSection.vue.d.ts +12 -8
  127. package/dist/components/templates/types.d.ts +24 -1
  128. package/dist/composables/core.d.ts +1 -0
  129. package/dist/composables/core.mjs +1 -0
  130. package/dist/composables/useField.d.ts +2 -0
  131. package/dist/composables/useField.mjs +5 -2
  132. package/dist/composables/useFieldBoundary.d.ts +1 -0
  133. package/dist/composables/useFieldBoundary.mjs +5 -0
  134. package/dist/composables/useFileDrop.d.ts +7 -0
  135. package/dist/composables/useFileDrop.mjs +114 -7
  136. package/dist/composables/useForm.d.ts +32 -19
  137. package/dist/composables/useForm.mjs +212 -45
  138. package/dist/editor/RichTextEditor.vue +30 -3
  139. package/dist/editor/RichTextEditor.vue.d.ts +11 -6
  140. package/dist/editor/rich-text-editor.css +1 -1
  141. package/dist/editor/types.d.ts +3 -0
  142. package/dist/grid/GridToolbar.vue.d.ts +4 -4
  143. package/dist/grid/cells/BadgeCell.vue.d.ts +2 -2
  144. package/dist/grid/cells/BooleanCell.vue.d.ts +2 -2
  145. package/dist/grid/cells/DateCell.vue.d.ts +2 -2
  146. package/dist/grid/cells/ImageCell.vue.d.ts +2 -2
  147. package/dist/grid/cells/LinkCell.vue.d.ts +2 -2
  148. package/dist/internal/data/tree.d.ts +8 -0
  149. package/dist/internal/data/tree.mjs +41 -0
  150. package/dist/internal/forms/FormAlerts.vue +25 -0
  151. package/dist/internal/forms/FormAlerts.vue.d.ts +393 -0
  152. package/dist/internal/forms/files.d.ts +2 -0
  153. package/dist/internal/forms/files.mjs +8 -1
  154. package/dist/internal/forms/standard-schema.d.ts +17 -0
  155. package/dist/internal/forms/standard-schema.mjs +40 -0
  156. package/dist/internal/overlays/DialogFrame.vue +17 -7
  157. package/dist/internal/overlays/DialogFrame.vue.d.ts +9 -5
  158. package/dist/internal/overlays/FieldBoundary.d.ts +4 -0
  159. package/dist/internal/overlays/FieldBoundary.mjs +9 -0
  160. package/dist/internal/overlays/MenuList.vue +2 -0
  161. package/dist/internal/overlays/MenuList.vue.d.ts +5 -5
  162. package/dist/internal/overlays/OverlayView.vue +2 -0
  163. package/dist/internal/overlays/OverlayView.vue.d.ts +14 -12
  164. package/dist/internal/overlays/dialog.d.ts +4 -1
  165. package/dist/internal/overlays/dialog.mjs +39 -5
  166. package/dist/internal/overlays/stack.d.ts +2 -1
  167. package/dist/locale/en.mjs +17 -2
  168. package/dist/locale/it.mjs +17 -2
  169. package/dist/locale/types.d.ts +15 -0
  170. package/dist/nuxt/module.d.ts +5 -4
  171. package/dist/nuxt/module.mjs +9 -6
  172. package/dist/nuxt/runtime/layouts/auth.vue.d.ts +8 -8
  173. package/dist/nuxt/runtime/layouts/dashboard.vue.d.ts +8 -8
  174. package/dist/styles/base.css +7 -0
  175. package/dist/styles/core/field-message.css +34 -0
  176. package/dist/styles/core/form-field.css +0 -23
  177. package/dist/styles/core/form.css +11 -0
  178. package/dist/styles/core/kbd.css +2 -2
  179. package/dist/styles/core/spinner.css +19 -0
  180. package/dist/styles/core.css +1 -0
  181. package/dist/styles/data/badge.css +1 -1
  182. package/dist/styles/data/filter-pills.css +40 -3
  183. package/dist/styles/data/selection-bar.css +85 -0
  184. package/dist/styles/data/tree.css +156 -1
  185. package/dist/styles/data.css +1 -0
  186. package/dist/styles/forms/calendar.css +1 -1
  187. package/dist/styles/forms/file-input.css +8 -0
  188. package/dist/styles/forms/segmented.css +8 -0
  189. package/dist/styles/forms/select.css +1 -1
  190. package/dist/styles/forms/slider.css +2 -2
  191. package/dist/styles/layout/accordion.css +16 -0
  192. package/dist/styles/layout/app-shell.css +4 -0
  193. package/dist/styles/layout/breadcrumbs.css +16 -1
  194. package/dist/styles/layout/card.css +19 -1
  195. package/dist/styles/layout/nav-link.css +1 -1
  196. package/dist/styles/layout/sidebar.css +1 -1
  197. package/dist/styles/layout/tabs.css +43 -1
  198. package/dist/styles/overlays/command.css +20 -2
  199. package/dist/styles/overlays/menu.css +1 -1
  200. package/dist/styles/overlays/modal.css +38 -0
  201. package/dist/styles/templates/brand.css +15 -0
  202. package/dist/styles/templates/empty-page.css +1 -1
  203. package/dist/styles/templates/list-page.css +2 -6
  204. package/dist/styles/templates/settings-modal.css +2 -2
  205. package/package.json +1 -1
@@ -14,7 +14,13 @@
14
14
  <header v-if="hasHeader" :class="`${prefix}-header`">
15
15
  <slot name="header" :close="close" :title-id="titleId" :description-id="descriptionId">
16
16
  <div :class="`${prefix}-heading`">
17
- <h2 v-if="hasTitle" :id="titleId" :class="`${prefix}-title`">
17
+ <div v-if="slots['title-trailing']" :class="`${prefix}-title-row`">
18
+ <h2 v-if="hasTitle" :id="titleId" :class="`${prefix}-title`">
19
+ <slot name="title">{{ title }}</slot>
20
+ </h2>
21
+ <slot name="title-trailing" />
22
+ </div>
23
+ <h2 v-else-if="hasTitle" :id="titleId" :class="`${prefix}-title`">
18
24
  <slot name="title">{{ title }}</slot>
19
25
  </h2>
20
26
  <p v-if="hasDescription" :id="descriptionId" :class="`${prefix}-description`">
@@ -33,7 +39,7 @@
33
39
  :disabled="loading"
34
40
  :class="`${prefix}-close`"
35
41
  :aria-label="closeText"
36
- @click="close"
42
+ @click="requestClose('close-button')"
37
43
  />
38
44
  </div>
39
45
  </header>
@@ -51,6 +57,7 @@
51
57
  import { computed, useId, useTemplateRef } from "vue";
52
58
  import Button from "../../components/core/Button.vue";
53
59
  import { useLocale } from "../../composables/useLocale";
60
+ import { provideFieldBoundary } from "../../composables/useFieldBoundary";
54
61
  import { useModalDialog } from "./dialog";
55
62
  const props = defineProps({
56
63
  prefix: { type: String, required: true },
@@ -61,8 +68,10 @@ const props = defineProps({
61
68
  hideClose: { type: Boolean, required: false },
62
69
  closeLabel: { type: String, required: false },
63
70
  flush: { type: Boolean, required: false },
64
- loading: { type: Boolean, required: false }
71
+ loading: { type: Boolean, required: false },
72
+ beforeClose: { type: Function, required: false }
65
73
  });
74
+ provideFieldBoundary();
66
75
  const { t } = useLocale();
67
76
  const closeText = computed(() => props.closeLabel ?? t("common.close"));
68
77
  const slots = defineSlots();
@@ -78,21 +87,22 @@ const hasDescription = computed(() => Boolean(props.description || slots.descrip
78
87
  const showClose = computed(() => props.dismissible && !props.hideClose);
79
88
  const hasHeader = computed(
80
89
  () => Boolean(
81
- hasTitle.value || hasDescription.value || slots.header || slots.actions || showClose.value
90
+ hasTitle.value || hasDescription.value || slots["title-trailing"] || slots.header || slots.actions || showClose.value
82
91
  )
83
92
  );
84
- const { present, onCancel, onClose, onPointerDown, onClick } = useModalDialog({
93
+ const { present, requestClose, onCancel, onClose, onPointerDown, onClick } = useModalDialog({
85
94
  dialog: dialogRef,
86
95
  panel: panelRef,
87
96
  open,
88
97
  dismissible: () => props.dismissible && !props.loading,
98
+ beforeClose: () => props.beforeClose,
89
99
  onOpen: () => emit("open"),
90
100
  onClose: () => emit("close"),
91
101
  onAfterLeave: () => emit("afterLeave")
92
102
  });
93
103
  function close() {
94
- if (props.loading) return;
95
- open.value = false;
104
+ if (props.loading) return Promise.resolve(false);
105
+ return requestClose("action");
96
106
  }
97
107
  defineExpose({ close, el: dialogRef });
98
108
  </script>
@@ -1,3 +1,4 @@
1
+ import type { DialogBeforeClose } from '../../components/overlays/types';
1
2
  export interface DialogSlotScope {
2
3
  close: () => void;
3
4
  titleId: string;
@@ -9,6 +10,7 @@ export interface DialogFrameSlots {
9
10
  }) => unknown;
10
11
  header?: (props: DialogSlotScope) => unknown;
11
12
  title?: () => unknown;
13
+ 'title-trailing'?: () => unknown;
12
14
  description?: () => unknown;
13
15
  actions?: (props: {
14
16
  close: () => void;
@@ -18,7 +20,7 @@ export interface DialogFrameSlots {
18
20
  }) => unknown;
19
21
  }
20
22
  type __VLS_Slots = DialogFrameSlots;
21
- declare function close(): void;
23
+ declare function close(): Promise<boolean>;
22
24
  declare const __VLS_base: import("vue").DefineComponent<{
23
25
  prefix: "k-modal" | "k-drawer";
24
26
  rootClass: unknown;
@@ -29,12 +31,12 @@ declare const __VLS_base: import("vue").DefineComponent<{
29
31
  closeLabel?: string;
30
32
  flush?: boolean;
31
33
  loading?: boolean;
34
+ beforeClose?: DialogBeforeClose;
32
35
  open: boolean;
33
36
  key?: PropertyKey | undefined;
34
37
  style?: import("vue").StyleValue;
35
38
  results?: (string | number) | undefined;
36
39
  placeholder?: string | undefined | undefined;
37
- ref?: import("vue").VNodeRef | undefined;
38
40
  class?: import("vue").ClassValue;
39
41
  role?: string | undefined | undefined;
40
42
  'aria-label'?: string | undefined | undefined;
@@ -147,7 +149,7 @@ declare const __VLS_base: import("vue").DefineComponent<{
147
149
  'aria-colindex'?: (string | number) | undefined;
148
150
  'aria-colspan'?: (string | number) | undefined;
149
151
  'aria-controls'?: string | undefined | undefined;
150
- 'aria-current'?: "page" | "location" | "time" | (boolean | "true" | "false") | "step" | "date" | undefined;
152
+ 'aria-current'?: "page" | "time" | (boolean | "true" | "false") | "step" | "location" | "date" | undefined;
151
153
  'aria-describedby'?: string | undefined | undefined;
152
154
  'aria-details'?: string | undefined | undefined;
153
155
  'aria-disabled'?: (boolean | "true" | "false") | undefined;
@@ -184,6 +186,7 @@ declare const __VLS_base: import("vue").DefineComponent<{
184
186
  'aria-valuemin'?: (string | number) | undefined;
185
187
  'aria-valuenow'?: (string | number) | undefined;
186
188
  'aria-valuetext'?: string | undefined | undefined;
189
+ ref?: import("vue").VNodeRef | undefined;
187
190
  ref_for?: boolean | undefined | undefined;
188
191
  ref_key?: string | undefined | undefined;
189
192
  accesskey?: string | undefined | undefined;
@@ -240,12 +243,12 @@ declare const __VLS_base: import("vue").DefineComponent<{
240
243
  closeLabel?: string;
241
244
  flush?: boolean;
242
245
  loading?: boolean;
246
+ beforeClose?: DialogBeforeClose;
243
247
  open: boolean;
244
248
  key?: PropertyKey | undefined;
245
249
  style?: import("vue").StyleValue;
246
250
  results?: (string | number) | undefined;
247
251
  placeholder?: string | undefined | undefined;
248
- ref?: import("vue").VNodeRef | undefined;
249
252
  class?: import("vue").ClassValue;
250
253
  role?: string | undefined | undefined;
251
254
  'aria-label'?: string | undefined | undefined;
@@ -358,7 +361,7 @@ declare const __VLS_base: import("vue").DefineComponent<{
358
361
  'aria-colindex'?: (string | number) | undefined;
359
362
  'aria-colspan'?: (string | number) | undefined;
360
363
  'aria-controls'?: string | undefined | undefined;
361
- 'aria-current'?: "page" | "location" | "time" | (boolean | "true" | "false") | "step" | "date" | undefined;
364
+ 'aria-current'?: "page" | "time" | (boolean | "true" | "false") | "step" | "location" | "date" | undefined;
362
365
  'aria-describedby'?: string | undefined | undefined;
363
366
  'aria-details'?: string | undefined | undefined;
364
367
  'aria-disabled'?: (boolean | "true" | "false") | undefined;
@@ -395,6 +398,7 @@ declare const __VLS_base: import("vue").DefineComponent<{
395
398
  'aria-valuemin'?: (string | number) | undefined;
396
399
  'aria-valuenow'?: (string | number) | undefined;
397
400
  'aria-valuetext'?: string | undefined | undefined;
401
+ ref?: import("vue").VNodeRef | undefined;
398
402
  ref_for?: boolean | undefined | undefined;
399
403
  ref_key?: string | undefined | undefined;
400
404
  accesskey?: string | undefined | undefined;
@@ -0,0 +1,4 @@
1
+ declare const _default: import("vue").DefineComponent<{}, () => import("vue").VNode<import("vue").RendererNode, import("vue").RendererElement, {
2
+ [key: string]: any;
3
+ }>[] | undefined, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
4
+ export default _default;
@@ -0,0 +1,9 @@
1
+ import { defineComponent } from "vue";
2
+ import { provideFieldBoundary } from "../../composables/useFieldBoundary.mjs";
3
+ export default defineComponent({
4
+ name: "KFieldBoundary",
5
+ setup(_, { slots }) {
6
+ provideFieldBoundary();
7
+ return () => slots.default?.();
8
+ }
9
+ });
@@ -120,7 +120,9 @@ import { ariaKeyShortcuts, formatHotkey } from "../../composables/useHotkey";
120
120
  import { useLinkResolver } from "../core/link";
121
121
  import { useFloatingLayer } from "../floating/layer";
122
122
  import { MENU_ROOT_KEY } from "./menu";
123
+ import { provideFieldBoundary } from "../../composables/useFieldBoundary";
123
124
  import { useApplePlatform } from "../core/env";
125
+ provideFieldBoundary();
124
126
  const props = defineProps({
125
127
  items: { type: Array, required: true },
126
128
  anchor: { type: Function, required: true },
@@ -19,7 +19,6 @@ declare const __VLS_export: import("vue").DefineComponent<{
19
19
  style?: import("vue").StyleValue;
20
20
  results?: (string | number) | undefined;
21
21
  placeholder?: string | undefined | undefined;
22
- ref?: import("vue").VNodeRef | undefined;
23
22
  class?: import("vue").ClassValue;
24
23
  role?: string | undefined | undefined;
25
24
  'aria-label'?: string | undefined | undefined;
@@ -130,7 +129,7 @@ declare const __VLS_export: import("vue").DefineComponent<{
130
129
  'aria-colindex'?: (string | number) | undefined;
131
130
  'aria-colspan'?: (string | number) | undefined;
132
131
  'aria-controls'?: string | undefined | undefined;
133
- 'aria-current'?: "page" | "location" | "time" | (boolean | "true" | "false") | "step" | "date" | undefined;
132
+ 'aria-current'?: "page" | "time" | (boolean | "true" | "false") | "step" | "location" | "date" | undefined;
134
133
  'aria-describedby'?: string | undefined | undefined;
135
134
  'aria-details'?: string | undefined | undefined;
136
135
  'aria-disabled'?: (boolean | "true" | "false") | undefined;
@@ -167,6 +166,7 @@ declare const __VLS_export: import("vue").DefineComponent<{
167
166
  'aria-valuemin'?: (string | number) | undefined;
168
167
  'aria-valuenow'?: (string | number) | undefined;
169
168
  'aria-valuetext'?: string | undefined | undefined;
169
+ ref?: import("vue").VNodeRef | undefined;
170
170
  ref_for?: boolean | undefined | undefined;
171
171
  ref_key?: string | undefined | undefined;
172
172
  accesskey?: string | undefined | undefined;
@@ -230,7 +230,6 @@ declare const __VLS_export: import("vue").DefineComponent<{
230
230
  style?: import("vue").StyleValue;
231
231
  results?: (string | number) | undefined;
232
232
  placeholder?: string | undefined | undefined;
233
- ref?: import("vue").VNodeRef | undefined;
234
233
  class?: import("vue").ClassValue;
235
234
  role?: string | undefined | undefined;
236
235
  'aria-label'?: string | undefined | undefined;
@@ -341,7 +340,7 @@ declare const __VLS_export: import("vue").DefineComponent<{
341
340
  'aria-colindex'?: (string | number) | undefined;
342
341
  'aria-colspan'?: (string | number) | undefined;
343
342
  'aria-controls'?: string | undefined | undefined;
344
- 'aria-current'?: "page" | "location" | "time" | (boolean | "true" | "false") | "step" | "date" | undefined;
343
+ 'aria-current'?: "page" | "time" | (boolean | "true" | "false") | "step" | "location" | "date" | undefined;
345
344
  'aria-describedby'?: string | undefined | undefined;
346
345
  'aria-details'?: string | undefined | undefined;
347
346
  'aria-disabled'?: (boolean | "true" | "false") | undefined;
@@ -378,6 +377,7 @@ declare const __VLS_export: import("vue").DefineComponent<{
378
377
  'aria-valuemin'?: (string | number) | undefined;
379
378
  'aria-valuenow'?: (string | number) | undefined;
380
379
  'aria-valuetext'?: string | undefined | undefined;
380
+ ref?: import("vue").VNodeRef | undefined;
381
381
  ref_for?: boolean | undefined | undefined;
382
382
  ref_key?: string | undefined | undefined;
383
383
  accesskey?: string | undefined | undefined;
@@ -419,8 +419,8 @@ declare const __VLS_export: import("vue").DefineComponent<{
419
419
  onOpenChange?: ((open: boolean) => any) | undefined;
420
420
  }>, {
421
421
  offset: number;
422
- level: number;
423
422
  placement: Placement;
423
+ level: number;
424
424
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
425
425
  declare const _default: typeof __VLS_export;
426
426
  export default _default;
@@ -11,6 +11,7 @@
11
11
  :close-label="entry.options.closeLabel"
12
12
  :flush="entry.options.flush"
13
13
  :loading="entry.loading"
14
+ :before-close="entry.options.beforeClose"
14
15
  @close="emit('close')"
15
16
  @after-leave="emit('afterLeave')"
16
17
  >
@@ -28,6 +29,7 @@
28
29
  :close-label="entry.options.closeLabel"
29
30
  :flush="entry.options.flush"
30
31
  :loading="entry.loading"
32
+ :before-close="entry.options.beforeClose"
31
33
  @close="emit('close')"
32
34
  @after-leave="emit('afterLeave')"
33
35
  >
@@ -10,8 +10,6 @@ declare const __VLS_export: import("vue").DefineComponent<{
10
10
  placeholder?: string | undefined;
11
11
  description?: string;
12
12
  size?: "sm" | "md" | "lg" | "xl" | "full" | undefined;
13
- ref?: import("vue").VNodeRef | undefined;
14
- open?: boolean | undefined;
15
13
  class?: import("vue").ClassValue;
16
14
  role?: string | undefined;
17
15
  'aria-label'?: string | undefined;
@@ -161,6 +159,7 @@ declare const __VLS_export: import("vue").DefineComponent<{
161
159
  'aria-valuemin'?: (string | number) | undefined;
162
160
  'aria-valuenow'?: (string | number) | undefined;
163
161
  'aria-valuetext'?: string | undefined;
162
+ ref?: import("vue").VNodeRef | undefined;
164
163
  ref_for?: boolean | undefined | undefined;
165
164
  ref_key?: string | undefined | undefined;
166
165
  accesskey?: string | undefined;
@@ -197,22 +196,24 @@ declare const __VLS_export: import("vue").DefineComponent<{
197
196
  exportparts?: string;
198
197
  part?: string;
199
198
  popover?: import("../../index.ts").PopoverMode | "" | boolean;
200
- onCancel?: ((payload: Event) => void) | undefined;
199
+ dismissible?: boolean | undefined;
200
+ open?: boolean | undefined;
201
+ "onUpdate:open"?: (((value: boolean) => any) & ((value: boolean) => any)) | undefined;
201
202
  onVnodeBeforeMount?: (((vnode: import("vue").VNode) => void) | ((vnode: import("vue").VNode) => void)[]) | undefined;
202
203
  onVnodeMounted?: (((vnode: import("vue").VNode) => void) | ((vnode: import("vue").VNode) => void)[]) | undefined;
203
204
  onVnodeBeforeUpdate?: (((vnode: import("vue").VNode, oldVNode: import("vue").VNode) => void) | ((vnode: import("vue").VNode, oldVNode: import("vue").VNode) => void)[]) | undefined;
204
205
  onVnodeUpdated?: (((vnode: import("vue").VNode, oldVNode: import("vue").VNode) => void) | ((vnode: import("vue").VNode, oldVNode: import("vue").VNode) => void)[]) | undefined;
205
206
  onVnodeBeforeUnmount?: (((vnode: import("vue").VNode) => void) | ((vnode: import("vue").VNode) => void)[]) | undefined;
206
207
  onVnodeUnmounted?: (((vnode: import("vue").VNode) => void) | ((vnode: import("vue").VNode) => void)[]) | undefined;
208
+ onCancel?: ((payload: Event) => void) | undefined;
209
+ side?: import("../../index.ts").DrawerSide;
207
210
  flush?: boolean;
208
- dismissible?: boolean | undefined;
209
- "onUpdate:open"?: (((value: boolean) => any) & ((value: boolean) => any)) | undefined;
210
211
  sheet?: boolean;
211
- side?: import("../../index.ts").DrawerSide;
212
212
  onOpen?: ((() => any) & (() => any)) | undefined;
213
213
  rootClass?: unknown;
214
214
  hideClose?: boolean;
215
215
  closeLabel?: string;
216
+ beforeClose?: import("../../index.ts").DialogBeforeClose;
216
217
  closedby?: import("../../index.ts").DialogClosedBy;
217
218
  }, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
218
219
  close: () => any;
@@ -229,8 +230,6 @@ declare const __VLS_export: import("vue").DefineComponent<{
229
230
  placeholder?: string | undefined;
230
231
  description?: string;
231
232
  size?: "sm" | "md" | "lg" | "xl" | "full" | undefined;
232
- ref?: import("vue").VNodeRef | undefined;
233
- open?: boolean | undefined;
234
233
  class?: import("vue").ClassValue;
235
234
  role?: string | undefined;
236
235
  'aria-label'?: string | undefined;
@@ -380,6 +379,7 @@ declare const __VLS_export: import("vue").DefineComponent<{
380
379
  'aria-valuemin'?: (string | number) | undefined;
381
380
  'aria-valuenow'?: (string | number) | undefined;
382
381
  'aria-valuetext'?: string | undefined;
382
+ ref?: import("vue").VNodeRef | undefined;
383
383
  ref_for?: boolean | undefined | undefined;
384
384
  ref_key?: string | undefined | undefined;
385
385
  accesskey?: string | undefined;
@@ -416,22 +416,24 @@ declare const __VLS_export: import("vue").DefineComponent<{
416
416
  exportparts?: string;
417
417
  part?: string;
418
418
  popover?: import("../../index.ts").PopoverMode | "" | boolean;
419
- onCancel?: ((payload: Event) => void) | undefined;
419
+ dismissible?: boolean | undefined;
420
+ open?: boolean | undefined;
421
+ "onUpdate:open"?: (((value: boolean) => any) & ((value: boolean) => any)) | undefined;
420
422
  onVnodeBeforeMount?: (((vnode: import("vue").VNode) => void) | ((vnode: import("vue").VNode) => void)[]) | undefined;
421
423
  onVnodeMounted?: (((vnode: import("vue").VNode) => void) | ((vnode: import("vue").VNode) => void)[]) | undefined;
422
424
  onVnodeBeforeUpdate?: (((vnode: import("vue").VNode, oldVNode: import("vue").VNode) => void) | ((vnode: import("vue").VNode, oldVNode: import("vue").VNode) => void)[]) | undefined;
423
425
  onVnodeUpdated?: (((vnode: import("vue").VNode, oldVNode: import("vue").VNode) => void) | ((vnode: import("vue").VNode, oldVNode: import("vue").VNode) => void)[]) | undefined;
424
426
  onVnodeBeforeUnmount?: (((vnode: import("vue").VNode) => void) | ((vnode: import("vue").VNode) => void)[]) | undefined;
425
427
  onVnodeUnmounted?: (((vnode: import("vue").VNode) => void) | ((vnode: import("vue").VNode) => void)[]) | undefined;
428
+ onCancel?: ((payload: Event) => void) | undefined;
429
+ side?: import("../../index.ts").DrawerSide;
426
430
  flush?: boolean;
427
- dismissible?: boolean | undefined;
428
- "onUpdate:open"?: (((value: boolean) => any) & ((value: boolean) => any)) | undefined;
429
431
  sheet?: boolean;
430
- side?: import("../../index.ts").DrawerSide;
431
432
  onOpen?: ((() => any) & (() => any)) | undefined;
432
433
  rootClass?: unknown;
433
434
  hideClose?: boolean;
434
435
  closeLabel?: string;
436
+ beforeClose?: import("../../index.ts").DialogBeforeClose;
435
437
  closedby?: import("../../index.ts").DialogClosedBy;
436
438
  }> & Readonly<{
437
439
  onClose?: (() => any) | undefined;
@@ -1,18 +1,21 @@
1
1
  import type { Ref } from 'vue';
2
+ import type { DialogBeforeClose, DialogCloseReason } from '../../components/overlays/types';
2
3
  export declare const modalStack: import("vue").ShallowReactive<HTMLDialogElement[]>;
3
4
  export interface ModalDialogOptions {
4
5
  dialog: Readonly<Ref<HTMLDialogElement | null | undefined>>;
5
6
  panel: Readonly<Ref<HTMLElement | null | undefined>>;
6
7
  open: Ref<boolean>;
7
8
  dismissible: () => boolean;
9
+ beforeClose?: () => DialogBeforeClose | undefined;
8
10
  onOpen?: () => void;
9
11
  onClose?: () => void;
10
12
  onAfterLeave?: () => void;
11
13
  }
12
14
  export declare function useModalDialog(options: ModalDialogOptions): {
13
15
  present: Ref<boolean, boolean>;
16
+ requestClose: (reason: DialogCloseReason) => Promise<boolean>;
14
17
  onCancel: (event: Event) => void;
15
- onClose: () => void;
18
+ onClose: () => Promise<void>;
16
19
  onPointerDown: (event: PointerEvent) => void;
17
20
  onClick: (event: MouseEvent) => void;
18
21
  };
@@ -11,6 +11,35 @@ export function useModalDialog(options) {
11
11
  const scrollLock = useScrollLock();
12
12
  let returnTarget = null;
13
13
  let pressedOnBackdrop = false;
14
+ let closing = false;
15
+ async function allowClose(reason) {
16
+ const guard = options.beforeClose?.();
17
+ if (!guard) return true;
18
+ if (closing) return false;
19
+ closing = true;
20
+ try {
21
+ return await guard(reason) !== false;
22
+ } catch {
23
+ return false;
24
+ } finally {
25
+ closing = false;
26
+ }
27
+ }
28
+ async function requestClose(reason) {
29
+ if (!options.open.value) return true;
30
+ if (!await allowClose(reason)) return false;
31
+ options.open.value = false;
32
+ return true;
33
+ }
34
+ function reopen() {
35
+ const dialog = options.dialog.value;
36
+ if (!dialog || dialog.open || !options.open.value) return;
37
+ try {
38
+ dialog.showModal();
39
+ } catch {
40
+ dialog.setAttribute("open", "");
41
+ }
42
+ }
14
43
  async function show() {
15
44
  present.value = true;
16
45
  await nextTick();
@@ -63,10 +92,15 @@ export function useModalDialog(options) {
63
92
  });
64
93
  function onCancel(event) {
65
94
  event.preventDefault();
66
- if (options.dismissible()) options.open.value = false;
95
+ if (options.dismissible()) requestClose("escape");
67
96
  }
68
- function onClose() {
69
- if (options.open.value) options.open.value = false;
97
+ async function onClose() {
98
+ if (!options.open.value) return;
99
+ if (!options.beforeClose?.()) {
100
+ options.open.value = false;
101
+ return;
102
+ }
103
+ if (!options.dismissible() || !await requestClose("escape")) reopen();
70
104
  }
71
105
  function onPointerDown(event) {
72
106
  pressedOnBackdrop = event.target === event.currentTarget;
@@ -74,7 +108,7 @@ export function useModalDialog(options) {
74
108
  function onClick(event) {
75
109
  const fromBackdrop = pressedOnBackdrop && event.target === event.currentTarget;
76
110
  pressedOnBackdrop = false;
77
- if (fromBackdrop && options.dismissible()) options.open.value = false;
111
+ if (fromBackdrop && options.dismissible()) requestClose("backdrop");
78
112
  }
79
- return { present, onCancel, onClose, onPointerDown, onClick };
113
+ return { present, requestClose, onCancel, onClose, onPointerDown, onClick };
80
114
  }
@@ -1,5 +1,5 @@
1
1
  import type { Component, InjectionKey } from 'vue';
2
- import type { DrawerSide, DrawerSize, ModalSize } from '../../components/overlays/types';
2
+ import type { DialogBeforeClose, DrawerSide, DrawerSize, ModalSize } from '../../components/overlays/types';
3
3
  export type OverlayKind = 'modal' | 'drawer';
4
4
  export interface OverlayOptions {
5
5
  as?: OverlayKind;
@@ -12,6 +12,7 @@ export interface OverlayOptions {
12
12
  dismissible?: boolean;
13
13
  hideClose?: boolean;
14
14
  closeLabel?: string;
15
+ beforeClose?: DialogBeforeClose;
15
16
  }
16
17
  export interface OverlayContext<R = unknown> {
17
18
  id: number;
@@ -187,7 +187,10 @@ export const en = {
187
187
  title: "Drop files here or click to browse",
188
188
  drop: "Release to add files",
189
189
  list: "Selected files",
190
- selected: "{count} file selected | {count} files selected"
190
+ selected: "{count} file selected | {count} files selected",
191
+ directoryTitle: "Drop a folder here or click to browse",
192
+ loading: "Uploading",
193
+ added: "{count} file added | {count} files added"
191
194
  },
192
195
  filterPills: {
193
196
  label: "Filters"
@@ -239,6 +242,13 @@ export const en = {
239
242
  saveBar: {
240
243
  message: "You have unsaved changes"
241
244
  },
245
+ selectionBar: {
246
+ label: "Selection",
247
+ selectedOf: "{count} of {total} selected",
248
+ selectAll: "Select all {count}",
249
+ clear: "Clear selection",
250
+ cleared: "Selection cleared"
251
+ },
242
252
  settings: {
243
253
  title: "Settings",
244
254
  close: "Close settings",
@@ -278,7 +288,12 @@ export const en = {
278
288
  dismiss: "Dismiss notification"
279
289
  },
280
290
  tree: {
281
- label: "Tree"
291
+ label: "Tree",
292
+ empty: "No items",
293
+ reorderHint: "Press Alt with the up or down arrow to move",
294
+ reorderNestedHint: "Press Alt with the arrow keys to move: up and down change the position, left and right change the level",
295
+ moved: "{label} moved to position {position} of {count}",
296
+ movedInto: "{label} moved into {parent}, position {position} of {count}"
282
297
  }
283
298
  }
284
299
  };
@@ -187,7 +187,10 @@ export const it = {
187
187
  title: "Trascina i file qui o fai clic per sfogliare",
188
188
  drop: "Rilascia per aggiungere i file",
189
189
  list: "File selezionati",
190
- selected: "{count} file selezionato | {count} file selezionati"
190
+ selected: "{count} file selezionato | {count} file selezionati",
191
+ directoryTitle: "Trascina una cartella qui o fai clic per sfogliare",
192
+ loading: "Caricamento in corso",
193
+ added: "{count} file aggiunto | {count} file aggiunti"
191
194
  },
192
195
  filterPills: {
193
196
  label: "Filtri"
@@ -239,6 +242,13 @@ export const it = {
239
242
  saveBar: {
240
243
  message: "Hai modifiche non salvate"
241
244
  },
245
+ selectionBar: {
246
+ label: "Selezione",
247
+ selectedOf: "{count} di {total} selezionato | {count} di {total} selezionati",
248
+ selectAll: "Seleziona tutti e {count}",
249
+ clear: "Deseleziona tutto",
250
+ cleared: "Selezione annullata"
251
+ },
242
252
  settings: {
243
253
  title: "Impostazioni",
244
254
  close: "Chiudi impostazioni",
@@ -278,7 +288,12 @@ export const it = {
278
288
  dismiss: "Chiudi notifica"
279
289
  },
280
290
  tree: {
281
- label: "Albero"
291
+ label: "Albero",
292
+ empty: "Nessun elemento",
293
+ reorderHint: "Premi Alt con la freccia su o gi\xF9 per spostare",
294
+ reorderNestedHint: "Premi Alt con le frecce per spostare: su e gi\xF9 cambiano la posizione, sinistra e destra il livello",
295
+ moved: "{label} ora in posizione {position} di {count}",
296
+ movedInto: "{label} ora dentro {parent}, in posizione {position} di {count}"
282
297
  }
283
298
  }
284
299
  };
@@ -186,6 +186,9 @@ export interface KMessages {
186
186
  drop: string;
187
187
  list: string;
188
188
  selected: string;
189
+ directoryTitle: string;
190
+ loading: string;
191
+ added: string;
189
192
  };
190
193
  filterPills: {
191
194
  label: string;
@@ -237,6 +240,13 @@ export interface KMessages {
237
240
  saveBar: {
238
241
  message: string;
239
242
  };
243
+ selectionBar: {
244
+ label: string;
245
+ selectedOf: string;
246
+ selectAll: string;
247
+ clear: string;
248
+ cleared: string;
249
+ };
240
250
  settings: {
241
251
  title: string;
242
252
  close: string;
@@ -277,6 +287,11 @@ export interface KMessages {
277
287
  };
278
288
  tree: {
279
289
  label: string;
290
+ empty: string;
291
+ reorderHint: string;
292
+ reorderNestedHint: string;
293
+ moved: string;
294
+ movedInto: string;
280
295
  };
281
296
  }
282
297
  export interface KLocale {
@@ -5,6 +5,7 @@ import type { DeepPartial, KMessages } from '../locale/types';
5
5
  export type { KAppConfig } from '../components/templates/types';
6
6
  export interface IconCollectionOption {
7
7
  prefix: string;
8
+ from?: string;
8
9
  include?: string[];
9
10
  exclude?: string[];
10
11
  }
@@ -30,12 +31,12 @@ export interface ModuleOptions {
30
31
  aliases?: Record<string, string>;
31
32
  };
32
33
  theme: {
33
- cookie: string | false;
34
- default: ThemePreference;
34
+ cookie?: string | false;
35
+ default?: ThemePreference;
35
36
  };
36
37
  preset: {
37
- cookie: string | false;
38
- default: ThemePreset;
38
+ cookie?: string | false;
39
+ default?: ThemePreset;
39
40
  };
40
41
  fonts: boolean | ThemePreset[];
41
42
  locale: string;
@@ -109,9 +109,9 @@ export default defineNuxtModule({
109
109
  viteBuild.cssTarget = options.cssTarget;
110
110
  const runtimeConfig = {
111
111
  global: options.global,
112
- themeCookie: options.theme.cookie,
113
- themeDefault: options.theme.default,
114
- presetCookie: options.preset.cookie,
112
+ themeCookie: options.theme.cookie ?? "k-theme",
113
+ themeDefault: options.theme.default ?? "system",
114
+ presetCookie: options.preset.cookie ?? "k-preset",
115
115
  presetDefault,
116
116
  locale: options.locale,
117
117
  messages: options.messages
@@ -149,12 +149,15 @@ export default defineNuxtModule({
149
149
  ].join("\n")
150
150
  });
151
151
  const collections = [];
152
+ const seenPrefixes = /* @__PURE__ */ new Set();
152
153
  for (const entry of options.icons.collections ?? []) {
153
154
  const collection = typeof entry === "string" ? { prefix: entry } : entry;
154
- const file = await resolveCollectionFile(collection.prefix, searchPaths);
155
- if (!file) {
155
+ if (seenPrefixes.has(collection.prefix)) continue;
156
+ seenPrefixes.add(collection.prefix);
157
+ const file = collection.from ? resolveIconsDir(collection.from, nuxt.options.rootDir) : await resolveCollectionFile(collection.prefix, searchPaths);
158
+ if (!file || !existsSync(file)) {
156
159
  console.warn(
157
- `[@xleddyl/443-components-vue] icon collection "${collection.prefix}" not installed: pnpm add -D @iconify-json/${collection.prefix}`
160
+ collection.from ? `[@xleddyl/443-components-vue] icon collection "${collection.prefix}" not found: ${file}` : `[@xleddyl/443-components-vue] icon collection "${collection.prefix}" not installed: pnpm add -D @iconify-json/${collection.prefix}`
158
161
  );
159
162
  continue;
160
163
  }