ducjs 2.2.3 → 2.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (39) hide show
  1. package/dist/flatbuffers/duc/document-grid-align-items.d.ts +5 -0
  2. package/dist/flatbuffers/duc/document-grid-align-items.js +8 -0
  3. package/dist/flatbuffers/duc/document-grid-config.d.ts +24 -0
  4. package/dist/flatbuffers/duc/document-grid-config.js +81 -0
  5. package/dist/flatbuffers/duc/duc-doc-element.d.ts +6 -0
  6. package/dist/flatbuffers/duc/duc-doc-element.js +16 -1
  7. package/dist/flatbuffers/duc/duc-model-element.d.ts +26 -0
  8. package/dist/flatbuffers/duc/duc-model-element.js +79 -0
  9. package/dist/flatbuffers/duc/duc-pdf-element.d.ts +3 -1
  10. package/dist/flatbuffers/duc/duc-pdf-element.js +9 -7
  11. package/dist/flatbuffers/duc/element.d.ts +5 -3
  12. package/dist/flatbuffers/duc/element.js +4 -0
  13. package/dist/flatbuffers/duc.d.ts +3 -0
  14. package/dist/flatbuffers/duc.js +3 -0
  15. package/dist/index.d.ts +4 -3
  16. package/dist/index.js +4 -3
  17. package/dist/lazy-files.d.ts +84 -0
  18. package/dist/lazy-files.js +207 -0
  19. package/dist/parse.d.ts +35 -2
  20. package/dist/parse.js +244 -14
  21. package/dist/restore/restoreDataState.d.ts +1 -6
  22. package/dist/restore/restoreDataState.js +4 -11
  23. package/dist/restore/restoreElements.js +51 -26
  24. package/dist/serialize.js +56 -27
  25. package/dist/types/elements/index.d.ts +32 -31
  26. package/dist/types/elements/typeChecks.d.ts +4 -1
  27. package/dist/types/elements/typeChecks.js +7 -1
  28. package/dist/types/index.d.ts +3 -3
  29. package/dist/types/index.js +1 -1
  30. package/dist/utils/constants.d.ts +18 -14
  31. package/dist/utils/constants.js +28 -15
  32. package/dist/utils/elements/freedrawElement.d.ts +6 -0
  33. package/dist/utils/elements/freedrawElement.js +28 -11
  34. package/dist/utils/elements/newElement.d.ts +2 -2
  35. package/dist/utils/elements/newElement.js +14 -5
  36. package/dist/utils/elements/textElement.d.ts +3 -3
  37. package/dist/utils/elements/textElement.js +43 -16
  38. package/dist/utils/state/index.js +1 -1
  39. package/package.json +1 -1
@@ -0,0 +1,5 @@
1
+ export declare enum DOCUMENT_GRID_ALIGN_ITEMS {
2
+ START = 10,
3
+ CENTER = 11,
4
+ END = 12
5
+ }
@@ -0,0 +1,8 @@
1
+ // automatically generated by the FlatBuffers compiler, do not modify
2
+ /* eslint-disable @typescript-eslint/no-unused-vars, @typescript-eslint/no-explicit-any, @typescript-eslint/no-non-null-assertion */
3
+ export var DOCUMENT_GRID_ALIGN_ITEMS;
4
+ (function (DOCUMENT_GRID_ALIGN_ITEMS) {
5
+ DOCUMENT_GRID_ALIGN_ITEMS[DOCUMENT_GRID_ALIGN_ITEMS["START"] = 10] = "START";
6
+ DOCUMENT_GRID_ALIGN_ITEMS[DOCUMENT_GRID_ALIGN_ITEMS["CENTER"] = 11] = "CENTER";
7
+ DOCUMENT_GRID_ALIGN_ITEMS[DOCUMENT_GRID_ALIGN_ITEMS["END"] = 12] = "END";
8
+ })(DOCUMENT_GRID_ALIGN_ITEMS || (DOCUMENT_GRID_ALIGN_ITEMS = {}));
@@ -0,0 +1,24 @@
1
+ import * as flatbuffers from 'flatbuffers';
2
+ import { DOCUMENT_GRID_ALIGN_ITEMS } from '../duc/document-grid-align-items';
3
+ export declare class DocumentGridConfig {
4
+ bb: flatbuffers.ByteBuffer | null;
5
+ bb_pos: number;
6
+ __init(i: number, bb: flatbuffers.ByteBuffer): DocumentGridConfig;
7
+ static getRootAsDocumentGridConfig(bb: flatbuffers.ByteBuffer, obj?: DocumentGridConfig): DocumentGridConfig;
8
+ static getSizePrefixedRootAsDocumentGridConfig(bb: flatbuffers.ByteBuffer, obj?: DocumentGridConfig): DocumentGridConfig;
9
+ columns(): number;
10
+ gapX(): number;
11
+ gapY(): number;
12
+ alignItems(): DOCUMENT_GRID_ALIGN_ITEMS | null;
13
+ firstPageAlone(): boolean;
14
+ scale(): number;
15
+ static startDocumentGridConfig(builder: flatbuffers.Builder): void;
16
+ static addColumns(builder: flatbuffers.Builder, columns: number): void;
17
+ static addGapX(builder: flatbuffers.Builder, gapX: number): void;
18
+ static addGapY(builder: flatbuffers.Builder, gapY: number): void;
19
+ static addAlignItems(builder: flatbuffers.Builder, alignItems: DOCUMENT_GRID_ALIGN_ITEMS): void;
20
+ static addFirstPageAlone(builder: flatbuffers.Builder, firstPageAlone: boolean): void;
21
+ static addScale(builder: flatbuffers.Builder, scale: number): void;
22
+ static endDocumentGridConfig(builder: flatbuffers.Builder): flatbuffers.Offset;
23
+ static createDocumentGridConfig(builder: flatbuffers.Builder, columns: number, gapX: number, gapY: number, alignItems: DOCUMENT_GRID_ALIGN_ITEMS | null, firstPageAlone: boolean, scale: number): flatbuffers.Offset;
24
+ }
@@ -0,0 +1,81 @@
1
+ // automatically generated by the FlatBuffers compiler, do not modify
2
+ /* eslint-disable @typescript-eslint/no-unused-vars, @typescript-eslint/no-explicit-any, @typescript-eslint/no-non-null-assertion */
3
+ import * as flatbuffers from 'flatbuffers';
4
+ export class DocumentGridConfig {
5
+ constructor() {
6
+ this.bb = null;
7
+ this.bb_pos = 0;
8
+ }
9
+ __init(i, bb) {
10
+ this.bb_pos = i;
11
+ this.bb = bb;
12
+ return this;
13
+ }
14
+ static getRootAsDocumentGridConfig(bb, obj) {
15
+ return (obj || new DocumentGridConfig()).__init(bb.readInt32(bb.position()) + bb.position(), bb);
16
+ }
17
+ static getSizePrefixedRootAsDocumentGridConfig(bb, obj) {
18
+ bb.setPosition(bb.position() + flatbuffers.SIZE_PREFIX_LENGTH);
19
+ return (obj || new DocumentGridConfig()).__init(bb.readInt32(bb.position()) + bb.position(), bb);
20
+ }
21
+ columns() {
22
+ const offset = this.bb.__offset(this.bb_pos, 4);
23
+ return offset ? this.bb.readInt32(this.bb_pos + offset) : 0;
24
+ }
25
+ gapX() {
26
+ const offset = this.bb.__offset(this.bb_pos, 6);
27
+ return offset ? this.bb.readFloat64(this.bb_pos + offset) : 0.0;
28
+ }
29
+ gapY() {
30
+ const offset = this.bb.__offset(this.bb_pos, 8);
31
+ return offset ? this.bb.readFloat64(this.bb_pos + offset) : 0.0;
32
+ }
33
+ alignItems() {
34
+ const offset = this.bb.__offset(this.bb_pos, 10);
35
+ return offset ? this.bb.readUint8(this.bb_pos + offset) : null;
36
+ }
37
+ firstPageAlone() {
38
+ const offset = this.bb.__offset(this.bb_pos, 12);
39
+ return offset ? !!this.bb.readInt8(this.bb_pos + offset) : false;
40
+ }
41
+ scale() {
42
+ const offset = this.bb.__offset(this.bb_pos, 14);
43
+ return offset ? this.bb.readFloat64(this.bb_pos + offset) : 0.0;
44
+ }
45
+ static startDocumentGridConfig(builder) {
46
+ builder.startObject(6);
47
+ }
48
+ static addColumns(builder, columns) {
49
+ builder.addFieldInt32(0, columns, 0);
50
+ }
51
+ static addGapX(builder, gapX) {
52
+ builder.addFieldFloat64(1, gapX, 0.0);
53
+ }
54
+ static addGapY(builder, gapY) {
55
+ builder.addFieldFloat64(2, gapY, 0.0);
56
+ }
57
+ static addAlignItems(builder, alignItems) {
58
+ builder.addFieldInt8(3, alignItems, null);
59
+ }
60
+ static addFirstPageAlone(builder, firstPageAlone) {
61
+ builder.addFieldInt8(4, +firstPageAlone, +false);
62
+ }
63
+ static addScale(builder, scale) {
64
+ builder.addFieldFloat64(5, scale, 0.0);
65
+ }
66
+ static endDocumentGridConfig(builder) {
67
+ const offset = builder.endObject();
68
+ return offset;
69
+ }
70
+ static createDocumentGridConfig(builder, columns, gapX, gapY, alignItems, firstPageAlone, scale) {
71
+ DocumentGridConfig.startDocumentGridConfig(builder);
72
+ DocumentGridConfig.addColumns(builder, columns);
73
+ DocumentGridConfig.addGapX(builder, gapX);
74
+ DocumentGridConfig.addGapY(builder, gapY);
75
+ if (alignItems !== null)
76
+ DocumentGridConfig.addAlignItems(builder, alignItems);
77
+ DocumentGridConfig.addFirstPageAlone(builder, firstPageAlone);
78
+ DocumentGridConfig.addScale(builder, scale);
79
+ return DocumentGridConfig.endDocumentGridConfig(builder);
80
+ }
81
+ }
@@ -1,5 +1,6 @@
1
1
  import * as flatbuffers from 'flatbuffers';
2
2
  import { ColumnLayout } from '../duc/column-layout';
3
+ import { DocumentGridConfig } from '../duc/document-grid-config';
3
4
  import { DucDocStyle } from '../duc/duc-doc-style';
4
5
  import { DucTextDynamicPart } from '../duc/duc-text-dynamic-part';
5
6
  import { TEXT_FLOW_DIRECTION } from '../duc/text-flow-direction';
@@ -19,6 +20,9 @@ export declare class DucDocElement {
19
20
  flowDirection(): TEXT_FLOW_DIRECTION | null;
20
21
  columns(obj?: ColumnLayout): ColumnLayout | null;
21
22
  autoResize(): boolean;
23
+ gridConfig(obj?: DocumentGridConfig): DocumentGridConfig | null;
24
+ fileId(): string | null;
25
+ fileId(optionalEncoding: flatbuffers.Encoding): string | Uint8Array | null;
22
26
  static startDucDocElement(builder: flatbuffers.Builder): void;
23
27
  static addBase(builder: flatbuffers.Builder, baseOffset: flatbuffers.Offset): void;
24
28
  static addStyle(builder: flatbuffers.Builder, styleOffset: flatbuffers.Offset): void;
@@ -29,5 +33,7 @@ export declare class DucDocElement {
29
33
  static addFlowDirection(builder: flatbuffers.Builder, flowDirection: TEXT_FLOW_DIRECTION): void;
30
34
  static addColumns(builder: flatbuffers.Builder, columnsOffset: flatbuffers.Offset): void;
31
35
  static addAutoResize(builder: flatbuffers.Builder, autoResize: boolean): void;
36
+ static addGridConfig(builder: flatbuffers.Builder, gridConfigOffset: flatbuffers.Offset): void;
37
+ static addFileId(builder: flatbuffers.Builder, fileIdOffset: flatbuffers.Offset): void;
32
38
  static endDucDocElement(builder: flatbuffers.Builder): flatbuffers.Offset;
33
39
  }
@@ -2,6 +2,7 @@
2
2
  /* eslint-disable @typescript-eslint/no-unused-vars, @typescript-eslint/no-explicit-any, @typescript-eslint/no-non-null-assertion */
3
3
  import * as flatbuffers from 'flatbuffers';
4
4
  import { ColumnLayout } from '../duc/column-layout';
5
+ import { DocumentGridConfig } from '../duc/document-grid-config';
5
6
  import { DucDocStyle } from '../duc/duc-doc-style';
6
7
  import { DucTextDynamicPart } from '../duc/duc-text-dynamic-part';
7
8
  import { _DucElementBase } from '../duc/duc-element-base';
@@ -54,8 +55,16 @@ export class DucDocElement {
54
55
  const offset = this.bb.__offset(this.bb_pos, 16);
55
56
  return offset ? !!this.bb.readInt8(this.bb_pos + offset) : false;
56
57
  }
58
+ gridConfig(obj) {
59
+ const offset = this.bb.__offset(this.bb_pos, 18);
60
+ return offset ? (obj || new DocumentGridConfig()).__init(this.bb.__indirect(this.bb_pos + offset), this.bb) : null;
61
+ }
62
+ fileId(optionalEncoding) {
63
+ const offset = this.bb.__offset(this.bb_pos, 20);
64
+ return offset ? this.bb.__string(this.bb_pos + offset, optionalEncoding) : null;
65
+ }
57
66
  static startDucDocElement(builder) {
58
- builder.startObject(7);
67
+ builder.startObject(9);
59
68
  }
60
69
  static addBase(builder, baseOffset) {
61
70
  builder.addFieldOffset(0, baseOffset, 0);
@@ -88,6 +97,12 @@ export class DucDocElement {
88
97
  static addAutoResize(builder, autoResize) {
89
98
  builder.addFieldInt8(6, +autoResize, +false);
90
99
  }
100
+ static addGridConfig(builder, gridConfigOffset) {
101
+ builder.addFieldOffset(7, gridConfigOffset, 0);
102
+ }
103
+ static addFileId(builder, fileIdOffset) {
104
+ builder.addFieldOffset(8, fileIdOffset, 0);
105
+ }
91
106
  static endDucDocElement(builder) {
92
107
  const offset = builder.endObject();
93
108
  return offset;
@@ -0,0 +1,26 @@
1
+ import * as flatbuffers from 'flatbuffers';
2
+ import { _DucElementBase } from '../duc/duc-element-base';
3
+ export declare class DucModelElement {
4
+ bb: flatbuffers.ByteBuffer | null;
5
+ bb_pos: number;
6
+ __init(i: number, bb: flatbuffers.ByteBuffer): DucModelElement;
7
+ static getRootAsDucModelElement(bb: flatbuffers.ByteBuffer, obj?: DucModelElement): DucModelElement;
8
+ static getSizePrefixedRootAsDucModelElement(bb: flatbuffers.ByteBuffer, obj?: DucModelElement): DucModelElement;
9
+ base(obj?: _DucElementBase): _DucElementBase | null;
10
+ source(): string | null;
11
+ source(optionalEncoding: flatbuffers.Encoding): string | Uint8Array | null;
12
+ svgPath(): string | null;
13
+ svgPath(optionalEncoding: flatbuffers.Encoding): string | Uint8Array | null;
14
+ fileIds(index: number): string;
15
+ fileIds(index: number, optionalEncoding: flatbuffers.Encoding): string | Uint8Array;
16
+ fileIdsLength(): number;
17
+ static startDucModelElement(builder: flatbuffers.Builder): void;
18
+ static addBase(builder: flatbuffers.Builder, baseOffset: flatbuffers.Offset): void;
19
+ static addSource(builder: flatbuffers.Builder, sourceOffset: flatbuffers.Offset): void;
20
+ static addSvgPath(builder: flatbuffers.Builder, svgPathOffset: flatbuffers.Offset): void;
21
+ static addFileIds(builder: flatbuffers.Builder, fileIdsOffset: flatbuffers.Offset): void;
22
+ static createFileIdsVector(builder: flatbuffers.Builder, data: flatbuffers.Offset[]): flatbuffers.Offset;
23
+ static startFileIdsVector(builder: flatbuffers.Builder, numElems: number): void;
24
+ static endDucModelElement(builder: flatbuffers.Builder): flatbuffers.Offset;
25
+ static createDucModelElement(builder: flatbuffers.Builder, baseOffset: flatbuffers.Offset, sourceOffset: flatbuffers.Offset, svgPathOffset: flatbuffers.Offset, fileIdsOffset: flatbuffers.Offset): flatbuffers.Offset;
26
+ }
@@ -0,0 +1,79 @@
1
+ // automatically generated by the FlatBuffers compiler, do not modify
2
+ /* eslint-disable @typescript-eslint/no-unused-vars, @typescript-eslint/no-explicit-any, @typescript-eslint/no-non-null-assertion */
3
+ import * as flatbuffers from 'flatbuffers';
4
+ import { _DucElementBase } from '../duc/duc-element-base';
5
+ export class DucModelElement {
6
+ constructor() {
7
+ this.bb = null;
8
+ this.bb_pos = 0;
9
+ }
10
+ __init(i, bb) {
11
+ this.bb_pos = i;
12
+ this.bb = bb;
13
+ return this;
14
+ }
15
+ static getRootAsDucModelElement(bb, obj) {
16
+ return (obj || new DucModelElement()).__init(bb.readInt32(bb.position()) + bb.position(), bb);
17
+ }
18
+ static getSizePrefixedRootAsDucModelElement(bb, obj) {
19
+ bb.setPosition(bb.position() + flatbuffers.SIZE_PREFIX_LENGTH);
20
+ return (obj || new DucModelElement()).__init(bb.readInt32(bb.position()) + bb.position(), bb);
21
+ }
22
+ base(obj) {
23
+ const offset = this.bb.__offset(this.bb_pos, 4);
24
+ return offset ? (obj || new _DucElementBase()).__init(this.bb.__indirect(this.bb_pos + offset), this.bb) : null;
25
+ }
26
+ source(optionalEncoding) {
27
+ const offset = this.bb.__offset(this.bb_pos, 6);
28
+ return offset ? this.bb.__string(this.bb_pos + offset, optionalEncoding) : null;
29
+ }
30
+ svgPath(optionalEncoding) {
31
+ const offset = this.bb.__offset(this.bb_pos, 8);
32
+ return offset ? this.bb.__string(this.bb_pos + offset, optionalEncoding) : null;
33
+ }
34
+ fileIds(index, optionalEncoding) {
35
+ const offset = this.bb.__offset(this.bb_pos, 10);
36
+ return offset ? this.bb.__string(this.bb.__vector(this.bb_pos + offset) + index * 4, optionalEncoding) : null;
37
+ }
38
+ fileIdsLength() {
39
+ const offset = this.bb.__offset(this.bb_pos, 10);
40
+ return offset ? this.bb.__vector_len(this.bb_pos + offset) : 0;
41
+ }
42
+ static startDucModelElement(builder) {
43
+ builder.startObject(4);
44
+ }
45
+ static addBase(builder, baseOffset) {
46
+ builder.addFieldOffset(0, baseOffset, 0);
47
+ }
48
+ static addSource(builder, sourceOffset) {
49
+ builder.addFieldOffset(1, sourceOffset, 0);
50
+ }
51
+ static addSvgPath(builder, svgPathOffset) {
52
+ builder.addFieldOffset(2, svgPathOffset, 0);
53
+ }
54
+ static addFileIds(builder, fileIdsOffset) {
55
+ builder.addFieldOffset(3, fileIdsOffset, 0);
56
+ }
57
+ static createFileIdsVector(builder, data) {
58
+ builder.startVector(4, data.length, 4);
59
+ for (let i = data.length - 1; i >= 0; i--) {
60
+ builder.addOffset(data[i]);
61
+ }
62
+ return builder.endVector();
63
+ }
64
+ static startFileIdsVector(builder, numElems) {
65
+ builder.startVector(4, numElems, 4);
66
+ }
67
+ static endDucModelElement(builder) {
68
+ const offset = builder.endObject();
69
+ return offset;
70
+ }
71
+ static createDucModelElement(builder, baseOffset, sourceOffset, svgPathOffset, fileIdsOffset) {
72
+ DucModelElement.startDucModelElement(builder);
73
+ DucModelElement.addBase(builder, baseOffset);
74
+ DucModelElement.addSource(builder, sourceOffset);
75
+ DucModelElement.addSvgPath(builder, svgPathOffset);
76
+ DucModelElement.addFileIds(builder, fileIdsOffset);
77
+ return DucModelElement.endDucModelElement(builder);
78
+ }
79
+ }
@@ -1,4 +1,5 @@
1
1
  import * as flatbuffers from 'flatbuffers';
2
+ import { DocumentGridConfig } from '../duc/document-grid-config';
2
3
  import { _DucElementBase } from '../duc/duc-element-base';
3
4
  export declare class DucPdfElement {
4
5
  bb: flatbuffers.ByteBuffer | null;
@@ -9,9 +10,10 @@ export declare class DucPdfElement {
9
10
  base(obj?: _DucElementBase): _DucElementBase | null;
10
11
  fileId(): string | null;
11
12
  fileId(optionalEncoding: flatbuffers.Encoding): string | Uint8Array | null;
13
+ gridConfig(obj?: DocumentGridConfig): DocumentGridConfig | null;
12
14
  static startDucPdfElement(builder: flatbuffers.Builder): void;
13
15
  static addBase(builder: flatbuffers.Builder, baseOffset: flatbuffers.Offset): void;
14
16
  static addFileId(builder: flatbuffers.Builder, fileIdOffset: flatbuffers.Offset): void;
17
+ static addGridConfig(builder: flatbuffers.Builder, gridConfigOffset: flatbuffers.Offset): void;
15
18
  static endDucPdfElement(builder: flatbuffers.Builder): flatbuffers.Offset;
16
- static createDucPdfElement(builder: flatbuffers.Builder, baseOffset: flatbuffers.Offset, fileIdOffset: flatbuffers.Offset): flatbuffers.Offset;
17
19
  }
@@ -1,6 +1,7 @@
1
1
  // automatically generated by the FlatBuffers compiler, do not modify
2
2
  /* eslint-disable @typescript-eslint/no-unused-vars, @typescript-eslint/no-explicit-any, @typescript-eslint/no-non-null-assertion */
3
3
  import * as flatbuffers from 'flatbuffers';
4
+ import { DocumentGridConfig } from '../duc/document-grid-config';
4
5
  import { _DucElementBase } from '../duc/duc-element-base';
5
6
  export class DucPdfElement {
6
7
  constructor() {
@@ -27,8 +28,12 @@ export class DucPdfElement {
27
28
  const offset = this.bb.__offset(this.bb_pos, 6);
28
29
  return offset ? this.bb.__string(this.bb_pos + offset, optionalEncoding) : null;
29
30
  }
31
+ gridConfig(obj) {
32
+ const offset = this.bb.__offset(this.bb_pos, 8);
33
+ return offset ? (obj || new DocumentGridConfig()).__init(this.bb.__indirect(this.bb_pos + offset), this.bb) : null;
34
+ }
30
35
  static startDucPdfElement(builder) {
31
- builder.startObject(2);
36
+ builder.startObject(3);
32
37
  }
33
38
  static addBase(builder, baseOffset) {
34
39
  builder.addFieldOffset(0, baseOffset, 0);
@@ -36,14 +41,11 @@ export class DucPdfElement {
36
41
  static addFileId(builder, fileIdOffset) {
37
42
  builder.addFieldOffset(1, fileIdOffset, 0);
38
43
  }
44
+ static addGridConfig(builder, gridConfigOffset) {
45
+ builder.addFieldOffset(2, gridConfigOffset, 0);
46
+ }
39
47
  static endDucPdfElement(builder) {
40
48
  const offset = builder.endObject();
41
49
  return offset;
42
50
  }
43
- static createDucPdfElement(builder, baseOffset, fileIdOffset) {
44
- DucPdfElement.startDucPdfElement(builder);
45
- DucPdfElement.addBase(builder, baseOffset);
46
- DucPdfElement.addFileId(builder, fileIdOffset);
47
- return DucPdfElement.endDucPdfElement(builder);
48
- }
49
51
  }
@@ -11,6 +11,7 @@ import { DucImageElement } from '../duc/duc-image-element';
11
11
  import { DucLeaderElement } from '../duc/duc-leader-element';
12
12
  import { DucLinearElement } from '../duc/duc-linear-element';
13
13
  import { DucMermaidElement } from '../duc/duc-mermaid-element';
14
+ import { DucModelElement } from '../duc/duc-model-element';
14
15
  import { DucParametricElement } from '../duc/duc-parametric-element';
15
16
  import { DucPdfElement } from '../duc/duc-pdf-element';
16
17
  import { DucPlotElement } from '../duc/duc-plot-element';
@@ -43,7 +44,8 @@ export declare enum Element {
43
44
  DucDimensionElement = 19,
44
45
  DucFeatureControlFrameElement = 20,
45
46
  DucDocElement = 21,
46
- DucParametricElement = 22
47
+ DucParametricElement = 22,
48
+ DucModelElement = 23
47
49
  }
48
- export declare function unionToElement(type: Element, accessor: (obj: DucArrowElement | DucBlockInstanceElement | DucDimensionElement | DucDocElement | DucEllipseElement | DucEmbeddableElement | DucFeatureControlFrameElement | DucFrameElement | DucFreeDrawElement | DucImageElement | DucLeaderElement | DucLinearElement | DucMermaidElement | DucParametricElement | DucPdfElement | DucPlotElement | DucPolygonElement | DucRectangleElement | DucTableElement | DucTextElement | DucViewportElement | DucXRayElement) => DucArrowElement | DucBlockInstanceElement | DucDimensionElement | DucDocElement | DucEllipseElement | DucEmbeddableElement | DucFeatureControlFrameElement | DucFrameElement | DucFreeDrawElement | DucImageElement | DucLeaderElement | DucLinearElement | DucMermaidElement | DucParametricElement | DucPdfElement | DucPlotElement | DucPolygonElement | DucRectangleElement | DucTableElement | DucTextElement | DucViewportElement | DucXRayElement | null): DucArrowElement | DucBlockInstanceElement | DucDimensionElement | DucDocElement | DucEllipseElement | DucEmbeddableElement | DucFeatureControlFrameElement | DucFrameElement | DucFreeDrawElement | DucImageElement | DucLeaderElement | DucLinearElement | DucMermaidElement | DucParametricElement | DucPdfElement | DucPlotElement | DucPolygonElement | DucRectangleElement | DucTableElement | DucTextElement | DucViewportElement | DucXRayElement | null;
49
- export declare function unionListToElement(type: Element, accessor: (index: number, obj: DucArrowElement | DucBlockInstanceElement | DucDimensionElement | DucDocElement | DucEllipseElement | DucEmbeddableElement | DucFeatureControlFrameElement | DucFrameElement | DucFreeDrawElement | DucImageElement | DucLeaderElement | DucLinearElement | DucMermaidElement | DucParametricElement | DucPdfElement | DucPlotElement | DucPolygonElement | DucRectangleElement | DucTableElement | DucTextElement | DucViewportElement | DucXRayElement) => DucArrowElement | DucBlockInstanceElement | DucDimensionElement | DucDocElement | DucEllipseElement | DucEmbeddableElement | DucFeatureControlFrameElement | DucFrameElement | DucFreeDrawElement | DucImageElement | DucLeaderElement | DucLinearElement | DucMermaidElement | DucParametricElement | DucPdfElement | DucPlotElement | DucPolygonElement | DucRectangleElement | DucTableElement | DucTextElement | DucViewportElement | DucXRayElement | null, index: number): DucArrowElement | DucBlockInstanceElement | DucDimensionElement | DucDocElement | DucEllipseElement | DucEmbeddableElement | DucFeatureControlFrameElement | DucFrameElement | DucFreeDrawElement | DucImageElement | DucLeaderElement | DucLinearElement | DucMermaidElement | DucParametricElement | DucPdfElement | DucPlotElement | DucPolygonElement | DucRectangleElement | DucTableElement | DucTextElement | DucViewportElement | DucXRayElement | null;
50
+ export declare function unionToElement(type: Element, accessor: (obj: DucArrowElement | DucBlockInstanceElement | DucDimensionElement | DucDocElement | DucEllipseElement | DucEmbeddableElement | DucFeatureControlFrameElement | DucFrameElement | DucFreeDrawElement | DucImageElement | DucLeaderElement | DucLinearElement | DucMermaidElement | DucModelElement | DucParametricElement | DucPdfElement | DucPlotElement | DucPolygonElement | DucRectangleElement | DucTableElement | DucTextElement | DucViewportElement | DucXRayElement) => DucArrowElement | DucBlockInstanceElement | DucDimensionElement | DucDocElement | DucEllipseElement | DucEmbeddableElement | DucFeatureControlFrameElement | DucFrameElement | DucFreeDrawElement | DucImageElement | DucLeaderElement | DucLinearElement | DucMermaidElement | DucModelElement | DucParametricElement | DucPdfElement | DucPlotElement | DucPolygonElement | DucRectangleElement | DucTableElement | DucTextElement | DucViewportElement | DucXRayElement | null): DucArrowElement | DucBlockInstanceElement | DucDimensionElement | DucDocElement | DucEllipseElement | DucEmbeddableElement | DucFeatureControlFrameElement | DucFrameElement | DucFreeDrawElement | DucImageElement | DucLeaderElement | DucLinearElement | DucMermaidElement | DucModelElement | DucParametricElement | DucPdfElement | DucPlotElement | DucPolygonElement | DucRectangleElement | DucTableElement | DucTextElement | DucViewportElement | DucXRayElement | null;
51
+ export declare function unionListToElement(type: Element, accessor: (index: number, obj: DucArrowElement | DucBlockInstanceElement | DucDimensionElement | DucDocElement | DucEllipseElement | DucEmbeddableElement | DucFeatureControlFrameElement | DucFrameElement | DucFreeDrawElement | DucImageElement | DucLeaderElement | DucLinearElement | DucMermaidElement | DucModelElement | DucParametricElement | DucPdfElement | DucPlotElement | DucPolygonElement | DucRectangleElement | DucTableElement | DucTextElement | DucViewportElement | DucXRayElement) => DucArrowElement | DucBlockInstanceElement | DucDimensionElement | DucDocElement | DucEllipseElement | DucEmbeddableElement | DucFeatureControlFrameElement | DucFrameElement | DucFreeDrawElement | DucImageElement | DucLeaderElement | DucLinearElement | DucMermaidElement | DucModelElement | DucParametricElement | DucPdfElement | DucPlotElement | DucPolygonElement | DucRectangleElement | DucTableElement | DucTextElement | DucViewportElement | DucXRayElement | null, index: number): DucArrowElement | DucBlockInstanceElement | DucDimensionElement | DucDocElement | DucEllipseElement | DucEmbeddableElement | DucFeatureControlFrameElement | DucFrameElement | DucFreeDrawElement | DucImageElement | DucLeaderElement | DucLinearElement | DucMermaidElement | DucModelElement | DucParametricElement | DucPdfElement | DucPlotElement | DucPolygonElement | DucRectangleElement | DucTableElement | DucTextElement | DucViewportElement | DucXRayElement | null;
@@ -13,6 +13,7 @@ import { DucImageElement } from '../duc/duc-image-element';
13
13
  import { DucLeaderElement } from '../duc/duc-leader-element';
14
14
  import { DucLinearElement } from '../duc/duc-linear-element';
15
15
  import { DucMermaidElement } from '../duc/duc-mermaid-element';
16
+ import { DucModelElement } from '../duc/duc-model-element';
16
17
  import { DucParametricElement } from '../duc/duc-parametric-element';
17
18
  import { DucPdfElement } from '../duc/duc-pdf-element';
18
19
  import { DucPlotElement } from '../duc/duc-plot-element';
@@ -47,6 +48,7 @@ export var Element;
47
48
  Element[Element["DucFeatureControlFrameElement"] = 20] = "DucFeatureControlFrameElement";
48
49
  Element[Element["DucDocElement"] = 21] = "DucDocElement";
49
50
  Element[Element["DucParametricElement"] = 22] = "DucParametricElement";
51
+ Element[Element["DucModelElement"] = 23] = "DucModelElement";
50
52
  })(Element || (Element = {}));
51
53
  export function unionToElement(type, accessor) {
52
54
  switch (Element[type]) {
@@ -73,6 +75,7 @@ export function unionToElement(type, accessor) {
73
75
  case 'DucFeatureControlFrameElement': return accessor(new DucFeatureControlFrameElement());
74
76
  case 'DucDocElement': return accessor(new DucDocElement());
75
77
  case 'DucParametricElement': return accessor(new DucParametricElement());
78
+ case 'DucModelElement': return accessor(new DucModelElement());
76
79
  default: return null;
77
80
  }
78
81
  }
@@ -101,6 +104,7 @@ export function unionListToElement(type, accessor, index) {
101
104
  case 'DucFeatureControlFrameElement': return accessor(index, new DucFeatureControlFrameElement());
102
105
  case 'DucDocElement': return accessor(index, new DucDocElement());
103
106
  case 'DucParametricElement': return accessor(index, new DucParametricElement());
107
+ case 'DucModelElement': return accessor(index, new DucModelElement());
104
108
  default: return null;
105
109
  }
106
110
  }
@@ -18,6 +18,7 @@ export { DIMENSION_FIT_RULE } from './duc/dimension-fit-rule';
18
18
  export { DIMENSION_TEXT_PLACEMENT } from './duc/dimension-text-placement';
19
19
  export { DIMENSION_TYPE } from './duc/dimension-type';
20
20
  export { DIMENSION_UNITS_FORMAT } from './duc/dimension-units-format';
21
+ export { DOCUMENT_GRID_ALIGN_ITEMS } from './duc/document-grid-align-items';
21
22
  export { DatumReference } from './duc/datum-reference';
22
23
  export { Delta } from './duc/delta';
23
24
  export { DictionaryEntry } from './duc/dictionary-entry';
@@ -31,6 +32,7 @@ export { DimensionLineStyle } from './duc/dimension-line-style';
31
32
  export { DimensionSymbolStyle } from './duc/dimension-symbol-style';
32
33
  export { DimensionToleranceStyle } from './duc/dimension-tolerance-style';
33
34
  export { DimensionValidationRules } from './duc/dimension-validation-rules';
35
+ export { DocumentGridConfig } from './duc/document-grid-config';
34
36
  export { DucArrowElement } from './duc/duc-arrow-element';
35
37
  export { DucBlock } from './duc/duc-block';
36
38
  export { DucBlockAttributeDefinition } from './duc/duc-block-attribute-definition';
@@ -70,6 +72,7 @@ export { DucLineReference } from './duc/duc-line-reference';
70
72
  export { DucLinearElement } from './duc/duc-linear-element';
71
73
  export { DucLocalState } from './duc/duc-local-state';
72
74
  export { DucMermaidElement } from './duc/duc-mermaid-element';
75
+ export { DucModelElement } from './duc/duc-model-element';
73
76
  export { DucParametricElement } from './duc/duc-parametric-element';
74
77
  export { DucPath } from './duc/duc-path';
75
78
  export { DucPdfElement } from './duc/duc-pdf-element';
@@ -20,6 +20,7 @@ export { DIMENSION_FIT_RULE } from './duc/dimension-fit-rule';
20
20
  export { DIMENSION_TEXT_PLACEMENT } from './duc/dimension-text-placement';
21
21
  export { DIMENSION_TYPE } from './duc/dimension-type';
22
22
  export { DIMENSION_UNITS_FORMAT } from './duc/dimension-units-format';
23
+ export { DOCUMENT_GRID_ALIGN_ITEMS } from './duc/document-grid-align-items';
23
24
  export { DatumReference } from './duc/datum-reference';
24
25
  export { Delta } from './duc/delta';
25
26
  export { DictionaryEntry } from './duc/dictionary-entry';
@@ -33,6 +34,7 @@ export { DimensionLineStyle } from './duc/dimension-line-style';
33
34
  export { DimensionSymbolStyle } from './duc/dimension-symbol-style';
34
35
  export { DimensionToleranceStyle } from './duc/dimension-tolerance-style';
35
36
  export { DimensionValidationRules } from './duc/dimension-validation-rules';
37
+ export { DocumentGridConfig } from './duc/document-grid-config';
36
38
  export { DucArrowElement } from './duc/duc-arrow-element';
37
39
  export { DucBlock } from './duc/duc-block';
38
40
  export { DucBlockAttributeDefinition } from './duc/duc-block-attribute-definition';
@@ -72,6 +74,7 @@ export { DucLineReference } from './duc/duc-line-reference';
72
74
  export { DucLinearElement } from './duc/duc-linear-element';
73
75
  export { DucLocalState } from './duc/duc-local-state';
74
76
  export { DucMermaidElement } from './duc/duc-mermaid-element';
77
+ export { DucModelElement } from './duc/duc-model-element';
75
78
  export { DucParametricElement } from './duc/duc-parametric-element';
76
79
  export { DucPath } from './duc/duc-path';
77
80
  export { DucPdfElement } from './duc/duc-pdf-element';
package/dist/index.d.ts CHANGED
@@ -1,7 +1,8 @@
1
1
  export * as DucBin from "./flatbuffers/duc";
2
- export * from "./types";
3
- export * from "./utils";
4
- export * from "./serialize";
2
+ export * from "./lazy-files";
5
3
  export * from "./parse";
6
4
  export * from "./restore";
5
+ export * from "./serialize";
7
6
  export * from "./technical";
7
+ export * from "./types";
8
+ export * from "./utils";
package/dist/index.js CHANGED
@@ -1,7 +1,8 @@
1
1
  export * as DucBin from "./flatbuffers/duc";
2
- export * from "./types";
3
- export * from "./utils";
4
- export * from "./serialize";
2
+ export * from "./lazy-files";
5
3
  export * from "./parse";
6
4
  export * from "./restore";
5
+ export * from "./serialize";
7
6
  export * from "./technical";
7
+ export * from "./types";
8
+ export * from "./utils";
@@ -0,0 +1,84 @@
1
+ /**
2
+ * LazyExternalFileStore — Zero-copy, on-demand access to external file data from a FlatBuffer.
3
+ *
4
+ * Instead of eagerly parsing and copying every external file's binary data into JS memory,
5
+ * this store keeps a reference to the original FlatBuffer Uint8Array and reads file bytes
6
+ * only when explicitly requested. FlatBuffer `dataArray()` returns a zero-copy view
7
+ * (a Uint8Array pointing into the original buffer), so no allocation occurs until the
8
+ * consumer actually needs the data.
9
+ *
10
+ * Memory lifecycle:
11
+ * 1. On parse: only metadata (~200 bytes per file) enters JS heap.
12
+ * 2. On demand: `getFileData(fileId)` reads the zero-copy slice from the buffer.
13
+ * 3. The caller (renderer/worker) uses the data, then lets it GC naturally.
14
+ * 4. If the store is released, the buffer reference is dropped, freeing everything.
15
+ *
16
+ * This is the key to supporting 1000s of external files without RAM bloat.
17
+ */
18
+ import type { DucExternalFileData, DucExternalFileMetadata, DucExternalFiles } from "./types";
19
+ export type ExternalFileMetadataMap = Record<string, DucExternalFileMetadata>;
20
+ export declare class LazyExternalFileStore {
21
+ private _buffer;
22
+ private _byteBuffer;
23
+ private _dataState;
24
+ /** Map from file id → lazy entry */
25
+ private _entries;
26
+ /** Map from element key → file id (the external_files vector uses element id as key) */
27
+ private _keyToFileId;
28
+ /**
29
+ * Files that were added at runtime (e.g. user uploading a new image).
30
+ * These aren't in the original FlatBuffer so we hold their data directly.
31
+ */
32
+ private _runtimeFiles;
33
+ constructor(buffer: Uint8Array);
34
+ private _indexMetadata;
35
+ /** Total number of external files */
36
+ get size(): number;
37
+ /** Whether a file with the given id exists */
38
+ has(fileId: string): boolean;
39
+ /** Get metadata only (no binary data copied) — ~200 bytes per file */
40
+ getMetadata(fileId: string): DucExternalFileMetadata | null;
41
+ /** Get all metadata entries (for UI listing, etc.) */
42
+ getAllMetadata(): ExternalFileMetadataMap;
43
+ /**
44
+ * Get full file data (metadata + binary bytes) ON DEMAND.
45
+ *
46
+ * For files from the original FlatBuffer, this returns a zero-copy Uint8Array
47
+ * view into the original buffer — no allocation for the file bytes themselves.
48
+ * The view is valid as long as this store hasn't been released.
49
+ *
50
+ * For runtime-added files, returns the data directly.
51
+ */
52
+ getFileData(fileId: string): DucExternalFileData | null;
53
+ /**
54
+ * Get a detached copy of the file data (allocates new ArrayBuffer).
55
+ * Use this when you need to transfer data to a worker or keep it beyond store lifetime.
56
+ */
57
+ getFileDataCopy(fileId: string): DucExternalFileData | null;
58
+ /**
59
+ * Add a file at runtime (user upload, paste, etc.).
60
+ * These files are held in memory since they aren't in the FlatBuffer.
61
+ */
62
+ addRuntimeFile(fileData: DucExternalFileData): void;
63
+ /** Remove a runtime-added file */
64
+ removeRuntimeFile(fileId: string): void;
65
+ /**
66
+ * Export all files as a standard DucExternalFiles record.
67
+ * This COPIES all file data eagerly — use only for serialization.
68
+ */
69
+ toExternalFiles(): DucExternalFiles;
70
+ /**
71
+ * Merge runtime files from the given DucExternalFiles map.
72
+ * Only adds files not already present in the store.
73
+ */
74
+ mergeFiles(files: DucExternalFiles): void;
75
+ /** Estimated RAM usage for metadata only (not counting the backing buffer) */
76
+ get estimatedMetadataBytes(): number;
77
+ /**
78
+ * Release the FlatBuffer reference. After this, only runtime-added files remain accessible.
79
+ * Call this when switching documents or when the store is no longer needed.
80
+ */
81
+ release(): void;
82
+ /** Whether the store has been released */
83
+ get isReleased(): boolean;
84
+ }