@elyracode/mini-lit 0.9.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/LICENSE +21 -0
  2. package/README.md +22 -0
  3. package/dist/Alert.d.ts +12 -0
  4. package/dist/Alert.d.ts.map +1 -0
  5. package/dist/Alert.js +35 -0
  6. package/dist/Alert.js.map +1 -0
  7. package/dist/Badge.d.ts +8 -0
  8. package/dist/Badge.d.ts.map +1 -0
  9. package/dist/Badge.js +19 -0
  10. package/dist/Badge.js.map +1 -0
  11. package/dist/Button.d.ts +14 -0
  12. package/dist/Button.d.ts.map +1 -0
  13. package/dist/Button.js +60 -0
  14. package/dist/Button.js.map +1 -0
  15. package/dist/Card.d.ts +19 -0
  16. package/dist/Card.d.ts.map +1 -0
  17. package/dist/Card.js +76 -0
  18. package/dist/Card.js.map +1 -0
  19. package/dist/Checkbox.d.ts +15 -0
  20. package/dist/Checkbox.d.ts.map +1 -0
  21. package/dist/Checkbox.js +49 -0
  22. package/dist/Checkbox.js.map +1 -0
  23. package/dist/CodeBlock.d.ts +11 -0
  24. package/dist/CodeBlock.d.ts.map +1 -0
  25. package/dist/CodeBlock.js +90 -0
  26. package/dist/CodeBlock.js.map +1 -0
  27. package/dist/CopyButton.d.ts +11 -0
  28. package/dist/CopyButton.d.ts.map +1 -0
  29. package/dist/CopyButton.js +65 -0
  30. package/dist/CopyButton.js.map +1 -0
  31. package/dist/Dialog.d.ts +24 -0
  32. package/dist/Dialog.d.ts.map +1 -0
  33. package/dist/Dialog.js +72 -0
  34. package/dist/Dialog.js.map +1 -0
  35. package/dist/DialogBase.d.ts +13 -0
  36. package/dist/DialogBase.d.ts.map +1 -0
  37. package/dist/DialogBase.js +48 -0
  38. package/dist/DialogBase.js.map +1 -0
  39. package/dist/Diff.d.ts +8 -0
  40. package/dist/Diff.d.ts.map +1 -0
  41. package/dist/Diff.js +47 -0
  42. package/dist/Diff.js.map +1 -0
  43. package/dist/DownloadButton.d.ts +16 -0
  44. package/dist/DownloadButton.d.ts.map +1 -0
  45. package/dist/DownloadButton.js +53 -0
  46. package/dist/DownloadButton.js.map +1 -0
  47. package/dist/FileButton.d.ts +9 -0
  48. package/dist/FileButton.d.ts.map +1 -0
  49. package/dist/FileButton.js +53 -0
  50. package/dist/FileButton.js.map +1 -0
  51. package/dist/Input.d.ts +28 -0
  52. package/dist/Input.d.ts.map +1 -0
  53. package/dist/Input.js +58 -0
  54. package/dist/Input.js.map +1 -0
  55. package/dist/Label.d.ts +9 -0
  56. package/dist/Label.d.ts.map +1 -0
  57. package/dist/Label.js +17 -0
  58. package/dist/Label.js.map +1 -0
  59. package/dist/LanguageSelector.d.ts +14 -0
  60. package/dist/LanguageSelector.d.ts.map +1 -0
  61. package/dist/LanguageSelector.js +92 -0
  62. package/dist/LanguageSelector.js.map +1 -0
  63. package/dist/MarkdownBlock.d.ts +10 -0
  64. package/dist/MarkdownBlock.d.ts.map +1 -0
  65. package/dist/MarkdownBlock.js +257 -0
  66. package/dist/MarkdownBlock.js.map +1 -0
  67. package/dist/ModeToggle.d.ts +14 -0
  68. package/dist/ModeToggle.d.ts.map +1 -0
  69. package/dist/ModeToggle.js +59 -0
  70. package/dist/ModeToggle.js.map +1 -0
  71. package/dist/PreviewCode.d.ts +12 -0
  72. package/dist/PreviewCode.d.ts.map +1 -0
  73. package/dist/PreviewCode.js +80 -0
  74. package/dist/PreviewCode.js.map +1 -0
  75. package/dist/PreviewCodeToggle.d.ts +15 -0
  76. package/dist/PreviewCodeToggle.d.ts.map +1 -0
  77. package/dist/PreviewCodeToggle.js +55 -0
  78. package/dist/PreviewCodeToggle.js.map +1 -0
  79. package/dist/Progress.d.ts +10 -0
  80. package/dist/Progress.d.ts.map +1 -0
  81. package/dist/Progress.js +27 -0
  82. package/dist/Progress.js.map +1 -0
  83. package/dist/PromptDialog.d.ts +20 -0
  84. package/dist/PromptDialog.d.ts.map +1 -0
  85. package/dist/PromptDialog.js +114 -0
  86. package/dist/PromptDialog.js.map +1 -0
  87. package/dist/Select.d.ts +25 -0
  88. package/dist/Select.d.ts.map +1 -0
  89. package/dist/Select.js +335 -0
  90. package/dist/Select.js.map +1 -0
  91. package/dist/Separator.d.ts +10 -0
  92. package/dist/Separator.d.ts.map +1 -0
  93. package/dist/Separator.js +19 -0
  94. package/dist/Separator.js.map +1 -0
  95. package/dist/Sidebar.d.ts +27 -0
  96. package/dist/Sidebar.d.ts.map +1 -0
  97. package/dist/Sidebar.js +151 -0
  98. package/dist/Sidebar.js.map +1 -0
  99. package/dist/SplitPanel.d.ts +40 -0
  100. package/dist/SplitPanel.d.ts.map +1 -0
  101. package/dist/SplitPanel.js +275 -0
  102. package/dist/SplitPanel.js.map +1 -0
  103. package/dist/Switch.d.ts +13 -0
  104. package/dist/Switch.d.ts.map +1 -0
  105. package/dist/Switch.js +48 -0
  106. package/dist/Switch.js.map +1 -0
  107. package/dist/Textarea.d.ts +21 -0
  108. package/dist/Textarea.d.ts.map +1 -0
  109. package/dist/Textarea.js +67 -0
  110. package/dist/Textarea.js.map +1 -0
  111. package/dist/ThemeToggle.d.ts +11 -0
  112. package/dist/ThemeToggle.d.ts.map +1 -0
  113. package/dist/ThemeToggle.js +91 -0
  114. package/dist/ThemeToggle.js.map +1 -0
  115. package/dist/component.d.ts +190 -0
  116. package/dist/component.d.ts.map +1 -0
  117. package/dist/component.js +241 -0
  118. package/dist/component.js.map +1 -0
  119. package/dist/i18n.d.ts +73 -0
  120. package/dist/i18n.d.ts.map +1 -0
  121. package/dist/i18n.js +146 -0
  122. package/dist/i18n.js.map +1 -0
  123. package/dist/icons.d.ts +7 -0
  124. package/dist/icons.d.ts.map +1 -0
  125. package/dist/icons.js +21 -0
  126. package/dist/icons.js.map +1 -0
  127. package/dist/index.d.ts +4 -0
  128. package/dist/index.d.ts.map +1 -0
  129. package/dist/index.js +8 -0
  130. package/dist/index.js.map +1 -0
  131. package/dist/mini.d.ts +19 -0
  132. package/dist/mini.d.ts.map +1 -0
  133. package/dist/mini.js +29 -0
  134. package/dist/mini.js.map +1 -0
  135. package/llms.txt +681 -0
  136. package/package.json +69 -0
  137. package/src/styles/base.css +63 -0
  138. package/src/styles/themes/claude.css +155 -0
  139. package/src/styles/themes/default.css +102 -0
  140. package/src/styles/utils/markdown.css +104 -0
  141. package/src/styles/utils/math.css +7 -0
  142. package/src/styles/utils/syntax-highlighting.css +134 -0
@@ -0,0 +1,92 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ import { html, LitElement } from "lit";
8
+ import { customElement, state } from "lit/decorators.js";
9
+ import { Globe } from "lucide";
10
+ import { Button } from "./Button.js";
11
+ import { getCurrentLanguage, setLanguage } from "./i18n.js";
12
+ import { icon } from "./icons.js";
13
+ let LanguageSelector = class LanguageSelector extends LitElement {
14
+ constructor() {
15
+ super(...arguments);
16
+ this.currentLanguage = getCurrentLanguage();
17
+ this.isOpen = false;
18
+ this.languages = [
19
+ { code: "en", label: "EN" },
20
+ { code: "de", label: "DE" },
21
+ ];
22
+ this.handleClickOutside = (e) => {
23
+ if (!this.contains(e.target)) {
24
+ this.isOpen = false;
25
+ }
26
+ };
27
+ }
28
+ selectLanguage(code) {
29
+ if (code !== this.currentLanguage) {
30
+ setLanguage(code);
31
+ }
32
+ this.isOpen = false;
33
+ }
34
+ toggleDropdown() {
35
+ this.isOpen = !this.isOpen;
36
+ }
37
+ connectedCallback() {
38
+ super.connectedCallback();
39
+ document.addEventListener("click", this.handleClickOutside);
40
+ }
41
+ disconnectedCallback() {
42
+ document.removeEventListener("click", this.handleClickOutside);
43
+ super.disconnectedCallback();
44
+ }
45
+ createRenderRoot() {
46
+ return this;
47
+ }
48
+ render() {
49
+ return html `
50
+ <div class="relative">
51
+ ${Button({
52
+ variant: "ghost",
53
+ size: "sm",
54
+ onClick: () => this.toggleDropdown(),
55
+ className: "gap-1.5",
56
+ children: html `
57
+ ${icon(Globe, "sm")}
58
+ <span class="text-xs font-medium">${this.currentLanguage.toUpperCase()}</span>
59
+ `,
60
+ })}
61
+ ${this.isOpen
62
+ ? html `
63
+ <div
64
+ class="absolute right-0 mt-1 py-1 bg-popover border border-border rounded-md shadow-lg min-w-[80px] z-50"
65
+ >
66
+ ${this.languages.map((lang) => html `
67
+ <button
68
+ class="w-full px-3 py-1.5 text-sm text-left hover:bg-accent hover:text-accent-foreground transition-colors
69
+ ${lang.code === this.currentLanguage ? "bg-accent/50 text-accent-foreground font-medium" : ""}"
70
+ @click=${() => this.selectLanguage(lang.code)}
71
+ >
72
+ ${lang.label}
73
+ </button>
74
+ `)}
75
+ </div>
76
+ `
77
+ : ""}
78
+ </div>
79
+ `;
80
+ }
81
+ };
82
+ __decorate([
83
+ state()
84
+ ], LanguageSelector.prototype, "currentLanguage", void 0);
85
+ __decorate([
86
+ state()
87
+ ], LanguageSelector.prototype, "isOpen", void 0);
88
+ LanguageSelector = __decorate([
89
+ customElement("language-selector")
90
+ ], LanguageSelector);
91
+ export { LanguageSelector };
92
+ //# sourceMappingURL=LanguageSelector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LanguageSelector.js","sourceRoot":"","sources":["../src/LanguageSelector.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,KAAK,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AAC/B,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,kBAAkB,EAAqB,WAAW,EAAE,MAAM,WAAW,CAAC;AAC/E,OAAO,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAG3B,IAAM,gBAAgB,GAAtB,MAAM,gBAAiB,SAAQ,UAAU;IAAzC;;QACa,oBAAe,GAAiB,kBAAkB,EAAE,CAAC;QACrD,WAAM,GAAG,KAAK,CAAC;QAExB,cAAS,GAA4C;YAC1D,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE;YAC3B,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE;SAC7B,CAAC;QAaM,uBAAkB,GAAG,CAAC,CAAa,EAAE,EAAE;YAC5C,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAc,CAAC,EAAE,CAAC;gBACpC,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;YACvB,CAAC;QACJ,CAAC,CAAC;IAqDL,CAAC;IApEU,cAAc,CAAC,IAAkB;QACtC,IAAI,IAAI,KAAK,IAAI,CAAC,eAAe,EAAE,CAAC;YACjC,WAAW,CAAC,IAAI,CAAC,CAAC;QACrB,CAAC;QACD,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;IACvB,CAAC;IAEO,cAAc;QACnB,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC;IAC9B,CAAC;IAQQ,iBAAiB;QACvB,KAAK,CAAC,iBAAiB,EAAE,CAAC;QAC1B,QAAQ,CAAC,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC;IAC/D,CAAC;IAEQ,oBAAoB;QAC1B,QAAQ,CAAC,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC;QAC/D,KAAK,CAAC,oBAAoB,EAAE,CAAC;IAChC,CAAC;IAEQ,gBAAgB;QACtB,OAAO,IAAI,CAAC;IACf,CAAC;IAEQ,MAAM;QACZ,OAAO,IAAI,CAAA;;cAEH,MAAM,CAAC;YACN,OAAO,EAAE,OAAO;YAChB,IAAI,EAAE,IAAI;YACV,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,cAAc,EAAE;YACpC,SAAS,EAAE,SAAS;YACpB,QAAQ,EAAE,IAAI,CAAA;oBACT,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC;sDACiB,IAAI,CAAC,eAAe,CAAC,WAAW,EAAE;gBACxE;SACH,CAAC;cAEC,IAAI,CAAC,MAAM;YACR,CAAC,CAAC,IAAI,CAAA;;;;yBAIC,IAAI,CAAC,SAAS,CAAC,GAAG,CACjB,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAA;;;cAG1B,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,iDAAiD,CAAC,CAAC,CAAC,EAAE;yCAChE,GAAG,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC;;kCAE3C,IAAI,CAAC,KAAK;;2BAEjB,CACH;;kBAEN;YACA,CAAC,CAAC,EACR;;OAEL,CAAC;IACL,CAAC;CACH,CAAA;AA5EmB;IAAhB,KAAK,EAAE;yDAA8D;AACrD;IAAhB,KAAK,EAAE;gDAAwB;AAFtB,gBAAgB;IAD5B,aAAa,CAAC,mBAAmB,CAAC;GACtB,gBAAgB,CA6E5B"}
@@ -0,0 +1,10 @@
1
+ import { LitElement } from "lit";
2
+ export declare class MarkdownBlock extends LitElement {
3
+ content: string;
4
+ isThinking: boolean;
5
+ escapeHtml: boolean;
6
+ protected createRenderRoot(): HTMLElement | DocumentFragment;
7
+ connectedCallback(): void;
8
+ render(): import("lit-html").TemplateResult<1>;
9
+ }
10
+ //# sourceMappingURL=MarkdownBlock.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MarkdownBlock.d.ts","sourceRoot":"","sources":["../src/MarkdownBlock.ts"],"names":[],"mappings":"AACA,OAAO,EAAQ,UAAU,EAAE,MAAM,KAAK,CAAC;AAKvC,qBACa,aAAc,SAAQ,UAAU;IAC9B,OAAO,SAAM;IACb,UAAU,UAAS;IACnB,UAAU,UAAQ;cAEX,gBAAgB,IAAI,WAAW,GAAG,gBAAgB;IAI5D,iBAAiB;IAOjB,MAAM;CAmOjB"}
@@ -0,0 +1,257 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ import katex from "katex";
8
+ import { html, LitElement } from "lit";
9
+ import { customElement, property } from "lit/decorators.js";
10
+ import { unsafeHTML } from "lit/directives/unsafe-html.js";
11
+ import { marked } from "marked";
12
+ let MarkdownBlock = class MarkdownBlock extends LitElement {
13
+ constructor() {
14
+ super(...arguments);
15
+ this.content = "";
16
+ this.isThinking = false;
17
+ this.escapeHtml = true;
18
+ }
19
+ createRenderRoot() {
20
+ return this;
21
+ }
22
+ connectedCallback() {
23
+ super.connectedCallback();
24
+ // Add styles for markdown content
25
+ this.classList.add("markdown-content");
26
+ this.style.display = "block";
27
+ }
28
+ render() {
29
+ if (!this.content) {
30
+ return html ``;
31
+ }
32
+ let preservedContent = this.content;
33
+ if (this.escapeHtml) {
34
+ // First, preserve code blocks by replacing them with placeholders
35
+ const codeBlocks = [];
36
+ preservedContent = this.content.replace(/```[\s\S]*?```|`[^`\n]+`/g, (match) => {
37
+ const index = codeBlocks.length;
38
+ codeBlocks.push(match);
39
+ return `__CODE_BLOCK_${index}__`;
40
+ });
41
+ // Escape HTML tags but preserve markdown syntax
42
+ // This regex matches HTML tags but not markdown blockquotes (> at line start)
43
+ preservedContent = preservedContent
44
+ // Replace opening tags like <script>, <div>, etc.
45
+ .replace(/<(\w+)([^>]*)>/g, "&lt;$1$2&gt;")
46
+ // Replace closing tags like </script>, </div>, etc.
47
+ .replace(/<\/(\w+)>/g, "&lt;/$1&gt;")
48
+ // Replace self-closing tags like <img />, <br/>
49
+ .replace(/<(\w+)([^>]*)\s*\/>/g, "&lt;$1$2/&gt;")
50
+ // Replace any remaining < that might be part of HTML
51
+ .replace(/<(?![^\s])/g, "&lt;");
52
+ // Restore code blocks
53
+ codeBlocks.forEach((block, index) => {
54
+ preservedContent = preservedContent.replace(`__CODE_BLOCK_${index}__`, block);
55
+ });
56
+ }
57
+ const katexMode = "html"; // Use both HTML and MathML output
58
+ // Configure marked with math extensions
59
+ marked.use({
60
+ extensions: [
61
+ // Inline math with $...$
62
+ {
63
+ name: "inlineMathDollar",
64
+ level: "inline",
65
+ start(src) {
66
+ return src.indexOf("$");
67
+ },
68
+ tokenizer(src) {
69
+ const match = /^\$([^$\n]+?)\$/s.exec(src);
70
+ if (match) {
71
+ return {
72
+ type: "inlineMathDollar",
73
+ raw: match[0],
74
+ text: match[1].trim(),
75
+ };
76
+ }
77
+ return undefined;
78
+ },
79
+ renderer(token) {
80
+ try {
81
+ return katex.renderToString(token.text, {
82
+ throwOnError: false,
83
+ displayMode: false,
84
+ output: katexMode,
85
+ });
86
+ }
87
+ catch (e) {
88
+ console.error("KaTeX error:", e);
89
+ return `<span class="text-red-500 font-mono">$${token.text}$</span>`;
90
+ }
91
+ },
92
+ },
93
+ // Block math with $$...$$
94
+ {
95
+ name: "blockMathDollar",
96
+ level: "block",
97
+ start(src) {
98
+ return src.indexOf("$$");
99
+ },
100
+ tokenizer(src) {
101
+ const match = /^\$\$([^$]+?)\$\$/s.exec(src);
102
+ if (match) {
103
+ return {
104
+ type: "blockMathDollar",
105
+ raw: match[0],
106
+ text: match[1].trim(),
107
+ };
108
+ }
109
+ return undefined;
110
+ },
111
+ renderer(token) {
112
+ try {
113
+ return `<div class="my-4">${katex.renderToString(token.text, {
114
+ throwOnError: false,
115
+ displayMode: true,
116
+ output: katexMode,
117
+ })}</div>`;
118
+ }
119
+ catch (e) {
120
+ console.error("KaTeX error:", e);
121
+ return `<div class="my-4 text-red-500 font-mono">$$${token.text}$$</div>`;
122
+ }
123
+ },
124
+ },
125
+ // Inline math with \(...\)
126
+ {
127
+ name: "inlineMathLatex",
128
+ level: "inline",
129
+ start(src) {
130
+ return src.indexOf("\\(");
131
+ },
132
+ tokenizer(src) {
133
+ const match = /^\\\((.+?)\\\)/s.exec(src);
134
+ if (match) {
135
+ return {
136
+ type: "inlineMathLatex",
137
+ raw: match[0],
138
+ text: match[1].trim(),
139
+ };
140
+ }
141
+ return undefined;
142
+ },
143
+ renderer(token) {
144
+ try {
145
+ return katex.renderToString(token.text, {
146
+ throwOnError: false,
147
+ displayMode: false,
148
+ output: katexMode,
149
+ });
150
+ }
151
+ catch (e) {
152
+ console.error("KaTeX error:", e);
153
+ return `<span class="text-red-500 font-mono">\\(${token.text}\\)</span>`;
154
+ }
155
+ },
156
+ },
157
+ // Block math with \[...\]
158
+ {
159
+ name: "blockMathLatex",
160
+ level: "block",
161
+ start(src) {
162
+ return src.indexOf("\\[");
163
+ },
164
+ tokenizer(src) {
165
+ const match = /^\\\[(.+?)\\\]/s.exec(src);
166
+ if (match) {
167
+ return {
168
+ type: "blockMathLatex",
169
+ raw: match[0],
170
+ text: match[1].trim(),
171
+ };
172
+ }
173
+ return undefined;
174
+ },
175
+ renderer(token) {
176
+ try {
177
+ return `<div class="my-4">${katex.renderToString(token.text, {
178
+ throwOnError: false,
179
+ displayMode: true,
180
+ output: katexMode,
181
+ })}</div>`;
182
+ }
183
+ catch (e) {
184
+ console.error("KaTeX error:", e);
185
+ return `<div class="my-4 text-red-500 font-mono">\\[${token.text}\\]</div>`;
186
+ }
187
+ },
188
+ },
189
+ ],
190
+ });
191
+ // Configure renderer to open links in new tabs and wrap tables
192
+ const renderer = new marked.Renderer();
193
+ const originalLink = renderer.link;
194
+ renderer.link = function (token) {
195
+ const link = originalLink.call(this, token);
196
+ return link.replace("<a ", '<a target="_blank" rel="noopener noreferrer" ');
197
+ };
198
+ // Wrap tables in a container to handle overflow
199
+ const originalTable = renderer.table;
200
+ renderer.table = function (token) {
201
+ const table = originalTable.call(this, token);
202
+ // Wrap in a div with overflow handling
203
+ return `<div class="overflow-x-auto my-2 border border-border rounded">${table}</div>`;
204
+ };
205
+ // Parse the markdown content with our configured marked
206
+ const parsedContent = marked.parse(preservedContent, {
207
+ async: false,
208
+ renderer: renderer,
209
+ });
210
+ // Replace code blocks with our custom code-block component
211
+ let highlightedContent = parsedContent.replace(/<pre><code class="language-(\w+)">([\s\S]+?)<\/code><\/pre>/g, (_match, lang, code) => {
212
+ // Unescape all HTML entities
213
+ const unescaped = code
214
+ .replace(/&lt;/g, "<")
215
+ .replace(/&gt;/g, ">")
216
+ .replace(/&quot;/g, '"')
217
+ .replace(/&#39;/g, "'")
218
+ .replace(/&#x27;/g, "'")
219
+ .replace(/&amp;/g, "&"); // Must be last to avoid double-unescaping
220
+ // Pass the raw unescaped code to CodeBlock - it will handle highlighting
221
+ const base64Code = btoa(unescape(encodeURIComponent(unescaped)));
222
+ return `<div class="mt-2"><code-block language="${lang}" code="${base64Code}"></code-block></div>`;
223
+ });
224
+ // Also handle code blocks without language specification
225
+ highlightedContent = highlightedContent.replace(/<pre><code>([\s\S]+?)<\/code><\/pre>/g, (_match, code) => {
226
+ // Unescape all HTML entities
227
+ const unescaped = code
228
+ .replace(/&lt;/g, "<")
229
+ .replace(/&gt;/g, ">")
230
+ .replace(/&quot;/g, '"')
231
+ .replace(/&#39;/g, "'")
232
+ .replace(/&#x27;/g, "'")
233
+ .replace(/&amp;/g, "&"); // Must be last to avoid double-unescaping
234
+ // Use "text" as default language for proper styling
235
+ const base64Code = btoa(unescape(encodeURIComponent(unescaped)));
236
+ return `<div class="mt-2"><code-block language="text" code="${base64Code}"></code-block></div>`;
237
+ });
238
+ const containerClasses = this.isThinking
239
+ ? "text-muted-foreground italic max-w-none break-words overflow-wrap-anywhere text-sm [&>*:last-child]:!mb-0"
240
+ : "text-foreground max-w-none break-words overflow-wrap-anywhere [&>*:last-child]:!mb-0";
241
+ return html ` <div class="${containerClasses}">${unsafeHTML(highlightedContent)}</div> `;
242
+ }
243
+ };
244
+ __decorate([
245
+ property()
246
+ ], MarkdownBlock.prototype, "content", void 0);
247
+ __decorate([
248
+ property()
249
+ ], MarkdownBlock.prototype, "isThinking", void 0);
250
+ __decorate([
251
+ property()
252
+ ], MarkdownBlock.prototype, "escapeHtml", void 0);
253
+ MarkdownBlock = __decorate([
254
+ customElement("markdown-block")
255
+ ], MarkdownBlock);
256
+ export { MarkdownBlock };
257
+ //# sourceMappingURL=MarkdownBlock.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MarkdownBlock.js","sourceRoot":"","sources":["../src/MarkdownBlock.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import { LitElement, type TemplateResult } from "lit";
2
+ export declare class ModeToggle extends LitElement {
3
+ modes: string[];
4
+ selectedIndex: number;
5
+ protected createRenderRoot(): HTMLElement | DocumentFragment;
6
+ private setMode;
7
+ render(): TemplateResult;
8
+ }
9
+ declare global {
10
+ interface HTMLElementTagNameMap {
11
+ "mode-toggle": ModeToggle;
12
+ }
13
+ }
14
+ //# sourceMappingURL=ModeToggle.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ModeToggle.d.ts","sourceRoot":"","sources":["../src/ModeToggle.ts"],"names":[],"mappings":"AAAA,OAAO,EAAQ,UAAU,EAAE,KAAK,cAAc,EAAE,MAAM,KAAK,CAAC;AAI5D,qBACa,UAAW,SAAQ,UAAU;IACZ,KAAK,EAAE,MAAM,EAAE,CAAoC;IAClD,aAAa,SAAK;cAE3B,gBAAgB,IAAI,WAAW,GAAG,gBAAgB;IAIrE,OAAO,CAAC,OAAO;IAYN,MAAM,IAAI,cAAc;CAwBnC;AAED,OAAO,CAAC,MAAM,CAAC;IACZ,UAAU,qBAAqB;QAC5B,aAAa,EAAE,UAAU,CAAC;KAC5B;CACH"}
@@ -0,0 +1,59 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ import { html, LitElement } from "lit";
8
+ import { customElement, property } from "lit/decorators.js";
9
+ import { i18n } from "./i18n.js";
10
+ let ModeToggle = class ModeToggle extends LitElement {
11
+ constructor() {
12
+ super(...arguments);
13
+ this.modes = [i18n("Mode 1"), i18n("Mode 2")];
14
+ this.selectedIndex = 0;
15
+ }
16
+ createRenderRoot() {
17
+ return this; // light DOM for shared styles
18
+ }
19
+ setMode(index) {
20
+ if (this.selectedIndex !== index && index >= 0 && index < this.modes.length) {
21
+ this.selectedIndex = index;
22
+ this.dispatchEvent(new CustomEvent("mode-change", {
23
+ detail: { index, mode: this.modes[index] },
24
+ bubbles: true,
25
+ }));
26
+ }
27
+ }
28
+ render() {
29
+ if (this.modes.length < 2)
30
+ return html ``;
31
+ return html `
32
+ <div class="inline-flex items-center h-7 rounded-md overflow-hidden border border-border bg-muted/60">
33
+ ${this.modes.map((mode, index) => html `
34
+ <button
35
+ class="px-3 h-full flex items-center text-sm font-medium transition-colors
36
+ ${index === this.selectedIndex
37
+ ? "bg-card text-foreground shadow-sm"
38
+ : "text-muted-foreground hover:text-accent-foreground"}"
39
+ @click=${() => this.setMode(index)}
40
+ title="${mode}"
41
+ >
42
+ ${mode}
43
+ </button>
44
+ `)}
45
+ </div>
46
+ `;
47
+ }
48
+ };
49
+ __decorate([
50
+ property({ type: Array })
51
+ ], ModeToggle.prototype, "modes", void 0);
52
+ __decorate([
53
+ property({ type: Number })
54
+ ], ModeToggle.prototype, "selectedIndex", void 0);
55
+ ModeToggle = __decorate([
56
+ customElement("mode-toggle")
57
+ ], ModeToggle);
58
+ export { ModeToggle };
59
+ //# sourceMappingURL=ModeToggle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ModeToggle.js","sourceRoot":"","sources":["../src/ModeToggle.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,IAAI,EAAE,UAAU,EAAuB,MAAM,KAAK,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAG1B,IAAM,UAAU,GAAhB,MAAM,UAAW,SAAQ,UAAU;IAAnC;;QACuB,UAAK,GAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;QAClD,kBAAa,GAAG,CAAC,CAAC;IA0CjD,CAAC;IAxCqB,gBAAgB;QAChC,OAAO,IAAI,CAAC,CAAC,8BAA8B;IAC9C,CAAC;IAEO,OAAO,CAAC,KAAa;QAC1B,IAAI,IAAI,CAAC,aAAa,KAAK,KAAK,IAAI,KAAK,IAAI,CAAC,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;YAC3E,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;YAC3B,IAAI,CAAC,aAAa,CACf,IAAI,WAAW,CAAkC,aAAa,EAAE;gBAC7D,MAAM,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;gBAC1C,OAAO,EAAE,IAAI;aACf,CAAC,CACJ,CAAC;QACL,CAAC;IACJ,CAAC;IAEQ,MAAM;QACZ,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,IAAI,CAAA,EAAE,CAAC;QAEzC,OAAO,IAAI,CAAA;;cAEH,IAAI,CAAC,KAAK,CAAC,GAAG,CACb,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAA;;;UAIT,KAAK,KAAK,IAAI,CAAC,aAAa;YACzB,CAAC,CAAC,mCAAmC;YACrC,CAAC,CAAC,oDACR;8BACM,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;8BACzB,IAAI;;uBAEX,IAAI;;gBAEX,CACH;;OAEN,CAAC;IACL,CAAC;CACH,CAAA;AA3C6B;IAA1B,QAAQ,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;yCAAoD;AAClD;IAA3B,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;iDAAmB;AAFpC,UAAU;IADtB,aAAa,CAAC,aAAa,CAAC;GAChB,UAAU,CA4CtB"}
@@ -0,0 +1,12 @@
1
+ import { LitElement, type TemplateResult } from "lit";
2
+ export declare class PreviewCode extends LitElement {
3
+ preview: TemplateResult | string;
4
+ code: string;
5
+ language: string;
6
+ className: string;
7
+ private showCode;
8
+ protected createRenderRoot(): this;
9
+ toggleView: () => void;
10
+ render(): TemplateResult<1>;
11
+ }
12
+ //# sourceMappingURL=PreviewCode.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PreviewCode.d.ts","sourceRoot":"","sources":["../src/PreviewCode.ts"],"names":[],"mappings":"AAAA,OAAO,EAAQ,UAAU,EAAE,KAAK,cAAc,EAAE,MAAM,KAAK,CAAC;AAK5D,qBACa,WAAY,SAAQ,UAAU;IACZ,OAAO,EAAE,cAAc,GAAG,MAAM,CAAM;IACtC,IAAI,SAAM;IACV,QAAQ,SAAgB;IACC,SAAS,SAAM;IAE3D,OAAO,CAAC,QAAQ,CAAS;IAElC,SAAS,CAAC,gBAAgB;IAInB,UAAU,aAEf;IAEF,MAAM;CAkCR"}
@@ -0,0 +1,80 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ import { html, LitElement } from "lit";
8
+ import { customElement, property, state } from "lit/decorators.js";
9
+ import { Button } from "./Button.js";
10
+ import { Card, CardContent } from "./Card.js";
11
+ let PreviewCode = class PreviewCode extends LitElement {
12
+ constructor() {
13
+ super(...arguments);
14
+ this.preview = "";
15
+ this.code = "";
16
+ this.language = "typescript";
17
+ this.className = "";
18
+ this.showCode = false;
19
+ this.toggleView = () => {
20
+ this.showCode = !this.showCode;
21
+ };
22
+ }
23
+ createRenderRoot() {
24
+ return this; // Use light DOM for global styles
25
+ }
26
+ render() {
27
+ return html `
28
+ <div class="${this.className}">
29
+ <!-- Toggle buttons -->
30
+ <div class="flex gap-2 mb-4">
31
+ ${Button({
32
+ variant: this.showCode ? "ghost" : "default",
33
+ size: "sm",
34
+ onClick: () => {
35
+ this.showCode = false;
36
+ },
37
+ children: "Preview",
38
+ })}
39
+ ${Button({
40
+ variant: this.showCode ? "default" : "ghost",
41
+ size: "sm",
42
+ onClick: () => {
43
+ this.showCode = true;
44
+ },
45
+ children: "Code",
46
+ })}
47
+ </div>
48
+
49
+ <!-- Content -->
50
+ ${Card({
51
+ children: CardContent({
52
+ children: this.showCode
53
+ ? html `<code-block language="${this.language}" code="${btoa(this.code)}"></code-block>`
54
+ : this.preview,
55
+ }),
56
+ })}
57
+ </div>
58
+ `;
59
+ }
60
+ };
61
+ __decorate([
62
+ property({ type: Object })
63
+ ], PreviewCode.prototype, "preview", void 0);
64
+ __decorate([
65
+ property({ type: String })
66
+ ], PreviewCode.prototype, "code", void 0);
67
+ __decorate([
68
+ property({ type: String })
69
+ ], PreviewCode.prototype, "language", void 0);
70
+ __decorate([
71
+ property({ type: String, attribute: "class-name" })
72
+ ], PreviewCode.prototype, "className", void 0);
73
+ __decorate([
74
+ state()
75
+ ], PreviewCode.prototype, "showCode", void 0);
76
+ PreviewCode = __decorate([
77
+ customElement("preview-code")
78
+ ], PreviewCode);
79
+ export { PreviewCode };
80
+ //# sourceMappingURL=PreviewCode.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PreviewCode.js","sourceRoot":"","sources":["../src/PreviewCode.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,IAAI,EAAE,UAAU,EAAuB,MAAM,KAAK,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AACnE,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAGvC,IAAM,WAAW,GAAjB,MAAM,WAAY,SAAQ,UAAU;IAApC;;QACwB,YAAO,GAA4B,EAAE,CAAC;QACtC,SAAI,GAAG,EAAE,CAAC;QACV,aAAQ,GAAG,YAAY,CAAC;QACC,cAAS,GAAG,EAAE,CAAC;QAEnD,aAAQ,GAAG,KAAK,CAAC;QAM3B,eAAU,GAAG,GAAG,EAAE;YACtB,IAAI,CAAC,QAAQ,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC;QAClC,CAAC,CAAC;IAoCL,CAAC;IA1CY,gBAAgB;QACvB,OAAO,IAAI,CAAC,CAAC,kCAAkC;IAClD,CAAC;IAMD,MAAM;QACH,OAAO,IAAI,CAAA;uBACM,IAAI,CAAC,SAAS;;;iBAGpB,MAAM,CAAC;YACN,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS;YAC5C,IAAI,EAAE,IAAI;YACV,OAAO,EAAE,GAAG,EAAE;gBACX,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;YACzB,CAAC;YACD,QAAQ,EAAE,SAAS;SACrB,CAAC;iBACA,MAAM,CAAC;YACN,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO;YAC5C,IAAI,EAAE,IAAI;YACV,OAAO,EAAE,GAAG,EAAE;gBACX,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;YACxB,CAAC;YACD,QAAQ,EAAE,MAAM;SAClB,CAAC;;;;cAIH,IAAI,CAAC;YACJ,QAAQ,EAAE,WAAW,CAAC;gBACnB,QAAQ,EAAE,IAAI,CAAC,QAAQ;oBACpB,CAAC,CAAC,IAAI,CAAA,yBAAyB,IAAI,CAAC,QAAQ,WAAW,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB;oBACvF,CAAC,CAAC,IAAI,CAAC,OAAO;aACnB,CAAC;SACJ,CAAC;;OAEP,CAAC;IACL,CAAC;CACH,CAAA;AAjD8B;IAA3B,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;4CAAuC;AACtC;IAA3B,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;yCAAW;AACV;IAA3B,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;6CAAyB;AACC;IAApD,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC;8CAAgB;AAEnD;IAAhB,KAAK,EAAE;6CAA0B;AANxB,WAAW;IADvB,aAAa,CAAC,cAAc,CAAC;GACjB,WAAW,CAkDvB"}
@@ -0,0 +1,15 @@
1
+ import { LitElement, type TemplateResult } from "lit";
2
+ type Mode = "preview" | "code";
3
+ export declare class PreviewCodeToggle extends LitElement {
4
+ mode: Mode;
5
+ protected createRenderRoot(): HTMLElement | DocumentFragment;
6
+ private setMode;
7
+ render(): TemplateResult;
8
+ }
9
+ declare global {
10
+ interface HTMLElementTagNameMap {
11
+ "preview-code-toggle": PreviewCodeToggle;
12
+ }
13
+ }
14
+ export {};
15
+ //# sourceMappingURL=PreviewCodeToggle.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PreviewCodeToggle.d.ts","sourceRoot":"","sources":["../src/PreviewCodeToggle.ts"],"names":[],"mappings":"AAAA,OAAO,EAAQ,UAAU,EAAE,KAAK,cAAc,EAAE,MAAM,KAAK,CAAC;AAM5D,KAAK,IAAI,GAAG,SAAS,GAAG,MAAM,CAAC;AAE/B,qBACa,iBAAkB,SAAQ,UAAU;IAChB,IAAI,EAAE,IAAI,CAAa;cAElC,gBAAgB,IAAI,WAAW,GAAG,gBAAgB;IAIrE,OAAO,CAAC,OAAO;IAON,MAAM,IAAI,cAAc;CAyBnC;AAED,OAAO,CAAC,MAAM,CAAC;IACZ,UAAU,qBAAqB;QAC5B,qBAAqB,EAAE,iBAAiB,CAAC;KAC3C;CACH"}
@@ -0,0 +1,55 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ import { html, LitElement } from "lit";
8
+ import { customElement, property } from "lit/decorators.js";
9
+ import { Code, Eye } from "lucide";
10
+ import { i18n } from "./i18n.js";
11
+ import { icon } from "./icons.js";
12
+ let PreviewCodeToggle = class PreviewCodeToggle extends LitElement {
13
+ constructor() {
14
+ super(...arguments);
15
+ this.mode = "preview";
16
+ }
17
+ createRenderRoot() {
18
+ return this; // light DOM for shared styles
19
+ }
20
+ setMode(mode) {
21
+ if (this.mode !== mode) {
22
+ this.mode = mode;
23
+ this.dispatchEvent(new CustomEvent("mode-change", { detail: this.mode, bubbles: true }));
24
+ }
25
+ }
26
+ render() {
27
+ const isPreview = this.mode === "preview";
28
+ return html `
29
+ <div class="inline-flex items-center h-7 rounded-md overflow-hidden border border-border bg-muted/60">
30
+ <button
31
+ class="px-2 h-full flex items-center ${isPreview ? "bg-card text-foreground" : "text-muted-foreground hover:text-accent-foreground"}"
32
+ @click=${() => this.setMode("preview")}
33
+ title="${i18n("Preview")}"
34
+ >
35
+ ${icon(Eye, "sm")}
36
+ </button>
37
+ <button
38
+ class="px-2 h-full flex items-center ${!isPreview ? "bg-card text-foreground" : "text-muted-foreground hover:text-accent-foreground"}"
39
+ @click=${() => this.setMode("code")}
40
+ title="${i18n("Code")}"
41
+ >
42
+ ${icon(Code, "sm")}
43
+ </button>
44
+ </div>
45
+ `;
46
+ }
47
+ };
48
+ __decorate([
49
+ property({ reflect: false })
50
+ ], PreviewCodeToggle.prototype, "mode", void 0);
51
+ PreviewCodeToggle = __decorate([
52
+ customElement("preview-code-toggle")
53
+ ], PreviewCodeToggle);
54
+ export { PreviewCodeToggle };
55
+ //# sourceMappingURL=PreviewCodeToggle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PreviewCodeToggle.js","sourceRoot":"","sources":["../src/PreviewCodeToggle.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,IAAI,EAAE,UAAU,EAAuB,MAAM,KAAK,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,QAAQ,CAAC;AACnC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAK3B,IAAM,iBAAiB,GAAvB,MAAM,iBAAkB,SAAQ,UAAU;IAA1C;;QAC0B,SAAI,GAAS,SAAS,CAAC;IAsCxD,CAAC;IApCqB,gBAAgB;QAChC,OAAO,IAAI,CAAC,CAAC,8BAA8B;IAC9C,CAAC;IAEO,OAAO,CAAC,IAAU;QACvB,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;YACtB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;YACjB,IAAI,CAAC,aAAa,CAAC,IAAI,WAAW,CAAO,aAAa,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QAClG,CAAC;IACJ,CAAC;IAEQ,MAAM;QACZ,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,KAAK,SAAS,CAAC;QAC1C,OAAO,IAAI,CAAA;;;sDAIC,SAAS,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,oDAC3C;wBACS,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC;wBAC7B,IAAI,CAAC,SAAS,CAAC;;iBAEtB,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC;;;sDAId,CAAC,SAAS,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,oDAC5C;wBACS,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;wBAC1B,IAAI,CAAC,MAAM,CAAC;;iBAEnB,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC;;;OAG1B,CAAC;IACL,CAAC;CACH,CAAA;AAtCgC;IAA7B,QAAQ,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;+CAAwB;AAD3C,iBAAiB;IAD7B,aAAa,CAAC,qBAAqB,CAAC;GACxB,iBAAiB,CAuC7B"}