@finema/core 3.21.0 → 3.23.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.
Files changed (126) hide show
  1. package/dist/module.d.mts +2 -0
  2. package/dist/module.json +2 -2
  3. package/dist/module.mjs +16 -2
  4. package/dist/runtime/components/App.vue +1 -1
  5. package/dist/runtime/components/DevToolsWindow/index.vue +1 -1
  6. package/dist/runtime/components/Dialog/index.d.vue.ts +1 -4
  7. package/dist/runtime/components/Dialog/index.vue +9 -10
  8. package/dist/runtime/components/Dialog/index.vue.d.ts +1 -4
  9. package/dist/runtime/components/Empty.d.vue.ts +0 -1
  10. package/dist/runtime/components/Empty.vue +6 -2
  11. package/dist/runtime/components/Empty.vue.d.ts +0 -1
  12. package/dist/runtime/components/FlexDeck/index.vue +86 -81
  13. package/dist/runtime/components/Form/FieldWrapper.vue +14 -14
  14. package/dist/runtime/components/Form/Fields.vue +10 -10
  15. package/dist/runtime/components/Form/InputCheckbox/index.vue +20 -19
  16. package/dist/runtime/components/Form/InputCheckboxGroup/index.vue +2 -1
  17. package/dist/runtime/components/Form/InputComponent/index.vue +2 -1
  18. package/dist/runtime/components/Form/InputCurrency/index.vue +51 -50
  19. package/dist/runtime/components/Form/InputDateTime/date_time_field.types.d.ts +1 -1
  20. package/dist/runtime/components/Form/InputDateTime/index.vue +69 -64
  21. package/dist/runtime/components/Form/InputDateTimeRange/date_range_time_field.types.d.ts +1 -1
  22. package/dist/runtime/components/Form/InputDateTimeRange/index.vue +62 -57
  23. package/dist/runtime/components/Form/InputMonth/index.vue +10 -5
  24. package/dist/runtime/components/Form/InputMonth/types.d.ts +1 -1
  25. package/dist/runtime/components/Form/InputNumber/index.vue +22 -21
  26. package/dist/runtime/components/Form/InputRadio/index.d.vue.ts +1 -1
  27. package/dist/runtime/components/Form/InputRadio/index.vue +2 -1
  28. package/dist/runtime/components/Form/InputRadio/index.vue.d.ts +1 -1
  29. package/dist/runtime/components/Form/InputRating/index.vue +2 -1
  30. package/dist/runtime/components/Form/InputSearch/index.vue +7 -2
  31. package/dist/runtime/components/Form/InputSelect/index.vue +112 -111
  32. package/dist/runtime/components/Form/InputSelectMultiple/index.vue +120 -119
  33. package/dist/runtime/components/Form/InputTags/index.vue +56 -55
  34. package/dist/runtime/components/Form/InputText/index.vue +88 -87
  35. package/dist/runtime/components/Form/InputTextarea/index.vue +20 -19
  36. package/dist/runtime/components/Form/InputTime/index.vue +45 -40
  37. package/dist/runtime/components/Form/InputTime/types.d.ts +1 -1
  38. package/dist/runtime/components/Form/InputToggle/index.vue +19 -18
  39. package/dist/runtime/components/Form/InputUploadDropzone/index.d.vue.ts +1 -4
  40. package/dist/runtime/components/Form/InputUploadDropzone/index.vue +40 -35
  41. package/dist/runtime/components/Form/InputUploadDropzone/index.vue.d.ts +1 -4
  42. package/dist/runtime/components/Form/InputUploadDropzone/types.d.ts +2 -2
  43. package/dist/runtime/components/Form/InputUploadDropzoneAuto/index.d.vue.ts +0 -5
  44. package/dist/runtime/components/Form/InputUploadDropzoneAuto/index.vue +63 -58
  45. package/dist/runtime/components/Form/InputUploadDropzoneAuto/index.vue.d.ts +0 -5
  46. package/dist/runtime/components/Form/InputUploadDropzoneAuto/types.d.ts +3 -3
  47. package/dist/runtime/components/Form/InputUploadDropzoneAutoMultiple/index.d.vue.ts +0 -5
  48. package/dist/runtime/components/Form/InputUploadDropzoneAutoMultiple/index.vue +69 -60
  49. package/dist/runtime/components/Form/InputUploadDropzoneAutoMultiple/index.vue.d.ts +0 -5
  50. package/dist/runtime/components/Form/InputUploadDropzoneAutoMultiple/types.d.ts +3 -3
  51. package/dist/runtime/components/Form/InputUploadImageAuto/index.d.vue.ts +1 -6
  52. package/dist/runtime/components/Form/InputUploadImageAuto/index.vue +63 -58
  53. package/dist/runtime/components/Form/InputUploadImageAuto/index.vue.d.ts +1 -6
  54. package/dist/runtime/components/Form/InputUploadImageAuto/types.d.ts +3 -3
  55. package/dist/runtime/components/Form/InputWYSIWYG/EditorImageUploadNode.vue +18 -18
  56. package/dist/runtime/components/Form/InputWYSIWYG/EditorLinkPopover.vue +65 -65
  57. package/dist/runtime/components/Form/InputWYSIWYG/README.md +96 -96
  58. package/dist/runtime/components/Form/InputWYSIWYG/index.vue +43 -42
  59. package/dist/runtime/components/Form/fileState/EmptyState.vue +21 -21
  60. package/dist/runtime/components/Form/fileState/FailedState.vue +37 -33
  61. package/dist/runtime/components/Form/fileState/LoadingState.vue +24 -24
  62. package/dist/runtime/components/Form/fileState/MultipleFilesState.d.vue.ts +4 -4
  63. package/dist/runtime/components/Form/fileState/MultipleFilesState.vue +79 -75
  64. package/dist/runtime/components/Form/fileState/MultipleFilesState.vue.d.ts +4 -4
  65. package/dist/runtime/components/Form/fileState/PreviewModal.vue +23 -23
  66. package/dist/runtime/components/Form/fileState/SuccessState.d.vue.ts +2 -2
  67. package/dist/runtime/components/Form/fileState/SuccessState.vue +8 -4
  68. package/dist/runtime/components/Form/fileState/SuccessState.vue.d.ts +2 -2
  69. package/dist/runtime/components/Form/fileState/useFilePicker.d.ts +34 -0
  70. package/dist/runtime/components/Form/fileState/useFilePicker.js +48 -0
  71. package/dist/runtime/components/Form/fileState/useFileState.d.ts +7 -9
  72. package/dist/runtime/components/Form/fileState/useFileState.js +40 -120
  73. package/dist/runtime/components/Form/fileState/useUploadImageState.d.ts +7 -8
  74. package/dist/runtime/components/Form/fileState/useUploadImageState.js +28 -300
  75. package/dist/runtime/components/Form/fileState/useUploadState.d.ts +11 -7
  76. package/dist/runtime/components/Form/fileState/useUploadState.js +58 -131
  77. package/dist/runtime/components/Form/fileState/useUploadStateMultiple.d.ts +12 -18
  78. package/dist/runtime/components/Form/fileState/useUploadStateMultiple.js +89 -222
  79. package/dist/runtime/components/Form/index.vue +5 -5
  80. package/dist/runtime/components/Form/types.d.ts +2 -0
  81. package/dist/runtime/components/Image.vue +28 -28
  82. package/dist/runtime/components/Loader.d.vue.ts +1 -0
  83. package/dist/runtime/components/Loader.vue.d.ts +1 -0
  84. package/dist/runtime/components/Table/Base.d.vue.ts +15 -1
  85. package/dist/runtime/components/Table/Base.vue +118 -118
  86. package/dist/runtime/components/Table/Base.vue.d.ts +15 -1
  87. package/dist/runtime/components/Table/ColumnDate.vue +1 -1
  88. package/dist/runtime/components/Table/ColumnDateTime.vue +1 -1
  89. package/dist/runtime/components/Table/ColumnImage.vue +4 -4
  90. package/dist/runtime/components/Table/ColumnText.d.vue.ts +2 -3
  91. package/dist/runtime/components/Table/ColumnText.vue +11 -11
  92. package/dist/runtime/components/Table/ColumnText.vue.d.ts +2 -3
  93. package/dist/runtime/components/Table/Pagination.vue +70 -67
  94. package/dist/runtime/components/Table/Simple.vue +19 -19
  95. package/dist/runtime/components/Table/index.d.vue.ts +1 -1
  96. package/dist/runtime/components/Table/index.vue +37 -33
  97. package/dist/runtime/components/Table/index.vue.d.ts +1 -1
  98. package/dist/runtime/composables/loaderList.d.ts +2 -1
  99. package/dist/runtime/composables/loaderList.js +2 -1
  100. package/dist/runtime/composables/loaderObject.d.ts +2 -1
  101. package/dist/runtime/composables/loaderObject.js +2 -1
  102. package/dist/runtime/composables/loaderPage.js +194 -344
  103. package/dist/runtime/composables/useConfig.js +4 -3
  104. package/dist/runtime/composables/useDialog.js +5 -1
  105. package/dist/runtime/composables/useForm.d.ts +1 -1
  106. package/dist/runtime/composables/useForm.js +1 -1
  107. package/dist/runtime/composables/useMessages.d.ts +10 -0
  108. package/dist/runtime/composables/useMessages.js +10 -0
  109. package/dist/runtime/helpers/apiPageHelper.d.ts +0 -1
  110. package/dist/runtime/helpers/uploadCore.d.ts +54 -0
  111. package/dist/runtime/helpers/uploadCore.js +84 -0
  112. package/dist/runtime/i18n/valibot.d.ts +5 -68
  113. package/dist/runtime/i18n/valibot.js +33 -29
  114. package/dist/runtime/locale/en.d.ts +2 -0
  115. package/dist/runtime/locale/en.js +42 -0
  116. package/dist/runtime/locale/index.d.ts +7 -0
  117. package/dist/runtime/locale/index.js +8 -0
  118. package/dist/runtime/locale/th.d.ts +43 -0
  119. package/dist/runtime/locale/th.js +42 -0
  120. package/dist/runtime/server/tsconfig.json +3 -3
  121. package/dist/runtime/theme/dialog.js +1 -1
  122. package/dist/runtime/utils/ParamHelper.js +1 -1
  123. package/dist/runtime/utils/StringHelper.js +1 -4
  124. package/dist/runtime/utils/TimeHelper.js +2 -2
  125. package/dist/runtime/utils/lodash.js +2 -2
  126. package/package.json +20 -12
@@ -1,135 +1,135 @@
1
1
  <template>
2
- <FieldWrapper v-bind="wrapperProps">
3
- <SelectMenu
4
- :model-value="value"
5
- :items="options"
6
- :placeholder="wrapperProps.placeholder"
7
- :disabled="wrapperProps.disabled"
8
- :loading="loading"
9
- :search-input="searchInput ?? void 0"
10
- :selected-icon="selectedIcon"
11
- value-key="value"
12
- label-key="label"
13
- :icon="icon"
14
- :ui="ui"
15
- :variant="variant"
16
- :ignore-filter="ignoreFilter"
17
- :leading-icon="options.find((item2) => item2.value === value)?.icon"
18
- :avatar="options.find((item2) => item2.value === value)?.avatar"
19
- @update:modelValue="onChange"
20
- @update:searchTerm="onSearch"
21
- >
22
- <template #default="{ modelValue, ui: selectMenuUi }">
23
- <Chip
24
- v-if="options.find((item2) => item2.value === modelValue)?.chip"
25
- v-bind="options.find((item2) => item2.value === modelValue)?.chip"
26
- inset
27
- standalone
28
- :size="selectMenuUi.itemLeadingChipSize()"
29
- :class="selectMenuUi.itemLeadingChip()"
30
- />
31
- <div
32
- v-if="value"
2
+ <FieldWrapper v-bind="wrapperProps">
3
+ <SelectMenu
4
+ :model-value="value"
5
+ :items="options"
6
+ :placeholder="wrapperProps.placeholder"
7
+ :disabled="wrapperProps.disabled"
8
+ :loading="loading"
9
+ :search-input="searchInput ?? void 0"
10
+ :selected-icon="selectedIcon"
11
+ value-key="value"
12
+ label-key="label"
13
+ :icon="icon"
14
+ :ui="ui"
15
+ :variant="variant"
16
+ :ignore-filter="ignoreFilter"
17
+ :leading-icon="options.find((item2) => item2.value === value)?.icon"
18
+ :avatar="options.find((item2) => item2.value === value)?.avatar"
19
+ @update:modelValue="onChange"
20
+ @update:searchTerm="onSearch"
21
+ >
22
+ <template #default="{ modelValue, ui: selectMenuUi }">
23
+ <Chip
24
+ v-if="options.find((item2) => item2.value === modelValue)?.chip"
25
+ v-bind="options.find((item2) => item2.value === modelValue)?.chip"
26
+ inset
27
+ standalone
28
+ :size="selectMenuUi.itemLeadingChipSize()"
29
+ :class="selectMenuUi.itemLeadingChip()"
30
+ />
31
+ <div
32
+ v-if="value"
33
33
  :class="
34
34
  theme.selectedWrapper({
35
35
  class: [ui?.selectedWrapper]
36
36
  })
37
- "
38
- >
39
- <div class="flex min-w-0 flex-1 items-center gap-x-2 overflow-hidden">
40
- <component
41
- :is="selectedOption.component"
37
+ "
38
+ >
39
+ <div class="flex min-w-0 flex-1 items-center gap-x-2 overflow-hidden">
40
+ <component
41
+ :is="selectedOption.component"
42
42
  v-if="
43
43
  componentPosition === 'leading' && selectedOption?.component
44
- "
45
- v-bind="selectedOption.componentProps"
46
- />
47
- <span
44
+ "
45
+ v-bind="selectedOption.componentProps"
46
+ />
47
+ <span
48
48
  :class="[
49
49
  'min-w-0 flex-1',
50
50
  theme.selectedLabel({
51
51
  class: [ui?.selectedLabel]
52
52
  })
53
- ]"
54
- >
55
- <span
53
+ ]"
54
+ >
55
+ <span
56
56
  :class="[
57
57
  props.selectedLabelLines && props.selectedLabelLines > 1 ? 'block min-w-0 break-words whitespace-normal' : 'block min-w-0 truncate'
58
- ]"
59
- :style="selectedLabelStyle"
60
- >
61
- {{ selectedOption?.label ?? modelValue }}
62
- </span>
63
- </span>
64
- <component
65
- :is="selectedOption.component"
58
+ ]"
59
+ :style="selectedLabelStyle"
60
+ >
61
+ {{ selectedOption?.label ?? modelValue }}
62
+ </span>
63
+ </span>
64
+ <component
65
+ :is="selectedOption.component"
66
66
  v-if="
67
67
  componentPosition === 'trailing' && selectedOption?.component
68
- "
69
- v-bind="selectedOption.componentProps"
70
- />
71
- </div>
72
- <Icon
73
- v-if="clearable"
74
- :name="clearIcon"
68
+ "
69
+ v-bind="selectedOption.componentProps"
70
+ />
71
+ </div>
72
+ <Icon
73
+ v-if="clearable"
74
+ :name="clearIcon"
75
75
  :class="
76
76
  theme.clearIcon({
77
77
  class: [ui?.clearIcon]
78
78
  })
79
- "
80
- @click.stop="onChange(void 0)"
81
- />
82
- </div>
83
- </template>
84
-
85
- <template #item="{ item }">
86
- <div
87
- v-if="item?.type === 'separator'"
88
- class="my-1 h-px bg-gray-200"
89
- />
90
- <div
91
- v-else
92
- class="flex min-w-0 items-center gap-x-2"
93
- >
94
- <Chip
95
- v-if="item?.chip"
96
- v-bind="item.chip"
97
- inset
98
- standalone
99
- size="2xs"
100
- />
101
- <Icon
102
- v-if="item?.icon"
103
- :name="item.icon"
104
- class="size-4"
105
- />
106
- <Avatar
107
- v-if="item?.avatar"
108
- v-bind="item.avatar"
109
- size="2xs"
110
- />
111
- <component
112
- :is="item?.component"
113
- v-if="componentPosition === 'leading' && item?.component"
114
- v-bind="item?.componentProps"
115
- />
116
- <span
79
+ "
80
+ @click.stop="onChange(void 0)"
81
+ />
82
+ </div>
83
+ </template>
84
+
85
+ <template #item="{ item }">
86
+ <div
87
+ v-if="item?.type === 'separator'"
88
+ class="my-1 h-px bg-gray-200"
89
+ />
90
+ <div
91
+ v-else
92
+ class="flex min-w-0 items-center gap-x-2"
93
+ >
94
+ <Chip
95
+ v-if="item?.chip"
96
+ v-bind="item.chip"
97
+ inset
98
+ standalone
99
+ size="2xs"
100
+ />
101
+ <Icon
102
+ v-if="item?.icon"
103
+ :name="item.icon"
104
+ class="size-4"
105
+ />
106
+ <Avatar
107
+ v-if="item?.avatar"
108
+ v-bind="item.avatar"
109
+ size="2xs"
110
+ />
111
+ <component
112
+ :is="item?.component"
113
+ v-if="componentPosition === 'leading' && item?.component"
114
+ v-bind="item?.componentProps"
115
+ />
116
+ <span
117
117
  :class="[
118
118
  props.menuLabelLines && props.menuLabelLines > 1 ? 'min-w-0 break-words whitespace-normal' : 'truncate'
119
- ]"
120
- :style="menuLabelStyle"
121
- >
122
- {{ item?.label ?? item?.value }}
123
- </span>
124
- <component
125
- :is="item?.component"
126
- v-if="componentPosition === 'trailing' && item?.component"
127
- v-bind="item?.componentProps"
128
- />
129
- </div>
130
- </template>
131
- </SelectMenu>
132
- </FieldWrapper>
119
+ ]"
120
+ :style="menuLabelStyle"
121
+ >
122
+ {{ item?.label ?? item?.value }}
123
+ </span>
124
+ <component
125
+ :is="item?.component"
126
+ v-if="componentPosition === 'trailing' && item?.component"
127
+ v-bind="item?.componentProps"
128
+ />
129
+ </div>
130
+ </template>
131
+ </SelectMenu>
132
+ </FieldWrapper>
133
133
  </template>
134
134
 
135
135
  <script setup>
@@ -166,7 +166,8 @@ const props = defineProps({
166
166
  readonly: { type: Boolean, required: false },
167
167
  required: { type: Boolean, required: false },
168
168
  help: { type: String, required: false },
169
- ui: { type: null, required: false }
169
+ ui: { type: null, required: false },
170
+ containerUi: { type: null, required: false }
170
171
  });
171
172
  const theme = computed(() => useUiConfig(selectMenuTheme, "selectMenu")());
172
173
  const {
@@ -1,148 +1,148 @@
1
1
  <template>
2
- <FieldWrapper v-bind="wrapperProps">
3
- <SelectMenu
4
- :model-value="value"
5
- :items="options"
6
- multiple
7
- :placeholder="wrapperProps.placeholder"
8
- :disabled="wrapperProps.disabled"
9
- :loading="loading"
10
- :search-input="searchInput"
11
- :selected-icon="selectedIcon"
12
- value-key="value"
13
- label-key="label"
14
- :variant="variant"
15
- :icon="icon"
16
- :ui="ui"
17
- :ignore-filter="ignoreFilter"
18
- @update:model-value="onChange"
19
- @update:searchTerm="onSearch"
20
- >
21
- <template #default="{ modelValue, ui: selectMenuUi }">
22
- <div
23
- v-if="!ArrayHelper.isEmpty(value)"
2
+ <FieldWrapper v-bind="wrapperProps">
3
+ <SelectMenu
4
+ :model-value="value"
5
+ :items="options"
6
+ multiple
7
+ :placeholder="wrapperProps.placeholder"
8
+ :disabled="wrapperProps.disabled"
9
+ :loading="loading"
10
+ :search-input="searchInput"
11
+ :selected-icon="selectedIcon"
12
+ value-key="value"
13
+ label-key="label"
14
+ :variant="variant"
15
+ :icon="icon"
16
+ :ui="ui"
17
+ :ignore-filter="ignoreFilter"
18
+ @update:model-value="onChange"
19
+ @update:searchTerm="onSearch"
20
+ >
21
+ <template #default="{ modelValue, ui: selectMenuUi }">
22
+ <div
23
+ v-if="!ArrayHelper.isEmpty(value)"
24
24
  :class="
25
25
  theme.tagsWrapper({
26
26
  class: [ui?.tagsWrapper]
27
27
  })
28
- "
29
- >
30
- <div
31
- v-for="_value in ArrayHelper.toArray(modelValue)"
32
- :key="_value"
28
+ "
29
+ >
30
+ <div
31
+ v-for="_value in ArrayHelper.toArray(modelValue)"
32
+ :key="_value"
33
33
  :class="
34
34
  theme.tagsItem({
35
35
  class: [ui?.tagsItem]
36
36
  })
37
- "
38
- >
39
- <Chip
40
- v-if="options.find((item2) => item2.value === _value)?.chip"
41
- v-bind="options.find((item2) => item2.value === _value)?.chip"
42
- inset
43
- standalone
44
- :size="selectMenuUi.itemLeadingChipSize()"
45
- class="p-1"
46
- />
47
- <Icon
48
- v-if="options.find((item2) => item2.value === _value)?.icon"
49
- :name="options.find((item2) => item2.value === _value)?.icon"
50
- class="size-4"
51
- />
52
- <Avatar
53
- v-if="options.find((item2) => item2.value === _value)?.avatar"
54
- v-bind="options.find((item2) => item2.value === _value)?.avatar"
55
- :class="selectMenuUi.itemLeadingAvatar()"
56
- size="2xs"
57
- />
58
- <component
59
- :is="getOption(_value)?.component"
37
+ "
38
+ >
39
+ <Chip
40
+ v-if="options.find((item2) => item2.value === _value)?.chip"
41
+ v-bind="options.find((item2) => item2.value === _value)?.chip"
42
+ inset
43
+ standalone
44
+ :size="selectMenuUi.itemLeadingChipSize()"
45
+ class="p-1"
46
+ />
47
+ <Icon
48
+ v-if="options.find((item2) => item2.value === _value)?.icon"
49
+ :name="options.find((item2) => item2.value === _value)?.icon"
50
+ class="size-4"
51
+ />
52
+ <Avatar
53
+ v-if="options.find((item2) => item2.value === _value)?.avatar"
54
+ v-bind="options.find((item2) => item2.value === _value)?.avatar"
55
+ :class="selectMenuUi.itemLeadingAvatar()"
56
+ size="2xs"
57
+ />
58
+ <component
59
+ :is="getOption(_value)?.component"
60
60
  v-if="
61
61
  componentPosition === 'leading' && getOption(_value)?.component
62
- "
63
- v-bind="getOption(_value)?.componentProps"
64
- />
65
- <div
62
+ "
63
+ v-bind="getOption(_value)?.componentProps"
64
+ />
65
+ <div
66
66
  :class="
67
67
  theme.tagsItemText({
68
68
  class: [ui?.tagsItemText]
69
69
  })
70
- "
71
- >
72
- {{ getOption(_value)?.label ?? _value }}
73
- <component
74
- :is="getOption(_value)?.component"
70
+ "
71
+ >
72
+ {{ getOption(_value)?.label ?? _value }}
73
+ <component
74
+ :is="getOption(_value)?.component"
75
75
  v-if="
76
76
  componentPosition === 'trailing' && getOption(_value)?.component
77
- "
78
- v-bind="getOption(_value)?.componentProps"
79
- />
80
- <Icon
77
+ "
78
+ v-bind="getOption(_value)?.componentProps"
79
+ />
80
+ <Icon
81
81
  :name="
82
82
  theme.tagsItemDeleteIcon({
83
83
  class: [ui?.tagsItemDeleteIcon]
84
84
  })
85
- "
85
+ "
86
86
  :class="
87
87
  theme.tagsItemDelete({
88
88
  class: [ui?.tagsItemDelete]
89
89
  })
90
- "
91
- @click.stop="handleDelete(_value)"
92
- />
93
- </div>
94
- </div>
95
- </div>
96
- </template>
97
-
98
- <template #item="{ item }">
99
- <div
100
- v-if="item?.type === 'separator'"
101
- class="my-1 h-px bg-gray-200"
102
- />
103
- <div
104
- v-else
105
- class="flex min-w-0 items-center gap-x-2"
106
- >
107
- <Chip
108
- v-if="item?.chip"
109
- v-bind="item.chip"
110
- inset
111
- standalone
112
- size="2xs"
113
- />
114
- <Icon
115
- v-if="item?.icon"
116
- :name="item.icon"
117
- class="size-4"
118
- />
119
- <Avatar
120
- v-if="item?.avatar"
121
- v-bind="item.avatar"
122
- size="2xs"
123
- />
124
- <component
125
- :is="item?.component"
126
- v-if="componentPosition === 'leading' && item?.component"
127
- v-bind="item?.componentProps"
128
- />
129
- <span
90
+ "
91
+ @click.stop="handleDelete(_value)"
92
+ />
93
+ </div>
94
+ </div>
95
+ </div>
96
+ </template>
97
+
98
+ <template #item="{ item }">
99
+ <div
100
+ v-if="item?.type === 'separator'"
101
+ class="my-1 h-px bg-gray-200"
102
+ />
103
+ <div
104
+ v-else
105
+ class="flex min-w-0 items-center gap-x-2"
106
+ >
107
+ <Chip
108
+ v-if="item?.chip"
109
+ v-bind="item.chip"
110
+ inset
111
+ standalone
112
+ size="2xs"
113
+ />
114
+ <Icon
115
+ v-if="item?.icon"
116
+ :name="item.icon"
117
+ class="size-4"
118
+ />
119
+ <Avatar
120
+ v-if="item?.avatar"
121
+ v-bind="item.avatar"
122
+ size="2xs"
123
+ />
124
+ <component
125
+ :is="item?.component"
126
+ v-if="componentPosition === 'leading' && item?.component"
127
+ v-bind="item?.componentProps"
128
+ />
129
+ <span
130
130
  :class="[
131
131
  props.menuLabelLines && props.menuLabelLines > 1 ? 'min-w-0 break-words whitespace-normal' : 'truncate'
132
- ]"
133
- :style="menuLabelStyle"
134
- >
135
- {{ item?.label ?? item?.value }}
136
- </span>
137
- <component
138
- :is="item?.component"
139
- v-if="componentPosition === 'trailing' && item?.component"
140
- v-bind="item?.componentProps"
141
- />
142
- </div>
143
- </template>
144
- </SelectMenu>
145
- </FieldWrapper>
132
+ ]"
133
+ :style="menuLabelStyle"
134
+ >
135
+ {{ item?.label ?? item?.value }}
136
+ </span>
137
+ <component
138
+ :is="item?.component"
139
+ v-if="componentPosition === 'trailing' && item?.component"
140
+ v-bind="item?.componentProps"
141
+ />
142
+ </div>
143
+ </template>
144
+ </SelectMenu>
145
+ </FieldWrapper>
146
146
  </template>
147
147
 
148
148
  <script setup>
@@ -180,7 +180,8 @@ const props = defineProps({
180
180
  readonly: { type: Boolean, required: false },
181
181
  required: { type: Boolean, required: false },
182
182
  help: { type: String, required: false },
183
- ui: { type: null, required: false }
183
+ ui: { type: null, required: false },
184
+ containerUi: { type: null, required: false }
184
185
  });
185
186
  const theme = computed(() => useUiConfig(selectMenuTheme, "select")());
186
187
  const {
@@ -1,63 +1,63 @@
1
1
  <template>
2
- <FieldWrapper v-bind="wrapperProps">
3
- <Popover
4
- v-model:open="showSuggestions"
5
- :dismissible="false"
6
- :ui="{ content: 'w-(--reka-popper-anchor-width)' }"
7
- >
8
- <template #anchor>
9
- <InputTags
10
- :model-value="value"
11
- :disabled="wrapperProps.disabled"
12
- :leading-icon="leadingIcon"
13
- :max-length="maxLength"
14
- :variant="variant"
15
- :delete-icon="deleteIcon"
16
- :size="size"
17
- :trailing-icon="trailingIcon"
18
- :loading="loading"
19
- :loading-icon="loadingIcon"
20
- :name="name"
21
- :placeholder="wrapperProps.placeholder"
22
- :autofocus="!!autoFocus"
23
- :icon="icon"
24
- :readonly="readonly"
25
- :ui="ui"
26
- @update:model-value="onChange"
27
- @addTag="onAdd"
28
- @removeTag="onRemove"
29
- @focus="onFocus"
30
- @blur="onBlur"
31
- @keydown="onKeydown"
32
- @input="onInput"
33
- />
34
- </template>
35
-
36
- <template #content>
37
- <div
38
- v-if="showSuggestions && filteredSuggestions.length > 0"
39
- ref="suggestionsContainerRef"
40
- :class="theme.suggestionsContainer()"
41
- >
42
- <div
43
- v-for="(suggestion, index) in filteredSuggestions"
44
- :key="suggestion"
45
- :ref="(el) => setSuggestionItemRef(el, index)"
2
+ <FieldWrapper v-bind="wrapperProps">
3
+ <Popover
4
+ v-model:open="showSuggestions"
5
+ :dismissible="false"
6
+ :ui="{ content: 'w-(--reka-popper-anchor-width)' }"
7
+ >
8
+ <template #anchor>
9
+ <InputTags
10
+ :model-value="value"
11
+ :disabled="wrapperProps.disabled"
12
+ :leading-icon="leadingIcon"
13
+ :max-length="maxLength"
14
+ :variant="variant"
15
+ :delete-icon="deleteIcon"
16
+ :size="size"
17
+ :trailing-icon="trailingIcon"
18
+ :loading="loading"
19
+ :loading-icon="loadingIcon"
20
+ :name="name"
21
+ :placeholder="wrapperProps.placeholder"
22
+ :autofocus="!!autoFocus"
23
+ :icon="icon"
24
+ :readonly="readonly"
25
+ :ui="ui"
26
+ @update:model-value="onChange"
27
+ @addTag="onAdd"
28
+ @removeTag="onRemove"
29
+ @focus="onFocus"
30
+ @blur="onBlur"
31
+ @keydown="onKeydown"
32
+ @input="onInput"
33
+ />
34
+ </template>
35
+
36
+ <template #content>
37
+ <div
38
+ v-if="showSuggestions && filteredSuggestions.length > 0"
39
+ ref="suggestionsContainerRef"
40
+ :class="theme.suggestionsContainer()"
41
+ >
42
+ <div
43
+ v-for="(suggestion, index) in filteredSuggestions"
44
+ :key="suggestion"
45
+ :ref="(el) => setSuggestionItemRef(el, index)"
46
46
  :class="[
47
47
  theme.suggestionItem(),
48
48
  {
49
49
  [theme.suggestionItemActive()]: index === selectedSuggestionIndex
50
50
  }
51
- ]"
52
- @mousedown.prevent="selectSuggestion(suggestion, index)"
53
- @mouseenter="selectedSuggestionIndex = index"
54
- >
55
- {{ suggestion }}
56
- </div>
57
- </div>
58
- </template>
59
- </Popover>
60
- </FieldWrapper>
51
+ ]"
52
+ @mousedown.prevent="selectSuggestion(suggestion, index)"
53
+ @mouseenter="selectedSuggestionIndex = index"
54
+ >
55
+ {{ suggestion }}
56
+ </div>
57
+ </div>
58
+ </template>
59
+ </Popover>
60
+ </FieldWrapper>
61
61
  </template>
62
62
 
63
63
  <script setup>
@@ -90,7 +90,8 @@ const props = defineProps({
90
90
  readonly: { type: Boolean, required: false },
91
91
  required: { type: Boolean, required: false },
92
92
  help: { type: String, required: false },
93
- ui: { type: null, required: false }
93
+ ui: { type: null, required: false },
94
+ containerUi: { type: null, required: false }
94
95
  });
95
96
  const theme = computed(() => useUiConfig(inputTheme, "input")());
96
97
  const {