@vuetify/nightly 3.3.5-master.2023-06-21 → 3.3.5-pr-17265.042d482

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 (52) hide show
  1. package/CHANGELOG.md +21 -2
  2. package/dist/json/attributes.json +4 -0
  3. package/dist/json/importMap.json +4 -4
  4. package/dist/json/tags.json +1 -0
  5. package/dist/json/web-types.json +16 -14
  6. package/dist/vuetify-labs.css +57 -57
  7. package/dist/vuetify-labs.d.ts +80 -20
  8. package/dist/vuetify-labs.esm.js +460 -326
  9. package/dist/vuetify-labs.esm.js.map +1 -1
  10. package/dist/vuetify-labs.js +459 -325
  11. package/dist/vuetify-labs.min.css +2 -2
  12. package/dist/vuetify.css +19 -19
  13. package/dist/vuetify.d.ts +37 -15
  14. package/dist/vuetify.esm.js +448 -316
  15. package/dist/vuetify.esm.js.map +1 -1
  16. package/dist/vuetify.js +447 -315
  17. package/dist/vuetify.js.map +1 -1
  18. package/dist/vuetify.min.css +2 -2
  19. package/dist/vuetify.min.js +675 -656
  20. package/dist/vuetify.min.js.map +1 -1
  21. package/lib/components/VAutocomplete/VAutocomplete.mjs +48 -35
  22. package/lib/components/VAutocomplete/VAutocomplete.mjs.map +1 -1
  23. package/lib/components/VCombobox/VCombobox.mjs +48 -35
  24. package/lib/components/VCombobox/VCombobox.mjs.map +1 -1
  25. package/lib/components/VSelect/VSelect.mjs +43 -31
  26. package/lib/components/VSelect/VSelect.mjs.map +1 -1
  27. package/lib/components/VSelect/useScrolling.mjs +69 -0
  28. package/lib/components/VSelect/useScrolling.mjs.map +1 -0
  29. package/lib/components/VVirtualScroll/VVirtualScroll.mjs +50 -24
  30. package/lib/components/VVirtualScroll/VVirtualScroll.mjs.map +1 -1
  31. package/lib/components/VVirtualScroll/VVirtualScrollItem.mjs +13 -23
  32. package/lib/components/VVirtualScroll/VVirtualScrollItem.mjs.map +1 -1
  33. package/lib/components/VVirtualScroll/index.d.mts +37 -15
  34. package/lib/components/index.d.mts +36 -14
  35. package/lib/composables/filter.mjs +6 -4
  36. package/lib/composables/filter.mjs.map +1 -1
  37. package/lib/composables/resizeObserver.mjs +6 -1
  38. package/lib/composables/resizeObserver.mjs.map +1 -1
  39. package/lib/composables/virtual.mjs +17 -17
  40. package/lib/composables/virtual.mjs.map +1 -1
  41. package/lib/entry-bundler.mjs +1 -1
  42. package/lib/entry-bundler.mjs.map +1 -1
  43. package/lib/framework.mjs +1 -1
  44. package/lib/framework.mjs.map +1 -1
  45. package/lib/index.d.mts +1 -1
  46. package/lib/labs/VDataTable/VDataTableVirtual.mjs +12 -10
  47. package/lib/labs/VDataTable/VDataTableVirtual.mjs.map +1 -1
  48. package/lib/labs/VDataTable/index.d.mts +44 -6
  49. package/lib/labs/components.d.mts +44 -6
  50. package/lib/util/getScrollParent.mjs +7 -1
  51. package/lib/util/getScrollParent.mjs.map +1 -1
  52. package/package.json +1 -1
@@ -1,4 +1,4 @@
1
- import { createVNode as _createVNode } from "vue";
1
+ import { Fragment as _Fragment, createVNode as _createVNode } from "vue";
2
2
  // Styles
3
3
  import "./VVirtualScroll.css";
4
4
 
@@ -6,14 +6,16 @@ import "./VVirtualScroll.css";
6
6
  import { VVirtualScrollItem } from "./VVirtualScrollItem.mjs"; // Composables
7
7
  import { makeComponentProps } from "../../composables/component.mjs";
8
8
  import { makeDimensionProps, useDimension } from "../../composables/dimensions.mjs";
9
+ import { useToggleScope } from "../../composables/toggleScope.mjs";
9
10
  import { makeVirtualProps, useVirtual } from "../../composables/virtual.mjs"; // Utilities
10
- import { toRef } from 'vue';
11
- import { convertToUnit, genericComponent, propsFactory, useRender } from "../../util/index.mjs"; // Types
11
+ import { onMounted, onScopeDispose, toRef } from 'vue';
12
+ import { convertToUnit, genericComponent, getCurrentInstance, getScrollParent, propsFactory, useRender } from "../../util/index.mjs"; // Types
12
13
  export const makeVVirtualScrollProps = propsFactory({
13
14
  items: {
14
15
  type: Array,
15
16
  default: () => []
16
17
  },
18
+ renderless: Boolean,
17
19
  ...makeVirtualProps(),
18
20
  ...makeComponentProps(),
19
21
  ...makeDimensionProps()
@@ -25,6 +27,7 @@ export const VVirtualScroll = genericComponent()({
25
27
  let {
26
28
  slots
27
29
  } = _ref;
30
+ const vm = getCurrentInstance('VVirtualScroll');
28
31
  const {
29
32
  dimensionStyles
30
33
  } = useDimension(props);
@@ -37,27 +40,50 @@ export const VVirtualScroll = genericComponent()({
37
40
  paddingBottom,
38
41
  computedItems
39
42
  } = useVirtual(props, toRef(props, 'items'));
40
- useRender(() => _createVNode("div", {
41
- "ref": containerRef,
42
- "class": ['v-virtual-scroll', props.class],
43
- "onScroll": handleScroll,
44
- "style": [dimensionStyles.value, props.style]
45
- }, [_createVNode("div", {
46
- "class": "v-virtual-scroll__container",
47
- "style": {
48
- paddingTop: convertToUnit(paddingTop.value),
49
- paddingBottom: convertToUnit(paddingBottom.value)
50
- }
51
- }, [computedItems.value.map(item => _createVNode(VVirtualScrollItem, {
52
- "key": item.index,
53
- "dynamicHeight": !props.itemHeight,
54
- "onUpdate:height": height => handleItemResize(item.index, height)
55
- }, {
56
- default: () => [slots.default?.({
57
- item: item.raw,
58
- index: item.index
59
- })]
60
- }))])]));
43
+ useToggleScope(() => props.renderless, () => {
44
+ onMounted(() => {
45
+ containerRef.value = getScrollParent(vm.vnode.el, true);
46
+ containerRef.value?.addEventListener('scroll', handleScroll);
47
+ });
48
+ onScopeDispose(() => {
49
+ containerRef.value?.removeEventListener('scroll', handleScroll);
50
+ });
51
+ });
52
+ useRender(() => {
53
+ const children = computedItems.value.map(item => _createVNode(VVirtualScrollItem, {
54
+ "key": item.index,
55
+ "renderless": props.renderless,
56
+ "onUpdate:height": height => handleItemResize(item.index, height)
57
+ }, {
58
+ default: slotProps => slots.default?.({
59
+ item: item.raw,
60
+ index: item.index,
61
+ ...slotProps
62
+ })
63
+ }));
64
+ return props.renderless ? _createVNode(_Fragment, null, [_createVNode("div", {
65
+ "class": "v-virtual-scroll__spacer",
66
+ "style": {
67
+ paddingTop: convertToUnit(paddingTop.value)
68
+ }
69
+ }, null), children, _createVNode("div", {
70
+ "class": "v-virtual-scroll__spacer",
71
+ "style": {
72
+ paddingBottom: convertToUnit(paddingBottom.value)
73
+ }
74
+ }, null)]) : _createVNode("div", {
75
+ "ref": containerRef,
76
+ "class": ['v-virtual-scroll', props.class],
77
+ "onScroll": handleScroll,
78
+ "style": [dimensionStyles.value, props.style]
79
+ }, [_createVNode("div", {
80
+ "class": "v-virtual-scroll__container",
81
+ "style": {
82
+ paddingTop: convertToUnit(paddingTop.value),
83
+ paddingBottom: convertToUnit(paddingBottom.value)
84
+ }
85
+ }, [children])]);
86
+ });
61
87
  return {
62
88
  scrollToIndex
63
89
  };
@@ -1 +1 @@
1
- {"version":3,"file":"VVirtualScroll.mjs","names":["VVirtualScrollItem","makeComponentProps","makeDimensionProps","useDimension","makeVirtualProps","useVirtual","toRef","convertToUnit","genericComponent","propsFactory","useRender","makeVVirtualScrollProps","items","type","Array","default","VVirtualScroll","name","props","setup","_ref","slots","dimensionStyles","containerRef","handleScroll","handleItemResize","scrollToIndex","paddingTop","paddingBottom","computedItems","_createVNode","class","value","style","map","item","index","itemHeight","height","raw"],"sources":["../../../src/components/VVirtualScroll/VVirtualScroll.tsx"],"sourcesContent":["// Styles\nimport './VVirtualScroll.sass'\n\n// Components\nimport { VVirtualScrollItem } from './VVirtualScrollItem'\n\n// Composables\nimport { makeComponentProps } from '@/composables/component'\nimport { makeDimensionProps, useDimension } from '@/composables/dimensions'\nimport { makeVirtualProps, useVirtual } from '@/composables/virtual'\n\n// Utilities\nimport { toRef } from 'vue'\nimport {\n convertToUnit,\n genericComponent,\n propsFactory,\n useRender,\n} from '@/util'\n\n// Types\nimport type { PropType } from 'vue'\nimport type { GenericProps } from '@/util'\n\nexport interface VVirtualScrollSlot<T> {\n item: T\n index: number\n}\n\nexport const makeVVirtualScrollProps = propsFactory({\n items: {\n type: Array as PropType<readonly unknown[]>,\n default: () => ([]),\n },\n\n ...makeVirtualProps(),\n ...makeComponentProps(),\n ...makeDimensionProps(),\n}, 'VVirtualScroll')\n\nexport const VVirtualScroll = genericComponent<new <T>(\n props: {\n items?: readonly T[]\n },\n slots: {\n default: VVirtualScrollSlot<T>\n }\n) => GenericProps<typeof props, typeof slots>>()({\n name: 'VVirtualScroll',\n\n props: makeVVirtualScrollProps(),\n\n setup (props, { slots }) {\n const { dimensionStyles } = useDimension(props)\n const {\n containerRef,\n handleScroll,\n handleItemResize,\n scrollToIndex,\n paddingTop,\n paddingBottom,\n computedItems,\n } = useVirtual(props, toRef(props, 'items'))\n\n useRender(() => (\n <div\n ref={ containerRef }\n class={[\n 'v-virtual-scroll',\n props.class,\n ]}\n onScroll={ handleScroll }\n style={[\n dimensionStyles.value,\n props.style,\n ]}\n >\n <div\n class=\"v-virtual-scroll__container\"\n style={{\n paddingTop: convertToUnit(paddingTop.value),\n paddingBottom: convertToUnit(paddingBottom.value),\n }}\n >\n { computedItems.value.map(item => (\n <VVirtualScrollItem\n key={ item.index }\n dynamicHeight={ !props.itemHeight }\n onUpdate:height={ height => handleItemResize(item.index, height) }\n >\n { slots.default?.({ item: item.raw, index: item.index }) }\n </VVirtualScrollItem>\n ))}\n </div>\n </div>\n ))\n\n return {\n scrollToIndex,\n }\n },\n})\n\nexport type VVirtualScroll = InstanceType<typeof VVirtualScroll>\n"],"mappings":";AAAA;AACA;;AAEA;AAAA,SACSA,kBAAkB,oCAE3B;AAAA,SACSC,kBAAkB;AAAA,SAClBC,kBAAkB,EAAEC,YAAY;AAAA,SAChCC,gBAAgB,EAAEC,UAAU,yCAErC;AACA,SAASC,KAAK,QAAQ,KAAK;AAAA,SAEzBC,aAAa,EACbC,gBAAgB,EAChBC,YAAY,EACZC,SAAS,gCAGX;AASA,OAAO,MAAMC,uBAAuB,GAAGF,YAAY,CAAC;EAClDG,KAAK,EAAE;IACLC,IAAI,EAAEC,KAAqC;IAC3CC,OAAO,EAAEA,CAAA,KAAO;EAClB,CAAC;EAED,GAAGX,gBAAgB,EAAE;EACrB,GAAGH,kBAAkB,EAAE;EACvB,GAAGC,kBAAkB;AACvB,CAAC,EAAE,gBAAgB,CAAC;AAEpB,OAAO,MAAMc,cAAc,GAAGR,gBAAgB,EAOE,CAAC;EAC/CS,IAAI,EAAE,gBAAgB;EAEtBC,KAAK,EAAEP,uBAAuB,EAAE;EAEhCQ,KAAKA,CAAED,KAAK,EAAAE,IAAA,EAAa;IAAA,IAAX;MAAEC;IAAM,CAAC,GAAAD,IAAA;IACrB,MAAM;MAAEE;IAAgB,CAAC,GAAGnB,YAAY,CAACe,KAAK,CAAC;IAC/C,MAAM;MACJK,YAAY;MACZC,YAAY;MACZC,gBAAgB;MAChBC,aAAa;MACbC,UAAU;MACVC,aAAa;MACbC;IACF,CAAC,GAAGxB,UAAU,CAACa,KAAK,EAAEZ,KAAK,CAACY,KAAK,EAAE,OAAO,CAAC,CAAC;IAE5CR,SAAS,CAAC,MAAAoB,YAAA;MAAA,OAEAP,YAAY;MAAA,SACX,CACL,kBAAkB,EAClBL,KAAK,CAACa,KAAK,CACZ;MAAA,YACUP,YAAY;MAAA,SAChB,CACLF,eAAe,CAACU,KAAK,EACrBd,KAAK,CAACe,KAAK;IACZ,IAAAH,YAAA;MAAA,SAGO,6BAA6B;MAAA,SAC5B;QACLH,UAAU,EAAEpB,aAAa,CAACoB,UAAU,CAACK,KAAK,CAAC;QAC3CJ,aAAa,EAAErB,aAAa,CAACqB,aAAa,CAACI,KAAK;MAClD;IAAC,IAECH,aAAa,CAACG,KAAK,CAACE,GAAG,CAACC,IAAI,IAAAL,YAAA,CAAA9B,kBAAA;MAAA,OAEpBmC,IAAI,CAACC,KAAK;MAAA,iBACA,CAAClB,KAAK,CAACmB,UAAU;MAAA,mBACfC,MAAM,IAAIb,gBAAgB,CAACU,IAAI,CAACC,KAAK,EAAEE,MAAM;IAAC;MAAAvB,OAAA,EAAAA,CAAA,MAE9DM,KAAK,CAACN,OAAO,GAAG;QAAEoB,IAAI,EAAEA,IAAI,CAACI,GAAG;QAAEH,KAAK,EAAED,IAAI,CAACC;MAAM,CAAC,CAAC;IAAA,EAE3D,CAAC,IAGP,CAAC;IAEF,OAAO;MACLV;IACF,CAAC;EACH;AACF,CAAC,CAAC"}
1
+ {"version":3,"file":"VVirtualScroll.mjs","names":["VVirtualScrollItem","makeComponentProps","makeDimensionProps","useDimension","useToggleScope","makeVirtualProps","useVirtual","onMounted","onScopeDispose","toRef","convertToUnit","genericComponent","getCurrentInstance","getScrollParent","propsFactory","useRender","makeVVirtualScrollProps","items","type","Array","default","renderless","Boolean","VVirtualScroll","name","props","setup","_ref","slots","vm","dimensionStyles","containerRef","handleScroll","handleItemResize","scrollToIndex","paddingTop","paddingBottom","computedItems","value","vnode","el","addEventListener","removeEventListener","children","map","item","_createVNode","index","height","slotProps","raw","_Fragment","class","style"],"sources":["../../../src/components/VVirtualScroll/VVirtualScroll.tsx"],"sourcesContent":["// Styles\nimport './VVirtualScroll.sass'\n\n// Components\nimport { VVirtualScrollItem } from './VVirtualScrollItem'\n\n// Composables\nimport { makeComponentProps } from '@/composables/component'\nimport { makeDimensionProps, useDimension } from '@/composables/dimensions'\nimport { useToggleScope } from '@/composables/toggleScope'\nimport { makeVirtualProps, useVirtual } from '@/composables/virtual'\n\n// Utilities\nimport { onMounted, onScopeDispose, toRef } from 'vue'\nimport {\n convertToUnit,\n genericComponent,\n getCurrentInstance,\n getScrollParent,\n propsFactory,\n useRender,\n} from '@/util'\n\n// Types\nimport type { PropType, Ref } from 'vue'\nimport type { GenericProps } from '@/util'\n\nexport interface VVirtualScrollSlot<T> {\n item: T\n index: number\n}\n\nexport const makeVVirtualScrollProps = propsFactory({\n items: {\n type: Array as PropType<readonly unknown[]>,\n default: () => ([]),\n },\n renderless: Boolean,\n\n ...makeVirtualProps(),\n ...makeComponentProps(),\n ...makeDimensionProps(),\n}, 'VVirtualScroll')\n\nexport const VVirtualScroll = genericComponent<new <T, Renderless extends boolean = false>(\n props: {\n items?: readonly T[]\n renderless?: Renderless\n },\n slots: {\n default: VVirtualScrollSlot<T> & (Renderless extends true ? {\n itemRef: Ref<HTMLElement | undefined>\n } : {})\n }\n) => GenericProps<typeof props, typeof slots>>()({\n name: 'VVirtualScroll',\n\n props: makeVVirtualScrollProps(),\n\n setup (props, { slots }) {\n const vm = getCurrentInstance('VVirtualScroll')\n const { dimensionStyles } = useDimension(props)\n const {\n containerRef,\n handleScroll,\n handleItemResize,\n scrollToIndex,\n paddingTop,\n paddingBottom,\n computedItems,\n } = useVirtual(props, toRef(props, 'items'))\n\n useToggleScope(() => props.renderless, () => {\n onMounted(() => {\n containerRef.value = getScrollParent(vm.vnode.el as HTMLElement, true)\n containerRef.value?.addEventListener('scroll', handleScroll)\n })\n onScopeDispose(() => {\n containerRef.value?.removeEventListener('scroll', handleScroll)\n })\n })\n\n useRender(() => {\n const children = computedItems.value.map(item => (\n <VVirtualScrollItem\n key={ item.index }\n renderless={ props.renderless }\n onUpdate:height={ height => handleItemResize(item.index, height) }\n >\n { slotProps => slots.default?.({ item: item.raw, index: item.index, ...slotProps }) }\n </VVirtualScrollItem>\n ))\n\n return props.renderless ? (\n <>\n <div class=\"v-virtual-scroll__spacer\" style={{ paddingTop: convertToUnit(paddingTop.value) }} />\n { children }\n <div class=\"v-virtual-scroll__spacer\" style={{ paddingBottom: convertToUnit(paddingBottom.value) }} />\n </>\n ) : (\n <div\n ref={ containerRef }\n class={[\n 'v-virtual-scroll',\n props.class,\n ]}\n onScroll={ handleScroll }\n style={[\n dimensionStyles.value,\n props.style,\n ]}\n >\n <div\n class=\"v-virtual-scroll__container\"\n style={{\n paddingTop: convertToUnit(paddingTop.value),\n paddingBottom: convertToUnit(paddingBottom.value),\n }}\n >\n { children }\n </div>\n </div>\n )\n })\n\n return {\n scrollToIndex,\n }\n },\n})\n\nexport type VVirtualScroll = InstanceType<typeof VVirtualScroll>\n"],"mappings":"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"}
@@ -1,50 +1,40 @@
1
- import { createVNode as _createVNode, Fragment as _Fragment } from "vue";
1
+ import { mergeProps as _mergeProps, createVNode as _createVNode, Fragment as _Fragment } from "vue";
2
2
  // Composables
3
3
  import { makeComponentProps } from "../../composables/component.mjs";
4
- import { useResizeObserver } from "../../composables/resizeObserver.mjs";
5
- import { useToggleScope } from "../../composables/toggleScope.mjs"; // Utilities
6
- import { onUpdated, watch } from 'vue';
7
- import { genericComponent, propsFactory, useRender } from "../../util/index.mjs";
4
+ import { useResizeObserver } from "../../composables/resizeObserver.mjs"; // Utilities
5
+ import { watch } from 'vue';
6
+ import { genericComponent, propsFactory, useRender } from "../../util/index.mjs"; // Types
8
7
  export const makeVVirtualScrollItemProps = propsFactory({
9
- dynamicHeight: Boolean,
10
8
  renderless: Boolean,
11
9
  ...makeComponentProps()
12
10
  }, 'VVirtualScrollItem');
13
11
  export const VVirtualScrollItem = genericComponent()({
14
12
  name: 'VVirtualScrollItem',
13
+ inheritAttrs: false,
15
14
  props: makeVVirtualScrollItemProps(),
16
15
  emits: {
17
16
  'update:height': height => true
18
17
  },
19
18
  setup(props, _ref) {
20
19
  let {
20
+ attrs,
21
21
  emit,
22
22
  slots
23
23
  } = _ref;
24
24
  const {
25
25
  resizeRef,
26
26
  contentRect
27
- } = useResizeObserver();
28
- useToggleScope(() => props.dynamicHeight, () => {
29
- watch(() => contentRect.value?.height, height => {
30
- if (height != null) emit('update:height', height);
31
- });
27
+ } = useResizeObserver(undefined, 'border');
28
+ watch(() => contentRect.value?.height, height => {
29
+ if (height != null) emit('update:height', height);
32
30
  });
33
- function updateHeight() {
34
- if (props.dynamicHeight && contentRect.value) {
35
- emit('update:height', contentRect.value.height);
36
- }
37
- }
38
- onUpdated(updateHeight);
39
31
  useRender(() => props.renderless ? _createVNode(_Fragment, null, [slots.default?.({
40
- props: {
41
- ref: props.dynamicHeight ? resizeRef : undefined
42
- }
43
- })]) : _createVNode("div", {
44
- "ref": props.dynamicHeight ? resizeRef : undefined,
32
+ itemRef: resizeRef
33
+ })]) : _createVNode("div", _mergeProps({
34
+ "ref": resizeRef,
45
35
  "class": ['v-virtual-scroll__item', props.class],
46
36
  "style": props.style
47
- }, [slots.default?.()]));
37
+ }, attrs), [slots.default?.()]));
48
38
  }
49
39
  });
50
40
  //# sourceMappingURL=VVirtualScrollItem.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"VVirtualScrollItem.mjs","names":["makeComponentProps","useResizeObserver","useToggleScope","onUpdated","watch","genericComponent","propsFactory","useRender","makeVVirtualScrollItemProps","dynamicHeight","Boolean","renderless","VVirtualScrollItem","name","props","emits","height","setup","_ref","emit","slots","resizeRef","contentRect","value","updateHeight","_createVNode","_Fragment","default","ref","undefined","class","style"],"sources":["../../../src/components/VVirtualScroll/VVirtualScrollItem.tsx"],"sourcesContent":["// Composables\nimport { makeComponentProps } from '@/composables/component'\nimport { useResizeObserver } from '@/composables/resizeObserver'\nimport { useToggleScope } from '@/composables/toggleScope'\n\n// Utilities\nimport { onUpdated, watch } from 'vue'\nimport { genericComponent, propsFactory, useRender } from '@/util'\n\nexport const makeVVirtualScrollItemProps = propsFactory({\n dynamicHeight: Boolean,\n renderless: Boolean,\n\n ...makeComponentProps(),\n}, 'VVirtualScrollItem')\n\nexport const VVirtualScrollItem = genericComponent<{ default: { props: Record<string, any> } | void }>()({\n name: 'VVirtualScrollItem',\n\n props: makeVVirtualScrollItemProps(),\n\n emits: {\n 'update:height': (height: number) => true,\n },\n\n setup (props, { emit, slots }) {\n const { resizeRef, contentRect } = useResizeObserver()\n\n useToggleScope(() => props.dynamicHeight, () => {\n watch(() => contentRect.value?.height, height => {\n if (height != null) emit('update:height', height)\n })\n })\n\n function updateHeight () {\n if (props.dynamicHeight && contentRect.value) {\n emit('update:height', contentRect.value.height)\n }\n }\n\n onUpdated(updateHeight)\n\n useRender(() => props.renderless ? (\n <>\n { slots.default?.({ props: { ref: props.dynamicHeight ? resizeRef : undefined } }) }\n </>\n ) : (\n <div\n ref={ props.dynamicHeight ? resizeRef : undefined }\n class={[\n 'v-virtual-scroll__item',\n props.class,\n ]}\n style={ props.style }\n >\n { slots.default?.() }\n </div>\n ))\n },\n})\n"],"mappings":";AAAA;AAAA,SACSA,kBAAkB;AAAA,SAClBC,iBAAiB;AAAA,SACjBC,cAAc,6CAEvB;AACA,SAASC,SAAS,EAAEC,KAAK,QAAQ,KAAK;AAAA,SAC7BC,gBAAgB,EAAEC,YAAY,EAAEC,SAAS;AAElD,OAAO,MAAMC,2BAA2B,GAAGF,YAAY,CAAC;EACtDG,aAAa,EAAEC,OAAO;EACtBC,UAAU,EAAED,OAAO;EAEnB,GAAGV,kBAAkB;AACvB,CAAC,EAAE,oBAAoB,CAAC;AAExB,OAAO,MAAMY,kBAAkB,GAAGP,gBAAgB,EAAsD,CAAC;EACvGQ,IAAI,EAAE,oBAAoB;EAE1BC,KAAK,EAAEN,2BAA2B,EAAE;EAEpCO,KAAK,EAAE;IACL,eAAe,EAAGC,MAAc,IAAK;EACvC,CAAC;EAEDC,KAAKA,CAAEH,KAAK,EAAAI,IAAA,EAAmB;IAAA,IAAjB;MAAEC,IAAI;MAAEC;IAAM,CAAC,GAAAF,IAAA;IAC3B,MAAM;MAAEG,SAAS;MAAEC;IAAY,CAAC,GAAGrB,iBAAiB,EAAE;IAEtDC,cAAc,CAAC,MAAMY,KAAK,CAACL,aAAa,EAAE,MAAM;MAC9CL,KAAK,CAAC,MAAMkB,WAAW,CAACC,KAAK,EAAEP,MAAM,EAAEA,MAAM,IAAI;QAC/C,IAAIA,MAAM,IAAI,IAAI,EAAEG,IAAI,CAAC,eAAe,EAAEH,MAAM,CAAC;MACnD,CAAC,CAAC;IACJ,CAAC,CAAC;IAEF,SAASQ,YAAYA,CAAA,EAAI;MACvB,IAAIV,KAAK,CAACL,aAAa,IAAIa,WAAW,CAACC,KAAK,EAAE;QAC5CJ,IAAI,CAAC,eAAe,EAAEG,WAAW,CAACC,KAAK,CAACP,MAAM,CAAC;MACjD;IACF;IAEAb,SAAS,CAACqB,YAAY,CAAC;IAEvBjB,SAAS,CAAC,MAAMO,KAAK,CAACH,UAAU,GAAAc,YAAA,CAAAC,SAAA,SAE1BN,KAAK,CAACO,OAAO,GAAG;MAAEb,KAAK,EAAE;QAAEc,GAAG,EAAEd,KAAK,CAACL,aAAa,GAAGY,SAAS,GAAGQ;MAAU;IAAE,CAAC,CAAC,KAAAJ,YAAA;MAAA,OAI5EX,KAAK,CAACL,aAAa,GAAGY,SAAS,GAAGQ,SAAS;MAAA,SAC1C,CACL,wBAAwB,EACxBf,KAAK,CAACgB,KAAK,CACZ;MAAA,SACOhB,KAAK,CAACiB;IAAK,IAEjBX,KAAK,CAACO,OAAO,IAAI,EAEtB,CAAC;EACJ;AACF,CAAC,CAAC"}
1
+ {"version":3,"file":"VVirtualScrollItem.mjs","names":["makeComponentProps","useResizeObserver","watch","genericComponent","propsFactory","useRender","makeVVirtualScrollItemProps","renderless","Boolean","VVirtualScrollItem","name","inheritAttrs","props","emits","height","setup","_ref","attrs","emit","slots","resizeRef","contentRect","undefined","value","_createVNode","_Fragment","default","itemRef","_mergeProps","class","style"],"sources":["../../../src/components/VVirtualScroll/VVirtualScrollItem.tsx"],"sourcesContent":["// Composables\nimport { makeComponentProps } from '@/composables/component'\nimport { useResizeObserver } from '@/composables/resizeObserver'\n\n// Utilities\nimport { watch } from 'vue'\nimport { genericComponent, propsFactory, useRender } from '@/util'\n\n// Types\nimport type { Ref } from 'vue'\nimport type { GenericProps } from '@/util'\n\nexport const makeVVirtualScrollItemProps = propsFactory({\n renderless: Boolean,\n\n ...makeComponentProps(),\n}, 'VVirtualScrollItem')\n\nexport const VVirtualScrollItem = genericComponent<new <Renderless extends boolean = false>(\n props: {\n renderless?: Renderless\n },\n slots: {\n default: Renderless extends true ? {\n itemRef: Ref<HTMLElement | undefined>\n } : never\n }\n) => GenericProps<typeof props, typeof slots>>()({\n name: 'VVirtualScrollItem',\n\n inheritAttrs: false,\n\n props: makeVVirtualScrollItemProps(),\n\n emits: {\n 'update:height': (height: number) => true,\n },\n\n setup (props, { attrs, emit, slots }) {\n const { resizeRef, contentRect } = useResizeObserver(undefined, 'border')\n\n watch(() => contentRect.value?.height, height => {\n if (height != null) emit('update:height', height)\n })\n\n useRender(() => props.renderless ? (\n <>\n { slots.default?.({ itemRef: resizeRef }) }\n </>\n ) : (\n <div\n ref={ resizeRef }\n class={[\n 'v-virtual-scroll__item',\n props.class,\n ]}\n style={ props.style }\n { ...attrs }\n >\n { (slots.default as any)?.() }\n </div>\n ))\n },\n})\n"],"mappings":";AAAA;AAAA,SACSA,kBAAkB;AAAA,SAClBC,iBAAiB,gDAE1B;AACA,SAASC,KAAK,QAAQ,KAAK;AAAA,SAClBC,gBAAgB,EAAEC,YAAY,EAAEC,SAAS,gCAElD;AAIA,OAAO,MAAMC,2BAA2B,GAAGF,YAAY,CAAC;EACtDG,UAAU,EAAEC,OAAO;EAEnB,GAAGR,kBAAkB;AACvB,CAAC,EAAE,oBAAoB,CAAC;AAExB,OAAO,MAAMS,kBAAkB,GAAGN,gBAAgB,EASF,CAAC;EAC/CO,IAAI,EAAE,oBAAoB;EAE1BC,YAAY,EAAE,KAAK;EAEnBC,KAAK,EAAEN,2BAA2B,EAAE;EAEpCO,KAAK,EAAE;IACL,eAAe,EAAGC,MAAc,IAAK;EACvC,CAAC;EAEDC,KAAKA,CAAEH,KAAK,EAAAI,IAAA,EAA0B;IAAA,IAAxB;MAAEC,KAAK;MAAEC,IAAI;MAAEC;IAAM,CAAC,GAAAH,IAAA;IAClC,MAAM;MAAEI,SAAS;MAAEC;IAAY,CAAC,GAAGpB,iBAAiB,CAACqB,SAAS,EAAE,QAAQ,CAAC;IAEzEpB,KAAK,CAAC,MAAMmB,WAAW,CAACE,KAAK,EAAET,MAAM,EAAEA,MAAM,IAAI;MAC/C,IAAIA,MAAM,IAAI,IAAI,EAAEI,IAAI,CAAC,eAAe,EAAEJ,MAAM,CAAC;IACnD,CAAC,CAAC;IAEFT,SAAS,CAAC,MAAMO,KAAK,CAACL,UAAU,GAAAiB,YAAA,CAAAC,SAAA,SAE1BN,KAAK,CAACO,OAAO,GAAG;MAAEC,OAAO,EAAEP;IAAU,CAAC,CAAC,KAAAI,YAAA,QAAAI,WAAA;MAAA,OAInCR,SAAS;MAAA,SACR,CACL,wBAAwB,EACxBR,KAAK,CAACiB,KAAK,CACZ;MAAA,SACOjB,KAAK,CAACkB;IAAK,GACdb,KAAK,IAEPE,KAAK,CAACO,OAAO,IAAY,EAE/B,CAAC;EACJ;AACF,CAAC,CAAC"}
@@ -1,5 +1,5 @@
1
1
  import * as vue from 'vue';
2
- import { ComponentPropsOptions, ExtractPropTypes, VNodeChild, VNode, PropType } from 'vue';
2
+ import { ComponentPropsOptions, ExtractPropTypes, VNodeChild, VNode, Ref, PropType } from 'vue';
3
3
 
4
4
  type SlotsToProps<U extends RawSlots, T = MakeInternalSlots<U>> = {
5
5
  $children?: (VNodeChild | (T extends {
@@ -40,6 +40,7 @@ declare const VVirtualScroll: {
40
40
  $data: {};
41
41
  $props: {
42
42
  style?: vue.StyleValue | undefined;
43
+ itemHeight?: string | number | undefined;
43
44
  key?: string | number | symbol | undefined;
44
45
  height?: string | number | undefined;
45
46
  width?: string | number | undefined;
@@ -89,7 +90,6 @@ declare const VVirtualScroll: {
89
90
  }>) => void) | ((vnode: vue.VNode<vue.RendererNode, vue.RendererElement, {
90
91
  [key: string]: any;
91
92
  }>) => void)[] | undefined;
92
- itemHeight?: string | number | undefined;
93
93
  };
94
94
  $attrs: {
95
95
  [x: string]: unknown;
@@ -98,7 +98,9 @@ declare const VVirtualScroll: {
98
98
  [x: string]: unknown;
99
99
  };
100
100
  $slots: Readonly<{
101
- default?: ((arg: VVirtualScrollSlot<unknown>) => vue.VNode<vue.RendererNode, vue.RendererElement, {
101
+ default?: ((arg: VVirtualScrollSlot<unknown> | (VVirtualScrollSlot<unknown> & {
102
+ itemRef: Ref<HTMLElement | undefined>;
103
+ })) => vue.VNode<vue.RendererNode, vue.RendererElement, {
102
104
  [key: string]: any;
103
105
  }>[]) | undefined;
104
106
  }>;
@@ -108,6 +110,7 @@ declare const VVirtualScroll: {
108
110
  $el: any;
109
111
  $options: vue.ComponentOptionsBase<{
110
112
  style: vue.StyleValue;
113
+ itemHeight: string | number;
111
114
  } & {
112
115
  height?: string | number | undefined;
113
116
  width?: string | number | undefined;
@@ -116,13 +119,15 @@ declare const VVirtualScroll: {
116
119
  minHeight?: string | number | undefined;
117
120
  minWidth?: string | number | undefined;
118
121
  class?: any;
119
- itemHeight?: string | number | undefined;
120
122
  }, {
121
123
  scrollToIndex: (index: number) => void;
122
- }, unknown, {}, {}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, Omit<Record<string, any>, "$children" | "v-slot:default" | "items" | "v-slots">, string, {
124
+ }, unknown, {}, {}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, Omit<Record<string, any>, "$children" | "v-slot:default" | "items" | "v-slots" | "renderless">, string, {
123
125
  style: vue.StyleValue;
126
+ itemHeight: string | number;
124
127
  }, {}, string, vue.SlotsType<Partial<{
125
- default: (arg: VVirtualScrollSlot<unknown>) => vue.VNode<vue.RendererNode, vue.RendererElement, {
128
+ default: (arg: VVirtualScrollSlot<unknown> | (VVirtualScrollSlot<unknown> & {
129
+ itemRef: Ref<HTMLElement | undefined>;
130
+ })) => vue.VNode<vue.RendererNode, vue.RendererElement, {
126
131
  [key: string]: any;
127
132
  }>[];
128
133
  }>>> & {
@@ -147,6 +152,7 @@ declare const VVirtualScroll: {
147
152
  $watch<T extends string | ((...args: any) => any)>(source: T, cb: T extends (...args: any) => infer R ? (args_0: R, args_1: R) => any : (...args: any) => any, options?: vue.WatchOptions<boolean> | undefined): vue.WatchStopHandle;
148
153
  } & {
149
154
  style: vue.StyleValue;
155
+ itemHeight: string | number;
150
156
  } & {
151
157
  height?: string | number | undefined;
152
158
  width?: string | number | undefined;
@@ -155,7 +161,6 @@ declare const VVirtualScroll: {
155
161
  minHeight?: string | number | undefined;
156
162
  minWidth?: string | number | undefined;
157
163
  class?: any;
158
- itemHeight?: string | number | undefined;
159
164
  } & vue.ShallowUnwrapRef<{
160
165
  scrollToIndex: (index: number) => void;
161
166
  }> & {} & vue.ComponentCustomProperties & {};
@@ -164,6 +169,7 @@ declare const VVirtualScroll: {
164
169
  __isSuspense?: undefined;
165
170
  } & vue.ComponentOptionsBase<{
166
171
  style: vue.StyleValue;
172
+ itemHeight: string | number;
167
173
  } & {
168
174
  height?: string | number | undefined;
169
175
  width?: string | number | undefined;
@@ -172,23 +178,31 @@ declare const VVirtualScroll: {
172
178
  minHeight?: string | number | undefined;
173
179
  minWidth?: string | number | undefined;
174
180
  class?: any;
175
- itemHeight?: string | number | undefined;
176
181
  }, {
177
182
  scrollToIndex: (index: number) => void;
178
- }, unknown, {}, {}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, Omit<Record<string, any>, "$children" | "v-slot:default" | "items" | "v-slots">, string, {
183
+ }, unknown, {}, {}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, Omit<Record<string, any>, "$children" | "v-slot:default" | "items" | "v-slots" | "renderless">, string, {
179
184
  style: vue.StyleValue;
185
+ itemHeight: string | number;
180
186
  }, {}, string, vue.SlotsType<Partial<{
181
- default: (arg: VVirtualScrollSlot<unknown>) => vue.VNode<vue.RendererNode, vue.RendererElement, {
187
+ default: (arg: VVirtualScrollSlot<unknown> | (VVirtualScrollSlot<unknown> & {
188
+ itemRef: Ref<HTMLElement | undefined>;
189
+ })) => vue.VNode<vue.RendererNode, vue.RendererElement, {
182
190
  [key: string]: any;
183
191
  }>[];
184
- }>>> & vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps & (new <T_1>(props: {
192
+ }>>> & vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps & (new <T_1, Renderless extends boolean = false>(props: {
185
193
  items?: readonly T_1[] | undefined;
194
+ renderless?: Renderless | undefined;
186
195
  }, slots: {
187
- default: VVirtualScrollSlot<T_1>;
196
+ default: VVirtualScrollSlot<T_1> & (Renderless extends true ? {
197
+ itemRef: Ref<HTMLElement | undefined>;
198
+ } : {});
188
199
  }) => GenericProps<{
189
200
  items?: readonly T_1[] | undefined;
201
+ renderless?: Renderless | undefined;
190
202
  }, {
191
- default: VVirtualScrollSlot<T_1>;
203
+ default: VVirtualScrollSlot<T_1> & (Renderless extends true ? {
204
+ itemRef: Ref<HTMLElement | undefined>;
205
+ } : {});
192
206
  }>) & FilterPropsOptions<{
193
207
  height: (StringConstructor | NumberConstructor)[];
194
208
  maxHeight: (StringConstructor | NumberConstructor)[];
@@ -201,11 +215,15 @@ declare const VVirtualScroll: {
201
215
  type: PropType<vue.StyleValue>;
202
216
  default: null;
203
217
  };
204
- itemHeight: (StringConstructor | NumberConstructor)[];
218
+ itemHeight: {
219
+ type: (StringConstructor | NumberConstructor)[];
220
+ default: number;
221
+ };
205
222
  items: {
206
223
  type: PropType<readonly unknown[]>;
207
224
  default: () => never[];
208
225
  };
226
+ renderless: BooleanConstructor;
209
227
  }, vue.ExtractPropTypes<{
210
228
  height: (StringConstructor | NumberConstructor)[];
211
229
  maxHeight: (StringConstructor | NumberConstructor)[];
@@ -218,11 +236,15 @@ declare const VVirtualScroll: {
218
236
  type: PropType<vue.StyleValue>;
219
237
  default: null;
220
238
  };
221
- itemHeight: (StringConstructor | NumberConstructor)[];
239
+ itemHeight: {
240
+ type: (StringConstructor | NumberConstructor)[];
241
+ default: number;
242
+ };
222
243
  items: {
223
244
  type: PropType<readonly unknown[]>;
224
245
  default: () => never[];
225
246
  };
247
+ renderless: BooleanConstructor;
226
248
  }>>;
227
249
  type VVirtualScroll = InstanceType<typeof VVirtualScroll>;
228
250
 
@@ -55166,6 +55166,7 @@ declare const VVirtualScroll: {
55166
55166
  $data: {};
55167
55167
  $props: {
55168
55168
  style?: vue.StyleValue | undefined;
55169
+ itemHeight?: string | number | undefined;
55169
55170
  key?: string | number | symbol | undefined;
55170
55171
  height?: string | number | undefined;
55171
55172
  width?: string | number | undefined;
@@ -55215,7 +55216,6 @@ declare const VVirtualScroll: {
55215
55216
  }>) => void) | ((vnode: vue.VNode<vue.RendererNode, vue.RendererElement, {
55216
55217
  [key: string]: any;
55217
55218
  }>) => void)[] | undefined;
55218
- itemHeight?: string | number | undefined;
55219
55219
  };
55220
55220
  $attrs: {
55221
55221
  [x: string]: unknown;
@@ -55224,7 +55224,9 @@ declare const VVirtualScroll: {
55224
55224
  [x: string]: unknown;
55225
55225
  };
55226
55226
  $slots: Readonly<{
55227
- default?: ((arg: VVirtualScrollSlot<unknown>) => vue.VNode<vue.RendererNode, vue.RendererElement, {
55227
+ default?: ((arg: VVirtualScrollSlot<unknown> | (VVirtualScrollSlot<unknown> & {
55228
+ itemRef: Ref<HTMLElement | undefined>;
55229
+ })) => vue.VNode<vue.RendererNode, vue.RendererElement, {
55228
55230
  [key: string]: any;
55229
55231
  }>[]) | undefined;
55230
55232
  }>;
@@ -55234,6 +55236,7 @@ declare const VVirtualScroll: {
55234
55236
  $el: any;
55235
55237
  $options: vue.ComponentOptionsBase<{
55236
55238
  style: vue.StyleValue;
55239
+ itemHeight: string | number;
55237
55240
  } & {
55238
55241
  height?: string | number | undefined;
55239
55242
  width?: string | number | undefined;
@@ -55242,13 +55245,15 @@ declare const VVirtualScroll: {
55242
55245
  minHeight?: string | number | undefined;
55243
55246
  minWidth?: string | number | undefined;
55244
55247
  class?: any;
55245
- itemHeight?: string | number | undefined;
55246
55248
  }, {
55247
55249
  scrollToIndex: (index: number) => void;
55248
- }, unknown, {}, {}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, Omit<Record<string, any>, "$children" | "v-slot:default" | "items" | "v-slots">, string, {
55250
+ }, unknown, {}, {}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, Omit<Record<string, any>, "$children" | "v-slot:default" | "items" | "v-slots" | "renderless">, string, {
55249
55251
  style: vue.StyleValue;
55252
+ itemHeight: string | number;
55250
55253
  }, {}, string, vue.SlotsType<Partial<{
55251
- default: (arg: VVirtualScrollSlot<unknown>) => vue.VNode<vue.RendererNode, vue.RendererElement, {
55254
+ default: (arg: VVirtualScrollSlot<unknown> | (VVirtualScrollSlot<unknown> & {
55255
+ itemRef: Ref<HTMLElement | undefined>;
55256
+ })) => vue.VNode<vue.RendererNode, vue.RendererElement, {
55252
55257
  [key: string]: any;
55253
55258
  }>[];
55254
55259
  }>>> & {
@@ -55273,6 +55278,7 @@ declare const VVirtualScroll: {
55273
55278
  $watch<T extends string | ((...args: any) => any)>(source: T, cb: T extends (...args: any) => infer R ? (args_0: R, args_1: R) => any : (...args: any) => any, options?: vue.WatchOptions<boolean> | undefined): vue.WatchStopHandle;
55274
55279
  } & {
55275
55280
  style: vue.StyleValue;
55281
+ itemHeight: string | number;
55276
55282
  } & {
55277
55283
  height?: string | number | undefined;
55278
55284
  width?: string | number | undefined;
@@ -55281,7 +55287,6 @@ declare const VVirtualScroll: {
55281
55287
  minHeight?: string | number | undefined;
55282
55288
  minWidth?: string | number | undefined;
55283
55289
  class?: any;
55284
- itemHeight?: string | number | undefined;
55285
55290
  } & vue.ShallowUnwrapRef<{
55286
55291
  scrollToIndex: (index: number) => void;
55287
55292
  }> & {} & vue.ComponentCustomProperties & {};
@@ -55290,6 +55295,7 @@ declare const VVirtualScroll: {
55290
55295
  __isSuspense?: undefined;
55291
55296
  } & vue.ComponentOptionsBase<{
55292
55297
  style: vue.StyleValue;
55298
+ itemHeight: string | number;
55293
55299
  } & {
55294
55300
  height?: string | number | undefined;
55295
55301
  width?: string | number | undefined;
@@ -55298,23 +55304,31 @@ declare const VVirtualScroll: {
55298
55304
  minHeight?: string | number | undefined;
55299
55305
  minWidth?: string | number | undefined;
55300
55306
  class?: any;
55301
- itemHeight?: string | number | undefined;
55302
55307
  }, {
55303
55308
  scrollToIndex: (index: number) => void;
55304
- }, unknown, {}, {}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, Omit<Record<string, any>, "$children" | "v-slot:default" | "items" | "v-slots">, string, {
55309
+ }, unknown, {}, {}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, Omit<Record<string, any>, "$children" | "v-slot:default" | "items" | "v-slots" | "renderless">, string, {
55305
55310
  style: vue.StyleValue;
55311
+ itemHeight: string | number;
55306
55312
  }, {}, string, vue.SlotsType<Partial<{
55307
- default: (arg: VVirtualScrollSlot<unknown>) => vue.VNode<vue.RendererNode, vue.RendererElement, {
55313
+ default: (arg: VVirtualScrollSlot<unknown> | (VVirtualScrollSlot<unknown> & {
55314
+ itemRef: Ref<HTMLElement | undefined>;
55315
+ })) => vue.VNode<vue.RendererNode, vue.RendererElement, {
55308
55316
  [key: string]: any;
55309
55317
  }>[];
55310
- }>>> & vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps & (new <T_1>(props: {
55318
+ }>>> & vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps & (new <T_1, Renderless extends boolean = false>(props: {
55311
55319
  items?: readonly T_1[] | undefined;
55320
+ renderless?: Renderless | undefined;
55312
55321
  }, slots: {
55313
- default: VVirtualScrollSlot<T_1>;
55322
+ default: VVirtualScrollSlot<T_1> & (Renderless extends true ? {
55323
+ itemRef: Ref<HTMLElement | undefined>;
55324
+ } : {});
55314
55325
  }) => GenericProps<{
55315
55326
  items?: readonly T_1[] | undefined;
55327
+ renderless?: Renderless | undefined;
55316
55328
  }, {
55317
- default: VVirtualScrollSlot<T_1>;
55329
+ default: VVirtualScrollSlot<T_1> & (Renderless extends true ? {
55330
+ itemRef: Ref<HTMLElement | undefined>;
55331
+ } : {});
55318
55332
  }>) & FilterPropsOptions<{
55319
55333
  height: (StringConstructor | NumberConstructor)[];
55320
55334
  maxHeight: (StringConstructor | NumberConstructor)[];
@@ -55327,11 +55341,15 @@ declare const VVirtualScroll: {
55327
55341
  type: PropType<vue.StyleValue>;
55328
55342
  default: null;
55329
55343
  };
55330
- itemHeight: (StringConstructor | NumberConstructor)[];
55344
+ itemHeight: {
55345
+ type: (StringConstructor | NumberConstructor)[];
55346
+ default: number;
55347
+ };
55331
55348
  items: {
55332
55349
  type: PropType<readonly unknown[]>;
55333
55350
  default: () => never[];
55334
55351
  };
55352
+ renderless: BooleanConstructor;
55335
55353
  }, vue.ExtractPropTypes<{
55336
55354
  height: (StringConstructor | NumberConstructor)[];
55337
55355
  maxHeight: (StringConstructor | NumberConstructor)[];
@@ -55344,11 +55362,15 @@ declare const VVirtualScroll: {
55344
55362
  type: PropType<vue.StyleValue>;
55345
55363
  default: null;
55346
55364
  };
55347
- itemHeight: (StringConstructor | NumberConstructor)[];
55365
+ itemHeight: {
55366
+ type: (StringConstructor | NumberConstructor)[];
55367
+ default: number;
55368
+ };
55348
55369
  items: {
55349
55370
  type: PropType<readonly unknown[]>;
55350
55371
  default: () => never[];
55351
55372
  };
55373
+ renderless: BooleanConstructor;
55352
55374
  }>>;
55353
55375
  type VVirtualScroll = InstanceType<typeof VVirtualScroll>;
55354
55376
 
@@ -72,8 +72,6 @@ export function useFilter(props, items, query, options) {
72
72
  const filteredMatches = ref(new Map());
73
73
  const transformedItems = computed(() => options?.transform ? unref(items).map(options?.transform) : unref(items));
74
74
  watchEffect(() => {
75
- filteredItems.value = [];
76
- filteredMatches.value = new Map();
77
75
  const results = filterItems(transformedItems.value, strQuery.value, {
78
76
  customKeyFilter: props.customKeyFilter,
79
77
  default: props.customFilter,
@@ -82,15 +80,19 @@ export function useFilter(props, items, query, options) {
82
80
  noFilter: props.noFilter
83
81
  });
84
82
  const originalItems = unref(items);
83
+ const _filteredItems = [];
84
+ const _filteredMatches = new Map();
85
85
  results.forEach(_ref => {
86
86
  let {
87
87
  index,
88
88
  matches
89
89
  } = _ref;
90
90
  const item = originalItems[index];
91
- filteredItems.value.push(item);
92
- filteredMatches.value.set(item.value, matches);
91
+ _filteredItems.push(item);
92
+ _filteredMatches.set(item.value, matches);
93
93
  });
94
+ filteredItems.value = _filteredItems;
95
+ filteredMatches.value = _filteredMatches;
94
96
  });
95
97
  function getMatches(item) {
96
98
  return filteredMatches.value.get(item.value);
@@ -1 +1 @@
1
- {"version":3,"file":"filter.mjs","names":["computed","ref","unref","watchEffect","getPropertyFromItem","propsFactory","wrapInArray","defaultFilter","value","query","item","toString","toLocaleLowerCase","indexOf","makeFilterProps","customFilter","Function","customKeyFilter","Object","filterKeys","Array","String","filterMode","type","default","noFilter","Boolean","filterItems","items","options","array","filter","keys","customFiltersLength","length","loop","i","customMatches","defaultMatches","match","key","keyFilter","title","defaultMatchesLength","customMatchesLength","push","index","matches","useFilter","props","strQuery","filteredItems","filteredMatches","Map","transformedItems","transform","map","results","originalItems","forEach","_ref","set","getMatches","get"],"sources":["../../src/composables/filter.ts"],"sourcesContent":["/* eslint-disable max-statements */\n/* eslint-disable no-labels */\n\n// Utilities\nimport { computed, ref, unref, watchEffect } from 'vue'\nimport { getPropertyFromItem, propsFactory, wrapInArray } from '@/util'\n\n// Types\nimport type { PropType, Ref } from 'vue'\nimport type { MaybeRef } from '@/util'\n\n/**\n * - match without highlight\n * - single match (index), length already known\n * - single match (start, end)\n * - multiple matches (start, end), probably shouldn't overlap\n */\nexport type FilterMatch = boolean | number | [number, number] | [number, number][]\nexport type FilterFunction = (value: string, query: string, item?: any) => FilterMatch\nexport type FilterKeyFunctions = Record<string, FilterFunction>\nexport type FilterKeys = string | string[]\nexport type FilterMode = 'some' | 'every' | 'union' | 'intersection'\n\nexport interface FilterProps {\n customFilter?: FilterFunction\n customKeyFilter?: FilterKeyFunctions\n filterKeys?: FilterKeys\n filterMode?: FilterMode\n noFilter?: boolean\n}\n\n// Composables\nexport const defaultFilter: FilterFunction = (value, query, item) => {\n if (value == null || query == null) return -1\n\n return value.toString().toLocaleLowerCase().indexOf(query.toString().toLocaleLowerCase())\n}\n\nexport const makeFilterProps = propsFactory({\n customFilter: Function as PropType<FilterFunction>,\n customKeyFilter: Object as PropType<FilterKeyFunctions>,\n filterKeys: [Array, String] as PropType<FilterKeys>,\n filterMode: {\n type: String as PropType<FilterMode>,\n default: 'intersection',\n },\n noFilter: Boolean,\n}, 'filter')\n\nexport function filterItems (\n items: any[],\n query: string,\n options?: {\n customKeyFilter?: FilterKeyFunctions\n default?: FilterFunction\n filterKeys?: FilterKeys\n filterMode?: FilterMode\n noFilter?: boolean\n },\n) {\n const array: { index: number, matches: Record<string, FilterMatch> }[] = []\n // always ensure we fall back to a functioning filter\n const filter = options?.default ?? defaultFilter\n const keys = options?.filterKeys ? wrapInArray(options.filterKeys) : false\n const customFiltersLength = Object.keys(options?.customKeyFilter ?? {}).length\n\n if (!items?.length) return array\n\n loop:\n for (let i = 0; i < items.length; i++) {\n const item = items[i]\n const customMatches: Record<string, FilterMatch> = {}\n const defaultMatches: Record<string, FilterMatch> = {}\n let match: FilterMatch = -1\n\n if (query && !options?.noFilter) {\n if (typeof item === 'object') {\n const filterKeys = keys || Object.keys(item)\n\n for (const key of filterKeys) {\n const value = getPropertyFromItem(item as any, key, item)\n const keyFilter = options?.customKeyFilter?.[key]\n\n match = keyFilter\n ? keyFilter(value, query, item)\n : filter(value, query, item)\n\n if (match !== -1 && match !== false) {\n if (keyFilter) customMatches[key] = match\n else defaultMatches[key] = match\n } else if (options?.filterMode === 'every') {\n continue loop\n }\n }\n } else {\n match = filter(item, query, item)\n if (match !== -1 && match !== false) {\n defaultMatches.title = match\n }\n }\n\n const defaultMatchesLength = Object.keys(defaultMatches).length\n const customMatchesLength = Object.keys(customMatches).length\n\n if (!defaultMatchesLength && !customMatchesLength) continue\n\n if (\n options?.filterMode === 'union' &&\n customMatchesLength !== customFiltersLength &&\n !defaultMatchesLength\n ) continue\n\n if (\n options?.filterMode === 'intersection' &&\n (\n customMatchesLength !== customFiltersLength ||\n !defaultMatchesLength\n )\n ) continue\n }\n\n array.push({ index: i, matches: { ...defaultMatches, ...customMatches } })\n }\n\n return array\n}\n\nexport function useFilter <T extends { value: unknown }> (\n props: FilterProps,\n items: MaybeRef<T[]>,\n query: Ref<string | undefined>,\n options?: {\n transform?: (item: T) => any\n }\n) {\n const strQuery = computed(() => (\n typeof query?.value !== 'string' &&\n typeof query?.value !== 'number'\n ) ? '' : String(query.value))\n\n const filteredItems: Ref<T[]> = ref([])\n const filteredMatches: Ref<Map<unknown, Record<string, FilterMatch>>> = ref(new Map())\n const transformedItems = computed(() => options?.transform ? unref(items).map(options?.transform) : unref(items))\n\n watchEffect(() => {\n filteredItems.value = []\n filteredMatches.value = new Map()\n\n const results = filterItems(\n transformedItems.value,\n strQuery.value,\n {\n customKeyFilter: props.customKeyFilter,\n default: props.customFilter,\n filterKeys: props.filterKeys,\n filterMode: props.filterMode,\n noFilter: props.noFilter,\n },\n )\n\n const originalItems = unref(items)\n\n results.forEach(({ index, matches }) => {\n const item = originalItems[index]\n filteredItems.value.push(item)\n filteredMatches.value.set(item.value, matches)\n })\n })\n\n function getMatches (item: T) {\n return filteredMatches.value.get(item.value)\n }\n\n return { filteredItems, filteredMatches, getMatches }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"filter.mjs","names":["computed","ref","unref","watchEffect","getPropertyFromItem","propsFactory","wrapInArray","defaultFilter","value","query","item","toString","toLocaleLowerCase","indexOf","makeFilterProps","customFilter","Function","customKeyFilter","Object","filterKeys","Array","String","filterMode","type","default","noFilter","Boolean","filterItems","items","options","array","filter","keys","customFiltersLength","length","loop","i","customMatches","defaultMatches","match","key","keyFilter","title","defaultMatchesLength","customMatchesLength","push","index","matches","useFilter","props","strQuery","filteredItems","filteredMatches","Map","transformedItems","transform","map","results","originalItems","_filteredItems","_filteredMatches","forEach","_ref","set","getMatches","get"],"sources":["../../src/composables/filter.ts"],"sourcesContent":["/* eslint-disable max-statements */\n/* eslint-disable no-labels */\n\n// Utilities\nimport { computed, ref, unref, watchEffect } from 'vue'\nimport { getPropertyFromItem, propsFactory, wrapInArray } from '@/util'\n\n// Types\nimport type { PropType, Ref } from 'vue'\nimport type { MaybeRef } from '@/util'\n\n/**\n * - match without highlight\n * - single match (index), length already known\n * - single match (start, end)\n * - multiple matches (start, end), probably shouldn't overlap\n */\nexport type FilterMatch = boolean | number | [number, number] | [number, number][]\nexport type FilterFunction = (value: string, query: string, item?: any) => FilterMatch\nexport type FilterKeyFunctions = Record<string, FilterFunction>\nexport type FilterKeys = string | string[]\nexport type FilterMode = 'some' | 'every' | 'union' | 'intersection'\n\nexport interface FilterProps {\n customFilter?: FilterFunction\n customKeyFilter?: FilterKeyFunctions\n filterKeys?: FilterKeys\n filterMode?: FilterMode\n noFilter?: boolean\n}\n\n// Composables\nexport const defaultFilter: FilterFunction = (value, query, item) => {\n if (value == null || query == null) return -1\n\n return value.toString().toLocaleLowerCase().indexOf(query.toString().toLocaleLowerCase())\n}\n\nexport const makeFilterProps = propsFactory({\n customFilter: Function as PropType<FilterFunction>,\n customKeyFilter: Object as PropType<FilterKeyFunctions>,\n filterKeys: [Array, String] as PropType<FilterKeys>,\n filterMode: {\n type: String as PropType<FilterMode>,\n default: 'intersection',\n },\n noFilter: Boolean,\n}, 'filter')\n\nexport function filterItems (\n items: any[],\n query: string,\n options?: {\n customKeyFilter?: FilterKeyFunctions\n default?: FilterFunction\n filterKeys?: FilterKeys\n filterMode?: FilterMode\n noFilter?: boolean\n },\n) {\n const array: { index: number, matches: Record<string, FilterMatch> }[] = []\n // always ensure we fall back to a functioning filter\n const filter = options?.default ?? defaultFilter\n const keys = options?.filterKeys ? wrapInArray(options.filterKeys) : false\n const customFiltersLength = Object.keys(options?.customKeyFilter ?? {}).length\n\n if (!items?.length) return array\n\n loop:\n for (let i = 0; i < items.length; i++) {\n const item = items[i]\n const customMatches: Record<string, FilterMatch> = {}\n const defaultMatches: Record<string, FilterMatch> = {}\n let match: FilterMatch = -1\n\n if (query && !options?.noFilter) {\n if (typeof item === 'object') {\n const filterKeys = keys || Object.keys(item)\n\n for (const key of filterKeys) {\n const value = getPropertyFromItem(item as any, key, item)\n const keyFilter = options?.customKeyFilter?.[key]\n\n match = keyFilter\n ? keyFilter(value, query, item)\n : filter(value, query, item)\n\n if (match !== -1 && match !== false) {\n if (keyFilter) customMatches[key] = match\n else defaultMatches[key] = match\n } else if (options?.filterMode === 'every') {\n continue loop\n }\n }\n } else {\n match = filter(item, query, item)\n if (match !== -1 && match !== false) {\n defaultMatches.title = match\n }\n }\n\n const defaultMatchesLength = Object.keys(defaultMatches).length\n const customMatchesLength = Object.keys(customMatches).length\n\n if (!defaultMatchesLength && !customMatchesLength) continue\n\n if (\n options?.filterMode === 'union' &&\n customMatchesLength !== customFiltersLength &&\n !defaultMatchesLength\n ) continue\n\n if (\n options?.filterMode === 'intersection' &&\n (\n customMatchesLength !== customFiltersLength ||\n !defaultMatchesLength\n )\n ) continue\n }\n\n array.push({ index: i, matches: { ...defaultMatches, ...customMatches } })\n }\n\n return array\n}\n\nexport function useFilter <T extends { value: unknown }> (\n props: FilterProps,\n items: MaybeRef<T[]>,\n query: Ref<string | undefined>,\n options?: {\n transform?: (item: T) => any\n }\n) {\n const strQuery = computed(() => (\n typeof query?.value !== 'string' &&\n typeof query?.value !== 'number'\n ) ? '' : String(query.value))\n\n const filteredItems: Ref<T[]> = ref([])\n const filteredMatches: Ref<Map<unknown, Record<string, FilterMatch>>> = ref(new Map())\n const transformedItems = computed(() => options?.transform ? unref(items).map(options?.transform) : unref(items))\n\n watchEffect(() => {\n const results = filterItems(\n transformedItems.value,\n strQuery.value,\n {\n customKeyFilter: props.customKeyFilter,\n default: props.customFilter,\n filterKeys: props.filterKeys,\n filterMode: props.filterMode,\n noFilter: props.noFilter,\n },\n )\n\n const originalItems = unref(items)\n\n const _filteredItems: typeof filteredItems['value'] = []\n const _filteredMatches: typeof filteredMatches['value'] = new Map()\n results.forEach(({ index, matches }) => {\n const item = originalItems[index]\n _filteredItems.push(item)\n _filteredMatches.set(item.value, matches)\n })\n filteredItems.value = _filteredItems\n filteredMatches.value = _filteredMatches\n })\n\n function getMatches (item: T) {\n return filteredMatches.value.get(item.value)\n }\n\n return { filteredItems, filteredMatches, getMatches }\n}\n"],"mappings":"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"}
@@ -3,13 +3,18 @@ import { onBeforeUnmount, readonly, ref, watch } from 'vue';
3
3
  import { refElement } from "../util/index.mjs";
4
4
  import { IN_BROWSER } from "../util/globals.mjs"; // Types
5
5
  export function useResizeObserver(callback) {
6
+ let box = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'content';
6
7
  const resizeRef = ref();
7
8
  const contentRect = ref();
8
9
  if (IN_BROWSER) {
9
10
  const observer = new ResizeObserver(entries => {
10
11
  callback?.(entries, observer);
11
12
  if (!entries.length) return;
12
- contentRect.value = entries[0].contentRect;
13
+ if (box === 'content') {
14
+ contentRect.value = entries[0].contentRect;
15
+ } else {
16
+ contentRect.value = entries[0].target.getBoundingClientRect();
17
+ }
13
18
  });
14
19
  onBeforeUnmount(() => {
15
20
  observer.disconnect();