@vuu-ui/vuu-utils 0.13.77 → 0.13.78

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.
@@ -42,7 +42,6 @@ var listUtils = require('./list-utils.js');
42
42
  var localStorageUtils = require('./local-storage-utils.js');
43
43
  var loggingUtils = require('./logging-utils.js');
44
44
  var moduleUtils = require('./module-utils.js');
45
- var movingWindow = require('./moving-window.js');
46
45
  var index$2 = require('./nanoid/index.js');
47
46
  var reactUtils = require('./react-utils.js');
48
47
  var roundDecimal = require('./round-decimal.js');
@@ -341,7 +340,6 @@ exports.getLoggingConfigForWorker = loggingUtils.getLoggingConfigForWorker;
341
340
  exports.logUnhandledMessage = loggingUtils.logUnhandledMessage;
342
341
  exports.logger = loggingUtils.logger;
343
342
  exports.isModule = moduleUtils.isModule;
344
- exports.MovingWindow = movingWindow.MovingWindow;
345
343
  exports.uuid = index$2.uuid;
346
344
  exports.asReactElements = reactUtils.asReactElements;
347
345
  exports.createSyntheticEvent = reactUtils.createSyntheticEvent;
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -16,14 +16,14 @@ const defaultRangeOptions = {
16
16
  rowCount: -1
17
17
  };
18
18
  const _RangeImpl = class _RangeImpl {
19
+ // We have to keep from and to as simple public properties (not getters) so they survive structuredClone
19
20
  constructor(from, to, rangeOptions = defaultRangeOptions) {
21
+ this.from = from;
22
+ this.to = to;
20
23
  __privateAdd(this, _baseFrom);
21
24
  __privateAdd(this, _renderBufferSize, 0);
22
25
  __privateAdd(this, _rowCount, -1);
23
26
  __privateAdd(this, _baseTo);
24
- // We have to keep these as simple public properties (not getters) so they survive structuredClone
25
- __publicField(this, "from", 0);
26
- __publicField(this, "to", 0);
27
27
  __privateSet(this, _baseFrom, from);
28
28
  __privateSet(this, _baseTo, to);
29
29
  this.renderBufferSize = rangeOptions.renderBufferSize ?? defaultRangeOptions.renderBufferSize;
@@ -1 +1 @@
1
- {"version":3,"file":"range-utils.js","sources":["../../../../../../packages/vuu-utils/src/range-utils.ts"],"sourcesContent":["import { VuuRange } from \"@vuu-ui/vuu-protocol-types\";\n\ninterface FromToRange {\n from: number;\n to: number;\n}\n\nexport interface Range extends VuuRange {\n equals: (vuuRange: VuuRange) => boolean;\n firstRowInViewport: number;\n lastRowInViewport: number;\n renderBufferSize?: number;\n reset: Range;\n rowCount?: number;\n}\n\nexport interface RangeOptions {\n renderBufferSize?: number;\n rowCount?: number;\n}\n\nconst defaultRangeOptions = {\n renderBufferSize: 0,\n rowCount: -1,\n};\nclass RangeImpl implements Range {\n #baseFrom: number;\n #renderBufferSize = 0;\n #rowCount = -1;\n #baseTo: number;\n\n // We have to keep these as simple public properties (not getters) so they survive structuredClone\n public from = 0;\n public to = 0;\n\n constructor(\n /** Index position of first visible row in viewport */\n from: number,\n /** Index position of last visible row in viewport + 1 */\n to: number,\n rangeOptions: RangeOptions = defaultRangeOptions,\n ) {\n this.#baseFrom = from;\n this.#baseTo = to;\n this.renderBufferSize =\n rangeOptions.renderBufferSize ?? defaultRangeOptions.renderBufferSize;\n this.rowCount = rangeOptions.rowCount ?? defaultRangeOptions.rowCount;\n }\n\n get firstRowInViewport() {\n return this.#baseFrom + 1;\n }\n\n get lastRowInViewport() {\n if (this.#rowCount > 0) {\n return Math.min(this.#baseTo, this.#rowCount);\n } else {\n return this.#baseTo;\n }\n }\n\n get renderBufferSize() {\n return this.#renderBufferSize;\n }\n\n set renderBufferSize(value: number) {\n this.#renderBufferSize = value;\n this.from = Math.max(0, this.#baseFrom - value);\n if (this.#rowCount > 0) {\n this.to = Math.max(this.#baseTo + this.#renderBufferSize, this.#rowCount);\n } else {\n this.to = this.#baseTo + this.#renderBufferSize;\n }\n }\n\n get rowCount() {\n return this.#rowCount;\n }\n\n set rowCount(value: number) {\n this.#rowCount = value;\n if (value > 0) {\n this.to = Math.min(this.#baseTo + this.#renderBufferSize, value);\n } else {\n this.to = this.#baseTo + this.#renderBufferSize;\n }\n }\n\n get reset() {\n return new RangeImpl(0, this.#baseTo - this.#baseFrom, {\n rowCount: this.#rowCount,\n renderBufferSize: this.#renderBufferSize,\n });\n }\n\n equals(range: VuuRange) {\n return range.from === this.#baseFrom && range.to === this.#baseTo;\n }\n\n toJson() {\n return {\n from: this.from,\n to: this.to,\n baseFrom: this.#baseFrom,\n baseTo: this.#baseTo,\n renderBufferSize: this.#renderBufferSize,\n rowCount: this.#rowCount,\n };\n }\n}\n\nexport const Range = (\n from: number,\n to: number,\n rangeOptions?: RangeOptions,\n): Range => new RangeImpl(from, to, rangeOptions);\n\nexport const NULL_RANGE = Range(0, 0);\n\nexport function getFullRange(\n { from, to }: VuuRange,\n bufferSize = 0,\n totalRowCount: number = Number.MAX_SAFE_INTEGER,\n): FromToRange {\n if (from === 0 && to === 0) {\n return { from, to };\n } else if (bufferSize === 0) {\n if (totalRowCount < from) {\n return { from: 0, to: 0 };\n } else {\n return { from, to: Math.min(to, totalRowCount) };\n }\n } else if (from === 0) {\n return { from, to: Math.min(to + bufferSize, totalRowCount) };\n } else {\n const shortfallBefore = from - bufferSize < 0;\n const shortfallAfter = totalRowCount - (to + bufferSize) < 0;\n if (shortfallBefore && shortfallAfter) {\n return { from: 0, to: totalRowCount };\n } else if (shortfallBefore) {\n return { from: 0, to: to + bufferSize };\n } else if (shortfallAfter) {\n return {\n from: Math.max(0, from - bufferSize),\n to: totalRowCount,\n };\n } else {\n return { from: from - bufferSize, to: to + bufferSize };\n }\n }\n}\n\nexport const withinRange = (value: number, { from, to }: VuuRange) =>\n value >= from && value < to;\n\n// export const rangeOverlap = (\n// { from: from1, to: to1 }: VuuRange,\n// { from: from2, to: to2 }: VuuRange\n// ): VuuRange => {\n// return from2 >= to1 || to2 < from1\n// ? { from: 0, to: 0 }\n// : { from: Math.max(from2, from1), to: Math.min(to2, to1) };\n// };\n\nexport const rangeNewItems = (\n { from: from1, to: to1 }: VuuRange,\n newRange: VuuRange,\n): VuuRange => {\n const { from: from2, to: to2 } = newRange;\n const noOverlap = from2 >= to1 || to2 <= from1;\n const newFullySubsumesOld = from2 < from1 && to2 > to1;\n return noOverlap || newFullySubsumesOld\n ? newRange\n : to2 > to1\n ? { from: to1, to: to2 }\n : { from: from2, to: from1 };\n};\n\nexport class WindowRange {\n public from: number;\n public to: number;\n\n constructor(from: number, to: number) {\n this.from = from;\n this.to = to;\n }\n\n public isWithin(index: number) {\n return withinRange(index, this);\n }\n\n //find the overlap of this range and a new one\n public overlap(from: number, to: number): [number, number] {\n return from >= this.to || to < this.from\n ? [0, 0]\n : [Math.max(from, this.from), Math.min(to, this.to)];\n }\n\n public copy(): WindowRange {\n return new WindowRange(this.from, this.to);\n }\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"range-utils.js","sources":["../../../../../../packages/vuu-utils/src/range-utils.ts"],"sourcesContent":["import { VuuRange } from \"@vuu-ui/vuu-protocol-types\";\n\ninterface FromToRange {\n from: number;\n to: number;\n}\n\nexport interface Range extends VuuRange {\n equals: (vuuRange: VuuRange) => boolean;\n firstRowInViewport: number;\n lastRowInViewport: number;\n renderBufferSize?: number;\n reset: Range;\n rowCount?: number;\n}\n\nexport interface RangeOptions {\n renderBufferSize?: number;\n rowCount?: number;\n}\n\nconst defaultRangeOptions = {\n renderBufferSize: 0,\n rowCount: -1,\n};\nclass RangeImpl implements Range {\n #baseFrom: number;\n #renderBufferSize = 0;\n #rowCount = -1;\n #baseTo: number;\n\n // We have to keep from and to as simple public properties (not getters) so they survive structuredClone\n constructor(\n /** Index position of first visible row in viewport */\n public from: number,\n /** Index position of last visible row in viewport + 1 */\n public to: number,\n rangeOptions: RangeOptions = defaultRangeOptions,\n ) {\n this.#baseFrom = from;\n this.#baseTo = to;\n this.renderBufferSize =\n rangeOptions.renderBufferSize ?? defaultRangeOptions.renderBufferSize;\n this.rowCount = rangeOptions.rowCount ?? defaultRangeOptions.rowCount;\n }\n\n get firstRowInViewport() {\n return this.#baseFrom + 1;\n }\n\n get lastRowInViewport() {\n if (this.#rowCount > 0) {\n return Math.min(this.#baseTo, this.#rowCount);\n } else {\n return this.#baseTo;\n }\n }\n\n get renderBufferSize() {\n return this.#renderBufferSize;\n }\n\n set renderBufferSize(value: number) {\n this.#renderBufferSize = value;\n this.from = Math.max(0, this.#baseFrom - value);\n if (this.#rowCount > 0) {\n this.to = Math.max(this.#baseTo + this.#renderBufferSize, this.#rowCount);\n } else {\n this.to = this.#baseTo + this.#renderBufferSize;\n }\n }\n\n get rowCount() {\n return this.#rowCount;\n }\n\n set rowCount(value: number) {\n this.#rowCount = value;\n if (value > 0) {\n this.to = Math.min(this.#baseTo + this.#renderBufferSize, value);\n } else {\n this.to = this.#baseTo + this.#renderBufferSize;\n }\n }\n\n get reset() {\n return new RangeImpl(0, this.#baseTo - this.#baseFrom, {\n rowCount: this.#rowCount,\n renderBufferSize: this.#renderBufferSize,\n });\n }\n\n equals(range: VuuRange) {\n return range.from === this.#baseFrom && range.to === this.#baseTo;\n }\n\n toJson() {\n return {\n from: this.from,\n to: this.to,\n baseFrom: this.#baseFrom,\n baseTo: this.#baseTo,\n renderBufferSize: this.#renderBufferSize,\n rowCount: this.#rowCount,\n };\n }\n}\n\nexport const Range = (\n from: number,\n to: number,\n rangeOptions?: RangeOptions,\n): Range => new RangeImpl(from, to, rangeOptions);\n\nexport const NULL_RANGE = Range(0, 0);\n\nexport function getFullRange(\n { from, to }: VuuRange,\n bufferSize = 0,\n totalRowCount: number = Number.MAX_SAFE_INTEGER,\n): FromToRange {\n if (from === 0 && to === 0) {\n return { from, to };\n } else if (bufferSize === 0) {\n if (totalRowCount < from) {\n return { from: 0, to: 0 };\n } else {\n return { from, to: Math.min(to, totalRowCount) };\n }\n } else if (from === 0) {\n return { from, to: Math.min(to + bufferSize, totalRowCount) };\n } else {\n const shortfallBefore = from - bufferSize < 0;\n const shortfallAfter = totalRowCount - (to + bufferSize) < 0;\n if (shortfallBefore && shortfallAfter) {\n return { from: 0, to: totalRowCount };\n } else if (shortfallBefore) {\n return { from: 0, to: to + bufferSize };\n } else if (shortfallAfter) {\n return {\n from: Math.max(0, from - bufferSize),\n to: totalRowCount,\n };\n } else {\n return { from: from - bufferSize, to: to + bufferSize };\n }\n }\n}\n\nexport const withinRange = (value: number, { from, to }: VuuRange) =>\n value >= from && value < to;\n\nexport const rangeNewItems = (\n { from: from1, to: to1 }: VuuRange,\n newRange: VuuRange,\n): VuuRange => {\n const { from: from2, to: to2 } = newRange;\n const noOverlap = from2 >= to1 || to2 <= from1;\n const newFullySubsumesOld = from2 < from1 && to2 > to1;\n return noOverlap || newFullySubsumesOld\n ? newRange\n : to2 > to1\n ? { from: to1, to: to2 }\n : { from: from2, to: from1 };\n};\n\nexport class WindowRange {\n public from: number;\n public to: number;\n\n constructor(from: number, to: number) {\n this.from = from;\n this.to = to;\n }\n\n public isWithin(index: number) {\n return withinRange(index, this);\n }\n\n //find the overlap of this range and a new one\n public overlap(from: number, to: number): [number, number] {\n return from >= this.to || to < this.from\n ? [0, 0]\n : [Math.max(from, this.from), Math.min(to, this.to)];\n }\n\n public copy(): WindowRange {\n return new WindowRange(this.from, this.to);\n }\n}\n"],"names":[],"mappings":"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"}
@@ -40,7 +40,6 @@ export { getSelectedOption } from './list-utils.js';
40
40
  export { getAllLocalEntity, getLocalEntity, saveLocalEntity } from './local-storage-utils.js';
41
41
  export { getLoggingConfigForWorker, logUnhandledMessage, logger } from './logging-utils.js';
42
42
  export { isModule } from './module-utils.js';
43
- export { MovingWindow } from './moving-window.js';
44
43
  export { uuid } from './nanoid/index.js';
45
44
  export { asReactElements, createSyntheticEvent, isSimpleStateValue, useIsMounted } from './react-utils.js';
46
45
  export { roundDecimal } from './round-decimal.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -14,14 +14,14 @@ const defaultRangeOptions = {
14
14
  rowCount: -1
15
15
  };
16
16
  const _RangeImpl = class _RangeImpl {
17
+ // We have to keep from and to as simple public properties (not getters) so they survive structuredClone
17
18
  constructor(from, to, rangeOptions = defaultRangeOptions) {
19
+ this.from = from;
20
+ this.to = to;
18
21
  __privateAdd(this, _baseFrom);
19
22
  __privateAdd(this, _renderBufferSize, 0);
20
23
  __privateAdd(this, _rowCount, -1);
21
24
  __privateAdd(this, _baseTo);
22
- // We have to keep these as simple public properties (not getters) so they survive structuredClone
23
- __publicField(this, "from", 0);
24
- __publicField(this, "to", 0);
25
25
  __privateSet(this, _baseFrom, from);
26
26
  __privateSet(this, _baseTo, to);
27
27
  this.renderBufferSize = rangeOptions.renderBufferSize ?? defaultRangeOptions.renderBufferSize;
@@ -1 +1 @@
1
- {"version":3,"file":"range-utils.js","sources":["../../../../../../packages/vuu-utils/src/range-utils.ts"],"sourcesContent":["import { VuuRange } from \"@vuu-ui/vuu-protocol-types\";\n\ninterface FromToRange {\n from: number;\n to: number;\n}\n\nexport interface Range extends VuuRange {\n equals: (vuuRange: VuuRange) => boolean;\n firstRowInViewport: number;\n lastRowInViewport: number;\n renderBufferSize?: number;\n reset: Range;\n rowCount?: number;\n}\n\nexport interface RangeOptions {\n renderBufferSize?: number;\n rowCount?: number;\n}\n\nconst defaultRangeOptions = {\n renderBufferSize: 0,\n rowCount: -1,\n};\nclass RangeImpl implements Range {\n #baseFrom: number;\n #renderBufferSize = 0;\n #rowCount = -1;\n #baseTo: number;\n\n // We have to keep these as simple public properties (not getters) so they survive structuredClone\n public from = 0;\n public to = 0;\n\n constructor(\n /** Index position of first visible row in viewport */\n from: number,\n /** Index position of last visible row in viewport + 1 */\n to: number,\n rangeOptions: RangeOptions = defaultRangeOptions,\n ) {\n this.#baseFrom = from;\n this.#baseTo = to;\n this.renderBufferSize =\n rangeOptions.renderBufferSize ?? defaultRangeOptions.renderBufferSize;\n this.rowCount = rangeOptions.rowCount ?? defaultRangeOptions.rowCount;\n }\n\n get firstRowInViewport() {\n return this.#baseFrom + 1;\n }\n\n get lastRowInViewport() {\n if (this.#rowCount > 0) {\n return Math.min(this.#baseTo, this.#rowCount);\n } else {\n return this.#baseTo;\n }\n }\n\n get renderBufferSize() {\n return this.#renderBufferSize;\n }\n\n set renderBufferSize(value: number) {\n this.#renderBufferSize = value;\n this.from = Math.max(0, this.#baseFrom - value);\n if (this.#rowCount > 0) {\n this.to = Math.max(this.#baseTo + this.#renderBufferSize, this.#rowCount);\n } else {\n this.to = this.#baseTo + this.#renderBufferSize;\n }\n }\n\n get rowCount() {\n return this.#rowCount;\n }\n\n set rowCount(value: number) {\n this.#rowCount = value;\n if (value > 0) {\n this.to = Math.min(this.#baseTo + this.#renderBufferSize, value);\n } else {\n this.to = this.#baseTo + this.#renderBufferSize;\n }\n }\n\n get reset() {\n return new RangeImpl(0, this.#baseTo - this.#baseFrom, {\n rowCount: this.#rowCount,\n renderBufferSize: this.#renderBufferSize,\n });\n }\n\n equals(range: VuuRange) {\n return range.from === this.#baseFrom && range.to === this.#baseTo;\n }\n\n toJson() {\n return {\n from: this.from,\n to: this.to,\n baseFrom: this.#baseFrom,\n baseTo: this.#baseTo,\n renderBufferSize: this.#renderBufferSize,\n rowCount: this.#rowCount,\n };\n }\n}\n\nexport const Range = (\n from: number,\n to: number,\n rangeOptions?: RangeOptions,\n): Range => new RangeImpl(from, to, rangeOptions);\n\nexport const NULL_RANGE = Range(0, 0);\n\nexport function getFullRange(\n { from, to }: VuuRange,\n bufferSize = 0,\n totalRowCount: number = Number.MAX_SAFE_INTEGER,\n): FromToRange {\n if (from === 0 && to === 0) {\n return { from, to };\n } else if (bufferSize === 0) {\n if (totalRowCount < from) {\n return { from: 0, to: 0 };\n } else {\n return { from, to: Math.min(to, totalRowCount) };\n }\n } else if (from === 0) {\n return { from, to: Math.min(to + bufferSize, totalRowCount) };\n } else {\n const shortfallBefore = from - bufferSize < 0;\n const shortfallAfter = totalRowCount - (to + bufferSize) < 0;\n if (shortfallBefore && shortfallAfter) {\n return { from: 0, to: totalRowCount };\n } else if (shortfallBefore) {\n return { from: 0, to: to + bufferSize };\n } else if (shortfallAfter) {\n return {\n from: Math.max(0, from - bufferSize),\n to: totalRowCount,\n };\n } else {\n return { from: from - bufferSize, to: to + bufferSize };\n }\n }\n}\n\nexport const withinRange = (value: number, { from, to }: VuuRange) =>\n value >= from && value < to;\n\n// export const rangeOverlap = (\n// { from: from1, to: to1 }: VuuRange,\n// { from: from2, to: to2 }: VuuRange\n// ): VuuRange => {\n// return from2 >= to1 || to2 < from1\n// ? { from: 0, to: 0 }\n// : { from: Math.max(from2, from1), to: Math.min(to2, to1) };\n// };\n\nexport const rangeNewItems = (\n { from: from1, to: to1 }: VuuRange,\n newRange: VuuRange,\n): VuuRange => {\n const { from: from2, to: to2 } = newRange;\n const noOverlap = from2 >= to1 || to2 <= from1;\n const newFullySubsumesOld = from2 < from1 && to2 > to1;\n return noOverlap || newFullySubsumesOld\n ? newRange\n : to2 > to1\n ? { from: to1, to: to2 }\n : { from: from2, to: from1 };\n};\n\nexport class WindowRange {\n public from: number;\n public to: number;\n\n constructor(from: number, to: number) {\n this.from = from;\n this.to = to;\n }\n\n public isWithin(index: number) {\n return withinRange(index, this);\n }\n\n //find the overlap of this range and a new one\n public overlap(from: number, to: number): [number, number] {\n return from >= this.to || to < this.from\n ? [0, 0]\n : [Math.max(from, this.from), Math.min(to, this.to)];\n }\n\n public copy(): WindowRange {\n return new WindowRange(this.from, this.to);\n }\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"range-utils.js","sources":["../../../../../../packages/vuu-utils/src/range-utils.ts"],"sourcesContent":["import { VuuRange } from \"@vuu-ui/vuu-protocol-types\";\n\ninterface FromToRange {\n from: number;\n to: number;\n}\n\nexport interface Range extends VuuRange {\n equals: (vuuRange: VuuRange) => boolean;\n firstRowInViewport: number;\n lastRowInViewport: number;\n renderBufferSize?: number;\n reset: Range;\n rowCount?: number;\n}\n\nexport interface RangeOptions {\n renderBufferSize?: number;\n rowCount?: number;\n}\n\nconst defaultRangeOptions = {\n renderBufferSize: 0,\n rowCount: -1,\n};\nclass RangeImpl implements Range {\n #baseFrom: number;\n #renderBufferSize = 0;\n #rowCount = -1;\n #baseTo: number;\n\n // We have to keep from and to as simple public properties (not getters) so they survive structuredClone\n constructor(\n /** Index position of first visible row in viewport */\n public from: number,\n /** Index position of last visible row in viewport + 1 */\n public to: number,\n rangeOptions: RangeOptions = defaultRangeOptions,\n ) {\n this.#baseFrom = from;\n this.#baseTo = to;\n this.renderBufferSize =\n rangeOptions.renderBufferSize ?? defaultRangeOptions.renderBufferSize;\n this.rowCount = rangeOptions.rowCount ?? defaultRangeOptions.rowCount;\n }\n\n get firstRowInViewport() {\n return this.#baseFrom + 1;\n }\n\n get lastRowInViewport() {\n if (this.#rowCount > 0) {\n return Math.min(this.#baseTo, this.#rowCount);\n } else {\n return this.#baseTo;\n }\n }\n\n get renderBufferSize() {\n return this.#renderBufferSize;\n }\n\n set renderBufferSize(value: number) {\n this.#renderBufferSize = value;\n this.from = Math.max(0, this.#baseFrom - value);\n if (this.#rowCount > 0) {\n this.to = Math.max(this.#baseTo + this.#renderBufferSize, this.#rowCount);\n } else {\n this.to = this.#baseTo + this.#renderBufferSize;\n }\n }\n\n get rowCount() {\n return this.#rowCount;\n }\n\n set rowCount(value: number) {\n this.#rowCount = value;\n if (value > 0) {\n this.to = Math.min(this.#baseTo + this.#renderBufferSize, value);\n } else {\n this.to = this.#baseTo + this.#renderBufferSize;\n }\n }\n\n get reset() {\n return new RangeImpl(0, this.#baseTo - this.#baseFrom, {\n rowCount: this.#rowCount,\n renderBufferSize: this.#renderBufferSize,\n });\n }\n\n equals(range: VuuRange) {\n return range.from === this.#baseFrom && range.to === this.#baseTo;\n }\n\n toJson() {\n return {\n from: this.from,\n to: this.to,\n baseFrom: this.#baseFrom,\n baseTo: this.#baseTo,\n renderBufferSize: this.#renderBufferSize,\n rowCount: this.#rowCount,\n };\n }\n}\n\nexport const Range = (\n from: number,\n to: number,\n rangeOptions?: RangeOptions,\n): Range => new RangeImpl(from, to, rangeOptions);\n\nexport const NULL_RANGE = Range(0, 0);\n\nexport function getFullRange(\n { from, to }: VuuRange,\n bufferSize = 0,\n totalRowCount: number = Number.MAX_SAFE_INTEGER,\n): FromToRange {\n if (from === 0 && to === 0) {\n return { from, to };\n } else if (bufferSize === 0) {\n if (totalRowCount < from) {\n return { from: 0, to: 0 };\n } else {\n return { from, to: Math.min(to, totalRowCount) };\n }\n } else if (from === 0) {\n return { from, to: Math.min(to + bufferSize, totalRowCount) };\n } else {\n const shortfallBefore = from - bufferSize < 0;\n const shortfallAfter = totalRowCount - (to + bufferSize) < 0;\n if (shortfallBefore && shortfallAfter) {\n return { from: 0, to: totalRowCount };\n } else if (shortfallBefore) {\n return { from: 0, to: to + bufferSize };\n } else if (shortfallAfter) {\n return {\n from: Math.max(0, from - bufferSize),\n to: totalRowCount,\n };\n } else {\n return { from: from - bufferSize, to: to + bufferSize };\n }\n }\n}\n\nexport const withinRange = (value: number, { from, to }: VuuRange) =>\n value >= from && value < to;\n\nexport const rangeNewItems = (\n { from: from1, to: to1 }: VuuRange,\n newRange: VuuRange,\n): VuuRange => {\n const { from: from2, to: to2 } = newRange;\n const noOverlap = from2 >= to1 || to2 <= from1;\n const newFullySubsumesOld = from2 < from1 && to2 > to1;\n return noOverlap || newFullySubsumesOld\n ? newRange\n : to2 > to1\n ? { from: to1, to: to2 }\n : { from: from2, to: from1 };\n};\n\nexport class WindowRange {\n public from: number;\n public to: number;\n\n constructor(from: number, to: number) {\n this.from = from;\n this.to = to;\n }\n\n public isWithin(index: number) {\n return withinRange(index, this);\n }\n\n //find the overlap of this range and a new one\n public overlap(from: number, to: number): [number, number] {\n return from >= this.to || to < this.from\n ? [0, 0]\n : [Math.max(from, this.from), Math.min(to, this.to)];\n }\n\n public copy(): WindowRange {\n return new WindowRange(this.from, this.to);\n }\n}\n"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,17 +1,17 @@
1
1
  {
2
- "version": "0.13.77",
2
+ "version": "0.13.78",
3
3
  "author": "heswell",
4
4
  "license": "Apache-2.0",
5
5
  "types": "types/index.d.ts",
6
6
  "devDependencies": {
7
- "@vuu-ui/vuu-data-types": "0.13.77",
8
- "@vuu-ui/vuu-table-types": "0.13.77",
9
- "@vuu-ui/vuu-filter-types": "0.13.77",
10
- "@vuu-ui/vuu-protocol-types": "0.13.77"
7
+ "@vuu-ui/vuu-data-types": "0.13.78",
8
+ "@vuu-ui/vuu-table-types": "0.13.78",
9
+ "@vuu-ui/vuu-filter-types": "0.13.78",
10
+ "@vuu-ui/vuu-protocol-types": "0.13.78"
11
11
  },
12
12
  "peerDependencies": {
13
13
  "@internationalized/date": "^3.0.0",
14
- "@vuu-ui/vuu-filter-parser": "0.13.77",
14
+ "@vuu-ui/vuu-filter-parser": "0.13.78",
15
15
  "clsx": "^2.0.0",
16
16
  "react": "^19.1.0",
17
17
  "react-dom": "^19.1.0"
package/types/index.d.ts CHANGED
@@ -41,7 +41,6 @@ export * from "./list-utils";
41
41
  export * from "./local-storage-utils";
42
42
  export * from "./logging-utils";
43
43
  export * from "./module-utils";
44
- export * from "./moving-window";
45
44
  export * from "./nanoid";
46
45
  export * from "./react-utils";
47
46
  export * from "./round-decimal";
@@ -1,108 +0,0 @@
1
- 'use strict';
2
-
3
- var columnUtils = require('./column-utils.js');
4
- var rangeUtils = require('./range-utils.js');
5
-
6
- var __defProp = Object.defineProperty;
7
- var __typeError = (msg) => {
8
- throw TypeError(msg);
9
- };
10
- var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
11
- var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
12
- var __accessCheck = (obj, member, msg) => member.has(obj) || __typeError("Cannot " + msg);
13
- var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read from private field"), getter ? getter.call(obj) : member.get(obj));
14
- var __privateAdd = (obj, member, value) => member.has(obj) ? __typeError("Cannot add the same private member more than once") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
15
- var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "write to private field"), member.set(obj, value), value);
16
- var _range;
17
- const { SELECTED } = columnUtils.metadataKeys;
18
- class MovingWindow {
19
- constructor({ from, to }) {
20
- __publicField(this, "data");
21
- __publicField(this, "rowCount", 0);
22
- __privateAdd(this, _range);
23
- __publicField(this, "setRowCount", (rowCount) => {
24
- if (rowCount < this.data.length) {
25
- this.data.length = rowCount;
26
- }
27
- this.rowCount = rowCount;
28
- });
29
- __privateSet(this, _range, new rangeUtils.WindowRange(from, to));
30
- this.data = new Array(Math.max(0, to - from));
31
- this.rowCount = 0;
32
- }
33
- add(data) {
34
- const [index] = data;
35
- if (this.isWithinRange(index)) {
36
- const internalIndex = index - __privateGet(this, _range).from;
37
- this.data[internalIndex] = data;
38
- }
39
- }
40
- getAtIndex(index) {
41
- return __privateGet(this, _range).isWithin(index) && this.data[index - __privateGet(this, _range).from] != null ? this.data[index - __privateGet(this, _range).from] : void 0;
42
- }
43
- isWithinRange(index) {
44
- return __privateGet(this, _range).isWithin(index);
45
- }
46
- setRange({ from, to }) {
47
- if (from !== __privateGet(this, _range).from || to !== __privateGet(this, _range).to) {
48
- const [overlapFrom, overlapTo] = __privateGet(this, _range).overlap(from, to);
49
- const newData = new Array(Math.max(0, to - from));
50
- for (let i = overlapFrom; i < overlapTo; i++) {
51
- const data = this.getAtIndex(i);
52
- if (data) {
53
- const index = i - from;
54
- newData[index] = data;
55
- }
56
- }
57
- this.data = newData;
58
- __privateGet(this, _range).from = from;
59
- __privateGet(this, _range).to = to;
60
- }
61
- }
62
- getSelectedRows() {
63
- return this.data.filter((row) => row[SELECTED] !== 0);
64
- }
65
- get range() {
66
- return __privateGet(this, _range);
67
- }
68
- slice() {
69
- const data = [];
70
- const { from } = this.range;
71
- for (let i = 0; i < this.data.length; i++) {
72
- if (this.data[i]) {
73
- data.push(this.data[i]);
74
- } else {
75
- data.push([from + i, from + i, true, false, 1, 0, "", 0, 0, false]);
76
- }
77
- }
78
- return data;
79
- }
80
- /**
81
- * Update all rows by splicing the supplied index. Used when a column
82
- * is removed.
83
- */
84
- spliceDataAtIndex(index) {
85
- if (index >= 10) {
86
- for (let i = 0; i < this.data.length; i++) {
87
- this.data[i] = this.data[i].toSpliced(index, 1);
88
- }
89
- } else {
90
- throw Error(`[MovingWindow] canno splir metadata value from Row`);
91
- }
92
- }
93
- // TODO make this more performant, see implementation in
94
- // array-backed-moving-window - use same implementation
95
- get hasAllRowsWithinRange() {
96
- const { from, to } = __privateGet(this, _range);
97
- for (let i = from; i < to; i++) {
98
- if (this.getAtIndex(i) === void 0) {
99
- return false;
100
- }
101
- }
102
- return true;
103
- }
104
- }
105
- _range = new WeakMap();
106
-
107
- exports.MovingWindow = MovingWindow;
108
- //# sourceMappingURL=moving-window.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"moving-window.js","sources":["../../../../../../packages/vuu-utils/src/moving-window.ts"],"sourcesContent":["import { DataSourceRow } from \"@vuu-ui/vuu-data-types\";\nimport { VuuRange } from \"@vuu-ui/vuu-protocol-types\";\nimport { metadataKeys } from \"./column-utils\";\nimport { WindowRange } from \"./range-utils\";\n\nconst { SELECTED } = metadataKeys;\n\nexport class MovingWindow {\n public data: DataSourceRow[];\n public rowCount = 0;\n #range: WindowRange;\n\n constructor({ from, to }: VuuRange) {\n this.#range = new WindowRange(from, to);\n //internal data is always 0 based, we add range.from to determine an offset\n this.data = new Array(Math.max(0, to - from));\n this.rowCount = 0;\n }\n\n setRowCount = (rowCount: number) => {\n if (rowCount < this.data.length) {\n this.data.length = rowCount;\n }\n\n this.rowCount = rowCount;\n };\n\n add(data: DataSourceRow) {\n const [index] = data;\n if (this.isWithinRange(index)) {\n const internalIndex = index - this.#range.from;\n this.data[internalIndex] = data;\n }\n }\n\n getAtIndex(index: number) {\n return this.#range.isWithin(index) &&\n this.data[index - this.#range.from] != null\n ? this.data[index - this.#range.from]\n : undefined;\n }\n\n isWithinRange(index: number) {\n return this.#range.isWithin(index);\n }\n\n setRange({ from, to }: VuuRange) {\n if (from !== this.#range.from || to !== this.#range.to) {\n const [overlapFrom, overlapTo] = this.#range.overlap(from, to);\n const newData = new Array(Math.max(0, to - from));\n for (let i = overlapFrom; i < overlapTo; i++) {\n const data = this.getAtIndex(i);\n if (data) {\n const index = i - from;\n newData[index] = data;\n }\n }\n this.data = newData;\n this.#range.from = from;\n this.#range.to = to;\n }\n }\n\n getSelectedRows() {\n return this.data.filter((row) => row[SELECTED] !== 0);\n }\n\n get range() {\n return this.#range;\n }\n\n slice(): DataSourceRow[] {\n const data: DataSourceRow[] = [];\n const { from } = this.range;\n for (let i = 0; i < this.data.length; i++) {\n if (this.data[i]) {\n data.push(this.data[i]);\n } else {\n data.push([from + i, from + i, true, false, 1, 0, \"\", 0, 0, false]);\n }\n }\n return data;\n }\n\n /**\n * Update all rows by splicing the supplied index. Used when a column\n * is removed.\n */\n spliceDataAtIndex(index: number) {\n if (index >= 10) {\n for (let i = 0; i < this.data.length; i++) {\n this.data[i] = this.data[i].toSpliced(index, 1) as DataSourceRow;\n }\n } else {\n throw Error(`[MovingWindow] canno splir metadata value from Row`);\n }\n }\n\n // TODO make this more performant, see implementation in\n // array-backed-moving-window - use same implementation\n get hasAllRowsWithinRange(): boolean {\n const { from, to } = this.#range;\n\n for (let i = from; i < to; i++) {\n if (this.getAtIndex(i) === undefined) {\n return false;\n }\n }\n return true;\n }\n}\n"],"names":["metadataKeys","WindowRange"],"mappings":"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"}
@@ -1,106 +0,0 @@
1
- import { metadataKeys } from './column-utils.js';
2
- import { WindowRange } from './range-utils.js';
3
-
4
- var __defProp = Object.defineProperty;
5
- var __typeError = (msg) => {
6
- throw TypeError(msg);
7
- };
8
- var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
9
- var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
10
- var __accessCheck = (obj, member, msg) => member.has(obj) || __typeError("Cannot " + msg);
11
- var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read from private field"), getter ? getter.call(obj) : member.get(obj));
12
- var __privateAdd = (obj, member, value) => member.has(obj) ? __typeError("Cannot add the same private member more than once") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
13
- var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "write to private field"), member.set(obj, value), value);
14
- var _range;
15
- const { SELECTED } = metadataKeys;
16
- class MovingWindow {
17
- constructor({ from, to }) {
18
- __publicField(this, "data");
19
- __publicField(this, "rowCount", 0);
20
- __privateAdd(this, _range);
21
- __publicField(this, "setRowCount", (rowCount) => {
22
- if (rowCount < this.data.length) {
23
- this.data.length = rowCount;
24
- }
25
- this.rowCount = rowCount;
26
- });
27
- __privateSet(this, _range, new WindowRange(from, to));
28
- this.data = new Array(Math.max(0, to - from));
29
- this.rowCount = 0;
30
- }
31
- add(data) {
32
- const [index] = data;
33
- if (this.isWithinRange(index)) {
34
- const internalIndex = index - __privateGet(this, _range).from;
35
- this.data[internalIndex] = data;
36
- }
37
- }
38
- getAtIndex(index) {
39
- return __privateGet(this, _range).isWithin(index) && this.data[index - __privateGet(this, _range).from] != null ? this.data[index - __privateGet(this, _range).from] : void 0;
40
- }
41
- isWithinRange(index) {
42
- return __privateGet(this, _range).isWithin(index);
43
- }
44
- setRange({ from, to }) {
45
- if (from !== __privateGet(this, _range).from || to !== __privateGet(this, _range).to) {
46
- const [overlapFrom, overlapTo] = __privateGet(this, _range).overlap(from, to);
47
- const newData = new Array(Math.max(0, to - from));
48
- for (let i = overlapFrom; i < overlapTo; i++) {
49
- const data = this.getAtIndex(i);
50
- if (data) {
51
- const index = i - from;
52
- newData[index] = data;
53
- }
54
- }
55
- this.data = newData;
56
- __privateGet(this, _range).from = from;
57
- __privateGet(this, _range).to = to;
58
- }
59
- }
60
- getSelectedRows() {
61
- return this.data.filter((row) => row[SELECTED] !== 0);
62
- }
63
- get range() {
64
- return __privateGet(this, _range);
65
- }
66
- slice() {
67
- const data = [];
68
- const { from } = this.range;
69
- for (let i = 0; i < this.data.length; i++) {
70
- if (this.data[i]) {
71
- data.push(this.data[i]);
72
- } else {
73
- data.push([from + i, from + i, true, false, 1, 0, "", 0, 0, false]);
74
- }
75
- }
76
- return data;
77
- }
78
- /**
79
- * Update all rows by splicing the supplied index. Used when a column
80
- * is removed.
81
- */
82
- spliceDataAtIndex(index) {
83
- if (index >= 10) {
84
- for (let i = 0; i < this.data.length; i++) {
85
- this.data[i] = this.data[i].toSpliced(index, 1);
86
- }
87
- } else {
88
- throw Error(`[MovingWindow] canno splir metadata value from Row`);
89
- }
90
- }
91
- // TODO make this more performant, see implementation in
92
- // array-backed-moving-window - use same implementation
93
- get hasAllRowsWithinRange() {
94
- const { from, to } = __privateGet(this, _range);
95
- for (let i = from; i < to; i++) {
96
- if (this.getAtIndex(i) === void 0) {
97
- return false;
98
- }
99
- }
100
- return true;
101
- }
102
- }
103
- _range = new WeakMap();
104
-
105
- export { MovingWindow };
106
- //# sourceMappingURL=moving-window.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"moving-window.js","sources":["../../../../../../packages/vuu-utils/src/moving-window.ts"],"sourcesContent":["import { DataSourceRow } from \"@vuu-ui/vuu-data-types\";\nimport { VuuRange } from \"@vuu-ui/vuu-protocol-types\";\nimport { metadataKeys } from \"./column-utils\";\nimport { WindowRange } from \"./range-utils\";\n\nconst { SELECTED } = metadataKeys;\n\nexport class MovingWindow {\n public data: DataSourceRow[];\n public rowCount = 0;\n #range: WindowRange;\n\n constructor({ from, to }: VuuRange) {\n this.#range = new WindowRange(from, to);\n //internal data is always 0 based, we add range.from to determine an offset\n this.data = new Array(Math.max(0, to - from));\n this.rowCount = 0;\n }\n\n setRowCount = (rowCount: number) => {\n if (rowCount < this.data.length) {\n this.data.length = rowCount;\n }\n\n this.rowCount = rowCount;\n };\n\n add(data: DataSourceRow) {\n const [index] = data;\n if (this.isWithinRange(index)) {\n const internalIndex = index - this.#range.from;\n this.data[internalIndex] = data;\n }\n }\n\n getAtIndex(index: number) {\n return this.#range.isWithin(index) &&\n this.data[index - this.#range.from] != null\n ? this.data[index - this.#range.from]\n : undefined;\n }\n\n isWithinRange(index: number) {\n return this.#range.isWithin(index);\n }\n\n setRange({ from, to }: VuuRange) {\n if (from !== this.#range.from || to !== this.#range.to) {\n const [overlapFrom, overlapTo] = this.#range.overlap(from, to);\n const newData = new Array(Math.max(0, to - from));\n for (let i = overlapFrom; i < overlapTo; i++) {\n const data = this.getAtIndex(i);\n if (data) {\n const index = i - from;\n newData[index] = data;\n }\n }\n this.data = newData;\n this.#range.from = from;\n this.#range.to = to;\n }\n }\n\n getSelectedRows() {\n return this.data.filter((row) => row[SELECTED] !== 0);\n }\n\n get range() {\n return this.#range;\n }\n\n slice(): DataSourceRow[] {\n const data: DataSourceRow[] = [];\n const { from } = this.range;\n for (let i = 0; i < this.data.length; i++) {\n if (this.data[i]) {\n data.push(this.data[i]);\n } else {\n data.push([from + i, from + i, true, false, 1, 0, \"\", 0, 0, false]);\n }\n }\n return data;\n }\n\n /**\n * Update all rows by splicing the supplied index. Used when a column\n * is removed.\n */\n spliceDataAtIndex(index: number) {\n if (index >= 10) {\n for (let i = 0; i < this.data.length; i++) {\n this.data[i] = this.data[i].toSpliced(index, 1) as DataSourceRow;\n }\n } else {\n throw Error(`[MovingWindow] canno splir metadata value from Row`);\n }\n }\n\n // TODO make this more performant, see implementation in\n // array-backed-moving-window - use same implementation\n get hasAllRowsWithinRange(): boolean {\n const { from, to } = this.#range;\n\n for (let i = from; i < to; i++) {\n if (this.getAtIndex(i) === undefined) {\n return false;\n }\n }\n return true;\n }\n}\n"],"names":[],"mappings":"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"}
@@ -1,23 +0,0 @@
1
- import { DataSourceRow } from "@vuu-ui/vuu-data-types";
2
- import { VuuRange } from "@vuu-ui/vuu-protocol-types";
3
- import { WindowRange } from "./range-utils";
4
- export declare class MovingWindow {
5
- #private;
6
- data: DataSourceRow[];
7
- rowCount: number;
8
- constructor({ from, to }: VuuRange);
9
- setRowCount: (rowCount: number) => void;
10
- add(data: DataSourceRow): void;
11
- getAtIndex(index: number): DataSourceRow | undefined;
12
- isWithinRange(index: number): boolean;
13
- setRange({ from, to }: VuuRange): void;
14
- getSelectedRows(): DataSourceRow[];
15
- get range(): WindowRange;
16
- slice(): DataSourceRow[];
17
- /**
18
- * Update all rows by splicing the supplied index. Used when a column
19
- * is removed.
20
- */
21
- spliceDataAtIndex(index: number): void;
22
- get hasAllRowsWithinRange(): boolean;
23
- }