@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.
- package/LICENSE +21 -0
- package/README.md +22 -0
- package/dist/Alert.d.ts +12 -0
- package/dist/Alert.d.ts.map +1 -0
- package/dist/Alert.js +35 -0
- package/dist/Alert.js.map +1 -0
- package/dist/Badge.d.ts +8 -0
- package/dist/Badge.d.ts.map +1 -0
- package/dist/Badge.js +19 -0
- package/dist/Badge.js.map +1 -0
- package/dist/Button.d.ts +14 -0
- package/dist/Button.d.ts.map +1 -0
- package/dist/Button.js +60 -0
- package/dist/Button.js.map +1 -0
- package/dist/Card.d.ts +19 -0
- package/dist/Card.d.ts.map +1 -0
- package/dist/Card.js +76 -0
- package/dist/Card.js.map +1 -0
- package/dist/Checkbox.d.ts +15 -0
- package/dist/Checkbox.d.ts.map +1 -0
- package/dist/Checkbox.js +49 -0
- package/dist/Checkbox.js.map +1 -0
- package/dist/CodeBlock.d.ts +11 -0
- package/dist/CodeBlock.d.ts.map +1 -0
- package/dist/CodeBlock.js +90 -0
- package/dist/CodeBlock.js.map +1 -0
- package/dist/CopyButton.d.ts +11 -0
- package/dist/CopyButton.d.ts.map +1 -0
- package/dist/CopyButton.js +65 -0
- package/dist/CopyButton.js.map +1 -0
- package/dist/Dialog.d.ts +24 -0
- package/dist/Dialog.d.ts.map +1 -0
- package/dist/Dialog.js +72 -0
- package/dist/Dialog.js.map +1 -0
- package/dist/DialogBase.d.ts +13 -0
- package/dist/DialogBase.d.ts.map +1 -0
- package/dist/DialogBase.js +48 -0
- package/dist/DialogBase.js.map +1 -0
- package/dist/Diff.d.ts +8 -0
- package/dist/Diff.d.ts.map +1 -0
- package/dist/Diff.js +47 -0
- package/dist/Diff.js.map +1 -0
- package/dist/DownloadButton.d.ts +16 -0
- package/dist/DownloadButton.d.ts.map +1 -0
- package/dist/DownloadButton.js +53 -0
- package/dist/DownloadButton.js.map +1 -0
- package/dist/FileButton.d.ts +9 -0
- package/dist/FileButton.d.ts.map +1 -0
- package/dist/FileButton.js +53 -0
- package/dist/FileButton.js.map +1 -0
- package/dist/Input.d.ts +28 -0
- package/dist/Input.d.ts.map +1 -0
- package/dist/Input.js +58 -0
- package/dist/Input.js.map +1 -0
- package/dist/Label.d.ts +9 -0
- package/dist/Label.d.ts.map +1 -0
- package/dist/Label.js +17 -0
- package/dist/Label.js.map +1 -0
- package/dist/LanguageSelector.d.ts +14 -0
- package/dist/LanguageSelector.d.ts.map +1 -0
- package/dist/LanguageSelector.js +92 -0
- package/dist/LanguageSelector.js.map +1 -0
- package/dist/MarkdownBlock.d.ts +10 -0
- package/dist/MarkdownBlock.d.ts.map +1 -0
- package/dist/MarkdownBlock.js +257 -0
- package/dist/MarkdownBlock.js.map +1 -0
- package/dist/ModeToggle.d.ts +14 -0
- package/dist/ModeToggle.d.ts.map +1 -0
- package/dist/ModeToggle.js +59 -0
- package/dist/ModeToggle.js.map +1 -0
- package/dist/PreviewCode.d.ts +12 -0
- package/dist/PreviewCode.d.ts.map +1 -0
- package/dist/PreviewCode.js +80 -0
- package/dist/PreviewCode.js.map +1 -0
- package/dist/PreviewCodeToggle.d.ts +15 -0
- package/dist/PreviewCodeToggle.d.ts.map +1 -0
- package/dist/PreviewCodeToggle.js +55 -0
- package/dist/PreviewCodeToggle.js.map +1 -0
- package/dist/Progress.d.ts +10 -0
- package/dist/Progress.d.ts.map +1 -0
- package/dist/Progress.js +27 -0
- package/dist/Progress.js.map +1 -0
- package/dist/PromptDialog.d.ts +20 -0
- package/dist/PromptDialog.d.ts.map +1 -0
- package/dist/PromptDialog.js +114 -0
- package/dist/PromptDialog.js.map +1 -0
- package/dist/Select.d.ts +25 -0
- package/dist/Select.d.ts.map +1 -0
- package/dist/Select.js +335 -0
- package/dist/Select.js.map +1 -0
- package/dist/Separator.d.ts +10 -0
- package/dist/Separator.d.ts.map +1 -0
- package/dist/Separator.js +19 -0
- package/dist/Separator.js.map +1 -0
- package/dist/Sidebar.d.ts +27 -0
- package/dist/Sidebar.d.ts.map +1 -0
- package/dist/Sidebar.js +151 -0
- package/dist/Sidebar.js.map +1 -0
- package/dist/SplitPanel.d.ts +40 -0
- package/dist/SplitPanel.d.ts.map +1 -0
- package/dist/SplitPanel.js +275 -0
- package/dist/SplitPanel.js.map +1 -0
- package/dist/Switch.d.ts +13 -0
- package/dist/Switch.d.ts.map +1 -0
- package/dist/Switch.js +48 -0
- package/dist/Switch.js.map +1 -0
- package/dist/Textarea.d.ts +21 -0
- package/dist/Textarea.d.ts.map +1 -0
- package/dist/Textarea.js +67 -0
- package/dist/Textarea.js.map +1 -0
- package/dist/ThemeToggle.d.ts +11 -0
- package/dist/ThemeToggle.d.ts.map +1 -0
- package/dist/ThemeToggle.js +91 -0
- package/dist/ThemeToggle.js.map +1 -0
- package/dist/component.d.ts +190 -0
- package/dist/component.d.ts.map +1 -0
- package/dist/component.js +241 -0
- package/dist/component.js.map +1 -0
- package/dist/i18n.d.ts +73 -0
- package/dist/i18n.d.ts.map +1 -0
- package/dist/i18n.js +146 -0
- package/dist/i18n.js.map +1 -0
- package/dist/icons.d.ts +7 -0
- package/dist/icons.d.ts.map +1 -0
- package/dist/icons.js +21 -0
- package/dist/icons.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +8 -0
- package/dist/index.js.map +1 -0
- package/dist/mini.d.ts +19 -0
- package/dist/mini.d.ts.map +1 -0
- package/dist/mini.js +29 -0
- package/dist/mini.js.map +1 -0
- package/llms.txt +681 -0
- package/package.json +69 -0
- package/src/styles/base.css +63 -0
- package/src/styles/themes/claude.css +155 -0
- package/src/styles/themes/default.css +102 -0
- package/src/styles/utils/markdown.css +104 -0
- package/src/styles/utils/math.css +7 -0
- 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, "<$1$2>")
|
|
46
|
+
// Replace closing tags like </script>, </div>, etc.
|
|
47
|
+
.replace(/<\/(\w+)>/g, "</$1>")
|
|
48
|
+
// Replace self-closing tags like <img />, <br/>
|
|
49
|
+
.replace(/<(\w+)([^>]*)\s*\/>/g, "<$1$2/>")
|
|
50
|
+
// Replace any remaining < that might be part of HTML
|
|
51
|
+
.replace(/<(?![^\s])/g, "<");
|
|
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(/</g, "<")
|
|
215
|
+
.replace(/>/g, ">")
|
|
216
|
+
.replace(/"/g, '"')
|
|
217
|
+
.replace(/'/g, "'")
|
|
218
|
+
.replace(/'/g, "'")
|
|
219
|
+
.replace(/&/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(/</g, "<")
|
|
229
|
+
.replace(/>/g, ">")
|
|
230
|
+
.replace(/"/g, '"')
|
|
231
|
+
.replace(/'/g, "'")
|
|
232
|
+
.replace(/'/g, "'")
|
|
233
|
+
.replace(/&/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"}
|