@vuetify/nightly 3.0.0-beta.0 → 3.0.0-beta.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (277) hide show
  1. package/CHANGELOG.md +53 -2
  2. package/dist/json/attributes.json +343 -195
  3. package/dist/json/importMap.json +20 -0
  4. package/dist/json/tags.json +106 -44
  5. package/dist/json/web-types.json +946 -549
  6. package/dist/vuetify.css +1486 -1085
  7. package/dist/vuetify.d.ts +9036 -8077
  8. package/dist/vuetify.esm.js +1511 -944
  9. package/dist/vuetify.esm.js.map +1 -1
  10. package/dist/vuetify.js +1510 -943
  11. package/dist/vuetify.js.map +1 -1
  12. package/dist/vuetify.min.css +3 -3
  13. package/dist/vuetify.min.js +825 -754
  14. package/dist/vuetify.min.js.map +1 -1
  15. package/lib/components/VAlert/VAlert.css +29 -8
  16. package/lib/components/VAlert/VAlert.mjs +31 -17
  17. package/lib/components/VAlert/VAlert.mjs.map +1 -1
  18. package/lib/components/VAlert/VAlert.sass +27 -7
  19. package/lib/components/VAlert/VAlertTitle.mjs +1 -0
  20. package/lib/components/VAlert/VAlertTitle.mjs.map +1 -1
  21. package/lib/components/VAlert/_variables.scss +14 -7
  22. package/lib/components/VApp/VApp.css +1 -0
  23. package/lib/components/VApp/VApp.sass +1 -0
  24. package/lib/components/VAppBar/VAppBar.mjs +7 -3
  25. package/lib/components/VAppBar/VAppBar.mjs.map +1 -1
  26. package/lib/components/VAppBar/VAppBarTitle.mjs.map +1 -1
  27. package/lib/components/VAutocomplete/VAutocomplete.mjs +82 -69
  28. package/lib/components/VAutocomplete/VAutocomplete.mjs.map +1 -1
  29. package/lib/components/VAvatar/VAvatar.mjs +15 -14
  30. package/lib/components/VAvatar/VAvatar.mjs.map +1 -1
  31. package/lib/components/VBanner/VBanner.css +82 -58
  32. package/lib/components/VBanner/VBanner.mjs +39 -43
  33. package/lib/components/VBanner/VBanner.mjs.map +1 -1
  34. package/lib/components/VBanner/VBanner.sass +61 -54
  35. package/lib/components/VBanner/VBannerActions.mjs +34 -2
  36. package/lib/components/VBanner/VBannerActions.mjs.map +1 -1
  37. package/lib/components/VBanner/VBannerAvatar.mjs +20 -0
  38. package/lib/components/VBanner/VBannerAvatar.mjs.map +1 -0
  39. package/lib/components/VBanner/VBannerIcon.mjs +20 -0
  40. package/lib/components/VBanner/VBannerIcon.mjs.map +1 -0
  41. package/lib/components/VBanner/_variables.scss +10 -14
  42. package/lib/components/VBanner/index.mjs +2 -0
  43. package/lib/components/VBanner/index.mjs.map +1 -1
  44. package/lib/components/VBreadcrumbs/VBreadcrumbs.mjs +2 -0
  45. package/lib/components/VBreadcrumbs/VBreadcrumbs.mjs.map +1 -1
  46. package/lib/components/VBreadcrumbs/VBreadcrumbsItem.mjs +10 -9
  47. package/lib/components/VBreadcrumbs/VBreadcrumbsItem.mjs.map +1 -1
  48. package/lib/components/VBtn/VBtn.css +20 -1
  49. package/lib/components/VBtn/VBtn.mjs +20 -7
  50. package/lib/components/VBtn/VBtn.mjs.map +1 -1
  51. package/lib/components/VBtn/VBtn.sass +15 -2
  52. package/lib/components/VBtn/_variables.scss +3 -0
  53. package/lib/components/VBtnGroup/VBtnGroup.css +14 -6
  54. package/lib/components/VBtnGroup/VBtnGroup.sass +14 -6
  55. package/lib/components/VCard/VCard.css +13 -11
  56. package/lib/components/VCard/VCard.mjs +5 -2
  57. package/lib/components/VCard/VCard.mjs.map +1 -1
  58. package/lib/components/VCard/VCard.sass +12 -9
  59. package/lib/components/VCard/VCardActions.mjs +1 -2
  60. package/lib/components/VCard/VCardActions.mjs.map +1 -1
  61. package/lib/components/VCard/VCardContent.mjs +3 -0
  62. package/lib/components/VCard/VCardContent.mjs.map +1 -0
  63. package/lib/components/VCard/_variables.scss +11 -5
  64. package/lib/components/VCard/index.mjs +1 -0
  65. package/lib/components/VCard/index.mjs.map +1 -1
  66. package/lib/components/VCarousel/VCarousel.mjs +1 -1
  67. package/lib/components/VCarousel/VCarousel.mjs.map +1 -1
  68. package/lib/components/VCheckbox/VCheckbox.mjs +2 -2
  69. package/lib/components/VCheckbox/VCheckbox.mjs.map +1 -1
  70. package/lib/components/VChip/VChip.css +3 -0
  71. package/lib/components/VChip/VChip.sass +3 -0
  72. package/lib/components/VChip/_variables.scss +3 -0
  73. package/lib/components/VColorPicker/VColorPickerCanvas.css +1 -1
  74. package/lib/components/VCombobox/VCombobox.mjs +92 -74
  75. package/lib/components/VCombobox/VCombobox.mjs.map +1 -1
  76. package/lib/components/VDialog/VDialog.css +31 -11
  77. package/lib/components/VDialog/VDialog.mjs +6 -9
  78. package/lib/components/VDialog/VDialog.mjs.map +1 -1
  79. package/lib/components/VDialog/VDialog.sass +27 -10
  80. package/lib/components/VDialog/_variables.scss +3 -6
  81. package/lib/components/VExpansionPanel/VExpansionPanel.css +3 -2
  82. package/lib/components/VExpansionPanel/VExpansionPanel.mjs +6 -2
  83. package/lib/components/VExpansionPanel/VExpansionPanel.mjs.map +1 -1
  84. package/lib/components/VExpansionPanel/VExpansionPanelTitle.mjs +5 -3
  85. package/lib/components/VExpansionPanel/VExpansionPanelTitle.mjs.map +1 -1
  86. package/lib/components/VExpansionPanel/VExpansionPanels.mjs +4 -0
  87. package/lib/components/VExpansionPanel/VExpansionPanels.mjs.map +1 -1
  88. package/lib/components/VField/VField.css +1 -1
  89. package/lib/components/VField/VField.mjs +3 -4
  90. package/lib/components/VField/VField.mjs.map +1 -1
  91. package/lib/components/VField/VField.sass +1 -1
  92. package/lib/components/VFileInput/VFileInput.mjs +2 -1
  93. package/lib/components/VFileInput/VFileInput.mjs.map +1 -1
  94. package/lib/components/VFooter/VFooter.mjs +32 -15
  95. package/lib/components/VFooter/VFooter.mjs.map +1 -1
  96. package/lib/components/VForm/VForm.mjs +25 -11
  97. package/lib/components/VForm/VForm.mjs.map +1 -1
  98. package/lib/components/VIcon/VIcon.css +27 -12
  99. package/lib/components/VIcon/VIcon.mjs +19 -16
  100. package/lib/components/VIcon/VIcon.mjs.map +1 -1
  101. package/lib/components/VIcon/VIcon.sass +27 -16
  102. package/lib/components/VIcon/_variables.scss +1 -0
  103. package/lib/components/VInput/VInput.css +3 -1
  104. package/lib/components/VInput/VInput.mjs +3 -4
  105. package/lib/components/VInput/VInput.mjs.map +1 -1
  106. package/lib/components/VInput/VInput.sass +3 -1
  107. package/lib/components/VInput/_variables.scss +4 -0
  108. package/lib/components/VList/VList.css +7 -6
  109. package/lib/components/VList/VList.mjs +36 -17
  110. package/lib/components/VList/VList.mjs.map +1 -1
  111. package/lib/components/VList/VList.sass +3 -2
  112. package/lib/components/VList/VListChildren.mjs +1 -1
  113. package/lib/components/VList/VListChildren.mjs.map +1 -1
  114. package/lib/components/VList/VListGroup.mjs +28 -10
  115. package/lib/components/VList/VListGroup.mjs.map +1 -1
  116. package/lib/components/VList/VListItem.css +119 -42
  117. package/lib/components/VList/VListItem.mjs +36 -32
  118. package/lib/components/VList/VListItem.mjs.map +1 -1
  119. package/lib/components/VList/VListItem.sass +76 -28
  120. package/lib/components/VList/VListItemAction.mjs +29 -0
  121. package/lib/components/VList/VListItemAction.mjs.map +1 -0
  122. package/lib/components/VList/VListItemAvatar.mjs +10 -16
  123. package/lib/components/VList/VListItemAvatar.mjs.map +1 -1
  124. package/lib/components/VList/VListItemIcon.mjs +23 -0
  125. package/lib/components/VList/VListItemIcon.mjs.map +1 -0
  126. package/lib/components/VList/VListItemMedia.mjs +4 -4
  127. package/lib/components/VList/VListItemMedia.mjs.map +1 -1
  128. package/lib/components/VList/_variables.scss +12 -3
  129. package/lib/components/VList/index.mjs +2 -0
  130. package/lib/components/VList/index.mjs.map +1 -1
  131. package/lib/components/VMenu/VMenu.css +2 -12
  132. package/lib/components/VMenu/VMenu.mjs +61 -31
  133. package/lib/components/VMenu/VMenu.mjs.map +1 -1
  134. package/lib/components/VMenu/VMenu.sass +3 -6
  135. package/lib/components/VMenu/shared.mjs +2 -0
  136. package/lib/components/VMenu/shared.mjs.map +1 -0
  137. package/lib/components/VNavigationDrawer/VNavigationDrawer.mjs +1 -1
  138. package/lib/components/VNavigationDrawer/VNavigationDrawer.mjs.map +1 -1
  139. package/lib/components/VOverlay/VOverlay.css +8 -0
  140. package/lib/components/VOverlay/VOverlay.mjs +16 -15
  141. package/lib/components/VOverlay/VOverlay.mjs.map +1 -1
  142. package/lib/components/VOverlay/VOverlay.sass +9 -0
  143. package/lib/components/VOverlay/_variables.scss +1 -0
  144. package/lib/components/VOverlay/positionStrategies.mjs +7 -3
  145. package/lib/components/VOverlay/positionStrategies.mjs.map +1 -1
  146. package/lib/components/VOverlay/scrollStrategies.mjs +9 -0
  147. package/lib/components/VOverlay/scrollStrategies.mjs.map +1 -1
  148. package/lib/components/VOverlay/useActivator.mjs +50 -14
  149. package/lib/components/VOverlay/useActivator.mjs.map +1 -1
  150. package/lib/components/VPagination/VPagination.mjs +10 -12
  151. package/lib/components/VPagination/VPagination.mjs.map +1 -1
  152. package/lib/components/VProgressLinear/VProgressLinear.css +1 -1
  153. package/lib/components/VRadio/VRadio.mjs +1 -2
  154. package/lib/components/VRadio/VRadio.mjs.map +1 -1
  155. package/lib/components/VRadioGroup/VRadioGroup.mjs +2 -2
  156. package/lib/components/VRadioGroup/VRadioGroup.mjs.map +1 -1
  157. package/lib/components/VRangeSlider/VRangeSlider.mjs +5 -2
  158. package/lib/components/VRangeSlider/VRangeSlider.mjs.map +1 -1
  159. package/lib/components/VRating/VRating.css +2 -2
  160. package/lib/components/VRating/VRating.mjs +13 -3
  161. package/lib/components/VRating/VRating.mjs.map +1 -1
  162. package/lib/components/VRating/VRating.sass +2 -2
  163. package/lib/components/VSelect/VSelect.mjs +70 -91
  164. package/lib/components/VSelect/VSelect.mjs.map +1 -1
  165. package/lib/components/VSelectionControl/VSelectionControl.mjs +2 -1
  166. package/lib/components/VSelectionControl/VSelectionControl.mjs.map +1 -1
  167. package/lib/components/VSelectionControlGroup/VSelectionControlGroup.mjs +2 -2
  168. package/lib/components/VSelectionControlGroup/VSelectionControlGroup.mjs.map +1 -1
  169. package/lib/components/VSlideGroup/VSlideGroup.css +0 -5
  170. package/lib/components/VSlideGroup/VSlideGroup.mjs +36 -14
  171. package/lib/components/VSlideGroup/VSlideGroup.mjs.map +1 -1
  172. package/lib/components/VSlideGroup/VSlideGroup.sass +0 -4
  173. package/lib/components/VSlideGroup/VSlideGroupItem.mjs +3 -1
  174. package/lib/components/VSlideGroup/VSlideGroupItem.mjs.map +1 -1
  175. package/lib/components/VSlider/VSlider.css +7 -2
  176. package/lib/components/VSlider/VSlider.sass +11 -5
  177. package/lib/components/VSlider/VSliderTrack.css +6 -6
  178. package/lib/components/VSlider/VSliderTrack.mjs +1 -1
  179. package/lib/components/VSlider/VSliderTrack.mjs.map +1 -1
  180. package/lib/components/VSlider/VSliderTrack.sass +7 -7
  181. package/lib/components/VSlider/_variables.scss +5 -2
  182. package/lib/components/VSnackbar/VSnackbar.css +14 -13
  183. package/lib/components/VSnackbar/VSnackbar.mjs +22 -10
  184. package/lib/components/VSnackbar/VSnackbar.mjs.map +1 -1
  185. package/lib/components/VSnackbar/VSnackbar.sass +15 -16
  186. package/lib/components/VSnackbar/_variables.scss +0 -4
  187. package/lib/components/VSwitch/VSwitch.mjs +8 -5
  188. package/lib/components/VSwitch/VSwitch.mjs.map +1 -1
  189. package/lib/components/VSystemBar/VSystemBar.css +0 -5
  190. package/lib/components/VSystemBar/VSystemBar.mjs +31 -14
  191. package/lib/components/VSystemBar/VSystemBar.mjs.map +1 -1
  192. package/lib/components/VSystemBar/VSystemBar.sass +0 -5
  193. package/lib/components/VSystemBar/_variables.scss +0 -3
  194. package/lib/components/VTabs/VTab.mjs +28 -32
  195. package/lib/components/VTabs/VTab.mjs.map +1 -1
  196. package/lib/components/VTabs/VTabs.css +6 -2
  197. package/lib/components/VTabs/VTabs.mjs +7 -8
  198. package/lib/components/VTabs/VTabs.mjs.map +1 -1
  199. package/lib/components/VTabs/VTabs.sass +6 -1
  200. package/lib/components/VTabs/shared.mjs +2 -0
  201. package/lib/components/VTabs/shared.mjs.map +1 -0
  202. package/lib/components/VTextField/VTextField.css +4 -4
  203. package/lib/components/VTextField/VTextField.mjs +5 -9
  204. package/lib/components/VTextField/VTextField.mjs.map +1 -1
  205. package/lib/components/VTextField/VTextField.sass +5 -5
  206. package/lib/components/VTextarea/VTextarea.css +7 -4
  207. package/lib/components/VTextarea/VTextarea.sass +9 -5
  208. package/lib/components/VTimeline/VTimeline.css +187 -48
  209. package/lib/components/VTimeline/VTimeline.mjs +27 -11
  210. package/lib/components/VTimeline/VTimeline.mjs.map +1 -1
  211. package/lib/components/VTimeline/VTimeline.sass +196 -51
  212. package/lib/components/VTimeline/VTimelineDivider.mjs +2 -1
  213. package/lib/components/VTimeline/VTimelineDivider.mjs.map +1 -1
  214. package/lib/components/VTimeline/_variables.scss +2 -1
  215. package/lib/components/VToolbar/VToolbar.css +8 -1
  216. package/lib/components/VToolbar/VToolbar.mjs +8 -11
  217. package/lib/components/VToolbar/VToolbar.mjs.map +1 -1
  218. package/lib/components/VToolbar/VToolbar.sass +2 -1
  219. package/lib/components/VToolbar/VToolbarItems.mjs +0 -1
  220. package/lib/components/VToolbar/VToolbarItems.mjs.map +1 -1
  221. package/lib/components/VToolbar/_variables.scss +13 -1
  222. package/lib/components/VWindow/VWindow.mjs +0 -8
  223. package/lib/components/VWindow/VWindow.mjs.map +1 -1
  224. package/lib/components/index.d.ts +9025 -8077
  225. package/lib/composables/defaults.mjs +2 -2
  226. package/lib/composables/defaults.mjs.map +1 -1
  227. package/lib/composables/form.mjs +18 -5
  228. package/lib/composables/form.mjs.map +1 -1
  229. package/lib/composables/forwardRef.mjs +10 -6
  230. package/lib/composables/forwardRef.mjs.map +1 -1
  231. package/lib/composables/group.mjs +14 -6
  232. package/lib/composables/group.mjs.map +1 -1
  233. package/lib/composables/index.mjs.map +1 -1
  234. package/lib/composables/items.mjs +56 -0
  235. package/lib/composables/items.mjs.map +1 -0
  236. package/lib/composables/layout.mjs +7 -3
  237. package/lib/composables/layout.mjs.map +1 -1
  238. package/lib/composables/loader.mjs.map +1 -1
  239. package/lib/composables/nested/nested.mjs +27 -14
  240. package/lib/composables/nested/nested.mjs.map +1 -1
  241. package/lib/composables/nested/openStrategies.mjs +63 -36
  242. package/lib/composables/nested/openStrategies.mjs.map +1 -1
  243. package/lib/composables/nested/selectStrategies.mjs +163 -122
  244. package/lib/composables/nested/selectStrategies.mjs.map +1 -1
  245. package/lib/composables/overlay.mjs +5 -1
  246. package/lib/composables/overlay.mjs.map +1 -1
  247. package/lib/composables/proxiedModel.mjs.map +1 -1
  248. package/lib/composables/resizeObserver.mjs +1 -9
  249. package/lib/composables/resizeObserver.mjs.map +1 -1
  250. package/lib/composables/router.mjs +17 -5
  251. package/lib/composables/router.mjs.map +1 -1
  252. package/lib/composables/selectLink.mjs +19 -0
  253. package/lib/composables/selectLink.mjs.map +1 -0
  254. package/lib/composables/stack.mjs +7 -4
  255. package/lib/composables/stack.mjs.map +1 -1
  256. package/lib/composables/validation.mjs +6 -3
  257. package/lib/composables/validation.mjs.map +1 -1
  258. package/lib/composables/variant.mjs +0 -3
  259. package/lib/composables/variant.mjs.map +1 -1
  260. package/lib/directives/ripple/index.mjs +15 -3
  261. package/lib/directives/ripple/index.mjs.map +1 -1
  262. package/lib/entry-bundler.mjs +1 -1
  263. package/lib/framework.mjs +12 -7
  264. package/lib/framework.mjs.map +1 -1
  265. package/lib/index.d.ts +18 -2
  266. package/lib/locale/ca.mjs +9 -9
  267. package/lib/locale/ca.mjs.map +1 -1
  268. package/lib/styles/generic/_colors.scss +0 -1
  269. package/lib/styles/main.css +400 -392
  270. package/lib/styles/settings/_utilities.scss +54 -26
  271. package/lib/styles/tools/_states.sass +2 -1
  272. package/lib/util/defineComponent.mjs +37 -6
  273. package/lib/util/defineComponent.mjs.map +1 -1
  274. package/lib/util/getCurrentInstance.mjs +1 -1
  275. package/lib/util/getCurrentInstance.mjs.map +1 -1
  276. package/lib/util/helpers.mjs.map +1 -1
  277. package/package.json +31 -29
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/VOverlay/VOverlay.tsx"],"names":["makeActivatorProps","useActivator","makePositionStrategyProps","usePositionStrategies","makeScrollStrategyProps","useScrollStrategies","makeThemeProps","provideTheme","makeTransitionProps","MaybeTransition","useBackButton","useBackgroundColor","useProxiedModel","useRtl","useTeleport","makeDimensionProps","useDimension","makeLazyProps","useLazy","useStack","useOverlay","ClickOutside","convertToUnit","genericComponent","getScrollParent","IN_BROWSER","standardEasing","useRender","computed","mergeProps","ref","Teleport","toHandlers","Transition","watch","Scrim","props","modelValue","color","rest","backgroundColorClasses","value","backgroundColorStyles","VOverlay","name","directives","inheritAttrs","absolute","Boolean","attach","String","Object","contained","contentClass","noClickAnimation","persistent","scrim","type","default","emits","e","afterLeave","setup","slots","attrs","emit","isActive","teleportTarget","themeClasses","rtlClasses","hasContent","onAfterLeave","scrimColor","activatorEl","activatorRef","activatorEvents","dimensionStyles","isTop","root","contentEl","contentStyles","updatePosition","onClickOutside","animateClick","closeConditional","val","window","addEventListener","onKeydown","removeEventListener","immediate","key","next","top","scrollParent","document","scrollingElement","scrollTop","animate","transformOrigin","transform","duration","easing","overlayZIndex","activator","activatorProps","zIndex","transition","handler","include"],"mappings":"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","sourcesContent":["// Styles\nimport './VOverlay.sass'\n\n// Composables\nimport { makeActivatorProps, useActivator } from './useActivator'\nimport { makePositionStrategyProps, usePositionStrategies } from './positionStrategies'\nimport { makeScrollStrategyProps, useScrollStrategies } from './scrollStrategies'\nimport { makeThemeProps, provideTheme } from '@/composables/theme'\nimport { makeTransitionProps, MaybeTransition } from '@/composables/transition'\nimport { useBackButton } from '@/composables/router'\nimport { useBackgroundColor } from '@/composables/color'\nimport { useProxiedModel } from '@/composables/proxiedModel'\nimport { useRtl } from '@/composables/rtl'\nimport { useTeleport } from '@/composables/teleport'\nimport { makeDimensionProps, useDimension } from '@/composables/dimensions'\nimport { makeLazyProps, useLazy } from '@/composables/lazy'\nimport { useStack } from '@/composables/stack'\nimport { useOverlay } from '@/composables/overlay'\n\n// Directives\nimport { ClickOutside } from '@/directives/click-outside'\n\n// Utilities\nimport {\n convertToUnit,\n genericComponent,\n getScrollParent,\n IN_BROWSER,\n standardEasing,\n useRender,\n} from '@/util'\nimport {\n computed,\n mergeProps,\n ref,\n Teleport,\n toHandlers,\n Transition,\n watch,\n} from 'vue'\n\n// Types\nimport type { PropType, Ref } from 'vue'\nimport type { MakeSlots } from '@/util'\nimport type { BackgroundColorData } from '@/composables/color'\n\ninterface ScrimProps {\n [key: string]: unknown\n modelValue: boolean\n color: BackgroundColorData\n}\nfunction Scrim (props: ScrimProps) {\n const { modelValue, color, ...rest } = props\n return (\n <Transition name=\"fade-transition\" appear>\n { props.modelValue && (\n <div\n class={[\n 'v-overlay__scrim',\n props.color.backgroundColorClasses.value,\n ]}\n style={ props.color.backgroundColorStyles.value }\n { ...rest }\n />\n )}\n </Transition>\n )\n}\n\nexport type OverlaySlots = MakeSlots<{\n default: [{ isActive: Ref<boolean> }]\n activator: [{ isActive: boolean, props: Record<string, any> }]\n}>\n\nexport const VOverlay = genericComponent<new () => {\n $slots: OverlaySlots\n}>()({\n name: 'VOverlay',\n\n directives: { ClickOutside },\n\n inheritAttrs: false,\n\n props: {\n absolute: Boolean,\n attach: [Boolean, String, Object] as PropType<boolean | string | Element>,\n contained: Boolean,\n contentClass: null,\n noClickAnimation: Boolean,\n modelValue: Boolean,\n persistent: Boolean,\n scrim: {\n type: [String, Boolean],\n default: true,\n },\n\n ...makeActivatorProps(),\n ...makeDimensionProps(),\n ...makePositionStrategyProps(),\n ...makeScrollStrategyProps(),\n ...makeThemeProps(),\n ...makeTransitionProps(),\n ...makeLazyProps(),\n },\n\n emits: {\n 'click:outside': (e: MouseEvent) => true,\n 'update:modelValue': (value: boolean) => true,\n afterLeave: () => true,\n },\n\n setup (props, { slots, attrs, emit }) {\n const isActive = useProxiedModel(props, 'modelValue')\n const { teleportTarget } = useTeleport(computed(() => props.attach || props.contained))\n const { themeClasses } = provideTheme(props)\n const { rtlClasses } = useRtl()\n const { hasContent, onAfterLeave } = useLazy(props, isActive)\n const scrimColor = useBackgroundColor(computed(() => {\n return typeof props.scrim === 'string' ? props.scrim : null\n }))\n const { activatorEl, activatorRef, activatorEvents } = useActivator(props, isActive)\n const { dimensionStyles } = useDimension(props)\n const { isTop } = useStack(isActive)\n\n const root = ref<HTMLElement>()\n const contentEl = ref<HTMLElement>()\n const { contentStyles, updatePosition } = usePositionStrategies(props, {\n contentEl,\n activatorEl,\n isActive,\n })\n useScrollStrategies(props, {\n root,\n contentEl,\n activatorEl,\n isActive,\n updatePosition,\n })\n\n function onClickOutside (e: MouseEvent) {\n emit('click:outside', e)\n\n if (!props.persistent) isActive.value = false\n else animateClick()\n }\n\n function closeConditional () {\n return isActive.value && isTop.value\n }\n\n IN_BROWSER && watch(isActive, val => {\n if (val) {\n window.addEventListener('keydown', onKeydown)\n } else {\n window.removeEventListener('keydown', onKeydown)\n }\n }, { immediate: true })\n\n function onKeydown (e: KeyboardEvent) {\n if (e.key === 'Escape' && isTop.value) {\n if (!props.persistent) {\n isActive.value = false\n } else animateClick()\n }\n }\n\n useBackButton(next => {\n if (isTop.value && isActive.value) {\n next(false)\n if (!props.persistent) isActive.value = false\n else animateClick()\n } else {\n next()\n }\n })\n\n const top = ref<number>()\n watch(() => isActive.value && (props.absolute || props.contained) && teleportTarget.value == null, val => {\n if (val) {\n const scrollParent = getScrollParent(root.value)\n if (scrollParent && scrollParent !== document.scrollingElement) {\n top.value = scrollParent.scrollTop\n }\n }\n })\n\n // Add a quick \"bounce\" animation to the content\n function animateClick () {\n if (props.noClickAnimation) return\n\n contentEl.value?.animate([\n { transformOrigin: 'center' },\n { transform: 'scale(1.03)' },\n { transformOrigin: 'center' },\n ], {\n duration: 150,\n easing: standardEasing,\n })\n }\n\n const { overlayZIndex } = useOverlay(isActive)\n\n useRender(() => (\n <>\n { slots.activator?.({\n isActive: isActive.value,\n props: mergeProps({\n ref: activatorRef,\n }, toHandlers(activatorEvents.value), props.activatorProps),\n }) }\n\n { IN_BROWSER && (\n <Teleport\n disabled={ !teleportTarget.value }\n to={ teleportTarget.value }\n >\n { hasContent.value && (\n <div\n class={[\n 'v-overlay',\n {\n 'v-overlay--absolute': props.absolute || props.contained,\n 'v-overlay--active': isActive.value,\n 'v-overlay--contained': props.contained,\n },\n themeClasses.value,\n rtlClasses.value,\n ]}\n style={{\n top: convertToUnit(top.value),\n zIndex: overlayZIndex.value,\n }}\n ref={ root }\n {...attrs}\n >\n <Scrim\n color={ scrimColor }\n modelValue={ isActive.value && !!props.scrim }\n />\n <MaybeTransition\n appear\n persisted\n transition={ props.transition }\n target={ activatorEl.value }\n onAfterLeave={() => { onAfterLeave(); emit('afterLeave') }}\n >\n <div\n ref={ contentEl }\n v-show={ isActive.value }\n v-click-outside={{ handler: onClickOutside, closeConditional, include: () => [activatorEl.value] }}\n class={[\n 'v-overlay__content',\n props.contentClass,\n ]}\n style={[\n dimensionStyles.value,\n contentStyles.value,\n ]}\n >\n { slots.default?.({ isActive }) }\n </div>\n </MaybeTransition>\n </div>\n )}\n </Teleport>\n ) }\n </>\n ))\n\n return {\n animateClick,\n contentEl,\n activatorEl,\n }\n },\n})\n\nexport type VOverlay = InstanceType<typeof VOverlay>\n"],"file":"VOverlay.mjs"}
1
+ {"version":3,"sources":["../../../src/components/VOverlay/VOverlay.tsx"],"names":["makeActivatorProps","useActivator","makePositionStrategyProps","usePositionStrategies","makeScrollStrategyProps","useScrollStrategies","makeThemeProps","provideTheme","makeTransitionProps","MaybeTransition","useBackButton","useBackgroundColor","useProxiedModel","useRtl","useTeleport","makeDimensionProps","useDimension","makeLazyProps","useLazy","useStack","ClickOutside","convertToUnit","genericComponent","getScrollParent","IN_BROWSER","standardEasing","useRender","computed","mergeProps","ref","Teleport","toHandlers","Transition","watch","Scrim","props","modelValue","color","rest","backgroundColorClasses","value","backgroundColorStyles","VOverlay","name","directives","inheritAttrs","absolute","Boolean","attach","String","Object","contained","contentClass","noClickAnimation","persistent","scrim","type","default","emits","e","afterLeave","setup","slots","attrs","emit","isActive","teleportTarget","themeClasses","rtlClasses","hasContent","onAfterLeave","scrimColor","isTop","activatorEl","activatorRef","activatorEvents","contentEvents","dimensionStyles","root","contentEl","contentStyles","updatePosition","onClickOutside","animateClick","closeConditional","val","window","addEventListener","onKeydown","removeEventListener","immediate","key","next","top","scrollParent","document","scrollingElement","scrollTop","animate","transformOrigin","transform","duration","easing","activator","activatorProps","transition","handler","include"],"mappings":"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","sourcesContent":["// Styles\nimport './VOverlay.sass'\n\n// Composables\nimport { makeActivatorProps, useActivator } from './useActivator'\nimport { makePositionStrategyProps, usePositionStrategies } from './positionStrategies'\nimport { makeScrollStrategyProps, useScrollStrategies } from './scrollStrategies'\nimport { makeThemeProps, provideTheme } from '@/composables/theme'\nimport { makeTransitionProps, MaybeTransition } from '@/composables/transition'\nimport { useBackButton } from '@/composables/router'\nimport { useBackgroundColor } from '@/composables/color'\nimport { useProxiedModel } from '@/composables/proxiedModel'\nimport { useRtl } from '@/composables/rtl'\nimport { useTeleport } from '@/composables/teleport'\nimport { makeDimensionProps, useDimension } from '@/composables/dimensions'\nimport { makeLazyProps, useLazy } from '@/composables/lazy'\nimport { useStack } from '@/composables/stack'\n\n// Directives\nimport { ClickOutside } from '@/directives/click-outside'\n\n// Utilities\nimport {\n convertToUnit,\n genericComponent,\n getScrollParent,\n IN_BROWSER,\n standardEasing,\n useRender,\n} from '@/util'\nimport {\n computed,\n mergeProps,\n ref,\n Teleport,\n toHandlers,\n Transition,\n watch,\n} from 'vue'\n\n// Types\nimport type { PropType, Ref } from 'vue'\nimport type { MakeSlots } from '@/util'\nimport type { BackgroundColorData } from '@/composables/color'\n\ninterface ScrimProps {\n [key: string]: unknown\n modelValue: boolean\n color: BackgroundColorData\n}\nfunction Scrim (props: ScrimProps) {\n const { modelValue, color, ...rest } = props\n return (\n <Transition name=\"fade-transition\" appear>\n { props.modelValue && (\n <div\n class={[\n 'v-overlay__scrim',\n props.color.backgroundColorClasses.value,\n ]}\n style={ props.color.backgroundColorStyles.value }\n { ...rest }\n />\n )}\n </Transition>\n )\n}\n\nexport type OverlaySlots = MakeSlots<{\n default: [{ isActive: Ref<boolean> }]\n activator: [{ isActive: boolean, props: Record<string, any> }]\n}>\n\nexport const VOverlay = genericComponent<new () => {\n $slots: OverlaySlots\n}>()({\n name: 'VOverlay',\n\n directives: { ClickOutside },\n\n inheritAttrs: false,\n\n props: {\n absolute: Boolean,\n attach: [Boolean, String, Object] as PropType<boolean | string | Element>,\n contained: Boolean,\n contentClass: null,\n noClickAnimation: Boolean,\n modelValue: Boolean,\n persistent: Boolean,\n scrim: {\n type: [String, Boolean],\n default: true,\n },\n\n ...makeActivatorProps(),\n ...makeDimensionProps(),\n ...makePositionStrategyProps(),\n ...makeScrollStrategyProps(),\n ...makeThemeProps(),\n ...makeTransitionProps(),\n ...makeLazyProps(),\n },\n\n emits: {\n 'click:outside': (e: MouseEvent) => true,\n 'update:modelValue': (value: boolean) => true,\n afterLeave: () => true,\n },\n\n setup (props, { slots, attrs, emit }) {\n const isActive = useProxiedModel(props, 'modelValue')\n const { teleportTarget } = useTeleport(computed(() => props.attach || props.contained))\n const { themeClasses } = provideTheme(props)\n const { rtlClasses } = useRtl()\n const { hasContent, onAfterLeave } = useLazy(props, isActive)\n const scrimColor = useBackgroundColor(computed(() => {\n return typeof props.scrim === 'string' ? props.scrim : null\n }))\n const { isTop } = useStack(isActive)\n const { activatorEl, activatorRef, activatorEvents, contentEvents } = useActivator(props, { isActive, isTop })\n const { dimensionStyles } = useDimension(props)\n\n const root = ref<HTMLElement>()\n const contentEl = ref<HTMLElement>()\n const { contentStyles, updatePosition } = usePositionStrategies(props, {\n contentEl,\n activatorEl,\n isActive,\n })\n useScrollStrategies(props, {\n root,\n contentEl,\n activatorEl,\n isActive,\n updatePosition,\n })\n\n function onClickOutside (e: MouseEvent) {\n emit('click:outside', e)\n\n if (!props.persistent) isActive.value = false\n else animateClick()\n }\n\n function closeConditional () {\n return isActive.value && isTop.value\n }\n\n IN_BROWSER && watch(isActive, val => {\n if (val) {\n window.addEventListener('keydown', onKeydown)\n } else {\n window.removeEventListener('keydown', onKeydown)\n }\n }, { immediate: true })\n\n function onKeydown (e: KeyboardEvent) {\n if (e.key === 'Escape' && isTop.value) {\n if (!props.persistent) {\n isActive.value = false\n } else animateClick()\n }\n }\n\n useBackButton(next => {\n if (isTop.value && isActive.value) {\n next(false)\n if (!props.persistent) isActive.value = false\n else animateClick()\n } else {\n next()\n }\n })\n\n const top = ref<number>()\n watch(() => isActive.value && (props.absolute || props.contained) && teleportTarget.value == null, val => {\n if (val) {\n const scrollParent = getScrollParent(root.value)\n if (scrollParent && scrollParent !== document.scrollingElement) {\n top.value = scrollParent.scrollTop\n }\n }\n })\n\n // Add a quick \"bounce\" animation to the content\n function animateClick () {\n if (props.noClickAnimation) return\n\n contentEl.value?.animate([\n { transformOrigin: 'center' },\n { transform: 'scale(1.03)' },\n { transformOrigin: 'center' },\n ], {\n duration: 150,\n easing: standardEasing,\n })\n }\n\n useRender(() => (\n <>\n { slots.activator?.({\n isActive: isActive.value,\n props: mergeProps({\n ref: activatorRef,\n }, toHandlers(activatorEvents.value), props.activatorProps),\n }) }\n\n { IN_BROWSER && (\n <Teleport\n disabled={ !teleportTarget.value }\n to={ teleportTarget.value }\n >\n { hasContent.value && (\n <div\n class={[\n 'v-overlay',\n {\n 'v-overlay--absolute': props.absolute || props.contained,\n 'v-overlay--active': isActive.value,\n 'v-overlay--contained': props.contained,\n },\n themeClasses.value,\n rtlClasses.value,\n ]}\n style={{\n top: convertToUnit(top.value),\n }}\n ref={ root }\n {...attrs}\n >\n <Scrim\n color={ scrimColor }\n modelValue={ isActive.value && !!props.scrim }\n />\n <MaybeTransition\n appear\n persisted\n transition={ props.transition }\n target={ activatorEl.value }\n onAfterLeave={() => { onAfterLeave(); emit('afterLeave') }}\n >\n <div\n ref={ contentEl }\n v-show={ isActive.value }\n v-click-outside={{ handler: onClickOutside, closeConditional, include: () => [activatorEl.value] }}\n class={[\n 'v-overlay__content',\n props.contentClass,\n ]}\n style={[\n dimensionStyles.value,\n contentStyles.value,\n ]}\n { ...toHandlers(contentEvents.value) }\n >\n { slots.default?.({ isActive }) }\n </div>\n </MaybeTransition>\n </div>\n )}\n </Teleport>\n ) }\n </>\n ))\n\n return {\n animateClick,\n contentEl,\n activatorEl,\n isTop,\n updatePosition,\n }\n },\n})\n\nexport type VOverlay = InstanceType<typeof VOverlay>\n"],"file":"VOverlay.mjs"}
@@ -1,4 +1,5 @@
1
1
  @forward './variables'
2
+ @use 'sass:selector'
2
3
  @use './variables' as *
3
4
 
4
5
  // Block
@@ -14,6 +15,13 @@
14
15
  padding-inline-end: var(--v-scrollbar-offset)
15
16
  overflow-y: hidden !important
16
17
 
18
+ @at-root #{selector.append(html, &)}
19
+ position: fixed
20
+ top: var(--v-body-scroll-y)
21
+ left: var(--v-body-scroll-x)
22
+ width: 100%
23
+ height: 100%
24
+
17
25
  .v-overlay
18
26
  border-radius: inherit
19
27
  display: flex
@@ -23,6 +31,7 @@
23
31
  top: 0
24
32
  bottom: 0
25
33
  right: 0
34
+ z-index: $overlay-z-index
26
35
 
27
36
  // Element
28
37
  .v-overlay__content
@@ -1,3 +1,4 @@
1
1
  // Defaults
2
2
  $overlay-opacity: 32%;
3
3
  $overlay-scrim-background: rgb(var(--v-theme-on-surface)) !default;
4
+ $overlay-z-index: 2000;
@@ -114,6 +114,8 @@ function connectedPositionStrategy(data, props, contentStyles) {
114
114
 
115
115
 
116
116
  function updatePosition() {
117
+ var _props$maxWidth;
118
+
117
119
  observe = false;
118
120
  requestAnimationFrame(() => {
119
121
  requestAnimationFrame(() => observe = true);
@@ -154,13 +156,15 @@ function connectedPositionStrategy(data, props, contentStyles) {
154
156
  el.scrollTo(...position);
155
157
  });
156
158
  }
157
- const contentHeight = Math.min(configuredMaxHeight.value, contentBox.height);
159
+ const contentHeight = Math.min(configuredMaxHeight.value, contentBox.height); // Regard undefined maxWidth as maximally occupying whole remaining space by default
160
+
161
+ const maxFreeSpaceWidth = props.maxWidth === undefined ? Number.MAX_VALUE : parseInt((_props$maxWidth = props.maxWidth) != null ? _props$maxWidth : 0, 10);
158
162
  const viewportMargin = 12;
159
163
  const freeSpace = {
160
164
  top: targetBox.top - viewportMargin,
161
165
  bottom: viewportHeight - targetBox.bottom - viewportMargin,
162
- left: targetBox.left - viewportMargin,
163
- right: viewportWidth - targetBox.right - viewportMargin
166
+ left: Math.min(targetBox.left - viewportMargin, maxFreeSpaceWidth),
167
+ right: Math.min(viewportWidth - targetBox.right - viewportMargin, maxFreeSpaceWidth)
164
168
  };
165
169
  const fitsY = preferredAnchor.value.side === 'bottom' && contentHeight <= freeSpace.bottom || preferredAnchor.value.side === 'top' && contentHeight <= freeSpace.top;
166
170
  const anchor = fitsY ? preferredAnchor.value : preferredAnchor.value.side === 'bottom' && freeSpace.top > freeSpace.bottom || preferredAnchor.value.side === 'top' && freeSpace.bottom > freeSpace.top ? oppositeAnchor(preferredAnchor.value) : preferredAnchor.value;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/VOverlay/positionStrategies.ts"],"names":["computed","effectScope","nextTick","onScopeDispose","ref","watch","watchEffect","convertToUnit","getScrollParent","IN_BROWSER","isFixedPosition","nullifyTransforms","propsFactory","oppositeAnchor","parseAnchor","physicalAnchor","anchorToPoint","getOffset","Box","positionStrategies","static","staticPositionStrategy","connected","connectedPositionStrategy","makePositionStrategyProps","positionStrategy","type","String","Function","default","validator","val","anchor","origin","offset","Number","usePositionStrategies","props","data","contentStyles","updatePosition","scope","stop","value","undefined","isActive","run","window","addEventListener","onResize","passive","removeEventListener","e","activatorFixed","activatorEl","Object","assign","position","preferredAnchor","preferredOrigin","doesOverlap","side","configuredMaxHeight","parseFloat","maxHeight","isNaN","Infinity","configuredMinWidth","minWidth","observe","observer","ResizeObserver","contentEl","disconnect","requestAnimationFrame","targetBox","getBoundingClientRect","x","y","width","height","scrollParent","viewportWidth","clientWidth","viewportHeight","Math","min","clientHeight","innerHeight","contentBox","scrollables","Map","querySelectorAll","forEach","el","scrollLeft","scrollTop","set","initialMaxWidth","style","maxWidth","initialMaxHeight","removeProperty","left","top","scrollTo","contentHeight","viewportMargin","freeSpace","bottom","right","fitsY","canFill","includes","max","floor","targetPoint","contentPoint","round","transformOrigin","immediate"],"mappings":"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","sourcesContent":["// Utilities\nimport { computed, effectScope, nextTick, onScopeDispose, ref, watch, watchEffect } from 'vue'\nimport { convertToUnit, getScrollParent, IN_BROWSER, isFixedPosition, nullifyTransforms, propsFactory } from '@/util'\nimport { oppositeAnchor, parseAnchor, physicalAnchor } from './util/anchor'\nimport { anchorToPoint, getOffset } from './util/point'\n\n// Types\nimport type { EffectScope, PropType, Ref } from 'vue'\nimport type { Anchor } from './util/anchor'\nimport { Box } from '@/util/box'\n\nexport interface PositionStrategyData {\n contentEl: Ref<HTMLElement | undefined>\n activatorEl: Ref<HTMLElement | undefined>\n isActive: Ref<boolean>\n}\n\nconst positionStrategies = {\n static: staticPositionStrategy, // specific viewport position, usually centered\n connected: connectedPositionStrategy, // connected to a certain element\n}\n\nexport interface StrategyProps {\n positionStrategy: keyof typeof positionStrategies | (\n (\n data: PositionStrategyData,\n props: StrategyProps,\n contentStyles: Ref<Record<string, string>>\n ) => undefined | { updatePosition: (e: Event) => void }\n )\n anchor: Anchor\n origin: Anchor | 'auto' | 'overlap'\n offset?: number | string\n maxHeight?: number | string\n maxWidth?: number | string\n minHeight?: number | string\n minWidth?: number | string\n}\n\nexport const makePositionStrategyProps = propsFactory({\n positionStrategy: {\n type: [String, Function] as PropType<StrategyProps['positionStrategy']>,\n default: 'static',\n validator: (val: any) => typeof val === 'function' || val in positionStrategies,\n },\n anchor: {\n type: String as PropType<StrategyProps['anchor']>,\n default: 'bottom',\n },\n origin: {\n type: String as PropType<StrategyProps['origin']>,\n default: 'auto',\n },\n offset: [Number, String],\n})\n\nexport function usePositionStrategies (\n props: StrategyProps,\n data: PositionStrategyData\n) {\n const contentStyles = ref({})\n const updatePosition = ref<(e: Event) => void>()\n\n let scope: EffectScope | undefined\n watchEffect(async () => {\n scope?.stop()\n updatePosition.value = undefined\n\n if (!(IN_BROWSER && data.isActive.value && props.positionStrategy)) return\n\n scope = effectScope()\n await nextTick()\n scope.run(() => {\n if (typeof props.positionStrategy === 'function') {\n updatePosition.value = props.positionStrategy(data, props, contentStyles)?.updatePosition\n } else {\n updatePosition.value = positionStrategies[props.positionStrategy](data, props, contentStyles)?.updatePosition\n }\n })\n })\n\n IN_BROWSER && window.addEventListener('resize', onResize, { passive: true })\n\n onScopeDispose(() => {\n IN_BROWSER && window.removeEventListener('resize', onResize)\n updatePosition.value = undefined\n scope?.stop()\n })\n\n function onResize (e: Event) {\n updatePosition.value?.(e)\n }\n\n return {\n contentStyles,\n updatePosition,\n }\n}\n\nfunction staticPositionStrategy () {\n // TODO\n}\n\nfunction connectedPositionStrategy (data: PositionStrategyData, props: StrategyProps, contentStyles: Ref<Record<string, string>>) {\n const activatorFixed = isFixedPosition(data.activatorEl.value)\n if (activatorFixed) {\n Object.assign(contentStyles.value, {\n position: 'fixed',\n })\n }\n\n const preferredAnchor = computed(() => parseAnchor(props.anchor))\n const preferredOrigin = computed(() =>\n props.origin === 'overlap' ? preferredAnchor.value\n : props.origin === 'auto' ? oppositeAnchor(preferredAnchor.value)\n : parseAnchor(props.origin)\n )\n const doesOverlap = computed(() => {\n return preferredAnchor.value.side === preferredOrigin.value.side\n })\n\n const configuredMaxHeight = computed(() => {\n const val = parseFloat(props.maxHeight!)\n return isNaN(val) ? Infinity : val\n })\n\n const configuredMinWidth = computed(() => {\n const val = parseFloat(props.minWidth!)\n return isNaN(val) ? Infinity : val\n })\n\n let observe = false\n if (IN_BROWSER) {\n const observer = new ResizeObserver(() => {\n if (observe) updatePosition()\n })\n observer.observe(data.activatorEl.value!)\n observer.observe(data.contentEl.value!)\n\n onScopeDispose(() => {\n observer.disconnect()\n })\n }\n\n // eslint-disable-next-line max-statements\n function updatePosition () {\n observe = false\n requestAnimationFrame(() => {\n requestAnimationFrame(() => observe = true)\n })\n\n const targetBox = data.activatorEl.value!.getBoundingClientRect()\n // TODO: offset shouldn't affect width\n if (props.offset) {\n targetBox.x -= +props.offset\n targetBox.y -= +props.offset\n targetBox.width += +props.offset * 2\n targetBox.height += +props.offset * 2\n }\n\n const scrollParent = getScrollParent(data.contentEl.value)\n const viewportWidth = scrollParent.clientWidth\n const viewportHeight = Math.min(scrollParent.clientHeight, window.innerHeight)\n\n let contentBox\n {\n const scrollables = new Map<Element, [number, number]>()\n data.contentEl.value!.querySelectorAll('*').forEach(el => {\n const x = el.scrollLeft\n const y = el.scrollTop\n if (x || y) {\n scrollables.set(el, [x, y])\n }\n })\n\n const initialMaxWidth = data.contentEl.value!.style.maxWidth\n const initialMaxHeight = data.contentEl.value!.style.maxHeight\n data.contentEl.value!.style.removeProperty('max-width')\n data.contentEl.value!.style.removeProperty('max-height')\n\n contentBox = nullifyTransforms(data.contentEl.value!)\n contentBox.x -= parseFloat(data.contentEl.value!.style.left) || 0\n contentBox.y -= parseFloat(data.contentEl.value!.style.top) || 0\n\n data.contentEl.value!.style.maxWidth = initialMaxWidth\n data.contentEl.value!.style.maxHeight = initialMaxHeight\n scrollables.forEach((position, el) => {\n el.scrollTo(...position)\n })\n }\n\n const contentHeight = Math.min(configuredMaxHeight.value, contentBox.height)\n\n const viewportMargin = 12\n const freeSpace = {\n top: targetBox.top - viewportMargin,\n bottom: viewportHeight - targetBox.bottom - viewportMargin,\n left: targetBox.left - viewportMargin,\n right: viewportWidth - targetBox.right - viewportMargin,\n }\n\n const fitsY = (preferredAnchor.value.side === 'bottom' && contentHeight <= freeSpace.bottom) ||\n (preferredAnchor.value.side === 'top' && contentHeight <= freeSpace.top)\n\n const anchor = fitsY ? preferredAnchor.value\n : (preferredAnchor.value.side === 'bottom' && freeSpace.top > freeSpace.bottom) ||\n (preferredAnchor.value.side === 'top' && freeSpace.bottom > freeSpace.top) ? oppositeAnchor(preferredAnchor.value)\n : preferredAnchor.value\n const origin = fitsY ? preferredOrigin.value : oppositeAnchor(anchor)\n\n const canFill = doesOverlap.value || ['center', 'top', 'bottom'].includes(anchor.side)\n\n const maxWidth = canFill ? Math.min(viewportWidth, Math.max(targetBox.width, viewportWidth - viewportMargin * 2))\n : anchor.side === 'end' ? freeSpace.right\n : anchor.side === 'start' ? freeSpace.left\n : null\n const minWidth = Math.min(configuredMinWidth.value, maxWidth!, targetBox.width)\n const maxHeight = fitsY ? configuredMaxHeight.value : Math.min(\n configuredMaxHeight.value,\n Math.floor(anchor.side === 'top' ? freeSpace.top : freeSpace.bottom)\n )\n\n const targetPoint = anchorToPoint(anchor, targetBox)\n const contentPoint = anchorToPoint(origin, new Box({\n ...contentBox,\n height: Math.min(contentHeight, maxHeight),\n }))\n\n const { x, y } = getOffset(targetPoint, contentPoint)\n\n Object.assign(contentStyles.value, {\n '--v-overlay-anchor-origin': physicalAnchor(anchor, data.activatorEl.value!),\n top: convertToUnit(Math.round(y)),\n left: convertToUnit(Math.round(x)), // TODO: right for origin=\"end\", rtl\n transformOrigin: physicalAnchor(origin, data.activatorEl.value!),\n minWidth: convertToUnit(minWidth),\n maxWidth: convertToUnit(maxWidth),\n maxHeight: convertToUnit(maxHeight),\n })\n }\n\n watch(\n () => [preferredAnchor.value, preferredOrigin.value, props.offset],\n () => updatePosition(),\n { immediate: !activatorFixed }\n )\n\n if (activatorFixed) nextTick(() => updatePosition())\n requestAnimationFrame(() => {\n if (contentStyles.value.maxHeight) updatePosition()\n })\n\n return { updatePosition }\n}\n"],"file":"positionStrategies.mjs"}
1
+ {"version":3,"sources":["../../../src/components/VOverlay/positionStrategies.ts"],"names":["computed","effectScope","nextTick","onScopeDispose","ref","watch","watchEffect","convertToUnit","getScrollParent","IN_BROWSER","isFixedPosition","nullifyTransforms","propsFactory","oppositeAnchor","parseAnchor","physicalAnchor","anchorToPoint","getOffset","Box","positionStrategies","static","staticPositionStrategy","connected","connectedPositionStrategy","makePositionStrategyProps","positionStrategy","type","String","Function","default","validator","val","anchor","origin","offset","Number","usePositionStrategies","props","data","contentStyles","updatePosition","scope","stop","value","undefined","isActive","run","window","addEventListener","onResize","passive","removeEventListener","e","activatorFixed","activatorEl","Object","assign","position","preferredAnchor","preferredOrigin","doesOverlap","side","configuredMaxHeight","parseFloat","maxHeight","isNaN","Infinity","configuredMinWidth","minWidth","observe","observer","ResizeObserver","contentEl","disconnect","requestAnimationFrame","targetBox","getBoundingClientRect","x","y","width","height","scrollParent","viewportWidth","clientWidth","viewportHeight","Math","min","clientHeight","innerHeight","contentBox","scrollables","Map","querySelectorAll","forEach","el","scrollLeft","scrollTop","set","initialMaxWidth","style","maxWidth","initialMaxHeight","removeProperty","left","top","scrollTo","contentHeight","maxFreeSpaceWidth","MAX_VALUE","parseInt","viewportMargin","freeSpace","bottom","right","fitsY","canFill","includes","max","floor","targetPoint","contentPoint","round","transformOrigin","immediate"],"mappings":"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","sourcesContent":["// Utilities\nimport { computed, effectScope, nextTick, onScopeDispose, ref, watch, watchEffect } from 'vue'\nimport { convertToUnit, getScrollParent, IN_BROWSER, isFixedPosition, nullifyTransforms, propsFactory } from '@/util'\nimport { oppositeAnchor, parseAnchor, physicalAnchor } from './util/anchor'\nimport { anchorToPoint, getOffset } from './util/point'\n\n// Types\nimport type { EffectScope, PropType, Ref } from 'vue'\nimport type { Anchor } from './util/anchor'\nimport { Box } from '@/util/box'\n\nexport interface PositionStrategyData {\n contentEl: Ref<HTMLElement | undefined>\n activatorEl: Ref<HTMLElement | undefined>\n isActive: Ref<boolean>\n}\n\nconst positionStrategies = {\n static: staticPositionStrategy, // specific viewport position, usually centered\n connected: connectedPositionStrategy, // connected to a certain element\n}\n\nexport interface StrategyProps {\n positionStrategy: keyof typeof positionStrategies | (\n (\n data: PositionStrategyData,\n props: StrategyProps,\n contentStyles: Ref<Record<string, string>>\n ) => undefined | { updatePosition: (e: Event) => void }\n )\n anchor: Anchor\n origin: Anchor | 'auto' | 'overlap'\n offset?: number | string\n maxHeight?: number | string\n maxWidth?: number | string\n minHeight?: number | string\n minWidth?: number | string\n}\n\nexport const makePositionStrategyProps = propsFactory({\n positionStrategy: {\n type: [String, Function] as PropType<StrategyProps['positionStrategy']>,\n default: 'static',\n validator: (val: any) => typeof val === 'function' || val in positionStrategies,\n },\n anchor: {\n type: String as PropType<StrategyProps['anchor']>,\n default: 'bottom',\n },\n origin: {\n type: String as PropType<StrategyProps['origin']>,\n default: 'auto',\n },\n offset: [Number, String],\n})\n\nexport function usePositionStrategies (\n props: StrategyProps,\n data: PositionStrategyData\n) {\n const contentStyles = ref({})\n const updatePosition = ref<(e: Event) => void>()\n\n let scope: EffectScope | undefined\n watchEffect(async () => {\n scope?.stop()\n updatePosition.value = undefined\n\n if (!(IN_BROWSER && data.isActive.value && props.positionStrategy)) return\n\n scope = effectScope()\n await nextTick()\n scope.run(() => {\n if (typeof props.positionStrategy === 'function') {\n updatePosition.value = props.positionStrategy(data, props, contentStyles)?.updatePosition\n } else {\n updatePosition.value = positionStrategies[props.positionStrategy](data, props, contentStyles)?.updatePosition\n }\n })\n })\n\n IN_BROWSER && window.addEventListener('resize', onResize, { passive: true })\n\n onScopeDispose(() => {\n IN_BROWSER && window.removeEventListener('resize', onResize)\n updatePosition.value = undefined\n scope?.stop()\n })\n\n function onResize (e: Event) {\n updatePosition.value?.(e)\n }\n\n return {\n contentStyles,\n updatePosition,\n }\n}\n\nfunction staticPositionStrategy () {\n // TODO\n}\n\nfunction connectedPositionStrategy (data: PositionStrategyData, props: StrategyProps, contentStyles: Ref<Record<string, string>>) {\n const activatorFixed = isFixedPosition(data.activatorEl.value)\n if (activatorFixed) {\n Object.assign(contentStyles.value, {\n position: 'fixed',\n })\n }\n\n const preferredAnchor = computed(() => parseAnchor(props.anchor))\n const preferredOrigin = computed(() =>\n props.origin === 'overlap' ? preferredAnchor.value\n : props.origin === 'auto' ? oppositeAnchor(preferredAnchor.value)\n : parseAnchor(props.origin)\n )\n const doesOverlap = computed(() => {\n return preferredAnchor.value.side === preferredOrigin.value.side\n })\n\n const configuredMaxHeight = computed(() => {\n const val = parseFloat(props.maxHeight!)\n return isNaN(val) ? Infinity : val\n })\n\n const configuredMinWidth = computed(() => {\n const val = parseFloat(props.minWidth!)\n return isNaN(val) ? Infinity : val\n })\n\n let observe = false\n if (IN_BROWSER) {\n const observer = new ResizeObserver(() => {\n if (observe) updatePosition()\n })\n observer.observe(data.activatorEl.value!)\n observer.observe(data.contentEl.value!)\n\n onScopeDispose(() => {\n observer.disconnect()\n })\n }\n\n // eslint-disable-next-line max-statements\n function updatePosition () {\n observe = false\n requestAnimationFrame(() => {\n requestAnimationFrame(() => observe = true)\n })\n\n const targetBox = data.activatorEl.value!.getBoundingClientRect()\n // TODO: offset shouldn't affect width\n if (props.offset) {\n targetBox.x -= +props.offset\n targetBox.y -= +props.offset\n targetBox.width += +props.offset * 2\n targetBox.height += +props.offset * 2\n }\n\n const scrollParent = getScrollParent(data.contentEl.value)\n const viewportWidth = scrollParent.clientWidth\n const viewportHeight = Math.min(scrollParent.clientHeight, window.innerHeight)\n\n let contentBox\n {\n const scrollables = new Map<Element, [number, number]>()\n data.contentEl.value!.querySelectorAll('*').forEach(el => {\n const x = el.scrollLeft\n const y = el.scrollTop\n if (x || y) {\n scrollables.set(el, [x, y])\n }\n })\n\n const initialMaxWidth = data.contentEl.value!.style.maxWidth\n const initialMaxHeight = data.contentEl.value!.style.maxHeight\n data.contentEl.value!.style.removeProperty('max-width')\n data.contentEl.value!.style.removeProperty('max-height')\n\n contentBox = nullifyTransforms(data.contentEl.value!)\n contentBox.x -= parseFloat(data.contentEl.value!.style.left) || 0\n contentBox.y -= parseFloat(data.contentEl.value!.style.top) || 0\n\n data.contentEl.value!.style.maxWidth = initialMaxWidth\n data.contentEl.value!.style.maxHeight = initialMaxHeight\n scrollables.forEach((position, el) => {\n el.scrollTo(...position)\n })\n }\n\n const contentHeight = Math.min(configuredMaxHeight.value, contentBox.height)\n\n // Regard undefined maxWidth as maximally occupying whole remaining space by default\n const maxFreeSpaceWidth = props.maxWidth === undefined ? Number.MAX_VALUE : parseInt(props.maxWidth ?? 0, 10)\n\n const viewportMargin = 12\n const freeSpace = {\n top: targetBox.top - viewportMargin,\n bottom: viewportHeight - targetBox.bottom - viewportMargin,\n left: Math.min(targetBox.left - viewportMargin, maxFreeSpaceWidth),\n right: Math.min(viewportWidth - targetBox.right - viewportMargin, maxFreeSpaceWidth),\n }\n\n const fitsY = (preferredAnchor.value.side === 'bottom' && contentHeight <= freeSpace.bottom) ||\n (preferredAnchor.value.side === 'top' && contentHeight <= freeSpace.top)\n\n const anchor = fitsY ? preferredAnchor.value\n : (preferredAnchor.value.side === 'bottom' && freeSpace.top > freeSpace.bottom) ||\n (preferredAnchor.value.side === 'top' && freeSpace.bottom > freeSpace.top) ? oppositeAnchor(preferredAnchor.value)\n : preferredAnchor.value\n const origin = fitsY ? preferredOrigin.value : oppositeAnchor(anchor)\n\n const canFill = doesOverlap.value || ['center', 'top', 'bottom'].includes(anchor.side)\n\n const maxWidth = canFill ? Math.min(viewportWidth, Math.max(targetBox.width, viewportWidth - viewportMargin * 2))\n : anchor.side === 'end' ? freeSpace.right\n : anchor.side === 'start' ? freeSpace.left\n : null\n const minWidth = Math.min(configuredMinWidth.value, maxWidth!, targetBox.width)\n const maxHeight = fitsY ? configuredMaxHeight.value : Math.min(\n configuredMaxHeight.value,\n Math.floor(anchor.side === 'top' ? freeSpace.top : freeSpace.bottom)\n )\n\n const targetPoint = anchorToPoint(anchor, targetBox)\n const contentPoint = anchorToPoint(origin, new Box({\n ...contentBox,\n height: Math.min(contentHeight, maxHeight),\n }))\n\n const { x, y } = getOffset(targetPoint, contentPoint)\n\n Object.assign(contentStyles.value, {\n '--v-overlay-anchor-origin': physicalAnchor(anchor, data.activatorEl.value!),\n top: convertToUnit(Math.round(y)),\n left: convertToUnit(Math.round(x)), // TODO: right for origin=\"end\", rtl\n transformOrigin: physicalAnchor(origin, data.activatorEl.value!),\n minWidth: convertToUnit(minWidth),\n maxWidth: convertToUnit(maxWidth),\n maxHeight: convertToUnit(maxHeight),\n })\n }\n\n watch(\n () => [preferredAnchor.value, preferredOrigin.value, props.offset],\n () => updatePosition(),\n { immediate: !activatorFixed }\n )\n\n if (activatorFixed) nextTick(() => updatePosition())\n requestAnimationFrame(() => {\n if (contentStyles.value.maxHeight) updatePosition()\n })\n\n return { updatePosition }\n}\n"],"file":"positionStrategies.mjs"}
@@ -4,6 +4,7 @@ import { effectScope, nextTick, onScopeDispose, watchEffect } from 'vue';
4
4
  import { requestNewFrame } from "./requestNewFrame.mjs"; // Types
5
5
 
6
6
  const scrollStrategies = {
7
+ none: null,
7
8
  close: closeScrollStrategy,
8
9
  block: blockScrollStrategy,
9
10
  reposition: repositionScrollStrategy
@@ -60,13 +61,21 @@ function blockScrollStrategy(data) {
60
61
  }
61
62
 
62
63
  scrollElements.forEach((el, i) => {
64
+ el.style.setProperty('--v-body-scroll-x', convertToUnit(-el.scrollLeft));
65
+ el.style.setProperty('--v-body-scroll-y', convertToUnit(-el.scrollTop));
63
66
  el.style.setProperty('--v-scrollbar-offset', convertToUnit(scrollbarWidth));
64
67
  el.classList.add('v-overlay-scroll-blocked');
65
68
  });
66
69
  onScopeDispose(() => {
67
70
  scrollElements.forEach((el, i) => {
71
+ const x = parseFloat(el.style.getPropertyValue('--v-body-scroll-x'));
72
+ const y = parseFloat(el.style.getPropertyValue('--v-body-scroll-y'));
73
+ el.style.removeProperty('--v-body-scroll-x');
74
+ el.style.removeProperty('--v-body-scroll-y');
68
75
  el.style.removeProperty('--v-scrollbar-offset');
69
76
  el.classList.remove('v-overlay-scroll-blocked');
77
+ el.scrollLeft = -x;
78
+ el.scrollTop = -y;
70
79
  });
71
80
 
72
81
  if (scrollableParent) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/VOverlay/scrollStrategies.ts"],"names":["convertToUnit","getScrollParents","hasScrollbar","IN_BROWSER","propsFactory","effectScope","nextTick","onScopeDispose","watchEffect","requestNewFrame","scrollStrategies","close","closeScrollStrategy","block","blockScrollStrategy","reposition","repositionScrollStrategy","makeScrollStrategyProps","scrollStrategy","type","String","Function","default","validator","val","useScrollStrategies","props","data","scope","stop","isActive","value","run","onScroll","e","bindScroll","activatorEl","contentEl","scrollElements","Set","filter","el","classList","contains","scrollbarWidth","window","innerWidth","document","documentElement","offsetWidth","scrollableParent","root","offsetParent","add","forEach","i","style","setProperty","removeProperty","remove","slow","raf","update","start","performance","now","updatePosition","time","cancelAnimationFrame","requestAnimationFrame","addEventListener","passive","removeEventListener"],"mappings":"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","sourcesContent":["// Utilities\nimport { convertToUnit, getScrollParents, hasScrollbar, IN_BROWSER, propsFactory } from '@/util'\nimport { effectScope, nextTick, onScopeDispose, watchEffect } from 'vue'\nimport { requestNewFrame } from './requestNewFrame'\n\n// Types\nimport type { EffectScope, PropType, Ref } from 'vue'\n\nexport interface ScrollStrategyData {\n root: Ref<HTMLElement | undefined>\n contentEl: Ref<HTMLElement | undefined>\n activatorEl: Ref<HTMLElement | undefined>\n isActive: Ref<boolean>\n updatePosition: Ref<((e: Event) => void) | undefined>\n}\n\nconst scrollStrategies = {\n close: closeScrollStrategy,\n block: blockScrollStrategy,\n reposition: repositionScrollStrategy,\n}\n\ninterface StrategyProps {\n scrollStrategy: keyof typeof scrollStrategies | ((data: ScrollStrategyData) => void)\n}\n\nexport const makeScrollStrategyProps = propsFactory({\n scrollStrategy: {\n type: [String, Function] as PropType<StrategyProps['scrollStrategy']>,\n default: 'block',\n validator: (val: any) => typeof val === 'function' || val in scrollStrategies,\n },\n})\n\nexport function useScrollStrategies (\n props: StrategyProps,\n data: ScrollStrategyData\n) {\n if (!IN_BROWSER) return\n\n let scope: EffectScope | undefined\n watchEffect(async () => {\n scope?.stop()\n\n if (!(data.isActive.value && props.scrollStrategy)) return\n\n scope = effectScope()\n await nextTick()\n scope.run(() => {\n if (typeof props.scrollStrategy === 'function') {\n props.scrollStrategy(data)\n } else {\n scrollStrategies[props.scrollStrategy]?.(data)\n }\n })\n })\n}\n\nfunction closeScrollStrategy (data: ScrollStrategyData) {\n function onScroll (e: Event) {\n data.isActive.value = false\n }\n\n bindScroll(data.activatorEl.value ?? data.contentEl.value, onScroll)\n}\n\nfunction blockScrollStrategy (data: ScrollStrategyData) {\n const scrollElements = [...new Set([\n ...getScrollParents(data.activatorEl.value),\n ...getScrollParents(data.contentEl.value),\n ])].filter(el => !el.classList.contains('v-overlay-scroll-blocked'))\n const scrollbarWidth = window.innerWidth - document.documentElement.offsetWidth\n\n const scrollableParent = (el => hasScrollbar(el) && el)(data.root.value?.offsetParent || document.documentElement)\n if (scrollableParent) {\n data.root.value!.classList.add('v-overlay--scroll-blocked')\n }\n\n scrollElements.forEach((el, i) => {\n el.style.setProperty('--v-scrollbar-offset', convertToUnit(scrollbarWidth))\n el.classList.add('v-overlay-scroll-blocked')\n })\n\n onScopeDispose(() => {\n scrollElements.forEach((el, i) => {\n el.style.removeProperty('--v-scrollbar-offset')\n el.classList.remove('v-overlay-scroll-blocked')\n })\n if (scrollableParent) {\n data.root.value!.classList.remove('v-overlay--scroll-blocked')\n }\n })\n}\n\nfunction repositionScrollStrategy (data: ScrollStrategyData) {\n let slow = false\n let raf = -1\n\n function update (e: Event) {\n requestNewFrame(() => {\n const start = performance.now()\n data.updatePosition.value?.(e)\n const time = performance.now() - start\n slow = time / (1000 / 60) > 2\n })\n }\n\n bindScroll(data.activatorEl.value ?? data.contentEl.value, e => {\n if (slow) {\n // If the position calculation is slow,\n // defer updates until scrolling is finished.\n // Browsers usually fire one scroll event per frame so\n // we just wait until we've got two frames without an event\n cancelAnimationFrame(raf)\n raf = requestAnimationFrame(() => {\n raf = requestAnimationFrame(() => {\n update(e)\n })\n })\n } else {\n update(e)\n }\n })\n}\n\n/** @private */\nfunction bindScroll (el: HTMLElement | undefined, onScroll: (e: Event) => void) {\n const scrollElements = [document, ...getScrollParents(el)]\n scrollElements.forEach(el => {\n el.addEventListener('scroll', onScroll, { passive: true })\n })\n\n onScopeDispose(() => {\n scrollElements.forEach(el => {\n el.removeEventListener('scroll', onScroll)\n })\n })\n}\n"],"file":"scrollStrategies.mjs"}
1
+ {"version":3,"sources":["../../../src/components/VOverlay/scrollStrategies.ts"],"names":["convertToUnit","getScrollParents","hasScrollbar","IN_BROWSER","propsFactory","effectScope","nextTick","onScopeDispose","watchEffect","requestNewFrame","scrollStrategies","none","close","closeScrollStrategy","block","blockScrollStrategy","reposition","repositionScrollStrategy","makeScrollStrategyProps","scrollStrategy","type","String","Function","default","validator","val","useScrollStrategies","props","data","scope","stop","isActive","value","run","onScroll","e","bindScroll","activatorEl","contentEl","scrollElements","Set","filter","el","classList","contains","scrollbarWidth","window","innerWidth","document","documentElement","offsetWidth","scrollableParent","root","offsetParent","add","forEach","i","style","setProperty","scrollLeft","scrollTop","x","parseFloat","getPropertyValue","y","removeProperty","remove","slow","raf","update","start","performance","now","updatePosition","time","cancelAnimationFrame","requestAnimationFrame","addEventListener","passive","removeEventListener"],"mappings":"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","sourcesContent":["// Utilities\nimport { convertToUnit, getScrollParents, hasScrollbar, IN_BROWSER, propsFactory } from '@/util'\nimport { effectScope, nextTick, onScopeDispose, watchEffect } from 'vue'\nimport { requestNewFrame } from './requestNewFrame'\n\n// Types\nimport type { EffectScope, PropType, Ref } from 'vue'\n\nexport interface ScrollStrategyData {\n root: Ref<HTMLElement | undefined>\n contentEl: Ref<HTMLElement | undefined>\n activatorEl: Ref<HTMLElement | undefined>\n isActive: Ref<boolean>\n updatePosition: Ref<((e: Event) => void) | undefined>\n}\n\nconst scrollStrategies = {\n none: null,\n close: closeScrollStrategy,\n block: blockScrollStrategy,\n reposition: repositionScrollStrategy,\n}\n\ninterface StrategyProps {\n scrollStrategy: keyof typeof scrollStrategies | ((data: ScrollStrategyData) => void)\n}\n\nexport const makeScrollStrategyProps = propsFactory({\n scrollStrategy: {\n type: [String, Function] as PropType<StrategyProps['scrollStrategy']>,\n default: 'block',\n validator: (val: any) => typeof val === 'function' || val in scrollStrategies,\n },\n})\n\nexport function useScrollStrategies (\n props: StrategyProps,\n data: ScrollStrategyData\n) {\n if (!IN_BROWSER) return\n\n let scope: EffectScope | undefined\n watchEffect(async () => {\n scope?.stop()\n\n if (!(data.isActive.value && props.scrollStrategy)) return\n\n scope = effectScope()\n await nextTick()\n scope.run(() => {\n if (typeof props.scrollStrategy === 'function') {\n props.scrollStrategy(data)\n } else {\n scrollStrategies[props.scrollStrategy]?.(data)\n }\n })\n })\n}\n\nfunction closeScrollStrategy (data: ScrollStrategyData) {\n function onScroll (e: Event) {\n data.isActive.value = false\n }\n\n bindScroll(data.activatorEl.value ?? data.contentEl.value, onScroll)\n}\n\nfunction blockScrollStrategy (data: ScrollStrategyData) {\n const scrollElements = [...new Set([\n ...getScrollParents(data.activatorEl.value),\n ...getScrollParents(data.contentEl.value),\n ])].filter(el => !el.classList.contains('v-overlay-scroll-blocked'))\n const scrollbarWidth = window.innerWidth - document.documentElement.offsetWidth\n\n const scrollableParent = (el => hasScrollbar(el) && el)(data.root.value?.offsetParent || document.documentElement)\n if (scrollableParent) {\n data.root.value!.classList.add('v-overlay--scroll-blocked')\n }\n\n scrollElements.forEach((el, i) => {\n el.style.setProperty('--v-body-scroll-x', convertToUnit(-el.scrollLeft))\n el.style.setProperty('--v-body-scroll-y', convertToUnit(-el.scrollTop))\n el.style.setProperty('--v-scrollbar-offset', convertToUnit(scrollbarWidth))\n el.classList.add('v-overlay-scroll-blocked')\n })\n\n onScopeDispose(() => {\n scrollElements.forEach((el, i) => {\n const x = parseFloat(el.style.getPropertyValue('--v-body-scroll-x'))\n const y = parseFloat(el.style.getPropertyValue('--v-body-scroll-y'))\n\n el.style.removeProperty('--v-body-scroll-x')\n el.style.removeProperty('--v-body-scroll-y')\n el.style.removeProperty('--v-scrollbar-offset')\n el.classList.remove('v-overlay-scroll-blocked')\n\n el.scrollLeft = -x\n el.scrollTop = -y\n })\n if (scrollableParent) {\n data.root.value!.classList.remove('v-overlay--scroll-blocked')\n }\n })\n}\n\nfunction repositionScrollStrategy (data: ScrollStrategyData) {\n let slow = false\n let raf = -1\n\n function update (e: Event) {\n requestNewFrame(() => {\n const start = performance.now()\n data.updatePosition.value?.(e)\n const time = performance.now() - start\n slow = time / (1000 / 60) > 2\n })\n }\n\n bindScroll(data.activatorEl.value ?? data.contentEl.value, e => {\n if (slow) {\n // If the position calculation is slow,\n // defer updates until scrolling is finished.\n // Browsers usually fire one scroll event per frame so\n // we just wait until we've got two frames without an event\n cancelAnimationFrame(raf)\n raf = requestAnimationFrame(() => {\n raf = requestAnimationFrame(() => {\n update(e)\n })\n })\n } else {\n update(e)\n }\n })\n}\n\n/** @private */\nfunction bindScroll (el: HTMLElement | undefined, onScroll: (e: Event) => void) {\n const scrollElements = [document, ...getScrollParents(el)]\n scrollElements.forEach(el => {\n el.addEventListener('scroll', onScroll, { passive: true })\n })\n\n onScopeDispose(() => {\n scrollElements.forEach(el => {\n el.removeEventListener('scroll', onScroll)\n })\n })\n}\n"],"file":"scrollStrategies.mjs"}
@@ -1,7 +1,8 @@
1
1
  // Utilities
2
2
  import { getCurrentInstance, IN_BROWSER, isComponentInstance, propsFactory, SUPPORTS_FOCUS_VISIBLE } from "../../util/index.mjs";
3
3
  import { makeDelayProps, useDelay } from "../../composables/delay.mjs";
4
- import { computed, effectScope, nextTick, onScopeDispose, ref, watch, watchEffect } from 'vue'; // Types
4
+ import { VMenuSymbol } from "../VMenu/shared.mjs";
5
+ import { computed, effectScope, inject, nextTick, onScopeDispose, ref, watch, watchEffect } from 'vue'; // Types
5
6
 
6
7
  export const makeActivatorProps = propsFactory({
7
8
  activator: [String, Object],
@@ -18,9 +19,14 @@ export const makeActivatorProps = propsFactory({
18
19
  type: Boolean,
19
20
  default: undefined
20
21
  },
22
+ closeOnContentClick: Boolean,
21
23
  ...makeDelayProps()
22
24
  });
23
- export function useActivator(props, isActive) {
25
+ export function useActivator(props, _ref) {
26
+ let {
27
+ isActive,
28
+ isTop
29
+ } = _ref;
24
30
  const activatorEl = ref();
25
31
  let isHovered = false;
26
32
  let isFocused = false;
@@ -30,7 +36,7 @@ export function useActivator(props, isActive) {
30
36
  runOpenDelay,
31
37
  runCloseDelay
32
38
  } = useDelay(props, value => {
33
- if (value === (props.openOnHover && isHovered || openOnFocus.value && isFocused)) {
39
+ if (value === (props.openOnHover && isHovered || openOnFocus.value && isFocused) && !(props.openOnHover && isActive.value && !isTop.value)) {
34
40
  isActive.value = value;
35
41
  }
36
42
  });
@@ -81,6 +87,37 @@ export function useActivator(props, isActive) {
81
87
 
82
88
  return events;
83
89
  });
90
+ const contentEvents = computed(() => {
91
+ const events = {};
92
+
93
+ if (props.openOnHover) {
94
+ events.mouseenter = () => {
95
+ isHovered = true;
96
+ runOpenDelay();
97
+ };
98
+
99
+ events.mouseleave = () => {
100
+ isHovered = false;
101
+ runCloseDelay();
102
+ };
103
+ }
104
+
105
+ if (props.closeOnContentClick) {
106
+ const menu = inject(VMenuSymbol, null);
107
+
108
+ events.click = () => {
109
+ isActive.value = false;
110
+ menu == null ? void 0 : menu.closeParents();
111
+ };
112
+ }
113
+
114
+ return events;
115
+ });
116
+ watch(isTop, val => {
117
+ if (val && props.openOnHover && !isHovered) {
118
+ isActive.value = false;
119
+ }
120
+ });
84
121
  const activatorRef = ref();
85
122
  watchEffect(() => {
86
123
  if (!activatorRef.value) return;
@@ -89,14 +126,14 @@ export function useActivator(props, isActive) {
89
126
  activatorEl.value = isComponentInstance(activator) ? activator.$el : activator;
90
127
  });
91
128
  });
129
+ const vm = getCurrentInstance('useActivator');
92
130
  let scope;
93
131
  watch(() => !!props.activator, val => {
94
132
  if (val && IN_BROWSER) {
95
133
  scope = effectScope();
96
134
  scope.run(() => {
97
- _useActivator(props, {
135
+ _useActivator(props, vm, {
98
136
  activatorEl,
99
- activatorRef,
100
137
  activatorEvents
101
138
  });
102
139
  });
@@ -110,15 +147,16 @@ export function useActivator(props, isActive) {
110
147
  return {
111
148
  activatorEl,
112
149
  activatorRef,
113
- activatorEvents
150
+ activatorEvents,
151
+ contentEvents
114
152
  };
115
153
  }
116
154
 
117
- function _useActivator(props, _ref) {
155
+ function _useActivator(props, vm, _ref2) {
118
156
  let {
119
157
  activatorEl,
120
158
  activatorEvents
121
- } = _ref;
159
+ } = _ref2;
122
160
  watch(() => props.activator, (val, oldVal) => {
123
161
  if (oldVal && val !== oldVal) {
124
162
  const activator = getActivator(oldVal);
@@ -144,8 +182,8 @@ function _useActivator(props, _ref) {
144
182
  let _props = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : props.activatorProps;
145
183
 
146
184
  if (!el) return;
147
- Object.entries(activatorEvents.value).forEach(_ref2 => {
148
- let [name, cb] = _ref2;
185
+ Object.entries(activatorEvents.value).forEach(_ref3 => {
186
+ let [name, cb] = _ref3;
149
187
  el.addEventListener(name, cb);
150
188
  });
151
189
  Object.keys(_props).forEach(k => {
@@ -163,8 +201,8 @@ function _useActivator(props, _ref) {
163
201
  let _props = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : props.activatorProps;
164
202
 
165
203
  if (!el) return;
166
- Object.entries(activatorEvents.value).forEach(_ref3 => {
167
- let [name, cb] = _ref3;
204
+ Object.entries(activatorEvents.value).forEach(_ref4 => {
205
+ let [name, cb] = _ref4;
168
206
  el.removeEventListener(name, cb);
169
207
  });
170
208
  Object.keys(_props).forEach(k => {
@@ -172,8 +210,6 @@ function _useActivator(props, _ref) {
172
210
  });
173
211
  }
174
212
 
175
- const vm = getCurrentInstance('useActivator');
176
-
177
213
  function getActivator() {
178
214
  var _activator;
179
215
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/VOverlay/useActivator.tsx"],"names":["getCurrentInstance","IN_BROWSER","isComponentInstance","propsFactory","SUPPORTS_FOCUS_VISIBLE","makeDelayProps","useDelay","computed","effectScope","nextTick","onScopeDispose","ref","watch","watchEffect","makeActivatorProps","activator","String","Object","activatorProps","type","default","openOnClick","Boolean","undefined","openOnHover","openOnFocus","useActivator","props","isActive","activatorEl","isHovered","isFocused","value","runOpenDelay","runCloseDelay","availableEvents","click","e","stopPropagation","currentTarget","target","mouseenter","mouseleave","focus","matches","blur","activatorEvents","events","activatorRef","$el","scope","val","run","_useActivator","stop","flush","immediate","oldVal","getActivator","unbindActivatorProps","bindActivatorProps","el","_props","entries","forEach","name","cb","addEventListener","keys","k","removeAttribute","setAttribute","removeEventListener","vm","selector","proxy","parentNode","document","querySelector","nodeType","Node","ELEMENT_NODE"],"mappings":"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","sourcesContent":["// Utilities\nimport { getCurrentInstance, IN_BROWSER, isComponentInstance, propsFactory, SUPPORTS_FOCUS_VISIBLE } from '@/util'\nimport { makeDelayProps, useDelay } from '@/composables/delay'\nimport {\n computed,\n effectScope,\n nextTick,\n onScopeDispose,\n ref,\n watch,\n watchEffect,\n} from 'vue'\n\n// Types\nimport type { DelayProps } from '@/composables/delay'\nimport type {\n ComponentPublicInstance,\n EffectScope,\n PropType,\n Ref,\n} from 'vue'\n\ninterface ActivatorProps extends DelayProps {\n activator?: 'parent' | string | Element | ComponentPublicInstance\n activatorProps: Record<string, any>\n\n openOnClick: boolean | undefined\n openOnHover: boolean\n openOnFocus: boolean | undefined\n}\n\nexport const makeActivatorProps = propsFactory({\n activator: [String, Object] as PropType<ActivatorProps['activator']>,\n activatorProps: {\n type: Object as PropType<ActivatorProps['activatorProps']>,\n default: () => ({}),\n },\n\n openOnClick: {\n type: Boolean,\n default: undefined,\n },\n openOnHover: Boolean,\n openOnFocus: {\n type: Boolean,\n default: undefined,\n },\n\n ...makeDelayProps(),\n})\n\nexport function useActivator (\n props: ActivatorProps,\n isActive: Ref<boolean>\n) {\n const activatorEl = ref<HTMLElement>()\n\n let isHovered = false\n let isFocused = false\n\n const openOnFocus = computed(() => props.openOnFocus || (props.openOnFocus == null && props.openOnHover))\n const openOnClick = computed(() => props.openOnClick || (props.openOnClick == null && !props.openOnHover && !openOnFocus.value))\n\n const { runOpenDelay, runCloseDelay } = useDelay(props, value => {\n if (value === (\n (props.openOnHover && isHovered) ||\n (openOnFocus.value && isFocused)\n )) {\n isActive.value = value\n }\n })\n\n const availableEvents = {\n click: (e: MouseEvent) => {\n e.stopPropagation()\n activatorEl.value = (e.currentTarget || e.target) as HTMLElement\n isActive.value = !isActive.value\n },\n mouseenter: (e: MouseEvent) => {\n isHovered = true\n activatorEl.value = (e.currentTarget || e.target) as HTMLElement\n runOpenDelay()\n },\n mouseleave: (e: MouseEvent) => {\n isHovered = false\n runCloseDelay()\n },\n focus: (e: FocusEvent) => {\n if (\n SUPPORTS_FOCUS_VISIBLE &&\n !(e.target as HTMLElement).matches(':focus-visible')\n ) return\n\n isFocused = true\n e.stopPropagation()\n activatorEl.value = (e.currentTarget || e.target) as HTMLElement\n\n runOpenDelay()\n },\n blur: (e: FocusEvent) => {\n isFocused = false\n e.stopPropagation()\n\n runCloseDelay()\n },\n }\n\n const activatorEvents = computed(() => {\n const events: Partial<typeof availableEvents> = {}\n\n if (openOnClick.value) {\n events.click = availableEvents.click\n }\n if (props.openOnHover) {\n events.mouseenter = availableEvents.mouseenter\n events.mouseleave = availableEvents.mouseleave\n }\n if (openOnFocus.value) {\n events.focus = availableEvents.focus\n events.blur = availableEvents.blur\n }\n\n return events\n })\n\n const activatorRef = ref()\n watchEffect(() => {\n if (!activatorRef.value) return\n\n nextTick(() => {\n const activator = activatorRef.value\n activatorEl.value = isComponentInstance(activator) ? activator.$el : activator\n })\n })\n\n let scope: EffectScope\n watch(() => !!props.activator, val => {\n if (val && IN_BROWSER) {\n scope = effectScope()\n scope.run(() => {\n _useActivator(props, { activatorEl, activatorRef, activatorEvents })\n })\n } else if (scope) {\n scope.stop()\n }\n }, { flush: 'post', immediate: true })\n\n return { activatorEl, activatorRef, activatorEvents }\n}\n\nfunction _useActivator (props: ActivatorProps, { activatorEl, activatorEvents }: ReturnType<typeof useActivator>) {\n watch(() => props.activator, (val, oldVal) => {\n if (oldVal && val !== oldVal) {\n const activator = getActivator(oldVal)\n activator && unbindActivatorProps(activator)\n }\n if (val) {\n nextTick(() => bindActivatorProps())\n }\n }, { immediate: true })\n\n watch(() => props.activatorProps, () => {\n bindActivatorProps()\n })\n\n onScopeDispose(() => {\n unbindActivatorProps()\n })\n\n function bindActivatorProps (el = getActivator(), _props = props.activatorProps) {\n if (!el) return\n\n Object.entries(activatorEvents.value).forEach(([name, cb]) => {\n el.addEventListener(name, cb as (e: Event) => void)\n })\n\n Object.keys(_props).forEach(k => {\n if (_props[k] == null) {\n el.removeAttribute(k)\n } else {\n el.setAttribute(k, _props[k])\n }\n })\n }\n\n function unbindActivatorProps (el = getActivator(), _props = props.activatorProps) {\n if (!el) return\n\n Object.entries(activatorEvents.value).forEach(([name, cb]) => {\n el.removeEventListener(name, cb as (e: Event) => void)\n })\n\n Object.keys(_props).forEach(k => {\n el.removeAttribute(k)\n })\n }\n\n const vm = getCurrentInstance('useActivator')\n function getActivator (selector = props.activator): HTMLElement | undefined {\n let activator\n if (selector) {\n if (selector === 'parent') {\n activator = vm?.proxy?.$el?.parentNode\n } else if (typeof selector === 'string') {\n // Selector\n activator = document.querySelector(selector)\n } else if ('$el' in selector) {\n // Component (ref)\n activator = selector.$el\n } else {\n // HTMLElement | Element\n activator = selector\n }\n }\n\n // The activator should only be a valid element (Ignore comments and text nodes)\n activatorEl.value = activator?.nodeType === Node.ELEMENT_NODE ? activator : null\n\n return activatorEl.value\n }\n}\n"],"file":"useActivator.mjs"}
1
+ {"version":3,"sources":["../../../src/components/VOverlay/useActivator.tsx"],"names":["getCurrentInstance","IN_BROWSER","isComponentInstance","propsFactory","SUPPORTS_FOCUS_VISIBLE","makeDelayProps","useDelay","VMenuSymbol","computed","effectScope","inject","nextTick","onScopeDispose","ref","watch","watchEffect","makeActivatorProps","activator","String","Object","activatorProps","type","default","openOnClick","Boolean","undefined","openOnHover","openOnFocus","closeOnContentClick","useActivator","props","isActive","isTop","activatorEl","isHovered","isFocused","value","runOpenDelay","runCloseDelay","availableEvents","click","e","stopPropagation","currentTarget","target","mouseenter","mouseleave","focus","matches","blur","activatorEvents","events","contentEvents","menu","closeParents","val","activatorRef","$el","vm","scope","run","_useActivator","stop","flush","immediate","oldVal","getActivator","unbindActivatorProps","bindActivatorProps","el","_props","entries","forEach","name","cb","addEventListener","keys","k","removeAttribute","setAttribute","removeEventListener","selector","proxy","parentNode","document","querySelector","nodeType","Node","ELEMENT_NODE"],"mappings":"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","sourcesContent":["// Utilities\nimport { getCurrentInstance, IN_BROWSER, isComponentInstance, propsFactory, SUPPORTS_FOCUS_VISIBLE } from '@/util'\nimport { makeDelayProps, useDelay } from '@/composables/delay'\nimport { VMenuSymbol } from '@/components/VMenu/shared'\nimport {\n computed,\n effectScope,\n inject,\n nextTick,\n onScopeDispose,\n ref,\n watch,\n watchEffect,\n} from 'vue'\n\n// Types\nimport type { DelayProps } from '@/composables/delay'\nimport type {\n ComponentInternalInstance,\n ComponentPublicInstance,\n EffectScope,\n PropType,\n Ref,\n} from 'vue'\n\ninterface ActivatorProps extends DelayProps {\n activator?: 'parent' | string | Element | ComponentPublicInstance\n activatorProps: Record<string, any>\n\n openOnClick: boolean | undefined\n openOnHover: boolean\n openOnFocus: boolean | undefined\n\n closeOnContentClick: boolean\n}\n\nexport const makeActivatorProps = propsFactory({\n activator: [String, Object] as PropType<ActivatorProps['activator']>,\n activatorProps: {\n type: Object as PropType<ActivatorProps['activatorProps']>,\n default: () => ({}),\n },\n\n openOnClick: {\n type: Boolean,\n default: undefined,\n },\n openOnHover: Boolean,\n openOnFocus: {\n type: Boolean,\n default: undefined,\n },\n\n closeOnContentClick: Boolean,\n\n ...makeDelayProps(),\n})\n\nexport function useActivator (\n props: ActivatorProps,\n { isActive, isTop }: { isActive: Ref<boolean>, isTop: Ref<boolean> }\n) {\n const activatorEl = ref<HTMLElement>()\n\n let isHovered = false\n let isFocused = false\n\n const openOnFocus = computed(() => props.openOnFocus || (props.openOnFocus == null && props.openOnHover))\n const openOnClick = computed(() => props.openOnClick || (props.openOnClick == null && !props.openOnHover && !openOnFocus.value))\n\n const { runOpenDelay, runCloseDelay } = useDelay(props, value => {\n if (\n value === (\n (props.openOnHover && isHovered) ||\n (openOnFocus.value && isFocused)\n ) && !(props.openOnHover && isActive.value && !isTop.value)\n ) {\n isActive.value = value\n }\n })\n\n const availableEvents = {\n click: (e: MouseEvent) => {\n e.stopPropagation()\n activatorEl.value = (e.currentTarget || e.target) as HTMLElement\n isActive.value = !isActive.value\n },\n mouseenter: (e: MouseEvent) => {\n isHovered = true\n activatorEl.value = (e.currentTarget || e.target) as HTMLElement\n runOpenDelay()\n },\n mouseleave: (e: MouseEvent) => {\n isHovered = false\n runCloseDelay()\n },\n focus: (e: FocusEvent) => {\n if (\n SUPPORTS_FOCUS_VISIBLE &&\n !(e.target as HTMLElement).matches(':focus-visible')\n ) return\n\n isFocused = true\n e.stopPropagation()\n activatorEl.value = (e.currentTarget || e.target) as HTMLElement\n\n runOpenDelay()\n },\n blur: (e: FocusEvent) => {\n isFocused = false\n e.stopPropagation()\n\n runCloseDelay()\n },\n }\n\n const activatorEvents = computed(() => {\n const events: Partial<typeof availableEvents> = {}\n\n if (openOnClick.value) {\n events.click = availableEvents.click\n }\n if (props.openOnHover) {\n events.mouseenter = availableEvents.mouseenter\n events.mouseleave = availableEvents.mouseleave\n }\n if (openOnFocus.value) {\n events.focus = availableEvents.focus\n events.blur = availableEvents.blur\n }\n\n return events\n })\n\n const contentEvents = computed(() => {\n const events: Partial<typeof availableEvents> = {}\n\n if (props.openOnHover) {\n events.mouseenter = () => {\n isHovered = true\n runOpenDelay()\n }\n events.mouseleave = () => {\n isHovered = false\n runCloseDelay()\n }\n }\n\n if (props.closeOnContentClick) {\n const menu = inject(VMenuSymbol, null)\n events.click = () => {\n isActive.value = false\n menu?.closeParents()\n }\n }\n\n return events\n })\n\n watch(isTop, val => {\n if (val && props.openOnHover && !isHovered) {\n isActive.value = false\n }\n })\n\n const activatorRef = ref()\n watchEffect(() => {\n if (!activatorRef.value) return\n\n nextTick(() => {\n const activator = activatorRef.value\n activatorEl.value = isComponentInstance(activator) ? activator.$el : activator\n })\n })\n\n const vm = getCurrentInstance('useActivator')\n let scope: EffectScope\n watch(() => !!props.activator, val => {\n if (val && IN_BROWSER) {\n scope = effectScope()\n scope.run(() => {\n _useActivator(props, vm, { activatorEl, activatorEvents })\n })\n } else if (scope) {\n scope.stop()\n }\n }, { flush: 'post', immediate: true })\n\n return { activatorEl, activatorRef, activatorEvents, contentEvents }\n}\n\nfunction _useActivator (\n props: ActivatorProps,\n vm: ComponentInternalInstance,\n { activatorEl, activatorEvents }: Pick<ReturnType<typeof useActivator>, 'activatorEl' | 'activatorEvents'>\n) {\n watch(() => props.activator, (val, oldVal) => {\n if (oldVal && val !== oldVal) {\n const activator = getActivator(oldVal)\n activator && unbindActivatorProps(activator)\n }\n if (val) {\n nextTick(() => bindActivatorProps())\n }\n }, { immediate: true })\n\n watch(() => props.activatorProps, () => {\n bindActivatorProps()\n })\n\n onScopeDispose(() => {\n unbindActivatorProps()\n })\n\n function bindActivatorProps (el = getActivator(), _props = props.activatorProps) {\n if (!el) return\n\n Object.entries(activatorEvents.value).forEach(([name, cb]) => {\n el.addEventListener(name, cb as (e: Event) => void)\n })\n\n Object.keys(_props).forEach(k => {\n if (_props[k] == null) {\n el.removeAttribute(k)\n } else {\n el.setAttribute(k, _props[k])\n }\n })\n }\n\n function unbindActivatorProps (el = getActivator(), _props = props.activatorProps) {\n if (!el) return\n\n Object.entries(activatorEvents.value).forEach(([name, cb]) => {\n el.removeEventListener(name, cb as (e: Event) => void)\n })\n\n Object.keys(_props).forEach(k => {\n el.removeAttribute(k)\n })\n }\n\n function getActivator (selector = props.activator): HTMLElement | undefined {\n let activator\n if (selector) {\n if (selector === 'parent') {\n activator = vm?.proxy?.$el?.parentNode\n } else if (typeof selector === 'string') {\n // Selector\n activator = document.querySelector(selector)\n } else if ('$el' in selector) {\n // Component (ref)\n activator = selector.$el\n } else {\n // HTMLElement | Element\n activator = selector\n }\n }\n\n // The activator should only be a valid element (Ignore comments and text nodes)\n activatorEl.value = activator?.nodeType === Node.ELEMENT_NODE ? activator : null\n\n return activatorEl.value\n }\n}\n"],"file":"useActivator.mjs"}
@@ -153,27 +153,25 @@ export const VPagination = defineComponent({
153
153
  });
154
154
  const range = computed(() => {
155
155
  if (length.value <= 0) return [];
156
+ if (totalVisible.value <= 2) return [page.value];
156
157
 
157
- if (totalVisible.value <= 3) {
158
- return [Math.min(Math.max(start.value, page.value), start.value + length.value)];
159
- }
160
-
161
- if (props.length <= totalVisible.value) {
158
+ if (length.value <= totalVisible.value) {
162
159
  return createRange(length.value, start.value);
163
160
  }
164
161
 
165
- const middle = Math.ceil(totalVisible.value / 2);
166
- const left = middle;
162
+ const even = totalVisible.value % 2 === 0;
163
+ const middle = even ? totalVisible.value / 2 : Math.floor(totalVisible.value / 2);
164
+ const left = even ? middle : middle + 1;
167
165
  const right = length.value - middle;
168
166
 
169
- if (page.value < left) {
170
- return [...createRange(Math.max(1, totalVisible.value - 2), start.value), props.ellipsis, length.value];
171
- } else if (page.value > right) {
172
- const rangeLength = totalVisible.value - 2;
167
+ if (left - page.value >= 0) {
168
+ return [...createRange(Math.max(1, totalVisible.value - 1), start.value), props.ellipsis, length.value];
169
+ } else if (page.value - right >= 0) {
170
+ const rangeLength = totalVisible.value - 1;
173
171
  const rangeStart = length.value - rangeLength + start.value;
174
172
  return [start.value, props.ellipsis, ...createRange(rangeLength, rangeStart)];
175
173
  } else {
176
- const rangeLength = Math.max(1, totalVisible.value - 4);
174
+ const rangeLength = Math.max(1, totalVisible.value - 3);
177
175
  const rangeStart = rangeLength === 1 ? page.value : page.value - Math.ceil(rangeLength / 2) + start.value;
178
176
  return [start.value, props.ellipsis, ...createRange(rangeLength, rangeStart), props.ellipsis, length.value];
179
177
  }