bobe-dom 0.0.60 → 0.0.62

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/dist/code.css ADDED
@@ -0,0 +1,107 @@
1
+ .code-block {
2
+ border: 1px solid var(--md-border, #3c3f47);
3
+ border-radius: 6px;
4
+ overflow: hidden;
5
+ margin: 16px 0;
6
+ height: 700px;
7
+ display: flex;
8
+ flex-direction: column;
9
+ background: var(--md-bg, #1b1b1f);
10
+ }
11
+
12
+ .code-block-full {
13
+ left: 0;
14
+ top: 0;
15
+ height: 100vh;
16
+ width: 100vw;
17
+ position: fixed;
18
+ z-index: 9999;
19
+ opacity: 0;
20
+ pointer-events: none;
21
+ display: flex;
22
+ flex-direction: column;
23
+ background: var(--md-bg, #1b1b1f);
24
+ }
25
+
26
+ .code-block-full-active {
27
+ opacity: 1;
28
+ pointer-events: auto;
29
+ }
30
+
31
+ .code-tabs {
32
+ display: flex;
33
+ background: var(--md-bg-secondary, #22222a);
34
+ border-bottom: 1px solid var(--md-border, #3c3f47);
35
+ overflow-x: auto;
36
+ flex: 0 0 auto;
37
+ }
38
+
39
+ .code-panel-preview {
40
+ display: flex;
41
+ flex: 1 1 auto;
42
+ height: 1px;
43
+ }
44
+
45
+ .full-button {
46
+ padding: 6px 14px;
47
+ font-size: 12px;
48
+ font-family: ui-monospace, SFMono-Regular, 'SF Mono', Menlo, Consolas, monospace;
49
+ color: var(--md-text-muted, #9898a5);
50
+ background: none;
51
+ border: 0 solid var(--md-border, #3c3f47);
52
+ border-right: 1px solid var(--md-border, #3c3f47);;
53
+ border-radius: 4px 0 0 0;
54
+ cursor: pointer;
55
+ white-space: nowrap;
56
+ flex-shrink: 0;
57
+ transition: color 0.15s, border-color 0.15s;
58
+ }
59
+
60
+ .full-button:hover {
61
+ color: var(--md-accent-focus, #539bf5);
62
+ }
63
+
64
+ .code-tab {
65
+ padding: 8px 16px;
66
+ font-size: 13px;
67
+ font-family: ui-monospace, SFMono-Regular, 'SF Mono', Menlo, Consolas, monospace;
68
+ color: var(--md-text-muted, #9898a5);
69
+ background: none;
70
+ border: none;
71
+ border-bottom: 2px solid transparent;
72
+ cursor: pointer;
73
+ white-space: nowrap;
74
+ }
75
+
76
+ .code-tab:hover {
77
+ color: var(--md-text, #e1e1e5);
78
+ background: var(--md-bg-code, #282c38);
79
+ }
80
+
81
+ .code-tab-active {
82
+ color: var(--md-text, #e1e1e5);
83
+ background: var(--md-bg, #1b1b1f);
84
+ border-bottom-color: var(--md-accent-focus, #539bf5);
85
+ font-weight: 500;
86
+ }
87
+
88
+ .code-panel-preview .code-panel {
89
+ flex: 1 1 1px;
90
+ overflow: auto;
91
+ margin-bottom: 0px;
92
+ }
93
+
94
+ .code-panel code.hljs {
95
+ overflow-x: visible;
96
+ }
97
+
98
+ .code-panel pre {
99
+ margin: 0;
100
+ padding: 16px;
101
+ font-size: 13px;
102
+ line-height: 1.5;
103
+ }
104
+
105
+ .code-preview {
106
+ flex: 1 1 1px;
107
+ }
@@ -0,0 +1,41 @@
1
+ import { Store, bobe } from 'bobe';
2
+
3
+ class Code extends Store {
4
+ activeIndex = 0;
5
+ files = [];
6
+ switchTab(i) {
7
+ this.activeIndex = i;
8
+ }
9
+ get activeFile() {
10
+ return this.files[this.activeIndex];
11
+ }
12
+ preview = null;
13
+ normalBlock = null;
14
+ fullBlock = null;
15
+ isFull = false;
16
+ toggleFull = () => {
17
+ this.isFull = !this.isFull;
18
+ console.log('isFull', this.isFull);
19
+ };
20
+ get blockTarget() {
21
+ return this.isFull ? this.fullBlock : this.normalBlock;
22
+ }
23
+ ui = bobe`
24
+ tp node={blockTarget}
25
+ div class="code-tabs"
26
+ button class="full-button" onclick={toggleFull} text={isFull ? '收起' : '全屏'}
27
+ for files; file i; file.path
28
+ button class={activeIndex === i ? 'code-tab code-tab-active' : 'code-tab'} onclick={() => switchTab(i)} text={file.name}
29
+ div ref={normalPreview} class="code-panel-preview"
30
+ pre class="code-panel"
31
+ code class="hljs" html={activeFile.html}
32
+ if preview
33
+ div class="code-preview"
34
+ {preview}
35
+ div ref={normalBlock} class="code-block"
36
+ div ref={fullBlock} class={isFull ? "code-block-full code-block-full-active" : "code-block-full"}
37
+ `;
38
+ }
39
+
40
+ export { Code as default };
41
+ //# sourceMappingURL=code.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"code.esm.js","sources":["../src/plugins/markdown/components/code.ts"],"sourcesContent":["import { bobe, Store } from 'bobe';\nimport './code.css';\nimport './markdown.css';\nimport './tokyo-night-dark.css';\n\n\nclass Code extends Store {\n activeIndex = 0;\n files: Array<{ name: string; html: string }> = [];\n\n switchTab(i: number) { this.activeIndex = i }\n\n get activeFile() { return this.files[this.activeIndex]; }\n preview = null;\n\n normalBlock = null;\n fullBlock = null;\n\n isFull = false;\n\n toggleFull = () => {\n this.isFull = !this.isFull;\n console.log('isFull', this.isFull);\n \n }\n\n get blockTarget() {\n return this.isFull ? this.fullBlock : this.normalBlock;\n }\n\n ui = bobe`\n tp node={blockTarget} \n div class=\"code-tabs\"\n button class=\"full-button\" onclick={toggleFull} text={isFull ? '收起' : '全屏'}\n for files; file i; file.path\n button class={activeIndex === i ? 'code-tab code-tab-active' : 'code-tab'} onclick={() => switchTab(i)} text={file.name}\n div ref={normalPreview} class=\"code-panel-preview\"\n pre class=\"code-panel\" \n code class=\"hljs\" html={activeFile.html}\n if preview \n div class=\"code-preview\"\n {preview} \n div ref={normalBlock} class=\"code-block\"\n div ref={fullBlock} class={isFull ? \"code-block-full code-block-full-active\" : \"code-block-full\"} \n `;\n}\n\nexport default Code;\n"],"names":["Code","Store","activeIndex","files","switchTab","i","activeFile","preview","normalBlock","fullBlock","isFull","toggleFull","console","log","blockTarget","ui","bobe"],"mappings":";;AAMA,MAAMA,IAAI,SAASC,KAAK,CAAC;AACvBC,EAAAA,WAAW,GAAG,CAAC;AACfC,EAAAA,KAAK,GAA0C,EAAE;EAEjDC,SAASA,CAACC,CAAS,EAAE;IAAE,IAAI,CAACH,WAAW,GAAGG,CAAC;AAAC,EAAA;EAE5C,IAAIC,UAAUA,GAAG;AAAE,IAAA,OAAO,IAAI,CAACH,KAAK,CAAC,IAAI,CAACD,WAAW,CAAC;AAAE,EAAA;AACxDK,EAAAA,OAAO,GAAG,IAAI;AAEdC,EAAAA,WAAW,GAAG,IAAI;AAClBC,EAAAA,SAAS,GAAG,IAAI;AAEhBC,EAAAA,MAAM,GAAG,KAAK;EAEdC,UAAU,GAAGA,MAAM;AACjB,IAAA,IAAI,CAACD,MAAM,GAAG,CAAC,IAAI,CAACA,MAAM;IAC1BE,OAAO,CAACC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAACH,MAAM,CAAC;EAEpC,CAAC;EAED,IAAII,WAAWA,GAAG;IAChB,OAAO,IAAI,CAACJ,MAAM,GAAG,IAAI,CAACD,SAAS,GAAG,IAAI,CAACD,WAAW;AACxD,EAAA;AAEAO,EAAAA,EAAE,GAAGC,IAAI;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAA,CAAG;AACH;;;;"}
Binary file
package/dist/index.css ADDED
@@ -0,0 +1,9 @@
1
+ .code-block{border:1px solid var(--md-border,#3c3f47);border-radius:6px;height:700px;margin:16px 0;overflow:hidden}.code-block,.code-block-full{background:var(--md-bg,#1b1b1f);display:flex;flex-direction:column}.code-block-full{height:100vh;left:0;opacity:0;pointer-events:none;position:fixed;top:0;width:100vw;z-index:9999}.code-block-full-active{opacity:1;pointer-events:auto}.code-tabs{background:var(--md-bg-secondary,#22222a);border-bottom:1px solid var(--md-border,#3c3f47);display:flex;flex:0 0 auto;overflow-x:auto}.code-panel-preview{display:flex;flex:1 1 auto;height:1px}.full-button{background:none;border-right:0 solid var(--md-border,#3c3f47);border:solid var(--md-border,#3c3f47);border-radius:4px 0 0 0;border-width:0 1px 0 0;color:var(--md-text-muted,#9898a5);cursor:pointer;flex-shrink:0;font-family:ui-monospace,SFMono-Regular,SF Mono,Menlo,Consolas,monospace;font-size:12px;padding:6px 14px;transition:color .15s,border-color .15s;white-space:nowrap}.full-button:hover{color:var(--md-accent-focus,#539bf5)}.code-tab{background:none;border:none;border-bottom:2px solid transparent;color:var(--md-text-muted,#9898a5);cursor:pointer;font-family:ui-monospace,SFMono-Regular,SF Mono,Menlo,Consolas,monospace;font-size:13px;padding:8px 16px;white-space:nowrap}.code-tab:hover{background:var(--md-bg-code,#282c38);color:var(--md-text,#e1e1e5)}.code-tab-active{background:var(--md-bg,#1b1b1f);border-bottom-color:var(--md-accent-focus,#539bf5);color:var(--md-text,#e1e1e5);font-weight:500}.code-panel-preview .code-panel{flex:1 1 1px;margin-bottom:0;overflow:auto}.code-panel code.hljs{overflow-x:visible}.code-panel pre{font-size:13px;line-height:1.5;margin:0;padding:16px}.code-preview{flex:1 1 1px}:root{--md-text:#e1e1e5;--md-text-muted:#9898a5;--md-text-link:#6cb2ff;--md-bg:#1b1b1f;--md-bg-secondary:#22222a;--md-bg-code:#282c38;--md-bg-inline-code:#282c38;--md-bg-mark:#f2c94e26;--md-bg-transparent:transparent;--md-border:#3c3f47;--md-border-muted:#3c3f47b3;--md-accent-focus:#539bf5;--md-syntax-keyword:#ff7b72;--md-syntax-string:#9ecbff;--md-syntax-number:#7ac0ff;--md-syntax-function:#d2a8ff;--md-syntax-builtin:#7ee787;--md-syntax-variable:#ffa860;--md-syntax-meta:#f2cc60;--md-diff-del-text:#ffdcd7;--md-diff-del-bg:#5c1a1e;--md-diff-add-text:#aff5b4;--md-diff-add-bg:#0d3b20;--md-diff-changed-text:#ffdfb6;--md-diff-changed-bg:#5c2d0e;--md-diff-meta-bg:#1a5fb4;--md-danger-fg:#f85149;--md-danger-bg:#a12525;--md-alert-note-border:#539bf5;--md-alert-note-title:#6cb2ff;--md-alert-important-border:#986ee2;--md-alert-important-title:#b992f8;--md-alert-warning-border:#b0881a;--md-alert-warning-title:#e0b044;--md-alert-tip-border:#2ea855;--md-alert-tip-title:#4ec96a;--md-alert-caution-border:#e04a45;--md-alert-caution-title:#f85149;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%;word-wrap:break-word;background-color:var(--md-bg);color:var(--md-text);color-scheme:dark;flex:1 1 auto;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Noto Sans,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji;font-size:16px;font-weight:400;line-height:1.5;margin:0}.markdown-body a{text-decoration:underline;text-underline-offset:.2rem}.markdown-body h1:hover .anchor .octicon-link:before,.markdown-body h2:hover .anchor .octicon-link:before,.markdown-body h3:hover .anchor .octicon-link:before,.markdown-body h4:hover .anchor .octicon-link:before,.markdown-body h5:hover .anchor .octicon-link:before,.markdown-body h6:hover .anchor .octicon-link:before{background-color:currentColor;content:" ";display:inline-block;height:16px;-webkit-mask-image:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" aria-hidden="true"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 0 0 1.06 1.06l1.25-1.25a2 2 0 1 1 2.83 2.83l-2.5 2.5a2 2 0 0 1-2.83 0 .75.75 0 0 0-1.06 1.06 3.5 3.5 0 0 0 4.95 0l2.5-2.5a3.5 3.5 0 0 0-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 0 1 0-2.83l2.5-2.5a2 2 0 0 1 2.83 0 .75.75 0 0 0 1.06-1.06 3.5 3.5 0 0 0-4.95 0l-2.5 2.5a3.5 3.5 0 0 0 4.95 4.95l1.25-1.25a.75.75 0 0 0-1.06-1.06l-1.25 1.25a2 2 0 0 1-2.83 0z"/></svg>');mask-image:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" aria-hidden="true"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 0 0 1.06 1.06l1.25-1.25a2 2 0 1 1 2.83 2.83l-2.5 2.5a2 2 0 0 1-2.83 0 .75.75 0 0 0-1.06 1.06 3.5 3.5 0 0 0 4.95 0l2.5-2.5a3.5 3.5 0 0 0-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 0 1 0-2.83l2.5-2.5a2 2 0 0 1 2.83 0 .75.75 0 0 0 1.06-1.06 3.5 3.5 0 0 0-4.95 0l-2.5 2.5a3.5 3.5 0 0 0 4.95 4.95l1.25-1.25a.75.75 0 0 0-1.06-1.06l-1.25 1.25a2 2 0 0 1-2.83 0z"/></svg>');width:16px}.markdown-body details,.markdown-body figcaption,.markdown-body figure{display:block}.markdown-body summary{display:list-item}.markdown-body [hidden]{display:none!important}.markdown-body a{background-color:var(--md-bg-transparent);color:var(--md-text-link);text-decoration:none}.markdown-body abbr[title]{border-bottom:none;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}.markdown-body b,.markdown-body strong{font-weight:600}.markdown-body dfn{font-style:italic}.markdown-body h1{font-size:2em;margin:.67em 0;padding-bottom:.3em}.markdown-body mark{background-color:var(--md-bg-mark);color:var(--md-text)}.markdown-body small{font-size:90%}.markdown-body sub,.markdown-body sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}.markdown-body sub{bottom:-.25em}.markdown-body sup{top:-.5em}.markdown-body img{border-style:none;box-sizing:content-box;max-width:100%}.markdown-body code,.markdown-body kbd,.markdown-body pre,.markdown-body samp{font-family:monospace;font-size:1em}.markdown-body figure{margin:1em 2.5rem}.markdown-body hr{background:var(--md-bg-transparent);background-color:var(--md-border);border:0;box-sizing:content-box;height:.25em;margin:1.5rem 0;overflow:hidden;padding:0}.markdown-body input{font:inherit;font-family:inherit;font-size:inherit;line-height:inherit;margin:0;overflow:visible}.markdown-body [type=button],.markdown-body [type=reset],.markdown-body [type=submit]{-webkit-appearance:button;appearance:button}.markdown-body [type=checkbox],.markdown-body [type=radio]{box-sizing:border-box;padding:0}.markdown-body [type=number]::-webkit-inner-spin-button,.markdown-body [type=number]::-webkit-outer-spin-button{height:auto}.markdown-body [type=search]::-webkit-search-cancel-button,.markdown-body [type=search]::-webkit-search-decoration{-webkit-appearance:none;appearance:none}.markdown-body ::-webkit-input-placeholder{color:inherit;opacity:.54}.markdown-body ::-webkit-file-upload-button{-webkit-appearance:button;appearance:button;font:inherit}.markdown-body a:hover{text-decoration:underline}.markdown-body ::placeholder{color:var(--md-text-muted);opacity:1}.markdown-body hr:after,.markdown-body hr:before{content:"";display:table}.markdown-body hr:after{clear:both}.markdown-body table{border-collapse:collapse;border-spacing:0;display:block;font-variant:tabular-nums;max-width:100%;overflow:auto;width:max-content}.markdown-body td,.markdown-body th{padding:0}.markdown-body details summary{cursor:pointer}.markdown-body [role=button]:focus,.markdown-body a:focus,.markdown-body input[type=checkbox]:focus,.markdown-body input[type=radio]:focus{box-shadow:none;outline:2px solid var(--borderColor-accent-emphasis);outline-offset:-2px}.markdown-body [role=button]:focus:not(:focus-visible),.markdown-body a:focus:not(:focus-visible),.markdown-body input[type=checkbox]:focus:not(:focus-visible),.markdown-body input[type=radio]:focus:not(:focus-visible){outline:1px solid transparent}.markdown-body [role=button]:focus-visible,.markdown-body a:focus-visible,.markdown-body input[type=checkbox]:focus-visible,.markdown-body input[type=radio]:focus-visible{box-shadow:none;outline:2px solid var(--borderColor-accent-emphasis);outline-offset:-2px}.markdown-body a:not([class]):focus,.markdown-body a:not([class]):focus-visible,.markdown-body input[type=checkbox]:focus,.markdown-body input[type=checkbox]:focus-visible,.markdown-body input[type=radio]:focus,.markdown-body input[type=radio]:focus-visible{outline-offset:0}.markdown-body kbd{background-color:var(--md-bg-secondary);border-bottom-color:var(--borderColor-muted);border:1px solid var(--borderColor-muted);border-radius:6px;box-shadow:inset 0 -1px 0 var(--borderColor-muted);color:var(--md-text);display:inline-block;font:11px ui-monospace,SFMono-Regular,SF Mono,Menlo,Consolas,Liberation Mono,monospace;line-height:10px;padding:.25rem;vertical-align:middle}.markdown-body h1,.markdown-body h2,.markdown-body h3,.markdown-body h4,.markdown-body h5,.markdown-body h6{font-weight:500;letter-spacing:.05em;line-height:1.25;margin-bottom:1rem;margin-top:1.5rem}.markdown-body h2{font-size:1.5em;padding-bottom:.3em}.markdown-body h3{font-size:1.25em}.markdown-body h4{font-size:1em}.markdown-body h5{font-size:.875em}.markdown-body h6{color:var(--md-text-muted);font-size:.85em}.markdown-body p{margin-bottom:10px;margin-top:0}.markdown-body blockquote{border-left:.25em solid var(--md-border);color:var(--md-text-muted);margin:0;padding:0 1em}.markdown-body ol,.markdown-body ul{margin-bottom:0;margin-top:0;padding-left:2em}.markdown-body ol ol,.markdown-body ul ol{list-style-type:lower-roman}.markdown-body ol ol ol,.markdown-body ol ul ol,.markdown-body ul ol ol,.markdown-body ul ul ol{list-style-type:lower-alpha}.markdown-body dd{margin-left:0}.markdown-body code,.markdown-body pre,.markdown-body samp,.markdown-body tt{font-family:ui-monospace,SFMono-Regular,SF Mono,Menlo,Consolas,Liberation Mono,monospace;font-size:12px}.markdown-body pre{word-wrap:normal;margin-bottom:0;margin-top:0}.markdown-body .octicon{fill:currentColor;display:inline-block;overflow:visible!important;vertical-align:text-bottom}.markdown-body input::-webkit-inner-spin-button,.markdown-body input::-webkit-outer-spin-button{appearance:none;margin:0}.markdown-body .mr-2{margin-right:.5rem!important}.markdown-body:after,.markdown-body:before{content:"";display:table}.markdown-body:after{clear:both}.markdown-body>:first-child{margin-top:0!important}.markdown-body>:last-child{margin-bottom:0!important}.markdown-body a:not([href]){color:inherit;text-decoration:none}.markdown-body .absent{color:var(--md-danger-fg)}.markdown-body .anchor{float:left;line-height:1;margin-left:-20px;padding-right:.25rem}.markdown-body .anchor:focus{outline:none}.markdown-body blockquote,.markdown-body details,.markdown-body dl,.markdown-body ol,.markdown-body p,.markdown-body pre,.markdown-body table,.markdown-body ul{margin-bottom:1rem;margin-top:0}.markdown-body blockquote>:first-child{margin-top:0}.markdown-body blockquote>:last-child{margin-bottom:0}.markdown-body h1 .octicon-link,.markdown-body h2 .octicon-link,.markdown-body h3 .octicon-link,.markdown-body h4 .octicon-link,.markdown-body h5 .octicon-link,.markdown-body h6 .octicon-link{color:var(--md-text);vertical-align:middle;visibility:hidden}.markdown-body h1:hover .anchor,.markdown-body h2:hover .anchor,.markdown-body h3:hover .anchor,.markdown-body h4:hover .anchor,.markdown-body h5:hover .anchor,.markdown-body h6:hover .anchor{text-decoration:none}.markdown-body h1:hover .anchor .octicon-link,.markdown-body h2:hover .anchor .octicon-link,.markdown-body h3:hover .anchor .octicon-link,.markdown-body h4:hover .anchor .octicon-link,.markdown-body h5:hover .anchor .octicon-link,.markdown-body h6:hover .anchor .octicon-link{visibility:visible}.markdown-body h1 code,.markdown-body h1 tt,.markdown-body h2 code,.markdown-body h2 tt,.markdown-body h3 code,.markdown-body h3 tt,.markdown-body h4 code,.markdown-body h4 tt,.markdown-body h5 code,.markdown-body h5 tt,.markdown-body h6 code,.markdown-body h6 tt{font-size:inherit;padding:0 .2em}.markdown-body summary h1,.markdown-body summary h2,.markdown-body summary h3,.markdown-body summary h4,.markdown-body summary h5,.markdown-body summary h6{display:inline-block}.markdown-body summary h1 .anchor,.markdown-body summary h2 .anchor,.markdown-body summary h3 .anchor,.markdown-body summary h4 .anchor,.markdown-body summary h5 .anchor,.markdown-body summary h6 .anchor{margin-left:-40px}.markdown-body summary h1,.markdown-body summary h2{border-bottom:0;padding-bottom:0}.markdown-body ol.no-list,.markdown-body ul.no-list{list-style-type:none;padding:0}.markdown-body ol[type="a s"]{list-style-type:lower-alpha}.markdown-body ol[type="A s"]{list-style-type:upper-alpha}.markdown-body ol[type="i s"]{list-style-type:lower-roman}.markdown-body ol[type="I s"]{list-style-type:upper-roman}.markdown-body div>ol:not([type]),.markdown-body ol[type="1"]{list-style-type:decimal}.markdown-body ol ol,.markdown-body ol ul,.markdown-body ul ol,.markdown-body ul ul{margin-bottom:0;margin-top:0}.markdown-body li>p{margin-top:1rem}.markdown-body li+li{margin-top:.25em}.markdown-body dl{padding:0}.markdown-body dl dt{font-size:1em;font-style:italic;font-weight:600;margin-top:1rem;padding:0}.markdown-body dl dd{margin-bottom:1rem;padding:0 1rem}.markdown-body table th{font-weight:600}.markdown-body table td,.markdown-body table th{border:1px solid var(--md-border);padding:6px 13px}.markdown-body table td>:last-child{margin-bottom:0}.markdown-body table tr{background-color:var(--md-bg);border-top:1px solid var(--md-border-muted)}.markdown-body table tr:nth-child(2n){background-color:var(--md-bg-secondary)}.markdown-body table img{background-color:var(--md-bg-transparent)}.markdown-body img[align=right]{padding-left:20px}.markdown-body img[align=left]{padding-right:20px}.markdown-body .emoji{background-color:var(--md-bg-transparent);max-width:none;vertical-align:text-top}.markdown-body span.frame{display:block;overflow:hidden}.markdown-body span.frame>span{border:1px solid var(--md-border);display:block;float:left;margin:13px 0 0;overflow:hidden;padding:7px;width:auto}.markdown-body span.frame span img{display:block;float:left}.markdown-body span.frame span span{clear:both;color:var(--md-text);display:block;padding:5px 0 0}.markdown-body span.align-center{clear:both;display:block;overflow:hidden}.markdown-body span.align-center>span{display:block;margin:13px auto 0;overflow:hidden;text-align:center}.markdown-body span.align-center span img{margin:0 auto;text-align:center}.markdown-body span.align-right{clear:both;display:block;overflow:hidden}.markdown-body span.align-right>span{display:block;margin:13px 0 0;overflow:hidden;text-align:right}.markdown-body span.align-right span img{margin:0;text-align:right}.markdown-body span.float-left{display:block;float:left;margin-right:13px;overflow:hidden}.markdown-body span.float-left span{margin:13px 0 0}.markdown-body span.float-right{display:block;float:right;margin-left:13px;overflow:hidden}.markdown-body span.float-right>span{display:block;margin:13px auto 0;overflow:hidden;text-align:right}.markdown-body p>code{background-color:var(--md-bg-inline-code)}.markdown-body code,.markdown-body tt{background-color:var(--md-bg-code);border-radius:6px;font-size:85%;margin:0;padding:.2em .4em;white-space:break-spaces}.markdown-body code br,.markdown-body tt br{display:none}.markdown-body del code{text-decoration:inherit}.markdown-body samp{font-size:85%}.markdown-body pre code{font-size:100%}.markdown-body pre>code{background:var(--md-bg-transparent);border:0;margin:0;padding:0;white-space:pre;word-break:normal}.markdown-body .highlight{margin-bottom:1rem}.markdown-body .highlight pre{margin-bottom:0;word-break:normal}.markdown-body .highlight pre,.markdown-body pre{background-color:var(--md-bg-secondary);border-radius:6px;color:var(--md-text);font-size:85%;line-height:1.45;overflow:auto;padding:1rem}.markdown-body pre code,.markdown-body pre tt{word-wrap:normal;background-color:var(--md-bg-transparent);border:0;display:inline;line-height:inherit;margin:0;overflow:visible;padding:0}.markdown-body .csv-data td,.markdown-body .csv-data th{font-size:12px;line-height:1;overflow:hidden;padding:5px;text-align:left;white-space:nowrap}.markdown-body .csv-data .blob-num{background:var(--md-bg);border:0;padding:10px .5rem 9px;text-align:right}.markdown-body .csv-data tr{border-top:0}.markdown-body .csv-data th{background:var(--md-bg-secondary);border-top:0;font-weight:600}.markdown-body [data-footnote-ref]:before{content:"["}.markdown-body [data-footnote-ref]:after{content:"]"}.markdown-body .footnotes{border-top:1px solid var(--md-border);color:var(--md-text-muted);font-size:12px}.markdown-body .footnotes ol{padding-left:1rem}.markdown-body .footnotes ol ul{display:inline-block;margin-top:1rem;padding-left:1rem}.markdown-body .footnotes li{position:relative}.markdown-body .footnotes li:target:before{border:2px solid var(--md-accent-focus);border-radius:6px;bottom:-.5rem;content:"";left:-1.5rem;pointer-events:none;position:absolute;right:-.5rem;top:-.5rem}.markdown-body .footnotes li:target{color:var(--md-text)}.markdown-body .footnotes .data-footnote-backref g-emoji{font-family:monospace}.markdown-body .pl-c{color:var(--md-text-muted)}.markdown-body .pl-c1,.markdown-body .pl-s .pl-v{color:var(--md-syntax-number)}.markdown-body .pl-e,.markdown-body .pl-en{color:var(--md-syntax-function)}.markdown-body .pl-s .pl-s1,.markdown-body .pl-smi{color:var(--md-text)}.markdown-body .pl-ent{color:var(--md-syntax-builtin)}.markdown-body .pl-k{color:var(--md-syntax-keyword)}.markdown-body .pl-pds,.markdown-body .pl-s,.markdown-body .pl-s .pl-pse .pl-s1,.markdown-body .pl-sr,.markdown-body .pl-sr .pl-cce,.markdown-body .pl-sr .pl-sra,.markdown-body .pl-sr .pl-sre{color:var(--md-syntax-string)}.markdown-body .pl-smw,.markdown-body .pl-v{color:var(--md-syntax-variable)}.markdown-body .pl-bu{color:var(--md-danger-fg)}.markdown-body .pl-ii{background-color:var(--bgColor-danger-muted);color:var(--fgColor-danger)}.markdown-body .pl-c2{background-color:var(--md-danger-bg);color:var(--md-text)}.markdown-body .pl-sr .pl-cce{color:var(--md-syntax-builtin);font-weight:700}.markdown-body .pl-ml{color:var(--md-syntax-meta)}.markdown-body .pl-mh,.markdown-body .pl-mh .pl-en,.markdown-body .pl-ms{color:var(--md-accent-focus);font-weight:700}.markdown-body .pl-mi{color:var(--md-text);font-style:italic}.markdown-body .pl-mb{color:var(--md-text);font-weight:700}.markdown-body .pl-md{background-color:var(--md-diff-del-bg);color:var(--md-diff-del-text)}.markdown-body .pl-mi1{background-color:var(--md-diff-add-bg);color:var(--md-diff-add-text)}.markdown-body .pl-mc{background-color:var(--md-diff-changed-bg);color:var(--md-diff-changed-text)}.markdown-body .pl-mi2{background-color:var(--md-diff-meta-bg);color:var(--md-text)}.markdown-body .pl-mdr{color:var(--md-syntax-function);font-weight:700}.markdown-body .pl-ba{color:var(--md-text-muted)}.markdown-body .pl-sg{color:var(--md-border)}.markdown-body .pl-corl{color:var(--md-syntax-string);text-decoration:underline}.markdown-body [role=button]:focus:not(:focus-visible),.markdown-body [role=tabpanel][tabindex="0"]:focus:not(:focus-visible),.markdown-body a:focus:not(:focus-visible),.markdown-body button:focus:not(:focus-visible),.markdown-body summary:focus:not(:focus-visible){box-shadow:none;outline:none}.markdown-body [tabindex="0"]:focus:not(:focus-visible),.markdown-body details-dialog:focus:not(:focus-visible){outline:none}.markdown-body g-emoji{display:inline-block;font-family:Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol;font-size:1em;font-style:normal!important;font-weight:400;line-height:1;min-width:1ch;vertical-align:-.075em}.markdown-body g-emoji img{height:1em;width:1em}.markdown-body a:has(>p,>div,>pre,>blockquote){display:block}.markdown-body a:has(>p,>div,>pre,>blockquote):not(:has(.snippet-clipboard-content,>pre)){width:fit-content}.markdown-body a:has(>p,>div,>pre,>blockquote):has(.snippet-clipboard-content,>pre):focus-visible{outline:2px solid var(--borderColor-accent-emphasis);outline-offset:2px}.markdown-body .task-list-item{list-style-type:none}.markdown-body .task-list-item label{font-weight:400}.markdown-body .task-list-item.enabled label{cursor:pointer}.markdown-body .task-list-item+.task-list-item{margin-top:.25rem}.markdown-body .task-list-item .handle{display:none}.markdown-body .task-list-item-checkbox{margin:0 .2em .25em -1.4em;vertical-align:middle}.markdown-body ul:dir(rtl) .task-list-item-checkbox{margin:0 -1.6em .25em .2em}.markdown-body ol:dir(rtl) .task-list-item-checkbox{margin:0 -1.6em .25em .2em}.markdown-body .contains-task-list:focus-within .task-list-item-convert-container,.markdown-body .contains-task-list:hover .task-list-item-convert-container{clip-path:none;display:block;height:24px;overflow:visible;width:auto}.markdown-body ::-webkit-calendar-picker-indicator{filter:invert(50%)}.markdown-body .markdown-alert{border-left:.25em solid var(--md-border);color:inherit;margin-bottom:1rem;padding:.5rem 1rem}.markdown-body .markdown-alert>:first-child{margin-top:0}.markdown-body .markdown-alert>:last-child{margin-bottom:0}.markdown-body .markdown-alert .markdown-alert-title{align-items:center;display:flex;font-weight:500;line-height:1}.markdown-body .markdown-alert.markdown-alert-note{border-left-color:var(--md-alert-note-border)}.markdown-body .markdown-alert.markdown-alert-note .markdown-alert-title{color:var(--md-text-link)}.markdown-body .markdown-alert.markdown-alert-important{border-left-color:var(--md-alert-important-border)}.markdown-body .markdown-alert.markdown-alert-important .markdown-alert-title{color:var(--md-alert-important-title)}.markdown-body .markdown-alert.markdown-alert-warning{border-left-color:var(--md-alert-warning-border)}.markdown-body .markdown-alert.markdown-alert-warning .markdown-alert-title{color:var(--md-alert-warning-title)}.markdown-body .markdown-alert.markdown-alert-tip{border-left-color:var(--md-alert-tip-border)}.markdown-body .markdown-alert.markdown-alert-tip .markdown-alert-title{color:var(--md-alert-tip-title)}.markdown-body .markdown-alert.markdown-alert-caution{border-left-color:var(--md-alert-caution-border)}.markdown-body .markdown-alert.markdown-alert-caution .markdown-alert-title{color:var(--md-danger-fg)}.markdown-body>:first-child>.heading-element:first-child{margin-top:0!important}.markdown-body .highlight pre:has(+.zeroclipboard-container){min-height:52px}@font-face{font-family:Twilio;font-style:normal;font-weight:400;src:url(fonts/twilio.woff2) format("woff2")}pre code.hljs{-webkit-font-feature-settings:"calt" 1;font-feature-settings:"calt" 1;display:block;font-family:Twilio,monospace;font-variant-ligatures:common-ligatures contextual;letter-spacing:.1;line-height:2.2;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}
2
+ /*!
3
+ Theme: Tokyo-night-Dark
4
+ origin: https://github.com/enkia/tokyo-night-vscode-theme
5
+ Description: Original highlight.js style
6
+ Author: (c) Henri Vandersleyen <hvandersleyen@gmail.com>
7
+ License: see project LICENSE
8
+ Touched: 2022
9
+ */.hljs-comment,.hljs-meta{color:#565f89}.hljs-deletion,.hljs-doctag,.hljs-regexp,.hljs-selector-attr,.hljs-selector-class,.hljs-selector-id,.hljs-selector-pseudo,.hljs-tag,.hljs-template-tag,.hljs-variable.language_{color:#f7768e}.hljs-link,.hljs-literal,.hljs-number,.hljs-params,.hljs-template-variable,.hljs-type,.hljs-variable{color:#ff9e64}.hljs-attribute,.hljs-built_in{color:#e0af68}.hljs-selector-tag{color:#2ac3de}.hljs-keyword,.hljs-property,.hljs-subst,.hljs-title,.hljs-title.class_,.hljs-title.class_.inherited__,.hljs-title.function_{color:#7dcfff}.hljs-selector-tag{color:#73daca}.hljs-addition,.hljs-bullet,.hljs-quote,.hljs-string,.hljs-symbol{color:#9ece6a}.hljs-code,.hljs-formula,.hljs-section{color:#7aa2f7}.hljs-attr,.hljs-char.escape_,.hljs-keyword,.hljs-name,.hljs-operator{color:#bb9af7}.hljs-punctuation{color:#c0caf5}.hljs{background:#1a1b26;color:#9aa5ce}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700}
package/dist/index.d.ts CHANGED
@@ -13,20 +13,20 @@ declare const nextSib: (node: Node) => ChildNode;
13
13
  declare const beforeIndent: (node: Node) => boolean | void;
14
14
  declare const leaveNode: () => void;
15
15
  declare const leaveLogicNode: () => void;
16
- declare const render: <T>(Ctor: typeof bobe.Store, root: any) => ((bobe.LogicNode & {
16
+ declare const render: <T extends typeof bobe.Store>(Ctor: T, root: any) => readonly [bobe.LogicNode & {
17
17
  tokenizer: bobe.Tokenizer;
18
18
  fragmentSnapshot?: ReturnType<bobe.Tokenizer["snapshot"]>;
19
19
  resumeSnapshot?: ReturnType<bobe.Tokenizer["snapshot"]>;
20
- }) | bobe.Store)[];
20
+ }, InstanceType<T>];
21
21
 
22
22
  declare const renderHtmlStr: (ComponentClass: typeof Store) => {
23
23
  html: string;
24
24
  };
25
25
 
26
- declare const hydrate: (ComponentClass: typeof Store, rootEl: Element) => (Store | (bobe.LogicNode & {
26
+ declare const hydrate: (ComponentClass: typeof Store, rootEl: Element) => readonly [bobe.LogicNode & {
27
27
  tokenizer: bobe.Tokenizer;
28
28
  fragmentSnapshot?: ReturnType<bobe.Tokenizer["snapshot"]>;
29
29
  resumeSnapshot?: ReturnType<bobe.Tokenizer["snapshot"]>;
30
- }))[];
30
+ }, Store];
31
31
 
32
32
  export { BOOLEAN_ATTRS, CONTENT_FLAG, beforeIndent, createAnchor, createNode, firstChild, hydrate, insertAfter, leaveLogicNode, leaveNode, nextSib, remove, render, renderHtmlStr, setProp };
package/dist/index.umd.js CHANGED
@@ -428,8 +428,7 @@
428
428
  }
429
429
  }
430
430
  const hydrate = (ComponentClass, rootEl) => {
431
- const container = rootEl.parentNode;
432
- const cursor = new TreeCursor(container);
431
+ const cursor = new TreeCursor(rootEl);
433
432
  let isFirstRender = true;
434
433
  const hydrateSetProp = (node, key, value) => {
435
434
  if (isFirstRender && (key === 'text' || key === 'html')) {
@@ -488,7 +487,7 @@
488
487
  isFirstRender = false;
489
488
  }
490
489
  });
491
- return render(ComponentClass, container);
490
+ return render(ComponentClass, rootEl);
492
491
  };
493
492
 
494
493
  exports.BOOLEAN_ATTRS = BOOLEAN_ATTRS$1;
@@ -1 +1 @@
1
- {"version":3,"file":"index.umd.js","sources":["../src/render.ts","../src/global.ts","../src/type.ts","../src/render-html-str.ts","../src/render-hydrate.ts"],"sourcesContent":["import { customRender } from 'bobe';\n\nexport const BOOLEAN_ATTRS = new Set([\n 'disabled', 'readonly', 'checked', 'selected', 'hidden',\n 'multiple', 'required', 'autofocus', 'autoplay', 'controls',\n 'loop', 'muted', 'defer', 'async', 'reversed', 'open',\n 'itemscope', 'ismap', 'nohref', 'noshade', 'nowrap', 'compact', 'default'\n]);\n\nconst VALUE_PROP_TAGS = new Set(['INPUT', 'TEXTAREA', 'SELECT']);\n\nconst SVG_NS = 'http://www.w3.org/2000/svg';\nconst MATH_NS = 'http://www.w3.org/1998/Math/MathML';\n\nconst SVG_TAGS = new Set([\n 'svg', 'animate', 'animateMotion', 'animateTransform', 'circle', 'clipPath',\n 'defs', 'desc', 'ellipse', 'feBlend', 'feColorMatrix', 'feComponentTransfer',\n 'feComposite', 'feConvolveMatrix', 'feDiffuseLighting', 'feDisplacementMap',\n 'feDistantLight', 'feDropShadow', 'feFlood', 'feFuncA', 'feFuncB', 'feFuncG',\n 'feFuncR', 'feGaussianBlur', 'feImage', 'feMerge', 'feMergeNode', 'feMorphology',\n 'feOffset', 'fePointLight', 'feSpecularLighting', 'feSpotLight', 'feTile',\n 'feTurbulence', 'filter', 'foreignObject', 'g', 'image', 'line', 'linearGradient',\n 'marker', 'mask', 'metadata', 'mpath', 'path', 'pattern', 'polygon', 'polyline',\n 'radialGradient', 'rect', 'set', 'stop', 'switch', 'symbol', 'textPath',\n 'tspan', 'use', 'view'\n]);\n\nconst MATH_TAGS = new Set([\n 'math', 'maction', 'maligngroup', 'malignmark', 'menclose', 'merror',\n 'mfenced', 'mfrac', 'mglyph', 'mi', 'mlabeledtr', 'mlongdiv', 'mmultiscripts',\n 'mn', 'mo', 'mover', 'mpadded', 'mphantom', 'mroot', 'mrow', 'ms', 'mscarries',\n 'mscarry', 'msgroup', 'mstack', 'mspace', 'msqrt', 'msrow', 'mstyle', 'msub',\n 'msup', 'msubsup', 'mtable', 'mtd', 'mtext', 'mtr', 'munder', 'munderover',\n 'semantics', 'annotation', 'annotation-xml'\n]);\n\nconst isNS = (el: Element) => el.namespaceURI === SVG_NS || el.namespaceURI === MATH_NS;\n\n// ---- exported for unit testing ----\n\nexport const createNode = (name: string): Node => {\n if (name === 'text') return document.createTextNode('');\n if (MATH_TAGS.has(name)) return document.createElementNS(MATH_NS, name);\n if (SVG_TAGS.has(name)) return document.createElementNS(SVG_NS, name);\n return document.createElement(name);\n};\n\nexport const CONTENT_FLAG = Symbol('hasContent');\n\nexport const setProp = (node: Node, key: string, value: any): (() => void) | undefined => {\n const el = node as HTMLElement;\n\n // 0. text\n if (key === 'text') {\n (node as any)[CONTENT_FLAG] = value != null;\n if (value == null) return;\n node.textContent = value;\n return;\n }\n\n // 1. 事件\n if (key.startsWith('on')) {\n const evtName = key.slice(2);\n node.addEventListener(evtName, value);\n return () => node.removeEventListener(evtName, value);\n }\n\n // 2. class\n if (key === 'class') {\n if (value == null) {\n el.className = '';\n } else if (typeof value === 'object' && !Array.isArray(value)) {\n if (isNS(el)) {\n const names = Object.entries(value as Record<string, any>)\n .filter(([, v]) => !!v)\n .map(([k]) => k)\n .join(' ');\n el.setAttribute('class', names);\n } else {\n for (const k in value) {\n el.classList.toggle(k, !!(value as Record<string, any>)[k]);\n }\n }\n } else {\n const str = typeof value === 'boolean' ? (value ? 'true' : '') : String(value);\n if (isNS(el)) {\n el.setAttribute('class', str);\n } else {\n el.className = str;\n }\n }\n return;\n }\n\n // 3. style\n if (key === 'style') {\n if (value == null) {\n el.style.cssText = '';\n } else {\n el.style.cssText = String(value);\n }\n return;\n }\n\n // 4. html\n if (key === 'html') {\n (node as any)[CONTENT_FLAG] = value != null;\n if (value == null) return;\n (node as Element).innerHTML = String(value);\n return;\n }\n\n // 5. 布尔属性\n if (BOOLEAN_ATTRS.has(key)) {\n if (value === false || value === null || value === undefined) {\n el.removeAttribute(key);\n } else {\n el.setAttribute(key, '');\n }\n return;\n }\n\n // 6. input/textarea/select value & checked\n if ((key === 'value' || key === 'checked') && VALUE_PROP_TAGS.has(el.tagName)) {\n (el as any)[key] = value;\n return;\n }\n\n // 7. SVG/MathML 元素\n if (isNS(el)) {\n if (value == null) {\n el.removeAttribute(key);\n } else {\n el.setAttribute(key, String(value));\n }\n return;\n }\n\n // 8. data-* / aria-*\n if (key.startsWith('data-') || key.startsWith('aria-')) {\n if (value == null) {\n el.removeAttribute(key);\n } else {\n el.setAttribute(key, String(value));\n }\n return;\n }\n\n // 9. 其余属性\n if (value == null) {\n el.removeAttribute(key);\n } else if (key in el) {\n (el as any)[key] = value;\n } else {\n el.setAttribute(key, String(value));\n }\n};\n\nexport const insertAfter = (parent: Node, node: Node, prev: Node | null) => {\n if (!prev) parent.insertBefore(node, parent.firstChild);\n else parent.insertBefore(node, prev.nextSibling);\n};\n\nexport const createAnchor = (name: string) => document.createComment(name);\n\nexport const remove = (node: Node) => { (node as Element).remove(); };\n\nexport const firstChild = (node: Node) => node.firstChild;\n\nexport const nextSib = (node: Node) => node.nextSibling;\n\nexport const beforeIndent = (node: Node): boolean | void => {\n if ((node as any)[CONTENT_FLAG]) {\n const tag = (node as Element).tagName?.toLowerCase();\n const hasText = (node as HTMLElement).textContent != null;\n console.warn(`<${tag}> has ${hasText ? 'text' : 'html'} content and child elements — children ignored`);\n return false;\n }\n};\n\n// 浏览器渲染器中 leave 不需要额外操作(DOM 插入已由 insertAfter 完成)\nexport const leaveNode = () => {};\nexport const leaveLogicNode = () => {};\n\nexport const render = customRender({\n createNode,\n setProp,\n insertAfter,\n createAnchor,\n remove,\n firstChild,\n nextSib,\n beforeIndent,\n leaveNode,\n leaveLogicNode\n});\n","import { SSRCtx } from './type';\nexport let ctx: SSRCtx = {\n root: null,\n current: null\n};\n\nexport const cleanCtx = () =>\n Object.keys(ctx).forEach(key => {\n ctx[key] = null;\n });\n","export class SSRNode {\n type: SSRNodeType;\n // 链表\n parent?: SSRNode | null = null;\n firstChild: SSRNode | null = null;\n lastChild: SSRNode | null = null; // O(1) 尾插\n nextSibling: SSRNode | null = null;\n prevSibling: SSRNode | null = null;\n closed: boolean = false;\n startClosed: boolean = false;\n // innerHTML 缓存\n _innerHtml: string | null = null;\n}\n\nexport enum SSRNodeType {\n Element,\n Text,\n Anchor,\n Root\n}\n\nexport class Element extends SSRNode {\n type = SSRNodeType.Element;\n textContent: string | null = null;\n\n attrs: Record<string, string> = {};\n constructor(\n /** 标签名 */\n public value: string,\n public parent?: SSRNode | null\n ) {\n super();\n }\n}\n\nexport class Text extends SSRNode {\n type = SSRNodeType.Text;\n constructor(\n /** 文本内容 */\n public textContent: string,\n public parent?: SSRNode | null\n ) {\n super();\n }\n}\n\nexport class Anchor extends SSRNode {\n type = SSRNodeType.Anchor;\n constructor(\n /** 注释内容 */\n public value: string,\n public parent?: SSRNode | null\n ) {\n super();\n }\n}\nexport class Root extends SSRNode {\n type = SSRNodeType.Root;\n constructor(\n /** 输出 HTML */\n public value: string,\n public parent?: SSRNode | null\n ) {\n super();\n }\n}\n\nexport type SSRCtx = {\n /** 根节点 */\n root: Root;\n /** 当前节点 */\n current: SSRNode;\n};\n","import { customRender, Store, LogicNode } from 'bobe';\nimport { cleanCtx, ctx } from './global';\nimport { Root, Element, Text, Anchor, SSRNode, SSRNodeType } from './type';\n\nconst VOID_TAGS = new Set([\n 'area',\n 'base',\n 'br',\n 'col',\n 'embed',\n 'hr',\n 'img',\n 'input',\n 'link',\n 'meta',\n 'param',\n 'source',\n 'track',\n 'wbr'\n]);\n\nconst BOOLEAN_ATTRS = new Set([\n 'disabled',\n 'readonly',\n 'checked',\n 'selected',\n 'hidden',\n 'multiple',\n 'required',\n 'autofocus',\n 'autoplay',\n 'controls',\n 'loop',\n 'muted',\n 'defer',\n 'async',\n 'reversed',\n 'open',\n 'itemscope',\n 'ismap',\n 'nohref',\n 'noshade',\n 'nowrap',\n 'compact',\n 'default'\n]);\n\nconst ATTR_RE = /[&\"<>]/g;\nconst TEXT_RE = /[&<>]/g;\nconst ATTR_MAP: Record<string, string> = {\n '&': '&amp;',\n '\"': '&quot;',\n '<': '&lt;',\n '>': '&gt;'\n};\nconst TEXT_MAP: Record<string, string> = {\n '&': '&amp;',\n '<': '&lt;',\n '>': '&gt;'\n};\n\nconst escapeAttr = (str: string) => {\n const s = String(str);\n return ATTR_RE.test(s) ? s.replace(ATTR_RE, m => ATTR_MAP[m]) : s;\n};\n\nconst escapeText = (str: string) => {\n const s = String(str);\n return TEXT_RE.test(s) ? s.replace(TEXT_RE, m => TEXT_MAP[m]) : s;\n};\n\nconst createNode = (name: string) => {\n if (name === 'text') {\n return new Text('');\n }\n ctx.root.value += `<${name}`;\n return new Element(name);\n};\n\nconst setProp = (node: Text | Element, key: string, value: any) => {\n if (node.startClosed) return;\n if (key.startsWith('on') || key === 'ref') return;\n\n // 0. text\n if (key === 'text') {\n if (value == null) return;\n node.textContent = value;\n return;\n }\n\n // 1. html\n if (key === 'html') {\n if (value == null) return;\n node._innerHtml = String(value);\n return;\n }\n\n // 2. class — 对齐 Browser:支持对象/字符串/null\n if (key === 'class') {\n if (value == null) return;\n let classStr: string;\n if (typeof value === 'object' && !Array.isArray(value)) {\n classStr = Object.entries(value as Record<string, any>)\n .filter(([, v]) => !!v)\n .map(([k]) => k)\n .join(' ');\n } else {\n classStr = typeof value === 'boolean' ? (value ? 'true' : '') : String(value);\n }\n if (classStr) ctx.root.value += ` class=\"${escapeAttr(classStr)}\"`;\n return;\n }\n\n // 3. style — 对齐 Browser\n if (key === 'style') {\n if (value == null) return;\n ctx.root.value += ` style=\"${escapeAttr(String(value))}\"`;\n return;\n }\n\n // 4. 布尔属性\n if (BOOLEAN_ATTRS.has(key)) {\n if (value !== false && value !== null && value !== undefined) {\n ctx.root.value += ` ${key}`;\n }\n return;\n }\n\n // 5. data-* / aria-* — 对齐 Browser:null 时不输出\n if (key.startsWith('data-') || key.startsWith('aria-')) {\n if (value == null) return;\n ctx.root.value += ` ${key}=\"${escapeAttr(value)}\"`;\n return;\n }\n\n // 6. 其余属性 — 对齐 Browser:null 时不输出\n if (value == null) return;\n ctx.root.value += ` ${key}=\"${escapeAttr(value)}\"`;\n};\n\nconst appendInnerContent = (node: Element) => {\n if (node._innerHtml != null) {\n ctx.root.value += node._innerHtml;\n return true;\n }\n if (node.textContent != null) {\n ctx.root.value += escapeText(node.textContent);\n return true;\n }\n return false;\n};\n\nconst beforeIndent = (node: Text | Element): boolean => {\n if (node instanceof Text) return true;\n\n const hasText = node.textContent != null;\n const hasHtml = node._innerHtml != null;\n\n // 不能包含内容的元素\n if (VOID_TAGS.has(node.value)) {\n ctx.root.value += `/>`;\n console.warn(`<${node.value}> can't have children`);\n node.startClosed = true;\n node.closed = true;\n return false;\n }\n\n if (hasText || hasHtml) {\n console.warn(`<${node.value}> has ${hasHtml ? 'html' : 'text'} content and child elements — children ignored`);\n ctx.root.value += `>`;\n // 容器元素有 text/html 内容且检测到子节点冲突,立即闭合;与 leaveNode 叶元素路径互斥\n appendInnerContent(node);\n ctx.root.value += `</${node.value}>`;\n node.startClosed = true;\n node.closed = true;\n return false;\n }\n\n ctx.root.value += `>`;\n node.startClosed = true;\n return true;\n};\n\nconst leaveLogicNode = (node: LogicNode) => {\n const realAfter = node.realAfter as Anchor;\n ctx.root.value += `<!--${realAfter.value}-->`;\n};\nconst leaveNode = (node: Text | Element, isDedent: boolean) => {\n /**\n * indent 提前 closed 就退出,这两种都是有缩进的\n * 1. 元素属于 VOID_TAGS\n * 2. 元素 text/html 属性与 children 冲突,采用 text/html\n */\n if (node.closed) return;\n if (node instanceof Text) {\n ctx.root.value += escapeText(node.textContent);\n } else {\n // 如果现在是 \"<div>\" 状态,添加 />\n if (node.startClosed) {\n // 什么都不做,正常永远都不会进入,因为 beforeIndent 会直接加 /> 设置 closed = true\n if (VOID_TAGS.has(node.value)) {\n } else {\n ctx.root.value += `</${node.value}>`;\n }\n }\n // 无 startClosed, 叶子节点\n else {\n // 直接自闭合\n if (VOID_TAGS.has(node.value)) {\n ctx.root.value += ` />`;\n }\n // 先加入 '>' 再看有内容加内容,最后反 Tag 闭合\n else {\n ctx.root.value += `>`;\n // 叶元素,无子节点;与 beforeIndent 中的 appendInnerContent 互斥\n appendInnerContent(node);\n ctx.root.value += `</${node.value}>`;\n }\n }\n }\n};\n\nconst insertAfter = (parent: SSRNode, node: SSRNode, prev: SSRNode | null) => {\n const next = prev ? prev.nextSibling : parent.firstChild;\n node.nextSibling = next;\n node.prevSibling = prev;\n\n if (prev) {\n prev.nextSibling = node;\n } else {\n parent.firstChild = node;\n }\n if (next) {\n next.prevSibling = node;\n } else {\n parent.lastChild = node;\n }\n node.parent = parent;\n};\n\nconst createAnchor = (name: string, isBefore?: boolean) => {\n if (isBefore) {\n ctx.root.value += `<!--${name}-->`;\n }\n return new Anchor(name);\n};\n\nconst remove = (node: SSRNode) => {\n const { parent, prevSibling, nextSibling } = node;\n if (prevSibling) {\n prevSibling.nextSibling = nextSibling;\n }\n if (nextSibling) {\n nextSibling.prevSibling = prevSibling;\n }\n if (parent) {\n if (parent.firstChild === node) {\n parent.firstChild = nextSibling;\n }\n if (parent.lastChild === node) {\n parent.lastChild = prevSibling;\n }\n }\n};\n\nconst firstChild = (node: SSRNode) => node.firstChild;\n\nconst nextSib = (node: SSRNode) => node.nextSibling;\n\nexport const renderHtmlStr = (ComponentClass: typeof Store) => {\n cleanCtx();\n const root = new Root('');\n ctx.root = ctx.current = root;\n const render = customRender({\n createNode,\n setProp,\n insertAfter,\n createAnchor,\n remove,\n firstChild,\n nextSib,\n beforeIndent,\n leaveNode,\n leaveLogicNode,\n noopEffect: true\n });\n render(ComponentClass, root);\n return {\n html: ctx.root.value\n };\n};\n","import { customRender, Store } from 'bobe';\nimport {\n setProp,\n createNode as browserCreateNode,\n remove,\n firstChild,\n nextSib,\n CONTENT_FLAG\n} from './render';\n\n// ====== TreeCursor ======\n\nclass TreeCursor {\n private parent: Node;\n private claimed = new WeakSet<Node>();\n\n constructor(container: Node) {\n this.parent = container;\n }\n\n enterChildren(node: Node) {\n this.parent = node;\n }\n\n leaveToParent(node: Node) {\n if (node === this.parent && this.parent.parentNode) {\n this.parent = this.parent.parentNode;\n }\n }\n\n private findUnclaimed(predicate: (node: Node) => boolean): Node | null {\n let node = this.parent.firstChild;\n while (node) {\n if (!this.claimed.has(node) && predicate(node)) {\n this.claimed.add(node);\n return node;\n }\n node = node.nextSibling;\n }\n return null;\n }\n\n tryClaimElement(tagName: string): Element | null {\n return this.findUnclaimed(\n (node) => node.nodeType === 1 && (node as Element).tagName.toLowerCase() === tagName\n ) as Element | null;\n }\n\n tryClaimComment(name: string): Comment | null {\n return this.findUnclaimed(\n (node) => node.nodeType === 8 && (node as Comment).data === name\n ) as Comment | null;\n }\n\n tryClaimText(): Text | null {\n return this.findUnclaimed(\n (node) => node.nodeType === 3 && !!(node.textContent?.trim())\n ) as Text | null;\n }\n}\n\n// ====== 回调 ======\n\nexport const hydrate = (ComponentClass: typeof Store, rootEl: Element) => {\n const container = rootEl.parentNode!;\n const cursor = new TreeCursor(container);\n // 首屏 render 期间(含 flushMicroEffectManual 中的 for/if effect 首次执行)为 true\n // 后续响应式更新为 false,createNode/createAnchor 直接创建新节点\n let isFirstRender = true;\n\n // 首屏时 text/html 的 DOM 内容已由 SSR 生成,跳过 innerHTML/textContent 赋值避免重绘\n // 但仍需设 CONTENT_FLAG 保证 beforeIndent 冲突检测正常\n const hydrateSetProp = (node: Node, key: string, value: any) => {\n if (isFirstRender && (key === 'text' || key === 'html')) {\n (node as any)[CONTENT_FLAG] = value != null;\n return;\n }\n return setProp(node, key, value);\n };\n\n const createNode = (name: string): Node => {\n if (isFirstRender) {\n const claimed = name === 'text'\n ? cursor.tryClaimText()\n : cursor.tryClaimElement(name);\n if (claimed) return claimed;\n }\n return name === 'text'\n ? document.createTextNode('')\n : browserCreateNode(name);\n };\n\n const createAnchor = (name: string): Comment => {\n if (isFirstRender) {\n const claimed = cursor.tryClaimComment(name);\n if (claimed) return claimed;\n }\n return document.createComment(name);\n };\n\n const insertAfter = (parent: Node, node: Node, prev: Node | null) => {\n if (node === parent) return;\n const expectedNext = prev ? prev.nextSibling : parent.firstChild;\n if (node === expectedNext) return;\n parent.insertBefore(node, expectedNext);\n };\n\n const beforeIndent = (node: Node): boolean | void => {\n if ((node as any)[CONTENT_FLAG]) {\n const tag = (node as Element).tagName?.toLowerCase();\n const hasText = (node as HTMLElement).textContent != null;\n console.warn(\n `<${tag}> has ${hasText ? 'text' : 'html'} content and child elements — children ignored`\n );\n return false;\n }\n if (isFirstRender) cursor.enterChildren(node);\n };\n\n const leaveNode = (node: Node) => {\n if (isFirstRender) cursor.leaveToParent(node);\n };\n\n const leaveLogicNode = (node: Node) => {\n if (isFirstRender) cursor.leaveToParent(node);\n };\n\n const render = customRender({\n createNode,\n setProp: hydrateSetProp,\n insertAfter,\n createAnchor,\n remove,\n firstChild,\n nextSib,\n beforeIndent,\n leaveNode,\n leaveLogicNode,\n // program() 遍历完模板后、flushMicroEffectManual 首次执行 effect 前切回首屏标志\n // 后续 for/if effect 中的 createNode 走浏览器新建路径,不再尝试从 SSR DOM 认领\n onBeforeFlush: () => {\n isFirstRender = false;\n }\n });\n\n return render(ComponentClass, container);\n};\n"],"names":["BOOLEAN_ATTRS","Set","VALUE_PROP_TAGS","SVG_NS","MATH_NS","SVG_TAGS","MATH_TAGS","isNS","el","namespaceURI","createNode","name","document","createTextNode","has","createElementNS","createElement","CONTENT_FLAG","Symbol","setProp","node","key","value","textContent","startsWith","evtName","slice","addEventListener","removeEventListener","className","Array","isArray","names","Object","entries","filter","v","map","k","join","setAttribute","classList","toggle","str","String","style","cssText","innerHTML","undefined","removeAttribute","tagName","insertAfter","parent","prev","insertBefore","firstChild","nextSibling","createAnchor","createComment","remove","nextSib","beforeIndent","tag","toLowerCase","hasText","console","warn","leaveNode","leaveLogicNode","render","customRender","ctx","root","current","cleanCtx","keys","forEach","SSRNode","lastChild","prevSibling","closed","startClosed","_innerHtml","SSRNodeType","Element","type","attrs","constructor","Text","Anchor","Root","VOID_TAGS","ATTR_RE","TEXT_RE","ATTR_MAP","TEXT_MAP","escapeAttr","s","test","replace","m","escapeText","classStr","appendInnerContent","hasHtml","realAfter","isDedent","next","isBefore","renderHtmlStr","ComponentClass","noopEffect","html","TreeCursor","claimed","WeakSet","container","enterChildren","leaveToParent","parentNode","findUnclaimed","predicate","add","tryClaimElement","nodeType","tryClaimComment","data","tryClaimText","trim","hydrate","rootEl","cursor","isFirstRender","hydrateSetProp","browserCreateNode","expectedNext","onBeforeFlush"],"mappings":"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"}
1
+ {"version":3,"file":"index.umd.js","sources":["../src/render.ts","../src/global.ts","../src/type.ts","../src/render-html-str.ts","../src/render-hydrate.ts"],"sourcesContent":["import { customRender } from 'bobe';\n\nexport const BOOLEAN_ATTRS = new Set([\n 'disabled', 'readonly', 'checked', 'selected', 'hidden',\n 'multiple', 'required', 'autofocus', 'autoplay', 'controls',\n 'loop', 'muted', 'defer', 'async', 'reversed', 'open',\n 'itemscope', 'ismap', 'nohref', 'noshade', 'nowrap', 'compact', 'default'\n]);\n\nconst VALUE_PROP_TAGS = new Set(['INPUT', 'TEXTAREA', 'SELECT']);\n\nconst SVG_NS = 'http://www.w3.org/2000/svg';\nconst MATH_NS = 'http://www.w3.org/1998/Math/MathML';\n\nconst SVG_TAGS = new Set([\n 'svg', 'animate', 'animateMotion', 'animateTransform', 'circle', 'clipPath',\n 'defs', 'desc', 'ellipse', 'feBlend', 'feColorMatrix', 'feComponentTransfer',\n 'feComposite', 'feConvolveMatrix', 'feDiffuseLighting', 'feDisplacementMap',\n 'feDistantLight', 'feDropShadow', 'feFlood', 'feFuncA', 'feFuncB', 'feFuncG',\n 'feFuncR', 'feGaussianBlur', 'feImage', 'feMerge', 'feMergeNode', 'feMorphology',\n 'feOffset', 'fePointLight', 'feSpecularLighting', 'feSpotLight', 'feTile',\n 'feTurbulence', 'filter', 'foreignObject', 'g', 'image', 'line', 'linearGradient',\n 'marker', 'mask', 'metadata', 'mpath', 'path', 'pattern', 'polygon', 'polyline',\n 'radialGradient', 'rect', 'set', 'stop', 'switch', 'symbol', 'textPath',\n 'tspan', 'use', 'view'\n]);\n\nconst MATH_TAGS = new Set([\n 'math', 'maction', 'maligngroup', 'malignmark', 'menclose', 'merror',\n 'mfenced', 'mfrac', 'mglyph', 'mi', 'mlabeledtr', 'mlongdiv', 'mmultiscripts',\n 'mn', 'mo', 'mover', 'mpadded', 'mphantom', 'mroot', 'mrow', 'ms', 'mscarries',\n 'mscarry', 'msgroup', 'mstack', 'mspace', 'msqrt', 'msrow', 'mstyle', 'msub',\n 'msup', 'msubsup', 'mtable', 'mtd', 'mtext', 'mtr', 'munder', 'munderover',\n 'semantics', 'annotation', 'annotation-xml'\n]);\n\nconst isNS = (el: Element) => el.namespaceURI === SVG_NS || el.namespaceURI === MATH_NS;\n\n// ---- exported for unit testing ----\n\nexport const createNode = (name: string): Node => {\n if (name === 'text') return document.createTextNode('');\n if (MATH_TAGS.has(name)) return document.createElementNS(MATH_NS, name);\n if (SVG_TAGS.has(name)) return document.createElementNS(SVG_NS, name);\n return document.createElement(name);\n};\n\nexport const CONTENT_FLAG = Symbol('hasContent');\n\nexport const setProp = (node: Node, key: string, value: any): (() => void) | undefined => {\n const el = node as HTMLElement;\n\n // 0. text\n if (key === 'text') {\n (node as any)[CONTENT_FLAG] = value != null;\n if (value == null) return;\n node.textContent = value;\n return;\n }\n\n // 1. 事件\n if (key.startsWith('on')) {\n const evtName = key.slice(2);\n node.addEventListener(evtName, value);\n return () => node.removeEventListener(evtName, value);\n }\n\n // 2. class\n if (key === 'class') {\n if (value == null) {\n el.className = '';\n } else if (typeof value === 'object' && !Array.isArray(value)) {\n if (isNS(el)) {\n const names = Object.entries(value as Record<string, any>)\n .filter(([, v]) => !!v)\n .map(([k]) => k)\n .join(' ');\n el.setAttribute('class', names);\n } else {\n for (const k in value) {\n el.classList.toggle(k, !!(value as Record<string, any>)[k]);\n }\n }\n } else {\n const str = typeof value === 'boolean' ? (value ? 'true' : '') : String(value);\n if (isNS(el)) {\n el.setAttribute('class', str);\n } else {\n el.className = str;\n }\n }\n return;\n }\n\n // 3. style\n if (key === 'style') {\n if (value == null) {\n el.style.cssText = '';\n } else {\n el.style.cssText = String(value);\n }\n return;\n }\n\n // 4. html\n if (key === 'html') {\n (node as any)[CONTENT_FLAG] = value != null;\n if (value == null) return;\n (node as Element).innerHTML = String(value);\n return;\n }\n\n // 5. 布尔属性\n if (BOOLEAN_ATTRS.has(key)) {\n if (value === false || value === null || value === undefined) {\n el.removeAttribute(key);\n } else {\n el.setAttribute(key, '');\n }\n return;\n }\n\n // 6. input/textarea/select value & checked\n if ((key === 'value' || key === 'checked') && VALUE_PROP_TAGS.has(el.tagName)) {\n (el as any)[key] = value;\n return;\n }\n\n // 7. SVG/MathML 元素\n if (isNS(el)) {\n if (value == null) {\n el.removeAttribute(key);\n } else {\n el.setAttribute(key, String(value));\n }\n return;\n }\n\n // 8. data-* / aria-*\n if (key.startsWith('data-') || key.startsWith('aria-')) {\n if (value == null) {\n el.removeAttribute(key);\n } else {\n el.setAttribute(key, String(value));\n }\n return;\n }\n\n // 9. 其余属性\n if (value == null) {\n el.removeAttribute(key);\n } else if (key in el) {\n (el as any)[key] = value;\n } else {\n el.setAttribute(key, String(value));\n }\n};\n\nexport const insertAfter = (parent: Node, node: Node, prev: Node | null) => {\n if (!prev) parent.insertBefore(node, parent.firstChild);\n else parent.insertBefore(node, prev.nextSibling);\n};\n\nexport const createAnchor = (name: string) => document.createComment(name);\n\nexport const remove = (node: Node) => { (node as Element).remove(); };\n\nexport const firstChild = (node: Node) => node.firstChild;\n\nexport const nextSib = (node: Node) => node.nextSibling;\n\nexport const beforeIndent = (node: Node): boolean | void => {\n if ((node as any)[CONTENT_FLAG]) {\n const tag = (node as Element).tagName?.toLowerCase();\n const hasText = (node as HTMLElement).textContent != null;\n console.warn(`<${tag}> has ${hasText ? 'text' : 'html'} content and child elements — children ignored`);\n return false;\n }\n};\n\n// 浏览器渲染器中 leave 不需要额外操作(DOM 插入已由 insertAfter 完成)\nexport const leaveNode = () => {};\nexport const leaveLogicNode = () => {};\n\nexport const render = customRender({\n createNode,\n setProp,\n insertAfter,\n createAnchor,\n remove,\n firstChild,\n nextSib,\n beforeIndent,\n leaveNode,\n leaveLogicNode\n});\n","import { SSRCtx } from './type';\nexport let ctx: SSRCtx = {\n root: null,\n current: null\n};\n\nexport const cleanCtx = () =>\n Object.keys(ctx).forEach(key => {\n ctx[key] = null;\n });\n","export class SSRNode {\n type: SSRNodeType;\n // 链表\n parent?: SSRNode | null = null;\n firstChild: SSRNode | null = null;\n lastChild: SSRNode | null = null; // O(1) 尾插\n nextSibling: SSRNode | null = null;\n prevSibling: SSRNode | null = null;\n closed: boolean = false;\n startClosed: boolean = false;\n // innerHTML 缓存\n _innerHtml: string | null = null;\n}\n\nexport enum SSRNodeType {\n Element,\n Text,\n Anchor,\n Root\n}\n\nexport class Element extends SSRNode {\n type = SSRNodeType.Element;\n textContent: string | null = null;\n\n attrs: Record<string, string> = {};\n constructor(\n /** 标签名 */\n public value: string,\n public parent?: SSRNode | null\n ) {\n super();\n }\n}\n\nexport class Text extends SSRNode {\n type = SSRNodeType.Text;\n constructor(\n /** 文本内容 */\n public textContent: string,\n public parent?: SSRNode | null\n ) {\n super();\n }\n}\n\nexport class Anchor extends SSRNode {\n type = SSRNodeType.Anchor;\n constructor(\n /** 注释内容 */\n public value: string,\n public parent?: SSRNode | null\n ) {\n super();\n }\n}\nexport class Root extends SSRNode {\n type = SSRNodeType.Root;\n constructor(\n /** 输出 HTML */\n public value: string,\n public parent?: SSRNode | null\n ) {\n super();\n }\n}\n\nexport type SSRCtx = {\n /** 根节点 */\n root: Root;\n /** 当前节点 */\n current: SSRNode;\n};\n","import { customRender, Store, LogicNode } from 'bobe';\nimport { cleanCtx, ctx } from './global';\nimport { Root, Element, Text, Anchor, SSRNode, SSRNodeType } from './type';\n\nconst VOID_TAGS = new Set([\n 'area',\n 'base',\n 'br',\n 'col',\n 'embed',\n 'hr',\n 'img',\n 'input',\n 'link',\n 'meta',\n 'param',\n 'source',\n 'track',\n 'wbr'\n]);\n\nconst BOOLEAN_ATTRS = new Set([\n 'disabled',\n 'readonly',\n 'checked',\n 'selected',\n 'hidden',\n 'multiple',\n 'required',\n 'autofocus',\n 'autoplay',\n 'controls',\n 'loop',\n 'muted',\n 'defer',\n 'async',\n 'reversed',\n 'open',\n 'itemscope',\n 'ismap',\n 'nohref',\n 'noshade',\n 'nowrap',\n 'compact',\n 'default'\n]);\n\nconst ATTR_RE = /[&\"<>]/g;\nconst TEXT_RE = /[&<>]/g;\nconst ATTR_MAP: Record<string, string> = {\n '&': '&amp;',\n '\"': '&quot;',\n '<': '&lt;',\n '>': '&gt;'\n};\nconst TEXT_MAP: Record<string, string> = {\n '&': '&amp;',\n '<': '&lt;',\n '>': '&gt;'\n};\n\nconst escapeAttr = (str: string) => {\n const s = String(str);\n return ATTR_RE.test(s) ? s.replace(ATTR_RE, m => ATTR_MAP[m]) : s;\n};\n\nconst escapeText = (str: string) => {\n const s = String(str);\n return TEXT_RE.test(s) ? s.replace(TEXT_RE, m => TEXT_MAP[m]) : s;\n};\n\nconst createNode = (name: string) => {\n if (name === 'text') {\n return new Text('');\n }\n ctx.root.value += `<${name}`;\n return new Element(name);\n};\n\nconst setProp = (node: Text | Element, key: string, value: any) => {\n if (node.startClosed) return;\n if (key.startsWith('on') || key === 'ref') return;\n\n // 0. text\n if (key === 'text') {\n if (value == null) return;\n node.textContent = value;\n return;\n }\n\n // 1. html\n if (key === 'html') {\n if (value == null) return;\n node._innerHtml = String(value);\n return;\n }\n\n // 2. class — 对齐 Browser:支持对象/字符串/null\n if (key === 'class') {\n if (value == null) return;\n let classStr: string;\n if (typeof value === 'object' && !Array.isArray(value)) {\n classStr = Object.entries(value as Record<string, any>)\n .filter(([, v]) => !!v)\n .map(([k]) => k)\n .join(' ');\n } else {\n classStr = typeof value === 'boolean' ? (value ? 'true' : '') : String(value);\n }\n if (classStr) ctx.root.value += ` class=\"${escapeAttr(classStr)}\"`;\n return;\n }\n\n // 3. style — 对齐 Browser\n if (key === 'style') {\n if (value == null) return;\n ctx.root.value += ` style=\"${escapeAttr(String(value))}\"`;\n return;\n }\n\n // 4. 布尔属性\n if (BOOLEAN_ATTRS.has(key)) {\n if (value !== false && value !== null && value !== undefined) {\n ctx.root.value += ` ${key}`;\n }\n return;\n }\n\n // 5. data-* / aria-* — 对齐 Browser:null 时不输出\n if (key.startsWith('data-') || key.startsWith('aria-')) {\n if (value == null) return;\n ctx.root.value += ` ${key}=\"${escapeAttr(value)}\"`;\n return;\n }\n\n // 6. 其余属性 — 对齐 Browser:null 时不输出\n if (value == null) return;\n ctx.root.value += ` ${key}=\"${escapeAttr(value)}\"`;\n};\n\nconst appendInnerContent = (node: Element) => {\n if (node._innerHtml != null) {\n ctx.root.value += node._innerHtml;\n return true;\n }\n if (node.textContent != null) {\n ctx.root.value += escapeText(node.textContent);\n return true;\n }\n return false;\n};\n\nconst beforeIndent = (node: Text | Element): boolean => {\n if (node instanceof Text) return true;\n\n const hasText = node.textContent != null;\n const hasHtml = node._innerHtml != null;\n\n // 不能包含内容的元素\n if (VOID_TAGS.has(node.value)) {\n ctx.root.value += `/>`;\n console.warn(`<${node.value}> can't have children`);\n node.startClosed = true;\n node.closed = true;\n return false;\n }\n\n if (hasText || hasHtml) {\n console.warn(`<${node.value}> has ${hasHtml ? 'html' : 'text'} content and child elements — children ignored`);\n ctx.root.value += `>`;\n // 容器元素有 text/html 内容且检测到子节点冲突,立即闭合;与 leaveNode 叶元素路径互斥\n appendInnerContent(node);\n ctx.root.value += `</${node.value}>`;\n node.startClosed = true;\n node.closed = true;\n return false;\n }\n\n ctx.root.value += `>`;\n node.startClosed = true;\n return true;\n};\n\nconst leaveLogicNode = (node: LogicNode) => {\n const realAfter = node.realAfter as Anchor;\n ctx.root.value += `<!--${realAfter.value}-->`;\n};\nconst leaveNode = (node: Text | Element, isDedent: boolean) => {\n /**\n * indent 提前 closed 就退出,这两种都是有缩进的\n * 1. 元素属于 VOID_TAGS\n * 2. 元素 text/html 属性与 children 冲突,采用 text/html\n */\n if (node.closed) return;\n if (node instanceof Text) {\n ctx.root.value += escapeText(node.textContent);\n } else {\n // 如果现在是 \"<div>\" 状态,添加 />\n if (node.startClosed) {\n // 什么都不做,正常永远都不会进入,因为 beforeIndent 会直接加 /> 设置 closed = true\n if (VOID_TAGS.has(node.value)) {\n } else {\n ctx.root.value += `</${node.value}>`;\n }\n }\n // 无 startClosed, 叶子节点\n else {\n // 直接自闭合\n if (VOID_TAGS.has(node.value)) {\n ctx.root.value += ` />`;\n }\n // 先加入 '>' 再看有内容加内容,最后反 Tag 闭合\n else {\n ctx.root.value += `>`;\n // 叶元素,无子节点;与 beforeIndent 中的 appendInnerContent 互斥\n appendInnerContent(node);\n ctx.root.value += `</${node.value}>`;\n }\n }\n }\n};\n\nconst insertAfter = (parent: SSRNode, node: SSRNode, prev: SSRNode | null) => {\n const next = prev ? prev.nextSibling : parent.firstChild;\n node.nextSibling = next;\n node.prevSibling = prev;\n\n if (prev) {\n prev.nextSibling = node;\n } else {\n parent.firstChild = node;\n }\n if (next) {\n next.prevSibling = node;\n } else {\n parent.lastChild = node;\n }\n node.parent = parent;\n};\n\nconst createAnchor = (name: string, isBefore?: boolean) => {\n if (isBefore) {\n ctx.root.value += `<!--${name}-->`;\n }\n return new Anchor(name);\n};\n\nconst remove = (node: SSRNode) => {\n const { parent, prevSibling, nextSibling } = node;\n if (prevSibling) {\n prevSibling.nextSibling = nextSibling;\n }\n if (nextSibling) {\n nextSibling.prevSibling = prevSibling;\n }\n if (parent) {\n if (parent.firstChild === node) {\n parent.firstChild = nextSibling;\n }\n if (parent.lastChild === node) {\n parent.lastChild = prevSibling;\n }\n }\n};\n\nconst firstChild = (node: SSRNode) => node.firstChild;\n\nconst nextSib = (node: SSRNode) => node.nextSibling;\n\nexport const renderHtmlStr = (ComponentClass: typeof Store) => {\n cleanCtx();\n const root = new Root('');\n ctx.root = ctx.current = root;\n const render = customRender({\n createNode,\n setProp,\n insertAfter,\n createAnchor,\n remove,\n firstChild,\n nextSib,\n beforeIndent,\n leaveNode,\n leaveLogicNode,\n noopEffect: true\n });\n render(ComponentClass, root);\n return {\n html: ctx.root.value\n };\n};\n","import { customRender, Store } from 'bobe';\nimport {\n setProp,\n createNode as browserCreateNode,\n remove,\n firstChild,\n nextSib,\n CONTENT_FLAG\n} from './render';\n\n// ====== TreeCursor ======\n\n/**\n * SSR DOM 认领游标。\n *\n * 工作方式:\n * - 维护一个 `parent` 指针,始终指向\"当前容器\"。\n * - `findUnclaimed` 只在 `parent.firstChild` 中平铺搜索(只搜一层,不递归)。\n * - 认领过的节点放入 `claimed` WeakSet,同一次遍历不会重复认领。\n *\n * 典型调用(以 hydrate 测试为例):\n * container.innerHTML = ssrHtml; // <div id=\"app1\"><div>SSR...</div></div>\n * hydrate(Ctor, container);\n *\n * hydrate 内部:\n * cursor = new TreeCursor(rootEl.parentNode); // 光标起点 = container,即 <div id=\"app1\">\n * createNode('div') → findUnclaimed 搜 <div id=\"app1\"> 的直接子级 → 找到 rootEl → 认领 ✅\n * beforeIndent → enterChildren(rootEl) // 光标进入 rootEl\n * createNode('nav') → findUnclaimed 搜 rootEl 的直接子级 → 找到 SSR <nav> → 认领 ✅\n *\n * 关键约束:游标只在当前层级搜索。这就是为什么光标起点必须在 container 层——让 App 的\n * 外层 div 在 container 的子级中被认领,而不是在 <body> 层误将 #app 当 div 认领走。\n */\nclass TreeCursor {\n /** 当前搜索容器——findUnclaimed 在此节点的 firstChild 链上搜索 */\n private parent: Node;\n /** 已认领节点集合,避免同一次遍历中重复认领 */\n private claimed = new WeakSet<Node>();\n\n constructor(container: Node) {\n this.parent = container;\n }\n\n /** 进入子节点:后续 findUnclaimed 搜 node 的直接子级 */\n enterChildren(node: Node) {\n this.parent = node;\n }\n\n /** 退出当前节点,回到父级 */\n leaveToParent(node: Node) {\n if (node === this.parent && this.parent.parentNode) {\n this.parent = this.parent.parentNode;\n }\n }\n\n /** 在 this.parent 的 firstChild 链上查找第一个满足条件且未被认领的节点 */\n private findUnclaimed(predicate: (node: Node) => boolean): Node | null {\n let node = this.parent.firstChild;\n while (node) {\n if (!this.claimed.has(node) && predicate(node)) {\n this.claimed.add(node);\n return node;\n }\n node = node.nextSibling;\n }\n return null;\n }\n\n /** 认领一个未使用的元素节点(按 tagName 匹配) */\n tryClaimElement(tagName: string): Element | null {\n return this.findUnclaimed(\n (node) => node.nodeType === 1 && (node as Element).tagName.toLowerCase() === tagName\n ) as Element | null;\n }\n\n /** 认领一个未使用的注释节点(按注释内容匹配) */\n tryClaimComment(name: string): Comment | null {\n return this.findUnclaimed(\n (node) => node.nodeType === 8 && (node as Comment).data === name\n ) as Comment | null;\n }\n\n /** 认领一个未使用的文本节点(非空文本) */\n tryClaimText(): Text | null {\n return this.findUnclaimed(\n (node) => node.nodeType === 3 && !!(node.textContent?.trim())\n ) as Text | null;\n }\n}\n\n// ====== 回调 ======\n\nexport const hydrate = (ComponentClass: typeof Store, rootEl: Element) => {\n const cursor = new TreeCursor(rootEl);\n // 首屏 render 期间(含 flushMicroEffectManual 中的 for/if effect 首次执行)为 true\n // 后续响应式更新为 false,createNode/createAnchor 直接创建新节点\n let isFirstRender = true;\n\n // 首屏时 text/html 的 DOM 内容已由 SSR 生成,跳过 innerHTML/textContent 赋值避免重绘\n // 但仍需设 CONTENT_FLAG 保证 beforeIndent 冲突检测正常\n const hydrateSetProp = (node: Node, key: string, value: any) => {\n if (isFirstRender && (key === 'text' || key === 'html')) {\n (node as any)[CONTENT_FLAG] = value != null;\n return;\n }\n return setProp(node, key, value);\n };\n\n const createNode = (name: string): Node => {\n if (isFirstRender) {\n const claimed = name === 'text'\n ? cursor.tryClaimText()\n : cursor.tryClaimElement(name);\n if (claimed) return claimed;\n }\n return name === 'text'\n ? document.createTextNode('')\n : browserCreateNode(name);\n };\n\n const createAnchor = (name: string): Comment => {\n if (isFirstRender) {\n const claimed = cursor.tryClaimComment(name);\n if (claimed) return claimed;\n }\n return document.createComment(name);\n };\n\n const insertAfter = (parent: Node, node: Node, prev: Node | null) => {\n if (node === parent) return;\n const expectedNext = prev ? prev.nextSibling : parent.firstChild;\n if (node === expectedNext) return;\n parent.insertBefore(node, expectedNext);\n };\n\n const beforeIndent = (node: Node): boolean | void => {\n if ((node as any)[CONTENT_FLAG]) {\n const tag = (node as Element).tagName?.toLowerCase();\n const hasText = (node as HTMLElement).textContent != null;\n console.warn(\n `<${tag}> has ${hasText ? 'text' : 'html'} content and child elements — children ignored`\n );\n return false;\n }\n if (isFirstRender) cursor.enterChildren(node);\n };\n\n const leaveNode = (node: Node) => {\n if (isFirstRender) cursor.leaveToParent(node);\n };\n\n const leaveLogicNode = (node: Node) => {\n if (isFirstRender) cursor.leaveToParent(node);\n };\n\n const render = customRender({\n createNode,\n setProp: hydrateSetProp,\n insertAfter,\n createAnchor,\n remove,\n firstChild,\n nextSib,\n beforeIndent,\n leaveNode,\n leaveLogicNode,\n // program() 遍历完模板后、flushMicroEffectManual 首次执行 effect 前切回首屏标志\n // 后续 for/if effect 中的 createNode 走浏览器新建路径,不再尝试从 SSR DOM 认领\n onBeforeFlush: () => {\n isFirstRender = false;\n }\n });\n\n return render(ComponentClass, rootEl);\n};\n"],"names":["BOOLEAN_ATTRS","Set","VALUE_PROP_TAGS","SVG_NS","MATH_NS","SVG_TAGS","MATH_TAGS","isNS","el","namespaceURI","createNode","name","document","createTextNode","has","createElementNS","createElement","CONTENT_FLAG","Symbol","setProp","node","key","value","textContent","startsWith","evtName","slice","addEventListener","removeEventListener","className","Array","isArray","names","Object","entries","filter","v","map","k","join","setAttribute","classList","toggle","str","String","style","cssText","innerHTML","undefined","removeAttribute","tagName","insertAfter","parent","prev","insertBefore","firstChild","nextSibling","createAnchor","createComment","remove","nextSib","beforeIndent","tag","toLowerCase","hasText","console","warn","leaveNode","leaveLogicNode","render","customRender","ctx","root","current","cleanCtx","keys","forEach","SSRNode","lastChild","prevSibling","closed","startClosed","_innerHtml","SSRNodeType","Element","type","attrs","constructor","Text","Anchor","Root","VOID_TAGS","ATTR_RE","TEXT_RE","ATTR_MAP","TEXT_MAP","escapeAttr","s","test","replace","m","escapeText","classStr","appendInnerContent","hasHtml","realAfter","isDedent","next","isBefore","renderHtmlStr","ComponentClass","noopEffect","html","TreeCursor","claimed","WeakSet","container","enterChildren","leaveToParent","parentNode","findUnclaimed","predicate","add","tryClaimElement","nodeType","tryClaimComment","data","tryClaimText","trim","hydrate","rootEl","cursor","isFirstRender","hydrateSetProp","browserCreateNode","expectedNext","onBeforeFlush"],"mappings":";;;;;;AAEO,QAAMA,eAAa,GAAG,IAAIC,GAAG,CAAC,CACnC,UAAU,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,EACvD,UAAU,EAAE,UAAU,EAAE,WAAW,EAAE,UAAU,EAAE,UAAU,EAC3D,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,EACrD,WAAW,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,CAC1E;EAED,MAAMC,eAAe,GAAG,IAAID,GAAG,CAAC,CAAC,OAAO,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC;EAEhE,MAAME,MAAM,GAAG,4BAA4B;EAC3C,MAAMC,OAAO,GAAG,oCAAoC;EAEpD,MAAMC,QAAQ,GAAG,IAAIJ,GAAG,CAAC,CACvB,KAAK,EAAE,SAAS,EAAE,eAAe,EAAE,kBAAkB,EAAE,QAAQ,EAAE,UAAU,EAC3E,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,eAAe,EAAE,qBAAqB,EAC5E,aAAa,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,mBAAmB,EAC3E,gBAAgB,EAAE,cAAc,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAC5E,SAAS,EAAE,gBAAgB,EAAE,SAAS,EAAE,SAAS,EAAE,aAAa,EAAE,cAAc,EAChF,UAAU,EAAE,cAAc,EAAE,oBAAoB,EAAE,aAAa,EAAE,QAAQ,EACzE,cAAc,EAAE,QAAQ,EAAE,eAAe,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,gBAAgB,EACjF,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,UAAU,EAC/E,gBAAgB,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,EACvE,OAAO,EAAE,KAAK,EAAE,MAAM,CACvB,CAAC;EAEF,MAAMK,SAAS,GAAG,IAAIL,GAAG,CAAC,CACxB,MAAM,EAAE,SAAS,EAAE,aAAa,EAAE,YAAY,EAAE,UAAU,EAAE,QAAQ,EACpE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAY,EAAE,UAAU,EAAE,eAAe,EAC7E,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,EAC9E,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAC5E,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,YAAY,EAC1E,WAAW,EAAE,YAAY,EAAE,gBAAgB,CAC5C,CAAC;EAEF,MAAMM,IAAI,GAAIC,EAAW,IAAKA,EAAE,CAACC,YAAY,KAAKN,MAAM,IAAIK,EAAE,CAACC,YAAY,KAAKL,OAAO;AAIhF,QAAMM,YAAU,GAAIC,IAAY,IAAW;IAChD,IAAIA,IAAI,KAAK,MAAM,EAAE,OAAOC,QAAQ,CAACC,cAAc,CAAC,EAAE,CAAC;EACvD,EAAA,IAAIP,SAAS,CAACQ,GAAG,CAACH,IAAI,CAAC,EAAE,OAAOC,QAAQ,CAACG,eAAe,CAACX,OAAO,EAAEO,IAAI,CAAC;EACvE,EAAA,IAAIN,QAAQ,CAACS,GAAG,CAACH,IAAI,CAAC,EAAE,OAAOC,QAAQ,CAACG,eAAe,CAACZ,MAAM,EAAEQ,IAAI,CAAC;EACrE,EAAA,OAAOC,QAAQ,CAACI,aAAa,CAACL,IAAI,CAAC;EACrC;QAEaM,YAAY,GAAGC,MAAM,CAAC,YAAY;AAExC,QAAMC,SAAO,GAAGA,CAACC,IAAU,EAAEC,GAAW,EAAEC,KAAU,KAA+B;IACxF,MAAMd,EAAE,GAAGY,IAAmB;IAG9B,IAAIC,GAAG,KAAK,MAAM,EAAE;EACjBD,IAAAA,IAAI,CAASH,YAAY,CAAC,GAAGK,KAAK,IAAI,IAAI;MAC3C,IAAIA,KAAK,IAAI,IAAI,EAAE;MACnBF,IAAI,CAACG,WAAW,GAAGD,KAAK;EACxB,IAAA;EACF,EAAA;EAGA,EAAA,IAAID,GAAG,CAACG,UAAU,CAAC,IAAI,CAAC,EAAE;EACxB,IAAA,MAAMC,OAAO,GAAGJ,GAAG,CAACK,KAAK,CAAC,CAAC,CAAC;EAC5BN,IAAAA,IAAI,CAACO,gBAAgB,CAACF,OAAO,EAAEH,KAAK,CAAC;MACrC,OAAO,MAAMF,IAAI,CAACQ,mBAAmB,CAACH,OAAO,EAAEH,KAAK,CAAC;EACvD,EAAA;IAGA,IAAID,GAAG,KAAK,OAAO,EAAE;MACnB,IAAIC,KAAK,IAAI,IAAI,EAAE;QACjBd,EAAE,CAACqB,SAAS,GAAG,EAAE;EACnB,IAAA,CAAC,MAAM,IAAI,OAAOP,KAAK,KAAK,QAAQ,IAAI,CAACQ,KAAK,CAACC,OAAO,CAACT,KAAK,CAAC,EAAE;EAC7D,MAAA,IAAIf,IAAI,CAACC,EAAE,CAAC,EAAE;EACZ,QAAA,MAAMwB,KAAK,GAAGC,MAAM,CAACC,OAAO,CAACZ,KAA4B,CAAC,CACvDa,MAAM,CAAC,CAAC,GAAGC,CAAC,CAAC,KAAK,CAAC,CAACA,CAAC,CAAC,CACtBC,GAAG,CAAC,CAAC,CAACC,CAAC,CAAC,KAAKA,CAAC,CAAC,CACfC,IAAI,CAAC,GAAG,CAAC;EACZ/B,QAAAA,EAAE,CAACgC,YAAY,CAAC,OAAO,EAAER,KAAK,CAAC;EACjC,MAAA,CAAC,MAAM;EACL,QAAA,KAAK,MAAMM,CAAC,IAAIhB,KAAK,EAAE;EACrBd,UAAAA,EAAE,CAACiC,SAAS,CAACC,MAAM,CAACJ,CAAC,EAAE,CAAC,CAAEhB,KAAK,CAAyBgB,CAAC,CAAC,CAAC;EAC7D,QAAA;EACF,MAAA;EACF,IAAA,CAAC,MAAM;EACL,MAAA,MAAMK,GAAG,GAAG,OAAOrB,KAAK,KAAK,SAAS,GAAIA,KAAK,GAAG,MAAM,GAAG,EAAE,GAAIsB,MAAM,CAACtB,KAAK,CAAC;EAC9E,MAAA,IAAIf,IAAI,CAACC,EAAE,CAAC,EAAE;EACZA,QAAAA,EAAE,CAACgC,YAAY,CAAC,OAAO,EAAEG,GAAG,CAAC;EAC/B,MAAA,CAAC,MAAM;UACLnC,EAAE,CAACqB,SAAS,GAAGc,GAAG;EACpB,MAAA;EACF,IAAA;EACA,IAAA;EACF,EAAA;IAGA,IAAItB,GAAG,KAAK,OAAO,EAAE;MACnB,IAAIC,KAAK,IAAI,IAAI,EAAE;EACjBd,MAAAA,EAAE,CAACqC,KAAK,CAACC,OAAO,GAAG,EAAE;EACvB,IAAA,CAAC,MAAM;QACLtC,EAAE,CAACqC,KAAK,CAACC,OAAO,GAAGF,MAAM,CAACtB,KAAK,CAAC;EAClC,IAAA;EACA,IAAA;EACF,EAAA;IAGA,IAAID,GAAG,KAAK,MAAM,EAAE;EACjBD,IAAAA,IAAI,CAASH,YAAY,CAAC,GAAGK,KAAK,IAAI,IAAI;MAC3C,IAAIA,KAAK,IAAI,IAAI,EAAE;EAClBF,IAAAA,IAAI,CAAa2B,SAAS,GAAGH,MAAM,CAACtB,KAAK,CAAC;EAC3C,IAAA;EACF,EAAA;EAGA,EAAA,IAAItB,eAAa,CAACc,GAAG,CAACO,GAAG,CAAC,EAAE;MAC1B,IAAIC,KAAK,KAAK,KAAK,IAAIA,KAAK,KAAK,IAAI,IAAIA,KAAK,KAAK0B,SAAS,EAAE;EAC5DxC,MAAAA,EAAE,CAACyC,eAAe,CAAC5B,GAAG,CAAC;EACzB,IAAA,CAAC,MAAM;EACLb,MAAAA,EAAE,CAACgC,YAAY,CAACnB,GAAG,EAAE,EAAE,CAAC;EAC1B,IAAA;EACA,IAAA;EACF,EAAA;EAGA,EAAA,IAAI,CAACA,GAAG,KAAK,OAAO,IAAIA,GAAG,KAAK,SAAS,KAAKnB,eAAe,CAACY,GAAG,CAACN,EAAE,CAAC0C,OAAO,CAAC,EAAE;EAC5E1C,IAAAA,EAAE,CAASa,GAAG,CAAC,GAAGC,KAAK;EACxB,IAAA;EACF,EAAA;EAGA,EAAA,IAAIf,IAAI,CAACC,EAAE,CAAC,EAAE;MACZ,IAAIc,KAAK,IAAI,IAAI,EAAE;EACjBd,MAAAA,EAAE,CAACyC,eAAe,CAAC5B,GAAG,CAAC;EACzB,IAAA,CAAC,MAAM;QACLb,EAAE,CAACgC,YAAY,CAACnB,GAAG,EAAEuB,MAAM,CAACtB,KAAK,CAAC,CAAC;EACrC,IAAA;EACA,IAAA;EACF,EAAA;EAGA,EAAA,IAAID,GAAG,CAACG,UAAU,CAAC,OAAO,CAAC,IAAIH,GAAG,CAACG,UAAU,CAAC,OAAO,CAAC,EAAE;MACtD,IAAIF,KAAK,IAAI,IAAI,EAAE;EACjBd,MAAAA,EAAE,CAACyC,eAAe,CAAC5B,GAAG,CAAC;EACzB,IAAA,CAAC,MAAM;QACLb,EAAE,CAACgC,YAAY,CAACnB,GAAG,EAAEuB,MAAM,CAACtB,KAAK,CAAC,CAAC;EACrC,IAAA;EACA,IAAA;EACF,EAAA;IAGA,IAAIA,KAAK,IAAI,IAAI,EAAE;EACjBd,IAAAA,EAAE,CAACyC,eAAe,CAAC5B,GAAG,CAAC;EACzB,EAAA,CAAC,MAAM,IAAIA,GAAG,IAAIb,EAAE,EAAE;EACnBA,IAAAA,EAAE,CAASa,GAAG,CAAC,GAAGC,KAAK;EAC1B,EAAA,CAAC,MAAM;MACLd,EAAE,CAACgC,YAAY,CAACnB,GAAG,EAAEuB,MAAM,CAACtB,KAAK,CAAC,CAAC;EACrC,EAAA;EACF;AAEO,QAAM6B,aAAW,GAAGA,CAACC,MAAY,EAAEhC,IAAU,EAAEiC,IAAiB,KAAK;IAC1E,IAAI,CAACA,IAAI,EAAED,MAAM,CAACE,YAAY,CAAClC,IAAI,EAAEgC,MAAM,CAACG,UAAU,CAAC,CAAC,KACnDH,MAAM,CAACE,YAAY,CAAClC,IAAI,EAAEiC,IAAI,CAACG,WAAW,CAAC;EAClD;AAEO,QAAMC,cAAY,GAAI9C,IAAY,IAAKC,QAAQ,CAAC8C,aAAa,CAAC/C,IAAI;AAElE,QAAMgD,QAAM,GAAIvC,IAAU,IAAK;IAAGA,IAAI,CAAauC,MAAM,EAAE;EAAE;QAEvDJ,YAAU,GAAInC,IAAU,IAAKA,IAAI,CAACmC;QAElCK,SAAO,GAAIxC,IAAU,IAAKA,IAAI,CAACoC;AAErC,QAAMK,cAAY,GAAIzC,IAAU,IAAqB;EAC1D,EAAA,IAAKA,IAAI,CAASH,YAAY,CAAC,EAAE;MAC/B,MAAM6C,GAAG,GAAI1C,IAAI,CAAa8B,OAAO,EAAEa,WAAW,EAAE;EACpD,IAAA,MAAMC,OAAO,GAAI5C,IAAI,CAAiBG,WAAW,IAAI,IAAI;EACzD0C,IAAAA,OAAO,CAACC,IAAI,CAAC,CAAA,CAAA,EAAIJ,GAAG,CAAA,MAAA,EAASE,OAAO,GAAG,MAAM,GAAG,MAAM,CAAA,8CAAA,CAAgD,CAAC;EACvG,IAAA,OAAO,KAAK;EACd,EAAA;EACF;QAGaG,WAAS,GAAGA,MAAM,CAAC;QACnBC,gBAAc,GAAGA,MAAM,CAAC;AAE9B,QAAMC,MAAM,GAAGC,iBAAY,CAAC;gBACjC5D,YAAU;aACVS,SAAO;iBACPgC,aAAW;kBACXM,cAAY;YACZE,QAAM;gBACNJ,YAAU;aACVK,SAAO;kBACPC,cAAY;eACZM,WAAS;EACTC,kBAAAA;EACF,CAAC;;EClMM,IAAIG,GAAW,GAAG;EACvBC,EAAAA,IAAI,EAAE,IAAI;EACVC,EAAAA,OAAO,EAAE;EACX,CAAC;EAEM,MAAMC,QAAQ,GAAGA,MACtBzC,MAAM,CAAC0C,IAAI,CAACJ,GAAG,CAAC,CAACK,OAAO,CAACvD,GAAG,IAAI;EAC9BkD,EAAAA,GAAG,CAAClD,GAAG,CAAC,GAAG,IAAI;EACjB,CAAC,CAAC;;ECTG,MAAMwD,OAAO,CAAC;EAGnBzB,EAAAA,MAAM,GAAoB,IAAI;EAC9BG,EAAAA,UAAU,GAAmB,IAAI;EACjCuB,EAAAA,SAAS,GAAmB,IAAI;EAChCtB,EAAAA,WAAW,GAAmB,IAAI;EAClCuB,EAAAA,WAAW,GAAmB,IAAI;EAClCC,EAAAA,MAAM,GAAY,KAAK;EACvBC,EAAAA,WAAW,GAAY,KAAK;EAE5BC,EAAAA,UAAU,GAAkB,IAAI;EAClC;EAEA,IAAYC,WAAW,aAAXA,WAAW,EAAA;EAAXA,EAAAA,WAAW,CAAXA,WAAW,CAAA,SAAA,CAAA,GAAA,CAAA,CAAA,GAAA,SAAA;EAAXA,EAAAA,WAAW,CAAXA,WAAW,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,GAAA,MAAA;EAAXA,EAAAA,WAAW,CAAXA,WAAW,CAAA,QAAA,CAAA,GAAA,CAAA,CAAA,GAAA,QAAA;EAAXA,EAAAA,WAAW,CAAXA,WAAW,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,GAAA,MAAA;EAAA,EAAA,OAAXA,WAAW;EAAA,CAAA,CAAA,EAAA,CAAA;EAOhB,MAAMC,OAAO,SAASP,OAAO,CAAC;IACnCQ,IAAI,GAAGF,WAAW,CAACC,OAAO;EAC1B7D,EAAAA,WAAW,GAAkB,IAAI;IAEjC+D,KAAK,GAA2B,EAAE;EAClCC,EAAAA,WAAWA,CAEFjE,KAAa,EACb8B,MAAuB,EAC9B;EACA,IAAA,KAAK,EAAE;MAAC,IAAA,CAHD9B,KAAa,GAAbA,KAAa;MAAA,IAAA,CACb8B,MAAuB,GAAvBA,MAAuB;EAGhC,EAAA;EACF;EAEO,MAAMoC,IAAI,SAASX,OAAO,CAAC;IAChCQ,IAAI,GAAGF,WAAW,CAACK,IAAI;EACvBD,EAAAA,WAAWA,CAEFhE,WAAmB,EACnB6B,MAAuB,EAC9B;EACA,IAAA,KAAK,EAAE;MAAC,IAAA,CAHD7B,WAAmB,GAAnBA,WAAmB;MAAA,IAAA,CACnB6B,MAAuB,GAAvBA,MAAuB;EAGhC,EAAA;EACF;EAEO,MAAMqC,MAAM,SAASZ,OAAO,CAAC;IAClCQ,IAAI,GAAGF,WAAW,CAACM,MAAM;EACzBF,EAAAA,WAAWA,CAEFjE,KAAa,EACb8B,MAAuB,EAC9B;EACA,IAAA,KAAK,EAAE;MAAC,IAAA,CAHD9B,KAAa,GAAbA,KAAa;MAAA,IAAA,CACb8B,MAAuB,GAAvBA,MAAuB;EAGhC,EAAA;EACF;EACO,MAAMsC,IAAI,SAASb,OAAO,CAAC;IAChCQ,IAAI,GAAGF,WAAW,CAACO,IAAI;EACvBH,EAAAA,WAAWA,CAEFjE,KAAa,EACb8B,MAAuB,EAC9B;EACA,IAAA,KAAK,EAAE;MAAC,IAAA,CAHD9B,KAAa,GAAbA,KAAa;MAAA,IAAA,CACb8B,MAAuB,GAAvBA,MAAuB;EAGhC,EAAA;EACF;;EC7DA,MAAMuC,SAAS,GAAG,IAAI1F,GAAG,CAAC,CACxB,MAAM,EACN,MAAM,EACN,IAAI,EACJ,KAAK,EACL,OAAO,EACP,IAAI,EACJ,KAAK,EACL,OAAO,EACP,MAAM,EACN,MAAM,EACN,OAAO,EACP,QAAQ,EACR,OAAO,EACP,KAAK,CACN,CAAC;EAEF,MAAMD,aAAa,GAAG,IAAIC,GAAG,CAAC,CAC5B,UAAU,EACV,UAAU,EACV,SAAS,EACT,UAAU,EACV,QAAQ,EACR,UAAU,EACV,UAAU,EACV,WAAW,EACX,UAAU,EACV,UAAU,EACV,MAAM,EACN,OAAO,EACP,OAAO,EACP,OAAO,EACP,UAAU,EACV,MAAM,EACN,WAAW,EACX,OAAO,EACP,QAAQ,EACR,SAAS,EACT,QAAQ,EACR,SAAS,EACT,SAAS,CACV,CAAC;EAEF,MAAM2F,OAAO,GAAG,SAAS;EACzB,MAAMC,OAAO,GAAG,QAAQ;EACxB,MAAMC,QAAgC,GAAG;EACvC,EAAA,GAAG,EAAE,OAAO;EACZ,EAAA,GAAG,EAAE,QAAQ;EACb,EAAA,GAAG,EAAE,MAAM;EACX,EAAA,GAAG,EAAE;EACP,CAAC;EACD,MAAMC,QAAgC,GAAG;EACvC,EAAA,GAAG,EAAE,OAAO;EACZ,EAAA,GAAG,EAAE,MAAM;EACX,EAAA,GAAG,EAAE;EACP,CAAC;EAED,MAAMC,UAAU,GAAIrD,GAAW,IAAK;EAClC,EAAA,MAAMsD,CAAC,GAAGrD,MAAM,CAACD,GAAG,CAAC;IACrB,OAAOiD,OAAO,CAACM,IAAI,CAACD,CAAC,CAAC,GAAGA,CAAC,CAACE,OAAO,CAACP,OAAO,EAAEQ,CAAC,IAAIN,QAAQ,CAACM,CAAC,CAAC,CAAC,GAAGH,CAAC;EACnE,CAAC;EAED,MAAMI,UAAU,GAAI1D,GAAW,IAAK;EAClC,EAAA,MAAMsD,CAAC,GAAGrD,MAAM,CAACD,GAAG,CAAC;IACrB,OAAOkD,OAAO,CAACK,IAAI,CAACD,CAAC,CAAC,GAAGA,CAAC,CAACE,OAAO,CAACN,OAAO,EAAEO,CAAC,IAAIL,QAAQ,CAACK,CAAC,CAAC,CAAC,GAAGH,CAAC;EACnE,CAAC;EAED,MAAMvF,UAAU,GAAIC,IAAY,IAAK;IACnC,IAAIA,IAAI,KAAK,MAAM,EAAE;EACnB,IAAA,OAAO,IAAI6E,IAAI,CAAC,EAAE,CAAC;EACrB,EAAA;EACAjB,EAAAA,GAAG,CAACC,IAAI,CAAClD,KAAK,IAAI,CAAA,CAAA,EAAIX,IAAI,CAAA,CAAE;EAC5B,EAAA,OAAO,IAAIyE,OAAO,CAACzE,IAAI,CAAC;EAC1B,CAAC;EAED,MAAMQ,OAAO,GAAGA,CAACC,IAAoB,EAAEC,GAAW,EAAEC,KAAU,KAAK;IACjE,IAAIF,IAAI,CAAC6D,WAAW,EAAE;IACtB,IAAI5D,GAAG,CAACG,UAAU,CAAC,IAAI,CAAC,IAAIH,GAAG,KAAK,KAAK,EAAE;IAG3C,IAAIA,GAAG,KAAK,MAAM,EAAE;MAClB,IAAIC,KAAK,IAAI,IAAI,EAAE;MACnBF,IAAI,CAACG,WAAW,GAAGD,KAAK;EACxB,IAAA;EACF,EAAA;IAGA,IAAID,GAAG,KAAK,MAAM,EAAE;MAClB,IAAIC,KAAK,IAAI,IAAI,EAAE;EACnBF,IAAAA,IAAI,CAAC8D,UAAU,GAAGtC,MAAM,CAACtB,KAAK,CAAC;EAC/B,IAAA;EACF,EAAA;IAGA,IAAID,GAAG,KAAK,OAAO,EAAE;MACnB,IAAIC,KAAK,IAAI,IAAI,EAAE;EACnB,IAAA,IAAIgF,QAAgB;EACpB,IAAA,IAAI,OAAOhF,KAAK,KAAK,QAAQ,IAAI,CAACQ,KAAK,CAACC,OAAO,CAACT,KAAK,CAAC,EAAE;EACtDgF,MAAAA,QAAQ,GAAGrE,MAAM,CAACC,OAAO,CAACZ,KAA4B,CAAC,CACpDa,MAAM,CAAC,CAAC,GAAGC,CAAC,CAAC,KAAK,CAAC,CAACA,CAAC,CAAC,CACtBC,GAAG,CAAC,CAAC,CAACC,CAAC,CAAC,KAAKA,CAAC,CAAC,CACfC,IAAI,CAAC,GAAG,CAAC;EACd,IAAA,CAAC,MAAM;EACL+D,MAAAA,QAAQ,GAAG,OAAOhF,KAAK,KAAK,SAAS,GAAIA,KAAK,GAAG,MAAM,GAAG,EAAE,GAAIsB,MAAM,CAACtB,KAAK,CAAC;EAC/E,IAAA;EACA,IAAA,IAAIgF,QAAQ,EAAE/B,GAAG,CAACC,IAAI,CAAClD,KAAK,IAAI,CAAA,QAAA,EAAW0E,UAAU,CAACM,QAAQ,CAAC,CAAA,CAAA,CAAG;EAClE,IAAA;EACF,EAAA;IAGA,IAAIjF,GAAG,KAAK,OAAO,EAAE;MACnB,IAAIC,KAAK,IAAI,IAAI,EAAE;EACnBiD,IAAAA,GAAG,CAACC,IAAI,CAAClD,KAAK,IAAI,CAAA,QAAA,EAAW0E,UAAU,CAACpD,MAAM,CAACtB,KAAK,CAAC,CAAC,CAAA,CAAA,CAAG;EACzD,IAAA;EACF,EAAA;EAGA,EAAA,IAAItB,aAAa,CAACc,GAAG,CAACO,GAAG,CAAC,EAAE;MAC1B,IAAIC,KAAK,KAAK,KAAK,IAAIA,KAAK,KAAK,IAAI,IAAIA,KAAK,KAAK0B,SAAS,EAAE;EAC5DuB,MAAAA,GAAG,CAACC,IAAI,CAAClD,KAAK,IAAI,CAAA,CAAA,EAAID,GAAG,CAAA,CAAE;EAC7B,IAAA;EACA,IAAA;EACF,EAAA;EAGA,EAAA,IAAIA,GAAG,CAACG,UAAU,CAAC,OAAO,CAAC,IAAIH,GAAG,CAACG,UAAU,CAAC,OAAO,CAAC,EAAE;MACtD,IAAIF,KAAK,IAAI,IAAI,EAAE;EACnBiD,IAAAA,GAAG,CAACC,IAAI,CAAClD,KAAK,IAAI,CAAA,CAAA,EAAID,GAAG,CAAA,EAAA,EAAK2E,UAAU,CAAC1E,KAAK,CAAC,CAAA,CAAA,CAAG;EAClD,IAAA;EACF,EAAA;IAGA,IAAIA,KAAK,IAAI,IAAI,EAAE;EACnBiD,EAAAA,GAAG,CAACC,IAAI,CAAClD,KAAK,IAAI,CAAA,CAAA,EAAID,GAAG,CAAA,EAAA,EAAK2E,UAAU,CAAC1E,KAAK,CAAC,CAAA,CAAA,CAAG;EACpD,CAAC;EAED,MAAMiF,kBAAkB,GAAInF,IAAa,IAAK;EAC5C,EAAA,IAAIA,IAAI,CAAC8D,UAAU,IAAI,IAAI,EAAE;EAC3BX,IAAAA,GAAG,CAACC,IAAI,CAAClD,KAAK,IAAIF,IAAI,CAAC8D,UAAU;EACjC,IAAA,OAAO,IAAI;EACb,EAAA;EACA,EAAA,IAAI9D,IAAI,CAACG,WAAW,IAAI,IAAI,EAAE;MAC5BgD,GAAG,CAACC,IAAI,CAAClD,KAAK,IAAI+E,UAAU,CAACjF,IAAI,CAACG,WAAW,CAAC;EAC9C,IAAA,OAAO,IAAI;EACb,EAAA;EACA,EAAA,OAAO,KAAK;EACd,CAAC;EAED,MAAMsC,YAAY,GAAIzC,IAAoB,IAAc;EACtD,EAAA,IAAIA,IAAI,YAAYoE,IAAI,EAAE,OAAO,IAAI;EAErC,EAAA,MAAMxB,OAAO,GAAG5C,IAAI,CAACG,WAAW,IAAI,IAAI;EACxC,EAAA,MAAMiF,OAAO,GAAGpF,IAAI,CAAC8D,UAAU,IAAI,IAAI;IAGvC,IAAIS,SAAS,CAAC7E,GAAG,CAACM,IAAI,CAACE,KAAK,CAAC,EAAE;EAC7BiD,IAAAA,GAAG,CAACC,IAAI,CAAClD,KAAK,IAAI,CAAA,EAAA,CAAI;MACtB2C,OAAO,CAACC,IAAI,CAAC,CAAA,CAAA,EAAI9C,IAAI,CAACE,KAAK,uBAAuB,CAAC;MACnDF,IAAI,CAAC6D,WAAW,GAAG,IAAI;MACvB7D,IAAI,CAAC4D,MAAM,GAAG,IAAI;EAClB,IAAA,OAAO,KAAK;EACd,EAAA;IAEA,IAAIhB,OAAO,IAAIwC,OAAO,EAAE;EACtBvC,IAAAA,OAAO,CAACC,IAAI,CAAC,CAAA,CAAA,EAAI9C,IAAI,CAACE,KAAK,CAAA,MAAA,EAASkF,OAAO,GAAG,MAAM,GAAG,MAAM,gDAAgD,CAAC;EAC9GjC,IAAAA,GAAG,CAACC,IAAI,CAAClD,KAAK,IAAI,CAAA,CAAA,CAAG;MAErBiF,kBAAkB,CAACnF,IAAI,CAAC;MACxBmD,GAAG,CAACC,IAAI,CAAClD,KAAK,IAAI,CAAA,EAAA,EAAKF,IAAI,CAACE,KAAK,CAAA,CAAA,CAAG;MACpCF,IAAI,CAAC6D,WAAW,GAAG,IAAI;MACvB7D,IAAI,CAAC4D,MAAM,GAAG,IAAI;EAClB,IAAA,OAAO,KAAK;EACd,EAAA;EAEAT,EAAAA,GAAG,CAACC,IAAI,CAAClD,KAAK,IAAI,CAAA,CAAA,CAAG;IACrBF,IAAI,CAAC6D,WAAW,GAAG,IAAI;EACvB,EAAA,OAAO,IAAI;EACb,CAAC;EAED,MAAMb,cAAc,GAAIhD,IAAe,IAAK;EAC1C,EAAA,MAAMqF,SAAS,GAAGrF,IAAI,CAACqF,SAAmB;IAC1ClC,GAAG,CAACC,IAAI,CAAClD,KAAK,IAAI,CAAA,IAAA,EAAOmF,SAAS,CAACnF,KAAK,CAAA,GAAA,CAAK;EAC/C,CAAC;EACD,MAAM6C,SAAS,GAAGA,CAAC/C,IAAoB,EAAEsF,QAAiB,KAAK;IAM7D,IAAItF,IAAI,CAAC4D,MAAM,EAAE;IACjB,IAAI5D,IAAI,YAAYoE,IAAI,EAAE;MACxBjB,GAAG,CAACC,IAAI,CAAClD,KAAK,IAAI+E,UAAU,CAACjF,IAAI,CAACG,WAAW,CAAC;EAChD,EAAA,CAAC,MAAM;MAEL,IAAIH,IAAI,CAAC6D,WAAW,EAAE;QAEpB,IAAIU,SAAS,CAAC7E,GAAG,CAACM,IAAI,CAACE,KAAK,CAAC,EAAE,CAC9B,MAAM;UACLiD,GAAG,CAACC,IAAI,CAAClD,KAAK,IAAI,CAAA,EAAA,EAAKF,IAAI,CAACE,KAAK,CAAA,CAAA,CAAG;EACtC,MAAA;EACF,IAAA,CAAC,MAEI;QAEH,IAAIqE,SAAS,CAAC7E,GAAG,CAACM,IAAI,CAACE,KAAK,CAAC,EAAE;EAC7BiD,QAAAA,GAAG,CAACC,IAAI,CAAClD,KAAK,IAAI,CAAA,GAAA,CAAK;EACzB,MAAA,CAAC,MAEI;EACHiD,QAAAA,GAAG,CAACC,IAAI,CAAClD,KAAK,IAAI,CAAA,CAAA,CAAG;UAErBiF,kBAAkB,CAACnF,IAAI,CAAC;UACxBmD,GAAG,CAACC,IAAI,CAAClD,KAAK,IAAI,CAAA,EAAA,EAAKF,IAAI,CAACE,KAAK,CAAA,CAAA,CAAG;EACtC,MAAA;EACF,IAAA;EACF,EAAA;EACF,CAAC;EAED,MAAM6B,WAAW,GAAGA,CAACC,MAAe,EAAEhC,IAAa,EAAEiC,IAAoB,KAAK;IAC5E,MAAMsD,IAAI,GAAGtD,IAAI,GAAGA,IAAI,CAACG,WAAW,GAAGJ,MAAM,CAACG,UAAU;IACxDnC,IAAI,CAACoC,WAAW,GAAGmD,IAAI;IACvBvF,IAAI,CAAC2D,WAAW,GAAG1B,IAAI;EAEvB,EAAA,IAAIA,IAAI,EAAE;MACRA,IAAI,CAACG,WAAW,GAAGpC,IAAI;EACzB,EAAA,CAAC,MAAM;MACLgC,MAAM,CAACG,UAAU,GAAGnC,IAAI;EAC1B,EAAA;EACA,EAAA,IAAIuF,IAAI,EAAE;MACRA,IAAI,CAAC5B,WAAW,GAAG3D,IAAI;EACzB,EAAA,CAAC,MAAM;MACLgC,MAAM,CAAC0B,SAAS,GAAG1D,IAAI;EACzB,EAAA;IACAA,IAAI,CAACgC,MAAM,GAAGA,MAAM;EACtB,CAAC;EAED,MAAMK,YAAY,GAAGA,CAAC9C,IAAY,EAAEiG,QAAkB,KAAK;EACzD,EAAA,IAAIA,QAAQ,EAAE;EACZrC,IAAAA,GAAG,CAACC,IAAI,CAAClD,KAAK,IAAI,CAAA,IAAA,EAAOX,IAAI,CAAA,GAAA,CAAK;EACpC,EAAA;EACA,EAAA,OAAO,IAAI8E,MAAM,CAAC9E,IAAI,CAAC;EACzB,CAAC;EAED,MAAMgD,MAAM,GAAIvC,IAAa,IAAK;EAChC,EAAA,MAAQgC,MAAM,GAA+BhC,IAAI,CAAzCgC,MAAM;MAAE2B,WAAW,GAAkB3D,IAAI,CAAjC2D,WAAW;MAAEvB,WAAW,GAAKpC,IAAI,CAApBoC,WAAW;EACxC,EAAA,IAAIuB,WAAW,EAAE;MACfA,WAAW,CAACvB,WAAW,GAAGA,WAAW;EACvC,EAAA;EACA,EAAA,IAAIA,WAAW,EAAE;MACfA,WAAW,CAACuB,WAAW,GAAGA,WAAW;EACvC,EAAA;EACA,EAAA,IAAI3B,MAAM,EAAE;EACV,IAAA,IAAIA,MAAM,CAACG,UAAU,KAAKnC,IAAI,EAAE;QAC9BgC,MAAM,CAACG,UAAU,GAAGC,WAAW;EACjC,IAAA;EACA,IAAA,IAAIJ,MAAM,CAAC0B,SAAS,KAAK1D,IAAI,EAAE;QAC7BgC,MAAM,CAAC0B,SAAS,GAAGC,WAAW;EAChC,IAAA;EACF,EAAA;EACF,CAAC;EAED,MAAMxB,UAAU,GAAInC,IAAa,IAAKA,IAAI,CAACmC,UAAU;EAErD,MAAMK,OAAO,GAAIxC,IAAa,IAAKA,IAAI,CAACoC,WAAW;AAE5C,QAAMqD,aAAa,GAAIC,cAA4B,IAAK;EAC7DpC,EAAAA,QAAQ,EAAE;EACV,EAAA,MAAMF,IAAI,GAAG,IAAIkB,IAAI,CAAC,EAAE,CAAC;EACzBnB,EAAAA,GAAG,CAACC,IAAI,GAAGD,GAAG,CAACE,OAAO,GAAGD,IAAI;IAC7B,MAAMH,MAAM,GAAGC,iBAAY,CAAC;MAC1B5D,UAAU;MACVS,OAAO;MACPgC,WAAW;MACXM,YAAY;MACZE,MAAM;MACNJ,UAAU;MACVK,OAAO;MACPC,YAAY;MACZM,SAAS;MACTC,cAAc;EACd2C,IAAAA,UAAU,EAAE;EACd,GAAC,CAAC;EACF1C,EAAAA,MAAM,CAACyC,cAAc,EAAEtC,IAAI,CAAC;IAC5B,OAAO;EACLwC,IAAAA,IAAI,EAAEzC,GAAG,CAACC,IAAI,CAAClD;KAChB;EACH;;ECjQA,MAAM2F,UAAU,CAAC;EAIPC,EAAAA,OAAO,GAAG,IAAIC,OAAO,EAAQ;IAErC5B,WAAWA,CAAC6B,SAAe,EAAE;MAC3B,IAAI,CAAChE,MAAM,GAAGgE,SAAS;EACzB,EAAA;IAGAC,aAAaA,CAACjG,IAAU,EAAE;MACxB,IAAI,CAACgC,MAAM,GAAGhC,IAAI;EACpB,EAAA;IAGAkG,aAAaA,CAAClG,IAAU,EAAE;MACxB,IAAIA,IAAI,KAAK,IAAI,CAACgC,MAAM,IAAI,IAAI,CAACA,MAAM,CAACmE,UAAU,EAAE;EAClD,MAAA,IAAI,CAACnE,MAAM,GAAG,IAAI,CAACA,MAAM,CAACmE,UAAU;EACtC,IAAA;EACF,EAAA;IAGQC,aAAaA,CAACC,SAAkC,EAAe;EACrE,IAAA,IAAIrG,IAAI,GAAG,IAAI,CAACgC,MAAM,CAACG,UAAU;EACjC,IAAA,OAAOnC,IAAI,EAAE;EACX,MAAA,IAAI,CAAC,IAAI,CAAC8F,OAAO,CAACpG,GAAG,CAACM,IAAI,CAAC,IAAIqG,SAAS,CAACrG,IAAI,CAAC,EAAE;EAC9C,QAAA,IAAI,CAAC8F,OAAO,CAACQ,GAAG,CAACtG,IAAI,CAAC;EACtB,QAAA,OAAOA,IAAI;EACb,MAAA;QACAA,IAAI,GAAGA,IAAI,CAACoC,WAAW;EACzB,IAAA;EACA,IAAA,OAAO,IAAI;EACb,EAAA;IAGAmE,eAAeA,CAACzE,OAAe,EAAkB;MAC/C,OAAO,IAAI,CAACsE,aAAa,CACtBpG,IAAI,IAAKA,IAAI,CAACwG,QAAQ,KAAK,CAAC,IAAKxG,IAAI,CAAa8B,OAAO,CAACa,WAAW,EAAE,KAAKb,OAC/E,CAAC;EACH,EAAA;IAGA2E,eAAeA,CAAClH,IAAY,EAAkB;EAC5C,IAAA,OAAO,IAAI,CAAC6G,aAAa,CACtBpG,IAAI,IAAKA,IAAI,CAACwG,QAAQ,KAAK,CAAC,IAAKxG,IAAI,CAAa0G,IAAI,KAAKnH,IAC9D,CAAC;EACH,EAAA;EAGAoH,EAAAA,YAAYA,GAAgB;MAC1B,OAAO,IAAI,CAACP,aAAa,CACtBpG,IAAI,IAAKA,IAAI,CAACwG,QAAQ,KAAK,CAAC,IAAI,CAAC,CAAExG,IAAI,CAACG,WAAW,EAAEyG,IAAI,EAC5D,CAAC;EACH,EAAA;EACF;QAIaC,OAAO,GAAGA,CAACnB,cAA4B,EAAEoB,MAAe,KAAK;EACxE,EAAA,MAAMC,MAAM,GAAG,IAAIlB,UAAU,CAACiB,MAAM,CAAC;IAGrC,IAAIE,aAAa,GAAG,IAAI;IAIxB,MAAMC,cAAc,GAAGA,CAACjH,IAAU,EAAEC,GAAW,EAAEC,KAAU,KAAK;MAC9D,IAAI8G,aAAa,KAAK/G,GAAG,KAAK,MAAM,IAAIA,GAAG,KAAK,MAAM,CAAC,EAAE;EACtDD,MAAAA,IAAI,CAASH,YAAY,CAAC,GAAGK,KAAK,IAAI,IAAI;EAC3C,MAAA;EACF,IAAA;EACA,IAAA,OAAOH,SAAO,CAACC,IAAI,EAAEC,GAAG,EAAEC,KAAK,CAAC;IAClC,CAAC;IAED,MAAMZ,UAAU,GAAIC,IAAY,IAAW;EACzC,IAAA,IAAIyH,aAAa,EAAE;EACjB,MAAA,MAAMlB,OAAO,GAAGvG,IAAI,KAAK,MAAM,GAC3BwH,MAAM,CAACJ,YAAY,EAAE,GACrBI,MAAM,CAACR,eAAe,CAAChH,IAAI,CAAC;QAChC,IAAIuG,OAAO,EAAE,OAAOA,OAAO;EAC7B,IAAA;EACA,IAAA,OAAOvG,IAAI,KAAK,MAAM,GAClBC,QAAQ,CAACC,cAAc,CAAC,EAAE,CAAC,GAC3ByH,YAAiB,CAAC3H,IAAI,CAAC;IAC7B,CAAC;IAED,MAAM8C,YAAY,GAAI9C,IAAY,IAAc;EAC9C,IAAA,IAAIyH,aAAa,EAAE;EACjB,MAAA,MAAMlB,OAAO,GAAGiB,MAAM,CAACN,eAAe,CAAClH,IAAI,CAAC;QAC5C,IAAIuG,OAAO,EAAE,OAAOA,OAAO;EAC7B,IAAA;EACA,IAAA,OAAOtG,QAAQ,CAAC8C,aAAa,CAAC/C,IAAI,CAAC;IACrC,CAAC;IAED,MAAMwC,WAAW,GAAGA,CAACC,MAAY,EAAEhC,IAAU,EAAEiC,IAAiB,KAAK;MACnE,IAAIjC,IAAI,KAAKgC,MAAM,EAAE;MACrB,MAAMmF,YAAY,GAAGlF,IAAI,GAAGA,IAAI,CAACG,WAAW,GAAGJ,MAAM,CAACG,UAAU;MAChE,IAAInC,IAAI,KAAKmH,YAAY,EAAE;EAC3BnF,IAAAA,MAAM,CAACE,YAAY,CAAClC,IAAI,EAAEmH,YAAY,CAAC;IACzC,CAAC;IAED,MAAM1E,YAAY,GAAIzC,IAAU,IAAqB;EACnD,IAAA,IAAKA,IAAI,CAASH,YAAY,CAAC,EAAE;QAC/B,MAAM6C,GAAG,GAAI1C,IAAI,CAAa8B,OAAO,EAAEa,WAAW,EAAE;EACpD,MAAA,MAAMC,OAAO,GAAI5C,IAAI,CAAiBG,WAAW,IAAI,IAAI;EACzD0C,MAAAA,OAAO,CAACC,IAAI,CACV,CAAA,CAAA,EAAIJ,GAAG,CAAA,MAAA,EAASE,OAAO,GAAG,MAAM,GAAG,MAAM,CAAA,8CAAA,CAC3C,CAAC;EACD,MAAA,OAAO,KAAK;EACd,IAAA;EACA,IAAA,IAAIoE,aAAa,EAAED,MAAM,CAACd,aAAa,CAACjG,IAAI,CAAC;IAC/C,CAAC;IAED,MAAM+C,SAAS,GAAI/C,IAAU,IAAK;EAChC,IAAA,IAAIgH,aAAa,EAAED,MAAM,CAACb,aAAa,CAAClG,IAAI,CAAC;IAC/C,CAAC;IAED,MAAMgD,cAAc,GAAIhD,IAAU,IAAK;EACrC,IAAA,IAAIgH,aAAa,EAAED,MAAM,CAACb,aAAa,CAAClG,IAAI,CAAC;IAC/C,CAAC;IAED,MAAMiD,MAAM,GAAGC,iBAAY,CAAC;MAC1B5D,UAAU;EACVS,IAAAA,OAAO,EAAEkH,cAAc;MACvBlF,WAAW;MACXM,YAAY;cACZE,QAAM;kBACNJ,YAAU;eACVK,SAAO;MACPC,YAAY;MACZM,SAAS;MACTC,cAAc;MAGdoE,aAAa,EAAEA,MAAM;EACnBJ,MAAAA,aAAa,GAAG,KAAK;EACvB,IAAA;EACF,GAAC,CAAC;EAEF,EAAA,OAAO/D,MAAM,CAACyC,cAAc,EAAEoB,MAAM,CAAC;EACvC;;;;;;;;;;;;;;;;;;;;;;"}