@witchcraft/ui 0.3.25 → 0.4.0-beta.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 (288) hide show
  1. package/README.md +54 -61
  2. package/dist/module.json +1 -1
  3. package/dist/runtime/assets/animations.css +1 -1
  4. package/dist/runtime/assets/locales/en.json +2 -0
  5. package/dist/runtime/assets/utils.css +1 -1
  6. package/dist/runtime/build/WitchcraftUiResolver.js +1 -1
  7. package/dist/runtime/components/TestControls/TestControls.vue +3 -3
  8. package/dist/runtime/components/WButton/WButton.d.vue.ts +34 -0
  9. package/dist/runtime/components/{LibButton/LibButton.vue → WButton/WButton.vue} +26 -38
  10. package/dist/runtime/components/WButton/WButton.vue.d.ts +34 -0
  11. package/dist/runtime/components/WCheckbox/WCheckbox.d.vue.ts +33 -0
  12. package/dist/runtime/components/WCheckbox/WCheckbox.vue +109 -0
  13. package/dist/runtime/components/WCheckbox/WCheckbox.vue.d.ts +33 -0
  14. package/dist/runtime/components/WColorInput/WColorInput.d.vue.ts +45 -0
  15. package/dist/runtime/components/WColorInput/WColorInput.vue +85 -0
  16. package/dist/runtime/components/WColorInput/WColorInput.vue.d.ts +45 -0
  17. package/dist/runtime/components/WColorInput/WColorSwatchButton.d.vue.ts +28 -0
  18. package/dist/runtime/components/WColorInput/WColorSwatchButton.vue +86 -0
  19. package/dist/runtime/components/WColorInput/WColorSwatchButton.vue.d.ts +28 -0
  20. package/dist/runtime/components/{LibColorPicker/LibColorPicker.d.vue.ts → WColorPicker/WColorPicker.d.vue.ts} +7 -6
  21. package/dist/runtime/components/{LibColorPicker/LibColorPicker.vue → WColorPicker/WColorPicker.vue} +40 -29
  22. package/dist/runtime/components/{LibColorPicker/LibColorPicker.vue.d.ts → WColorPicker/WColorPicker.vue.d.ts} +7 -6
  23. package/dist/runtime/components/WCombobox/WCombobox.d.vue.ts +109 -0
  24. package/dist/runtime/components/WCombobox/WCombobox.vue +402 -0
  25. package/dist/runtime/components/WCombobox/WCombobox.vue.d.ts +109 -0
  26. package/dist/runtime/components/WCombobox/storyPlays.d.ts +18 -0
  27. package/dist/runtime/components/WCombobox/storyPlays.js +68 -0
  28. package/dist/runtime/components/{LibDarkModeSwitcher/LibDarkModeSwitcher.d.vue.ts → WDarkModeSwitcher/WDarkModeSwitcher.d.vue.ts} +8 -13
  29. package/dist/runtime/components/{LibDarkModeSwitcher/LibDarkModeSwitcher.vue → WDarkModeSwitcher/WDarkModeSwitcher.vue} +11 -14
  30. package/dist/runtime/components/{LibDarkModeSwitcher/LibDarkModeSwitcher.vue.d.ts → WDarkModeSwitcher/WDarkModeSwitcher.vue.d.ts} +8 -13
  31. package/dist/runtime/components/WDatePicker/WDatePicker.d.vue.ts +40 -0
  32. package/dist/runtime/components/{LibDatePicker/LibDatePicker.vue → WDatePicker/WDatePicker.vue} +3 -7
  33. package/dist/runtime/components/WDatePicker/WDatePicker.vue.d.ts +40 -0
  34. package/dist/runtime/components/{LibDatePicker/LibRangeDatePicker.vue → WDatePicker/WRangeDatePicker.vue} +16 -21
  35. package/dist/runtime/components/{LibDatePicker/LibSingleDatePicker.vue → WDatePicker/WSingleDatePicker.vue} +16 -21
  36. package/dist/runtime/components/{LibDatePicker/LibTimeZonePicker.d.vue.ts → WDatePicker/WTimeZonePicker.d.vue.ts} +1 -11
  37. package/dist/runtime/components/{LibDatePicker/LibTimeZonePicker.vue → WDatePicker/WTimeZonePicker.vue} +5 -12
  38. package/dist/runtime/components/{LibDatePicker/LibTimeZonePicker.vue.d.ts → WDatePicker/WTimeZonePicker.vue.d.ts} +1 -11
  39. package/dist/runtime/components/{LibDebug/LibDebug.vue → WDebug/WDebug.vue} +9 -12
  40. package/dist/runtime/components/{LibDevOnly/LibDevOnly.d.vue.ts → WDevOnly/WDevOnly.d.vue.ts} +0 -3
  41. package/dist/runtime/components/{LibDevOnly/LibDevOnly.vue.d.ts → WDevOnly/WDevOnly.vue.d.ts} +0 -3
  42. package/dist/runtime/components/WFileInput/WFileInput.d.vue.ts +58 -0
  43. package/dist/runtime/components/{LibFileInput/LibFileInput.vue → WFileInput/WFileInput.vue} +71 -57
  44. package/dist/runtime/components/WFileInput/WFileInput.vue.d.ts +58 -0
  45. package/dist/runtime/components/{Icon/Icon.vue.d.ts → WIcon/WIcon.d.vue.ts} +2 -6
  46. package/dist/runtime/components/{Icon/Icon.vue → WIcon/WIcon.vue} +1 -1
  47. package/dist/runtime/components/{Icon/Icon.d.vue.ts → WIcon/WIcon.vue.d.ts} +2 -6
  48. package/dist/runtime/components/{LibMultiValues/LibMultiValues.d.vue.ts → WMultiValues/WMultiValues.d.vue.ts} +8 -14
  49. package/dist/runtime/components/WMultiValues/WMultiValues.vue +149 -0
  50. package/dist/runtime/components/{LibMultiValues/LibMultiValues.vue.d.ts → WMultiValues/WMultiValues.vue.d.ts} +8 -14
  51. package/dist/runtime/components/WNotifications/WNotification.d.vue.ts +37 -0
  52. package/dist/runtime/components/{LibNotifications/LibNotification.vue → WNotifications/WNotification.vue} +32 -47
  53. package/dist/runtime/components/WNotifications/WNotification.vue.d.ts +37 -0
  54. package/dist/runtime/components/WNotifications/WNotifications.d.vue.ts +11 -0
  55. package/dist/runtime/components/{LibNotifications/LibNotifications.vue → WNotifications/WNotifications.vue} +35 -17
  56. package/dist/runtime/components/WNotifications/WNotifications.vue.d.ts +11 -0
  57. package/dist/runtime/components/WNumberInput/WNumberInput.d.vue.ts +27 -0
  58. package/dist/runtime/components/WNumberInput/WNumberInput.vue +96 -0
  59. package/dist/runtime/components/WNumberInput/WNumberInput.vue.d.ts +27 -0
  60. package/dist/runtime/components/WPagination/WPagination.d.vue.ts +59 -0
  61. package/dist/runtime/components/WPagination/WPagination.vue +182 -0
  62. package/dist/runtime/components/WPagination/WPagination.vue.d.ts +59 -0
  63. package/dist/runtime/components/WPalette/WPalette.d.vue.ts +11 -0
  64. package/dist/runtime/components/{LibPalette/LibPalette.vue → WPalette/WPalette.vue} +3 -8
  65. package/dist/runtime/components/WPalette/WPalette.vue.d.ts +11 -0
  66. package/dist/runtime/components/WPopover/WPopover.d.vue.ts +43 -0
  67. package/dist/runtime/components/WPopover/WPopover.vue +138 -0
  68. package/dist/runtime/components/WPopover/WPopover.vue.d.ts +43 -0
  69. package/dist/runtime/components/WPopup/WPopup.d.vue.ts +41 -0
  70. package/dist/runtime/components/WPopup/WPopup.vue +74 -0
  71. package/dist/runtime/components/WPopup/WPopup.vue.d.ts +41 -0
  72. package/dist/runtime/components/{LibProgressBar/LibProgressBar.d.vue.ts → WProgressBar/WProgressBar.d.vue.ts} +14 -18
  73. package/dist/runtime/components/WProgressBar/WProgressBar.vue +150 -0
  74. package/dist/runtime/components/{LibProgressBar/LibProgressBar.vue.d.ts → WProgressBar/WProgressBar.vue.d.ts} +14 -18
  75. package/dist/runtime/components/{LibRecorder/LibRecorder.d.vue.ts → WRecorder/WRecorder.d.vue.ts} +14 -29
  76. package/dist/runtime/components/{LibRecorder/LibRecorder.vue → WRecorder/WRecorder.vue} +37 -36
  77. package/dist/runtime/components/{LibRecorder/LibRecorder.vue.d.ts → WRecorder/WRecorder.vue.d.ts} +14 -29
  78. package/dist/runtime/components/{LibRoot/LibRoot.d.vue.ts → WRoot/WRoot.d.vue.ts} +6 -5
  79. package/dist/runtime/components/{LibRoot/LibRoot.vue → WRoot/WRoot.vue} +17 -15
  80. package/dist/runtime/components/{LibRoot/LibRoot.vue.d.ts → WRoot/WRoot.vue.d.ts} +6 -5
  81. package/dist/runtime/components/{LibSimpleInput/LibSimpleInput.d.vue.ts → WSimpleInput/WSimpleInput.d.vue.ts} +9 -16
  82. package/dist/runtime/components/{LibSimpleInput/LibSimpleInput.vue → WSimpleInput/WSimpleInput.vue} +12 -23
  83. package/dist/runtime/components/{LibSimpleInput/LibSimpleInput.vue.d.ts → WSimpleInput/WSimpleInput.vue.d.ts} +9 -16
  84. package/dist/runtime/components/WTable/WTable.d.vue.ts +102 -0
  85. package/dist/runtime/components/{LibTable/LibTable.vue → WTable/WTable.vue} +13 -14
  86. package/dist/runtime/components/WTable/WTable.vue.d.ts +102 -0
  87. package/dist/runtime/components/WTooltip/WTooltip.d.vue.ts +40 -0
  88. package/dist/runtime/components/WTooltip/WTooltip.vue +111 -0
  89. package/dist/runtime/components/WTooltip/WTooltip.vue.d.ts +40 -0
  90. package/dist/runtime/components/index.d.ts +20 -20
  91. package/dist/runtime/components/index.js +20 -20
  92. package/dist/runtime/composables/index.d.ts +4 -4
  93. package/dist/runtime/composables/index.js +4 -4
  94. package/dist/runtime/composables/useDelayedLoadingIndicator.d.ts +9 -0
  95. package/dist/runtime/composables/useDelayedLoadingIndicator.js +18 -0
  96. package/dist/runtime/composables/useDisplayForReka.d.ts +25 -0
  97. package/dist/runtime/composables/useDisplayForReka.js +16 -0
  98. package/dist/runtime/composables/useFallbackId.d.ts +3 -0
  99. package/dist/runtime/composables/useFallbackId.js +5 -0
  100. package/dist/runtime/composables/useInjectedDarkMode.d.ts +1 -1
  101. package/dist/runtime/composables/usePopupConstrainToStyle.d.ts +8 -0
  102. package/dist/runtime/composables/usePopupConstrainToStyle.js +8 -0
  103. package/dist/runtime/composables/useSetupDarkMode.d.ts +2 -3
  104. package/dist/runtime/composables/useSetupDarkMode.js +90 -4
  105. package/dist/runtime/helpers/NotificationHandler.d.ts +8 -4
  106. package/dist/runtime/helpers/NotificationHandler.js +5 -8
  107. package/dist/runtime/injectionKeys.d.ts +1 -5
  108. package/dist/runtime/injectionKeys.js +0 -2
  109. package/dist/runtime/types/index.d.ts +85 -27
  110. package/dist/runtime/types/index.js +1 -0
  111. package/package.json +7 -7
  112. package/src/runtime/assets/animations.css +3 -3
  113. package/src/runtime/assets/locales/en.json +2 -0
  114. package/src/runtime/assets/utils.css +43 -0
  115. package/src/runtime/build/WitchcraftUiResolver.ts +1 -1
  116. package/src/runtime/components/TestControls/TestControls.vue +3 -3
  117. package/src/runtime/components/WButton/WButton.stories.ts +112 -0
  118. package/src/runtime/components/{LibButton/LibButton.vue → WButton/WButton.vue} +34 -50
  119. package/src/runtime/components/{LibCheckbox/LibCheckbox.stories.ts → WCheckbox/WCheckbox.stories.ts} +5 -5
  120. package/src/runtime/components/WCheckbox/WCheckbox.vue +123 -0
  121. package/src/runtime/components/{LibColorInput/LibColorInput.stories.ts → WColorInput/WColorInput.stories.ts} +8 -8
  122. package/src/runtime/components/WColorInput/WColorInput.vue +112 -0
  123. package/src/runtime/components/WColorInput/WColorSwatchButton.vue +102 -0
  124. package/src/runtime/components/{LibColorPicker/LibColorPicker.stories.ts → WColorPicker/WColorPicker.stories.ts} +12 -12
  125. package/src/runtime/components/{LibColorPicker/LibColorPicker.vue → WColorPicker/WColorPicker.vue} +43 -32
  126. package/src/runtime/components/WCombobox/WCombobox.stories.ts +209 -0
  127. package/src/runtime/components/WCombobox/WCombobox.vue +446 -0
  128. package/src/runtime/components/WCombobox/storyPlays.ts +92 -0
  129. package/src/runtime/components/{LibDarkModeSwitcher/LibDarkModeSwitcher.stories.ts → WDarkModeSwitcher/WDarkModeSwitcher.stories.ts} +6 -6
  130. package/src/runtime/components/{LibDarkModeSwitcher/LibDarkModeSwitcher.vue → WDarkModeSwitcher/WDarkModeSwitcher.vue} +19 -30
  131. package/src/runtime/components/{LibDatePicker/LibDatePicker.stories.ts → WDatePicker/WDatePicker.stories.ts} +42 -34
  132. package/src/runtime/components/{LibDatePicker/LibDatePicker.vue → WDatePicker/WDatePicker.vue} +3 -7
  133. package/src/runtime/components/{LibDatePicker/LibRangeDatePicker.vue → WDatePicker/WRangeDatePicker.vue} +16 -22
  134. package/src/runtime/components/{LibDatePicker/LibSingleDatePicker.vue → WDatePicker/WSingleDatePicker.vue} +16 -22
  135. package/src/runtime/components/{LibDatePicker/LibTimeZonePicker.vue → WDatePicker/WTimeZonePicker.vue} +5 -12
  136. package/src/runtime/components/{LibDebug/LibDebug.stories.ts → WDebug/WDebug.stories.ts} +5 -5
  137. package/src/runtime/components/{LibDebug/LibDebug.vue → WDebug/WDebug.vue} +8 -11
  138. package/src/runtime/components/{LibDevOnly/LibDevOnly.vue → WDevOnly/WDevOnly.vue} +0 -4
  139. package/src/runtime/components/{LibFileInput/LibFileInput.stories.ts → WFileInput/WFileInput.stories.ts} +7 -7
  140. package/src/runtime/components/{LibFileInput/LibFileInput.vue → WFileInput/WFileInput.vue} +95 -98
  141. package/src/runtime/components/{Icon/Icon.vue → WIcon/WIcon.vue} +5 -8
  142. package/src/runtime/components/{LibMultiValues/LibMultiValues.stories.ts → WMultiValues/WMultiValues.stories.ts} +9 -9
  143. package/src/runtime/components/WMultiValues/WMultiValues.vue +161 -0
  144. package/src/runtime/components/{LibNotifications/LibNotification.stories.ts → WNotifications/WNotification.stories.ts} +9 -9
  145. package/src/runtime/components/{LibNotifications/LibNotification.vue → WNotifications/WNotification.vue} +43 -66
  146. package/src/runtime/components/WNotifications/WNotifications.stories.ts +139 -0
  147. package/src/runtime/components/{LibNotifications/LibNotifications.vue → WNotifications/WNotifications.vue} +51 -29
  148. package/src/runtime/components/WNumberInput/WNumberInput.vue +109 -0
  149. package/src/runtime/components/WPagination/WPagination.stories.ts +51 -0
  150. package/src/runtime/components/WPagination/WPagination.vue +207 -0
  151. package/src/runtime/components/{LibPalette/LibPalette.stories.ts → WPalette/WPalette.stories.ts} +6 -6
  152. package/src/runtime/components/{LibPalette/LibPalette.vue → WPalette/WPalette.vue} +3 -8
  153. package/src/runtime/components/WPopover/WPopover.stories.ts +218 -0
  154. package/src/runtime/components/WPopover/WPopover.vue +161 -0
  155. package/src/runtime/components/WPopup/WPopup.stories.ts +60 -0
  156. package/src/runtime/components/WPopup/WPopup.vue +93 -0
  157. package/src/runtime/components/WProgressBar/WProgressBar.stories.ts +119 -0
  158. package/src/runtime/components/WProgressBar/WProgressBar.vue +185 -0
  159. package/src/runtime/components/{LibRecorder/LibRecorder.stories.ts → WRecorder/WRecorder.stories.ts} +9 -6
  160. package/src/runtime/components/{LibRecorder/LibRecorder.vue → WRecorder/WRecorder.vue} +69 -68
  161. package/src/runtime/components/{LibRoot/LibRoot.vue → WRoot/WRoot.vue} +18 -15
  162. package/src/runtime/components/{LibSimpleInput/LibSimpleInput.stories.ts → WSimpleInput/WSimpleInput.stories.ts} +11 -12
  163. package/src/runtime/components/{LibSimpleInput/LibSimpleInput.vue → WSimpleInput/WSimpleInput.vue} +27 -44
  164. package/src/runtime/components/{LibTable/LibTable.stories.ts → WTable/WTable.stories.ts} +60 -52
  165. package/src/runtime/components/{LibTable/LibTable.vue → WTable/WTable.vue} +85 -87
  166. package/src/runtime/components/WTooltip/WTooltip.stories.ts +82 -0
  167. package/src/runtime/components/WTooltip/WTooltip.vue +126 -0
  168. package/src/runtime/components/index.ts +20 -20
  169. package/src/runtime/composables/index.ts +4 -4
  170. package/src/runtime/composables/useDelayedLoadingIndicator.ts +30 -0
  171. package/src/runtime/composables/useDisplayForReka.ts +37 -0
  172. package/src/runtime/composables/useFallbackId.ts +6 -0
  173. package/src/runtime/composables/useInjectedDarkMode.ts +1 -2
  174. package/src/runtime/composables/usePopupConstrainToStyle.ts +29 -0
  175. package/src/runtime/composables/useSetupDarkMode.ts +122 -4
  176. package/src/runtime/helpers/NotificationHandler.ts +9 -11
  177. package/src/runtime/injectionKeys.ts +1 -7
  178. package/src/runtime/types/index.ts +105 -32
  179. package/types/components.d.ts +13 -15
  180. package/dist/runtime/components/Aria/Aria.d.vue.ts +0 -6
  181. package/dist/runtime/components/Aria/Aria.vue +0 -16
  182. package/dist/runtime/components/Aria/Aria.vue.d.ts +0 -6
  183. package/dist/runtime/components/LibButton/LibButton.d.vue.ts +0 -37
  184. package/dist/runtime/components/LibButton/LibButton.vue.d.ts +0 -37
  185. package/dist/runtime/components/LibCheckbox/LibCheckbox.d.vue.ts +0 -41
  186. package/dist/runtime/components/LibCheckbox/LibCheckbox.vue +0 -103
  187. package/dist/runtime/components/LibCheckbox/LibCheckbox.vue.d.ts +0 -41
  188. package/dist/runtime/components/LibColorInput/LibColorInput.d.vue.ts +0 -64
  189. package/dist/runtime/components/LibColorInput/LibColorInput.vue +0 -162
  190. package/dist/runtime/components/LibColorInput/LibColorInput.vue.d.ts +0 -64
  191. package/dist/runtime/components/LibDatePicker/LibDatePicker.d.vue.ts +0 -191
  192. package/dist/runtime/components/LibDatePicker/LibDatePicker.vue.d.ts +0 -191
  193. package/dist/runtime/components/LibFileInput/LibFileInput.d.vue.ts +0 -46
  194. package/dist/runtime/components/LibFileInput/LibFileInput.vue.d.ts +0 -46
  195. package/dist/runtime/components/LibInputDeprecated/LibInputDeprecated.d.vue.ts +0 -256
  196. package/dist/runtime/components/LibInputDeprecated/LibInputDeprecated.vue +0 -387
  197. package/dist/runtime/components/LibInputDeprecated/LibInputDeprecated.vue.d.ts +0 -256
  198. package/dist/runtime/components/LibLabel/LibLabel.d.vue.ts +0 -27
  199. package/dist/runtime/components/LibLabel/LibLabel.vue +0 -45
  200. package/dist/runtime/components/LibLabel/LibLabel.vue.d.ts +0 -27
  201. package/dist/runtime/components/LibMultiValues/LibMultiValues.vue +0 -109
  202. package/dist/runtime/components/LibNotifications/LibNotification.d.vue.ts +0 -45
  203. package/dist/runtime/components/LibNotifications/LibNotification.vue.d.ts +0 -45
  204. package/dist/runtime/components/LibNotifications/LibNotifications.d.vue.ts +0 -15
  205. package/dist/runtime/components/LibNotifications/LibNotifications.vue.d.ts +0 -15
  206. package/dist/runtime/components/LibPagination/LibPagination.d.vue.ts +0 -105
  207. package/dist/runtime/components/LibPagination/LibPagination.vue +0 -229
  208. package/dist/runtime/components/LibPagination/LibPagination.vue.d.ts +0 -105
  209. package/dist/runtime/components/LibPalette/LibPalette.d.vue.ts +0 -15
  210. package/dist/runtime/components/LibPalette/LibPalette.vue.d.ts +0 -15
  211. package/dist/runtime/components/LibPopup/LibPopup.d.vue.ts +0 -52
  212. package/dist/runtime/components/LibPopup/LibPopup.vue +0 -365
  213. package/dist/runtime/components/LibPopup/LibPopup.vue.d.ts +0 -52
  214. package/dist/runtime/components/LibProgressBar/LibProgressBar.vue +0 -169
  215. package/dist/runtime/components/LibSuggestions/LibSuggestions.d.vue.ts +0 -99
  216. package/dist/runtime/components/LibSuggestions/LibSuggestions.vue +0 -178
  217. package/dist/runtime/components/LibSuggestions/LibSuggestions.vue.d.ts +0 -99
  218. package/dist/runtime/components/LibTable/LibTable.d.vue.ts +0 -125
  219. package/dist/runtime/components/LibTable/LibTable.vue.d.ts +0 -125
  220. package/dist/runtime/components/Template/NAME.d.vue.ts +0 -18
  221. package/dist/runtime/components/Template/NAME.vue +0 -27
  222. package/dist/runtime/components/Template/NAME.vue.d.ts +0 -18
  223. package/dist/runtime/components/Template/TemplateStory.d.ts +0 -7
  224. package/dist/runtime/components/Template/TemplateStory.js +0 -22
  225. package/dist/runtime/components/shared/props.d.ts +0 -171
  226. package/dist/runtime/components/shared/props.js +0 -2
  227. package/dist/runtime/composables/useAriaLabel.d.ts +0 -6
  228. package/dist/runtime/composables/useAriaLabel.js +0 -15
  229. package/dist/runtime/composables/useDarkMode.d.ts +0 -77
  230. package/dist/runtime/composables/useDarkMode.js +0 -89
  231. package/dist/runtime/composables/useDivideAttrs.d.ts +0 -27
  232. package/dist/runtime/composables/useDivideAttrs.js +0 -27
  233. package/dist/runtime/composables/useSuggestions.d.ts +0 -40
  234. package/dist/runtime/composables/useSuggestions.js +0 -263
  235. package/src/runtime/components/Aria/Aria.vue +0 -26
  236. package/src/runtime/components/LibButton/LibButton.stories.ts +0 -106
  237. package/src/runtime/components/LibCheckbox/LibCheckbox.vue +0 -131
  238. package/src/runtime/components/LibColorInput/LibColorInput.vue +0 -203
  239. package/src/runtime/components/LibInputDeprecated/LibInputDeprecated.stories.ts +0 -405
  240. package/src/runtime/components/LibInputDeprecated/LibInputDeprecated.vue +0 -419
  241. package/src/runtime/components/LibLabel/LibLabel.stories.ts +0 -33
  242. package/src/runtime/components/LibLabel/LibLabel.vue +0 -65
  243. package/src/runtime/components/LibMultiValues/LibMultiValues.vue +0 -123
  244. package/src/runtime/components/LibNotifications/LibNotifications.stories.ts +0 -131
  245. package/src/runtime/components/LibPagination/LibPagination.stories.ts +0 -49
  246. package/src/runtime/components/LibPagination/LibPagination.vue +0 -274
  247. package/src/runtime/components/LibPopup/LibPopup.stories.ts +0 -153
  248. package/src/runtime/components/LibPopup/LibPopup.vue +0 -396
  249. package/src/runtime/components/LibProgressBar/LibProgressBar.stories.ts +0 -90
  250. package/src/runtime/components/LibProgressBar/LibProgressBar.vue +0 -197
  251. package/src/runtime/components/LibSuggestions/LibSuggestions.stories.ts +0 -134
  252. package/src/runtime/components/LibSuggestions/LibSuggestions.vue +0 -212
  253. package/src/runtime/components/Template/NAME.vue +0 -49
  254. package/src/runtime/components/Template/TemplateStory.ts +0 -37
  255. package/src/runtime/components/shared/props.ts +0 -199
  256. package/src/runtime/composables/useAriaLabel.ts +0 -23
  257. package/src/runtime/composables/useDarkMode.ts +0 -199
  258. package/src/runtime/composables/useDivideAttrs.ts +0 -53
  259. package/src/runtime/composables/useSuggestions.ts +0 -339
  260. /package/dist/runtime/components/{LibColorPicker → WColorPicker}/utils/safeConvertToHsva.d.ts +0 -0
  261. /package/dist/runtime/components/{LibColorPicker → WColorPicker}/utils/safeConvertToHsva.js +0 -0
  262. /package/dist/runtime/components/{LibColorPicker → WColorPicker}/utils/safeConvertToRgba.d.ts +0 -0
  263. /package/dist/runtime/components/{LibColorPicker → WColorPicker}/utils/safeConvertToRgba.js +0 -0
  264. /package/dist/runtime/components/{LibColorPicker → WColorPicker}/utils/toLowPrecisionRgbaString.d.ts +0 -0
  265. /package/dist/runtime/components/{LibColorPicker → WColorPicker}/utils/toLowPrecisionRgbaString.js +0 -0
  266. /package/dist/runtime/components/{LibColorPicker → WColorPicker}/utils/truncate.d.ts +0 -0
  267. /package/dist/runtime/components/{LibColorPicker → WColorPicker}/utils/truncate.js +0 -0
  268. /package/dist/runtime/components/{LibDatePicker/LibRangeDatePicker.d.vue.ts → WDatePicker/WRangeDatePicker.d.vue.ts} +0 -0
  269. /package/dist/runtime/components/{LibDatePicker/LibRangeDatePicker.vue.d.ts → WDatePicker/WRangeDatePicker.vue.d.ts} +0 -0
  270. /package/dist/runtime/components/{LibDatePicker/LibSingleDatePicker.d.vue.ts → WDatePicker/WSingleDatePicker.d.vue.ts} +0 -0
  271. /package/dist/runtime/components/{LibDatePicker/LibSingleDatePicker.vue.d.ts → WDatePicker/WSingleDatePicker.vue.d.ts} +0 -0
  272. /package/dist/runtime/components/{LibDatePicker → WDatePicker}/helpers.d.ts +0 -0
  273. /package/dist/runtime/components/{LibDatePicker → WDatePicker}/helpers.js +0 -0
  274. /package/dist/runtime/components/{LibDebug/LibDebug.d.vue.ts → WDebug/WDebug.d.vue.ts} +0 -0
  275. /package/dist/runtime/components/{LibDebug/LibDebug.vue.d.ts → WDebug/WDebug.vue.d.ts} +0 -0
  276. /package/dist/runtime/components/{LibDevOnly/LibDevOnly.vue → WDevOnly/WDevOnly.vue} +0 -0
  277. /package/dist/runtime/components/{LibNotifications/LibNotificationTestMessageComponent.d.vue.ts → WNotifications/WNotificationTestMessageComponent.d.vue.ts} +0 -0
  278. /package/dist/runtime/components/{LibNotifications/LibNotificationTestMessageComponent.vue → WNotifications/WNotificationTestMessageComponent.vue} +0 -0
  279. /package/dist/runtime/components/{LibNotifications/LibNotificationTestMessageComponent.vue.d.ts → WNotifications/WNotificationTestMessageComponent.vue.d.ts} +0 -0
  280. /package/dist/runtime/components/{LibNotifications → WNotifications}/calculateNotificationProgress.d.ts +0 -0
  281. /package/dist/runtime/components/{LibNotifications → WNotifications}/calculateNotificationProgress.js +0 -0
  282. /package/src/runtime/components/{LibColorPicker → WColorPicker}/utils/safeConvertToHsva.ts +0 -0
  283. /package/src/runtime/components/{LibColorPicker → WColorPicker}/utils/safeConvertToRgba.ts +0 -0
  284. /package/src/runtime/components/{LibColorPicker → WColorPicker}/utils/toLowPrecisionRgbaString.ts +0 -0
  285. /package/src/runtime/components/{LibColorPicker → WColorPicker}/utils/truncate.ts +0 -0
  286. /package/src/runtime/components/{LibDatePicker → WDatePicker}/helpers.ts +0 -0
  287. /package/src/runtime/components/{LibNotifications/LibNotificationTestMessageComponent.vue → WNotifications/WNotificationTestMessageComponent.vue} +0 -0
  288. /package/src/runtime/components/{LibNotifications → WNotifications}/calculateNotificationProgress.ts +0 -0
@@ -2,12 +2,12 @@
2
2
  import type { Meta, StoryObj } from "@storybook/vue3"
3
3
  import { ref } from "vue"
4
4
 
5
- import LibFileInput from "./LibFileInput.vue"
5
+ import WFileInput from "./WFileInput.vue"
6
6
 
7
7
  import * as components from "../index.js"
8
8
 
9
- const meta: Meta<typeof LibFileInput> = {
10
- component: LibFileInput,
9
+ const meta: Meta<typeof WFileInput> = {
10
+ component: WFileInput,
11
11
  title: "Components/FileInput",
12
12
  args: {
13
13
 
@@ -15,7 +15,7 @@ const meta: Meta<typeof LibFileInput> = {
15
15
  }
16
16
 
17
17
  export default meta
18
- type Story = StoryObj<typeof LibFileInput>
18
+ type Story = StoryObj<typeof WFileInput>
19
19
 
20
20
  export const SingleFile: Story = {
21
21
  render: args => ({
@@ -30,7 +30,7 @@ export const SingleFile: Story = {
30
30
  return { args, errorHandler, errors }
31
31
  },
32
32
  template: `
33
- <lib-file-input v-bind="{...args}" @errors="errorHandler"></lib-file-input>
33
+ <WFileInput v-bind="{...args}" @errors="errorHandler"></WFileInput>
34
34
  <div
35
35
  v-if="errors.length > 0"
36
36
  class="border-2 border-red-500 rounded-lg p-2 mt-2 w-full"
@@ -79,8 +79,8 @@ export const ErrorHandling: Story = {
79
79
  }
80
80
  },
81
81
  template: `
82
- <lib-debug :title="'Errors'">{{errors}}</lib-debug>
83
- <lib-file-input v-bind="{...args}" @errors="errorHandler"></lib-file-input>
82
+ <WDebug :title="'Errors'">{{errors}}</WDebug>
83
+ <WFileInput v-bind="{...args}" @errors="errorHandler"></WFileInput>
84
84
  `
85
85
  })
86
86
  }
@@ -1,5 +1,4 @@
1
1
  <template>
2
- <!-- todo aria errors -->
3
2
  <div
4
3
  :class="twMerge(`
5
4
  file-input
@@ -23,11 +22,11 @@
23
22
  rounded-xl
24
23
  p-2
25
24
  `,
26
- errors.length > 0 && errorFlashing && `border-danger-400`,
27
25
  isHovered && `bg-accent-500/10`,
28
- ($.wrapperAttrs as any).class
26
+ errors.length > 0 && isErrored && `errored border-red-400 hover:border-red-500`,
27
+ wrapperAttrs?.class
29
28
  )"
30
- v-bind="{ ...$.wrapperAttrs, class: undefined }"
29
+ v-bind="{ ...wrapperAttrs, class: undefined }"
31
30
  @drop="onDrop"
32
31
  @dragover.prevent="isHovered = true"
33
32
  @dragleave="isHovered = false"
@@ -49,7 +48,7 @@
49
48
  )"
50
49
  >
51
50
  <label
52
- :for="id ?? fallbackId"
51
+ :for="finalId"
53
52
  :class="twMerge(`
54
53
  file-input--label
55
54
  pointer-events-none
@@ -65,7 +64,7 @@
65
64
  v-if="compact || multiple || files.length === 0"
66
65
  name="icon"
67
66
  >
68
- <icon><i-fa6-solid-arrow-up-from-bracket/></icon>
67
+ <WIcon><i-lucide-upload/></WIcon>
69
68
  </slot>
70
69
  <slot name="label">
71
70
  <div class="text-ellipsis overflow-hidden shrink-1 hidden @min-[15ch]:block">
@@ -110,7 +109,7 @@
110
109
  </div>
111
110
  </label>
112
111
  <input
113
- :id="id ?? fallbackId"
112
+ :id="finalId"
114
113
  :class="twMerge(`
115
114
  file-input--input
116
115
  absolute
@@ -120,13 +119,15 @@
120
119
  text-[0]
121
120
  opacity-0
122
121
  `,
123
- ($.inputAttrs as any)?.class
122
+ inputAttrs?.class
124
123
  )"
125
124
  type="file"
126
125
  :accept="formats.join(', ')"
127
126
  :multiple="multiple"
127
+ v-bind="{ ...inputAttrs, class: undefined }"
128
+ :aria-invalid="errors.length > 0"
129
+ :aria-errormessage="errors.map(_ => _.message).join(', ')"
128
130
  ref="el"
129
- v-bind="{ ...$.inputAttrs, class: undefined }"
130
131
  @input="(inputFile as any)"
131
132
  @click="($event.target! as any).value = null"
132
133
  >
@@ -139,8 +140,7 @@
139
140
  `,
140
141
  multiple && `
141
142
  w-full
142
- `,
143
- ($.previewsAttrs as any)?.class
143
+ `
144
144
  )"
145
145
  >
146
146
  <div
@@ -170,14 +170,14 @@
170
170
  :key="entry.file.name"
171
171
  >
172
172
  <div class="flex flex-initial basis-full justify-start items-center max-w-full gap-2 px-1">
173
- <lib-button
173
+ <WButton
174
174
  :border="false"
175
175
  class="file-input--remove-button rounded-full p-0"
176
176
  :aria-label="`Remove file ${entry.file.name}`"
177
177
  @click="removeFile(entry)"
178
178
  >
179
- <icon><i-fa6-solid-xmark/></icon>
180
- </lib-button>
179
+ <WIcon><i-lucide-x/></WIcon>
180
+ </Wbutton>
181
181
  <div
182
182
  class="file-input--preview-filename min-w-0 flex-1 basis-0 truncate break-all rounded-sm text-sm"
183
183
  :title="entry.file.name"
@@ -197,7 +197,7 @@
197
197
  >
198
198
  <img
199
199
  class="max-h-full w-auto"
200
- :src="getSrc(entry.file)"
200
+ :src="entry.previewUrl"
201
201
  >
202
202
  </div>
203
203
  <div
@@ -207,41 +207,82 @@
207
207
  flex-1 basis-full flex-wrap items-center justify-center
208
208
  "
209
209
  >
210
- <icon><i-fa6-regular-file class="text-4xl opacity-50"/></icon>
210
+ <WIcon><i-lucide-file class="text-4xl opacity-50"/></WIcon>
211
211
  </div>
212
212
  </div>
213
213
  </div>
214
214
  </div>
215
+ <div
216
+ v-if="!compact && errors.length > 0"
217
+ class="file-input--errors flex flex-col gap-2 text-sm text-red-600 dark:text-red-400 items-center px-2"
218
+ >
219
+ <div
220
+ class="file-input--error text-center"
221
+ v-for="error of errors"
222
+ :key="error.message"
223
+ >
224
+ {{ error.message }}
225
+ </div>
226
+ </div>
215
227
  </div>
216
228
  </template>
217
229
 
218
230
  <script setup lang="ts">
219
- import { computed, type HTMLAttributes, type InputHTMLAttributes, ref, shallowReactive, watch } from "vue"
220
-
221
- import IFa6RegularFile from "~icons/fa6-regular/file"
222
- import IFa6SolidArrowUpFromBracket from "~icons/fa6-solid/arrow-up-from-bracket"
223
- import IFa6SolidXmark from "~icons/fa6-solid/xmark"
231
+ import type { HTMLAttributes, InputHTMLAttributes } from "vue"
232
+ import { computed, onBeforeUnmount, ref, shallowReactive, watch } from "vue"
224
233
 
225
- import { useDivideAttrs } from "../../composables/useDivideAttrs.js"
234
+ import { useFallbackId } from "../../composables/useFallbackId.js"
226
235
  import { useInjectedI18n } from "../../composables/useInjectedI18n.js"
227
- import type { FileInputError } from "../../types/index.js"
236
+ import type { FileInputError, TailwindClassProp } from "../../types/index.js"
228
237
  import { twMerge } from "../../utils/twMerge.js"
229
- import Icon from "../Icon/Icon.vue"
230
- import LibButton from "../LibButton/LibButton.vue"
231
- import { getFallbackId, type LinkableByIdProps, type TailwindClassProp, type WrapperProps } from "../shared/props.js"
238
+ import WButton from "../WButton/WButton.vue"
239
+ import WIcon from "../WIcon/WIcon.vue"
232
240
 
233
241
  const t = useInjectedI18n()
234
242
  const el = ref<null | HTMLInputElement>(null)
235
- type Entry = { file: File, isImg: boolean }
243
+
244
+
245
+ const props = withDefaults(defineProps<
246
+ & {
247
+ id?: string
248
+ multiple?: boolean
249
+ /**
250
+ * 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.
251
+ *
252
+ * Pass an empty array to allow any filetype.
253
+ */
254
+ formats?: string[]
255
+ compact?: boolean
256
+ inputAttrs?: Omit<InputHTMLAttributes, "class"> & TailwindClassProp
257
+ wrapperAttrs?: Omit<HTMLAttributes, "class"> & TailwindClassProp
258
+ }
259
+ >(), {
260
+ multiple: false,
261
+ formats: () => ["image/*", ".jpeg", ".jpg", ".png"],
262
+ compact: false
263
+ })
264
+ const finalId = useFallbackId(props)
265
+
266
+ const emits = defineEmits<{
267
+ (e: "input", val: File[], clearFiles: () => void): void
268
+ (e: "errors", val: FileInputError[], clearErrors: () => void): void
269
+ }>()
270
+
271
+ type Entry = { file: File } & ({ isImg: true, previewUrl: string } | { isImg: false, previewUrl: undefined })
236
272
 
237
273
  const files = shallowReactive<(Entry)[]>([])
238
274
  const errors = shallowReactive<(FileInputError)[]>([])
239
- const errorFlashing = ref(false)
275
+ const isErrored = ref(false)
240
276
  const isHovered = ref(false)
241
277
 
242
-
243
278
  function clearFiles() {
244
- el.value!.value = ""
279
+ if (el.value) {
280
+ // not sure why sometimes el.value is undefined but it can be
281
+ el.value.value = ""
282
+ }
283
+ for (const entry of files) {
284
+ if (entry.previewUrl) URL.revokeObjectURL(entry.previewUrl)
285
+ }
245
286
  files.splice(0, files.length)
246
287
  }
247
288
 
@@ -250,45 +291,37 @@ watch(files, () => {
250
291
  })
251
292
  watch(errors, () => {
252
293
  if (errors.length > 0) {
253
- errorFlashing.value = true
254
- setTimeout(() => {
255
- errorFlashing.value = false
256
- }, 500)
257
- emits("errors", [...errors])
258
- errors.splice(0, errors.length)
294
+ isErrored.value = true
295
+ emits("errors", [...errors], clearErrors)
259
296
  }
260
297
  })
261
298
 
299
+ function clearErrors() {
300
+ isErrored.value = false
301
+ errors.splice(0, errors.length)
302
+ }
303
+
262
304
  defineOptions({
263
- name: "LibFileInput",
305
+ name: "WFileInput",
264
306
  inheritAttrs: false
265
307
  })
266
- const $ = useDivideAttrs(["wrapper", "input", "previews"] as const)
267
-
268
- const emits = defineEmits<{
269
- (e: "input", val: File[], clearFiles: () => void): void
270
- (e: "errors", val: FileInputError[]): void
271
- }>()
272
-
273
- const fallbackId = getFallbackId()
274
- const props = withDefaults(defineProps<Props>(), {
275
- multiple: false,
276
- formats: () => ["image/*", ".jpeg", ".jpg", ".png"],
277
- compact: false
278
- })
279
308
 
280
309
  const mimeTypes = computed(() => props.formats?.filter(_ => !_.startsWith(".")) ?? [])
281
310
  const extensions = computed(() => props.formats?.filter(_ => _.startsWith(".")) ?? [])
282
311
 
283
- const getSrc = (file: File) => {
284
- const src = URL.createObjectURL(file)
285
- return src
286
- }
287
312
 
288
- const removeFile = (entry: Entry) => {
313
+ onBeforeUnmount(() => {
314
+ for (const entry of files) {
315
+ if (entry.previewUrl) URL.revokeObjectURL(entry.previewUrl)
316
+ }
317
+ })
318
+
319
+ function removeFile(entry: Entry) {
320
+ if (entry.previewUrl) URL.revokeObjectURL(entry.previewUrl)
289
321
  const index = files.indexOf(entry)
290
- files.splice(index, 1)
322
+ if (index > -1) files.splice(index, 1)
291
323
  }
324
+
292
325
  const extensionsList = computed(() => extensions.value.join(", "))
293
326
 
294
327
  function onDrop(e: DragEvent) {
@@ -327,13 +360,14 @@ function updateFiles(filesList: FileList): boolean | undefined {
327
360
  errs.push(err)
328
361
  continue
329
362
  }
363
+ const previewUrl = isImg ? URL.createObjectURL(file) : undefined
330
364
  if (errs.length > 0) continue
331
365
  if (!files.find(_ => _.file === file)) {
332
366
  if ((props.multiple || files.length < 1)
333
367
  ) {
334
- files.push({ file, isImg })
368
+ files.push({ file, isImg, previewUrl: previewUrl as any })
335
369
  } else {
336
- files.splice(0, files.length, { file, isImg })
370
+ files.splice(0, files.length, { file, isImg, previewUrl: previewUrl as any })
337
371
  }
338
372
  }
339
373
  }
@@ -341,51 +375,14 @@ function updateFiles(filesList: FileList): boolean | undefined {
341
375
  errors.splice(0, errors.length, ...errs)
342
376
  return false
343
377
  } else if (errors.length > 0) {
344
- errors.splice(0, errors.length)
378
+ clearErrors()
345
379
  }
346
380
  return undefined
347
381
  }
348
382
 
349
383
  defineExpose({
350
- clearFiles
384
+ clearFiles,
385
+ clearErrors
351
386
  })
352
387
  </script>
353
388
 
354
- <script lang="ts">
355
- export default { name: "LibFileInput" }
356
-
357
- type WrapperTypes
358
- = & WrapperProps<
359
- "input",
360
- // https://github.com/vuejs/core/pull/14237
361
- Omit<InputHTMLAttributes, "autocomplete">
362
- >
363
- & WrapperProps<"wrapper", HTMLAttributes>
364
- & WrapperProps<"previews", HTMLAttributes>
365
-
366
- type RealProps
367
- = & LinkableByIdProps
368
- & {
369
- multiple?: boolean
370
- /**
371
- * 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.
372
- *
373
- * Pass an empty array to allow any filetype.
374
- */
375
- formats?: string[]
376
- compact?: boolean
377
- }
378
-
379
- interface Props
380
- extends
381
- /** @vue-ignore */
382
- Partial<Omit<
383
- InputHTMLAttributes,
384
- "class" | "multiple" | "formats" | "compact"
385
- // https://github.com/vuejs/core/pull/14237
386
- | "autocomplete"
387
- > & TailwindClassProp>,
388
- /** @vue-ignore */
389
- Partial<WrapperTypes>,
390
- RealProps { }
391
- </script>
@@ -19,7 +19,9 @@ defineOptions({
19
19
 
20
20
  const $attrs = useAttrs() as any
21
21
 
22
- /* const props = */defineProps<Props>()
22
+ defineProps<
23
+ & /** @vue-ignore */ Omit<HTMLAttributes, "class">
24
+ >()
23
25
  </script>
24
26
 
25
27
  <script lang="ts">
@@ -27,13 +29,8 @@ const $attrs = useAttrs() as any
27
29
  * 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.
28
30
  *
29
31
  * ```vue
30
- * <icon><i-...></icon>
32
+ * <WIcon><i-...></WIcon>
31
33
  * ``
32
34
  */
33
-
34
- interface Props
35
- extends
36
- /** @vue-ignore */
37
- Partial<Omit<HTMLAttributes, "class">
38
- > { }
35
+ export default { name: "Icon" }
39
36
  </script>
@@ -2,22 +2,22 @@
2
2
  import type { Meta, StoryObj } from "@storybook/vue3"
3
3
  import { ref } from "vue"
4
4
 
5
- import LibMultiValues from "./LibMultiValues.vue"
5
+ import WMultiValues from "./WMultiValues.vue"
6
6
 
7
7
  import * as components from "../index.js"
8
8
 
9
9
  const meta = {
10
- component: LibMultiValues as any,
10
+ component: WMultiValues as any,
11
11
  title: "Components/MultiValues",
12
12
  args: {
13
13
  modelValue: ["A", "B", "C"],
14
14
  border: true
15
15
  },
16
16
  tags: ["!test"]
17
- } satisfies Meta<typeof LibMultiValues> & Meta<{ custom: string }>
17
+ } satisfies Meta<typeof WMultiValues>
18
18
 
19
19
  export default meta
20
- type Story = StoryObj<typeof LibMultiValues> // & StoryObj<typeof extraArgs>
20
+ type Story = StoryObj<typeof WMultiValues>
21
21
 
22
22
  /**
23
23
  * The multi-value component is just the values part beneath the input.
@@ -28,10 +28,10 @@ type Story = StoryObj<typeof LibMultiValues> // & StoryObj<typeof extraArgs>
28
28
  */
29
29
  export const Primary: Story = {
30
30
  render: args => ({
31
- components: { ...components, LibMultiValues },
31
+ components: { ...components, WMultiValues },
32
32
  setup: () => {
33
33
  const inputValue = ref("B")
34
- const multiValueEl = ref<typeof LibMultiValues | null>(null)
34
+ const multiValueEl = ref<typeof WMultiValues | null>(null)
35
35
  const onKeydownEnter = (e: KeyboardEvent): void => {
36
36
  if (e.key === "Enter") (args.modelValue!).push(inputValue.value)
37
37
  }
@@ -47,14 +47,14 @@ export const Primary: Story = {
47
47
  <p>Simple Input connected to multi-value.</p>
48
48
  <p>Note: You will be able to add values, including duplicates, even to the disabled/readonly version in this test, see the Input component for a properly connected approach.</p>
49
49
  <p> Press enter to add value :</p>
50
- <lib-simple-input
50
+ <WSimpleInput
51
51
  v-model="inputValue"
52
52
  @keydown="onKeydownEnter"
53
53
  >
54
- </lib-simple-input>
54
+ </WSimpleInput>
55
55
  <p>Multi-value component: </p>
56
56
  <div class="flex justify-start">
57
- <lib-multi-values
57
+ <WMultiValues
58
58
  ref="multiValueEl"
59
59
  v-bind="args"
60
60
  v-model="args.modelValue"
@@ -0,0 +1,161 @@
1
+ <template>
2
+ <div
3
+ v-if="$modelValue && $modelValue?.length > 0"
4
+ role="list"
5
+ :class="twMerge(`
6
+ multivalues
7
+ group
8
+ flex
9
+ flex-initial
10
+ items-center
11
+ justify-center
12
+ gap-1
13
+ overflow-x-scroll
14
+ scrollbar-hidden
15
+ `,
16
+ ($attrs as any)?.class)
17
+ "
18
+ :data-disabled="disabled"
19
+ :data-read-only="readonly"
20
+ :aria-label="label ? `Values for ${label}` : undefined"
21
+ v-bind="{ ...$attrs, class: undefined }"
22
+ @keydown="handleKeydown"
23
+ >
24
+ <div
25
+ role="listitem"
26
+ :data-border="border"
27
+ :class="twMerge(`
28
+ multivalues--item
29
+ flex-basis-0
30
+ min-w-2
31
+ flex
32
+ max-w-fit
33
+ flex-1
34
+ items-center
35
+ gap-0.5
36
+ overflow-hidden
37
+ px-1
38
+ text-xs
39
+ leading-none
40
+ focus-outline
41
+ outlined:outline-offset-0
42
+ `,
43
+ !(disabled || readonly) && `
44
+ group-focus:text-accent-500
45
+ focus:text-accent-500`,
46
+ border && `
47
+ rounded-sm
48
+ border-neutral-400
49
+ border
50
+ focus:border-accent-400
51
+ `,
52
+ border && (disabled || readonly) && `
53
+ border-neutral-200
54
+ focus:border-neutral-200
55
+ dark:border-neutral-800
56
+ dark:focus:border-neutral-800
57
+ `,
58
+ itemAttrs?.class
59
+ )"
60
+ :tabindex="canEdit ? (activeIndex === index ? 0 : -1) : undefined"
61
+ v-for="(value, index) of $modelValue"
62
+ :key="value"
63
+ ref="itemRefs"
64
+ @keydown.ctrl.c.prevent="copy(value.toString())"
65
+ @focus="activeIndex = index"
66
+ >
67
+ <span class="multivalues--label truncate">{{ value }}</span>
68
+ <WButton
69
+ class="multivalues--remove-button !p-0 text-sm !leading-none"
70
+ :aria-label="`Remove ${value}`"
71
+ :border="false"
72
+ :disabled="disabled || readonly"
73
+ tabindex="-1"
74
+ @click="removeVal(value)"
75
+ >
76
+ <WIcon><i-lucide-x/></WIcon>
77
+ </Wbutton>
78
+ </div>
79
+ </div>
80
+ </template>
81
+
82
+ <script setup lang="ts" generic="T extends string | number">
83
+ import { removeIfIn } from "@alanscodelog/utils/removeIfIn"
84
+ import { computed, type HTMLAttributes, nextTick, ref, useAttrs } from "vue"
85
+
86
+ import { copy } from "../../helpers/copy.js"
87
+ import type { BaseInteractiveProps, TailwindClassProp } from "../../types/index.js"
88
+ import { twMerge } from "../../utils/twMerge.js"
89
+ import WButton from "../WButton/WButton.vue"
90
+ import WIcon from "../WIcon/WIcon.vue"
91
+
92
+ defineOptions({
93
+ name: "WMultiValues",
94
+ inheritAttrs: false
95
+ })
96
+
97
+ const $attrs = useAttrs()
98
+ const props = withDefaults(defineProps<
99
+ & BaseInteractiveProps
100
+ & {
101
+ label?: string
102
+ border?: boolean
103
+ itemAttrs?: Omit<HTMLAttributes, "class"> & TailwindClassProp
104
+ }
105
+ & /** @vue-ignore */ Omit<HTMLAttributes, "class">
106
+ & /** @vue-ignore */ TailwindClassProp
107
+ >(), {
108
+ border: true
109
+ })
110
+
111
+ const canEdit = computed(() => !props.disabled && !props.readonly)
112
+ const $modelValue = defineModel<T[]>({ default: () => [] })
113
+ const itemRefs = ref<HTMLElement[]>([])
114
+ const activeIndex = ref(0)
115
+
116
+
117
+ function removeVal(value: T) {
118
+ if (!canEdit.value) return
119
+ removeIfIn($modelValue.value, value)
120
+
121
+ if ($modelValue.value.length > 0) {
122
+ if (activeIndex.value >= $modelValue.value.length) {
123
+ activeIndex.value = $modelValue.value.length - 1
124
+ }
125
+ nextTick(() => {
126
+ itemRefs.value[activeIndex.value]?.focus()
127
+ })
128
+ }
129
+ }
130
+
131
+ function handleKeydown(e: KeyboardEvent) {
132
+ if (props.disabled) return
133
+
134
+ const len = $modelValue.value.length
135
+ if (len === 0) return
136
+
137
+ if (e.key === "ArrowRight") {
138
+ activeIndex.value = (activeIndex.value + 1) % len
139
+ itemRefs.value[activeIndex.value]?.focus()
140
+ e.preventDefault()
141
+ } else if (e.key === "ArrowLeft") {
142
+ activeIndex.value = (activeIndex.value - 1 + len) % len
143
+ itemRefs.value[activeIndex.value]?.focus()
144
+ e.preventDefault()
145
+ } else if (e.key === "Delete" || e.key === "Backspace") {
146
+ if (canEdit.value) {
147
+ removeVal($modelValue.value[activeIndex.value]!)
148
+ e.preventDefault()
149
+ }
150
+ } else if (e.key === "Home") {
151
+ activeIndex.value = 0
152
+ itemRefs.value[activeIndex.value]?.focus()
153
+ e.preventDefault()
154
+ } else if (e.key === "End") {
155
+ activeIndex.value = len - 1
156
+ itemRefs.value[activeIndex.value]?.focus()
157
+ e.preventDefault()
158
+ }
159
+ }
160
+ </script>
161
+
@@ -1,16 +1,16 @@
1
1
  /* eslint-disable @typescript-eslint/naming-convention */
2
2
  import type { Meta, StoryObj } from "@storybook/vue3"
3
3
 
4
- import LibNotification from "./LibNotification.vue"
5
- import LibNotificationTestMessageComponent from "./LibNotificationTestMessageComponent.vue"
4
+ import WNotification from "./WNotification.vue"
5
+ import WNotificationTestMessageComponent from "./WNotificationTestMessageComponent.vue"
6
6
 
7
7
  import { NotificationHandler } from "../../helpers/NotificationHandler.js"
8
8
  import * as components from "../index.js"
9
9
 
10
10
  const handler = new NotificationHandler()
11
11
 
12
- const meta: Meta<typeof LibNotification> = {
13
- component: LibNotification,
12
+ const meta: Meta<typeof WNotification> = {
13
+ component: WNotification,
14
14
  title: "Components/Notification",
15
15
  args: {
16
16
 
@@ -18,21 +18,21 @@ const meta: Meta<typeof LibNotification> = {
18
18
  }
19
19
 
20
20
  export default meta
21
- type Story = StoryObj<typeof LibNotification>
21
+ type Story = StoryObj<typeof WNotification>
22
22
 
23
23
  export const Primary: Story = {
24
24
  render: args => ({
25
25
  components: {
26
26
  ...components,
27
- LibNotification,
28
- LibNotificationTestMessageComponent
27
+ WNotification,
28
+ WNotificationTestMessageComponent
29
29
  },
30
30
  setup() {
31
31
  return { args }
32
32
  },
33
33
  backgrounds: { disable: true },
34
34
  template: `
35
- <lib-notification v-bind="args"/>
35
+ <WNotification v-bind="args"/>
36
36
  `
37
37
  }),
38
38
  args: {
@@ -150,7 +150,7 @@ export const CustomMessageComponent: Story = {
150
150
  // @ts-expect-error calling protected method
151
151
  notification: handler._createEntry({
152
152
  ...Primary.args!.notification,
153
- component: LibNotificationTestMessageComponent,
153
+ component: WNotificationTestMessageComponent,
154
154
  componentProps: {
155
155
  customProp: "Custom Prop"
156
156
  }