@witchcraft/ui 0.4.0 → 0.4.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 (316) hide show
  1. package/README.md +56 -61
  2. package/dist/module.d.mts +1 -1
  3. package/dist/module.json +1 -1
  4. package/dist/module.mjs +13 -9
  5. package/dist/runtime/assets/animations.css +1 -1
  6. package/dist/runtime/assets/locales/en.json +2 -0
  7. package/dist/runtime/assets/utils.css +1 -1
  8. package/dist/runtime/build/WitchcraftUiResolver.js +1 -2
  9. package/dist/runtime/components/TestControls/TestControls.d.vue.ts +2 -1
  10. package/dist/runtime/components/TestControls/TestControls.vue +3 -3
  11. package/dist/runtime/components/TestControls/TestControls.vue.d.ts +2 -1
  12. package/dist/runtime/components/WButton/WButton.d.vue.ts +34 -0
  13. package/dist/runtime/components/{LibButton/LibButton.vue → WButton/WButton.vue} +26 -38
  14. package/dist/runtime/components/WButton/WButton.vue.d.ts +34 -0
  15. package/dist/runtime/components/WCheckbox/WCheckbox.d.vue.ts +33 -0
  16. package/dist/runtime/components/WCheckbox/WCheckbox.vue +110 -0
  17. package/dist/runtime/components/WCheckbox/WCheckbox.vue.d.ts +33 -0
  18. package/dist/runtime/components/{LibColorInput/LibColorInput.d.vue.ts → WColorInput/WColorInput.d.vue.ts} +18 -36
  19. package/dist/runtime/components/WColorInput/WColorInput.vue +85 -0
  20. package/dist/runtime/components/{LibColorInput/LibColorInput.vue.d.ts → WColorInput/WColorInput.vue.d.ts} +18 -36
  21. package/dist/runtime/components/WColorInput/WColorSwatchButton.d.vue.ts +28 -0
  22. package/dist/runtime/components/WColorInput/WColorSwatchButton.vue +86 -0
  23. package/dist/runtime/components/WColorInput/WColorSwatchButton.vue.d.ts +28 -0
  24. package/dist/runtime/components/{LibColorPicker/LibColorPicker.d.vue.ts → WColorPicker/WColorPicker.d.vue.ts} +12 -9
  25. package/dist/runtime/components/{LibColorPicker/LibColorPicker.vue → WColorPicker/WColorPicker.vue} +41 -29
  26. package/dist/runtime/components/{LibColorPicker/LibColorPicker.vue.d.ts → WColorPicker/WColorPicker.vue.d.ts} +12 -9
  27. package/dist/runtime/components/WCombobox/WCombobox.d.vue.ts +111 -0
  28. package/dist/runtime/components/WCombobox/WCombobox.vue +405 -0
  29. package/dist/runtime/components/WCombobox/WCombobox.vue.d.ts +111 -0
  30. package/dist/runtime/components/WCombobox/storyPlays.d.ts +18 -0
  31. package/dist/runtime/components/WCombobox/storyPlays.js +68 -0
  32. package/dist/runtime/components/{LibDarkModeSwitcher/LibDarkModeSwitcher.d.vue.ts → WDarkModeSwitcher/WDarkModeSwitcher.d.vue.ts} +9 -13
  33. package/dist/runtime/components/{LibDarkModeSwitcher/LibDarkModeSwitcher.vue → WDarkModeSwitcher/WDarkModeSwitcher.vue} +11 -14
  34. package/dist/runtime/components/{LibDarkModeSwitcher/LibDarkModeSwitcher.vue.d.ts → WDarkModeSwitcher/WDarkModeSwitcher.vue.d.ts} +9 -13
  35. package/dist/runtime/components/{LibDatePicker/LibDatePicker.d.vue.ts → WDatePicker/WDatePicker.d.vue.ts} +7 -7
  36. package/dist/runtime/components/{LibDatePicker/LibDatePicker.vue → WDatePicker/WDatePicker.vue} +3 -7
  37. package/dist/runtime/components/{LibDatePicker/LibDatePicker.vue.d.ts → WDatePicker/WDatePicker.vue.d.ts} +7 -7
  38. package/dist/runtime/components/WDatePicker/WRangeDatePicker.d.vue.ts +182 -0
  39. package/dist/runtime/components/{LibDatePicker/LibRangeDatePicker.vue → WDatePicker/WRangeDatePicker.vue} +29 -25
  40. package/dist/runtime/components/WDatePicker/WRangeDatePicker.vue.d.ts +182 -0
  41. package/dist/runtime/components/{LibDatePicker/LibSingleDatePicker.d.vue.ts → WDatePicker/WSingleDatePicker.d.vue.ts} +7 -5
  42. package/dist/runtime/components/{LibDatePicker/LibSingleDatePicker.vue → WDatePicker/WSingleDatePicker.vue} +21 -21
  43. package/dist/runtime/components/{LibDatePicker/LibSingleDatePicker.vue.d.ts → WDatePicker/WSingleDatePicker.vue.d.ts} +7 -5
  44. package/dist/runtime/components/WDatePicker/WTimeZonePicker.d.vue.ts +13 -0
  45. package/dist/runtime/components/{LibDatePicker/LibTimeZonePicker.vue → WDatePicker/WTimeZonePicker.vue} +5 -12
  46. package/dist/runtime/components/WDatePicker/WTimeZonePicker.vue.d.ts +13 -0
  47. package/dist/runtime/components/{LibDebug/LibDebug.d.vue.ts → WDebug/WDebug.d.vue.ts} +3 -2
  48. package/dist/runtime/components/{LibDebug/LibDebug.vue → WDebug/WDebug.vue} +10 -12
  49. package/dist/runtime/components/{LibDebug/LibDebug.vue.d.ts → WDebug/WDebug.vue.d.ts} +3 -2
  50. package/dist/runtime/components/{LibDevOnly/LibDevOnly.d.vue.ts → WDevOnly/WDevOnly.d.vue.ts} +3 -5
  51. package/dist/runtime/components/{LibDevOnly/LibDevOnly.vue.d.ts → WDevOnly/WDevOnly.vue.d.ts} +3 -5
  52. package/dist/runtime/components/WFileInput/WFileInput.d.vue.ts +58 -0
  53. package/dist/runtime/components/WFileInput/WFileInput.vue +348 -0
  54. package/dist/runtime/components/WFileInput/WFileInput.vue.d.ts +58 -0
  55. package/dist/runtime/components/WIcon/WIcon.d.vue.ts +18 -0
  56. package/dist/runtime/components/{Icon/Icon.vue → WIcon/WIcon.vue} +1 -1
  57. package/dist/runtime/components/WIcon/WIcon.vue.d.ts +18 -0
  58. package/dist/runtime/components/WMultiValues/WMultiValues.d.vue.ts +28 -0
  59. package/dist/runtime/components/WMultiValues/WMultiValues.vue +150 -0
  60. package/dist/runtime/components/WMultiValues/WMultiValues.vue.d.ts +28 -0
  61. package/dist/runtime/components/WNotifications/WNotification.d.vue.ts +37 -0
  62. package/dist/runtime/components/{LibNotifications/LibNotification.vue → WNotifications/WNotification.vue} +61 -35
  63. package/dist/runtime/components/WNotifications/WNotification.vue.d.ts +37 -0
  64. package/dist/runtime/components/WNotifications/WNotificationTestMessageComponent.d.vue.ts +7 -0
  65. package/dist/runtime/components/WNotifications/WNotificationTestMessageComponent.vue +29 -0
  66. package/dist/runtime/components/WNotifications/WNotificationTestMessageComponent.vue.d.ts +7 -0
  67. package/dist/runtime/components/WNotifications/WNotifications.d.vue.ts +11 -0
  68. package/dist/runtime/components/{LibNotifications/LibNotifications.vue → WNotifications/WNotifications.vue} +72 -36
  69. package/dist/runtime/components/WNotifications/WNotifications.vue.d.ts +11 -0
  70. package/dist/runtime/components/WNotifications/calculateNotificationProgress.d.ts +2 -0
  71. package/dist/runtime/components/WNotifications/calculateNotificationProgress.js +4 -0
  72. package/dist/runtime/components/WNumberInput/WNumberInput.d.vue.ts +27 -0
  73. package/dist/runtime/components/WNumberInput/WNumberInput.vue +96 -0
  74. package/dist/runtime/components/WNumberInput/WNumberInput.vue.d.ts +27 -0
  75. package/dist/runtime/components/WPagination/WPagination.d.vue.ts +59 -0
  76. package/dist/runtime/components/WPagination/WPagination.vue +182 -0
  77. package/dist/runtime/components/WPagination/WPagination.vue.d.ts +59 -0
  78. package/dist/runtime/components/WPalette/WPalette.d.vue.ts +11 -0
  79. package/dist/runtime/components/{LibPalette/LibPalette.vue → WPalette/WPalette.vue} +3 -8
  80. package/dist/runtime/components/WPalette/WPalette.vue.d.ts +11 -0
  81. package/dist/runtime/components/WPopover/WPopover.d.vue.ts +45 -0
  82. package/dist/runtime/components/WPopover/WPopover.vue +144 -0
  83. package/dist/runtime/components/WPopover/WPopover.vue.d.ts +45 -0
  84. package/dist/runtime/components/WPopup/WPopup.d.vue.ts +51 -0
  85. package/dist/runtime/components/WPopup/WPopup.vue +115 -0
  86. package/dist/runtime/components/WPopup/WPopup.vue.d.ts +51 -0
  87. package/dist/runtime/components/{LibProgressBar/LibProgressBar.d.vue.ts → WProgressBar/WProgressBar.d.vue.ts} +13 -16
  88. package/dist/runtime/components/WProgressBar/WProgressBar.vue +150 -0
  89. package/dist/runtime/components/{LibProgressBar/LibProgressBar.vue.d.ts → WProgressBar/WProgressBar.vue.d.ts} +13 -16
  90. package/dist/runtime/components/{LibRecorder/LibRecorder.d.vue.ts → WRecorder/WRecorder.d.vue.ts} +13 -27
  91. package/dist/runtime/components/{LibRecorder/LibRecorder.vue → WRecorder/WRecorder.vue} +37 -36
  92. package/dist/runtime/components/{LibRecorder/LibRecorder.vue.d.ts → WRecorder/WRecorder.vue.d.ts} +13 -27
  93. package/dist/runtime/components/{LibRoot/LibRoot.d.vue.ts → WRoot/WRoot.d.vue.ts} +11 -9
  94. package/dist/runtime/components/{LibRoot/LibRoot.vue → WRoot/WRoot.vue} +17 -15
  95. package/dist/runtime/components/{LibRoot/LibRoot.vue.d.ts → WRoot/WRoot.vue.d.ts} +11 -9
  96. package/dist/runtime/components/WSimpleInput/WSimpleInput.d.vue.ts +34 -0
  97. package/dist/runtime/components/{LibSimpleInput/LibSimpleInput.vue → WSimpleInput/WSimpleInput.vue} +14 -24
  98. package/dist/runtime/components/WSimpleInput/WSimpleInput.vue.d.ts +34 -0
  99. package/dist/runtime/components/WTable/WTable.d.vue.ts +102 -0
  100. package/dist/runtime/components/WTable/WTable.vue +370 -0
  101. package/dist/runtime/components/WTable/WTable.vue.d.ts +102 -0
  102. package/dist/runtime/components/WTooltip/WTooltip.d.vue.ts +40 -0
  103. package/dist/runtime/components/WTooltip/WTooltip.vue +112 -0
  104. package/dist/runtime/components/WTooltip/WTooltip.vue.d.ts +40 -0
  105. package/dist/runtime/components/index.d.ts +20 -20
  106. package/dist/runtime/components/index.js +20 -20
  107. package/dist/runtime/composables/index.d.ts +4 -4
  108. package/dist/runtime/composables/index.js +4 -4
  109. package/dist/runtime/composables/useDelayedLoadingIndicator.d.ts +9 -0
  110. package/dist/runtime/composables/useDelayedLoadingIndicator.js +18 -0
  111. package/dist/runtime/composables/useDisplayForReka.d.ts +25 -0
  112. package/dist/runtime/composables/useDisplayForReka.js +16 -0
  113. package/dist/runtime/composables/useFallbackId.d.ts +3 -0
  114. package/dist/runtime/composables/useFallbackId.js +5 -0
  115. package/dist/runtime/composables/useInjectedDarkMode.d.ts +1 -1
  116. package/dist/runtime/composables/usePopupConstrainToStyle.d.ts +8 -0
  117. package/dist/runtime/composables/usePopupConstrainToStyle.js +8 -0
  118. package/dist/runtime/composables/useSetupDarkMode.d.ts +2 -3
  119. package/dist/runtime/composables/useSetupDarkMode.js +90 -4
  120. package/dist/runtime/composables/useTimeConditionally.d.ts +16 -0
  121. package/dist/runtime/composables/useTimeConditionally.js +27 -0
  122. package/dist/runtime/directives/vResizableCols.js +101 -34
  123. package/dist/runtime/helpers/NotificationHandler.d.ts +28 -3
  124. package/dist/runtime/helpers/NotificationHandler.js +7 -10
  125. package/dist/runtime/injectionKeys.d.ts +1 -5
  126. package/dist/runtime/injectionKeys.js +0 -2
  127. package/dist/runtime/types/index.d.ts +97 -31
  128. package/dist/runtime/types/index.js +1 -0
  129. package/dist/runtime/utils/notifyIfError.d.ts +3 -1
  130. package/dist/runtime/utils/notifyIfError.js +4 -2
  131. package/dist/runtime/utils/twMerge.d.ts +1 -0
  132. package/dist/runtime/utils/twMerge.js +2 -1
  133. package/package.json +59 -56
  134. package/src/module.ts +16 -8
  135. package/src/runtime/assets/animations.css +53 -6
  136. package/src/runtime/assets/locales/en.json +2 -0
  137. package/src/runtime/assets/tailwind.css +1 -1
  138. package/src/runtime/assets/utils.css +52 -4
  139. package/src/runtime/build/WitchcraftUiResolver.ts +1 -2
  140. package/src/runtime/components/TestControls/TestControls.vue +3 -3
  141. package/src/runtime/components/WButton/WButton.stories.ts +112 -0
  142. package/src/runtime/components/{LibButton/LibButton.vue → WButton/WButton.vue} +34 -50
  143. package/src/runtime/components/{LibCheckbox/LibCheckbox.stories.ts → WCheckbox/WCheckbox.stories.ts} +5 -5
  144. package/src/runtime/components/WCheckbox/WCheckbox.vue +125 -0
  145. package/src/runtime/components/{LibColorInput/LibColorInput.stories.ts → WColorInput/WColorInput.stories.ts} +8 -8
  146. package/src/runtime/components/WColorInput/WColorInput.vue +112 -0
  147. package/src/runtime/components/WColorInput/WColorSwatchButton.vue +102 -0
  148. package/src/runtime/components/{LibColorPicker/LibColorPicker.stories.ts → WColorPicker/WColorPicker.stories.ts} +12 -12
  149. package/src/runtime/components/{LibColorPicker/LibColorPicker.vue → WColorPicker/WColorPicker.vue} +44 -31
  150. package/src/runtime/components/WCombobox/WCombobox.stories.ts +209 -0
  151. package/src/runtime/components/WCombobox/WCombobox.vue +450 -0
  152. package/src/runtime/components/WCombobox/storyPlays.ts +92 -0
  153. package/src/runtime/components/{LibDarkModeSwitcher/LibDarkModeSwitcher.stories.ts → WDarkModeSwitcher/WDarkModeSwitcher.stories.ts} +6 -6
  154. package/src/runtime/components/{LibDarkModeSwitcher/LibDarkModeSwitcher.vue → WDarkModeSwitcher/WDarkModeSwitcher.vue} +19 -30
  155. package/src/runtime/components/{LibDatePicker/LibDatePicker.stories.ts → WDatePicker/WDatePicker.stories.ts} +42 -34
  156. package/src/runtime/components/{LibDatePicker/LibDatePicker.vue → WDatePicker/WDatePicker.vue} +3 -7
  157. package/src/runtime/components/{LibDatePicker/LibRangeDatePicker.vue → WDatePicker/WRangeDatePicker.vue} +29 -25
  158. package/src/runtime/components/{LibDatePicker/LibSingleDatePicker.vue → WDatePicker/WSingleDatePicker.vue} +21 -21
  159. package/src/runtime/components/{LibDatePicker/LibTimeZonePicker.vue → WDatePicker/WTimeZonePicker.vue} +5 -12
  160. package/src/runtime/components/{LibDebug/LibDebug.stories.ts → WDebug/WDebug.stories.ts} +5 -5
  161. package/src/runtime/components/{LibDebug/LibDebug.vue → WDebug/WDebug.vue} +9 -10
  162. package/src/runtime/components/{LibDevOnly/LibDevOnly.vue → WDevOnly/WDevOnly.vue} +0 -4
  163. package/src/runtime/components/{LibFileInput/LibFileInput.stories.ts → WFileInput/WFileInput.stories.ts} +20 -10
  164. package/src/runtime/components/WFileInput/WFileInput.vue +392 -0
  165. package/src/runtime/components/{Icon/Icon.vue → WIcon/WIcon.vue} +5 -8
  166. package/src/runtime/components/{LibMultiValues/LibMultiValues.stories.ts → WMultiValues/WMultiValues.stories.ts} +9 -9
  167. package/src/runtime/components/WMultiValues/WMultiValues.vue +163 -0
  168. package/src/runtime/components/{LibNotifications/LibNotification.stories.ts → WNotifications/WNotification.stories.ts} +42 -6
  169. package/src/runtime/components/{LibNotifications/LibNotification.vue → WNotifications/WNotification.vue} +72 -45
  170. package/src/runtime/components/WNotifications/WNotificationTestMessageComponent.vue +27 -0
  171. package/src/runtime/components/WNotifications/WNotifications.stories.ts +139 -0
  172. package/src/runtime/components/{LibNotifications/LibNotifications.vue → WNotifications/WNotifications.vue} +87 -47
  173. package/src/runtime/components/WNotifications/calculateNotificationProgress.ts +8 -0
  174. package/src/runtime/components/WNumberInput/WNumberInput.vue +109 -0
  175. package/src/runtime/components/WPagination/WPagination.stories.ts +51 -0
  176. package/src/runtime/components/WPagination/WPagination.vue +207 -0
  177. package/src/runtime/components/{LibPalette/LibPalette.stories.ts → WPalette/WPalette.stories.ts} +6 -6
  178. package/src/runtime/components/{LibPalette/LibPalette.vue → WPalette/WPalette.vue} +3 -8
  179. package/src/runtime/components/WPopover/WPopover.stories.ts +218 -0
  180. package/src/runtime/components/WPopover/WPopover.vue +168 -0
  181. package/src/runtime/components/WPopup/WPopup.stories.ts +104 -0
  182. package/src/runtime/components/WPopup/WPopup.vue +134 -0
  183. package/src/runtime/components/WProgressBar/WProgressBar.stories.ts +119 -0
  184. package/src/runtime/components/WProgressBar/WProgressBar.vue +185 -0
  185. package/src/runtime/components/{LibRecorder/LibRecorder.stories.ts → WRecorder/WRecorder.stories.ts} +9 -6
  186. package/src/runtime/components/{LibRecorder/LibRecorder.vue → WRecorder/WRecorder.vue} +69 -68
  187. package/src/runtime/components/{LibRoot/LibRoot.vue → WRoot/WRoot.vue} +18 -15
  188. package/src/runtime/components/{LibSimpleInput/LibSimpleInput.stories.ts → WSimpleInput/WSimpleInput.stories.ts} +11 -12
  189. package/src/runtime/components/{LibSimpleInput/LibSimpleInput.vue → WSimpleInput/WSimpleInput.vue} +28 -42
  190. package/src/runtime/components/WTable/WTable.stories.ts +334 -0
  191. package/src/runtime/components/WTable/WTable.vue +471 -0
  192. package/src/runtime/components/WTooltip/WTooltip.stories.ts +82 -0
  193. package/src/runtime/components/WTooltip/WTooltip.vue +128 -0
  194. package/src/runtime/components/index.ts +20 -20
  195. package/src/runtime/composables/index.ts +4 -4
  196. package/src/runtime/composables/useDelayedLoadingIndicator.ts +30 -0
  197. package/src/runtime/composables/useDisplayForReka.ts +37 -0
  198. package/src/runtime/composables/useFallbackId.ts +6 -0
  199. package/src/runtime/composables/useInjectedDarkMode.ts +1 -2
  200. package/src/runtime/composables/usePopupConstrainToStyle.ts +29 -0
  201. package/src/runtime/composables/useSetupDarkMode.ts +122 -4
  202. package/src/runtime/composables/useTimeConditionally.ts +51 -0
  203. package/src/runtime/directives/vResizableCols.ts +121 -38
  204. package/src/runtime/helpers/NotificationHandler.ts +30 -11
  205. package/src/runtime/injectionKeys.ts +1 -7
  206. package/src/runtime/types/index.ts +118 -36
  207. package/src/runtime/utils/notifyIfError.ts +6 -2
  208. package/src/runtime/utils/twMerge.ts +2 -1
  209. package/types/components.d.ts +14 -15
  210. package/dist/runtime/components/Aria/Aria.d.vue.ts +0 -5
  211. package/dist/runtime/components/Aria/Aria.vue +0 -16
  212. package/dist/runtime/components/Aria/Aria.vue.d.ts +0 -5
  213. package/dist/runtime/components/Icon/Icon.d.vue.ts +0 -21
  214. package/dist/runtime/components/Icon/Icon.vue.d.ts +0 -21
  215. package/dist/runtime/components/LibButton/LibButton.d.vue.ts +0 -36
  216. package/dist/runtime/components/LibButton/LibButton.vue.d.ts +0 -36
  217. package/dist/runtime/components/LibCheckbox/LibCheckbox.d.vue.ts +0 -42
  218. package/dist/runtime/components/LibCheckbox/LibCheckbox.vue +0 -103
  219. package/dist/runtime/components/LibCheckbox/LibCheckbox.vue.d.ts +0 -42
  220. package/dist/runtime/components/LibColorInput/LibColorInput.vue +0 -162
  221. package/dist/runtime/components/LibDatePicker/LibRangeDatePicker.d.vue.ts +0 -34
  222. package/dist/runtime/components/LibDatePicker/LibRangeDatePicker.vue.d.ts +0 -34
  223. package/dist/runtime/components/LibDatePicker/LibTimeZonePicker.d.vue.ts +0 -22
  224. package/dist/runtime/components/LibDatePicker/LibTimeZonePicker.vue.d.ts +0 -22
  225. package/dist/runtime/components/LibFileInput/LibFileInput.d.vue.ts +0 -43
  226. package/dist/runtime/components/LibFileInput/LibFileInput.vue +0 -274
  227. package/dist/runtime/components/LibFileInput/LibFileInput.vue.d.ts +0 -43
  228. package/dist/runtime/components/LibInputDeprecated/LibInputDeprecated.d.vue.ts +0 -165
  229. package/dist/runtime/components/LibInputDeprecated/LibInputDeprecated.vue +0 -387
  230. package/dist/runtime/components/LibInputDeprecated/LibInputDeprecated.vue.d.ts +0 -165
  231. package/dist/runtime/components/LibLabel/LibLabel.d.vue.ts +0 -26
  232. package/dist/runtime/components/LibLabel/LibLabel.vue +0 -45
  233. package/dist/runtime/components/LibLabel/LibLabel.vue.d.ts +0 -26
  234. package/dist/runtime/components/LibMultiValues/LibMultiValues.d.vue.ts +0 -29
  235. package/dist/runtime/components/LibMultiValues/LibMultiValues.vue +0 -109
  236. package/dist/runtime/components/LibMultiValues/LibMultiValues.vue.d.ts +0 -29
  237. package/dist/runtime/components/LibNotifications/LibNotification.d.vue.ts +0 -30
  238. package/dist/runtime/components/LibNotifications/LibNotification.vue.d.ts +0 -30
  239. package/dist/runtime/components/LibNotifications/LibNotifications.d.vue.ts +0 -13
  240. package/dist/runtime/components/LibNotifications/LibNotifications.vue.d.ts +0 -13
  241. package/dist/runtime/components/LibPagination/LibPagination.d.vue.ts +0 -104
  242. package/dist/runtime/components/LibPagination/LibPagination.vue +0 -229
  243. package/dist/runtime/components/LibPagination/LibPagination.vue.d.ts +0 -104
  244. package/dist/runtime/components/LibPalette/LibPalette.d.vue.ts +0 -14
  245. package/dist/runtime/components/LibPalette/LibPalette.vue.d.ts +0 -14
  246. package/dist/runtime/components/LibPopup/LibPopup.d.vue.ts +0 -46
  247. package/dist/runtime/components/LibPopup/LibPopup.vue +0 -365
  248. package/dist/runtime/components/LibPopup/LibPopup.vue.d.ts +0 -46
  249. package/dist/runtime/components/LibProgressBar/LibProgressBar.vue +0 -169
  250. package/dist/runtime/components/LibSimpleInput/LibSimpleInput.d.vue.ts +0 -35
  251. package/dist/runtime/components/LibSimpleInput/LibSimpleInput.vue.d.ts +0 -35
  252. package/dist/runtime/components/LibSuggestions/LibSuggestions.d.vue.ts +0 -94
  253. package/dist/runtime/components/LibSuggestions/LibSuggestions.vue +0 -178
  254. package/dist/runtime/components/LibSuggestions/LibSuggestions.vue.d.ts +0 -94
  255. package/dist/runtime/components/LibTable/LibTable.d.vue.ts +0 -45
  256. package/dist/runtime/components/LibTable/LibTable.vue +0 -155
  257. package/dist/runtime/components/LibTable/LibTable.vue.d.ts +0 -45
  258. package/dist/runtime/components/Template/NAME.d.vue.ts +0 -17
  259. package/dist/runtime/components/Template/NAME.vue +0 -27
  260. package/dist/runtime/components/Template/NAME.vue.d.ts +0 -17
  261. package/dist/runtime/components/Template/TemplateStory.d.ts +0 -7
  262. package/dist/runtime/components/Template/TemplateStory.js +0 -22
  263. package/dist/runtime/components/shared/props.d.ts +0 -171
  264. package/dist/runtime/components/shared/props.js +0 -2
  265. package/dist/runtime/composables/useAriaLabel.d.ts +0 -6
  266. package/dist/runtime/composables/useAriaLabel.js +0 -15
  267. package/dist/runtime/composables/useDarkMode.d.ts +0 -77
  268. package/dist/runtime/composables/useDarkMode.js +0 -89
  269. package/dist/runtime/composables/useDivideAttrs.d.ts +0 -27
  270. package/dist/runtime/composables/useDivideAttrs.js +0 -27
  271. package/dist/runtime/composables/useSuggestions.d.ts +0 -40
  272. package/dist/runtime/composables/useSuggestions.js +0 -263
  273. package/src/runtime/components/Aria/Aria.vue +0 -26
  274. package/src/runtime/components/LibButton/LibButton.stories.ts +0 -106
  275. package/src/runtime/components/LibCheckbox/LibCheckbox.vue +0 -129
  276. package/src/runtime/components/LibColorInput/LibColorInput.vue +0 -203
  277. package/src/runtime/components/LibFileInput/LibFileInput.vue +0 -320
  278. package/src/runtime/components/LibInputDeprecated/LibInputDeprecated.stories.ts +0 -405
  279. package/src/runtime/components/LibInputDeprecated/LibInputDeprecated.vue +0 -414
  280. package/src/runtime/components/LibLabel/LibLabel.stories.ts +0 -33
  281. package/src/runtime/components/LibLabel/LibLabel.vue +0 -65
  282. package/src/runtime/components/LibMultiValues/LibMultiValues.vue +0 -123
  283. package/src/runtime/components/LibNotifications/LibNotifications.stories.ts +0 -120
  284. package/src/runtime/components/LibPagination/LibPagination.stories.ts +0 -49
  285. package/src/runtime/components/LibPagination/LibPagination.vue +0 -274
  286. package/src/runtime/components/LibPopup/LibPopup.stories.ts +0 -153
  287. package/src/runtime/components/LibPopup/LibPopup.vue +0 -396
  288. package/src/runtime/components/LibProgressBar/LibProgressBar.stories.ts +0 -90
  289. package/src/runtime/components/LibProgressBar/LibProgressBar.vue +0 -197
  290. package/src/runtime/components/LibSuggestions/LibSuggestions.stories.ts +0 -134
  291. package/src/runtime/components/LibSuggestions/LibSuggestions.vue +0 -212
  292. package/src/runtime/components/LibTable/LibTable.stories.ts +0 -167
  293. package/src/runtime/components/LibTable/LibTable.vue +0 -190
  294. package/src/runtime/components/Template/NAME.vue +0 -49
  295. package/src/runtime/components/Template/TemplateStory.ts +0 -37
  296. package/src/runtime/components/shared/props.ts +0 -199
  297. package/src/runtime/composables/useAriaLabel.ts +0 -23
  298. package/src/runtime/composables/useDarkMode.ts +0 -199
  299. package/src/runtime/composables/useDivideAttrs.ts +0 -53
  300. package/src/runtime/composables/useSuggestions.ts +0 -339
  301. /package/dist/runtime/components/{LibColorPicker → WColorPicker}/utils/safeConvertToHsva.d.ts +0 -0
  302. /package/dist/runtime/components/{LibColorPicker → WColorPicker}/utils/safeConvertToHsva.js +0 -0
  303. /package/dist/runtime/components/{LibColorPicker → WColorPicker}/utils/safeConvertToRgba.d.ts +0 -0
  304. /package/dist/runtime/components/{LibColorPicker → WColorPicker}/utils/safeConvertToRgba.js +0 -0
  305. /package/dist/runtime/components/{LibColorPicker → WColorPicker}/utils/toLowPrecisionRgbaString.d.ts +0 -0
  306. /package/dist/runtime/components/{LibColorPicker → WColorPicker}/utils/toLowPrecisionRgbaString.js +0 -0
  307. /package/dist/runtime/components/{LibColorPicker → WColorPicker}/utils/truncate.d.ts +0 -0
  308. /package/dist/runtime/components/{LibColorPicker → WColorPicker}/utils/truncate.js +0 -0
  309. /package/dist/runtime/components/{LibDatePicker → WDatePicker}/helpers.d.ts +0 -0
  310. /package/dist/runtime/components/{LibDatePicker → WDatePicker}/helpers.js +0 -0
  311. /package/dist/runtime/components/{LibDevOnly/LibDevOnly.vue → WDevOnly/WDevOnly.vue} +0 -0
  312. /package/src/runtime/components/{LibColorPicker → WColorPicker}/utils/safeConvertToHsva.ts +0 -0
  313. /package/src/runtime/components/{LibColorPicker → WColorPicker}/utils/safeConvertToRgba.ts +0 -0
  314. /package/src/runtime/components/{LibColorPicker → WColorPicker}/utils/toLowPrecisionRgbaString.ts +0 -0
  315. /package/src/runtime/components/{LibColorPicker → WColorPicker}/utils/truncate.ts +0 -0
  316. /package/src/runtime/components/{LibDatePicker → WDatePicker}/helpers.ts +0 -0
@@ -0,0 +1,348 @@
1
+ <template>
2
+ <div
3
+ :class="twMerge(
4
+ `
5
+ file-input
6
+ justify-center
7
+ border-2
8
+ border-dashed
9
+ border-accent-500/80
10
+ focus-outline-within
11
+ transition-[border-color,box-shadow]
12
+ ease-out
13
+ hover:bg-accent-500/10
14
+ outlined-focus-within
15
+ `,
16
+ compact && `rounded-sm`,
17
+ !compact && `
18
+ flex
19
+ w-full
20
+ flex-col
21
+ items-stretch
22
+ gap-2
23
+ rounded-xl
24
+ p-2
25
+ `,
26
+ isHovered && `bg-accent-500/10`,
27
+ errors.length > 0 && isErrored && `errored border-red-400 hover:border-red-500`,
28
+ wrapperAttrs?.class
29
+ )"
30
+ v-bind="{ ...wrapperAttrs, class: void 0 }"
31
+ @drop="onDrop"
32
+ @dragover.prevent="isHovered = true"
33
+ @dragleave="isHovered = false"
34
+ >
35
+ <div
36
+ :class="twMerge(
37
+ `
38
+ file-input--wrapper
39
+ relative
40
+ justify-center
41
+ @container
42
+ `,
43
+ compact && `flex gap-2`,
44
+ !compact && `
45
+ file-input
46
+ flex
47
+ flex-col
48
+ items-center
49
+ `
50
+ )"
51
+ >
52
+ <label
53
+ :for="finalId"
54
+ :class="twMerge(`
55
+ file-input--label
56
+ pointer-events-none
57
+ flex
58
+ gap-1
59
+ items-center
60
+ justify-center
61
+ whitespace-nowrap
62
+ max-w-full
63
+ `)"
64
+ >
65
+ <slot
66
+ v-if="compact || multiple || files.length === 0"
67
+ name="icon"
68
+ >
69
+ <WIcon><i-lucide-upload/></WIcon>
70
+ </slot>
71
+ <slot name="label">
72
+ <div class="text-ellipsis overflow-hidden shrink-1 hidden @min-[15ch]:block">
73
+ {{
74
+ compact ? multiple ? t("file-input.compact-choose-file-plural") : t("file-input.compact-choose-file") : multiple ? t("file-input.non-compact-choose-file-plural") : t("file-input.non-compact-choose-file")
75
+ }}
76
+ </div>
77
+ </slot>
78
+ <div
79
+ v-if="compact && multiple"
80
+ class="file-input--label-count"
81
+ >
82
+ {{ ` (${files.length})` }}
83
+ </div>
84
+ <div
85
+ v-if="compact && !multiple && files.length > 0"
86
+ class="file-input--label-name text-ellipsis overflow-hidden shrink-9999 hidden @3xs:block"
87
+ >
88
+ {{ ` (${files[0]?.file.name})` }}
89
+ </div>
90
+ <div
91
+ v-if="compact && !multiple && files.length > 0"
92
+ class="file-input--label-name text-ellipsis overflow-hidden shrink-9999 @3xs:hidden"
93
+ >
94
+ {{ ` (...)` }}
95
+ </div>
96
+ </label>
97
+ <label
98
+ v-if="!compact && formats?.length > 0"
99
+ class="file-input--formats-label flex-col items-center text-sm max-w-full hidden @min-[15ch]:flex"
100
+ >
101
+ <slot name="formats"><div class="text-ellipsis overflow-hidden max-w-full">{{ t("file-input.accepted-formats") }}:</div> </slot>
102
+ <div class="file-input--formats-list overflow-hidden text-ellipsis max-w-full">
103
+ {{ extensions.join(", ") }}
104
+ </div>
105
+ </label>
106
+ <input
107
+ :id="finalId"
108
+ :class="twMerge(
109
+ `
110
+ file-input--input
111
+ absolute
112
+ inset-[calc(var(--spacing)*-2)]
113
+ cursor-pointer
114
+ z-0
115
+ text-[0]
116
+ opacity-0
117
+ `,
118
+ inputAttrs?.class
119
+ )"
120
+ type="file"
121
+ :accept="formats.join(', ')"
122
+ :multiple="multiple"
123
+ v-bind="{ ...inputAttrs, class: void 0 }"
124
+ :aria-invalid="errors.length > 0"
125
+ :aria-errormessage="errors.map((_) => _.message).join(', ')"
126
+ ref="el"
127
+ @input="inputFile"
128
+ @click="$event.target.value = null"
129
+ >
130
+ <!-- click event allows event to fire even if the user picks the same file -->
131
+ </div>
132
+ <div
133
+ v-if="!compact && files.length > 0"
134
+ :class="twMerge(
135
+ `file-input--previews
136
+ flex items-stretch justify-center gap-4 flex-wrap
137
+ `,
138
+ multiple && `
139
+ w-full
140
+ `
141
+ )"
142
+ >
143
+ <div
144
+ class="
145
+ file-input--preview-wrapper
146
+ z-1
147
+ relative
148
+ flex
149
+ min-w-0
150
+ max-w-[150px]
151
+ flex-initial
152
+ flex-col
153
+ items-center
154
+ gap-1
155
+ p-1
156
+ rounded-sm
157
+ border
158
+ border-neutral-300
159
+ dark:border-neutral-800
160
+ shadow-md
161
+ shadow-neutral-800/30
162
+ bg-neutral-100
163
+ dark:bg-neutral-900
164
+ [&:hover_.file-input--remove-button]:opacity-100
165
+ "
166
+ v-for="entry of files"
167
+ :key="entry.file.name"
168
+ >
169
+ <div class="flex flex-initial basis-full justify-start items-center max-w-full gap-2 px-1">
170
+ <WButton
171
+ :border="false"
172
+ class="file-input--remove-button rounded-full p-0"
173
+ :aria-label="`Remove file ${entry.file.name}`"
174
+ @click="removeFile(entry)"
175
+ >
176
+ <WIcon><i-lucide-x/></WIcon>
177
+ </Wbutton>
178
+ <div
179
+ class="file-input--preview-filename min-w-0 flex-1 basis-0 truncate break-all rounded-sm text-sm"
180
+ :title="entry.file.name"
181
+ >
182
+ {{ entry.file.name }}
183
+ </div>
184
+ </div>
185
+
186
+ <div class="file-input--preview flex flex-initial basis-full justify-center">
187
+ <div
188
+ v-if="entry.isImg"
189
+ class="file-input--preview-image
190
+ bg-transparency-squares flex
191
+ h-[80px] flex-wrap items-center
192
+ justify-center
193
+ "
194
+ >
195
+ <img
196
+ class="max-h-full w-auto"
197
+ :src="entry.previewUrl"
198
+ >
199
+ </div>
200
+ <div
201
+ v-if="!entry.isImg"
202
+ class="file-input--preview-no-image
203
+ flex h-[80px]
204
+ flex-1 basis-full flex-wrap items-center justify-center
205
+ "
206
+ >
207
+ <WIcon><i-lucide-file class="text-4xl opacity-50"/></WIcon>
208
+ </div>
209
+ </div>
210
+ </div>
211
+ </div>
212
+ <div
213
+ v-if="!compact && errors.length > 0"
214
+ class="file-input--errors flex flex-col gap-2 text-sm text-red-600 dark:text-red-400 items-center px-2"
215
+ >
216
+ <div
217
+ class="file-input--error text-center"
218
+ v-for="error of errors"
219
+ :key="error.message"
220
+ >
221
+ {{ error.message }}
222
+ </div>
223
+ </div>
224
+ </div>
225
+ </template>
226
+
227
+ <script setup>
228
+ import { computed, onBeforeUnmount, ref, shallowReactive, watch } from "vue";
229
+ import ILucideFile from "~icons/lucide/file";
230
+ import ILucideUpload from "~icons/lucide/upload";
231
+ import ILucideX from "~icons/lucide/x";
232
+ import { useFallbackId } from "../../composables/useFallbackId.js";
233
+ import { useInjectedI18n } from "../../composables/useInjectedI18n.js";
234
+ import { twMerge } from "../../utils/twMerge.js";
235
+ import WButton from "../WButton/WButton.vue";
236
+ import WIcon from "../WIcon/WIcon.vue";
237
+ const t = useInjectedI18n();
238
+ const el = ref(null);
239
+ const props = defineProps({
240
+ id: { type: String, required: false },
241
+ multiple: { type: Boolean, required: false, default: false },
242
+ formats: { type: Array, required: false, default: () => ["image/*", ".jpeg", ".jpg", ".png"] },
243
+ compact: { type: Boolean, required: false, default: false },
244
+ inputAttrs: { type: Object, required: false },
245
+ wrapperAttrs: { type: Object, required: false }
246
+ });
247
+ const finalId = useFallbackId(props);
248
+ const emits = defineEmits(["input", "errors"]);
249
+ const files = shallowReactive([]);
250
+ const errors = shallowReactive([]);
251
+ const isErrored = ref(false);
252
+ const isHovered = ref(false);
253
+ function clearFiles() {
254
+ if (el.value) {
255
+ el.value.value = "";
256
+ }
257
+ for (const entry of files) {
258
+ if (entry.previewUrl) URL.revokeObjectURL(entry.previewUrl);
259
+ }
260
+ files.splice(0, files.length);
261
+ }
262
+ watch(files, () => {
263
+ emits("input", files.map((entry) => entry.file), clearFiles);
264
+ });
265
+ watch(errors, () => {
266
+ if (errors.length > 0) {
267
+ isErrored.value = true;
268
+ emits("errors", [...errors], clearErrors);
269
+ }
270
+ });
271
+ function clearErrors() {
272
+ isErrored.value = false;
273
+ errors.splice(0, errors.length);
274
+ }
275
+ defineOptions({
276
+ name: "WFileInput",
277
+ inheritAttrs: false
278
+ });
279
+ const mimeTypes = computed(() => props.formats?.filter((_) => !_.startsWith(".")) ?? []);
280
+ const extensions = computed(() => props.formats?.filter((_) => _.startsWith(".")) ?? []);
281
+ onBeforeUnmount(() => {
282
+ for (const entry of files) {
283
+ if (entry.previewUrl) URL.revokeObjectURL(entry.previewUrl);
284
+ }
285
+ });
286
+ function removeFile(entry) {
287
+ if (entry.previewUrl) URL.revokeObjectURL(entry.previewUrl);
288
+ const index = files.indexOf(entry);
289
+ if (index > -1) files.splice(index, 1);
290
+ }
291
+ const extensionsList = computed(() => extensions.value.join(", "));
292
+ function onDrop(e) {
293
+ if ("dataTransfer" in e && e.dataTransfer && e.dataTransfer.files && e.dataTransfer.files.length > 0) {
294
+ el.value.files = e.dataTransfer.files;
295
+ e.preventDefault();
296
+ isHovered.value = false;
297
+ return updateFiles(el.value.files);
298
+ }
299
+ return void 0;
300
+ }
301
+ async function inputFile(e) {
302
+ e.preventDefault();
303
+ if (el.value.files) {
304
+ return updateFiles(el.value.files);
305
+ }
306
+ return void 0;
307
+ }
308
+ function updateFiles(filesList) {
309
+ const errs = [];
310
+ for (const file of filesList) {
311
+ const isImg = file.type.startsWith("image");
312
+ const byPassValidation = props.formats.length === 0;
313
+ const isValidMimeType = mimeTypes.value.find((_) => _.endsWith("/*") ? file.type.startsWith(_.slice(0, -2)) : _ === file.type) !== void 0;
314
+ const isValidExtension = extensions.value.find((_) => file.name.endsWith(_)) !== void 0;
315
+ if (!byPassValidation && (!isValidMimeType || !isValidExtension)) {
316
+ const extension = file.name.match(/.*(\..*)/)?.[1] ?? "Unknown";
317
+ const type = file.type === "" ? "" : ` (${file.type})`;
318
+ const message = `File type ${extension}${type} is not allowed. Allowed file types are: ${extensionsList.value}.`;
319
+ const err = new Error(message);
320
+ err.file = file;
321
+ err.isValidExtension = isValidExtension;
322
+ err.isValidMimeType = isValidMimeType;
323
+ errs.push(err);
324
+ continue;
325
+ }
326
+ const previewUrl = isImg ? URL.createObjectURL(file) : void 0;
327
+ if (errs.length > 0) continue;
328
+ if (!files.find((_) => _.file === file)) {
329
+ if (props.multiple || files.length < 1) {
330
+ files.push({ file, isImg, previewUrl });
331
+ } else {
332
+ files.splice(0, files.length, { file, isImg, previewUrl });
333
+ }
334
+ }
335
+ }
336
+ if (errs.length > 0) {
337
+ errors.splice(0, errors.length, ...errs);
338
+ return false;
339
+ } else if (errors.length > 0) {
340
+ clearErrors();
341
+ }
342
+ return void 0;
343
+ }
344
+ defineExpose({
345
+ clearFiles,
346
+ clearErrors
347
+ });
348
+ </script>
@@ -0,0 +1,58 @@
1
+ import type { HTMLAttributes, InputHTMLAttributes } from "vue";
2
+ import type { FileInputError, TailwindClassProp } from "../../types/index.js";
3
+ declare function clearFiles(): void;
4
+ declare function clearErrors(): void;
5
+ declare var __VLS_1: {}, __VLS_14: {}, __VLS_16: {};
6
+ type __VLS_Slots = {} & {
7
+ icon?: (props: typeof __VLS_1) => any;
8
+ } & {
9
+ label?: (props: typeof __VLS_14) => any;
10
+ } & {
11
+ formats?: (props: typeof __VLS_16) => any;
12
+ };
13
+ declare const __VLS_base: import("vue").DefineComponent<{
14
+ id?: string;
15
+ multiple?: boolean;
16
+ /**
17
+ * A list of extensions or mime types to add to the input's accept. Basic validations are done so that files match an extension and mimeType, but note that a file could still be lying, all files should be validated server side.
18
+ *
19
+ * Pass an empty array to allow any filetype.
20
+ */
21
+ formats?: string[];
22
+ compact?: boolean;
23
+ inputAttrs?: Omit<InputHTMLAttributes, "class"> & TailwindClassProp;
24
+ wrapperAttrs?: Omit<HTMLAttributes, "class"> & TailwindClassProp;
25
+ }, {
26
+ clearFiles: typeof clearFiles;
27
+ clearErrors: typeof clearErrors;
28
+ }, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {} & {
29
+ input: (val: File[], clearFiles: () => void) => any;
30
+ errors: (val: FileInputError[], clearErrors: () => void) => any;
31
+ }, string, import("vue").PublicProps, Readonly<{
32
+ id?: string;
33
+ multiple?: boolean;
34
+ /**
35
+ * A list of extensions or mime types to add to the input's accept. Basic validations are done so that files match an extension and mimeType, but note that a file could still be lying, all files should be validated server side.
36
+ *
37
+ * Pass an empty array to allow any filetype.
38
+ */
39
+ formats?: string[];
40
+ compact?: boolean;
41
+ inputAttrs?: Omit<InputHTMLAttributes, "class"> & TailwindClassProp;
42
+ wrapperAttrs?: Omit<HTMLAttributes, "class"> & TailwindClassProp;
43
+ }> & Readonly<{
44
+ onInput?: ((val: File[], clearFiles: () => void) => any) | undefined;
45
+ onErrors?: ((val: FileInputError[], clearErrors: () => void) => any) | undefined;
46
+ }>, {
47
+ multiple: boolean;
48
+ compact: boolean;
49
+ formats: string[];
50
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
51
+ declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
52
+ declare const _default: typeof __VLS_export;
53
+ export default _default;
54
+ type __VLS_WithSlots<T, S> = T & {
55
+ new (): {
56
+ $slots: S;
57
+ };
58
+ };
@@ -0,0 +1,18 @@
1
+ import { type HTMLAttributes } from "vue";
2
+ /**
3
+ * Just a very simple wrapper for wrapping unplugin-icons in an inline-block div so the icon in the slot take's up a normal line height when it's alone.
4
+ *
5
+ * ```vue
6
+ * <WIcon><i-...></WIcon>
7
+ * ``
8
+ */
9
+ declare const _default: typeof __VLS_export;
10
+ export default _default;
11
+ declare const __VLS_export: __VLS_WithSlots<import("vue").DefineComponent<Omit<HTMLAttributes, "class">, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<Omit<HTMLAttributes, "class">> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>, {
12
+ default?: (props: {}) => any;
13
+ }>;
14
+ type __VLS_WithSlots<T, S> = T & {
15
+ new (): {
16
+ $slots: S;
17
+ };
18
+ };
@@ -19,5 +19,5 @@ defineProps({});
19
19
  </script>
20
20
 
21
21
  <script>
22
-
22
+ export default { name: "Icon" };
23
23
  </script>
@@ -0,0 +1,18 @@
1
+ import { type HTMLAttributes } from "vue";
2
+ /**
3
+ * Just a very simple wrapper for wrapping unplugin-icons in an inline-block div so the icon in the slot take's up a normal line height when it's alone.
4
+ *
5
+ * ```vue
6
+ * <WIcon><i-...></WIcon>
7
+ * ``
8
+ */
9
+ declare const _default: typeof __VLS_export;
10
+ export default _default;
11
+ declare const __VLS_export: __VLS_WithSlots<import("vue").DefineComponent<Omit<HTMLAttributes, "class">, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<Omit<HTMLAttributes, "class">> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>, {
12
+ default?: (props: {}) => any;
13
+ }>;
14
+ type __VLS_WithSlots<T, S> = T & {
15
+ new (): {
16
+ $slots: S;
17
+ };
18
+ };
@@ -0,0 +1,28 @@
1
+ import { type HTMLAttributes } from "vue";
2
+ import type { BaseInteractiveProps, TailwindClassProp } from "../../types/index.js";
3
+ declare const __VLS_export: <T extends string | number>(__VLS_props: NonNullable<Awaited<typeof __VLS_setup>>["props"], __VLS_ctx?: __VLS_PrettifyLocal<Pick<NonNullable<Awaited<typeof __VLS_setup>>, "attrs" | "emit" | "slots">>, __VLS_exposed?: NonNullable<Awaited<typeof __VLS_setup>>["expose"], __VLS_setup?: Promise<{
4
+ props: import("vue").PublicProps & __VLS_PrettifyLocal<(BaseInteractiveProps & {
5
+ label?: string;
6
+ border?: boolean;
7
+ itemAttrs?: Omit<HTMLAttributes, "class"> & TailwindClassProp;
8
+ } & Omit<HTMLAttributes, "class"> & TailwindClassProp & {
9
+ modelValue?: T[];
10
+ }) & {
11
+ "onUpdate:modelValue"?: ((value: T[]) => any) | undefined;
12
+ }> & (typeof globalThis extends {
13
+ __VLS_PROPS_FALLBACK: infer P;
14
+ } ? P : {});
15
+ expose: (exposed: {}) => void;
16
+ attrs: any;
17
+ slots: {};
18
+ emit: (event: "update:modelValue", value: T[]) => void;
19
+ }>) => import("vue").VNode & {
20
+ __ctx?: Awaited<typeof __VLS_setup>;
21
+ };
22
+ declare const _default: typeof __VLS_export;
23
+ export default _default;
24
+ type __VLS_PrettifyLocal<T> = (T extends any ? {
25
+ [K in keyof T]: T[K];
26
+ } : {
27
+ [K in keyof T as K]: T[K];
28
+ }) & {};
@@ -0,0 +1,150 @@
1
+ <template>
2
+ <div
3
+ v-if="$modelValue && $modelValue?.length > 0"
4
+ role="list"
5
+ :class="
6
+ twMerge(
7
+ `
8
+ multivalues
9
+ group
10
+ flex
11
+ flex-initial
12
+ items-center
13
+ justify-center
14
+ gap-1
15
+ overflow-x-scroll
16
+ scrollbar-hidden
17
+ `,
18
+ $attrs?.class
19
+ )
20
+ "
21
+ :data-disabled="disabled"
22
+ :data-read-only="readonly"
23
+ :aria-label="label ? `Values for ${label}` : void 0"
24
+ v-bind="{ ...$attrs, class: void 0 }"
25
+ @keydown="handleKeydown"
26
+ >
27
+ <div
28
+ role="listitem"
29
+ :data-border="border"
30
+ :class="twMerge(
31
+ `
32
+ multivalues--item
33
+ flex-basis-0
34
+ min-w-2
35
+ flex
36
+ max-w-fit
37
+ flex-1
38
+ items-center
39
+ gap-0.5
40
+ overflow-hidden
41
+ px-1
42
+ text-xs
43
+ leading-none
44
+ focus-outline
45
+ outlined:outline-offset-0
46
+ `,
47
+ !(disabled || readonly) && `
48
+ group-focus:text-accent-500
49
+ focus:text-accent-500`,
50
+ border && `
51
+ rounded-sm
52
+ border-neutral-400
53
+ border
54
+ focus:border-accent-400
55
+ `,
56
+ border && (disabled || readonly) && `
57
+ border-neutral-200
58
+ focus:border-neutral-200
59
+ dark:border-neutral-800
60
+ dark:focus:border-neutral-800
61
+ `,
62
+ itemAttrs?.class
63
+ )"
64
+ :tabindex="canEdit ? activeIndex === index ? 0 : -1 : void 0"
65
+ v-for="(value, index) of $modelValue"
66
+ :key="value"
67
+ ref="itemRefs"
68
+ @keydown.ctrl.c.prevent="copy(value.toString())"
69
+ @focus="activeIndex = index"
70
+ >
71
+ <span class="multivalues--label truncate">{{ value }}</span>
72
+ <WButton
73
+ class="multivalues--remove-button !p-0 text-sm !leading-none"
74
+ :aria-label="`Remove ${value}`"
75
+ :border="false"
76
+ :disabled="disabled || readonly"
77
+ tabindex="-1"
78
+ @click="removeVal(value)"
79
+ >
80
+ <WIcon><i-lucide-x/></WIcon>
81
+ </Wbutton>
82
+ </div>
83
+ </div>
84
+ </template>
85
+
86
+ <script setup>
87
+ import { removeIfIn } from "@alanscodelog/utils/removeIfIn";
88
+ import { computed, nextTick, ref, useAttrs } from "vue";
89
+ import ILucideX from "~icons/lucide/x";
90
+ import { copy } from "../../helpers/copy.js";
91
+ import { twMerge } from "../../utils/twMerge.js";
92
+ import WButton from "../WButton/WButton.vue";
93
+ import WIcon from "../WIcon/WIcon.vue";
94
+ defineOptions({
95
+ name: "WMultiValues",
96
+ inheritAttrs: false
97
+ });
98
+ const $attrs = useAttrs();
99
+ const props = defineProps({
100
+ disabled: { type: Boolean, required: false },
101
+ readonly: { type: Boolean, required: false },
102
+ border: { type: Boolean, required: false, default: true },
103
+ unstyle: { type: Boolean, required: false },
104
+ label: { type: String, required: false },
105
+ itemAttrs: { type: Object, required: false }
106
+ });
107
+ const canEdit = computed(() => !props.disabled && !props.readonly);
108
+ const $modelValue = defineModel({ type: Array, ...{ default: () => [] } });
109
+ const itemRefs = ref([]);
110
+ const activeIndex = ref(0);
111
+ function removeVal(value) {
112
+ if (!canEdit.value) return;
113
+ removeIfIn($modelValue.value, value);
114
+ if ($modelValue.value.length > 0) {
115
+ if (activeIndex.value >= $modelValue.value.length) {
116
+ activeIndex.value = $modelValue.value.length - 1;
117
+ }
118
+ nextTick(() => {
119
+ itemRefs.value[activeIndex.value]?.focus();
120
+ });
121
+ }
122
+ }
123
+ function handleKeydown(e) {
124
+ if (props.disabled) return;
125
+ const len = $modelValue.value.length;
126
+ if (len === 0) return;
127
+ if (e.key === "ArrowRight") {
128
+ activeIndex.value = (activeIndex.value + 1) % len;
129
+ itemRefs.value[activeIndex.value]?.focus();
130
+ e.preventDefault();
131
+ } else if (e.key === "ArrowLeft") {
132
+ activeIndex.value = (activeIndex.value - 1 + len) % len;
133
+ itemRefs.value[activeIndex.value]?.focus();
134
+ e.preventDefault();
135
+ } else if (e.key === "Delete" || e.key === "Backspace") {
136
+ if (canEdit.value) {
137
+ removeVal($modelValue.value[activeIndex.value]);
138
+ e.preventDefault();
139
+ }
140
+ } else if (e.key === "Home") {
141
+ activeIndex.value = 0;
142
+ itemRefs.value[activeIndex.value]?.focus();
143
+ e.preventDefault();
144
+ } else if (e.key === "End") {
145
+ activeIndex.value = len - 1;
146
+ itemRefs.value[activeIndex.value]?.focus();
147
+ e.preventDefault();
148
+ }
149
+ }
150
+ </script>
@@ -0,0 +1,28 @@
1
+ import { type HTMLAttributes } from "vue";
2
+ import type { BaseInteractiveProps, TailwindClassProp } from "../../types/index.js";
3
+ declare const __VLS_export: <T extends string | number>(__VLS_props: NonNullable<Awaited<typeof __VLS_setup>>["props"], __VLS_ctx?: __VLS_PrettifyLocal<Pick<NonNullable<Awaited<typeof __VLS_setup>>, "attrs" | "emit" | "slots">>, __VLS_exposed?: NonNullable<Awaited<typeof __VLS_setup>>["expose"], __VLS_setup?: Promise<{
4
+ props: import("vue").PublicProps & __VLS_PrettifyLocal<(BaseInteractiveProps & {
5
+ label?: string;
6
+ border?: boolean;
7
+ itemAttrs?: Omit<HTMLAttributes, "class"> & TailwindClassProp;
8
+ } & Omit<HTMLAttributes, "class"> & TailwindClassProp & {
9
+ modelValue?: T[];
10
+ }) & {
11
+ "onUpdate:modelValue"?: ((value: T[]) => any) | undefined;
12
+ }> & (typeof globalThis extends {
13
+ __VLS_PROPS_FALLBACK: infer P;
14
+ } ? P : {});
15
+ expose: (exposed: {}) => void;
16
+ attrs: any;
17
+ slots: {};
18
+ emit: (event: "update:modelValue", value: T[]) => void;
19
+ }>) => import("vue").VNode & {
20
+ __ctx?: Awaited<typeof __VLS_setup>;
21
+ };
22
+ declare const _default: typeof __VLS_export;
23
+ export default _default;
24
+ type __VLS_PrettifyLocal<T> = (T extends any ? {
25
+ [K in keyof T]: T[K];
26
+ } : {
27
+ [K in keyof T as K]: T[K];
28
+ }) & {};
@@ -0,0 +1,37 @@
1
+ import { type HTMLAttributes } from "vue";
2
+ import { type NotificationEntry, NotificationHandler } from "../../helpers/NotificationHandler.js";
3
+ import type { TailwindClassProp } from "../../types/index.js";
4
+ type __VLS_Props = {
5
+ notification: NotificationEntry;
6
+ handler?: NotificationHandler;
7
+ } & /** @vue-ignore */ Omit<HTMLAttributes, "class"> & /** @vue-ignore */ TailwindClassProp;
8
+ declare var __VLS_1: {
9
+ notification: NotificationEntry;
10
+ }, __VLS_3: {
11
+ id: string;
12
+ title: string;
13
+ class: string;
14
+ }, __VLS_43: {
15
+ class: string;
16
+ message: string;
17
+ };
18
+ type __VLS_Slots = {} & {
19
+ top?: (props: typeof __VLS_1) => any;
20
+ } & {
21
+ title?: (props: typeof __VLS_3) => any;
22
+ } & {
23
+ message?: (props: typeof __VLS_43) => any;
24
+ };
25
+ declare const __VLS_base: import("vue").DefineComponent<__VLS_Props, {
26
+ focus: () => void;
27
+ }, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {
28
+ handler: NotificationHandler;
29
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
30
+ declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
31
+ declare const _default: typeof __VLS_export;
32
+ export default _default;
33
+ type __VLS_WithSlots<T, S> = T & {
34
+ new (): {
35
+ $slots: S;
36
+ };
37
+ };