@witchcraft/ui 0.3.24 → 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} +5 -4
  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} +5 -4
  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} +38 -50
  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} +44 -28
  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 +25 -3
  106. package/dist/runtime/helpers/NotificationHandler.js +5 -9
  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 +43 -43
  112. package/src/runtime/assets/animations.css +5 -5
  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} +24 -9
  145. package/src/runtime/components/{LibNotifications/LibNotification.vue → WNotifications/WNotification.vue} +46 -66
  146. package/src/runtime/components/WNotifications/WNotifications.stories.ts +139 -0
  147. package/src/runtime/components/{LibNotifications/LibNotifications.vue → WNotifications/WNotifications.vue} +60 -40
  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 +26 -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 -127
  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
@@ -1,6 +1,9 @@
1
1
  <template>
2
2
  <div
3
3
  v-if="notification"
4
+ :role="notification.requiresAction ? 'alertdialog' : 'status'"
5
+ :aria-labelledby="notification.title ? `title-${notification.id}` : undefined"
6
+ :aria-describedby="notification.message ? `msg-${notification.id}` : undefined"
4
7
  :class="twMerge(`
5
8
  notification
6
9
  bg-neutral-50
@@ -20,39 +23,43 @@
20
23
  focus:border-accent-500
21
24
  focus-within:border-accent-500
22
25
  `,
23
- ($attrs as any).class)"
24
- v-bind="{ ...$attrs, class: undefined }"
26
+ ($attrs as any).class,
27
+ notification.notificationAttrs?.class
28
+ )
29
+ "
30
+ v-bind="{ ...$attrs, ...(notification?.notificationAttrs ?? {}), class: undefined }"
25
31
  tabindex="0"
26
32
  :data-id="notification.id"
27
33
  ref="notificationEl"
28
34
  @keydown.enter.self="NotificationHandler.resolveToDefault(notification)"
29
- @pointerenter="notification.timeout && !notification.isPaused && emit('pause', notification)"
30
35
  >
31
36
  <slot
32
37
  name="top"
33
38
  :notification="notification"
34
39
  />
40
+
41
+
35
42
  <div
36
43
  class="
37
- notification--header
38
- flex-reverse
39
- flex
40
- justify-between
41
- items-center
42
- "
44
+ notification--header
45
+ flex-reverse
46
+ flex
47
+ justify-between
48
+ items-center
49
+ "
43
50
  >
44
51
  <slot
45
52
  v-if="notification.title"
46
53
  name="title"
47
54
  v-bind="setSlotVar('title', {
55
+ id: `title-${notification.id}`,
48
56
  title: notification.title,
49
57
  class: `
50
58
  notification--title
51
59
  focus-outline
52
60
  rounded-sm
53
61
  font-bold
54
- `,
55
- tabindex: 0
62
+ `
56
63
  })"
57
64
  >
58
65
  <div
@@ -63,8 +70,9 @@
63
70
  </slot>
64
71
  <div class="notification--spacer flex-1"/>
65
72
  <div class="notification--actions flex">
66
- <LibButton
73
+ <WButton
67
74
  :border="false"
75
+ aria-label="Copy notification content"
68
76
  class="
69
77
  notification--title-button
70
78
  notification--copy-button
@@ -73,10 +81,11 @@
73
81
  "
74
82
  @click="copy(handler ? handler.stringify(notification) : JSON.stringify(notification))"
75
83
  >
76
- <icon><i-fa6-regular-copy/></icon>
77
- </LibButton>
78
- <lib-button
84
+ <WIcon><i-lucide-copy/></WIcon>
85
+ </WButton>
86
+ <WButton
79
87
  v-if="notification.cancellable"
88
+ aria-label="Dismiss notification"
80
89
  class="
81
90
  notification--title-button
82
91
  notification--cancel-button
@@ -84,8 +93,8 @@
84
93
  :border="false"
85
94
  @click="NotificationHandler.dismiss(notification)"
86
95
  >
87
- <icon><i-fa6-solid-xmark/></icon>
88
- </lib-button>
96
+ <WIcon><i-lucide-x/></WIcon>
97
+ </Wbutton>
89
98
  </div>
90
99
  </div>
91
100
  <slot
@@ -101,12 +110,12 @@
101
110
  dark:text-neutral-200
102
111
  mb-1
103
112
  `,
104
- message: notification.message,
105
- tabindex: 0
113
+ message: notification.message
106
114
  })"
107
115
  >
108
116
  <div
109
117
  v-bind="slotVars.message"
118
+ :id="`msg-${notification.id}`"
110
119
  >
111
120
  {{ notification.message }}
112
121
  </div>
@@ -115,6 +124,7 @@
115
124
  v-if="notification.component"
116
125
  :is="notification.component"
117
126
  v-bind="{
127
+ notification,
118
128
  message: notification.message,
119
129
  messageClasses: `
120
130
  notification--message
@@ -144,7 +154,7 @@
144
154
  gap-2
145
155
  "
146
156
  >
147
- <lib-button
157
+ <WButton
148
158
  :label="option"
149
159
  :class="twMerge(`
150
160
  notification--button
@@ -164,21 +174,18 @@
164
174
  </template>
165
175
 
166
176
  <script setup lang="ts">
167
- import { computed, type HTMLAttributes, onBeforeUnmount, onMounted, ref, useAttrs } from "vue"
168
-
169
- import IFa6RegularCopy from "~icons/fa6-regular/copy"
170
- import IFa6SolidXmark from "~icons/fa6-solid/xmark"
177
+ import { computed, type HTMLAttributes, onMounted, ref, useAttrs } from "vue"
171
178
 
172
179
  import { useSlotVars } from "../../composables/useSlotVars.js"
173
180
  import { copy } from "../../helpers/copy.js"
174
181
  import { type NotificationEntry, NotificationHandler } from "../../helpers/NotificationHandler.js"
182
+ import type { TailwindClassProp } from "../../types/index.js"
175
183
  import { twMerge } from "../../utils/twMerge.js"
176
- import Icon from "../Icon/Icon.vue"
177
- import LibButton from "../LibButton/LibButton.vue"
178
- import type { TailwindClassProp } from "../shared/props.js"
184
+ import WButton from "../WButton/WButton.vue"
185
+ import WIcon from "../WIcon/WIcon.vue"
179
186
 
180
187
  defineOptions({
181
- name: "LibNotification",
188
+ name: "WNotification",
182
189
  inheritAttrs: false
183
190
  })
184
191
  const $attrs = useAttrs()
@@ -186,14 +193,17 @@ const $attrs = useAttrs()
186
193
  const { setSlotVar, slotVars } = useSlotVars()
187
194
 
188
195
 
189
- const props = withDefaults(defineProps<Props>(), {
196
+ const props = withDefaults(defineProps<
197
+ & {
198
+ notification: NotificationEntry
199
+ handler?: NotificationHandler
200
+ }
201
+ & /** @vue-ignore */ Omit<HTMLAttributes, "class">
202
+ & /** @vue-ignore */ TailwindClassProp
203
+ >(), {
190
204
  handler: undefined
191
205
  })
192
206
 
193
- const emit = defineEmits<{
194
- (e: "pause", notification: NotificationEntry): void
195
- (e: "resume", notification: NotificationEntry): void
196
- }>()
197
207
 
198
208
  const getColor = (notification: NotificationEntry, option: string): "ok" | "primary" | "danger" | "secondary" => {
199
209
  return notification.dangerous.includes(option)
@@ -203,51 +213,21 @@ const getColor = (notification: NotificationEntry, option: string): "ok" | "prim
203
213
  : "secondary"
204
214
  }
205
215
 
206
- /* Todo make this more flexible? */
207
216
 
217
+ /* Todo make this more flexible? */
208
218
  const buttonColors = computed(() => props.notification.options.map((option: any /* what ??? */) => getColor(props.notification, option)))
209
219
 
210
220
  const notificationEl = ref<null | HTMLElement>(null)
211
221
 
212
- const mousedownAbortController = new AbortController()
213
-
214
222
  onMounted(() => {
215
- notificationEl.value?.focus()
216
- if (props.notification.timeout) {
217
- window.addEventListener("pointerdown", e => {
218
- if (!e.target || !(e.target instanceof HTMLElement)) return
219
- if (e.target === notificationEl.value || notificationEl.value?.contains(e.target)) {
220
- if (props.notification.isPaused) return
221
- emit("pause", props.notification)
222
- } else {
223
- if (!props.notification.isPaused) return
224
- emit("resume", props.notification)
225
- }
226
- }, { signal: mousedownAbortController.signal })
223
+ if (props.notification.requiresAction) {
224
+ notificationEl.value?.focus()
227
225
  }
228
226
  })
229
227
 
230
- onBeforeUnmount(() => {
231
- mousedownAbortController.abort()
232
- })
233
-
234
228
  defineExpose({
235
229
  focus: () => {
236
230
  notificationEl.value?.focus()
237
231
  }
238
232
  })
239
233
  </script>
240
-
241
- <script lang="ts">
242
- type RealProps = {
243
- notification: NotificationEntry
244
- handler?: NotificationHandler
245
- }
246
-
247
- interface Props
248
- extends
249
- /** @vue-ignore */
250
- Partial<Omit<HTMLAttributes, "class"> & TailwindClassProp>,
251
- RealProps
252
- {}
253
- </script>
@@ -0,0 +1,139 @@
1
+ /* eslint-disable @typescript-eslint/naming-convention */
2
+ import { faker } from "@faker-js/faker"
3
+ import type { Meta, StoryObj } from "@storybook/vue3"
4
+ import { computed, ref } from "vue"
5
+
6
+ import WNotifications from "./WNotifications.vue"
7
+
8
+ import { NotificationHandler } from "../../helpers/NotificationHandler.js"
9
+ import * as components from "../index.js"
10
+
11
+ type ExtraTestArgs = {
12
+ _withTitle?: boolean
13
+ }
14
+ const meta: Meta<typeof WNotifications> = {
15
+ component: WNotifications,
16
+ title: "Components/Notifications",
17
+ args: {
18
+ _withTitle: true
19
+ } satisfies ExtraTestArgs as any
20
+ }
21
+
22
+ export default meta
23
+
24
+ type Story = StoryObj<typeof WNotifications> & {
25
+ args?: ExtraTestArgs
26
+ }
27
+
28
+ export const Primary: Story = {
29
+ render: args => {
30
+ const extraArgs = args as ExtraTestArgs
31
+ return {
32
+ components,
33
+ setup() {
34
+ const handler = new NotificationHandler({})
35
+
36
+ let count = 0
37
+
38
+ const withTitle = ref(extraArgs._withTitle)
39
+ const disableTimeout = ref(false)
40
+ const lotsOfText = ref(false)
41
+ const paragraphs = `\n Simulating lots of text:\n${faker.lorem.paragraphs(20)}`
42
+ const extraText = computed(() => lotsOfText.value ? paragraphs : "")
43
+
44
+ const notifyRequiresAction = (options: any) => {
45
+ count++
46
+ void handler.notify({
47
+ title: withTitle.value ? `Notification(${count})` : undefined,
48
+ message: `This is a cancellable notification that requires action. Pick an option:${extraText.value}`,
49
+ requiresAction: true,
50
+ options: ["Ok", "Default Answer", "Cancel"],
51
+ default: "Default Answer",
52
+ cancellable: true,
53
+ ...options
54
+ })
55
+ }
56
+
57
+ const notifyWithDangerousOption = () => {
58
+ count++
59
+ void handler.notify({
60
+ title: withTitle.value ? `Notification(${count})` : undefined,
61
+ message: `This is a cancellable notification that has a dangerous option. Pick an option:${extraText.value}`,
62
+ options: ["Ok", "Default Answer", "Dangerous Option", "Cancel"],
63
+ cancellable: true,
64
+ default: "Default Answer",
65
+ dangerous: ["Dangerous Option"]
66
+ })
67
+ }
68
+ const notifyNonCancellable = () => {
69
+ count++
70
+ void handler.notify({
71
+ title: withTitle.value ? `Notification(${count})` : undefined,
72
+ message: `This is a non-cancellable notification. Pick an option:${extraText.value}`,
73
+ options: ["Ok", "Default Answer"],
74
+ default: "Default Answer",
75
+ cancellable: false
76
+ })
77
+ }
78
+ const notifyNonCancellableRequiresAction = () => {
79
+ count++
80
+ void handler.notify({
81
+ title: withTitle.value ? `Notification(${count})` : undefined,
82
+ message: `This is a non-cancellable notification. Pick an option:${extraText.value}`,
83
+ requiresAction: true,
84
+ options: ["Ok", "Default Answer"],
85
+ default: "Default Answer",
86
+ cancellable: false
87
+ })
88
+ }
89
+ const notifyTimeoutable = () => {
90
+ count++
91
+ void handler.notify({
92
+ title: withTitle.value ? `Notification(${count})` : undefined,
93
+ message: `This is a notification. No action required.${extraText.value}`,
94
+ timeout: disableTimeout.value ? false : 5000
95
+ })
96
+ }
97
+ return {
98
+ notifyRequiresAction,
99
+ notifyTimeoutable,
100
+ notifyNonCancellable,
101
+ notifyWithDangerousOption,
102
+ notifyNonCancellableRequiresAction,
103
+ handler,
104
+ withTitle,
105
+ disableTimeout,
106
+ lotsOfText,
107
+ args: {
108
+ outline: false,
109
+ ...args
110
+ }
111
+ }
112
+ },
113
+ backgrounds: { disable: true },
114
+ // <WDebug>{{args.handler}}</WDebug>
115
+ template: `
116
+ <WRoot :outline="args.outline" :notification-handler="handler">
117
+ <WButton :label="'Notify Timeoutable'" @click="notifyTimeoutable()"></WButton>
118
+ <WButton :label="'Notify RequiresAction (Cancellable)'" @click="notifyRequiresAction()"></WButton>
119
+ <WButton :label="'Notify RequiresAction (Cancellable) - Custom Width'" @click="notifyRequiresAction({cancellable:true,notificationProps: {class: 'sm:max-w-[90dvw]'}})"></WButton>
120
+ <WButton :label="'Notify Non-Cancellable that RequiresAction'" @click="notifyNonCancellableRequiresAction()"></WButton>
121
+ <WButton :label="'Notify With Dangerous Option (Cancellable)'" @click="notifyWithDangerousOption()"></WButton>
122
+ <WButton :label="'Notify Non-Cancellable'" @click="notifyNonCancellable()"></WButton>
123
+ <WCheckbox v-model="lotsOfText">Use lots of text</WCheckbox>
124
+ <WCheckbox v-model="disableTimeout">Disable Timeout</WCheckbox>
125
+ <WCheckbox v-model="withTitle">With Title</WCheckbox>
126
+ <WNotifications :handler="handler" />
127
+ History:
128
+ <WDebug>
129
+ <template v-for="entry in handler.history">
130
+ Message: {{entry.message}}
131
+ Resolution: {{entry.resolution}}
132
+ <br>
133
+ </template>
134
+ </WDebug>
135
+ </WRoot>
136
+ `
137
+ }
138
+ }
139
+ }
@@ -24,7 +24,7 @@
24
24
  `, ($attrs as any).class)"
25
25
  v-bind="{ ...$attrs, class: undefined }"
26
26
  >
27
- <lib-notification
27
+ <WNotification
28
28
  :handler="handler"
29
29
  tabindex="0"
30
30
  :notification="notification"
@@ -40,11 +40,9 @@
40
40
  "
41
41
  v-for="notification of notifications"
42
42
  :key="notification.id"
43
- @pause="handler.pause(notification)"
44
- @resume="handler.resume(notification)"
45
43
  >
46
44
  <template #top>
47
- <LibProgressBar
45
+ <WProgressBar
48
46
  v-if="notification.timeout !== undefined"
49
47
  class="
50
48
  w-full
@@ -57,7 +55,7 @@
57
55
  :progress="calculateNotificationProgress(notification, time!)"
58
56
  />
59
57
  </template>
60
- </lib-notification>
58
+ </Wnotification>
61
59
  </TransitionGroup>
62
60
  <!-- we don't need to worry about the user accidentally closing a non-closable dialog as keeping open=true (which the handler handles when the component tries to close) is enough to keep it open without issues -->
63
61
  <AlertDialogRoot
@@ -67,7 +65,7 @@
67
65
  <AlertDialogPortal :to="'#root'">
68
66
  <AlertDialogOverlay
69
67
  class="
70
- fixed inset-0 z-30
68
+ fixed inset-0 z-90
71
69
  bg-neutral-950/20
72
70
  data-[state=open]:animate-overlayShow
73
71
  "
@@ -77,27 +75,25 @@
77
75
  data-[state=open]:animate-contentShow
78
76
  max-sm:data-[state=open]:animate-slideInUp
79
77
  fixed
80
- flex
81
- max-h-[80dvh]
82
- top-[50%]
83
- left-[50%]
78
+ flex justify-center
79
+ top-1/2
80
+ left-1/2
81
+ w-full
84
82
  sm:translate-x-[-50%]
85
83
  sm:translate-y-[-50%]
86
- max-w-[700px]
87
- max-sm:bottom-2
84
+ p-2
85
+ max-sm:bottom-0
88
86
  max-sm:top-[unset]
89
- max-sm:left-2
90
- max-sm:right-2
91
- max-sm:w-[calc(100%-var(--spacing)*4)]
87
+ max-sm:left-0
92
88
  z-100
93
89
  "
90
+ @interact-outside="topNotifications[0] && NotificationHandler.dismiss(topNotifications[0])"
94
91
  >
95
- <lib-notification
92
+ <WNotification
96
93
  class="
97
94
  w-full
98
95
  sm:max-w-[700px]
99
- max-w-full
100
- max-h-full
96
+ max-h-[80dvh]
101
97
  top-notification
102
98
  text-md
103
99
  gap-2
@@ -121,7 +117,7 @@
121
117
  {{ slotProps.message }}
122
118
  </AlertDialogDescription>
123
119
  </template>
124
- </lib-notification>
120
+ </Wnotification>
125
121
  </AlertDialogContent>
126
122
  </AlertDialogPortal>
127
123
  </AlertDialogRoot>
@@ -136,24 +132,36 @@ import {
136
132
  AlertDialogRoot,
137
133
  AlertDialogTitle
138
134
  } from "reka-ui"
139
- import { computed } from "vue"
135
+ import type { HTMLAttributes } from "vue"
136
+ import { computed, onBeforeUnmount, onMounted, useAttrs } from "vue"
140
137
 
141
138
  import { calculateNotificationProgress } from "./calculateNotificationProgress.js"
142
- import LibNotification from "./LibNotification.vue"
139
+ import WNotification from "./WNotification.vue"
143
140
 
144
141
  import { useNotificationHandler } from "../../composables/useNotificationHandler.js"
145
142
  import { useTimeConditionally } from "../../composables/useTimeConditionally.js"
146
143
  import { NotificationHandler } from "../../helpers/NotificationHandler.js"
144
+ import type { TailwindClassProp } from "../../types/index.js"
147
145
  import { twMerge } from "../../utils/twMerge.js"
148
- import LibProgressBar from "../LibProgressBar/LibProgressBar.vue"
149
- import type { LinkableByIdProps, TailwindClassProp } from "../shared/props.js"
146
+ import WProgressBar from "../WProgressBar/WProgressBar.vue"
147
+
150
148
 
151
149
  defineOptions({
152
- name: "LibNotifications",
150
+ name: "WNotifications",
153
151
  inheritAttrs: false
154
152
  })
155
153
 
156
- const props = defineProps<Props>()
154
+ const $attrs = useAttrs()
155
+
156
+ const props = defineProps<
157
+ & {
158
+ /** If not provided, uses the global handler (this requires useNotificationHandler be called and configured). */
159
+ handler?: NotificationHandler
160
+ progressUpdateInterval?: number
161
+ }
162
+ & /** @vue-ignore */ Omit<HTMLAttributes, "class">
163
+ & /** @vue-ignore */ TailwindClassProp
164
+ >()
157
165
 
158
166
  const handler = props.handler ?? useNotificationHandler()
159
167
 
@@ -165,23 +173,35 @@ const fetchTime = computed(() => {
165
173
  })
166
174
 
167
175
  const { time } = useTimeConditionally(fetchTime, { refreshInterval: props.progressUpdateInterval })
168
- </script>
169
176
 
170
- <script lang="ts">
171
- import type { HTMLAttributes } from "vue"
177
+ function handleGlobalPointerDown(e: PointerEvent) {
178
+ const target = e.target as HTMLElement
179
+ const notificationEl = target.closest(".notification") as HTMLElement
180
+ const rawId = notificationEl?.dataset.id
181
+ const clickedId = rawId ? Number.parseInt(rawId, 10) : null
172
182
 
173
- type RealProps
174
- = & LinkableByIdProps
175
- & {
176
- /** If not provided, uses the global handler (this requires useNotificationHandler be called and configured). */
177
- handler?: NotificationHandler
178
- progressUpdateInterval?: number
183
+ if (clickedId !== null) {
184
+ // User clicked a specific notification -> Pause it
185
+ const entry = handler.queue.find(n => n.id === clickedId)
186
+ if (entry && entry.timeout && !entry.isPaused) {
187
+ handler.pause(entry)
179
188
  }
189
+ } else {
190
+ // User clicked outside -> Resume all paused ephemeral notifications
191
+ handler.queue.forEach(entry => {
192
+ if (entry.timeout && entry.isPaused) {
193
+ handler.resume(entry)
194
+ }
195
+ })
196
+ }
197
+ }
198
+
199
+ onMounted(() => {
200
+ window.addEventListener("pointerdown", handleGlobalPointerDown)
201
+ })
180
202
 
181
- interface Props
182
- extends
183
- /** @vue-ignore */
184
- Partial<Omit<HTMLAttributes, "class"> & TailwindClassProp>,
185
- RealProps
186
- {}
203
+ onBeforeUnmount(() => {
204
+ window.removeEventListener("pointerdown", handleGlobalPointerDown)
205
+ })
187
206
  </script>
207
+
@@ -0,0 +1,109 @@
1
+ <template>
2
+ <NumberFieldRoot
3
+ :min="props.min"
4
+ :max="props.max"
5
+ :step="props.step"
6
+ :format-options="{
7
+ signDisplay: 'exceptZero',
8
+ ...rootProps?.formatOptions
9
+ }"
10
+ :class="twMerge(`
11
+ flex
12
+ items-center
13
+ justify-center
14
+ metadata-input-border
15
+ rounded-sm
16
+ focus-outline-within
17
+ gap-2
18
+ `,
19
+ !isValid && 'text-danger-500',
20
+ rootProps?.class
21
+ )"
22
+ v-bind="{ ...rootProps, class: undefined }"
23
+ v-model="modelValue"
24
+ >
25
+ <NumberFieldDecrement
26
+ class="
27
+ px-1
28
+ flex-1
29
+ hover:bg-neutral-200
30
+ dark:hover:bg-neutral-800
31
+ [&_.button--label]:justify-start
32
+ rounded-bl-sm
33
+ rounded-tl-sm
34
+ cursor-pointer
35
+ disabled:cursor-not-allowed
36
+ "
37
+ >
38
+ <WIcon><i-radix-icons-minus/></WIcon>
39
+ </NumberFieldDecrement>
40
+
41
+ <NumberFieldInput
42
+ :class="twMerge(
43
+ `
44
+ bg-transparent
45
+ tabular-nums
46
+ text-center
47
+ focus-outline-none
48
+ px-1
49
+ shrink-1
50
+ basis-[20ch]
51
+ grow-0
52
+ min-w-0
53
+ [&::-webkit-outer-spin-button]:appearance-none
54
+ [&::-webkit-inner-spin-button]:appearance-none
55
+ [-moz-appearance:textfield]
56
+ `,
57
+ !isValid && 'text-danger-500',
58
+ inputProps?.class
59
+ )"
60
+ v-bind="{ ...inputProps, class: undefined }"
61
+ />
62
+
63
+ <NumberFieldIncrement
64
+ class="
65
+ px-1
66
+ flex-1
67
+ hover:bg-neutral-200
68
+ dark:hover:bg-neutral-800
69
+ [&_.button--label]:justify-end
70
+ rounded-br-sm
71
+ rounded-tr-sm
72
+ cursor-pointer
73
+ disabled:cursor-not-allowed
74
+ "
75
+ >
76
+ <WIcon><i-radix-icons-plus/></WIcon>
77
+ </NumberFieldIncrement>
78
+ </NumberFieldRoot>
79
+ </template>
80
+
81
+ <script setup lang="ts">
82
+ import type {
83
+ NumberFieldInputProps,
84
+ NumberFieldRootEmits,
85
+ NumberFieldRootProps
86
+ } from "reka-ui"
87
+ import type { HTMLAttributes, InputHTMLAttributes } from "vue"
88
+
89
+ import type { EmitsToProps, TailwindClassProp } from "../../types/index.js"
90
+ import { twMerge } from "../../utils/twMerge.js"
91
+
92
+ const props = withDefaults(defineProps<
93
+ & {
94
+ id?: string
95
+ max?: NumberFieldRootProps["max"]
96
+ min?: NumberFieldRootProps["min"]
97
+ step?: NumberFieldRootProps["step"]
98
+ isValid?: (value: any) => boolean
99
+ inputProps?: NumberFieldInputProps & Omit<InputHTMLAttributes, "class"> & TailwindClassProp
100
+ rootProps?: NumberFieldRootProps & EmitsToProps<NumberFieldRootEmits> & Omit<HTMLAttributes, "class"> & TailwindClassProp
101
+ }
102
+ >(), {
103
+ max: Number.MAX_SAFE_INTEGER,
104
+ min: Number.MIN_SAFE_INTEGER,
105
+ isValid: (value: any) => { return typeof value === "number" && !Number.isNaN(value) }
106
+ })
107
+
108
+ const modelValue = defineModel<number>({ required: true })
109
+ </script>