@witchcraft/ui 0.3.26 → 0.4.0-beta.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (287) hide show
  1. package/README.md +54 -61
  2. package/dist/module.json +1 -1
  3. package/dist/module.mjs +1 -1
  4. package/dist/runtime/assets/animations.css +1 -1
  5. package/dist/runtime/assets/locales/en.json +2 -0
  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 +2 -2
  106. package/dist/runtime/injectionKeys.d.ts +1 -5
  107. package/dist/runtime/injectionKeys.js +0 -2
  108. package/dist/runtime/types/index.d.ts +85 -27
  109. package/dist/runtime/types/index.js +1 -0
  110. package/package.json +1 -1
  111. package/src/module.ts +1 -1
  112. package/src/runtime/assets/animations.css +3 -3
  113. package/src/runtime/assets/locales/en.json +2 -0
  114. package/src/runtime/build/WitchcraftUiResolver.ts +1 -1
  115. package/src/runtime/components/TestControls/TestControls.vue +3 -3
  116. package/src/runtime/components/WButton/WButton.stories.ts +112 -0
  117. package/src/runtime/components/{LibButton/LibButton.vue → WButton/WButton.vue} +34 -50
  118. package/src/runtime/components/{LibCheckbox/LibCheckbox.stories.ts → WCheckbox/WCheckbox.stories.ts} +5 -5
  119. package/src/runtime/components/WCheckbox/WCheckbox.vue +123 -0
  120. package/src/runtime/components/{LibColorInput/LibColorInput.stories.ts → WColorInput/WColorInput.stories.ts} +8 -8
  121. package/src/runtime/components/WColorInput/WColorInput.vue +112 -0
  122. package/src/runtime/components/WColorInput/WColorSwatchButton.vue +102 -0
  123. package/src/runtime/components/{LibColorPicker/LibColorPicker.stories.ts → WColorPicker/WColorPicker.stories.ts} +12 -12
  124. package/src/runtime/components/{LibColorPicker/LibColorPicker.vue → WColorPicker/WColorPicker.vue} +43 -32
  125. package/src/runtime/components/WCombobox/WCombobox.stories.ts +209 -0
  126. package/src/runtime/components/WCombobox/WCombobox.vue +446 -0
  127. package/src/runtime/components/WCombobox/storyPlays.ts +92 -0
  128. package/src/runtime/components/{LibDarkModeSwitcher/LibDarkModeSwitcher.stories.ts → WDarkModeSwitcher/WDarkModeSwitcher.stories.ts} +6 -6
  129. package/src/runtime/components/{LibDarkModeSwitcher/LibDarkModeSwitcher.vue → WDarkModeSwitcher/WDarkModeSwitcher.vue} +19 -30
  130. package/src/runtime/components/{LibDatePicker/LibDatePicker.stories.ts → WDatePicker/WDatePicker.stories.ts} +42 -34
  131. package/src/runtime/components/{LibDatePicker/LibDatePicker.vue → WDatePicker/WDatePicker.vue} +3 -7
  132. package/src/runtime/components/{LibDatePicker/LibRangeDatePicker.vue → WDatePicker/WRangeDatePicker.vue} +16 -22
  133. package/src/runtime/components/{LibDatePicker/LibSingleDatePicker.vue → WDatePicker/WSingleDatePicker.vue} +16 -22
  134. package/src/runtime/components/{LibDatePicker/LibTimeZonePicker.vue → WDatePicker/WTimeZonePicker.vue} +5 -12
  135. package/src/runtime/components/{LibDebug/LibDebug.stories.ts → WDebug/WDebug.stories.ts} +5 -5
  136. package/src/runtime/components/{LibDebug/LibDebug.vue → WDebug/WDebug.vue} +8 -11
  137. package/src/runtime/components/{LibDevOnly/LibDevOnly.vue → WDevOnly/WDevOnly.vue} +0 -4
  138. package/src/runtime/components/{LibFileInput/LibFileInput.stories.ts → WFileInput/WFileInput.stories.ts} +7 -7
  139. package/src/runtime/components/{LibFileInput/LibFileInput.vue → WFileInput/WFileInput.vue} +95 -98
  140. package/src/runtime/components/{Icon/Icon.vue → WIcon/WIcon.vue} +5 -8
  141. package/src/runtime/components/{LibMultiValues/LibMultiValues.stories.ts → WMultiValues/WMultiValues.stories.ts} +9 -9
  142. package/src/runtime/components/WMultiValues/WMultiValues.vue +161 -0
  143. package/src/runtime/components/{LibNotifications/LibNotification.stories.ts → WNotifications/WNotification.stories.ts} +9 -9
  144. package/src/runtime/components/{LibNotifications/LibNotification.vue → WNotifications/WNotification.vue} +43 -66
  145. package/src/runtime/components/WNotifications/WNotifications.stories.ts +139 -0
  146. package/src/runtime/components/{LibNotifications/LibNotifications.vue → WNotifications/WNotifications.vue} +51 -29
  147. package/src/runtime/components/WNumberInput/WNumberInput.vue +109 -0
  148. package/src/runtime/components/WPagination/WPagination.stories.ts +51 -0
  149. package/src/runtime/components/WPagination/WPagination.vue +207 -0
  150. package/src/runtime/components/{LibPalette/LibPalette.stories.ts → WPalette/WPalette.stories.ts} +6 -6
  151. package/src/runtime/components/{LibPalette/LibPalette.vue → WPalette/WPalette.vue} +3 -8
  152. package/src/runtime/components/WPopover/WPopover.stories.ts +218 -0
  153. package/src/runtime/components/WPopover/WPopover.vue +161 -0
  154. package/src/runtime/components/WPopup/WPopup.stories.ts +60 -0
  155. package/src/runtime/components/WPopup/WPopup.vue +93 -0
  156. package/src/runtime/components/WProgressBar/WProgressBar.stories.ts +119 -0
  157. package/src/runtime/components/WProgressBar/WProgressBar.vue +185 -0
  158. package/src/runtime/components/{LibRecorder/LibRecorder.stories.ts → WRecorder/WRecorder.stories.ts} +9 -6
  159. package/src/runtime/components/{LibRecorder/LibRecorder.vue → WRecorder/WRecorder.vue} +69 -68
  160. package/src/runtime/components/{LibRoot/LibRoot.vue → WRoot/WRoot.vue} +18 -15
  161. package/src/runtime/components/{LibSimpleInput/LibSimpleInput.stories.ts → WSimpleInput/WSimpleInput.stories.ts} +11 -12
  162. package/src/runtime/components/{LibSimpleInput/LibSimpleInput.vue → WSimpleInput/WSimpleInput.vue} +27 -44
  163. package/src/runtime/components/{LibTable/LibTable.stories.ts → WTable/WTable.stories.ts} +60 -52
  164. package/src/runtime/components/{LibTable/LibTable.vue → WTable/WTable.vue} +85 -87
  165. package/src/runtime/components/WTooltip/WTooltip.stories.ts +82 -0
  166. package/src/runtime/components/WTooltip/WTooltip.vue +126 -0
  167. package/src/runtime/components/index.ts +20 -20
  168. package/src/runtime/composables/index.ts +4 -4
  169. package/src/runtime/composables/useDelayedLoadingIndicator.ts +30 -0
  170. package/src/runtime/composables/useDisplayForReka.ts +37 -0
  171. package/src/runtime/composables/useFallbackId.ts +6 -0
  172. package/src/runtime/composables/useInjectedDarkMode.ts +1 -2
  173. package/src/runtime/composables/usePopupConstrainToStyle.ts +29 -0
  174. package/src/runtime/composables/useSetupDarkMode.ts +122 -4
  175. package/src/runtime/helpers/NotificationHandler.ts +2 -2
  176. package/src/runtime/injectionKeys.ts +1 -7
  177. package/src/runtime/types/index.ts +105 -32
  178. package/types/components.d.ts +13 -15
  179. package/dist/runtime/components/Aria/Aria.d.vue.ts +0 -6
  180. package/dist/runtime/components/Aria/Aria.vue +0 -16
  181. package/dist/runtime/components/Aria/Aria.vue.d.ts +0 -6
  182. package/dist/runtime/components/LibButton/LibButton.d.vue.ts +0 -37
  183. package/dist/runtime/components/LibButton/LibButton.vue.d.ts +0 -37
  184. package/dist/runtime/components/LibCheckbox/LibCheckbox.d.vue.ts +0 -41
  185. package/dist/runtime/components/LibCheckbox/LibCheckbox.vue +0 -103
  186. package/dist/runtime/components/LibCheckbox/LibCheckbox.vue.d.ts +0 -41
  187. package/dist/runtime/components/LibColorInput/LibColorInput.d.vue.ts +0 -64
  188. package/dist/runtime/components/LibColorInput/LibColorInput.vue +0 -162
  189. package/dist/runtime/components/LibColorInput/LibColorInput.vue.d.ts +0 -64
  190. package/dist/runtime/components/LibDatePicker/LibDatePicker.d.vue.ts +0 -191
  191. package/dist/runtime/components/LibDatePicker/LibDatePicker.vue.d.ts +0 -191
  192. package/dist/runtime/components/LibFileInput/LibFileInput.d.vue.ts +0 -46
  193. package/dist/runtime/components/LibFileInput/LibFileInput.vue.d.ts +0 -46
  194. package/dist/runtime/components/LibInputDeprecated/LibInputDeprecated.d.vue.ts +0 -256
  195. package/dist/runtime/components/LibInputDeprecated/LibInputDeprecated.vue +0 -387
  196. package/dist/runtime/components/LibInputDeprecated/LibInputDeprecated.vue.d.ts +0 -256
  197. package/dist/runtime/components/LibLabel/LibLabel.d.vue.ts +0 -27
  198. package/dist/runtime/components/LibLabel/LibLabel.vue +0 -45
  199. package/dist/runtime/components/LibLabel/LibLabel.vue.d.ts +0 -27
  200. package/dist/runtime/components/LibMultiValues/LibMultiValues.vue +0 -109
  201. package/dist/runtime/components/LibNotifications/LibNotification.d.vue.ts +0 -45
  202. package/dist/runtime/components/LibNotifications/LibNotification.vue.d.ts +0 -45
  203. package/dist/runtime/components/LibNotifications/LibNotifications.d.vue.ts +0 -15
  204. package/dist/runtime/components/LibNotifications/LibNotifications.vue.d.ts +0 -15
  205. package/dist/runtime/components/LibPagination/LibPagination.d.vue.ts +0 -105
  206. package/dist/runtime/components/LibPagination/LibPagination.vue +0 -229
  207. package/dist/runtime/components/LibPagination/LibPagination.vue.d.ts +0 -105
  208. package/dist/runtime/components/LibPalette/LibPalette.d.vue.ts +0 -15
  209. package/dist/runtime/components/LibPalette/LibPalette.vue.d.ts +0 -15
  210. package/dist/runtime/components/LibPopup/LibPopup.d.vue.ts +0 -52
  211. package/dist/runtime/components/LibPopup/LibPopup.vue +0 -365
  212. package/dist/runtime/components/LibPopup/LibPopup.vue.d.ts +0 -52
  213. package/dist/runtime/components/LibProgressBar/LibProgressBar.vue +0 -169
  214. package/dist/runtime/components/LibSuggestions/LibSuggestions.d.vue.ts +0 -99
  215. package/dist/runtime/components/LibSuggestions/LibSuggestions.vue +0 -178
  216. package/dist/runtime/components/LibSuggestions/LibSuggestions.vue.d.ts +0 -99
  217. package/dist/runtime/components/LibTable/LibTable.d.vue.ts +0 -125
  218. package/dist/runtime/components/LibTable/LibTable.vue.d.ts +0 -125
  219. package/dist/runtime/components/Template/NAME.d.vue.ts +0 -18
  220. package/dist/runtime/components/Template/NAME.vue +0 -27
  221. package/dist/runtime/components/Template/NAME.vue.d.ts +0 -18
  222. package/dist/runtime/components/Template/TemplateStory.d.ts +0 -7
  223. package/dist/runtime/components/Template/TemplateStory.js +0 -22
  224. package/dist/runtime/components/shared/props.d.ts +0 -171
  225. package/dist/runtime/components/shared/props.js +0 -2
  226. package/dist/runtime/composables/useAriaLabel.d.ts +0 -6
  227. package/dist/runtime/composables/useAriaLabel.js +0 -15
  228. package/dist/runtime/composables/useDarkMode.d.ts +0 -77
  229. package/dist/runtime/composables/useDarkMode.js +0 -89
  230. package/dist/runtime/composables/useDivideAttrs.d.ts +0 -27
  231. package/dist/runtime/composables/useDivideAttrs.js +0 -27
  232. package/dist/runtime/composables/useSuggestions.d.ts +0 -40
  233. package/dist/runtime/composables/useSuggestions.js +0 -263
  234. package/src/runtime/components/Aria/Aria.vue +0 -26
  235. package/src/runtime/components/LibButton/LibButton.stories.ts +0 -106
  236. package/src/runtime/components/LibCheckbox/LibCheckbox.vue +0 -131
  237. package/src/runtime/components/LibColorInput/LibColorInput.vue +0 -203
  238. package/src/runtime/components/LibInputDeprecated/LibInputDeprecated.stories.ts +0 -405
  239. package/src/runtime/components/LibInputDeprecated/LibInputDeprecated.vue +0 -419
  240. package/src/runtime/components/LibLabel/LibLabel.stories.ts +0 -33
  241. package/src/runtime/components/LibLabel/LibLabel.vue +0 -65
  242. package/src/runtime/components/LibMultiValues/LibMultiValues.vue +0 -123
  243. package/src/runtime/components/LibNotifications/LibNotifications.stories.ts +0 -131
  244. package/src/runtime/components/LibPagination/LibPagination.stories.ts +0 -49
  245. package/src/runtime/components/LibPagination/LibPagination.vue +0 -274
  246. package/src/runtime/components/LibPopup/LibPopup.stories.ts +0 -153
  247. package/src/runtime/components/LibPopup/LibPopup.vue +0 -396
  248. package/src/runtime/components/LibProgressBar/LibProgressBar.stories.ts +0 -90
  249. package/src/runtime/components/LibProgressBar/LibProgressBar.vue +0 -197
  250. package/src/runtime/components/LibSuggestions/LibSuggestions.stories.ts +0 -134
  251. package/src/runtime/components/LibSuggestions/LibSuggestions.vue +0 -212
  252. package/src/runtime/components/Template/NAME.vue +0 -49
  253. package/src/runtime/components/Template/TemplateStory.ts +0 -37
  254. package/src/runtime/components/shared/props.ts +0 -199
  255. package/src/runtime/composables/useAriaLabel.ts +0 -23
  256. package/src/runtime/composables/useDarkMode.ts +0 -199
  257. package/src/runtime/composables/useDivideAttrs.ts +0 -53
  258. package/src/runtime/composables/useSuggestions.ts +0 -339
  259. /package/dist/runtime/components/{LibColorPicker → WColorPicker}/utils/safeConvertToHsva.d.ts +0 -0
  260. /package/dist/runtime/components/{LibColorPicker → WColorPicker}/utils/safeConvertToHsva.js +0 -0
  261. /package/dist/runtime/components/{LibColorPicker → WColorPicker}/utils/safeConvertToRgba.d.ts +0 -0
  262. /package/dist/runtime/components/{LibColorPicker → WColorPicker}/utils/safeConvertToRgba.js +0 -0
  263. /package/dist/runtime/components/{LibColorPicker → WColorPicker}/utils/toLowPrecisionRgbaString.d.ts +0 -0
  264. /package/dist/runtime/components/{LibColorPicker → WColorPicker}/utils/toLowPrecisionRgbaString.js +0 -0
  265. /package/dist/runtime/components/{LibColorPicker → WColorPicker}/utils/truncate.d.ts +0 -0
  266. /package/dist/runtime/components/{LibColorPicker → WColorPicker}/utils/truncate.js +0 -0
  267. /package/dist/runtime/components/{LibDatePicker/LibRangeDatePicker.d.vue.ts → WDatePicker/WRangeDatePicker.d.vue.ts} +0 -0
  268. /package/dist/runtime/components/{LibDatePicker/LibRangeDatePicker.vue.d.ts → WDatePicker/WRangeDatePicker.vue.d.ts} +0 -0
  269. /package/dist/runtime/components/{LibDatePicker/LibSingleDatePicker.d.vue.ts → WDatePicker/WSingleDatePicker.d.vue.ts} +0 -0
  270. /package/dist/runtime/components/{LibDatePicker/LibSingleDatePicker.vue.d.ts → WDatePicker/WSingleDatePicker.vue.d.ts} +0 -0
  271. /package/dist/runtime/components/{LibDatePicker → WDatePicker}/helpers.d.ts +0 -0
  272. /package/dist/runtime/components/{LibDatePicker → WDatePicker}/helpers.js +0 -0
  273. /package/dist/runtime/components/{LibDebug/LibDebug.d.vue.ts → WDebug/WDebug.d.vue.ts} +0 -0
  274. /package/dist/runtime/components/{LibDebug/LibDebug.vue.d.ts → WDebug/WDebug.vue.d.ts} +0 -0
  275. /package/dist/runtime/components/{LibDevOnly/LibDevOnly.vue → WDevOnly/WDevOnly.vue} +0 -0
  276. /package/dist/runtime/components/{LibNotifications/LibNotificationTestMessageComponent.d.vue.ts → WNotifications/WNotificationTestMessageComponent.d.vue.ts} +0 -0
  277. /package/dist/runtime/components/{LibNotifications/LibNotificationTestMessageComponent.vue → WNotifications/WNotificationTestMessageComponent.vue} +0 -0
  278. /package/dist/runtime/components/{LibNotifications/LibNotificationTestMessageComponent.vue.d.ts → WNotifications/WNotificationTestMessageComponent.vue.d.ts} +0 -0
  279. /package/dist/runtime/components/{LibNotifications → WNotifications}/calculateNotificationProgress.d.ts +0 -0
  280. /package/dist/runtime/components/{LibNotifications → WNotifications}/calculateNotificationProgress.js +0 -0
  281. /package/src/runtime/components/{LibColorPicker → WColorPicker}/utils/safeConvertToHsva.ts +0 -0
  282. /package/src/runtime/components/{LibColorPicker → WColorPicker}/utils/safeConvertToRgba.ts +0 -0
  283. /package/src/runtime/components/{LibColorPicker → WColorPicker}/utils/toLowPrecisionRgbaString.ts +0 -0
  284. /package/src/runtime/components/{LibColorPicker → WColorPicker}/utils/truncate.ts +0 -0
  285. /package/src/runtime/components/{LibDatePicker → WDatePicker}/helpers.ts +0 -0
  286. /package/src/runtime/components/{LibNotifications/LibNotificationTestMessageComponent.vue → WNotifications/WNotificationTestMessageComponent.vue} +0 -0
  287. /package/src/runtime/components/{LibNotifications → WNotifications}/calculateNotificationProgress.ts +0 -0
@@ -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
  }