@sectile/vue 0.15.1 → 0.16.1

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 (35) hide show
  1. package/README.md +5 -5
  2. package/dist/chart.js +1 -1
  3. package/dist/chart.js.map +1 -1
  4. package/dist/internal/popup.js +1 -1
  5. package/dist/internal/popup.js.map +1 -1
  6. package/dist/internal/presence.d.ts +1 -1
  7. package/dist/internal/presence.js +1 -1
  8. package/dist/internal/presence.js.map +1 -1
  9. package/dist/internal/virtual-collection.d.ts +45 -24
  10. package/dist/internal/virtual-collection.js +1 -1
  11. package/dist/internal/virtual-collection.js.map +1 -1
  12. package/dist/internal/virtual-core.d.ts +109 -34
  13. package/dist/internal/virtual-core.js +1 -1
  14. package/dist/internal/virtual-core.js.map +1 -1
  15. package/dist/internal/virtual-list.d.ts +58 -85
  16. package/dist/internal/virtual-list.js +1 -1
  17. package/dist/internal/virtual-list.js.map +1 -1
  18. package/dist/virtual-core.d.ts +1 -1
  19. package/dist/virtual-core.js +1 -1
  20. package/dist/virtual-core.js.map +1 -1
  21. package/dist/virtual-grid.d.ts +50 -75
  22. package/dist/virtual-grid.js +1 -1
  23. package/dist/virtual-grid.js.map +1 -1
  24. package/dist/virtual-list.d.ts +2 -1
  25. package/dist/virtual-list.js.map +1 -1
  26. package/dist/virtual-masonry.d.ts +51 -76
  27. package/dist/virtual-masonry.js +1 -1
  28. package/dist/virtual-masonry.js.map +1 -1
  29. package/dist/virtual-spatial.d.ts +44 -32
  30. package/dist/virtual-spatial.js +1 -1
  31. package/dist/virtual-spatial.js.map +1 -1
  32. package/package.json +8 -8
  33. package/dist/internal/virtual-collection-model.d.ts +0 -46
  34. package/dist/internal/virtual-collection-model.js +0 -2
  35. package/dist/internal/virtual-collection-model.js.map +0 -1
@@ -1,82 +1,47 @@
1
- import { type AllowedComponentProps, type ComponentCustomProps, type PropType, type ShallowRef, type SlotsType, type VNodeArrayChildren, type VNodeChild, type VNodeProps } from 'vue';
2
- import { type Extent } from '@sectile/virtual/extent-index';
3
- import { type LinearAxis, type LinearLayoutState, type LinearMeasurement, type LinearPatch } from '@sectile/virtual/linear-layout';
4
- import { type VirtualInsets, type VirtualLayoutPlan, type VirtualMeasurementResolver, type VirtualPlacement, type VirtualRect, type VirtualScrollAlignment, type VirtualizerConnection, type VirtualizerErrorHandler } from '@sectile/dom/virtual';
5
- import { type PreparedVirtualList, type VirtualListEstimate, type VirtualListItemAttributes, type VirtualListKeyResolver } from './virtual-collection-model.js';
6
- export type { VirtualListEstimate, VirtualListItemAttributes, VirtualListKeyResolver, } from './virtual-collection-model.js';
7
- export interface VirtualListProps<Value = unknown> {
8
- readonly items: readonly Value[];
9
- readonly getKey: VirtualListKeyResolver<Value>;
10
- readonly itemSize?: number;
11
- readonly estimateSize?: VirtualListEstimate<Value>;
1
+ import { type AllowedComponentProps, type ComponentCustomProps, type PropType, type SlotsType, type VNodeArrayChildren, type VNodeChild, type VNodeProps } from 'vue';
2
+ import type { StableID } from '@sectile/core';
3
+ import { type VirtualSizePolicy } from '@sectile/virtual/collection';
4
+ import { type LinearAxis, type LinearLayoutState, type LinearMeasurement } from '@sectile/virtual/linear-layout';
5
+ import { type VirtualInsets, type VirtualLayoutPlan, type VirtualMeasurementResolver, type VirtualRect, type VirtualizerErrorHandler } from '@sectile/dom/virtual';
6
+ import { type PreparedVirtualCollection, type VirtualCollectionBaseProps, type VirtualCollectionExpose, type VirtualCollectionIDResolver, type VirtualCollectionItemAttributes, type VirtualCollectionItemSlotProps } from './virtual-collection.js';
7
+ export type VirtualListItemAttributes<Value> = VirtualCollectionItemAttributes<Value>;
8
+ export type VirtualListIDResolver<Value, ID extends StableID = StableID> = VirtualCollectionIDResolver<Value, ID>;
9
+ export interface VirtualListProps<Value = unknown, ID extends StableID = StableID> extends VirtualCollectionBaseProps<Value, ID> {
10
+ readonly sizePolicy: VirtualSizePolicy<Value>;
12
11
  readonly axis?: LinearAxis;
13
12
  readonly gap?: number;
14
- readonly overscan?: number | Partial<VirtualInsets>;
15
- readonly maxItems?: number;
16
- readonly initialViewport?: VirtualRect;
17
- readonly as?: string;
18
- readonly contentAs?: string;
19
- readonly itemAs?: string;
20
- readonly itemAttributes?: VirtualListItemAttributes<Value>;
21
13
  }
22
- export type VirtualListPublicProps<Value = unknown> = VirtualListProps<Value> & VNodeProps & AllowedComponentProps & ComponentCustomProps & {
23
- readonly onStateChange?: (state: LinearLayoutState<string>) => unknown;
24
- readonly onPlanChange?: (plan: VirtualLayoutPlan<string>) => unknown;
14
+ export type VirtualListPublicProps<Value = unknown, ID extends StableID = StableID> = VirtualListProps<Value, ID> & VNodeProps & AllowedComponentProps & ComponentCustomProps & {
15
+ readonly onStateChange?: (state: LinearLayoutState<ID>) => unknown;
16
+ readonly onPlanChange?: (plan: VirtualLayoutPlan<ID>) => unknown;
25
17
  readonly onError?: VirtualizerErrorHandler;
26
18
  };
27
- export interface VirtualListSlotProps<Value = unknown> {
28
- readonly value: Value;
29
- readonly key: string;
30
- readonly index: number;
31
- readonly placement: VirtualPlacement<string>;
32
- }
33
- export interface VirtualListExpose {
34
- readonly root: ShallowRef<HTMLElement | null | undefined>;
35
- readonly state: LinearLayoutState<string>;
36
- readonly plan: VirtualLayoutPlan<string> | null;
37
- scrollTo(id: string, alignment?: VirtualScrollAlignment): ReturnType<VirtualizerConnection<LinearLayoutState<string>, string, {
38
- readonly index: number;
39
- readonly extent: Extent;
40
- }, LinearPatch<string>>['scrollTo']>;
41
- refresh(): void;
42
- flush(): ReturnType<VirtualizerConnection<LinearLayoutState<string>, string, {
43
- readonly index: number;
44
- readonly extent: Extent;
45
- }, LinearPatch<string>>['flush']>;
19
+ export interface VirtualListSlotProps<Value = unknown, ID extends StableID = StableID> extends VirtualCollectionItemSlotProps<Value, ID> {
46
20
  }
21
+ export type VirtualListExpose<ID extends StableID = StableID> = VirtualCollectionExpose<LinearLayoutState<ID>, ID>;
47
22
  export interface VirtualListComponent {
48
- new <Value = unknown>(props: VirtualListPublicProps<Value>): {
49
- $props: VirtualListPublicProps<Value>;
23
+ new <Value = unknown, ID extends StableID = StableID>(props: VirtualListPublicProps<Value, ID>): {
24
+ $props: VirtualListPublicProps<Value, ID>;
50
25
  $slots: {
51
- default?: (props: VirtualListSlotProps<Value>) => VNodeChild;
26
+ header?: () => VNodeChild;
27
+ item?: (props: VirtualListSlotProps<Value, ID>) => VNodeChild;
52
28
  empty?: () => VNodeChild;
29
+ footer?: () => VNodeChild;
53
30
  };
54
31
  };
55
32
  }
56
- export interface VirtualCollectionExpose<State> {
57
- readonly root: ShallowRef<HTMLElement | null | undefined>;
58
- readonly state: State;
59
- readonly plan: VirtualLayoutPlan<string> | null;
60
- scrollTo(id: string, alignment?: VirtualScrollAlignment): ReturnType<VirtualizerConnection<object, string, unknown, unknown>['scrollTo']> | undefined;
61
- refresh(): void;
62
- flush(): ReturnType<VirtualizerConnection<object, string, unknown, unknown>['flush']> | undefined;
63
- }
64
33
  declare const VirtualListRuntime: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
65
34
  items: {
66
35
  type: PropType<readonly unknown[]>;
67
36
  required: true;
68
37
  };
69
- getKey: {
70
- type: PropType<VirtualListKeyResolver<unknown>>;
38
+ getID: {
39
+ type: PropType<VirtualListIDResolver<unknown>>;
71
40
  required: true;
72
41
  };
73
- estimateSize: {
74
- type: PropType<VirtualListEstimate<unknown>>;
75
- default: undefined;
76
- };
77
- itemSize: {
78
- type: NumberConstructor;
79
- default: undefined;
42
+ sizePolicy: {
43
+ type: PropType<VirtualSizePolicy<unknown>>;
44
+ required: true;
80
45
  };
81
46
  axis: {
82
47
  type: PropType<LinearAxis>;
@@ -90,6 +55,10 @@ declare const VirtualListRuntime: import("vue").DefineComponent<import("vue").Ex
90
55
  type: PropType<number | Partial<VirtualInsets>>;
91
56
  default: number;
92
57
  };
58
+ viewportInsets: {
59
+ type: PropType<number | Partial<VirtualInsets>>;
60
+ default: undefined;
61
+ };
93
62
  maxItems: {
94
63
  type: NumberConstructor;
95
64
  default: number;
@@ -115,25 +84,21 @@ declare const VirtualListRuntime: import("vue").DefineComponent<import("vue").Ex
115
84
  default: undefined;
116
85
  };
117
86
  }>, () => VNodeChild, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
118
- stateChange: (_state: LinearLayoutState<string>) => boolean;
119
- planChange: (_plan: VirtualLayoutPlan<string>) => boolean;
87
+ stateChange: (_state: LinearLayoutState<StableID>) => boolean;
88
+ planChange: (_plan: VirtualLayoutPlan<StableID>) => boolean;
120
89
  error: (_error: Parameters<VirtualizerErrorHandler>[0]) => boolean;
121
90
  }, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
122
91
  items: {
123
92
  type: PropType<readonly unknown[]>;
124
93
  required: true;
125
94
  };
126
- getKey: {
127
- type: PropType<VirtualListKeyResolver<unknown>>;
95
+ getID: {
96
+ type: PropType<VirtualListIDResolver<unknown>>;
128
97
  required: true;
129
98
  };
130
- estimateSize: {
131
- type: PropType<VirtualListEstimate<unknown>>;
132
- default: undefined;
133
- };
134
- itemSize: {
135
- type: NumberConstructor;
136
- default: undefined;
99
+ sizePolicy: {
100
+ type: PropType<VirtualSizePolicy<unknown>>;
101
+ required: true;
137
102
  };
138
103
  axis: {
139
104
  type: PropType<LinearAxis>;
@@ -147,6 +112,10 @@ declare const VirtualListRuntime: import("vue").DefineComponent<import("vue").Ex
147
112
  type: PropType<number | Partial<VirtualInsets>>;
148
113
  default: number;
149
114
  };
115
+ viewportInsets: {
116
+ type: PropType<number | Partial<VirtualInsets>>;
117
+ default: undefined;
118
+ };
150
119
  maxItems: {
151
120
  type: NumberConstructor;
152
121
  default: number;
@@ -172,15 +141,14 @@ declare const VirtualListRuntime: import("vue").DefineComponent<import("vue").Ex
172
141
  default: undefined;
173
142
  };
174
143
  }>> & Readonly<{
175
- onError?: (_error: import("@sectile/core/sequence").SectileError<import("@sectile/virtual").VirtualErrorCode>) => any;
176
- onPlanChange?: (_plan: VirtualLayoutPlan<string>) => any;
177
- onStateChange?: (_state: LinearLayoutState<string>) => any;
144
+ onError?: (_error: import("@sectile/core").SectileError<import("@sectile/virtual").VirtualErrorCode>) => any;
145
+ onPlanChange?: (_plan: VirtualLayoutPlan<StableID>) => any;
146
+ onStateChange?: (_state: LinearLayoutState<StableID>) => any;
178
147
  }>, {
179
- estimateSize: VirtualListEstimate<unknown>;
180
- itemSize: number;
181
148
  axis: LinearAxis;
182
149
  gap: number;
183
150
  overscan: number | Partial<import("@sectile/core/geometry").Insets>;
151
+ viewportInsets: number | Partial<import("@sectile/core/geometry").Insets>;
184
152
  maxItems: number;
185
153
  initialViewport: import("@sectile/core/geometry").Rect;
186
154
  as: string;
@@ -188,27 +156,32 @@ declare const VirtualListRuntime: import("vue").DefineComponent<import("vue").Ex
188
156
  itemAs: string;
189
157
  itemAttributes: VirtualListItemAttributes<unknown>;
190
158
  }, SlotsType<{
191
- default: (props: VirtualListSlotProps<unknown>) => VNodeChild;
159
+ header: () => VNodeChild;
160
+ item: (props: VirtualListSlotProps<unknown>) => VNodeChild;
192
161
  empty: () => VNodeChild;
162
+ footer: () => VNodeChild;
193
163
  }>, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
194
164
  export declare const VirtualList: typeof VirtualListRuntime & VirtualListComponent;
195
- export declare function createVirtualListMeasurementResolver(axis: LinearAxis): VirtualMeasurementResolver<LinearLayoutState<string>, string, LinearMeasurement>;
196
- export declare function createVirtualListState(prepared: PreparedVirtualList, items: readonly unknown[], props: Readonly<{
197
- itemSize: number | undefined;
198
- estimateSize: VirtualListEstimate<unknown> | undefined;
165
+ export declare function createVirtualListMeasurementResolver(axis: LinearAxis): VirtualMeasurementResolver<LinearLayoutState<StableID>, StableID, LinearMeasurement>;
166
+ export declare function createVirtualListState(prepared: PreparedVirtualCollection<unknown, StableID>, items: readonly unknown[], props: Readonly<{
167
+ sizePolicy: VirtualSizePolicy<unknown>;
199
168
  axis: LinearAxis;
200
169
  gap: number;
201
170
  maxItems: number;
202
- }>, automaticEstimate?: number): LinearLayoutState<string>;
171
+ crossExtent: number;
172
+ }>, automaticEstimate?: number): LinearLayoutState<StableID>;
203
173
  export declare function createEmptyVirtualListState(props: Readonly<{
204
174
  axis: LinearAxis;
205
175
  gap: number;
206
176
  maxItems: number;
207
- }>): LinearLayoutState<string>;
177
+ crossExtent: number;
178
+ }>): LinearLayoutState<StableID>;
208
179
  export declare function bootstrapTrailingOverscanExtent(overscan: number | Partial<VirtualInsets>, axis: LinearAxis): number;
209
- export declare function renderVirtualListBootstrapItems(prepared: PreparedVirtualList, items: readonly unknown[], count: number, props: Readonly<{
180
+ export declare function renderVirtualListBootstrapItems(prepared: PreparedVirtualCollection<unknown, StableID>, items: readonly unknown[], count: number, props: Readonly<{
210
181
  axis: LinearAxis;
211
182
  gap: number;
183
+ crossExtent: number;
212
184
  itemAs: string;
213
185
  itemAttributes: VirtualListItemAttributes<unknown> | undefined;
214
- }>, render: ((props: VirtualListSlotProps<unknown>) => VNodeChild) | undefined, itemRef: (index: number, value: unknown) => void): VNodeArrayChildren;
186
+ }>, render: ((props: VirtualListSlotProps<unknown, StableID>) => VNodeChild) | undefined, itemRef: (index: number) => (value: unknown) => void): VNodeArrayChildren;
187
+ export {};
@@ -1,2 +1,2 @@
1
- import{defineComponent,h,nextTick,onBeforeUnmount,onMounted,shallowRef,watch}from'vue';import{createSequence}from'@sectile/core/sequence';import{createExtentIndex,createUniformExtentIndex}from'@sectile/virtual/extent-index';import{linearLayoutStrategyFor,tryApplyLinearPatch,createLinearLayout}from'@sectile/virtual/linear-layout';import{createAxisMeasurementResolver,virtualItemStyle}from'@sectile/dom/virtual';import{Primitive}from'../primitive.js';import{VirtualizerContent,VirtualizerRoot,useVirtualizer}from'./virtual-core.js';import{assertVirtualListSizeMode,createPreparedVirtualListSequence,estimatedExtent,exactExtent,prepareVirtualList,reconcileVirtualList,requireAutomaticEstimate,requiresDOMBootstrap,updatePreparedVirtualList}from'./virtual-collection-model.js';const VirtualListRuntime=/* @__PURE__ */defineComponent({name:'SectileVirtualList',inheritAttrs:false,props:{items:{type:Array,required:true},getKey:{type:Function,required:true},estimateSize:{type:[Number,Function],default:undefined},itemSize:{type:Number,default:undefined},axis:{type:String,default:'vertical'},gap:{type:Number,default:0},overscan:{type:[Number,Object],default:240},maxItems:{type:Number,default:1_000_000},initialViewport:{type:Object,default:undefined},as:{type:String,default:'div'},contentAs:{type:String,default:'div'},itemAs:{type:String,default:'div'},itemAttributes:{type:Function,default:undefined}},emits:{stateChange:_state=>true,planChange:_plan=>true,error:_error=>true},slots:Object,setup(props,{attrs,emit,expose,slots}){assertVirtualListSizeMode(props.itemSize,props.estimateSize);const prepared=shallowRef(prepareVirtualList(props.items,props.getKey,props.maxItems));const automaticEstimate=shallowRef();const bootstrapCount=shallowRef(requiresDOMBootstrap(props.itemSize,props.estimateSize)&&prepared.value.domain.size>0?1:0);const bootstrapElements=new Map;let bootstrapScheduled=false;let disposed=false;const state=shallowRef(requiresDOMBootstrap(props.itemSize,props.estimateSize)?createEmptyVirtualListState(props):createVirtualListState(prepared.value,props.items,props));const measure=props.itemSize===undefined?createVirtualListMeasurementResolver(props.axis):undefined;const virtualizer=useVirtualizer({state,strategy:linearLayoutStrategyFor(),overscan:()=>props.overscan,...props.initialViewport===undefined?{}:{initialViewport:props.initialViewport},...measure===undefined?{}:{measure},onStateChange:value=>{emit('stateChange',value)},onPlanChange:value=>{emit('planChange',value)},onError:error=>{emit('error',error)}});const registrations=new Map;const elements=new Map;const itemRefs=new Map;const pendingMeasurements=new Set;const forcedMeasurements=new Set;let measurementScheduled=false;const setRootElement=value=>{virtualizer.root.value=value instanceof HTMLElement?value:null};const measurePendingItems=()=>{measurementScheduled=false;if(disposed||pendingMeasurements.size===0)return;const connection=virtualizer.connection.value;if(connection===undefined)return;const queued=Array.from(pendingMeasurements);pendingMeasurements.clear();const measurements=[];for(const id of queued){const element=elements.get(id);const index=state.value.domain.indexOf(id);if(element===undefined||index===null)continue;const current=state.value.extents.extentAt(index);if(current?.kind==='exact'&&!forcedMeasurements.has(id))continue;const measurement=measureVirtualListElement(props.axis,id,element,state.value);if(measurement!==null)measurements.push(measurement)}for(const id of queued)forcedMeasurements.delete(id);if(measurements.length>0)connection.measure(measurements)};const scheduleItemMeasurement=(id,force=false)=>{if(props.itemSize!==undefined)return;pendingMeasurements.add(id);if(force)forcedMeasurements.add(id);if(measurementScheduled)return;measurementScheduled=true;void nextTick(measurePendingItems)};const scheduleChangedRenderedItemMeasurements=(previousPrepared,previousState,nextPrepared,nextState)=>{if(props.itemSize!==undefined)return;for(const id of elements.keys()){const previousIndex=previousState.domain.indexOf(id);const nextIndex=nextState.domain.indexOf(id);if(previousIndex!==null&&nextIndex!==null&&!Object.is(previousPrepared.items[previousIndex],nextPrepared.items[nextIndex]))scheduleItemMeasurement(id,true)}};const itemRef=id=>{const existing=itemRefs.get(id);if(existing!==undefined)return existing;const callback=value=>{const element=value instanceof HTMLElement?value:null;if(element!==null&&elements.get(id)===element)return;registrations.get(id)?.();registrations.delete(id);elements.delete(id);if(element!==null){elements.set(id,element);registrations.set(id,virtualizer.registerItem(element,id));scheduleItemMeasurement(id)}};itemRefs.set(id,callback);return callback};const bootstrapItemRef=(index,value)=>{const element=value instanceof HTMLElement?value:null;if(element===null)bootstrapElements.delete(index);else{bootstrapElements.set(index,element);scheduleBootstrap()}};const completeBootstrap=()=>{if(automaticEstimate.value!==undefined||!requiresDOMBootstrap(props.itemSize,props.estimateSize)||prepared.value.domain.size===0)return;const count=Math.min(bootstrapCount.value,prepared.value.domain.size);const extents=[];for(let index=0;index<count;index+=1){const element=bootstrapElements.get(index);if(element===undefined)return;const bounds=element.getBoundingClientRect();const extent=props.axis==='vertical'?bounds.height:bounds.width;if(!Number.isFinite(extent)||extent<=0)return;extents.push(extent)}const total=extents.reduce((sum,extent)=>sum+extent,0)+props.gap*Math.max(0,extents.length-1);const root=virtualizer.root.value;const measuredViewportExtent=props.axis==='vertical'?root?.clientHeight??0:root?.clientWidth??0;const viewportExtent=measuredViewportExtent>0?measuredViewportExtent:props.axis==='vertical'?props.initialViewport?.height??0:props.initialViewport?.width??0;const target=viewportExtent+bootstrapTrailingOverscanExtent(props.overscan,props.axis);const average=extents.reduce((sum,extent)=>sum+extent,0)/extents.length;if(target>total&&count<prepared.value.domain.size){const nextCount=Math.min(prepared.value.domain.size,Math.max(count+1,Math.ceil((target+props.gap)/(average+props.gap))));bootstrapCount.value=nextCount;return}automaticEstimate.value=average;bootstrapCount.value=0;bootstrapElements.clear();state.value=createVirtualListState(prepared.value,props.items,props,automaticEstimate.value)};function scheduleBootstrap(){if(disposed||bootstrapScheduled||automaticEstimate.value!==undefined||bootstrapCount.value===0)return;bootstrapScheduled=true;void nextTick(()=>{bootstrapScheduled=false;if(!disposed)completeBootstrap()})}onMounted(scheduleBootstrap);watch(()=>props.items,items=>{const previousPrepared=prepared.value;const previousState=state.value;const next=updatePreparedVirtualList(previousPrepared,items,props.getKey);if(requiresDOMBootstrap(props.itemSize,props.estimateSize)&&automaticEstimate.value===undefined){prepared.value=next;bootstrapCount.value=next.domain.size>0?1:0;scheduleBootstrap();return}const patch=reconcileVirtualList(state.value,next,items,props,automaticEstimate.value);if(patch===null){scheduleChangedRenderedItemMeasurements(previousPrepared,previousState,next,previousState);prepared.value=next;return}const result=virtualizer.connection.value===undefined?tryApplyLinearPatch(state.value,patch):virtualizer.connection.value.mutate(patch);if(!result.ok){if(virtualizer.connection.value===undefined)emit('error',result.error);return}if(virtualizer.connection.value===undefined)state.value=result.value.state;scheduleChangedRenderedItemMeasurements(previousPrepared,previousState,next,result.value.state);for(const id of itemRefs.keys()){if(result.value.state.domain.indexOf(id)===null)itemRefs.delete(id)}prepared.value=next},{flush:'sync'});let constructionWarningShown=false;watch(()=>[props.axis,props.gap,props.maxItems,props.itemSize,props.estimateSize,props.initialViewport?.x,props.initialViewport?.y,props.initialViewport?.width,props.initialViewport?.height],(value,previous)=>{if(constructionWarningShown||value.every((item,index)=>Object.is(item,previous[index])))return;constructionWarningShown=true;console.warn('[Sectile] VirtualList axis, gap, maxItems, itemSize, estimateSize, and initialViewport are construction-time options. Remount the list to change them.')},{flush:'sync'});onBeforeUnmount(()=>{disposed=true;for(const unregister of registrations.values())unregister();registrations.clear();elements.clear();itemRefs.clear();bootstrapElements.clear();pendingMeasurements.clear();forcedMeasurements.clear()});expose(Object.freeze({root:virtualizer.root,get state(){return state.value},get plan(){return virtualizer.plan.value},scrollTo:virtualizer.scrollTo,refresh:virtualizer.refresh,flush:virtualizer.flush}));return()=>{const plan=virtualizer.plan.value;const rootStyle=attrs['style'];const rootAttributes={...attrs};delete rootAttributes['style'];const bootstrapping=automaticEstimate.value===undefined&&bootstrapCount.value>0;const contentStyle=props.axis==='vertical'?{position:'relative',width:'100%',...bootstrapping?{}:{height:`${plan?.contentSize.height??0}px`}}:{position:'relative',height:'100%',...bootstrapping?{display:'flex'}:{width:`${plan?.contentSize.width??0}px`}};const children=plan?.placements.map(placement=>{const index=placement.index;const value=props.items[index];if(index>=props.items.length||prepared.value.domain.at(index)!==placement.id)return null;const itemAttributes=props.itemAttributes?.(value,index)??{};const itemStyle=virtualItemStyle(placement,props.itemSize===undefined?undefined:props.axis==='vertical'?{height:true}:{width:true});const rendered=slots['default']?.({value,key:placement.id,index,placement});const itemChildren=rendered===undefined||rendered===null?[]:Array.isArray(rendered)?rendered:[rendered];return h(props.itemAs,{...itemAttributes,key:placement.id,...props.itemSize===undefined?{ref:itemRef(placement.id)}:{},style:[itemAttributes['style'],itemStyle,props.axis==='vertical'?{width:'100%'}:{height:'100%'}],'data-scope':'virtual-list','data-part':'item','data-index':placement.index,'data-visible':placement.visible?'':undefined},itemChildren)})??[];if(automaticEstimate.value===undefined&&bootstrapCount.value>0){children.push(...renderVirtualListBootstrapItems(prepared.value,props.items,bootstrapCount.value,props,slots['default'],bootstrapItemRef))}if(prepared.value.domain.size===0){const empty=slots['empty']?.();if(empty!==undefined&&empty!==null)children.push(empty)}return h(props.as,{...rootAttributes,ref:setRootElement,style:[{overflow:'auto'},rootStyle],'data-scope':'virtual-list','data-part':'root'},[h(props.contentAs,{style:contentStyle,'data-scope':'virtual-list','data-part':'content'},children)])}}});export const VirtualList=VirtualListRuntime;export function createVirtualListMeasurementResolver(axis){return({element,placement,state})=>measureVirtualListElement(axis,placement.id,element,state)}function measureVirtualListElement(axis,id,element,state){const index=state.domain.indexOf(id);if(index===null)return null;const bounds=element.getBoundingClientRect();const value=axis==='vertical'?bounds.height:bounds.width;if(!Number.isFinite(value)||value<=0)return null;const current=state.extents.extentAt(index);if(current?.kind==='exact'&&Math.abs(current.value-value)<0.01)return null;return Object.freeze({index,extent:Object.freeze({kind:'exact',value})})}export function createVirtualListState(prepared,items,props,automaticEstimate){const estimate=props.estimateSize??automaticEstimate;const sharedExtent=props.itemSize!==undefined?exactExtent(props.itemSize):typeof estimate!=='function'?estimatedExtent(requireAutomaticEstimate(estimate),undefined,0):null;return createLinearLayout(createPreparedVirtualListSequence(prepared,props.maxItems),sharedExtent===null?createExtentIndex(Array.from({length:prepared.domain.size},(_unused,index)=>estimatedExtent(estimate,items[index],index)),{maxItems:props.maxItems}):createUniformExtentIndex(prepared.domain.size,sharedExtent,{maxItems:props.maxItems}),{axis:props.axis,gap:props.gap,crossExtent:1})}export function createEmptyVirtualListState(props){return createLinearLayout(createSequence([],{maxItems:props.maxItems,maxIDCodeUnits:1_024}),createUniformExtentIndex(0,exactExtent(0),{maxItems:props.maxItems}),{axis:props.axis,gap:props.gap,crossExtent:1})}export function bootstrapTrailingOverscanExtent(overscan,axis){if(typeof overscan==='number')return overscan;return axis==='vertical'?overscan.bottom??0:overscan.right??0}export function renderVirtualListBootstrapItems(prepared,items,count,props,render,itemRef){return Array.from({length:Math.min(count,prepared.domain.size)},(_unused,index)=>{const value=items[index];const id=prepared.domain.at(index);const attributes=props.itemAttributes?.(value,index)??{};const placement=Object.freeze({id,index,rect:Object.freeze({x:0,y:0,width:0,height:0}),visible:true});const rendered=render?.({value,key:id,index,placement});const children=rendered===undefined||rendered===null?[]:Array.isArray(rendered)?rendered:[rendered];return h(props.itemAs,{...attributes,key:id,ref:element=>itemRef(index,element),style:[attributes['style'],props.axis==='vertical'?{width:'100%'}:{height:'100%'},props.gap>0&&index>0?props.axis==='vertical'?{marginTop:`${props.gap}px`}:{marginLeft:`${props.gap}px`}:undefined],'data-scope':'virtual-list','data-part':'item','data-index':index,'data-visible':'','data-bootstrap':''},children)})}
1
+ import{defineComponent,h,nextTick,onBeforeUnmount,onMounted,shallowRef,watch}from'vue';import{createSequence}from'@sectile/core/sequence';import{createExactVirtualExtent,createVirtualExtent,reconcileVirtualCollectionExtents,reconcileVirtualCollectionValueExtents,virtualSizePolicyRequiresMeasurement}from'@sectile/virtual/collection';import{createExtentIndex,createUniformExtentIndex}from'@sectile/virtual/extent-index';import{createLinearLayout,linearLayoutStrategyFor,setLinearCrossExtent,tryApplyLinearMeasurements,tryApplyLinearPatch}from'@sectile/virtual/linear-layout';import{}from'@sectile/dom/virtual';import{VirtualizerFooter,VirtualizerHeader,VirtualizerRoot,VirtualizerSurface}from'./virtual-core.js';import{constrainPreparedVirtualCollection,createVirtualCollectionExpose,prepareVirtualCollection,renderHighLevelItems,updatePreparedVirtualCollection}from'./virtual-collection.js';const VirtualListRuntime=/* @__PURE__ */defineComponent({name:'SectileVirtualList',inheritAttrs:false,props:{items:{type:Array,required:true},getID:{type:Function,required:true},sizePolicy:{type:Object,required:true},axis:{type:String,default:'vertical'},gap:{type:Number,default:0},overscan:{type:[Number,Object],default:240},viewportInsets:{type:[Number,Object],default:undefined},maxItems:{type:Number,default:1_000_000},initialViewport:{type:Object,default:undefined},as:{type:String,default:'div'},contentAs:{type:String,default:'div'},itemAs:{type:String,default:'div'},itemAttributes:{type:Function,default:undefined}},emits:{stateChange:_state=>true,planChange:_plan=>true,error:_error=>true},slots:Object,setup(props,{attrs,emit,expose,slots}){const axis=props.axis;const gap=props.gap;const maxItems=props.maxItems;const sizePolicy=props.sizePolicy;const initialViewport=props.initialViewport===undefined?undefined:Object.freeze({...props.initialViewport});const prepared=shallowRef(prepareVirtualCollection(props.items,props.getID,maxItems));const automaticEstimate=shallowRef();const bootstrapCount=shallowRef(virtualSizePolicyRequiresMeasurement(sizePolicy)&&prepared.value.domain.size>0?1:0);const bootstrapElements=new Map;const bootstrapRefs=new Map;let bootstrapScheduled=false;let disposed=false;const initialCrossExtent=crossExtentForViewport(axis,initialViewport);const initialState=virtualSizePolicyRequiresMeasurement(sizePolicy)?createEmptyVirtualListState({axis,gap,maxItems,crossExtent:initialCrossExtent}):createVirtualListState(prepared.value,props.items,{sizePolicy,axis,gap,maxItems,crossExtent:initialCrossExtent});const activeState=shallowRef(initialState);const root=shallowRef();const measure=sizePolicy.kind==='fixed'?undefined:createVirtualListMeasurementResolver(axis);const isBootstrapping=()=>automaticEstimate.value===undefined&&bootstrapCount.value>0&&prepared.value.domain.size>0;const phase=()=>prepared.value.domain.size===0?'empty':isBootstrapping()?'bootstrap':'ready';const currentState=()=>root.value?.state??activeState.value;const bootstrapItemRef=index=>{const existing=bootstrapRefs.get(index);if(existing!==undefined)return existing;const callback=value=>{const element=value instanceof HTMLElement?value:null;if(element===null){bootstrapElements.delete(index);if(bootstrapRefs.get(index)===callback)bootstrapRefs.delete(index);return}bootstrapElements.set(index,element);scheduleBootstrap()};bootstrapRefs.set(index,callback);return callback};const completeBootstrap=()=>{if(!isBootstrapping())return;const count=Math.min(bootstrapCount.value,prepared.value.domain.size);const extents=[];for(let index=0;index<count;index+=1){const element=bootstrapElements.get(index);if(element===undefined)return;const bounds=element.getBoundingClientRect();const extent=axis==='vertical'?bounds.height:bounds.width;if(!Number.isFinite(extent)||extent<=0)return;extents.push(extent)}const total=extents.reduce((sum,extent)=>sum+extent,0)+gap*Math.max(0,extents.length-1);const scrollport=root.value?.scrollport.value;const measuredViewportExtent=axis==='vertical'?scrollport?.clientHeight??0:scrollport?.clientWidth??0;const viewportExtent=measuredViewportExtent>0?measuredViewportExtent:axis==='vertical'?initialViewport?.height??0:initialViewport?.width??0;const target=viewportExtent+bootstrapTrailingOverscanExtent(props.overscan,axis);const average=extents.reduce((sum,extent)=>sum+extent,0)/extents.length;if(target>total&&count<prepared.value.domain.size){bootstrapCount.value=Math.min(prepared.value.domain.size,Math.max(count+1,Math.ceil((target+gap)/(average+gap))));return}automaticEstimate.value=average;bootstrapCount.value=0;bootstrapElements.clear();bootstrapRefs.clear();activeState.value=createVirtualListState(prepared.value,props.items,{sizePolicy,axis,gap,maxItems,crossExtent:currentState().crossExtent},average)};function scheduleBootstrap(){if(disposed||bootstrapScheduled||automaticEstimate.value!==undefined||bootstrapCount.value===0)return;bootstrapScheduled=true;void nextTick(()=>{bootstrapScheduled=false;if(!disposed)completeBootstrap()})}onMounted(scheduleBootstrap);watch(()=>[props.items,props.getID],()=>{const next=updatePreparedVirtualCollection(prepared.value,props.items,props.getID);if(virtualSizePolicyRequiresMeasurement(sizePolicy)&&automaticEstimate.value===undefined){prepared.value=next;bootstrapCount.value=next.domain.size>0?1:0;scheduleBootstrap();return}let nextState=currentState();const exposed=root.value;const patch=reconcileVirtualCollectionExtents(nextState,next,sizePolicy,automaticEstimate.value);if(patch!==null){const result=exposed===undefined?tryApplyLinearPatch(nextState,patch):exposed.mutate(patch);if(!result.ok){if(exposed===undefined){emit('error',result.error)}return}nextState=result.value.state;activeState.value=nextState}const valueUpdates=reconcileVirtualCollectionValueExtents(nextState,next,sizePolicy,automaticEstimate.value);if(valueUpdates.length>0){const result=exposed===undefined?tryApplyLinearMeasurements(nextState,{generation:nextState.generation,measurements:valueUpdates}):exposed.measure(valueUpdates);if(!result.ok){if(exposed===undefined){emit('error',result.error)}return}nextState=result.value.state;activeState.value=nextState}prepared.value=next},{flush:'sync'});const syncCrossExtent=plan=>{const crossExtent=axis==='vertical'?plan.viewport.width:plan.viewport.height;const state=currentState();const next=setLinearCrossExtent(state,crossExtent);if(Object.is(next,state))return false;activeState.value=next;return true};let constructionWarningShown=false;watch(()=>[props.axis,props.gap,props.maxItems,props.sizePolicy,props.initialViewport?.x,props.initialViewport?.y,props.initialViewport?.width,props.initialViewport?.height],()=>{if(constructionWarningShown||props.axis===axis&&props.gap===gap&&props.maxItems===maxItems&&sameVirtualSizePolicy(props.sizePolicy,sizePolicy)&&sameVirtualRect(props.initialViewport,initialViewport))return;constructionWarningShown=true;console.warn('[Sectile] VirtualList axis, gap, maxItems, sizePolicy, and initialViewport are construction-time options. Remount the list to change them.')},{flush:'sync'});onBeforeUnmount(()=>{disposed=true;bootstrapElements.clear();bootstrapRefs.clear()});expose(createVirtualCollectionExpose(root,initialState,phase));return()=>h(VirtualizerRoot,{...attrs,ref:root,defaultState:activeState.value,strategy:linearLayoutStrategyFor(),overscan:props.overscan,...props.viewportInsets===undefined?{}:{viewportInsets:props.viewportInsets},...initialViewport===undefined?{}:{initialViewport},...measure===undefined?{}:{measure},as:props.as,style:[{overflow:'auto'},attrs['style']],'data-virtual-layout':'virtual-list','data-phase':phase(),onStateChange:value=>{const state=value;activeState.value=state;emit('stateChange',state)},onPlanChange:plan=>{if(syncCrossExtent(plan))return;emit('planChange',plan)},onError:error=>emit('error',error)},{default:({placements})=>[slots['header']===undefined?null:h(VirtualizerHeader,{},{default:()=>slots['header']?.()}),h(VirtualizerSurface,{as:props.contentAs,...isBootstrapping()&&axis==='horizontal'?{style:{display:'flex'}}:{}},{default:()=>isBootstrapping()?renderVirtualListBootstrapItems(prepared.value,props.items,bootstrapCount.value,{axis,gap,crossExtent:currentState().crossExtent,itemAs:props.itemAs,itemAttributes:props.itemAttributes},slots['item'],bootstrapItemRef):renderHighLevelItems('virtual-list',placements,prepared.value,props.items,props.itemAs,props.itemAttributes,linearItemSize(axis,sizePolicy),(value,id,index,placement)=>slots['item']?.({value,id,index,placement}),slots['empty'])}),slots['footer']===undefined?null:h(VirtualizerFooter,{},{default:()=>slots['footer']?.()})]})}});export const VirtualList=VirtualListRuntime;export function createVirtualListMeasurementResolver(axis){return({element,placement,state})=>measureVirtualListElement(axis,placement.id,element,state)}function measureVirtualListElement(axis,id,element,state){const index=state.domain.indexOf(id);if(index===null)return null;const bounds=element.getBoundingClientRect();const value=axis==='vertical'?bounds.height:bounds.width;if(!Number.isFinite(value)||value<=0)return null;const current=state.extents.extentAt(index);if(current?.kind==='exact'&&Math.abs(current.value-value)<0.01)return null;return Object.freeze({index,extent:Object.freeze({kind:'exact',value})})}export function createVirtualListState(prepared,items,props,automaticEstimate){return createLinearLayout(constrainPreparedVirtualCollection(prepared,props.maxItems),createVirtualListExtentIndex(prepared,items,props.sizePolicy,props.maxItems,automaticEstimate),{axis:props.axis,gap:props.gap,crossExtent:props.crossExtent})}export function createEmptyVirtualListState(props){return createLinearLayout(createSequence([],{maxItems:props.maxItems,maxIDCodeUnits:1_024}),createUniformExtentIndex(0,createExactVirtualExtent(0),{maxItems:props.maxItems}),{axis:props.axis,gap:props.gap,crossExtent:props.crossExtent})}export function bootstrapTrailingOverscanExtent(overscan,axis){if(typeof overscan==='number')return overscan;return axis==='vertical'?overscan.bottom??0:overscan.right??0}export function renderVirtualListBootstrapItems(prepared,items,count,props,render,itemRef){return Array.from({length:Math.min(count,prepared.domain.size)},(_unused,index)=>{const value=items[index];const id=prepared.domain.at(index);const attributes=props.itemAttributes?.(value,index)??{};const placement=Object.freeze({id,index,rect:Object.freeze(props.axis==='vertical'?{x:0,y:0,width:props.crossExtent,height:0}:{x:0,y:0,width:0,height:props.crossExtent}),visible:true});const rendered=render?.({value,id,index,placement});const children=rendered===undefined||rendered===null?[]:Array.isArray(rendered)?rendered:[rendered];return h(props.itemAs,{...attributes,key:id,ref:itemRef(index),style:[attributes['style'],props.crossExtent>0?props.axis==='vertical'?{width:`${props.crossExtent}px`}:{height:`${props.crossExtent}px`}:undefined,props.gap>0&&index>0?props.axis==='vertical'?{marginTop:`${props.gap}px`}:{marginLeft:`${props.gap}px`}:undefined],'data-scope':'virtual-list','data-part':'item','data-index':index,'data-visible':'','data-bootstrap':''},children)})}function createVirtualListExtentIndex(prepared,items,sizePolicy,maxItems,automaticEstimate){if(prepared.domain.size===0){return createUniformExtentIndex(0,createExactVirtualExtent(0),{maxItems})}const shared=sizePolicy.kind==='fixed'||sizePolicy.kind==='measured'||sizePolicy.kind==='estimated'&&typeof sizePolicy.estimate==='number'?createVirtualExtent(sizePolicy,items[0],0,automaticEstimate):null;return shared===null?createExtentIndex(Array.from({length:prepared.domain.size},(_unused,index)=>createVirtualExtent(sizePolicy,items[index],index,automaticEstimate)),{maxItems}):createUniformExtentIndex(prepared.domain.size,shared,{maxItems})}function linearItemSize(axis,sizePolicy){if(sizePolicy.kind==='fixed')return'both';return axis==='vertical'?'width':'height'}function crossExtentForViewport(axis,viewport){if(viewport===undefined)return 0;return axis==='vertical'?viewport.width:viewport.height}function sameVirtualSizePolicy(left,right){if(left.kind!==right.kind)return false;if(left.kind==='measured'&&right.kind==='measured')return true;if(left.kind==='fixed'&&right.kind==='fixed'){return left.extent===right.extent}return left.kind==='estimated'&&right.kind==='estimated'&&Object.is(left.estimate,right.estimate)}function sameVirtualRect(left,right){if(left===undefined||right===undefined)return left===right;return left.x===right.x&&left.y===right.y&&left.width===right.width&&left.height===right.height}
2
2
  //# sourceMappingURL=virtual-list.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"virtual-list.js","names":["defineComponent","h","nextTick","onBeforeUnmount","onMounted","shallowRef","watch","createSequence","createExtentIndex","createUniformExtentIndex","linearLayoutStrategyFor","tryApplyLinearPatch","createLinearLayout","createAxisMeasurementResolver","virtualItemStyle","Primitive","VirtualizerContent","VirtualizerRoot","useVirtualizer","assertVirtualListSizeMode","createPreparedVirtualListSequence","estimatedExtent","exactExtent","prepareVirtualList","reconcileVirtualList","requireAutomaticEstimate","requiresDOMBootstrap","updatePreparedVirtualList","VirtualListRuntime","name","inheritAttrs","props","items","type","Array","required","getKey","Function","estimateSize","Number","default","undefined","itemSize","axis","String","gap","overscan","Object","maxItems","initialViewport","as","contentAs","itemAs","itemAttributes","emits","stateChange","_state","planChange","_plan","error","_error","slots","setup","attrs","emit","expose","prepared","automaticEstimate","bootstrapCount","value","domain","size","bootstrapElements","Map","bootstrapScheduled","disposed","state","createEmptyVirtualListState","createVirtualListState","measure","createVirtualListMeasurementResolver","virtualizer","strategy","onStateChange","onPlanChange","onError","registrations","elements","itemRefs","pendingMeasurements","Set","forcedMeasurements","measurementScheduled","setRootElement","root","HTMLElement","measurePendingItems","connection","queued","from","clear","measurements","id","element","get","index","indexOf","current","extents","extentAt","kind","has","measurement","measureVirtualListElement","push","delete","length","scheduleItemMeasurement","force","add","scheduleChangedRenderedItemMeasurements","previousPrepared","previousState","nextPrepared","nextState","keys","previousIndex","nextIndex","is","itemRef","existing","callback","set","registerItem","bootstrapItemRef","scheduleBootstrap","completeBootstrap","count","Math","min","bounds","getBoundingClientRect","extent","height","width","isFinite","total","reduce","sum","max","measuredViewportExtent","clientHeight","clientWidth","viewportExtent","target","bootstrapTrailingOverscanExtent","average","nextCount","ceil","next","patch","result","mutate","ok","flush","constructionWarningShown","x","y","previous","every","item","console","warn","unregister","values","freeze","plan","scrollTo","refresh","rootStyle","rootAttributes","bootstrapping","contentStyle","position","contentSize","display","children","placements","map","placement","at","itemStyle","rendered","key","itemChildren","isArray","ref","style","visible","renderVirtualListBootstrapItems","empty","overflow","VirtualList","abs","estimate","sharedExtent","_unused","crossExtent","maxIDCodeUnits","bottom","right","render","attributes","rect","marginTop","marginLeft"],"sources":["../../src/internal/virtual-list.ts"],"mappings":"OAASA,gBAAiBC,EAAGC,SAAUC,gBAAiBC,UAAWC,WAAYC,UAA+K,aACrPC,mBAA6G,gCAC7GC,kBAAmBC,6BAA+D,uCAClFC,wBAAyBC,oBAAqBC,uBAA6G,wCAC3JC,8BAA+BC,qBAAqO,8BACpQC,cAAiB,yBACjBC,mBAAoBC,gBAAiBC,mBAAiF,2BAE7HC,0BACAC,kCACAC,gBACAC,YACAC,mBACAC,qBACAC,yBACAC,qBACAC,8BAKK,gCA8FP,MAAMC,kCAAqC5B,gBAAgB,CACzD6B,KAAM,qBACNC,aAAc,MACdC,MAAO,CACLC,MAAO,CACLC,KAAMC,MACNC,SAAU,MAEZC,OAAQ,CACNH,KAAMI,SACNF,SAAU,MAEZG,aAAc,CACZL,KAAM,CAACM,OAAQF,UACfG,QAASC,WAEXC,SAAU,CAAET,KAAMM,OAAQC,QAASC,WACnCE,KAAM,CACJV,KAAMW,OACNJ,QAAS,YAEXK,IAAK,CAAEZ,KAAMM,OAAQC,QAAS,GAC9BM,SAAU,CACRb,KAAM,CAACM,OAAQQ,QACfP,QAAS,KAEXQ,SAAU,CAAEf,KAAMM,OAAQC,QAAS,WACnCS,gBAAiB,CACfhB,KAAMc,OACNP,QAASC,WAEXS,GAAI,CAAEjB,KAAMW,OAAQJ,QAAS,OAC7BW,UAAW,CAAElB,KAAMW,OAAQJ,QAAS,OACpCY,OAAQ,CAAEnB,KAAMW,OAAQJ,QAAS,OACjCa,eAAgB,CACdpB,KAAMI,SACNG,QAASC,YAGba,MAAO,CACLC,YAAcC,QAA+C,KAC7DC,WAAaC,OAA8C,KAC3DC,MAAQC,QAA4D,MAEtEC,MAAOd,OAIP,KAAAe,CAAM/B,OAAOgC,MAAOC,KAAMC,OAAQJ,QAChC1C,0BAA0BY,MAAMW,SAAUX,MAAMO,cAChD,MAAM4B,SAAW7D,WAAWkB,mBAAmBQ,MAAMC,MAAOD,MAAMK,OAAQL,MAAMiB,WAChF,MAAMmB,kBAAoB9D,aAC1B,MAAM+D,eAAiB/D,WACrBqB,qBAAqBK,MAAMW,SAAUX,MAAMO,eAAiB4B,SAASG,MAAMC,OAAOC,KAAO,EAAI,EAAI,GAEnG,MAAMC,kBAAoB,IAAIC,IAC9B,IAAIC,mBAAqB,MACzB,IAAIC,SAAW,MACf,MAAMC,MAAQvE,WACZqB,qBAAqBK,MAAMW,SAAUX,MAAMO,cACvCuC,4BAA4B9C,OAC5B+C,uBAAuBZ,SAASG,MAAOtC,MAAMC,MAAOD,QAE1D,MAAMgD,QAAUhD,MAAMW,WAAaD,UAC/BuC,qCAAqCjD,MAAMY,MAC3CF,UACJ,MAAMwC,YAAc/D,eAAe,CACjC0D,MACAM,SAAUxE,0BACVoC,SAAU,IAAMf,MAAMe,YAClBf,MAAMkB,kBAAoBR,UAC1B,GACA,CAAEQ,gBAAiBlB,MAAMkB,oBACzB8B,UAAYtC,UAAY,GAAK,CAAEsC,SACnCI,cAAgBd,QACdL,KAAK,cAAeK,QAEtBe,aAAef,QACbL,KAAK,aAAcK,QAErBgB,QAAU1B,QACRK,KAAK,QAASL,UAGlB,MAAM2B,cAAgB,IAAIb,IAC1B,MAAMc,SAAW,IAAId,IACrB,MAAMe,SAAW,IAAIf,IACrB,MAAMgB,oBAAsB,IAAIC,IAChC,MAAMC,mBAAqB,IAAID,IAC/B,IAAIE,qBAAuB,MAC3B,MAAMC,eAAkBxB,QACtBY,YAAYa,KAAKzB,MAAQA,iBAAiB0B,YAAc1B,MAAQ,MAGlE,MAAM2B,oBAAsB,KAC1BJ,qBAAuB,MACvB,GAAIjB,UAAYc,oBAAoBlB,OAAS,EAAG,OAChD,MAAM0B,WAAahB,YAAYgB,WAAW5B,MAC1C,GAAI4B,aAAexD,UAAW,OAC9B,MAAMyD,OAAShE,MAAMiE,KAAKV,qBAC1BA,oBAAoBW,QACpB,MAAMC,aAAoC,GAC1C,IAAK,MAAMC,MAAMJ,OAAQ,CACvB,MAAMK,QAAUhB,SAASiB,IAAIF,IAC7B,MAAMG,MAAQ7B,MAAMP,MAAMC,OAAOoC,QAAQJ,IACzC,GAAIC,UAAY9D,WAAagE,QAAU,KAAM,SAC7C,MAAME,QAAU/B,MAAMP,MAAMuC,QAAQC,SAASJ,OAC7C,GAAIE,SAASG,OAAS,UAAYnB,mBAAmBoB,IAAIT,IAAK,SAC9D,MAAMU,YAAcC,0BAClBlF,MAAMY,KACN2D,GACAC,QACA3B,MAAMP,OAER,GAAI2C,cAAgB,KAAMX,aAAaa,KAAKF,YAC9C,CACA,IAAK,MAAMV,MAAMJ,OAAQP,mBAAmBwB,OAAOb,IACnD,GAAID,aAAae,OAAS,EAAGnB,WAAWlB,QAAQsB,eAElD,MAAMgB,wBAA0B,CAACf,GAAYgB,MAAQ,SACnD,GAAIvF,MAAMW,WAAaD,UAAW,OAClCgD,oBAAoB8B,IAAIjB,IACxB,GAAIgB,MAAO3B,mBAAmB4B,IAAIjB,IAClC,GAAIV,qBAAsB,OAC1BA,qBAAuB,UAClB1F,SAAS8F,sBAEhB,MAAMwB,wCAA0C,CAC9CC,iBACAC,cACAC,aACAC,aAEA,GAAI7F,MAAMW,WAAaD,UAAW,OAClC,IAAK,MAAM6D,MAAMf,SAASsC,OAAQ,CAChC,MAAMC,cAAgBJ,cAAcpD,OAAOoC,QAAQJ,IACnD,MAAMyB,UAAYH,UAAUtD,OAAOoC,QAAQJ,IAC3C,GACEwB,gBAAkB,MACfC,YAAc,OACbhF,OAAOiF,GACTP,iBAAiBzF,MAAM8F,eACvBH,aAAa3F,MAAM+F,YAErBV,wBAAwBf,GAAI,KAChC,GAGF,MAAM2B,QAAW3B,KACf,MAAM4B,SAAW1C,SAASgB,IAAIF,IAC9B,GAAI4B,WAAazF,UAAW,OAAOyF,SACnC,MAAMC,SAAY9D,QAChB,MAAMkC,QAAUlC,iBAAiB0B,YAAc1B,MAAQ,KACvD,GAAIkC,UAAY,MAAQhB,SAASiB,IAAIF,MAAQC,QAAS,OACtDjB,cAAckB,IAAIF,GAAlBhB,KACAA,cAAc6B,OAAOb,IACrBf,SAAS4B,OAAOb,IAChB,GAAIC,UAAY,KAAM,CACpBhB,SAAS6C,IAAI9B,GAAIC,SACjBjB,cAAc8C,IAAI9B,GAAIrB,YAAYoD,aAAa9B,QAASD,KACxDe,wBAAwBf,GAC1B,GAEFd,SAAS4C,IAAI9B,GAAI6B,UACjB,OAAOA,UAGT,MAAMG,iBAAmB,CAAC7B,MAAepC,SACvC,MAAMkC,QAAUlC,iBAAiB0B,YAAc1B,MAAQ,KACvD,GAAIkC,UAAY,KAAM/B,kBAAkB2C,OAAOV,WAC1C,CACHjC,kBAAkB4D,IAAI3B,MAAOF,SAC7BgC,mBACF,GAEF,MAAMC,kBAAoB,KACxB,GACErE,kBAAkBE,QAAU5B,YACxBf,qBAAqBK,MAAMW,SAAUX,MAAMO,eAC5C4B,SAASG,MAAMC,OAAOC,OAAS,EAClC,OACF,MAAMkE,MAAQC,KAAKC,IAAIvE,eAAeC,MAAOH,SAASG,MAAMC,OAAOC,MACnE,MAAMqC,QAAoB,GAC1B,IAAK,IAAIH,MAAQ,EAAGA,MAAQgC,MAAOhC,OAAS,EAAG,CAC7C,MAAMF,QAAU/B,kBAAkBgC,IAAIC,OACtC,GAAIF,UAAY9D,UAAW,OAC3B,MAAMmG,OAASrC,QAAQsC,wBACvB,MAAMC,OAAS/G,MAAMY,OAAS,WAAaiG,OAAOG,OAASH,OAAOI,MAClE,IAAKzG,OAAO0G,SAASH,SAAWA,QAAU,EAAG,OAC7ClC,QAAQM,KAAK4B,OACf,CACA,MAAMI,MAAQtC,QAAQuC,OAAO,CAACC,IAAKN,SAAWM,IAAMN,OAAQ,GACxD/G,MAAMc,IAAM6F,KAAKW,IAAI,EAAGzC,QAAQQ,OAAS,GAC7C,MAAMtB,KAAOb,YAAYa,KAAKzB,MAC9B,MAAMiF,uBAAyBvH,MAAMY,OAAS,WAC1CmD,MAAMyD,cAAgB,EACtBzD,MAAM0D,aAAe,EACzB,MAAMC,eAAiBH,uBAAyB,EAC5CA,uBACAvH,MAAMY,OAAS,WACbZ,MAAMkB,iBAAiB8F,QAAU,EACjChH,MAAMkB,iBAAiB+F,OAAS,EACtC,MAAMU,OAASD,eAAiBE,gCAAgC5H,MAAMe,SAAUf,MAAMY,MACtF,MAAMiH,QAAUhD,QAAQuC,OAAO,CAACC,IAAKN,SAAWM,IAAMN,OAAQ,GAAKlC,QAAQQ,OAC3E,GAAIsC,OAASR,OAAST,MAAQvE,SAASG,MAAMC,OAAOC,KAAM,CACxD,MAAMsF,UAAYnB,KAAKC,IACrBzE,SAASG,MAAMC,OAAOC,KACtBmE,KAAKW,IAAIZ,MAAQ,EAAGC,KAAKoB,MAAMJ,OAAS3H,MAAMc,MAAQ+G,QAAU7H,MAAMc,QAExEuB,eAAeC,MAAQwF,UACvB,MACF,CACA1F,kBAAkBE,MAAQuF,QAC1BxF,eAAeC,MAAQ,EACvBG,kBAAkB4B,QAClBxB,MAAMP,MAAQS,uBACZZ,SAASG,MACTtC,MAAMC,MACND,MACAoC,kBAAkBE,QAGtB,SAASkE,oBACP,GACE5D,UACGD,oBACAP,kBAAkBE,QAAU5B,WAC5B2B,eAAeC,QAAU,EAC5B,OACFK,mBAAqB,UAChBxE,SAAS,KACZwE,mBAAqB,MACrB,IAAKC,SAAU6D,qBAEnB,CACApI,UAAUmI,mBAEVjI,MACE,IAAMyB,MAAMC,MACXA,QACC,MAAMyF,iBAAmBvD,SAASG,MAClC,MAAMqD,cAAgB9C,MAAMP,MAC5B,MAAM0F,KAAOpI,0BAA0B8F,iBAAkBzF,MAAOD,MAAMK,QACtE,GAAIV,qBAAqBK,MAAMW,SAAUX,MAAMO,eAAiB6B,kBAAkBE,QAAU5B,UAAW,CACrGyB,SAASG,MAAQ0F,KACjB3F,eAAeC,MAAQ0F,KAAKzF,OAAOC,KAAO,EAAI,EAAI,EAClDgE,oBACA,MACF,CACA,MAAMyB,MAAQxI,qBACZoD,MAAMP,MACN0F,KACA/H,MACAD,MACAoC,kBAAkBE,OAEpB,GAAI2F,QAAU,KAAM,CAClBxC,wCACEC,iBACAC,cACAqC,KACArC,eAEFxD,SAASG,MAAQ0F,KACjB,MACF,CACA,MAAME,OAAShF,YAAYgB,WAAW5B,QAAU5B,UAC5C9B,oBAAoBiE,MAAMP,MAAO2F,OACjC/E,YAAYgB,WAAW5B,MAAM6F,OAAOF,OACxC,IAAKC,OAAOE,GAAI,CACd,GAAIlF,YAAYgB,WAAW5B,QAAU5B,UAAWuB,KAAK,QAASiG,OAAOtG,OACrE,MACF,CACA,GAAIsB,YAAYgB,WAAW5B,QAAU5B,UAAWmC,MAAMP,MAAQ4F,OAAO5F,MAAMO,MAC3E4C,wCACEC,iBACAC,cACAqC,KACAE,OAAO5F,MAAMO,OAEf,IAAK,MAAM0B,MAAMd,SAASqC,OAAQ,CAChC,GAAIoC,OAAO5F,MAAMO,MAAMN,OAAOoC,QAAQJ,MAAQ,KAAMd,SAAS2B,OAAOb,GACtE,CACApC,SAASG,MAAQ0F,MAEnB,CAAEK,MAAO,SAGX,IAAIC,yBAA2B,MAC/B/J,MACE,IAAM,CACJyB,MAAMY,KACNZ,MAAMc,IACNd,MAAMiB,SACNjB,MAAMW,SACNX,MAAMO,aACNP,MAAMkB,iBAAiBqH,EACvBvI,MAAMkB,iBAAiBsH,EACvBxI,MAAMkB,iBAAiB+F,MACvBjH,MAAMkB,iBAAiB8F,QAEzB,CAAC1E,MAAOmG,YACN,GACEH,0BACGhG,MAAMoG,MAAM,CAACC,KAAMjE,QAAU1D,OAAOiF,GAAG0C,KAAMF,SAAS/D,SACzD,OACF4D,yBAA2B,KAC3BM,QAAQC,KACN,2JAGJ,CAAER,MAAO,SAGXjK,gBAAgB,KACdwE,SAAW,KACX,IAAK,MAAMkG,cAAcvF,cAAcwF,SAAUD,aACjDvF,cAAcc,QACdb,SAASa,QACTZ,SAASY,QACT5B,kBAAkB4B,QAClBX,oBAAoBW,QACpBT,mBAAmBS,UAGrBnC,OAAOlB,OAAOgI,OAAO,CACnBjF,KAAMb,YAAYa,KAClB,SAAIlB,GACF,OAAOA,MAAMP,KACf,EACA,QAAI2G,GACF,OAAO/F,YAAY+F,KAAK3G,KAC1B,EACA4G,SAAUhG,YAAYgG,SACtBC,QAASjG,YAAYiG,QACrBd,MAAOnF,YAAYmF,SAGrB,MAAO,KACL,MAAMY,KAAO/F,YAAY+F,KAAK3G,MAC9B,MAAM8G,UAAYpH,MAAM,SACxB,MAAMqH,eAAiB,IAAKrH,cACrBqH,eAAe,SACtB,MAAMC,cAAgBlH,kBAAkBE,QAAU5B,WAAa2B,eAAeC,MAAQ,EACtF,MAAMiH,aAAevJ,MAAMY,OAAS,WAChC,CACE4I,SAAU,WACVvC,MAAO,UACHqC,cAAgB,GAAK,CAAEtC,OAAQ,GAAGiC,MAAMQ,YAAYzC,QAAU,QAEpE,CACEwC,SAAU,WACVxC,OAAQ,UACJsC,cACA,CAAEI,QAAS,QACX,CAAEzC,MAAO,GAAGgC,MAAMQ,YAAYxC,OAAS,QAEjD,MAAM0C,SAAYV,MAAMW,WAAWC,IAAKC,YACtC,MAAMpF,MAAQoF,UAAUpF,MACxB,MAAMpC,MAAQtC,MAAMC,MAAMyE,OAC1B,GAAIA,OAAS1E,MAAMC,MAAMoF,QAAUlD,SAASG,MAAMC,OAAOwH,GAAGrF,SAAWoF,UAAUvF,GAAI,OAAO,KAC5F,MAAMjD,eAAiBtB,MAAMsB,iBAAiBgB,MAAOoC,QAAU,GAC/D,MAAMsF,UAAYjL,iBAAiB+K,UAAW9J,MAAMW,WAAaD,UAC7DA,UACAV,MAAMY,OAAS,WACb,CAAEoG,OAAQ,MACV,CAAEC,MAAO,OACf,MAAMgD,SAAWnI,MAAM,aAAa,CAClCQ,MACA4H,IAAKJ,UAAUvF,GACfG,MACAoF,YAEF,MAAMK,aAAeF,WAAavJ,WAAauJ,WAAa,KACxD,GACA9J,MAAMiK,QAAQH,UACZA,SACA,CAACA,UACP,OAAO/L,EACL8B,MAAMqB,OACN,IACKC,eACH4I,IAAKJ,UAAUvF,MACXvE,MAAMW,WAAaD,UAAY,CAAE2J,IAAKnE,QAAQ4D,UAAUvF,KAAQ,GACpE+F,MAAO,CACLhJ,eAAe,SACf0I,UACAhK,MAAMY,OAAS,WACX,CAAEqG,MAAO,QACT,CAAED,OAAQ,SAEhB,aAAc,eACd,YAAa,OACb,aAAc8C,UAAUpF,MACxB,eAAgBoF,UAAUS,QAAU,GAAK7J,WAE3CyJ,iBAEE,GACN,GAAI/H,kBAAkBE,QAAU5B,WAAa2B,eAAeC,MAAQ,EAAG,CACrEqH,SAASxE,QAAQqF,gCACfrI,SAASG,MACTtC,MAAMC,MACNoC,eAAeC,MACftC,MACA8B,MAAM,WACNyE,kBAEJ,CACA,GAAIpE,SAASG,MAAMC,OAAOC,OAAS,EAAG,CACpC,MAAMiI,MAAQ3I,MAAM,aACpB,GAAI2I,QAAU/J,WAAa+J,QAAU,KAAMd,SAASxE,KAAKsF,MAC3D,CACA,OAAOvM,EACL8B,MAAMmB,GACN,IACKkI,eACHgB,IAAKvG,eACLwG,MAAO,CAAC,CAAEI,SAAU,QAAUtB,WAC9B,aAAc,eACd,YAAa,QAEf,CACElL,EACE8B,MAAMoB,UACN,CACEkJ,MAAOf,aACP,aAAc,eACd,YAAa,WAEfI,YAKV,WAGK,MAAMgB,YAAc9K,0BAErB,SAAUoD,qCACdrC,MAEA,MAAO,EAAG4D,QAASsF,UAAWjH,SAC5BqC,0BAA0BtE,KAAMkJ,UAAUvF,GAAIC,QAAS3B,MAC3D,CAEA,SAASqC,0BACPtE,KACA2D,GACAC,QACA3B,OAEA,MAAM6B,MAAQ7B,MAAMN,OAAOoC,QAAQJ,IACnC,GAAIG,QAAU,KAAM,OAAO,KAC3B,MAAMmC,OAASrC,QAAQsC,wBACvB,MAAMxE,MAAQ1B,OAAS,WAAaiG,OAAOG,OAASH,OAAOI,MAC3D,IAAKzG,OAAO0G,SAAS5E,QAAUA,OAAS,EAAG,OAAO,KAClD,MAAMsC,QAAU/B,MAAMgC,QAAQC,SAASJ,OACvC,GAAIE,SAASG,OAAS,SAAW4B,KAAKiE,IAAIhG,QAAQtC,MAAQA,OAAS,KAAM,OAAO,KAChF,OAAOtB,OAAOgI,OAAO,CACnBtE,MACAqC,OAAQ/F,OAAOgI,OAAO,CAAEjE,KAAM,QAAkBzC,SAEpD,QAEM,SAAUS,uBACdZ,SACAlC,MACAD,MAOAoC,mBAEA,MAAMyI,SAAW7K,MAAMO,cAAgB6B,kBACvC,MAAM0I,aAAe9K,MAAMW,WAAaD,UACpCnB,YAAYS,MAAMW,iBACXkK,WAAa,WAClBvL,gBAAgBI,yBAAyBmL,UAAWnK,UAAW,GAC/D,KACN,OAAO7B,mBACLQ,kCAAkC8C,SAAUnC,MAAMiB,UAClD6J,eAAiB,KACbrM,kBACE0B,MAAMiE,KAAK,CAAEiB,OAAQlD,SAASI,OAAOC,MAAQ,CAACuI,QAASrG,QAAUpF,gBAC/DuL,SACA5K,MAAMyE,OACNA,QAEF,CAAEzD,SAAUjB,MAAMiB,WAEpBvC,yBAAyByD,SAASI,OAAOC,KAAMsI,aAAc,CAC3D7J,SAAUjB,MAAMiB,WAEtB,CAAEL,KAAMZ,MAAMY,KAAME,IAAKd,MAAMc,IAAKkK,YAAa,GAErD,QAEM,SAAUlI,4BACd9C,OAMA,OAAOnB,mBACLL,eAAe,GAAI,CAAEyC,SAAUjB,MAAMiB,SAAUgK,eAAgB,QAC/DvM,yBAAyB,EAAGa,YAAY,GAAI,CAAE0B,SAAUjB,MAAMiB,WAC9D,CAAEL,KAAMZ,MAAMY,KAAME,IAAKd,MAAMc,IAAKkK,YAAa,GAErD,QAEM,SAAUpD,gCACd7G,SACAH,MAEA,UAAWG,WAAa,SAAU,OAAOA,SACzC,OAAOH,OAAS,WACZG,SAASmK,QAAU,EACnBnK,SAASoK,OAAS,CACxB,QAEM,SAAUX,gCACdrI,SACAlC,MACAyG,MACA1G,MAMAoL,OACAlF,SAEA,OAAO/F,MAAMiE,KAAK,CAAEiB,OAAQsB,KAAKC,IAAIF,MAAOvE,SAASI,OAAOC,OAAS,CAACuI,QAASrG,SAC7E,MAAMpC,MAAQrC,MAAMyE,OACpB,MAAMH,GAAKpC,SAASI,OAAOwH,GAAGrF,OAC9B,MAAM2G,WAAarL,MAAMsB,iBAAiBgB,MAAOoC,QAAU,GAC3D,MAAMoF,UAAY9I,OAAOgI,OAAO,CAC9BzE,GACAG,MACA4G,KAAMtK,OAAOgI,OAAO,CAAET,EAAG,EAAGC,EAAG,EAAGvB,MAAO,EAAGD,OAAQ,IACpDuD,QAAS,OAEX,MAAMN,SAAWmB,SAAS,CAAE9I,MAAO4H,IAAK3F,GAAIG,MAAOoF,YACnD,MAAMH,SAAWM,WAAavJ,WAAauJ,WAAa,KACpD,GACA9J,MAAMiK,QAAQH,UACZA,SACA,CAACA,UACP,OAAO/L,EAAE8B,MAAMqB,OAAQ,IAClBgK,WACHnB,IAAK3F,GACL8F,IAAM7F,SAAqB0B,QAAQxB,MAAOF,SAC1C8F,MAAO,CACLe,WAAW,SACXrL,MAAMY,OAAS,WAAa,CAAEqG,MAAO,QAAW,CAAED,OAAQ,QAC1DhH,MAAMc,IAAM,GAAK4D,MAAQ,EACrB1E,MAAMY,OAAS,WACb,CAAE2K,UAAW,GAAGvL,MAAMc,SACtB,CAAE0K,WAAY,GAAGxL,MAAMc,SACzBJ,WAEN,aAAc,eACd,YAAa,OACb,aAAcgE,MACd,eAAgB,GAChB,iBAAkB,IACjBiF,WAEP","ignoreList":[]}
1
+ {"version":3,"file":"virtual-list.js","names":["defineComponent","h","nextTick","onBeforeUnmount","onMounted","shallowRef","watch","createSequence","createExactVirtualExtent","createVirtualExtent","reconcileVirtualCollectionExtents","reconcileVirtualCollectionValueExtents","virtualSizePolicyRequiresMeasurement","createExtentIndex","createUniformExtentIndex","createLinearLayout","linearLayoutStrategyFor","setLinearCrossExtent","tryApplyLinearMeasurements","tryApplyLinearPatch","VirtualizerFooter","VirtualizerHeader","VirtualizerRoot","VirtualizerSurface","constrainPreparedVirtualCollection","createVirtualCollectionExpose","prepareVirtualCollection","renderHighLevelItems","updatePreparedVirtualCollection","VirtualListRuntime","name","inheritAttrs","props","items","type","Array","required","getID","Function","sizePolicy","Object","axis","String","default","gap","Number","overscan","viewportInsets","undefined","maxItems","initialViewport","as","contentAs","itemAs","itemAttributes","emits","stateChange","_state","planChange","_plan","error","_error","slots","setup","attrs","emit","expose","freeze","prepared","automaticEstimate","bootstrapCount","value","domain","size","bootstrapElements","Map","bootstrapRefs","bootstrapScheduled","disposed","initialCrossExtent","crossExtentForViewport","initialState","createEmptyVirtualListState","crossExtent","createVirtualListState","activeState","root","measure","kind","createVirtualListMeasurementResolver","isBootstrapping","phase","currentState","state","bootstrapItemRef","index","existing","get","callback","element","HTMLElement","delete","set","scheduleBootstrap","completeBootstrap","count","Math","min","extents","bounds","getBoundingClientRect","extent","height","width","isFinite","push","total","reduce","sum","max","length","scrollport","measuredViewportExtent","clientHeight","clientWidth","viewportExtent","target","bootstrapTrailingOverscanExtent","average","ceil","clear","next","nextState","exposed","patch","result","mutate","ok","valueUpdates","generation","measurements","flush","syncCrossExtent","plan","viewport","is","constructionWarningShown","x","y","sameVirtualSizePolicy","sameVirtualRect","console","warn","ref","defaultState","strategy","style","overflow","onStateChange","onPlanChange","onError","placements","display","renderVirtualListBootstrapItems","linearItemSize","id","placement","VirtualList","measureVirtualListElement","indexOf","current","extentAt","abs","createVirtualListExtentIndex","maxIDCodeUnits","bottom","right","render","itemRef","from","_unused","at","attributes","rect","visible","rendered","children","isArray","key","marginTop","marginLeft","shared","estimate","left"],"sources":["../../src/internal/virtual-list.ts"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- export { VirtualizerContent, VirtualizerItem, VirtualizerRoot, useVirtualizer, type UseVirtualizerOptions, type UseVirtualizerReturn, type VirtualizerContentProps, type VirtualizerItemProps, type VirtualizerItemSize, type VirtualizerRootExpose, type VirtualizerRootProps, type VirtualizerRootSlotProps } from './internal/virtual-core.js';
1
+ export { VirtualizerFooter, VirtualizerHeader, VirtualizerItem, VirtualizerRoot, VirtualizerSurface, useVirtualizer, type UseVirtualizerOptions, type UseVirtualizerReturn, type VirtualizerFrameProps, type VirtualizerHostErrorCode, type VirtualizerItemProps, type VirtualizerItemSize, type VirtualizerOperationResult, type VirtualizerRootExpose, type VirtualizerRootProps, type VirtualizerRootSlotProps, type VirtualizerSurfaceProps } from './internal/virtual-core.js';
@@ -1,2 +1,2 @@
1
- import{VirtualizerContent,VirtualizerItem,VirtualizerRoot,useVirtualizer}from"./internal/virtual-core.js";export{VirtualizerContent,VirtualizerItem,VirtualizerRoot,useVirtualizer};
1
+ import{VirtualizerFooter,VirtualizerHeader,VirtualizerItem,VirtualizerRoot,VirtualizerSurface,useVirtualizer}from"./internal/virtual-core.js";export{VirtualizerFooter,VirtualizerHeader,VirtualizerItem,VirtualizerRoot,VirtualizerSurface,useVirtualizer};
2
2
  //# sourceMappingURL=virtual-core.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/virtual-core.ts"],"mappings":"AAEA,OAAS,mBAAoB,gBAAiB,gBAAiB,mBAAsP","names":[],"file":"virtual-core.js"}
1
+ {"version":3,"sources":["../src/virtual-core.ts"],"mappings":"AAEA,OAAS,kBAAmB,kBAAmB,gBAAiB,gBAAiB,mBAAoB,mBAAkV","names":[],"file":"virtual-core.js"}
@@ -1,29 +1,31 @@
1
1
  import { type AllowedComponentProps, type ComponentCustomProps, type PropType, type SlotsType, type VNodeChild, type VNodeProps } from 'vue';
2
+ import type { StableID } from '@sectile/core';
3
+ import { type VirtualLanePolicy, type VirtualSizePolicy } from '@sectile/virtual/collection';
2
4
  import { type TrackGridLayoutState } from '@sectile/virtual/track-grid-layout';
3
5
  import { type VirtualInsets, type VirtualLayoutPlan, type VirtualRect, type VirtualizerErrorHandler } from '@sectile/dom/virtual';
4
- import { type VirtualListEstimate, type VirtualListItemAttributes, type VirtualListKeyResolver } from './internal/virtual-collection-model.js';
5
- import type { VirtualListSlotProps } from './internal/virtual-list.js';
6
- import { type ResponsiveLaneProps, type VirtualCollectionBaseProps } from './internal/virtual-collection.js';
7
- export interface VirtualGridProps<Value = unknown> extends VirtualCollectionBaseProps<Value>, ResponsiveLaneProps {
8
- readonly itemSize?: number;
9
- readonly estimateSize?: VirtualListEstimate<Value>;
6
+ import { type VirtualCollectionBaseProps, type VirtualCollectionIDResolver, type VirtualCollectionItemAttributes, type VirtualCollectionItemSlotProps } from './internal/virtual-collection.js';
7
+ export interface VirtualGridProps<Value = unknown, ID extends StableID = StableID> extends VirtualCollectionBaseProps<Value, ID> {
8
+ readonly sizePolicy: VirtualSizePolicy<Value>;
9
+ readonly lanePolicy: VirtualLanePolicy;
10
10
  readonly rowGap?: number;
11
11
  }
12
- export type VirtualGridPublicProps<Value = unknown> = VirtualGridProps<Value> & VNodeProps & AllowedComponentProps & ComponentCustomProps & {
13
- readonly onStateChange?: (state: TrackGridLayoutState<string>) => unknown;
14
- readonly onPlanChange?: (plan: VirtualLayoutPlan<string>) => unknown;
12
+ export type VirtualGridPublicProps<Value = unknown, ID extends StableID = StableID> = VirtualGridProps<Value, ID> & VNodeProps & AllowedComponentProps & ComponentCustomProps & {
13
+ readonly onStateChange?: (state: TrackGridLayoutState<ID>) => unknown;
14
+ readonly onPlanChange?: (plan: VirtualLayoutPlan<ID>) => unknown;
15
15
  readonly onError?: VirtualizerErrorHandler;
16
16
  };
17
- export interface VirtualGridSlotProps<Value = unknown> extends VirtualListSlotProps<Value> {
17
+ export interface VirtualGridSlotProps<Value = unknown, ID extends StableID = StableID> extends VirtualCollectionItemSlotProps<Value, ID> {
18
18
  readonly row: number;
19
19
  readonly column: number;
20
20
  }
21
21
  export interface VirtualGridComponent {
22
- new <Value = unknown>(props: VirtualGridPublicProps<Value>): {
23
- $props: VirtualGridPublicProps<Value>;
22
+ new <Value = unknown, ID extends StableID = StableID>(props: VirtualGridPublicProps<Value, ID>): {
23
+ $props: VirtualGridPublicProps<Value, ID>;
24
24
  $slots: {
25
- default?: (props: VirtualGridSlotProps<Value>) => VNodeChild;
25
+ header?: () => VNodeChild;
26
+ item?: (props: VirtualGridSlotProps<Value, ID>) => VNodeChild;
26
27
  empty?: () => VNodeChild;
28
+ footer?: () => VNodeChild;
27
29
  };
28
30
  };
29
31
  }
@@ -32,33 +34,17 @@ declare const VirtualGridRuntime: import("vue").DefineComponent<import("vue").Ex
32
34
  type: PropType<readonly unknown[]>;
33
35
  required: true;
34
36
  };
35
- getKey: {
36
- type: PropType<VirtualListKeyResolver<unknown>>;
37
+ getID: {
38
+ type: PropType<VirtualCollectionIDResolver<unknown, StableID>>;
37
39
  required: true;
38
40
  };
39
- itemSize: {
40
- type: NumberConstructor;
41
- default: undefined;
42
- };
43
- estimateSize: {
44
- type: PropType<VirtualListEstimate<unknown>>;
45
- default: undefined;
46
- };
47
- laneCount: {
48
- type: NumberConstructor;
49
- default: undefined;
50
- };
51
- minLaneSize: {
52
- type: NumberConstructor;
53
- default: number;
54
- };
55
- maxLaneCount: {
56
- type: NumberConstructor;
57
- default: number;
41
+ sizePolicy: {
42
+ type: PropType<VirtualSizePolicy<unknown>>;
43
+ required: true;
58
44
  };
59
- laneGap: {
60
- type: NumberConstructor;
61
- default: number;
45
+ lanePolicy: {
46
+ type: PropType<VirtualLanePolicy>;
47
+ required: true;
62
48
  };
63
49
  rowGap: {
64
50
  type: NumberConstructor;
@@ -68,6 +54,10 @@ declare const VirtualGridRuntime: import("vue").DefineComponent<import("vue").Ex
68
54
  type: PropType<number | Partial<VirtualInsets>>;
69
55
  default: number;
70
56
  };
57
+ viewportInsets: {
58
+ type: PropType<number | Partial<VirtualInsets>>;
59
+ default: undefined;
60
+ };
71
61
  maxItems: {
72
62
  type: NumberConstructor;
73
63
  default: number;
@@ -89,45 +79,29 @@ declare const VirtualGridRuntime: import("vue").DefineComponent<import("vue").Ex
89
79
  default: string;
90
80
  };
91
81
  itemAttributes: {
92
- type: PropType<VirtualListItemAttributes<unknown>>;
82
+ type: PropType<VirtualCollectionItemAttributes<unknown>>;
93
83
  default: undefined;
94
84
  };
95
85
  }>, () => VNodeChild, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
96
- stateChange: (_state: TrackGridLayoutState<string>) => boolean;
97
- planChange: (_plan: VirtualLayoutPlan<string>) => boolean;
86
+ stateChange: (_state: TrackGridLayoutState<StableID>) => boolean;
87
+ planChange: (_plan: VirtualLayoutPlan<StableID>) => boolean;
98
88
  error: (_error: Parameters<VirtualizerErrorHandler>[0]) => boolean;
99
89
  }, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
100
90
  items: {
101
91
  type: PropType<readonly unknown[]>;
102
92
  required: true;
103
93
  };
104
- getKey: {
105
- type: PropType<VirtualListKeyResolver<unknown>>;
94
+ getID: {
95
+ type: PropType<VirtualCollectionIDResolver<unknown, StableID>>;
106
96
  required: true;
107
97
  };
108
- itemSize: {
109
- type: NumberConstructor;
110
- default: undefined;
111
- };
112
- estimateSize: {
113
- type: PropType<VirtualListEstimate<unknown>>;
114
- default: undefined;
115
- };
116
- laneCount: {
117
- type: NumberConstructor;
118
- default: undefined;
119
- };
120
- minLaneSize: {
121
- type: NumberConstructor;
122
- default: number;
123
- };
124
- maxLaneCount: {
125
- type: NumberConstructor;
126
- default: number;
98
+ sizePolicy: {
99
+ type: PropType<VirtualSizePolicy<unknown>>;
100
+ required: true;
127
101
  };
128
- laneGap: {
129
- type: NumberConstructor;
130
- default: number;
102
+ lanePolicy: {
103
+ type: PropType<VirtualLanePolicy>;
104
+ required: true;
131
105
  };
132
106
  rowGap: {
133
107
  type: NumberConstructor;
@@ -137,6 +111,10 @@ declare const VirtualGridRuntime: import("vue").DefineComponent<import("vue").Ex
137
111
  type: PropType<number | Partial<VirtualInsets>>;
138
112
  default: number;
139
113
  };
114
+ viewportInsets: {
115
+ type: PropType<number | Partial<VirtualInsets>>;
116
+ default: undefined;
117
+ };
140
118
  maxItems: {
141
119
  type: NumberConstructor;
142
120
  default: number;
@@ -158,31 +136,28 @@ declare const VirtualGridRuntime: import("vue").DefineComponent<import("vue").Ex
158
136
  default: string;
159
137
  };
160
138
  itemAttributes: {
161
- type: PropType<VirtualListItemAttributes<unknown>>;
139
+ type: PropType<VirtualCollectionItemAttributes<unknown>>;
162
140
  default: undefined;
163
141
  };
164
142
  }>> & Readonly<{
165
143
  onError?: (_error: import("@sectile/core").SectileError<import("@sectile/virtual").VirtualErrorCode>) => any;
166
- onPlanChange?: (_plan: VirtualLayoutPlan<string>) => any;
167
- onStateChange?: (_state: TrackGridLayoutState<string>) => any;
144
+ onPlanChange?: (_plan: VirtualLayoutPlan<StableID>) => any;
145
+ onStateChange?: (_state: TrackGridLayoutState<StableID>) => any;
168
146
  }>, {
169
- itemSize: number;
170
- estimateSize: VirtualListEstimate<unknown>;
171
- laneCount: number;
172
- minLaneSize: number;
173
- maxLaneCount: number;
174
- laneGap: number;
175
147
  rowGap: number;
176
148
  overscan: number | Partial<import("@sectile/core/geometry").Insets>;
149
+ viewportInsets: number | Partial<import("@sectile/core/geometry").Insets>;
177
150
  maxItems: number;
178
151
  initialViewport: import("@sectile/core/geometry").Rect;
179
152
  as: string;
180
153
  contentAs: string;
181
154
  itemAs: string;
182
- itemAttributes: VirtualListItemAttributes<unknown>;
155
+ itemAttributes: VirtualCollectionItemAttributes<unknown>;
183
156
  }, SlotsType<{
184
- default: (props: VirtualGridSlotProps<unknown>) => VNodeChild;
157
+ header: () => VNodeChild;
158
+ item: (props: VirtualGridSlotProps<unknown>) => VNodeChild;
185
159
  empty: () => VNodeChild;
160
+ footer: () => VNodeChild;
186
161
  }>, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
187
162
  export declare const VirtualGrid: typeof VirtualGridRuntime & VirtualGridComponent;
188
163
  export {};