@kerebron/extension-yjs 0.5.3 → 0.5.4

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 (67) hide show
  1. package/README.md +3 -89
  2. package/esm/ExtensionYjs.d.ts +10 -1
  3. package/esm/ExtensionYjs.d.ts.map +1 -1
  4. package/esm/ExtensionYjs.js +47 -6
  5. package/esm/ExtensionYjs.js.map +1 -1
  6. package/esm/MarkYChange.d.ts +7 -0
  7. package/esm/MarkYChange.d.ts.map +1 -0
  8. package/esm/MarkYChange.js +21 -0
  9. package/esm/MarkYChange.js.map +1 -0
  10. package/esm/ProsemirrorBinding.d.ts +60 -0
  11. package/esm/ProsemirrorBinding.d.ts.map +1 -0
  12. package/esm/ProsemirrorBinding.js +405 -0
  13. package/esm/ProsemirrorBinding.js.map +1 -0
  14. package/esm/createNodeFromYElement.d.ts +10 -0
  15. package/esm/createNodeFromYElement.d.ts.map +1 -0
  16. package/esm/createNodeFromYElement.js +123 -0
  17. package/esm/createNodeFromYElement.js.map +1 -0
  18. package/esm/debug.d.ts +13 -0
  19. package/esm/debug.d.ts.map +1 -0
  20. package/esm/debug.js +147 -0
  21. package/esm/debug.js.map +1 -0
  22. package/esm/keys.d.ts +5 -8
  23. package/esm/keys.d.ts.map +1 -1
  24. package/esm/keys.js +1 -6
  25. package/esm/keys.js.map +1 -1
  26. package/esm/lib.d.ts +1 -2
  27. package/esm/lib.d.ts.map +1 -1
  28. package/esm/lib.js +12 -2
  29. package/esm/lib.js.map +1 -1
  30. package/esm/updateYFragment.d.ts +17 -0
  31. package/esm/updateYFragment.d.ts.map +1 -0
  32. package/esm/updateYFragment.js +333 -0
  33. package/esm/updateYFragment.js.map +1 -0
  34. package/esm/utils.d.ts +2 -0
  35. package/esm/utils.d.ts.map +1 -1
  36. package/esm/utils.js +4 -0
  37. package/esm/utils.js.map +1 -1
  38. package/esm/yPositionPlugin.d.ts +12 -4
  39. package/esm/yPositionPlugin.d.ts.map +1 -1
  40. package/esm/yPositionPlugin.js +114 -61
  41. package/esm/yPositionPlugin.js.map +1 -1
  42. package/esm/ySyncPlugin.d.ts +16 -78
  43. package/esm/ySyncPlugin.d.ts.map +1 -1
  44. package/esm/ySyncPlugin.js +81 -848
  45. package/esm/ySyncPlugin.js.map +1 -1
  46. package/esm/yUndoPlugin.d.ts +1 -1
  47. package/esm/yUndoPlugin.d.ts.map +1 -1
  48. package/esm/yUndoPlugin.js +1 -1
  49. package/esm/yUndoPlugin.js.map +1 -1
  50. package/package.json +9 -3
  51. package/src/ExtensionYjs.ts +65 -9
  52. package/src/MarkYChange.ts +23 -0
  53. package/src/ProsemirrorBinding.ts +607 -0
  54. package/src/createNodeFromYElement.ts +175 -0
  55. package/src/debug.ts +218 -0
  56. package/src/keys.ts +9 -9
  57. package/src/lib.ts +11 -3
  58. package/src/updateYFragment.ts +439 -0
  59. package/src/utils.ts +6 -0
  60. package/src/yPositionPlugin.ts +167 -92
  61. package/src/ySyncPlugin.ts +135 -1193
  62. package/src/yUndoPlugin.ts +1 -1
  63. package/esm/convertUtils.d.ts +0 -59
  64. package/esm/convertUtils.d.ts.map +0 -1
  65. package/esm/convertUtils.js +0 -89
  66. package/esm/convertUtils.js.map +0 -1
  67. package/src/convertUtils.ts +0 -143
package/README.md CHANGED
@@ -1,91 +1,5 @@
1
- # Kerebron - Prosemirror based online editor kit
2
1
 
3
- ## Watch a Demo
2
+ # Debugging:
4
3
 
5
- <a href="https://youtube.com/shorts/OdJjhAPj-wA?feature=share" target="_blank">
6
- <img src="https://github.com/user-attachments/assets/b63ec84a-0ed2-4f98-920c-76f6d3215168" alt="Alt Text" width="200">
7
- </a>
8
-
9
- ## Playground Demo
10
-
11
- [playground](https://kerebron.com) - be nice.
12
-
13
- ## Overview
14
-
15
- Using vanilla Prosemirror modules is often impossible because of
16
- incompatibilities.
17
-
18
- Kerebron forks several prosemirror projects into one monorepo in order to keep
19
- them in sync.
20
-
21
- Project is inspired on https://tiptap.dev/, but instead of building wrapper
22
- around a wrapper it borrows concept of extension and command manager.
23
-
24
- It has simplified tooling (deno), fewer dependencies and resulting in lower
25
- number of output npm modules.
26
-
27
- **Work in progress**
28
-
29
- ## Build
30
-
31
- ###
32
-
33
- Update git submodules
34
-
35
- ```sh
36
- git submodule init
37
- git submodule update
38
- ```
39
-
40
- ### Build static examples and `.wasm` files
41
-
42
- ```sh
43
- deno task -f @kerebron/odt-wasm build
44
- deno task -f @kerebron build
45
- ```
46
-
47
- ## Development
48
-
49
- To start example server:
50
-
51
- ```sh
52
- deno task dev
53
- ```
54
-
55
- ## Examples
56
-
57
- TODO
58
-
59
- ### NPM packages are generated using DNT
60
-
61
- - https://deno.com/blog/publish-esm-cjs-module-dnt - the easiest way to publish
62
- a hybrid npm module for ESM and CommonJS
63
- - https://github.com/denoland/dnt
64
- - https://gaubee.com/article/Publishing-Your-Deno-Project-as-a-Monorepo-using-dnt/
65
-
66
- To generate npm packages
67
-
68
- ```sh
69
- deno -A ./build/build_npm.ts
70
- ```
71
-
72
- ## Run through docker
73
-
74
- ```sh
75
- docker build . -t editor-test
76
- docker run -it -p 8000:8000 -v $PWD:/usr/src/app editor-test
77
- ```
78
-
79
- ## Prerequisites
80
-
81
- Install deno
82
-
83
- ```sh
84
- npm install -g deno
85
- ```
86
-
87
- Install rust
88
-
89
- ```sh
90
- curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
91
- ```
4
+ * ydoc => pm Event - grep for: yXmlChanged
5
+ * pm => ydoc Event - grep for: prosemirrorChanged
@@ -1,17 +1,26 @@
1
+ import type { Schema } from 'prosemirror-model';
1
2
  import type { Plugin } from 'prosemirror-state';
3
+ import * as Y from 'yjs';
2
4
  import * as awarenessProtocol from 'y-protocols/awareness';
3
- import { Extension } from '@kerebron/editor';
5
+ import { Converter, CoreEditor, Extension } from '@kerebron/editor';
4
6
  import type { CommandFactories, CommandShortcuts } from '@kerebron/editor/commands';
5
7
  export interface YjsProvider {
6
8
  on(eventName: string, callback: (event: any) => void): void;
7
9
  awareness: awarenessProtocol.Awareness;
8
10
  }
11
+ export type CreateWsProvider = (roomId: string) => [YjsProvider, Y.Doc];
12
+ export interface YjsConfig {
13
+ createWsProvider: CreateWsProvider;
14
+ }
9
15
  export declare class ExtensionYjs extends Extension {
16
+ config: YjsConfig;
10
17
  name: string;
11
18
  conflicts: string[];
12
19
  requires: string[];
13
20
  getCommandFactories(): Partial<CommandFactories>;
14
21
  getKeyboardShortcuts(): Partial<CommandShortcuts>;
22
+ constructor(config: YjsConfig);
23
+ getConverters(editor: CoreEditor, schema: Schema): Record<string, Converter>;
15
24
  getProseMirrorPlugins(): Plugin[];
16
25
  }
17
26
  //# sourceMappingURL=ExtensionYjs.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ExtensionYjs.d.ts","sourceRoot":"","sources":["../src/ExtensionYjs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAGhD,OAAO,KAAK,iBAAiB,MAAM,uBAAuB,CAAC;AAE3D,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAE7C,OAAO,KAAK,EACV,gBAAgB,EAChB,gBAAgB,EACjB,MAAM,2BAA2B,CAAC;AAMnC,MAAM,WAAW,WAAW;IAC1B,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,IAAI,GAAG,IAAI,CAAC;IAC5D,SAAS,EAAE,iBAAiB,CAAC,SAAS,CAAC;CACxC;AAED,qBAAa,YAAa,SAAQ,SAAS;IACzC,IAAI,SAAS;IAEJ,SAAS,WAAe;IACjC,QAAQ,WAAwB;IAGvB,mBAAmB,IAAI,OAAO,CAAC,gBAAgB,CAAC;IAOhD,oBAAoB,IAAI,OAAO,CAAC,gBAAgB,CAAC;IAOjD,qBAAqB,IAAI,MAAM,EAAE;CAY3C"}
1
+ {"version":3,"file":"ExtensionYjs.d.ts","sourceRoot":"","sources":["../src/ExtensionYjs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAQ,MAAM,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAEhD,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC;AACzB,OAAO,KAAK,iBAAiB,MAAM,uBAAuB,CAAC;AAE3D,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACpE,OAAO,KAAK,EACV,gBAAgB,EAChB,gBAAgB,EACjB,MAAM,2BAA2B,CAAC;AAOnC,MAAM,WAAW,WAAW;IAC1B,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,IAAI,GAAG,IAAI,CAAC;IAC5D,SAAS,EAAE,iBAAiB,CAAC,SAAS,CAAC;CACxC;AAaD,MAAM,MAAM,gBAAgB,GAAG,CAAC,MAAM,EAAE,MAAM,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;AAExE,MAAM,WAAW,SAAS;IACxB,gBAAgB,EAAE,gBAAgB,CAAC;CACpC;AAED,qBAAa,YAAa,SAAQ,SAAS;IAqBb,MAAM,EAAE,SAAS;IApB7C,IAAI,SAAS;IAEJ,SAAS,WAAe;IACjC,QAAQ,WAAwB;IAGvB,mBAAmB,IAAI,OAAO,CAAC,gBAAgB,CAAC;IAOhD,oBAAoB,IAAI,OAAO,CAAC,gBAAgB,CAAC;gBAO9B,MAAM,EAAE,SAAS;IAepC,aAAa,CACpB,MAAM,EAAE,UAAU,EAClB,MAAM,EAAE,MAAM,GACb,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC;IAyBnB,qBAAqB,IAAI,MAAM,EAAE;CAO3C"}
@@ -1,9 +1,18 @@
1
1
  import { Extension } from '@kerebron/editor';
2
+ import { ySyncPluginKey } from './keys.js';
2
3
  import { ySyncPlugin } from './ySyncPlugin.js';
3
4
  import { yPositionPlugin } from './yPositionPlugin.js';
4
5
  import { redo, undo, yUndoPlugin } from './yUndoPlugin.js';
5
- import { initProseMirrorDoc } from './convertUtils.js';
6
+ function stringToIndex(str, arrayLength) {
7
+ let hash = 0;
8
+ for (let i = 0; i < str.length; i++) {
9
+ hash = (hash << 5) - hash + str.charCodeAt(i);
10
+ hash |= 0; // force 32-bit integer
11
+ }
12
+ return Math.abs(hash) % arrayLength;
13
+ }
6
14
  export class ExtensionYjs extends Extension {
15
+ config;
7
16
  name = 'yjs';
8
17
  conflicts = ['history'];
9
18
  requires = ['remote-selection'];
@@ -20,13 +29,45 @@ export class ExtensionYjs extends Extension {
20
29
  'Mod-y': 'redo',
21
30
  };
22
31
  }
32
+ constructor(config) {
33
+ super();
34
+ this.config = config;
35
+ }
36
+ // changeUser(userName: string) {
37
+ // const idx = stringToIndex(userName, userColors.length);
38
+ // const userColor = userColors[idx];
39
+ // this.wsProvider.awareness.setLocalStateField('user', {
40
+ // name: userName,
41
+ // color: userColor.color,
42
+ // colorLight: userColor.light,
43
+ // });
44
+ // }
45
+ // //
46
+ getConverters(editor, schema) {
47
+ return {
48
+ 'yjs': {
49
+ fromDoc: async (document) => {
50
+ throw new Error('Not implemented');
51
+ },
52
+ toDoc: async (buffer) => {
53
+ const roomId = new TextDecoder().decode(buffer);
54
+ const tr = editor.state.tr.setMeta(ySyncPluginKey, {
55
+ roomId: '',
56
+ });
57
+ editor.view.dispatch(tr);
58
+ setTimeout(() => {
59
+ const tr = editor.state.tr.setMeta(ySyncPluginKey, { roomId });
60
+ editor.view.dispatch(tr);
61
+ }, 100);
62
+ return schema.topNodeType.createAndFill();
63
+ },
64
+ },
65
+ };
66
+ }
23
67
  getProseMirrorPlugins() {
24
- const ydoc = this.config.ydoc;
25
- const fragment = ydoc.getXmlFragment('prosemirror');
26
- const { mapping } = initProseMirrorDoc(fragment, this.editor.schema);
27
68
  return [
28
- ySyncPlugin(fragment, { mapping }),
29
- yPositionPlugin(this.config.provider.awareness, this.editor),
69
+ ySyncPlugin(this.editor.schema, this.config.createWsProvider),
70
+ yPositionPlugin(this.editor),
30
71
  yUndoPlugin(),
31
72
  ];
32
73
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ExtensionYjs.js","sourceRoot":"","sources":["../src/ExtensionYjs.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAM7C,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAOvD,MAAM,OAAO,YAAa,SAAQ,SAAS;IACzC,IAAI,GAAG,KAAK,CAAC;IAEJ,SAAS,GAAG,CAAC,SAAS,CAAC,CAAC;IACjC,QAAQ,GAAG,CAAC,kBAAkB,CAAC,CAAC;IAEhC,mHAAmH;IAC1G,mBAAmB;QAC1B,OAAO;YACL,MAAM,EAAE,GAAG,EAAE,CAAC,IAAI;YAClB,MAAM,EAAE,GAAG,EAAE,CAAC,IAAI;SACnB,CAAC;IACJ,CAAC;IAEQ,oBAAoB;QAC3B,OAAO;YACL,OAAO,EAAE,MAAM;YACf,OAAO,EAAE,MAAM;SAChB,CAAC;IACJ,CAAC;IAEQ,qBAAqB;QAC5B,MAAM,IAAI,GAAU,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;QACrC,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC;QAEpD,MAAM,EAAE,OAAO,EAAE,GAAG,kBAAkB,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAErE,OAAO;YACL,WAAW,CAAC,QAAQ,EAAE,EAAE,OAAO,EAAE,CAAC;YAClC,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC;YAC5D,WAAW,EAAE;SACd,CAAC;IACJ,CAAC;CACF"}
1
+ {"version":3,"file":"ExtensionYjs.js","sourceRoot":"","sources":["../src/ExtensionYjs.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import { type MarkSpec } from 'prosemirror-model';
2
+ import { Mark } from '@kerebron/editor';
3
+ export declare class MarkYChange extends Mark {
4
+ name: string;
5
+ getMarkSpec(): MarkSpec;
6
+ }
7
+ //# sourceMappingURL=MarkYChange.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MarkYChange.d.ts","sourceRoot":"","sources":["../src/MarkYChange.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAExC,qBAAa,WAAY,SAAQ,IAAI;IAC1B,IAAI,SAAa;IAEjB,WAAW,IAAI,QAAQ;CAgBjC"}
@@ -0,0 +1,21 @@
1
+ import { Mark } from '@kerebron/editor';
2
+ export class MarkYChange extends Mark {
3
+ name = 'ychange';
4
+ getMarkSpec() {
5
+ return {
6
+ attrs: {
7
+ user: { default: null },
8
+ type: { default: null },
9
+ },
10
+ inclusive: false,
11
+ parseDOM: [{ tag: 'ychange' }],
12
+ toDOM(node) {
13
+ return ['ychange', {
14
+ ychange_user: node.attrs.user,
15
+ ychange_type: node.attrs.type,
16
+ }];
17
+ },
18
+ };
19
+ }
20
+ }
21
+ //# sourceMappingURL=MarkYChange.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MarkYChange.js","sourceRoot":"","sources":["../src/MarkYChange.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAExC,MAAM,OAAO,WAAY,SAAQ,IAAI;IAC1B,IAAI,GAAG,SAAS,CAAC;IAEjB,WAAW;QAClB,OAAO;YACL,KAAK,EAAE;gBACL,IAAI,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE;gBACvB,IAAI,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE;aACxB;YACD,SAAS,EAAE,KAAK;YAChB,QAAQ,EAAE,CAAC,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC;YAC9B,KAAK,CAAC,IAAI;gBACR,OAAO,CAAC,SAAS,EAAE;wBACjB,YAAY,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI;wBAC7B,YAAY,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI;qBAC9B,CAAC,CAAC;YACL,CAAC;SACF,CAAC;IACJ,CAAC;CACF"}
@@ -0,0 +1,60 @@
1
+ import { mutex } from 'lib0/mutex';
2
+ import { Node } from 'prosemirror-model';
3
+ import { EditorState, Transaction } from 'prosemirror-state';
4
+ import * as Y from 'yjs';
5
+ import { ProsemirrorMapping } from './lib.js';
6
+ import { type ColorDef, type YSyncPluginState } from './ySyncPlugin.js';
7
+ export declare const defaultColors: Array<ColorDef>;
8
+ export interface BindingMetadata {
9
+ mapping: ProsemirrorMapping;
10
+ isOMark: Map<string, boolean>;
11
+ }
12
+ interface TransactionSelection {
13
+ type: string;
14
+ anchor: Y.RelativePosition;
15
+ head: Y.RelativePosition;
16
+ }
17
+ export declare const getRelativeSelection: (pmbinding: ProsemirrorBinding, state: EditorState) => TransactionSelection;
18
+ interface IEditorView {
19
+ state: EditorState;
20
+ dispatch(tr: Transaction): void;
21
+ fake?: boolean;
22
+ }
23
+ /**
24
+ * Binding for prosemirror.
25
+ *
26
+ * @protected
27
+ */
28
+ export declare class ProsemirrorBinding implements BindingMetadata {
29
+ readonly mapping: ProsemirrorMapping;
30
+ ydoc: Y.Doc;
31
+ isOMark: Map<string, boolean>;
32
+ type: Y.XmlFragment;
33
+ readonly mux: mutex;
34
+ prosemirrorView?: IEditorView;
35
+ private _beforeTransactionSelection;
36
+ private readonly beforeAllTransactions;
37
+ private readonly afterAllTransactions;
38
+ private _observeFunction;
39
+ private _domSelectionInView;
40
+ get beforeTransactionSelection(): TransactionSelection | null;
41
+ set beforeTransactionSelection(value: TransactionSelection);
42
+ constructor(yXmlFragment: Y.XmlFragment, mapping?: ProsemirrorMapping);
43
+ changeRoom(yXmlFragment: Y.XmlFragment): void;
44
+ debug(msg?: string): void;
45
+ _isLocalCursorInView(): boolean;
46
+ _isDomSelectionInView(): boolean;
47
+ renderSnapshot(snapshot: Y.Snapshot | undefined, prevSnapshot: Y.Snapshot | undefined): void;
48
+ unrenderSnapshot(): void;
49
+ _forceRerender(): void;
50
+ _renderSnapshot(snapshot: Y.Snapshot | Uint8Array | undefined, prevSnapshot: Y.Snapshot | Uint8Array, pluginState: YSyncPluginState): void;
51
+ yXmlChanged(events: Array<Y.YEvent<any>>, transaction: Y.Transaction): void;
52
+ prosemirrorChanged(doc: Node): void;
53
+ /**
54
+ * View is ready to listen to changes. Register observers.
55
+ */
56
+ initView(prosemirrorView?: IEditorView): void;
57
+ destroy(): void;
58
+ }
59
+ export {};
60
+ //# sourceMappingURL=ProsemirrorBinding.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProsemirrorBinding.d.ts","sourceRoot":"","sources":["../src/ProsemirrorBinding.ts"],"names":[],"mappings":"AAMA,OAAO,EAAe,KAAK,EAAE,MAAM,YAAY,CAAC;AAIhD,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AACzC,OAAO,EAEL,WAAW,EAIX,WAAW,EACZ,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC;AAKzB,OAAO,EAEL,kBAAkB,EAEnB,MAAM,UAAU,CAAC;AAMlB,OAAO,EAAE,KAAK,QAAQ,EAAE,KAAK,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAGxE,eAAO,MAAM,aAAa,EAAE,KAAK,CAAC,QAAQ,CAGxC,CAAC;AAmBH,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,kBAAkB,CAAC;IAC5B,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC/B;AAED,UAAU,oBAAoB;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,CAAC,CAAC,gBAAgB,CAAC;IAC3B,IAAI,EAAE,CAAC,CAAC,gBAAgB,CAAC;CAC1B;AAyDD,eAAO,MAAM,oBAAoB,GAC/B,WAAW,kBAAkB,EAC7B,OAAO,WAAW,KACjB,oBAYD,CAAC;AAEH,UAAU,WAAW;IACnB,KAAK,EAAE,WAAW,CAAC;IACnB,QAAQ,CAAC,EAAE,EAAE,WAAW,GAAG,IAAI,CAAC;IAChC,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED;;;;GAIG;AACH,qBAAa,kBAAmB,YAAW,eAAe;aAsBtC,OAAO,EAAE,kBAAkB;IArBtC,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC;IACZ,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9B,IAAI,EAAE,CAAC,CAAC,WAAW,CAAC;IAC3B,SAAgB,GAAG,EAAE,KAAK,CAAC;IACpB,eAAe,CAAC,EAAE,WAAW,CAAC;IAErC,OAAO,CAAC,2BAA2B,CAAqC;IACxE,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAAa;IACnD,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAa;IAElD,OAAO,CAAC,gBAAgB,CAAyC;IACjE,OAAO,CAAC,mBAAmB,CAAkB;IAC7C,IAAI,0BAA0B,IAAI,oBAAoB,GAAG,IAAI,CAE5D;IACD,IAAI,0BAA0B,CAAC,KAAK,EAAE,oBAAoB,EAEzD;gBAGC,YAAY,EAAE,CAAC,CAAC,WAAW,EACX,OAAO,GAAE,kBAA8B;IAsCzD,UAAU,CAAC,YAAY,EAAE,CAAC,CAAC,WAAW;IAUtC,KAAK,CAAC,GAAG,SAAqB;IAI9B,oBAAoB,IAAI,OAAO;IAY/B,qBAAqB,IAAI,OAAO;IA6BhC,cAAc,CACZ,QAAQ,EAAE,CAAC,CAAC,QAAQ,GAAG,SAAS,EAChC,YAAY,EAAE,CAAC,CAAC,QAAQ,GAAG,SAAS;IAgBtC,gBAAgB;IA+BhB,cAAc;IAsDd,eAAe,CACb,QAAQ,EAAE,CAAC,CAAC,QAAQ,GAAG,UAAU,GAAG,SAAS,EAC7C,YAAY,EAAE,CAAC,CAAC,QAAQ,GAAG,UAAU,EACrC,WAAW,EAAE,gBAAgB;IA+H/B,WAAW,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,WAAW;IAiEpE,kBAAkB,CAAC,GAAG,EAAE,IAAI;IAa5B;;OAEG;IACH,QAAQ,CAAC,eAAe,CAAC,EAAE,WAAW;IAUtC,OAAO;CAcR"}