nuxt-ui-tools 0.1.0 → 0.1.1

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 (164) hide show
  1. package/dist/module.d.mts +4 -0
  2. package/dist/module.json +1 -1
  3. package/dist/module.mjs +30 -15
  4. package/dist/runtime/form/components/actions/FormActions.d.vue.ts +0 -2
  5. package/dist/runtime/form/components/actions/FormActions.vue +5 -8
  6. package/dist/runtime/form/components/actions/FormActions.vue.d.ts +0 -2
  7. package/dist/runtime/form/components/layout/DrawerLayout.vue +5 -1
  8. package/dist/runtime/form/components/layout/ModalLayout.vue +5 -1
  9. package/dist/runtime/form/components/renderer/FormCompositeControl.d.vue.ts +15 -0
  10. package/dist/runtime/form/components/renderer/FormCompositeControl.vue +13 -0
  11. package/dist/runtime/form/components/renderer/FormCompositeControl.vue.d.ts +15 -0
  12. package/dist/runtime/form/components/renderer/FormFieldRenderer.d.vue.ts +1 -0
  13. package/dist/runtime/form/components/renderer/FormFieldRenderer.vue +19 -3
  14. package/dist/runtime/form/components/renderer/FormFieldRenderer.vue.d.ts +1 -0
  15. package/dist/runtime/form/components/renderer/FormFieldShell.d.vue.ts +4 -4
  16. package/dist/runtime/form/components/renderer/FormFieldShell.vue +15 -1
  17. package/dist/runtime/form/components/renderer/FormFieldShell.vue.d.ts +4 -4
  18. package/dist/runtime/form/components/root/Form.vue +5 -3
  19. package/dist/runtime/form/composables/use-field-control.d.ts +1 -1
  20. package/dist/runtime/form/composables/use-field-control.js +4 -0
  21. package/dist/runtime/form/composables/use-field-options.d.ts +1 -1
  22. package/dist/runtime/form/composables/use-field-options.js +75 -31
  23. package/dist/runtime/form/composables/use-form-field-chrome.d.ts +3 -0
  24. package/dist/runtime/form/composables/use-form-field-chrome.js +9 -0
  25. package/dist/runtime/form/composables/use-form-runtime.js +17 -5
  26. package/dist/runtime/form/fields/array-list/component.vue +4 -1
  27. package/dist/runtime/form/fields/auto-complete/component.vue +23 -16
  28. package/dist/runtime/form/fields/checkbox-card/component.vue +28 -29
  29. package/dist/runtime/form/fields/checkbox-group/component.vue +28 -29
  30. package/dist/runtime/form/fields/color-picker/component.vue +4 -2
  31. package/dist/runtime/form/fields/date-family/component.vue +9 -4
  32. package/dist/runtime/form/fields/hierarchy/SelectionCheckbox.d.vue.ts +13 -0
  33. package/dist/runtime/form/fields/hierarchy/SelectionCheckbox.vue +24 -0
  34. package/dist/runtime/form/fields/hierarchy/SelectionCheckbox.vue.d.ts +13 -0
  35. package/dist/runtime/form/fields/hierarchy/SelectionRadio.d.vue.ts +14 -0
  36. package/dist/runtime/form/fields/hierarchy/SelectionRadio.vue +27 -0
  37. package/dist/runtime/form/fields/hierarchy/SelectionRadio.vue.d.ts +14 -0
  38. package/dist/runtime/form/fields/hierarchy/component.vue +257 -142
  39. package/dist/runtime/form/fields/hierarchy/utils.d.ts +9 -0
  40. package/dist/runtime/form/fields/hierarchy/utils.js +32 -0
  41. package/dist/runtime/form/fields/input-group/component.vue +7 -30
  42. package/dist/runtime/form/fields/matrix/component.vue +9 -3
  43. package/dist/runtime/form/fields/phone-number/component.vue +7 -2
  44. package/dist/runtime/form/fields/rating/component.vue +25 -2
  45. package/dist/runtime/form/fields/select/component.vue +29 -21
  46. package/dist/runtime/form/fields/switch-group/component.vue +8 -3
  47. package/dist/runtime/form/fields/time/component.vue +7 -5
  48. package/dist/runtime/form/fields/upload/component.vue +5 -3
  49. package/dist/runtime/form/types/api.d.ts +9 -3
  50. package/dist/runtime/form/types/field-base.d.ts +3 -1
  51. package/dist/runtime/form/types/runtime.d.ts +2 -0
  52. package/dist/runtime/form/types/ui.d.ts +1 -0
  53. package/dist/runtime/form/utils/api.js +3 -0
  54. package/dist/runtime/form/utils/options.d.ts +11 -2
  55. package/dist/runtime/form/utils/options.js +57 -9
  56. package/dist/runtime/form/utils/state.js +10 -2
  57. package/dist/runtime/i18n/locales/en.js +38 -0
  58. package/dist/runtime/i18n/locales/fr.js +38 -0
  59. package/dist/runtime/i18n/types.d.ts +38 -0
  60. package/dist/runtime/i18n/use-locale.d.ts +2 -2
  61. package/dist/runtime/i18n/use-locale.js +3 -3
  62. package/dist/runtime/table/components/DataList.d.vue.ts +2 -0
  63. package/dist/runtime/table/components/DataList.vue.d.ts +2 -0
  64. package/dist/runtime/table/components/actions/RowActions.d.vue.ts +4 -2
  65. package/dist/runtime/table/components/actions/RowActions.vue +2 -0
  66. package/dist/runtime/table/components/actions/RowActions.vue.d.ts +4 -2
  67. package/dist/runtime/table/components/data-list/DataListAddFilter.d.vue.ts +5 -3
  68. package/dist/runtime/table/components/data-list/DataListAddFilter.vue +6 -1
  69. package/dist/runtime/table/components/data-list/DataListAddFilter.vue.d.ts +5 -3
  70. package/dist/runtime/table/components/data-list/DataListContent.d.vue.ts +24 -17
  71. package/dist/runtime/table/components/data-list/DataListContent.vue +70 -17
  72. package/dist/runtime/table/components/data-list/DataListContent.vue.d.ts +24 -17
  73. package/dist/runtime/table/components/data-list/DataListDefault.d.vue.ts +2 -0
  74. package/dist/runtime/table/components/data-list/DataListDefault.vue.d.ts +2 -0
  75. package/dist/runtime/table/components/data-list/DataListFilterTags.d.vue.ts +2 -0
  76. package/dist/runtime/table/components/data-list/DataListFilterTags.vue.d.ts +2 -0
  77. package/dist/runtime/table/components/data-list/DataListLayoutSwitch.vue +17 -11
  78. package/dist/runtime/table/components/data-list/DataListRoot.vue +2 -46
  79. package/dist/runtime/table/components/data-list/DataListSortMenu.vue +6 -0
  80. package/dist/runtime/table/components/filters/shared/DynamicFilterPicker.d.vue.ts +5 -0
  81. package/dist/runtime/table/components/filters/shared/DynamicFilterPicker.vue +182 -59
  82. package/dist/runtime/table/components/filters/shared/DynamicFilterPicker.vue.d.ts +5 -0
  83. package/dist/runtime/table/components/filters/shared/FilterMatchModeButton.d.vue.ts +3 -1
  84. package/dist/runtime/table/components/filters/shared/FilterMatchModeButton.vue +29 -5
  85. package/dist/runtime/table/components/filters/shared/FilterMatchModeButton.vue.d.ts +3 -1
  86. package/dist/runtime/table/components/filters/shared/FilterMatchModePanel.d.vue.ts +17 -0
  87. package/dist/runtime/table/components/filters/shared/FilterMatchModePanel.vue +47 -0
  88. package/dist/runtime/table/components/filters/shared/FilterMatchModePanel.vue.d.ts +17 -0
  89. package/dist/runtime/table/components/filters/shared/FilterOptionMultipleList.d.vue.ts +3 -1
  90. package/dist/runtime/table/components/filters/shared/FilterOptionMultipleList.vue +12 -3
  91. package/dist/runtime/table/components/filters/shared/FilterOptionMultipleList.vue.d.ts +3 -1
  92. package/dist/runtime/table/components/filters/shared/FilterOptionPickerContent.d.vue.ts +3 -0
  93. package/dist/runtime/table/components/filters/shared/FilterOptionPickerContent.vue +11 -1
  94. package/dist/runtime/table/components/filters/shared/FilterOptionPickerContent.vue.d.ts +3 -0
  95. package/dist/runtime/table/components/filters/shared/FilterOptionRow.d.vue.ts +3 -0
  96. package/dist/runtime/table/components/filters/shared/FilterOptionRow.vue +48 -9
  97. package/dist/runtime/table/components/filters/shared/FilterOptionRow.vue.d.ts +3 -0
  98. package/dist/runtime/table/components/filters/shared/FilterOptionSingleList.d.vue.ts +3 -0
  99. package/dist/runtime/table/components/filters/shared/FilterOptionSingleList.vue +35 -9
  100. package/dist/runtime/table/components/filters/shared/FilterOptionSingleList.vue.d.ts +3 -0
  101. package/dist/runtime/table/components/filters/shared/FilterOptionTreeContent.d.vue.ts +3 -0
  102. package/dist/runtime/table/components/filters/shared/FilterOptionTreeContent.vue +77 -20
  103. package/dist/runtime/table/components/filters/shared/FilterOptionTreeContent.vue.d.ts +3 -0
  104. package/dist/runtime/table/components/filters/shared/FilterPopoverShell.d.vue.ts +27 -0
  105. package/dist/runtime/table/components/filters/shared/FilterPopoverShell.vue +36 -0
  106. package/dist/runtime/table/components/filters/shared/FilterPopoverShell.vue.d.ts +27 -0
  107. package/dist/runtime/table/components/filters/shared/FilterSearchablePanel.d.vue.ts +3 -0
  108. package/dist/runtime/table/components/filters/shared/FilterSearchablePanel.vue +40 -10
  109. package/dist/runtime/table/components/filters/shared/FilterSearchablePanel.vue.d.ts +3 -0
  110. package/dist/runtime/table/components/filters/shared/FilterStageTransition.d.vue.ts +23 -0
  111. package/dist/runtime/table/components/filters/shared/FilterStageTransition.vue +21 -0
  112. package/dist/runtime/table/components/filters/shared/FilterStageTransition.vue.d.ts +23 -0
  113. package/dist/runtime/table/components/filters/shared/FilterTriggerTag.d.vue.ts +3 -2
  114. package/dist/runtime/table/components/filters/shared/FilterTriggerTag.vue +26 -25
  115. package/dist/runtime/table/components/filters/shared/FilterTriggerTag.vue.d.ts +3 -2
  116. package/dist/runtime/table/components/filters/tags/BooleanFilterTag.d.vue.ts +1 -1
  117. package/dist/runtime/table/components/filters/tags/BooleanFilterTag.vue +75 -22
  118. package/dist/runtime/table/components/filters/tags/BooleanFilterTag.vue.d.ts +1 -1
  119. package/dist/runtime/table/components/filters/tags/DateFilterTag.d.vue.ts +3 -1
  120. package/dist/runtime/table/components/filters/tags/DateFilterTag.vue +254 -160
  121. package/dist/runtime/table/components/filters/tags/DateFilterTag.vue.d.ts +3 -1
  122. package/dist/runtime/table/components/filters/tags/FilterTagsBar.d.vue.ts +7 -6
  123. package/dist/runtime/table/components/filters/tags/FilterTagsBar.vue +12 -27
  124. package/dist/runtime/table/components/filters/tags/FilterTagsBar.vue.d.ts +7 -6
  125. package/dist/runtime/table/components/filters/tags/NumberFilterTag.d.vue.ts +3 -2
  126. package/dist/runtime/table/components/filters/tags/NumberFilterTag.vue +192 -106
  127. package/dist/runtime/table/components/filters/tags/NumberFilterTag.vue.d.ts +3 -2
  128. package/dist/runtime/table/components/filters/tags/OptionFilterTag.d.vue.ts +3 -2
  129. package/dist/runtime/table/components/filters/tags/OptionFilterTag.vue +110 -48
  130. package/dist/runtime/table/components/filters/tags/OptionFilterTag.vue.d.ts +3 -2
  131. package/dist/runtime/table/components/filters/tags/TextFilterTag.d.vue.ts +3 -2
  132. package/dist/runtime/table/components/filters/tags/TextFilterTag.vue +120 -57
  133. package/dist/runtime/table/components/filters/tags/TextFilterTag.vue.d.ts +3 -2
  134. package/dist/runtime/table/components/grid/GridRenderer.vue +1 -1
  135. package/dist/runtime/table/components/layout/TableFooter.vue +1 -0
  136. package/dist/runtime/table/components/table/TableRenderer.vue +18 -9
  137. package/dist/runtime/table/composables/use-filter-tag-session.d.ts +3 -4
  138. package/dist/runtime/table/composables/use-filter-tag-session.js +12 -32
  139. package/dist/runtime/table/composables/use-query-state.d.ts +3 -3
  140. package/dist/runtime/table/composables/use-query-state.js +7 -32
  141. package/dist/runtime/table/composables/use-table-api.js +2 -2
  142. package/dist/runtime/table/composables/use-table-columns.d.ts +1 -11
  143. package/dist/runtime/table/composables/use-table-filter-presentation.d.ts +0 -3
  144. package/dist/runtime/table/composables/use-table-filter-presentation.js +0 -9
  145. package/dist/runtime/table/composables/use-table-filters.js +18 -7
  146. package/dist/runtime/table/composables/use-table-internals.d.ts +3 -42
  147. package/dist/runtime/table/types/actions.d.ts +1 -1
  148. package/dist/runtime/table/types/data-list.d.ts +41 -8
  149. package/dist/runtime/table/types/filters.d.ts +4 -0
  150. package/dist/runtime/table/utils/actions.d.ts +1 -1
  151. package/dist/runtime/table/utils/columns/menu.d.ts +2 -11
  152. package/dist/runtime/table/utils/columns/render.d.ts +2 -9
  153. package/dist/runtime/table/utils/columns/render.js +4 -4
  154. package/dist/runtime/table/utils/data-list-ui.d.ts +3 -1
  155. package/dist/runtime/table/utils/data-list-ui.js +45 -0
  156. package/dist/runtime/table/utils/filters/editor-size.d.ts +11 -0
  157. package/dist/runtime/table/utils/filters/editor-size.js +45 -0
  158. package/dist/runtime/table/utils/filters/index.d.ts +1 -1
  159. package/dist/runtime/table/utils/filters/index.js +1 -1
  160. package/dist/runtime/table/utils/query-state.d.ts +18 -1
  161. package/dist/runtime/table/utils/query-state.js +109 -0
  162. package/package.json +4 -2
  163. package/dist/runtime/table/utils/filters/operators.d.ts +0 -4
  164. package/dist/runtime/table/utils/filters/operators.js +0 -6
@@ -0,0 +1,47 @@
1
+ <script setup>
2
+ import UIcon from "@nuxt/ui/components/Icon.vue";
3
+ import { mergeDataListUiClass, resolveFilterEditorSizeClasses } from "../../../utils";
4
+ const props = defineProps({
5
+ items: { type: Array, required: true },
6
+ selected: { type: String, required: false },
7
+ size: { type: String, required: false },
8
+ ui: { type: Object, required: false }
9
+ });
10
+ const emit = defineEmits(["select"]);
11
+ const sizeClasses = resolveFilterEditorSizeClasses(props.size);
12
+ </script>
13
+
14
+ <template>
15
+ <div :class="mergeDataListUiClass(sizeClasses.scrollArea, void 0, ui?.list)">
16
+ <button
17
+ v-for="item in items"
18
+ :key="item.value"
19
+ type="button"
20
+ :class="
21
+ mergeDataListUiClass(
22
+ `flex w-full items-center rounded-md text-left transition-colors hover:bg-elevated/70 ${sizeClasses.option}`,
23
+ void 0,
24
+ ui?.operatorItem
25
+ )
26
+ "
27
+ @click="emit('select', item.value)"
28
+ >
29
+ <span
30
+ :class="
31
+ mergeDataListUiClass(
32
+ `min-w-0 flex-1 truncate text-default ${sizeClasses.optionLabel}`,
33
+ void 0,
34
+ ui?.operatorLabel
35
+ )
36
+ "
37
+ >
38
+ {{ item.label }}
39
+ </span>
40
+ <UIcon
41
+ v-if="item.value === selected"
42
+ name="i-lucide-check"
43
+ :class="`${sizeClasses.optionIcon} shrink-0 text-muted`"
44
+ />
45
+ </button>
46
+ </div>
47
+ </template>
@@ -0,0 +1,17 @@
1
+ import type { DataListControlSize, DataListFilterEditorUi, TableFilterOperator } from '../../../types/index.js';
2
+ type __VLS_Props = {
3
+ items: Array<{
4
+ label: string;
5
+ value: TableFilterOperator;
6
+ }>;
7
+ selected?: TableFilterOperator;
8
+ size?: DataListControlSize;
9
+ ui?: DataListFilterEditorUi;
10
+ };
11
+ declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
12
+ select: (value: TableFilterOperator) => any;
13
+ }, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{
14
+ onSelect?: ((value: TableFilterOperator) => any) | undefined;
15
+ }>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
16
+ declare const _default: typeof __VLS_export;
17
+ export default _default;
@@ -1,4 +1,4 @@
1
- import type { TableResolvedFilterOptionEntry } from '../../../types/index.js';
1
+ import type { DataListControlSize, DataListFilterEditorUi, TableResolvedFilterOptionEntry } from '../../../types/index.js';
2
2
  interface FilterOptionMultipleListSection {
3
3
  key: string;
4
4
  entries: Array<TableResolvedFilterOptionEntry & {
@@ -13,6 +13,8 @@ type __VLS_Props = {
13
13
  countLoading: boolean;
14
14
  selectedIcon?: string;
15
15
  truncate?: boolean;
16
+ size?: DataListControlSize;
17
+ ui?: DataListFilterEditorUi;
16
18
  };
17
19
  declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
18
20
  select: (options: {
@@ -1,21 +1,28 @@
1
1
  <script setup>
2
+ import { computed } from "vue";
3
+ import { useDataListUi } from "../../../composables/use-data-list-ui";
4
+ import { mergeDataListUiClass } from "../../../utils";
2
5
  import FilterOptionRow from "./FilterOptionRow.vue";
3
6
  const props = defineProps({
4
7
  sections: { type: Array, required: true },
5
8
  showCounts: { type: Boolean, required: true },
6
9
  countLoading: { type: Boolean, required: true },
7
10
  selectedIcon: { type: String, required: false },
8
- truncate: { type: Boolean, required: false }
11
+ truncate: { type: Boolean, required: false },
12
+ size: { type: String, required: false },
13
+ ui: { type: Object, required: false }
9
14
  });
10
15
  const emit = defineEmits(["select"]);
16
+ const dataListUi = useDataListUi();
17
+ const ui = computed(() => props.ui ?? dataListUi.ui.value.filterTags?.ui);
11
18
  </script>
12
19
 
13
20
  <template>
14
- <div class="grid gap-0.5">
21
+ <div :class="mergeDataListUiClass('grid gap-0.5', void 0, ui?.list)">
15
22
  <template v-for="section in props.sections" :key="section.key">
16
23
  <div
17
24
  v-if="section.dividerBefore && section.entries.length"
18
- class="my-1 border-t border-default"
25
+ :class="mergeDataListUiClass('my-1 border-t border-default', void 0, ui?.listDivider)"
19
26
  />
20
27
 
21
28
  <button
@@ -33,6 +40,8 @@ const emit = defineEmits(["select"]);
33
40
  :leading-icon="entry.icon"
34
41
  :selected-icon="props.selectedIcon"
35
42
  :truncate="props.truncate"
43
+ :size="props.size"
44
+ :ui="props.ui"
36
45
  />
37
46
  </button>
38
47
  </template>
@@ -1,4 +1,4 @@
1
- import type { TableResolvedFilterOptionEntry } from '../../../types/index.js';
1
+ import type { DataListControlSize, DataListFilterEditorUi, TableResolvedFilterOptionEntry } from '../../../types/index.js';
2
2
  interface FilterOptionMultipleListSection {
3
3
  key: string;
4
4
  entries: Array<TableResolvedFilterOptionEntry & {
@@ -13,6 +13,8 @@ type __VLS_Props = {
13
13
  countLoading: boolean;
14
14
  selectedIcon?: string;
15
15
  truncate?: boolean;
16
+ size?: DataListControlSize;
17
+ ui?: DataListFilterEditorUi;
16
18
  };
17
19
  declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
18
20
  select: (options: {
@@ -1,4 +1,5 @@
1
1
  import type { useOptionFilterEditorState } from '../../../composables/use-option-filter-editor-state.js';
2
+ import type { DataListControlSize, DataListFilterEditorUi } from '../../../types/index.js';
2
3
  interface FilterOptionMultipleListSection {
3
4
  key: string;
4
5
  entries: Array<ReturnType<typeof useOptionFilterEditorState>['displayEntries']['value'][number]>;
@@ -7,6 +8,8 @@ interface FilterOptionMultipleListSection {
7
8
  type __VLS_Props = {
8
9
  state: ReturnType<typeof useOptionFilterEditorState>;
9
10
  sections?: FilterOptionMultipleListSection[];
11
+ size?: DataListControlSize;
12
+ ui?: DataListFilterEditorUi;
10
13
  };
11
14
  type __VLS_ModelProps = {
12
15
  'searchQuery'?: string;
@@ -6,7 +6,9 @@ import FilterOptionTreeContent from "./FilterOptionTreeContent.vue";
6
6
  import FilterSearchablePanel from "./FilterSearchablePanel.vue";
7
7
  const props = defineProps({
8
8
  state: { type: null, required: true },
9
- sections: { type: Array, required: false }
9
+ sections: { type: Array, required: false },
10
+ size: { type: String, required: false },
11
+ ui: { type: Object, required: false }
10
12
  });
11
13
  const searchQuery = defineModel("searchQuery", { type: String, ...{
12
14
  default: ""
@@ -39,6 +41,8 @@ function handleSelect(options) {
39
41
  !props.state.optionSource.isLoading.value && !props.state.displayEntries.value.length && !props.state.visibleTreeEntries.value.length
40
42
  "
41
43
  :empty-label="props.state.filterUi.value.labels.empty"
44
+ :size="props.size"
45
+ :ui="props.ui"
42
46
  >
43
47
  <template v-if="props.state.filterUi.value.presentation === 'tree'">
44
48
  <template v-if="props.state.optionSource.isLoading.value">
@@ -61,6 +65,8 @@ function handleSelect(options) {
61
65
  props.state.filterUi.value.row.showCounts && props.state.optionSource.isCountLoading.value
62
66
  "
63
67
  :selected-icon="props.state.filterUi.value.row.selectedIcon"
68
+ :size="props.size"
69
+ :ui="props.ui"
64
70
  @toggle-entry="emit('toggleTreeEntry', $event)"
65
71
  @toggle-expanded="emit('toggleExpanded', $event)"
66
72
  />
@@ -86,6 +92,8 @@ function handleSelect(options) {
86
92
  :count-loading="props.state.optionSource.isCountLoading.value"
87
93
  :selected-icon="props.state.filterUi.value.row.selectedIcon"
88
94
  :truncate="props.state.filterUi.value.row.truncate"
95
+ :size="props.size"
96
+ :ui="props.ui"
89
97
  @select="handleSelect($event)"
90
98
  />
91
99
  </template>
@@ -108,6 +116,8 @@ function handleSelect(options) {
108
116
  :count-loading="
109
117
  props.state.filterUi.value.row.showCounts && props.state.optionSource.isCountLoading.value
110
118
  "
119
+ :size="props.size"
120
+ :ui="props.ui"
111
121
  />
112
122
  </template>
113
123
  </FilterSearchablePanel>
@@ -1,4 +1,5 @@
1
1
  import type { useOptionFilterEditorState } from '../../../composables/use-option-filter-editor-state.js';
2
+ import type { DataListControlSize, DataListFilterEditorUi } from '../../../types/index.js';
2
3
  interface FilterOptionMultipleListSection {
3
4
  key: string;
4
5
  entries: Array<ReturnType<typeof useOptionFilterEditorState>['displayEntries']['value'][number]>;
@@ -7,6 +8,8 @@ interface FilterOptionMultipleListSection {
7
8
  type __VLS_Props = {
8
9
  state: ReturnType<typeof useOptionFilterEditorState>;
9
10
  sections?: FilterOptionMultipleListSection[];
11
+ size?: DataListControlSize;
12
+ ui?: DataListFilterEditorUi;
10
13
  };
11
14
  type __VLS_ModelProps = {
12
15
  'searchQuery'?: string;
@@ -1,3 +1,4 @@
1
+ import type { DataListControlSize, DataListFilterEditorUi } from '../../../types/index.js';
1
2
  type __VLS_Props = {
2
3
  label: string;
3
4
  count?: number;
@@ -6,6 +7,8 @@ type __VLS_Props = {
6
7
  leadingIcon?: string;
7
8
  selectedIcon?: string;
8
9
  truncate?: boolean;
10
+ size?: DataListControlSize;
11
+ ui?: DataListFilterEditorUi;
9
12
  };
10
13
  declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
11
14
  declare const _default: typeof __VLS_export;
@@ -2,35 +2,74 @@
2
2
  import UCheckbox from "@nuxt/ui/components/Checkbox.vue";
3
3
  import UIcon from "@nuxt/ui/components/Icon.vue";
4
4
  import USkeleton from "@nuxt/ui/components/Skeleton.vue";
5
- defineProps({
5
+ import { computed } from "vue";
6
+ import { useDataListUi } from "../../../composables/use-data-list-ui";
7
+ import { mergeDataListUiClass, resolveFilterEditorSizeClasses } from "../../../utils";
8
+ const props = defineProps({
6
9
  label: { type: String, required: true },
7
10
  count: { type: Number, required: false },
8
11
  countLoading: { type: Boolean, required: false },
9
12
  selected: { type: Boolean, required: true },
10
13
  leadingIcon: { type: String, required: false },
11
14
  selectedIcon: { type: String, required: false },
12
- truncate: { type: Boolean, required: false }
15
+ truncate: { type: Boolean, required: false },
16
+ size: { type: String, required: false },
17
+ ui: { type: Object, required: false }
13
18
  });
19
+ const dataListUi = useDataListUi();
20
+ const size = computed(
21
+ () => props.size ?? dataListUi.ui.value.filterTags?.size ?? dataListUi.controlSize.value
22
+ );
23
+ const ui = computed(() => props.ui ?? dataListUi.ui.value.filterTags?.ui);
24
+ const sizeClasses = computed(() => resolveFilterEditorSizeClasses(size.value));
14
25
  </script>
15
26
 
16
27
  <template>
17
28
  <div
18
- class="flex w-full items-center gap-3 rounded-md px-3 py-2 text-left text-sm transition-colors hover:bg-elevated"
19
- :class="selected ? 'bg-elevated text-highlighted' : 'text-default'"
29
+ :class="
30
+ mergeDataListUiClass(
31
+ `flex w-full items-center rounded-md text-left transition-colors hover:bg-elevated ${sizeClasses.option} ${selected ? 'bg-elevated text-highlighted' : 'text-default'}`,
32
+ void 0,
33
+ ui?.option
34
+ )
35
+ "
20
36
  >
21
37
  <UCheckbox
22
38
  :model-value="selected"
23
39
  color="neutral"
24
- size="md"
40
+ :size="size"
25
41
  tabindex="-1"
26
42
  :icon="selectedIcon"
27
- :ui="{ base: '!rounded-md', indicator: '!rounded-none' }"
43
+ :ui="{ base: ui?.optionCheckbox }"
28
44
  />
29
45
 
30
- <UIcon v-if="leadingIcon" :name="leadingIcon" class="size-4 shrink-0 text-muted" />
46
+ <UIcon
47
+ v-if="leadingIcon"
48
+ :name="leadingIcon"
49
+ :class="
50
+ mergeDataListUiClass(
51
+ `${sizeClasses.optionIcon} shrink-0 text-muted`,
52
+ void 0,
53
+ ui?.optionIcon
54
+ )
55
+ "
56
+ />
31
57
 
32
- <span class="min-w-0 flex-1" :class="truncate ?? true ? 'truncate' : ''">{{ label }}</span>
58
+ <span
59
+ :class="
60
+ mergeDataListUiClass(
61
+ `min-w-0 flex-1 ${sizeClasses.optionLabel} ${truncate ?? true ? 'truncate' : ''}`,
62
+ void 0,
63
+ ui?.optionLabel
64
+ )
65
+ "
66
+ >{{ label }}</span
67
+ >
33
68
  <USkeleton v-if="countLoading" class="ml-3 h-3.5 w-6 shrink-0" />
34
- <span v-else-if="count != null" class="ml-3 shrink-0 text-muted">{{ count }}</span>
69
+ <span
70
+ v-else-if="count != null"
71
+ :class="mergeDataListUiClass('ml-3 shrink-0 text-muted', void 0, ui?.optionCount)"
72
+ >{{ count }}</span
73
+ >
35
74
  </div>
36
75
  </template>
@@ -1,3 +1,4 @@
1
+ import type { DataListControlSize, DataListFilterEditorUi } from '../../../types/index.js';
1
2
  type __VLS_Props = {
2
3
  label: string;
3
4
  count?: number;
@@ -6,6 +7,8 @@ type __VLS_Props = {
6
7
  leadingIcon?: string;
7
8
  selectedIcon?: string;
8
9
  truncate?: boolean;
10
+ size?: DataListControlSize;
11
+ ui?: DataListFilterEditorUi;
9
12
  };
10
13
  declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
11
14
  declare const _default: typeof __VLS_export;
@@ -1,3 +1,4 @@
1
+ import type { DataListControlSize, DataListFilterEditorUi } from '../../../types/index.js';
1
2
  type __VLS_Props = {
2
3
  items: Array<{
3
4
  label: string;
@@ -7,6 +8,8 @@ type __VLS_Props = {
7
8
  truncate?: boolean;
8
9
  }>;
9
10
  countLoading: boolean;
11
+ size?: DataListControlSize;
12
+ ui?: DataListFilterEditorUi;
10
13
  };
11
14
  type __VLS_ModelProps = {
12
15
  modelValue?: string | undefined;
@@ -2,10 +2,21 @@
2
2
  import UIcon from "@nuxt/ui/components/Icon.vue";
3
3
  import URadioGroup from "@nuxt/ui/components/RadioGroup.vue";
4
4
  import USkeleton from "@nuxt/ui/components/Skeleton.vue";
5
- defineProps({
5
+ import { computed } from "vue";
6
+ import { useDataListUi } from "../../../composables/use-data-list-ui";
7
+ import { mergeDataListUiClass, resolveFilterEditorSizeClasses } from "../../../utils";
8
+ const props = defineProps({
6
9
  items: { type: Array, required: true },
7
- countLoading: { type: Boolean, required: true }
10
+ countLoading: { type: Boolean, required: true },
11
+ size: { type: String, required: false },
12
+ ui: { type: Object, required: false }
8
13
  });
14
+ const dataListUi = useDataListUi();
15
+ const size = computed(
16
+ () => props.size ?? dataListUi.ui.value.filterTags?.size ?? dataListUi.controlSize.value
17
+ );
18
+ const ui = computed(() => props.ui ?? dataListUi.ui.value.filterTags?.ui);
19
+ const sizeClasses = computed(() => resolveFilterEditorSizeClasses(size.value));
9
20
  const modelValue = defineModel({ type: null, ...{
10
21
  default: void 0
11
22
  } });
@@ -18,22 +29,37 @@ const modelValue = defineModel({ type: null, ...{
18
29
  :items="items"
19
30
  color="neutral"
20
31
  variant="list"
32
+ :size="size"
21
33
  :ui="{
22
34
  root: 'w-full',
23
- fieldset: 'grid gap-0.5',
24
- item: 'flex items-center rounded-md transition-colors hover:bg-elevated data-[state=checked]:bg-elevated',
25
- container: 'self-center pl-3',
35
+ fieldset: mergeDataListUiClass('grid gap-0.5', void 0, ui?.list),
36
+ item: mergeDataListUiClass(
37
+ `flex items-center rounded-md transition-colors hover:bg-elevated data-[state=checked]:bg-elevated ${sizeClasses.option}`,
38
+ void 0,
39
+ ui?.option
40
+ ),
41
+ container: 'self-center',
26
42
  base: 'cursor-pointer',
27
- wrapper: 'min-w-0 flex-1 py-2 pr-3',
28
- label: 'w-full cursor-pointer text-sm text-default'
43
+ wrapper: 'min-w-0 flex-1',
44
+ label: mergeDataListUiClass(
45
+ `w-full cursor-pointer text-default ${sizeClasses.optionLabel}`,
46
+ void 0,
47
+ ui?.optionLabel
48
+ )
29
49
  }"
30
50
  >
31
51
  <template #label="{ item }">
32
- <div class="flex min-w-0 items-center gap-3">
52
+ <div class="flex min-w-0 items-center gap-2">
33
53
  <UIcon
34
54
  v-if="typeof item.icon === 'string'"
35
55
  :name="item.icon"
36
- class="size-4 shrink-0 text-muted"
56
+ :class="
57
+ mergeDataListUiClass(
58
+ `${sizeClasses.optionIcon} shrink-0 text-muted`,
59
+ void 0,
60
+ ui?.optionIcon
61
+ )
62
+ "
37
63
  />
38
64
 
39
65
  <span class="min-w-0 flex-1" :class="item.truncate ? 'truncate' : ''">
@@ -1,3 +1,4 @@
1
+ import type { DataListControlSize, DataListFilterEditorUi } from '../../../types/index.js';
1
2
  type __VLS_Props = {
2
3
  items: Array<{
3
4
  label: string;
@@ -7,6 +8,8 @@ type __VLS_Props = {
7
8
  truncate?: boolean;
8
9
  }>;
9
10
  countLoading: boolean;
11
+ size?: DataListControlSize;
12
+ ui?: DataListFilterEditorUi;
10
13
  };
11
14
  type __VLS_ModelProps = {
12
15
  modelValue?: string | undefined;
@@ -1,3 +1,4 @@
1
+ import type { DataListControlSize, DataListFilterEditorUi } from '../../../types/index.js';
1
2
  type TreeEntry = {
2
3
  id: string;
3
4
  label: string;
@@ -31,6 +32,8 @@ type __VLS_Props = {
31
32
  multiple: boolean;
32
33
  countLoading: boolean;
33
34
  selectedIcon?: string;
35
+ size?: DataListControlSize;
36
+ ui?: DataListFilterEditorUi;
34
37
  };
35
38
  type __VLS_ModelProps = {
36
39
  modelValue?: string | undefined;
@@ -3,14 +3,25 @@ import UCheckbox from "@nuxt/ui/components/Checkbox.vue";
3
3
  import UIcon from "@nuxt/ui/components/Icon.vue";
4
4
  import URadioGroup from "@nuxt/ui/components/RadioGroup.vue";
5
5
  import USkeleton from "@nuxt/ui/components/Skeleton.vue";
6
- defineProps({
6
+ import { computed } from "vue";
7
+ import { useDataListUi } from "../../../composables/use-data-list-ui";
8
+ import { mergeDataListUiClass, resolveFilterEditorSizeClasses } from "../../../utils";
9
+ const props = defineProps({
7
10
  entries: { type: Array, required: true },
8
11
  items: { type: Array, required: true },
9
12
  multiple: { type: Boolean, required: true },
10
13
  countLoading: { type: Boolean, required: true },
11
- selectedIcon: { type: String, required: false }
14
+ selectedIcon: { type: String, required: false },
15
+ size: { type: String, required: false },
16
+ ui: { type: Object, required: false }
12
17
  });
13
18
  const emit = defineEmits(["toggleEntry", "toggleExpanded"]);
19
+ const dataListUi = useDataListUi();
20
+ const size = computed(
21
+ () => props.size ?? dataListUi.ui.value.filterTags?.size ?? dataListUi.controlSize.value
22
+ );
23
+ const ui = computed(() => props.ui ?? dataListUi.ui.value.filterTags?.ui);
24
+ const sizeClasses = computed(() => resolveFilterEditorSizeClasses(size.value));
14
25
  const modelValue = defineModel({ type: null, ...{
15
26
  default: void 0
16
27
  } });
@@ -22,7 +33,7 @@ function getTreeIndentStyle(depth) {
22
33
  </script>
23
34
 
24
35
  <template>
25
- <div v-if="multiple" class="grid gap-0.5">
36
+ <div v-if="multiple" :class="mergeDataListUiClass('grid gap-0.5', void 0, ui?.list)">
26
37
  <button
27
38
  v-for="entry in entries"
28
39
  :key="entry.id"
@@ -31,44 +42,81 @@ function getTreeIndentStyle(depth) {
31
42
  @click="emit('toggleEntry', entry.id)"
32
43
  >
33
44
  <div
34
- class="flex items-center gap-3 rounded-md px-3 py-2 text-left text-sm transition-colors hover:bg-elevated"
35
- :class="entry.selected ? 'bg-elevated text-highlighted' : 'text-default'"
45
+ :class="
46
+ mergeDataListUiClass(
47
+ `flex items-center rounded-md text-left transition-colors hover:bg-elevated ${sizeClasses.option} ${entry.selected ? 'bg-elevated text-highlighted' : 'text-default'}`,
48
+ void 0,
49
+ ui?.option
50
+ )
51
+ "
36
52
  >
37
53
  <div
38
- class="flex min-w-0 flex-1 items-center gap-3"
54
+ class="flex min-w-0 flex-1 items-center gap-2"
39
55
  :style="getTreeIndentStyle(entry.depth)"
40
56
  >
41
57
  <button
42
58
  v-if="entry.expandable"
43
59
  type="button"
44
- class="flex size-4 shrink-0 items-center justify-center text-muted transition-transform"
45
- :class="entry.expanded ? 'rotate-90' : ''"
60
+ :class="
61
+ mergeDataListUiClass(
62
+ `flex size-4 shrink-0 items-center justify-center text-muted transition-transform ${entry.expanded ? 'rotate-90' : ''}`,
63
+ void 0,
64
+ ui?.optionExpander
65
+ )
66
+ "
46
67
  @click.stop="emit('toggleExpanded', entry.id)"
47
68
  >
48
69
  <UIcon name="i-lucide-chevron-right" class="size-4" />
49
70
  </button>
50
- <span v-else class="size-4 shrink-0" />
71
+ <span
72
+ v-else
73
+ :class="mergeDataListUiClass('size-4 shrink-0', void 0, ui?.optionSpacer)"
74
+ />
51
75
 
52
76
  <UCheckbox
53
77
  v-if="entry.selectable || entry.branchSelectable"
54
78
  :model-value="entry.indeterminate ? 'indeterminate' : entry.selected"
55
79
  color="neutral"
56
- size="md"
80
+ :size="size"
57
81
  tabindex="-1"
58
82
  :icon="selectedIcon"
59
- :ui="{ base: '!rounded-md', indicator: '!rounded-none' }"
83
+ :ui="{ base: ui?.optionCheckbox }"
84
+ />
85
+ <span
86
+ v-else
87
+ :class="mergeDataListUiClass('size-5 shrink-0', void 0, ui?.optionSpacer)"
60
88
  />
61
- <span v-else class="size-5 shrink-0" />
62
89
 
63
- <UIcon v-if="entry.icon" :name="entry.icon" class="size-4 shrink-0 text-muted" />
90
+ <UIcon
91
+ v-if="entry.icon"
92
+ :name="entry.icon"
93
+ :class="
94
+ mergeDataListUiClass(
95
+ `${sizeClasses.optionIcon} shrink-0 text-muted`,
96
+ void 0,
97
+ ui?.optionIcon
98
+ )
99
+ "
100
+ />
64
101
 
65
- <span class="min-w-0 flex-1" :class="entry.truncate ? 'truncate' : ''">
102
+ <span
103
+ :class="
104
+ mergeDataListUiClass(
105
+ `min-w-0 flex-1 ${sizeClasses.optionLabel} ${entry.truncate ? 'truncate' : ''}`,
106
+ void 0,
107
+ ui?.optionLabel
108
+ )
109
+ "
110
+ >
66
111
  {{ entry.label }}
67
112
  </span>
68
113
  </div>
69
114
 
70
115
  <USkeleton v-if="countLoading" class="ml-3 h-3.5 w-6 shrink-0" />
71
- <span v-else-if="entry.count != null" class="ml-3 shrink-0 text-muted">
116
+ <span
117
+ v-else-if="entry.count != null"
118
+ :class="mergeDataListUiClass('ml-3 shrink-0 text-muted', void 0, ui?.optionCount)"
119
+ >
72
120
  {{ entry.count }}
73
121
  </span>
74
122
  </div>
@@ -81,14 +129,23 @@ function getTreeIndentStyle(depth) {
81
129
  :items="items"
82
130
  color="neutral"
83
131
  variant="list"
132
+ :size="size"
84
133
  :ui="{
85
134
  root: 'w-full',
86
- fieldset: 'grid gap-0.5',
87
- item: 'flex items-center rounded-md transition-colors hover:bg-elevated data-[state=checked]:bg-elevated',
88
- container: 'self-center pl-3',
135
+ fieldset: mergeDataListUiClass('grid gap-0.5', void 0, ui?.list),
136
+ item: mergeDataListUiClass(
137
+ `flex items-center rounded-md transition-colors hover:bg-elevated data-[state=checked]:bg-elevated ${sizeClasses.option}`,
138
+ void 0,
139
+ ui?.option
140
+ ),
141
+ container: 'self-center',
89
142
  base: 'cursor-pointer',
90
- wrapper: 'min-w-0 flex-1 py-2 pr-3',
91
- label: 'w-full cursor-pointer text-sm text-default'
143
+ wrapper: 'min-w-0 flex-1',
144
+ label: mergeDataListUiClass(
145
+ `w-full cursor-pointer text-default ${sizeClasses.optionLabel}`,
146
+ void 0,
147
+ ui?.optionLabel
148
+ )
92
149
  }"
93
150
  >
94
151
  <template #label="{ item }">
@@ -1,3 +1,4 @@
1
+ import type { DataListControlSize, DataListFilterEditorUi } from '../../../types/index.js';
1
2
  type TreeEntry = {
2
3
  id: string;
3
4
  label: string;
@@ -31,6 +32,8 @@ type __VLS_Props = {
31
32
  multiple: boolean;
32
33
  countLoading: boolean;
33
34
  selectedIcon?: string;
35
+ size?: DataListControlSize;
36
+ ui?: DataListFilterEditorUi;
34
37
  };
35
38
  type __VLS_ModelProps = {
36
39
  modelValue?: string | undefined;
@@ -0,0 +1,27 @@
1
+ type __VLS_Props = {
2
+ open: boolean;
3
+ embedded?: boolean;
4
+ contentClass?: string;
5
+ transitioning?: boolean;
6
+ };
7
+ declare var __VLS_1: {}, __VLS_12: {}, __VLS_15: {};
8
+ type __VLS_Slots = {} & {
9
+ content?: (props: typeof __VLS_1) => any;
10
+ } & {
11
+ default?: (props: typeof __VLS_12) => any;
12
+ } & {
13
+ content?: (props: typeof __VLS_15) => any;
14
+ };
15
+ declare const __VLS_base: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
16
+ updateOpen: (value: boolean) => any;
17
+ }, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{
18
+ onUpdateOpen?: ((value: boolean) => any) | undefined;
19
+ }>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
20
+ declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
21
+ declare const _default: typeof __VLS_export;
22
+ export default _default;
23
+ type __VLS_WithSlots<T, S> = T & {
24
+ new (): {
25
+ $slots: S;
26
+ };
27
+ };