vscroll 1.8.2 → 1.8.3

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.
@@ -1,4 +1,10 @@
1
1
  export class Item {
2
+ get uid() {
3
+ return this.container.uid;
4
+ }
5
+ set uid(value) {
6
+ this.container.uid = value;
7
+ }
2
8
  get $index() {
3
9
  return this.container.$index;
4
10
  }
@@ -19,6 +25,7 @@ export class Item {
19
25
  }
20
26
  constructor($index, data, routines) {
21
27
  this.container = {
28
+ uid: Item.nextUid++,
22
29
  $index,
23
30
  data
24
31
  };
@@ -59,4 +66,5 @@ export class Item {
59
66
  return this.container;
60
67
  }
61
68
  }
69
+ Item.nextUid = 1;
62
70
  //# sourceMappingURL=item.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"item.js","sourceRoot":"","sources":["../../../src/classes/item.ts"],"names":[],"mappings":"AAIA,MAAM,OAAO,IAAI;IAYf,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;IAC/B,CAAC;IACD,IAAI,MAAM,CAAC,KAAa;QACtB,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,KAAK,CAAC;IAChC,CAAC;IAED,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;IAC7B,CAAC;IACD,IAAI,IAAI,CAAC,KAAW;QAClB,IAAI,CAAC,SAAS,CAAC,IAAI,GAAG,KAAK,CAAC;IAC9B,CAAC;IAED,IAAI,OAAO;QACT,OAAO,IAAI,CAAC,SAAS,CAAC,OAAsB,CAAC;IAC/C,CAAC;IACD,IAAI,OAAO,CAAC,KAAkB;QAC5B,IAAI,CAAC,SAAS,CAAC,OAAO,GAAG,KAAK,CAAC;IACjC,CAAC;IAED,YAAY,MAAc,EAAE,IAAU,EAAE,QAAkB;QACxD,IAAI,CAAC,SAAS,GAAG;YACf,MAAM;YACN,IAAI;SACL,CAAC;QACF,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;QAC7B,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACtB,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;QACtB,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;IACxB,CAAC;IAED,OAAO;QACL,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;IAChC,CAAC;IAED,OAAO,CAAC,OAAO,GAAG,CAAC;QACjB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAClD,CAAC;IACH,CAAC;IAED,WAAW;QACT,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC/C,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;IACzB,CAAC;IAED,IAAI;QACF,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC1C,CAAC;IACH,CAAC;IAED,QAAQ,CAAC,QAA0C;QACjD,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QACjD,CAAC;IACH,CAAC;IAED,WAAW,CAAC,KAAa;QACvB,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;QACpB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAC9B,CAAC;IAED,GAAG;QACD,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;CACF","sourcesContent":["import { Routines } from './domRoutines';\r\nimport { Direction } from '../inputs/index';\r\nimport { Item as _Item, ItemAdapter } from '../interfaces/index';\r\n\r\nexport class Item<Data = unknown> implements _Item<Data> {\r\n nodeId: string;\r\n routines: Routines;\r\n preSize: number; // estimated size\r\n size: number; // real size\r\n invisible: boolean;\r\n toRemove: boolean;\r\n toInsert: boolean;\r\n removeDirection: Direction;\r\n\r\n private container: ItemAdapter<Data>;\r\n\r\n get $index(): number {\r\n return this.container.$index;\r\n }\r\n set $index(value: number) {\r\n this.container.$index = value;\r\n }\r\n\r\n get data(): Data {\r\n return this.container.data;\r\n }\r\n set data(value: Data) {\r\n this.container.data = value;\r\n }\r\n\r\n get element(): HTMLElement {\r\n return this.container.element as HTMLElement;\r\n }\r\n set element(value: HTMLElement) {\r\n this.container.element = value;\r\n }\r\n\r\n constructor($index: number, data: Data, routines: Routines) {\r\n this.container = {\r\n $index,\r\n data\r\n };\r\n this.nodeId = String($index);\r\n this.routines = routines;\r\n this.invisible = true;\r\n this.toRemove = false;\r\n this.toInsert = false;\r\n }\r\n\r\n dispose(): void {\r\n delete this.container.element;\r\n }\r\n\r\n setSize(preSize = 0): void {\r\n this.preSize = preSize;\r\n if (this.element) {\r\n this.size = this.routines.getSize(this.element);\r\n }\r\n }\r\n\r\n makeVisible(): void {\r\n this.routines.makeElementVisible(this.element);\r\n this.invisible = false;\r\n }\r\n\r\n hide(): void {\r\n if (this.element) {\r\n this.routines.hideElement(this.element);\r\n }\r\n }\r\n\r\n scrollTo(argument?: boolean | ScrollIntoViewOptions): void {\r\n if (this.element) {\r\n this.routines.scrollTo(this.element, argument);\r\n }\r\n }\r\n\r\n updateIndex(index: number): void {\r\n this.$index = index;\r\n this.nodeId = String(index);\r\n }\r\n\r\n get(): ItemAdapter<Data> {\r\n return this.container;\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"item.js","sourceRoot":"","sources":["../../../src/classes/item.ts"],"names":[],"mappings":"AAIA,MAAM,OAAO,IAAI;IAaf,IAAI,GAAG;QACL,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC;IAC5B,CAAC;IACD,IAAI,GAAG,CAAC,KAAa;QACnB,IAAI,CAAC,SAAS,CAAC,GAAG,GAAG,KAAK,CAAC;IAC7B,CAAC;IAED,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;IAC/B,CAAC;IACD,IAAI,MAAM,CAAC,KAAa;QACtB,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,KAAK,CAAC;IAChC,CAAC;IAED,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;IAC7B,CAAC;IACD,IAAI,IAAI,CAAC,KAAW;QAClB,IAAI,CAAC,SAAS,CAAC,IAAI,GAAG,KAAK,CAAC;IAC9B,CAAC;IAED,IAAI,OAAO;QACT,OAAO,IAAI,CAAC,SAAS,CAAC,OAAsB,CAAC;IAC/C,CAAC;IACD,IAAI,OAAO,CAAC,KAAkB;QAC5B,IAAI,CAAC,SAAS,CAAC,OAAO,GAAG,KAAK,CAAC;IACjC,CAAC;IAED,YAAY,MAAc,EAAE,IAAU,EAAE,QAAkB;QACxD,IAAI,CAAC,SAAS,GAAG;YACf,GAAG,EAAE,IAAI,CAAC,OAAO,EAAE;YACnB,MAAM;YACN,IAAI;SACL,CAAC;QACF,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;QAC7B,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACtB,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;QACtB,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;IACxB,CAAC;IAED,OAAO;QACL,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;IAChC,CAAC;IAED,OAAO,CAAC,OAAO,GAAG,CAAC;QACjB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAClD,CAAC;IACH,CAAC;IAED,WAAW;QACT,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC/C,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;IACzB,CAAC;IAED,IAAI;QACF,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC1C,CAAC;IACH,CAAC;IAED,QAAQ,CAAC,QAA0C;QACjD,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QACjD,CAAC;IACH,CAAC;IAED,WAAW,CAAC,KAAa;QACvB,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;QACpB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAC9B,CAAC;IAED,GAAG;QACD,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;;AAxFc,YAAO,GAAG,CAAC,CAAC","sourcesContent":["import { Routines } from './domRoutines';\r\nimport { Direction } from '../inputs/index';\r\nimport { Item as _Item, ItemAdapter } from '../interfaces/index';\r\n\r\nexport class Item<Data = unknown> implements _Item<Data> {\r\n private static nextUid = 1;\r\n nodeId: string;\r\n routines: Routines;\r\n preSize: number; // estimated size\r\n size: number; // real size\r\n invisible: boolean;\r\n toRemove: boolean;\r\n toInsert: boolean;\r\n removeDirection: Direction;\r\n\r\n private container: ItemAdapter<Data>;\r\n\r\n get uid(): number {\r\n return this.container.uid;\r\n }\r\n set uid(value: number) {\r\n this.container.uid = value;\r\n }\r\n\r\n get $index(): number {\r\n return this.container.$index;\r\n }\r\n set $index(value: number) {\r\n this.container.$index = value;\r\n }\r\n\r\n get data(): Data {\r\n return this.container.data;\r\n }\r\n set data(value: Data) {\r\n this.container.data = value;\r\n }\r\n\r\n get element(): HTMLElement {\r\n return this.container.element as HTMLElement;\r\n }\r\n set element(value: HTMLElement) {\r\n this.container.element = value;\r\n }\r\n\r\n constructor($index: number, data: Data, routines: Routines) {\r\n this.container = {\r\n uid: Item.nextUid++,\r\n $index,\r\n data\r\n };\r\n this.nodeId = String($index);\r\n this.routines = routines;\r\n this.invisible = true;\r\n this.toRemove = false;\r\n this.toInsert = false;\r\n }\r\n\r\n dispose(): void {\r\n delete this.container.element;\r\n }\r\n\r\n setSize(preSize = 0): void {\r\n this.preSize = preSize;\r\n if (this.element) {\r\n this.size = this.routines.getSize(this.element);\r\n }\r\n }\r\n\r\n makeVisible(): void {\r\n this.routines.makeElementVisible(this.element);\r\n this.invisible = false;\r\n }\r\n\r\n hide(): void {\r\n if (this.element) {\r\n this.routines.hideElement(this.element);\r\n }\r\n }\r\n\r\n scrollTo(argument?: boolean | ScrollIntoViewOptions): void {\r\n if (this.element) {\r\n this.routines.scrollTo(this.element, argument);\r\n }\r\n }\r\n\r\n updateIndex(index: number): void {\r\n this.$index = index;\r\n this.nodeId = String(index);\r\n }\r\n\r\n get(): ItemAdapter<Data> {\r\n return this.container;\r\n }\r\n}\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"state.js","sourceRoot":"","sources":["../../../src/classes/state.ts"],"names":[],"mappings":"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","sourcesContent":["import { Settings } from './settings';\r\nimport { Reactive } from './reactive';\r\nimport { WorkflowCycleModel } from './state/cycle';\r\nimport { FetchModel } from './state/fetch';\r\nimport { ClipModel } from './state/clip';\r\nimport { RenderModel } from './state/render';\r\nimport { ScrollModel } from './state/scroll';\r\nimport { State as IState, IPackages, ProcessName } from '../interfaces/index';\r\n\r\nexport class State implements IState {\r\n readonly packageInfo: IPackages;\r\n private settings: Settings;\r\n initTime: number;\r\n paused: Reactive<boolean>;\r\n\r\n cycle: WorkflowCycleModel;\r\n fetch: FetchModel;\r\n clip: ClipModel;\r\n render: RenderModel;\r\n scroll: ScrollModel;\r\n\r\n get time(): number {\r\n return Number(new Date()) - this.initTime;\r\n }\r\n\r\n constructor(packageInfo: IPackages, settings: Settings, state?: IState) {\r\n this.packageInfo = packageInfo;\r\n this.settings = settings;\r\n this.initTime = Number(new Date());\r\n this.paused = new Reactive(false);\r\n\r\n this.cycle = new WorkflowCycleModel(this.settings.instanceIndex, state ? state.cycle : void 0);\r\n this.fetch = new FetchModel(settings.directionPriority);\r\n this.clip = new ClipModel();\r\n this.render = new RenderModel();\r\n this.scroll = new ScrollModel();\r\n }\r\n\r\n startWorkflowCycle(isInitial: boolean, initiator: ProcessName): void {\r\n this.cycle.start(isInitial, initiator);\r\n }\r\n\r\n endWorkflowCycle(count: number): void {\r\n this.cycle.end(count);\r\n }\r\n\r\n startInnerLoop(): { process?: ProcessName; doRender?: boolean } {\r\n const { cycle, scroll: scroll, fetch, render, clip } = this;\r\n\r\n cycle.innerLoop.start();\r\n scroll.positionBeforeAsync = null;\r\n\r\n if (!fetch.simulate) {\r\n fetch.reset();\r\n }\r\n clip.reset(clip.force);\r\n render.reset();\r\n\r\n return {\r\n ...(cycle.innerLoop.first\r\n ? {\r\n process: cycle.initiator,\r\n doRender: fetch.simulate && fetch.items.length > 0\r\n }\r\n : {})\r\n };\r\n }\r\n\r\n endInnerLoop(): void {\r\n const { fetch, clip, render, cycle } = this;\r\n fetch.stopSimulate();\r\n clip.reset();\r\n if (fetch.cancel) {\r\n fetch.cancel();\r\n fetch.cancel = null;\r\n }\r\n if (render.cancel) {\r\n render.cancel();\r\n render.cancel = null;\r\n }\r\n cycle.innerLoop.done();\r\n }\r\n\r\n dispose(): void {\r\n this.scroll.stop();\r\n this.cycle.dispose();\r\n this.paused.dispose();\r\n this.endInnerLoop();\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"state.js","sourceRoot":"","sources":["../../../src/classes/state.ts"],"names":[],"mappings":"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","sourcesContent":["import { Settings } from './settings';\nimport { Reactive } from './reactive';\nimport { WorkflowCycleModel } from './state/cycle';\nimport { FetchModel } from './state/fetch';\nimport { ClipModel } from './state/clip';\nimport { RenderModel } from './state/render';\nimport { ScrollModel } from './state/scroll';\nimport { State as IState, IPackages, ProcessName } from '../interfaces/index';\n\nexport class State implements IState {\n readonly packageInfo: IPackages;\n private settings: Settings;\n initTime: number;\n paused: Reactive<boolean>;\n\n cycle: WorkflowCycleModel;\n fetch: FetchModel;\n clip: ClipModel;\n render: RenderModel;\n scroll: ScrollModel;\n\n get time(): number {\n return Number(new Date()) - this.initTime;\n }\n\n constructor(packageInfo: IPackages, settings: Settings, state?: IState) {\n this.packageInfo = packageInfo;\n this.settings = settings;\n this.initTime = Number(new Date());\n this.paused = new Reactive(false);\n\n this.cycle = new WorkflowCycleModel(this.settings.instanceIndex, state ? state.cycle : void 0);\n this.fetch = new FetchModel(settings.directionPriority);\n this.clip = new ClipModel();\n this.render = new RenderModel();\n this.scroll = new ScrollModel();\n }\n\n startWorkflowCycle(isInitial: boolean, initiator: ProcessName): void {\n this.cycle.start(isInitial, initiator);\n }\n\n endWorkflowCycle(count: number): void {\n this.cycle.end(count);\n }\n\n startInnerLoop(): { process?: ProcessName; doRender?: boolean } {\n const { cycle, scroll: scroll, fetch, render, clip } = this;\n\n cycle.innerLoop.start();\n scroll.positionBeforeAsync = null;\n\n if (!fetch.simulate) {\n fetch.reset();\n }\n clip.reset(clip.force);\n render.reset();\n\n return {\n ...(cycle.innerLoop.first\n ? {\n process: cycle.initiator,\n doRender: fetch.simulate && fetch.items.length > 0\n }\n : {})\n };\n }\n\n endInnerLoop(): void {\n const { fetch, clip, render, cycle } = this;\n fetch.stopSimulate();\n clip.reset();\n if (fetch.cancel) {\n fetch.cancel();\n fetch.cancel = null;\n }\n if (render.cancel) {\n render.cancel();\n render.cancel = null;\n }\n cycle.innerLoop.done();\n }\n\n dispose(): void {\n this.scroll.stop();\n this.cycle.dispose();\n this.paused.dispose();\n this.endInnerLoop();\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../../src/interfaces/adapter.ts"],"names":[],"mappings":"","sourcesContent":["import { AdapterPropName, AdapterPropType } from '../classes/adapter/props';\r\nimport { Reactive } from '../classes/reactive';\r\nimport { IDatasourceOptional } from './datasource';\r\nimport { IValidatedData } from './validation';\r\n\r\nexport interface IReactivePropConfig {\r\n source: unknown;\r\n emit: (source: unknown, value: unknown) => void;\r\n}\r\n\r\ninterface IReactivePropStore extends IReactivePropConfig {\r\n default: Reactive<unknown>;\r\n}\r\n\r\nexport type IReactivePropsConfig = {\r\n [key in AdapterPropName]?: IReactivePropConfig;\r\n};\r\n\r\nexport type IReactivePropsStore = {\r\n [key in AdapterPropName]?: IReactivePropStore;\r\n};\r\n\r\nexport interface IWanted {\r\n box: { [key: string]: boolean };\r\n block: boolean;\r\n}\r\n\r\nexport interface IAdapterConfig {\r\n mock: boolean;\r\n reactive?: IReactivePropsConfig;\r\n}\r\n\r\nexport interface IAdapterProp {\r\n name: AdapterPropName;\r\n type: AdapterPropType;\r\n value: unknown;\r\n reactive?: AdapterPropName;\r\n wanted?: boolean;\r\n onDemand?: boolean;\r\n permanent?: boolean;\r\n allowedWhenPaused?: boolean;\r\n}\r\n\r\nexport interface ItemAdapter<Data = unknown> {\r\n $index: number;\r\n data: Data;\r\n element?: HTMLElement;\r\n}\r\n\r\nexport type ItemsPredicate<T = unknown> = (item: ItemAdapter<T>) => boolean;\r\nexport type ItemsUpdater<T = unknown> = (item: ItemAdapter<T>, update: () => void) => void;\r\nexport type ItemsProcessor<T = unknown> = (items: ItemAdapter<T>[]) => void;\r\nexport type BufferUpdater<T = unknown> = (item: ItemAdapter<T>) => unknown;\r\n\r\nexport interface IPackage {\r\n name: string;\r\n version: string;\r\n}\r\n\r\nexport interface IPackages {\r\n core: IPackage;\r\n consumer: IPackage;\r\n}\r\n\r\nexport interface IBufferInfo {\r\n firstIndex: number;\r\n lastIndex: number;\r\n minIndex: number;\r\n maxIndex: number;\r\n absMinIndex: number;\r\n absMaxIndex: number;\r\n defaultSize: number;\r\n}\r\n\r\nexport interface IAdapterInput<T> {\r\n data: IValidatedData;\r\n params?: T;\r\n}\r\n\r\nexport interface AdapterAppendOptions<Data = unknown> {\r\n items: Data[];\r\n eof?: boolean;\r\n decrease?: boolean;\r\n virtualize?: boolean;\r\n}\r\n\r\nexport interface AdapterPrependOptions<Data = unknown> {\r\n items: Data[];\r\n bof?: boolean;\r\n increase?: boolean;\r\n virtualize?: boolean;\r\n}\r\n\r\nexport interface AdapterRemoveOptions<Data = unknown> {\r\n predicate?: ItemsPredicate<Data>;\r\n indexes?: number[];\r\n increase?: boolean;\r\n}\r\n\r\nexport interface AdapterClipOptions {\r\n forwardOnly?: boolean;\r\n backwardOnly?: boolean;\r\n}\r\n\r\nexport interface AdapterInsertOptions<Data = unknown> {\r\n items: Data[];\r\n before?: ItemsPredicate<Data>;\r\n after?: ItemsPredicate<Data>;\r\n beforeIndex?: number;\r\n afterIndex?: number;\r\n decrease?: boolean;\r\n virtualize?: boolean;\r\n}\r\n\r\nexport interface AdapterReplaceOptions<Data = unknown> {\r\n items: Data[];\r\n predicate: ItemsPredicate<Data>;\r\n fixRight?: boolean;\r\n}\r\n\r\nexport interface AdapterUpdateOptions<Data = unknown> {\r\n predicate: BufferUpdater<Data>;\r\n fixRight?: boolean;\r\n}\r\n\r\nexport interface AdapterFixOptions<Data = unknown> {\r\n scrollPosition?: number;\r\n minIndex?: number;\r\n maxIndex?: number;\r\n updater?: ItemsUpdater<Data>;\r\n scrollToItem?: ItemsPredicate<Data>;\r\n scrollToItemOpt?: boolean | ScrollIntoViewOptions;\r\n}\r\n\r\nexport interface AdapterMethodResult {\r\n success: boolean;\r\n immediate: boolean;\r\n details: string | null;\r\n}\r\ntype MethodResult = Promise<AdapterMethodResult>;\r\n\r\nexport interface IAdapter<Data = unknown> {\r\n readonly id: number;\r\n readonly mock: boolean;\r\n readonly augmented: boolean;\r\n readonly version: string;\r\n readonly init: boolean;\r\n readonly init$: Reactive<boolean>;\r\n readonly packageInfo: IPackages;\r\n readonly itemsCount: number;\r\n readonly bufferInfo: IBufferInfo;\r\n readonly isLoading: boolean;\r\n readonly isLoading$: Reactive<boolean>;\r\n readonly loopPending: boolean;\r\n readonly loopPending$: Reactive<boolean>;\r\n readonly firstVisible: ItemAdapter<Data>;\r\n readonly firstVisible$: Reactive<ItemAdapter<Data>>;\r\n readonly lastVisible: ItemAdapter<Data>;\r\n readonly lastVisible$: Reactive<ItemAdapter<Data>>;\r\n readonly bof: boolean;\r\n readonly bof$: Reactive<boolean>;\r\n readonly eof: boolean;\r\n readonly eof$: Reactive<boolean>;\r\n readonly paused: boolean;\r\n readonly paused$: Reactive<boolean>;\r\n reset(datasource?: IDatasourceOptional): MethodResult;\r\n reload(reloadIndex?: number | string): MethodResult;\r\n append(options: AdapterAppendOptions<Data>): MethodResult;\r\n append(items: Data | Data[], eof?: boolean): MethodResult; // old signature\r\n prepend(options: AdapterPrependOptions<Data>): MethodResult;\r\n prepend(items: Data | Data[], bof?: boolean): MethodResult; // old signature\r\n check(): MethodResult;\r\n remove(args: AdapterRemoveOptions<Data>): MethodResult;\r\n remove(args: ItemsPredicate<Data>): MethodResult; // old signature\r\n clip(options?: AdapterClipOptions): MethodResult;\r\n insert(options: AdapterInsertOptions<Data>): MethodResult;\r\n replace(options: AdapterReplaceOptions<Data>): MethodResult;\r\n update(options: AdapterUpdateOptions<Data>): MethodResult;\r\n pause(): MethodResult;\r\n resume(): MethodResult;\r\n fix(options: AdapterFixOptions<Data>): MethodResult; // experimental\r\n relax(callback?: () => void): MethodResult;\r\n showLog(): void;\r\n}\r\n"]}
1
+ {"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../../src/interfaces/adapter.ts"],"names":[],"mappings":"","sourcesContent":["import { AdapterPropName, AdapterPropType } from '../classes/adapter/props';\r\nimport { Reactive } from '../classes/reactive';\r\nimport { IDatasourceOptional } from './datasource';\r\nimport { IValidatedData } from './validation';\r\n\r\nexport interface IReactivePropConfig {\r\n source: unknown;\r\n emit: (source: unknown, value: unknown) => void;\r\n}\r\n\r\ninterface IReactivePropStore extends IReactivePropConfig {\r\n default: Reactive<unknown>;\r\n}\r\n\r\nexport type IReactivePropsConfig = {\r\n [key in AdapterPropName]?: IReactivePropConfig;\r\n};\r\n\r\nexport type IReactivePropsStore = {\r\n [key in AdapterPropName]?: IReactivePropStore;\r\n};\r\n\r\nexport interface IWanted {\r\n box: { [key: string]: boolean };\r\n block: boolean;\r\n}\r\n\r\nexport interface IAdapterConfig {\r\n mock: boolean;\r\n reactive?: IReactivePropsConfig;\r\n}\r\n\r\nexport interface IAdapterProp {\r\n name: AdapterPropName;\r\n type: AdapterPropType;\r\n value: unknown;\r\n reactive?: AdapterPropName;\r\n wanted?: boolean;\r\n onDemand?: boolean;\r\n permanent?: boolean;\r\n allowedWhenPaused?: boolean;\r\n}\r\n\r\nexport interface ItemAdapter<Data = unknown> {\r\n uid: number;\r\n $index: number;\r\n data: Data;\r\n element?: HTMLElement;\r\n}\r\n\r\nexport type ItemsPredicate<T = unknown> = (item: ItemAdapter<T>) => boolean;\r\nexport type ItemsUpdater<T = unknown> = (item: ItemAdapter<T>, update: () => void) => void;\r\nexport type ItemsProcessor<T = unknown> = (items: ItemAdapter<T>[]) => void;\r\nexport type BufferUpdater<T = unknown> = (item: ItemAdapter<T>) => unknown;\r\n\r\nexport interface IPackage {\r\n name: string;\r\n version: string;\r\n}\r\n\r\nexport interface IPackages {\r\n core: IPackage;\r\n consumer: IPackage;\r\n}\r\n\r\nexport interface IBufferInfo {\r\n firstIndex: number;\r\n lastIndex: number;\r\n minIndex: number;\r\n maxIndex: number;\r\n absMinIndex: number;\r\n absMaxIndex: number;\r\n defaultSize: number;\r\n}\r\n\r\nexport interface IAdapterInput<T> {\r\n data: IValidatedData;\r\n params?: T;\r\n}\r\n\r\nexport interface AdapterAppendOptions<Data = unknown> {\r\n items: Data[];\r\n eof?: boolean;\r\n decrease?: boolean;\r\n virtualize?: boolean;\r\n}\r\n\r\nexport interface AdapterPrependOptions<Data = unknown> {\r\n items: Data[];\r\n bof?: boolean;\r\n increase?: boolean;\r\n virtualize?: boolean;\r\n}\r\n\r\nexport interface AdapterRemoveOptions<Data = unknown> {\r\n predicate?: ItemsPredicate<Data>;\r\n indexes?: number[];\r\n increase?: boolean;\r\n}\r\n\r\nexport interface AdapterClipOptions {\r\n forwardOnly?: boolean;\r\n backwardOnly?: boolean;\r\n}\r\n\r\nexport interface AdapterInsertOptions<Data = unknown> {\r\n items: Data[];\r\n before?: ItemsPredicate<Data>;\r\n after?: ItemsPredicate<Data>;\r\n beforeIndex?: number;\r\n afterIndex?: number;\r\n decrease?: boolean;\r\n virtualize?: boolean;\r\n}\r\n\r\nexport interface AdapterReplaceOptions<Data = unknown> {\r\n items: Data[];\r\n predicate: ItemsPredicate<Data>;\r\n fixRight?: boolean;\r\n}\r\n\r\nexport interface AdapterUpdateOptions<Data = unknown> {\r\n predicate: BufferUpdater<Data>;\r\n fixRight?: boolean;\r\n}\r\n\r\nexport interface AdapterFixOptions<Data = unknown> {\r\n scrollPosition?: number;\r\n minIndex?: number;\r\n maxIndex?: number;\r\n updater?: ItemsUpdater<Data>;\r\n scrollToItem?: ItemsPredicate<Data>;\r\n scrollToItemOpt?: boolean | ScrollIntoViewOptions;\r\n}\r\n\r\nexport interface AdapterMethodResult {\r\n success: boolean;\r\n immediate: boolean;\r\n details: string | null;\r\n}\r\ntype MethodResult = Promise<AdapterMethodResult>;\r\n\r\nexport interface IAdapter<Data = unknown> {\r\n readonly id: number;\r\n readonly mock: boolean;\r\n readonly augmented: boolean;\r\n readonly version: string;\r\n readonly init: boolean;\r\n readonly init$: Reactive<boolean>;\r\n readonly packageInfo: IPackages;\r\n readonly itemsCount: number;\r\n readonly bufferInfo: IBufferInfo;\r\n readonly isLoading: boolean;\r\n readonly isLoading$: Reactive<boolean>;\r\n readonly loopPending: boolean;\r\n readonly loopPending$: Reactive<boolean>;\r\n readonly firstVisible: ItemAdapter<Data>;\r\n readonly firstVisible$: Reactive<ItemAdapter<Data>>;\r\n readonly lastVisible: ItemAdapter<Data>;\r\n readonly lastVisible$: Reactive<ItemAdapter<Data>>;\r\n readonly bof: boolean;\r\n readonly bof$: Reactive<boolean>;\r\n readonly eof: boolean;\r\n readonly eof$: Reactive<boolean>;\r\n readonly paused: boolean;\r\n readonly paused$: Reactive<boolean>;\r\n reset(datasource?: IDatasourceOptional): MethodResult;\r\n reload(reloadIndex?: number | string): MethodResult;\r\n append(options: AdapterAppendOptions<Data>): MethodResult;\r\n append(items: Data | Data[], eof?: boolean): MethodResult; // old signature\r\n prepend(options: AdapterPrependOptions<Data>): MethodResult;\r\n prepend(items: Data | Data[], bof?: boolean): MethodResult; // old signature\r\n check(): MethodResult;\r\n remove(args: AdapterRemoveOptions<Data>): MethodResult;\r\n remove(args: ItemsPredicate<Data>): MethodResult; // old signature\r\n clip(options?: AdapterClipOptions): MethodResult;\r\n insert(options: AdapterInsertOptions<Data>): MethodResult;\r\n replace(options: AdapterReplaceOptions<Data>): MethodResult;\r\n update(options: AdapterUpdateOptions<Data>): MethodResult;\r\n pause(): MethodResult;\r\n resume(): MethodResult;\r\n fix(options: AdapterFixOptions<Data>): MethodResult; // experimental\r\n relax(callback?: () => void): MethodResult;\r\n showLog(): void;\r\n}\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"item.js","sourceRoot":"","sources":["../../../src/interfaces/item.ts"],"names":[],"mappings":"","sourcesContent":["import { ItemAdapter } from './adapter';\r\n\r\nexport interface Item<Data = unknown> {\r\n $index: number;\r\n element: HTMLElement;\r\n data: Data;\r\n invisible: boolean;\r\n get: () => ItemAdapter<Data>;\r\n}\r\n"]}
1
+ {"version":3,"file":"item.js","sourceRoot":"","sources":["../../../src/interfaces/item.ts"],"names":[],"mappings":"","sourcesContent":["import { ItemAdapter } from './adapter';\r\n\r\nexport interface Item<Data = unknown> {\r\n uid: number;\r\n $index: number;\r\n element: HTMLElement;\r\n data: Data;\r\n invisible: boolean;\r\n get: () => ItemAdapter<Data>;\r\n}\r\n"]}
@@ -1,5 +1,5 @@
1
1
  export default {
2
2
  name: 'vscroll',
3
- version: '1.8.2'
3
+ version: '1.8.3'
4
4
  };
5
5
  //# sourceMappingURL=version.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/version.ts"],"names":[],"mappings":"AAAA,eAAe;IACb,IAAI,EAAE,SAAS;IACf,OAAO,EAAE,OAAO;CACjB,CAAC","sourcesContent":["export default {\n name: 'vscroll',\n version: '1.8.2'\n};\n"]}
1
+ {"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/version.ts"],"names":[],"mappings":"AAAA,eAAe;IACb,IAAI,EAAE,SAAS;IACf,OAAO,EAAE,OAAO;CACjB,CAAC","sourcesContent":["export default {\n name: 'vscroll',\n version: '1.8.3'\n};\n"]}
@@ -1,6 +1,7 @@
1
1
  var Item = /** @class */ (function () {
2
2
  function Item($index, data, routines) {
3
3
  this.container = {
4
+ uid: Item.nextUid++,
4
5
  $index: $index,
5
6
  data: data
6
7
  };
@@ -10,6 +11,16 @@ var Item = /** @class */ (function () {
10
11
  this.toRemove = false;
11
12
  this.toInsert = false;
12
13
  }
14
+ Object.defineProperty(Item.prototype, "uid", {
15
+ get: function () {
16
+ return this.container.uid;
17
+ },
18
+ set: function (value) {
19
+ this.container.uid = value;
20
+ },
21
+ enumerable: false,
22
+ configurable: true
23
+ });
13
24
  Object.defineProperty(Item.prototype, "$index", {
14
25
  get: function () {
15
26
  return this.container.$index;
@@ -71,6 +82,7 @@ var Item = /** @class */ (function () {
71
82
  Item.prototype.get = function () {
72
83
  return this.container;
73
84
  };
85
+ Item.nextUid = 1;
74
86
  return Item;
75
87
  }());
76
88
  export { Item };
@@ -1 +1 @@
1
- {"version":3,"file":"item.js","sourceRoot":"","sources":["../../../src/classes/item.ts"],"names":[],"mappings":"AAIA;IAiCE,cAAY,MAAc,EAAE,IAAU,EAAE,QAAkB;QACxD,IAAI,CAAC,SAAS,GAAG;YACf,MAAM,QAAA;YACN,IAAI,MAAA;SACL,CAAC;QACF,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;QAC7B,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACtB,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;QACtB,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;IACxB,CAAC;IA/BD,sBAAI,wBAAM;aAAV;YACE,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;QAC/B,CAAC;aACD,UAAW,KAAa;YACtB,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,KAAK,CAAC;QAChC,CAAC;;;OAHA;IAKD,sBAAI,sBAAI;aAAR;YACE,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;QAC7B,CAAC;aACD,UAAS,KAAW;YAClB,IAAI,CAAC,SAAS,CAAC,IAAI,GAAG,KAAK,CAAC;QAC9B,CAAC;;;OAHA;IAKD,sBAAI,yBAAO;aAAX;YACE,OAAO,IAAI,CAAC,SAAS,CAAC,OAAsB,CAAC;QAC/C,CAAC;aACD,UAAY,KAAkB;YAC5B,IAAI,CAAC,SAAS,CAAC,OAAO,GAAG,KAAK,CAAC;QACjC,CAAC;;;OAHA;IAiBD,sBAAO,GAAP;QACE,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;IAChC,CAAC;IAED,sBAAO,GAAP,UAAQ,OAAW;QAAX,wBAAA,EAAA,WAAW;QACjB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAClD,CAAC;IACH,CAAC;IAED,0BAAW,GAAX;QACE,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC/C,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;IACzB,CAAC;IAED,mBAAI,GAAJ;QACE,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC1C,CAAC;IACH,CAAC;IAED,uBAAQ,GAAR,UAAS,QAA0C;QACjD,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QACjD,CAAC;IACH,CAAC;IAED,0BAAW,GAAX,UAAY,KAAa;QACvB,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;QACpB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAC9B,CAAC;IAED,kBAAG,GAAH;QACE,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IACH,WAAC;AAAD,CAAC,AAjFD,IAiFC","sourcesContent":["import { Routines } from './domRoutines';\r\nimport { Direction } from '../inputs/index';\r\nimport { Item as _Item, ItemAdapter } from '../interfaces/index';\r\n\r\nexport class Item<Data = unknown> implements _Item<Data> {\r\n nodeId: string;\r\n routines: Routines;\r\n preSize: number; // estimated size\r\n size: number; // real size\r\n invisible: boolean;\r\n toRemove: boolean;\r\n toInsert: boolean;\r\n removeDirection: Direction;\r\n\r\n private container: ItemAdapter<Data>;\r\n\r\n get $index(): number {\r\n return this.container.$index;\r\n }\r\n set $index(value: number) {\r\n this.container.$index = value;\r\n }\r\n\r\n get data(): Data {\r\n return this.container.data;\r\n }\r\n set data(value: Data) {\r\n this.container.data = value;\r\n }\r\n\r\n get element(): HTMLElement {\r\n return this.container.element as HTMLElement;\r\n }\r\n set element(value: HTMLElement) {\r\n this.container.element = value;\r\n }\r\n\r\n constructor($index: number, data: Data, routines: Routines) {\r\n this.container = {\r\n $index,\r\n data\r\n };\r\n this.nodeId = String($index);\r\n this.routines = routines;\r\n this.invisible = true;\r\n this.toRemove = false;\r\n this.toInsert = false;\r\n }\r\n\r\n dispose(): void {\r\n delete this.container.element;\r\n }\r\n\r\n setSize(preSize = 0): void {\r\n this.preSize = preSize;\r\n if (this.element) {\r\n this.size = this.routines.getSize(this.element);\r\n }\r\n }\r\n\r\n makeVisible(): void {\r\n this.routines.makeElementVisible(this.element);\r\n this.invisible = false;\r\n }\r\n\r\n hide(): void {\r\n if (this.element) {\r\n this.routines.hideElement(this.element);\r\n }\r\n }\r\n\r\n scrollTo(argument?: boolean | ScrollIntoViewOptions): void {\r\n if (this.element) {\r\n this.routines.scrollTo(this.element, argument);\r\n }\r\n }\r\n\r\n updateIndex(index: number): void {\r\n this.$index = index;\r\n this.nodeId = String(index);\r\n }\r\n\r\n get(): ItemAdapter<Data> {\r\n return this.container;\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"item.js","sourceRoot":"","sources":["../../../src/classes/item.ts"],"names":[],"mappings":"AAIA;IAyCE,cAAY,MAAc,EAAE,IAAU,EAAE,QAAkB;QACxD,IAAI,CAAC,SAAS,GAAG;YACf,GAAG,EAAE,IAAI,CAAC,OAAO,EAAE;YACnB,MAAM,QAAA;YACN,IAAI,MAAA;SACL,CAAC;QACF,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;QAC7B,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACtB,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;QACtB,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;IACxB,CAAC;IAvCD,sBAAI,qBAAG;aAAP;YACE,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC;QAC5B,CAAC;aACD,UAAQ,KAAa;YACnB,IAAI,CAAC,SAAS,CAAC,GAAG,GAAG,KAAK,CAAC;QAC7B,CAAC;;;OAHA;IAKD,sBAAI,wBAAM;aAAV;YACE,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;QAC/B,CAAC;aACD,UAAW,KAAa;YACtB,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,KAAK,CAAC;QAChC,CAAC;;;OAHA;IAKD,sBAAI,sBAAI;aAAR;YACE,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;QAC7B,CAAC;aACD,UAAS,KAAW;YAClB,IAAI,CAAC,SAAS,CAAC,IAAI,GAAG,KAAK,CAAC;QAC9B,CAAC;;;OAHA;IAKD,sBAAI,yBAAO;aAAX;YACE,OAAO,IAAI,CAAC,SAAS,CAAC,OAAsB,CAAC;QAC/C,CAAC;aACD,UAAY,KAAkB;YAC5B,IAAI,CAAC,SAAS,CAAC,OAAO,GAAG,KAAK,CAAC;QACjC,CAAC;;;OAHA;IAkBD,sBAAO,GAAP;QACE,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;IAChC,CAAC;IAED,sBAAO,GAAP,UAAQ,OAAW;QAAX,wBAAA,EAAA,WAAW;QACjB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAClD,CAAC;IACH,CAAC;IAED,0BAAW,GAAX;QACE,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC/C,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;IACzB,CAAC;IAED,mBAAI,GAAJ;QACE,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC1C,CAAC;IACH,CAAC;IAED,uBAAQ,GAAR,UAAS,QAA0C;QACjD,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QACjD,CAAC;IACH,CAAC;IAED,0BAAW,GAAX,UAAY,KAAa;QACvB,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;QACpB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAC9B,CAAC;IAED,kBAAG,GAAH;QACE,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IAxFc,YAAO,GAAG,CAAC,CAAC;IAyF7B,WAAC;CAAA,AA1FD,IA0FC;SA1FY,IAAI","sourcesContent":["import { Routines } from './domRoutines';\r\nimport { Direction } from '../inputs/index';\r\nimport { Item as _Item, ItemAdapter } from '../interfaces/index';\r\n\r\nexport class Item<Data = unknown> implements _Item<Data> {\r\n private static nextUid = 1;\r\n nodeId: string;\r\n routines: Routines;\r\n preSize: number; // estimated size\r\n size: number; // real size\r\n invisible: boolean;\r\n toRemove: boolean;\r\n toInsert: boolean;\r\n removeDirection: Direction;\r\n\r\n private container: ItemAdapter<Data>;\r\n\r\n get uid(): number {\r\n return this.container.uid;\r\n }\r\n set uid(value: number) {\r\n this.container.uid = value;\r\n }\r\n\r\n get $index(): number {\r\n return this.container.$index;\r\n }\r\n set $index(value: number) {\r\n this.container.$index = value;\r\n }\r\n\r\n get data(): Data {\r\n return this.container.data;\r\n }\r\n set data(value: Data) {\r\n this.container.data = value;\r\n }\r\n\r\n get element(): HTMLElement {\r\n return this.container.element as HTMLElement;\r\n }\r\n set element(value: HTMLElement) {\r\n this.container.element = value;\r\n }\r\n\r\n constructor($index: number, data: Data, routines: Routines) {\r\n this.container = {\r\n uid: Item.nextUid++,\r\n $index,\r\n data\r\n };\r\n this.nodeId = String($index);\r\n this.routines = routines;\r\n this.invisible = true;\r\n this.toRemove = false;\r\n this.toInsert = false;\r\n }\r\n\r\n dispose(): void {\r\n delete this.container.element;\r\n }\r\n\r\n setSize(preSize = 0): void {\r\n this.preSize = preSize;\r\n if (this.element) {\r\n this.size = this.routines.getSize(this.element);\r\n }\r\n }\r\n\r\n makeVisible(): void {\r\n this.routines.makeElementVisible(this.element);\r\n this.invisible = false;\r\n }\r\n\r\n hide(): void {\r\n if (this.element) {\r\n this.routines.hideElement(this.element);\r\n }\r\n }\r\n\r\n scrollTo(argument?: boolean | ScrollIntoViewOptions): void {\r\n if (this.element) {\r\n this.routines.scrollTo(this.element, argument);\r\n }\r\n }\r\n\r\n updateIndex(index: number): void {\r\n this.$index = index;\r\n this.nodeId = String(index);\r\n }\r\n\r\n get(): ItemAdapter<Data> {\r\n return this.container;\r\n }\r\n}\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"state.js","sourceRoot":"","sources":["../../../src/classes/state.ts"],"names":[],"mappings":"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","sourcesContent":["import { Settings } from './settings';\r\nimport { Reactive } from './reactive';\r\nimport { WorkflowCycleModel } from './state/cycle';\r\nimport { FetchModel } from './state/fetch';\r\nimport { ClipModel } from './state/clip';\r\nimport { RenderModel } from './state/render';\r\nimport { ScrollModel } from './state/scroll';\r\nimport { State as IState, IPackages, ProcessName } from '../interfaces/index';\r\n\r\nexport class State implements IState {\r\n readonly packageInfo: IPackages;\r\n private settings: Settings;\r\n initTime: number;\r\n paused: Reactive<boolean>;\r\n\r\n cycle: WorkflowCycleModel;\r\n fetch: FetchModel;\r\n clip: ClipModel;\r\n render: RenderModel;\r\n scroll: ScrollModel;\r\n\r\n get time(): number {\r\n return Number(new Date()) - this.initTime;\r\n }\r\n\r\n constructor(packageInfo: IPackages, settings: Settings, state?: IState) {\r\n this.packageInfo = packageInfo;\r\n this.settings = settings;\r\n this.initTime = Number(new Date());\r\n this.paused = new Reactive(false);\r\n\r\n this.cycle = new WorkflowCycleModel(this.settings.instanceIndex, state ? state.cycle : void 0);\r\n this.fetch = new FetchModel(settings.directionPriority);\r\n this.clip = new ClipModel();\r\n this.render = new RenderModel();\r\n this.scroll = new ScrollModel();\r\n }\r\n\r\n startWorkflowCycle(isInitial: boolean, initiator: ProcessName): void {\r\n this.cycle.start(isInitial, initiator);\r\n }\r\n\r\n endWorkflowCycle(count: number): void {\r\n this.cycle.end(count);\r\n }\r\n\r\n startInnerLoop(): { process?: ProcessName; doRender?: boolean } {\r\n const { cycle, scroll: scroll, fetch, render, clip } = this;\r\n\r\n cycle.innerLoop.start();\r\n scroll.positionBeforeAsync = null;\r\n\r\n if (!fetch.simulate) {\r\n fetch.reset();\r\n }\r\n clip.reset(clip.force);\r\n render.reset();\r\n\r\n return {\r\n ...(cycle.innerLoop.first\r\n ? {\r\n process: cycle.initiator,\r\n doRender: fetch.simulate && fetch.items.length > 0\r\n }\r\n : {})\r\n };\r\n }\r\n\r\n endInnerLoop(): void {\r\n const { fetch, clip, render, cycle } = this;\r\n fetch.stopSimulate();\r\n clip.reset();\r\n if (fetch.cancel) {\r\n fetch.cancel();\r\n fetch.cancel = null;\r\n }\r\n if (render.cancel) {\r\n render.cancel();\r\n render.cancel = null;\r\n }\r\n cycle.innerLoop.done();\r\n }\r\n\r\n dispose(): void {\r\n this.scroll.stop();\r\n this.cycle.dispose();\r\n this.paused.dispose();\r\n this.endInnerLoop();\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"state.js","sourceRoot":"","sources":["../../../src/classes/state.ts"],"names":[],"mappings":"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","sourcesContent":["import { Settings } from './settings';\nimport { Reactive } from './reactive';\nimport { WorkflowCycleModel } from './state/cycle';\nimport { FetchModel } from './state/fetch';\nimport { ClipModel } from './state/clip';\nimport { RenderModel } from './state/render';\nimport { ScrollModel } from './state/scroll';\nimport { State as IState, IPackages, ProcessName } from '../interfaces/index';\n\nexport class State implements IState {\n readonly packageInfo: IPackages;\n private settings: Settings;\n initTime: number;\n paused: Reactive<boolean>;\n\n cycle: WorkflowCycleModel;\n fetch: FetchModel;\n clip: ClipModel;\n render: RenderModel;\n scroll: ScrollModel;\n\n get time(): number {\n return Number(new Date()) - this.initTime;\n }\n\n constructor(packageInfo: IPackages, settings: Settings, state?: IState) {\n this.packageInfo = packageInfo;\n this.settings = settings;\n this.initTime = Number(new Date());\n this.paused = new Reactive(false);\n\n this.cycle = new WorkflowCycleModel(this.settings.instanceIndex, state ? state.cycle : void 0);\n this.fetch = new FetchModel(settings.directionPriority);\n this.clip = new ClipModel();\n this.render = new RenderModel();\n this.scroll = new ScrollModel();\n }\n\n startWorkflowCycle(isInitial: boolean, initiator: ProcessName): void {\n this.cycle.start(isInitial, initiator);\n }\n\n endWorkflowCycle(count: number): void {\n this.cycle.end(count);\n }\n\n startInnerLoop(): { process?: ProcessName; doRender?: boolean } {\n const { cycle, scroll: scroll, fetch, render, clip } = this;\n\n cycle.innerLoop.start();\n scroll.positionBeforeAsync = null;\n\n if (!fetch.simulate) {\n fetch.reset();\n }\n clip.reset(clip.force);\n render.reset();\n\n return {\n ...(cycle.innerLoop.first\n ? {\n process: cycle.initiator,\n doRender: fetch.simulate && fetch.items.length > 0\n }\n : {})\n };\n }\n\n endInnerLoop(): void {\n const { fetch, clip, render, cycle } = this;\n fetch.stopSimulate();\n clip.reset();\n if (fetch.cancel) {\n fetch.cancel();\n fetch.cancel = null;\n }\n if (render.cancel) {\n render.cancel();\n render.cancel = null;\n }\n cycle.innerLoop.done();\n }\n\n dispose(): void {\n this.scroll.stop();\n this.cycle.dispose();\n this.paused.dispose();\n this.endInnerLoop();\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../../src/interfaces/adapter.ts"],"names":[],"mappings":"","sourcesContent":["import { AdapterPropName, AdapterPropType } from '../classes/adapter/props';\r\nimport { Reactive } from '../classes/reactive';\r\nimport { IDatasourceOptional } from './datasource';\r\nimport { IValidatedData } from './validation';\r\n\r\nexport interface IReactivePropConfig {\r\n source: unknown;\r\n emit: (source: unknown, value: unknown) => void;\r\n}\r\n\r\ninterface IReactivePropStore extends IReactivePropConfig {\r\n default: Reactive<unknown>;\r\n}\r\n\r\nexport type IReactivePropsConfig = {\r\n [key in AdapterPropName]?: IReactivePropConfig;\r\n};\r\n\r\nexport type IReactivePropsStore = {\r\n [key in AdapterPropName]?: IReactivePropStore;\r\n};\r\n\r\nexport interface IWanted {\r\n box: { [key: string]: boolean };\r\n block: boolean;\r\n}\r\n\r\nexport interface IAdapterConfig {\r\n mock: boolean;\r\n reactive?: IReactivePropsConfig;\r\n}\r\n\r\nexport interface IAdapterProp {\r\n name: AdapterPropName;\r\n type: AdapterPropType;\r\n value: unknown;\r\n reactive?: AdapterPropName;\r\n wanted?: boolean;\r\n onDemand?: boolean;\r\n permanent?: boolean;\r\n allowedWhenPaused?: boolean;\r\n}\r\n\r\nexport interface ItemAdapter<Data = unknown> {\r\n $index: number;\r\n data: Data;\r\n element?: HTMLElement;\r\n}\r\n\r\nexport type ItemsPredicate<T = unknown> = (item: ItemAdapter<T>) => boolean;\r\nexport type ItemsUpdater<T = unknown> = (item: ItemAdapter<T>, update: () => void) => void;\r\nexport type ItemsProcessor<T = unknown> = (items: ItemAdapter<T>[]) => void;\r\nexport type BufferUpdater<T = unknown> = (item: ItemAdapter<T>) => unknown;\r\n\r\nexport interface IPackage {\r\n name: string;\r\n version: string;\r\n}\r\n\r\nexport interface IPackages {\r\n core: IPackage;\r\n consumer: IPackage;\r\n}\r\n\r\nexport interface IBufferInfo {\r\n firstIndex: number;\r\n lastIndex: number;\r\n minIndex: number;\r\n maxIndex: number;\r\n absMinIndex: number;\r\n absMaxIndex: number;\r\n defaultSize: number;\r\n}\r\n\r\nexport interface IAdapterInput<T> {\r\n data: IValidatedData;\r\n params?: T;\r\n}\r\n\r\nexport interface AdapterAppendOptions<Data = unknown> {\r\n items: Data[];\r\n eof?: boolean;\r\n decrease?: boolean;\r\n virtualize?: boolean;\r\n}\r\n\r\nexport interface AdapterPrependOptions<Data = unknown> {\r\n items: Data[];\r\n bof?: boolean;\r\n increase?: boolean;\r\n virtualize?: boolean;\r\n}\r\n\r\nexport interface AdapterRemoveOptions<Data = unknown> {\r\n predicate?: ItemsPredicate<Data>;\r\n indexes?: number[];\r\n increase?: boolean;\r\n}\r\n\r\nexport interface AdapterClipOptions {\r\n forwardOnly?: boolean;\r\n backwardOnly?: boolean;\r\n}\r\n\r\nexport interface AdapterInsertOptions<Data = unknown> {\r\n items: Data[];\r\n before?: ItemsPredicate<Data>;\r\n after?: ItemsPredicate<Data>;\r\n beforeIndex?: number;\r\n afterIndex?: number;\r\n decrease?: boolean;\r\n virtualize?: boolean;\r\n}\r\n\r\nexport interface AdapterReplaceOptions<Data = unknown> {\r\n items: Data[];\r\n predicate: ItemsPredicate<Data>;\r\n fixRight?: boolean;\r\n}\r\n\r\nexport interface AdapterUpdateOptions<Data = unknown> {\r\n predicate: BufferUpdater<Data>;\r\n fixRight?: boolean;\r\n}\r\n\r\nexport interface AdapterFixOptions<Data = unknown> {\r\n scrollPosition?: number;\r\n minIndex?: number;\r\n maxIndex?: number;\r\n updater?: ItemsUpdater<Data>;\r\n scrollToItem?: ItemsPredicate<Data>;\r\n scrollToItemOpt?: boolean | ScrollIntoViewOptions;\r\n}\r\n\r\nexport interface AdapterMethodResult {\r\n success: boolean;\r\n immediate: boolean;\r\n details: string | null;\r\n}\r\ntype MethodResult = Promise<AdapterMethodResult>;\r\n\r\nexport interface IAdapter<Data = unknown> {\r\n readonly id: number;\r\n readonly mock: boolean;\r\n readonly augmented: boolean;\r\n readonly version: string;\r\n readonly init: boolean;\r\n readonly init$: Reactive<boolean>;\r\n readonly packageInfo: IPackages;\r\n readonly itemsCount: number;\r\n readonly bufferInfo: IBufferInfo;\r\n readonly isLoading: boolean;\r\n readonly isLoading$: Reactive<boolean>;\r\n readonly loopPending: boolean;\r\n readonly loopPending$: Reactive<boolean>;\r\n readonly firstVisible: ItemAdapter<Data>;\r\n readonly firstVisible$: Reactive<ItemAdapter<Data>>;\r\n readonly lastVisible: ItemAdapter<Data>;\r\n readonly lastVisible$: Reactive<ItemAdapter<Data>>;\r\n readonly bof: boolean;\r\n readonly bof$: Reactive<boolean>;\r\n readonly eof: boolean;\r\n readonly eof$: Reactive<boolean>;\r\n readonly paused: boolean;\r\n readonly paused$: Reactive<boolean>;\r\n reset(datasource?: IDatasourceOptional): MethodResult;\r\n reload(reloadIndex?: number | string): MethodResult;\r\n append(options: AdapterAppendOptions<Data>): MethodResult;\r\n append(items: Data | Data[], eof?: boolean): MethodResult; // old signature\r\n prepend(options: AdapterPrependOptions<Data>): MethodResult;\r\n prepend(items: Data | Data[], bof?: boolean): MethodResult; // old signature\r\n check(): MethodResult;\r\n remove(args: AdapterRemoveOptions<Data>): MethodResult;\r\n remove(args: ItemsPredicate<Data>): MethodResult; // old signature\r\n clip(options?: AdapterClipOptions): MethodResult;\r\n insert(options: AdapterInsertOptions<Data>): MethodResult;\r\n replace(options: AdapterReplaceOptions<Data>): MethodResult;\r\n update(options: AdapterUpdateOptions<Data>): MethodResult;\r\n pause(): MethodResult;\r\n resume(): MethodResult;\r\n fix(options: AdapterFixOptions<Data>): MethodResult; // experimental\r\n relax(callback?: () => void): MethodResult;\r\n showLog(): void;\r\n}\r\n"]}
1
+ {"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../../src/interfaces/adapter.ts"],"names":[],"mappings":"","sourcesContent":["import { AdapterPropName, AdapterPropType } from '../classes/adapter/props';\r\nimport { Reactive } from '../classes/reactive';\r\nimport { IDatasourceOptional } from './datasource';\r\nimport { IValidatedData } from './validation';\r\n\r\nexport interface IReactivePropConfig {\r\n source: unknown;\r\n emit: (source: unknown, value: unknown) => void;\r\n}\r\n\r\ninterface IReactivePropStore extends IReactivePropConfig {\r\n default: Reactive<unknown>;\r\n}\r\n\r\nexport type IReactivePropsConfig = {\r\n [key in AdapterPropName]?: IReactivePropConfig;\r\n};\r\n\r\nexport type IReactivePropsStore = {\r\n [key in AdapterPropName]?: IReactivePropStore;\r\n};\r\n\r\nexport interface IWanted {\r\n box: { [key: string]: boolean };\r\n block: boolean;\r\n}\r\n\r\nexport interface IAdapterConfig {\r\n mock: boolean;\r\n reactive?: IReactivePropsConfig;\r\n}\r\n\r\nexport interface IAdapterProp {\r\n name: AdapterPropName;\r\n type: AdapterPropType;\r\n value: unknown;\r\n reactive?: AdapterPropName;\r\n wanted?: boolean;\r\n onDemand?: boolean;\r\n permanent?: boolean;\r\n allowedWhenPaused?: boolean;\r\n}\r\n\r\nexport interface ItemAdapter<Data = unknown> {\r\n uid: number;\r\n $index: number;\r\n data: Data;\r\n element?: HTMLElement;\r\n}\r\n\r\nexport type ItemsPredicate<T = unknown> = (item: ItemAdapter<T>) => boolean;\r\nexport type ItemsUpdater<T = unknown> = (item: ItemAdapter<T>, update: () => void) => void;\r\nexport type ItemsProcessor<T = unknown> = (items: ItemAdapter<T>[]) => void;\r\nexport type BufferUpdater<T = unknown> = (item: ItemAdapter<T>) => unknown;\r\n\r\nexport interface IPackage {\r\n name: string;\r\n version: string;\r\n}\r\n\r\nexport interface IPackages {\r\n core: IPackage;\r\n consumer: IPackage;\r\n}\r\n\r\nexport interface IBufferInfo {\r\n firstIndex: number;\r\n lastIndex: number;\r\n minIndex: number;\r\n maxIndex: number;\r\n absMinIndex: number;\r\n absMaxIndex: number;\r\n defaultSize: number;\r\n}\r\n\r\nexport interface IAdapterInput<T> {\r\n data: IValidatedData;\r\n params?: T;\r\n}\r\n\r\nexport interface AdapterAppendOptions<Data = unknown> {\r\n items: Data[];\r\n eof?: boolean;\r\n decrease?: boolean;\r\n virtualize?: boolean;\r\n}\r\n\r\nexport interface AdapterPrependOptions<Data = unknown> {\r\n items: Data[];\r\n bof?: boolean;\r\n increase?: boolean;\r\n virtualize?: boolean;\r\n}\r\n\r\nexport interface AdapterRemoveOptions<Data = unknown> {\r\n predicate?: ItemsPredicate<Data>;\r\n indexes?: number[];\r\n increase?: boolean;\r\n}\r\n\r\nexport interface AdapterClipOptions {\r\n forwardOnly?: boolean;\r\n backwardOnly?: boolean;\r\n}\r\n\r\nexport interface AdapterInsertOptions<Data = unknown> {\r\n items: Data[];\r\n before?: ItemsPredicate<Data>;\r\n after?: ItemsPredicate<Data>;\r\n beforeIndex?: number;\r\n afterIndex?: number;\r\n decrease?: boolean;\r\n virtualize?: boolean;\r\n}\r\n\r\nexport interface AdapterReplaceOptions<Data = unknown> {\r\n items: Data[];\r\n predicate: ItemsPredicate<Data>;\r\n fixRight?: boolean;\r\n}\r\n\r\nexport interface AdapterUpdateOptions<Data = unknown> {\r\n predicate: BufferUpdater<Data>;\r\n fixRight?: boolean;\r\n}\r\n\r\nexport interface AdapterFixOptions<Data = unknown> {\r\n scrollPosition?: number;\r\n minIndex?: number;\r\n maxIndex?: number;\r\n updater?: ItemsUpdater<Data>;\r\n scrollToItem?: ItemsPredicate<Data>;\r\n scrollToItemOpt?: boolean | ScrollIntoViewOptions;\r\n}\r\n\r\nexport interface AdapterMethodResult {\r\n success: boolean;\r\n immediate: boolean;\r\n details: string | null;\r\n}\r\ntype MethodResult = Promise<AdapterMethodResult>;\r\n\r\nexport interface IAdapter<Data = unknown> {\r\n readonly id: number;\r\n readonly mock: boolean;\r\n readonly augmented: boolean;\r\n readonly version: string;\r\n readonly init: boolean;\r\n readonly init$: Reactive<boolean>;\r\n readonly packageInfo: IPackages;\r\n readonly itemsCount: number;\r\n readonly bufferInfo: IBufferInfo;\r\n readonly isLoading: boolean;\r\n readonly isLoading$: Reactive<boolean>;\r\n readonly loopPending: boolean;\r\n readonly loopPending$: Reactive<boolean>;\r\n readonly firstVisible: ItemAdapter<Data>;\r\n readonly firstVisible$: Reactive<ItemAdapter<Data>>;\r\n readonly lastVisible: ItemAdapter<Data>;\r\n readonly lastVisible$: Reactive<ItemAdapter<Data>>;\r\n readonly bof: boolean;\r\n readonly bof$: Reactive<boolean>;\r\n readonly eof: boolean;\r\n readonly eof$: Reactive<boolean>;\r\n readonly paused: boolean;\r\n readonly paused$: Reactive<boolean>;\r\n reset(datasource?: IDatasourceOptional): MethodResult;\r\n reload(reloadIndex?: number | string): MethodResult;\r\n append(options: AdapterAppendOptions<Data>): MethodResult;\r\n append(items: Data | Data[], eof?: boolean): MethodResult; // old signature\r\n prepend(options: AdapterPrependOptions<Data>): MethodResult;\r\n prepend(items: Data | Data[], bof?: boolean): MethodResult; // old signature\r\n check(): MethodResult;\r\n remove(args: AdapterRemoveOptions<Data>): MethodResult;\r\n remove(args: ItemsPredicate<Data>): MethodResult; // old signature\r\n clip(options?: AdapterClipOptions): MethodResult;\r\n insert(options: AdapterInsertOptions<Data>): MethodResult;\r\n replace(options: AdapterReplaceOptions<Data>): MethodResult;\r\n update(options: AdapterUpdateOptions<Data>): MethodResult;\r\n pause(): MethodResult;\r\n resume(): MethodResult;\r\n fix(options: AdapterFixOptions<Data>): MethodResult; // experimental\r\n relax(callback?: () => void): MethodResult;\r\n showLog(): void;\r\n}\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"item.js","sourceRoot":"","sources":["../../../src/interfaces/item.ts"],"names":[],"mappings":"","sourcesContent":["import { ItemAdapter } from './adapter';\r\n\r\nexport interface Item<Data = unknown> {\r\n $index: number;\r\n element: HTMLElement;\r\n data: Data;\r\n invisible: boolean;\r\n get: () => ItemAdapter<Data>;\r\n}\r\n"]}
1
+ {"version":3,"file":"item.js","sourceRoot":"","sources":["../../../src/interfaces/item.ts"],"names":[],"mappings":"","sourcesContent":["import { ItemAdapter } from './adapter';\r\n\r\nexport interface Item<Data = unknown> {\r\n uid: number;\r\n $index: number;\r\n element: HTMLElement;\r\n data: Data;\r\n invisible: boolean;\r\n get: () => ItemAdapter<Data>;\r\n}\r\n"]}
@@ -1,5 +1,5 @@
1
1
  export default {
2
2
  name: 'vscroll',
3
- version: '1.8.2'
3
+ version: '1.8.3'
4
4
  };
5
5
  //# sourceMappingURL=version.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/version.ts"],"names":[],"mappings":"AAAA,eAAe;IACb,IAAI,EAAE,SAAS;IACf,OAAO,EAAE,OAAO;CACjB,CAAC","sourcesContent":["export default {\n name: 'vscroll',\n version: '1.8.2'\n};\n"]}
1
+ {"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/version.ts"],"names":[],"mappings":"AAAA,eAAe;IACb,IAAI,EAAE,SAAS;IACf,OAAO,EAAE,OAAO;CACjB,CAAC","sourcesContent":["export default {\n name: 'vscroll',\n version: '1.8.3'\n};\n"]}
@@ -2,6 +2,7 @@ import { Routines } from './domRoutines';
2
2
  import { Direction } from '../inputs/index';
3
3
  import { Item as _Item, ItemAdapter } from '../interfaces/index';
4
4
  export declare class Item<Data = unknown> implements _Item<Data> {
5
+ private static nextUid;
5
6
  nodeId: string;
6
7
  routines: Routines;
7
8
  preSize: number;
@@ -11,6 +12,8 @@ export declare class Item<Data = unknown> implements _Item<Data> {
11
12
  toInsert: boolean;
12
13
  removeDirection: Direction;
13
14
  private container;
15
+ get uid(): number;
16
+ set uid(value: number);
14
17
  get $index(): number;
15
18
  set $index(value: number);
16
19
  get data(): Data;
@@ -36,6 +36,7 @@ export interface IAdapterProp {
36
36
  allowedWhenPaused?: boolean;
37
37
  }
38
38
  export interface ItemAdapter<Data = unknown> {
39
+ uid: number;
39
40
  $index: number;
40
41
  data: Data;
41
42
  element?: HTMLElement;
@@ -1,5 +1,6 @@
1
1
  import { ItemAdapter } from './adapter';
2
2
  export interface Item<Data = unknown> {
3
+ uid: number;
3
4
  $index: number;
4
5
  element: HTMLElement;
5
6
  data: Data;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vscroll",
3
- "version": "1.8.2",
3
+ "version": "1.8.3",
4
4
  "description": "Virtual scroll engine",
5
5
  "main": "dist/bundles/vscroll.umd.js",
6
6
  "module": "dist/bundles/vscroll.esm5.js",
@@ -32,7 +32,8 @@
32
32
  "test:e2e:ui": "cd tests && npm run test:e2e:ui",
33
33
  "test:e2e:debug": "cd tests && npm run test:e2e:debug",
34
34
  "prepack": "npm run build",
35
- "checkGit": "sh ./uncommited.sh"
35
+ "checkGit": "sh ./uncommited.sh",
36
+ "prepublishOnly": "npm run checkGit && npm run build && npm run test && npm run checkGit"
36
37
  },
37
38
  "dependencies": {
38
39
  "tslib": "^2.8.1"