@kerebron/extension-basic-editor 0.1.1 → 0.1.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.
Files changed (58) hide show
  1. package/esm/editor/src/CoreEditor.d.ts.map +1 -1
  2. package/esm/editor/src/CoreEditor.js +5 -5
  3. package/esm/editor/src/nodeToTreeString.d.ts.map +1 -1
  4. package/esm/editor/src/nodeToTreeString.js +5 -2
  5. package/esm/editor/src/utilities/createNodeFromContent.d.ts.map +1 -1
  6. package/esm/editor/src/utilities/createNodeFromContent.js +1 -1
  7. package/esm/extension-basic-editor/src/ExtensionHtml.d.ts.map +1 -1
  8. package/esm/extension-basic-editor/src/ExtensionHtml.js +3 -2
  9. package/esm/extension-basic-editor/src/MarkChange.d.ts.map +1 -1
  10. package/esm/extension-basic-editor/src/NodeImage.d.ts +1 -19
  11. package/esm/extension-basic-editor/src/NodeImage.d.ts.map +1 -1
  12. package/esm/extension-basic-editor/src/NodeImage.js +0 -22
  13. package/package.json +1 -4
  14. package/esm/extension-automerge/src/CursorPlugin.d.ts +0 -16
  15. package/esm/extension-automerge/src/CursorPlugin.d.ts.map +0 -1
  16. package/esm/extension-automerge/src/CursorPlugin.js +0 -114
  17. package/esm/extension-automerge/src/ExtensionAutomerge.d.ts +0 -26
  18. package/esm/extension-automerge/src/ExtensionAutomerge.d.ts.map +0 -1
  19. package/esm/extension-automerge/src/ExtensionAutomerge.js +0 -136
  20. package/esm/extension-automerge/src/MarkUnknown.d.ts +0 -8
  21. package/esm/extension-automerge/src/MarkUnknown.d.ts.map +0 -1
  22. package/esm/extension-automerge/src/MarkUnknown.js +0 -26
  23. package/esm/extension-automerge/src/NodeUnknown.d.ts +0 -8
  24. package/esm/extension-automerge/src/NodeUnknown.d.ts.map +0 -1
  25. package/esm/extension-automerge/src/NodeUnknown.js +0 -28
  26. package/esm/extension-automerge/src/NodeUnknownBlock.d.ts +0 -11
  27. package/esm/extension-automerge/src/NodeUnknownBlock.d.ts.map +0 -1
  28. package/esm/extension-automerge/src/NodeUnknownBlock.js +0 -36
  29. package/esm/extension-automerge/src/SchemaAdapter.d.ts +0 -70
  30. package/esm/extension-automerge/src/SchemaAdapter.d.ts.map +0 -1
  31. package/esm/extension-automerge/src/SchemaAdapter.js +0 -188
  32. package/esm/extension-automerge/src/SyncPlugin.d.ts +0 -16
  33. package/esm/extension-automerge/src/SyncPlugin.d.ts.map +0 -1
  34. package/esm/extension-automerge/src/SyncPlugin.js +0 -147
  35. package/esm/extension-automerge/src/amToPm.d.ts +0 -9
  36. package/esm/extension-automerge/src/amToPm.d.ts.map +0 -1
  37. package/esm/extension-automerge/src/amToPm.js +0 -245
  38. package/esm/extension-automerge/src/amTraversal.d.ts +0 -62
  39. package/esm/extension-automerge/src/amTraversal.d.ts.map +0 -1
  40. package/esm/extension-automerge/src/amTraversal.js +0 -688
  41. package/esm/extension-automerge/src/loader.d.ts +0 -8
  42. package/esm/extension-automerge/src/loader.d.ts.map +0 -1
  43. package/esm/extension-automerge/src/loader.js +0 -54
  44. package/esm/extension-automerge/src/maintainSpans.d.ts +0 -9
  45. package/esm/extension-automerge/src/maintainSpans.d.ts.map +0 -1
  46. package/esm/extension-automerge/src/maintainSpans.js +0 -464
  47. package/esm/extension-automerge/src/pmToAm.d.ts +0 -6
  48. package/esm/extension-automerge/src/pmToAm.d.ts.map +0 -1
  49. package/esm/extension-automerge/src/pmToAm.js +0 -183
  50. package/esm/extension-automerge/src/pmTraversal.d.ts +0 -26
  51. package/esm/extension-automerge/src/pmTraversal.d.ts.map +0 -1
  52. package/esm/extension-automerge/src/pmTraversal.js +0 -102
  53. package/esm/extension-automerge/src/types.d.ts +0 -42
  54. package/esm/extension-automerge/src/types.d.ts.map +0 -1
  55. package/esm/extension-automerge/src/types.js +0 -94
  56. package/esm/extension-automerge/src/utils.d.ts +0 -3
  57. package/esm/extension-automerge/src/utils.d.ts.map +0 -1
  58. package/esm/extension-automerge/src/utils.js +0 -18
@@ -1,70 +0,0 @@
1
- import { Attrs, Mark, MarkSpec, MarkType, Node, NodeSpec, NodeType, type Schema } from 'prosemirror-model';
2
- import { next as automerge } from '@automerge/automerge/slim';
3
- import { BlockMarker } from './types.js';
4
- export interface MappedSchemaSpec {
5
- nodes: {
6
- [key: string]: MappedNodeSpec;
7
- };
8
- marks?: {
9
- [key: string]: MappedMarkSpec;
10
- };
11
- }
12
- export type MappedNodeSpec = NodeSpec & {
13
- automerge?: {
14
- unknownBlock?: boolean;
15
- block?: BlockMappingSpec;
16
- isEmbed?: boolean;
17
- attrParsers?: {
18
- fromProsemirror: (node: Node) => {
19
- [key: string]: automerge.MaterializeValue;
20
- };
21
- fromAutomerge: (block: BlockMarker) => Attrs;
22
- };
23
- };
24
- };
25
- export type BlockMappingSpec = string;
26
- export type MappedMarkSpec = MarkSpec & {
27
- automerge?: {
28
- markName: string;
29
- parsers?: {
30
- fromAutomerge: (value: automerge.MarkValue) => Attrs;
31
- fromProsemirror: (mark: Mark) => automerge.MarkValue;
32
- };
33
- };
34
- };
35
- export type MarkMapping = {
36
- automergeMarkName: string;
37
- prosemirrorMark: MarkType;
38
- parsers: {
39
- fromAutomerge: (value: automerge.MarkValue) => Attrs;
40
- fromProsemirror: (mark: Mark) => automerge.MarkValue;
41
- };
42
- };
43
- export type NodeMapping = {
44
- blockName: string;
45
- content: NodeType;
46
- attrParsers?: {
47
- fromProsemirror: (node: Node) => {
48
- [key: string]: automerge.MaterializeValue;
49
- };
50
- fromAutomerge: (block: BlockMarker) => Attrs;
51
- };
52
- isEmbed?: boolean;
53
- };
54
- export declare class SchemaAdapter {
55
- nodeMappings: NodeMapping[];
56
- markMappings: MarkMapping[];
57
- unknownBlock: NodeType;
58
- unknownLeaf: NodeType;
59
- unknownMark: MarkType;
60
- schema: Schema;
61
- constructor(schema: Schema);
62
- }
63
- export declare function addAmgNodeStateAttrs(nodes: {
64
- [key: string]: MappedNodeSpec;
65
- }): {
66
- [key: string]: MappedNodeSpec;
67
- };
68
- export declare function amMarksFromPmMarks(adapter: SchemaAdapter, marks: readonly Mark[]): automerge.MarkSet;
69
- export declare function pmMarksFromAmMarks(adapter: SchemaAdapter, amMarks: automerge.MarkSet): Mark[];
70
- //# sourceMappingURL=SchemaAdapter.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"SchemaAdapter.d.ts","sourceRoot":"","sources":["../../../src/extension-automerge/src/SchemaAdapter.ts"],"names":[],"mappings":"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"}
@@ -1,188 +0,0 @@
1
- export class SchemaAdapter {
2
- constructor(schema) {
3
- Object.defineProperty(this, "nodeMappings", {
4
- enumerable: true,
5
- configurable: true,
6
- writable: true,
7
- value: void 0
8
- });
9
- Object.defineProperty(this, "markMappings", {
10
- enumerable: true,
11
- configurable: true,
12
- writable: true,
13
- value: void 0
14
- });
15
- Object.defineProperty(this, "unknownBlock", {
16
- enumerable: true,
17
- configurable: true,
18
- writable: true,
19
- value: void 0
20
- });
21
- Object.defineProperty(this, "unknownLeaf", {
22
- enumerable: true,
23
- configurable: true,
24
- writable: true,
25
- value: void 0
26
- });
27
- Object.defineProperty(this, "unknownMark", {
28
- enumerable: true,
29
- configurable: true,
30
- writable: true,
31
- value: void 0
32
- });
33
- Object.defineProperty(this, "schema", {
34
- enumerable: true,
35
- configurable: true,
36
- writable: true,
37
- value: void 0
38
- });
39
- const nodeMappings = [];
40
- const markMappings = [];
41
- let unknownBlock = null;
42
- for (const [nodeName, nodeSpec] of Object.entries(schema.nodes)) {
43
- const adaptSpec = nodeSpec.spec.automerge;
44
- if (adaptSpec == null) {
45
- continue;
46
- }
47
- if (adaptSpec.unknownBlock) {
48
- if (unknownBlock != null) {
49
- throw new Error('only one node can be marked as unknownBlock');
50
- }
51
- unknownBlock = schema.nodes[nodeName];
52
- }
53
- if (adaptSpec.block != null) {
54
- const nodeMapping = {
55
- blockName: adaptSpec.block,
56
- content: schema.nodes[nodeName],
57
- isEmbed: adaptSpec.isEmbed || false,
58
- };
59
- if (adaptSpec.attrParsers != null) {
60
- nodeMapping.attrParsers = adaptSpec.attrParsers;
61
- }
62
- nodeMappings.push(nodeMapping);
63
- }
64
- }
65
- for (const [markName, markSpec] of Object.entries(schema.marks || {})) {
66
- const adaptSpec = markSpec.spec.automerge;
67
- if (adaptSpec == null) {
68
- continue;
69
- }
70
- if (adaptSpec.markName != null) {
71
- let parsers;
72
- if (adaptSpec.parsers != null) {
73
- parsers = adaptSpec.parsers;
74
- }
75
- else {
76
- parsers = {
77
- fromAutomerge: () => ({}),
78
- fromProsemirror: () => true,
79
- };
80
- }
81
- markMappings.push({
82
- automergeMarkName: adaptSpec.markName,
83
- prosemirrorMark: schema.marks[markName],
84
- parsers,
85
- });
86
- }
87
- }
88
- if (unknownBlock == null) {
89
- throw new Error(`no unknown block specified: one node must be marked as the unknownblock
90
- by setting the automerge.unknownBlock property to true`);
91
- }
92
- this.unknownMark = schema.marks.unknownMark;
93
- this.nodeMappings = nodeMappings;
94
- this.markMappings = markMappings;
95
- this.unknownLeaf = schema.nodes.unknownLeaf;
96
- this.unknownBlock = unknownBlock;
97
- this.schema = schema;
98
- }
99
- }
100
- function shallowClone(spec) {
101
- const nodes = {};
102
- for (const [nodeName, node] of Object.entries(spec.nodes)) {
103
- const shallowCopy = Object.assign({}, node);
104
- if (node.attrs != null) {
105
- shallowCopy.attrs = Object.assign({}, node.attrs);
106
- }
107
- nodes[nodeName] = shallowCopy;
108
- }
109
- const marks = {};
110
- if (spec.marks != null) {
111
- for (const [markName, mark] of Object.entries(spec.marks)) {
112
- const shallowCopy = Object.assign({}, mark);
113
- if (mark.attrs != null) {
114
- shallowCopy.attrs = Object.assign({}, mark.attrs);
115
- }
116
- marks[markName] = shallowCopy;
117
- }
118
- }
119
- return { nodes, marks };
120
- }
121
- export function addAmgNodeStateAttrs(nodes) {
122
- for (const [name, nodeSpec] of Object.entries(nodes)) {
123
- if (name !== 'text') {
124
- if (nodeSpec.attrs == null) {
125
- nodeSpec.attrs = {
126
- isAmgBlock: { default: false },
127
- unknownAttrs: { default: null },
128
- };
129
- }
130
- else {
131
- nodeSpec.attrs.isAmgBlock = { default: false };
132
- nodeSpec.attrs.unknownAttrs = { default: null };
133
- }
134
- }
135
- if (nodeSpec.automerge?.unknownBlock) {
136
- if (nodeSpec.attrs == null) {
137
- nodeSpec.attrs = {
138
- unknownParentBlock: { default: null },
139
- unknownBlock: { default: null },
140
- };
141
- }
142
- else {
143
- nodeSpec.attrs.unknownParentBlock = { default: null };
144
- nodeSpec.attrs.unknownBlock = { default: null };
145
- }
146
- }
147
- }
148
- return nodes;
149
- }
150
- export function amMarksFromPmMarks(adapter, marks) {
151
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
152
- const result = {};
153
- marks.forEach((mark) => {
154
- const markMapping = adapter.markMappings.find((m) => m.prosemirrorMark === mark.type);
155
- if (markMapping != null) {
156
- result[markMapping.automergeMarkName] = markMapping.parsers
157
- .fromProsemirror(mark);
158
- }
159
- else if (mark.type === adapter.unknownMark) {
160
- for (const [key, value] of Object.entries(mark.attrs.unknownMarks)) {
161
- result[key] = value;
162
- }
163
- }
164
- });
165
- return result;
166
- }
167
- export function pmMarksFromAmMarks(adapter, amMarks) {
168
- const unknownMarks = {};
169
- let hasUnknownMark = false;
170
- const pmMarks = [];
171
- for (const [markName, markValue] of Object.entries(amMarks)) {
172
- // Filter tombstoned marks (https://github.com/automerge/automerge/issues/715).
173
- if (markValue == null)
174
- continue;
175
- const mapping = adapter.markMappings.find((m) => m.automergeMarkName === markName);
176
- if (mapping == null) {
177
- unknownMarks[markName] = markValue;
178
- hasUnknownMark = true;
179
- }
180
- else {
181
- pmMarks.push(mapping.prosemirrorMark.create(mapping.parsers.fromAutomerge(markValue)));
182
- }
183
- }
184
- if (hasUnknownMark) {
185
- pmMarks.push(adapter.unknownMark.create({ unknownMarks }));
186
- }
187
- return pmMarks;
188
- }
@@ -1,16 +0,0 @@
1
- import { Plugin, PluginKey } from 'prosemirror-state';
2
- import { next as automerge } from '@automerge/automerge/slim';
3
- import { SchemaAdapter } from './SchemaAdapter.js';
4
- import { DocHandle, DocHandleChangePayload } from './types.js';
5
- export declare const syncPluginKey: PluginKey<any>;
6
- export declare class SyncPlugin<T> extends Plugin {
7
- private adapter;
8
- private path;
9
- ignoreTr: boolean;
10
- onAutoMergeChange: (args: DocHandleChangePayload<unknown>) => void;
11
- private handle;
12
- private view;
13
- constructor(adapter: SchemaAdapter, path: automerge.Prop[], handle: DocHandle<T>);
14
- changeHandle(handle: DocHandle<any>): void;
15
- }
16
- //# sourceMappingURL=SyncPlugin.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"SyncPlugin.d.ts","sourceRoot":"","sources":["../../../src/extension-automerge/src/SyncPlugin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,SAAS,EAAa,MAAM,mBAAmB,CAAC;AAGjE,OAAO,EAAE,IAAI,IAAI,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAI9D,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAEnD,OAAO,EAAE,SAAS,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAG/D,eAAO,MAAM,aAAa,gBAAkC,CAAC;AAE7D,qBAAa,UAAU,CAAC,CAAC,CAAE,SAAQ,MAAM;IAQrC,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,IAAI;IARd,QAAQ,UAAS;IACjB,iBAAiB,EAAG,CAAC,IAAI,EAAE,sBAAsB,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC;IAEpE,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,IAAI,CAAc;gBAGhB,OAAO,EAAE,aAAa,EACtB,IAAI,EAAE,SAAS,CAAC,IAAI,EAAE,EAC9B,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC;IAiGtB,YAAY,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,CAAC;CAwCpC"}
@@ -1,147 +0,0 @@
1
- import { Plugin, PluginKey, Selection } from 'prosemirror-state';
2
- import { ChangeSet } from 'prosemirror-changeset';
3
- import { next as automerge } from '@automerge/automerge/slim';
4
- import { pmToAm } from './pmToAm.js';
5
- import { amToPm } from './amToPm.js';
6
- import { amSpansToDoc } from './amTraversal.js';
7
- import { isArrayEqual } from './utils.js';
8
- export const syncPluginKey = new PluginKey('automerge-sync');
9
- export class SyncPlugin extends Plugin {
10
- constructor(adapter, path, handle) {
11
- super({
12
- key: syncPluginKey,
13
- view: (view) => {
14
- this.view = view;
15
- this.changeHandle(handle);
16
- return {
17
- destroy: () => {
18
- if (this.handle) {
19
- this.handle.off('change', this.onAutoMergeChange);
20
- }
21
- },
22
- };
23
- },
24
- appendTransaction(transactions, oldState, state) {
25
- if (this.ignoreTr)
26
- return;
27
- transactions = transactions.filter((tx) => tx.docChanged);
28
- if (transactions.length === 0)
29
- return undefined;
30
- //eslint-disable-next-line @typescript-eslint/no-non-null-assertion
31
- const docBefore = this.handle.docSync();
32
- const headsBefore = automerge.getHeads(docBefore);
33
- const spansBefore = automerge.spans(docBefore, path);
34
- // Apply transactions to the automerge doc
35
- this.ignoreTr = true;
36
- this.handle.change((doc) => {
37
- for (const tx of transactions) {
38
- const spans = automerge.spans(doc, path);
39
- pmToAm(adapter, spans, tx.steps, doc, tx.docs[0], path);
40
- }
41
- });
42
- this.ignoreTr = false;
43
- //eslint-disable-next-line @typescript-eslint/no-non-null-assertion
44
- const docAfter = this.handle.docSync();
45
- const headsAfter = automerge.getHeads(docAfter);
46
- const spansAfter = automerge.spans(docAfter, path);
47
- // Ignore if nothing changed.
48
- if (isArrayEqual(headsBefore, headsAfter))
49
- return undefined;
50
- // Check if ProseMirror doc matches the AutoMerge doc
51
- // by comparing changesets between the two transactions.
52
- const patches = automerge.diff(docAfter, headsBefore, headsAfter);
53
- const tx = amToPm(adapter, spansBefore, patches, path, oldState.tr);
54
- let amChangeSet = ChangeSet.create(oldState.doc);
55
- amChangeSet = amChangeSet.addSteps(oldState.doc, tx.mapping.maps, undefined);
56
- let pmChangeSet = ChangeSet.create(oldState.doc);
57
- for (const tr of transactions) {
58
- pmChangeSet = pmChangeSet.addSteps(tr.docs[0], tr.mapping.maps, undefined);
59
- }
60
- const diff = pmChangeSet.changedRange(amChangeSet);
61
- if (!diff || diff.from === diff.to)
62
- return undefined;
63
- console.warn("Warning: ProseMirror doc doesn't match AutoMerge spans.\n\n" +
64
- 'State will be automatically fixed with a tr. File an issue at https://github.com/automerge/automerge-repo.\n', {
65
- spansBefore,
66
- steps: transactions.map((tr) => tr.steps.map((s) => s.toJSON())),
67
- });
68
- // Replace the diff range in ProseMirror doc from the AutoMerge doc.
69
- const doc = amSpansToDoc(adapter, spansAfter);
70
- const slice = doc.slice(diff.from, diff.to);
71
- const tr = state.tr;
72
- tr.replace(diff.from, diff.to, slice);
73
- try {
74
- tr.setSelection(Selection.fromJSON(tr.doc, state.selection.toJSON()));
75
- }
76
- catch (e) {
77
- if (e instanceof RangeError) {
78
- // Sometimes the selection can't be mapped for some reason, so we just give up and hope for the best
79
- }
80
- else {
81
- throw e;
82
- }
83
- }
84
- tr.setStoredMarks(state.storedMarks);
85
- return tr;
86
- },
87
- });
88
- Object.defineProperty(this, "adapter", {
89
- enumerable: true,
90
- configurable: true,
91
- writable: true,
92
- value: adapter
93
- });
94
- Object.defineProperty(this, "path", {
95
- enumerable: true,
96
- configurable: true,
97
- writable: true,
98
- value: path
99
- });
100
- Object.defineProperty(this, "ignoreTr", {
101
- enumerable: true,
102
- configurable: true,
103
- writable: true,
104
- value: false
105
- });
106
- Object.defineProperty(this, "onAutoMergeChange", {
107
- enumerable: true,
108
- configurable: true,
109
- writable: true,
110
- value: void 0
111
- });
112
- Object.defineProperty(this, "handle", {
113
- enumerable: true,
114
- configurable: true,
115
- writable: true,
116
- value: void 0
117
- });
118
- Object.defineProperty(this, "view", {
119
- enumerable: true,
120
- configurable: true,
121
- writable: true,
122
- value: void 0
123
- });
124
- }
125
- changeHandle(handle) {
126
- if (!this.view) {
127
- return;
128
- }
129
- if (this.handle) {
130
- this.handle.off('change', this.onAutoMergeChange);
131
- }
132
- const onAutoMergeChange = ({ doc, patches, patchInfo, }) => {
133
- if (this.ignoreTr)
134
- return;
135
- const headsBefore = automerge.getHeads(patchInfo.before);
136
- const spans = automerge.spans(automerge.view(doc, headsBefore), this.path);
137
- const tr = amToPm(this.adapter, spans, patches, this.path, this.view.state.tr);
138
- tr.setMeta('addToHistory', false); // remote changes should not be added to local stack
139
- this.ignoreTr = true;
140
- this.view.dispatch(tr);
141
- this.ignoreTr = false;
142
- };
143
- this.onAutoMergeChange = onAutoMergeChange;
144
- handle.on('change', this.onAutoMergeChange);
145
- this.handle = handle;
146
- }
147
- }
@@ -1,9 +0,0 @@
1
- import { next as automerge, Patch, type Prop } from '@automerge/automerge/slim';
2
- import { Transaction } from 'prosemirror-state';
3
- import { SchemaAdapter } from './SchemaAdapter.js';
4
- type SpliceTextPatch = automerge.SpliceTextPatch;
5
- export declare function amToPm(adapter: SchemaAdapter, spansAtStart: automerge.Span[], patches: Array<Patch>, path: Prop[], tx: Transaction): Transaction;
6
- export declare function handleSplice(adapter: SchemaAdapter, spans: automerge.Span[], patch: SpliceTextPatch, path: Prop[], tx: Transaction): Transaction;
7
- export declare function handleBlockChange(adapter: SchemaAdapter, atPath: automerge.Prop[], spans: automerge.Span[], _blockIdx: number, patches: automerge.Patch[], tx: Transaction): Transaction;
8
- export {};
9
- //# sourceMappingURL=amToPm.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"amToPm.d.ts","sourceRoot":"","sources":["../../../src/extension-automerge/src/amToPm.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,IAAI,IAAI,SAAS,EACjB,KAAK,EACL,KAAK,IAAI,EACV,MAAM,2BAA2B,CAAC;AAEnC,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAMhD,OAAO,EAAsB,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAEvE,KAAK,eAAe,GAAG,SAAS,CAAC,eAAe,CAAC;AAQjD,wBAAgB,MAAM,CACpB,OAAO,EAAE,aAAa,EACtB,YAAY,EAAE,SAAS,CAAC,IAAI,EAAE,EAC9B,OAAO,EAAE,KAAK,CAAC,KAAK,CAAC,EACrB,IAAI,EAAE,IAAI,EAAE,EACZ,EAAE,EAAE,WAAW,GACd,WAAW,CA0Cb;AAED,wBAAgB,YAAY,CAC1B,OAAO,EAAE,aAAa,EACtB,KAAK,EAAE,SAAS,CAAC,IAAI,EAAE,EACvB,KAAK,EAAE,eAAe,EACtB,IAAI,EAAE,IAAI,EAAE,EACZ,EAAE,EAAE,WAAW,GACd,WAAW,CAQb;AAkDD,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,aAAa,EACtB,MAAM,EAAE,SAAS,CAAC,IAAI,EAAE,EACxB,KAAK,EAAE,SAAS,CAAC,IAAI,EAAE,EACvB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,SAAS,CAAC,KAAK,EAAE,EAC1B,EAAE,EAAE,WAAW,GACd,WAAW,CA0Cb"}