vuetify 3.2.4 → 3.3.0
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/dist/_component-variables-labs.sass +1 -0
- package/dist/json/attributes.json +2503 -2151
- package/dist/json/importMap-labs.json +12 -4
- package/dist/json/importMap.json +28 -28
- package/dist/json/tags.json +107 -9
- package/dist/json/web-types.json +10785 -7110
- package/dist/vuetify-labs.css +263 -153
- package/dist/vuetify-labs.d.ts +35870 -16257
- package/dist/vuetify-labs.esm.js +1466 -934
- package/dist/vuetify-labs.esm.js.map +1 -1
- package/dist/vuetify-labs.js +1465 -933
- package/dist/vuetify-labs.min.css +2 -2
- package/dist/vuetify.css +246 -168
- package/dist/vuetify.d.ts +27883 -14061
- package/dist/vuetify.esm.js +477 -300
- package/dist/vuetify.esm.js.map +1 -1
- package/dist/vuetify.js +476 -299
- package/dist/vuetify.js.map +1 -1
- package/dist/vuetify.min.css +2 -2
- package/dist/vuetify.min.js +811 -806
- package/dist/vuetify.min.js.map +1 -1
- package/lib/blueprints/{index.d.ts → index.d.mts} +5 -1
- package/lib/blueprints/{md1.d.ts → md1.d.mts} +5 -1
- package/lib/blueprints/{md2.d.ts → md2.d.mts} +5 -1
- package/lib/blueprints/{md3.d.ts → md3.d.mts} +5 -1
- package/lib/components/VAlert/VAlert.mjs.map +1 -1
- package/lib/components/VAlert/{index.d.ts → index.d.mts} +284 -69
- package/lib/components/VApp/{index.d.ts → index.d.mts} +80 -19
- package/lib/components/VAppBar/{index.d.ts → index.d.mts} +391 -119
- package/lib/components/VAutocomplete/VAutocomplete.css +15 -9
- package/lib/components/VAutocomplete/VAutocomplete.mjs +82 -34
- package/lib/components/VAutocomplete/VAutocomplete.mjs.map +1 -1
- package/lib/components/VAutocomplete/VAutocomplete.sass +15 -11
- package/lib/components/VAutocomplete/index.d.mts +2048 -0
- package/lib/components/VAvatar/{index.d.ts → index.d.mts} +85 -30
- package/lib/components/VBadge/_variables.scss +1 -1
- package/lib/components/VBadge/{index.d.ts → index.d.mts} +105 -42
- package/lib/components/VBanner/{index.d.ts → index.d.mts} +282 -63
- package/lib/components/VBottomNavigation/{index.d.ts → index.d.mts} +93 -45
- package/lib/components/VBreadcrumbs/VBreadcrumbs.mjs +1 -1
- package/lib/components/VBreadcrumbs/VBreadcrumbs.mjs.map +1 -1
- package/lib/components/VBreadcrumbs/VBreadcrumbsDivider.mjs +1 -1
- package/lib/components/VBreadcrumbs/VBreadcrumbsDivider.mjs.map +1 -1
- package/lib/components/VBreadcrumbs/{index.d.ts → index.d.mts} +348 -212
- package/lib/components/VBtn/{index.d.ts → index.d.mts} +139 -53
- package/lib/components/VBtnGroup/{index.d.ts → index.d.mts} +84 -27
- package/lib/components/VBtnToggle/{index.d.ts → index.d.mts} +88 -35
- package/lib/components/VCalendar/util/props.mjs.map +1 -1
- package/lib/components/VCard/VCard.mjs.map +1 -1
- package/lib/components/VCard/{index.d.ts → index.d.mts} +957 -419
- package/lib/components/VCarousel/VCarousel.mjs.map +1 -1
- package/lib/components/VCarousel/{index.d.ts → index.d.mts} +616 -111
- package/lib/components/VCheckbox/VCheckboxBtn.mjs +3 -3
- package/lib/components/VCheckbox/VCheckboxBtn.mjs.map +1 -1
- package/lib/components/VCheckbox/{index.d.ts → index.d.mts} +408 -141
- package/lib/components/VChip/VChip.css +4 -2
- package/lib/components/VChip/VChip.mjs.map +1 -1
- package/lib/components/VChip/VChip.sass +3 -2
- package/lib/components/VChip/{index.d.ts → index.d.mts} +376 -85
- package/lib/components/VChipGroup/VChipGroup.mjs.map +1 -1
- package/lib/components/VChipGroup/index.d.mts +470 -0
- package/lib/components/VCode/{index.d.ts → index.d.mts} +78 -17
- package/lib/components/VColorPicker/VColorPicker.mjs +9 -4
- package/lib/components/VColorPicker/VColorPicker.mjs.map +1 -1
- package/lib/components/VColorPicker/VColorPickerEdit.mjs.map +1 -1
- package/lib/components/VColorPicker/VColorPickerSwatches.mjs +5 -4
- package/lib/components/VColorPicker/VColorPickerSwatches.mjs.map +1 -1
- package/lib/components/VColorPicker/{index.d.ts → index.d.mts} +241 -109
- package/lib/components/VColorPicker/util/index.mjs +2 -22
- package/lib/components/VColorPicker/util/index.mjs.map +1 -1
- package/lib/components/VCombobox/VCombobox.css +15 -9
- package/lib/components/VCombobox/VCombobox.mjs +82 -37
- package/lib/components/VCombobox/VCombobox.mjs.map +1 -1
- package/lib/components/VCombobox/VCombobox.sass +15 -11
- package/lib/components/VCombobox/index.d.mts +2060 -0
- package/lib/components/VCounter/VCounter.mjs.map +1 -1
- package/lib/components/VCounter/{index.d.ts → index.d.mts} +105 -45
- package/lib/components/VDefaultsProvider/{index.d.ts → index.d.mts} +82 -20
- package/lib/components/VDialog/{index.d.ts → index.d.mts} +571 -305
- package/lib/components/VDivider/{index.d.ts → index.d.mts} +81 -21
- package/lib/components/VExpansionPanel/{index.d.ts → index.d.mts} +374 -110
- package/lib/components/VField/VField.css +49 -16
- package/lib/components/VField/VField.mjs +12 -2
- package/lib/components/VField/VField.mjs.map +1 -1
- package/lib/components/VField/VField.sass +40 -11
- package/lib/components/VField/_variables.scss +8 -2
- package/lib/components/VField/index.d.mts +682 -0
- package/lib/components/VFileInput/VFileInput.css +3 -0
- package/lib/components/VFileInput/VFileInput.mjs +7 -1
- package/lib/components/VFileInput/VFileInput.mjs.map +1 -1
- package/lib/components/VFileInput/VFileInput.sass +6 -1
- package/lib/components/VFileInput/{index.d.ts → index.d.mts} +1033 -399
- package/lib/components/VFooter/{index.d.ts → index.d.mts} +85 -29
- package/lib/components/VForm/VForm.mjs.map +1 -1
- package/lib/components/VForm/index.d.mts +993 -0
- package/lib/components/VGrid/{index.d.ts → index.d.mts} +334 -100
- package/lib/components/VHover/VHover.mjs.map +1 -1
- package/lib/components/VHover/{index.d.ts → index.d.mts} +120 -37
- package/lib/components/VIcon/{index.d.ts → index.d.mts} +322 -81
- package/lib/components/VImg/VImg.css +2 -4
- package/lib/components/VImg/VImg.mjs +25 -24
- package/lib/components/VImg/VImg.mjs.map +1 -1
- package/lib/components/VImg/VImg.sass +4 -3
- package/lib/components/VImg/{index.d.ts → index.d.mts} +177 -40
- package/lib/components/VInput/VInput.css +10 -4
- package/lib/components/VInput/VInput.mjs +9 -3
- package/lib/components/VInput/VInput.mjs.map +1 -1
- package/lib/components/VInput/VInput.sass +7 -2
- package/lib/components/VInput/_variables.scss +1 -0
- package/lib/components/VInput/{index.d.ts → index.d.mts} +237 -93
- package/lib/components/VItemGroup/VItem.mjs +1 -1
- package/lib/components/VItemGroup/VItem.mjs.map +1 -1
- package/lib/components/VItemGroup/VItemGroup.mjs.map +1 -1
- package/lib/components/VItemGroup/index.d.mts +781 -0
- package/lib/components/VKbd/{index.d.ts → index.d.mts} +78 -17
- package/lib/components/VLabel/{index.d.ts → index.d.mts} +79 -18
- package/lib/components/VLayout/{index.d.ts → index.d.mts} +161 -42
- package/lib/components/VLazy/{index.d.ts → index.d.mts} +82 -27
- package/lib/components/VList/VList.mjs +6 -1
- package/lib/components/VList/VList.mjs.map +1 -1
- package/lib/components/VList/VListChildren.mjs +4 -8
- package/lib/components/VList/VListChildren.mjs.map +1 -1
- package/lib/components/VList/VListGroup.mjs +3 -0
- package/lib/components/VList/VListGroup.mjs.map +1 -1
- package/lib/components/VList/VListItem.mjs +11 -6
- package/lib/components/VList/VListItem.mjs.map +1 -1
- package/lib/components/VList/{index.d.ts → index.d.mts} +1245 -619
- package/lib/components/VLocaleProvider/{index.d.ts → index.d.mts} +80 -19
- package/lib/components/VMain/{index.d.ts → index.d.mts} +79 -19
- package/lib/components/VMenu/{index.d.ts → index.d.mts} +567 -299
- package/lib/components/VMessages/VMessages.mjs.map +1 -1
- package/lib/components/VMessages/{index.d.ts → index.d.mts} +87 -34
- package/lib/components/VNavigationDrawer/VNavigationDrawer.css +2 -0
- package/lib/components/VNavigationDrawer/VNavigationDrawer.mjs.map +1 -1
- package/lib/components/VNavigationDrawer/VNavigationDrawer.sass +2 -0
- package/lib/components/VNavigationDrawer/{index.d.ts → index.d.mts} +139 -57
- package/lib/components/VOverlay/{index.d.ts → index.d.mts} +159 -75
- package/lib/components/VPagination/VPagination.mjs.map +1 -1
- package/lib/components/VPagination/{index.d.ts → index.d.mts} +229 -125
- package/lib/components/VParallax/{index.d.ts → index.d.mts} +118 -18
- package/lib/components/VProgressCircular/VProgressCircular.mjs.map +1 -1
- package/lib/components/VProgressCircular/{index.d.ts → index.d.mts} +148 -45
- package/lib/components/VProgressLinear/{index.d.ts → index.d.mts} +119 -52
- package/lib/components/VRadio/{index.d.ts → index.d.mts} +139 -40
- package/lib/components/VRadioGroup/{index.d.ts → index.d.mts} +265 -93
- package/lib/components/VRangeSlider/VRangeSlider.mjs +4 -4
- package/lib/components/VRangeSlider/VRangeSlider.mjs.map +1 -1
- package/lib/components/VRangeSlider/{index.d.ts → index.d.mts} +313 -132
- package/lib/components/VRating/{index.d.ts → index.d.mts} +108 -49
- package/lib/components/VResponsive/VResponsive.css +13 -5
- package/lib/components/VResponsive/VResponsive.mjs +4 -1
- package/lib/components/VResponsive/VResponsive.mjs.map +1 -1
- package/lib/components/VResponsive/VResponsive.sass +12 -4
- package/lib/components/VResponsive/{index.d.ts → index.d.mts} +99 -16
- package/lib/components/VSelect/VSelect.css +15 -9
- package/lib/components/VSelect/VSelect.mjs +23 -18
- package/lib/components/VSelect/VSelect.mjs.map +1 -1
- package/lib/components/VSelect/VSelect.sass +14 -11
- package/lib/components/VSelect/index.d.mts +1986 -0
- package/lib/components/VSelectionControl/VSelectionControl.mjs.map +1 -1
- package/lib/components/VSelectionControl/index.d.mts +403 -0
- package/lib/components/VSelectionControlGroup/{index.d.ts → index.d.mts} +90 -38
- package/lib/components/VSheet/{index.d.ts → index.d.mts} +81 -21
- package/lib/components/VSlideGroup/{index.d.ts → index.d.mts} +236 -61
- package/lib/components/VSlider/VSlider.mjs +2 -2
- package/lib/components/VSlider/VSlider.mjs.map +1 -1
- package/lib/components/VSlider/VSliderThumb.mjs +1 -1
- package/lib/components/VSlider/VSliderThumb.mjs.map +1 -1
- package/lib/components/VSlider/VSliderTrack.mjs.map +1 -1
- package/lib/components/VSlider/{index.d.ts → index.d.mts} +308 -126
- package/lib/components/VSlider/slider.mjs +8 -2
- package/lib/components/VSlider/slider.mjs.map +1 -1
- package/lib/components/VSnackbar/{index.d.ts → index.d.mts} +566 -297
- package/lib/components/VSwitch/VSwitch.css +3 -3
- package/lib/components/VSwitch/VSwitch.sass +4 -3
- package/lib/components/VSwitch/{index.d.ts → index.d.mts} +284 -101
- package/lib/components/VSystemBar/{index.d.ts → index.d.mts} +84 -27
- package/lib/components/VTable/{index.d.ts → index.d.mts} +122 -26
- package/lib/components/VTabs/VTabs.mjs.map +1 -1
- package/lib/components/VTabs/{index.d.ts → index.d.mts} +203 -113
- package/lib/components/VTextField/VTextField.css +9 -1
- package/lib/components/VTextField/VTextField.mjs +4 -2
- package/lib/components/VTextField/VTextField.mjs.map +1 -1
- package/lib/components/VTextField/VTextField.sass +8 -1
- package/lib/components/VTextField/index.d.mts +2735 -0
- package/lib/components/VTextarea/VTextarea.mjs +13 -4
- package/lib/components/VTextarea/VTextarea.mjs.map +1 -1
- package/lib/components/VTextarea/{index.d.ts → index.d.mts} +933 -393
- package/lib/components/VThemeProvider/{index.d.ts → index.d.mts} +80 -20
- package/lib/components/VTimeline/{index.d.ts → index.d.mts} +201 -62
- package/lib/components/VToolbar/{index.d.ts → index.d.mts} +325 -73
- package/lib/components/VTooltip/{index.d.ts → index.d.mts} +568 -297
- package/lib/components/VValidation/VValidation.mjs.map +1 -1
- package/lib/components/VValidation/index.d.mts +634 -0
- package/lib/components/VVirtualScroll/VVirtualScroll.mjs.map +1 -1
- package/lib/components/VVirtualScroll/index.d.mts +229 -0
- package/lib/components/VWindow/{index.d.ts → index.d.mts} +271 -68
- package/lib/components/{index.d.ts → index.d.mts} +27847 -14031
- package/lib/components/index.mjs +2 -3
- package/lib/components/index.mjs.map +1 -1
- package/lib/components/transitions/{index.d.ts → index.d.mts} +1330 -355
- package/lib/composables/display.mjs +6 -6
- package/lib/composables/display.mjs.map +1 -1
- package/lib/composables/filter.mjs +5 -4
- package/lib/composables/filter.mjs.map +1 -1
- package/lib/composables/form.mjs +2 -3
- package/lib/composables/form.mjs.map +1 -1
- package/lib/composables/forwardRefs.mjs.map +1 -1
- package/lib/composables/group.mjs +13 -13
- package/lib/composables/group.mjs.map +1 -1
- package/lib/composables/icons.mjs.map +1 -1
- package/lib/composables/{items.mjs → list-items.mjs} +9 -6
- package/lib/composables/list-items.mjs.map +1 -0
- package/lib/composables/nested/nested.mjs.map +1 -1
- package/lib/composables/nested/selectStrategies.mjs.map +1 -1
- package/lib/composables/scroll.mjs +2 -2
- package/lib/composables/scroll.mjs.map +1 -1
- package/lib/composables/validation.mjs +44 -16
- package/lib/composables/validation.mjs.map +1 -1
- package/lib/entry-bundler.mjs +1 -1
- package/lib/framework.mjs +1 -1
- package/lib/framework.mjs.map +1 -1
- package/lib/{index.d.ts → index.d.mts} +16 -10
- package/lib/labs/VBottomSheet/VBottomSheet.css +33 -0
- package/lib/labs/VBottomSheet/VBottomSheet.mjs +40 -0
- package/lib/labs/VBottomSheet/VBottomSheet.mjs.map +1 -0
- package/lib/labs/VBottomSheet/VBottomSheet.sass +37 -0
- package/lib/labs/VBottomSheet/_variables.scss +5 -0
- package/lib/labs/VBottomSheet/index.d.mts +871 -0
- package/lib/labs/VBottomSheet/index.mjs +2 -0
- package/lib/labs/VBottomSheet/index.mjs.map +1 -0
- package/lib/labs/VDataIterator/VDataIterator.mjs +160 -0
- package/lib/labs/VDataIterator/VDataIterator.mjs.map +1 -0
- package/lib/labs/VDataIterator/composables/items.mjs +37 -0
- package/lib/labs/VDataIterator/composables/items.mjs.map +1 -0
- package/lib/labs/VDataIterator/index.d.mts +704 -0
- package/lib/labs/VDataIterator/index.mjs +2 -0
- package/lib/labs/VDataIterator/index.mjs.map +1 -0
- package/lib/labs/VDataTable/VDataTable.mjs +58 -20
- package/lib/labs/VDataTable/VDataTable.mjs.map +1 -1
- package/lib/labs/VDataTable/VDataTableFooter.mjs.map +1 -1
- package/lib/labs/VDataTable/VDataTableGroupHeaderRow.mjs.map +1 -1
- package/lib/labs/VDataTable/VDataTableHeaders.mjs +17 -10
- package/lib/labs/VDataTable/VDataTableHeaders.mjs.map +1 -1
- package/lib/labs/VDataTable/VDataTableRows.mjs +1 -1
- package/lib/labs/VDataTable/VDataTableRows.mjs.map +1 -1
- package/lib/labs/VDataTable/VDataTableServer.mjs +50 -14
- package/lib/labs/VDataTable/VDataTableServer.mjs.map +1 -1
- package/lib/labs/VDataTable/VDataTableVirtual.mjs +50 -13
- package/lib/labs/VDataTable/VDataTableVirtual.mjs.map +1 -1
- package/lib/labs/VDataTable/composables/expand.mjs.map +1 -1
- package/lib/labs/VDataTable/composables/group.mjs +8 -6
- package/lib/labs/VDataTable/composables/group.mjs.map +1 -1
- package/lib/labs/VDataTable/composables/headers.mjs +2 -3
- package/lib/labs/VDataTable/composables/headers.mjs.map +1 -1
- package/lib/labs/VDataTable/composables/items.mjs +31 -32
- package/lib/labs/VDataTable/composables/items.mjs.map +1 -1
- package/lib/labs/VDataTable/composables/paginate.mjs +14 -2
- package/lib/labs/VDataTable/composables/paginate.mjs.map +1 -1
- package/lib/labs/VDataTable/composables/select.mjs +3 -3
- package/lib/labs/VDataTable/composables/select.mjs.map +1 -1
- package/lib/labs/VDataTable/composables/sort.mjs +17 -17
- package/lib/labs/VDataTable/composables/sort.mjs.map +1 -1
- package/lib/labs/VDataTable/composables/virtual.mjs.map +1 -1
- package/lib/labs/VDataTable/index.d.mts +9681 -0
- package/lib/labs/VDataTable/index.mjs +1 -1
- package/lib/labs/VDataTable/index.mjs.map +1 -1
- package/lib/labs/VDataTable/types.mjs.map +1 -1
- package/lib/labs/VInfiniteScroll/VInfiniteScroll.mjs.map +1 -1
- package/lib/labs/VInfiniteScroll/{index.d.ts → index.d.mts} +161 -54
- package/lib/labs/VSkeletonLoader/VSkeletonLoader.mjs.map +1 -1
- package/lib/labs/VSkeletonLoader/{index.d.ts → index.d.mts} +92 -31
- package/lib/labs/components.d.mts +11806 -0
- package/lib/labs/components.mjs +2 -0
- package/lib/labs/components.mjs.map +1 -1
- package/lib/labs/date/date.mjs.map +1 -1
- package/lib/labs/date/index.d.mts +70 -0
- package/lib/labs/date/index.mjs +1 -1
- package/lib/labs/date/index.mjs.map +1 -1
- package/lib/styles/settings/_variables.scss +3 -3
- package/lib/util/colorUtils.mjs +68 -3
- package/lib/util/colorUtils.mjs.map +1 -1
- package/lib/util/console.mjs +12 -81
- package/lib/util/console.mjs.map +1 -1
- package/lib/util/defineComponent.mjs.map +1 -1
- package/lib/util/helpers.mjs +4 -18
- package/lib/util/helpers.mjs.map +1 -1
- package/lib/util/propsFactory.mjs +2 -0
- package/lib/util/propsFactory.mjs.map +1 -1
- package/package.json +13 -9
- package/lib/components/VAutocomplete/index.d.ts +0 -2050
- package/lib/components/VBottomSheet/VBottomSheet.mjs +0 -29
- package/lib/components/VBottomSheet/VBottomSheet.mjs.map +0 -1
- package/lib/components/VBottomSheet/VBottomSheet.sass +0 -23
- package/lib/components/VBottomSheet/_variables.scss +0 -3
- package/lib/components/VBottomSheet/index.mjs +0 -4
- package/lib/components/VBottomSheet/index.mjs.map +0 -1
- package/lib/components/VChipGroup/index.d.ts +0 -280
- package/lib/components/VCombobox/index.d.ts +0 -2086
- package/lib/components/VData/VData.mjs +0 -374
- package/lib/components/VData/VData.mjs.map +0 -1
- package/lib/components/VData/index.mjs +0 -4
- package/lib/components/VData/index.mjs.map +0 -1
- package/lib/components/VDataIterator/VDataFooter.mjs +0 -194
- package/lib/components/VDataIterator/VDataFooter.mjs.map +0 -1
- package/lib/components/VDataIterator/VDataFooter.sass +0 -71
- package/lib/components/VDataIterator/VDataIterator.mjs +0 -316
- package/lib/components/VDataIterator/VDataIterator.mjs.map +0 -1
- package/lib/components/VDataIterator/_variables.scss +0 -13
- package/lib/components/VDataIterator/index.mjs +0 -10
- package/lib/components/VDataIterator/index.mjs.map +0 -1
- package/lib/components/VField/index.d.ts +0 -563
- package/lib/components/VForm/index.d.ts +0 -284
- package/lib/components/VItemGroup/index.d.ts +0 -396
- package/lib/components/VSelect/index.d.ts +0 -1981
- package/lib/components/VSelectionControl/index.d.ts +0 -387
- package/lib/components/VTextField/index.d.ts +0 -2061
- package/lib/components/VValidation/index.d.ts +0 -243
- package/lib/components/VVirtualScroll/index.d.ts +0 -197
- package/lib/composables/items.mjs.map +0 -1
- package/lib/labs/VDataTable/index.d.ts +0 -5415
- package/lib/labs/components.d.ts +0 -5945
- package/lib/labs/date/index.d.ts +0 -38
- /package/lib/components/VNoSsr/{index.d.ts → index.d.mts} +0 -0
- /package/lib/directives/{index.d.ts → index.d.mts} +0 -0
- /package/lib/iconsets/{fa-svg.d.ts → fa-svg.d.mts} +0 -0
- /package/lib/iconsets/{fa.d.ts → fa.d.mts} +0 -0
- /package/lib/iconsets/{fa4.d.ts → fa4.d.mts} +0 -0
- /package/lib/iconsets/{md.d.ts → md.d.mts} +0 -0
- /package/lib/iconsets/{mdi-svg.d.ts → mdi-svg.d.mts} +0 -0
- /package/lib/iconsets/{mdi.d.ts → mdi.d.mts} +0 -0
- /package/lib/labs/date/adapters/{vuetify.d.ts → vuetify.d.mts} +0 -0
- /package/lib/locale/adapters/{vue-i18n.d.ts → vue-i18n.d.mts} +0 -0
- /package/lib/locale/adapters/{vuetify.d.ts → vuetify.d.mts} +0 -0
- /package/lib/locale/{index.d.ts → index.d.mts} +0 -0
|
@@ -20,14 +20,14 @@ const parseDisplayOptions = function () {
|
|
|
20
20
|
let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : defaultDisplayOptions;
|
|
21
21
|
return mergeDeep(defaultDisplayOptions, options);
|
|
22
22
|
};
|
|
23
|
-
function getClientWidth(
|
|
24
|
-
return IN_BROWSER && !
|
|
23
|
+
function getClientWidth(ssr) {
|
|
24
|
+
return IN_BROWSER && !ssr ? window.innerWidth : typeof ssr === 'object' && ssr.clientWidth || 0;
|
|
25
25
|
}
|
|
26
|
-
function getClientHeight(
|
|
27
|
-
return IN_BROWSER && !
|
|
26
|
+
function getClientHeight(ssr) {
|
|
27
|
+
return IN_BROWSER && !ssr ? window.innerHeight : typeof ssr === 'object' && ssr.clientHeight || 0;
|
|
28
28
|
}
|
|
29
|
-
function getPlatform(
|
|
30
|
-
const userAgent = IN_BROWSER && !
|
|
29
|
+
function getPlatform(ssr) {
|
|
30
|
+
const userAgent = IN_BROWSER && !ssr ? window.navigator.userAgent : 'ssr';
|
|
31
31
|
function match(regexp) {
|
|
32
32
|
return Boolean(userAgent.match(regexp));
|
|
33
33
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"display.mjs","names":["inject","reactive","shallowRef","toRefs","watchEffect","mergeDeep","IN_BROWSER","SUPPORTS_TOUCH","breakpoints","DisplaySymbol","Symbol","for","defaultDisplayOptions","mobileBreakpoint","thresholds","xs","sm","md","lg","xl","xxl","parseDisplayOptions","options","arguments","length","undefined","getClientWidth","isHydrate","window","innerWidth","getClientHeight","innerHeight","getPlatform","userAgent","navigator","match","regexp","Boolean","android","ios","cordova","electron","chrome","edge","firefox","opera","win","mac","linux","touch","ssr","createDisplay","height","platform","state","width","updateSize","value","update","name","breakpointValue","mobile","smAndUp","mdAndUp","lgAndUp","xlAndUp","smAndDown","mdAndDown","lgAndDown","xlAndDown","addEventListener","passive","useDisplay","display","Error"],"sources":["../../src/composables/display.ts"],"sourcesContent":["// Utilities\nimport { inject, reactive, shallowRef, toRefs, watchEffect } from 'vue'\nimport { mergeDeep } from '@/util'\n\n// Globals\nimport { IN_BROWSER, SUPPORTS_TOUCH } from '@/util/globals'\n\n// Types\nimport type { InjectionKey, Ref } from 'vue'\n\nexport const breakpoints = ['sm', 'md', 'lg', 'xl', 'xxl'] as const // no xs\n\nexport type Breakpoint = typeof breakpoints[number]\n\nexport type DisplayBreakpoint = 'xs' | Breakpoint\n\nexport type DisplayThresholds = {\n [key in DisplayBreakpoint]: number\n}\n\nexport interface DisplayOptions {\n mobileBreakpoint?: number | DisplayBreakpoint\n thresholds?: Partial<DisplayThresholds>\n}\n\nexport interface InternalDisplayOptions {\n mobileBreakpoint: number | DisplayBreakpoint\n thresholds: DisplayThresholds\n}\n\nexport interface DisplayPlatform {\n android: boolean\n ios: boolean\n cordova: boolean\n electron: boolean\n chrome: boolean\n edge: boolean\n firefox: boolean\n opera: boolean\n win: boolean\n mac: boolean\n linux: boolean\n touch: boolean\n ssr: boolean\n}\n\nexport interface DisplayInstance {\n xs: Ref<boolean>\n sm: Ref<boolean>\n md: Ref<boolean>\n lg: Ref<boolean>\n xl: Ref<boolean>\n xxl: Ref<boolean>\n smAndUp: Ref<boolean>\n mdAndUp: Ref<boolean>\n lgAndUp: Ref<boolean>\n xlAndUp: Ref<boolean>\n smAndDown: Ref<boolean>\n mdAndDown: Ref<boolean>\n lgAndDown: Ref<boolean>\n xlAndDown: Ref<boolean>\n name: Ref<DisplayBreakpoint>\n height: Ref<number>\n width: Ref<number>\n mobile: Ref<boolean>\n mobileBreakpoint: Ref<number | DisplayBreakpoint>\n platform: Ref<DisplayPlatform>\n thresholds: Ref<DisplayThresholds>\n\n /** @internal */\n ssr: boolean\n\n update (): void\n}\n\nexport const DisplaySymbol: InjectionKey<DisplayInstance> = Symbol.for('vuetify:display')\n\nconst defaultDisplayOptions: DisplayOptions = {\n mobileBreakpoint: 'lg',\n thresholds: {\n xs: 0,\n sm: 600,\n md: 960,\n lg: 1280,\n xl: 1920,\n xxl: 2560,\n },\n}\n\nconst parseDisplayOptions = (options: DisplayOptions = defaultDisplayOptions) => {\n return mergeDeep(defaultDisplayOptions, options) as InternalDisplayOptions\n}\n\nfunction getClientWidth (isHydrate?: boolean) {\n return IN_BROWSER && !isHydrate\n ? window.innerWidth\n : 0\n}\n\nfunction getClientHeight (isHydrate?: boolean) {\n return IN_BROWSER && !isHydrate\n ? window.innerHeight\n : 0\n}\n\nfunction getPlatform (isHydrate?: boolean): DisplayPlatform {\n const userAgent = IN_BROWSER && !isHydrate\n ? window.navigator.userAgent\n : 'ssr'\n\n function match (regexp: RegExp) {\n return Boolean(userAgent.match(regexp))\n }\n\n const android = match(/android/i)\n const ios = match(/iphone|ipad|ipod/i)\n const cordova = match(/cordova/i)\n const electron = match(/electron/i)\n const chrome = match(/chrome/i)\n const edge = match(/edge/i)\n const firefox = match(/firefox/i)\n const opera = match(/opera/i)\n const win = match(/win/i)\n const mac = match(/mac/i)\n const linux = match(/linux/i)\n\n return {\n android,\n ios,\n cordova,\n electron,\n chrome,\n edge,\n firefox,\n opera,\n win,\n mac,\n linux,\n touch: SUPPORTS_TOUCH,\n ssr: userAgent === 'ssr',\n }\n}\n\nexport function createDisplay (options?: DisplayOptions, ssr?: boolean): DisplayInstance {\n const { thresholds, mobileBreakpoint } = parseDisplayOptions(options)\n\n const height = shallowRef(getClientHeight(ssr))\n const platform = shallowRef(getPlatform(ssr))\n const state = reactive({} as DisplayInstance)\n const width = shallowRef(getClientWidth(ssr))\n\n function updateSize () {\n height.value = getClientHeight()\n width.value = getClientWidth()\n }\n function update () {\n updateSize()\n platform.value = getPlatform()\n }\n\n // eslint-disable-next-line max-statements\n watchEffect(() => {\n const xs = width.value < thresholds.sm\n const sm = width.value < thresholds.md && !xs\n const md = width.value < thresholds.lg && !(sm || xs)\n const lg = width.value < thresholds.xl && !(md || sm || xs)\n const xl = width.value < thresholds.xxl && !(lg || md || sm || xs)\n const xxl = width.value >= thresholds.xxl\n const name =\n xs ? 'xs'\n : sm ? 'sm'\n : md ? 'md'\n : lg ? 'lg'\n : xl ? 'xl'\n : 'xxl'\n const breakpointValue = typeof mobileBreakpoint === 'number' ? mobileBreakpoint : thresholds[mobileBreakpoint]\n const mobile = width.value < breakpointValue\n\n state.xs = xs\n state.sm = sm\n state.md = md\n state.lg = lg\n state.xl = xl\n state.xxl = xxl\n state.smAndUp = !xs\n state.mdAndUp = !(xs || sm)\n state.lgAndUp = !(xs || sm || md)\n state.xlAndUp = !(xs || sm || md || lg)\n state.smAndDown = !(md || lg || xl || xxl)\n state.mdAndDown = !(lg || xl || xxl)\n state.lgAndDown = !(xl || xxl)\n state.xlAndDown = !xxl\n state.name = name\n state.height = height.value\n state.width = width.value\n state.mobile = mobile\n state.mobileBreakpoint = mobileBreakpoint\n state.platform = platform.value\n state.thresholds = thresholds\n })\n\n if (IN_BROWSER) {\n window.addEventListener('resize', updateSize, { passive: true })\n }\n\n return { ...toRefs(state), update, ssr: !!ssr }\n}\n\nexport function useDisplay () {\n const display = inject(DisplaySymbol)\n\n if (!display) throw new Error('Could not find Vuetify display injection')\n\n return display\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"display.mjs","names":["inject","reactive","shallowRef","toRefs","watchEffect","mergeDeep","IN_BROWSER","SUPPORTS_TOUCH","breakpoints","DisplaySymbol","Symbol","for","defaultDisplayOptions","mobileBreakpoint","thresholds","xs","sm","md","lg","xl","xxl","parseDisplayOptions","options","arguments","length","undefined","getClientWidth","ssr","window","innerWidth","clientWidth","getClientHeight","innerHeight","clientHeight","getPlatform","userAgent","navigator","match","regexp","Boolean","android","ios","cordova","electron","chrome","edge","firefox","opera","win","mac","linux","touch","createDisplay","height","platform","state","width","updateSize","value","update","name","breakpointValue","mobile","smAndUp","mdAndUp","lgAndUp","xlAndUp","smAndDown","mdAndDown","lgAndDown","xlAndDown","addEventListener","passive","useDisplay","display","Error"],"sources":["../../src/composables/display.ts"],"sourcesContent":["// Utilities\nimport { inject, reactive, shallowRef, toRefs, watchEffect } from 'vue'\nimport { mergeDeep } from '@/util'\n\n// Globals\nimport { IN_BROWSER, SUPPORTS_TOUCH } from '@/util/globals'\n\n// Types\nimport type { InjectionKey, Ref } from 'vue'\n\nexport const breakpoints = ['sm', 'md', 'lg', 'xl', 'xxl'] as const // no xs\n\nexport type Breakpoint = typeof breakpoints[number]\n\nexport type DisplayBreakpoint = 'xs' | Breakpoint\n\nexport type DisplayThresholds = {\n [key in DisplayBreakpoint]: number\n}\n\nexport interface DisplayOptions {\n mobileBreakpoint?: number | DisplayBreakpoint\n thresholds?: Partial<DisplayThresholds>\n}\n\nexport interface InternalDisplayOptions {\n mobileBreakpoint: number | DisplayBreakpoint\n thresholds: DisplayThresholds\n}\n\nexport type SSROptions = boolean | {\n clientWidth: number\n clientHeight?: number\n}\n\nexport interface DisplayPlatform {\n android: boolean\n ios: boolean\n cordova: boolean\n electron: boolean\n chrome: boolean\n edge: boolean\n firefox: boolean\n opera: boolean\n win: boolean\n mac: boolean\n linux: boolean\n touch: boolean\n ssr: boolean\n}\n\nexport interface DisplayInstance {\n xs: Ref<boolean>\n sm: Ref<boolean>\n md: Ref<boolean>\n lg: Ref<boolean>\n xl: Ref<boolean>\n xxl: Ref<boolean>\n smAndUp: Ref<boolean>\n mdAndUp: Ref<boolean>\n lgAndUp: Ref<boolean>\n xlAndUp: Ref<boolean>\n smAndDown: Ref<boolean>\n mdAndDown: Ref<boolean>\n lgAndDown: Ref<boolean>\n xlAndDown: Ref<boolean>\n name: Ref<DisplayBreakpoint>\n height: Ref<number>\n width: Ref<number>\n mobile: Ref<boolean>\n mobileBreakpoint: Ref<number | DisplayBreakpoint>\n platform: Ref<DisplayPlatform>\n thresholds: Ref<DisplayThresholds>\n\n /** @internal */\n ssr: boolean\n\n update (): void\n}\n\nexport const DisplaySymbol: InjectionKey<DisplayInstance> = Symbol.for('vuetify:display')\n\nconst defaultDisplayOptions: DisplayOptions = {\n mobileBreakpoint: 'lg',\n thresholds: {\n xs: 0,\n sm: 600,\n md: 960,\n lg: 1280,\n xl: 1920,\n xxl: 2560,\n },\n}\n\nconst parseDisplayOptions = (options: DisplayOptions = defaultDisplayOptions) => {\n return mergeDeep(defaultDisplayOptions, options) as InternalDisplayOptions\n}\n\nfunction getClientWidth (ssr?: SSROptions) {\n return IN_BROWSER && !ssr\n ? window.innerWidth\n : (typeof ssr === 'object' && ssr.clientWidth) || 0\n}\n\nfunction getClientHeight (ssr?: SSROptions) {\n return IN_BROWSER && !ssr\n ? window.innerHeight\n : (typeof ssr === 'object' && ssr.clientHeight) || 0\n}\n\nfunction getPlatform (ssr?: SSROptions): DisplayPlatform {\n const userAgent = IN_BROWSER && !ssr\n ? window.navigator.userAgent\n : 'ssr'\n\n function match (regexp: RegExp) {\n return Boolean(userAgent.match(regexp))\n }\n\n const android = match(/android/i)\n const ios = match(/iphone|ipad|ipod/i)\n const cordova = match(/cordova/i)\n const electron = match(/electron/i)\n const chrome = match(/chrome/i)\n const edge = match(/edge/i)\n const firefox = match(/firefox/i)\n const opera = match(/opera/i)\n const win = match(/win/i)\n const mac = match(/mac/i)\n const linux = match(/linux/i)\n\n return {\n android,\n ios,\n cordova,\n electron,\n chrome,\n edge,\n firefox,\n opera,\n win,\n mac,\n linux,\n touch: SUPPORTS_TOUCH,\n ssr: userAgent === 'ssr',\n }\n}\n\nexport function createDisplay (options?: DisplayOptions, ssr?: SSROptions): DisplayInstance {\n const { thresholds, mobileBreakpoint } = parseDisplayOptions(options)\n\n const height = shallowRef(getClientHeight(ssr))\n const platform = shallowRef(getPlatform(ssr))\n const state = reactive({} as DisplayInstance)\n const width = shallowRef(getClientWidth(ssr))\n\n function updateSize () {\n height.value = getClientHeight()\n width.value = getClientWidth()\n }\n function update () {\n updateSize()\n platform.value = getPlatform()\n }\n\n // eslint-disable-next-line max-statements\n watchEffect(() => {\n const xs = width.value < thresholds.sm\n const sm = width.value < thresholds.md && !xs\n const md = width.value < thresholds.lg && !(sm || xs)\n const lg = width.value < thresholds.xl && !(md || sm || xs)\n const xl = width.value < thresholds.xxl && !(lg || md || sm || xs)\n const xxl = width.value >= thresholds.xxl\n const name =\n xs ? 'xs'\n : sm ? 'sm'\n : md ? 'md'\n : lg ? 'lg'\n : xl ? 'xl'\n : 'xxl'\n const breakpointValue = typeof mobileBreakpoint === 'number' ? mobileBreakpoint : thresholds[mobileBreakpoint]\n const mobile = width.value < breakpointValue\n\n state.xs = xs\n state.sm = sm\n state.md = md\n state.lg = lg\n state.xl = xl\n state.xxl = xxl\n state.smAndUp = !xs\n state.mdAndUp = !(xs || sm)\n state.lgAndUp = !(xs || sm || md)\n state.xlAndUp = !(xs || sm || md || lg)\n state.smAndDown = !(md || lg || xl || xxl)\n state.mdAndDown = !(lg || xl || xxl)\n state.lgAndDown = !(xl || xxl)\n state.xlAndDown = !xxl\n state.name = name\n state.height = height.value\n state.width = width.value\n state.mobile = mobile\n state.mobileBreakpoint = mobileBreakpoint\n state.platform = platform.value\n state.thresholds = thresholds\n })\n\n if (IN_BROWSER) {\n window.addEventListener('resize', updateSize, { passive: true })\n }\n\n return { ...toRefs(state), update, ssr: !!ssr }\n}\n\nexport function useDisplay () {\n const display = inject(DisplaySymbol)\n\n if (!display) throw new Error('Could not find Vuetify display injection')\n\n return display\n}\n"],"mappings":"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"}
|
|
@@ -72,23 +72,24 @@ export function useFilter(props, items, query, options) {
|
|
|
72
72
|
const strQuery = computed(() => typeof query?.value !== 'string' && typeof query?.value !== 'number' ? '' : String(query.value));
|
|
73
73
|
const filteredItems = ref([]);
|
|
74
74
|
const filteredMatches = ref(new Map());
|
|
75
|
+
const transformedItems = computed(() => options?.transform ? unref(items).map(options?.transform) : unref(items));
|
|
75
76
|
watchEffect(() => {
|
|
76
77
|
filteredItems.value = [];
|
|
77
78
|
filteredMatches.value = new Map();
|
|
78
|
-
const
|
|
79
|
-
const results = filterItems(transformedItems, strQuery.value, {
|
|
79
|
+
const results = filterItems(transformedItems.value, strQuery.value, {
|
|
80
80
|
customKeyFilter: props.customKeyFilter,
|
|
81
81
|
default: props.customFilter,
|
|
82
|
-
filterKeys:
|
|
82
|
+
filterKeys: props.filterKeys,
|
|
83
83
|
filterMode: props.filterMode,
|
|
84
84
|
noFilter: props.noFilter
|
|
85
85
|
});
|
|
86
|
+
const originalItems = unref(items);
|
|
86
87
|
results.forEach(_ref => {
|
|
87
88
|
let {
|
|
88
89
|
index,
|
|
89
90
|
matches
|
|
90
91
|
} = _ref;
|
|
91
|
-
const item =
|
|
92
|
+
const item = originalItems[index];
|
|
92
93
|
filteredItems.value.push(item);
|
|
93
94
|
filteredMatches.value.set(item.value, matches);
|
|
94
95
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"filter.mjs","names":["getPropertyFromItem","propsFactory","wrapInArray","computed","ref","unref","watchEffect","defaultFilter","value","query","item","toString","toLocaleLowerCase","indexOf","makeFilterProps","customFilter","Function","customKeyFilter","Object","filterKeys","Array","String","filterMode","type","default","noFilter","Boolean","filterItems","items","options","array","filter","keys","customFiltersLength","length","loop","i","customMatches","defaultMatches","match","key","keyFilter","title","defaultMatchesLength","customMatchesLength","push","index","matches","useFilter","props","strQuery","filteredItems","filteredMatches","Map","transformedItems","results","forEach","_ref","set","getMatches","get"],"sources":["../../src/composables/filter.ts"],"sourcesContent":["/* eslint-disable max-statements */\n/* eslint-disable no-labels */\n\n// Utilities\nimport { getPropertyFromItem, propsFactory, wrapInArray } from '@/util'\nimport { computed, ref, unref, watchEffect } from 'vue'\n\n// Types\nimport type { PropType, Ref } from 'vue'\nimport type { MaybeRef } from '@/util'\nimport type { InternalItem } from './items'\n\n/**\n * - match without highlight\n * - single match (index), length already known\n * - single match (start, end)\n * - multiple matches (start, end), probably shouldn't overlap\n */\nexport type FilterMatch = boolean | number | [number, number] | [number, number][]\nexport type FilterFunction = (value: string, query: string, item?: any) => FilterMatch\nexport type FilterKeyFunctions = Record<string, FilterFunction>\nexport type FilterKeys = string | string[]\nexport type FilterMode = 'some' | 'every' | 'union' | 'intersection'\n\nexport interface FilterProps {\n customFilter?: FilterFunction\n customKeyFilter?: FilterKeyFunctions\n filterKeys?: FilterKeys\n filterMode?: FilterMode\n noFilter?: boolean\n}\n\n// Composables\nexport const defaultFilter: FilterFunction = (value, query, item) => {\n if (value == null || query == null) return -1\n\n return value.toString().toLocaleLowerCase().indexOf(query.toString().toLocaleLowerCase())\n}\n\nexport const makeFilterProps = propsFactory({\n customFilter: Function as PropType<FilterFunction>,\n customKeyFilter: Object as PropType<FilterKeyFunctions>,\n filterKeys: [Array, String] as PropType<FilterKeys>,\n filterMode: {\n type: String as PropType<FilterMode>,\n default: 'intersection',\n },\n noFilter: Boolean,\n}, 'filter')\n\nexport function filterItems (\n items: InternalItem[],\n query: string,\n options?: {\n customKeyFilter?: FilterKeyFunctions\n default?: FilterFunction\n filterKeys?: FilterKeys\n filterMode?: FilterMode\n noFilter?: boolean\n },\n) {\n const array: { index: number, matches: Record<string, FilterMatch> }[] = []\n // always ensure we fall back to a functioning filter\n const filter = options?.default ?? defaultFilter\n const keys = options?.filterKeys ? wrapInArray(options.filterKeys) : false\n const customFiltersLength = Object.keys(options?.customKeyFilter ?? {}).length\n\n if (!items?.length) return array\n\n loop:\n for (let i = 0; i < items.length; i++) {\n const item = items[i]\n const customMatches: Record<string, FilterMatch> = {}\n const defaultMatches: Record<string, FilterMatch> = {}\n let match: FilterMatch = -1\n\n if (query && !options?.noFilter) {\n if (typeof item === 'object') {\n const filterKeys = keys || Object.keys(item)\n\n for (const key of filterKeys) {\n const value = getPropertyFromItem(item as any, key, item)\n const keyFilter = options?.customKeyFilter?.[key]\n\n match = keyFilter\n ? keyFilter(value, query, item)\n : filter(value, query, item)\n\n if (match !== -1 && match !== false) {\n if (keyFilter) customMatches[key] = match\n else defaultMatches[key] = match\n } else if (options?.filterMode === 'every') {\n continue loop\n }\n }\n } else {\n match = filter(item, query, item)\n if (match !== -1 && match !== false) {\n defaultMatches.title = match\n }\n }\n\n const defaultMatchesLength = Object.keys(defaultMatches).length\n const customMatchesLength = Object.keys(customMatches).length\n\n if (!defaultMatchesLength && !customMatchesLength) continue\n\n if (\n options?.filterMode === 'union' &&\n customMatchesLength !== customFiltersLength &&\n !defaultMatchesLength\n ) continue\n\n if (\n options?.filterMode === 'intersection' &&\n (\n customMatchesLength !== customFiltersLength ||\n !defaultMatchesLength\n )\n ) continue\n }\n\n array.push({ index: i, matches: { ...defaultMatches, ...customMatches } })\n }\n\n return array\n}\n\nexport function useFilter <T extends InternalItem> (\n props: FilterProps,\n items: MaybeRef<T[]>,\n query: Ref<string | undefined>,\n options?: {\n filterKeys?: MaybeRef<FilterKeys>\n }\n) {\n const strQuery = computed(() => (\n typeof query?.value !== 'string' &&\n typeof query?.value !== 'number'\n ) ? '' : String(query.value))\n\n const filteredItems: Ref<T[]> = ref([])\n const filteredMatches: Ref<Map<unknown, Record<string, FilterMatch>>> = ref(new Map())\n\n watchEffect(() => {\n filteredItems.value = []\n filteredMatches.value = new Map()\n\n const transformedItems = unref(items)\n const results = filterItems(\n transformedItems,\n strQuery.value,\n {\n customKeyFilter: props.customKeyFilter,\n default: props.customFilter,\n filterKeys: unref(options?.filterKeys) ?? props.filterKeys,\n filterMode: props.filterMode,\n noFilter: props.noFilter,\n },\n )\n\n results.forEach(({ index, matches }) => {\n const item = transformedItems[index]\n filteredItems.value.push(item)\n filteredMatches.value.set(item.value, matches)\n })\n })\n\n function getMatches (item: T) {\n return filteredMatches.value.get(item.value)\n }\n\n return { filteredItems, filteredMatches, getMatches }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"filter.mjs","names":["getPropertyFromItem","propsFactory","wrapInArray","computed","ref","unref","watchEffect","defaultFilter","value","query","item","toString","toLocaleLowerCase","indexOf","makeFilterProps","customFilter","Function","customKeyFilter","Object","filterKeys","Array","String","filterMode","type","default","noFilter","Boolean","filterItems","items","options","array","filter","keys","customFiltersLength","length","loop","i","customMatches","defaultMatches","match","key","keyFilter","title","defaultMatchesLength","customMatchesLength","push","index","matches","useFilter","props","strQuery","filteredItems","filteredMatches","Map","transformedItems","transform","map","results","originalItems","forEach","_ref","set","getMatches","get"],"sources":["../../src/composables/filter.ts"],"sourcesContent":["/* eslint-disable max-statements */\n/* eslint-disable no-labels */\n\n// Utilities\nimport { getPropertyFromItem, propsFactory, wrapInArray } from '@/util'\nimport { computed, ref, unref, watchEffect } from 'vue'\n\n// Types\nimport type { PropType, Ref } from 'vue'\nimport type { MaybeRef } from '@/util'\n\n/**\n * - match without highlight\n * - single match (index), length already known\n * - single match (start, end)\n * - multiple matches (start, end), probably shouldn't overlap\n */\nexport type FilterMatch = boolean | number | [number, number] | [number, number][]\nexport type FilterFunction = (value: string, query: string, item?: any) => FilterMatch\nexport type FilterKeyFunctions = Record<string, FilterFunction>\nexport type FilterKeys = string | string[]\nexport type FilterMode = 'some' | 'every' | 'union' | 'intersection'\n\nexport interface FilterProps {\n customFilter?: FilterFunction\n customKeyFilter?: FilterKeyFunctions\n filterKeys?: FilterKeys\n filterMode?: FilterMode\n noFilter?: boolean\n}\n\n// Composables\nexport const defaultFilter: FilterFunction = (value, query, item) => {\n if (value == null || query == null) return -1\n\n return value.toString().toLocaleLowerCase().indexOf(query.toString().toLocaleLowerCase())\n}\n\nexport const makeFilterProps = propsFactory({\n customFilter: Function as PropType<FilterFunction>,\n customKeyFilter: Object as PropType<FilterKeyFunctions>,\n filterKeys: [Array, String] as PropType<FilterKeys>,\n filterMode: {\n type: String as PropType<FilterMode>,\n default: 'intersection',\n },\n noFilter: Boolean,\n}, 'filter')\n\nexport function filterItems (\n items: any[],\n query: string,\n options?: {\n customKeyFilter?: FilterKeyFunctions\n default?: FilterFunction\n filterKeys?: FilterKeys\n filterMode?: FilterMode\n noFilter?: boolean\n },\n) {\n const array: { index: number, matches: Record<string, FilterMatch> }[] = []\n // always ensure we fall back to a functioning filter\n const filter = options?.default ?? defaultFilter\n const keys = options?.filterKeys ? wrapInArray(options.filterKeys) : false\n const customFiltersLength = Object.keys(options?.customKeyFilter ?? {}).length\n\n if (!items?.length) return array\n\n loop:\n for (let i = 0; i < items.length; i++) {\n const item = items[i]\n const customMatches: Record<string, FilterMatch> = {}\n const defaultMatches: Record<string, FilterMatch> = {}\n let match: FilterMatch = -1\n\n if (query && !options?.noFilter) {\n if (typeof item === 'object') {\n const filterKeys = keys || Object.keys(item)\n\n for (const key of filterKeys) {\n const value = getPropertyFromItem(item as any, key, item)\n const keyFilter = options?.customKeyFilter?.[key]\n\n match = keyFilter\n ? keyFilter(value, query, item)\n : filter(value, query, item)\n\n if (match !== -1 && match !== false) {\n if (keyFilter) customMatches[key] = match\n else defaultMatches[key] = match\n } else if (options?.filterMode === 'every') {\n continue loop\n }\n }\n } else {\n match = filter(item, query, item)\n if (match !== -1 && match !== false) {\n defaultMatches.title = match\n }\n }\n\n const defaultMatchesLength = Object.keys(defaultMatches).length\n const customMatchesLength = Object.keys(customMatches).length\n\n if (!defaultMatchesLength && !customMatchesLength) continue\n\n if (\n options?.filterMode === 'union' &&\n customMatchesLength !== customFiltersLength &&\n !defaultMatchesLength\n ) continue\n\n if (\n options?.filterMode === 'intersection' &&\n (\n customMatchesLength !== customFiltersLength ||\n !defaultMatchesLength\n )\n ) continue\n }\n\n array.push({ index: i, matches: { ...defaultMatches, ...customMatches } })\n }\n\n return array\n}\n\nexport function useFilter <T extends { value: unknown }> (\n props: FilterProps,\n items: MaybeRef<T[]>,\n query: Ref<string | undefined>,\n options?: {\n transform?: (item: T) => any\n }\n) {\n const strQuery = computed(() => (\n typeof query?.value !== 'string' &&\n typeof query?.value !== 'number'\n ) ? '' : String(query.value))\n\n const filteredItems: Ref<T[]> = ref([])\n const filteredMatches: Ref<Map<unknown, Record<string, FilterMatch>>> = ref(new Map())\n const transformedItems = computed(() => options?.transform ? unref(items).map(options?.transform) : unref(items))\n\n watchEffect(() => {\n filteredItems.value = []\n filteredMatches.value = new Map()\n\n const results = filterItems(\n transformedItems.value,\n strQuery.value,\n {\n customKeyFilter: props.customKeyFilter,\n default: props.customFilter,\n filterKeys: props.filterKeys,\n filterMode: props.filterMode,\n noFilter: props.noFilter,\n },\n )\n\n const originalItems = unref(items)\n\n results.forEach(({ index, matches }) => {\n const item = originalItems[index]\n filteredItems.value.push(item)\n filteredMatches.value.set(item.value, matches)\n })\n })\n\n function getMatches (item: T) {\n return filteredMatches.value.get(item.value)\n }\n\n return { filteredItems, filteredMatches, getMatches }\n}\n"],"mappings":"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"}
|
package/lib/composables/form.mjs
CHANGED
|
@@ -48,12 +48,9 @@ export function createForm(props) {
|
|
|
48
48
|
}
|
|
49
49
|
function reset() {
|
|
50
50
|
items.value.forEach(item => item.reset());
|
|
51
|
-
model.value = null;
|
|
52
51
|
}
|
|
53
52
|
function resetValidation() {
|
|
54
53
|
items.value.forEach(item => item.resetValidation());
|
|
55
|
-
errors.value = [];
|
|
56
|
-
model.value = null;
|
|
57
54
|
}
|
|
58
55
|
watch(items, () => {
|
|
59
56
|
let valid = 0;
|
|
@@ -107,6 +104,7 @@ export function createForm(props) {
|
|
|
107
104
|
isDisabled,
|
|
108
105
|
isReadonly,
|
|
109
106
|
isValidating,
|
|
107
|
+
isValid: model,
|
|
110
108
|
items,
|
|
111
109
|
validateOn: toRef(props, 'validateOn')
|
|
112
110
|
});
|
|
@@ -115,6 +113,7 @@ export function createForm(props) {
|
|
|
115
113
|
isDisabled,
|
|
116
114
|
isReadonly,
|
|
117
115
|
isValidating,
|
|
116
|
+
isValid: model,
|
|
118
117
|
items,
|
|
119
118
|
validate,
|
|
120
119
|
reset,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"form.mjs","names":["useProxiedModel","computed","inject","provide","ref","shallowRef","toRef","watch","consoleWarn","propsFactory","FormKey","Symbol","for","makeFormProps","disabled","Boolean","fastFail","readonly","modelValue","type","default","validateOn","String","createForm","props","model","isDisabled","isReadonly","isValidating","items","errors","validate","results","valid","value","item","itemErrorMessages","length","push","id","errorMessages","reset","forEach","resetValidation","invalid","isValid","deep","register","_ref","some","unregister","filter","update","found","find","useForm"],"sources":["../../src/composables/form.ts"],"sourcesContent":["// Composables\nimport { useProxiedModel } from '@/composables/proxiedModel'\n\n// Utilities\nimport { computed, inject, provide, ref, shallowRef, toRef, watch } from 'vue'\nimport { consoleWarn, propsFactory } from '@/util'\n\n// Types\nimport type { ComputedRef, InjectionKey, PropType, Ref } from 'vue'\nimport type { ValidationProps } from './validation'\n\nexport interface FormProvide {\n register: (item: {\n id: number | string\n validate: () => Promise<string[]>\n reset: () => void\n resetValidation: () => void\n }) => void\n unregister: (id: number | string) => void\n update: (id: number | string, isValid: boolean | null, errorMessages: string[]) => void\n items: Ref<FormField[]>\n isDisabled: ComputedRef<boolean>\n isReadonly: ComputedRef<boolean>\n isValidating: Ref<boolean>\n validateOn: Ref<FormProps['validateOn']>\n}\n\nexport interface FormField {\n id: number | string\n validate: () => Promise<string[]>\n reset: () => void\n resetValidation: () => void\n isValid: boolean | null\n errorMessages: string[]\n}\n\nexport interface FieldValidationResult {\n id: number | string\n errorMessages: string[]\n}\n\nexport interface FormValidationResult {\n valid: boolean\n errors: FieldValidationResult[]\n}\n\nexport interface SubmitEventPromise extends SubmitEvent, Promise<FormValidationResult> {}\n\nexport const FormKey: InjectionKey<FormProvide> = Symbol.for('vuetify:form')\n\nexport interface FormProps {\n disabled: boolean\n fastFail: boolean\n readonly: boolean\n modelValue: boolean | null\n 'onUpdate:modelValue': ((val: boolean | null) => void) | undefined\n validateOn: ValidationProps['validateOn']\n}\n\nexport const makeFormProps = propsFactory({\n disabled: Boolean,\n fastFail: Boolean,\n readonly: Boolean,\n modelValue: {\n type: Boolean as PropType<boolean | null>,\n default: null,\n },\n validateOn: {\n type: String as PropType<FormProps['validateOn']>,\n default: 'input',\n },\n}, 'form')\n\nexport function createForm (props: FormProps) {\n const model = useProxiedModel(props, 'modelValue')\n\n const isDisabled = computed(() => props.disabled)\n const isReadonly = computed(() => props.readonly)\n const isValidating = shallowRef(false)\n const items = ref<FormField[]>([])\n const errors = ref<FieldValidationResult[]>([])\n\n async function validate () {\n const results = []\n let valid = true\n\n errors.value = []\n isValidating.value = true\n\n for (const item of items.value) {\n const itemErrorMessages = await item.validate()\n\n if (itemErrorMessages.length > 0) {\n valid = false\n\n results.push({\n id: item.id,\n errorMessages: itemErrorMessages,\n })\n }\n\n if (!valid && props.fastFail) break\n }\n\n errors.value = results\n isValidating.value = false\n\n return { valid, errors: errors.value }\n }\n\n function reset () {\n items.value.forEach(item => item.reset())\n
|
|
1
|
+
{"version":3,"file":"form.mjs","names":["useProxiedModel","computed","inject","provide","ref","shallowRef","toRef","watch","consoleWarn","propsFactory","FormKey","Symbol","for","makeFormProps","disabled","Boolean","fastFail","readonly","modelValue","type","default","validateOn","String","createForm","props","model","isDisabled","isReadonly","isValidating","items","errors","validate","results","valid","value","item","itemErrorMessages","length","push","id","errorMessages","reset","forEach","resetValidation","invalid","isValid","deep","register","_ref","some","unregister","filter","update","found","find","useForm"],"sources":["../../src/composables/form.ts"],"sourcesContent":["// Composables\nimport { useProxiedModel } from '@/composables/proxiedModel'\n\n// Utilities\nimport { computed, inject, provide, ref, shallowRef, toRef, watch } from 'vue'\nimport { consoleWarn, propsFactory } from '@/util'\n\n// Types\nimport type { ComputedRef, InjectionKey, PropType, Ref } from 'vue'\nimport type { ValidationProps } from './validation'\n\nexport interface FormProvide {\n register: (item: {\n id: number | string\n validate: () => Promise<string[]>\n reset: () => void\n resetValidation: () => void\n }) => void\n unregister: (id: number | string) => void\n update: (id: number | string, isValid: boolean | null, errorMessages: string[]) => void\n items: Ref<FormField[]>\n isDisabled: ComputedRef<boolean>\n isReadonly: ComputedRef<boolean>\n isValidating: Ref<boolean>\n isValid: Ref<boolean | null>\n validateOn: Ref<FormProps['validateOn']>\n}\n\nexport interface FormField {\n id: number | string\n validate: () => Promise<string[]>\n reset: () => void\n resetValidation: () => void\n isValid: boolean | null\n errorMessages: string[]\n}\n\nexport interface FieldValidationResult {\n id: number | string\n errorMessages: string[]\n}\n\nexport interface FormValidationResult {\n valid: boolean\n errors: FieldValidationResult[]\n}\n\nexport interface SubmitEventPromise extends SubmitEvent, Promise<FormValidationResult> {}\n\nexport const FormKey: InjectionKey<FormProvide> = Symbol.for('vuetify:form')\n\nexport interface FormProps {\n disabled: boolean\n fastFail: boolean\n readonly: boolean\n modelValue: boolean | null\n 'onUpdate:modelValue': ((val: boolean | null) => void) | undefined\n validateOn: ValidationProps['validateOn']\n}\n\nexport const makeFormProps = propsFactory({\n disabled: Boolean,\n fastFail: Boolean,\n readonly: Boolean,\n modelValue: {\n type: Boolean as PropType<boolean | null>,\n default: null,\n },\n validateOn: {\n type: String as PropType<FormProps['validateOn']>,\n default: 'input',\n },\n}, 'form')\n\nexport function createForm (props: FormProps) {\n const model = useProxiedModel(props, 'modelValue')\n\n const isDisabled = computed(() => props.disabled)\n const isReadonly = computed(() => props.readonly)\n const isValidating = shallowRef(false)\n const items = ref<FormField[]>([])\n const errors = ref<FieldValidationResult[]>([])\n\n async function validate () {\n const results = []\n let valid = true\n\n errors.value = []\n isValidating.value = true\n\n for (const item of items.value) {\n const itemErrorMessages = await item.validate()\n\n if (itemErrorMessages.length > 0) {\n valid = false\n\n results.push({\n id: item.id,\n errorMessages: itemErrorMessages,\n })\n }\n\n if (!valid && props.fastFail) break\n }\n\n errors.value = results\n isValidating.value = false\n\n return { valid, errors: errors.value }\n }\n\n function reset () {\n items.value.forEach(item => item.reset())\n }\n\n function resetValidation () {\n items.value.forEach(item => item.resetValidation())\n }\n\n watch(items, () => {\n let valid = 0\n let invalid = 0\n const results = []\n\n for (const item of items.value) {\n if (item.isValid === false) {\n invalid++\n results.push({\n id: item.id,\n errorMessages: item.errorMessages,\n })\n } else if (item.isValid === true) valid++\n }\n\n errors.value = results\n model.value =\n invalid > 0 ? false\n : valid === items.value.length ? true\n : null\n }, { deep: true })\n\n provide(FormKey, {\n register: ({ id, validate, reset, resetValidation }) => {\n if (items.value.some(item => item.id === id)) {\n consoleWarn(`Duplicate input name \"${id}\"`)\n }\n\n items.value.push({\n id,\n validate,\n reset,\n resetValidation,\n isValid: null,\n errorMessages: [],\n })\n },\n unregister: id => {\n items.value = items.value.filter(item => {\n return item.id !== id\n })\n },\n update: (id, isValid, errorMessages) => {\n const found = items.value.find(item => item.id === id)\n\n if (!found) return\n\n found.isValid = isValid\n found.errorMessages = errorMessages\n },\n isDisabled,\n isReadonly,\n isValidating,\n isValid: model,\n items,\n validateOn: toRef(props, 'validateOn'),\n })\n\n return {\n errors,\n isDisabled,\n isReadonly,\n isValidating,\n isValid: model,\n items,\n validate,\n reset,\n resetValidation,\n }\n}\n\nexport function useForm () {\n return inject(FormKey, null)\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"forwardRefs.mjs","names":["Refs","Symbol","getDescriptor","obj","key","currentObj","descriptor","Reflect","getOwnPropertyDescriptor","Object","getPrototypeOf","undefined","forwardRefs","target","_len","arguments","length","refs","Array","_key","Proxy","get","has","startsWith","ref","value","val","bind","_","setupState","childRefs","queue","slice","shift","push"],"sources":["../../src/composables/forwardRefs.ts"],"sourcesContent":["import type { ComponentPublicInstance, Ref, UnwrapRef } from 'vue'\nimport type { UnionToIntersection } from '@/util'\n\nconst Refs = Symbol('Forwarded refs')\n\n/** Omit properties starting with P */\ntype OmitPrefix<T, P extends string> = [Extract<keyof T, `${P}${any}`>] extends [never] ? T : Omit<T, `${P}${any}`>\n\ntype OmitProps<T> = T extends { $props: any } ? Omit<T, keyof T['$props']> : T\n\nfunction getDescriptor (obj: any, key: PropertyKey) {\n let currentObj = obj\n while (currentObj) {\n const descriptor = Reflect.getOwnPropertyDescriptor(currentObj, key)\n if (descriptor) return descriptor\n currentObj = Object.getPrototypeOf(currentObj)\n }\n return undefined\n}\n\nexport function forwardRefs<T extends {}, U extends Ref<HTMLElement | Omit<ComponentPublicInstance, '$emit'> | undefined>[]> (\n target: T,\n ...refs: U\n): T & UnionToIntersection<{ [K in keyof U]: OmitPrefix<OmitProps<NonNullable<UnwrapRef<U[K]>>>, '$'> }[number]> {\n (target as any)[Refs] = refs\n\n return new Proxy(target, {\n get (target, key) {\n if (Reflect.has(target, key)) {\n return Reflect.get(target, key)\n }\n\n // Skip internal properties\n if (typeof key === 'symbol' || key.startsWith('__')) return\n\n for (const ref of refs) {\n if (ref.value && Reflect.has(ref.value, key)) {\n const val = Reflect.get(ref.value, key)\n return typeof val === 'function'\n ? val.bind(ref.value)\n : val\n }\n }\n },\n has (target, key) {\n if (Reflect.has(target, key)) {\n return true\n }\n\n // Skip internal properties\n if (typeof key === 'symbol' || key.startsWith('__')) return false\n\n for (const ref of refs) {\n if (ref.value && Reflect.has(ref.value, key)) {\n return true\n }\n }\n return false\n },\n getOwnPropertyDescriptor (target, key) {\n const descriptor = Reflect.getOwnPropertyDescriptor(target, key)\n if (descriptor) return descriptor\n\n // Skip internal properties\n if (typeof key === 'symbol' || key.startsWith('__')) return\n\n // Check each ref's own properties\n for (const ref of refs) {\n if (!ref.value) continue\n const descriptor = getDescriptor(ref.value, key) ?? ('_' in ref.value ? getDescriptor(ref.value._?.setupState, key) : undefined)\n if (descriptor) return descriptor\n }\n\n // Recursive search up each ref's prototype\n for (const ref of refs) {\n const childRefs = ref.value && (ref.value as any)[Refs]\n if (!childRefs) continue\n const queue = childRefs.slice()\n while (queue.length) {\n const ref = queue.shift()\n const descriptor = getDescriptor(ref.value, key)\n if (descriptor) return descriptor\n const childRefs = ref.value && (ref.value as any)[Refs]\n if (childRefs) queue.push(...childRefs)\n }\n }\n\n return undefined\n },\n }) as any\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"forwardRefs.mjs","names":["Refs","Symbol","getDescriptor","obj","key","currentObj","descriptor","Reflect","getOwnPropertyDescriptor","Object","getPrototypeOf","undefined","forwardRefs","target","_len","arguments","length","refs","Array","_key","Proxy","get","has","startsWith","ref","value","val","bind","_","setupState","childRefs","queue","slice","shift","push"],"sources":["../../src/composables/forwardRefs.ts"],"sourcesContent":["import type { ComponentPublicInstance, Ref, UnwrapRef } from 'vue'\nimport type { UnionToIntersection } from '@/util'\n\nconst Refs = Symbol('Forwarded refs')\n\n/** Omit properties starting with P */\ntype OmitPrefix<T, P extends string> = [Extract<keyof T, `${P}${any}`>] extends [never] ? T : Omit<T, `${P}${any}`>\n\ntype OmitProps<T> = T extends { $props: any } ? Omit<T, keyof T['$props']> : T\n\nfunction getDescriptor (obj: any, key: PropertyKey) {\n let currentObj = obj\n while (currentObj) {\n const descriptor = Reflect.getOwnPropertyDescriptor(currentObj, key)\n if (descriptor) return descriptor\n currentObj = Object.getPrototypeOf(currentObj)\n }\n return undefined\n}\n\nexport function forwardRefs<T extends {}, U extends Ref<HTMLElement | Omit<ComponentPublicInstance, '$emit' | '$slots'> | undefined>[]> (\n target: T,\n ...refs: U\n): T & UnionToIntersection<{ [K in keyof U]: OmitPrefix<OmitProps<NonNullable<UnwrapRef<U[K]>>>, '$'> }[number]> {\n (target as any)[Refs] = refs\n\n return new Proxy(target, {\n get (target, key) {\n if (Reflect.has(target, key)) {\n return Reflect.get(target, key)\n }\n\n // Skip internal properties\n if (typeof key === 'symbol' || key.startsWith('__')) return\n\n for (const ref of refs) {\n if (ref.value && Reflect.has(ref.value, key)) {\n const val = Reflect.get(ref.value, key)\n return typeof val === 'function'\n ? val.bind(ref.value)\n : val\n }\n }\n },\n has (target, key) {\n if (Reflect.has(target, key)) {\n return true\n }\n\n // Skip internal properties\n if (typeof key === 'symbol' || key.startsWith('__')) return false\n\n for (const ref of refs) {\n if (ref.value && Reflect.has(ref.value, key)) {\n return true\n }\n }\n return false\n },\n getOwnPropertyDescriptor (target, key) {\n const descriptor = Reflect.getOwnPropertyDescriptor(target, key)\n if (descriptor) return descriptor\n\n // Skip internal properties\n if (typeof key === 'symbol' || key.startsWith('__')) return\n\n // Check each ref's own properties\n for (const ref of refs) {\n if (!ref.value) continue\n const descriptor = getDescriptor(ref.value, key) ?? ('_' in ref.value ? getDescriptor(ref.value._?.setupState, key) : undefined)\n if (descriptor) return descriptor\n }\n\n // Recursive search up each ref's prototype\n for (const ref of refs) {\n const childRefs = ref.value && (ref.value as any)[Refs]\n if (!childRefs) continue\n const queue = childRefs.slice()\n while (queue.length) {\n const ref = queue.shift()\n const descriptor = getDescriptor(ref.value, key)\n if (descriptor) return descriptor\n const childRefs = ref.value && (ref.value as any)[Refs]\n if (childRefs) queue.push(...childRefs)\n }\n }\n\n return undefined\n },\n }) as any\n}\n"],"mappings":"AAGA,MAAMA,IAAI,GAAGC,MAAM,CAAC,gBAAgB,CAAC;;AAErC;;AAKA,SAASC,aAAaA,CAAEC,GAAQ,EAAEC,GAAgB,EAAE;EAClD,IAAIC,UAAU,GAAGF,GAAG;EACpB,OAAOE,UAAU,EAAE;IACjB,MAAMC,UAAU,GAAGC,OAAO,CAACC,wBAAwB,CAACH,UAAU,EAAED,GAAG,CAAC;IACpE,IAAIE,UAAU,EAAE,OAAOA,UAAU;IACjCD,UAAU,GAAGI,MAAM,CAACC,cAAc,CAACL,UAAU,CAAC;EAChD;EACA,OAAOM,SAAS;AAClB;AAEA,OAAO,SAASC,WAAWA,CACzBC,MAAS,EAEsG;EAAA,SAAAC,IAAA,GAAAC,SAAA,CAAAC,MAAA,EAD5GC,IAAI,OAAAC,KAAA,CAAAJ,IAAA,OAAAA,IAAA,WAAAK,IAAA,MAAAA,IAAA,GAAAL,IAAA,EAAAK,IAAA;IAAJF,IAAI,CAAAE,IAAA,QAAAJ,SAAA,CAAAI,IAAA;EAAA;EAENN,MAAM,CAASb,IAAI,CAAC,GAAGiB,IAAI;EAE5B,OAAO,IAAIG,KAAK,CAACP,MAAM,EAAE;IACvBQ,GAAGA,CAAER,MAAM,EAAET,GAAG,EAAE;MAChB,IAAIG,OAAO,CAACe,GAAG,CAACT,MAAM,EAAET,GAAG,CAAC,EAAE;QAC5B,OAAOG,OAAO,CAACc,GAAG,CAACR,MAAM,EAAET,GAAG,CAAC;MACjC;;MAEA;MACA,IAAI,OAAOA,GAAG,KAAK,QAAQ,IAAIA,GAAG,CAACmB,UAAU,CAAC,IAAI,CAAC,EAAE;MAErD,KAAK,MAAMC,GAAG,IAAIP,IAAI,EAAE;QACtB,IAAIO,GAAG,CAACC,KAAK,IAAIlB,OAAO,CAACe,GAAG,CAACE,GAAG,CAACC,KAAK,EAAErB,GAAG,CAAC,EAAE;UAC5C,MAAMsB,GAAG,GAAGnB,OAAO,CAACc,GAAG,CAACG,GAAG,CAACC,KAAK,EAAErB,GAAG,CAAC;UACvC,OAAO,OAAOsB,GAAG,KAAK,UAAU,GAC5BA,GAAG,CAACC,IAAI,CAACH,GAAG,CAACC,KAAK,CAAC,GACnBC,GAAG;QACT;MACF;IACF,CAAC;IACDJ,GAAGA,CAAET,MAAM,EAAET,GAAG,EAAE;MAChB,IAAIG,OAAO,CAACe,GAAG,CAACT,MAAM,EAAET,GAAG,CAAC,EAAE;QAC5B,OAAO,IAAI;MACb;;MAEA;MACA,IAAI,OAAOA,GAAG,KAAK,QAAQ,IAAIA,GAAG,CAACmB,UAAU,CAAC,IAAI,CAAC,EAAE,OAAO,KAAK;MAEjE,KAAK,MAAMC,GAAG,IAAIP,IAAI,EAAE;QACtB,IAAIO,GAAG,CAACC,KAAK,IAAIlB,OAAO,CAACe,GAAG,CAACE,GAAG,CAACC,KAAK,EAAErB,GAAG,CAAC,EAAE;UAC5C,OAAO,IAAI;QACb;MACF;MACA,OAAO,KAAK;IACd,CAAC;IACDI,wBAAwBA,CAAEK,MAAM,EAAET,GAAG,EAAE;MACrC,MAAME,UAAU,GAAGC,OAAO,CAACC,wBAAwB,CAACK,MAAM,EAAET,GAAG,CAAC;MAChE,IAAIE,UAAU,EAAE,OAAOA,UAAU;;MAEjC;MACA,IAAI,OAAOF,GAAG,KAAK,QAAQ,IAAIA,GAAG,CAACmB,UAAU,CAAC,IAAI,CAAC,EAAE;;MAErD;MACA,KAAK,MAAMC,GAAG,IAAIP,IAAI,EAAE;QACtB,IAAI,CAACO,GAAG,CAACC,KAAK,EAAE;QAChB,MAAMnB,UAAU,GAAGJ,aAAa,CAACsB,GAAG,CAACC,KAAK,EAAErB,GAAG,CAAC,KAAK,GAAG,IAAIoB,GAAG,CAACC,KAAK,GAAGvB,aAAa,CAACsB,GAAG,CAACC,KAAK,CAACG,CAAC,EAAEC,UAAU,EAAEzB,GAAG,CAAC,GAAGO,SAAS,CAAC;QAChI,IAAIL,UAAU,EAAE,OAAOA,UAAU;MACnC;;MAEA;MACA,KAAK,MAAMkB,GAAG,IAAIP,IAAI,EAAE;QACtB,MAAMa,SAAS,GAAGN,GAAG,CAACC,KAAK,IAAKD,GAAG,CAACC,KAAK,CAASzB,IAAI,CAAC;QACvD,IAAI,CAAC8B,SAAS,EAAE;QAChB,MAAMC,KAAK,GAAGD,SAAS,CAACE,KAAK,EAAE;QAC/B,OAAOD,KAAK,CAACf,MAAM,EAAE;UACnB,MAAMQ,GAAG,GAAGO,KAAK,CAACE,KAAK,EAAE;UACzB,MAAM3B,UAAU,GAAGJ,aAAa,CAACsB,GAAG,CAACC,KAAK,EAAErB,GAAG,CAAC;UAChD,IAAIE,UAAU,EAAE,OAAOA,UAAU;UACjC,MAAMwB,SAAS,GAAGN,GAAG,CAACC,KAAK,IAAKD,GAAG,CAACC,KAAK,CAASzB,IAAI,CAAC;UACvD,IAAI8B,SAAS,EAAEC,KAAK,CAACG,IAAI,CAAC,GAAGJ,SAAS,CAAC;QACzC;MACF;MAEA,OAAOnB,SAAS;IAClB;EACF,CAAC,CAAC;AACJ"}
|
|
@@ -176,26 +176,26 @@ function getItemIndex(items, value) {
|
|
|
176
176
|
}
|
|
177
177
|
function getIds(items, modelValue) {
|
|
178
178
|
const ids = [];
|
|
179
|
-
|
|
180
|
-
const item = items
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
ids.push(item.id);
|
|
184
|
-
}
|
|
185
|
-
} else if (modelValue.includes(i)) {
|
|
179
|
+
modelValue.forEach(value => {
|
|
180
|
+
const item = items.find(item => deepEqual(value, item.value));
|
|
181
|
+
const itemByIndex = items[value];
|
|
182
|
+
if (item?.value != null) {
|
|
186
183
|
ids.push(item.id);
|
|
184
|
+
} else if (itemByIndex != null) {
|
|
185
|
+
ids.push(itemByIndex.id);
|
|
187
186
|
}
|
|
188
|
-
}
|
|
187
|
+
});
|
|
189
188
|
return ids;
|
|
190
189
|
}
|
|
191
190
|
function getValues(items, ids) {
|
|
192
191
|
const values = [];
|
|
193
|
-
|
|
194
|
-
const
|
|
195
|
-
if (
|
|
196
|
-
|
|
192
|
+
ids.forEach(id => {
|
|
193
|
+
const itemIndex = items.findIndex(item => item.id === id);
|
|
194
|
+
if (~itemIndex) {
|
|
195
|
+
const item = items[itemIndex];
|
|
196
|
+
values.push(item.value != null ? item.value : itemIndex);
|
|
197
197
|
}
|
|
198
|
-
}
|
|
198
|
+
});
|
|
199
199
|
return values;
|
|
200
200
|
}
|
|
201
201
|
//# sourceMappingURL=group.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"group.mjs","names":["useProxiedModel","computed","inject","onBeforeUnmount","onMounted","provide","reactive","toRef","watch","consoleWarn","deepEqual","findChildrenWithProvide","getCurrentInstance","getUid","propsFactory","wrapInArray","makeGroupProps","modelValue","type","default","undefined","multiple","Boolean","mandatory","String","max","Number","selectedClass","disabled","makeGroupItemProps","value","useGroupItem","props","injectKey","required","arguments","length","vm","Error","id","Symbol","for","description","group","register","unregister","isSelected","emit","toggle","select","useGroup","isUnmounted","items","selected","v","getIds","arr","getValues","groupVm","item","unwrapped","key","children","vnode","index","indexOf","splice","push","forceMandatoryValue","findIndex","find","internalValue","slice","includes","step","offset","currentId","currentIndex","i","newIndex","newItem","state","prev","next","getItemIndex","ids","values"],"sources":["../../src/composables/group.ts"],"sourcesContent":["// Composables\nimport { useProxiedModel } from './proxiedModel'\n\n// Utilities\nimport { computed, inject, onBeforeUnmount, onMounted, provide, reactive, toRef, watch } from 'vue'\nimport { consoleWarn, deepEqual, findChildrenWithProvide, getCurrentInstance, getUid, propsFactory, wrapInArray } from '@/util'\n\n// Types\nimport type { ComponentInternalInstance, ComputedRef, ExtractPropTypes, InjectionKey, PropType, Ref, UnwrapRef } from 'vue'\n\nexport interface GroupItem {\n id: number\n value: Ref<unknown>\n disabled: Ref<boolean | undefined>\n}\n\nexport interface GroupProps {\n disabled: boolean\n modelValue: unknown\n multiple?: boolean\n mandatory?: boolean | 'force' | undefined\n max?: number | undefined\n selectedClass: string | undefined\n 'onUpdate:modelValue': ((val: unknown) => void) | undefined\n}\n\nexport interface GroupProvide {\n register: (item: GroupItem, cmp: ComponentInternalInstance) => void\n unregister: (id: number) => void\n select: (id: number, value: boolean) => void\n selected: Ref<Readonly<number[]>>\n isSelected: (id: number) => boolean\n prev: () => void\n next: () => void\n selectedClass: Ref<string | undefined>\n items: ComputedRef<{\n id: number\n value: unknown\n disabled: boolean | undefined\n }[]>\n disabled: Ref<boolean | undefined>\n getItemIndex: (value: unknown) => number\n}\n\nexport interface GroupItemProvide {\n id: number\n isSelected: Ref<boolean>\n toggle: () => void\n select: (value: boolean) => void\n selectedClass: Ref<(string | undefined)[] | false>\n value: Ref<unknown>\n disabled: Ref<boolean | undefined>\n group: GroupProvide\n}\n\nexport const makeGroupProps = propsFactory({\n modelValue: {\n type: null,\n default: undefined,\n },\n multiple: Boolean,\n mandatory: [Boolean, String] as PropType<boolean | 'force'>,\n max: Number,\n selectedClass: String,\n disabled: Boolean,\n}, 'group')\n\nexport const makeGroupItemProps = propsFactory({\n value: null,\n disabled: Boolean,\n selectedClass: String,\n}, 'group-item')\n\nexport interface GroupItemProps extends ExtractPropTypes<ReturnType<typeof makeGroupItemProps>> {\n 'onGroup:selected': ((val: { value: boolean }) => void) | undefined\n}\n\n// Composables\nexport function useGroupItem (\n props: GroupItemProps,\n injectKey: InjectionKey<GroupProvide>,\n required?: true,\n): GroupItemProvide\nexport function useGroupItem (\n props: GroupItemProps,\n injectKey: InjectionKey<GroupProvide>,\n required: false,\n): GroupItemProvide | null\nexport function useGroupItem (\n props: GroupItemProps,\n injectKey: InjectionKey<GroupProvide>,\n required = true,\n): GroupItemProvide | null {\n const vm = getCurrentInstance('useGroupItem')\n\n if (!vm) {\n throw new Error(\n '[Vuetify] useGroupItem composable must be used inside a component setup function'\n )\n }\n\n const id = getUid()\n\n provide(Symbol.for(`${injectKey.description}:id`), id)\n\n const group = inject(injectKey, null)\n\n if (!group) {\n if (!required) return group\n\n throw new Error(`[Vuetify] Could not find useGroup injection with symbol ${injectKey.description}`)\n }\n\n const value = toRef(props, 'value')\n const disabled = computed(() => group.disabled.value || props.disabled)\n\n group.register({\n id,\n value,\n disabled,\n }, vm)\n\n onBeforeUnmount(() => {\n group.unregister(id)\n })\n\n const isSelected = computed(() => {\n return group.isSelected(id)\n })\n\n const selectedClass = computed(() => isSelected.value && [group.selectedClass.value, props.selectedClass])\n\n watch(isSelected, value => {\n vm.emit('group:selected', { value })\n })\n\n return {\n id,\n isSelected,\n toggle: () => group.select(id, !isSelected.value),\n select: (value: boolean) => group.select(id, value),\n selectedClass,\n value,\n disabled,\n group,\n }\n}\n\nexport function useGroup (\n props: GroupProps,\n injectKey: InjectionKey<GroupProvide>\n) {\n let isUnmounted = false\n const items = reactive<GroupItem[]>([])\n const selected = useProxiedModel(\n props,\n 'modelValue',\n [],\n v => {\n if (v == null) return []\n\n return getIds(items, wrapInArray(v))\n },\n v => {\n const arr = getValues(items, v)\n\n return props.multiple ? arr : arr[0]\n }\n )\n\n const groupVm = getCurrentInstance('useGroup')\n\n function register (item: GroupItem, vm: ComponentInternalInstance) {\n // Is there a better way to fix this typing?\n const unwrapped = item as unknown as UnwrapRef<GroupItem>\n\n const key = Symbol.for(`${injectKey.description}:id`)\n const children = findChildrenWithProvide(key, groupVm?.vnode)\n const index = children.indexOf(vm)\n\n if (index > -1) {\n items.splice(index, 0, unwrapped)\n } else {\n items.push(unwrapped)\n }\n }\n\n function unregister (id: number) {\n if (isUnmounted) return\n\n // TODO: re-evaluate this line's importance in the future\n // should we only modify the model if mandatory is set.\n // selected.value = selected.value.filter(v => v !== id)\n\n forceMandatoryValue()\n\n const index = items.findIndex(item => item.id === id)\n items.splice(index, 1)\n }\n\n // If mandatory and nothing is selected, then select first non-disabled item\n function forceMandatoryValue () {\n const item = items.find(item => !item.disabled)\n if (item && props.mandatory === 'force' && !selected.value.length) {\n selected.value = [item.id]\n }\n }\n\n onMounted(() => {\n forceMandatoryValue()\n })\n\n onBeforeUnmount(() => {\n isUnmounted = true\n })\n\n function select (id: number, value?: boolean) {\n const item = items.find(item => item.id === id)\n if (value && item?.disabled) return\n\n if (props.multiple) {\n const internalValue = selected.value.slice()\n const index = internalValue.findIndex(v => v === id)\n const isSelected = ~index\n value = value ?? !isSelected\n\n // We can't remove value if group is\n // mandatory, value already exists,\n // and it is the only value\n if (\n isSelected &&\n props.mandatory &&\n internalValue.length <= 1\n ) return\n\n // We can't add value if it would\n // cause max limit to be exceeded\n if (\n !isSelected &&\n props.max != null &&\n internalValue.length + 1 > props.max\n ) return\n\n if (index < 0 && value) internalValue.push(id)\n else if (index >= 0 && !value) internalValue.splice(index, 1)\n\n selected.value = internalValue\n } else {\n const isSelected = selected.value.includes(id)\n if (props.mandatory && isSelected) return\n\n selected.value = (value ?? !isSelected) ? [id] : []\n }\n }\n\n function step (offset: number) {\n // getting an offset from selected value obviously won't work with multiple values\n if (props.multiple) consoleWarn('This method is not supported when using \"multiple\" prop')\n\n if (!selected.value.length) {\n const item = items.find(item => !item.disabled)\n item && (selected.value = [item.id])\n } else {\n const currentId = selected.value[0]\n const currentIndex = items.findIndex(i => i.id === currentId)\n\n let newIndex = (currentIndex + offset) % items.length\n let newItem = items[newIndex]\n\n while (newItem.disabled && newIndex !== currentIndex) {\n newIndex = (newIndex + offset) % items.length\n newItem = items[newIndex]\n }\n\n if (newItem.disabled) return\n\n selected.value = [items[newIndex].id]\n }\n }\n\n const state: GroupProvide = {\n register,\n unregister,\n selected,\n select,\n disabled: toRef(props, 'disabled'),\n prev: () => step(items.length - 1),\n next: () => step(1),\n isSelected: (id: number) => selected.value.includes(id),\n selectedClass: computed(() => props.selectedClass),\n items: computed(() => items),\n getItemIndex: (value: unknown) => getItemIndex(items, value),\n }\n\n provide(injectKey, state)\n\n return state\n}\n\nfunction getItemIndex (items: UnwrapRef<GroupItem[]>, value: unknown) {\n const ids = getIds(items, [value])\n\n if (!ids.length) return -1\n\n return items.findIndex(item => item.id === ids[0])\n}\n\nfunction getIds (items: UnwrapRef<GroupItem[]>, modelValue: any[]) {\n const ids = []\n for (let i = 0; i < items.length; i++) {\n const item = items[i]\n\n if (item.value != null) {\n if (modelValue.find(value => deepEqual(value, item.value)) != null) {\n ids.push(item.id)\n }\n } else if (modelValue.includes(i)) {\n ids.push(item.id)\n }\n }\n\n return ids\n}\n\nfunction getValues (items: UnwrapRef<GroupItem[]>, ids: any[]) {\n const values = []\n\n for (let i = 0; i < items.length; i++) {\n const item = items[i]\n\n if (ids.includes(item.id)) {\n values.push(item.value != null ? item.value : i)\n }\n }\n\n return values\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"group.mjs","names":["useProxiedModel","computed","inject","onBeforeUnmount","onMounted","provide","reactive","toRef","watch","consoleWarn","deepEqual","findChildrenWithProvide","getCurrentInstance","getUid","propsFactory","wrapInArray","makeGroupProps","modelValue","type","default","undefined","multiple","Boolean","mandatory","String","max","Number","selectedClass","disabled","makeGroupItemProps","value","useGroupItem","props","injectKey","required","arguments","length","vm","Error","id","Symbol","for","description","group","register","unregister","isSelected","emit","toggle","select","useGroup","isUnmounted","items","selected","v","getIds","arr","getValues","groupVm","item","unwrapped","key","children","vnode","index","indexOf","splice","push","forceMandatoryValue","findIndex","find","internalValue","slice","includes","step","offset","currentId","currentIndex","i","newIndex","newItem","state","prev","next","getItemIndex","ids","forEach","itemByIndex","values","itemIndex"],"sources":["../../src/composables/group.ts"],"sourcesContent":["// Composables\nimport { useProxiedModel } from './proxiedModel'\n\n// Utilities\nimport { computed, inject, onBeforeUnmount, onMounted, provide, reactive, toRef, watch } from 'vue'\nimport { consoleWarn, deepEqual, findChildrenWithProvide, getCurrentInstance, getUid, propsFactory, wrapInArray } from '@/util'\n\n// Types\nimport type { ComponentInternalInstance, ComputedRef, ExtractPropTypes, InjectionKey, PropType, Ref, UnwrapRef } from 'vue'\n\nexport interface GroupItem {\n id: number\n value: Ref<unknown>\n disabled: Ref<boolean | undefined>\n}\n\nexport interface GroupProps {\n disabled: boolean\n modelValue: unknown\n multiple?: boolean\n mandatory?: boolean | 'force' | undefined\n max?: number | undefined\n selectedClass: string | undefined\n 'onUpdate:modelValue': ((val: unknown) => void) | undefined\n}\n\nexport interface GroupProvide {\n register: (item: GroupItem, cmp: ComponentInternalInstance) => void\n unregister: (id: number) => void\n select: (id: number, value: boolean) => void\n selected: Ref<Readonly<number[]>>\n isSelected: (id: number) => boolean\n prev: () => void\n next: () => void\n selectedClass: Ref<string | undefined>\n items: ComputedRef<{\n id: number\n value: unknown\n disabled: boolean | undefined\n }[]>\n disabled: Ref<boolean | undefined>\n getItemIndex: (value: unknown) => number\n}\n\nexport interface GroupItemProvide {\n id: number\n isSelected: Ref<boolean>\n toggle: () => void\n select: (value: boolean) => void\n selectedClass: Ref<(string | undefined)[] | false>\n value: Ref<unknown>\n disabled: Ref<boolean | undefined>\n group: GroupProvide\n}\n\nexport const makeGroupProps = propsFactory({\n modelValue: {\n type: null,\n default: undefined,\n },\n multiple: Boolean,\n mandatory: [Boolean, String] as PropType<boolean | 'force'>,\n max: Number,\n selectedClass: String,\n disabled: Boolean,\n}, 'group')\n\nexport const makeGroupItemProps = propsFactory({\n value: null,\n disabled: Boolean,\n selectedClass: String,\n}, 'group-item')\n\nexport interface GroupItemProps extends ExtractPropTypes<ReturnType<typeof makeGroupItemProps>> {\n 'onGroup:selected': ((val: { value: boolean }) => void) | undefined\n}\n\n// Composables\nexport function useGroupItem (\n props: GroupItemProps,\n injectKey: InjectionKey<GroupProvide>,\n required?: true,\n): GroupItemProvide\nexport function useGroupItem (\n props: GroupItemProps,\n injectKey: InjectionKey<GroupProvide>,\n required: false,\n): GroupItemProvide | null\nexport function useGroupItem (\n props: GroupItemProps,\n injectKey: InjectionKey<GroupProvide>,\n required = true,\n): GroupItemProvide | null {\n const vm = getCurrentInstance('useGroupItem')\n\n if (!vm) {\n throw new Error(\n '[Vuetify] useGroupItem composable must be used inside a component setup function'\n )\n }\n\n const id = getUid()\n\n provide(Symbol.for(`${injectKey.description}:id`), id)\n\n const group = inject(injectKey, null)\n\n if (!group) {\n if (!required) return group\n\n throw new Error(`[Vuetify] Could not find useGroup injection with symbol ${injectKey.description}`)\n }\n\n const value = toRef(props, 'value')\n const disabled = computed(() => group.disabled.value || props.disabled)\n\n group.register({\n id,\n value,\n disabled,\n }, vm)\n\n onBeforeUnmount(() => {\n group.unregister(id)\n })\n\n const isSelected = computed(() => {\n return group.isSelected(id)\n })\n\n const selectedClass = computed(() => isSelected.value && [group.selectedClass.value, props.selectedClass])\n\n watch(isSelected, value => {\n vm.emit('group:selected', { value })\n })\n\n return {\n id,\n isSelected,\n toggle: () => group.select(id, !isSelected.value),\n select: (value: boolean) => group.select(id, value),\n selectedClass,\n value,\n disabled,\n group,\n }\n}\n\nexport function useGroup (\n props: GroupProps,\n injectKey: InjectionKey<GroupProvide>\n) {\n let isUnmounted = false\n const items = reactive<GroupItem[]>([])\n const selected = useProxiedModel(\n props,\n 'modelValue',\n [],\n v => {\n if (v == null) return []\n\n return getIds(items, wrapInArray(v))\n },\n v => {\n const arr = getValues(items, v)\n\n return props.multiple ? arr : arr[0]\n }\n )\n\n const groupVm = getCurrentInstance('useGroup')\n\n function register (item: GroupItem, vm: ComponentInternalInstance) {\n // Is there a better way to fix this typing?\n const unwrapped = item as unknown as UnwrapRef<GroupItem>\n\n const key = Symbol.for(`${injectKey.description}:id`)\n const children = findChildrenWithProvide(key, groupVm?.vnode)\n const index = children.indexOf(vm)\n\n if (index > -1) {\n items.splice(index, 0, unwrapped)\n } else {\n items.push(unwrapped)\n }\n }\n\n function unregister (id: number) {\n if (isUnmounted) return\n\n // TODO: re-evaluate this line's importance in the future\n // should we only modify the model if mandatory is set.\n // selected.value = selected.value.filter(v => v !== id)\n\n forceMandatoryValue()\n\n const index = items.findIndex(item => item.id === id)\n items.splice(index, 1)\n }\n\n // If mandatory and nothing is selected, then select first non-disabled item\n function forceMandatoryValue () {\n const item = items.find(item => !item.disabled)\n if (item && props.mandatory === 'force' && !selected.value.length) {\n selected.value = [item.id]\n }\n }\n\n onMounted(() => {\n forceMandatoryValue()\n })\n\n onBeforeUnmount(() => {\n isUnmounted = true\n })\n\n function select (id: number, value?: boolean) {\n const item = items.find(item => item.id === id)\n if (value && item?.disabled) return\n\n if (props.multiple) {\n const internalValue = selected.value.slice()\n const index = internalValue.findIndex(v => v === id)\n const isSelected = ~index\n value = value ?? !isSelected\n\n // We can't remove value if group is\n // mandatory, value already exists,\n // and it is the only value\n if (\n isSelected &&\n props.mandatory &&\n internalValue.length <= 1\n ) return\n\n // We can't add value if it would\n // cause max limit to be exceeded\n if (\n !isSelected &&\n props.max != null &&\n internalValue.length + 1 > props.max\n ) return\n\n if (index < 0 && value) internalValue.push(id)\n else if (index >= 0 && !value) internalValue.splice(index, 1)\n\n selected.value = internalValue\n } else {\n const isSelected = selected.value.includes(id)\n if (props.mandatory && isSelected) return\n\n selected.value = (value ?? !isSelected) ? [id] : []\n }\n }\n\n function step (offset: number) {\n // getting an offset from selected value obviously won't work with multiple values\n if (props.multiple) consoleWarn('This method is not supported when using \"multiple\" prop')\n\n if (!selected.value.length) {\n const item = items.find(item => !item.disabled)\n item && (selected.value = [item.id])\n } else {\n const currentId = selected.value[0]\n const currentIndex = items.findIndex(i => i.id === currentId)\n\n let newIndex = (currentIndex + offset) % items.length\n let newItem = items[newIndex]\n\n while (newItem.disabled && newIndex !== currentIndex) {\n newIndex = (newIndex + offset) % items.length\n newItem = items[newIndex]\n }\n\n if (newItem.disabled) return\n\n selected.value = [items[newIndex].id]\n }\n }\n\n const state: GroupProvide = {\n register,\n unregister,\n selected,\n select,\n disabled: toRef(props, 'disabled'),\n prev: () => step(items.length - 1),\n next: () => step(1),\n isSelected: (id: number) => selected.value.includes(id),\n selectedClass: computed(() => props.selectedClass),\n items: computed(() => items),\n getItemIndex: (value: unknown) => getItemIndex(items, value),\n }\n\n provide(injectKey, state)\n\n return state\n}\n\nfunction getItemIndex (items: UnwrapRef<GroupItem[]>, value: unknown) {\n const ids = getIds(items, [value])\n\n if (!ids.length) return -1\n\n return items.findIndex(item => item.id === ids[0])\n}\n\nfunction getIds (items: UnwrapRef<GroupItem[]>, modelValue: any[]) {\n const ids: number[] = []\n\n modelValue.forEach(value => {\n const item = items.find(item => deepEqual(value, item.value))\n const itemByIndex = items[value]\n\n if (item?.value != null) {\n ids.push(item.id)\n } else if (itemByIndex != null) {\n ids.push(itemByIndex.id)\n }\n })\n\n return ids\n}\n\nfunction getValues (items: UnwrapRef<GroupItem[]>, ids: any[]) {\n const values: unknown[] = []\n\n ids.forEach(id => {\n const itemIndex = items.findIndex(item => item.id === id)\n if (~itemIndex) {\n const item = items[itemIndex]\n values.push(item.value != null ? item.value : itemIndex)\n }\n })\n\n return values\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"icons.mjs","names":["aliases","mdi","computed","inject","unref","defineComponent","genericComponent","mergeDeep","propsFactory","IconValue","String","Function","Object","Array","IconSymbol","Symbol","for","makeIconProps","icon","type","tag","required","VComponentIcon","name","props","setup","_ref","slots","Icon","_createVNode","default","VSvgIcon","inheritAttrs","_ref2","attrs","_mergeProps","isArray","map","path","VLigatureIcon","VClassIcon","defaultSets","svg","component","class","createIcons","options","defaultSet","sets","useIcon","icons","Error","iconData","iconAlias","trim","startsWith","slice","iconSetName","keys","find","setName","iconName","length","iconSet"],"sources":["../../src/composables/icons.tsx"],"sourcesContent":["// Icons\nimport { aliases, mdi } from '@/iconsets/mdi'\n\n// Utilities\nimport { computed, inject, unref } from 'vue'\nimport { defineComponent, genericComponent, mergeDeep, propsFactory } from '@/util'\n\n// Types\nimport type { InjectionKey, JSXComponent, PropType, Ref } from 'vue'\n\nexport type IconValue =\n | string\n | (string | [path: string, opacity: number])[]\n | JSXComponent\nexport const IconValue = [String, Function, Object, Array] as PropType<IconValue>\n\nexport interface IconAliases {\n [name: string]: IconValue\n complete: IconValue\n cancel: IconValue\n close: IconValue\n delete: IconValue\n clear: IconValue\n success: IconValue\n info: IconValue\n warning: IconValue\n error: IconValue\n prev: IconValue\n next: IconValue\n checkboxOn: IconValue\n checkboxOff: IconValue\n checkboxIndeterminate: IconValue\n delimiter: IconValue\n sortAsc: IconValue\n sortDesc: IconValue\n expand: IconValue\n menu: IconValue\n subgroup: IconValue\n dropdown: IconValue\n radioOn: IconValue\n radioOff: IconValue\n edit: IconValue\n ratingEmpty: IconValue\n ratingFull: IconValue\n ratingHalf: IconValue\n loading: IconValue\n first: IconValue\n last: IconValue\n unfold: IconValue\n file: IconValue\n plus: IconValue\n minus: IconValue\n}\n\nexport interface IconProps {\n tag: string\n icon?: IconValue\n disabled?: Boolean\n}\n\ntype IconComponent = JSXComponent<IconProps>\n\nexport interface IconSet {\n component: IconComponent\n}\n\nexport type IconOptions = {\n defaultSet: string\n aliases?: Partial<IconAliases>\n sets: Record<string, IconSet>\n}\n\ntype IconInstance = {\n component: IconComponent\n icon?: IconValue\n}\n\nexport const IconSymbol: InjectionKey<IconOptions> = Symbol.for('vuetify:icons')\n\nexport const makeIconProps = propsFactory({\n icon: {\n type: IconValue,\n },\n // Could not remove this and use makeTagProps, types complained because it is not required\n tag: {\n type: String,\n required: true,\n },\n}, 'icon')\n\nexport const VComponentIcon = genericComponent()({\n name: 'VComponentIcon',\n\n props: makeIconProps(),\n\n setup (props, { slots }) {\n return () => {\n const Icon = props.icon as JSXComponent\n return (\n <props.tag>\n { props.icon ? <Icon /> : slots.default?.() }\n </props.tag>\n )\n }\n },\n})\nexport type VComponentIcon = InstanceType<typeof VComponentIcon>\n\nexport const VSvgIcon = defineComponent({\n name: 'VSvgIcon',\n\n inheritAttrs: false,\n\n props: makeIconProps(),\n\n setup (props, { attrs }) {\n return () => {\n return (\n <props.tag { ...attrs } style={ null }>\n <svg\n class=\"v-icon__svg\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n role=\"img\"\n aria-hidden=\"true\"\n >\n { Array.isArray(props.icon)\n ? props.icon.map(path => (\n Array.isArray(path)\n ? <path d={ path[0] as string } fill-opacity={ path[1] }></path>\n : <path d={ path as string }></path>\n ))\n : <path d={ props.icon as string }></path>\n }\n </svg>\n </props.tag>\n )\n }\n },\n})\nexport type VSvgIcon = InstanceType<typeof VSvgIcon>\n\nexport const VLigatureIcon = defineComponent({\n name: 'VLigatureIcon',\n\n props: makeIconProps(),\n\n setup (props) {\n return () => {\n return <props.tag>{ props.icon }</props.tag>\n }\n },\n})\nexport type VLigatureIcon = InstanceType<typeof VLigatureIcon>\n\nexport const VClassIcon = defineComponent({\n name: 'VClassIcon',\n\n props: makeIconProps(),\n\n setup (props) {\n return () => {\n return <props.tag class={ props.icon }></props.tag>\n }\n },\n})\nexport type VClassIcon = InstanceType<typeof VClassIcon>\n\nexport const defaultSets: Record<string, IconSet> = {\n svg: {\n component: VSvgIcon,\n },\n class: {\n component: VClassIcon,\n },\n}\n\n// Composables\nexport function createIcons (options?: IconOptions) {\n return mergeDeep({\n defaultSet: 'mdi',\n sets: {\n ...defaultSets,\n mdi,\n },\n aliases,\n }, options)\n}\n\nexport const useIcon = (props: Ref<IconValue | undefined>) => {\n const icons = inject(IconSymbol)\n\n if (!icons) throw new Error('Missing Vuetify Icons provide!')\n\n const iconData
|
|
1
|
+
{"version":3,"file":"icons.mjs","names":["aliases","mdi","computed","inject","unref","defineComponent","genericComponent","mergeDeep","propsFactory","IconValue","String","Function","Object","Array","IconSymbol","Symbol","for","makeIconProps","icon","type","tag","required","VComponentIcon","name","props","setup","_ref","slots","Icon","_createVNode","default","VSvgIcon","inheritAttrs","_ref2","attrs","_mergeProps","isArray","map","path","VLigatureIcon","VClassIcon","defaultSets","svg","component","class","createIcons","options","defaultSet","sets","useIcon","icons","Error","iconData","iconAlias","trim","startsWith","slice","iconSetName","keys","find","setName","iconName","length","iconSet"],"sources":["../../src/composables/icons.tsx"],"sourcesContent":["// Icons\nimport { aliases, mdi } from '@/iconsets/mdi'\n\n// Utilities\nimport { computed, inject, unref } from 'vue'\nimport { defineComponent, genericComponent, mergeDeep, propsFactory } from '@/util'\n\n// Types\nimport type { InjectionKey, JSXComponent, PropType, Ref } from 'vue'\n\nexport type IconValue =\n | string\n | (string | [path: string, opacity: number])[]\n | JSXComponent\nexport const IconValue = [String, Function, Object, Array] as PropType<IconValue>\n\nexport interface IconAliases {\n [name: string]: IconValue\n complete: IconValue\n cancel: IconValue\n close: IconValue\n delete: IconValue\n clear: IconValue\n success: IconValue\n info: IconValue\n warning: IconValue\n error: IconValue\n prev: IconValue\n next: IconValue\n checkboxOn: IconValue\n checkboxOff: IconValue\n checkboxIndeterminate: IconValue\n delimiter: IconValue\n sortAsc: IconValue\n sortDesc: IconValue\n expand: IconValue\n menu: IconValue\n subgroup: IconValue\n dropdown: IconValue\n radioOn: IconValue\n radioOff: IconValue\n edit: IconValue\n ratingEmpty: IconValue\n ratingFull: IconValue\n ratingHalf: IconValue\n loading: IconValue\n first: IconValue\n last: IconValue\n unfold: IconValue\n file: IconValue\n plus: IconValue\n minus: IconValue\n}\n\nexport interface IconProps {\n tag: string\n icon?: IconValue\n disabled?: Boolean\n}\n\ntype IconComponent = JSXComponent<IconProps>\n\nexport interface IconSet {\n component: IconComponent\n}\n\nexport type IconOptions = {\n defaultSet: string\n aliases?: Partial<IconAliases>\n sets: Record<string, IconSet>\n}\n\ntype IconInstance = {\n component: IconComponent\n icon?: IconValue\n}\n\nexport const IconSymbol: InjectionKey<IconOptions> = Symbol.for('vuetify:icons')\n\nexport const makeIconProps = propsFactory({\n icon: {\n type: IconValue,\n },\n // Could not remove this and use makeTagProps, types complained because it is not required\n tag: {\n type: String,\n required: true,\n },\n}, 'icon')\n\nexport const VComponentIcon = genericComponent()({\n name: 'VComponentIcon',\n\n props: makeIconProps(),\n\n setup (props, { slots }) {\n return () => {\n const Icon = props.icon as JSXComponent\n return (\n <props.tag>\n { props.icon ? <Icon /> : slots.default?.() }\n </props.tag>\n )\n }\n },\n})\nexport type VComponentIcon = InstanceType<typeof VComponentIcon>\n\nexport const VSvgIcon = defineComponent({\n name: 'VSvgIcon',\n\n inheritAttrs: false,\n\n props: makeIconProps(),\n\n setup (props, { attrs }) {\n return () => {\n return (\n <props.tag { ...attrs } style={ null }>\n <svg\n class=\"v-icon__svg\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n role=\"img\"\n aria-hidden=\"true\"\n >\n { Array.isArray(props.icon)\n ? props.icon.map(path => (\n Array.isArray(path)\n ? <path d={ path[0] as string } fill-opacity={ path[1] }></path>\n : <path d={ path as string }></path>\n ))\n : <path d={ props.icon as string }></path>\n }\n </svg>\n </props.tag>\n )\n }\n },\n})\nexport type VSvgIcon = InstanceType<typeof VSvgIcon>\n\nexport const VLigatureIcon = defineComponent({\n name: 'VLigatureIcon',\n\n props: makeIconProps(),\n\n setup (props) {\n return () => {\n return <props.tag>{ props.icon }</props.tag>\n }\n },\n})\nexport type VLigatureIcon = InstanceType<typeof VLigatureIcon>\n\nexport const VClassIcon = defineComponent({\n name: 'VClassIcon',\n\n props: makeIconProps(),\n\n setup (props) {\n return () => {\n return <props.tag class={ props.icon }></props.tag>\n }\n },\n})\nexport type VClassIcon = InstanceType<typeof VClassIcon>\n\nexport const defaultSets: Record<string, IconSet> = {\n svg: {\n component: VSvgIcon,\n },\n class: {\n component: VClassIcon,\n },\n}\n\n// Composables\nexport function createIcons (options?: IconOptions) {\n return mergeDeep({\n defaultSet: 'mdi',\n sets: {\n ...defaultSets,\n mdi,\n },\n aliases,\n }, options)\n}\n\nexport const useIcon = (props: Ref<IconValue | undefined>) => {\n const icons = inject(IconSymbol)\n\n if (!icons) throw new Error('Missing Vuetify Icons provide!')\n\n const iconData = computed<IconInstance>(() => {\n const iconAlias = unref(props)\n\n if (!iconAlias) return { component: VComponentIcon }\n\n let icon: IconValue | undefined = iconAlias\n\n if (typeof icon === 'string') {\n icon = icon.trim()\n\n if (icon.startsWith('$')) {\n icon = icons.aliases?.[icon.slice(1)]\n }\n }\n\n if (!icon) throw new Error(`Could not find aliased icon \"${iconAlias}\"`)\n\n if (Array.isArray(icon)) {\n return {\n component: VSvgIcon,\n icon,\n }\n } else if (typeof icon !== 'string') {\n return {\n component: VComponentIcon,\n icon,\n }\n }\n\n const iconSetName = Object.keys(icons.sets).find(\n setName => typeof icon === 'string' && icon.startsWith(`${setName}:`)\n )\n\n const iconName = iconSetName ? icon.slice(iconSetName.length + 1) : icon\n const iconSet = icons.sets[iconSetName ?? icons.defaultSet]\n\n return {\n component: iconSet.component,\n icon: iconName,\n }\n })\n\n return { iconData }\n}\n"],"mappings":"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"}
|
|
@@ -24,7 +24,7 @@ export const makeItemsProps = propsFactory({
|
|
|
24
24
|
default: 'props'
|
|
25
25
|
},
|
|
26
26
|
returnObject: Boolean
|
|
27
|
-
}, '
|
|
27
|
+
}, 'list-items');
|
|
28
28
|
export function transformItem(props, item) {
|
|
29
29
|
const title = getPropertyFromItem(item, props.itemTitle, item);
|
|
30
30
|
const value = props.returnObject ? item : getPropertyFromItem(item, props.itemValue, title);
|
|
@@ -52,20 +52,23 @@ export function transformItems(props, items) {
|
|
|
52
52
|
}
|
|
53
53
|
export function useItems(props) {
|
|
54
54
|
const items = computed(() => transformItems(props, props.items));
|
|
55
|
+
return useTransformItems(items, value => transformItem(props, value));
|
|
56
|
+
}
|
|
57
|
+
export function useTransformItems(items, transform) {
|
|
55
58
|
function transformIn(value) {
|
|
56
59
|
return value.map(v => {
|
|
57
60
|
const existingItem = items.value.find(item => deepEqual(v, item.value));
|
|
58
61
|
// Nullish existingItem means value is a custom input value from combobox
|
|
59
|
-
// In this case, use transformItem to create an
|
|
60
|
-
return existingItem ??
|
|
62
|
+
// In this case, use transformItem to create an { value: unknown } based on value
|
|
63
|
+
return existingItem ?? transform(v);
|
|
61
64
|
});
|
|
62
65
|
}
|
|
63
66
|
function transformOut(value) {
|
|
64
67
|
return value.map(_ref => {
|
|
65
68
|
let {
|
|
66
|
-
|
|
69
|
+
value
|
|
67
70
|
} = _ref;
|
|
68
|
-
return
|
|
71
|
+
return value;
|
|
69
72
|
});
|
|
70
73
|
}
|
|
71
74
|
return {
|
|
@@ -74,4 +77,4 @@ export function useItems(props) {
|
|
|
74
77
|
transformOut
|
|
75
78
|
};
|
|
76
79
|
}
|
|
77
|
-
//# sourceMappingURL=items.mjs.map
|
|
80
|
+
//# sourceMappingURL=list-items.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list-items.mjs","names":["computed","deepEqual","getPropertyFromItem","pick","propsFactory","makeItemsProps","items","type","Array","default","itemTitle","String","Function","itemValue","itemChildren","Boolean","itemProps","returnObject","transformItem","props","item","title","value","children","isArray","undefined","_props","transformItems","raw","array","push","useItems","useTransformItems","transform","transformIn","map","v","existingItem","find","transformOut","_ref"],"sources":["../../src/composables/list-items.ts"],"sourcesContent":["// Utilities\nimport { computed } from 'vue'\nimport { deepEqual, getPropertyFromItem, pick, propsFactory } from '@/util'\n\n// Types\nimport type { PropType, Ref } from 'vue'\nimport type { SelectItemKey } from '@/util'\n\nexport interface ListItem<T = any> {\n title: string\n value: any\n props: {\n [key: string]: any\n title: string\n value: any\n }\n children?: ListItem<T>[]\n raw: T\n}\n\nexport interface ItemProps {\n items: any[]\n itemTitle: SelectItemKey\n itemValue: SelectItemKey\n itemChildren: SelectItemKey\n itemProps: SelectItemKey\n returnObject: boolean\n}\n\n// Composables\nexport const makeItemsProps = propsFactory({\n items: {\n type: Array as PropType<ItemProps['items']>,\n default: () => ([]),\n },\n itemTitle: {\n type: [String, Array, Function] as PropType<SelectItemKey>,\n default: 'title',\n },\n itemValue: {\n type: [String, Array, Function] as PropType<SelectItemKey>,\n default: 'value',\n },\n itemChildren: {\n type: [Boolean, String, Array, Function] as PropType<SelectItemKey>,\n default: 'children',\n },\n itemProps: {\n type: [Boolean, String, Array, Function] as PropType<SelectItemKey>,\n default: 'props',\n },\n returnObject: Boolean,\n}, 'list-items')\n\nexport function transformItem (props: Omit<ItemProps, 'items'>, item: any): ListItem {\n const title = getPropertyFromItem(item, props.itemTitle, item)\n const value = props.returnObject ? item : getPropertyFromItem(item, props.itemValue, title)\n const children = getPropertyFromItem(item, props.itemChildren)\n const itemProps = props.itemProps === true\n ? typeof item === 'object' && item != null && !Array.isArray(item)\n ? 'children' in item\n ? pick(item, ['children'])[1]\n : item\n : undefined\n : getPropertyFromItem(item, props.itemProps)\n\n const _props = {\n title,\n value,\n ...itemProps,\n }\n\n return {\n title: String(_props.title ?? ''),\n value: _props.value,\n props: _props,\n children: Array.isArray(children) ? transformItems(props, children) : undefined,\n raw: item,\n }\n}\n\nexport function transformItems (props: Omit<ItemProps, 'items'>, items: ItemProps['items']) {\n const array: ListItem[] = []\n\n for (const item of items) {\n array.push(transformItem(props, item))\n }\n\n return array\n}\n\nexport function useItems (props: ItemProps) {\n const items = computed(() => transformItems(props, props.items))\n\n return useTransformItems(items, value => transformItem(props, value))\n}\n\nexport function useTransformItems <T extends { value: unknown }> (items: Ref<T[]>, transform: (value: unknown) => T) {\n function transformIn (value: any[]): T[] {\n return value.map(v => {\n const existingItem = items.value.find(item => deepEqual(v, item.value))\n // Nullish existingItem means value is a custom input value from combobox\n // In this case, use transformItem to create an { value: unknown } based on value\n return existingItem ?? transform(v)\n })\n }\n\n function transformOut (value: T[]) {\n return value.map(({ value }) => value)\n }\n\n return { items, transformIn, transformOut }\n}\n"],"mappings":"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"}
|