vuetify 3.3.12 → 3.4.0-alpha.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.
Files changed (267) hide show
  1. package/dist/json/attributes.json +152 -16
  2. package/dist/json/importMap.json +4 -4
  3. package/dist/json/tags.json +34 -0
  4. package/dist/json/web-types.json +462 -48
  5. package/dist/vuetify-labs.css +1718 -606
  6. package/dist/vuetify-labs.d.ts +880 -276
  7. package/dist/vuetify-labs.esm.js +373 -189
  8. package/dist/vuetify-labs.esm.js.map +1 -1
  9. package/dist/vuetify-labs.js +372 -188
  10. package/dist/vuetify-labs.min.css +2 -2
  11. package/dist/vuetify.css +1591 -479
  12. package/dist/vuetify.d.ts +865 -267
  13. package/dist/vuetify.esm.js +373 -189
  14. package/dist/vuetify.esm.js.map +1 -1
  15. package/dist/vuetify.js +372 -188
  16. package/dist/vuetify.js.map +1 -1
  17. package/dist/vuetify.min.css +2 -2
  18. package/dist/vuetify.min.js +920 -905
  19. package/dist/vuetify.min.js.map +1 -1
  20. package/lib/components/VAppBar/VAppBar.mjs.map +1 -1
  21. package/lib/components/VAppBar/index.d.mts +6 -6
  22. package/lib/components/VAutocomplete/VAutocomplete.mjs +6 -2
  23. package/lib/components/VAutocomplete/VAutocomplete.mjs.map +1 -1
  24. package/lib/components/VAutocomplete/index.d.mts +62 -14
  25. package/lib/components/VAvatar/VAvatar.mjs +2 -1
  26. package/lib/components/VAvatar/VAvatar.mjs.map +1 -1
  27. package/lib/components/VAvatar/index.d.mts +6 -0
  28. package/lib/components/VBanner/VBanner.mjs +5 -3
  29. package/lib/components/VBanner/VBanner.mjs.map +1 -1
  30. package/lib/components/VBanner/index.d.mts +10 -0
  31. package/lib/components/VBottomNavigation/VBottomNavigation.css +1 -0
  32. package/lib/components/VBottomNavigation/VBottomNavigation.sass +1 -0
  33. package/lib/components/VBreadcrumbs/VBreadcrumbs.mjs +9 -4
  34. package/lib/components/VBreadcrumbs/VBreadcrumbs.mjs.map +1 -1
  35. package/lib/components/VBreadcrumbs/index.d.mts +28 -2
  36. package/lib/components/VBtn/VBtn.css +3 -0
  37. package/lib/components/VBtn/VBtn.sass +3 -0
  38. package/lib/components/VCarousel/index.d.mts +26 -0
  39. package/lib/components/VCheckbox/VCheckbox.mjs +2 -2
  40. package/lib/components/VCheckbox/VCheckbox.mjs.map +1 -1
  41. package/lib/components/VCheckbox/VCheckboxBtn.mjs +14 -11
  42. package/lib/components/VCheckbox/VCheckboxBtn.mjs.map +1 -1
  43. package/lib/components/VCheckbox/index.d.mts +15 -1
  44. package/lib/components/VColorPicker/VColorPickerEdit.css +4 -2
  45. package/lib/components/VColorPicker/VColorPickerPreview.css +16 -6
  46. package/lib/components/VColorPicker/VColorPickerPreview.mjs +28 -2
  47. package/lib/components/VColorPicker/VColorPickerPreview.mjs.map +1 -1
  48. package/lib/components/VColorPicker/VColorPickerPreview.sass +4 -0
  49. package/lib/components/VColorPicker/_variables.scss +1 -0
  50. package/lib/components/VCombobox/VCombobox.mjs +6 -2
  51. package/lib/components/VCombobox/VCombobox.mjs.map +1 -1
  52. package/lib/components/VCombobox/index.d.mts +62 -14
  53. package/lib/components/VDialog/index.d.mts +41 -20
  54. package/lib/components/VField/VField.css +11 -6
  55. package/lib/components/VField/VField.mjs +5 -3
  56. package/lib/components/VField/VField.mjs.map +1 -1
  57. package/lib/components/VField/VField.sass +1 -0
  58. package/lib/components/VField/index.d.mts +4 -4
  59. package/lib/components/VFileInput/VFileInput.css +4 -0
  60. package/lib/components/VFileInput/VFileInput.sass +5 -1
  61. package/lib/components/VFileInput/_variables.scss +2 -1
  62. package/lib/components/VFileInput/index.d.mts +4 -4
  63. package/lib/components/VGrid/VGrid.css +153 -142
  64. package/lib/components/VImg/VImg.mjs +13 -1
  65. package/lib/components/VImg/VImg.mjs.map +1 -1
  66. package/lib/components/VImg/index.d.mts +26 -0
  67. package/lib/components/VList/VList.css +1 -1
  68. package/lib/components/VList/VList.sass +1 -1
  69. package/lib/components/VList/VListItem.css +15 -10
  70. package/lib/components/VList/VListItem.mjs +6 -3
  71. package/lib/components/VList/VListItem.mjs.map +1 -1
  72. package/lib/components/VList/VListItem.sass +17 -10
  73. package/lib/components/VList/index.d.mts +12 -12
  74. package/lib/components/VMenu/VMenu.mjs +4 -3
  75. package/lib/components/VMenu/VMenu.mjs.map +1 -1
  76. package/lib/components/VMenu/index.d.mts +46 -25
  77. package/lib/components/VNavigationDrawer/VNavigationDrawer.css +0 -1
  78. package/lib/components/VNavigationDrawer/VNavigationDrawer.mjs +5 -3
  79. package/lib/components/VNavigationDrawer/VNavigationDrawer.mjs.map +1 -1
  80. package/lib/components/VNavigationDrawer/VNavigationDrawer.sass +0 -1
  81. package/lib/components/VNavigationDrawer/_variables.scss +0 -1
  82. package/lib/components/VNavigationDrawer/index.d.mts +10 -0
  83. package/lib/components/VOverlay/VOverlay.mjs +9 -4
  84. package/lib/components/VOverlay/VOverlay.mjs.map +1 -1
  85. package/lib/components/VOverlay/index.d.mts +17 -8
  86. package/lib/components/VOverlay/locationStrategies.mjs +9 -9
  87. package/lib/components/VOverlay/locationStrategies.mjs.map +1 -1
  88. package/lib/components/VOverlay/scrollStrategies.mjs +3 -3
  89. package/lib/components/VOverlay/scrollStrategies.mjs.map +1 -1
  90. package/lib/components/VOverlay/useActivator.mjs +50 -21
  91. package/lib/components/VOverlay/useActivator.mjs.map +1 -1
  92. package/lib/components/VProgressLinear/VProgressLinear.css +3 -2
  93. package/lib/components/VRadio/index.d.mts +9 -1
  94. package/lib/components/VRadioGroup/VRadioGroup.css +6 -1
  95. package/lib/components/VRadioGroup/VRadioGroup.mjs +2 -2
  96. package/lib/components/VRadioGroup/VRadioGroup.mjs.map +1 -1
  97. package/lib/components/VRadioGroup/VRadioGroup.sass +5 -0
  98. package/lib/components/VRadioGroup/_variables.scss +3 -1
  99. package/lib/components/VRadioGroup/index.d.mts +3 -1
  100. package/lib/components/VRangeSlider/VRangeSlider.mjs +4 -2
  101. package/lib/components/VRangeSlider/VRangeSlider.mjs.map +1 -1
  102. package/lib/components/VRangeSlider/index.d.mts +128 -33
  103. package/lib/components/VSelect/VSelect.mjs +14 -2
  104. package/lib/components/VSelect/VSelect.mjs.map +1 -1
  105. package/lib/components/VSelect/index.d.mts +62 -14
  106. package/lib/components/VSelectionControl/VSelectionControl.mjs +27 -21
  107. package/lib/components/VSelectionControl/VSelectionControl.mjs.map +1 -1
  108. package/lib/components/VSelectionControl/index.d.mts +33 -25
  109. package/lib/components/VSlideGroup/VSlideGroup.mjs +5 -3
  110. package/lib/components/VSlideGroup/VSlideGroup.mjs.map +1 -1
  111. package/lib/components/VSlideGroup/index.d.mts +10 -0
  112. package/lib/components/VSlider/VSlider.mjs +2 -1
  113. package/lib/components/VSlider/VSlider.mjs.map +1 -1
  114. package/lib/components/VSlider/VSliderThumb.css +8 -4
  115. package/lib/components/VSlider/VSliderTrack.css +22 -12
  116. package/lib/components/VSlider/index.d.mts +128 -33
  117. package/lib/components/VSlider/slider.mjs +5 -1
  118. package/lib/components/VSlider/slider.mjs.map +1 -1
  119. package/lib/components/VSnackbar/index.d.mts +41 -20
  120. package/lib/components/VSwitch/VSwitch.css +24 -17
  121. package/lib/components/VSwitch/VSwitch.mjs +37 -28
  122. package/lib/components/VSwitch/VSwitch.mjs.map +1 -1
  123. package/lib/components/VSwitch/VSwitch.sass +20 -11
  124. package/lib/components/VSwitch/_variables.scss +18 -6
  125. package/lib/components/VSwitch/index.d.mts +9 -1
  126. package/lib/components/VTabs/index.d.mts +10 -0
  127. package/lib/components/VTextField/VTextField.css +9 -2
  128. package/lib/components/VTextField/VTextField.mjs +6 -3
  129. package/lib/components/VTextField/VTextField.mjs.map +1 -1
  130. package/lib/components/VTextField/VTextField.sass +10 -3
  131. package/lib/components/VTextField/index.d.mts +22 -16
  132. package/lib/components/VTextarea/VTextarea.mjs +1 -2
  133. package/lib/components/VTextarea/VTextarea.mjs.map +1 -1
  134. package/lib/components/VTextarea/index.d.mts +4 -4
  135. package/lib/components/VTimeline/VTimeline.css +21 -11
  136. package/lib/components/VTimeline/VTimeline.sass +6 -1
  137. package/lib/components/VToolbar/VToolbar.css +4 -2
  138. package/lib/components/VTooltip/index.d.mts +41 -20
  139. package/lib/components/index.d.mts +836 -265
  140. package/lib/components/transitions/dialog-transition.mjs +4 -3
  141. package/lib/components/transitions/dialog-transition.mjs.map +1 -1
  142. package/lib/components/transitions/index.d.mts +6 -6
  143. package/lib/composables/defaults.mjs +9 -9
  144. package/lib/composables/defaults.mjs.map +1 -1
  145. package/lib/composables/directiveComponent.mjs +69 -0
  146. package/lib/composables/directiveComponent.mjs.map +1 -0
  147. package/lib/composables/display.mjs +23 -3
  148. package/lib/composables/display.mjs.map +1 -1
  149. package/lib/composables/theme.mjs +7 -7
  150. package/lib/composables/theme.mjs.map +1 -1
  151. package/lib/entry-bundler.mjs +1 -1
  152. package/lib/entry-bundler.mjs.map +1 -1
  153. package/lib/framework.mjs +1 -1
  154. package/lib/framework.mjs.map +1 -1
  155. package/lib/iconsets/fa.mjs +2 -1
  156. package/lib/iconsets/fa.mjs.map +1 -1
  157. package/lib/iconsets/fa4.mjs +2 -1
  158. package/lib/iconsets/fa4.mjs.map +1 -1
  159. package/lib/iconsets/md.mjs +2 -1
  160. package/lib/iconsets/md.mjs.map +1 -1
  161. package/lib/iconsets/mdi-svg.mjs +2 -1
  162. package/lib/iconsets/mdi-svg.mjs.map +1 -1
  163. package/lib/iconsets/mdi.mjs +2 -1
  164. package/lib/iconsets/mdi.mjs.map +1 -1
  165. package/lib/index.d.mts +33 -2
  166. package/lib/labs/VBottomSheet/index.d.mts +14 -8
  167. package/lib/labs/VDateInput/index.d.mts +10 -4
  168. package/lib/labs/VDatePicker/VDatePickerControls.css +1 -1
  169. package/lib/labs/VOtpInput/index.d.mts +4 -4
  170. package/lib/labs/components.d.mts +18 -12
  171. package/lib/locale/af.mjs +1 -0
  172. package/lib/locale/af.mjs.map +1 -1
  173. package/lib/locale/ar.mjs +1 -0
  174. package/lib/locale/ar.mjs.map +1 -1
  175. package/lib/locale/az.mjs +1 -0
  176. package/lib/locale/az.mjs.map +1 -1
  177. package/lib/locale/bg.mjs +1 -0
  178. package/lib/locale/bg.mjs.map +1 -1
  179. package/lib/locale/ca.mjs +1 -0
  180. package/lib/locale/ca.mjs.map +1 -1
  181. package/lib/locale/ckb.mjs +1 -0
  182. package/lib/locale/ckb.mjs.map +1 -1
  183. package/lib/locale/cs.mjs +1 -0
  184. package/lib/locale/cs.mjs.map +1 -1
  185. package/lib/locale/da.mjs +1 -0
  186. package/lib/locale/da.mjs.map +1 -1
  187. package/lib/locale/de.mjs +1 -0
  188. package/lib/locale/de.mjs.map +1 -1
  189. package/lib/locale/el.mjs +1 -0
  190. package/lib/locale/el.mjs.map +1 -1
  191. package/lib/locale/en.mjs +1 -0
  192. package/lib/locale/en.mjs.map +1 -1
  193. package/lib/locale/es.mjs +1 -0
  194. package/lib/locale/es.mjs.map +1 -1
  195. package/lib/locale/et.mjs +1 -0
  196. package/lib/locale/et.mjs.map +1 -1
  197. package/lib/locale/fa.mjs +1 -0
  198. package/lib/locale/fa.mjs.map +1 -1
  199. package/lib/locale/fi.mjs +1 -0
  200. package/lib/locale/fi.mjs.map +1 -1
  201. package/lib/locale/fr.mjs +1 -0
  202. package/lib/locale/fr.mjs.map +1 -1
  203. package/lib/locale/he.mjs +1 -0
  204. package/lib/locale/he.mjs.map +1 -1
  205. package/lib/locale/hr.mjs +1 -0
  206. package/lib/locale/hr.mjs.map +1 -1
  207. package/lib/locale/hu.mjs +1 -0
  208. package/lib/locale/hu.mjs.map +1 -1
  209. package/lib/locale/id.mjs +1 -0
  210. package/lib/locale/id.mjs.map +1 -1
  211. package/lib/locale/index.d.mts +42 -0
  212. package/lib/locale/it.mjs +1 -0
  213. package/lib/locale/it.mjs.map +1 -1
  214. package/lib/locale/ja.mjs +1 -0
  215. package/lib/locale/ja.mjs.map +1 -1
  216. package/lib/locale/ko.mjs +1 -0
  217. package/lib/locale/ko.mjs.map +1 -1
  218. package/lib/locale/lt.mjs +1 -0
  219. package/lib/locale/lt.mjs.map +1 -1
  220. package/lib/locale/lv.mjs +1 -0
  221. package/lib/locale/lv.mjs.map +1 -1
  222. package/lib/locale/nl.mjs +1 -0
  223. package/lib/locale/nl.mjs.map +1 -1
  224. package/lib/locale/no.mjs +1 -0
  225. package/lib/locale/no.mjs.map +1 -1
  226. package/lib/locale/pl.mjs +1 -0
  227. package/lib/locale/pl.mjs.map +1 -1
  228. package/lib/locale/pt.mjs +1 -0
  229. package/lib/locale/pt.mjs.map +1 -1
  230. package/lib/locale/ro.mjs +1 -0
  231. package/lib/locale/ro.mjs.map +1 -1
  232. package/lib/locale/ru.mjs +1 -0
  233. package/lib/locale/ru.mjs.map +1 -1
  234. package/lib/locale/sk.mjs +1 -0
  235. package/lib/locale/sk.mjs.map +1 -1
  236. package/lib/locale/sl.mjs +1 -0
  237. package/lib/locale/sl.mjs.map +1 -1
  238. package/lib/locale/sr-Cyrl.mjs +1 -0
  239. package/lib/locale/sr-Cyrl.mjs.map +1 -1
  240. package/lib/locale/sr-Latn.mjs +1 -0
  241. package/lib/locale/sr-Latn.mjs.map +1 -1
  242. package/lib/locale/sv.mjs +1 -0
  243. package/lib/locale/sv.mjs.map +1 -1
  244. package/lib/locale/th.mjs +1 -0
  245. package/lib/locale/th.mjs.map +1 -1
  246. package/lib/locale/tr.mjs +1 -0
  247. package/lib/locale/tr.mjs.map +1 -1
  248. package/lib/locale/uk.mjs +1 -0
  249. package/lib/locale/uk.mjs.map +1 -1
  250. package/lib/locale/vi.mjs +1 -0
  251. package/lib/locale/vi.mjs.map +1 -1
  252. package/lib/locale/zh-Hans.mjs +1 -0
  253. package/lib/locale/zh-Hans.mjs.map +1 -1
  254. package/lib/locale/zh-Hant.mjs +1 -0
  255. package/lib/locale/zh-Hant.mjs.map +1 -1
  256. package/lib/styles/main.css +1026 -0
  257. package/lib/styles/settings/_utilities.scss +20 -0
  258. package/lib/styles/tools/_rtl.sass +4 -2
  259. package/lib/util/box.mjs +12 -0
  260. package/lib/util/box.mjs.map +1 -1
  261. package/lib/util/globals.mjs +1 -0
  262. package/lib/util/globals.mjs.map +1 -1
  263. package/lib/util/helpers.mjs +19 -5
  264. package/lib/util/helpers.mjs.map +1 -1
  265. package/lib/util/injectSelf.mjs +2 -1
  266. package/lib/util/injectSelf.mjs.map +1 -1
  267. package/package.json +2 -2
@@ -5,6 +5,10 @@ interface FilterPropsOptions<PropsOptions extends Readonly<ComponentPropsOptions
5
5
  filterProps<T extends Partial<Props>, U extends Exclude<keyof Props, Exclude<keyof Props, keyof T>>>(props: T): [yes: Partial<Pick<T, U>>, no: Omit<T, U>];
6
6
  }
7
7
 
8
+ declare const breakpoints: readonly ["sm", "md", "lg", "xl", "xxl"];
9
+ type Breakpoint = typeof breakpoints[number];
10
+ type DisplayBreakpoint = 'xs' | Breakpoint;
11
+
8
12
  type VNavigationDrawerImageSlot = {
9
13
  image: string | undefined;
10
14
  };
@@ -98,6 +102,7 @@ declare const VNavigationDrawer: {
98
102
  "v-slot:append"?: false | (() => vue.VNodeChild) | undefined;
99
103
  "v-slot:prepend"?: false | (() => vue.VNodeChild) | undefined;
100
104
  "onUpdate:modelValue"?: ((val: boolean) => any) | undefined;
105
+ mobileBreakpoint?: number | DisplayBreakpoint | undefined;
101
106
  "onUpdate:rail"?: ((val: boolean) => any) | undefined;
102
107
  };
103
108
  $attrs: {
@@ -152,6 +157,7 @@ declare const VNavigationDrawer: {
152
157
  elevation?: string | number | undefined;
153
158
  theme?: string | undefined;
154
159
  rounded?: string | number | boolean | undefined;
160
+ mobileBreakpoint?: number | DisplayBreakpoint | undefined;
155
161
  } & {
156
162
  $children?: vue.VNodeChild | (() => vue.VNodeChild) | {
157
163
  default?: (() => vue.VNodeChild) | undefined;
@@ -259,6 +265,7 @@ declare const VNavigationDrawer: {
259
265
  elevation?: string | number | undefined;
260
266
  theme?: string | undefined;
261
267
  rounded?: string | number | boolean | undefined;
268
+ mobileBreakpoint?: number | DisplayBreakpoint | undefined;
262
269
  } & {
263
270
  $children?: vue.VNodeChild | (() => vue.VNodeChild) | {
264
271
  default?: (() => vue.VNodeChild) | undefined;
@@ -314,6 +321,7 @@ declare const VNavigationDrawer: {
314
321
  elevation?: string | number | undefined;
315
322
  theme?: string | undefined;
316
323
  rounded?: string | number | boolean | undefined;
324
+ mobileBreakpoint?: number | DisplayBreakpoint | undefined;
317
325
  } & {
318
326
  $children?: vue.VNodeChild | (() => vue.VNodeChild) | {
319
327
  default?: (() => vue.VNodeChild) | undefined;
@@ -398,6 +406,7 @@ declare const VNavigationDrawer: {
398
406
  type: (StringConstructor | NumberConstructor)[];
399
407
  validator(v: any): boolean;
400
408
  };
409
+ mobileBreakpoint: PropType<number | DisplayBreakpoint>;
401
410
  class: PropType<any>;
402
411
  style: {
403
412
  type: PropType<vue.StyleValue>;
@@ -464,6 +473,7 @@ declare const VNavigationDrawer: {
464
473
  type: (StringConstructor | NumberConstructor)[];
465
474
  validator(v: any): boolean;
466
475
  };
476
+ mobileBreakpoint: PropType<number | DisplayBreakpoint>;
467
477
  class: PropType<any>;
468
478
  style: {
469
479
  type: PropType<vue.StyleValue>;
@@ -123,6 +123,9 @@ export const VOverlay = genericComponent()({
123
123
  const {
124
124
  activatorEl,
125
125
  activatorRef,
126
+ target,
127
+ targetEl,
128
+ targetRef,
126
129
  activatorEvents,
127
130
  contentEvents,
128
131
  scrimEvents
@@ -148,13 +151,13 @@ export const VOverlay = genericComponent()({
148
151
  } = useLocationStrategies(props, {
149
152
  isRtl,
150
153
  contentEl,
151
- activatorEl,
154
+ target,
152
155
  isActive
153
156
  });
154
157
  useScrollStrategies(props, {
155
158
  root,
156
159
  contentEl,
157
- activatorEl,
160
+ targetEl,
158
161
  isActive,
159
162
  updateLocation
160
163
  });
@@ -222,7 +225,8 @@ export const VOverlay = genericComponent()({
222
225
  useRender(() => _createVNode(_Fragment, null, [slots.activator?.({
223
226
  isActive: isActive.value,
224
227
  props: mergeProps({
225
- ref: activatorRef
228
+ ref: activatorRef,
229
+ targetRef
226
230
  }, activatorEvents.value, props.activatorProps)
227
231
  }), isMounted.value && hasContent.value && _createVNode(Teleport, {
228
232
  "disabled": !teleportTarget.value,
@@ -245,7 +249,7 @@ export const VOverlay = genericComponent()({
245
249
  "appear": true,
246
250
  "persisted": true,
247
251
  "transition": props.transition,
248
- "target": activatorEl.value,
252
+ "target": target.value,
249
253
  "onAfterLeave": () => {
250
254
  onAfterLeave();
251
255
  emit('afterLeave');
@@ -266,6 +270,7 @@ export const VOverlay = genericComponent()({
266
270
  })]));
267
271
  return {
268
272
  activatorEl,
273
+ target,
269
274
  animateClick,
270
275
  contentEl,
271
276
  globalTop,
@@ -1 +1 @@
1
- {"version":3,"file":"VOverlay.mjs","names":["makeLocationStrategyProps","useLocationStrategies","makeScrollStrategyProps","useScrollStrategies","makeActivatorProps","useActivator","useBackgroundColor","makeComponentProps","makeDimensionProps","useDimension","useHydration","makeLazyProps","useLazy","useRtl","useProxiedModel","useBackButton","useRouter","useScopeId","useStack","useTeleport","makeThemeProps","provideTheme","useToggleScope","makeTransitionProps","MaybeTransition","ClickOutside","computed","mergeProps","ref","Teleport","toRef","Transition","watch","animate","convertToUnit","genericComponent","getScrollParent","IN_BROWSER","propsFactory","standardEasing","useRender","Scrim","props","modelValue","color","rest","_createVNode","default","_mergeProps","backgroundColorClasses","value","backgroundColorStyles","makeVOverlayProps","absolute","Boolean","attach","String","Object","closeOnBack","type","contained","contentClass","contentProps","disabled","noClickAnimation","persistent","scrim","zIndex","Number","VOverlay","name","directives","inheritAttrs","_disableGlobalStack","emits","e","afterLeave","setup","_ref","slots","attrs","emit","model","isActive","get","set","v","teleportTarget","themeClasses","rtlClasses","isRtl","hasContent","onAfterLeave","scrimColor","globalTop","localTop","stackStyles","activatorEl","activatorRef","activatorEvents","contentEvents","scrimEvents","isTop","dimensionStyles","isMounted","scopeId","root","contentEl","contentStyles","updateLocation","onClickOutside","animateClick","closeConditional","val","window","addEventListener","onKeydown","removeEventListener","immediate","key","contains","document","activeElement","focus","router","next","top","scrollParent","scrollingElement","scrollTop","transformOrigin","transform","duration","easing","_Fragment","activator","activatorProps","class","style","transition","_withDirectives","_vShow","_resolveDirective","handler","include"],"sources":["../../../src/components/VOverlay/VOverlay.tsx"],"sourcesContent":["// Styles\nimport './VOverlay.sass'\n\n// Composables\nimport { makeLocationStrategyProps, useLocationStrategies } from './locationStrategies'\nimport { makeScrollStrategyProps, useScrollStrategies } from './scrollStrategies'\nimport { makeActivatorProps, useActivator } from './useActivator'\nimport { useBackgroundColor } from '@/composables/color'\nimport { makeComponentProps } from '@/composables/component'\nimport { makeDimensionProps, useDimension } from '@/composables/dimensions'\nimport { useHydration } from '@/composables/hydration'\nimport { makeLazyProps, useLazy } from '@/composables/lazy'\nimport { useRtl } from '@/composables/locale'\nimport { useProxiedModel } from '@/composables/proxiedModel'\nimport { useBackButton, useRouter } from '@/composables/router'\nimport { useScopeId } from '@/composables/scopeId'\nimport { useStack } from '@/composables/stack'\nimport { useTeleport } from '@/composables/teleport'\nimport { makeThemeProps, provideTheme } from '@/composables/theme'\nimport { useToggleScope } from '@/composables/toggleScope'\nimport { makeTransitionProps, MaybeTransition } from '@/composables/transition'\n\n// Directives\nimport { ClickOutside } from '@/directives/click-outside'\n\n// Utilities\nimport {\n computed,\n mergeProps,\n ref,\n Teleport,\n toRef,\n Transition,\n watch,\n} from 'vue'\nimport {\n animate,\n convertToUnit,\n genericComponent,\n getScrollParent,\n IN_BROWSER,\n propsFactory,\n standardEasing,\n useRender,\n} from '@/util'\n\n// Types\nimport type { PropType, Ref } from 'vue'\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 = {\n default: { isActive: Ref<boolean> }\n activator: { isActive: boolean, props: Record<string, any> }\n}\n\nexport const makeVOverlayProps = propsFactory({\n absolute: Boolean,\n attach: [Boolean, String, Object] as PropType<boolean | string | Element>,\n closeOnBack: {\n type: Boolean,\n default: true,\n },\n contained: Boolean,\n contentClass: null,\n contentProps: null,\n disabled: Boolean,\n noClickAnimation: Boolean,\n modelValue: Boolean,\n persistent: Boolean,\n scrim: {\n type: [Boolean, String],\n default: true,\n },\n zIndex: {\n type: [Number, String],\n default: 2000,\n },\n\n ...makeActivatorProps(),\n ...makeComponentProps(),\n ...makeDimensionProps(),\n ...makeLazyProps(),\n ...makeLocationStrategyProps(),\n ...makeScrollStrategyProps(),\n ...makeThemeProps(),\n ...makeTransitionProps(),\n}, 'VOverlay')\n\nexport const VOverlay = genericComponent<OverlaySlots>()({\n name: 'VOverlay',\n\n directives: { ClickOutside },\n\n inheritAttrs: false,\n\n props: {\n _disableGlobalStack: Boolean,\n\n ...makeVOverlayProps(),\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 model = useProxiedModel(props, 'modelValue')\n const isActive = computed({\n get: () => model.value,\n set: v => {\n if (!(v && props.disabled)) model.value = v\n },\n })\n const { teleportTarget } = useTeleport(computed(() => props.attach || props.contained))\n const { themeClasses } = provideTheme(props)\n const { rtlClasses, isRtl } = 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 { globalTop, localTop, stackStyles } = useStack(isActive, toRef(props, 'zIndex'), props._disableGlobalStack)\n const { activatorEl, activatorRef, activatorEvents, contentEvents, scrimEvents } = useActivator(props, { isActive, isTop: localTop })\n const { dimensionStyles } = useDimension(props)\n const isMounted = useHydration()\n const { scopeId } = useScopeId()\n\n watch(() => props.disabled, v => {\n if (v) isActive.value = false\n })\n\n const root = ref<HTMLElement>()\n const contentEl = ref<HTMLElement>()\n const { contentStyles, updateLocation } = useLocationStrategies(props, {\n isRtl,\n contentEl,\n activatorEl,\n isActive,\n })\n useScrollStrategies(props, {\n root,\n contentEl,\n activatorEl,\n isActive,\n updateLocation,\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 && globalTop.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' && globalTop.value) {\n if (!props.persistent) {\n isActive.value = false\n if (contentEl.value?.contains(document.activeElement)) {\n activatorEl.value?.focus()\n }\n } else animateClick()\n }\n }\n\n const router = useRouter()\n useToggleScope(() => props.closeOnBack, () => {\n useBackButton(router, next => {\n if (globalTop.value && isActive.value) {\n next(false)\n if (!props.persistent) isActive.value = false\n else animateClick()\n } else {\n next()\n }\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(contentEl.value, [\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 }, activatorEvents.value, props.activatorProps),\n })}\n\n { isMounted.value && hasContent.value && (\n <Teleport\n disabled={ !teleportTarget.value }\n to={ teleportTarget.value }\n >\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 props.class,\n ]}\n style={[\n stackStyles.value,\n { top: convertToUnit(top.value) },\n props.style,\n ]}\n ref={ root }\n { ...scopeId }\n { ...attrs }\n >\n <Scrim\n color={ scrimColor }\n modelValue={ isActive.value && !!props.scrim }\n { ...scrimEvents.value }\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 { ...contentEvents.value }\n { ...props.contentProps }\n >\n { slots.default?.({ isActive }) }\n </div>\n </MaybeTransition>\n </div>\n </Teleport>\n )}\n </>\n ))\n\n return {\n activatorEl,\n animateClick,\n contentEl,\n globalTop,\n localTop,\n updateLocation,\n }\n },\n})\n\nexport type VOverlay = InstanceType<typeof VOverlay>\n"],"mappings":"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"}
1
+ {"version":3,"file":"VOverlay.mjs","names":["makeLocationStrategyProps","useLocationStrategies","makeScrollStrategyProps","useScrollStrategies","makeActivatorProps","useActivator","useBackgroundColor","makeComponentProps","makeDimensionProps","useDimension","useHydration","makeLazyProps","useLazy","useRtl","useProxiedModel","useBackButton","useRouter","useScopeId","useStack","useTeleport","makeThemeProps","provideTheme","useToggleScope","makeTransitionProps","MaybeTransition","ClickOutside","computed","mergeProps","ref","Teleport","toRef","Transition","watch","animate","convertToUnit","genericComponent","getScrollParent","IN_BROWSER","propsFactory","standardEasing","useRender","Scrim","props","modelValue","color","rest","_createVNode","default","_mergeProps","backgroundColorClasses","value","backgroundColorStyles","makeVOverlayProps","absolute","Boolean","attach","String","Object","closeOnBack","type","contained","contentClass","contentProps","disabled","noClickAnimation","persistent","scrim","zIndex","Number","VOverlay","name","directives","inheritAttrs","_disableGlobalStack","emits","e","afterLeave","setup","_ref","slots","attrs","emit","model","isActive","get","set","v","teleportTarget","themeClasses","rtlClasses","isRtl","hasContent","onAfterLeave","scrimColor","globalTop","localTop","stackStyles","activatorEl","activatorRef","target","targetEl","targetRef","activatorEvents","contentEvents","scrimEvents","isTop","dimensionStyles","isMounted","scopeId","root","contentEl","contentStyles","updateLocation","onClickOutside","animateClick","closeConditional","val","window","addEventListener","onKeydown","removeEventListener","immediate","key","contains","document","activeElement","focus","router","next","top","scrollParent","scrollingElement","scrollTop","transformOrigin","transform","duration","easing","_Fragment","activator","activatorProps","class","style","transition","_withDirectives","_vShow","_resolveDirective","handler","include"],"sources":["../../../src/components/VOverlay/VOverlay.tsx"],"sourcesContent":["// Styles\nimport './VOverlay.sass'\n\n// Composables\nimport { makeLocationStrategyProps, useLocationStrategies } from './locationStrategies'\nimport { makeScrollStrategyProps, useScrollStrategies } from './scrollStrategies'\nimport { makeActivatorProps, useActivator } from './useActivator'\nimport { useBackgroundColor } from '@/composables/color'\nimport { makeComponentProps } from '@/composables/component'\nimport { makeDimensionProps, useDimension } from '@/composables/dimensions'\nimport { useHydration } from '@/composables/hydration'\nimport { makeLazyProps, useLazy } from '@/composables/lazy'\nimport { useRtl } from '@/composables/locale'\nimport { useProxiedModel } from '@/composables/proxiedModel'\nimport { useBackButton, useRouter } from '@/composables/router'\nimport { useScopeId } from '@/composables/scopeId'\nimport { useStack } from '@/composables/stack'\nimport { useTeleport } from '@/composables/teleport'\nimport { makeThemeProps, provideTheme } from '@/composables/theme'\nimport { useToggleScope } from '@/composables/toggleScope'\nimport { makeTransitionProps, MaybeTransition } from '@/composables/transition'\n\n// Directives\nimport { ClickOutside } from '@/directives/click-outside'\n\n// Utilities\nimport {\n computed,\n mergeProps,\n ref,\n Teleport,\n toRef,\n Transition,\n watch,\n} from 'vue'\nimport {\n animate,\n convertToUnit,\n genericComponent,\n getScrollParent,\n IN_BROWSER,\n propsFactory,\n standardEasing,\n useRender,\n} from '@/util'\n\n// Types\nimport type { PropType, Ref } from 'vue'\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 = {\n default: { isActive: Ref<boolean> }\n activator: { isActive: boolean, props: Record<string, any> }\n}\n\nexport const makeVOverlayProps = propsFactory({\n absolute: Boolean,\n attach: [Boolean, String, Object] as PropType<boolean | string | Element>,\n closeOnBack: {\n type: Boolean,\n default: true,\n },\n contained: Boolean,\n contentClass: null,\n contentProps: null,\n disabled: Boolean,\n noClickAnimation: Boolean,\n modelValue: Boolean,\n persistent: Boolean,\n scrim: {\n type: [Boolean, String],\n default: true,\n },\n zIndex: {\n type: [Number, String],\n default: 2000,\n },\n\n ...makeActivatorProps(),\n ...makeComponentProps(),\n ...makeDimensionProps(),\n ...makeLazyProps(),\n ...makeLocationStrategyProps(),\n ...makeScrollStrategyProps(),\n ...makeThemeProps(),\n ...makeTransitionProps(),\n}, 'VOverlay')\n\nexport const VOverlay = genericComponent<OverlaySlots>()({\n name: 'VOverlay',\n\n directives: { ClickOutside },\n\n inheritAttrs: false,\n\n props: {\n _disableGlobalStack: Boolean,\n\n ...makeVOverlayProps(),\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 model = useProxiedModel(props, 'modelValue')\n const isActive = computed({\n get: () => model.value,\n set: v => {\n if (!(v && props.disabled)) model.value = v\n },\n })\n const { teleportTarget } = useTeleport(computed(() => props.attach || props.contained))\n const { themeClasses } = provideTheme(props)\n const { rtlClasses, isRtl } = 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 { globalTop, localTop, stackStyles } = useStack(isActive, toRef(props, 'zIndex'), props._disableGlobalStack)\n const {\n activatorEl, activatorRef,\n target, targetEl, targetRef,\n activatorEvents,\n contentEvents,\n scrimEvents,\n } = useActivator(props, { isActive, isTop: localTop })\n const { dimensionStyles } = useDimension(props)\n const isMounted = useHydration()\n const { scopeId } = useScopeId()\n\n watch(() => props.disabled, v => {\n if (v) isActive.value = false\n })\n\n const root = ref<HTMLElement>()\n const contentEl = ref<HTMLElement>()\n const { contentStyles, updateLocation } = useLocationStrategies(props, {\n isRtl,\n contentEl,\n target,\n isActive,\n })\n useScrollStrategies(props, {\n root,\n contentEl,\n targetEl,\n isActive,\n updateLocation,\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 && globalTop.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' && globalTop.value) {\n if (!props.persistent) {\n isActive.value = false\n if (contentEl.value?.contains(document.activeElement)) {\n activatorEl.value?.focus()\n }\n } else animateClick()\n }\n }\n\n const router = useRouter()\n useToggleScope(() => props.closeOnBack, () => {\n useBackButton(router, next => {\n if (globalTop.value && isActive.value) {\n next(false)\n if (!props.persistent) isActive.value = false\n else animateClick()\n } else {\n next()\n }\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(contentEl.value, [\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 targetRef,\n }, activatorEvents.value, props.activatorProps),\n })}\n\n { isMounted.value && hasContent.value && (\n <Teleport\n disabled={ !teleportTarget.value }\n to={ teleportTarget.value }\n >\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 props.class,\n ]}\n style={[\n stackStyles.value,\n { top: convertToUnit(top.value) },\n props.style,\n ]}\n ref={ root }\n { ...scopeId }\n { ...attrs }\n >\n <Scrim\n color={ scrimColor }\n modelValue={ isActive.value && !!props.scrim }\n { ...scrimEvents.value }\n />\n <MaybeTransition\n appear\n persisted\n transition={ props.transition }\n target={ target.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 { ...contentEvents.value }\n { ...props.contentProps }\n >\n { slots.default?.({ isActive }) }\n </div>\n </MaybeTransition>\n </div>\n </Teleport>\n )}\n </>\n ))\n\n return {\n activatorEl,\n target,\n animateClick,\n contentEl,\n globalTop,\n localTop,\n updateLocation,\n }\n },\n})\n\nexport type VOverlay = InstanceType<typeof VOverlay>\n"],"mappings":"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"}
@@ -30,7 +30,7 @@ interface FilterPropsOptions<PropsOptions extends Readonly<ComponentPropsOptions
30
30
 
31
31
  interface LocationStrategyData {
32
32
  contentEl: Ref<HTMLElement | undefined>;
33
- activatorEl: Ref<HTMLElement | undefined>;
33
+ target: Ref<HTMLElement | [x: number, y: number] | undefined>;
34
34
  isActive: Ref<boolean>;
35
35
  isRtl: Ref<boolean>;
36
36
  }
@@ -65,7 +65,7 @@ declare function connectedLocationStrategy(data: LocationStrategyData, props: St
65
65
  interface ScrollStrategyData {
66
66
  root: Ref<HTMLElement | undefined>;
67
67
  contentEl: Ref<HTMLElement | undefined>;
68
- activatorEl: Ref<HTMLElement | undefined>;
68
+ targetEl: Ref<HTMLElement | undefined>;
69
69
  isActive: Ref<boolean>;
70
70
  updateLocation: Ref<((e: Event) => void) | undefined>;
71
71
  }
@@ -123,6 +123,7 @@ declare const VOverlay: {
123
123
  maxWidth?: string | number | undefined;
124
124
  minHeight?: string | number | undefined;
125
125
  minWidth?: string | number | undefined;
126
+ target?: Element | "cursor" | "parent" | (string & {}) | vue.ComponentPublicInstance | [x: number, y: number] | undefined;
126
127
  class?: any;
127
128
  onAfterLeave?: (() => any) | undefined;
128
129
  $children?: vue.VNodeChild | {
@@ -192,7 +193,7 @@ declare const VOverlay: {
192
193
  [key: string]: any;
193
194
  }>) => void)[] | undefined;
194
195
  "onUpdate:modelValue"?: ((value: boolean) => any) | undefined;
195
- activator?: string | Element | vue.ComponentPublicInstance | undefined;
196
+ activator?: Element | "parent" | (string & {}) | vue.ComponentPublicInstance | undefined;
196
197
  "v-slot:activator"?: false | ((arg: {
197
198
  isActive: boolean;
198
199
  props: Record<string, any>;
@@ -259,10 +260,11 @@ declare const VOverlay: {
259
260
  maxWidth?: string | number | undefined;
260
261
  minHeight?: string | number | undefined;
261
262
  minWidth?: string | number | undefined;
263
+ target?: Element | "cursor" | "parent" | (string & {}) | vue.ComponentPublicInstance | [x: number, y: number] | undefined;
262
264
  class?: any;
263
265
  theme?: string | undefined;
264
266
  contentClass?: any;
265
- activator?: string | Element | vue.ComponentPublicInstance | undefined;
267
+ activator?: Element | "parent" | (string & {}) | vue.ComponentPublicInstance | undefined;
266
268
  closeDelay?: string | number | undefined;
267
269
  openDelay?: string | number | undefined;
268
270
  openOnClick?: boolean | undefined;
@@ -304,6 +306,7 @@ declare const VOverlay: {
304
306
  "onClick:outside"?: ((e: MouseEvent) => any) | undefined;
305
307
  }, {
306
308
  activatorEl: Ref<HTMLElement | undefined>;
309
+ target: vue.ComputedRef<HTMLElement | [x: number, y: number] | undefined>;
307
310
  animateClick: () => void;
308
311
  contentEl: Ref<HTMLElement | undefined>;
309
312
  globalTop: Readonly<Ref<boolean>>;
@@ -405,10 +408,11 @@ declare const VOverlay: {
405
408
  maxWidth?: string | number | undefined;
406
409
  minHeight?: string | number | undefined;
407
410
  minWidth?: string | number | undefined;
411
+ target?: Element | "cursor" | "parent" | (string & {}) | vue.ComponentPublicInstance | [x: number, y: number] | undefined;
408
412
  class?: any;
409
413
  theme?: string | undefined;
410
414
  contentClass?: any;
411
- activator?: string | Element | vue.ComponentPublicInstance | undefined;
415
+ activator?: Element | "parent" | (string & {}) | vue.ComponentPublicInstance | undefined;
412
416
  closeDelay?: string | number | undefined;
413
417
  openDelay?: string | number | undefined;
414
418
  openOnClick?: boolean | undefined;
@@ -450,6 +454,7 @@ declare const VOverlay: {
450
454
  "onClick:outside"?: ((e: MouseEvent) => any) | undefined;
451
455
  } & vue.ShallowUnwrapRef<{
452
456
  activatorEl: Ref<HTMLElement | undefined>;
457
+ target: vue.ComputedRef<HTMLElement | [x: number, y: number] | undefined>;
453
458
  animateClick: () => void;
454
459
  contentEl: Ref<HTMLElement | undefined>;
455
460
  globalTop: Readonly<Ref<boolean>>;
@@ -492,10 +497,11 @@ declare const VOverlay: {
492
497
  maxWidth?: string | number | undefined;
493
498
  minHeight?: string | number | undefined;
494
499
  minWidth?: string | number | undefined;
500
+ target?: Element | "cursor" | "parent" | (string & {}) | vue.ComponentPublicInstance | [x: number, y: number] | undefined;
495
501
  class?: any;
496
502
  theme?: string | undefined;
497
503
  contentClass?: any;
498
- activator?: string | Element | vue.ComponentPublicInstance | undefined;
504
+ activator?: Element | "parent" | (string & {}) | vue.ComponentPublicInstance | undefined;
499
505
  closeDelay?: string | number | undefined;
500
506
  openDelay?: string | number | undefined;
501
507
  openOnClick?: boolean | undefined;
@@ -537,6 +543,7 @@ declare const VOverlay: {
537
543
  "onClick:outside"?: ((e: MouseEvent) => any) | undefined;
538
544
  }, {
539
545
  activatorEl: Ref<HTMLElement | undefined>;
546
+ target: vue.ComputedRef<HTMLElement | [x: number, y: number] | undefined>;
540
547
  animateClick: () => void;
541
548
  contentEl: Ref<HTMLElement | undefined>;
542
549
  globalTop: Readonly<Ref<boolean>>;
@@ -629,7 +636,8 @@ declare const VOverlay: {
629
636
  };
630
637
  closeDelay: (StringConstructor | NumberConstructor)[];
631
638
  openDelay: (StringConstructor | NumberConstructor)[];
632
- activator: PropType<string | Element | vue.ComponentPublicInstance | undefined>;
639
+ target: PropType<Element | "cursor" | "parent" | (string & {}) | vue.ComponentPublicInstance | [x: number, y: number] | undefined>;
640
+ activator: PropType<Element | "parent" | (string & {}) | vue.ComponentPublicInstance | undefined>;
633
641
  activatorProps: {
634
642
  type: PropType<Record<string, any>>;
635
643
  default: () => {};
@@ -710,7 +718,8 @@ declare const VOverlay: {
710
718
  };
711
719
  closeDelay: (StringConstructor | NumberConstructor)[];
712
720
  openDelay: (StringConstructor | NumberConstructor)[];
713
- activator: PropType<string | Element | vue.ComponentPublicInstance | undefined>;
721
+ target: PropType<Element | "cursor" | "parent" | (string & {}) | vue.ComponentPublicInstance | [x: number, y: number] | undefined>;
722
+ activator: PropType<Element | "parent" | (string & {}) | vue.ComponentPublicInstance | undefined>;
714
723
  activatorProps: {
715
724
  type: PropType<Record<string, any>>;
716
725
  default: () => {};
@@ -3,7 +3,7 @@ import { useToggleScope } from "../../composables/toggleScope.mjs"; // Utilities
3
3
  import { computed, nextTick, onScopeDispose, ref, watch } from 'vue';
4
4
  import { anchorToPoint, getOffset } from "./util/point.mjs";
5
5
  import { clamp, consoleError, convertToUnit, destructComputed, flipAlign, flipCorner, flipSide, getAxis, getScrollParents, IN_BROWSER, isFixedPosition, nullifyTransforms, parseAnchor, propsFactory } from "../../util/index.mjs";
6
- import { Box, getOverflow } from "../../util/box.mjs"; // Types
6
+ import { Box, getOverflow, getTargetBox } from "../../util/box.mjs"; // Types
7
7
  const locationStrategies = {
8
8
  static: staticLocationStrategy,
9
9
  // specific viewport position, usually centered
@@ -101,7 +101,7 @@ function getIntrinsicSize(el, isRtl) {
101
101
  return contentBox;
102
102
  }
103
103
  function connectedLocationStrategy(data, props, contentStyles) {
104
- const activatorFixed = isFixedPosition(data.activatorEl.value);
104
+ const activatorFixed = Array.isArray(data.target.value) || isFixedPosition(data.target.value);
105
105
  if (activatorFixed) {
106
106
  Object.assign(contentStyles.value, {
107
107
  position: 'fixed',
@@ -150,11 +150,11 @@ function connectedLocationStrategy(data, props, contentStyles) {
150
150
  const observer = new ResizeObserver(() => {
151
151
  if (observe) updateLocation();
152
152
  });
153
- watch([data.activatorEl, data.contentEl], (_ref, _ref2) => {
154
- let [newActivatorEl, newContentEl] = _ref;
155
- let [oldActivatorEl, oldContentEl] = _ref2;
156
- if (oldActivatorEl) observer.unobserve(oldActivatorEl);
157
- if (newActivatorEl) observer.observe(newActivatorEl);
153
+ watch([data.target, data.contentEl], (_ref, _ref2) => {
154
+ let [newTarget, newContentEl] = _ref;
155
+ let [oldTarget, oldContentEl] = _ref2;
156
+ if (oldTarget && !Array.isArray(oldTarget)) observer.unobserve(oldTarget);
157
+ if (newTarget && !Array.isArray(newTarget)) observer.observe(newTarget);
158
158
  if (oldContentEl) observer.unobserve(oldContentEl);
159
159
  if (newContentEl) observer.observe(newContentEl);
160
160
  }, {
@@ -170,8 +170,8 @@ function connectedLocationStrategy(data, props, contentStyles) {
170
170
  requestAnimationFrame(() => {
171
171
  requestAnimationFrame(() => observe = true);
172
172
  });
173
- if (!data.activatorEl.value || !data.contentEl.value) return;
174
- const targetBox = data.activatorEl.value.getBoundingClientRect();
173
+ if (!data.target.value || !data.contentEl.value) return;
174
+ const targetBox = getTargetBox(data.target.value);
175
175
  const contentBox = getIntrinsicSize(data.contentEl.value, data.isRtl.value);
176
176
  const scrollParents = getScrollParents(data.contentEl.value);
177
177
  const viewportMargin = 12;
@@ -1 +1 @@
1
- {"version":3,"file":"locationStrategies.mjs","names":["useToggleScope","computed","nextTick","onScopeDispose","ref","watch","anchorToPoint","getOffset","clamp","consoleError","convertToUnit","destructComputed","flipAlign","flipCorner","flipSide","getAxis","getScrollParents","IN_BROWSER","isFixedPosition","nullifyTransforms","parseAnchor","propsFactory","Box","getOverflow","locationStrategies","static","staticLocationStrategy","connected","connectedLocationStrategy","makeLocationStrategyProps","locationStrategy","type","String","Function","default","validator","val","location","origin","offset","Number","Array","useLocationStrategies","props","data","contentStyles","updateLocation","isActive","value","reset","undefined","window","addEventListener","onResize","passive","removeEventListener","e","getIntrinsicSize","el","isRtl","style","removeProperty","contentBox","x","parseFloat","right","left","y","top","activatorFixed","activatorEl","Object","assign","position","preferredAnchor","preferredOrigin","parsedAnchor","parsedOrigin","side","align","minWidth","minHeight","maxWidth","maxHeight","map","key","isNaN","Infinity","isArray","split","length","push","observe","observer","ResizeObserver","contentEl","_ref","_ref2","newActivatorEl","newContentEl","oldActivatorEl","oldContentEl","unobserve","immediate","disconnect","requestAnimationFrame","targetBox","getBoundingClientRect","scrollParents","viewportMargin","document","documentElement","getPropertyValue","viewport","reduce","box","rect","scrollBox","width","clientWidth","height","clientHeight","Math","max","min","bottom","placement","anchor","checkOverflow","_placement","targetPoint","contentPoint","overflows","available","flipped","resets","_x","_y","axis","hasOverflowX","before","after","hasOverflowY","forEach","newPlacement","flip","newOverflows","transformOrigin","pixelRound","pixelCeil","result","round","devicePixelRatio","ceil"],"sources":["../../../src/components/VOverlay/locationStrategies.ts"],"sourcesContent":["// Composables\nimport { useToggleScope } from '@/composables/toggleScope'\n\n// Utilities\nimport { computed, nextTick, onScopeDispose, ref, watch } from 'vue'\nimport { anchorToPoint, getOffset } from './util/point'\nimport {\n clamp,\n consoleError,\n convertToUnit,\n destructComputed,\n flipAlign,\n flipCorner,\n flipSide,\n getAxis,\n getScrollParents,\n IN_BROWSER,\n isFixedPosition,\n nullifyTransforms,\n parseAnchor,\n propsFactory,\n} from '@/util'\nimport { Box, getOverflow } from '@/util/box'\n\n// Types\nimport type { PropType, Ref } from 'vue'\nimport type { Anchor } from '@/util'\n\nexport interface LocationStrategyData {\n contentEl: Ref<HTMLElement | undefined>\n activatorEl: Ref<HTMLElement | undefined>\n isActive: Ref<boolean>\n isRtl: Ref<boolean>\n}\n\ntype LocationStrategyFn = (\n data: LocationStrategyData,\n props: StrategyProps,\n contentStyles: Ref<Record<string, string>>\n) => undefined | { updateLocation: (e: Event) => void }\n\nconst locationStrategies = {\n static: staticLocationStrategy, // specific viewport position, usually centered\n connected: connectedLocationStrategy, // connected to a certain element\n}\n\nexport interface StrategyProps {\n locationStrategy: keyof typeof locationStrategies | LocationStrategyFn\n location: Anchor\n origin: Anchor | 'auto' | 'overlap'\n offset?: number | string | number[]\n maxHeight?: number | string\n maxWidth?: number | string\n minHeight?: number | string\n minWidth?: number | string\n}\n\nexport const makeLocationStrategyProps = propsFactory({\n locationStrategy: {\n type: [String, Function] as PropType<StrategyProps['locationStrategy']>,\n default: 'static',\n validator: (val: any) => typeof val === 'function' || val in locationStrategies,\n },\n location: {\n type: String as PropType<StrategyProps['location']>,\n default: 'bottom',\n },\n origin: {\n type: String as PropType<StrategyProps['origin']>,\n default: 'auto',\n },\n offset: [Number, String, Array] as PropType<StrategyProps['offset']>,\n}, 'VOverlay-location-strategies')\n\nexport function useLocationStrategies (\n props: StrategyProps,\n data: LocationStrategyData\n) {\n const contentStyles = ref({})\n const updateLocation = ref<(e: Event) => void>()\n\n if (IN_BROWSER) {\n useToggleScope(() => !!(data.isActive.value && props.locationStrategy), reset => {\n watch(() => props.locationStrategy, reset)\n onScopeDispose(() => {\n updateLocation.value = undefined\n })\n\n if (typeof props.locationStrategy === 'function') {\n updateLocation.value = props.locationStrategy(data, props, contentStyles)?.updateLocation\n } else {\n updateLocation.value = locationStrategies[props.locationStrategy](data, props, contentStyles)?.updateLocation\n }\n })\n\n window.addEventListener('resize', onResize, { passive: true })\n\n onScopeDispose(() => {\n window.removeEventListener('resize', onResize)\n updateLocation.value = undefined\n })\n }\n\n function onResize (e: Event) {\n updateLocation.value?.(e)\n }\n\n return {\n contentStyles,\n updateLocation,\n }\n}\n\nfunction staticLocationStrategy () {\n // TODO\n}\n\n/** Get size of element ignoring max-width/max-height */\nfunction getIntrinsicSize (el: HTMLElement, isRtl: boolean) {\n // const scrollables = new Map<Element, [number, number]>()\n // el.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 = el.style.maxWidth\n // const initialMaxHeight = el.style.maxHeight\n // el.style.removeProperty('max-width')\n // el.style.removeProperty('max-height')\n\n if (isRtl) {\n el.style.removeProperty('left')\n } else {\n el.style.removeProperty('right')\n }\n\n /* eslint-disable-next-line sonarjs/prefer-immediate-return */\n const contentBox = nullifyTransforms(el)\n\n if (isRtl) {\n contentBox.x += parseFloat(el.style.right || 0)\n } else {\n contentBox.x -= parseFloat(el.style.left || 0)\n }\n contentBox.y -= parseFloat(el.style.top || 0)\n\n // el.style.maxWidth = initialMaxWidth\n // el.style.maxHeight = initialMaxHeight\n // scrollables.forEach((position, el) => {\n // el.scrollTo(...position)\n // })\n\n return contentBox\n}\n\nfunction connectedLocationStrategy (data: LocationStrategyData, 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 top: 0,\n [data.isRtl.value ? 'right' : 'left']: 0,\n })\n }\n\n const { preferredAnchor, preferredOrigin } = destructComputed(() => {\n const parsedAnchor = parseAnchor(props.location, data.isRtl.value)\n const parsedOrigin =\n props.origin === 'overlap' ? parsedAnchor\n : props.origin === 'auto' ? flipSide(parsedAnchor)\n : parseAnchor(props.origin, data.isRtl.value)\n\n // Some combinations of props may produce an invalid origin\n if (parsedAnchor.side === parsedOrigin.side && parsedAnchor.align === flipAlign(parsedOrigin).align) {\n return {\n preferredAnchor: flipCorner(parsedAnchor),\n preferredOrigin: flipCorner(parsedOrigin),\n }\n } else {\n return {\n preferredAnchor: parsedAnchor,\n preferredOrigin: parsedOrigin,\n }\n }\n })\n\n const [minWidth, minHeight, maxWidth, maxHeight] =\n (['minWidth', 'minHeight', 'maxWidth', 'maxHeight'] as const).map(key => {\n return computed(() => {\n const val = parseFloat(props[key]!)\n return isNaN(val) ? Infinity : val\n })\n })\n\n const offset = computed(() => {\n if (Array.isArray(props.offset)) {\n return props.offset\n }\n if (typeof props.offset === 'string') {\n const offset = props.offset.split(' ').map(parseFloat)\n if (offset.length < 2) offset.push(0)\n return offset\n }\n return typeof props.offset === 'number' ? [props.offset, 0] : [0, 0]\n })\n\n let observe = false\n const observer = new ResizeObserver(() => {\n if (observe) updateLocation()\n })\n\n watch([data.activatorEl, data.contentEl], ([newActivatorEl, newContentEl], [oldActivatorEl, oldContentEl]) => {\n if (oldActivatorEl) observer.unobserve(oldActivatorEl)\n if (newActivatorEl) observer.observe(newActivatorEl)\n\n if (oldContentEl) observer.unobserve(oldContentEl)\n if (newContentEl) observer.observe(newContentEl)\n }, {\n immediate: true,\n })\n\n onScopeDispose(() => {\n observer.disconnect()\n })\n\n // eslint-disable-next-line max-statements\n function updateLocation () {\n observe = false\n requestAnimationFrame(() => {\n requestAnimationFrame(() => observe = true)\n })\n\n if (!data.activatorEl.value || !data.contentEl.value) return\n\n const targetBox = data.activatorEl.value.getBoundingClientRect()\n const contentBox = getIntrinsicSize(data.contentEl.value, data.isRtl.value)\n const scrollParents = getScrollParents(data.contentEl.value)\n const viewportMargin = 12\n\n if (!scrollParents.length) {\n scrollParents.push(document.documentElement)\n if (!(data.contentEl.value.style.top && data.contentEl.value.style.left)) {\n contentBox.x -= parseFloat(document.documentElement.style.getPropertyValue('--v-body-scroll-x') || 0)\n contentBox.y -= parseFloat(document.documentElement.style.getPropertyValue('--v-body-scroll-y') || 0)\n }\n }\n\n const viewport = scrollParents.reduce<Box>((box: Box | undefined, el) => {\n const rect = el.getBoundingClientRect()\n const scrollBox = new Box({\n x: el === document.documentElement ? 0 : rect.x,\n y: el === document.documentElement ? 0 : rect.y,\n width: el.clientWidth,\n height: el.clientHeight,\n })\n\n if (box) {\n return new Box({\n x: Math.max(box.left, scrollBox.left),\n y: Math.max(box.top, scrollBox.top),\n width: Math.min(box.right, scrollBox.right) - Math.max(box.left, scrollBox.left),\n height: Math.min(box.bottom, scrollBox.bottom) - Math.max(box.top, scrollBox.top),\n })\n }\n return scrollBox\n }, undefined!)\n viewport.x += viewportMargin\n viewport.y += viewportMargin\n viewport.width -= viewportMargin * 2\n viewport.height -= viewportMargin * 2\n\n let placement = {\n anchor: preferredAnchor.value,\n origin: preferredOrigin.value,\n }\n\n function checkOverflow (_placement: typeof placement) {\n const box = new Box(contentBox)\n const targetPoint = anchorToPoint(_placement.anchor, targetBox)\n const contentPoint = anchorToPoint(_placement.origin, box)\n\n let { x, y } = getOffset(targetPoint, contentPoint)\n\n switch (_placement.anchor.side) {\n case 'top': y -= offset.value[0]; break\n case 'bottom': y += offset.value[0]; break\n case 'left': x -= offset.value[0]; break\n case 'right': x += offset.value[0]; break\n }\n\n switch (_placement.anchor.align) {\n case 'top': y -= offset.value[1]; break\n case 'bottom': y += offset.value[1]; break\n case 'left': x -= offset.value[1]; break\n case 'right': x += offset.value[1]; break\n }\n\n box.x += x\n box.y += y\n\n box.width = Math.min(box.width, maxWidth.value)\n box.height = Math.min(box.height, maxHeight.value)\n\n const overflows = getOverflow(box, viewport)\n\n return { overflows, x, y }\n }\n\n let x = 0; let y = 0\n const available = { x: 0, y: 0 }\n const flipped = { x: false, y: false }\n let resets = -1\n while (true) {\n if (resets++ > 10) {\n consoleError('Infinite loop detected in connectedLocationStrategy')\n break\n }\n\n const { x: _x, y: _y, overflows } = checkOverflow(placement)\n\n x += _x\n y += _y\n\n contentBox.x += _x\n contentBox.y += _y\n\n // flip\n {\n const axis = getAxis(placement.anchor)\n const hasOverflowX = overflows.x.before || overflows.x.after\n const hasOverflowY = overflows.y.before || overflows.y.after\n\n let reset = false\n ;['x', 'y'].forEach(key => {\n if (\n (key === 'x' && hasOverflowX && !flipped.x) ||\n (key === 'y' && hasOverflowY && !flipped.y)\n ) {\n const newPlacement = { anchor: { ...placement.anchor }, origin: { ...placement.origin } }\n const flip = key === 'x'\n ? axis === 'y' ? flipAlign : flipSide\n : axis === 'y' ? flipSide : flipAlign\n newPlacement.anchor = flip(newPlacement.anchor)\n newPlacement.origin = flip(newPlacement.origin)\n const { overflows: newOverflows } = checkOverflow(newPlacement)\n if (\n (newOverflows[key].before <= overflows[key].before &&\n newOverflows[key].after <= overflows[key].after) ||\n (newOverflows[key].before + newOverflows[key].after <\n (overflows[key].before + overflows[key].after) / 2)\n ) {\n placement = newPlacement\n reset = flipped[key] = true\n }\n }\n })\n if (reset) continue\n }\n\n // shift\n if (overflows.x.before) {\n x += overflows.x.before\n contentBox.x += overflows.x.before\n }\n if (overflows.x.after) {\n x -= overflows.x.after\n contentBox.x -= overflows.x.after\n }\n if (overflows.y.before) {\n y += overflows.y.before\n contentBox.y += overflows.y.before\n }\n if (overflows.y.after) {\n y -= overflows.y.after\n contentBox.y -= overflows.y.after\n }\n\n // size\n {\n const overflows = getOverflow(contentBox, viewport)\n available.x = viewport.width - overflows.x.before - overflows.x.after\n available.y = viewport.height - overflows.y.before - overflows.y.after\n\n x += overflows.x.before\n contentBox.x += overflows.x.before\n y += overflows.y.before\n contentBox.y += overflows.y.before\n }\n\n break\n }\n\n const axis = getAxis(placement.anchor)\n\n Object.assign(contentStyles.value, {\n '--v-overlay-anchor-origin': `${placement.anchor.side} ${placement.anchor.align}`,\n transformOrigin: `${placement.origin.side} ${placement.origin.align}`,\n // transform: `translate(${pixelRound(x)}px, ${pixelRound(y)}px)`,\n top: convertToUnit(pixelRound(y)),\n left: data.isRtl.value ? undefined : convertToUnit(pixelRound(x)),\n right: data.isRtl.value ? convertToUnit(pixelRound(-x)) : undefined,\n minWidth: convertToUnit(axis === 'y' ? Math.min(minWidth.value, targetBox.width) : minWidth.value),\n maxWidth: convertToUnit(pixelCeil(clamp(available.x, minWidth.value === Infinity ? 0 : minWidth.value, maxWidth.value))),\n maxHeight: convertToUnit(pixelCeil(clamp(available.y, minHeight.value === Infinity ? 0 : minHeight.value, maxHeight.value))),\n })\n\n return {\n available,\n contentBox,\n }\n }\n\n watch(\n () => [\n preferredAnchor.value,\n preferredOrigin.value,\n props.offset,\n props.minWidth,\n props.minHeight,\n props.maxWidth,\n props.maxHeight,\n ],\n () => updateLocation(),\n )\n\n nextTick(() => {\n const result = updateLocation()\n\n // TODO: overflowing content should only require a single updateLocation call\n // Icky hack to make sure the content is positioned consistently\n if (!result) return\n const { available, contentBox } = result\n if (contentBox.height > available.y) {\n requestAnimationFrame(() => {\n updateLocation()\n requestAnimationFrame(() => {\n updateLocation()\n })\n })\n }\n })\n\n return { updateLocation }\n}\n\nfunction pixelRound (val: number) {\n return Math.round(val * devicePixelRatio) / devicePixelRatio\n}\n\nfunction pixelCeil (val: number) {\n return Math.ceil(val * devicePixelRatio) / devicePixelRatio\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"locationStrategies.mjs","names":["useToggleScope","computed","nextTick","onScopeDispose","ref","watch","anchorToPoint","getOffset","clamp","consoleError","convertToUnit","destructComputed","flipAlign","flipCorner","flipSide","getAxis","getScrollParents","IN_BROWSER","isFixedPosition","nullifyTransforms","parseAnchor","propsFactory","Box","getOverflow","getTargetBox","locationStrategies","static","staticLocationStrategy","connected","connectedLocationStrategy","makeLocationStrategyProps","locationStrategy","type","String","Function","default","validator","val","location","origin","offset","Number","Array","useLocationStrategies","props","data","contentStyles","updateLocation","isActive","value","reset","undefined","window","addEventListener","onResize","passive","removeEventListener","e","getIntrinsicSize","el","isRtl","style","removeProperty","contentBox","x","parseFloat","right","left","y","top","activatorFixed","isArray","target","Object","assign","position","preferredAnchor","preferredOrigin","parsedAnchor","parsedOrigin","side","align","minWidth","minHeight","maxWidth","maxHeight","map","key","isNaN","Infinity","split","length","push","observe","observer","ResizeObserver","contentEl","_ref","_ref2","newTarget","newContentEl","oldTarget","oldContentEl","unobserve","immediate","disconnect","requestAnimationFrame","targetBox","scrollParents","viewportMargin","document","documentElement","getPropertyValue","viewport","reduce","box","rect","getBoundingClientRect","scrollBox","width","clientWidth","height","clientHeight","Math","max","min","bottom","placement","anchor","checkOverflow","_placement","targetPoint","contentPoint","overflows","available","flipped","resets","_x","_y","axis","hasOverflowX","before","after","hasOverflowY","forEach","newPlacement","flip","newOverflows","transformOrigin","pixelRound","pixelCeil","result","round","devicePixelRatio","ceil"],"sources":["../../../src/components/VOverlay/locationStrategies.ts"],"sourcesContent":["// Composables\nimport { useToggleScope } from '@/composables/toggleScope'\n\n// Utilities\nimport { computed, nextTick, onScopeDispose, ref, watch } from 'vue'\nimport { anchorToPoint, getOffset } from './util/point'\nimport {\n clamp,\n consoleError,\n convertToUnit,\n destructComputed,\n flipAlign,\n flipCorner,\n flipSide,\n getAxis,\n getScrollParents,\n IN_BROWSER,\n isFixedPosition,\n nullifyTransforms,\n parseAnchor,\n propsFactory,\n} from '@/util'\nimport { Box, getOverflow, getTargetBox } from '@/util/box'\n\n// Types\nimport type { PropType, Ref } from 'vue'\nimport type { Anchor } from '@/util'\n\nexport interface LocationStrategyData {\n contentEl: Ref<HTMLElement | undefined>\n target: Ref<HTMLElement | [x: number, y: number] | undefined>\n isActive: Ref<boolean>\n isRtl: Ref<boolean>\n}\n\ntype LocationStrategyFn = (\n data: LocationStrategyData,\n props: StrategyProps,\n contentStyles: Ref<Record<string, string>>\n) => undefined | { updateLocation: (e: Event) => void }\n\nconst locationStrategies = {\n static: staticLocationStrategy, // specific viewport position, usually centered\n connected: connectedLocationStrategy, // connected to a certain element\n}\n\nexport interface StrategyProps {\n locationStrategy: keyof typeof locationStrategies | LocationStrategyFn\n location: Anchor\n origin: Anchor | 'auto' | 'overlap'\n offset?: number | string | number[]\n maxHeight?: number | string\n maxWidth?: number | string\n minHeight?: number | string\n minWidth?: number | string\n}\n\nexport const makeLocationStrategyProps = propsFactory({\n locationStrategy: {\n type: [String, Function] as PropType<StrategyProps['locationStrategy']>,\n default: 'static',\n validator: (val: any) => typeof val === 'function' || val in locationStrategies,\n },\n location: {\n type: String as PropType<StrategyProps['location']>,\n default: 'bottom',\n },\n origin: {\n type: String as PropType<StrategyProps['origin']>,\n default: 'auto',\n },\n offset: [Number, String, Array] as PropType<StrategyProps['offset']>,\n}, 'VOverlay-location-strategies')\n\nexport function useLocationStrategies (\n props: StrategyProps,\n data: LocationStrategyData\n) {\n const contentStyles = ref({})\n const updateLocation = ref<(e: Event) => void>()\n\n if (IN_BROWSER) {\n useToggleScope(() => !!(data.isActive.value && props.locationStrategy), reset => {\n watch(() => props.locationStrategy, reset)\n onScopeDispose(() => {\n updateLocation.value = undefined\n })\n\n if (typeof props.locationStrategy === 'function') {\n updateLocation.value = props.locationStrategy(data, props, contentStyles)?.updateLocation\n } else {\n updateLocation.value = locationStrategies[props.locationStrategy](data, props, contentStyles)?.updateLocation\n }\n })\n\n window.addEventListener('resize', onResize, { passive: true })\n\n onScopeDispose(() => {\n window.removeEventListener('resize', onResize)\n updateLocation.value = undefined\n })\n }\n\n function onResize (e: Event) {\n updateLocation.value?.(e)\n }\n\n return {\n contentStyles,\n updateLocation,\n }\n}\n\nfunction staticLocationStrategy () {\n // TODO\n}\n\n/** Get size of element ignoring max-width/max-height */\nfunction getIntrinsicSize (el: HTMLElement, isRtl: boolean) {\n // const scrollables = new Map<Element, [number, number]>()\n // el.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 = el.style.maxWidth\n // const initialMaxHeight = el.style.maxHeight\n // el.style.removeProperty('max-width')\n // el.style.removeProperty('max-height')\n\n if (isRtl) {\n el.style.removeProperty('left')\n } else {\n el.style.removeProperty('right')\n }\n\n /* eslint-disable-next-line sonarjs/prefer-immediate-return */\n const contentBox = nullifyTransforms(el)\n\n if (isRtl) {\n contentBox.x += parseFloat(el.style.right || 0)\n } else {\n contentBox.x -= parseFloat(el.style.left || 0)\n }\n contentBox.y -= parseFloat(el.style.top || 0)\n\n // el.style.maxWidth = initialMaxWidth\n // el.style.maxHeight = initialMaxHeight\n // scrollables.forEach((position, el) => {\n // el.scrollTo(...position)\n // })\n\n return contentBox\n}\n\nfunction connectedLocationStrategy (data: LocationStrategyData, props: StrategyProps, contentStyles: Ref<Record<string, string>>) {\n const activatorFixed = Array.isArray(data.target.value) || isFixedPosition(data.target.value)\n if (activatorFixed) {\n Object.assign(contentStyles.value, {\n position: 'fixed',\n top: 0,\n [data.isRtl.value ? 'right' : 'left']: 0,\n })\n }\n\n const { preferredAnchor, preferredOrigin } = destructComputed(() => {\n const parsedAnchor = parseAnchor(props.location, data.isRtl.value)\n const parsedOrigin =\n props.origin === 'overlap' ? parsedAnchor\n : props.origin === 'auto' ? flipSide(parsedAnchor)\n : parseAnchor(props.origin, data.isRtl.value)\n\n // Some combinations of props may produce an invalid origin\n if (parsedAnchor.side === parsedOrigin.side && parsedAnchor.align === flipAlign(parsedOrigin).align) {\n return {\n preferredAnchor: flipCorner(parsedAnchor),\n preferredOrigin: flipCorner(parsedOrigin),\n }\n } else {\n return {\n preferredAnchor: parsedAnchor,\n preferredOrigin: parsedOrigin,\n }\n }\n })\n\n const [minWidth, minHeight, maxWidth, maxHeight] =\n (['minWidth', 'minHeight', 'maxWidth', 'maxHeight'] as const).map(key => {\n return computed(() => {\n const val = parseFloat(props[key]!)\n return isNaN(val) ? Infinity : val\n })\n })\n\n const offset = computed(() => {\n if (Array.isArray(props.offset)) {\n return props.offset\n }\n if (typeof props.offset === 'string') {\n const offset = props.offset.split(' ').map(parseFloat)\n if (offset.length < 2) offset.push(0)\n return offset\n }\n return typeof props.offset === 'number' ? [props.offset, 0] : [0, 0]\n })\n\n let observe = false\n const observer = new ResizeObserver(() => {\n if (observe) updateLocation()\n })\n\n watch([data.target, data.contentEl], ([newTarget, newContentEl], [oldTarget, oldContentEl]) => {\n if (oldTarget && !Array.isArray(oldTarget)) observer.unobserve(oldTarget)\n if (newTarget && !Array.isArray(newTarget)) observer.observe(newTarget)\n\n if (oldContentEl) observer.unobserve(oldContentEl)\n if (newContentEl) observer.observe(newContentEl)\n }, {\n immediate: true,\n })\n\n onScopeDispose(() => {\n observer.disconnect()\n })\n\n // eslint-disable-next-line max-statements\n function updateLocation () {\n observe = false\n requestAnimationFrame(() => {\n requestAnimationFrame(() => observe = true)\n })\n\n if (!data.target.value || !data.contentEl.value) return\n\n const targetBox = getTargetBox(data.target.value)\n const contentBox = getIntrinsicSize(data.contentEl.value, data.isRtl.value)\n const scrollParents = getScrollParents(data.contentEl.value)\n const viewportMargin = 12\n\n if (!scrollParents.length) {\n scrollParents.push(document.documentElement)\n if (!(data.contentEl.value.style.top && data.contentEl.value.style.left)) {\n contentBox.x -= parseFloat(document.documentElement.style.getPropertyValue('--v-body-scroll-x') || 0)\n contentBox.y -= parseFloat(document.documentElement.style.getPropertyValue('--v-body-scroll-y') || 0)\n }\n }\n\n const viewport = scrollParents.reduce<Box>((box: Box | undefined, el) => {\n const rect = el.getBoundingClientRect()\n const scrollBox = new Box({\n x: el === document.documentElement ? 0 : rect.x,\n y: el === document.documentElement ? 0 : rect.y,\n width: el.clientWidth,\n height: el.clientHeight,\n })\n\n if (box) {\n return new Box({\n x: Math.max(box.left, scrollBox.left),\n y: Math.max(box.top, scrollBox.top),\n width: Math.min(box.right, scrollBox.right) - Math.max(box.left, scrollBox.left),\n height: Math.min(box.bottom, scrollBox.bottom) - Math.max(box.top, scrollBox.top),\n })\n }\n return scrollBox\n }, undefined!)\n viewport.x += viewportMargin\n viewport.y += viewportMargin\n viewport.width -= viewportMargin * 2\n viewport.height -= viewportMargin * 2\n\n let placement = {\n anchor: preferredAnchor.value,\n origin: preferredOrigin.value,\n }\n\n function checkOverflow (_placement: typeof placement) {\n const box = new Box(contentBox)\n const targetPoint = anchorToPoint(_placement.anchor, targetBox)\n const contentPoint = anchorToPoint(_placement.origin, box)\n\n let { x, y } = getOffset(targetPoint, contentPoint)\n\n switch (_placement.anchor.side) {\n case 'top': y -= offset.value[0]; break\n case 'bottom': y += offset.value[0]; break\n case 'left': x -= offset.value[0]; break\n case 'right': x += offset.value[0]; break\n }\n\n switch (_placement.anchor.align) {\n case 'top': y -= offset.value[1]; break\n case 'bottom': y += offset.value[1]; break\n case 'left': x -= offset.value[1]; break\n case 'right': x += offset.value[1]; break\n }\n\n box.x += x\n box.y += y\n\n box.width = Math.min(box.width, maxWidth.value)\n box.height = Math.min(box.height, maxHeight.value)\n\n const overflows = getOverflow(box, viewport)\n\n return { overflows, x, y }\n }\n\n let x = 0; let y = 0\n const available = { x: 0, y: 0 }\n const flipped = { x: false, y: false }\n let resets = -1\n while (true) {\n if (resets++ > 10) {\n consoleError('Infinite loop detected in connectedLocationStrategy')\n break\n }\n\n const { x: _x, y: _y, overflows } = checkOverflow(placement)\n\n x += _x\n y += _y\n\n contentBox.x += _x\n contentBox.y += _y\n\n // flip\n {\n const axis = getAxis(placement.anchor)\n const hasOverflowX = overflows.x.before || overflows.x.after\n const hasOverflowY = overflows.y.before || overflows.y.after\n\n let reset = false\n ;['x', 'y'].forEach(key => {\n if (\n (key === 'x' && hasOverflowX && !flipped.x) ||\n (key === 'y' && hasOverflowY && !flipped.y)\n ) {\n const newPlacement = { anchor: { ...placement.anchor }, origin: { ...placement.origin } }\n const flip = key === 'x'\n ? axis === 'y' ? flipAlign : flipSide\n : axis === 'y' ? flipSide : flipAlign\n newPlacement.anchor = flip(newPlacement.anchor)\n newPlacement.origin = flip(newPlacement.origin)\n const { overflows: newOverflows } = checkOverflow(newPlacement)\n if (\n (newOverflows[key].before <= overflows[key].before &&\n newOverflows[key].after <= overflows[key].after) ||\n (newOverflows[key].before + newOverflows[key].after <\n (overflows[key].before + overflows[key].after) / 2)\n ) {\n placement = newPlacement\n reset = flipped[key] = true\n }\n }\n })\n if (reset) continue\n }\n\n // shift\n if (overflows.x.before) {\n x += overflows.x.before\n contentBox.x += overflows.x.before\n }\n if (overflows.x.after) {\n x -= overflows.x.after\n contentBox.x -= overflows.x.after\n }\n if (overflows.y.before) {\n y += overflows.y.before\n contentBox.y += overflows.y.before\n }\n if (overflows.y.after) {\n y -= overflows.y.after\n contentBox.y -= overflows.y.after\n }\n\n // size\n {\n const overflows = getOverflow(contentBox, viewport)\n available.x = viewport.width - overflows.x.before - overflows.x.after\n available.y = viewport.height - overflows.y.before - overflows.y.after\n\n x += overflows.x.before\n contentBox.x += overflows.x.before\n y += overflows.y.before\n contentBox.y += overflows.y.before\n }\n\n break\n }\n\n const axis = getAxis(placement.anchor)\n\n Object.assign(contentStyles.value, {\n '--v-overlay-anchor-origin': `${placement.anchor.side} ${placement.anchor.align}`,\n transformOrigin: `${placement.origin.side} ${placement.origin.align}`,\n // transform: `translate(${pixelRound(x)}px, ${pixelRound(y)}px)`,\n top: convertToUnit(pixelRound(y)),\n left: data.isRtl.value ? undefined : convertToUnit(pixelRound(x)),\n right: data.isRtl.value ? convertToUnit(pixelRound(-x)) : undefined,\n minWidth: convertToUnit(axis === 'y' ? Math.min(minWidth.value, targetBox.width) : minWidth.value),\n maxWidth: convertToUnit(pixelCeil(clamp(available.x, minWidth.value === Infinity ? 0 : minWidth.value, maxWidth.value))),\n maxHeight: convertToUnit(pixelCeil(clamp(available.y, minHeight.value === Infinity ? 0 : minHeight.value, maxHeight.value))),\n })\n\n return {\n available,\n contentBox,\n }\n }\n\n watch(\n () => [\n preferredAnchor.value,\n preferredOrigin.value,\n props.offset,\n props.minWidth,\n props.minHeight,\n props.maxWidth,\n props.maxHeight,\n ],\n () => updateLocation(),\n )\n\n nextTick(() => {\n const result = updateLocation()\n\n // TODO: overflowing content should only require a single updateLocation call\n // Icky hack to make sure the content is positioned consistently\n if (!result) return\n const { available, contentBox } = result\n if (contentBox.height > available.y) {\n requestAnimationFrame(() => {\n updateLocation()\n requestAnimationFrame(() => {\n updateLocation()\n })\n })\n }\n })\n\n return { updateLocation }\n}\n\nfunction pixelRound (val: number) {\n return Math.round(val * devicePixelRatio) / devicePixelRatio\n}\n\nfunction pixelCeil (val: number) {\n return Math.ceil(val * devicePixelRatio) / devicePixelRatio\n}\n"],"mappings":"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"}
@@ -39,11 +39,11 @@ function closeScrollStrategy(data) {
39
39
  function onScroll(e) {
40
40
  data.isActive.value = false;
41
41
  }
42
- bindScroll(data.activatorEl.value ?? data.contentEl.value, onScroll);
42
+ bindScroll(data.targetEl.value ?? data.contentEl.value, onScroll);
43
43
  }
44
44
  function blockScrollStrategy(data, props) {
45
45
  const offsetParent = data.root.value?.offsetParent;
46
- const scrollElements = [...new Set([...getScrollParents(data.activatorEl.value, props.contained ? offsetParent : undefined), ...getScrollParents(data.contentEl.value, props.contained ? offsetParent : undefined)])].filter(el => !el.classList.contains('v-overlay-scroll-blocked'));
46
+ const scrollElements = [...new Set([...getScrollParents(data.targetEl.value, props.contained ? offsetParent : undefined), ...getScrollParents(data.contentEl.value, props.contained ? offsetParent : undefined)])].filter(el => !el.classList.contains('v-overlay-scroll-blocked'));
47
47
  const scrollbarWidth = window.innerWidth - document.documentElement.offsetWidth;
48
48
  const scrollableParent = (el => hasScrollbar(el) && el)(offsetParent || document.documentElement);
49
49
  if (scrollableParent) {
@@ -87,7 +87,7 @@ function repositionScrollStrategy(data, props, scope) {
87
87
  }
88
88
  ric = (typeof requestIdleCallback === 'undefined' ? cb => cb() : requestIdleCallback)(() => {
89
89
  scope.run(() => {
90
- bindScroll(data.activatorEl.value ?? data.contentEl.value, e => {
90
+ bindScroll(data.targetEl.value ?? data.contentEl.value, e => {
91
91
  if (slow) {
92
92
  // If the position calculation is slow,
93
93
  // defer updates until scrolling is finished.
@@ -1 +1 @@
1
- {"version":3,"file":"scrollStrategies.mjs","names":["effectScope","nextTick","onScopeDispose","watchEffect","requestNewFrame","convertToUnit","getScrollParents","hasScrollbar","IN_BROWSER","propsFactory","scrollStrategies","none","close","closeScrollStrategy","block","blockScrollStrategy","reposition","repositionScrollStrategy","makeScrollStrategyProps","scrollStrategy","type","String","Function","default","validator","val","useScrollStrategies","props","data","scope","stop","isActive","value","active","run","onScroll","e","bindScroll","activatorEl","contentEl","offsetParent","root","scrollElements","Set","contained","undefined","filter","el","classList","contains","scrollbarWidth","window","innerWidth","document","documentElement","offsetWidth","scrollableParent","add","forEach","i","style","setProperty","scrollLeft","scrollTop","x","parseFloat","getPropertyValue","y","removeProperty","remove","slow","raf","ric","update","start","performance","now","updateLocation","time","requestIdleCallback","cb","cancelAnimationFrame","requestAnimationFrame","cancelIdleCallback","addEventListener","passive","removeEventListener"],"sources":["../../../src/components/VOverlay/scrollStrategies.ts"],"sourcesContent":["// Utilities\nimport { effectScope, nextTick, onScopeDispose, watchEffect } from 'vue'\nimport { requestNewFrame } from './requestNewFrame'\nimport { convertToUnit, getScrollParents, hasScrollbar, IN_BROWSER, propsFactory } from '@/util'\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 updateLocation: Ref<((e: Event) => void) | undefined>\n}\n\ntype ScrollStrategyFn = (data: ScrollStrategyData, props: StrategyProps, scope: EffectScope) => void\n\nconst scrollStrategies = {\n none: null,\n close: closeScrollStrategy,\n block: blockScrollStrategy,\n reposition: repositionScrollStrategy,\n}\n\nexport interface StrategyProps {\n scrollStrategy: keyof typeof scrollStrategies | ScrollStrategyFn\n contained: boolean | undefined\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}, 'VOverlay-scroll-strategies')\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.active && scope.run(() => {\n if (typeof props.scrollStrategy === 'function') {\n props.scrollStrategy(data, props, scope!)\n } else {\n scrollStrategies[props.scrollStrategy]?.(data, props, scope!)\n }\n })\n })\n\n onScopeDispose(() => {\n scope?.stop()\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, props: StrategyProps) {\n const offsetParent = data.root.value?.offsetParent\n const scrollElements = [...new Set([\n ...getScrollParents(data.activatorEl.value, props.contained ? offsetParent : undefined),\n ...getScrollParents(data.contentEl.value, props.contained ? offsetParent : undefined),\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)(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\n if (el !== document.documentElement) {\n el.style.setProperty('--v-scrollbar-offset', convertToUnit(scrollbarWidth))\n }\n\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, props: StrategyProps, scope: EffectScope) {\n let slow = false\n let raf = -1\n let ric = -1\n\n function update (e: Event) {\n requestNewFrame(() => {\n const start = performance.now()\n data.updateLocation.value?.(e)\n const time = performance.now() - start\n slow = time / (1000 / 60) > 2\n })\n }\n\n ric = (typeof requestIdleCallback === 'undefined' ? (cb: Function) => cb() : requestIdleCallback)(() => {\n scope.run(() => {\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\n onScopeDispose(() => {\n typeof cancelIdleCallback !== 'undefined' && cancelIdleCallback(ric)\n cancelAnimationFrame(raf)\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"],"mappings":"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"}
1
+ {"version":3,"file":"scrollStrategies.mjs","names":["effectScope","nextTick","onScopeDispose","watchEffect","requestNewFrame","convertToUnit","getScrollParents","hasScrollbar","IN_BROWSER","propsFactory","scrollStrategies","none","close","closeScrollStrategy","block","blockScrollStrategy","reposition","repositionScrollStrategy","makeScrollStrategyProps","scrollStrategy","type","String","Function","default","validator","val","useScrollStrategies","props","data","scope","stop","isActive","value","active","run","onScroll","e","bindScroll","targetEl","contentEl","offsetParent","root","scrollElements","Set","contained","undefined","filter","el","classList","contains","scrollbarWidth","window","innerWidth","document","documentElement","offsetWidth","scrollableParent","add","forEach","i","style","setProperty","scrollLeft","scrollTop","x","parseFloat","getPropertyValue","y","removeProperty","remove","slow","raf","ric","update","start","performance","now","updateLocation","time","requestIdleCallback","cb","cancelAnimationFrame","requestAnimationFrame","cancelIdleCallback","addEventListener","passive","removeEventListener"],"sources":["../../../src/components/VOverlay/scrollStrategies.ts"],"sourcesContent":["// Utilities\nimport { effectScope, nextTick, onScopeDispose, watchEffect } from 'vue'\nimport { requestNewFrame } from './requestNewFrame'\nimport { convertToUnit, getScrollParents, hasScrollbar, IN_BROWSER, propsFactory } from '@/util'\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 targetEl: Ref<HTMLElement | undefined>\n isActive: Ref<boolean>\n updateLocation: Ref<((e: Event) => void) | undefined>\n}\n\ntype ScrollStrategyFn = (data: ScrollStrategyData, props: StrategyProps, scope: EffectScope) => void\n\nconst scrollStrategies = {\n none: null,\n close: closeScrollStrategy,\n block: blockScrollStrategy,\n reposition: repositionScrollStrategy,\n}\n\nexport interface StrategyProps {\n scrollStrategy: keyof typeof scrollStrategies | ScrollStrategyFn\n contained: boolean | undefined\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}, 'VOverlay-scroll-strategies')\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.active && scope.run(() => {\n if (typeof props.scrollStrategy === 'function') {\n props.scrollStrategy(data, props, scope!)\n } else {\n scrollStrategies[props.scrollStrategy]?.(data, props, scope!)\n }\n })\n })\n\n onScopeDispose(() => {\n scope?.stop()\n })\n}\n\nfunction closeScrollStrategy (data: ScrollStrategyData) {\n function onScroll (e: Event) {\n data.isActive.value = false\n }\n\n bindScroll(data.targetEl.value ?? data.contentEl.value, onScroll)\n}\n\nfunction blockScrollStrategy (data: ScrollStrategyData, props: StrategyProps) {\n const offsetParent = data.root.value?.offsetParent\n const scrollElements = [...new Set([\n ...getScrollParents(data.targetEl.value, props.contained ? offsetParent : undefined),\n ...getScrollParents(data.contentEl.value, props.contained ? offsetParent : undefined),\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)(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\n if (el !== document.documentElement) {\n el.style.setProperty('--v-scrollbar-offset', convertToUnit(scrollbarWidth))\n }\n\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, props: StrategyProps, scope: EffectScope) {\n let slow = false\n let raf = -1\n let ric = -1\n\n function update (e: Event) {\n requestNewFrame(() => {\n const start = performance.now()\n data.updateLocation.value?.(e)\n const time = performance.now() - start\n slow = time / (1000 / 60) > 2\n })\n }\n\n ric = (typeof requestIdleCallback === 'undefined' ? (cb: Function) => cb() : requestIdleCallback)(() => {\n scope.run(() => {\n bindScroll(data.targetEl.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\n onScopeDispose(() => {\n typeof cancelIdleCallback !== 'undefined' && cancelIdleCallback(ric)\n cancelAnimationFrame(raf)\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"],"mappings":"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"}