vuetify 3.3.4 → 3.3.6

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 (94) hide show
  1. package/dist/json/attributes.json +4 -12
  2. package/dist/json/importMap.json +20 -20
  3. package/dist/json/tags.json +0 -2
  4. package/dist/json/web-types.json +7 -27
  5. package/dist/vuetify-labs.css +49 -27
  6. package/dist/vuetify-labs.d.ts +36 -98
  7. package/dist/vuetify-labs.esm.js +85 -53
  8. package/dist/vuetify-labs.esm.js.map +1 -1
  9. package/dist/vuetify-labs.js +85 -53
  10. package/dist/vuetify-labs.min.css +2 -2
  11. package/dist/vuetify.css +66 -43
  12. package/dist/vuetify.d.ts +5 -5
  13. package/dist/vuetify.esm.js +43 -34
  14. package/dist/vuetify.esm.js.map +1 -1
  15. package/dist/vuetify.js +43 -34
  16. package/dist/vuetify.js.map +1 -1
  17. package/dist/vuetify.min.css +2 -2
  18. package/dist/vuetify.min.js +21 -22
  19. package/dist/vuetify.min.js.map +1 -1
  20. package/lib/components/VAppBar/VAppBar.mjs +12 -9
  21. package/lib/components/VAppBar/VAppBar.mjs.map +1 -1
  22. package/lib/components/VAutocomplete/VAutocomplete.css +12 -4
  23. package/lib/components/VAutocomplete/VAutocomplete.sass +17 -9
  24. package/lib/components/VAutocomplete/_variables.scss +1 -0
  25. package/lib/components/VBreadcrumbs/VBreadcrumbs.css +4 -0
  26. package/lib/components/VBreadcrumbs/VBreadcrumbs.mjs +1 -1
  27. package/lib/components/VBreadcrumbs/VBreadcrumbs.mjs.map +1 -1
  28. package/lib/components/VBreadcrumbs/VBreadcrumbs.sass +4 -0
  29. package/lib/components/VBreadcrumbs/VBreadcrumbsItem.mjs +8 -7
  30. package/lib/components/VBreadcrumbs/VBreadcrumbsItem.mjs.map +1 -1
  31. package/lib/components/VBtn/VBtn.css +1 -1
  32. package/lib/components/VBtn/VBtn.sass +1 -1
  33. package/lib/components/VCombobox/VCombobox.css +12 -4
  34. package/lib/components/VCombobox/VCombobox.sass +17 -9
  35. package/lib/components/VCombobox/_variables.scss +1 -0
  36. package/lib/components/VFooter/VFooter.mjs +4 -2
  37. package/lib/components/VFooter/VFooter.mjs.map +1 -1
  38. package/lib/components/VNavigationDrawer/VNavigationDrawer.mjs +1 -1
  39. package/lib/components/VNavigationDrawer/VNavigationDrawer.mjs.map +1 -1
  40. package/lib/components/VOverlay/VOverlay.mjs +1 -1
  41. package/lib/components/VOverlay/VOverlay.mjs.map +1 -1
  42. package/lib/components/VSelect/VSelect.css +4 -3
  43. package/lib/components/VSelect/VSelect.sass +10 -12
  44. package/lib/components/VSlider/VSliderThumb.mjs +6 -2
  45. package/lib/components/VSlider/VSliderThumb.mjs.map +1 -1
  46. package/lib/components/VTextField/VTextField.css +2 -0
  47. package/lib/components/VTextField/VTextField.mjs +2 -4
  48. package/lib/components/VTextField/VTextField.mjs.map +1 -1
  49. package/lib/components/VTextField/VTextField.sass +3 -1
  50. package/lib/composables/validation.mjs +2 -2
  51. package/lib/composables/validation.mjs.map +1 -1
  52. package/lib/composables/virtual.mjs +7 -5
  53. package/lib/composables/virtual.mjs.map +1 -1
  54. package/lib/entry-bundler.mjs +1 -1
  55. package/lib/framework.mjs +1 -1
  56. package/lib/iconsets/fa.mjs +2 -2
  57. package/lib/iconsets/fa.mjs.map +1 -1
  58. package/lib/iconsets/fa4.mjs +2 -2
  59. package/lib/iconsets/fa4.mjs.map +1 -1
  60. package/lib/index.d.mts +5 -5
  61. package/lib/labs/VDataTable/composables/sort.mjs +4 -1
  62. package/lib/labs/VDataTable/composables/sort.mjs.map +1 -1
  63. package/lib/labs/VDatePicker/VDatePicker.css +3 -5
  64. package/lib/labs/VDatePicker/VDatePicker.mjs +12 -10
  65. package/lib/labs/VDatePicker/VDatePicker.mjs.map +1 -1
  66. package/lib/labs/VDatePicker/VDatePicker.sass +3 -5
  67. package/lib/labs/VDatePicker/VDatePickerControls.css +3 -1
  68. package/lib/labs/VDatePicker/VDatePickerControls.mjs +1 -1
  69. package/lib/labs/VDatePicker/VDatePickerControls.mjs.map +1 -1
  70. package/lib/labs/VDatePicker/VDatePickerControls.sass +3 -3
  71. package/lib/labs/VDatePicker/VDatePickerMonth.css +0 -1
  72. package/lib/labs/VDatePicker/VDatePickerMonth.mjs +0 -5
  73. package/lib/labs/VDatePicker/VDatePickerMonth.mjs.map +1 -1
  74. package/lib/labs/VDatePicker/VDatePickerMonth.sass +0 -1
  75. package/lib/labs/VDatePicker/VDatePickerTitle.sass +1 -1
  76. package/lib/labs/VDatePicker/VDatePickerYears.css +1 -1
  77. package/lib/labs/VDatePicker/VDatePickerYears.sass +1 -1
  78. package/lib/labs/VDatePicker/_variables.scss +0 -5
  79. package/lib/labs/VDatePicker/index.d.mts +36 -98
  80. package/lib/labs/VDateRangePicker/index.d.mts +34 -44
  81. package/lib/labs/VInfiniteScroll/VInfiniteScroll.mjs +24 -4
  82. package/lib/labs/VInfiniteScroll/VInfiniteScroll.mjs.map +1 -1
  83. package/lib/labs/VPicker/VPicker.css +1 -1
  84. package/lib/labs/VPicker/VPicker.sass +1 -1
  85. package/lib/labs/VPicker/_variables.scss +2 -2
  86. package/lib/labs/components.d.mts +36 -98
  87. package/lib/util/helpers.mjs +3 -0
  88. package/lib/util/helpers.mjs.map +1 -1
  89. package/lib/util/injectSelf.mjs +1 -0
  90. package/lib/util/injectSelf.mjs.map +1 -1
  91. package/package.json +2 -2
  92. package/lib/labs/VDatePicker/VDatePickerTable.sass +0 -84
  93. package/lib/labs/VDatePicker/mixins/date-picker-table.mjs +0 -210
  94. package/lib/labs/VDatePicker/mixins/date-picker-table.mjs.map +0 -1
@@ -21,7 +21,7 @@ declare const VDateRangeCard: {
21
21
  })> | undefined;
22
22
  inputMode?: "calendar" | "keyboard" | undefined;
23
23
  multiple?: boolean | undefined;
24
- range?: boolean | "end" | "start" | undefined;
24
+ range?: string | boolean | undefined;
25
25
  modelValue?: any[] | undefined;
26
26
  collapseIcon?: string | undefined;
27
27
  expandIcon?: string | undefined;
@@ -130,11 +130,6 @@ declare const VDateRangeCard: {
130
130
  showAdjacentMonths: BooleanConstructor;
131
131
  hideWeekdays: BooleanConstructor;
132
132
  showWeek: BooleanConstructor;
133
- range: {
134
- default: boolean;
135
- type: vue.PropType<boolean | "end" | "start">;
136
- validator: (v: any) => boolean;
137
- };
138
133
  hoverDate: null;
139
134
  multiple: BooleanConstructor;
140
135
  side: {
@@ -160,6 +155,11 @@ declare const VDateRangeCard: {
160
155
  type: StringConstructor[];
161
156
  default: string;
162
157
  };
158
+ range: {
159
+ default: boolean;
160
+ type: (StringConstructor | BooleanConstructor)[];
161
+ validator: (v: any) => boolean;
162
+ };
163
163
  inputMode: {
164
164
  type: vue.PropType<"calendar" | "keyboard">;
165
165
  default: string;
@@ -182,7 +182,7 @@ declare const VDateRangeCard: {
182
182
  })>;
183
183
  inputMode: "calendar" | "keyboard";
184
184
  multiple: boolean;
185
- range: boolean | "end" | "start";
185
+ range: string | boolean;
186
186
  modelValue: any[];
187
187
  collapseIcon: string;
188
188
  expandIcon: string;
@@ -240,11 +240,6 @@ declare const VDateRangeCard: {
240
240
  showAdjacentMonths: BooleanConstructor;
241
241
  hideWeekdays: BooleanConstructor;
242
242
  showWeek: BooleanConstructor;
243
- range: {
244
- default: boolean;
245
- type: vue.PropType<boolean | "end" | "start">;
246
- validator: (v: any) => boolean;
247
- };
248
243
  hoverDate: null;
249
244
  multiple: BooleanConstructor;
250
245
  side: {
@@ -270,6 +265,11 @@ declare const VDateRangeCard: {
270
265
  type: StringConstructor[];
271
266
  default: string;
272
267
  };
268
+ range: {
269
+ default: boolean;
270
+ type: (StringConstructor | BooleanConstructor)[];
271
+ validator: (v: any) => boolean;
272
+ };
273
273
  inputMode: {
274
274
  type: vue.PropType<"calendar" | "keyboard">;
275
275
  default: string;
@@ -312,11 +312,6 @@ declare const VDateRangeCard: {
312
312
  showAdjacentMonths: BooleanConstructor;
313
313
  hideWeekdays: BooleanConstructor;
314
314
  showWeek: BooleanConstructor;
315
- range: {
316
- default: boolean;
317
- type: vue.PropType<boolean | "end" | "start">;
318
- validator: (v: any) => boolean;
319
- };
320
315
  hoverDate: null;
321
316
  multiple: BooleanConstructor;
322
317
  side: {
@@ -342,6 +337,11 @@ declare const VDateRangeCard: {
342
337
  type: StringConstructor[];
343
338
  default: string;
344
339
  };
340
+ range: {
341
+ default: boolean;
342
+ type: (StringConstructor | BooleanConstructor)[];
343
+ validator: (v: any) => boolean;
344
+ };
345
345
  inputMode: {
346
346
  type: vue.PropType<"calendar" | "keyboard">;
347
347
  default: string;
@@ -364,7 +364,7 @@ declare const VDateRangeCard: {
364
364
  })>;
365
365
  inputMode: "calendar" | "keyboard";
366
366
  multiple: boolean;
367
- range: boolean | "end" | "start";
367
+ range: string | boolean;
368
368
  modelValue: any[];
369
369
  collapseIcon: string;
370
370
  expandIcon: string;
@@ -402,11 +402,6 @@ declare const VDateRangeCard: {
402
402
  showAdjacentMonths: BooleanConstructor;
403
403
  hideWeekdays: BooleanConstructor;
404
404
  showWeek: BooleanConstructor;
405
- range: {
406
- default: boolean;
407
- type: vue.PropType<boolean | "end" | "start">;
408
- validator: (v: any) => boolean;
409
- };
410
405
  hoverDate: null;
411
406
  multiple: BooleanConstructor;
412
407
  side: {
@@ -432,6 +427,11 @@ declare const VDateRangeCard: {
432
427
  type: StringConstructor[];
433
428
  default: string;
434
429
  };
430
+ range: {
431
+ default: boolean;
432
+ type: (StringConstructor | BooleanConstructor)[];
433
+ validator: (v: any) => boolean;
434
+ };
435
435
  inputMode: {
436
436
  type: vue.PropType<"calendar" | "keyboard">;
437
437
  default: string;
@@ -464,11 +464,6 @@ declare const VDateRangeCard: {
464
464
  showAdjacentMonths: BooleanConstructor;
465
465
  hideWeekdays: BooleanConstructor;
466
466
  showWeek: BooleanConstructor;
467
- range: {
468
- default: boolean;
469
- type: vue.PropType<boolean | "end" | "start">;
470
- validator: (v: any) => boolean;
471
- };
472
467
  hoverDate: null;
473
468
  multiple: BooleanConstructor;
474
469
  side: {
@@ -494,6 +489,11 @@ declare const VDateRangeCard: {
494
489
  type: StringConstructor[];
495
490
  default: string;
496
491
  };
492
+ range: {
493
+ default: boolean;
494
+ type: (StringConstructor | BooleanConstructor)[];
495
+ validator: (v: any) => boolean;
496
+ };
497
497
  inputMode: {
498
498
  type: vue.PropType<"calendar" | "keyboard">;
499
499
  default: string;
@@ -512,7 +512,6 @@ declare const VDateRangePicker: {
512
512
  style?: vue.StyleValue | undefined;
513
513
  multiple?: boolean | undefined;
514
514
  landscape?: boolean | undefined;
515
- range?: boolean | "end" | "start" | undefined;
516
515
  tag?: string | undefined;
517
516
  rounded?: string | number | boolean | undefined;
518
517
  modelValue?: any[] | undefined;
@@ -540,6 +539,7 @@ declare const VDateRangePicker: {
540
539
  title?: string | undefined;
541
540
  inputMode?: string | undefined;
542
541
  class?: any;
542
+ range?: any;
543
543
  $children?: vue.VNodeChild | (() => vue.VNodeChild) | {
544
544
  default?: (() => vue.VNodeChild) | undefined;
545
545
  };
@@ -622,7 +622,6 @@ declare const VDateRangePicker: {
622
622
  style: vue.StyleValue;
623
623
  multiple: boolean;
624
624
  landscape: boolean;
625
- range: boolean | "end" | "start";
626
625
  tag: string;
627
626
  modelValue: any[];
628
627
  closeIcon: string;
@@ -649,6 +648,7 @@ declare const VDateRangePicker: {
649
648
  title?: string | undefined;
650
649
  inputMode?: string | undefined;
651
650
  class?: any;
651
+ range?: any;
652
652
  elevation?: string | number | undefined;
653
653
  format?: string | undefined;
654
654
  side?: string | undefined;
@@ -685,7 +685,6 @@ declare const VDateRangePicker: {
685
685
  style: vue.StyleValue;
686
686
  multiple: boolean;
687
687
  landscape: boolean;
688
- range: boolean | "end" | "start";
689
688
  tag: string;
690
689
  rounded: string | number | boolean;
691
690
  modelValue: any[];
@@ -729,7 +728,6 @@ declare const VDateRangePicker: {
729
728
  style: vue.StyleValue;
730
729
  multiple: boolean;
731
730
  landscape: boolean;
732
- range: boolean | "end" | "start";
733
731
  tag: string;
734
732
  modelValue: any[];
735
733
  closeIcon: string;
@@ -756,6 +754,7 @@ declare const VDateRangePicker: {
756
754
  title?: string | undefined;
757
755
  inputMode?: string | undefined;
758
756
  class?: any;
757
+ range?: any;
759
758
  elevation?: string | number | undefined;
760
759
  format?: string | undefined;
761
760
  side?: string | undefined;
@@ -789,7 +788,6 @@ declare const VDateRangePicker: {
789
788
  style: vue.StyleValue;
790
789
  multiple: boolean;
791
790
  landscape: boolean;
792
- range: boolean | "end" | "start";
793
791
  tag: string;
794
792
  modelValue: any[];
795
793
  closeIcon: string;
@@ -816,6 +814,7 @@ declare const VDateRangePicker: {
816
814
  title?: string | undefined;
817
815
  inputMode?: string | undefined;
818
816
  class?: any;
817
+ range?: any;
819
818
  elevation?: string | number | undefined;
820
819
  format?: string | undefined;
821
820
  side?: string | undefined;
@@ -852,7 +851,6 @@ declare const VDateRangePicker: {
852
851
  style: vue.StyleValue;
853
852
  multiple: boolean;
854
853
  landscape: boolean;
855
- range: boolean | "end" | "start";
856
854
  tag: string;
857
855
  rounded: string | number | boolean;
858
856
  modelValue: any[];
@@ -900,11 +898,6 @@ declare const VDateRangePicker: {
900
898
  default: boolean;
901
899
  };
902
900
  showWeek: BooleanConstructor;
903
- range: {
904
- default: boolean;
905
- type: PropType<boolean | "end" | "start">;
906
- validator: (v: any) => boolean;
907
- };
908
901
  hoverDate: null;
909
902
  multiple: {
910
903
  type: PropType<boolean>;
@@ -929,6 +922,7 @@ declare const VDateRangePicker: {
929
922
  };
930
923
  showInputSwitch: BooleanConstructor;
931
924
  inputMode: StringConstructor;
925
+ range: null;
932
926
  location: PropType<Anchor>;
933
927
  height: (StringConstructor | NumberConstructor)[];
934
928
  width: (StringConstructor | NumberConstructor)[];
@@ -995,11 +989,6 @@ declare const VDateRangePicker: {
995
989
  default: boolean;
996
990
  };
997
991
  showWeek: BooleanConstructor;
998
- range: {
999
- default: boolean;
1000
- type: PropType<boolean | "end" | "start">;
1001
- validator: (v: any) => boolean;
1002
- };
1003
992
  hoverDate: null;
1004
993
  multiple: {
1005
994
  type: PropType<boolean>;
@@ -1024,6 +1013,7 @@ declare const VDateRangePicker: {
1024
1013
  };
1025
1014
  showInputSwitch: BooleanConstructor;
1026
1015
  inputMode: StringConstructor;
1016
+ range: null;
1027
1017
  location: PropType<Anchor>;
1028
1018
  height: (StringConstructor | NumberConstructor)[];
1029
1019
  width: (StringConstructor | NumberConstructor)[];
@@ -51,7 +51,7 @@ export const VInfiniteScrollIntersect = defineComponent({
51
51
  rootMargin: String
52
52
  },
53
53
  emits: {
54
- intersect: side => true
54
+ intersect: (side, isIntersecting) => true
55
55
  },
56
56
  setup(props, _ref) {
57
57
  let {
@@ -65,7 +65,7 @@ export const VInfiniteScrollIntersect = defineComponent({
65
65
  rootMargin: props.rootMargin
66
66
  } : undefined);
67
67
  watch(isIntersecting, async val => {
68
- if (val) emit('intersect', props.side);
68
+ emit('intersect', props.side, val);
69
69
  });
70
70
  useRender(() => _createVNode("div", {
71
71
  "class": "v-infinite-scroll-intersect",
@@ -89,6 +89,7 @@ export const VInfiniteScroll = genericComponent()({
89
89
  const startStatus = ref('ok');
90
90
  const endStatus = ref('ok');
91
91
  const margin = computed(() => convertToUnit(props.margin));
92
+ const isIntersecting = ref(false);
92
93
  function setScrollAmount(amount) {
93
94
  if (!rootEl.value) return;
94
95
  const property = props.direction === 'vertical' ? 'scrollTop' : 'scrollLeft';
@@ -128,7 +129,14 @@ export const VInfiniteScroll = genericComponent()({
128
129
  return side === 'start' ? startStatus.value : endStatus.value;
129
130
  }
130
131
  let previousScrollSize = 0;
131
- function handleIntersect(side) {
132
+ function handleIntersect(side, _isIntersecting) {
133
+ isIntersecting.value = _isIntersecting;
134
+ if (isIntersecting.value) {
135
+ intersecting(side);
136
+ }
137
+ }
138
+ function intersecting(side) {
139
+ if (props.mode !== 'manual' && !isIntersecting.value) return;
132
140
  const status = getStatus(side);
133
141
  if (!rootEl.value || status === 'loading') return;
134
142
  previousScrollSize = getScrollSize();
@@ -136,9 +144,21 @@ export const VInfiniteScroll = genericComponent()({
136
144
  function done(status) {
137
145
  setStatus(side, status);
138
146
  nextTick(() => {
147
+ if (status === 'empty' || status === 'error') return;
139
148
  if (status === 'ok' && side === 'start') {
140
149
  setScrollAmount(getScrollSize() - previousScrollSize + getScrollAmount());
141
150
  }
151
+ if (props.mode !== 'manual') {
152
+ nextTick(() => {
153
+ window.requestAnimationFrame(() => {
154
+ window.requestAnimationFrame(() => {
155
+ window.requestAnimationFrame(() => {
156
+ intersecting(side);
157
+ });
158
+ });
159
+ });
160
+ });
161
+ }
142
162
  });
143
163
  }
144
164
  emit('load', {
@@ -151,7 +171,7 @@ export const VInfiniteScroll = genericComponent()({
151
171
  } = useLocale();
152
172
  function renderSide(side, status) {
153
173
  if (props.side !== side && props.side !== 'both') return;
154
- const onClick = () => handleIntersect(side);
174
+ const onClick = () => intersecting(side);
155
175
  const slotProps = {
156
176
  side,
157
177
  props: {
@@ -1 +1 @@
1
- {"version":3,"file":"VInfiniteScroll.mjs","names":["VBtn","VProgressCircular","makeDimensionProps","useDimension","useIntersectionObserver","useLocale","makeTagProps","computed","nextTick","onMounted","ref","watch","convertToUnit","defineComponent","genericComponent","propsFactory","useRender","makeVInfiniteScrollProps","color","String","direction","type","default","validator","v","includes","side","mode","margin","Number","loadMoreText","emptyText","VInfiniteScrollIntersect","name","props","required","rootRef","rootMargin","emits","intersect","setup","_ref","emit","intersectionRef","isIntersecting","entries","root","undefined","val","_createVNode","_createTextVNode","VInfiniteScroll","load","options","_ref2","slots","rootEl","startStatus","endStatus","setScrollAmount","amount","value","property","getScrollAmount","getScrollSize","getContainerSize","setStatus","status","getStatus","previousScrollSize","handleIntersect","done","t","renderSide","onClick","slotProps","error","empty","loading","dimensionStyles","Tag","tag","hasStartIntersect","hasEndIntersect","intersectMode"],"sources":["../../../src/labs/VInfiniteScroll/VInfiniteScroll.tsx"],"sourcesContent":["// Styles\nimport './VInfiniteScroll.sass'\n\n// Components\nimport { VBtn } from '@/components/VBtn'\nimport { VProgressCircular } from '@/components/VProgressCircular'\n\n// Composables\nimport { makeDimensionProps, useDimension } from '@/composables/dimensions'\nimport { useIntersectionObserver } from '@/composables/intersectionObserver'\nimport { useLocale } from '@/composables/locale'\nimport { makeTagProps } from '@/composables/tag'\n\n// Utilities\nimport { computed, nextTick, onMounted, ref, watch } from 'vue'\nimport { convertToUnit, defineComponent, genericComponent, propsFactory, useRender } from '@/util'\n\n// Types\nimport type { PropType } from 'vue'\n\nexport type InfiniteScrollSide = 'start' | 'end' | 'both'\nexport type InfiniteScrollStatus = 'ok' | 'empty' | 'loading' | 'error'\n\ntype InfiniteScrollSlot = {\n side: InfiniteScrollSide\n props: Record<string, any>\n}\n\ntype VInfiniteScrollSlots = {\n default: never\n loading: InfiniteScrollSlot\n error: InfiniteScrollSlot\n empty: InfiniteScrollSlot\n 'load-more': InfiniteScrollSlot\n}\n\nexport const makeVInfiniteScrollProps = propsFactory({\n color: String,\n direction: {\n type: String as PropType<'vertical' | 'horizontal'>,\n default: 'vertical',\n validator: (v: any) => ['vertical', 'horizontal'].includes(v),\n },\n side: {\n type: String as PropType<InfiniteScrollSide>,\n default: 'end',\n validator: (v: any) => ['start', 'end', 'both'].includes(v),\n },\n mode: {\n type: String as PropType<'intersect' | 'manual'>,\n default: 'intersect',\n validator: (v: any) => ['intersect', 'manual'].includes(v),\n },\n margin: [Number, String],\n loadMoreText: {\n type: String,\n default: '$vuetify.infiniteScroll.loadMore',\n },\n emptyText: {\n type: String,\n default: '$vuetify.infiniteScroll.empty',\n },\n\n ...makeDimensionProps(),\n ...makeTagProps(),\n}, 'VInfiniteScroll')\n\nexport const VInfiniteScrollIntersect = defineComponent({\n name: 'VInfiniteScrollIntersect',\n\n props: {\n side: {\n type: String as PropType<InfiniteScrollSide>,\n required: true,\n },\n rootRef: null,\n rootMargin: String,\n },\n\n emits: {\n intersect: (side: InfiniteScrollSide) => true,\n },\n\n setup (props, { emit }) {\n const { intersectionRef, isIntersecting } = useIntersectionObserver(entries => {\n }, props.rootMargin ? {\n root: props.rootRef,\n rootMargin: props.rootMargin,\n } : undefined)\n\n watch(isIntersecting, async val => {\n if (val) emit('intersect', props.side)\n })\n\n useRender(() => (\n <div class=\"v-infinite-scroll-intersect\" ref={ intersectionRef }>&nbsp;</div>\n ))\n\n return {}\n },\n})\n\nexport const VInfiniteScroll = genericComponent<VInfiniteScrollSlots>()({\n name: 'VInfiniteScroll',\n\n props: makeVInfiniteScrollProps(),\n\n emits: {\n load: (options: { side: InfiniteScrollSide, done: (status: InfiniteScrollStatus) => void }) => true,\n },\n\n setup (props, { slots, emit }) {\n const rootEl = ref<HTMLDivElement>()\n const startStatus = ref<InfiniteScrollStatus>('ok')\n const endStatus = ref<InfiniteScrollStatus>('ok')\n const margin = computed(() => convertToUnit(props.margin))\n\n function setScrollAmount (amount: number) {\n if (!rootEl.value) return\n\n const property = props.direction === 'vertical' ? 'scrollTop' : 'scrollLeft'\n rootEl.value[property] = amount\n }\n\n function getScrollAmount () {\n if (!rootEl.value) return 0\n\n const property = props.direction === 'vertical' ? 'scrollTop' : 'scrollLeft'\n return rootEl.value[property]\n }\n\n function getScrollSize () {\n if (!rootEl.value) return 0\n\n const property = props.direction === 'vertical' ? 'scrollHeight' : 'scrollWidth'\n return rootEl.value[property]\n }\n\n function getContainerSize () {\n if (!rootEl.value) return 0\n\n const property = props.direction === 'vertical' ? 'clientHeight' : 'clientWidth'\n return rootEl.value[property]\n }\n\n onMounted(() => {\n if (!rootEl.value) return\n\n if (props.side === 'start') {\n setScrollAmount(getScrollSize())\n } else if (props.side === 'both') {\n setScrollAmount(getScrollSize() / 2 - getContainerSize() / 2)\n }\n })\n\n function setStatus (side: InfiniteScrollSide, status: InfiniteScrollStatus) {\n if (side === 'start') {\n startStatus.value = status\n } else if (side === 'end') {\n endStatus.value = status\n }\n }\n\n function getStatus (side: string) {\n return side === 'start' ? startStatus.value : endStatus.value\n }\n\n let previousScrollSize = 0\n function handleIntersect (side: InfiniteScrollSide) {\n const status = getStatus(side)\n if (!rootEl.value || status === 'loading') return\n\n previousScrollSize = getScrollSize()\n setStatus(side, 'loading')\n\n function done (status: InfiniteScrollStatus) {\n setStatus(side, status)\n\n nextTick(() => {\n if (status === 'ok' && side === 'start') {\n setScrollAmount(getScrollSize() - previousScrollSize + getScrollAmount())\n }\n })\n }\n\n emit('load', { side, done })\n }\n\n const { t } = useLocale()\n\n function renderSide (side: InfiniteScrollSide, status: InfiniteScrollStatus) {\n if (props.side !== side && props.side !== 'both') return\n\n const onClick = () => handleIntersect(side)\n const slotProps = { side, props: { onClick, color: props.color } }\n\n if (status === 'error') return slots.error?.(slotProps)\n\n if (status === 'empty') return slots.empty?.(slotProps) ?? <div>{ t(props.emptyText) }</div>\n\n if (props.mode === 'manual') {\n if (status === 'loading') {\n return slots.loading?.(slotProps) ?? (\n <VProgressCircular indeterminate color={ props.color } />\n )\n }\n\n return slots['load-more']?.(slotProps) ?? (\n <VBtn variant=\"outlined\" color={ props.color } onClick={ onClick }>\n { t(props.loadMoreText) }\n </VBtn>\n )\n }\n\n return slots.loading?.(slotProps) ?? (\n <VProgressCircular indeterminate color={ props.color } />\n )\n }\n\n const { dimensionStyles } = useDimension(props)\n\n useRender(() => {\n const Tag = props.tag\n const hasStartIntersect = props.side === 'start' || props.side === 'both'\n const hasEndIntersect = props.side === 'end' || props.side === 'both'\n const intersectMode = props.mode === 'intersect'\n\n return (\n <Tag\n ref={ rootEl }\n class={[\n 'v-infinite-scroll',\n `v-infinite-scroll--${props.direction}`,\n {\n 'v-infinite-scroll--start': hasStartIntersect,\n 'v-infinite-scroll--end': hasEndIntersect,\n },\n ]}\n style={ dimensionStyles.value }\n >\n <div class=\"v-infinite-scroll__side\">\n { renderSide('start', startStatus.value) }\n </div>\n\n { rootEl.value && hasStartIntersect && intersectMode && (\n <VInfiniteScrollIntersect\n key=\"start\"\n side=\"start\"\n onIntersect={ handleIntersect }\n rootRef={ rootEl.value }\n rootMargin={ margin.value }\n />\n )}\n\n { slots.default?.() }\n\n { rootEl.value && hasEndIntersect && intersectMode && (\n <VInfiniteScrollIntersect\n key=\"end\"\n side=\"end\"\n onIntersect={ handleIntersect }\n rootRef={ rootEl.value }\n rootMargin={ margin.value }\n />\n )}\n\n <div class=\"v-infinite-scroll__side\">\n { renderSide('end', endStatus.value) }\n </div>\n </Tag>\n )\n })\n },\n})\n\nexport type VInfiniteScroll = InstanceType<typeof VInfiniteScroll>\n"],"mappings":"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"}
1
+ {"version":3,"file":"VInfiniteScroll.mjs","names":["VBtn","VProgressCircular","makeDimensionProps","useDimension","useIntersectionObserver","useLocale","makeTagProps","computed","nextTick","onMounted","ref","watch","convertToUnit","defineComponent","genericComponent","propsFactory","useRender","makeVInfiniteScrollProps","color","String","direction","type","default","validator","v","includes","side","mode","margin","Number","loadMoreText","emptyText","VInfiniteScrollIntersect","name","props","required","rootRef","rootMargin","emits","intersect","isIntersecting","setup","_ref","emit","intersectionRef","entries","root","undefined","val","_createVNode","_createTextVNode","VInfiniteScroll","load","options","_ref2","slots","rootEl","startStatus","endStatus","setScrollAmount","amount","value","property","getScrollAmount","getScrollSize","getContainerSize","setStatus","status","getStatus","previousScrollSize","handleIntersect","_isIntersecting","intersecting","done","window","requestAnimationFrame","t","renderSide","onClick","slotProps","error","empty","loading","dimensionStyles","Tag","tag","hasStartIntersect","hasEndIntersect","intersectMode"],"sources":["../../../src/labs/VInfiniteScroll/VInfiniteScroll.tsx"],"sourcesContent":["// Styles\nimport './VInfiniteScroll.sass'\n\n// Components\nimport { VBtn } from '@/components/VBtn'\nimport { VProgressCircular } from '@/components/VProgressCircular'\n\n// Composables\nimport { makeDimensionProps, useDimension } from '@/composables/dimensions'\nimport { useIntersectionObserver } from '@/composables/intersectionObserver'\nimport { useLocale } from '@/composables/locale'\nimport { makeTagProps } from '@/composables/tag'\n\n// Utilities\nimport { computed, nextTick, onMounted, ref, watch } from 'vue'\nimport { convertToUnit, defineComponent, genericComponent, propsFactory, useRender } from '@/util'\n\n// Types\nimport type { PropType } from 'vue'\n\nexport type InfiniteScrollSide = 'start' | 'end' | 'both'\nexport type InfiniteScrollStatus = 'ok' | 'empty' | 'loading' | 'error'\n\ntype InfiniteScrollSlot = {\n side: InfiniteScrollSide\n props: Record<string, any>\n}\n\ntype VInfiniteScrollSlots = {\n default: never\n loading: InfiniteScrollSlot\n error: InfiniteScrollSlot\n empty: InfiniteScrollSlot\n 'load-more': InfiniteScrollSlot\n}\n\nexport const makeVInfiniteScrollProps = propsFactory({\n color: String,\n direction: {\n type: String as PropType<'vertical' | 'horizontal'>,\n default: 'vertical',\n validator: (v: any) => ['vertical', 'horizontal'].includes(v),\n },\n side: {\n type: String as PropType<InfiniteScrollSide>,\n default: 'end',\n validator: (v: any) => ['start', 'end', 'both'].includes(v),\n },\n mode: {\n type: String as PropType<'intersect' | 'manual'>,\n default: 'intersect',\n validator: (v: any) => ['intersect', 'manual'].includes(v),\n },\n margin: [Number, String],\n loadMoreText: {\n type: String,\n default: '$vuetify.infiniteScroll.loadMore',\n },\n emptyText: {\n type: String,\n default: '$vuetify.infiniteScroll.empty',\n },\n\n ...makeDimensionProps(),\n ...makeTagProps(),\n}, 'VInfiniteScroll')\n\nexport const VInfiniteScrollIntersect = defineComponent({\n name: 'VInfiniteScrollIntersect',\n\n props: {\n side: {\n type: String as PropType<InfiniteScrollSide>,\n required: true,\n },\n rootRef: null,\n rootMargin: String,\n },\n\n emits: {\n intersect: (side: InfiniteScrollSide, isIntersecting: boolean) => true,\n },\n\n setup (props, { emit }) {\n const { intersectionRef, isIntersecting } = useIntersectionObserver(entries => {\n }, props.rootMargin ? {\n root: props.rootRef,\n rootMargin: props.rootMargin,\n } : undefined)\n\n watch(isIntersecting, async val => {\n emit('intersect', props.side, val)\n })\n\n useRender(() => (\n <div class=\"v-infinite-scroll-intersect\" ref={ intersectionRef }>&nbsp;</div>\n ))\n\n return {}\n },\n})\n\nexport const VInfiniteScroll = genericComponent<VInfiniteScrollSlots>()({\n name: 'VInfiniteScroll',\n\n props: makeVInfiniteScrollProps(),\n\n emits: {\n load: (options: { side: InfiniteScrollSide, done: (status: InfiniteScrollStatus) => void }) => true,\n },\n\n setup (props, { slots, emit }) {\n const rootEl = ref<HTMLDivElement>()\n const startStatus = ref<InfiniteScrollStatus>('ok')\n const endStatus = ref<InfiniteScrollStatus>('ok')\n const margin = computed(() => convertToUnit(props.margin))\n const isIntersecting = ref(false)\n\n function setScrollAmount (amount: number) {\n if (!rootEl.value) return\n\n const property = props.direction === 'vertical' ? 'scrollTop' : 'scrollLeft'\n rootEl.value[property] = amount\n }\n\n function getScrollAmount () {\n if (!rootEl.value) return 0\n\n const property = props.direction === 'vertical' ? 'scrollTop' : 'scrollLeft'\n return rootEl.value[property]\n }\n\n function getScrollSize () {\n if (!rootEl.value) return 0\n\n const property = props.direction === 'vertical' ? 'scrollHeight' : 'scrollWidth'\n return rootEl.value[property]\n }\n\n function getContainerSize () {\n if (!rootEl.value) return 0\n\n const property = props.direction === 'vertical' ? 'clientHeight' : 'clientWidth'\n return rootEl.value[property]\n }\n\n onMounted(() => {\n if (!rootEl.value) return\n\n if (props.side === 'start') {\n setScrollAmount(getScrollSize())\n } else if (props.side === 'both') {\n setScrollAmount(getScrollSize() / 2 - getContainerSize() / 2)\n }\n })\n\n function setStatus (side: InfiniteScrollSide, status: InfiniteScrollStatus) {\n if (side === 'start') {\n startStatus.value = status\n } else if (side === 'end') {\n endStatus.value = status\n }\n }\n\n function getStatus (side: string) {\n return side === 'start' ? startStatus.value : endStatus.value\n }\n\n let previousScrollSize = 0\n function handleIntersect (side: InfiniteScrollSide, _isIntersecting: boolean) {\n isIntersecting.value = _isIntersecting\n if (isIntersecting.value) {\n intersecting(side)\n }\n }\n\n function intersecting (side: InfiniteScrollSide) {\n if (props.mode !== 'manual' && !isIntersecting.value) return\n\n const status = getStatus(side)\n if (!rootEl.value || status === 'loading') return\n\n previousScrollSize = getScrollSize()\n setStatus(side, 'loading')\n\n function done (status: InfiniteScrollStatus) {\n setStatus(side, status)\n\n nextTick(() => {\n if (status === 'empty' || status === 'error') return\n\n if (status === 'ok' && side === 'start') {\n setScrollAmount(getScrollSize() - previousScrollSize + getScrollAmount())\n }\n if (props.mode !== 'manual') {\n nextTick(() => {\n window.requestAnimationFrame(() => {\n window.requestAnimationFrame(() => {\n window.requestAnimationFrame(() => {\n intersecting(side)\n })\n })\n })\n })\n }\n })\n }\n\n emit('load', { side, done })\n }\n\n const { t } = useLocale()\n\n function renderSide (side: InfiniteScrollSide, status: InfiniteScrollStatus) {\n if (props.side !== side && props.side !== 'both') return\n\n const onClick = () => intersecting(side)\n const slotProps = { side, props: { onClick, color: props.color } }\n\n if (status === 'error') return slots.error?.(slotProps)\n\n if (status === 'empty') return slots.empty?.(slotProps) ?? <div>{ t(props.emptyText) }</div>\n\n if (props.mode === 'manual') {\n if (status === 'loading') {\n return slots.loading?.(slotProps) ?? (\n <VProgressCircular indeterminate color={ props.color } />\n )\n }\n\n return slots['load-more']?.(slotProps) ?? (\n <VBtn variant=\"outlined\" color={ props.color } onClick={ onClick }>\n { t(props.loadMoreText) }\n </VBtn>\n )\n }\n\n return slots.loading?.(slotProps) ?? (\n <VProgressCircular indeterminate color={ props.color } />\n )\n }\n\n const { dimensionStyles } = useDimension(props)\n\n useRender(() => {\n const Tag = props.tag\n const hasStartIntersect = props.side === 'start' || props.side === 'both'\n const hasEndIntersect = props.side === 'end' || props.side === 'both'\n const intersectMode = props.mode === 'intersect'\n\n return (\n <Tag\n ref={ rootEl }\n class={[\n 'v-infinite-scroll',\n `v-infinite-scroll--${props.direction}`,\n {\n 'v-infinite-scroll--start': hasStartIntersect,\n 'v-infinite-scroll--end': hasEndIntersect,\n },\n ]}\n style={ dimensionStyles.value }\n >\n <div class=\"v-infinite-scroll__side\">\n { renderSide('start', startStatus.value) }\n </div>\n\n { rootEl.value && hasStartIntersect && intersectMode && (\n <VInfiniteScrollIntersect\n key=\"start\"\n side=\"start\"\n onIntersect={ handleIntersect }\n rootRef={ rootEl.value }\n rootMargin={ margin.value }\n />\n )}\n\n { slots.default?.() }\n\n { rootEl.value && hasEndIntersect && intersectMode && (\n <VInfiniteScrollIntersect\n key=\"end\"\n side=\"end\"\n onIntersect={ handleIntersect }\n rootRef={ rootEl.value }\n rootMargin={ margin.value }\n />\n )}\n\n <div class=\"v-infinite-scroll__side\">\n { renderSide('end', endStatus.value) }\n </div>\n </Tag>\n )\n })\n },\n})\n\nexport type VInfiniteScroll = InstanceType<typeof VInfiniteScroll>\n"],"mappings":"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"}
@@ -5,7 +5,7 @@
5
5
  grid-auto-rows: min-content;
6
6
  grid-template-areas: "title" "header" "body";
7
7
  overflow: hidden;
8
- width: 358px;
8
+ width: 360px;
9
9
  }
10
10
  .v-picker.v-sheet.v-picker--with-actions {
11
11
  grid-template-areas: "title" "header" "body" "actions";
@@ -8,7 +8,7 @@
8
8
  grid-auto-rows: min-content
9
9
  grid-template-areas: "title" "header" "body"
10
10
  overflow: hidden
11
- width: 358px
11
+ width: 360px
12
12
 
13
13
  &.v-picker--with-actions
14
14
  grid-template-areas: "title" "header" "body" "actions"
@@ -1,6 +1,6 @@
1
- @import '../../styles/styles.sass';
1
+ @use '../../styles/settings';
2
2
 
3
- $picker-border-radius: $border-radius-root !default;
3
+ $picker-border-radius: settings.$border-radius-root !default;
4
4
  $picker-title-padding: 16px !default;
5
5
  $picker-inactive-btn-opacity: .6 !default;
6
6
  $picker-active-btn-opacity: 1 !default;