@witchcraft/ui 0.0.1 → 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 (224) hide show
  1. package/README.md +18 -28
  2. package/dist/module.d.mts +3 -1
  3. package/dist/module.json +3 -3
  4. package/dist/module.mjs +21 -12
  5. package/dist/runtime/assets/base.css +1 -1
  6. package/dist/runtime/assets/locales/en.json +2 -2
  7. package/dist/runtime/assets/tailwind.css +1 -1
  8. package/dist/runtime/assets/utils.css +1 -0
  9. package/dist/runtime/build/WitchcraftUiResolver.js +1 -1
  10. package/dist/runtime/components/Aria/Aria.vue +5 -9
  11. package/dist/runtime/components/Aria/Aria.vue.d.ts +5 -0
  12. package/dist/runtime/components/Icon/Icon.vue +12 -28
  13. package/dist/runtime/components/Icon/Icon.vue.d.ts +21 -0
  14. package/dist/runtime/components/LibButton/LibButton.vue +93 -117
  15. package/dist/runtime/components/LibButton/LibButton.vue.d.ts +36 -0
  16. package/dist/runtime/components/LibCheckbox/LibCheckbox.vue +53 -76
  17. package/dist/runtime/components/LibCheckbox/LibCheckbox.vue.d.ts +42 -0
  18. package/dist/runtime/components/LibColorInput/LibColorInput.vue +131 -101
  19. package/dist/runtime/components/LibColorInput/LibColorInput.vue.d.ts +63 -0
  20. package/dist/runtime/components/LibColorPicker/LibColorPicker.vue +326 -296
  21. package/dist/runtime/components/LibColorPicker/LibColorPicker.vue.d.ts +61 -0
  22. package/dist/runtime/components/LibColorPicker/utils/safeConvertToHsva.d.ts +2 -0
  23. package/dist/runtime/components/LibColorPicker/utils/safeConvertToHsva.js +18 -0
  24. package/dist/runtime/components/LibColorPicker/utils/safeConvertToRgba.d.ts +2 -0
  25. package/dist/runtime/components/LibColorPicker/utils/safeConvertToRgba.js +17 -0
  26. package/dist/runtime/components/LibColorPicker/utils/toLowPrecisionRgbaString.d.ts +2 -0
  27. package/dist/runtime/components/LibColorPicker/utils/toLowPrecisionRgbaString.js +8 -0
  28. package/dist/runtime/components/LibColorPicker/utils/truncate.d.ts +1 -0
  29. package/dist/runtime/components/LibColorPicker/utils/truncate.js +5 -0
  30. package/dist/runtime/components/LibDarkModeSwitcher/LibDarkModeSwitcher.vue +42 -64
  31. package/dist/runtime/components/LibDarkModeSwitcher/LibDarkModeSwitcher.vue.d.ts +22 -0
  32. package/dist/runtime/components/LibDatePicker/LibDatePicker.vue +20 -54
  33. package/dist/runtime/components/LibDatePicker/LibDatePicker.vue.d.ts +40 -0
  34. package/dist/runtime/components/LibDatePicker/LibRangeDatePicker.vue +205 -173
  35. package/dist/runtime/components/LibDatePicker/LibRangeDatePicker.vue.d.ts +34 -0
  36. package/dist/runtime/components/LibDatePicker/LibSingleDatePicker.vue +215 -164
  37. package/dist/runtime/components/LibDatePicker/LibSingleDatePicker.vue.d.ts +34 -0
  38. package/dist/runtime/components/LibDatePicker/LibTimeZonePicker.vue +9 -10
  39. package/dist/runtime/components/LibDatePicker/LibTimeZonePicker.vue.d.ts +22 -0
  40. package/dist/runtime/components/LibDebug/LibDebug.vue +47 -65
  41. package/dist/runtime/components/LibDebug/LibDebug.vue.d.ts +32 -0
  42. package/dist/runtime/components/LibDevOnly/LibDevOnly.vue +19 -34
  43. package/dist/runtime/components/LibDevOnly/LibDevOnly.vue.d.ts +22 -0
  44. package/dist/runtime/components/LibFileInput/LibFileInput.vue +155 -173
  45. package/dist/runtime/components/LibFileInput/LibFileInput.vue.d.ts +43 -0
  46. package/dist/runtime/components/LibInputDeprecated/LibInputDeprecated.vue +352 -0
  47. package/dist/runtime/components/LibInputDeprecated/LibInputDeprecated.vue.d.ts +165 -0
  48. package/dist/runtime/components/LibLabel/LibLabel.vue +30 -46
  49. package/dist/runtime/components/LibLabel/LibLabel.vue.d.ts +27 -0
  50. package/dist/runtime/components/LibMultiValues/LibMultiValues.vue +50 -66
  51. package/dist/runtime/components/LibMultiValues/LibMultiValues.vue.d.ts +29 -0
  52. package/dist/runtime/components/LibNotifications/LibNotification.vue +48 -56
  53. package/dist/runtime/components/LibNotifications/LibNotification.vue.d.ts +17 -0
  54. package/dist/runtime/components/LibNotifications/LibNotifications.vue +71 -83
  55. package/dist/runtime/components/LibNotifications/LibNotifications.vue.d.ts +13 -0
  56. package/dist/runtime/components/LibPagination/LibPagination.vue +86 -131
  57. package/dist/runtime/components/LibPagination/LibPagination.vue.d.ts +104 -0
  58. package/dist/runtime/components/LibPalette/LibPalette.vue +23 -26
  59. package/dist/runtime/components/LibPalette/LibPalette.vue.d.ts +14 -0
  60. package/dist/runtime/components/LibPopup/LibPopup.vue +326 -400
  61. package/dist/runtime/components/LibPopup/LibPopup.vue.d.ts +46 -0
  62. package/dist/runtime/components/LibProgressBar/LibProgressBar.vue +73 -93
  63. package/dist/runtime/components/LibProgressBar/LibProgressBar.vue.d.ts +41 -0
  64. package/dist/runtime/components/LibRecorder/LibRecorder.vue +134 -179
  65. package/dist/runtime/components/LibRecorder/LibRecorder.vue.d.ts +77 -0
  66. package/dist/runtime/components/LibRoot/LibRoot.vue +75 -89
  67. package/dist/runtime/components/LibRoot/LibRoot.vue.d.ts +41 -0
  68. package/dist/runtime/components/LibSimpleInput/LibSimpleInput.vue +51 -82
  69. package/dist/runtime/components/LibSimpleInput/LibSimpleInput.vue.d.ts +35 -0
  70. package/dist/runtime/components/LibSuggestions/LibSuggestions.vue +147 -164
  71. package/dist/runtime/components/LibSuggestions/LibSuggestions.vue.d.ts +94 -0
  72. package/dist/runtime/components/LibTable/LibTable.vue +69 -106
  73. package/dist/runtime/components/LibTable/LibTable.vue.d.ts +45 -0
  74. package/dist/runtime/components/Template/NAME.vue +15 -36
  75. package/dist/runtime/components/Template/NAME.vue.d.ts +17 -0
  76. package/dist/runtime/components/TestControls/TestControls.vue +7 -10
  77. package/dist/runtime/components/TestControls/TestControls.vue.d.ts +5 -0
  78. package/dist/runtime/components/index.d.ts +12 -11
  79. package/dist/runtime/components/index.js +12 -11
  80. package/dist/runtime/components/shared/props.d.ts +81 -16
  81. package/dist/runtime/components/shared/storyHelpers/playInput.js +5 -5
  82. package/dist/runtime/components/shared/storyHelpers/playSuggestions.js +15 -11
  83. package/dist/runtime/composables/index.d.ts +5 -0
  84. package/dist/runtime/composables/index.js +5 -0
  85. package/dist/runtime/composables/useDivideAttrs.js +1 -0
  86. package/dist/runtime/composables/useDragWithThreshold.d.ts +71 -0
  87. package/dist/runtime/composables/useDragWithThreshold.js +40 -0
  88. package/dist/runtime/composables/usePreHydrationValue.d.ts +12 -0
  89. package/dist/runtime/composables/usePreHydrationValue.js +15 -0
  90. package/dist/runtime/composables/useSetupI18n.d.ts +2 -0
  91. package/dist/runtime/composables/useSetupI18n.js +5 -1
  92. package/dist/runtime/composables/useSuggestions.d.ts +7 -5
  93. package/dist/runtime/composables/useSuggestions.js +94 -57
  94. package/dist/runtime/directives/vResizableCols.js +92 -84
  95. package/dist/runtime/helpers/NotificationHandler.d.ts +5 -0
  96. package/dist/runtime/helpers/index.d.ts +3 -1
  97. package/dist/runtime/helpers/index.js +3 -1
  98. package/dist/runtime/types/index.d.ts +6 -0
  99. package/dist/runtime/utils/notifyIfError.d.ts +14 -0
  100. package/dist/runtime/utils/notifyIfError.js +29 -0
  101. package/dist/types.d.mts +2 -6
  102. package/package.json +27 -29
  103. package/src/module.ts +31 -12
  104. package/src/runtime/assets/base.css +10 -1
  105. package/src/runtime/assets/locales/en.json +2 -2
  106. package/src/runtime/assets/tailwind.css +1 -1
  107. package/src/runtime/assets/{style.css → utils.css} +86 -4
  108. package/src/runtime/build/WitchcraftUiResolver.ts +1 -1
  109. package/src/runtime/components/Focus.stories.ts +3 -2
  110. package/src/runtime/components/Icon/Icon.vue +10 -6
  111. package/src/runtime/components/LibButton/LibButton.vue +41 -47
  112. package/src/runtime/components/LibCheckbox/LibCheckbox.vue +7 -4
  113. package/src/runtime/components/LibColorInput/LibColorInput.vue +111 -37
  114. package/src/runtime/components/LibColorPicker/LibColorPicker.stories.ts +25 -4
  115. package/src/runtime/components/LibColorPicker/LibColorPicker.vue +242 -131
  116. package/src/runtime/components/LibColorPicker/utils/safeConvertToHsva.ts +24 -0
  117. package/src/runtime/components/LibColorPicker/utils/safeConvertToRgba.ts +23 -0
  118. package/src/runtime/components/LibColorPicker/utils/toLowPrecisionRgbaString.ts +13 -0
  119. package/src/runtime/components/LibColorPicker/utils/truncate.ts +6 -0
  120. package/src/runtime/components/LibDarkModeSwitcher/LibDarkModeSwitcher.stories.ts +1 -1
  121. package/src/runtime/components/LibDarkModeSwitcher/LibDarkModeSwitcher.vue +11 -9
  122. package/src/runtime/components/LibDatePicker/LibDatePicker.vue +4 -17
  123. package/src/runtime/components/LibDatePicker/LibRangeDatePicker.vue +192 -131
  124. package/src/runtime/components/LibDatePicker/LibSingleDatePicker.vue +183 -115
  125. package/src/runtime/components/LibDatePicker/LibTimeZonePicker.vue +3 -3
  126. package/src/runtime/components/LibDebug/LibDebug.vue +15 -5
  127. package/src/runtime/components/LibDevOnly/LibDevOnly.vue +1 -3
  128. package/src/runtime/components/LibFileInput/LibFileInput.vue +54 -29
  129. package/src/runtime/components/{LibInput/LibInput.stories.ts → LibInputDeprecated/LibInputDeprecated.stories.ts} +64 -19
  130. package/{dist/runtime/components/LibInput/LibInput.vue → src/runtime/components/LibInputDeprecated/LibInputDeprecated.vue} +40 -34
  131. package/src/runtime/components/LibLabel/LibLabel.vue +2 -2
  132. package/src/runtime/components/LibMultiValues/LibMultiValues.stories.ts +5 -4
  133. package/src/runtime/components/LibMultiValues/LibMultiValues.vue +11 -13
  134. package/src/runtime/components/LibNotifications/LibNotification.vue +19 -11
  135. package/src/runtime/components/LibNotifications/LibNotifications.stories.ts +2 -2
  136. package/src/runtime/components/LibNotifications/LibNotifications.vue +20 -12
  137. package/src/runtime/components/LibPagination/LibPagination.stories.ts +2 -2
  138. package/src/runtime/components/LibPagination/LibPagination.vue +19 -20
  139. package/src/runtime/components/LibPalette/LibPalette.vue +3 -3
  140. package/src/runtime/components/LibPopup/LibPopup.stories.ts +2 -2
  141. package/src/runtime/components/LibPopup/LibPopup.vue +30 -67
  142. package/src/runtime/components/LibProgressBar/LibProgressBar.vue +3 -2
  143. package/src/runtime/components/LibRecorder/LibRecorder.vue +2 -3
  144. package/src/runtime/components/LibRoot/LibRoot.vue +14 -1
  145. package/src/runtime/components/LibSimpleInput/LibSimpleInput.stories.ts +1 -1
  146. package/src/runtime/components/LibSimpleInput/LibSimpleInput.vue +5 -8
  147. package/src/runtime/components/LibSuggestions/LibSuggestions.vue +42 -26
  148. package/src/runtime/components/LibTable/LibTable.vue +8 -9
  149. package/src/runtime/components/Scrolling.stories.ts +58 -0
  150. package/src/runtime/components/Template/NAME.vue +1 -1
  151. package/src/runtime/components/TestControls/TestControls.vue +1 -1
  152. package/src/runtime/components/index.ts +12 -12
  153. package/src/runtime/components/shared/props.ts +82 -19
  154. package/src/runtime/components/shared/storyHelpers/playInput.ts +6 -5
  155. package/src/runtime/components/shared/storyHelpers/playSuggestions.ts +25 -11
  156. package/src/runtime/composables/index.ts +5 -0
  157. package/src/runtime/composables/useDarkMode.ts +2 -2
  158. package/src/runtime/composables/useDivideAttrs.ts +1 -0
  159. package/src/runtime/composables/useDragWithThreshold.ts +108 -0
  160. package/src/runtime/composables/usePreHydrationValue.ts +30 -0
  161. package/src/runtime/composables/useSetupI18n.ts +8 -2
  162. package/src/runtime/composables/useSuggestions.ts +92 -45
  163. package/src/runtime/directives/vResizableCols.ts +82 -74
  164. package/src/runtime/helpers/NotificationHandler.ts +5 -0
  165. package/src/runtime/helpers/index.ts +3 -1
  166. package/src/runtime/types/index.ts +5 -0
  167. package/src/runtime/utils/notifyIfError.ts +45 -0
  168. package/dist/module.cjs +0 -5
  169. package/dist/module.d.ts +0 -34
  170. package/dist/runtime/assets/style.css +0 -1
  171. package/dist/runtime/components/Focus.stories.d.ts +0 -11
  172. package/dist/runtime/components/Focus.stories.js +0 -53
  173. package/dist/runtime/components/LibButton/LibButton.stories.d.ts +0 -12
  174. package/dist/runtime/components/LibButton/LibButton.stories.js +0 -94
  175. package/dist/runtime/components/LibCheckbox/LibCheckbox.stories.d.ts +0 -14
  176. package/dist/runtime/components/LibCheckbox/LibCheckbox.stories.js +0 -29
  177. package/dist/runtime/components/LibColorInput/LibColorInput.stories.d.ts +0 -7
  178. package/dist/runtime/components/LibColorInput/LibColorInput.stories.js +0 -58
  179. package/dist/runtime/components/LibColorPicker/LibColorPicker.stories.d.ts +0 -7
  180. package/dist/runtime/components/LibColorPicker/LibColorPicker.stories.js +0 -51
  181. package/dist/runtime/components/LibDarkModeSwitcher/LibDarkModeSwitcher.stories.d.ts +0 -7
  182. package/dist/runtime/components/LibDarkModeSwitcher/LibDarkModeSwitcher.stories.js +0 -36
  183. package/dist/runtime/components/LibDatePicker/LibDatePicker.stories.d.ts +0 -11
  184. package/dist/runtime/components/LibDatePicker/LibDatePicker.stories.js +0 -98
  185. package/dist/runtime/components/LibDebug/LibDebug.stories.d.ts +0 -9
  186. package/dist/runtime/components/LibDebug/LibDebug.stories.js +0 -46
  187. package/dist/runtime/components/LibFileInput/LibFileInput.stories.d.ts +0 -10
  188. package/dist/runtime/components/LibFileInput/LibFileInput.stories.js +0 -63
  189. package/dist/runtime/components/LibInput/LibInput.stories.d.ts +0 -33
  190. package/dist/runtime/components/LibInput/LibInput.stories.js +0 -339
  191. package/dist/runtime/components/LibLabel/LibLabel.stories.d.ts +0 -6
  192. package/dist/runtime/components/LibLabel/LibLabel.stories.js +0 -25
  193. package/dist/runtime/components/LibMultiValues/LibMultiValues.stories.d.ts +0 -23
  194. package/dist/runtime/components/LibMultiValues/LibMultiValues.stories.js +0 -60
  195. package/dist/runtime/components/LibNotifications/LibNotification.stories.d.ts +0 -15
  196. package/dist/runtime/components/LibNotifications/LibNotification.stories.js +0 -126
  197. package/dist/runtime/components/LibNotifications/LibNotifications.stories.d.ts +0 -6
  198. package/dist/runtime/components/LibNotifications/LibNotifications.stories.js +0 -109
  199. package/dist/runtime/components/LibPagination/LibPagination.stories.d.ts +0 -6
  200. package/dist/runtime/components/LibPagination/LibPagination.stories.js +0 -40
  201. package/dist/runtime/components/LibPalette/LibPalette.stories.d.ts +0 -6
  202. package/dist/runtime/components/LibPalette/LibPalette.stories.js +0 -20
  203. package/dist/runtime/components/LibPopup/LibPopup.stories.d.ts +0 -14
  204. package/dist/runtime/components/LibPopup/LibPopup.stories.js +0 -147
  205. package/dist/runtime/components/LibProgressBar/LibProgressBar.stories.d.ts +0 -10
  206. package/dist/runtime/components/LibProgressBar/LibProgressBar.stories.js +0 -81
  207. package/dist/runtime/components/LibRecorder/LibRecorder.stories.d.ts +0 -19
  208. package/dist/runtime/components/LibRecorder/LibRecorder.stories.js +0 -63
  209. package/dist/runtime/components/LibSimpleInput/LibSimpleInput.stories.d.ts +0 -26
  210. package/dist/runtime/components/LibSimpleInput/LibSimpleInput.stories.js +0 -78
  211. package/dist/runtime/components/LibSuggestions/LibSuggestions.stories.d.ts +0 -27
  212. package/dist/runtime/components/LibSuggestions/LibSuggestions.stories.js +0 -112
  213. package/dist/runtime/components/LibTable/LibTable.stories.d.ts +0 -16
  214. package/dist/runtime/components/LibTable/LibTable.stories.js +0 -156
  215. package/dist/runtime/components/reset.stories.d.ts +0 -5
  216. package/dist/runtime/components/reset.stories.js +0 -19
  217. package/dist/runtime/composables/useScrollNearContainerEdges.stories.d.ts +0 -7
  218. package/dist/runtime/composables/useScrollNearContainerEdges.stories.js +0 -85
  219. package/dist/runtime/helpers/addValue.d.ts +0 -1
  220. package/dist/runtime/helpers/addValue.js +0 -8
  221. package/dist/types.d.ts +0 -7
  222. package/src/runtime/components/LibInput/LibInput.vue +0 -372
  223. package/src/runtime/helpers/addValue.ts +0 -10
  224. /package/src/runtime/components/{reset.stories.ts → Reset.stories.ts} +0 -0
@@ -1,372 +0,0 @@
1
- <template>
2
- <div
3
- :class="twMerge(`input wrapper
4
- grow
5
- flex
6
- flex-wrap
7
- `,
8
- disabled && `
9
- text-neutral-400
10
- `,
11
- ($.wrapperAttrs as any)?.class,
12
- )"
13
- tabindex="-1"
14
- v-bind="{...$.wrapperAttrs, class:undefined}"
15
- ref="inputWrapperEl"
16
- >
17
- <slot name="label" v-bind="{ ...slotProps, label }">
18
- <lib-label v-if="label || $slots.default"
19
- :id="id ?? fallbackId"
20
- :disabled="disabled"
21
- :readonly="readonly"
22
- :valid="valid"
23
- >
24
- <slot v-bind="slotProps">
25
- {{ label }}
26
- </slot>
27
- </lib-label>
28
- <!-- Allow blurring when clicking the blank part of a label. -->
29
- <div class="flex-1"/>
30
- </slot>
31
- <!-- These are mostly copies of the classes on LibSimpleInput except made to work with disabled/readonly/etc manually since a div cannot have these states. -->
32
- <div
33
- :data-border="border"
34
- :data-invalid="!valid"
35
- :data-disabled="disabled"
36
- :data-read-only="readonly"
37
- :data-is-open="isOpen"
38
- v-bind="{...$['inner-wrapperAttrs'], class:undefined}"
39
- :class="twMerge(`inner-wrapper
40
- relative
41
- flex
42
- flex-1
43
- basis-[100%]
44
- flex-wrap
45
- rounded-sm
46
- gap-2
47
- px-2
48
- `,
49
- border && `
50
- bg-inherit
51
- border
52
- border-neutral-500
53
- outlined-within:border-accent-500
54
- `,
55
- isOpen && `rounded-b-none`,
56
- !valid && `
57
- border-danger-700
58
- outlined:!ring-danger-700
59
- text-danger-800
60
- dark:text-danger-400
61
- dark:border-danger-600
62
- `,
63
- readonly && `
64
- bg-neutral-50
65
- text-neutral-800
66
- dark:bg-neutral-950
67
- dark:text-neutral-200
68
- `,
69
- disabled && `
70
- bg-neutral-50
71
- text-neutral-400
72
- dark:border-neutral-600
73
- border-neutral-400
74
- `,
75
- ($['inner-wrapperAttrs'] as any)?.class,
76
- )"
77
- >
78
- <slot name="left" v-bind="slotProps"/>
79
- <slot name="input" v-bind="{ ...inputProps, ...slotProps, suggestionsIndicatorClickHandler }">
80
- <lib-simple-input
81
- :class="twMerge(
82
- `p-0`,
83
- !$slots.left && `-ml-2 pl-2`,
84
- !$slots.right && (!$values || $values.length === 0) && !suggestions && `-mr-2 -pr-2`,
85
- ($.attrs as any)?.class,
86
- )"
87
- v-bind="inputProps"
88
- />
89
- </slot>
90
- <slot name="indicator" v-bind="{isOpen, suggestionsIndicatorClickHandler }">
91
- <div
92
- v-if="suggestions"
93
- :data-is-open="isOpen"
94
- :class="twMerge(
95
- `indicator flex flex-col justify-center`,
96
- )"
97
- @click="suggestionsIndicatorClickHandler"
98
- >
99
- <icon :class="isOpen && `rotate-180`"> <i-fa6-solid-chevron-up/> </icon>
100
- </div>
101
- </slot>
102
- <slot
103
- name="values"
104
- v-bind="{...multivaluesProps, ...slotProps}"
105
- >
106
- <template v-if="$values && $values.length > 0">
107
- <lib-multi-values
108
- :class="twMerge(`
109
- grow-[9000]
110
- justify-space-between
111
- py-1
112
- `,
113
- !$slots.right && `
114
- -mr-1
115
- `,
116
- ($.multivaluesAttrs as any)?.class,
117
- )"
118
- v-bind="multivaluesProps"
119
- />
120
- </template>
121
- </slot>
122
- <slot name="right" v-bind="slotProps"/>
123
-
124
- <slot v-if="suggestions" name="suggestions" v-bind="{...suggestionProps, ...slotProps}">
125
- <!-- todo 1px needs to be abstracted to var -->
126
- <lib-suggestions
127
- :class="twMerge(`
128
- absolute
129
- -inset-x-px
130
- z-10
131
- rounded-b-sm
132
- border-accent-500
133
- border
134
- top-full
135
- `,
136
- !border && `
137
- rounded-sm
138
- `,
139
- ($.suggestionsAttrs as any)?.class,
140
- )"
141
- ref="suggestionsComponent"
142
- v-bind="suggestionProps"
143
- >
144
- <template #item="itemSlotProps">
145
- <slot name="suggestion-item" v-bind="itemSlotProps"/>
146
- </template>
147
- </lib-suggestions>
148
- </slot>
149
- </div>
150
- </div>
151
- </template>
152
- <script setup lang="ts">
153
- import { isBlank } from "@alanscodelog/utils/isBlank.js"
154
- import { pushIfNotIn } from "@alanscodelog/utils/pushIfNotIn.js"
155
- import type { MakeRequired } from "@alanscodelog/utils/types"
156
- import { computed,type HTMLAttributes,type InputHTMLAttributes, nextTick, type PropType, ref, toRef, useSlots, watch } from "vue"
157
- import type { ComponentExposed } from "vue-component-type-helpers"
158
-
159
- import { useDivideAttrs } from "../../composables/useDivideAttrs.js"
160
- import { useSuggestionsInputAria } from "../../composables/useSuggestions.js"
161
- import { hasModifiers } from "../../helpers/hasModifiers.js"
162
- import { twMerge } from "../../utils/twMerge.js"
163
- import Icon from "../Icon/Icon.vue"
164
- import LibLabel from "../LibLabel/LibLabel.vue"
165
- import LibMultiValues from "../LibMultiValues/LibMultiValues.vue"
166
- import LibSimpleInput from "../LibSimpleInput/LibSimpleInput.vue"
167
- import LibSuggestions from "../LibSuggestions/LibSuggestions.vue"
168
- import { type BaseInteractiveProps, baseInteractivePropsDefaults, getFallbackId,type LabelProps, type LinkableByIdProps, type MultiValueProps, type SuggestionsProps, type TailwindClassProp, type WrapperProps } from "../shared/props.js"
169
-
170
-
171
- /* #region base */
172
- defineOptions({
173
- name: "lib-input",
174
- inheritAttrs: false,
175
- })
176
- const $slots = useSlots()
177
- const emit = defineEmits<{
178
- (e: "submit", val: string, suggestion?: any): void
179
- (e: "input", val: InputEvent): void
180
- (e: "keydown", val: KeyboardEvent): void
181
- (e: "blur", val: FocusEvent): void
182
- (e: "focus", val: FocusEvent): void
183
- (e: "indicatorClick", val: MouseEvent): void
184
- }>()
185
-
186
- const fallbackId = getFallbackId()
187
-
188
- // eslint-disable-next-line no-use-before-define
189
- const props = withDefaults(defineProps<Props>(), {
190
- valid: true,
191
- suggestions: undefined,
192
- updateOnlyOnSubmit: false,
193
- ...baseInteractivePropsDefaults,
194
- })
195
-
196
- const $ = useDivideAttrs(["wrapper", "inner-wrapper", "suggestions", "multivalues"] as const)
197
-
198
- const $values = defineModel<string[] | undefined>("values", { default: undefined })
199
- const $modelValue = defineModel<string>({ required: true })
200
-
201
- const fullId = computed(() => props.id ?? fallbackId)
202
-
203
- const $inputValue = defineModel<string>("inputValue", { default: "" })
204
- $inputValue.value = $modelValue.value ?? ""
205
-
206
- const canEdit = computed(() => !props.disabled && !props.readonly)
207
- const suggestionsComponent = ref<ComponentExposed<typeof LibSuggestions> | null>(null)
208
- const activeSuggestion = ref(0)
209
- watch($modelValue, () => {
210
- $inputValue.value = $modelValue.value
211
- })
212
- const inputWrapperEl = ref<HTMLElement | null>(null)
213
- const isOpen = ref(false)
214
-
215
- const suggestionsIndicatorClickHandler = (e: MouseEvent) => {
216
- nextTick(() => {
217
- if (props.suggestions) {
218
- (suggestionsComponent.value as any)?.suggestions.toggle()
219
- }
220
- })
221
- emit("indicatorClick", e)
222
- }
223
-
224
-
225
- const handleKeydown = (e: KeyboardEvent) => {
226
- if (props.suggestions) {
227
- (suggestionsComponent.value as any)?.inputKeydownHandler?.(e)
228
- }
229
-
230
- emit("keydown", e)
231
- }
232
- const handleBlur = (e: FocusEvent) => {
233
- if (props.suggestions) {
234
- (suggestionsComponent.value as any)?.inputBlurHandler?.(e)
235
- }
236
- emit("blur", e)
237
- }
238
- const handleFocus = (e: FocusEvent) => {
239
- if (props.suggestions) {
240
- (suggestionsComponent.value as any)?.inputFocusHandler?.(e)
241
- }
242
- emit("focus", e)
243
- }
244
-
245
- function addValue(val: string) {
246
- if ($values.value === undefined) return
247
- if (isBlank(val)) return
248
- props.preventDuplicateValues
249
- ? pushIfNotIn($values.value, [val])
250
- : $values.value.push(val)
251
- $inputValue.value = ""
252
- $modelValue.value = ""
253
- }
254
- const suggestions = toRef(props, "suggestions")
255
- const inputAriaProps = useSuggestionsInputAria(
256
- fullId,
257
- isOpen,
258
- activeSuggestion,
259
- suggestions,
260
- )
261
- const inputProps = computed(() => ({
262
- id: fullId.value,
263
- border: false,
264
- disabled: props.disabled,
265
- readonly: props.readonly,
266
- isValid: props.valid,
267
- onKeydown: handleKeydown,
268
- onBlur: handleBlur,
269
- onFocus: handleFocus,
270
- modelValue: $inputValue.value,
271
- "onUpdate:modelValue": (e: string) => {
272
- $inputValue.value = e
273
- if (!props.suggestions && !props.updateOnlyOnSubmit && !props.restrictToSuggestions) {
274
- $modelValue.value = e
275
- }
276
- },
277
- onSubmit: (e: string) => {
278
- if (!props.suggestions) {
279
- $modelValue.value = e
280
- emit("submit", e)
281
- if ($values.value) {
282
- addValue(e)
283
- }
284
- }
285
- },
286
- ...inputAriaProps.value,
287
- canEdit: canEdit.value,
288
- ...$.value.attrs,
289
- class: undefined,
290
- }))
291
-
292
- function slotSubmit(val: any): void {
293
- emit("submit", val)
294
- }
295
- const slotProps = computed(() => ({
296
- id: fullId.value,
297
- isOpen: isOpen.value,
298
- valid: props.valid,
299
- disabled: props.disabled,
300
- readonly: props.readonly,
301
- emitSubmit: slotSubmit
302
- }))
303
-
304
- const suggestionProps = computed(() => ({
305
- id: fullId.value,
306
- suggestions: props.suggestions,
307
- allowOpenEmpty: props.allowOpenEmpty,
308
- restrictToSuggestions: props.restrictToSuggestions,
309
- suggestionLabel: props.suggestionLabel,
310
- suggestionsFilter: props.suggestionsFilter,
311
- modelValue: $modelValue.value.toString(),
312
- inputValue: $inputValue.value,
313
- isValid: props.isValid,
314
- "onUpdate:inputValue": (e: string) => $inputValue.value = e,
315
- onSubmit: (e: string, suggestion: any) => {
316
- $modelValue.value = e
317
- emit("submit", e, suggestion)
318
- if ($values.value) {
319
- addValue(e)
320
- }
321
- },
322
- "onUpdate:isOpen": (e: boolean) => { isOpen.value = e },
323
- "onUpdate:activeSuggestion": (e: number) => activeSuggestion.value = e,
324
- ...$.value.suggestionsAttrs,
325
- class: undefined,
326
- }))
327
-
328
- const multivaluesProps = computed(() => ({
329
- hasSlotRight: !$slots.right,
330
- label: props.label,
331
- border: props.border,
332
- disabled: props.disabled,
333
- readonly: props.readonly,
334
- values: $values.value,
335
- "onUpdate:values": (e: string[]) => $values.value = e,
336
- ...$.value.multivaluesAttrs,
337
- class: undefined,
338
- }))
339
-
340
-
341
- defineExpose({
342
- suggestionsComponent,
343
- el: inputWrapperEl,
344
- })
345
- </script>
346
- <script lang="ts">
347
-
348
- type WrapperTypes =
349
- & WrapperProps<"suggestions",HTMLAttributes >
350
- & WrapperProps<"wrapper", HTMLAttributes >
351
- & WrapperProps<"inner-wrapper",HTMLAttributes>
352
-
353
- type RealProps =
354
- SuggestionsProps
355
- & LinkableByIdProps
356
- & LabelProps
357
- & BaseInteractiveProps
358
- & MultiValueProps
359
- & {
360
- suggestions?: SuggestionsProps["suggestions"]
361
- valid?: boolean
362
- }
363
-
364
- interface Props
365
- extends
366
- /** @vue-ignore */
367
- Partial<Omit<InputHTMLAttributes,"class" | "readonly" | "disabled" | "onSubmit"> & TailwindClassProp>,
368
- /** @vue-ignore */
369
- Partial<WrapperTypes>,
370
- RealProps { }
371
- </script>
372
-
@@ -1,10 +0,0 @@
1
- import { pushIfNotIn } from "@alanscodelog/utils/pushIfNotIn.js"
2
-
3
-
4
- export const addValue = <T>(value: T, values: T[], preventDuplicateValues: boolean): T[] => {
5
- if (preventDuplicateValues) {
6
- return pushIfNotIn(values, [value])
7
- }
8
- values.push(value)
9
- return values
10
- }