{"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"}