vuetify 3.3.6 → 3.3.8

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 (89) hide show
  1. package/dist/json/attributes.json +15 -11
  2. package/dist/json/importMap.json +44 -44
  3. package/dist/json/tags.json +1 -0
  4. package/dist/json/web-types.json +27 -25
  5. package/dist/vuetify-labs.css +72 -55
  6. package/dist/vuetify-labs.d.ts +178 -76
  7. package/dist/vuetify-labs.esm.js +548 -397
  8. package/dist/vuetify-labs.esm.js.map +1 -1
  9. package/dist/vuetify-labs.js +547 -396
  10. package/dist/vuetify-labs.min.css +2 -2
  11. package/dist/vuetify.css +50 -33
  12. package/dist/vuetify.d.ts +145 -81
  13. package/dist/vuetify.esm.js +531 -386
  14. package/dist/vuetify.esm.js.map +1 -1
  15. package/dist/vuetify.js +530 -385
  16. package/dist/vuetify.js.map +1 -1
  17. package/dist/vuetify.min.css +2 -2
  18. package/dist/vuetify.min.js +700 -680
  19. package/dist/vuetify.min.js.map +1 -1
  20. package/lib/components/VAutocomplete/VAutocomplete.mjs +48 -35
  21. package/lib/components/VAutocomplete/VAutocomplete.mjs.map +1 -1
  22. package/lib/components/VBtn/VBtn.mjs +1 -1
  23. package/lib/components/VBtn/VBtn.mjs.map +1 -1
  24. package/lib/components/VCarousel/VCarousel.mjs +58 -57
  25. package/lib/components/VCarousel/VCarousel.mjs.map +1 -1
  26. package/lib/components/VCheckbox/index.d.mts +28 -16
  27. package/lib/components/VCombobox/VCombobox.mjs +48 -35
  28. package/lib/components/VCombobox/VCombobox.mjs.map +1 -1
  29. package/lib/components/VField/VField.css +18 -6
  30. package/lib/components/VField/VField.sass +18 -6
  31. package/lib/components/VField/_variables.scss +2 -2
  32. package/lib/components/VIcon/VIcon.css +1 -0
  33. package/lib/components/VIcon/VIcon.sass +1 -0
  34. package/lib/components/VImg/VImg.css +4 -2
  35. package/lib/components/VImg/VImg.mjs +4 -2
  36. package/lib/components/VImg/VImg.mjs.map +1 -1
  37. package/lib/components/VImg/VImg.sass +3 -4
  38. package/lib/components/VOverlay/VOverlay.css +2 -0
  39. package/lib/components/VOverlay/VOverlay.mjs +2 -2
  40. package/lib/components/VOverlay/VOverlay.mjs.map +1 -1
  41. package/lib/components/VOverlay/VOverlay.sass +3 -1
  42. package/lib/components/VOverlay/scrollStrategies.mjs +3 -1
  43. package/lib/components/VOverlay/scrollStrategies.mjs.map +1 -1
  44. package/lib/components/VRadio/index.d.mts +14 -8
  45. package/lib/components/VRadioGroup/index.d.mts +14 -8
  46. package/lib/components/VResponsive/VResponsive.css +6 -11
  47. package/lib/components/VResponsive/VResponsive.sass +5 -10
  48. package/lib/components/VSelect/VSelect.mjs +43 -31
  49. package/lib/components/VSelect/VSelect.mjs.map +1 -1
  50. package/lib/components/VSelect/useScrolling.mjs +69 -0
  51. package/lib/components/VSelect/useScrolling.mjs.map +1 -0
  52. package/lib/components/VSelectionControl/VSelectionControl.mjs +2 -2
  53. package/lib/components/VSelectionControl/VSelectionControl.mjs.map +1 -1
  54. package/lib/components/VSelectionControl/index.d.mts +14 -8
  55. package/lib/components/VSelectionControlGroup/VSelectionControlGroup.mjs +4 -1
  56. package/lib/components/VSelectionControlGroup/VSelectionControlGroup.mjs.map +1 -1
  57. package/lib/components/VSelectionControlGroup/index.d.mts +14 -8
  58. package/lib/components/VSwitch/index.d.mts +14 -8
  59. package/lib/components/VTextField/VTextField.css +5 -0
  60. package/lib/components/VTextField/VTextField.mjs +6 -2
  61. package/lib/components/VTextField/VTextField.mjs.map +1 -1
  62. package/lib/components/VTextField/VTextField.sass +5 -0
  63. package/lib/components/VTextField/_variables.scss +1 -0
  64. package/lib/components/VVirtualScroll/VVirtualScroll.mjs +50 -24
  65. package/lib/components/VVirtualScroll/VVirtualScroll.mjs.map +1 -1
  66. package/lib/components/VVirtualScroll/VVirtualScrollItem.mjs +13 -23
  67. package/lib/components/VVirtualScroll/VVirtualScrollItem.mjs.map +1 -1
  68. package/lib/components/VVirtualScroll/index.d.mts +37 -15
  69. package/lib/components/index.d.mts +134 -70
  70. package/lib/composables/filter.mjs +9 -6
  71. package/lib/composables/filter.mjs.map +1 -1
  72. package/lib/composables/resizeObserver.mjs +6 -1
  73. package/lib/composables/resizeObserver.mjs.map +1 -1
  74. package/lib/composables/theme.mjs +2 -2
  75. package/lib/composables/theme.mjs.map +1 -1
  76. package/lib/composables/virtual.mjs +17 -17
  77. package/lib/composables/virtual.mjs.map +1 -1
  78. package/lib/entry-bundler.mjs +1 -1
  79. package/lib/framework.mjs +1 -1
  80. package/lib/index.d.mts +11 -11
  81. package/lib/labs/VDataTable/VDataTableVirtual.mjs +12 -10
  82. package/lib/labs/VDataTable/VDataTableVirtual.mjs.map +1 -1
  83. package/lib/labs/VDataTable/composables/headers.mjs +6 -2
  84. package/lib/labs/VDataTable/composables/headers.mjs.map +1 -1
  85. package/lib/labs/VDataTable/index.d.mts +44 -6
  86. package/lib/labs/components.d.mts +44 -6
  87. package/lib/util/getScrollParent.mjs +7 -1
  88. package/lib/util/getScrollParent.mjs.map +1 -1
  89. package/package.json +2 -2
@@ -20,7 +20,7 @@ declare const VSelectionControlGroup: {
20
20
  inline?: boolean | undefined;
21
21
  error?: boolean | undefined;
22
22
  style?: vue.StyleValue | undefined;
23
- disabled?: boolean | undefined;
23
+ disabled?: boolean | null | undefined;
24
24
  multiple?: boolean | null | undefined;
25
25
  readonly?: boolean | undefined;
26
26
  density?: Density | undefined;
@@ -106,7 +106,7 @@ declare const VSelectionControlGroup: {
106
106
  inline: boolean;
107
107
  error: boolean;
108
108
  style: vue.StyleValue;
109
- disabled: boolean;
109
+ disabled: boolean | null;
110
110
  multiple: boolean | null;
111
111
  readonly: boolean;
112
112
  density: Density;
@@ -140,7 +140,7 @@ declare const VSelectionControlGroup: {
140
140
  inline: boolean;
141
141
  error: boolean;
142
142
  style: vue.StyleValue;
143
- disabled: boolean;
143
+ disabled: boolean | null;
144
144
  multiple: boolean | null;
145
145
  readonly: boolean;
146
146
  density: Density;
@@ -175,7 +175,7 @@ declare const VSelectionControlGroup: {
175
175
  inline: boolean;
176
176
  error: boolean;
177
177
  style: vue.StyleValue;
178
- disabled: boolean;
178
+ disabled: boolean | null;
179
179
  multiple: boolean | null;
180
180
  readonly: boolean;
181
181
  density: Density;
@@ -211,7 +211,7 @@ declare const VSelectionControlGroup: {
211
211
  inline: boolean;
212
212
  error: boolean;
213
213
  style: vue.StyleValue;
214
- disabled: boolean;
214
+ disabled: boolean | null;
215
215
  multiple: boolean | null;
216
216
  readonly: boolean;
217
217
  density: Density;
@@ -245,7 +245,7 @@ declare const VSelectionControlGroup: {
245
245
  inline: boolean;
246
246
  error: boolean;
247
247
  style: vue.StyleValue;
248
- disabled: boolean;
248
+ disabled: boolean | null;
249
249
  multiple: boolean | null;
250
250
  readonly: boolean;
251
251
  density: Density;
@@ -269,7 +269,10 @@ declare const VSelectionControlGroup: {
269
269
  default: null;
270
270
  };
271
271
  color: StringConstructor;
272
- disabled: BooleanConstructor;
272
+ disabled: {
273
+ type: PropType<boolean | null>;
274
+ default: null;
275
+ };
273
276
  defaultsTarget: {
274
277
  type: PropType<string>;
275
278
  default: string;
@@ -308,7 +311,10 @@ declare const VSelectionControlGroup: {
308
311
  default: null;
309
312
  };
310
313
  color: StringConstructor;
311
- disabled: BooleanConstructor;
314
+ disabled: {
315
+ type: PropType<boolean | null>;
316
+ default: null;
317
+ };
312
318
  defaultsTarget: {
313
319
  type: PropType<string>;
314
320
  default: string;
@@ -63,7 +63,7 @@ declare const VSwitch: {
63
63
  inset?: boolean | undefined;
64
64
  loading?: string | boolean | undefined;
65
65
  style?: vue.StyleValue | undefined;
66
- disabled?: boolean | undefined;
66
+ disabled?: boolean | null | undefined;
67
67
  multiple?: boolean | null | undefined;
68
68
  readonly?: boolean | undefined;
69
69
  indeterminate?: boolean | undefined;
@@ -229,7 +229,7 @@ declare const VSwitch: {
229
229
  inset: boolean;
230
230
  loading: string | boolean;
231
231
  style: vue.StyleValue;
232
- disabled: boolean;
232
+ disabled: boolean | null;
233
233
  multiple: boolean | null;
234
234
  readonly: boolean;
235
235
  indeterminate: boolean;
@@ -322,7 +322,7 @@ declare const VSwitch: {
322
322
  inset: boolean;
323
323
  loading: string | boolean;
324
324
  style: vue.StyleValue;
325
- disabled: boolean;
325
+ disabled: boolean | null;
326
326
  multiple: boolean | null;
327
327
  readonly: boolean;
328
328
  indeterminate: boolean;
@@ -392,7 +392,7 @@ declare const VSwitch: {
392
392
  inset: boolean;
393
393
  loading: string | boolean;
394
394
  style: vue.StyleValue;
395
- disabled: boolean;
395
+ disabled: boolean | null;
396
396
  multiple: boolean | null;
397
397
  readonly: boolean;
398
398
  indeterminate: boolean;
@@ -485,7 +485,7 @@ declare const VSwitch: {
485
485
  inset: boolean;
486
486
  loading: string | boolean;
487
487
  style: vue.StyleValue;
488
- disabled: boolean;
488
+ disabled: boolean | null;
489
489
  multiple: boolean | null;
490
490
  readonly: boolean;
491
491
  indeterminate: boolean;
@@ -578,7 +578,7 @@ declare const VSwitch: {
578
578
  inset: boolean;
579
579
  loading: string | boolean;
580
580
  style: vue.StyleValue;
581
- disabled: boolean;
581
+ disabled: boolean | null;
582
582
  multiple: boolean | null;
583
583
  readonly: boolean;
584
584
  indeterminate: boolean;
@@ -633,7 +633,10 @@ declare const VSwitch: {
633
633
  default: null;
634
634
  };
635
635
  color: StringConstructor;
636
- disabled: BooleanConstructor;
636
+ disabled: {
637
+ type: vue.PropType<boolean | null>;
638
+ default: null;
639
+ };
637
640
  defaultsTarget: StringConstructor;
638
641
  error: BooleanConstructor;
639
642
  id: StringConstructor;
@@ -716,7 +719,10 @@ declare const VSwitch: {
716
719
  default: null;
717
720
  };
718
721
  color: StringConstructor;
719
- disabled: BooleanConstructor;
722
+ disabled: {
723
+ type: vue.PropType<boolean | null>;
724
+ default: null;
725
+ };
720
726
  defaultsTarget: StringConstructor;
721
727
  error: BooleanConstructor;
722
728
  id: StringConstructor;
@@ -47,9 +47,14 @@
47
47
  opacity: 0;
48
48
  transition: inherit;
49
49
  white-space: nowrap;
50
+ min-height: calc(max(var(--v-input-control-height, 56px), 1.5rem + var(--v-field-input-padding-top) + var(--v-field-input-padding-bottom)) + var(--v-input-chips-margin-bottom) + 2px);
50
51
  padding-top: calc(var(--v-field-padding-top, 4px) + var(--v-input-padding-top, 0));
51
52
  padding-bottom: var(--v-field-padding-bottom, 6px);
52
53
  }
54
+ .v-text-field__prefix__text, .v-text-field__suffix__text {
55
+ margin-top: var(--v-input-chips-margin-top);
56
+ margin-bottom: var(--v-input-chips-margin-bottom);
57
+ }
53
58
  .v-field--active .v-text-field__prefix, .v-field--active .v-text-field__suffix {
54
59
  opacity: 1;
55
60
  }
@@ -183,12 +183,16 @@ export const VTextField = genericComponent()({
183
183
  }]]);
184
184
  return _createVNode(_Fragment, null, [props.prefix && _createVNode("span", {
185
185
  "class": "v-text-field__prefix"
186
- }, [props.prefix]), _createVNode("div", {
186
+ }, [_createVNode("span", {
187
+ "class": "v-text-field__prefix__text"
188
+ }, [props.prefix])]), _createVNode("div", {
187
189
  "class": fieldClass,
188
190
  "data-no-activator": ""
189
191
  }, [slots.default ? _createVNode(_Fragment, null, [slots.default(), inputNode]) : cloneVNode(inputNode)]), props.suffix && _createVNode("span", {
190
192
  "class": "v-text-field__suffix"
191
- }, [props.suffix])]);
193
+ }, [_createVNode("span", {
194
+ "class": "v-text-field__suffix__text"
195
+ }, [props.suffix])])]);
192
196
  }
193
197
  });
194
198
  },
@@ -1 +1 @@
1
- {"version":3,"file":"VTextField.mjs","names":["VCounter","filterFieldProps","makeVFieldProps","VField","makeVInputProps","VInput","useFocus","forwardRefs","useProxiedModel","Intersect","cloneVNode","computed","nextTick","ref","callEvent","filterInputAttrs","genericComponent","propsFactory","useRender","activeTypes","makeVTextFieldProps","autofocus","Boolean","counter","Number","String","counterValue","Function","prefix","placeholder","persistentPlaceholder","persistentCounter","suffix","type","default","modelModifiers","Object","VTextField","name","directives","inheritAttrs","props","emits","e","focused","val","setup","_ref","attrs","emit","slots","model","isFocused","focus","blur","value","toString","length","max","maxlength","undefined","isPlainOrUnderlined","includes","variant","onIntersect","isIntersecting","entries","target","vInputRef","vFieldRef","inputRef","isActive","active","onFocus","document","activeElement","onControlMousedown","preventDefault","onControlClick","onClear","stopPropagation","onInput","el","trim","caretPosition","selectionStart","selectionEnd","hasCounter","hasDetails","details","rootAttrs","inputAttrs","modelValue","_","inputProps","filterProps","fieldProps","_createVNode","_mergeProps","$event","class","style","_ref2","id","isDisabled","isDirty","isReadonly","isValid","dirty","_ref3","fieldClass","slotProps","inputNode","_withDirectives","_resolveDirective","handler","once","_Fragment"],"sources":["../../../src/components/VTextField/VTextField.tsx"],"sourcesContent":["// Styles\nimport './VTextField.sass'\n\n// Components\nimport { VCounter } from '@/components/VCounter/VCounter'\nimport { filterFieldProps, makeVFieldProps, VField } from '@/components/VField/VField'\nimport { makeVInputProps, VInput } from '@/components/VInput/VInput'\n\n// Composables\nimport { useFocus } from '@/composables/focus'\nimport { forwardRefs } from '@/composables/forwardRefs'\nimport { useProxiedModel } from '@/composables/proxiedModel'\n\n// Directives\nimport Intersect from '@/directives/intersect'\n\n// Utilities\nimport { cloneVNode, computed, nextTick, ref } from 'vue'\nimport { callEvent, filterInputAttrs, genericComponent, propsFactory, useRender } from '@/util'\n\n// Types\nimport type { PropType } from 'vue'\nimport type { VCounterSlot } from '@/components/VCounter/VCounter'\nimport type { VFieldSlots } from '@/components/VField/VField'\nimport type { VInputSlots } from '@/components/VInput/VInput'\n\nconst activeTypes = ['color', 'file', 'time', 'date', 'datetime-local', 'week', 'month']\n\nexport const makeVTextFieldProps = propsFactory({\n autofocus: Boolean,\n counter: [Boolean, Number, String] as PropType<true | number | string>,\n counterValue: Function as PropType<(value: any) => number>,\n prefix: String,\n placeholder: String,\n persistentPlaceholder: Boolean,\n persistentCounter: Boolean,\n suffix: String,\n type: {\n type: String,\n default: 'text',\n },\n modelModifiers: Object as PropType<Record<string, boolean>>,\n\n ...makeVInputProps(),\n ...makeVFieldProps(),\n}, 'VTextField')\n\nexport type VTextFieldSlots = Omit<VInputSlots & VFieldSlots, 'default'> & {\n default: never\n counter: VCounterSlot\n}\n\nexport const VTextField = genericComponent<VTextFieldSlots>()({\n name: 'VTextField',\n\n directives: { Intersect },\n\n inheritAttrs: false,\n\n props: makeVTextFieldProps(),\n\n emits: {\n 'click:control': (e: MouseEvent) => true,\n 'mousedown:control': (e: MouseEvent) => true,\n 'update:focused': (focused: boolean) => true,\n 'update:modelValue': (val: string) => true,\n },\n\n setup (props, { attrs, emit, slots }) {\n const model = useProxiedModel(props, 'modelValue')\n const { isFocused, focus, blur } = useFocus(props)\n const counterValue = computed(() => {\n return typeof props.counterValue === 'function'\n ? props.counterValue(model.value)\n : (model.value ?? '').toString().length\n })\n const max = computed(() => {\n if (attrs.maxlength) return attrs.maxlength as unknown as undefined\n\n if (\n !props.counter ||\n (typeof props.counter !== 'number' &&\n typeof props.counter !== 'string')\n ) return undefined\n\n return props.counter\n })\n\n const isPlainOrUnderlined = computed(() => ['plain', 'underlined'].includes(props.variant))\n\n function onIntersect (\n isIntersecting: boolean,\n entries: IntersectionObserverEntry[]\n ) {\n if (!props.autofocus || !isIntersecting) return\n\n (entries[0].target as HTMLInputElement)?.focus?.()\n }\n\n const vInputRef = ref<VInput>()\n const vFieldRef = ref<VField>()\n const inputRef = ref<HTMLInputElement>()\n const isActive = computed(() => (\n activeTypes.includes(props.type) ||\n props.persistentPlaceholder ||\n isFocused.value ||\n props.active\n ))\n function onFocus () {\n if (inputRef.value !== document.activeElement) {\n inputRef.value?.focus()\n }\n\n if (!isFocused.value) focus()\n }\n function onControlMousedown (e: MouseEvent) {\n emit('mousedown:control', e)\n\n if (e.target === inputRef.value) return\n\n onFocus()\n e.preventDefault()\n }\n function onControlClick (e: MouseEvent) {\n onFocus()\n\n emit('click:control', e)\n }\n function onClear (e: MouseEvent) {\n e.stopPropagation()\n\n onFocus()\n\n nextTick(() => {\n model.value = null\n\n callEvent(props['onClick:clear'], e)\n })\n }\n function onInput (e: Event) {\n const el = e.target as HTMLInputElement\n model.value = el.value\n if (\n props.modelModifiers?.trim &&\n ['text', 'search', 'password', 'tel', 'url'].includes(props.type)\n ) {\n const caretPosition = [el.selectionStart, el.selectionEnd]\n nextTick(() => {\n el.selectionStart = caretPosition[0]\n el.selectionEnd = caretPosition[1]\n })\n }\n }\n\n useRender(() => {\n const hasCounter = !!(slots.counter || props.counter || props.counterValue)\n const hasDetails = !!(hasCounter || slots.details)\n const [rootAttrs, inputAttrs] = filterInputAttrs(attrs)\n const [{ modelValue: _, ...inputProps }] = VInput.filterProps(props)\n const [fieldProps] = filterFieldProps(props)\n\n return (\n <VInput\n ref={ vInputRef }\n v-model={ model.value }\n class={[\n 'v-text-field',\n {\n 'v-text-field--prefixed': props.prefix,\n 'v-text-field--suffixed': props.suffix,\n 'v-text-field--plain-underlined': ['plain', 'underlined'].includes(props.variant),\n },\n props.class,\n ]}\n style={ props.style }\n { ...rootAttrs }\n { ...inputProps }\n centerAffix={ !isPlainOrUnderlined.value }\n focused={ isFocused.value }\n >\n {{\n ...slots,\n default: ({\n id,\n isDisabled,\n isDirty,\n isReadonly,\n isValid,\n }) => (\n <VField\n ref={ vFieldRef }\n onMousedown={ onControlMousedown }\n onClick={ onControlClick }\n onClick:clear={ onClear }\n onClick:prependInner={ props['onClick:prependInner'] }\n onClick:appendInner={ props['onClick:appendInner'] }\n role=\"textbox\"\n { ...fieldProps }\n id={ id.value }\n active={ isActive.value || isDirty.value }\n dirty={ isDirty.value || props.dirty }\n disabled={ isDisabled.value }\n focused={ isFocused.value }\n error={ isValid.value === false }\n >\n {{\n ...slots,\n default: ({\n props: { class: fieldClass, ...slotProps },\n }) => {\n const inputNode = (\n <input\n ref={ inputRef }\n value={ model.value }\n onInput={ onInput }\n v-intersect={[{\n handler: onIntersect,\n }, null, ['once']]}\n autofocus={ props.autofocus }\n readonly={ isReadonly.value }\n disabled={ isDisabled.value }\n name={ props.name }\n placeholder={ props.placeholder }\n size={ 1 }\n type={ props.type }\n onFocus={ onFocus }\n onBlur={ blur }\n { ...slotProps }\n { ...inputAttrs }\n />\n )\n\n return (\n <>\n { props.prefix && (\n <span class=\"v-text-field__prefix\">\n { props.prefix }\n </span>\n )}\n\n <div\n class={ fieldClass }\n data-no-activator=\"\"\n >\n { slots.default ? (\n <>\n { slots.default() }\n { inputNode }\n </>\n ) : cloneVNode(inputNode)\n }\n </div>\n\n { props.suffix && (\n <span class=\"v-text-field__suffix\">\n { props.suffix }\n </span>\n )}\n </>\n )\n },\n }}\n </VField>\n ),\n details: hasDetails ? slotProps => (\n <>\n { slots.details?.(slotProps) }\n\n { hasCounter && (\n <>\n <span />\n\n <VCounter\n active={ props.persistentCounter || isFocused.value }\n value={ counterValue.value }\n max={ max.value }\n v-slots:default={ slots.counter }\n />\n </>\n )}\n </>\n ) : undefined,\n }}\n </VInput>\n )\n })\n\n return forwardRefs({}, vInputRef, vFieldRef, inputRef)\n },\n})\n\nexport type VTextField = InstanceType<typeof VTextField>\n"],"mappings":";AAAA;AACA;;AAEA;AAAA,SACSA,QAAQ;AAAA,SACRC,gBAAgB,EAAEC,eAAe,EAAEC,MAAM;AAAA,SACzCC,eAAe,EAAEC,MAAM,gCAEhC;AAAA,SACSC,QAAQ;AAAA,SACRC,WAAW;AAAA,SACXC,eAAe,8CAExB;AAAA,OACOC,SAAS,8CAEhB;AACA,SAASC,UAAU,EAAEC,QAAQ,EAAEC,QAAQ,EAAEC,GAAG,QAAQ,KAAK;AAAA,SAChDC,SAAS,EAAEC,gBAAgB,EAAEC,gBAAgB,EAAEC,YAAY,EAAEC,SAAS,gCAE/E;AAMA,MAAMC,WAAW,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,EAAE,OAAO,CAAC;AAExF,OAAO,MAAMC,mBAAmB,GAAGH,YAAY,CAAC;EAC9CI,SAAS,EAAEC,OAAO;EAClBC,OAAO,EAAE,CAACD,OAAO,EAAEE,MAAM,EAAEC,MAAM,CAAqC;EACtEC,YAAY,EAAEC,QAA4C;EAC1DC,MAAM,EAAEH,MAAM;EACdI,WAAW,EAAEJ,MAAM;EACnBK,qBAAqB,EAAER,OAAO;EAC9BS,iBAAiB,EAAET,OAAO;EAC1BU,MAAM,EAAEP,MAAM;EACdQ,IAAI,EAAE;IACJA,IAAI,EAAER,MAAM;IACZS,OAAO,EAAE;EACX,CAAC;EACDC,cAAc,EAAEC,MAA2C;EAE3D,GAAGhC,eAAe,EAAE;EACpB,GAAGF,eAAe;AACpB,CAAC,EAAE,YAAY,CAAC;AAOhB,OAAO,MAAMmC,UAAU,GAAGrB,gBAAgB,EAAmB,CAAC;EAC5DsB,IAAI,EAAE,YAAY;EAElBC,UAAU,EAAE;IAAE9B;EAAU,CAAC;EAEzB+B,YAAY,EAAE,KAAK;EAEnBC,KAAK,EAAErB,mBAAmB,EAAE;EAE5BsB,KAAK,EAAE;IACL,eAAe,EAAGC,CAAa,IAAK,IAAI;IACxC,mBAAmB,EAAGA,CAAa,IAAK,IAAI;IAC5C,gBAAgB,EAAGC,OAAgB,IAAK,IAAI;IAC5C,mBAAmB,EAAGC,GAAW,IAAK;EACxC,CAAC;EAEDC,KAAKA,CAAEL,KAAK,EAAAM,IAAA,EAA0B;IAAA,IAAxB;MAAEC,KAAK;MAAEC,IAAI;MAAEC;IAAM,CAAC,GAAAH,IAAA;IAClC,MAAMI,KAAK,GAAG3C,eAAe,CAACiC,KAAK,EAAE,YAAY,CAAC;IAClD,MAAM;MAAEW,SAAS;MAAEC,KAAK;MAAEC;IAAK,CAAC,GAAGhD,QAAQ,CAACmC,KAAK,CAAC;IAClD,MAAMf,YAAY,GAAGf,QAAQ,CAAC,MAAM;MAClC,OAAO,OAAO8B,KAAK,CAACf,YAAY,KAAK,UAAU,GAC3Ce,KAAK,CAACf,YAAY,CAACyB,KAAK,CAACI,KAAK,CAAC,GAC/B,CAACJ,KAAK,CAACI,KAAK,IAAI,EAAE,EAAEC,QAAQ,EAAE,CAACC,MAAM;IAC3C,CAAC,CAAC;IACF,MAAMC,GAAG,GAAG/C,QAAQ,CAAC,MAAM;MACzB,IAAIqC,KAAK,CAACW,SAAS,EAAE,OAAOX,KAAK,CAACW,SAAS;MAE3C,IACE,CAAClB,KAAK,CAAClB,OAAO,IACb,OAAOkB,KAAK,CAAClB,OAAO,KAAK,QAAQ,IAClC,OAAOkB,KAAK,CAAClB,OAAO,KAAK,QAAS,EAClC,OAAOqC,SAAS;MAElB,OAAOnB,KAAK,CAAClB,OAAO;IACtB,CAAC,CAAC;IAEF,MAAMsC,mBAAmB,GAAGlD,QAAQ,CAAC,MAAM,CAAC,OAAO,EAAE,YAAY,CAAC,CAACmD,QAAQ,CAACrB,KAAK,CAACsB,OAAO,CAAC,CAAC;IAE3F,SAASC,WAAWA,CAClBC,cAAuB,EACvBC,OAAoC,EACpC;MACA,IAAI,CAACzB,KAAK,CAACpB,SAAS,IAAI,CAAC4C,cAAc,EAAE;MAExCC,OAAO,CAAC,CAAC,CAAC,CAACC,MAAM,EAAuBd,KAAK,IAAI;IACpD;IAEA,MAAMe,SAAS,GAAGvD,GAAG,EAAU;IAC/B,MAAMwD,SAAS,GAAGxD,GAAG,EAAU;IAC/B,MAAMyD,QAAQ,GAAGzD,GAAG,EAAoB;IACxC,MAAM0D,QAAQ,GAAG5D,QAAQ,CAAC,MACxBQ,WAAW,CAAC2C,QAAQ,CAACrB,KAAK,CAACR,IAAI,CAAC,IAChCQ,KAAK,CAACX,qBAAqB,IAC3BsB,SAAS,CAACG,KAAK,IACfd,KAAK,CAAC+B,MACP,CAAC;IACF,SAASC,OAAOA,CAAA,EAAI;MAClB,IAAIH,QAAQ,CAACf,KAAK,KAAKmB,QAAQ,CAACC,aAAa,EAAE;QAC7CL,QAAQ,CAACf,KAAK,EAAEF,KAAK,EAAE;MACzB;MAEA,IAAI,CAACD,SAAS,CAACG,KAAK,EAAEF,KAAK,EAAE;IAC/B;IACA,SAASuB,kBAAkBA,CAAEjC,CAAa,EAAE;MAC1CM,IAAI,CAAC,mBAAmB,EAAEN,CAAC,CAAC;MAE5B,IAAIA,CAAC,CAACwB,MAAM,KAAKG,QAAQ,CAACf,KAAK,EAAE;MAEjCkB,OAAO,EAAE;MACT9B,CAAC,CAACkC,cAAc,EAAE;IACpB;IACA,SAASC,cAAcA,CAAEnC,CAAa,EAAE;MACtC8B,OAAO,EAAE;MAETxB,IAAI,CAAC,eAAe,EAAEN,CAAC,CAAC;IAC1B;IACA,SAASoC,OAAOA,CAAEpC,CAAa,EAAE;MAC/BA,CAAC,CAACqC,eAAe,EAAE;MAEnBP,OAAO,EAAE;MAET7D,QAAQ,CAAC,MAAM;QACbuC,KAAK,CAACI,KAAK,GAAG,IAAI;QAElBzC,SAAS,CAAC2B,KAAK,CAAC,eAAe,CAAC,EAAEE,CAAC,CAAC;MACtC,CAAC,CAAC;IACJ;IACA,SAASsC,OAAOA,CAAEtC,CAAQ,EAAE;MAC1B,MAAMuC,EAAE,GAAGvC,CAAC,CAACwB,MAA0B;MACvChB,KAAK,CAACI,KAAK,GAAG2B,EAAE,CAAC3B,KAAK;MACtB,IACEd,KAAK,CAACN,cAAc,EAAEgD,IAAI,IAC1B,CAAC,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,KAAK,EAAE,KAAK,CAAC,CAACrB,QAAQ,CAACrB,KAAK,CAACR,IAAI,CAAC,EACjE;QACA,MAAMmD,aAAa,GAAG,CAACF,EAAE,CAACG,cAAc,EAAEH,EAAE,CAACI,YAAY,CAAC;QAC1D1E,QAAQ,CAAC,MAAM;UACbsE,EAAE,CAACG,cAAc,GAAGD,aAAa,CAAC,CAAC,CAAC;UACpCF,EAAE,CAACI,YAAY,GAAGF,aAAa,CAAC,CAAC,CAAC;QACpC,CAAC,CAAC;MACJ;IACF;IAEAlE,SAAS,CAAC,MAAM;MACd,MAAMqE,UAAU,GAAG,CAAC,EAAErC,KAAK,CAAC3B,OAAO,IAAIkB,KAAK,CAAClB,OAAO,IAAIkB,KAAK,CAACf,YAAY,CAAC;MAC3E,MAAM8D,UAAU,GAAG,CAAC,EAAED,UAAU,IAAIrC,KAAK,CAACuC,OAAO,CAAC;MAClD,MAAM,CAACC,SAAS,EAAEC,UAAU,CAAC,GAAG5E,gBAAgB,CAACiC,KAAK,CAAC;MACvD,MAAM,CAAC;QAAE4C,UAAU,EAAEC,CAAC;QAAE,GAAGC;MAAW,CAAC,CAAC,GAAGzF,MAAM,CAAC0F,WAAW,CAACtD,KAAK,CAAC;MACpE,MAAM,CAACuD,UAAU,CAAC,GAAG/F,gBAAgB,CAACwC,KAAK,CAAC;MAE5C,OAAAwD,YAAA,CAAA5F,MAAA,EAAA6F,WAAA;QAAA,OAEU9B,SAAS;QAAA,cACLjB,KAAK,CAACI,KAAK;QAAA,uBAAA4C,MAAA,IAAXhD,KAAK,CAACI,KAAK,GAAA4C,MAAA;QAAA,SACd,CACL,cAAc,EACd;UACE,wBAAwB,EAAE1D,KAAK,CAACb,MAAM;UACtC,wBAAwB,EAAEa,KAAK,CAACT,MAAM;UACtC,gCAAgC,EAAE,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC8B,QAAQ,CAACrB,KAAK,CAACsB,OAAO;QAClF,CAAC,EACDtB,KAAK,CAAC2D,KAAK,CACZ;QAAA,SACO3D,KAAK,CAAC4D;MAAK,GACdX,SAAS,EACTI,UAAU;QAAA,eACD,CAACjC,mBAAmB,CAACN,KAAK;QAAA,WAC9BH,SAAS,CAACG;MAAK;QAGvB,GAAGL,KAAK;QACRhB,OAAO,EAAEoE,KAAA;UAAA,IAAC;YACRC,EAAE;YACFC,UAAU;YACVC,OAAO;YACPC,UAAU;YACVC;UACF,CAAC,GAAAL,KAAA;UAAA,OAAAL,YAAA,CAAA9F,MAAA,EAAA+F,WAAA;YAAA,OAES7B,SAAS;YAAA,eACDO,kBAAkB;YAAA,WACtBE,cAAc;YAAA,iBACRC,OAAO;YAAA,wBACAtC,KAAK,CAAC,sBAAsB,CAAC;YAAA,uBAC9BA,KAAK,CAAC,qBAAqB,CAAC;YAAA,QAC7C;UAAS,GACTuD,UAAU;YAAA,MACVO,EAAE,CAAChD,KAAK;YAAA,UACJgB,QAAQ,CAAChB,KAAK,IAAIkD,OAAO,CAAClD,KAAK;YAAA,SAChCkD,OAAO,CAAClD,KAAK,IAAId,KAAK,CAACmE,KAAK;YAAA,YACzBJ,UAAU,CAACjD,KAAK;YAAA,WACjBH,SAAS,CAACG,KAAK;YAAA,SACjBoD,OAAO,CAACpD,KAAK,KAAK;UAAK;YAG7B,GAAGL,KAAK;YACRhB,OAAO,EAAE2E,KAAA,IAEH;cAAA,IAFI;gBACRpE,KAAK,EAAE;kBAAE2D,KAAK,EAAEU,UAAU;kBAAE,GAAGC;gBAAU;cAC3C,CAAC,GAAAF,KAAA;cACC,MAAMG,SAAS,GAAAC,eAAA,CAAAhB,YAAA,UAAAC,WAAA;gBAAA,OAEL5B,QAAQ;gBAAA,SACNnB,KAAK,CAACI,KAAK;gBAAA,WACT0B,OAAO;gBAAA,aAILxC,KAAK,CAACpB,SAAS;gBAAA,YAChBqF,UAAU,CAACnD,KAAK;gBAAA,YAChBiD,UAAU,CAACjD,KAAK;gBAAA,QACpBd,KAAK,CAACH,IAAI;gBAAA,eACHG,KAAK,CAACZ,WAAW;gBAAA,QACxB,CAAC;gBAAA,QACDY,KAAK,CAACR,IAAI;gBAAA,WACPwC,OAAO;gBAAA,UACRnB;cAAI,GACRyD,SAAS,EACTpB,UAAU,YAAAuB,iBAAA,eAbD;gBACZC,OAAO,EAAEnD;cACX,CAAC,EAAE,IAAI;gBAAAoD,IAAA;cAAA,IAaV;cAED,OAAAnB,YAAA,CAAAoB,SAAA,SAEM5E,KAAK,CAACb,MAAM,IAAAqE,YAAA;gBAAA,SACA;cAAsB,IAC9BxD,KAAK,CAACb,MAAM,EAEjB,EAAAqE,YAAA;gBAAA,SAGSa,UAAU;gBAAA,qBACA;cAAE,IAElB5D,KAAK,CAAChB,OAAO,GAAA+D,YAAA,CAAAoB,SAAA,SAETnE,KAAK,CAAChB,OAAO,EAAE,EACf8E,SAAS,KAEXtG,UAAU,CAACsG,SAAS,CAAC,IAIzBvE,KAAK,CAACT,MAAM,IAAAiE,YAAA;gBAAA,SACA;cAAsB,IAC9BxD,KAAK,CAACT,MAAM,EAEjB;YAGP;UAAC;QAAA,CAGN;QACDyD,OAAO,EAAED,UAAU,GAAGuB,SAAS,IAAAd,YAAA,CAAAoB,SAAA,SAEzBnE,KAAK,CAACuC,OAAO,GAAGsB,SAAS,CAAC,EAE1BxB,UAAU,IAAAU,YAAA,CAAAoB,SAAA,SAAApB,YAAA,sBAAAA,YAAA,CAAAjG,QAAA;UAAA,UAKGyC,KAAK,CAACV,iBAAiB,IAAIqB,SAAS,CAACG,KAAK;UAAA,SAC3C7B,YAAY,CAAC6B,KAAK;UAAA,OACpBG,GAAG,CAACH;QAAK,GACGL,KAAK,CAAC3B,OAAO,GAGpC,EAEJ,GAAGqC;MAAS;IAIrB,CAAC,CAAC;IAEF,OAAOrD,WAAW,CAAC,CAAC,CAAC,EAAE6D,SAAS,EAAEC,SAAS,EAAEC,QAAQ,CAAC;EACxD;AACF,CAAC,CAAC"}
1
+ {"version":3,"file":"VTextField.mjs","names":["VCounter","filterFieldProps","makeVFieldProps","VField","makeVInputProps","VInput","useFocus","forwardRefs","useProxiedModel","Intersect","cloneVNode","computed","nextTick","ref","callEvent","filterInputAttrs","genericComponent","propsFactory","useRender","activeTypes","makeVTextFieldProps","autofocus","Boolean","counter","Number","String","counterValue","Function","prefix","placeholder","persistentPlaceholder","persistentCounter","suffix","type","default","modelModifiers","Object","VTextField","name","directives","inheritAttrs","props","emits","e","focused","val","setup","_ref","attrs","emit","slots","model","isFocused","focus","blur","value","toString","length","max","maxlength","undefined","isPlainOrUnderlined","includes","variant","onIntersect","isIntersecting","entries","target","vInputRef","vFieldRef","inputRef","isActive","active","onFocus","document","activeElement","onControlMousedown","preventDefault","onControlClick","onClear","stopPropagation","onInput","el","trim","caretPosition","selectionStart","selectionEnd","hasCounter","hasDetails","details","rootAttrs","inputAttrs","modelValue","_","inputProps","filterProps","fieldProps","_createVNode","_mergeProps","$event","class","style","_ref2","id","isDisabled","isDirty","isReadonly","isValid","dirty","_ref3","fieldClass","slotProps","inputNode","_withDirectives","_resolveDirective","handler","once","_Fragment"],"sources":["../../../src/components/VTextField/VTextField.tsx"],"sourcesContent":["// Styles\nimport './VTextField.sass'\n\n// Components\nimport { VCounter } from '@/components/VCounter/VCounter'\nimport { filterFieldProps, makeVFieldProps, VField } from '@/components/VField/VField'\nimport { makeVInputProps, VInput } from '@/components/VInput/VInput'\n\n// Composables\nimport { useFocus } from '@/composables/focus'\nimport { forwardRefs } from '@/composables/forwardRefs'\nimport { useProxiedModel } from '@/composables/proxiedModel'\n\n// Directives\nimport Intersect from '@/directives/intersect'\n\n// Utilities\nimport { cloneVNode, computed, nextTick, ref } from 'vue'\nimport { callEvent, filterInputAttrs, genericComponent, propsFactory, useRender } from '@/util'\n\n// Types\nimport type { PropType } from 'vue'\nimport type { VCounterSlot } from '@/components/VCounter/VCounter'\nimport type { VFieldSlots } from '@/components/VField/VField'\nimport type { VInputSlots } from '@/components/VInput/VInput'\n\nconst activeTypes = ['color', 'file', 'time', 'date', 'datetime-local', 'week', 'month']\n\nexport const makeVTextFieldProps = propsFactory({\n autofocus: Boolean,\n counter: [Boolean, Number, String] as PropType<true | number | string>,\n counterValue: Function as PropType<(value: any) => number>,\n prefix: String,\n placeholder: String,\n persistentPlaceholder: Boolean,\n persistentCounter: Boolean,\n suffix: String,\n type: {\n type: String,\n default: 'text',\n },\n modelModifiers: Object as PropType<Record<string, boolean>>,\n\n ...makeVInputProps(),\n ...makeVFieldProps(),\n}, 'VTextField')\n\nexport type VTextFieldSlots = Omit<VInputSlots & VFieldSlots, 'default'> & {\n default: never\n counter: VCounterSlot\n}\n\nexport const VTextField = genericComponent<VTextFieldSlots>()({\n name: 'VTextField',\n\n directives: { Intersect },\n\n inheritAttrs: false,\n\n props: makeVTextFieldProps(),\n\n emits: {\n 'click:control': (e: MouseEvent) => true,\n 'mousedown:control': (e: MouseEvent) => true,\n 'update:focused': (focused: boolean) => true,\n 'update:modelValue': (val: string) => true,\n },\n\n setup (props, { attrs, emit, slots }) {\n const model = useProxiedModel(props, 'modelValue')\n const { isFocused, focus, blur } = useFocus(props)\n const counterValue = computed(() => {\n return typeof props.counterValue === 'function'\n ? props.counterValue(model.value)\n : (model.value ?? '').toString().length\n })\n const max = computed(() => {\n if (attrs.maxlength) return attrs.maxlength as unknown as undefined\n\n if (\n !props.counter ||\n (typeof props.counter !== 'number' &&\n typeof props.counter !== 'string')\n ) return undefined\n\n return props.counter\n })\n\n const isPlainOrUnderlined = computed(() => ['plain', 'underlined'].includes(props.variant))\n\n function onIntersect (\n isIntersecting: boolean,\n entries: IntersectionObserverEntry[]\n ) {\n if (!props.autofocus || !isIntersecting) return\n\n (entries[0].target as HTMLInputElement)?.focus?.()\n }\n\n const vInputRef = ref<VInput>()\n const vFieldRef = ref<VField>()\n const inputRef = ref<HTMLInputElement>()\n const isActive = computed(() => (\n activeTypes.includes(props.type) ||\n props.persistentPlaceholder ||\n isFocused.value ||\n props.active\n ))\n function onFocus () {\n if (inputRef.value !== document.activeElement) {\n inputRef.value?.focus()\n }\n\n if (!isFocused.value) focus()\n }\n function onControlMousedown (e: MouseEvent) {\n emit('mousedown:control', e)\n\n if (e.target === inputRef.value) return\n\n onFocus()\n e.preventDefault()\n }\n function onControlClick (e: MouseEvent) {\n onFocus()\n\n emit('click:control', e)\n }\n function onClear (e: MouseEvent) {\n e.stopPropagation()\n\n onFocus()\n\n nextTick(() => {\n model.value = null\n\n callEvent(props['onClick:clear'], e)\n })\n }\n function onInput (e: Event) {\n const el = e.target as HTMLInputElement\n model.value = el.value\n if (\n props.modelModifiers?.trim &&\n ['text', 'search', 'password', 'tel', 'url'].includes(props.type)\n ) {\n const caretPosition = [el.selectionStart, el.selectionEnd]\n nextTick(() => {\n el.selectionStart = caretPosition[0]\n el.selectionEnd = caretPosition[1]\n })\n }\n }\n\n useRender(() => {\n const hasCounter = !!(slots.counter || props.counter || props.counterValue)\n const hasDetails = !!(hasCounter || slots.details)\n const [rootAttrs, inputAttrs] = filterInputAttrs(attrs)\n const [{ modelValue: _, ...inputProps }] = VInput.filterProps(props)\n const [fieldProps] = filterFieldProps(props)\n\n return (\n <VInput\n ref={ vInputRef }\n v-model={ model.value }\n class={[\n 'v-text-field',\n {\n 'v-text-field--prefixed': props.prefix,\n 'v-text-field--suffixed': props.suffix,\n 'v-text-field--plain-underlined': ['plain', 'underlined'].includes(props.variant),\n },\n props.class,\n ]}\n style={ props.style }\n { ...rootAttrs }\n { ...inputProps }\n centerAffix={ !isPlainOrUnderlined.value }\n focused={ isFocused.value }\n >\n {{\n ...slots,\n default: ({\n id,\n isDisabled,\n isDirty,\n isReadonly,\n isValid,\n }) => (\n <VField\n ref={ vFieldRef }\n onMousedown={ onControlMousedown }\n onClick={ onControlClick }\n onClick:clear={ onClear }\n onClick:prependInner={ props['onClick:prependInner'] }\n onClick:appendInner={ props['onClick:appendInner'] }\n role=\"textbox\"\n { ...fieldProps }\n id={ id.value }\n active={ isActive.value || isDirty.value }\n dirty={ isDirty.value || props.dirty }\n disabled={ isDisabled.value }\n focused={ isFocused.value }\n error={ isValid.value === false }\n >\n {{\n ...slots,\n default: ({\n props: { class: fieldClass, ...slotProps },\n }) => {\n const inputNode = (\n <input\n ref={ inputRef }\n value={ model.value }\n onInput={ onInput }\n v-intersect={[{\n handler: onIntersect,\n }, null, ['once']]}\n autofocus={ props.autofocus }\n readonly={ isReadonly.value }\n disabled={ isDisabled.value }\n name={ props.name }\n placeholder={ props.placeholder }\n size={ 1 }\n type={ props.type }\n onFocus={ onFocus }\n onBlur={ blur }\n { ...slotProps }\n { ...inputAttrs }\n />\n )\n\n return (\n <>\n { props.prefix && (\n <span class=\"v-text-field__prefix\">\n <span class=\"v-text-field__prefix__text\">\n { props.prefix }\n </span>\n </span>\n )}\n\n <div\n class={ fieldClass }\n data-no-activator=\"\"\n >\n { slots.default ? (\n <>\n { slots.default() }\n { inputNode }\n </>\n ) : cloneVNode(inputNode)\n }\n </div>\n\n { props.suffix && (\n <span class=\"v-text-field__suffix\">\n <span class=\"v-text-field__suffix__text\">\n { props.suffix }\n </span>\n </span>\n )}\n </>\n )\n },\n }}\n </VField>\n ),\n details: hasDetails ? slotProps => (\n <>\n { slots.details?.(slotProps) }\n\n { hasCounter && (\n <>\n <span />\n\n <VCounter\n active={ props.persistentCounter || isFocused.value }\n value={ counterValue.value }\n max={ max.value }\n v-slots:default={ slots.counter }\n />\n </>\n )}\n </>\n ) : undefined,\n }}\n </VInput>\n )\n })\n\n return forwardRefs({}, vInputRef, vFieldRef, inputRef)\n },\n})\n\nexport type VTextField = InstanceType<typeof VTextField>\n"],"mappings":"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"}
@@ -56,9 +56,14 @@
56
56
  opacity: 0
57
57
  transition: inherit
58
58
  white-space: nowrap
59
+ min-height: $field-input-min-height
59
60
  padding-top: calc(var(--v-field-padding-top, 4px) + var(--v-input-padding-top, 0))
60
61
  padding-bottom: var(--v-field-padding-bottom, 6px)
61
62
 
63
+ &__text
64
+ margin-top: var(--v-input-chips-margin-top)
65
+ margin-bottom: var(--v-input-chips-margin-bottom)
66
+
62
67
  .v-field--active &
63
68
  opacity: 1
64
69
 
@@ -1,3 +1,4 @@
1
+ @forward '../VField/variables';
1
2
  @use '../../styles/settings';
2
3
 
3
4
  // VTextField
@@ -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":";AAAA;AACA;;AAEA;AAAA,SACSA,kBAAkB,oCAE3B;AAAA,SACSC,kBAAkB;AAAA,SAClBC,kBAAkB,EAAEC,YAAY;AAAA,SAChCC,cAAc;AAAA,SACdC,gBAAgB,EAAEC,UAAU,yCAErC;AACA,SAASC,SAAS,EAAEC,cAAc,EAAEC,KAAK,QAAQ,KAAK;AAAA,SAEpDC,aAAa,EACbC,gBAAgB,EAChBC,kBAAkB,EAClBC,eAAe,EACfC,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;EACDC,UAAU,EAAEC,OAAO;EAEnB,GAAGjB,gBAAgB,EAAE;EACrB,GAAGJ,kBAAkB,EAAE;EACvB,GAAGC,kBAAkB;AACvB,CAAC,EAAE,gBAAgB,CAAC;AAEpB,OAAO,MAAMqB,cAAc,GAAGZ,gBAAgB,EAUE,CAAC;EAC/Ca,IAAI,EAAE,gBAAgB;EAEtBC,KAAK,EAAET,uBAAuB,EAAE;EAEhCU,KAAKA,CAAED,KAAK,EAAAE,IAAA,EAAa;IAAA,IAAX;MAAEC;IAAM,CAAC,GAAAD,IAAA;IACrB,MAAME,EAAE,GAAGjB,kBAAkB,CAAC,gBAAgB,CAAC;IAC/C,MAAM;MAAEkB;IAAgB,CAAC,GAAG3B,YAAY,CAACsB,KAAK,CAAC;IAC/C,MAAM;MACJM,YAAY;MACZC,YAAY;MACZC,gBAAgB;MAChBC,aAAa;MACbC,UAAU;MACVC,aAAa;MACbC;IACF,CAAC,GAAG/B,UAAU,CAACmB,KAAK,EAAEhB,KAAK,CAACgB,KAAK,EAAE,OAAO,CAAC,CAAC;IAE5CrB,cAAc,CAAC,MAAMqB,KAAK,CAACJ,UAAU,EAAE,MAAM;MAC3Cd,SAAS,CAAC,MAAM;QACdwB,YAAY,CAACO,KAAK,GAAGzB,eAAe,CAACgB,EAAE,CAACU,KAAK,CAACC,EAAE,EAAiB,IAAI,CAAC;QACtET,YAAY,CAACO,KAAK,EAAEG,gBAAgB,CAAC,QAAQ,EAAET,YAAY,CAAC;MAC9D,CAAC,CAAC;MACFxB,cAAc,CAAC,MAAM;QACnBuB,YAAY,CAACO,KAAK,EAAEI,mBAAmB,CAAC,QAAQ,EAAEV,YAAY,CAAC;MACjE,CAAC,CAAC;IACJ,CAAC,CAAC;IAEFjB,SAAS,CAAC,MAAM;MACd,MAAM4B,QAAQ,GAAGN,aAAa,CAACC,KAAK,CAACM,GAAG,CAACC,IAAI,IAAAC,YAAA,CAAA9C,kBAAA;QAAA,OAEnC6C,IAAI,CAACE,KAAK;QAAA,cACHtB,KAAK,CAACJ,UAAU;QAAA,mBACX2B,MAAM,IAAIf,gBAAgB,CAACY,IAAI,CAACE,KAAK,EAAEC,MAAM;MAAC;QAAA5B,OAAA,EAE9D6B,SAAS,IAAIrB,KAAK,CAACR,OAAO,GAAG;UAAEyB,IAAI,EAAEA,IAAI,CAACK,GAAG;UAAEH,KAAK,EAAEF,IAAI,CAACE,KAAK;UAAE,GAAGE;QAAU,CAAC;MAAC,EAEtF,CAAC;MAEF,OAAOxB,KAAK,CAACJ,UAAU,GAAAyB,YAAA,CAAAK,SAAA,SAAAL,YAAA;QAAA,SAER,0BAA0B;QAAA,SAAQ;UAAEX,UAAU,EAAEzB,aAAa,CAACyB,UAAU,CAACG,KAAK;QAAE;MAAC,UAC1FK,QAAQ,EAAAG,YAAA;QAAA,SACC,0BAA0B;QAAA,SAAQ;UAAEV,aAAa,EAAE1B,aAAa,CAAC0B,aAAa,CAACE,KAAK;QAAE;MAAC,aAAAQ,YAAA;QAAA,OAI5Ff,YAAY;QAAA,SACX,CACL,kBAAkB,EAClBN,KAAK,CAAC2B,KAAK,CACZ;QAAA,YACUpB,YAAY;QAAA,SAChB,CACLF,eAAe,CAACQ,KAAK,EACrBb,KAAK,CAAC4B,KAAK;MACZ,IAAAP,YAAA;QAAA,SAGO,6BAA6B;QAAA,SAC5B;UACLX,UAAU,EAAEzB,aAAa,CAACyB,UAAU,CAACG,KAAK,CAAC;UAC3CF,aAAa,EAAE1B,aAAa,CAAC0B,aAAa,CAACE,KAAK;QAClD;MAAC,IAECK,QAAQ,IAGf;IACH,CAAC,CAAC;IAEF,OAAO;MACLT;IACF,CAAC;EACH;AACF,CAAC,CAAC"}
@@ -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"}