@witchcraft/ui 0.3.26 → 0.4.0-beta.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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 +1 -1
- 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 +109 -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} +40 -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 +109 -0
- package/dist/runtime/components/WCombobox/WCombobox.vue +402 -0
- package/dist/runtime/components/WCombobox/WCombobox.vue.d.ts +109 -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} +16 -21
- package/dist/runtime/components/{LibDatePicker/LibSingleDatePicker.vue → WDatePicker/WSingleDatePicker.vue} +16 -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} +9 -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} +71 -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 +149 -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} +32 -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 +43 -0
- package/dist/runtime/components/WPopover/WPopover.vue +138 -0
- package/dist/runtime/components/WPopover/WPopover.vue.d.ts +43 -0
- package/dist/runtime/components/WPopup/WPopup.d.vue.ts +41 -0
- package/dist/runtime/components/WPopup/WPopup.vue +74 -0
- package/dist/runtime/components/WPopup/WPopup.vue.d.ts +41 -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} +9 -16
- package/dist/runtime/components/{LibSimpleInput/LibSimpleInput.vue → WSimpleInput/WSimpleInput.vue} +12 -23
- package/dist/runtime/components/{LibSimpleInput/LibSimpleInput.vue.d.ts → WSimpleInput/WSimpleInput.vue.d.ts} +9 -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 +111 -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 +1 -1
- 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 +123 -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} +43 -32
- package/src/runtime/components/WCombobox/WCombobox.stories.ts +209 -0
- package/src/runtime/components/WCombobox/WCombobox.vue +446 -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} +16 -22
- package/src/runtime/components/{LibDatePicker/LibSingleDatePicker.vue → WDatePicker/WSingleDatePicker.vue} +16 -22
- 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} +8 -11
- 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} +95 -98
- 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 +161 -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} +43 -66
- 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 +161 -0
- package/src/runtime/components/WPopup/WPopup.stories.ts +60 -0
- package/src/runtime/components/WPopup/WPopup.vue +93 -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} +27 -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 -87
- package/src/runtime/components/WTooltip/WTooltip.stories.ts +82 -0
- package/src/runtime/components/WTooltip/WTooltip.vue +126 -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 +13 -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,56 @@
|
|
|
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 IFa6SolidArrowUpFromBracket from "~icons/fa6-solid/arrow-up-from-bracket";
|
|
219
|
-
import IFa6SolidXmark from "~icons/fa6-solid/xmark";
|
|
220
|
-
import { useDivideAttrs } from "../../composables/useDivideAttrs.js";
|
|
228
|
+
import { computed, onBeforeUnmount, ref, shallowReactive, watch } from "vue";
|
|
229
|
+
import { useFallbackId } from "../../composables/useFallbackId.js";
|
|
221
230
|
import { useInjectedI18n } from "../../composables/useInjectedI18n.js";
|
|
222
231
|
import { twMerge } from "../../utils/twMerge.js";
|
|
223
|
-
import
|
|
224
|
-
import
|
|
225
|
-
import { getFallbackId } from "../shared/props.js";
|
|
232
|
+
import WButton from "../WButton/WButton.vue";
|
|
233
|
+
import WIcon from "../WIcon/WIcon.vue";
|
|
226
234
|
const t = useInjectedI18n();
|
|
227
235
|
const el = ref(null);
|
|
236
|
+
const props = defineProps({
|
|
237
|
+
id: { type: String, required: false },
|
|
238
|
+
multiple: { type: Boolean, required: false, default: false },
|
|
239
|
+
formats: { type: Array, required: false, default: () => ["image/*", ".jpeg", ".jpg", ".png"] },
|
|
240
|
+
compact: { type: Boolean, required: false, default: false },
|
|
241
|
+
inputAttrs: { type: Object, required: false },
|
|
242
|
+
wrapperAttrs: { type: Object, required: false }
|
|
243
|
+
});
|
|
244
|
+
const finalId = useFallbackId(props);
|
|
245
|
+
const emits = defineEmits(["input", "errors"]);
|
|
228
246
|
const files = shallowReactive([]);
|
|
229
247
|
const errors = shallowReactive([]);
|
|
230
|
-
const
|
|
248
|
+
const isErrored = ref(false);
|
|
231
249
|
const isHovered = ref(false);
|
|
232
250
|
function clearFiles() {
|
|
233
|
-
el.value
|
|
251
|
+
if (el.value) {
|
|
252
|
+
el.value.value = "";
|
|
253
|
+
}
|
|
254
|
+
for (const entry of files) {
|
|
255
|
+
if (entry.previewUrl) URL.revokeObjectURL(entry.previewUrl);
|
|
256
|
+
}
|
|
234
257
|
files.splice(0, files.length);
|
|
235
258
|
}
|
|
236
259
|
watch(files, () => {
|
|
@@ -238,37 +261,30 @@ watch(files, () => {
|
|
|
238
261
|
});
|
|
239
262
|
watch(errors, () => {
|
|
240
263
|
if (errors.length > 0) {
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
errorFlashing.value = false;
|
|
244
|
-
}, 500);
|
|
245
|
-
emits("errors", [...errors]);
|
|
246
|
-
errors.splice(0, errors.length);
|
|
264
|
+
isErrored.value = true;
|
|
265
|
+
emits("errors", [...errors], clearErrors);
|
|
247
266
|
}
|
|
248
267
|
});
|
|
268
|
+
function clearErrors() {
|
|
269
|
+
isErrored.value = false;
|
|
270
|
+
errors.splice(0, errors.length);
|
|
271
|
+
}
|
|
249
272
|
defineOptions({
|
|
250
|
-
name: "
|
|
273
|
+
name: "WFileInput",
|
|
251
274
|
inheritAttrs: false
|
|
252
275
|
});
|
|
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
276
|
const mimeTypes = computed(() => props.formats?.filter((_) => !_.startsWith(".")) ?? []);
|
|
263
277
|
const extensions = computed(() => props.formats?.filter((_) => _.startsWith(".")) ?? []);
|
|
264
|
-
|
|
265
|
-
const
|
|
266
|
-
|
|
267
|
-
}
|
|
268
|
-
|
|
278
|
+
onBeforeUnmount(() => {
|
|
279
|
+
for (const entry of files) {
|
|
280
|
+
if (entry.previewUrl) URL.revokeObjectURL(entry.previewUrl);
|
|
281
|
+
}
|
|
282
|
+
});
|
|
283
|
+
function removeFile(entry) {
|
|
284
|
+
if (entry.previewUrl) URL.revokeObjectURL(entry.previewUrl);
|
|
269
285
|
const index = files.indexOf(entry);
|
|
270
|
-
files.splice(index, 1);
|
|
271
|
-
}
|
|
286
|
+
if (index > -1) files.splice(index, 1);
|
|
287
|
+
}
|
|
272
288
|
const extensionsList = computed(() => extensions.value.join(", "));
|
|
273
289
|
function onDrop(e) {
|
|
274
290
|
if ("dataTransfer" in e && e.dataTransfer && e.dataTransfer.files && e.dataTransfer.files.length > 0) {
|
|
@@ -304,12 +320,13 @@ function updateFiles(filesList) {
|
|
|
304
320
|
errs.push(err);
|
|
305
321
|
continue;
|
|
306
322
|
}
|
|
323
|
+
const previewUrl = isImg ? URL.createObjectURL(file) : void 0;
|
|
307
324
|
if (errs.length > 0) continue;
|
|
308
325
|
if (!files.find((_) => _.file === file)) {
|
|
309
326
|
if (props.multiple || files.length < 1) {
|
|
310
|
-
files.push({ file, isImg });
|
|
327
|
+
files.push({ file, isImg, previewUrl });
|
|
311
328
|
} else {
|
|
312
|
-
files.splice(0, files.length, { file, isImg });
|
|
329
|
+
files.splice(0, files.length, { file, isImg, previewUrl });
|
|
313
330
|
}
|
|
314
331
|
}
|
|
315
332
|
}
|
|
@@ -317,15 +334,12 @@ function updateFiles(filesList) {
|
|
|
317
334
|
errors.splice(0, errors.length, ...errs);
|
|
318
335
|
return false;
|
|
319
336
|
} else if (errors.length > 0) {
|
|
320
|
-
|
|
337
|
+
clearErrors();
|
|
321
338
|
}
|
|
322
339
|
return void 0;
|
|
323
340
|
}
|
|
324
341
|
defineExpose({
|
|
325
|
-
clearFiles
|
|
342
|
+
clearFiles,
|
|
343
|
+
clearErrors
|
|
326
344
|
});
|
|
327
345
|
</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,149 @@
|
|
|
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 { copy } from "../../helpers/copy.js";
|
|
90
|
+
import { twMerge } from "../../utils/twMerge.js";
|
|
91
|
+
import WButton from "../WButton/WButton.vue";
|
|
92
|
+
import WIcon from "../WIcon/WIcon.vue";
|
|
93
|
+
defineOptions({
|
|
94
|
+
name: "WMultiValues",
|
|
95
|
+
inheritAttrs: false
|
|
96
|
+
});
|
|
97
|
+
const $attrs = useAttrs();
|
|
98
|
+
const props = defineProps({
|
|
99
|
+
disabled: { type: Boolean, required: false },
|
|
100
|
+
readonly: { type: Boolean, required: false },
|
|
101
|
+
border: { type: Boolean, required: false, default: true },
|
|
102
|
+
unstyle: { type: Boolean, required: false },
|
|
103
|
+
label: { type: String, required: false },
|
|
104
|
+
itemAttrs: { type: Object, required: false }
|
|
105
|
+
});
|
|
106
|
+
const canEdit = computed(() => !props.disabled && !props.readonly);
|
|
107
|
+
const $modelValue = defineModel({ type: Array, ...{ default: () => [] } });
|
|
108
|
+
const itemRefs = ref([]);
|
|
109
|
+
const activeIndex = ref(0);
|
|
110
|
+
function removeVal(value) {
|
|
111
|
+
if (!canEdit.value) return;
|
|
112
|
+
removeIfIn($modelValue.value, value);
|
|
113
|
+
if ($modelValue.value.length > 0) {
|
|
114
|
+
if (activeIndex.value >= $modelValue.value.length) {
|
|
115
|
+
activeIndex.value = $modelValue.value.length - 1;
|
|
116
|
+
}
|
|
117
|
+
nextTick(() => {
|
|
118
|
+
itemRefs.value[activeIndex.value]?.focus();
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
function handleKeydown(e) {
|
|
123
|
+
if (props.disabled) return;
|
|
124
|
+
const len = $modelValue.value.length;
|
|
125
|
+
if (len === 0) return;
|
|
126
|
+
if (e.key === "ArrowRight") {
|
|
127
|
+
activeIndex.value = (activeIndex.value + 1) % len;
|
|
128
|
+
itemRefs.value[activeIndex.value]?.focus();
|
|
129
|
+
e.preventDefault();
|
|
130
|
+
} else if (e.key === "ArrowLeft") {
|
|
131
|
+
activeIndex.value = (activeIndex.value - 1 + len) % len;
|
|
132
|
+
itemRefs.value[activeIndex.value]?.focus();
|
|
133
|
+
e.preventDefault();
|
|
134
|
+
} else if (e.key === "Delete" || e.key === "Backspace") {
|
|
135
|
+
if (canEdit.value) {
|
|
136
|
+
removeVal($modelValue.value[activeIndex.value]);
|
|
137
|
+
e.preventDefault();
|
|
138
|
+
}
|
|
139
|
+
} else if (e.key === "Home") {
|
|
140
|
+
activeIndex.value = 0;
|
|
141
|
+
itemRefs.value[activeIndex.value]?.focus();
|
|
142
|
+
e.preventDefault();
|
|
143
|
+
} else if (e.key === "End") {
|
|
144
|
+
activeIndex.value = len - 1;
|
|
145
|
+
itemRefs.value[activeIndex.value]?.focus();
|
|
146
|
+
e.preventDefault();
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
</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
|
+
};
|