vuetify 3.6.0-alpha.2 → 3.6.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 +2 -1
- package/dist/json/attributes.json +731 -63
- package/dist/json/importMap-labs.json +32 -20
- package/dist/json/importMap.json +138 -138
- package/dist/json/tags.json +184 -2
- package/dist/json/web-types.json +13002 -10923
- package/dist/vuetify-labs.css +2039 -1927
- package/dist/vuetify-labs.d.ts +3575 -1079
- package/dist/vuetify-labs.esm.js +1047 -390
- package/dist/vuetify-labs.esm.js.map +1 -1
- package/dist/vuetify-labs.js +1046 -389
- package/dist/vuetify-labs.min.css +2 -2
- package/dist/vuetify.css +3026 -2941
- package/dist/vuetify.d.ts +927 -306
- package/dist/vuetify.esm.js +625 -363
- package/dist/vuetify.esm.js.map +1 -1
- package/dist/vuetify.js +624 -362
- package/dist/vuetify.js.map +1 -1
- package/dist/vuetify.min.css +2 -2
- package/dist/vuetify.min.js +728 -714
- package/dist/vuetify.min.js.map +1 -1
- package/lib/components/VAlert/VAlert.sass +128 -127
- package/lib/components/VApp/VApp.sass +15 -13
- package/lib/components/VAppBar/VAppBar.sass +9 -8
- package/lib/components/VAppBar/index.d.mts +10 -0
- package/lib/components/VAutocomplete/VAutocomplete.mjs +8 -10
- package/lib/components/VAutocomplete/VAutocomplete.mjs.map +1 -1
- package/lib/components/VAutocomplete/VAutocomplete.sass +94 -93
- package/lib/components/VAutocomplete/index.d.mts +36 -0
- package/lib/components/VAvatar/VAvatar.sass +26 -25
- package/lib/components/VBadge/VBadge.sass +61 -60
- package/lib/components/VBanner/VBanner.css +1 -1
- package/lib/components/VBanner/VBanner.sass +92 -91
- package/lib/components/VBanner/index.d.mts +15 -0
- package/lib/components/VBottomNavigation/VBottomNavigation.sass +50 -49
- package/lib/components/VBottomSheet/VBottomSheet.sass +28 -26
- package/lib/components/VBottomSheet/index.d.mts +14 -0
- package/lib/components/VBreadcrumbs/VBreadcrumbs.css +1 -1
- package/lib/components/VBreadcrumbs/VBreadcrumbs.sass +41 -40
- package/lib/components/VBtn/VBtn.css +3 -0
- package/lib/components/VBtn/VBtn.mjs +3 -1
- package/lib/components/VBtn/VBtn.mjs.map +1 -1
- package/lib/components/VBtn/VBtn.sass +204 -200
- package/lib/components/VBtn/index.d.mts +10 -0
- package/lib/components/VBtnGroup/VBtnGroup.sass +47 -46
- package/lib/components/VBtnToggle/VBtnToggle.sass +4 -3
- package/lib/components/VBtnToggle/index.d.mts +1 -0
- package/lib/components/VCard/VCard.css +3 -3
- package/lib/components/VCard/VCard.sass +181 -180
- package/lib/components/VCarousel/VCarousel.sass +50 -49
- package/lib/components/VCarousel/VCarouselItem.mjs +1 -1
- package/lib/components/VCarousel/VCarouselItem.mjs.map +1 -1
- package/lib/components/VCarousel/index.d.mts +1 -0
- package/lib/components/VCheckbox/VCheckbox.sass +6 -5
- package/lib/components/VChip/VChip.css +1 -1
- package/lib/components/VChip/VChip.sass +78 -76
- package/lib/components/VChipGroup/VChipGroup.sass +20 -18
- package/lib/components/VChipGroup/index.d.mts +16 -0
- package/lib/components/VCode/VCode.sass +10 -8
- package/lib/components/VColorPicker/VColorPicker.sass +18 -17
- package/lib/components/VColorPicker/VColorPickerCanvas.sass +21 -20
- package/lib/components/VColorPicker/VColorPickerEdit.sass +24 -23
- package/lib/components/VColorPicker/VColorPickerPreview.sass +54 -53
- package/lib/components/VColorPicker/VColorPickerSwatches.sass +29 -28
- package/lib/components/VCombobox/VCombobox.mjs +8 -10
- package/lib/components/VCombobox/VCombobox.mjs.map +1 -1
- package/lib/components/VCombobox/VCombobox.sass +94 -93
- package/lib/components/VCombobox/index.d.mts +36 -0
- package/lib/components/VCounter/VCounter.sass +7 -5
- package/lib/components/VDataIterator/index.d.mts +2 -0
- package/lib/components/VDataTable/VDataTable.css +36 -1
- package/lib/components/VDataTable/VDataTable.sass +137 -103
- package/lib/components/VDataTable/VDataTableFooter.css +5 -9
- package/lib/components/VDataTable/VDataTableFooter.sass +26 -25
- package/lib/components/VDataTable/VDataTableHeaders.mjs +66 -7
- package/lib/components/VDataTable/VDataTableHeaders.mjs.map +1 -1
- package/lib/components/VDataTable/VDataTableRow.mjs +45 -10
- package/lib/components/VDataTable/VDataTableRow.mjs.map +1 -1
- package/lib/components/VDataTable/VDataTableRows.mjs +8 -2
- package/lib/components/VDataTable/VDataTableRows.mjs.map +1 -1
- package/lib/components/VDataTable/_variables.scss +9 -3
- package/lib/components/VDataTable/index.d.mts +263 -217
- package/lib/components/VDataTable/types.mjs.map +1 -1
- package/lib/components/VDatePicker/VDatePicker.mjs +12 -2
- package/lib/components/VDatePicker/VDatePicker.mjs.map +1 -1
- package/lib/components/VDatePicker/VDatePicker.sass +6 -5
- package/lib/components/VDatePicker/VDatePickerControls.sass +56 -55
- package/lib/components/VDatePicker/VDatePickerHeader.sass +58 -56
- package/lib/components/VDatePicker/VDatePickerMonth.sass +53 -51
- package/lib/components/VDatePicker/VDatePickerMonths.sass +18 -16
- package/lib/components/VDatePicker/VDatePickerYears.sass +14 -12
- package/lib/components/VDialog/VDialog.css +7 -3
- package/lib/components/VDialog/VDialog.mjs +6 -2
- package/lib/components/VDialog/VDialog.mjs.map +1 -1
- package/lib/components/VDialog/VDialog.sass +71 -68
- package/lib/components/VDialog/__test__/VDialog.spec.cy.mjs +39 -0
- package/lib/components/VDialog/__test__/VDialog.spec.cy.mjs.map +1 -0
- package/lib/components/VDialog/_variables.scss +4 -3
- package/lib/components/VDialog/index.d.mts +60 -10
- package/lib/components/VDivider/VDivider.sass +49 -48
- package/lib/components/VExpansionPanel/VExpansionPanel.sass +172 -171
- package/lib/components/VField/VField.sass +451 -450
- package/lib/components/VFileInput/VFileInput.mjs +1 -1
- package/lib/components/VFileInput/VFileInput.mjs.map +1 -1
- package/lib/components/VFileInput/VFileInput.sass +30 -31
- package/lib/components/VFileInput/index.d.mts +17 -5
- package/lib/components/VFooter/VFooter.sass +17 -16
- package/lib/components/VGrid/VGrid.sass +42 -40
- package/lib/components/VIcon/VIcon.sass +34 -32
- package/lib/components/VImg/VImg.sass +24 -23
- package/lib/components/VInfiniteScroll/VInfiniteScroll.sass +21 -19
- package/lib/components/VInput/VInput.mjs +6 -1
- package/lib/components/VInput/VInput.mjs.map +1 -1
- package/lib/components/VInput/VInput.sass +103 -102
- package/lib/components/VInput/index.d.mts +6 -0
- package/lib/components/VItemGroup/VItemGroup.sass +7 -5
- package/lib/components/VKbd/VKbd.sass +10 -9
- package/lib/components/VLabel/VLabel.sass +14 -13
- package/lib/components/VLayout/VLayout.mjs +6 -1
- package/lib/components/VLayout/VLayout.mjs.map +1 -1
- package/lib/components/VLayout/VLayout.sass +10 -7
- package/lib/components/VLayout/VLayoutItem.sass +7 -5
- package/lib/components/VLayout/index.d.mts +36 -0
- package/lib/components/VList/VList.mjs +2 -1
- package/lib/components/VList/VList.mjs.map +1 -1
- package/lib/components/VList/VList.sass +81 -80
- package/lib/components/VList/VListItem.css +1 -1
- package/lib/components/VList/VListItem.sass +260 -259
- package/lib/components/VLocaleProvider/VLocaleProvider.sass +5 -2
- package/lib/components/VMain/VMain.sass +22 -21
- package/lib/components/VMenu/VMenu.sass +14 -13
- package/lib/components/VMenu/index.d.mts +56 -0
- package/lib/components/VMessages/VMessages.sass +16 -15
- package/lib/components/VNavigationDrawer/VNavigationDrawer.css +4 -0
- package/lib/components/VNavigationDrawer/VNavigationDrawer.mjs +14 -5
- package/lib/components/VNavigationDrawer/VNavigationDrawer.mjs.map +1 -1
- package/lib/components/VNavigationDrawer/VNavigationDrawer.sass +90 -84
- package/lib/components/VNavigationDrawer/index.d.mts +24 -0
- package/lib/components/VNavigationDrawer/touch.mjs +16 -2
- package/lib/components/VNavigationDrawer/touch.mjs.map +1 -1
- package/lib/components/VOtpInput/VOtpInput.sass +51 -50
- package/lib/components/VOverlay/VOverlay.mjs +2 -2
- package/lib/components/VOverlay/VOverlay.mjs.map +1 -1
- package/lib/components/VOverlay/VOverlay.sass +57 -55
- package/lib/components/VOverlay/index.d.mts +27 -13
- package/lib/components/VOverlay/useActivator.mjs.map +1 -1
- package/lib/components/VPagination/VPagination.sass +14 -12
- package/lib/components/VParallax/VParallax.sass +8 -5
- package/lib/components/VProgressCircular/VProgressCircular.sass +85 -83
- package/lib/components/VProgressLinear/VProgressLinear.mjs +11 -1
- package/lib/components/VProgressLinear/VProgressLinear.mjs.map +1 -1
- package/lib/components/VProgressLinear/VProgressLinear.sass +170 -169
- package/lib/components/VProgressLinear/index.d.mts +21 -0
- package/lib/components/VRadioGroup/VRadioGroup.sass +12 -10
- package/lib/components/VRangeSlider/index.d.mts +6 -0
- package/lib/components/VRating/VRating.sass +46 -44
- package/lib/components/VResponsive/VResponsive.sass +21 -19
- package/lib/components/VSelect/VSelect.mjs +5 -1
- package/lib/components/VSelect/VSelect.mjs.map +1 -1
- package/lib/components/VSelect/VSelect.sass +50 -49
- package/lib/components/VSelect/index.d.mts +36 -0
- package/lib/components/VSelectionControl/VSelectionControl.sass +87 -86
- package/lib/components/VSelectionControlGroup/VSelectionControlGroup.sass +9 -7
- package/lib/components/VSheet/VSheet.sass +10 -9
- package/lib/components/VSkeletonLoader/VSkeletonLoader.sass +174 -173
- package/lib/components/VSlideGroup/VSlideGroup.css +14 -1
- package/lib/components/VSlideGroup/VSlideGroup.mjs +110 -93
- package/lib/components/VSlideGroup/VSlideGroup.mjs.map +1 -1
- package/lib/components/VSlideGroup/VSlideGroup.sass +54 -40
- package/lib/components/VSlideGroup/helpers.mjs +48 -28
- package/lib/components/VSlideGroup/helpers.mjs.map +1 -1
- package/lib/components/VSlideGroup/index.d.mts +16 -0
- package/lib/components/VSlider/VSlider.sass +49 -48
- package/lib/components/VSlider/VSliderThumb.sass +129 -128
- package/lib/components/VSlider/VSliderTrack.sass +120 -119
- package/lib/components/VSlider/index.d.mts +6 -0
- package/lib/components/VSnackbar/VSnackbar.css +18 -1
- package/lib/components/VSnackbar/VSnackbar.mjs +34 -9
- package/lib/components/VSnackbar/VSnackbar.mjs.map +1 -1
- package/lib/components/VSnackbar/VSnackbar.sass +103 -83
- package/lib/components/VSnackbar/index.d.mts +42 -0
- package/lib/components/VStepper/VStepper.sass +37 -36
- package/lib/components/VStepper/VStepperItem.sass +69 -67
- package/lib/components/VSwitch/VSwitch.css +14 -2
- package/lib/components/VSwitch/VSwitch.sass +119 -112
- package/lib/components/VSystemBar/VSystemBar.css +1 -1
- package/lib/components/VSystemBar/VSystemBar.sass +24 -23
- package/lib/components/VTable/VTable.sass +140 -139
- package/lib/components/VTabs/VTab.sass +27 -25
- package/lib/components/VTabs/VTabs.sass +38 -37
- package/lib/components/VTabs/index.d.mts +49 -6
- package/lib/components/VTextField/VTextField.sass +58 -56
- package/lib/components/VTextField/index.d.mts +15 -3
- package/lib/components/VTextarea/VTextarea.sass +43 -42
- package/lib/components/VTextarea/index.d.mts +15 -3
- package/lib/components/VThemeProvider/VThemeProvider.sass +6 -3
- package/lib/components/VTimeline/VTimeline.sass +308 -307
- package/lib/components/VToolbar/VToolbar.sass +90 -89
- package/lib/components/VTooltip/VTooltip.sass +23 -21
- package/lib/components/VTooltip/index.d.mts +56 -0
- package/lib/components/VVirtualScroll/VVirtualScroll.sass +10 -7
- package/lib/components/VWindow/VWindow.css +1 -0
- package/lib/components/VWindow/VWindow.sass +74 -70
- package/lib/components/VWindow/index.d.mts +1 -0
- package/lib/components/index.d.mts +870 -253
- package/lib/composables/directiveComponent.mjs +4 -2
- package/lib/composables/directiveComponent.mjs.map +1 -1
- package/lib/composables/display.mjs +5 -0
- package/lib/composables/display.mjs.map +1 -1
- package/lib/composables/goto.mjs +40 -3
- package/lib/composables/goto.mjs.map +1 -1
- package/lib/composables/group.mjs +10 -1
- package/lib/composables/group.mjs.map +1 -1
- package/lib/composables/layout.mjs +3 -1
- package/lib/composables/layout.mjs.map +1 -1
- package/lib/directives/ripple/VRipple.sass +35 -33
- package/lib/entry-bundler.mjs +1 -1
- package/lib/entry-bundler.mjs.map +1 -1
- package/lib/framework.mjs +1 -1
- package/lib/framework.mjs.map +1 -1
- package/lib/index.d.mts +58 -54
- package/lib/labs/VCalendar/VCalendar.sass +160 -158
- package/lib/labs/VCalendar/VCalendarDay.sass +26 -23
- package/lib/labs/VCalendar/VCalendarHeader.sass +12 -10
- package/lib/labs/VCalendar/VCalendarInterval.sass +36 -34
- package/lib/labs/VCalendar/VCalendarIntervalEvent.sass +9 -6
- package/lib/labs/VCalendar/VCalendarMonthDay.sass +59 -57
- package/lib/labs/VDateInput/VDateInput.mjs +129 -0
- package/lib/labs/VDateInput/VDateInput.mjs.map +1 -0
- package/lib/labs/VDateInput/index.d.mts +1068 -0
- package/lib/labs/VDateInput/index.mjs +2 -0
- package/lib/labs/VDateInput/index.mjs.map +1 -0
- package/lib/labs/VEmptyState/VEmptyState.css +3 -3
- package/lib/labs/VEmptyState/VEmptyState.sass +59 -57
- package/lib/labs/VFab/VFab.css +1 -0
- package/lib/labs/VFab/VFab.mjs +3 -2
- package/lib/labs/VFab/VFab.mjs.map +1 -1
- package/lib/labs/VFab/VFab.sass +62 -60
- package/lib/labs/VFab/index.d.mts +19 -0
- package/lib/labs/VNumberInput/VNumberInput.mjs +79 -24
- package/lib/labs/VNumberInput/VNumberInput.mjs.map +1 -1
- package/lib/labs/VNumberInput/VNumberInput.sass +42 -40
- package/lib/labs/VNumberInput/index.d.mts +56 -29
- package/lib/labs/VPicker/VPicker.sass +49 -48
- package/lib/labs/VPullToRefresh/VPullToRefresh.css +27 -0
- package/lib/labs/VPullToRefresh/VPullToRefresh.mjs +117 -0
- package/lib/labs/VPullToRefresh/VPullToRefresh.mjs.map +1 -0
- package/lib/labs/VPullToRefresh/VPullToRefresh.sass +23 -0
- package/lib/labs/VPullToRefresh/index.d.mts +189 -0
- package/lib/labs/VPullToRefresh/index.mjs +2 -0
- package/lib/labs/VPullToRefresh/index.mjs.map +1 -0
- package/lib/labs/VSnackbarQueue/VSnackbarQueue.mjs +112 -0
- package/lib/labs/VSnackbarQueue/VSnackbarQueue.mjs.map +1 -0
- package/lib/labs/VSnackbarQueue/index.d.mts +2763 -0
- package/lib/labs/VSnackbarQueue/index.mjs +2 -0
- package/lib/labs/VSnackbarQueue/index.mjs.map +1 -0
- package/lib/labs/VSpeedDial/VSpeedDial.mjs +8 -2
- package/lib/labs/VSpeedDial/VSpeedDial.mjs.map +1 -1
- package/lib/labs/VSpeedDial/VSpeedDial.sass +23 -20
- package/lib/labs/VSpeedDial/index.d.mts +28 -2
- package/lib/labs/VTimePicker/VTimePicker.sass +9 -8
- package/lib/labs/VTimePicker/VTimePickerClock.mjs +1 -3
- package/lib/labs/VTimePicker/VTimePickerClock.mjs.map +1 -1
- package/lib/labs/VTimePicker/VTimePickerClock.sass +114 -113
- package/lib/labs/VTimePicker/VTimePickerControls.sass +90 -90
- package/lib/labs/VTimePicker/_variables.scss +1 -1
- package/lib/labs/VTimePicker/index.d.mts +6 -13
- package/lib/labs/VTreeview/VTreeviewItem.sass +14 -12
- package/lib/labs/VTreeview/{variables.scss → _variables.scss} +0 -2
- package/lib/labs/components.d.mts +5587 -1641
- package/lib/labs/components.mjs +3 -0
- package/lib/labs/components.mjs.map +1 -1
- package/lib/locale/af.mjs +1 -0
- package/lib/locale/af.mjs.map +1 -1
- package/lib/locale/ar.mjs +1 -0
- package/lib/locale/ar.mjs.map +1 -1
- package/lib/locale/az.mjs +1 -0
- package/lib/locale/az.mjs.map +1 -1
- package/lib/locale/bg.mjs +1 -0
- package/lib/locale/bg.mjs.map +1 -1
- package/lib/locale/ca.mjs +1 -0
- package/lib/locale/ca.mjs.map +1 -1
- package/lib/locale/ckb.mjs +1 -0
- package/lib/locale/ckb.mjs.map +1 -1
- package/lib/locale/cs.mjs +1 -0
- package/lib/locale/cs.mjs.map +1 -1
- package/lib/locale/da.mjs +1 -0
- package/lib/locale/da.mjs.map +1 -1
- package/lib/locale/de.mjs +1 -0
- package/lib/locale/de.mjs.map +1 -1
- package/lib/locale/el.mjs +1 -0
- package/lib/locale/el.mjs.map +1 -1
- package/lib/locale/en.mjs +1 -0
- package/lib/locale/en.mjs.map +1 -1
- package/lib/locale/es.mjs +1 -0
- package/lib/locale/es.mjs.map +1 -1
- package/lib/locale/et.mjs +1 -0
- package/lib/locale/et.mjs.map +1 -1
- package/lib/locale/fa.mjs +1 -0
- package/lib/locale/fa.mjs.map +1 -1
- package/lib/locale/fi.mjs +1 -0
- package/lib/locale/fi.mjs.map +1 -1
- package/lib/locale/fr.mjs +1 -0
- package/lib/locale/fr.mjs.map +1 -1
- package/lib/locale/he.mjs +1 -0
- package/lib/locale/he.mjs.map +1 -1
- package/lib/locale/hr.mjs +1 -0
- package/lib/locale/hr.mjs.map +1 -1
- package/lib/locale/hu.mjs +1 -0
- package/lib/locale/hu.mjs.map +1 -1
- package/lib/locale/id.mjs +1 -0
- package/lib/locale/id.mjs.map +1 -1
- package/lib/locale/index.d.mts +43 -0
- package/lib/locale/it.mjs +1 -0
- package/lib/locale/it.mjs.map +1 -1
- package/lib/locale/ja.mjs +1 -0
- package/lib/locale/ja.mjs.map +1 -1
- package/lib/locale/km.mjs +1 -0
- package/lib/locale/km.mjs.map +1 -1
- package/lib/locale/ko.mjs +9 -8
- package/lib/locale/ko.mjs.map +1 -1
- package/lib/locale/lt.mjs +1 -0
- package/lib/locale/lt.mjs.map +1 -1
- package/lib/locale/lv.mjs +1 -0
- package/lib/locale/lv.mjs.map +1 -1
- package/lib/locale/nl.mjs +1 -0
- package/lib/locale/nl.mjs.map +1 -1
- package/lib/locale/no.mjs +1 -0
- package/lib/locale/no.mjs.map +1 -1
- package/lib/locale/pl.mjs +1 -0
- package/lib/locale/pl.mjs.map +1 -1
- package/lib/locale/pt.mjs +1 -0
- package/lib/locale/pt.mjs.map +1 -1
- package/lib/locale/ro.mjs +1 -0
- package/lib/locale/ro.mjs.map +1 -1
- package/lib/locale/ru.mjs +1 -0
- package/lib/locale/ru.mjs.map +1 -1
- package/lib/locale/sk.mjs +1 -0
- package/lib/locale/sk.mjs.map +1 -1
- package/lib/locale/sl.mjs +1 -0
- package/lib/locale/sl.mjs.map +1 -1
- package/lib/locale/sr-Cyrl.mjs +1 -0
- package/lib/locale/sr-Cyrl.mjs.map +1 -1
- package/lib/locale/sr-Latn.mjs +1 -0
- package/lib/locale/sr-Latn.mjs.map +1 -1
- package/lib/locale/sv.mjs +1 -0
- package/lib/locale/sv.mjs.map +1 -1
- package/lib/locale/th.mjs +1 -0
- package/lib/locale/th.mjs.map +1 -1
- package/lib/locale/tr.mjs +1 -0
- package/lib/locale/tr.mjs.map +1 -1
- package/lib/locale/uk.mjs +1 -0
- package/lib/locale/uk.mjs.map +1 -1
- package/lib/locale/vi.mjs +1 -0
- package/lib/locale/vi.mjs.map +1 -1
- package/lib/locale/zh-Hans.mjs +1 -0
- package/lib/locale/zh-Hans.mjs.map +1 -1
- package/lib/locale/zh-Hant.mjs +1 -0
- package/lib/locale/zh-Hant.mjs.map +1 -1
- package/lib/styles/elements/_blockquote.sass +6 -4
- package/lib/styles/elements/_global.sass +20 -18
- package/lib/styles/generic/_animations.scss +13 -9
- package/lib/styles/generic/_colors.scss +36 -35
- package/lib/styles/generic/_index.scss +1 -0
- package/lib/styles/generic/_layers.scss +7 -0
- package/lib/styles/generic/_reset.scss +235 -232
- package/lib/styles/generic/_rtl.scss +10 -6
- package/lib/styles/generic/_transitions.scss +244 -241
- package/lib/styles/main.css +78 -78
- package/lib/styles/settings/_variables.scss +22 -14
- package/lib/styles/tools/_index.sass +1 -0
- package/lib/styles/tools/_layer.scss +11 -0
- package/lib/styles/utilities/_display.sass +7 -5
- package/lib/styles/utilities/_elevation.scss +8 -6
- package/lib/styles/utilities/_index.sass +28 -29
- package/lib/styles/utilities/_screenreaders.sass +13 -11
- package/package.json +2 -2
|
@@ -7,14 +7,15 @@ import { VFadeTransition } from "../transitions/index.mjs";
|
|
|
7
7
|
import { VIcon } from "../VIcon/index.mjs"; // Composables
|
|
8
8
|
import { makeComponentProps } from "../../composables/component.mjs";
|
|
9
9
|
import { makeDisplayProps, useDisplay } from "../../composables/display.mjs";
|
|
10
|
+
import { useGoTo } from "../../composables/goto.mjs";
|
|
10
11
|
import { makeGroupProps, useGroup } from "../../composables/group.mjs";
|
|
11
12
|
import { IconValue } from "../../composables/icons.mjs";
|
|
12
13
|
import { useRtl } from "../../composables/locale.mjs";
|
|
13
14
|
import { useResizeObserver } from "../../composables/resizeObserver.mjs";
|
|
14
15
|
import { makeTagProps } from "../../composables/tag.mjs"; // Utilities
|
|
15
16
|
import { computed, shallowRef, watch } from 'vue';
|
|
16
|
-
import {
|
|
17
|
-
import {
|
|
17
|
+
import { calculateCenteredTarget, calculateUpdatedTarget, getClientSize, getOffsetSize, getScrollPosition, getScrollSize } from "./helpers.mjs";
|
|
18
|
+
import { focusableChildren, genericComponent, IN_BROWSER, propsFactory, useRender } from "../../util/index.mjs"; // Types
|
|
18
19
|
export const VSlideGroupSymbol = Symbol.for('vuetify:v-slide-group');
|
|
19
20
|
export const makeVSlideGroupProps = propsFactory({
|
|
20
21
|
centerActive: Boolean,
|
|
@@ -76,6 +77,14 @@ export const VSlideGroup = genericComponent()({
|
|
|
76
77
|
resizeRef: contentRef,
|
|
77
78
|
contentRect
|
|
78
79
|
} = useResizeObserver();
|
|
80
|
+
const goTo = useGoTo();
|
|
81
|
+
const goToOptions = computed(() => {
|
|
82
|
+
return {
|
|
83
|
+
container: containerRef.value,
|
|
84
|
+
duration: 200,
|
|
85
|
+
easing: 'easeOutQuart'
|
|
86
|
+
};
|
|
87
|
+
});
|
|
79
88
|
const firstSelectedIndex = computed(() => {
|
|
80
89
|
if (!group.selected.value.length) return -1;
|
|
81
90
|
return group.items.value.findIndex(item => item.id === group.selected.value[0]);
|
|
@@ -98,60 +107,58 @@ export const VSlideGroup = genericComponent()({
|
|
|
98
107
|
if (firstSelectedIndex.value >= 0 && contentRef.value) {
|
|
99
108
|
// TODO: Is this too naive? Should we store element references in group composable?
|
|
100
109
|
const selectedElement = contentRef.value.children[lastSelectedIndex.value];
|
|
101
|
-
|
|
102
|
-
scrollOffset.value = 0;
|
|
103
|
-
} else if (props.centerActive) {
|
|
104
|
-
scrollOffset.value = calculateCenteredOffset({
|
|
105
|
-
selectedElement,
|
|
106
|
-
containerSize: containerSize.value,
|
|
107
|
-
contentSize: contentSize.value,
|
|
108
|
-
isRtl: isRtl.value,
|
|
109
|
-
isHorizontal: isHorizontal.value
|
|
110
|
-
});
|
|
111
|
-
} else if (isOverflowing.value) {
|
|
112
|
-
scrollOffset.value = calculateUpdatedOffset({
|
|
113
|
-
selectedElement,
|
|
114
|
-
containerSize: containerSize.value,
|
|
115
|
-
contentSize: contentSize.value,
|
|
116
|
-
isRtl: isRtl.value,
|
|
117
|
-
currentScrollOffset: scrollOffset.value,
|
|
118
|
-
isHorizontal: isHorizontal.value
|
|
119
|
-
});
|
|
120
|
-
}
|
|
110
|
+
scrollToChildren(selectedElement, props.centerActive);
|
|
121
111
|
}
|
|
122
112
|
});
|
|
123
113
|
});
|
|
124
114
|
}
|
|
125
|
-
const
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
115
|
+
const isFocused = shallowRef(false);
|
|
116
|
+
function scrollToChildren(children, center) {
|
|
117
|
+
let target = 0;
|
|
118
|
+
if (center) {
|
|
119
|
+
target = calculateCenteredTarget({
|
|
120
|
+
containerElement: containerRef.value,
|
|
121
|
+
isHorizontal: isHorizontal.value,
|
|
122
|
+
selectedElement: children
|
|
123
|
+
});
|
|
124
|
+
} else {
|
|
125
|
+
target = calculateUpdatedTarget({
|
|
126
|
+
containerElement: containerRef.value,
|
|
127
|
+
isHorizontal: isHorizontal.value,
|
|
128
|
+
isRtl: isRtl.value,
|
|
129
|
+
selectedElement: children
|
|
130
|
+
});
|
|
131
|
+
}
|
|
132
|
+
scrollToPosition(target);
|
|
140
133
|
}
|
|
141
|
-
function
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
134
|
+
function scrollToPosition(newPosition) {
|
|
135
|
+
if (!IN_BROWSER || !containerRef.value) return;
|
|
136
|
+
const offsetSize = getOffsetSize(isHorizontal.value, containerRef.value);
|
|
137
|
+
const scrollPosition = getScrollPosition(isHorizontal.value, isRtl.value, containerRef.value);
|
|
138
|
+
const scrollSize = getScrollSize(isHorizontal.value, containerRef.value);
|
|
139
|
+
if (scrollSize <= offsetSize ||
|
|
140
|
+
// Prevent scrolling by only a couple of pixels, which doesn't look smooth
|
|
141
|
+
Math.abs(newPosition - scrollPosition) < 16) return;
|
|
142
|
+
if (isHorizontal.value && isRtl.value && containerRef.value) {
|
|
143
|
+
const {
|
|
144
|
+
scrollWidth,
|
|
145
|
+
offsetWidth: containerWidth
|
|
146
|
+
} = containerRef.value;
|
|
147
|
+
newPosition = scrollWidth - containerWidth - newPosition;
|
|
148
|
+
}
|
|
149
|
+
if (isHorizontal.value) {
|
|
150
|
+
goTo.horizontal(newPosition, goToOptions.value);
|
|
151
|
+
} else {
|
|
152
|
+
goTo(newPosition, goToOptions.value);
|
|
147
153
|
}
|
|
148
|
-
disableTransition.value = false;
|
|
149
154
|
}
|
|
150
|
-
function onScroll() {
|
|
151
|
-
|
|
152
|
-
|
|
155
|
+
function onScroll(e) {
|
|
156
|
+
const {
|
|
157
|
+
scrollTop,
|
|
158
|
+
scrollLeft
|
|
159
|
+
} = e.target;
|
|
160
|
+
scrollOffset.value = isHorizontal.value ? scrollLeft : scrollTop;
|
|
153
161
|
}
|
|
154
|
-
const isFocused = shallowRef(false);
|
|
155
162
|
function onFocusin(e) {
|
|
156
163
|
isFocused.value = true;
|
|
157
164
|
if (!isOverflowing.value || !contentRef.value) return;
|
|
@@ -161,14 +168,7 @@ export const VSlideGroup = genericComponent()({
|
|
|
161
168
|
for (const el of e.composedPath()) {
|
|
162
169
|
for (const item of contentRef.value.children) {
|
|
163
170
|
if (item === el) {
|
|
164
|
-
|
|
165
|
-
selectedElement: item,
|
|
166
|
-
containerSize: containerSize.value,
|
|
167
|
-
contentSize: contentSize.value,
|
|
168
|
-
isRtl: isRtl.value,
|
|
169
|
-
currentScrollOffset: scrollOffset.value,
|
|
170
|
-
isHorizontal: isHorizontal.value
|
|
171
|
-
});
|
|
171
|
+
scrollToChildren(item);
|
|
172
172
|
return;
|
|
173
173
|
}
|
|
174
174
|
}
|
|
@@ -177,66 +177,79 @@ export const VSlideGroup = genericComponent()({
|
|
|
177
177
|
function onFocusout(e) {
|
|
178
178
|
isFocused.value = false;
|
|
179
179
|
}
|
|
180
|
+
|
|
181
|
+
// Affix clicks produce onFocus that we have to ignore to avoid extra scrollToChildren
|
|
182
|
+
let ignoreFocusEvent = false;
|
|
180
183
|
function onFocus(e) {
|
|
181
|
-
if (!isFocused.value && !(e.relatedTarget && contentRef.value?.contains(e.relatedTarget))) focus();
|
|
184
|
+
if (!ignoreFocusEvent && !isFocused.value && !(e.relatedTarget && contentRef.value?.contains(e.relatedTarget))) focus();
|
|
185
|
+
ignoreFocusEvent = false;
|
|
186
|
+
}
|
|
187
|
+
function onFocusAffixes() {
|
|
188
|
+
ignoreFocusEvent = true;
|
|
182
189
|
}
|
|
183
190
|
function onKeydown(e) {
|
|
184
191
|
if (!contentRef.value) return;
|
|
192
|
+
function toFocus(location) {
|
|
193
|
+
e.preventDefault();
|
|
194
|
+
focus(location);
|
|
195
|
+
}
|
|
185
196
|
if (isHorizontal.value) {
|
|
186
197
|
if (e.key === 'ArrowRight') {
|
|
187
|
-
|
|
198
|
+
toFocus(isRtl.value ? 'prev' : 'next');
|
|
188
199
|
} else if (e.key === 'ArrowLeft') {
|
|
189
|
-
|
|
200
|
+
toFocus(isRtl.value ? 'next' : 'prev');
|
|
190
201
|
}
|
|
191
202
|
} else {
|
|
192
203
|
if (e.key === 'ArrowDown') {
|
|
193
|
-
|
|
204
|
+
toFocus('next');
|
|
194
205
|
} else if (e.key === 'ArrowUp') {
|
|
195
|
-
|
|
206
|
+
toFocus('prev');
|
|
196
207
|
}
|
|
197
208
|
}
|
|
198
209
|
if (e.key === 'Home') {
|
|
199
|
-
|
|
210
|
+
toFocus('first');
|
|
200
211
|
} else if (e.key === 'End') {
|
|
201
|
-
|
|
212
|
+
toFocus('last');
|
|
202
213
|
}
|
|
203
214
|
}
|
|
204
215
|
function focus(location) {
|
|
205
216
|
if (!contentRef.value) return;
|
|
217
|
+
let el;
|
|
206
218
|
if (!location) {
|
|
207
219
|
const focusable = focusableChildren(contentRef.value);
|
|
208
|
-
focusable[0]
|
|
220
|
+
el = focusable[0];
|
|
209
221
|
} else if (location === 'next') {
|
|
210
|
-
|
|
211
|
-
if (el)
|
|
222
|
+
el = contentRef.value.querySelector(':focus')?.nextElementSibling;
|
|
223
|
+
if (!el) return focus('first');
|
|
212
224
|
} else if (location === 'prev') {
|
|
213
|
-
|
|
214
|
-
if (el)
|
|
225
|
+
el = contentRef.value.querySelector(':focus')?.previousElementSibling;
|
|
226
|
+
if (!el) return focus('last');
|
|
215
227
|
} else if (location === 'first') {
|
|
216
|
-
contentRef.value.firstElementChild
|
|
228
|
+
el = contentRef.value.firstElementChild;
|
|
217
229
|
} else if (location === 'last') {
|
|
218
|
-
contentRef.value.lastElementChild
|
|
230
|
+
el = contentRef.value.lastElementChild;
|
|
231
|
+
}
|
|
232
|
+
if (el) {
|
|
233
|
+
el.focus({
|
|
234
|
+
preventScroll: true
|
|
235
|
+
});
|
|
219
236
|
}
|
|
220
237
|
}
|
|
221
238
|
function scrollTo(location) {
|
|
222
|
-
const
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
const contentStyles = computed(() => {
|
|
226
|
-
// This adds friction when scrolling the 'wrong' way when at max offset
|
|
227
|
-
let scrollAmount = scrollOffset.value > contentSize.value - containerSize.value ? -(contentSize.value - containerSize.value) + bias(contentSize.value - containerSize.value - scrollOffset.value) : -scrollOffset.value;
|
|
239
|
+
const direction = isHorizontal.value && isRtl.value ? -1 : 1;
|
|
240
|
+
const offsetStep = (location === 'prev' ? -direction : direction) * containerSize.value;
|
|
241
|
+
let newPosition = scrollOffset.value + offsetStep;
|
|
228
242
|
|
|
229
|
-
//
|
|
230
|
-
if (
|
|
231
|
-
|
|
243
|
+
// TODO: improve it
|
|
244
|
+
if (isHorizontal.value && isRtl.value && containerRef.value) {
|
|
245
|
+
const {
|
|
246
|
+
scrollWidth,
|
|
247
|
+
offsetWidth: containerWidth
|
|
248
|
+
} = containerRef.value;
|
|
249
|
+
newPosition += scrollWidth - containerWidth;
|
|
232
250
|
}
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
transform: `translate${isHorizontal.value ? 'X' : 'Y'}(${sign * scrollAmount}px)`,
|
|
236
|
-
transition: disableTransition.value ? 'none' : '',
|
|
237
|
-
willChange: disableTransition.value ? 'transform' : ''
|
|
238
|
-
};
|
|
239
|
-
});
|
|
251
|
+
scrollToPosition(newPosition);
|
|
252
|
+
}
|
|
240
253
|
const slotProps = computed(() => ({
|
|
241
254
|
next: group.next,
|
|
242
255
|
prev: group.prev,
|
|
@@ -270,11 +283,17 @@ export const VSlideGroup = genericComponent()({
|
|
|
270
283
|
}
|
|
271
284
|
});
|
|
272
285
|
const hasPrev = computed(() => {
|
|
273
|
-
|
|
286
|
+
// 1 pixel in reserve, may be lost after rounding
|
|
287
|
+
return Math.abs(scrollOffset.value) > 1;
|
|
274
288
|
});
|
|
275
289
|
const hasNext = computed(() => {
|
|
276
|
-
|
|
277
|
-
|
|
290
|
+
if (!containerRef.value) return false;
|
|
291
|
+
const scrollSize = getScrollSize(isHorizontal.value, containerRef.value);
|
|
292
|
+
const clientSize = getClientSize(isHorizontal.value, containerRef.value);
|
|
293
|
+
const scrollSizeMax = scrollSize - clientSize;
|
|
294
|
+
|
|
295
|
+
// 1 pixel in reserve, may be lost after rounding
|
|
296
|
+
return scrollSizeMax - Math.abs(scrollOffset.value) > 1;
|
|
278
297
|
});
|
|
279
298
|
useRender(() => _createVNode(props.tag, {
|
|
280
299
|
"class": ['v-slide-group', {
|
|
@@ -291,6 +310,7 @@ export const VSlideGroup = genericComponent()({
|
|
|
291
310
|
"class": ['v-slide-group__prev', {
|
|
292
311
|
'v-slide-group__prev--disabled': !hasPrev.value
|
|
293
312
|
}],
|
|
313
|
+
"onMousedown": onFocusAffixes,
|
|
294
314
|
"onClick": () => hasPrev.value && scrollTo('prev')
|
|
295
315
|
}, [slots.prev?.(slotProps.value) ?? _createVNode(VFadeTransition, null, {
|
|
296
316
|
default: () => [_createVNode(VIcon, {
|
|
@@ -304,10 +324,6 @@ export const VSlideGroup = genericComponent()({
|
|
|
304
324
|
}, [_createVNode("div", {
|
|
305
325
|
"ref": contentRef,
|
|
306
326
|
"class": "v-slide-group__content",
|
|
307
|
-
"style": contentStyles.value,
|
|
308
|
-
"onTouchstartPassive": onTouchstart,
|
|
309
|
-
"onTouchmovePassive": onTouchmove,
|
|
310
|
-
"onTouchendPassive": onTouchend,
|
|
311
327
|
"onFocusin": onFocusin,
|
|
312
328
|
"onFocusout": onFocusout,
|
|
313
329
|
"onKeydown": onKeydown
|
|
@@ -316,6 +332,7 @@ export const VSlideGroup = genericComponent()({
|
|
|
316
332
|
"class": ['v-slide-group__next', {
|
|
317
333
|
'v-slide-group__next--disabled': !hasNext.value
|
|
318
334
|
}],
|
|
335
|
+
"onMousedown": onFocusAffixes,
|
|
319
336
|
"onClick": () => hasNext.value && scrollTo('next')
|
|
320
337
|
}, [slots.next?.(slotProps.value) ?? _createVNode(VFadeTransition, null, {
|
|
321
338
|
default: () => [_createVNode(VIcon, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VSlideGroup.mjs","names":["VFadeTransition","VIcon","makeComponentProps","makeDisplayProps","useDisplay","makeGroupProps","useGroup","IconValue","useRtl","useResizeObserver","makeTagProps","computed","shallowRef","watch","bias","calculateCenteredOffset","calculateUpdatedOffset","clamp","focusableChildren","genericComponent","IN_BROWSER","propsFactory","useRender","VSlideGroupSymbol","Symbol","for","makeVSlideGroupProps","centerActive","Boolean","direction","type","String","default","symbol","nextIcon","prevIcon","showArrows","validator","v","includes","selectedClass","VSlideGroup","name","props","emits","value","setup","_ref","slots","isRtl","displayClasses","mobile","group","isOverflowing","scrollOffset","containerSize","contentSize","isHorizontal","resizeRef","containerRef","contentRect","containerRect","contentRef","firstSelectedIndex","selected","length","items","findIndex","item","id","lastSelectedIndex","frame","cancelAnimationFrame","requestAnimationFrame","sizeProperty","selectedElement","children","currentScrollOffset","disableTransition","startTouch","startOffset","onTouchstart","e","sign","touches","onTouchmove","onTouchend","maxScrollOffset","onScroll","isFocused","onFocusin","el","composedPath","onFocusout","onFocus","relatedTarget","contains","focus","onKeydown","key","location","focusable","querySelector","nextElementSibling","previousElementSibling","firstElementChild","lastElementChild","scrollTo","newAbsoluteOffset","contentStyles","scrollAmount","transform","transition","willChange","slotProps","next","prev","select","isSelected","hasAffixes","Math","abs","hasPrev","hasNext","_createVNode","tag","class","style","onClick"],"sources":["../../../src/components/VSlideGroup/VSlideGroup.tsx"],"sourcesContent":["// Styles\nimport './VSlideGroup.sass'\n\n// Components\nimport { VFadeTransition } from '@/components/transitions'\nimport { VIcon } from '@/components/VIcon'\n\n// Composables\nimport { makeComponentProps } from '@/composables/component'\nimport { makeDisplayProps, useDisplay } from '@/composables/display'\nimport { makeGroupProps, useGroup } from '@/composables/group'\nimport { IconValue } from '@/composables/icons'\nimport { useRtl } from '@/composables/locale'\nimport { useResizeObserver } from '@/composables/resizeObserver'\nimport { makeTagProps } from '@/composables/tag'\n\n// Utilities\nimport { computed, shallowRef, watch } from 'vue'\nimport { bias, calculateCenteredOffset, calculateUpdatedOffset } from './helpers'\nimport { clamp, focusableChildren, genericComponent, IN_BROWSER, propsFactory, useRender } from '@/util'\n\n// Types\nimport type { InjectionKey, PropType } from 'vue'\nimport type { GroupProvide } from '@/composables/group'\nimport type { GenericProps } from '@/util'\n\nexport const VSlideGroupSymbol: InjectionKey<GroupProvide> = Symbol.for('vuetify:v-slide-group')\n\ninterface SlideGroupSlot {\n next: GroupProvide['next']\n prev: GroupProvide['prev']\n select: GroupProvide['select']\n isSelected: GroupProvide['isSelected']\n}\n\ntype VSlideGroupSlots = {\n default: SlideGroupSlot\n prev: SlideGroupSlot\n next: SlideGroupSlot\n}\n\nexport const makeVSlideGroupProps = propsFactory({\n centerActive: Boolean,\n direction: {\n type: String as PropType<'horizontal' | 'vertical'>,\n default: 'horizontal',\n },\n symbol: {\n type: null,\n default: VSlideGroupSymbol,\n },\n nextIcon: {\n type: IconValue,\n default: '$next',\n },\n prevIcon: {\n type: IconValue,\n default: '$prev',\n },\n showArrows: {\n type: [Boolean, String],\n validator: (v: any) => (\n typeof v === 'boolean' || [\n 'always',\n 'desktop',\n 'mobile',\n ].includes(v)\n ),\n },\n\n ...makeComponentProps(),\n ...makeDisplayProps(),\n ...makeTagProps(),\n ...makeGroupProps({\n selectedClass: 'v-slide-group-item--active',\n }),\n}, 'VSlideGroup')\n\nexport const VSlideGroup = genericComponent<new <T>(\n props: {\n modelValue?: T\n 'onUpdate:modelValue'?: (value: T) => void\n },\n slots: VSlideGroupSlots,\n) => GenericProps<typeof props, typeof slots>>()({\n name: 'VSlideGroup',\n\n props: makeVSlideGroupProps(),\n\n emits: {\n 'update:modelValue': (value: any) => true,\n },\n\n setup (props, { slots }) {\n const { isRtl } = useRtl()\n const { displayClasses, mobile } = useDisplay(props)\n const group = useGroup(props, props.symbol)\n const isOverflowing = shallowRef(false)\n const scrollOffset = shallowRef(0)\n const containerSize = shallowRef(0)\n const contentSize = shallowRef(0)\n const isHorizontal = computed(() => props.direction === 'horizontal')\n\n const { resizeRef: containerRef, contentRect: containerRect } = useResizeObserver()\n const { resizeRef: contentRef, contentRect } = useResizeObserver()\n\n const firstSelectedIndex = computed(() => {\n if (!group.selected.value.length) return -1\n\n return group.items.value.findIndex(item => item.id === group.selected.value[0])\n })\n\n const lastSelectedIndex = computed(() => {\n if (!group.selected.value.length) return -1\n\n return group.items.value.findIndex(item => item.id === group.selected.value[group.selected.value.length - 1])\n })\n\n if (IN_BROWSER) {\n let frame = -1\n watch(() => [group.selected.value, containerRect.value, contentRect.value, isHorizontal.value], () => {\n cancelAnimationFrame(frame)\n frame = requestAnimationFrame(() => {\n if (containerRect.value && contentRect.value) {\n const sizeProperty = isHorizontal.value ? 'width' : 'height'\n\n containerSize.value = containerRect.value[sizeProperty]\n contentSize.value = contentRect.value[sizeProperty]\n\n isOverflowing.value = containerSize.value + 1 < contentSize.value\n }\n\n if (firstSelectedIndex.value >= 0 && contentRef.value) {\n // TODO: Is this too naive? Should we store element references in group composable?\n const selectedElement = contentRef.value.children[lastSelectedIndex.value] as HTMLElement\n\n if (firstSelectedIndex.value === 0 || !isOverflowing.value) {\n scrollOffset.value = 0\n } else if (props.centerActive) {\n scrollOffset.value = calculateCenteredOffset({\n selectedElement,\n containerSize: containerSize.value,\n contentSize: contentSize.value,\n isRtl: isRtl.value,\n isHorizontal: isHorizontal.value,\n })\n } else if (isOverflowing.value) {\n scrollOffset.value = calculateUpdatedOffset({\n selectedElement,\n containerSize: containerSize.value,\n contentSize: contentSize.value,\n isRtl: isRtl.value,\n currentScrollOffset: scrollOffset.value,\n isHorizontal: isHorizontal.value,\n })\n }\n }\n })\n })\n }\n\n const disableTransition = shallowRef(false)\n\n let startTouch = 0\n let startOffset = 0\n\n function onTouchstart (e: TouchEvent) {\n const sizeProperty = isHorizontal.value ? 'clientX' : 'clientY'\n const sign = isRtl.value && isHorizontal.value ? -1 : 1\n startOffset = sign * scrollOffset.value\n startTouch = e.touches[0][sizeProperty]\n disableTransition.value = true\n }\n\n function onTouchmove (e: TouchEvent) {\n if (!isOverflowing.value) return\n\n const sizeProperty = isHorizontal.value ? 'clientX' : 'clientY'\n const sign = isRtl.value && isHorizontal.value ? -1 : 1\n scrollOffset.value = sign * (startOffset + startTouch - e.touches[0][sizeProperty])\n }\n\n function onTouchend (e: TouchEvent) {\n const maxScrollOffset = contentSize.value - containerSize.value\n\n if (scrollOffset.value < 0 || !isOverflowing.value) {\n scrollOffset.value = 0\n } else if (scrollOffset.value >= maxScrollOffset) {\n scrollOffset.value = maxScrollOffset\n }\n\n disableTransition.value = false\n }\n\n function onScroll () {\n if (!containerRef.value) return\n\n containerRef.value[isHorizontal.value ? 'scrollLeft' : 'scrollTop'] = 0\n }\n\n const isFocused = shallowRef(false)\n function onFocusin (e: FocusEvent) {\n isFocused.value = true\n\n if (!isOverflowing.value || !contentRef.value) return\n\n // Focused element is likely to be the root of an item, so a\n // breadth-first search will probably find it in the first iteration\n for (const el of e.composedPath()) {\n for (const item of contentRef.value.children) {\n if (item === el) {\n scrollOffset.value = calculateUpdatedOffset({\n selectedElement: item as HTMLElement,\n containerSize: containerSize.value,\n contentSize: contentSize.value,\n isRtl: isRtl.value,\n currentScrollOffset: scrollOffset.value,\n isHorizontal: isHorizontal.value,\n })\n return\n }\n }\n }\n }\n\n function onFocusout (e: FocusEvent) {\n isFocused.value = false\n }\n\n function onFocus (e: FocusEvent) {\n if (\n !isFocused.value &&\n !(e.relatedTarget && contentRef.value?.contains(e.relatedTarget as Node))\n ) focus()\n }\n\n function onKeydown (e: KeyboardEvent) {\n if (!contentRef.value) return\n\n if (isHorizontal.value) {\n if (e.key === 'ArrowRight') {\n focus(isRtl.value ? 'prev' : 'next')\n } else if (e.key === 'ArrowLeft') {\n focus(isRtl.value ? 'next' : 'prev')\n }\n } else {\n if (e.key === 'ArrowDown') {\n focus('next')\n } else if (e.key === 'ArrowUp') {\n focus('prev')\n }\n }\n\n if (e.key === 'Home') {\n focus('first')\n } else if (e.key === 'End') {\n focus('last')\n }\n }\n\n function focus (location?: 'next' | 'prev' | 'first' | 'last') {\n if (!contentRef.value) return\n\n if (!location) {\n const focusable = focusableChildren(contentRef.value)\n focusable[0]?.focus()\n } else if (location === 'next') {\n const el = contentRef.value.querySelector(':focus')?.nextElementSibling as HTMLElement | undefined\n if (el) el.focus()\n else focus('first')\n } else if (location === 'prev') {\n const el = contentRef.value.querySelector(':focus')?.previousElementSibling as HTMLElement | undefined\n if (el) el.focus()\n else focus('last')\n } else if (location === 'first') {\n (contentRef.value.firstElementChild as HTMLElement)?.focus()\n } else if (location === 'last') {\n (contentRef.value.lastElementChild as HTMLElement)?.focus()\n }\n }\n\n function scrollTo (location: 'prev' | 'next') {\n const newAbsoluteOffset = scrollOffset.value + (location === 'prev' ? -1 : 1) * containerSize.value\n\n scrollOffset.value = clamp(newAbsoluteOffset, 0, contentSize.value - containerSize.value)\n }\n\n const contentStyles = computed(() => {\n // This adds friction when scrolling the 'wrong' way when at max offset\n let scrollAmount = scrollOffset.value > contentSize.value - containerSize.value\n ? -(contentSize.value - containerSize.value) + bias(contentSize.value - containerSize.value - scrollOffset.value)\n : -scrollOffset.value\n\n // This adds friction when scrolling the 'wrong' way when at min offset\n if (scrollOffset.value <= 0) {\n scrollAmount = bias(-scrollOffset.value)\n }\n\n const sign = isRtl.value && isHorizontal.value ? -1 : 1\n return {\n transform: `translate${isHorizontal.value ? 'X' : 'Y'}(${sign * scrollAmount}px)`,\n transition: disableTransition.value ? 'none' : '',\n willChange: disableTransition.value ? 'transform' : '',\n }\n })\n\n const slotProps = computed(() => ({\n next: group.next,\n prev: group.prev,\n select: group.select,\n isSelected: group.isSelected,\n }))\n\n const hasAffixes = computed(() => {\n switch (props.showArrows) {\n // Always show arrows on desktop & mobile\n case 'always': return true\n\n // Always show arrows on desktop\n case 'desktop': return !mobile.value\n\n // Show arrows on mobile when overflowing.\n // This matches the default 2.2 behavior\n case true: return isOverflowing.value || Math.abs(scrollOffset.value) > 0\n\n // Always show on mobile\n case 'mobile': return (\n mobile.value ||\n (isOverflowing.value || Math.abs(scrollOffset.value) > 0)\n )\n\n // https://material.io/components/tabs#scrollable-tabs\n // Always show arrows when\n // overflowed on desktop\n default: return (\n !mobile.value &&\n (isOverflowing.value || Math.abs(scrollOffset.value) > 0)\n )\n }\n })\n\n const hasPrev = computed(() => {\n return Math.abs(scrollOffset.value) > 0\n })\n\n const hasNext = computed(() => {\n // Check one scroll ahead to know the width of right-most item\n return contentSize.value > Math.abs(scrollOffset.value) + containerSize.value\n })\n\n useRender(() => (\n <props.tag\n class={[\n 'v-slide-group',\n {\n 'v-slide-group--vertical': !isHorizontal.value,\n 'v-slide-group--has-affixes': hasAffixes.value,\n 'v-slide-group--is-overflowing': isOverflowing.value,\n },\n displayClasses.value,\n props.class,\n ]}\n style={ props.style }\n tabindex={ (isFocused.value || group.selected.value.length) ? -1 : 0 }\n onFocus={ onFocus }\n >\n { hasAffixes.value && (\n <div\n key=\"prev\"\n class={[\n 'v-slide-group__prev',\n { 'v-slide-group__prev--disabled': !hasPrev.value },\n ]}\n onClick={ () => hasPrev.value && scrollTo('prev') }\n >\n { slots.prev?.(slotProps.value) ?? (\n <VFadeTransition>\n <VIcon icon={ isRtl.value ? props.nextIcon : props.prevIcon }></VIcon>\n </VFadeTransition>\n )}\n </div>\n )}\n\n <div\n key=\"container\"\n ref={ containerRef }\n class=\"v-slide-group__container\"\n onScroll={ onScroll }\n >\n <div\n ref={ contentRef }\n class=\"v-slide-group__content\"\n style={ contentStyles.value }\n onTouchstartPassive={ onTouchstart }\n onTouchmovePassive={ onTouchmove }\n onTouchendPassive={ onTouchend }\n onFocusin={ onFocusin }\n onFocusout={ onFocusout }\n onKeydown={ onKeydown }\n >\n { slots.default?.(slotProps.value) }\n </div>\n </div>\n\n { hasAffixes.value && (\n <div\n key=\"next\"\n class={[\n 'v-slide-group__next',\n { 'v-slide-group__next--disabled': !hasNext.value },\n ]}\n onClick={ () => hasNext.value && scrollTo('next') }\n >\n { slots.next?.(slotProps.value) ?? (\n <VFadeTransition>\n <VIcon icon={ isRtl.value ? props.prevIcon : props.nextIcon }></VIcon>\n </VFadeTransition>\n )}\n </div>\n )}\n </props.tag>\n ))\n\n return {\n selected: group.selected,\n scrollTo,\n scrollOffset,\n focus,\n }\n },\n})\n\nexport type VSlideGroup = InstanceType<typeof VSlideGroup>\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"VSlideGroup.mjs","names":["VFadeTransition","VIcon","makeComponentProps","makeDisplayProps","useDisplay","useGoTo","makeGroupProps","useGroup","IconValue","useRtl","useResizeObserver","makeTagProps","computed","shallowRef","watch","calculateCenteredTarget","calculateUpdatedTarget","getClientSize","getOffsetSize","getScrollPosition","getScrollSize","focusableChildren","genericComponent","IN_BROWSER","propsFactory","useRender","VSlideGroupSymbol","Symbol","for","makeVSlideGroupProps","centerActive","Boolean","direction","type","String","default","symbol","nextIcon","prevIcon","showArrows","validator","v","includes","selectedClass","VSlideGroup","name","props","emits","value","setup","_ref","slots","isRtl","displayClasses","mobile","group","isOverflowing","scrollOffset","containerSize","contentSize","isHorizontal","resizeRef","containerRef","contentRect","containerRect","contentRef","goTo","goToOptions","container","duration","easing","firstSelectedIndex","selected","length","items","findIndex","item","id","lastSelectedIndex","frame","cancelAnimationFrame","requestAnimationFrame","sizeProperty","selectedElement","children","scrollToChildren","isFocused","center","target","containerElement","scrollToPosition","newPosition","offsetSize","scrollPosition","scrollSize","Math","abs","scrollWidth","offsetWidth","containerWidth","horizontal","onScroll","e","scrollTop","scrollLeft","onFocusin","el","composedPath","onFocusout","ignoreFocusEvent","onFocus","relatedTarget","contains","focus","onFocusAffixes","onKeydown","toFocus","location","preventDefault","key","focusable","querySelector","nextElementSibling","previousElementSibling","firstElementChild","lastElementChild","preventScroll","scrollTo","offsetStep","slotProps","next","prev","select","isSelected","hasAffixes","hasPrev","hasNext","clientSize","scrollSizeMax","_createVNode","tag","class","style","onClick"],"sources":["../../../src/components/VSlideGroup/VSlideGroup.tsx"],"sourcesContent":["// Styles\nimport './VSlideGroup.sass'\n\n// Components\nimport { VFadeTransition } from '@/components/transitions'\nimport { VIcon } from '@/components/VIcon'\n\n// Composables\nimport { makeComponentProps } from '@/composables/component'\nimport { makeDisplayProps, useDisplay } from '@/composables/display'\nimport { useGoTo } from '@/composables/goto'\nimport { makeGroupProps, useGroup } from '@/composables/group'\nimport { IconValue } from '@/composables/icons'\nimport { useRtl } from '@/composables/locale'\nimport { useResizeObserver } from '@/composables/resizeObserver'\nimport { makeTagProps } from '@/composables/tag'\n\n// Utilities\nimport { computed, shallowRef, watch } from 'vue'\nimport {\n calculateCenteredTarget,\n calculateUpdatedTarget,\n getClientSize,\n getOffsetSize,\n getScrollPosition,\n getScrollSize,\n} from './helpers'\nimport { focusableChildren, genericComponent, IN_BROWSER, propsFactory, useRender } from '@/util'\n\n// Types\nimport type { InjectionKey, PropType } from 'vue'\nimport type { GoToOptions } from '@/composables/goto'\nimport type { GroupProvide } from '@/composables/group'\nimport type { GenericProps } from '@/util'\n\nexport const VSlideGroupSymbol: InjectionKey<GroupProvide> = Symbol.for('vuetify:v-slide-group')\n\ninterface SlideGroupSlot {\n next: GroupProvide['next']\n prev: GroupProvide['prev']\n select: GroupProvide['select']\n isSelected: GroupProvide['isSelected']\n}\n\ntype VSlideGroupSlots = {\n default: SlideGroupSlot\n prev: SlideGroupSlot\n next: SlideGroupSlot\n}\n\nexport const makeVSlideGroupProps = propsFactory({\n centerActive: Boolean,\n direction: {\n type: String as PropType<'horizontal' | 'vertical'>,\n default: 'horizontal',\n },\n symbol: {\n type: null,\n default: VSlideGroupSymbol,\n },\n nextIcon: {\n type: IconValue,\n default: '$next',\n },\n prevIcon: {\n type: IconValue,\n default: '$prev',\n },\n showArrows: {\n type: [Boolean, String],\n validator: (v: any) => (\n typeof v === 'boolean' || [\n 'always',\n 'desktop',\n 'mobile',\n ].includes(v)\n ),\n },\n\n ...makeComponentProps(),\n ...makeDisplayProps(),\n ...makeTagProps(),\n ...makeGroupProps({\n selectedClass: 'v-slide-group-item--active',\n }),\n}, 'VSlideGroup')\n\nexport const VSlideGroup = genericComponent<new <T>(\n props: {\n modelValue?: T\n 'onUpdate:modelValue'?: (value: T) => void\n },\n slots: VSlideGroupSlots,\n) => GenericProps<typeof props, typeof slots>>()({\n name: 'VSlideGroup',\n\n props: makeVSlideGroupProps(),\n\n emits: {\n 'update:modelValue': (value: any) => true,\n },\n\n setup (props, { slots }) {\n const { isRtl } = useRtl()\n const { displayClasses, mobile } = useDisplay(props)\n const group = useGroup(props, props.symbol)\n const isOverflowing = shallowRef(false)\n const scrollOffset = shallowRef(0)\n const containerSize = shallowRef(0)\n const contentSize = shallowRef(0)\n const isHorizontal = computed(() => props.direction === 'horizontal')\n\n const { resizeRef: containerRef, contentRect: containerRect } = useResizeObserver()\n const { resizeRef: contentRef, contentRect } = useResizeObserver()\n\n const goTo = useGoTo()\n const goToOptions = computed<Partial<GoToOptions>>(() => {\n return {\n container: containerRef.value,\n duration: 200,\n easing: 'easeOutQuart',\n }\n })\n\n const firstSelectedIndex = computed(() => {\n if (!group.selected.value.length) return -1\n\n return group.items.value.findIndex(item => item.id === group.selected.value[0])\n })\n\n const lastSelectedIndex = computed(() => {\n if (!group.selected.value.length) return -1\n\n return group.items.value.findIndex(item => item.id === group.selected.value[group.selected.value.length - 1])\n })\n\n if (IN_BROWSER) {\n let frame = -1\n watch(() => [group.selected.value, containerRect.value, contentRect.value, isHorizontal.value], () => {\n cancelAnimationFrame(frame)\n frame = requestAnimationFrame(() => {\n if (containerRect.value && contentRect.value) {\n const sizeProperty = isHorizontal.value ? 'width' : 'height'\n\n containerSize.value = containerRect.value[sizeProperty]\n contentSize.value = contentRect.value[sizeProperty]\n\n isOverflowing.value = containerSize.value + 1 < contentSize.value\n }\n\n if (firstSelectedIndex.value >= 0 && contentRef.value) {\n // TODO: Is this too naive? Should we store element references in group composable?\n const selectedElement = contentRef.value.children[lastSelectedIndex.value] as HTMLElement\n\n scrollToChildren(selectedElement, props.centerActive)\n }\n })\n })\n }\n\n const isFocused = shallowRef(false)\n\n function scrollToChildren (children: HTMLElement, center?: boolean) {\n let target = 0\n\n if (center) {\n target = calculateCenteredTarget({\n containerElement: containerRef.value!,\n isHorizontal: isHorizontal.value,\n selectedElement: children,\n })\n } else {\n target = calculateUpdatedTarget({\n containerElement: containerRef.value!,\n isHorizontal: isHorizontal.value,\n isRtl: isRtl.value,\n selectedElement: children,\n })\n }\n\n scrollToPosition(target)\n }\n\n function scrollToPosition (newPosition: number) {\n if (!IN_BROWSER || !containerRef.value) return\n\n const offsetSize = getOffsetSize(isHorizontal.value, containerRef.value)\n const scrollPosition = getScrollPosition(isHorizontal.value, isRtl.value, containerRef.value)\n const scrollSize = getScrollSize(isHorizontal.value, containerRef.value)\n\n if (\n scrollSize <= offsetSize ||\n // Prevent scrolling by only a couple of pixels, which doesn't look smooth\n Math.abs(newPosition - scrollPosition) < 16\n ) return\n\n if (isHorizontal.value && isRtl.value && containerRef.value) {\n const { scrollWidth, offsetWidth: containerWidth } = containerRef.value!\n\n newPosition = (scrollWidth - containerWidth) - newPosition\n }\n\n if (isHorizontal.value) {\n goTo.horizontal(newPosition, goToOptions.value)\n } else {\n goTo(newPosition, goToOptions.value)\n }\n }\n\n function onScroll (e: UIEvent) {\n const { scrollTop, scrollLeft } = e.target as HTMLElement\n\n scrollOffset.value = isHorizontal.value ? scrollLeft : scrollTop\n }\n\n function onFocusin (e: FocusEvent) {\n isFocused.value = true\n\n if (!isOverflowing.value || !contentRef.value) return\n\n // Focused element is likely to be the root of an item, so a\n // breadth-first search will probably find it in the first iteration\n for (const el of e.composedPath()) {\n for (const item of contentRef.value.children) {\n if (item === el) {\n scrollToChildren(item as HTMLElement)\n return\n }\n }\n }\n }\n\n function onFocusout (e: FocusEvent) {\n isFocused.value = false\n }\n\n // Affix clicks produce onFocus that we have to ignore to avoid extra scrollToChildren\n let ignoreFocusEvent = false\n function onFocus (e: FocusEvent) {\n if (\n !ignoreFocusEvent &&\n !isFocused.value &&\n !(e.relatedTarget && contentRef.value?.contains(e.relatedTarget as Node))\n ) focus()\n\n ignoreFocusEvent = false\n }\n\n function onFocusAffixes () {\n ignoreFocusEvent = true\n }\n\n function onKeydown (e: KeyboardEvent) {\n if (!contentRef.value) return\n\n function toFocus (location: Parameters<typeof focus>[0]) {\n e.preventDefault()\n focus(location)\n }\n\n if (isHorizontal.value) {\n if (e.key === 'ArrowRight') {\n toFocus(isRtl.value ? 'prev' : 'next')\n } else if (e.key === 'ArrowLeft') {\n toFocus(isRtl.value ? 'next' : 'prev')\n }\n } else {\n if (e.key === 'ArrowDown') {\n toFocus('next')\n } else if (e.key === 'ArrowUp') {\n toFocus('prev')\n }\n }\n\n if (e.key === 'Home') {\n toFocus('first')\n } else if (e.key === 'End') {\n toFocus('last')\n }\n }\n\n function focus (location?: 'next' | 'prev' | 'first' | 'last') {\n if (!contentRef.value) return\n\n let el: HTMLElement | undefined\n\n if (!location) {\n const focusable = focusableChildren(contentRef.value)\n el = focusable[0]\n } else if (location === 'next') {\n el = contentRef.value.querySelector(':focus')?.nextElementSibling as HTMLElement | undefined\n\n if (!el) return focus('first')\n } else if (location === 'prev') {\n el = contentRef.value.querySelector(':focus')?.previousElementSibling as HTMLElement | undefined\n\n if (!el) return focus('last')\n } else if (location === 'first') {\n el = (contentRef.value.firstElementChild as HTMLElement)\n } else if (location === 'last') {\n el = (contentRef.value.lastElementChild as HTMLElement)\n }\n\n if (el) {\n el.focus({ preventScroll: true })\n }\n }\n\n function scrollTo (location: 'prev' | 'next') {\n const direction = isHorizontal.value && isRtl.value ? -1 : 1\n\n const offsetStep = (location === 'prev' ? -direction : direction) * containerSize.value\n\n let newPosition = scrollOffset.value + offsetStep\n\n // TODO: improve it\n if (isHorizontal.value && isRtl.value && containerRef.value) {\n const { scrollWidth, offsetWidth: containerWidth } = containerRef.value!\n\n newPosition += scrollWidth - containerWidth\n }\n\n scrollToPosition(newPosition)\n }\n\n const slotProps = computed(() => ({\n next: group.next,\n prev: group.prev,\n select: group.select,\n isSelected: group.isSelected,\n }))\n\n const hasAffixes = computed(() => {\n switch (props.showArrows) {\n // Always show arrows on desktop & mobile\n case 'always': return true\n\n // Always show arrows on desktop\n case 'desktop': return !mobile.value\n\n // Show arrows on mobile when overflowing.\n // This matches the default 2.2 behavior\n case true: return isOverflowing.value || Math.abs(scrollOffset.value) > 0\n\n // Always show on mobile\n case 'mobile': return (\n mobile.value ||\n (isOverflowing.value || Math.abs(scrollOffset.value) > 0)\n )\n\n // https://material.io/components/tabs#scrollable-tabs\n // Always show arrows when\n // overflowed on desktop\n default: return (\n !mobile.value &&\n (isOverflowing.value || Math.abs(scrollOffset.value) > 0)\n )\n }\n })\n\n const hasPrev = computed(() => {\n // 1 pixel in reserve, may be lost after rounding\n return Math.abs(scrollOffset.value) > 1\n })\n\n const hasNext = computed(() => {\n if (!containerRef.value) return false\n\n const scrollSize = getScrollSize(isHorizontal.value, containerRef.value)\n const clientSize = getClientSize(isHorizontal.value, containerRef.value)\n\n const scrollSizeMax = scrollSize - clientSize\n\n // 1 pixel in reserve, may be lost after rounding\n return scrollSizeMax - Math.abs(scrollOffset.value) > 1\n })\n\n useRender(() => (\n <props.tag\n class={[\n 'v-slide-group',\n {\n 'v-slide-group--vertical': !isHorizontal.value,\n 'v-slide-group--has-affixes': hasAffixes.value,\n 'v-slide-group--is-overflowing': isOverflowing.value,\n },\n displayClasses.value,\n props.class,\n ]}\n style={ props.style }\n tabindex={ (isFocused.value || group.selected.value.length) ? -1 : 0 }\n onFocus={ onFocus }\n >\n { hasAffixes.value && (\n <div\n key=\"prev\"\n class={[\n 'v-slide-group__prev',\n { 'v-slide-group__prev--disabled': !hasPrev.value },\n ]}\n onMousedown={ onFocusAffixes }\n onClick={ () => hasPrev.value && scrollTo('prev') }\n >\n { slots.prev?.(slotProps.value) ?? (\n <VFadeTransition>\n <VIcon icon={ isRtl.value ? props.nextIcon : props.prevIcon }></VIcon>\n </VFadeTransition>\n )}\n </div>\n )}\n\n <div\n key=\"container\"\n ref={ containerRef }\n class=\"v-slide-group__container\"\n onScroll={ onScroll }\n >\n <div\n ref={ contentRef }\n class=\"v-slide-group__content\"\n onFocusin={ onFocusin }\n onFocusout={ onFocusout }\n onKeydown={ onKeydown }\n >\n { slots.default?.(slotProps.value) }\n </div>\n </div>\n\n { hasAffixes.value && (\n <div\n key=\"next\"\n class={[\n 'v-slide-group__next',\n { 'v-slide-group__next--disabled': !hasNext.value },\n ]}\n onMousedown={ onFocusAffixes }\n onClick={ () => hasNext.value && scrollTo('next') }\n >\n { slots.next?.(slotProps.value) ?? (\n <VFadeTransition>\n <VIcon icon={ isRtl.value ? props.prevIcon : props.nextIcon }></VIcon>\n </VFadeTransition>\n )}\n </div>\n )}\n </props.tag>\n ))\n\n return {\n selected: group.selected,\n scrollTo,\n scrollOffset,\n focus,\n }\n },\n})\n\nexport type VSlideGroup = InstanceType<typeof VSlideGroup>\n"],"mappings":";AAAA;AACA;;AAEA;AAAA,SACSA,eAAe;AAAA,SACfC,KAAK,8BAEd;AAAA,SACSC,kBAAkB;AAAA,SAClBC,gBAAgB,EAAEC,UAAU;AAAA,SAC5BC,OAAO;AAAA,SACPC,cAAc,EAAEC,QAAQ;AAAA,SACxBC,SAAS;AAAA,SACTC,MAAM;AAAA,SACNC,iBAAiB;AAAA,SACjBC,YAAY,qCAErB;AACA,SAASC,QAAQ,EAAEC,UAAU,EAAEC,KAAK,QAAQ,KAAK;AAAA,SAE/CC,uBAAuB,EACvBC,sBAAsB,EACtBC,aAAa,EACbC,aAAa,EACbC,iBAAiB,EACjBC,aAAa;AAAA,SAENC,iBAAiB,EAAEC,gBAAgB,EAAEC,UAAU,EAAEC,YAAY,EAAEC,SAAS,gCAEjF;AAMA,OAAO,MAAMC,iBAA6C,GAAGC,MAAM,CAACC,GAAG,CAAC,uBAAuB,CAAC;AAehG,OAAO,MAAMC,oBAAoB,GAAGL,YAAY,CAAC;EAC/CM,YAAY,EAAEC,OAAO;EACrBC,SAAS,EAAE;IACTC,IAAI,EAAEC,MAA6C;IACnDC,OAAO,EAAE;EACX,CAAC;EACDC,MAAM,EAAE;IACNH,IAAI,EAAE,IAAI;IACVE,OAAO,EAAET;EACX,CAAC;EACDW,QAAQ,EAAE;IACRJ,IAAI,EAAEzB,SAAS;IACf2B,OAAO,EAAE;EACX,CAAC;EACDG,QAAQ,EAAE;IACRL,IAAI,EAAEzB,SAAS;IACf2B,OAAO,EAAE;EACX,CAAC;EACDI,UAAU,EAAE;IACVN,IAAI,EAAE,CAACF,OAAO,EAAEG,MAAM,CAAC;IACvBM,SAAS,EAAGC,CAAM,IAChB,OAAOA,CAAC,KAAK,SAAS,IAAI,CACxB,QAAQ,EACR,SAAS,EACT,QAAQ,CACT,CAACC,QAAQ,CAACD,CAAC;EAEhB,CAAC;EAED,GAAGvC,kBAAkB,CAAC,CAAC;EACvB,GAAGC,gBAAgB,CAAC,CAAC;EACrB,GAAGQ,YAAY,CAAC,CAAC;EACjB,GAAGL,cAAc,CAAC;IAChBqC,aAAa,EAAE;EACjB,CAAC;AACH,CAAC,EAAE,aAAa,CAAC;AAEjB,OAAO,MAAMC,WAAW,GAAGtB,gBAAgB,CAMI,CAAC,CAAC;EAC/CuB,IAAI,EAAE,aAAa;EAEnBC,KAAK,EAAEjB,oBAAoB,CAAC,CAAC;EAE7BkB,KAAK,EAAE;IACL,mBAAmB,EAAGC,KAAU,IAAK;EACvC,CAAC;EAEDC,KAAKA,CAAEH,KAAK,EAAAI,IAAA,EAAa;IAAA,IAAX;MAAEC;IAAM,CAAC,GAAAD,IAAA;IACrB,MAAM;MAAEE;IAAM,CAAC,GAAG3C,MAAM,CAAC,CAAC;IAC1B,MAAM;MAAE4C,cAAc;MAAEC;IAAO,CAAC,GAAGlD,UAAU,CAAC0C,KAAK,CAAC;IACpD,MAAMS,KAAK,GAAGhD,QAAQ,CAACuC,KAAK,EAAEA,KAAK,CAACV,MAAM,CAAC;IAC3C,MAAMoB,aAAa,GAAG3C,UAAU,CAAC,KAAK,CAAC;IACvC,MAAM4C,YAAY,GAAG5C,UAAU,CAAC,CAAC,CAAC;IAClC,MAAM6C,aAAa,GAAG7C,UAAU,CAAC,CAAC,CAAC;IACnC,MAAM8C,WAAW,GAAG9C,UAAU,CAAC,CAAC,CAAC;IACjC,MAAM+C,YAAY,GAAGhD,QAAQ,CAAC,MAAMkC,KAAK,CAACd,SAAS,KAAK,YAAY,CAAC;IAErE,MAAM;MAAE6B,SAAS,EAAEC,YAAY;MAAEC,WAAW,EAAEC;IAAc,CAAC,GAAGtD,iBAAiB,CAAC,CAAC;IACnF,MAAM;MAAEmD,SAAS,EAAEI,UAAU;MAAEF;IAAY,CAAC,GAAGrD,iBAAiB,CAAC,CAAC;IAElE,MAAMwD,IAAI,GAAG7D,OAAO,CAAC,CAAC;IACtB,MAAM8D,WAAW,GAAGvD,QAAQ,CAAuB,MAAM;MACvD,OAAO;QACLwD,SAAS,EAAEN,YAAY,CAACd,KAAK;QAC7BqB,QAAQ,EAAE,GAAG;QACbC,MAAM,EAAE;MACV,CAAC;IACH,CAAC,CAAC;IAEF,MAAMC,kBAAkB,GAAG3D,QAAQ,CAAC,MAAM;MACxC,IAAI,CAAC2C,KAAK,CAACiB,QAAQ,CAACxB,KAAK,CAACyB,MAAM,EAAE,OAAO,CAAC,CAAC;MAE3C,OAAOlB,KAAK,CAACmB,KAAK,CAAC1B,KAAK,CAAC2B,SAAS,CAACC,IAAI,IAAIA,IAAI,CAACC,EAAE,KAAKtB,KAAK,CAACiB,QAAQ,CAACxB,KAAK,CAAC,CAAC,CAAC,CAAC;IACjF,CAAC,CAAC;IAEF,MAAM8B,iBAAiB,GAAGlE,QAAQ,CAAC,MAAM;MACvC,IAAI,CAAC2C,KAAK,CAACiB,QAAQ,CAACxB,KAAK,CAACyB,MAAM,EAAE,OAAO,CAAC,CAAC;MAE3C,OAAOlB,KAAK,CAACmB,KAAK,CAAC1B,KAAK,CAAC2B,SAAS,CAACC,IAAI,IAAIA,IAAI,CAACC,EAAE,KAAKtB,KAAK,CAACiB,QAAQ,CAACxB,KAAK,CAACO,KAAK,CAACiB,QAAQ,CAACxB,KAAK,CAACyB,MAAM,GAAG,CAAC,CAAC,CAAC;IAC/G,CAAC,CAAC;IAEF,IAAIlD,UAAU,EAAE;MACd,IAAIwD,KAAK,GAAG,CAAC,CAAC;MACdjE,KAAK,CAAC,MAAM,CAACyC,KAAK,CAACiB,QAAQ,CAACxB,KAAK,EAAEgB,aAAa,CAAChB,KAAK,EAAEe,WAAW,CAACf,KAAK,EAAEY,YAAY,CAACZ,KAAK,CAAC,EAAE,MAAM;QACpGgC,oBAAoB,CAACD,KAAK,CAAC;QAC3BA,KAAK,GAAGE,qBAAqB,CAAC,MAAM;UAClC,IAAIjB,aAAa,CAAChB,KAAK,IAAIe,WAAW,CAACf,KAAK,EAAE;YAC5C,MAAMkC,YAAY,GAAGtB,YAAY,CAACZ,KAAK,GAAG,OAAO,GAAG,QAAQ;YAE5DU,aAAa,CAACV,KAAK,GAAGgB,aAAa,CAAChB,KAAK,CAACkC,YAAY,CAAC;YACvDvB,WAAW,CAACX,KAAK,GAAGe,WAAW,CAACf,KAAK,CAACkC,YAAY,CAAC;YAEnD1B,aAAa,CAACR,KAAK,GAAGU,aAAa,CAACV,KAAK,GAAG,CAAC,GAAGW,WAAW,CAACX,KAAK;UACnE;UAEA,IAAIuB,kBAAkB,CAACvB,KAAK,IAAI,CAAC,IAAIiB,UAAU,CAACjB,KAAK,EAAE;YACrD;YACA,MAAMmC,eAAe,GAAGlB,UAAU,CAACjB,KAAK,CAACoC,QAAQ,CAACN,iBAAiB,CAAC9B,KAAK,CAAgB;YAEzFqC,gBAAgB,CAACF,eAAe,EAAErC,KAAK,CAAChB,YAAY,CAAC;UACvD;QACF,CAAC,CAAC;MACJ,CAAC,CAAC;IACJ;IAEA,MAAMwD,SAAS,GAAGzE,UAAU,CAAC,KAAK,CAAC;IAEnC,SAASwE,gBAAgBA,CAAED,QAAqB,EAAEG,MAAgB,EAAE;MAClE,IAAIC,MAAM,GAAG,CAAC;MAEd,IAAID,MAAM,EAAE;QACVC,MAAM,GAAGzE,uBAAuB,CAAC;UAC/B0E,gBAAgB,EAAE3B,YAAY,CAACd,KAAM;UACrCY,YAAY,EAAEA,YAAY,CAACZ,KAAK;UAChCmC,eAAe,EAAEC;QACnB,CAAC,CAAC;MACJ,CAAC,MAAM;QACLI,MAAM,GAAGxE,sBAAsB,CAAC;UAC9ByE,gBAAgB,EAAE3B,YAAY,CAACd,KAAM;UACrCY,YAAY,EAAEA,YAAY,CAACZ,KAAK;UAChCI,KAAK,EAAEA,KAAK,CAACJ,KAAK;UAClBmC,eAAe,EAAEC;QACnB,CAAC,CAAC;MACJ;MAEAM,gBAAgB,CAACF,MAAM,CAAC;IAC1B;IAEA,SAASE,gBAAgBA,CAAEC,WAAmB,EAAE;MAC9C,IAAI,CAACpE,UAAU,IAAI,CAACuC,YAAY,CAACd,KAAK,EAAE;MAExC,MAAM4C,UAAU,GAAG1E,aAAa,CAAC0C,YAAY,CAACZ,KAAK,EAAEc,YAAY,CAACd,KAAK,CAAC;MACxE,MAAM6C,cAAc,GAAG1E,iBAAiB,CAACyC,YAAY,CAACZ,KAAK,EAAEI,KAAK,CAACJ,KAAK,EAAEc,YAAY,CAACd,KAAK,CAAC;MAC7F,MAAM8C,UAAU,GAAG1E,aAAa,CAACwC,YAAY,CAACZ,KAAK,EAAEc,YAAY,CAACd,KAAK,CAAC;MAExE,IACE8C,UAAU,IAAIF,UAAU;MACxB;MACAG,IAAI,CAACC,GAAG,CAACL,WAAW,GAAGE,cAAc,CAAC,GAAG,EAAE,EAC3C;MAEF,IAAIjC,YAAY,CAACZ,KAAK,IAAII,KAAK,CAACJ,KAAK,IAAIc,YAAY,CAACd,KAAK,EAAE;QAC3D,MAAM;UAAEiD,WAAW;UAAEC,WAAW,EAAEC;QAAe,CAAC,GAAGrC,YAAY,CAACd,KAAM;QAExE2C,WAAW,GAAIM,WAAW,GAAGE,cAAc,GAAIR,WAAW;MAC5D;MAEA,IAAI/B,YAAY,CAACZ,KAAK,EAAE;QACtBkB,IAAI,CAACkC,UAAU,CAACT,WAAW,EAAExB,WAAW,CAACnB,KAAK,CAAC;MACjD,CAAC,MAAM;QACLkB,IAAI,CAACyB,WAAW,EAAExB,WAAW,CAACnB,KAAK,CAAC;MACtC;IACF;IAEA,SAASqD,QAAQA,CAAEC,CAAU,EAAE;MAC7B,MAAM;QAAEC,SAAS;QAAEC;MAAW,CAAC,GAAGF,CAAC,CAACd,MAAqB;MAEzD/B,YAAY,CAACT,KAAK,GAAGY,YAAY,CAACZ,KAAK,GAAGwD,UAAU,GAAGD,SAAS;IAClE;IAEA,SAASE,SAASA,CAAEH,CAAa,EAAE;MACjChB,SAAS,CAACtC,KAAK,GAAG,IAAI;MAEtB,IAAI,CAACQ,aAAa,CAACR,KAAK,IAAI,CAACiB,UAAU,CAACjB,KAAK,EAAE;;MAE/C;MACA;MACA,KAAK,MAAM0D,EAAE,IAAIJ,CAAC,CAACK,YAAY,CAAC,CAAC,EAAE;QACjC,KAAK,MAAM/B,IAAI,IAAIX,UAAU,CAACjB,KAAK,CAACoC,QAAQ,EAAE;UAC5C,IAAIR,IAAI,KAAK8B,EAAE,EAAE;YACfrB,gBAAgB,CAACT,IAAmB,CAAC;YACrC;UACF;QACF;MACF;IACF;IAEA,SAASgC,UAAUA,CAAEN,CAAa,EAAE;MAClChB,SAAS,CAACtC,KAAK,GAAG,KAAK;IACzB;;IAEA;IACA,IAAI6D,gBAAgB,GAAG,KAAK;IAC5B,SAASC,OAAOA,CAAER,CAAa,EAAE;MAC/B,IACE,CAACO,gBAAgB,IACjB,CAACvB,SAAS,CAACtC,KAAK,IAChB,EAAEsD,CAAC,CAACS,aAAa,IAAI9C,UAAU,CAACjB,KAAK,EAAEgE,QAAQ,CAACV,CAAC,CAACS,aAAqB,CAAC,CAAC,EACzEE,KAAK,CAAC,CAAC;MAETJ,gBAAgB,GAAG,KAAK;IAC1B;IAEA,SAASK,cAAcA,CAAA,EAAI;MACzBL,gBAAgB,GAAG,IAAI;IACzB;IAEA,SAASM,SAASA,CAAEb,CAAgB,EAAE;MACpC,IAAI,CAACrC,UAAU,CAACjB,KAAK,EAAE;MAEvB,SAASoE,OAAOA,CAAEC,QAAqC,EAAE;QACvDf,CAAC,CAACgB,cAAc,CAAC,CAAC;QAClBL,KAAK,CAACI,QAAQ,CAAC;MACjB;MAEA,IAAIzD,YAAY,CAACZ,KAAK,EAAE;QACtB,IAAIsD,CAAC,CAACiB,GAAG,KAAK,YAAY,EAAE;UAC1BH,OAAO,CAAChE,KAAK,CAACJ,KAAK,GAAG,MAAM,GAAG,MAAM,CAAC;QACxC,CAAC,MAAM,IAAIsD,CAAC,CAACiB,GAAG,KAAK,WAAW,EAAE;UAChCH,OAAO,CAAChE,KAAK,CAACJ,KAAK,GAAG,MAAM,GAAG,MAAM,CAAC;QACxC;MACF,CAAC,MAAM;QACL,IAAIsD,CAAC,CAACiB,GAAG,KAAK,WAAW,EAAE;UACzBH,OAAO,CAAC,MAAM,CAAC;QACjB,CAAC,MAAM,IAAId,CAAC,CAACiB,GAAG,KAAK,SAAS,EAAE;UAC9BH,OAAO,CAAC,MAAM,CAAC;QACjB;MACF;MAEA,IAAId,CAAC,CAACiB,GAAG,KAAK,MAAM,EAAE;QACpBH,OAAO,CAAC,OAAO,CAAC;MAClB,CAAC,MAAM,IAAId,CAAC,CAACiB,GAAG,KAAK,KAAK,EAAE;QAC1BH,OAAO,CAAC,MAAM,CAAC;MACjB;IACF;IAEA,SAASH,KAAKA,CAAEI,QAA6C,EAAE;MAC7D,IAAI,CAACpD,UAAU,CAACjB,KAAK,EAAE;MAEvB,IAAI0D,EAA2B;MAE/B,IAAI,CAACW,QAAQ,EAAE;QACb,MAAMG,SAAS,GAAGnG,iBAAiB,CAAC4C,UAAU,CAACjB,KAAK,CAAC;QACrD0D,EAAE,GAAGc,SAAS,CAAC,CAAC,CAAC;MACnB,CAAC,MAAM,IAAIH,QAAQ,KAAK,MAAM,EAAE;QAC9BX,EAAE,GAAGzC,UAAU,CAACjB,KAAK,CAACyE,aAAa,CAAC,QAAQ,CAAC,EAAEC,kBAA6C;QAE5F,IAAI,CAAChB,EAAE,EAAE,OAAOO,KAAK,CAAC,OAAO,CAAC;MAChC,CAAC,MAAM,IAAII,QAAQ,KAAK,MAAM,EAAE;QAC9BX,EAAE,GAAGzC,UAAU,CAACjB,KAAK,CAACyE,aAAa,CAAC,QAAQ,CAAC,EAAEE,sBAAiD;QAEhG,IAAI,CAACjB,EAAE,EAAE,OAAOO,KAAK,CAAC,MAAM,CAAC;MAC/B,CAAC,MAAM,IAAII,QAAQ,KAAK,OAAO,EAAE;QAC/BX,EAAE,GAAIzC,UAAU,CAACjB,KAAK,CAAC4E,iBAAiC;MAC1D,CAAC,MAAM,IAAIP,QAAQ,KAAK,MAAM,EAAE;QAC9BX,EAAE,GAAIzC,UAAU,CAACjB,KAAK,CAAC6E,gBAAgC;MACzD;MAEA,IAAInB,EAAE,EAAE;QACNA,EAAE,CAACO,KAAK,CAAC;UAAEa,aAAa,EAAE;QAAK,CAAC,CAAC;MACnC;IACF;IAEA,SAASC,QAAQA,CAAEV,QAAyB,EAAE;MAC5C,MAAMrF,SAAS,GAAG4B,YAAY,CAACZ,KAAK,IAAII,KAAK,CAACJ,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC;MAE5D,MAAMgF,UAAU,GAAG,CAACX,QAAQ,KAAK,MAAM,GAAG,CAACrF,SAAS,GAAGA,SAAS,IAAI0B,aAAa,CAACV,KAAK;MAEvF,IAAI2C,WAAW,GAAGlC,YAAY,CAACT,KAAK,GAAGgF,UAAU;;MAEjD;MACA,IAAIpE,YAAY,CAACZ,KAAK,IAAII,KAAK,CAACJ,KAAK,IAAIc,YAAY,CAACd,KAAK,EAAE;QAC3D,MAAM;UAAEiD,WAAW;UAAEC,WAAW,EAAEC;QAAe,CAAC,GAAGrC,YAAY,CAACd,KAAM;QAExE2C,WAAW,IAAIM,WAAW,GAAGE,cAAc;MAC7C;MAEAT,gBAAgB,CAACC,WAAW,CAAC;IAC/B;IAEA,MAAMsC,SAAS,GAAGrH,QAAQ,CAAC,OAAO;MAChCsH,IAAI,EAAE3E,KAAK,CAAC2E,IAAI;MAChBC,IAAI,EAAE5E,KAAK,CAAC4E,IAAI;MAChBC,MAAM,EAAE7E,KAAK,CAAC6E,MAAM;MACpBC,UAAU,EAAE9E,KAAK,CAAC8E;IACpB,CAAC,CAAC,CAAC;IAEH,MAAMC,UAAU,GAAG1H,QAAQ,CAAC,MAAM;MAChC,QAAQkC,KAAK,CAACP,UAAU;QACtB;QACA,KAAK,QAAQ;UAAE,OAAO,IAAI;;QAE1B;QACA,KAAK,SAAS;UAAE,OAAO,CAACe,MAAM,CAACN,KAAK;;QAEpC;QACA;QACA,KAAK,IAAI;UAAE,OAAOQ,aAAa,CAACR,KAAK,IAAI+C,IAAI,CAACC,GAAG,CAACvC,YAAY,CAACT,KAAK,CAAC,GAAG,CAAC;;QAEzE;QACA,KAAK,QAAQ;UAAE,OACbM,MAAM,CAACN,KAAK,IACXQ,aAAa,CAACR,KAAK,IAAI+C,IAAI,CAACC,GAAG,CAACvC,YAAY,CAACT,KAAK,CAAC,GAAG,CAAE;;QAG3D;QACA;QACA;QACA;UAAS,OACP,CAACM,MAAM,CAACN,KAAK,KACZQ,aAAa,CAACR,KAAK,IAAI+C,IAAI,CAACC,GAAG,CAACvC,YAAY,CAACT,KAAK,CAAC,GAAG,CAAC,CAAC;MAE7D;IACF,CAAC,CAAC;IAEF,MAAMuF,OAAO,GAAG3H,QAAQ,CAAC,MAAM;MAC7B;MACA,OAAOmF,IAAI,CAACC,GAAG,CAACvC,YAAY,CAACT,KAAK,CAAC,GAAG,CAAC;IACzC,CAAC,CAAC;IAEF,MAAMwF,OAAO,GAAG5H,QAAQ,CAAC,MAAM;MAC7B,IAAI,CAACkD,YAAY,CAACd,KAAK,EAAE,OAAO,KAAK;MAErC,MAAM8C,UAAU,GAAG1E,aAAa,CAACwC,YAAY,CAACZ,KAAK,EAAEc,YAAY,CAACd,KAAK,CAAC;MACxE,MAAMyF,UAAU,GAAGxH,aAAa,CAAC2C,YAAY,CAACZ,KAAK,EAAEc,YAAY,CAACd,KAAK,CAAC;MAExE,MAAM0F,aAAa,GAAG5C,UAAU,GAAG2C,UAAU;;MAE7C;MACA,OAAOC,aAAa,GAAG3C,IAAI,CAACC,GAAG,CAACvC,YAAY,CAACT,KAAK,CAAC,GAAG,CAAC;IACzD,CAAC,CAAC;IAEFvB,SAAS,CAAC,MAAAkH,YAAA,CAAA7F,KAAA,CAAA8F,GAAA;MAAA,SAEC,CACL,eAAe,EACf;QACE,yBAAyB,EAAE,CAAChF,YAAY,CAACZ,KAAK;QAC9C,4BAA4B,EAAEsF,UAAU,CAACtF,KAAK;QAC9C,+BAA+B,EAAEQ,aAAa,CAACR;MACjD,CAAC,EACDK,cAAc,CAACL,KAAK,EACpBF,KAAK,CAAC+F,KAAK,CACZ;MAAA,SACO/F,KAAK,CAACgG,KAAK;MAAA,YACPxD,SAAS,CAACtC,KAAK,IAAIO,KAAK,CAACiB,QAAQ,CAACxB,KAAK,CAACyB,MAAM,GAAI,CAAC,CAAC,GAAG,CAAC;MAAA,WAC1DqC;IAAO;MAAA3E,OAAA,EAAAA,CAAA,MAEfmG,UAAU,CAACtF,KAAK,IAAA2F,YAAA;QAAA;QAAA,SAGP,CACL,qBAAqB,EACrB;UAAE,+BAA+B,EAAE,CAACJ,OAAO,CAACvF;QAAM,CAAC,CACpD;QAAA,eACakE,cAAc;QAAA,WAClB6B,CAAA,KAAMR,OAAO,CAACvF,KAAK,IAAI+E,QAAQ,CAAC,MAAM;MAAC,IAE/C5E,KAAK,CAACgF,IAAI,GAAGF,SAAS,CAACjF,KAAK,CAAC,IAAA2F,YAAA,CAAA3I,eAAA;QAAAmC,OAAA,EAAAA,CAAA,MAAAwG,YAAA,CAAA1I,KAAA;UAAA,QAEbmD,KAAK,CAACJ,KAAK,GAAGF,KAAK,CAACT,QAAQ,GAAGS,KAAK,CAACR;QAAQ;MAAA,EAE9D,EAEJ,EAAAqG,YAAA;QAAA;QAAA,OAIO7E,YAAY;QAAA;QAAA,YAEPuC;MAAQ,IAAAsC,YAAA;QAAA,OAGX1E,UAAU;QAAA;QAAA,aAEJwC,SAAS;QAAA,cACRG,UAAU;QAAA,aACXO;MAAS,IAEnBhE,KAAK,CAAChB,OAAO,GAAG8F,SAAS,CAACjF,KAAK,CAAC,MAIpCsF,UAAU,CAACtF,KAAK,IAAA2F,YAAA;QAAA;QAAA,SAGP,CACL,qBAAqB,EACrB;UAAE,+BAA+B,EAAE,CAACH,OAAO,CAACxF;QAAM,CAAC,CACpD;QAAA,eACakE,cAAc;QAAA,WAClB6B,CAAA,KAAMP,OAAO,CAACxF,KAAK,IAAI+E,QAAQ,CAAC,MAAM;MAAC,IAE/C5E,KAAK,CAAC+E,IAAI,GAAGD,SAAS,CAACjF,KAAK,CAAC,IAAA2F,YAAA,CAAA3I,eAAA;QAAAmC,OAAA,EAAAA,CAAA,MAAAwG,YAAA,CAAA1I,KAAA;UAAA,QAEbmD,KAAK,CAACJ,KAAK,GAAGF,KAAK,CAACR,QAAQ,GAAGQ,KAAK,CAACT;QAAQ;MAAA,EAE9D,EAEJ;IAAA,EAEJ,CAAC;IAEF,OAAO;MACLmC,QAAQ,EAAEjB,KAAK,CAACiB,QAAQ;MACxBuD,QAAQ;MACRtE,YAAY;MACZwD;IACF,CAAC;EACH;AACF,CAAC,CAAC","ignoreList":[]}
|
|
@@ -4,44 +4,58 @@
|
|
|
4
4
|
@use '../../styles/tools'
|
|
5
5
|
@use './variables' as *
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
.v-slide-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
display: flex
|
|
28
|
-
flex: 1 0 auto
|
|
29
|
-
position: relative
|
|
30
|
-
transition: 0.2s all settings.$standard-easing
|
|
31
|
-
white-space: nowrap
|
|
32
|
-
|
|
33
|
-
> *
|
|
34
|
-
white-space: initial
|
|
35
|
-
|
|
36
|
-
.v-slide-group__container
|
|
37
|
-
contain: content
|
|
38
|
-
display: flex
|
|
39
|
-
flex: 1 1 auto
|
|
40
|
-
overflow: hidden
|
|
41
|
-
|
|
42
|
-
// Modifiers
|
|
43
|
-
.v-slide-group--vertical
|
|
44
|
-
&,
|
|
45
|
-
.v-slide-group__container,
|
|
7
|
+
@include tools.layer('components')
|
|
8
|
+
// Block
|
|
9
|
+
.v-slide-group
|
|
10
|
+
display: flex
|
|
11
|
+
overflow: hidden
|
|
12
|
+
|
|
13
|
+
// Element
|
|
14
|
+
.v-slide-group__next,
|
|
15
|
+
.v-slide-group__prev
|
|
16
|
+
align-items: center
|
|
17
|
+
display: flex
|
|
18
|
+
flex: 0 1 $slide-group-prev-basis
|
|
19
|
+
justify-content: center
|
|
20
|
+
min-width: $slide-group-prev-basis
|
|
21
|
+
cursor: pointer
|
|
22
|
+
|
|
23
|
+
&--disabled
|
|
24
|
+
pointer-events: none
|
|
25
|
+
opacity: var(--v-disabled-opacity)
|
|
26
|
+
|
|
46
27
|
.v-slide-group__content
|
|
47
|
-
|
|
28
|
+
display: flex
|
|
29
|
+
flex: 1 0 auto
|
|
30
|
+
position: relative
|
|
31
|
+
transition: 0.2s all settings.$standard-easing
|
|
32
|
+
white-space: nowrap
|
|
33
|
+
|
|
34
|
+
> *
|
|
35
|
+
white-space: initial
|
|
36
|
+
|
|
37
|
+
.v-slide-group__container
|
|
38
|
+
contain: content
|
|
39
|
+
display: flex
|
|
40
|
+
flex: 1 1 auto
|
|
41
|
+
overflow-x: auto
|
|
42
|
+
overflow-y: hidden
|
|
43
|
+
|
|
44
|
+
scrollbar-width: none
|
|
45
|
+
scrollbar-color: rgba(0, 0, 0, 0)
|
|
46
|
+
|
|
47
|
+
&::-webkit-scrollbar
|
|
48
|
+
display: none
|
|
49
|
+
|
|
50
|
+
// Modifiers
|
|
51
|
+
.v-slide-group--vertical
|
|
52
|
+
max-height: inherit
|
|
53
|
+
|
|
54
|
+
&,
|
|
55
|
+
.v-slide-group__container,
|
|
56
|
+
.v-slide-group__content
|
|
57
|
+
flex-direction: column
|
|
58
|
+
|
|
59
|
+
.v-slide-group__container
|
|
60
|
+
overflow-x: hidden
|
|
61
|
+
overflow-y: auto
|
|
@@ -1,41 +1,61 @@
|
|
|
1
|
-
export function
|
|
2
|
-
const c = 0.501;
|
|
3
|
-
const x = Math.abs(val);
|
|
4
|
-
return Math.sign(val) * (x / ((1 / c - 2) * (1 - x) + 1));
|
|
5
|
-
}
|
|
6
|
-
export function calculateUpdatedOffset(_ref) {
|
|
1
|
+
export function calculateUpdatedTarget(_ref) {
|
|
7
2
|
let {
|
|
8
3
|
selectedElement,
|
|
9
|
-
|
|
10
|
-
contentSize,
|
|
4
|
+
containerElement,
|
|
11
5
|
isRtl,
|
|
12
|
-
currentScrollOffset,
|
|
13
6
|
isHorizontal
|
|
14
7
|
} = _ref;
|
|
15
|
-
const
|
|
16
|
-
const
|
|
17
|
-
const
|
|
18
|
-
const
|
|
19
|
-
const
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
currentScrollOffset = Math.min(currentScrollOffset - (totalSize - itemOffset - additionalOffset), contentSize - containerSize);
|
|
8
|
+
const containerSize = getOffsetSize(isHorizontal, containerElement);
|
|
9
|
+
const scrollPosition = getScrollPosition(isHorizontal, isRtl, containerElement);
|
|
10
|
+
const childrenSize = getOffsetSize(isHorizontal, selectedElement);
|
|
11
|
+
const childrenStartPosition = getOffsetPosition(isHorizontal, selectedElement);
|
|
12
|
+
const additionalOffset = childrenSize * 0.4;
|
|
13
|
+
if (scrollPosition > childrenStartPosition) {
|
|
14
|
+
return childrenStartPosition - additionalOffset;
|
|
15
|
+
} else if (scrollPosition + containerSize < childrenStartPosition + childrenSize) {
|
|
16
|
+
return childrenStartPosition - containerSize + childrenSize + additionalOffset;
|
|
25
17
|
}
|
|
26
|
-
return
|
|
18
|
+
return scrollPosition;
|
|
27
19
|
}
|
|
28
|
-
export function
|
|
20
|
+
export function calculateCenteredTarget(_ref2) {
|
|
29
21
|
let {
|
|
30
22
|
selectedElement,
|
|
31
|
-
|
|
32
|
-
contentSize,
|
|
33
|
-
isRtl,
|
|
23
|
+
containerElement,
|
|
34
24
|
isHorizontal
|
|
35
25
|
} = _ref2;
|
|
36
|
-
const
|
|
37
|
-
const
|
|
38
|
-
const
|
|
39
|
-
return
|
|
26
|
+
const containerOffsetSize = getOffsetSize(isHorizontal, containerElement);
|
|
27
|
+
const childrenOffsetPosition = getOffsetPosition(isHorizontal, selectedElement);
|
|
28
|
+
const childrenOffsetSize = getOffsetSize(isHorizontal, selectedElement);
|
|
29
|
+
return childrenOffsetPosition - containerOffsetSize / 2 + childrenOffsetSize / 2;
|
|
30
|
+
}
|
|
31
|
+
export function getScrollSize(isHorizontal, element) {
|
|
32
|
+
const key = isHorizontal ? 'scrollWidth' : 'scrollHeight';
|
|
33
|
+
return element?.[key] || 0;
|
|
34
|
+
}
|
|
35
|
+
export function getClientSize(isHorizontal, element) {
|
|
36
|
+
const key = isHorizontal ? 'clientWidth' : 'clientHeight';
|
|
37
|
+
return element?.[key] || 0;
|
|
38
|
+
}
|
|
39
|
+
export function getScrollPosition(isHorizontal, rtl, element) {
|
|
40
|
+
if (!element) {
|
|
41
|
+
return 0;
|
|
42
|
+
}
|
|
43
|
+
const {
|
|
44
|
+
scrollLeft,
|
|
45
|
+
offsetWidth,
|
|
46
|
+
scrollWidth
|
|
47
|
+
} = element;
|
|
48
|
+
if (isHorizontal) {
|
|
49
|
+
return rtl ? scrollWidth - offsetWidth + scrollLeft : scrollLeft;
|
|
50
|
+
}
|
|
51
|
+
return element.scrollTop;
|
|
52
|
+
}
|
|
53
|
+
export function getOffsetSize(isHorizontal, element) {
|
|
54
|
+
const key = isHorizontal ? 'offsetWidth' : 'offsetHeight';
|
|
55
|
+
return element?.[key] || 0;
|
|
56
|
+
}
|
|
57
|
+
export function getOffsetPosition(isHorizontal, element) {
|
|
58
|
+
const key = isHorizontal ? 'offsetLeft' : 'offsetTop';
|
|
59
|
+
return element?.[key] || 0;
|
|
40
60
|
}
|
|
41
61
|
//# sourceMappingURL=helpers.mjs.map
|