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