@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
@@ -0,0 +1,112 @@
1
+ <template>
2
+ <WPopover
3
+ :root-props="{
4
+ class: 'color-input--popover-root',
5
+ ...rootProps
6
+ }"
7
+ :content-props="{
8
+ onInteractOutside: () => { $tempValue = undefined;emit('cancel') }
9
+ }"
10
+ v-model="showPopover"
11
+ >
12
+ <template #button>
13
+ <WColorSwatchButton
14
+ :id="finalId"
15
+ :temp-value="$tempValue"
16
+ :value="$value"
17
+ @click="togglePopover"
18
+ />
19
+ </template>
20
+ <template #popover>
21
+ <div
22
+ class="color-input--popover-wrapper p-5"
23
+ >
24
+ <WColorPicker
25
+ v-if="showPopover"
26
+ :id="finalId"
27
+ :allow-alpha="allowAlpha"
28
+ :custom-representation="customRepresentation"
29
+ :string-precision="stringPrecision"
30
+ v-model="internalTempValue"
31
+ v-model:temp-value="$tempValue"
32
+ @save="save"
33
+ @cancel="cancel"
34
+ />
35
+ </div>
36
+ </template>
37
+ </Wpopover>
38
+ </template>
39
+
40
+ <script setup lang="ts">
41
+ import type { DialogRootEmits, PopoverRootProps } from "reka-ui"
42
+ import { type ButtonHTMLAttributes, type EmitsToProps, type HTMLAttributes, ref } from "vue"
43
+
44
+ import WColorSwatchButton from "./WColorSwatchButton.vue"
45
+
46
+ import { useFallbackId } from "../../composables/useFallbackId.js"
47
+ import type { HsvaColor, RgbaColor, TailwindClassProp } from "../../types/index.js"
48
+ import WColorPicker from "../WColorPicker/WColorPicker.vue"
49
+ import WPopover from "../WPopover/WPopover.vue"
50
+
51
+ defineOptions({
52
+ name: "WColorInput"
53
+ })
54
+ const props = withDefaults(defineProps<
55
+ & {
56
+ id?: string
57
+ label?: string
58
+ allowAlpha?: boolean
59
+ border?: boolean
60
+ /** See ColorPicker.copyTransform */
61
+ copyTransform?: (val: HsvaColor, stringVal: string) => any
62
+ /** See ColorPicker.allowAlpha */
63
+ stringPrecision?: number
64
+ /** See ColorPicker.customRepresentation */
65
+ customRepresentation?: {
66
+ fromHsvaToString: (hsva: HsvaColor, includeAlpha: boolean) => string
67
+ }
68
+ rootProps?: PopoverRootProps & EmitsToProps<DialogRootEmits> & Omit<HTMLAttributes, "class"> & TailwindClassProp
69
+ }
70
+ & /** @vue-ignore */ Omit<ButtonHTMLAttributes, "class">
71
+ & /** @vue-ignore */ TailwindClassProp
72
+ >(), {
73
+ allowAlpha: true,
74
+ border: true,
75
+ copyTransform: (_val: HsvaColor, stringVal: string) => stringVal,
76
+ stringPrecision: 3,
77
+ customRepresentation: undefined
78
+ })
79
+ const finalId = useFallbackId(props)
80
+
81
+ const emit = defineEmits<{
82
+ (e: "save"): void
83
+ (e: "cancel"): void
84
+ }>()
85
+
86
+
87
+ const $value = defineModel<RgbaColor>({ required: false, default: () => ({ r: 0, g: 0, b: 0 }) })
88
+ const $tempValue = defineModel<RgbaColor | undefined>("tempValue", { required: false, default: () => (undefined) })
89
+
90
+ const internalTempValue = ref({ ...$value.value })
91
+
92
+ const showPopover = ref(false)
93
+
94
+ const togglePopover = (): void => {
95
+ if (showPopover.value) {
96
+ $value.value = internalTempValue.value
97
+ }
98
+ showPopover.value = !showPopover.value
99
+ }
100
+
101
+ function save() {
102
+ $value.value = internalTempValue.value
103
+ showPopover.value = false
104
+ $tempValue.value = undefined
105
+ emit("save")
106
+ }
107
+ function cancel() {
108
+ showPopover.value = false
109
+ $tempValue.value = undefined
110
+ emit("cancel")
111
+ }
112
+ </script>
@@ -0,0 +1,102 @@
1
+ <template>
2
+ <WButton
3
+ :id="id"
4
+ :class="twMerge(`
5
+ color-input--button
6
+ p-0
7
+ flex
8
+ flex-nowrap
9
+ min-w-4
10
+ overflow-hidden
11
+ [&_.button--label]:items-stretch
12
+ [&_.button--label]:gap-0
13
+ after:hidden
14
+ `,
15
+ ($attrs as any).class
16
+ )"
17
+ :aria-label="t('color-input.aria-and-title-prefix') + stringColor"
18
+ :title="t('color-input.aria-and-title-prefix') + stringColor"
19
+ v-bind="{ ...$attrs, class: undefined }"
20
+ >
21
+ <template #label>
22
+ <div
23
+ class="
24
+ color-input--swatch-wrapper
25
+ flex
26
+ w-full
27
+ "
28
+ >
29
+ <slot v-bind="{ stringColor, classes: swatchClasses }">
30
+ <div
31
+ :class="swatchClasses"
32
+ :style="`background:${stringColor}`"
33
+ />
34
+ </slot>
35
+ <slot
36
+ v-if="tempValue"
37
+ v-bind="{ tempStringColor, classes: swatchClasses }"
38
+ name="temp"
39
+ >
40
+ <div
41
+ :class="swatchClasses"
42
+ :style="`background:${tempStringColor}`"
43
+ />
44
+ </slot>
45
+ </div>
46
+ </template>
47
+ </Wbutton>
48
+ </template>
49
+
50
+ <script setup lang="ts">
51
+ import Color from "colorjs.io"
52
+ import { type ButtonHTMLAttributes, computed, useAttrs } from "vue"
53
+
54
+ import { useInjectedI18n } from "../../composables/useInjectedI18n.js"
55
+ import type { RgbaColor, TailwindClassProp } from "../../types/index.js"
56
+ import { twMerge } from "../../utils/twMerge.js"
57
+ import WButton from "../WButton/WButton.vue"
58
+
59
+
60
+ const $attrs = useAttrs()
61
+
62
+ const t = useInjectedI18n()
63
+
64
+ const props = withDefaults(defineProps<
65
+ & {
66
+ id?: string
67
+ tempValue: RgbaColor | undefined
68
+ value: RgbaColor
69
+ }
70
+ & /** @vue-ignore */ Omit<ButtonHTMLAttributes, "class" | "value">
71
+ & /** @vue-ignore */ TailwindClassProp
72
+ >(), {
73
+ })
74
+
75
+ const swatchClasses = `
76
+ color-input--swatch
77
+ after:content-vertical-holder
78
+ min-w-4
79
+ flex-1
80
+ relative
81
+ before:content-['']
82
+ before:absolute
83
+ before:inset-0
84
+ before:bg-transparency-squares
85
+ before:z-[-1]
86
+ `
87
+
88
+
89
+ const stringColor = computed(() => new Color("srgb", [
90
+ props.value.r / 255,
91
+ props.value.g / 255,
92
+ props.value.b / 255
93
+ ], props.value.a ?? 1).toString())
94
+
95
+ const tempStringColor = computed(() => props.tempValue
96
+ ? new Color("srgb", [
97
+ props.tempValue.r / 255,
98
+ props.tempValue.g / 255,
99
+ props.tempValue.b / 255
100
+ ], props.tempValue.a ?? 1).toString()
101
+ : "")
102
+ </script>
@@ -3,12 +3,12 @@ import type { Meta, StoryObj } from "@storybook/vue3"
3
3
  import Color from "colorjs.io"
4
4
  import { ref } from "vue"
5
5
 
6
- import LibColorPicker from "./LibColorPicker.vue"
6
+ import WColorPicker from "./WColorPicker.vue"
7
7
 
8
8
  import * as components from "../index.js"
9
9
 
10
- const meta: Meta<typeof LibColorPicker> = {
11
- component: LibColorPicker,
10
+ const meta: Meta<typeof WColorPicker> = {
11
+ component: WColorPicker,
12
12
  title: "Components/ColorPicker",
13
13
  args: {
14
14
 
@@ -16,7 +16,7 @@ const meta: Meta<typeof LibColorPicker> = {
16
16
  }
17
17
 
18
18
  export default meta
19
- type Story = StoryObj<typeof LibColorPicker>
19
+ type Story = StoryObj<typeof WColorPicker>
20
20
 
21
21
  export const Primary: Story = {
22
22
  render: args => ({
@@ -38,15 +38,15 @@ export const Primary: Story = {
38
38
  }
39
39
  },
40
40
  template: `
41
- <lib-root :outline="args.outline">
42
- {{args.color}}
43
- <lib-color-picker
44
- :modelValue="args.color.value"
41
+ <WRoot :outline="args.outline">
42
+ {{args.color}}
43
+ <WColorPicker
44
+ :modelValue="args.color.value"
45
45
  v-bind="args"
46
- @update:modelValue="handleChange"
47
- >
48
- </lib-color-picker>
49
- </lib-root>
46
+ @update:modelValue="handleChange"
47
+ >
48
+ </WColorPicker>
49
+ </WRoot>
50
50
  `
51
51
  })
52
52
  }
@@ -1,6 +1,6 @@
1
1
  <template>
2
2
  <div
3
- :id="id ?? fallbackId"
3
+ :id="finalId"
4
4
  :aria-label="t('color-picker.aria')"
5
5
  :class="twMerge(`color-picker
6
6
  [--slider-size:calc(var(--spacing)_*_4)]
@@ -11,7 +11,7 @@
11
11
  max-w-[300px]
12
12
  flex flex-col items-center justify-center
13
13
  bg-neutral-50
14
- dark:bg-neutral-950
14
+ dark:bg-neutral-800
15
15
  gap-3
16
16
  p-3
17
17
  `,
@@ -20,7 +20,12 @@
20
20
  [--bg:rgb(var(--contrast-dark))]
21
21
  `,
22
22
  border && `
23
- border rounded-sm border-neutral-600
23
+ border
24
+ rounded-sm
25
+ border-neutral-300
26
+ dark:border-neutral-900
27
+ shadow-md
28
+ shadow-black/30
24
29
  `,
25
30
  ($attrs as any)?.class
26
31
  )"
@@ -43,9 +48,9 @@
43
48
  ref="pickerEl"
44
49
  />
45
50
  <div
46
- aria-live="assertive"
51
+ role="slider"
47
52
  :aria-description="ariaDescription"
48
- :aria-label="`${t('color-picker.aria.saturation')}: ${localColor.percent.s}, ${t('color-picker.aria.value')}: ${localColor.percent.s}`"
53
+ :aria-valuetext="`${t('color-picker.aria.saturation')}: ${localColor.percent.s}, ${t('color-picker.aria.value')}: ${localColor.percent.v}`"
49
54
  :class="`
50
55
  color-picker--all-handle
51
56
  ${handleClasses}
@@ -102,7 +107,7 @@
102
107
  <div
103
108
  role="slider"
104
109
  :aria-label="t('color-picker.aria.alpha-slider')"
105
- :aria-valuenow="`${localColor.percent.h}`"
110
+ :aria-valuenow="`${localColor.percent.a}`"
106
111
  :aria-valuemin="0"
107
112
  :aria-valuemax="100"
108
113
  :aria-description="ariaDescription"
@@ -137,7 +142,7 @@
137
142
  </div>
138
143
  <div class="color-picker--input-group flex flex-1 items-center gap-2">
139
144
  <slot name="input">
140
- <lib-simple-input
145
+ <WSimpleInput
141
146
  :valid="valid"
142
147
  class="color-picker--input w-full"
143
148
  :aria-label="label"
@@ -145,30 +150,30 @@
145
150
  @input="parseInput"
146
151
  @blur="onBlurFixInvalidValue"
147
152
  />
148
- <lib-button
153
+ <WButton
149
154
  class="color-picker--copy-button"
150
155
  :aria-label="t('copy')"
151
156
  @click="copy(copyTransform?.(localColor.val, localColorString) ?? localColorString)"
152
157
  >
153
- <icon><i-fa6-regular-copy/></icon>
154
- </lib-button>
158
+ <WIcon><i-lucide-copy/></WIcon>
159
+ </Wbutton>
155
160
  </slot>
156
161
  </div>
157
162
  </div>
158
163
  <slot name="buttons">
159
164
  <div class="color-picker--save-cancel-group flex w-full items-center justify-center gap-2">
160
- <lib-button
165
+ <WButton
161
166
  class="color-picker--save-button"
162
167
  @click="save()"
163
168
  >
164
169
  {{ t("save") }}
165
- </lib-button>
166
- <lib-button
170
+ </Wbutton>
171
+ <WButton
167
172
  class="color-picker--cancel-button"
168
173
  @click="emits('cancel')"
169
174
  >
170
175
  {{ t("cancel") }}
171
- </lib-button>
176
+ </Wbutton>
172
177
  </div>
173
178
  </slot>
174
179
  </div>
@@ -186,19 +191,17 @@ import { safeConvertToHsva } from "./utils/safeConvertToHsva.js"
186
191
  import { safeConvertToRgba } from "./utils/safeConvertToRgba.js"
187
192
  import { toLowPrecisionRgbaString } from "./utils/toLowPrecisionRgbaString.js"
188
193
 
189
- import IFa6RegularCopy from "~icons/fa-regular/copy"
190
-
194
+ import { useFallbackId } from "../../composables/useFallbackId.js"
191
195
  import { useInjectedI18n } from "../../composables/useInjectedI18n.js"
192
196
  import { copy } from "../../helpers/copy.js"
193
197
  import type { HsvaColor, RgbaColor } from "../../types/index.js"
194
198
  import { twMerge } from "../../utils/twMerge.js"
195
- import Icon from "../Icon/Icon.vue"
196
- import LibButton from "../LibButton/LibButton.vue"
197
- import LibSimpleInput from "../LibSimpleInput/LibSimpleInput.vue"
198
- import { getFallbackId, type LabelProps, type LinkableByIdProps } from "../shared/props.js"
199
+ import WButton from "../WButton/WButton.vue"
200
+ import WIcon from "../WIcon/WIcon.vue"
201
+ import WSimpleInput from "../WSimpleInput/WSimpleInput.vue"
199
202
 
200
203
  defineOptions({
201
- name: "LibColorPicker"
204
+ name: "WColorPicker"
202
205
  })
203
206
 
204
207
  const $attrs = useAttrs()
@@ -235,9 +238,9 @@ const emits = defineEmits<{
235
238
  }>()
236
239
 
237
240
  const props = withDefaults(defineProps<
238
- LabelProps
239
- & LinkableByIdProps
240
241
  & {
242
+ id?: string
243
+ label?: string
241
244
  allowAlpha?: boolean
242
245
  /**
243
246
  * The precision of the rgba string representation of the color. Defaults to 3. Extra trailing zeros are removed for a prettier number.
@@ -264,9 +267,8 @@ const props = withDefaults(defineProps<
264
267
  customRepresentation: undefined,
265
268
  valid: true
266
269
  })
267
-
270
+ const finalId = useFallbackId(props)
268
271
  const ariaDescription = t("color-picker.aria.description")
269
- const fallbackId = getFallbackId()
270
272
 
271
273
  const $value = defineModel<RgbaColor>({ required: false, default: () => ({ r: 0, g: 0, b: 0 }) })
272
274
  const $tempValue = defineModel<RgbaColor | undefined>("tempValue", { required: false, default: () => (undefined) })
@@ -275,6 +277,10 @@ const pickerEl = ref<HTMLCanvasElement | null>(null)
275
277
  const hueSliderEl = ref<HTMLCanvasElement | null>(null)
276
278
  const alphaSliderEl = ref<HTMLCanvasElement | null>(null)
277
279
 
280
+ let pickerCtx: CanvasRenderingContext2D | null = null
281
+ let hueSliderCtx: CanvasRenderingContext2D | null = null
282
+ let alphaSliderCtx: CanvasRenderingContext2D | null = null
283
+
278
284
  type Config = Record<string, {
279
285
  el: Ref<HTMLCanvasElement>
280
286
  xKey?: keyof HsvaColor
@@ -338,7 +344,8 @@ function onBlurFixInvalidValue() {
338
344
  }
339
345
 
340
346
  function updatePicker(el: HTMLCanvasElement, hue: number): void {
341
- const ctx = el.getContext("2d")!
347
+ if (!pickerCtx) return
348
+ const ctx = pickerCtx
342
349
  const { height, width } = el
343
350
  ctx.clearRect(0, 0, width, height)
344
351
 
@@ -357,8 +364,8 @@ function updatePicker(el: HTMLCanvasElement, hue: number): void {
357
364
  ctx.globalCompositeOperation = "source-over"
358
365
  }
359
366
 
360
- function updateSlider(el: HTMLCanvasElement, stops: ((i: number) => string) | string[], length: number = 360): void {
361
- const ctx = el.getContext("2d")!
367
+ function updateSlider(el: HTMLCanvasElement, ctx: CanvasRenderingContext2D | null, stops: ((i: number) => string) | string[], length: number = 360): void {
368
+ if (!ctx) return
362
369
  const { height, width } = el
363
370
  ctx.clearRect(0, 0, width, height)
364
371
 
@@ -438,7 +445,7 @@ const slider = {
438
445
  }
439
446
  },
440
447
  pointerdown: (e: PointerEvent, type: Types) => {
441
- const focusTargetClass = `#${props.id ?? fallbackId} .color-picker--${type}-handle`
448
+ const focusTargetClass = `#${finalId} .color-picker--${type}-handle`
442
449
  const focusTarget = document.querySelector(focusTargetClass)
443
450
  // allows enter to work when the user drags any slider as the even will be captured by the keydown listener
444
451
  if (focusTarget instanceof HTMLElement) focusTarget.focus()
@@ -476,9 +483,9 @@ function updateSliders(_: HsvaColor): void {
476
483
  hsl0.alpha = 0
477
484
  const hsl1 = color.clone()
478
485
  hsl1.alpha = 1
479
- updateSlider(alphaSliderEl.value, [hsl0.toString(), hsl1.toString()])
486
+ updateSlider(alphaSliderEl.value, alphaSliderCtx!, [hsl0.toString(), hsl1.toString()])
480
487
  }
481
- updateSlider(hueSliderEl.value!, i => `hsl(${i} 100% 50%)`)
488
+ updateSlider(hueSliderEl.value!, hueSliderCtx!, i => `hsl(${i} 100% 50%)`)
482
489
  updatePicker(pickerEl.value!, _.h)
483
490
  }
484
491
 
@@ -530,8 +537,12 @@ onMounted(() => {
530
537
  convertAndUpdateAll($tempValue.value)
531
538
  }
532
539
 
533
- const handle = document.querySelector(`#${props.id ?? fallbackId} .color-picker--all-handle`)
540
+ const handle = document.querySelector(`#${finalId} .color-picker--all-handle`)
534
541
  if (handle instanceof HTMLElement) handle.focus()
542
+
543
+ pickerCtx = pickerEl.value?.getContext("2d") ?? null
544
+ hueSliderCtx = hueSliderEl.value?.getContext("2d") ?? null
545
+ alphaSliderCtx = alphaSliderEl.value?.getContext("2d") ?? null
535
546
  })
536
547
 
537
548
  watch($value, () => {
@@ -0,0 +1,209 @@
1
+ /* eslint-disable @typescript-eslint/naming-convention */
2
+ import type { Meta, StoryObj } from "@storybook/vue3"
3
+ import { ref, watch } from "vue"
4
+
5
+ import { playAllowNewValues, playBasic, playBasicClickSelect, playBasicKeyboardSelect, playValidation } from "./storyPlays.js"
6
+ import WCombobox from "./WCombobox.vue"
7
+
8
+ import * as components from "../index.js"
9
+
10
+
11
+ const meta: Meta<typeof WCombobox> = {
12
+ component: WCombobox as any,
13
+ title: "Components/Combobox",
14
+ args: {
15
+ modelValue: "",
16
+ searchTerm: "",
17
+ emptyLabel: "No matches found",
18
+ suggestions: ["A", "AB", "ABC", "B", "BC", "C", "ABCDEFGHIJKLMNOPQRSTUVWXYZ"]
19
+ }
20
+ }
21
+
22
+ export default meta
23
+
24
+ type ExtraTestArgs = {
25
+ _simulateLoading?: boolean
26
+ _allowSave?: boolean
27
+ _headerTemplate?: string
28
+ }
29
+
30
+ type Story = StoryObj<typeof WCombobox> & { args?: ExtraTestArgs }
31
+
32
+ /**
33
+ * Primary story setup to match the DOM structure expected by the
34
+ * migrated play functions (specifically looking for data-testid="model-value").
35
+ */
36
+ export const Primary: Story = {
37
+ render: args => {
38
+ const extraArgs = args as ExtraTestArgs
39
+ return {
40
+ components,
41
+ setup() {
42
+ const modelValue = ref(args.modelValue)
43
+ const searchTerm = ref(args.searchTerm)
44
+ const suggestions = ref([...args.suggestions!])
45
+ const loading = ref(false)
46
+ const simulateLoading = ref((extraArgs)._simulateLoading)
47
+ // the component takes care of extending this so we can actually see the icon on quick loads like this
48
+ watch(searchTerm, () => {
49
+ if (simulateLoading.value) {
50
+ loading.value = true
51
+ setTimeout(() => {
52
+ loading.value = false
53
+ }, 1)
54
+ }
55
+ })
56
+ function save(value: string) {
57
+ if (!(extraArgs)._allowSave) return
58
+ const newValue: any
59
+ = typeof value === "string" && typeof suggestions.value[0] === "object"
60
+ ? { name: value, id: "new-id" }
61
+ : value
62
+ suggestions.value = [...suggestions.value, newValue]
63
+ modelValue.value = newValue
64
+ }
65
+ return {
66
+ args,
67
+ modelValue,
68
+ searchTerm,
69
+ suggestions,
70
+ loading,
71
+ simulateLoading,
72
+ save,
73
+ extraArgs
74
+ }
75
+ },
76
+ template: `
77
+ <div class="flex flex-col gap-3">
78
+ <div class="flex flex-col gap-1">
79
+ <WCheckbox v-model="simulateLoading">Simulate Loading</WCheckbox>
80
+ <WCheckbox v-model="loading">Loading (Force State)</WCheckbox>
81
+ </div>
82
+ <div class="text-xs text-neutral-500">
83
+ <div>
84
+ Current Model Value:
85
+ <span class="font-mono" data-testid="model-value">{{ modelValue }}</span>
86
+ </div>
87
+ <div>
88
+ Current Search Term:
89
+ <span class="font-mono" data-testid="search-term">{{ searchTerm }}</span>
90
+ </div>
91
+ </div>
92
+
93
+ <div class="flex flex-col gap-1">
94
+ <WCombobox
95
+ @save="save"
96
+ v-bind="args"
97
+ v-model="modelValue"
98
+ v-model:searchTerm="searchTerm"
99
+ :suggestions="suggestions"
100
+ :loading="loading"
101
+ >
102
+ ${(extraArgs)._headerTemplate ?? ""}
103
+ </WCombobox>
104
+ </div>
105
+ </div>
106
+ `
107
+ }
108
+ },
109
+ play: async (...args) => {
110
+ await playBasicClickSelect(...args)
111
+ await playBasicKeyboardSelect(...args)
112
+ await playBasic(...args)
113
+ }
114
+ }
115
+
116
+ export const RestrictToSuggestions: Story = {
117
+ ...Primary,
118
+ args: {
119
+ ...Primary.args,
120
+ restrictToSuggestions: true
121
+ },
122
+ play: async (...args) => {
123
+ await playBasicClickSelect(...args)
124
+ await playBasicKeyboardSelect(...args)
125
+ await playBasic(...args)
126
+ }
127
+ }
128
+
129
+
130
+ export const ObjectSuggestions: Story = {
131
+ ...Primary,
132
+ play: undefined,
133
+ args: {
134
+ ...Primary.args,
135
+ suggestions: [
136
+ { id: 1, name: "Apple" },
137
+ { id: 2, name: "Banana" },
138
+ { id: 3, name: "Cherry" }
139
+ ] as any[],
140
+ displayKey: "name"
141
+ }
142
+ }
143
+
144
+
145
+ export const AllowNewValues: Story = {
146
+ ...Primary,
147
+ args: {
148
+ ...Primary.args,
149
+ _allowSave: true,
150
+ _headerTemplate: `
151
+ <template #header="slotProps">
152
+ <div v-if="slotProps.isShowingEmptyLabel" :class="slotProps.class">
153
+ Press Enter to Add Value
154
+ </div>
155
+ </template>
156
+ `
157
+ },
158
+ play: playAllowNewValues
159
+ }
160
+
161
+ /** Note that when allowing new values to be added, if the input is v-modeling objects, you have to transform the object before adding it to the suggestions array. */
162
+ export const ObjectSuggestionsCustomDisplay: Story = {
163
+ ...Primary,
164
+ play: undefined,
165
+ args: {
166
+ ...Primary.args,
167
+ _allowSave: true,
168
+ suggestions: [
169
+ { id: 1, name: "Apple" },
170
+ { id: 2, name: "Banana" },
171
+ { id: 3, name: "Cherry" }
172
+ ] as any[],
173
+ displayEntry: (value: any) => {
174
+ return value.name?.toLowerCase()
175
+ }
176
+ }
177
+ }
178
+
179
+
180
+ export const CustomHeader: Story = {
181
+ ...Primary,
182
+ play: undefined,
183
+ args: {
184
+ ...Primary.args,
185
+ loading: true,
186
+ _headerTemplate: `<template #header> Custom Header </template>`
187
+ }
188
+ }
189
+
190
+ export const WithValidation: Story = {
191
+ ...Primary,
192
+ args: {
193
+ ...Primary.args,
194
+ loading: true,
195
+ isValid: (searchTerm: string) => searchTerm === "Invalid" ? "Error Message" : true,
196
+ modelValue: "Invalid"
197
+ },
198
+ play: playValidation
199
+ }
200
+
201
+ export const LoadingIndicator: Story = {
202
+ ...Primary,
203
+ play: undefined,
204
+ args: {
205
+ ...Primary.args,
206
+ _simulateLoading: true
207
+ }
208
+ }
209
+