sprintify-ui 0.10.65 → 0.10.67
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 +266 -266
- package/dist/{BaseCkeditor-D6D4FPEb.js → BaseCkeditor-B4PbYw6a.js} +2 -2
- package/dist/sprintify-ui.es.js +4435 -4557
- package/dist/style.css +3 -3
- package/dist/tailwindcss/button.js +260 -260
- package/dist/tailwindcss/index.js +21 -21
- package/dist/tailwindcss/input.js +22 -22
- package/dist/tailwindcss/overlay.js +12 -12
- package/dist/tailwindcss/table.js +91 -91
- package/dist/tailwindcss/theme.js +52 -52
- package/dist/types/components/BaseActionButtons.vue.d.ts +1 -1
- package/dist/types/components/BaseActionItem.vue.d.ts +7 -10
- package/dist/types/components/BaseAddressForm.vue.d.ts +1 -1
- package/dist/types/components/BaseAlert.vue.d.ts +24 -11
- package/dist/types/components/BaseApp.vue.d.ts +14 -12
- package/dist/types/components/BaseAssign.vue.d.ts +1 -1
- package/dist/types/components/BaseAutocomplete.vue.d.ts +665 -455
- package/dist/types/components/BaseAutocompleteDrawer.vue.d.ts +119 -24
- package/dist/types/components/BaseAutocompleteFetch.vue.d.ts +1033 -412
- package/dist/types/components/BaseAvatarGroup.vue.d.ts +1 -1
- package/dist/types/components/BaseBadge.vue.d.ts +23 -11
- package/dist/types/components/BaseBelongsTo.vue.d.ts +998 -411
- package/dist/types/components/BaseBelongsToFetch.vue.d.ts +754 -371
- package/dist/types/components/BaseBoolean.vue.d.ts +1 -1
- package/dist/types/components/BaseBreadcrumbs.vue.d.ts +1 -1
- package/dist/types/components/BaseButton.vue.d.ts +78 -16
- package/dist/types/components/BaseButtonGroup.vue.d.ts +166 -15
- package/dist/types/components/BaseCard.vue.d.ts +26 -12
- package/dist/types/components/BaseCardRow.vue.d.ts +20 -11
- package/dist/types/components/BaseCharacterCounter.vue.d.ts +1 -1
- package/dist/types/components/BaseClipboard.vue.d.ts +45 -13
- package/dist/types/components/BaseCollapse.vue.d.ts +41 -20
- package/dist/types/components/BaseContainer.vue.d.ts +16 -11
- package/dist/types/components/BaseCounter.vue.d.ts +1 -1
- package/dist/types/components/BaseCropper.vue.d.ts +55 -30
- package/dist/types/components/BaseDataIterator.vue.d.ts +43 -42
- package/dist/types/components/BaseDataIteratorSectionBox.vue.d.ts +15 -12
- package/dist/types/components/BaseDataIteratorSectionColumns.vue.d.ts +1 -1
- package/dist/types/components/BaseDataIteratorSectionModal.vue.d.ts +19 -10
- package/dist/types/components/BaseDataTable.vue.d.ts +2090 -738
- package/dist/types/components/BaseDataTableTemplate.vue.d.ts +576 -100
- package/dist/types/components/BaseDatePicker.vue.d.ts +1 -1
- package/dist/types/components/BaseDateSelect.vue.d.ts +1 -1
- package/dist/types/components/BaseDescriptionList.vue.d.ts +12 -12
- package/dist/types/components/BaseDescriptionListItem.vue.d.ts +16 -15
- package/dist/types/components/BaseDialog.vue.d.ts +114 -413
- package/dist/types/components/BaseDisplayRelativeTime.vue.d.ts +55 -13
- package/dist/types/components/BaseDraggable.vue.d.ts +25 -16
- package/dist/types/components/BaseDropdown.vue.d.ts +155 -17
- package/dist/types/components/BaseDropdownAutocomplete.vue.d.ts +131 -16
- package/dist/types/components/BaseField.vue.d.ts +103 -12
- package/dist/types/components/BaseFieldI18n.vue.d.ts +1 -1
- package/dist/types/components/BaseFilePicker.vue.d.ts +35 -16
- package/dist/types/components/BaseFilePickerCrop.vue.d.ts +87 -42
- package/dist/types/components/BaseFileUploader.vue.d.ts +195 -29
- package/dist/types/components/BaseForm.vue.d.ts +161 -20
- package/dist/types/components/BaseGantt.vue.d.ts +1130 -409
- package/dist/types/components/BaseHasMany.vue.d.ts +590 -347
- package/dist/types/components/BaseHasManyFetch.vue.d.ts +602 -251
- package/dist/types/components/BaseHeader.vue.d.ts +1 -1
- package/dist/types/components/BaseIconPicker.vue.d.ts +1 -1
- package/dist/types/components/BaseInputError.vue.d.ts +23 -11
- package/dist/types/components/BaseJsonReaderItem.vue.d.ts +1 -1
- package/dist/types/components/BaseLayoutNotificationItemContent.vue.d.ts +1 -1
- package/dist/types/components/BaseLayoutSidebar.vue.d.ts +124 -16
- package/dist/types/components/BaseLayoutSidebarConfigurable.vue.d.ts +115 -13
- package/dist/types/components/BaseLayoutStacked.vue.d.ts +69 -22
- package/dist/types/components/BaseLayoutStackedConfigurable.vue.d.ts +120 -10
- package/dist/types/components/BaseLazy.vue.d.ts +20 -15
- package/dist/types/components/BaseMediaGallery.vue.d.ts +1 -1
- package/dist/types/components/BaseMediaGalleryItem.vue.d.ts +1 -1
- package/dist/types/components/BaseMediaItem.vue.d.ts +1 -1
- package/dist/types/components/BaseMediaLibrary.vue.d.ts +234 -34
- package/dist/types/components/BaseMediaListItem.vue.d.ts +1 -1
- package/dist/types/components/BaseMediaPicturesItem.vue.d.ts +1 -1
- package/dist/types/components/BaseMenu.vue.d.ts +233 -30
- package/dist/types/components/BaseMenuItem.vue.d.ts +1 -1
- package/dist/types/components/BaseModalCenter.vue.d.ts +88 -12
- package/dist/types/components/BaseModalSide.vue.d.ts +85 -12
- package/dist/types/components/BaseNavbar.vue.d.ts +88 -22
- package/dist/types/components/BaseNavbarItem.vue.d.ts +1 -1
- package/dist/types/components/BaseNavbarItemContent.vue.d.ts +1 -1
- package/dist/types/components/BaseNavbarSideItem.vue.d.ts +1 -1
- package/dist/types/components/BaseNavbarSideItemContent.vue.d.ts +1 -1
- package/dist/types/components/BasePagination.vue.d.ts +1 -1
- package/dist/types/components/BaseRadioGroup.vue.d.ts +113 -13
- package/dist/types/components/BaseReadMore.vue.d.ts +31 -12
- package/dist/types/components/BaseRichText.vue.d.ts +1 -1
- package/dist/types/components/BaseSelect.vue.d.ts +149 -12
- package/dist/types/components/BaseShortcut.vue.d.ts +1 -1
- package/dist/types/components/BaseSideNavigation.vue.d.ts +11 -12
- package/dist/types/components/BaseSideNavigationItem.vue.d.ts +22 -13
- package/dist/types/components/BaseSkeleton.vue.d.ts +3 -3
- package/dist/types/components/BaseStepper.vue.d.ts +1 -1
- package/dist/types/components/BaseSwitch.vue.d.ts +122 -13
- package/dist/types/components/BaseSystemAlert.vue.d.ts +58 -11
- package/dist/types/components/BaseTabItem.vue.d.ts +35 -18
- package/dist/types/components/BaseTable.vue.d.ts +29 -14
- package/dist/types/components/BaseTableBody.vue.d.ts +9 -12
- package/dist/types/components/BaseTableCell.vue.d.ts +40 -15
- package/dist/types/components/BaseTableColumn.vue.d.ts +3 -3
- package/dist/types/components/BaseTableHead.vue.d.ts +14 -12
- package/dist/types/components/BaseTableHeader.vue.d.ts +46 -17
- package/dist/types/components/BaseTableRow.vue.d.ts +40 -13
- package/dist/types/components/BaseTabs.vue.d.ts +21 -15
- package/dist/types/components/BaseTagAutocomplete.vue.d.ts +602 -203
- package/dist/types/components/BaseTagAutocompleteFetch.vue.d.ts +807 -348
- package/dist/types/components/BaseTextareaAutoresize.vue.d.ts +1 -1
- package/dist/types/components/BaseTimeline.vue.d.ts +1 -1
- package/dist/types/components/BaseTimelineItem.vue.d.ts +1 -1
- package/dist/types/components/BaseToast.vue.d.ts +1 -1
- package/dist/types/components/BaseTooltip.vue.d.ts +41 -15
- package/dist/types/components/BaseUniqueCode.vue.d.ts +1 -1
- package/dist/types/stories/PageInputSizes.vue.d.ts +1 -1
- package/dist/types/stories/PageShow.vue.d.ts +1 -1
- package/dist/types/svg/BaseEmptyState.vue.d.ts +1 -1
- package/dist/types/svg/BaseSpinnerSmall.vue.d.ts +1 -1
- package/package.json +135 -135
- package/src/assets/base-cropper.css +61 -61
- package/src/assets/base-date-picker.css +4 -4
- package/src/assets/base-rich-text.css +270 -270
- package/src/assets/base-spinner.css +18 -18
- package/src/assets/base-tabs.css +4 -4
- package/src/assets/base-time-picker.css +9 -9
- package/src/assets/flatpickr.css +247 -247
- package/src/assets/form.css +6 -6
- package/src/assets/google-pac.css +25 -25
- package/src/assets/main.css +56 -56
- package/src/assets/tailwind.css +2 -2
- package/src/changelog.mdx +6 -6
- package/src/components/BaseActionButtons.vue +76 -76
- package/src/components/BaseActionItem.vue +80 -80
- package/src/components/BaseActionItemButton.vue +75 -75
- package/src/components/BaseAddressForm.stories.js +114 -114
- package/src/components/BaseAddressForm.vue +382 -382
- package/src/components/BaseAlert.stories.js +75 -75
- package/src/components/BaseAlert.vue +101 -101
- package/src/components/BaseApp.vue +16 -16
- package/src/components/BaseAppDialogs.vue +126 -126
- package/src/components/BaseAppSnackbars.vue +40 -40
- package/src/components/BaseAssign.mdx +98 -98
- package/src/components/BaseAssign.stories.js +78 -78
- package/src/components/BaseAssign.vue +366 -366
- package/src/components/BaseAutocomplete.stories.js +243 -243
- package/src/components/BaseAutocomplete.vue +603 -603
- package/src/components/BaseAutocompleteDrawer.vue +386 -386
- package/src/components/BaseAutocompleteFetch.stories.js +224 -224
- package/src/components/BaseAutocompleteFetch.vue +314 -314
- package/src/components/BaseAvatar.stories.js +39 -39
- package/src/components/BaseAvatar.vue +164 -164
- package/src/components/BaseAvatarGroup.stories.js +71 -71
- package/src/components/BaseAvatarGroup.vue +148 -148
- package/src/components/BaseBadge.stories.js +132 -130
- package/src/components/BaseBadge.vue +118 -97
- package/src/components/BaseBelongsTo.stories.js +220 -220
- package/src/components/BaseBelongsTo.vue +164 -164
- package/src/components/BaseBelongsToFetch.stories.js +223 -223
- package/src/components/BaseBelongsToFetch.vue +213 -213
- package/src/components/BaseBoolean.stories.js +35 -35
- package/src/components/BaseBoolean.vue +26 -26
- package/src/components/BaseBreadcrumbs.stories.js +50 -50
- package/src/components/BaseBreadcrumbs.vue +109 -109
- package/src/components/BaseButton.stories.js +126 -126
- package/src/components/BaseButton.vue +279 -279
- package/src/components/BaseButtonGroup.stories.js +114 -114
- package/src/components/BaseButtonGroup.vue +193 -193
- package/src/components/BaseCard.stories.js +63 -63
- package/src/components/BaseCard.vue +49 -49
- package/src/components/BaseCardRow.vue +53 -53
- package/src/components/BaseCharacterCounter.stories.js +30 -30
- package/src/components/BaseCharacterCounter.vue +64 -64
- package/src/components/BaseCkeditor.vue +154 -154
- package/src/components/BaseClipboard.stories.js +55 -55
- package/src/components/BaseClipboard.vue +105 -105
- package/src/components/BaseCollapse.stories.js +168 -168
- package/src/components/BaseCollapse.vue +98 -98
- package/src/components/BaseColor.stories.js +66 -66
- package/src/components/BaseColor.vue +155 -155
- package/src/components/BaseContainer.stories.js +34 -34
- package/src/components/BaseContainer.vue +64 -64
- package/src/components/BaseCounter.stories.js +47 -47
- package/src/components/BaseCounter.vue +83 -83
- package/src/components/BaseCropper.stories.js +113 -113
- package/src/components/BaseCropper.vue +390 -390
- package/src/components/BaseCropperModal.stories.js +54 -54
- package/src/components/BaseCropperModal.vue +143 -143
- package/src/components/BaseDataIterator.stories.js +292 -292
- package/src/components/BaseDataIterator.vue +986 -986
- package/src/components/BaseDataIteratorSectionBox.vue +36 -36
- package/src/components/BaseDataIteratorSectionButton.vue +42 -42
- package/src/components/BaseDataIteratorSectionColumns.vue +150 -150
- package/src/components/BaseDataIteratorSectionModal.vue +41 -41
- package/src/components/BaseDataTable.stories.js +393 -393
- package/src/components/BaseDataTable.vue +966 -966
- package/src/components/BaseDataTableRowAction.vue +70 -70
- package/src/components/BaseDataTableTemplate.vue +831 -838
- package/src/components/BaseDatePicker.stories.js +166 -166
- package/src/components/BaseDatePicker.vue +372 -372
- package/src/components/BaseDateSelect.stories.js +68 -68
- package/src/components/BaseDateSelect.vue +222 -222
- package/src/components/BaseDescriptionList.stories.js +35 -35
- package/src/components/BaseDescriptionList.vue +13 -13
- package/src/components/BaseDescriptionListItem.vue +47 -47
- package/src/components/BaseDialog.stories.js +95 -95
- package/src/components/BaseDialog.vue +221 -221
- package/src/components/BaseDisplayRelativeTime.stories.js +47 -47
- package/src/components/BaseDisplayRelativeTime.vue +126 -126
- package/src/components/BaseDraggable.stories.js +34 -34
- package/src/components/BaseDraggable.vue +111 -111
- package/src/components/BaseDropdown.stories.js +164 -164
- package/src/components/BaseDropdown.vue +74 -74
- package/src/components/BaseDropdownAutocomplete.stories.js +208 -208
- package/src/components/BaseDropdownAutocomplete.vue +203 -203
- package/src/components/BaseField.vue +151 -151
- package/src/components/BaseFieldI18n.stories.js +37 -37
- package/src/components/BaseFieldI18n.vue +170 -170
- package/src/components/BaseFilePicker.stories.js +84 -84
- package/src/components/BaseFilePicker.vue +163 -163
- package/src/components/BaseFilePickerCrop.stories.js +135 -135
- package/src/components/BaseFilePickerCrop.vue +130 -130
- package/src/components/BaseFileUploader.stories.js +101 -101
- package/src/components/BaseFileUploader.vue +185 -185
- package/src/components/BaseForm.mdx +87 -87
- package/src/components/BaseForm.stories.js +133 -133
- package/src/components/BaseForm.vue +372 -372
- package/src/components/BaseGantt.stories.js +145 -145
- package/src/components/BaseGantt.vue +384 -384
- package/src/components/BaseHasMany.stories.js +211 -211
- package/src/components/BaseHasMany.vue +135 -135
- package/src/components/BaseHasManyFetch.stories.js +278 -278
- package/src/components/BaseHasManyFetch.vue +222 -222
- package/src/components/BaseHeader.stories.js +137 -137
- package/src/components/BaseHeader.vue +141 -141
- package/src/components/BaseIconPicker.stories.js +22 -22
- package/src/components/BaseIconPicker.vue +225 -225
- package/src/components/BaseInput.stories.js +202 -202
- package/src/components/BaseInput.vue +402 -402
- package/src/components/BaseInputError.vue +39 -39
- package/src/components/BaseInputLabel.stories.js +36 -36
- package/src/components/BaseInputLabel.vue +83 -83
- package/src/components/BaseInputPercent.stories.js +66 -66
- package/src/components/BaseInputPercent.vue +139 -139
- package/src/components/BaseJsonReader.stories.js +120 -120
- package/src/components/BaseJsonReader.vue +51 -51
- package/src/components/BaseJsonReaderItem.vue +119 -119
- package/src/components/BaseLayoutNotificationDropdown.vue +153 -153
- package/src/components/BaseLayoutNotificationItem.vue +53 -53
- package/src/components/BaseLayoutNotificationItemContent.vue +41 -41
- package/src/components/BaseLayoutSidebar.vue +300 -300
- package/src/components/BaseLayoutSidebarConfigurable.stories.js +217 -217
- package/src/components/BaseLayoutSidebarConfigurable.vue +202 -202
- package/src/components/BaseLayoutStacked.vue +78 -78
- package/src/components/BaseLayoutStackedConfigurable.stories.js +181 -181
- package/src/components/BaseLayoutStackedConfigurable.vue +196 -196
- package/src/components/BaseLazy.stories.js +59 -59
- package/src/components/BaseLazy.vue +80 -80
- package/src/components/BaseLoadingCover.stories.js +55 -55
- package/src/components/BaseLoadingCover.vue +101 -101
- package/src/components/BaseMediaGallery.vue +96 -96
- package/src/components/BaseMediaGalleryItem.vue +101 -101
- package/src/components/BaseMediaItem.stories.js +41 -41
- package/src/components/BaseMediaItem.vue +80 -80
- package/src/components/BaseMediaLibrary.stories.js +267 -267
- package/src/components/BaseMediaLibrary.vue +357 -357
- package/src/components/BaseMediaList.vue +67 -67
- package/src/components/BaseMediaListItem.vue +213 -213
- package/src/components/BaseMediaPictures.vue +64 -64
- package/src/components/BaseMediaPicturesItem.vue +100 -100
- package/src/components/BaseMediaPreview.stories.js +72 -72
- package/src/components/BaseMediaPreview.vue +106 -106
- package/src/components/BaseMenu.stories.js +134 -134
- package/src/components/BaseMenu.vue +187 -187
- package/src/components/BaseMenuItem.vue +177 -177
- package/src/components/BaseModalCenter.stories.js +68 -68
- package/src/components/BaseModalCenter.vue +128 -128
- package/src/components/BaseModalSide.stories.js +61 -61
- package/src/components/BaseModalSide.vue +130 -130
- package/src/components/BaseNavbar.stories.js +152 -152
- package/src/components/BaseNavbar.vue +191 -191
- package/src/components/BaseNavbarItem.vue +108 -108
- package/src/components/BaseNavbarItemContent.vue +124 -124
- package/src/components/BaseNavbarSideItem.vue +187 -187
- package/src/components/BaseNavbarSideItemContent.vue +126 -126
- package/src/components/BasePagination.stories.js +35 -35
- package/src/components/BasePagination.vue +266 -266
- package/src/components/BasePanel.stories.js +56 -56
- package/src/components/BasePanel.vue +42 -42
- package/src/components/BasePassword.stories.js +80 -80
- package/src/components/BasePassword.vue +87 -87
- package/src/components/BaseProgressCircle.stories.js +27 -27
- package/src/components/BaseProgressCircle.vue +80 -80
- package/src/components/BaseRadioGroup.stories.js +87 -87
- package/src/components/BaseRadioGroup.vue +124 -124
- package/src/components/BaseReadMore.stories.js +30 -30
- package/src/components/BaseReadMore.vue +73 -73
- package/src/components/BaseRichText.stories.js +90 -90
- package/src/components/BaseRichText.vue +87 -87
- package/src/components/BaseScrollColumn.vue +128 -128
- package/src/components/BaseSelect.stories.js +151 -151
- package/src/components/BaseSelect.vue +241 -241
- package/src/components/BaseShortcut.stories.js +100 -100
- package/src/components/BaseShortcut.vue +114 -114
- package/src/components/BaseSideNavigation.stories.js +85 -85
- package/src/components/BaseSideNavigation.vue +32 -32
- package/src/components/BaseSideNavigationItem.vue +99 -99
- package/src/components/BaseSkeleton.stories.js +36 -36
- package/src/components/BaseSkeleton.vue +40 -40
- package/src/components/BaseStatistic.stories.js +51 -51
- package/src/components/BaseStatistic.vue +98 -98
- package/src/components/BaseStepper.stories.js +94 -94
- package/src/components/BaseStepper.vue +72 -72
- package/src/components/BaseStepperItem.stories.js +65 -65
- package/src/components/BaseStepperItem.vue +149 -149
- package/src/components/BaseSwitch.stories.js +133 -133
- package/src/components/BaseSwitch.vue +228 -226
- package/src/components/BaseSystemAlert.stories.js +63 -63
- package/src/components/BaseSystemAlert.vue +89 -89
- package/src/components/BaseTabItem.vue +192 -192
- package/src/components/BaseTable.stories.js +214 -214
- package/src/components/BaseTable.vue +111 -111
- package/src/components/BaseTableBody.vue +14 -14
- package/src/components/BaseTableCell.vue +204 -204
- package/src/components/BaseTableColumn.vue +140 -140
- package/src/components/BaseTableHead.vue +38 -38
- package/src/components/BaseTableHeader.vue +139 -139
- package/src/components/BaseTableRow.vue +197 -197
- package/src/components/BaseTabs.stories.js +165 -165
- package/src/components/BaseTabs.vue +203 -203
- package/src/components/BaseTagAutocomplete.stories.js +271 -271
- package/src/components/BaseTagAutocomplete.vue +565 -565
- package/src/components/BaseTagAutocompleteFetch.stories.js +211 -211
- package/src/components/BaseTagAutocompleteFetch.vue +237 -237
- package/src/components/BaseTextarea.stories.js +81 -81
- package/src/components/BaseTextarea.vue +138 -138
- package/src/components/BaseTextareaAutoresize.stories.js +125 -125
- package/src/components/BaseTextareaAutoresize.vue +187 -187
- package/src/components/BaseTimePicker.stories.js +68 -68
- package/src/components/BaseTimePicker.vue +379 -379
- package/src/components/BaseTimeline.stories.js +55 -55
- package/src/components/BaseTimeline.vue +38 -38
- package/src/components/BaseTimelineItem.stories.js +77 -77
- package/src/components/BaseTimelineItem.vue +90 -90
- package/src/components/BaseToast.stories.js +50 -50
- package/src/components/BaseToast.vue +43 -43
- package/src/components/BaseTooltip.stories.js +65 -65
- package/src/components/BaseTooltip.vue +93 -93
- package/src/components/BaseUniqueCode.stories.js +36 -36
- package/src/components/BaseUniqueCode.vue +183 -183
- package/src/components/SlotComponent.ts +37 -37
- package/src/components/index.ts +222 -222
- package/src/composables/breakpoints.ts +94 -94
- package/src/composables/clickOutside.ts +80 -80
- package/src/composables/field.ts +156 -156
- package/src/composables/hasOptions.ts +86 -86
- package/src/composables/inputSize.ts +35 -35
- package/src/composables/isLastColumn.ts +30 -30
- package/src/composables/mediaQuery.ts +42 -42
- package/src/composables/modal.ts +73 -73
- package/src/composables/paginatedData.ts +76 -76
- package/src/composables/tooltip.ts +84 -84
- package/src/constants/MyConstants.ts +1 -1
- package/src/constants/index.ts +5 -5
- package/src/env.d.ts +15 -15
- package/src/i18n/index.ts +60 -60
- package/src/index.ts +138 -138
- package/src/lang/en.json +101 -101
- package/src/lang/fr.json +101 -101
- package/src/services/gantt/format.ts +133 -133
- package/src/services/gantt/timescale.ts +250 -250
- package/src/services/gantt/types.ts +81 -81
- package/src/services/table/classes.ts +37 -37
- package/src/services/table/customKeyActions.ts +2 -2
- package/src/services/table/types.ts +27 -27
- package/src/stores/dialogs.ts +48 -48
- package/src/stores/i18n.ts +14 -14
- package/src/stores/snackbars.ts +47 -47
- package/src/stores/systemAlerts.ts +32 -32
- package/src/stories/InputSizes.stories.js +21 -21
- package/src/stories/List.stories.js +136 -136
- package/src/stories/PageInputSizes.vue +228 -228
- package/src/stories/PageShow.vue +423 -423
- package/src/stories/Show.stories.js +21 -21
- package/src/svg/BaseEmptyState.vue +38 -38
- package/src/svg/BaseSpinnerLarge.vue +40 -40
- package/src/svg/BaseSpinnerSmall.vue +13 -13
- package/src/types/Color.ts +9 -9
- package/src/types/Country.ts +4 -4
- package/src/types/ImagePickerResult.ts +5 -5
- package/src/types/Media.ts +10 -10
- package/src/types/Notification.ts +11 -11
- package/src/types/Region.ts +5 -5
- package/src/types/Status.ts +5 -5
- package/src/types/StepperItem.ts +8 -8
- package/src/types/ToolbarOption.ts +1 -1
- package/src/types/UploadedFile.ts +11 -11
- package/src/types/User.ts +7 -7
- package/src/types/index.ts +302 -302
- package/src/utils/blob.ts +30 -30
- package/src/utils/colors.ts +239 -239
- package/src/utils/cropper/avatar.ts +33 -33
- package/src/utils/cropper/cover.ts +41 -41
- package/src/utils/cropper/presetInterface.ts +16 -16
- package/src/utils/cropper/presets.ts +7 -7
- package/src/utils/deepIncludes.ts +76 -76
- package/src/utils/fileSizeFormat.ts +15 -15
- package/src/utils/fileValidations.ts +26 -26
- package/src/utils/getApiData.ts +11 -11
- package/src/utils/index.ts +18 -18
- package/src/utils/resizeImageFromURI.ts +118 -118
- package/src/utils/scrollPreventer.ts +11 -11
- package/src/utils/sizeBehaviors.ts +3 -3
- package/src/utils/sizes.ts +38 -38
- package/src/utils/slots.ts +12 -12
- package/src/utils/storage.ts +36 -36
- package/src/utils/toHumanList.ts +20 -20
- package/src/utils/uuid.ts +7 -7
|
@@ -1,77 +1,77 @@
|
|
|
1
|
-
export interface SearchOpts {
|
|
2
|
-
maxDepth?: number; // stop descending after this depth
|
|
3
|
-
maxCharsPerItem?: number; // stop scanning item after reading this many chars
|
|
4
|
-
maxArray?: number; // cap how many array items to inspect per array
|
|
5
|
-
cache?: WeakMap<object, string>; // optional: lazy per-item cache of a “search blob”
|
|
6
|
-
}
|
|
7
|
-
|
|
8
|
-
/**
|
|
9
|
-
* Recursively searches an item (object, array, primitive) for a case-insensitive match of the query string.
|
|
10
|
-
* Limits can be set to avoid excessive CPU usage on large/deep items.
|
|
11
|
-
* @param item The item to search within.
|
|
12
|
-
* @param queryRaw The query string to search for.
|
|
13
|
-
* @param opts Optional search options.
|
|
14
|
-
*/
|
|
15
|
-
export function deepIncludes(item: any, queryRaw: string, opts: SearchOpts = {}): boolean {
|
|
16
|
-
const q = queryRaw.toLowerCase();
|
|
17
|
-
const {
|
|
18
|
-
maxDepth = 3,
|
|
19
|
-
maxCharsPerItem = 3000,
|
|
20
|
-
maxArray = 64,
|
|
21
|
-
cache,
|
|
22
|
-
} = opts;
|
|
23
|
-
|
|
24
|
-
let consumed = 0;
|
|
25
|
-
const seen = new WeakSet<object>();
|
|
26
|
-
|
|
27
|
-
const feed = (s: string): boolean => {
|
|
28
|
-
// consume without allocating new strings repeatedly
|
|
29
|
-
consumed += s.length;
|
|
30
|
-
return s.toLowerCase().includes(q) || consumed >= maxCharsPerItem;
|
|
31
|
-
};
|
|
32
|
-
|
|
33
|
-
const visit = (val: any, depth: number): boolean => {
|
|
34
|
-
if (val == null) return false;
|
|
35
|
-
if (consumed >= maxCharsPerItem) return false;
|
|
36
|
-
|
|
37
|
-
const t = typeof val;
|
|
38
|
-
|
|
39
|
-
if (t === 'string') return feed(val);
|
|
40
|
-
if (t === 'number' || t === 'boolean') return feed(String(val));
|
|
41
|
-
if (t === 'bigint') return feed(val.toString());
|
|
42
|
-
if (t === 'symbol' || t === 'function') return false;
|
|
43
|
-
|
|
44
|
-
// objects & arrays
|
|
45
|
-
if (t === 'object') {
|
|
46
|
-
if (seen.has(val)) return false;
|
|
47
|
-
seen.add(val);
|
|
48
|
-
|
|
49
|
-
// Optional lazy cache: build once per object identity
|
|
50
|
-
if (cache && cache.has(val)) {
|
|
51
|
-
return feed(cache.get(val)!); // already lowercased when stored? not necessary since feed lowercases
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
if (depth >= maxDepth) return false;
|
|
55
|
-
|
|
56
|
-
if (Array.isArray(val)) {
|
|
57
|
-
const len = Math.min(val.length, maxArray);
|
|
58
|
-
for (let i = 0; i < len; i++) {
|
|
59
|
-
if (visit(val[i], depth + 1)) return true;
|
|
60
|
-
}
|
|
61
|
-
return false;
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
// plain object: iterate own enumerable keys only
|
|
65
|
-
for (const k in val) {
|
|
66
|
-
// match on key names too (often helpful if values are IDs)
|
|
67
|
-
if (feed(k)) return true;
|
|
68
|
-
if (visit(val[k], depth + 1)) return true;
|
|
69
|
-
}
|
|
70
|
-
return false;
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
return false;
|
|
74
|
-
};
|
|
75
|
-
|
|
76
|
-
return visit(item, 0);
|
|
1
|
+
export interface SearchOpts {
|
|
2
|
+
maxDepth?: number; // stop descending after this depth
|
|
3
|
+
maxCharsPerItem?: number; // stop scanning item after reading this many chars
|
|
4
|
+
maxArray?: number; // cap how many array items to inspect per array
|
|
5
|
+
cache?: WeakMap<object, string>; // optional: lazy per-item cache of a “search blob”
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Recursively searches an item (object, array, primitive) for a case-insensitive match of the query string.
|
|
10
|
+
* Limits can be set to avoid excessive CPU usage on large/deep items.
|
|
11
|
+
* @param item The item to search within.
|
|
12
|
+
* @param queryRaw The query string to search for.
|
|
13
|
+
* @param opts Optional search options.
|
|
14
|
+
*/
|
|
15
|
+
export function deepIncludes(item: any, queryRaw: string, opts: SearchOpts = {}): boolean {
|
|
16
|
+
const q = queryRaw.toLowerCase();
|
|
17
|
+
const {
|
|
18
|
+
maxDepth = 3,
|
|
19
|
+
maxCharsPerItem = 3000,
|
|
20
|
+
maxArray = 64,
|
|
21
|
+
cache,
|
|
22
|
+
} = opts;
|
|
23
|
+
|
|
24
|
+
let consumed = 0;
|
|
25
|
+
const seen = new WeakSet<object>();
|
|
26
|
+
|
|
27
|
+
const feed = (s: string): boolean => {
|
|
28
|
+
// consume without allocating new strings repeatedly
|
|
29
|
+
consumed += s.length;
|
|
30
|
+
return s.toLowerCase().includes(q) || consumed >= maxCharsPerItem;
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
const visit = (val: any, depth: number): boolean => {
|
|
34
|
+
if (val == null) return false;
|
|
35
|
+
if (consumed >= maxCharsPerItem) return false;
|
|
36
|
+
|
|
37
|
+
const t = typeof val;
|
|
38
|
+
|
|
39
|
+
if (t === 'string') return feed(val);
|
|
40
|
+
if (t === 'number' || t === 'boolean') return feed(String(val));
|
|
41
|
+
if (t === 'bigint') return feed(val.toString());
|
|
42
|
+
if (t === 'symbol' || t === 'function') return false;
|
|
43
|
+
|
|
44
|
+
// objects & arrays
|
|
45
|
+
if (t === 'object') {
|
|
46
|
+
if (seen.has(val)) return false;
|
|
47
|
+
seen.add(val);
|
|
48
|
+
|
|
49
|
+
// Optional lazy cache: build once per object identity
|
|
50
|
+
if (cache && cache.has(val)) {
|
|
51
|
+
return feed(cache.get(val)!); // already lowercased when stored? not necessary since feed lowercases
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
if (depth >= maxDepth) return false;
|
|
55
|
+
|
|
56
|
+
if (Array.isArray(val)) {
|
|
57
|
+
const len = Math.min(val.length, maxArray);
|
|
58
|
+
for (let i = 0; i < len; i++) {
|
|
59
|
+
if (visit(val[i], depth + 1)) return true;
|
|
60
|
+
}
|
|
61
|
+
return false;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
// plain object: iterate own enumerable keys only
|
|
65
|
+
for (const k in val) {
|
|
66
|
+
// match on key names too (often helpful if values are IDs)
|
|
67
|
+
if (feed(k)) return true;
|
|
68
|
+
if (visit(val[k], depth + 1)) return true;
|
|
69
|
+
}
|
|
70
|
+
return false;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
return false;
|
|
74
|
+
};
|
|
75
|
+
|
|
76
|
+
return visit(item, 0);
|
|
77
77
|
}
|
|
@@ -1,15 +1,15 @@
|
|
|
1
|
-
import { t } from '@/i18n';
|
|
2
|
-
|
|
3
|
-
export default function (size: number): string {
|
|
4
|
-
const i = Math.floor(Math.log(size) / Math.log(1024));
|
|
5
|
-
|
|
6
|
-
const units = [
|
|
7
|
-
t('sui.units.b'),
|
|
8
|
-
t('sui.units.kb'),
|
|
9
|
-
t('sui.units.mb'),
|
|
10
|
-
t('sui.units.gb'),
|
|
11
|
-
t('sui.units.tb'),
|
|
12
|
-
];
|
|
13
|
-
|
|
14
|
-
return +(size / Math.pow(1024, i)).toFixed(2) * 1 + ' ' + units[i];
|
|
15
|
-
}
|
|
1
|
+
import { t } from '@/i18n';
|
|
2
|
+
|
|
3
|
+
export default function (size: number): string {
|
|
4
|
+
const i = Math.floor(Math.log(size) / Math.log(1024));
|
|
5
|
+
|
|
6
|
+
const units = [
|
|
7
|
+
t('sui.units.b'),
|
|
8
|
+
t('sui.units.kb'),
|
|
9
|
+
t('sui.units.mb'),
|
|
10
|
+
t('sui.units.gb'),
|
|
11
|
+
t('sui.units.tb'),
|
|
12
|
+
];
|
|
13
|
+
|
|
14
|
+
return +(size / Math.pow(1024, i)).toFixed(2) * 1 + ' ' + units[i];
|
|
15
|
+
}
|
|
@@ -1,26 +1,26 @@
|
|
|
1
|
-
export function maxSize(blob: Blob, maxSize: number): boolean {
|
|
2
|
-
if (blob.size > maxSize) {
|
|
3
|
-
return false;
|
|
4
|
-
}
|
|
5
|
-
|
|
6
|
-
return true;
|
|
7
|
-
}
|
|
8
|
-
|
|
9
|
-
export function validExtension(
|
|
10
|
-
blob: Blob | File,
|
|
11
|
-
extensions?: string[] | undefined
|
|
12
|
-
): boolean {
|
|
13
|
-
let extension = blob.type.split('/').pop();
|
|
14
|
-
|
|
15
|
-
if (blob instanceof File) {
|
|
16
|
-
extension = blob.name.split('.').pop();
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
if (extension && extensions && extensions.length) {
|
|
20
|
-
if (!extensions.includes(extension)) {
|
|
21
|
-
return false;
|
|
22
|
-
}
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
return true;
|
|
26
|
-
}
|
|
1
|
+
export function maxSize(blob: Blob, maxSize: number): boolean {
|
|
2
|
+
if (blob.size > maxSize) {
|
|
3
|
+
return false;
|
|
4
|
+
}
|
|
5
|
+
|
|
6
|
+
return true;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
export function validExtension(
|
|
10
|
+
blob: Blob | File,
|
|
11
|
+
extensions?: string[] | undefined
|
|
12
|
+
): boolean {
|
|
13
|
+
let extension = blob.type.split('/').pop();
|
|
14
|
+
|
|
15
|
+
if (blob instanceof File) {
|
|
16
|
+
extension = blob.name.split('.').pop();
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
if (extension && extensions && extensions.length) {
|
|
20
|
+
if (!extensions.includes(extension)) {
|
|
21
|
+
return false;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
return true;
|
|
26
|
+
}
|
package/src/utils/getApiData.ts
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import { Collection, PaginatedCollection, ResourceCollection } from "@/types";
|
|
2
|
-
import { isArray } from "lodash";
|
|
3
|
-
|
|
4
|
-
export function getItems(data: Collection | PaginatedCollection | ResourceCollection | null | undefined) {
|
|
5
|
-
if (!data) {
|
|
6
|
-
return [];
|
|
7
|
-
}
|
|
8
|
-
if (isArray(data)) {
|
|
9
|
-
return data;
|
|
10
|
-
}
|
|
11
|
-
return data.data;
|
|
1
|
+
import { Collection, PaginatedCollection, ResourceCollection } from "@/types";
|
|
2
|
+
import { isArray } from "lodash";
|
|
3
|
+
|
|
4
|
+
export function getItems(data: Collection | PaginatedCollection | ResourceCollection | null | undefined) {
|
|
5
|
+
if (!data) {
|
|
6
|
+
return [];
|
|
7
|
+
}
|
|
8
|
+
if (isArray(data)) {
|
|
9
|
+
return data;
|
|
10
|
+
}
|
|
11
|
+
return data.data;
|
|
12
12
|
}
|
package/src/utils/index.ts
CHANGED
|
@@ -1,18 +1,18 @@
|
|
|
1
|
-
import toHumanList from './toHumanList';
|
|
2
|
-
import fileSizeFormat from './fileSizeFormat';
|
|
3
|
-
import resizeImageFromURI from './resizeImageFromURI';
|
|
4
|
-
import { disableScroll, enableScroll } from './scrollPreventer';
|
|
5
|
-
import { blobToBase64, validateBase64, base64ToBlob } from './blob';
|
|
6
|
-
import { getColorConfig } from './colors';
|
|
7
|
-
|
|
8
|
-
export {
|
|
9
|
-
toHumanList,
|
|
10
|
-
fileSizeFormat,
|
|
11
|
-
disableScroll,
|
|
12
|
-
enableScroll,
|
|
13
|
-
resizeImageFromURI,
|
|
14
|
-
blobToBase64,
|
|
15
|
-
validateBase64,
|
|
16
|
-
base64ToBlob,
|
|
17
|
-
getColorConfig,
|
|
18
|
-
};
|
|
1
|
+
import toHumanList from './toHumanList';
|
|
2
|
+
import fileSizeFormat from './fileSizeFormat';
|
|
3
|
+
import resizeImageFromURI from './resizeImageFromURI';
|
|
4
|
+
import { disableScroll, enableScroll } from './scrollPreventer';
|
|
5
|
+
import { blobToBase64, validateBase64, base64ToBlob } from './blob';
|
|
6
|
+
import { getColorConfig } from './colors';
|
|
7
|
+
|
|
8
|
+
export {
|
|
9
|
+
toHumanList,
|
|
10
|
+
fileSizeFormat,
|
|
11
|
+
disableScroll,
|
|
12
|
+
enableScroll,
|
|
13
|
+
resizeImageFromURI,
|
|
14
|
+
blobToBase64,
|
|
15
|
+
validateBase64,
|
|
16
|
+
base64ToBlob,
|
|
17
|
+
getColorConfig,
|
|
18
|
+
};
|
|
@@ -1,118 +1,118 @@
|
|
|
1
|
-
export default function resizeImageFromURI(
|
|
2
|
-
source: string,
|
|
3
|
-
height: number,
|
|
4
|
-
width: number
|
|
5
|
-
): Promise<string> {
|
|
6
|
-
const img = new Image();
|
|
7
|
-
img.src = source;
|
|
8
|
-
img.crossOrigin = 'anonymous';
|
|
9
|
-
|
|
10
|
-
return new Promise((resolve, reject) => {
|
|
11
|
-
img.onload = () => {
|
|
12
|
-
// Check if the image require resize at all
|
|
13
|
-
if (img.height <= height && img.width <= width) {
|
|
14
|
-
resolve(source);
|
|
15
|
-
return;
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
// Make sure the width and height preserve the original aspect ratio and adjust if needed
|
|
19
|
-
if (img.height > img.width) {
|
|
20
|
-
width = Math.floor(height * (img.width / img.height));
|
|
21
|
-
} else {
|
|
22
|
-
height = Math.floor(width * (img.height / img.width));
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
const resizingCanvas: HTMLCanvasElement =
|
|
26
|
-
document.createElement('canvas');
|
|
27
|
-
const resizingCanvasContext = resizingCanvas.getContext('2d');
|
|
28
|
-
|
|
29
|
-
if (!resizingCanvasContext) {
|
|
30
|
-
reject('Could not acquire context 2d');
|
|
31
|
-
return;
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
// Start with original image size
|
|
35
|
-
resizingCanvas.width = img.width;
|
|
36
|
-
resizingCanvas.height = img.height;
|
|
37
|
-
|
|
38
|
-
// Draw the original image on the (temp) resizing canvas
|
|
39
|
-
resizingCanvasContext.drawImage(
|
|
40
|
-
img,
|
|
41
|
-
0,
|
|
42
|
-
0,
|
|
43
|
-
resizingCanvas.width,
|
|
44
|
-
resizingCanvas.height
|
|
45
|
-
);
|
|
46
|
-
|
|
47
|
-
const curImageDimensions = {
|
|
48
|
-
width: Math.floor(img.width),
|
|
49
|
-
height: Math.floor(img.height),
|
|
50
|
-
};
|
|
51
|
-
|
|
52
|
-
const halfImageDimensions = {
|
|
53
|
-
width: null as number | null,
|
|
54
|
-
height: null as number | null,
|
|
55
|
-
};
|
|
56
|
-
|
|
57
|
-
// Quickly reduce the size by 50% each time in few iterations until the size is less then
|
|
58
|
-
// 2x time the target size - the motivation for it, is to reduce the aliasing that would have been
|
|
59
|
-
// created with direct reduction of very big image to small image
|
|
60
|
-
while (curImageDimensions.width * 0.5 > width) {
|
|
61
|
-
// Reduce the resizing canvas by half and refresh the image
|
|
62
|
-
halfImageDimensions.width = Math.floor(curImageDimensions.width * 0.5);
|
|
63
|
-
halfImageDimensions.height = Math.floor(
|
|
64
|
-
curImageDimensions.height * 0.5
|
|
65
|
-
);
|
|
66
|
-
|
|
67
|
-
resizingCanvasContext.drawImage(
|
|
68
|
-
resizingCanvas,
|
|
69
|
-
0,
|
|
70
|
-
0,
|
|
71
|
-
curImageDimensions.width,
|
|
72
|
-
curImageDimensions.height,
|
|
73
|
-
0,
|
|
74
|
-
0,
|
|
75
|
-
halfImageDimensions.width,
|
|
76
|
-
halfImageDimensions.height
|
|
77
|
-
);
|
|
78
|
-
|
|
79
|
-
curImageDimensions.width = halfImageDimensions.width;
|
|
80
|
-
curImageDimensions.height = halfImageDimensions.height;
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
// Now do final resize for the resizingCanvas to meet the dimension requirements
|
|
84
|
-
// directly to the output canvas, that will output the final image
|
|
85
|
-
const outputCanvas: HTMLCanvasElement = document.createElement('canvas');
|
|
86
|
-
const outputCanvasContext = outputCanvas.getContext('2d');
|
|
87
|
-
|
|
88
|
-
outputCanvas.width = width;
|
|
89
|
-
outputCanvas.height = height;
|
|
90
|
-
|
|
91
|
-
if (!outputCanvasContext) {
|
|
92
|
-
reject('Could not acquire context 2d');
|
|
93
|
-
return;
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
outputCanvasContext.drawImage(
|
|
97
|
-
resizingCanvas,
|
|
98
|
-
0,
|
|
99
|
-
0,
|
|
100
|
-
curImageDimensions.width,
|
|
101
|
-
curImageDimensions.height,
|
|
102
|
-
0,
|
|
103
|
-
0,
|
|
104
|
-
width,
|
|
105
|
-
height
|
|
106
|
-
);
|
|
107
|
-
|
|
108
|
-
// output the canvas pixels as an image. params: format, quality
|
|
109
|
-
const base64ResizedImage = outputCanvas.toDataURL('image/jpeg', 0.85);
|
|
110
|
-
|
|
111
|
-
// Cleanup
|
|
112
|
-
resizingCanvas.remove();
|
|
113
|
-
outputCanvas.remove();
|
|
114
|
-
|
|
115
|
-
resolve(base64ResizedImage);
|
|
116
|
-
};
|
|
117
|
-
});
|
|
118
|
-
}
|
|
1
|
+
export default function resizeImageFromURI(
|
|
2
|
+
source: string,
|
|
3
|
+
height: number,
|
|
4
|
+
width: number
|
|
5
|
+
): Promise<string> {
|
|
6
|
+
const img = new Image();
|
|
7
|
+
img.src = source;
|
|
8
|
+
img.crossOrigin = 'anonymous';
|
|
9
|
+
|
|
10
|
+
return new Promise((resolve, reject) => {
|
|
11
|
+
img.onload = () => {
|
|
12
|
+
// Check if the image require resize at all
|
|
13
|
+
if (img.height <= height && img.width <= width) {
|
|
14
|
+
resolve(source);
|
|
15
|
+
return;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
// Make sure the width and height preserve the original aspect ratio and adjust if needed
|
|
19
|
+
if (img.height > img.width) {
|
|
20
|
+
width = Math.floor(height * (img.width / img.height));
|
|
21
|
+
} else {
|
|
22
|
+
height = Math.floor(width * (img.height / img.width));
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
const resizingCanvas: HTMLCanvasElement =
|
|
26
|
+
document.createElement('canvas');
|
|
27
|
+
const resizingCanvasContext = resizingCanvas.getContext('2d');
|
|
28
|
+
|
|
29
|
+
if (!resizingCanvasContext) {
|
|
30
|
+
reject('Could not acquire context 2d');
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
// Start with original image size
|
|
35
|
+
resizingCanvas.width = img.width;
|
|
36
|
+
resizingCanvas.height = img.height;
|
|
37
|
+
|
|
38
|
+
// Draw the original image on the (temp) resizing canvas
|
|
39
|
+
resizingCanvasContext.drawImage(
|
|
40
|
+
img,
|
|
41
|
+
0,
|
|
42
|
+
0,
|
|
43
|
+
resizingCanvas.width,
|
|
44
|
+
resizingCanvas.height
|
|
45
|
+
);
|
|
46
|
+
|
|
47
|
+
const curImageDimensions = {
|
|
48
|
+
width: Math.floor(img.width),
|
|
49
|
+
height: Math.floor(img.height),
|
|
50
|
+
};
|
|
51
|
+
|
|
52
|
+
const halfImageDimensions = {
|
|
53
|
+
width: null as number | null,
|
|
54
|
+
height: null as number | null,
|
|
55
|
+
};
|
|
56
|
+
|
|
57
|
+
// Quickly reduce the size by 50% each time in few iterations until the size is less then
|
|
58
|
+
// 2x time the target size - the motivation for it, is to reduce the aliasing that would have been
|
|
59
|
+
// created with direct reduction of very big image to small image
|
|
60
|
+
while (curImageDimensions.width * 0.5 > width) {
|
|
61
|
+
// Reduce the resizing canvas by half and refresh the image
|
|
62
|
+
halfImageDimensions.width = Math.floor(curImageDimensions.width * 0.5);
|
|
63
|
+
halfImageDimensions.height = Math.floor(
|
|
64
|
+
curImageDimensions.height * 0.5
|
|
65
|
+
);
|
|
66
|
+
|
|
67
|
+
resizingCanvasContext.drawImage(
|
|
68
|
+
resizingCanvas,
|
|
69
|
+
0,
|
|
70
|
+
0,
|
|
71
|
+
curImageDimensions.width,
|
|
72
|
+
curImageDimensions.height,
|
|
73
|
+
0,
|
|
74
|
+
0,
|
|
75
|
+
halfImageDimensions.width,
|
|
76
|
+
halfImageDimensions.height
|
|
77
|
+
);
|
|
78
|
+
|
|
79
|
+
curImageDimensions.width = halfImageDimensions.width;
|
|
80
|
+
curImageDimensions.height = halfImageDimensions.height;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
// Now do final resize for the resizingCanvas to meet the dimension requirements
|
|
84
|
+
// directly to the output canvas, that will output the final image
|
|
85
|
+
const outputCanvas: HTMLCanvasElement = document.createElement('canvas');
|
|
86
|
+
const outputCanvasContext = outputCanvas.getContext('2d');
|
|
87
|
+
|
|
88
|
+
outputCanvas.width = width;
|
|
89
|
+
outputCanvas.height = height;
|
|
90
|
+
|
|
91
|
+
if (!outputCanvasContext) {
|
|
92
|
+
reject('Could not acquire context 2d');
|
|
93
|
+
return;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
outputCanvasContext.drawImage(
|
|
97
|
+
resizingCanvas,
|
|
98
|
+
0,
|
|
99
|
+
0,
|
|
100
|
+
curImageDimensions.width,
|
|
101
|
+
curImageDimensions.height,
|
|
102
|
+
0,
|
|
103
|
+
0,
|
|
104
|
+
width,
|
|
105
|
+
height
|
|
106
|
+
);
|
|
107
|
+
|
|
108
|
+
// output the canvas pixels as an image. params: format, quality
|
|
109
|
+
const base64ResizedImage = outputCanvas.toDataURL('image/jpeg', 0.85);
|
|
110
|
+
|
|
111
|
+
// Cleanup
|
|
112
|
+
resizingCanvas.remove();
|
|
113
|
+
outputCanvas.remove();
|
|
114
|
+
|
|
115
|
+
resolve(base64ResizedImage);
|
|
116
|
+
};
|
|
117
|
+
});
|
|
118
|
+
}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import { disablePageScroll, enablePageScroll } from 'scroll-lock';
|
|
2
|
-
|
|
3
|
-
function disableScroll() {
|
|
4
|
-
disablePageScroll();
|
|
5
|
-
}
|
|
6
|
-
|
|
7
|
-
function enableScroll() {
|
|
8
|
-
enablePageScroll();
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
export { disableScroll, enableScroll };
|
|
1
|
+
import { disablePageScroll, enablePageScroll } from 'scroll-lock';
|
|
2
|
+
|
|
3
|
+
function disableScroll() {
|
|
4
|
+
disablePageScroll();
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
function enableScroll() {
|
|
8
|
+
enablePageScroll();
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
export { disableScroll, enableScroll };
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export enum SizeBehavior {
|
|
2
|
-
default = 'default',
|
|
3
|
-
input = 'input',
|
|
1
|
+
export enum SizeBehavior {
|
|
2
|
+
default = 'default',
|
|
3
|
+
input = 'input',
|
|
4
4
|
}
|
package/src/utils/sizes.ts
CHANGED
|
@@ -1,38 +1,38 @@
|
|
|
1
|
-
const sizes = {
|
|
2
|
-
xs: {
|
|
3
|
-
fontSize: 'text-xs',
|
|
4
|
-
height: 'h-control-xs',
|
|
5
|
-
iconSize: 'h-[0.9rem] w-[0.9rem]',
|
|
6
|
-
buttonClass: 'btn-xs',
|
|
7
|
-
},
|
|
8
|
-
sm: {
|
|
9
|
-
fontSize: 'text-sm',
|
|
10
|
-
height: 'h-control-sm',
|
|
11
|
-
iconSize: 'h-[1.125rem] w-[1.125rem]',
|
|
12
|
-
buttonClass: 'btn-sm',
|
|
13
|
-
},
|
|
14
|
-
md: {
|
|
15
|
-
fontSize: 'text-base',
|
|
16
|
-
height: 'h-control-md',
|
|
17
|
-
iconSize: 'h-5 w-5',
|
|
18
|
-
buttonClass: 'btn-md',
|
|
19
|
-
},
|
|
20
|
-
lg: {
|
|
21
|
-
fontSize: 'text-lg',
|
|
22
|
-
height: 'h-control-lg',
|
|
23
|
-
iconSize: 'h-6 w-6',
|
|
24
|
-
buttonClass: 'btn-lg',
|
|
25
|
-
},
|
|
26
|
-
xl: {
|
|
27
|
-
fontSize: 'text-xl',
|
|
28
|
-
height: 'h-control-xl',
|
|
29
|
-
iconSize: 'h-7 w-7',
|
|
30
|
-
buttonClass: 'btn-xl',
|
|
31
|
-
}
|
|
32
|
-
};
|
|
33
|
-
|
|
34
|
-
type Size = keyof typeof sizes;
|
|
35
|
-
|
|
36
|
-
export { sizes };
|
|
37
|
-
|
|
38
|
-
export type { Size };
|
|
1
|
+
const sizes = {
|
|
2
|
+
xs: {
|
|
3
|
+
fontSize: 'text-xs',
|
|
4
|
+
height: 'h-control-xs',
|
|
5
|
+
iconSize: 'h-[0.9rem] w-[0.9rem]',
|
|
6
|
+
buttonClass: 'btn-xs',
|
|
7
|
+
},
|
|
8
|
+
sm: {
|
|
9
|
+
fontSize: 'text-sm',
|
|
10
|
+
height: 'h-control-sm',
|
|
11
|
+
iconSize: 'h-[1.125rem] w-[1.125rem]',
|
|
12
|
+
buttonClass: 'btn-sm',
|
|
13
|
+
},
|
|
14
|
+
md: {
|
|
15
|
+
fontSize: 'text-base',
|
|
16
|
+
height: 'h-control-md',
|
|
17
|
+
iconSize: 'h-5 w-5',
|
|
18
|
+
buttonClass: 'btn-md',
|
|
19
|
+
},
|
|
20
|
+
lg: {
|
|
21
|
+
fontSize: 'text-lg',
|
|
22
|
+
height: 'h-control-lg',
|
|
23
|
+
iconSize: 'h-6 w-6',
|
|
24
|
+
buttonClass: 'btn-lg',
|
|
25
|
+
},
|
|
26
|
+
xl: {
|
|
27
|
+
fontSize: 'text-xl',
|
|
28
|
+
height: 'h-control-xl',
|
|
29
|
+
iconSize: 'h-7 w-7',
|
|
30
|
+
buttonClass: 'btn-xl',
|
|
31
|
+
}
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
type Size = keyof typeof sizes;
|
|
35
|
+
|
|
36
|
+
export { sizes };
|
|
37
|
+
|
|
38
|
+
export type { Size };
|
package/src/utils/slots.ts
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
import { Comment } from 'vue';
|
|
2
|
-
|
|
3
|
-
export function isSlotEmpty(slot: any, props = {}) {
|
|
4
|
-
return isVNodeEmpty(slot?.(props))
|
|
5
|
-
}
|
|
6
|
-
|
|
7
|
-
function isVNodeEmpty(vnode: any) {
|
|
8
|
-
return !vnode || asArray(vnode).every((vnode) => vnode.type === Comment)
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
function asArray(arg: any) {
|
|
12
|
-
return Array.isArray(arg) ? arg : arg != null ? [arg] : []
|
|
1
|
+
import { Comment } from 'vue';
|
|
2
|
+
|
|
3
|
+
export function isSlotEmpty(slot: any, props = {}) {
|
|
4
|
+
return isVNodeEmpty(slot?.(props))
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
function isVNodeEmpty(vnode: any) {
|
|
8
|
+
return !vnode || asArray(vnode).every((vnode) => vnode.type === Comment)
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
function asArray(arg: any) {
|
|
12
|
+
return Array.isArray(arg) ? arg : arg != null ? [arg] : []
|
|
13
13
|
}
|