@kerebron/extension-menu 0.4.3 → 0.4.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 (142) hide show
  1. package/README.md +80 -0
  2. package/assets/custom-menu.css +26 -6
  3. package/assets/menu.css +2 -2
  4. package/esm/_dnt.polyfills.d.ts +101 -0
  5. package/esm/_dnt.polyfills.d.ts.map +1 -0
  6. package/esm/_dnt.polyfills.js +127 -0
  7. package/esm/editor/src/utilities/getShadowRoot.d.ts +2 -0
  8. package/esm/editor/src/utilities/getShadowRoot.d.ts.map +1 -0
  9. package/esm/editor/src/utilities/getShadowRoot.js +16 -0
  10. package/esm/editor/src/utilities/mod.d.ts +6 -0
  11. package/esm/editor/src/utilities/mod.d.ts.map +1 -0
  12. package/esm/editor/src/utilities/mod.js +5 -0
  13. package/esm/editor/src/utilities/toRawTextResult.d.ts +3 -0
  14. package/esm/editor/src/utilities/toRawTextResult.d.ts.map +1 -0
  15. package/esm/editor/src/utilities/toRawTextResult.js +21 -0
  16. package/esm/extension-autocomplete/src/AutocompletePlugin.d.ts +8 -0
  17. package/esm/extension-autocomplete/src/AutocompletePlugin.d.ts.map +1 -0
  18. package/esm/extension-autocomplete/src/AutocompletePlugin.js +232 -0
  19. package/esm/extension-autocomplete/src/DefaultRenderer.d.ts +17 -0
  20. package/esm/extension-autocomplete/src/DefaultRenderer.d.ts.map +1 -0
  21. package/esm/extension-autocomplete/src/DefaultRenderer.js +137 -0
  22. package/esm/extension-autocomplete/src/ExtensionAutocomplete.d.ts +26 -0
  23. package/esm/extension-autocomplete/src/ExtensionAutocomplete.d.ts.map +1 -0
  24. package/esm/extension-autocomplete/src/ExtensionAutocomplete.js +30 -0
  25. package/esm/extension-autocomplete/src/createDefaultMatcher.d.ts +11 -0
  26. package/esm/extension-autocomplete/src/createDefaultMatcher.d.ts.map +1 -0
  27. package/esm/extension-autocomplete/src/createDefaultMatcher.js +58 -0
  28. package/esm/extension-autocomplete/src/createRegexMatcher.d.ts +4 -0
  29. package/esm/extension-autocomplete/src/createRegexMatcher.d.ts.map +1 -0
  30. package/esm/extension-autocomplete/src/createRegexMatcher.js +50 -0
  31. package/esm/extension-autocomplete/src/mod.d.ts +3 -0
  32. package/esm/extension-autocomplete/src/mod.d.ts.map +1 -0
  33. package/esm/extension-autocomplete/src/mod.js +2 -0
  34. package/esm/extension-autocomplete/src/types.d.ts +60 -0
  35. package/esm/extension-autocomplete/src/types.d.ts.map +1 -0
  36. package/esm/extension-autocomplete/src/types.js +1 -0
  37. package/esm/extension-basic-editor/src/ExtensionHtml.d.ts +15 -0
  38. package/esm/extension-basic-editor/src/ExtensionHtml.d.ts.map +1 -0
  39. package/esm/extension-basic-editor/src/ExtensionHtml.js +108 -0
  40. package/esm/extension-lsp/src/DiagnosticPlugin.d.ts +32 -0
  41. package/esm/extension-lsp/src/DiagnosticPlugin.d.ts.map +1 -0
  42. package/esm/extension-lsp/src/DiagnosticPlugin.js +131 -0
  43. package/esm/extension-lsp/src/ExtensionLsp.d.ts +25 -0
  44. package/esm/extension-lsp/src/ExtensionLsp.d.ts.map +1 -0
  45. package/esm/extension-lsp/src/ExtensionLsp.js +126 -0
  46. package/esm/extension-lsp/src/LSPClient.d.ts +56 -0
  47. package/esm/extension-lsp/src/LSPClient.d.ts.map +1 -0
  48. package/esm/extension-lsp/src/LSPClient.js +449 -0
  49. package/esm/extension-lsp/src/LspStatus.d.ts +34 -0
  50. package/esm/extension-lsp/src/LspStatus.d.ts.map +1 -0
  51. package/esm/extension-lsp/src/LspStatus.js +127 -0
  52. package/esm/extension-lsp/src/computeIncrementalChanges.d.ts +8 -0
  53. package/esm/extension-lsp/src/computeIncrementalChanges.d.ts.map +1 -0
  54. package/esm/extension-lsp/src/computeIncrementalChanges.js +82 -0
  55. package/esm/extension-lsp/src/createLspAutocomplete.d.ts +23 -0
  56. package/esm/extension-lsp/src/createLspAutocomplete.d.ts.map +1 -0
  57. package/esm/extension-lsp/src/createLspAutocomplete.js +68 -0
  58. package/esm/extension-lsp/src/workspace.d.ts +62 -0
  59. package/esm/extension-lsp/src/workspace.d.ts.map +1 -0
  60. package/esm/extension-lsp/src/workspace.js +168 -0
  61. package/esm/extension-markdown/src/DocumentMarkdownInlineTokenizer.d.ts +36 -0
  62. package/esm/extension-markdown/src/DocumentMarkdownInlineTokenizer.d.ts.map +1 -0
  63. package/esm/extension-markdown/src/DocumentMarkdownInlineTokenizer.js +240 -0
  64. package/esm/extension-markdown/src/DocumentMarkdownTokenizer.d.ts +26 -0
  65. package/esm/extension-markdown/src/DocumentMarkdownTokenizer.d.ts.map +1 -0
  66. package/esm/extension-markdown/src/DocumentMarkdownTokenizer.js +115 -0
  67. package/esm/extension-markdown/src/ExtensionMarkdown.d.ts +22 -0
  68. package/esm/extension-markdown/src/ExtensionMarkdown.d.ts.map +1 -0
  69. package/esm/extension-markdown/src/ExtensionMarkdown.js +48 -0
  70. package/esm/extension-markdown/src/MarkdownParser.d.ts +61 -0
  71. package/esm/extension-markdown/src/MarkdownParser.d.ts.map +1 -0
  72. package/esm/extension-markdown/src/MarkdownParser.js +249 -0
  73. package/esm/extension-markdown/src/MarkdownSerializer.d.ts +42 -0
  74. package/esm/extension-markdown/src/MarkdownSerializer.d.ts.map +1 -0
  75. package/esm/extension-markdown/src/MarkdownSerializer.js +325 -0
  76. package/esm/extension-markdown/src/PositionMapper.d.ts +15 -0
  77. package/esm/extension-markdown/src/PositionMapper.d.ts.map +1 -0
  78. package/esm/extension-markdown/src/PositionMapper.js +100 -0
  79. package/esm/extension-markdown/src/TokenSource.d.ts +11 -0
  80. package/esm/extension-markdown/src/TokenSource.d.ts.map +1 -0
  81. package/esm/extension-markdown/src/TokenSource.js +39 -0
  82. package/esm/extension-markdown/src/mdToPmConverter.d.ts +5 -0
  83. package/esm/extension-markdown/src/mdToPmConverter.d.ts.map +1 -0
  84. package/esm/extension-markdown/src/mdToPmConverter.js +111 -0
  85. package/esm/extension-markdown/src/pmToMdConverter.d.ts +16 -0
  86. package/esm/extension-markdown/src/pmToMdConverter.d.ts.map +1 -0
  87. package/esm/extension-markdown/src/pmToMdConverter.js +433 -0
  88. package/esm/extension-markdown/src/token_handlers/basic_token_handlers.d.ts +4 -0
  89. package/esm/extension-markdown/src/token_handlers/basic_token_handlers.d.ts.map +1 -0
  90. package/esm/extension-markdown/src/token_handlers/basic_token_handlers.js +151 -0
  91. package/esm/extension-markdown/src/token_handlers/footnote_token_handlers.d.ts +3 -0
  92. package/esm/extension-markdown/src/token_handlers/footnote_token_handlers.d.ts.map +1 -0
  93. package/esm/extension-markdown/src/token_handlers/footnote_token_handlers.js +34 -0
  94. package/esm/extension-markdown/src/token_handlers/inline_token_handlers.d.ts +6 -0
  95. package/esm/extension-markdown/src/token_handlers/inline_token_handlers.d.ts.map +1 -0
  96. package/esm/extension-markdown/src/token_handlers/inline_token_handlers.js +380 -0
  97. package/esm/extension-markdown/src/token_handlers/lists_token_handlers.d.ts +3 -0
  98. package/esm/extension-markdown/src/token_handlers/lists_token_handlers.d.ts.map +1 -0
  99. package/esm/extension-markdown/src/token_handlers/lists_token_handlers.js +323 -0
  100. package/esm/extension-markdown/src/token_handlers/table_token_handlers.d.ts +9 -0
  101. package/esm/extension-markdown/src/token_handlers/table_token_handlers.d.ts.map +1 -0
  102. package/esm/extension-markdown/src/token_handlers/table_token_handlers.js +308 -0
  103. package/esm/extension-markdown/src/treeSitterTokenizer.d.ts +5 -0
  104. package/esm/extension-markdown/src/treeSitterTokenizer.d.ts.map +1 -0
  105. package/esm/extension-markdown/src/treeSitterTokenizer.js +769 -0
  106. package/esm/extension-markdown/src/types.d.ts +28 -0
  107. package/esm/extension-markdown/src/types.d.ts.map +1 -0
  108. package/esm/extension-markdown/src/types.js +131 -0
  109. package/esm/extension-markdown/src/utils.d.ts +8 -0
  110. package/esm/extension-markdown/src/utils.d.ts.map +1 -0
  111. package/esm/extension-markdown/src/utils.js +86 -0
  112. package/esm/extension-menu/src/CustomMenuPlugin.d.ts +7 -3
  113. package/esm/extension-menu/src/CustomMenuPlugin.d.ts.map +1 -1
  114. package/esm/extension-menu/src/CustomMenuPlugin.js +60 -4
  115. package/esm/extension-menu/src/ExtensionCustomMenu.d.ts +6 -2
  116. package/esm/extension-menu/src/ExtensionCustomMenu.d.ts.map +1 -1
  117. package/esm/extension-menu/src/ExtensionCustomMenu.js +36 -1
  118. package/esm/extension-menu/src/mod.d.ts +1 -0
  119. package/esm/extension-menu/src/mod.d.ts.map +1 -1
  120. package/esm/extension-menu/src/mod.js +1 -0
  121. package/esm/extension-yjs/src/CollaborationStatus.d.ts +59 -0
  122. package/esm/extension-yjs/src/CollaborationStatus.d.ts.map +1 -0
  123. package/esm/extension-yjs/src/CollaborationStatus.js +286 -0
  124. package/esm/tree-sitter-shim/src/main.d.ts +15 -0
  125. package/esm/tree-sitter-shim/src/main.d.ts.map +1 -0
  126. package/esm/tree-sitter-shim/src/main.js +25 -0
  127. package/esm/tree-sitter-shim/src/tree_sitter/node.d.ts +6 -0
  128. package/esm/tree-sitter-shim/src/tree_sitter/node.d.ts.map +1 -0
  129. package/esm/tree-sitter-shim/src/tree_sitter/node.js +1 -0
  130. package/esm/tree-sitter-shim/src/tree_sitter/parser.d.ts +7 -0
  131. package/esm/tree-sitter-shim/src/tree_sitter/parser.d.ts.map +1 -0
  132. package/esm/tree-sitter-shim/src/tree_sitter/parser.js +5 -0
  133. package/esm/tree-sitter-shim/src/tree_sitter/tree.d.ts +6 -0
  134. package/esm/tree-sitter-shim/src/tree_sitter/tree.d.ts.map +1 -0
  135. package/esm/tree-sitter-shim/src/tree_sitter/tree.js +1 -0
  136. package/esm/wasm/src/mod.d.ts +12 -0
  137. package/esm/wasm/src/mod.d.ts.map +1 -0
  138. package/esm/wasm/src/mod.js +48 -0
  139. package/esm/wasm/wasm.d.ts +138 -0
  140. package/esm/wasm/wasm.d.ts.map +1 -0
  141. package/esm/wasm/wasm.js +120 -0
  142. package/package.json +4 -2
@@ -0,0 +1,28 @@
1
+ type TupleArray = Array<[string, string]>;
2
+ export declare const NESTING_OPENING = 1;
3
+ export declare const NESTING_SELF_CLOSING = 0;
4
+ export declare const NESTING_CLOSING = -1;
5
+ type Nesting = -1 | 0 | 1;
6
+ export declare class Token {
7
+ type: string;
8
+ tag: string;
9
+ nesting: Nesting;
10
+ attrs: TupleArray | null;
11
+ map: [number] | [number, number] | [number, number, number, number] | null;
12
+ level: number;
13
+ children: Array<Token> | null;
14
+ content: string;
15
+ markup: string;
16
+ info: string;
17
+ meta: any;
18
+ block: boolean;
19
+ hidden: boolean;
20
+ constructor(type: string, tag: string, nesting: Nesting);
21
+ attrIndex(name: string): number;
22
+ attrPush(attrData: [string, string]): void;
23
+ attrSet(name: string, value: string): void;
24
+ attrGet(name: string): string | null;
25
+ attrJoin(name: string, value: string): void;
26
+ }
27
+ export {};
28
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/extension-markdown/src/types.ts"],"names":[],"mappings":"AAEA,KAAK,UAAU,GAAG,KAAK,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;AAE1C,eAAO,MAAM,eAAe,IAAI,CAAC;AACjC,eAAO,MAAM,oBAAoB,IAAI,CAAC;AACtC,eAAO,MAAM,eAAe,KAAK,CAAC;AAElC,KAAK,OAAO,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAE1B,qBAAa,KAAK;IAcP,IAAI,EAAE,MAAM;IACZ,GAAG,EAAE,MAAM;IACX,OAAO,EAAE,OAAO;IAfzB,KAAK,EAAE,UAAU,GAAG,IAAI,CAAQ;IAChC,GAAG,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CACnE;IACP,KAAK,EAAE,MAAM,CAAK;IAClB,QAAQ,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,IAAI,CAAQ;IACrC,OAAO,EAAE,MAAM,CAAM;IACrB,MAAM,EAAE,MAAM,CAAM;IACpB,IAAI,EAAE,MAAM,CAAM;IAClB,IAAI,EAAE,GAAG,CAAQ;IACjB,KAAK,UAAS;IACd,MAAM,UAAS;gBAGN,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,OAAO;IAIzB,SAAS,CAAC,IAAI,EAAE,MAAM;IAWtB,QAAQ,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC;IAQnC,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM;IAWnC,OAAO,CAAC,IAAI,EAAE,MAAM;IASpB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM;CASrC"}
@@ -0,0 +1,131 @@
1
+ // https://github.com/markdown-it/markdown-it/blob/master/lib/token.mjs
2
+ export const NESTING_OPENING = 1;
3
+ export const NESTING_SELF_CLOSING = 0;
4
+ export const NESTING_CLOSING = -1;
5
+ export class Token {
6
+ constructor(type, tag, nesting) {
7
+ Object.defineProperty(this, "type", {
8
+ enumerable: true,
9
+ configurable: true,
10
+ writable: true,
11
+ value: type
12
+ });
13
+ Object.defineProperty(this, "tag", {
14
+ enumerable: true,
15
+ configurable: true,
16
+ writable: true,
17
+ value: tag
18
+ });
19
+ Object.defineProperty(this, "nesting", {
20
+ enumerable: true,
21
+ configurable: true,
22
+ writable: true,
23
+ value: nesting
24
+ });
25
+ Object.defineProperty(this, "attrs", {
26
+ enumerable: true,
27
+ configurable: true,
28
+ writable: true,
29
+ value: null
30
+ });
31
+ Object.defineProperty(this, "map", {
32
+ enumerable: true,
33
+ configurable: true,
34
+ writable: true,
35
+ value: null
36
+ });
37
+ Object.defineProperty(this, "level", {
38
+ enumerable: true,
39
+ configurable: true,
40
+ writable: true,
41
+ value: 0
42
+ });
43
+ Object.defineProperty(this, "children", {
44
+ enumerable: true,
45
+ configurable: true,
46
+ writable: true,
47
+ value: null
48
+ });
49
+ Object.defineProperty(this, "content", {
50
+ enumerable: true,
51
+ configurable: true,
52
+ writable: true,
53
+ value: ''
54
+ });
55
+ Object.defineProperty(this, "markup", {
56
+ enumerable: true,
57
+ configurable: true,
58
+ writable: true,
59
+ value: ''
60
+ });
61
+ Object.defineProperty(this, "info", {
62
+ enumerable: true,
63
+ configurable: true,
64
+ writable: true,
65
+ value: ''
66
+ });
67
+ Object.defineProperty(this, "meta", {
68
+ enumerable: true,
69
+ configurable: true,
70
+ writable: true,
71
+ value: null
72
+ });
73
+ Object.defineProperty(this, "block", {
74
+ enumerable: true,
75
+ configurable: true,
76
+ writable: true,
77
+ value: false
78
+ });
79
+ Object.defineProperty(this, "hidden", {
80
+ enumerable: true,
81
+ configurable: true,
82
+ writable: true,
83
+ value: false
84
+ });
85
+ }
86
+ attrIndex(name) {
87
+ if (!this.attrs)
88
+ return -1;
89
+ const attrs = this.attrs;
90
+ for (let i = 0, len = attrs.length; i < len; i++) {
91
+ if (attrs[i][0] === name)
92
+ return i;
93
+ }
94
+ return -1;
95
+ }
96
+ attrPush(attrData) {
97
+ if (this.attrs) {
98
+ this.attrs.push(attrData);
99
+ }
100
+ else {
101
+ this.attrs = [attrData];
102
+ }
103
+ }
104
+ attrSet(name, value) {
105
+ const idx = this.attrIndex(name);
106
+ const attrData = [name, value];
107
+ if (idx < 0 || !this.attrs) {
108
+ this.attrPush(attrData);
109
+ }
110
+ else {
111
+ this.attrs[idx] = attrData;
112
+ }
113
+ }
114
+ attrGet(name) {
115
+ const idx = this.attrIndex(name);
116
+ let value = null;
117
+ if (idx >= 0 && this.attrs) {
118
+ value = this.attrs[idx][1];
119
+ }
120
+ return value;
121
+ }
122
+ attrJoin(name, value) {
123
+ const idx = this.attrIndex(name);
124
+ if (idx < 0 || !this.attrs) {
125
+ this.attrPush([name, value]);
126
+ }
127
+ else {
128
+ this.attrs[idx][1] = this.attrs[idx][1] + ' ' + value;
129
+ }
130
+ }
131
+ }
@@ -0,0 +1,8 @@
1
+ export declare function spaces(num: number): string;
2
+ export declare function inchesToSpaces(value: string): number;
3
+ export declare function inchesToMm(value: string): number;
4
+ export declare function inchesToPixels(value: string): number;
5
+ export declare function fixCharacters(text: string): string;
6
+ export declare function numberString(num: number, symbol?: string): string;
7
+ export declare function romanize(num: number): string;
8
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/extension-markdown/src/utils.ts"],"names":[],"mappings":"AAAA,wBAAgB,MAAM,CAAC,GAAG,EAAE,MAAM,UAEjC;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAQpD;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAchD;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAKpD;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,UASzC;AAED,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,SAAM,UAkBrD;AAED,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAyB5C"}
@@ -0,0 +1,86 @@
1
+ export function spaces(num) {
2
+ return ' '.repeat(num || 0);
3
+ }
4
+ export function inchesToSpaces(value) {
5
+ if (!value) {
6
+ return 0;
7
+ }
8
+ if (value.endsWith('in')) {
9
+ return Math.floor(parseFloat(value.substring(0, value.length - 2)) / 0.125);
10
+ }
11
+ return 0;
12
+ }
13
+ export function inchesToMm(value) {
14
+ if (!value) {
15
+ return 0;
16
+ }
17
+ if (value.endsWith('pt')) {
18
+ return parseFloat(value.substring(0, value.length - 2)) * 0.3528;
19
+ }
20
+ if (value.endsWith('in')) {
21
+ return parseFloat(value.substring(0, value.length - 2)) * 25.4;
22
+ }
23
+ if (value.endsWith('em')) {
24
+ return parseFloat(value.substring(0, value.length - 2)) / 0.125 * 25.4;
25
+ }
26
+ return 0;
27
+ }
28
+ export function inchesToPixels(value) {
29
+ if (!value) {
30
+ return 0;
31
+ }
32
+ return Math.floor(100 * inchesToMm(value));
33
+ }
34
+ export function fixCharacters(text) {
35
+ return text
36
+ .replace(/’/g, "'")
37
+ .replace(/“/g, '"')
38
+ .replace(/”/g, '"')
39
+ // deno-lint-ignore no-control-regex
40
+ .replace(/\x0b/g, ' ')
41
+ .replace(/\u201d/g, '"')
42
+ .replace(/\u201c/g, '"');
43
+ }
44
+ export function numberString(num, symbol = '1') {
45
+ if (['a'].includes(symbol)) {
46
+ return String.fromCharCode('a'.charCodeAt(0) + num - 1) + '. ';
47
+ }
48
+ if (['A'].includes(symbol)) {
49
+ return String.fromCharCode('A'.charCodeAt(0) + num - 1) + '. ';
50
+ }
51
+ if (['I'].includes(symbol)) {
52
+ return `${romanize(num)}. `;
53
+ }
54
+ if (['i'].includes(symbol)) {
55
+ return `${romanize(num).toLowerCase()}. `;
56
+ }
57
+ if (['1'].includes(symbol)) {
58
+ return `${num}. `;
59
+ }
60
+ return `${num}. `;
61
+ }
62
+ export function romanize(num) {
63
+ const lookup = [
64
+ ['M', 1000],
65
+ ['CM', 900],
66
+ ['D', 500],
67
+ ['CD', 400],
68
+ ['C', 100],
69
+ ['XC', 90],
70
+ ['L', 50],
71
+ ['XL', 40],
72
+ ['X', 10],
73
+ ['IX', 9],
74
+ ['V', 5],
75
+ ['IV', 4],
76
+ ['I', 1],
77
+ ];
78
+ let roman = '';
79
+ for (const [symbol, value] of lookup) {
80
+ while (num >= value) {
81
+ roman += symbol;
82
+ num -= value;
83
+ }
84
+ }
85
+ return roman;
86
+ }
@@ -1,7 +1,6 @@
1
1
  import { EditorState, Plugin } from 'prosemirror-state';
2
2
  import { EditorView } from 'prosemirror-view';
3
3
  import type { CoreEditor } from '../../editor/src/mod.js';
4
- import { CustomMenuOptions } from './ExtensionCustomMenu.js';
5
4
  import type { MenuElement } from './menu.js';
6
5
  interface ToolItem {
7
6
  id: string;
@@ -19,6 +18,7 @@ export declare class CustomMenuView {
19
18
  pinnedDropdownMenu: HTMLElement | null;
20
19
  modal: HTMLElement | null;
21
20
  tools: ToolItem[];
21
+ trailingElements: MenuElement[];
22
22
  root: Document | ShadowRoot;
23
23
  resizeHandle: HTMLElement;
24
24
  editorContainer: HTMLElement;
@@ -26,7 +26,7 @@ export declare class CustomMenuView {
26
26
  private closePinnedDropdownHandler;
27
27
  private submenuStack;
28
28
  private pinnedDropdownStack;
29
- constructor(editorView: EditorView, editor: CoreEditor, content: readonly (readonly MenuElement[])[]);
29
+ constructor(editorView: EditorView, editor: CoreEditor, content: readonly (readonly MenuElement[])[], trailingElements?: readonly MenuElement[]);
30
30
  private initializeTools;
31
31
  /**
32
32
  * Generate a stable ID from a label by converting it to a kebab-case slug.
@@ -54,8 +54,12 @@ export declare class CustomMenuView {
54
54
  update(view: EditorView, prevState: EditorState): void;
55
55
  destroy(): void;
56
56
  }
57
+ export interface CustomMenuPluginOptions {
58
+ content: readonly (readonly MenuElement[])[];
59
+ trailingElements?: readonly MenuElement[];
60
+ }
57
61
  export declare class CustomMenuPlugin extends Plugin {
58
- constructor(editor: CoreEditor, options: CustomMenuOptions);
62
+ constructor(editor: CoreEditor, options: CustomMenuPluginOptions);
59
63
  }
60
64
  export {};
61
65
  //# sourceMappingURL=CustomMenuPlugin.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"CustomMenuPlugin.d.ts","sourceRoot":"","sources":["../../../src/extension-menu/src/CustomMenuPlugin.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAE1D,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAE7D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAuB7C,UAAU,QAAQ;IAChB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,WAAW,CAAC;IACrB,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,qBAAa,cAAc;IAkBvB,QAAQ,CAAC,UAAU,EAAE,UAAU;IAC/B,QAAQ,CAAC,MAAM,EAAE,UAAU;IAC3B,QAAQ,CAAC,OAAO,EAAE,SAAS,CAAC,SAAS,WAAW,EAAE,CAAC,EAAE;IAnBvD,OAAO,EAAE,WAAW,CAAC;IACrB,OAAO,EAAE,WAAW,CAAC;IACrB,YAAY,EAAE,WAAW,CAAC;IAC1B,kBAAkB,EAAE,WAAW,GAAG,IAAI,CAAQ;IAC9C,KAAK,EAAE,WAAW,GAAG,IAAI,CAAQ;IACjC,KAAK,EAAE,QAAQ,EAAE,CAAM;IACvB,IAAI,EAAE,QAAQ,GAAG,UAAU,CAAC;IAC5B,YAAY,EAAE,WAAW,CAAC;IAC1B,eAAe,EAAE,WAAW,CAAC;IAC7B,OAAO,CAAC,oBAAoB,CAA0C;IACtE,OAAO,CAAC,0BAA0B,CAA0C;IAC5E,OAAO,CAAC,YAAY,CAAmD;IACvE,OAAO,CAAC,mBAAmB,CAEpB;gBAGI,UAAU,EAAE,UAAU,EACtB,MAAM,EAAE,UAAU,EAClB,OAAO,EAAE,SAAS,CAAC,SAAS,WAAW,EAAE,CAAC,EAAE;IAgEvD,OAAO,CAAC,eAAe;IAgCvB;;;OAGG;IACH,OAAO,CAAC,gBAAgB;IAyBxB;;OAEG;IACH,OAAO,CAAC,UAAU;IAUlB,OAAO,CAAC,YAAY;IAyBpB,OAAO,CAAC,eAAe;IAsCvB,OAAO,CAAC,eAAe;IASvB,OAAO,CAAC,WAAW;IAqCnB,OAAO,CAAC,MAAM;IAQd,OAAO,CAAC,kBAAkB;IA0C1B,OAAO,CAAC,oBAAoB;IAsB5B,OAAO,CAAC,yBAAyB;IAuCjC,OAAO,CAAC,oBAAoB;IA8J5B,OAAO,CAAC,kBAAkB;IA6R1B,OAAO,CAAC,MAAM;IAyLd,OAAO,CAAC,eAAe;IAyHvB,OAAO,CAAC,gBAAgB;IAoBxB,OAAO,CAAC,WAAW;IAgDnB,MAAM,CAAC,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW;IAQ/C,OAAO;CA8BR;AAED,qBAAa,gBAAiB,SAAQ,MAAM;gBAC9B,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,iBAAiB;CAO3D"}
1
+ {"version":3,"file":"CustomMenuPlugin.d.ts","sourceRoot":"","sources":["../../../src/extension-menu/src/CustomMenuPlugin.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAI1D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAuB7C,UAAU,QAAQ;IAChB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,WAAW,CAAC;IACrB,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,qBAAa,cAAc;IAmBvB,QAAQ,CAAC,UAAU,EAAE,UAAU;IAC/B,QAAQ,CAAC,MAAM,EAAE,UAAU;IAC3B,QAAQ,CAAC,OAAO,EAAE,SAAS,CAAC,SAAS,WAAW,EAAE,CAAC,EAAE;IApBvD,OAAO,EAAE,WAAW,CAAC;IACrB,OAAO,EAAE,WAAW,CAAC;IACrB,YAAY,EAAE,WAAW,CAAC;IAC1B,kBAAkB,EAAE,WAAW,GAAG,IAAI,CAAQ;IAC9C,KAAK,EAAE,WAAW,GAAG,IAAI,CAAQ;IACjC,KAAK,EAAE,QAAQ,EAAE,CAAM;IACvB,gBAAgB,EAAE,WAAW,EAAE,CAAM;IACrC,IAAI,EAAE,QAAQ,GAAG,UAAU,CAAC;IAC5B,YAAY,EAAE,WAAW,CAAC;IAC1B,eAAe,EAAE,WAAW,CAAC;IAC7B,OAAO,CAAC,oBAAoB,CAA0C;IACtE,OAAO,CAAC,0BAA0B,CAA0C;IAC5E,OAAO,CAAC,YAAY,CAAmD;IACvE,OAAO,CAAC,mBAAmB,CAEpB;gBAGI,UAAU,EAAE,UAAU,EACtB,MAAM,EAAE,UAAU,EAClB,OAAO,EAAE,SAAS,CAAC,SAAS,WAAW,EAAE,CAAC,EAAE,EACrD,gBAAgB,CAAC,EAAE,SAAS,WAAW,EAAE;IAmE3C,OAAO,CAAC,eAAe;IAgCvB;;;OAGG;IACH,OAAO,CAAC,gBAAgB;IAyBxB;;OAEG;IACH,OAAO,CAAC,UAAU;IAUlB,OAAO,CAAC,YAAY;IAyBpB,OAAO,CAAC,eAAe;IAsCvB,OAAO,CAAC,eAAe;IASvB,OAAO,CAAC,WAAW;IAqCnB,OAAO,CAAC,MAAM;IAQd,OAAO,CAAC,kBAAkB;IA0C1B,OAAO,CAAC,oBAAoB;IAsB5B,OAAO,CAAC,yBAAyB;IAuCjC,OAAO,CAAC,oBAAoB;IA8L5B,OAAO,CAAC,kBAAkB;IA6R1B,OAAO,CAAC,MAAM;IAuMd,OAAO,CAAC,eAAe;IAyHvB,OAAO,CAAC,gBAAgB;IAoBxB,OAAO,CAAC,WAAW;IAgDnB,MAAM,CAAC,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW;IAQ/C,OAAO;CA8BR;AAED,MAAM,WAAW,uBAAuB;IACtC,OAAO,EAAE,SAAS,CAAC,SAAS,WAAW,EAAE,CAAC,EAAE,CAAC;IAC7C,gBAAgB,CAAC,EAAE,SAAS,WAAW,EAAE,CAAC;CAC3C;AAED,qBAAa,gBAAiB,SAAQ,MAAM;gBAC9B,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,uBAAuB;CAYjE"}
@@ -20,7 +20,7 @@ function debug(...args) {
20
20
  }
21
21
  }
22
22
  export class CustomMenuView {
23
- constructor(editorView, editor, content) {
23
+ constructor(editorView, editor, content, trailingElements) {
24
24
  Object.defineProperty(this, "editorView", {
25
25
  enumerable: true,
26
26
  configurable: true,
@@ -75,6 +75,12 @@ export class CustomMenuView {
75
75
  writable: true,
76
76
  value: []
77
77
  });
78
+ Object.defineProperty(this, "trailingElements", {
79
+ enumerable: true,
80
+ configurable: true,
81
+ writable: true,
82
+ value: []
83
+ });
78
84
  Object.defineProperty(this, "root", {
79
85
  enumerable: true,
80
86
  configurable: true,
@@ -120,6 +126,8 @@ export class CustomMenuView {
120
126
  debug('CustomMenuView constructor called');
121
127
  debug('Content groups:', content.length);
122
128
  this.root = editorView.root;
129
+ // Store trailing elements
130
+ this.trailingElements = trailingElements ? [...trailingElements] : [];
123
131
  // Create wrapper
124
132
  this.wrapper = document.createElement('div');
125
133
  this.wrapper.classList.add(CSS_PREFIX + '__wrapper');
@@ -434,6 +442,37 @@ export class CustomMenuView {
434
442
  // Create dropdown menu
435
443
  this.pinnedDropdownMenu = document.createElement('div');
436
444
  this.pinnedDropdownMenu.classList.add(CSS_PREFIX + '__pinned-dropdown');
445
+ // Inherit theme CSS variables from editor container
446
+ // This ensures dropdowns match the editor's theme even when appended to body
447
+ const editorContainer = this.editorView.dom.closest('.kb-component') ||
448
+ this.editorView.dom.parentElement;
449
+ if (editorContainer) {
450
+ const computedStyle = getComputedStyle(editorContainer);
451
+ const themeVars = [
452
+ // New unified naming
453
+ '--kb-menu-dropdown-bg',
454
+ '--kb-menu-dropdown-border',
455
+ '--kb-menu-dropdown-text',
456
+ // Legacy naming (for backwards compatibility)
457
+ '--kb-menu-dropdown-dark-bg',
458
+ '--kb-menu-dropdown-dark-border',
459
+ '--kb-menu-dropdown-dark-text',
460
+ // General theme colors
461
+ '--kb-color-surface',
462
+ '--kb-color-surface-elevated',
463
+ '--kb-color-surface-hover',
464
+ '--kb-color-border',
465
+ '--kb-color-border-strong',
466
+ '--kb-color-text',
467
+ '--kb-color-text-muted',
468
+ ];
469
+ themeVars.forEach((varName) => {
470
+ const value = computedStyle.getPropertyValue(varName).trim();
471
+ if (value) {
472
+ this.pinnedDropdownMenu.style.setProperty(varName, value);
473
+ }
474
+ });
475
+ }
437
476
  // Position it below the trigger element
438
477
  const rect = triggerElement.getBoundingClientRect();
439
478
  this.pinnedDropdownMenu.style.position = 'absolute';
@@ -933,10 +972,27 @@ export class CustomMenuView {
933
972
  });
934
973
  this.toolbar.appendChild(overflowToggle);
935
974
  }
975
+ // Render trailing elements (always visible, not pinnable)
976
+ if (this.trailingElements.length > 0) {
977
+ // Add separator before trailing elements
978
+ const separator = document.createElement('div');
979
+ separator.classList.add(CSS_PREFIX + '__separator');
980
+ separator.classList.add(CSS_PREFIX + '__separator--trailing');
981
+ this.toolbar.appendChild(separator);
982
+ // Create a trailing group container
983
+ const trailingGroup = document.createElement('div');
984
+ trailingGroup.classList.add(CSS_PREFIX + '__trailing-group');
985
+ this.trailingElements.forEach((element) => {
986
+ const { dom, update } = element.render(this.editorView);
987
+ const wrapper = document.createElement('span');
988
+ wrapper.classList.add(CSS_PREFIX + '__trailing-item');
989
+ wrapper.appendChild(dom);
990
+ trailingGroup.appendChild(wrapper);
991
+ });
992
+ this.toolbar.appendChild(trailingGroup);
993
+ }
936
994
  // Render overflow menu content
937
995
  this.renderOverflowMenu();
938
- console.log('[kb-custom-menu] render() complete. Toolbar children:', this.toolbar.children.length);
939
- console.log('[kb-custom-menu] Toolbar HTML:', this.toolbar.innerHTML.substring(0, 200));
940
996
  }
941
997
  openManageModal() {
942
998
  // Close overflow menu
@@ -1123,7 +1179,7 @@ export class CustomMenuPlugin extends Plugin {
1123
1179
  constructor(editor, options) {
1124
1180
  super({
1125
1181
  view(editorView) {
1126
- return new CustomMenuView(editorView, editor, options.content);
1182
+ return new CustomMenuView(editorView, editor, options.content, options.trailingElements);
1127
1183
  },
1128
1184
  });
1129
1185
  }
@@ -1,10 +1,14 @@
1
+ import "../../_dnt.polyfills.js";
1
2
  import { Plugin } from 'prosemirror-state';
2
3
  import { Extension } from '../../editor/src/mod.js';
3
4
  import { type MenuElement } from './menu.js';
4
5
  export interface CustomMenuOptions {
5
- content: readonly (readonly MenuElement[])[];
6
+ content?: readonly (readonly MenuElement[])[];
7
+ trailingElements?: readonly MenuElement[];
8
+ autoAddCollaborationStatus?: boolean;
9
+ autoAddLspStatus?: boolean;
6
10
  }
7
- export declare class ExtensionCustomMenu extends Extension {
11
+ export declare class ExtensionCustomMenu extends Extension<CustomMenuOptions> {
8
12
  name: string;
9
13
  getProseMirrorPlugins(): Plugin[];
10
14
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ExtensionCustomMenu.d.ts","sourceRoot":"","sources":["../../../src/extension-menu/src/ExtensionCustomMenu.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAE3C,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACpD,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,WAAW,CAAC;AAI7C,MAAM,WAAW,iBAAiB;IAEhC,OAAO,EAAE,SAAS,CAAC,SAAS,WAAW,EAAE,CAAC,EAAE,CAAC;CAC9C;AAGD,qBAAa,mBAAoB,SAAQ,SAAS;IAChD,IAAI,SAAgB;IAEX,qBAAqB,IAAI,MAAM,EAAE;CAS3C"}
1
+ {"version":3,"file":"ExtensionCustomMenu.d.ts","sourceRoot":"","sources":["../../../src/extension-menu/src/ExtensionCustomMenu.ts"],"names":[],"mappings":"AAAA,OAAO,yBAAyB,CAAC;AACjC,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAE3C,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACpD,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,WAAW,CAAC;AAM7C,MAAM,WAAW,iBAAiB;IAEhC,OAAO,CAAC,EAAE,SAAS,CAAC,SAAS,WAAW,EAAE,CAAC,EAAE,CAAC;IAG9C,gBAAgB,CAAC,EAAE,SAAS,WAAW,EAAE,CAAC;IAG1C,0BAA0B,CAAC,EAAE,OAAO,CAAC;IAGrC,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAGD,qBAAa,mBAAoB,SAAQ,SAAS,CAAC,iBAAiB,CAAC;IACnE,IAAI,SAAgB;IAEX,qBAAqB,IAAI,MAAM,EAAE;CA2C3C"}
@@ -1,6 +1,9 @@
1
+ import "../../_dnt.polyfills.js";
1
2
  import { Extension } from '../../editor/src/mod.js';
2
3
  import { buildMenu } from './buildMenu.js';
3
4
  import { CustomMenuPlugin } from './CustomMenuPlugin.js';
5
+ import { CollaborationStatusElement } from '../../extension-yjs/src/CollaborationStatus.js';
6
+ import { LspStatusElement } from '../../extension-lsp/src/LspStatus.js';
4
7
  /// Extension for a customizable menu with pinned items
5
8
  export class ExtensionCustomMenu extends Extension {
6
9
  constructor() {
@@ -13,10 +16,42 @@ export class ExtensionCustomMenu extends Extension {
13
16
  });
14
17
  }
15
18
  getProseMirrorPlugins() {
16
- const content = buildMenu(this.editor, this.editor.schema);
19
+ const content = this.config?.content ??
20
+ buildMenu(this.editor, this.editor.schema);
21
+ const trailingElements = this.config?.trailingElements
22
+ ? [...this.config.trailingElements]
23
+ : [];
24
+ // Auto-add collaboration status if YJS extension is present
25
+ const autoAdd = this.config?.autoAddCollaborationStatus ?? true;
26
+ if (autoAdd) {
27
+ const yjsExtension = this.editor.getExtension('yjs');
28
+ if (yjsExtension) {
29
+ const yjsConfig = yjsExtension.config;
30
+ if (yjsConfig?.provider?.awareness) {
31
+ const collabStatus = new CollaborationStatusElement({
32
+ awareness: yjsConfig.provider.awareness,
33
+ provider: yjsConfig.provider,
34
+ });
35
+ trailingElements.push(collabStatus);
36
+ }
37
+ }
38
+ }
39
+ // Auto-add LSP status if LSP extension is present
40
+ const autoAddLsp = this.config?.autoAddLspStatus ?? true;
41
+ if (autoAddLsp) {
42
+ const lspExtension = this.editor.getExtension('lsp');
43
+ if (lspExtension) {
44
+ const lspStatus = new LspStatusElement({
45
+ lspExtension: lspExtension,
46
+ label: 'LSP',
47
+ });
48
+ trailingElements.push(lspStatus);
49
+ }
50
+ }
17
51
  return [
18
52
  new CustomMenuPlugin(this.editor, {
19
53
  content,
54
+ trailingElements,
20
55
  }),
21
56
  ];
22
57
  }
@@ -1,3 +1,4 @@
1
+ import "../../_dnt.polyfills.js";
1
2
  export { Dropdown, DropdownSubmenu, type MenuElement, MenuItem, type MenuItemSpec, } from './menu.js';
2
3
  export * from './ExtensionCustomMenu.js';
3
4
  //# sourceMappingURL=mod.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"mod.d.ts","sourceRoot":"","sources":["../../../src/extension-menu/src/mod.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EACR,eAAe,EACf,KAAK,WAAW,EAChB,QAAQ,EACR,KAAK,YAAY,GAClB,MAAM,WAAW,CAAC;AAEnB,cAAc,0BAA0B,CAAC"}
1
+ {"version":3,"file":"mod.d.ts","sourceRoot":"","sources":["../../../src/extension-menu/src/mod.ts"],"names":[],"mappings":"AAAA,OAAO,yBAAyB,CAAC;AACjC,OAAO,EACL,QAAQ,EACR,eAAe,EACf,KAAK,WAAW,EAChB,QAAQ,EACR,KAAK,YAAY,GAClB,MAAM,WAAW,CAAC;AAEnB,cAAc,0BAA0B,CAAC"}
@@ -1,2 +1,3 @@
1
+ import "../../_dnt.polyfills.js";
1
2
  export { Dropdown, DropdownSubmenu, MenuItem, } from './menu.js';
2
3
  export * from './ExtensionCustomMenu.js';
@@ -0,0 +1,59 @@
1
+ import { EditorState, Plugin, PluginKey } from 'prosemirror-state';
2
+ import { EditorView } from 'prosemirror-view';
3
+ import type * as awarenessProtocol from 'y-protocols/awareness';
4
+ import type { MenuElement } from '../../extension-menu/src/mod.js';
5
+ export interface CollaborationUser {
6
+ clientId: number;
7
+ name: string;
8
+ color: string;
9
+ colorLight?: string;
10
+ }
11
+ export interface CollaborationStatusOptions {
12
+ /** The Yjs awareness instance */
13
+ awareness: awarenessProtocol.Awareness;
14
+ /** Called when connection status changes */
15
+ onStatusChange?: (status: 'connected' | 'connecting' | 'disconnected') => void;
16
+ }
17
+ /**
18
+ * Plugin key for accessing collaboration status state
19
+ */
20
+ export declare const collaborationStatusPluginKey: PluginKey<CollaborationStatusState>;
21
+ export interface CollaborationStatusState {
22
+ status: 'connected' | 'connecting' | 'disconnected';
23
+ users: CollaborationUser[];
24
+ }
25
+ /**
26
+ * Creates a ProseMirror plugin that tracks collaboration status and user presence.
27
+ * This plugin maintains state that can be accessed by other components.
28
+ */
29
+ export declare function collaborationStatusPlugin(awareness: awarenessProtocol.Awareness, options?: {
30
+ onStatusChange?: (status: 'connected' | 'connecting' | 'disconnected') => void;
31
+ }): Plugin;
32
+ /**
33
+ * A menu element that displays collaboration status, user count, and a dropdown of users.
34
+ */
35
+ export declare class CollaborationStatusElement implements MenuElement {
36
+ private awareness;
37
+ private provider;
38
+ private dom;
39
+ private statusDot;
40
+ private userCount;
41
+ private dropdown;
42
+ private userList;
43
+ private isOpen;
44
+ private status;
45
+ constructor(options: {
46
+ awareness: awarenessProtocol.Awareness;
47
+ provider: any;
48
+ });
49
+ render(view: EditorView): {
50
+ dom: HTMLElement;
51
+ update: (state: EditorState) => boolean;
52
+ };
53
+ private setStatus;
54
+ private updateUserList;
55
+ private toggleDropdown;
56
+ private openDropdown;
57
+ private closeDropdown;
58
+ }
59
+ //# sourceMappingURL=CollaborationStatus.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CollaborationStatus.d.ts","sourceRoot":"","sources":["../../../src/extension-yjs/src/CollaborationStatus.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AACnE,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,KAAK,KAAK,iBAAiB,MAAM,uBAAuB,CAAC;AAEhE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAC;AAInE,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,0BAA0B;IACzC,iCAAiC;IACjC,SAAS,EAAE,iBAAiB,CAAC,SAAS,CAAC;IACvC,4CAA4C;IAC5C,cAAc,CAAC,EAAE,CACf,MAAM,EAAE,WAAW,GAAG,YAAY,GAAG,cAAc,KAChD,IAAI,CAAC;CACX;AAED;;GAEG;AACH,eAAO,MAAM,4BAA4B,qCAEhB,CAAC;AAE1B,MAAM,WAAW,wBAAwB;IACvC,MAAM,EAAE,WAAW,GAAG,YAAY,GAAG,cAAc,CAAC;IACpD,KAAK,EAAE,iBAAiB,EAAE,CAAC;CAC5B;AAED;;;GAGG;AACH,wBAAgB,yBAAyB,CACvC,SAAS,EAAE,iBAAiB,CAAC,SAAS,EACtC,OAAO,GAAE;IACP,cAAc,CAAC,EAAE,CACf,MAAM,EAAE,WAAW,GAAG,YAAY,GAAG,cAAc,KAChD,IAAI,CAAC;CACN,GACL,MAAM,CAsCR;AAiBD;;GAEG;AACH,qBAAa,0BAA2B,YAAW,WAAW;IAC5D,OAAO,CAAC,SAAS,CAA8B;IAC/C,OAAO,CAAC,QAAQ,CAAM;IACtB,OAAO,CAAC,GAAG,CAA4B;IACvC,OAAO,CAAC,SAAS,CAA4B;IAC7C,OAAO,CAAC,SAAS,CAA4B;IAC7C,OAAO,CAAC,QAAQ,CAA4B;IAC5C,OAAO,CAAC,QAAQ,CAA4B;IAC5C,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,MAAM,CAA6D;gBAGzE,OAAO,EAAE;QAAE,SAAS,EAAE,iBAAiB,CAAC,SAAS,CAAC;QAAC,QAAQ,EAAE,GAAG,CAAA;KAAE;IAMpE,MAAM,CACJ,IAAI,EAAE,UAAU,GACf;QAAE,GAAG,EAAE,WAAW,CAAC;QAAC,MAAM,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,OAAO,CAAA;KAAE;IA+FhE,OAAO,CAAC,SAAS;IAoBjB,OAAO,CAAC,cAAc;IAuDtB,OAAO,CAAC,cAAc;IAQtB,OAAO,CAAC,YAAY;IASpB,OAAO,CAAC,aAAa;CAOtB"}