juxscript 1.1.393 → 1.1.395
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/bin/cli.js +9 -9
- package/dist/components/barChart.d.ts +103 -0
- package/dist/components/barChart.d.ts.map +1 -0
- package/dist/components/barChart.js +520 -0
- package/dist/components/barChart.js.map +1 -0
- package/dist/components/c.d.ts.map +1 -1
- package/dist/components/c.js +16 -12
- package/dist/components/c.js.map +1 -1
- package/dist/components/g.d.ts +21 -0
- package/dist/components/g.d.ts.map +1 -0
- package/dist/components/g.js +52 -0
- package/dist/components/g.js.map +1 -0
- package/dist/components/gateway.d.ts +97 -0
- package/dist/components/gateway.d.ts.map +1 -0
- package/dist/components/gateway.js +188 -0
- package/dist/components/gateway.js.map +1 -0
- package/dist/components/lineChart.d.ts +87 -0
- package/dist/components/lineChart.d.ts.map +1 -0
- package/dist/components/lineChart.js +330 -0
- package/dist/components/lineChart.js.map +1 -0
- package/dist/components/pieChart.d.ts +86 -0
- package/dist/components/pieChart.d.ts.map +1 -0
- package/dist/components/pieChart.js +300 -0
- package/dist/components/pieChart.js.map +1 -0
- package/dist/index.d.ts +15 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +16 -1
- package/dist/index.js.map +1 -1
- package/dist/primitives/button.d.ts +53 -0
- package/dist/primitives/button.d.ts.map +1 -0
- package/dist/primitives/button.js +170 -0
- package/dist/primitives/button.js.map +1 -0
- package/dist/primitives/c.d.ts +53 -0
- package/dist/primitives/c.d.ts.map +1 -0
- package/dist/primitives/c.js +127 -0
- package/dist/primitives/c.js.map +1 -0
- package/dist/primitives/checkbox.d.ts +92 -0
- package/dist/primitives/checkbox.d.ts.map +1 -0
- package/dist/primitives/checkbox.js +217 -0
- package/dist/primitives/checkbox.js.map +1 -0
- package/dist/primitives/data.d.ts +58 -0
- package/dist/primitives/data.d.ts.map +1 -0
- package/dist/primitives/data.js +131 -0
- package/dist/primitives/data.js.map +1 -0
- package/dist/primitives/grid.d.ts +58 -0
- package/dist/primitives/grid.d.ts.map +1 -0
- package/dist/primitives/grid.js +128 -0
- package/dist/primitives/grid.js.map +1 -0
- package/dist/primitives/include.d.ts +86 -0
- package/dist/primitives/include.d.ts.map +1 -0
- package/dist/primitives/include.js +239 -0
- package/dist/primitives/include.js.map +1 -0
- package/dist/primitives/indexDb.d.ts +80 -0
- package/dist/primitives/indexDb.d.ts.map +1 -0
- package/dist/primitives/indexDb.js +253 -0
- package/dist/primitives/indexDb.js.map +1 -0
- package/dist/primitives/input.d.ts +88 -0
- package/dist/primitives/input.d.ts.map +1 -0
- package/dist/primitives/input.js +216 -0
- package/dist/primitives/input.js.map +1 -0
- package/dist/primitives/link.d.ts +51 -0
- package/dist/primitives/link.d.ts.map +1 -0
- package/dist/primitives/link.js +178 -0
- package/dist/primitives/link.js.map +1 -0
- package/dist/primitives/list.d.ts +66 -0
- package/dist/primitives/list.d.ts.map +1 -0
- package/dist/primitives/list.js +233 -0
- package/dist/primitives/list.js.map +1 -0
- package/dist/primitives/nav.d.ts +64 -0
- package/dist/primitives/nav.d.ts.map +1 -0
- package/dist/primitives/nav.js +236 -0
- package/dist/primitives/nav.js.map +1 -0
- package/dist/primitives/radio.d.ts +58 -0
- package/dist/primitives/radio.d.ts.map +1 -0
- package/dist/primitives/radio.js +135 -0
- package/dist/primitives/radio.js.map +1 -0
- package/dist/primitives/routes.d.ts +15 -0
- package/dist/primitives/routes.d.ts.map +1 -0
- package/dist/primitives/routes.js +34 -0
- package/dist/primitives/routes.js.map +1 -0
- package/dist/primitives/select.d.ts +67 -0
- package/dist/primitives/select.d.ts.map +1 -0
- package/dist/primitives/select.js +160 -0
- package/dist/primitives/select.js.map +1 -0
- package/dist/primitives/style.d.ts +27 -0
- package/dist/primitives/style.d.ts.map +1 -0
- package/dist/primitives/style.js +53 -0
- package/dist/primitives/style.js.map +1 -0
- package/dist/primitives/table.d.ts +83 -0
- package/dist/primitives/table.d.ts.map +1 -0
- package/dist/primitives/table.js +264 -0
- package/dist/primitives/table.js.map +1 -0
- package/dist/primitives/tabs.d.ts +75 -0
- package/dist/primitives/tabs.d.ts.map +1 -0
- package/dist/primitives/tabs.js +263 -0
- package/dist/primitives/tabs.js.map +1 -0
- package/dist/primitives/tag.d.ts +92 -0
- package/dist/primitives/tag.d.ts.map +1 -0
- package/dist/primitives/tag.js +151 -0
- package/dist/primitives/tag.js.map +1 -0
- package/dist/services/db.d.ts +44 -0
- package/dist/services/db.d.ts.map +1 -0
- package/dist/services/db.js +59 -0
- package/dist/services/db.js.map +1 -0
- package/dist/services/email.d.ts +50 -0
- package/dist/services/email.d.ts.map +1 -0
- package/dist/services/email.js +60 -0
- package/dist/services/email.js.map +1 -0
- package/dist/services/s3.d.ts +61 -0
- package/dist/services/s3.d.ts.map +1 -0
- package/dist/services/s3.js +79 -0
- package/dist/services/s3.js.map +1 -0
- package/juxconfig.example.js +7 -0
- package/machinery/build3.js +2 -1
- package/machinery/compiler4.js +2 -0
- package/machinery/serve.js +6 -26
- package/machinery/validate-jux.js +4 -0
- package/package.json +2 -2
- /package/{presets → components}/calendar/calendar-usage.jux +0 -0
- /package/{presets → components}/calendar/calendar.jux +0 -0
- /package/{presets → components}/sidebar/index.jux +0 -0
- /package/{presets → components}/sidebar/usage.jux +0 -0
|
@@ -0,0 +1,263 @@
|
|
|
1
|
+
import generateId from '../utils/idgen.js';
|
|
2
|
+
import { pageState } from '../state/pageState.js';
|
|
3
|
+
class Tabs {
|
|
4
|
+
constructor(id, options = {}) {
|
|
5
|
+
this._items = [];
|
|
6
|
+
this._value = null;
|
|
7
|
+
this._onChange = null;
|
|
8
|
+
this.id = id || generateId();
|
|
9
|
+
this.opts = {
|
|
10
|
+
tabListClass: 'jux-tabs-list',
|
|
11
|
+
tabClass: 'jux-tab',
|
|
12
|
+
tabActiveClass: 'jux-tab--active',
|
|
13
|
+
panelClass: 'jux-tab-panel',
|
|
14
|
+
...options
|
|
15
|
+
};
|
|
16
|
+
this._element = document.createElement('div');
|
|
17
|
+
this._element.id = this.id;
|
|
18
|
+
this._element.setAttribute('data-jux-tabs', '');
|
|
19
|
+
if (this.opts.class)
|
|
20
|
+
this._element.className = this.opts.class;
|
|
21
|
+
if (this.opts.style)
|
|
22
|
+
this._element.setAttribute('style', this.opts.style);
|
|
23
|
+
// Tab list (the clickable triggers)
|
|
24
|
+
this._tabList = document.createElement('div');
|
|
25
|
+
this._tabList.className = this.opts.tabListClass;
|
|
26
|
+
this._tabList.setAttribute('role', 'tablist');
|
|
27
|
+
this._element.appendChild(this._tabList);
|
|
28
|
+
// Panel container (the content areas)
|
|
29
|
+
this._panelContainer = document.createElement('div');
|
|
30
|
+
this._panelContainer.className = 'jux-tabs-panels';
|
|
31
|
+
this._element.appendChild(this._panelContainer);
|
|
32
|
+
const resolvedTarget = this.opts.target;
|
|
33
|
+
const container = resolvedTarget
|
|
34
|
+
? document.getElementById(resolvedTarget) || document.querySelector(resolvedTarget)
|
|
35
|
+
: document.getElementById('app');
|
|
36
|
+
container?.appendChild(this._element);
|
|
37
|
+
if (this.opts.items) {
|
|
38
|
+
this.addItems(this.opts.items);
|
|
39
|
+
}
|
|
40
|
+
if (this.opts.defaultTab) {
|
|
41
|
+
this.setValue(this.opts.defaultTab);
|
|
42
|
+
}
|
|
43
|
+
else if (this._items.length > 0) {
|
|
44
|
+
this.setValue(this._items[0].id);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
// ═══════════════════════════════════════════════════════════
|
|
48
|
+
// FLUENT BUILDER API
|
|
49
|
+
// ═══════════════════════════════════════════════════════════
|
|
50
|
+
defaultTab(value) {
|
|
51
|
+
this.opts.defaultTab = value;
|
|
52
|
+
this.setValue(value);
|
|
53
|
+
return this;
|
|
54
|
+
}
|
|
55
|
+
class(value) {
|
|
56
|
+
this.opts.class = value;
|
|
57
|
+
this._element.className = value;
|
|
58
|
+
return this;
|
|
59
|
+
}
|
|
60
|
+
style(value) {
|
|
61
|
+
this.opts.style = value;
|
|
62
|
+
this._element.setAttribute('style', value);
|
|
63
|
+
return this;
|
|
64
|
+
}
|
|
65
|
+
tabListClass(value) {
|
|
66
|
+
this.opts.tabListClass = value;
|
|
67
|
+
this._tabList.className = value;
|
|
68
|
+
return this;
|
|
69
|
+
}
|
|
70
|
+
tabClass(value) {
|
|
71
|
+
this.opts.tabClass = value;
|
|
72
|
+
this._renderAll();
|
|
73
|
+
return this;
|
|
74
|
+
}
|
|
75
|
+
tabActiveClass(value) {
|
|
76
|
+
this.opts.tabActiveClass = value;
|
|
77
|
+
this._updateActiveState();
|
|
78
|
+
return this;
|
|
79
|
+
}
|
|
80
|
+
panelClass(value) {
|
|
81
|
+
this.opts.panelClass = value;
|
|
82
|
+
this._renderAll();
|
|
83
|
+
return this;
|
|
84
|
+
}
|
|
85
|
+
// ═══════════════════════════════════════════════════════════
|
|
86
|
+
// STANDARD COLLECTION API
|
|
87
|
+
// ═══════════════════════════════════════════════════════════
|
|
88
|
+
addItem(item) {
|
|
89
|
+
const tabItem = { ...item, id: item.id || `${this.id}-tab-${this._items.length}` };
|
|
90
|
+
this._items.push(tabItem);
|
|
91
|
+
this._renderTab(tabItem);
|
|
92
|
+
this._renderPanel(tabItem);
|
|
93
|
+
if (this._items.length === 1)
|
|
94
|
+
this.setValue(tabItem.id);
|
|
95
|
+
this._dispatchChange();
|
|
96
|
+
return this;
|
|
97
|
+
}
|
|
98
|
+
addItems(items) {
|
|
99
|
+
for (const item of items) {
|
|
100
|
+
const tabItem = { ...item, id: item.id || `${this.id}-tab-${this._items.length}` };
|
|
101
|
+
this._items.push(tabItem);
|
|
102
|
+
this._renderTab(tabItem);
|
|
103
|
+
this._renderPanel(tabItem);
|
|
104
|
+
}
|
|
105
|
+
if (this._items.length > 0 && !this._value) {
|
|
106
|
+
this.setValue(this._items[0].id);
|
|
107
|
+
}
|
|
108
|
+
this._dispatchChange();
|
|
109
|
+
return this;
|
|
110
|
+
}
|
|
111
|
+
removeItem(key) {
|
|
112
|
+
const idx = typeof key === 'number' ? key : this._items.findIndex(i => i.id === key);
|
|
113
|
+
if (idx > -1) {
|
|
114
|
+
const removed = this._items.splice(idx, 1)[0];
|
|
115
|
+
this._renderAll();
|
|
116
|
+
if (this._value === removed.id && this._items.length > 0) {
|
|
117
|
+
this.setValue(this._items[0].id);
|
|
118
|
+
}
|
|
119
|
+
else if (this._items.length === 0) {
|
|
120
|
+
this._value = null;
|
|
121
|
+
}
|
|
122
|
+
this._dispatchChange();
|
|
123
|
+
}
|
|
124
|
+
return this;
|
|
125
|
+
}
|
|
126
|
+
updateItem(key, updates) {
|
|
127
|
+
const idx = typeof key === 'number' ? key : this._items.findIndex(i => i.id === key);
|
|
128
|
+
if (idx > -1) {
|
|
129
|
+
this._items[idx] = { ...this._items[idx], ...updates };
|
|
130
|
+
this._renderAll();
|
|
131
|
+
this._updateActiveState();
|
|
132
|
+
this._dispatchChange();
|
|
133
|
+
}
|
|
134
|
+
return this;
|
|
135
|
+
}
|
|
136
|
+
clearItems() {
|
|
137
|
+
this._items = [];
|
|
138
|
+
this._value = null;
|
|
139
|
+
this._tabList.innerHTML = '';
|
|
140
|
+
this._panelContainer.innerHTML = '';
|
|
141
|
+
this._dispatchChange();
|
|
142
|
+
return this;
|
|
143
|
+
}
|
|
144
|
+
getItems() { return [...this._items]; }
|
|
145
|
+
getCount() { return this._items.length; }
|
|
146
|
+
// ═══════════════════════════════════════════════════════════
|
|
147
|
+
// PANEL ACCESS (for rendering content into tab panels)
|
|
148
|
+
// ═══════════════════════════════════════════════════════════
|
|
149
|
+
/** Get the panel element for a tab so you can render jux components into it */
|
|
150
|
+
getPanel(tabId) {
|
|
151
|
+
return this._panelContainer.querySelector(`[data-tab-panel="${tabId}"]`);
|
|
152
|
+
}
|
|
153
|
+
// ═══════════════════════════════════════════════════════════
|
|
154
|
+
// PAGESTATE INTEGRATION (delegates to fluent API)
|
|
155
|
+
// ═══════════════════════════════════════════════════════════
|
|
156
|
+
getValue() { return this._value; }
|
|
157
|
+
setValue(val) {
|
|
158
|
+
this._value = val;
|
|
159
|
+
this._updateActiveState();
|
|
160
|
+
return this;
|
|
161
|
+
}
|
|
162
|
+
getDefaultTab() { return this.opts.defaultTab ?? ''; }
|
|
163
|
+
getClass() { return this.opts.class ?? ''; }
|
|
164
|
+
getStyle() { return this.opts.style ?? ''; }
|
|
165
|
+
getTabListClass() { return this.opts.tabListClass ?? ''; }
|
|
166
|
+
getTabClass() { return this.opts.tabClass ?? ''; }
|
|
167
|
+
getTabActiveClass() { return this.opts.tabActiveClass ?? ''; }
|
|
168
|
+
getPanelClass() { return this.opts.panelClass ?? ''; }
|
|
169
|
+
setDefaultTab(val) { return this.defaultTab(val); }
|
|
170
|
+
setClass(val) { return this.class(val); }
|
|
171
|
+
setStyle(val) { return this.style(val); }
|
|
172
|
+
setTabListClass(val) { return this.tabListClass(val); }
|
|
173
|
+
setTabClass(val) { return this.tabClass(val); }
|
|
174
|
+
setTabActiveClass(val) { return this.tabActiveClass(val); }
|
|
175
|
+
setPanelClass(val) { return this.panelClass(val); }
|
|
176
|
+
getElement() { return this._element; }
|
|
177
|
+
onChange(fn) {
|
|
178
|
+
this._onChange = fn;
|
|
179
|
+
return this;
|
|
180
|
+
}
|
|
181
|
+
/** Returns the reactive pageState proxy for this component */
|
|
182
|
+
get state() {
|
|
183
|
+
return pageState[this.id];
|
|
184
|
+
}
|
|
185
|
+
// ═══════════════════════════════════════════════════════════
|
|
186
|
+
// INTERNAL
|
|
187
|
+
// ═══════════════════════════════════════════════════════════
|
|
188
|
+
_renderTab(item) {
|
|
189
|
+
const btn = document.createElement('button');
|
|
190
|
+
btn.id = `${item.id}-trigger`;
|
|
191
|
+
btn.className = this.opts.tabClass;
|
|
192
|
+
btn.setAttribute('role', 'tab');
|
|
193
|
+
btn.setAttribute('data-tab-id', item.id);
|
|
194
|
+
btn.textContent = item.label;
|
|
195
|
+
if (item.disabled) {
|
|
196
|
+
btn.disabled = true;
|
|
197
|
+
btn.setAttribute('data-disabled', 'true');
|
|
198
|
+
}
|
|
199
|
+
btn.addEventListener('click', () => {
|
|
200
|
+
if (item.disabled)
|
|
201
|
+
return;
|
|
202
|
+
this._value = item.id;
|
|
203
|
+
this._updateActiveState();
|
|
204
|
+
if (this._onChange)
|
|
205
|
+
this._onChange(this._value);
|
|
206
|
+
this._element.dispatchEvent(new Event('change', { bubbles: false }));
|
|
207
|
+
});
|
|
208
|
+
this._tabList.appendChild(btn);
|
|
209
|
+
}
|
|
210
|
+
_renderPanel(item) {
|
|
211
|
+
const panel = document.createElement('div');
|
|
212
|
+
panel.id = `${item.id}-panel`;
|
|
213
|
+
panel.className = this.opts.panelClass;
|
|
214
|
+
panel.setAttribute('role', 'tabpanel');
|
|
215
|
+
panel.setAttribute('data-tab-panel', item.id);
|
|
216
|
+
if (item.content)
|
|
217
|
+
panel.innerHTML = item.content;
|
|
218
|
+
panel.style.display = 'none';
|
|
219
|
+
this._panelContainer.appendChild(panel);
|
|
220
|
+
}
|
|
221
|
+
_renderAll() {
|
|
222
|
+
this._tabList.innerHTML = '';
|
|
223
|
+
this._panelContainer.innerHTML = '';
|
|
224
|
+
for (const item of this._items) {
|
|
225
|
+
this._renderTab(item);
|
|
226
|
+
this._renderPanel(item);
|
|
227
|
+
}
|
|
228
|
+
this._updateActiveState();
|
|
229
|
+
}
|
|
230
|
+
_updateActiveState() {
|
|
231
|
+
// Tabs
|
|
232
|
+
const tabs = this._tabList.querySelectorAll('[role="tab"]');
|
|
233
|
+
tabs.forEach(tab => {
|
|
234
|
+
const tabId = tab.getAttribute('data-tab-id');
|
|
235
|
+
if (tabId === this._value) {
|
|
236
|
+
tab.classList.add(this.opts.tabActiveClass);
|
|
237
|
+
tab.setAttribute('aria-selected', 'true');
|
|
238
|
+
}
|
|
239
|
+
else {
|
|
240
|
+
tab.classList.remove(this.opts.tabActiveClass);
|
|
241
|
+
tab.setAttribute('aria-selected', 'false');
|
|
242
|
+
}
|
|
243
|
+
});
|
|
244
|
+
// Panels
|
|
245
|
+
const panels = this._panelContainer.querySelectorAll('[role="tabpanel"]');
|
|
246
|
+
panels.forEach(panel => {
|
|
247
|
+
const panelId = panel.getAttribute('data-tab-panel');
|
|
248
|
+
panel.style.display = panelId === this._value ? '' : 'none';
|
|
249
|
+
});
|
|
250
|
+
}
|
|
251
|
+
_dispatchChange() {
|
|
252
|
+
this._element.setAttribute('data-count', String(this._items.length));
|
|
253
|
+
this._element.dispatchEvent(new Event('change', { bubbles: false }));
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
export function tabs(id, options = {}) {
|
|
257
|
+
const t = new Tabs(id, options);
|
|
258
|
+
pageState.__register(t);
|
|
259
|
+
return t;
|
|
260
|
+
}
|
|
261
|
+
export { Tabs };
|
|
262
|
+
export default tabs;
|
|
263
|
+
//# sourceMappingURL=tabs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tabs.js","sourceRoot":"","sources":["../../lib/primitives/tabs.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Options for creating a Tag element.
|
|
3
|
+
* @property content - Text content of the element
|
|
4
|
+
* @property class - CSS class name(s) to apply
|
|
5
|
+
* @property style - Inline CSS style string
|
|
6
|
+
* @property target - ID of parent element to append into (enables nesting). Defaults to `#app`.
|
|
7
|
+
* @property onClick - Click event handler
|
|
8
|
+
*/
|
|
9
|
+
interface TagOptions {
|
|
10
|
+
content?: string;
|
|
11
|
+
class?: string;
|
|
12
|
+
style?: string;
|
|
13
|
+
target?: string;
|
|
14
|
+
onClick?: (event: MouseEvent) => void;
|
|
15
|
+
[key: string]: any;
|
|
16
|
+
}
|
|
17
|
+
declare class Tag {
|
|
18
|
+
/** Unique element ID */
|
|
19
|
+
id: string;
|
|
20
|
+
/** HTML tag name (div, span, etc.) */
|
|
21
|
+
tagName: string;
|
|
22
|
+
/** Creation options */
|
|
23
|
+
opts: TagOptions;
|
|
24
|
+
private _element;
|
|
25
|
+
private _onClick;
|
|
26
|
+
constructor(id: string, tagName: string, options?: TagOptions);
|
|
27
|
+
/** Set text content. Returns `this` for chaining. */
|
|
28
|
+
content(value: string): this;
|
|
29
|
+
/** Set CSS class(es). Returns `this` for chaining. */
|
|
30
|
+
class(value: string): this;
|
|
31
|
+
/** Set inline style string. Returns `this` for chaining. */
|
|
32
|
+
style(value: string): this;
|
|
33
|
+
getValue(): string;
|
|
34
|
+
getContent(): string;
|
|
35
|
+
getClass(): string;
|
|
36
|
+
getStyle(): string;
|
|
37
|
+
setValue(val: string): this;
|
|
38
|
+
setContent(val: string): this;
|
|
39
|
+
setClass(val: string): this;
|
|
40
|
+
setStyle(val: string): this;
|
|
41
|
+
setInnerHTML(val: string): this;
|
|
42
|
+
getElement(): HTMLElement | null;
|
|
43
|
+
onClick(fn: (event: MouseEvent) => void): this;
|
|
44
|
+
/** Returns the reactive pageState proxy for this component */
|
|
45
|
+
get state(): any;
|
|
46
|
+
/**
|
|
47
|
+
* Render the element into the DOM.
|
|
48
|
+
* @param target - Optional parent element or ID. Falls back to `opts.target`, then `#app`.
|
|
49
|
+
*/
|
|
50
|
+
render(target?: string | HTMLElement): this;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Create and render a generic HTML element.
|
|
54
|
+
* @param id - Unique element ID
|
|
55
|
+
* @param tagName - HTML tag name
|
|
56
|
+
* @param options - Tag options including style, content, target for nesting
|
|
57
|
+
*/
|
|
58
|
+
export declare function tag(id: string, tagName: string, options?: TagOptions): Tag;
|
|
59
|
+
/**
|
|
60
|
+
* Create and render a `<div>` element.
|
|
61
|
+
* @param id - Unique element ID
|
|
62
|
+
* @param options - Tag options. Use `{ target: parentId }` to nest inside another element.
|
|
63
|
+
* @example
|
|
64
|
+
* ```js
|
|
65
|
+
* jux.div('card').style('padding: 20px;');
|
|
66
|
+
* jux.div('child', { target: 'card' }).content('I am nested!');
|
|
67
|
+
* ```
|
|
68
|
+
*/
|
|
69
|
+
export declare function div(id: string, options?: TagOptions): Tag;
|
|
70
|
+
/**
|
|
71
|
+
* Create and render a `<span>` element.
|
|
72
|
+
* @param id - Unique element ID
|
|
73
|
+
* @param options - Tag options. Use `{ target: parentId }` to nest inside another element.
|
|
74
|
+
*/
|
|
75
|
+
export declare function span(id: string, options?: TagOptions): Tag;
|
|
76
|
+
/**
|
|
77
|
+
* Create and render a `<p>` element.
|
|
78
|
+
* @param id - Unique element ID
|
|
79
|
+
* @param options - Tag options. Use `{ target: parentId }` to nest inside another element.
|
|
80
|
+
*/
|
|
81
|
+
export declare function p(id: string, options?: TagOptions): Tag;
|
|
82
|
+
export declare function code(id: string, options?: TagOptions): Tag;
|
|
83
|
+
export declare function pre(id: string, options?: TagOptions): Tag;
|
|
84
|
+
export declare function h1(id: string, options?: TagOptions): Tag;
|
|
85
|
+
export declare function h2(id: string, options?: TagOptions): Tag;
|
|
86
|
+
export declare function h3(id: string, options?: TagOptions): Tag;
|
|
87
|
+
export declare function h4(id: string, options?: TagOptions): Tag;
|
|
88
|
+
export declare function h5(id: string, options?: TagOptions): Tag;
|
|
89
|
+
export declare function h6(id: string, options?: TagOptions): Tag;
|
|
90
|
+
export { Tag, TagOptions };
|
|
91
|
+
export default tag;
|
|
92
|
+
//# sourceMappingURL=tag.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tag.d.ts","sourceRoot":"","sources":["../../lib/primitives/tag.ts"],"names":[],"mappings":"AAIA;;;;;;;GAOG;AACH,UAAU,UAAU;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,CAAC;IACtC,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACtB;AAED,cAAM,GAAG;IACL,wBAAwB;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,sCAAsC;IACtC,OAAO,EAAE,MAAM,CAAC;IAChB,uBAAuB;IACvB,IAAI,EAAE,UAAU,CAAC;IACjB,OAAO,CAAC,QAAQ,CAA4B;IAC5C,OAAO,CAAC,QAAQ,CAA8C;gBAElD,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,UAAe;IAOjE,qDAAqD;IACrD,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAC5B,sDAAsD;IACtD,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAC1B,4DAA4D;IAC5D,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAG1B,QAAQ,IAAI,MAAM;IAClB,UAAU,IAAI,MAAM;IACpB,QAAQ,IAAI,MAAM;IAClB,QAAQ,IAAI,MAAM;IAElB,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAC3B,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAC7B,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAC3B,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAC3B,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAE/B,UAAU,IAAI,WAAW,GAAG,IAAI;IAEhC,OAAO,CAAC,EAAE,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,GAAG,IAAI;IAM9C,8DAA8D;IAC9D,IAAI,KAAK,IAAI,GAAG,CAEf;IAED;;;OAGG;IACH,MAAM,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,WAAW;CA6BvC;AAED;;;;;GAKG;AACH,wBAAgB,GAAG,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,UAAe,OAKxE;AAED;;;;;;;;;GASG;AACH,wBAAgB,GAAG,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,GAAE,UAAe,OAAqC;AAE7F;;;;GAIG;AACH,wBAAgB,IAAI,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,GAAE,UAAe,OAAsC;AAE/F;;;;GAIG;AACH,wBAAgB,CAAC,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,GAAE,UAAe,OAAmC;AAEzF,wBAAgB,IAAI,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,GAAE,UAAe,OAqCxD;AAED,wBAAgB,GAAG,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,GAAE,UAAe,OAAqC;AAC7F,wBAAgB,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,GAAE,UAAe,OAAoC;AAC3F,wBAAgB,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,GAAE,UAAe,OAAoC;AAC3F,wBAAgB,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,GAAE,UAAe,OAAoC;AAC3F,wBAAgB,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,GAAE,UAAe,OAAoC;AAC3F,wBAAgB,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,GAAE,UAAe,OAAoC;AAC3F,wBAAgB,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,GAAE,UAAe,OAAoC;AAE3F,OAAO,EAAE,GAAG,EAAE,UAAU,EAAE,CAAC;AAC3B,eAAe,GAAG,CAAC"}
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
import generateId from '../utils/idgen.js';
|
|
2
|
+
import { pageState } from '../state/pageState.js';
|
|
3
|
+
import codeparser from '../utils/codeparser.js';
|
|
4
|
+
class Tag {
|
|
5
|
+
constructor(id, tagName, options = {}) {
|
|
6
|
+
this._element = null;
|
|
7
|
+
this._onClick = null;
|
|
8
|
+
this.id = id || generateId();
|
|
9
|
+
this.tagName = tagName;
|
|
10
|
+
this.opts = options;
|
|
11
|
+
}
|
|
12
|
+
// Fluent API
|
|
13
|
+
/** Set text content. Returns `this` for chaining. */
|
|
14
|
+
content(value) { this.opts.content = value; if (this._element)
|
|
15
|
+
this._element.textContent = value; return this; }
|
|
16
|
+
/** Set CSS class(es). Returns `this` for chaining. */
|
|
17
|
+
class(value) { this.opts.class = value; if (this._element)
|
|
18
|
+
this._element.className = value; return this; }
|
|
19
|
+
/** Set inline style string. Returns `this` for chaining. */
|
|
20
|
+
style(value) { this.opts.style = value; if (this._element)
|
|
21
|
+
this._element.setAttribute('style', value); return this; }
|
|
22
|
+
// Getters/Setters for pageState integration (delegates to fluent API)
|
|
23
|
+
getValue() { return this._element?.textContent ?? this.opts.content ?? ''; }
|
|
24
|
+
getContent() { return this._element?.textContent ?? this.opts.content ?? ''; }
|
|
25
|
+
getClass() { return this.opts.class ?? ''; }
|
|
26
|
+
getStyle() { return this.opts.style ?? ''; }
|
|
27
|
+
setValue(val) { return this.content(val); }
|
|
28
|
+
setContent(val) { return this.content(val); }
|
|
29
|
+
setClass(val) { return this.class(val); }
|
|
30
|
+
setStyle(val) { return this.style(val); }
|
|
31
|
+
setInnerHTML(val) { if (this._element)
|
|
32
|
+
this._element.innerHTML = val; return this; }
|
|
33
|
+
getElement() { return this._element; }
|
|
34
|
+
onClick(fn) {
|
|
35
|
+
this._onClick = fn;
|
|
36
|
+
this._element?.addEventListener('click', fn);
|
|
37
|
+
return this;
|
|
38
|
+
}
|
|
39
|
+
/** Returns the reactive pageState proxy for this component */
|
|
40
|
+
get state() {
|
|
41
|
+
return pageState[this.id];
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Render the element into the DOM.
|
|
45
|
+
* @param target - Optional parent element or ID. Falls back to `opts.target`, then `#app`.
|
|
46
|
+
*/
|
|
47
|
+
render(target) {
|
|
48
|
+
const el = document.createElement(this.tagName);
|
|
49
|
+
el.id = this.id;
|
|
50
|
+
if (this.opts.content)
|
|
51
|
+
el.textContent = this.opts.content;
|
|
52
|
+
if (this.opts.class)
|
|
53
|
+
el.className = this.opts.class;
|
|
54
|
+
if (this.opts.style)
|
|
55
|
+
el.setAttribute('style', this.opts.style);
|
|
56
|
+
for (const [key, value] of Object.entries(this.opts)) {
|
|
57
|
+
if (['content', 'class', 'style', 'target', 'onClick'].includes(key))
|
|
58
|
+
continue;
|
|
59
|
+
el.setAttribute(key, String(value));
|
|
60
|
+
}
|
|
61
|
+
this._element = el;
|
|
62
|
+
// Wire up option-based click handler
|
|
63
|
+
if (this.opts.onClick) {
|
|
64
|
+
this._onClick = this.opts.onClick;
|
|
65
|
+
el.addEventListener('click', this.opts.onClick);
|
|
66
|
+
}
|
|
67
|
+
// Resolve target: param > opts.target > #app
|
|
68
|
+
const resolvedTarget = target || this.opts.target;
|
|
69
|
+
const container = resolvedTarget
|
|
70
|
+
? (typeof resolvedTarget === 'string' ? document.getElementById(resolvedTarget) || document.querySelector(resolvedTarget) : resolvedTarget)
|
|
71
|
+
: document.getElementById('app');
|
|
72
|
+
container?.appendChild(el);
|
|
73
|
+
return this;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Create and render a generic HTML element.
|
|
78
|
+
* @param id - Unique element ID
|
|
79
|
+
* @param tagName - HTML tag name
|
|
80
|
+
* @param options - Tag options including style, content, target for nesting
|
|
81
|
+
*/
|
|
82
|
+
export function tag(id, tagName, options = {}) {
|
|
83
|
+
const t = new Tag(id, tagName, options);
|
|
84
|
+
t.render();
|
|
85
|
+
pageState.__register(t);
|
|
86
|
+
return t;
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Create and render a `<div>` element.
|
|
90
|
+
* @param id - Unique element ID
|
|
91
|
+
* @param options - Tag options. Use `{ target: parentId }` to nest inside another element.
|
|
92
|
+
* @example
|
|
93
|
+
* ```js
|
|
94
|
+
* jux.div('card').style('padding: 20px;');
|
|
95
|
+
* jux.div('child', { target: 'card' }).content('I am nested!');
|
|
96
|
+
* ```
|
|
97
|
+
*/
|
|
98
|
+
export function div(id, options = {}) { return tag(id, 'div', options); }
|
|
99
|
+
/**
|
|
100
|
+
* Create and render a `<span>` element.
|
|
101
|
+
* @param id - Unique element ID
|
|
102
|
+
* @param options - Tag options. Use `{ target: parentId }` to nest inside another element.
|
|
103
|
+
*/
|
|
104
|
+
export function span(id, options = {}) { return tag(id, 'span', options); }
|
|
105
|
+
/**
|
|
106
|
+
* Create and render a `<p>` element.
|
|
107
|
+
* @param id - Unique element ID
|
|
108
|
+
* @param options - Tag options. Use `{ target: parentId }` to nest inside another element.
|
|
109
|
+
*/
|
|
110
|
+
export function p(id, options = {}) { return tag(id, 'p', options); }
|
|
111
|
+
export function code(id, options = {}) {
|
|
112
|
+
// Inject highlight styles once
|
|
113
|
+
if (!document.getElementById('__jux-hl-styles')) {
|
|
114
|
+
const style = document.createElement('style');
|
|
115
|
+
style.id = '__jux-hl-styles';
|
|
116
|
+
style.textContent = codeparser.getCSS();
|
|
117
|
+
document.head.appendChild(style);
|
|
118
|
+
}
|
|
119
|
+
// Parse and highlight content
|
|
120
|
+
const raw = options.content || '';
|
|
121
|
+
const trimmed = raw.replace(/^\n+/, '').replace(/\n+$/, '');
|
|
122
|
+
const parsed = codeparser.parse(trimmed);
|
|
123
|
+
// Build line-by-line HTML
|
|
124
|
+
const linesHtml = parsed.map(line => `<div class="jux-code-line"><span class="jux-code-line-number">${line.lineNumber}</span><span class="jux-code-line-content">${line.html}</span></div>`).join('');
|
|
125
|
+
// Create as <pre> with inner code structure
|
|
126
|
+
const t = new Tag(id, 'pre', {
|
|
127
|
+
...options,
|
|
128
|
+
content: undefined,
|
|
129
|
+
class: `jux-code${options.class ? ' ' + options.class : ''}`
|
|
130
|
+
});
|
|
131
|
+
t.render();
|
|
132
|
+
const el = t.getElement();
|
|
133
|
+
if (el) {
|
|
134
|
+
const codeEl = document.createElement('code');
|
|
135
|
+
codeEl.className = 'jux-code-lines';
|
|
136
|
+
codeEl.innerHTML = linesHtml;
|
|
137
|
+
el.appendChild(codeEl);
|
|
138
|
+
}
|
|
139
|
+
pageState.__register(t);
|
|
140
|
+
return t;
|
|
141
|
+
}
|
|
142
|
+
export function pre(id, options = {}) { return tag(id, 'pre', options); }
|
|
143
|
+
export function h1(id, options = {}) { return tag(id, 'h1', options); }
|
|
144
|
+
export function h2(id, options = {}) { return tag(id, 'h2', options); }
|
|
145
|
+
export function h3(id, options = {}) { return tag(id, 'h3', options); }
|
|
146
|
+
export function h4(id, options = {}) { return tag(id, 'h4', options); }
|
|
147
|
+
export function h5(id, options = {}) { return tag(id, 'h5', options); }
|
|
148
|
+
export function h6(id, options = {}) { return tag(id, 'h6', options); }
|
|
149
|
+
export { Tag };
|
|
150
|
+
export default tag;
|
|
151
|
+
//# sourceMappingURL=tag.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tag.js","sourceRoot":"","sources":["../../lib/primitives/tag.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* db.ts — Jux database service client
|
|
3
|
+
*
|
|
4
|
+
* JuxDb establishes connectivity to the `db` downstream service via the
|
|
5
|
+
* ApiGateway backend. It provides a domain-specific API for database
|
|
6
|
+
* operations; every method ultimately delegates to `this.call(path, options)`,
|
|
7
|
+
* which routes through the Jux Gateway transport layer.
|
|
8
|
+
*
|
|
9
|
+
* Usage in a .jux file:
|
|
10
|
+
* const api = await jux.gateway(username, password);
|
|
11
|
+
* const db = api.connect('db');
|
|
12
|
+
*
|
|
13
|
+
* // Check connectivity
|
|
14
|
+
* const ping = await db.health();
|
|
15
|
+
*
|
|
16
|
+
* // Query rows
|
|
17
|
+
* const result = await db.query('SELECT * FROM users WHERE active = ?', [1]);
|
|
18
|
+
* if (result.ok) { console.log(result.data); }
|
|
19
|
+
*
|
|
20
|
+
* // Execute a write statement
|
|
21
|
+
* await db.execute('INSERT INTO logs (msg) VALUES (?)', ['hello']);
|
|
22
|
+
*/
|
|
23
|
+
import { ApiGateway, JuxService, ApiResult, ApiCallOptions } from '../components/gateway.js';
|
|
24
|
+
export declare class JuxDb extends JuxService {
|
|
25
|
+
constructor(gateway: ApiGateway);
|
|
26
|
+
/** Verify connectivity to the db downstream service. */
|
|
27
|
+
health(): Promise<ApiResult>;
|
|
28
|
+
/**
|
|
29
|
+
* Execute a read query and return result rows.
|
|
30
|
+
*
|
|
31
|
+
* @param sql SQL statement to run (SELECT …)
|
|
32
|
+
* @param params Optional positional parameters
|
|
33
|
+
*/
|
|
34
|
+
query(sql: string, params?: any[]): Promise<ApiResult>;
|
|
35
|
+
/**
|
|
36
|
+
* Execute a write statement (INSERT / UPDATE / DELETE).
|
|
37
|
+
*
|
|
38
|
+
* @param sql SQL statement to run
|
|
39
|
+
* @param params Optional positional parameters
|
|
40
|
+
*/
|
|
41
|
+
execute(sql: string, params?: any[]): Promise<ApiResult>;
|
|
42
|
+
}
|
|
43
|
+
export { ApiCallOptions, ApiResult };
|
|
44
|
+
//# sourceMappingURL=db.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"db.d.ts","sourceRoot":"","sources":["../../lib/services/db.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,SAAS,EAAE,cAAc,EAA2B,MAAM,0BAA0B,CAAC;AAEtH,qBAAa,KAAM,SAAQ,UAAU;gBACrB,OAAO,EAAE,UAAU;IAI/B,wDAAwD;IAClD,MAAM,IAAI,OAAO,CAAC,SAAS,CAAC;IAIlC;;;;;OAKG;IACG,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,SAAS,CAAC;IAO5D;;;;;OAKG;IACG,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,SAAS,CAAC;CAMjE;AAKD,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,CAAC"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* db.ts — Jux database service client
|
|
3
|
+
*
|
|
4
|
+
* JuxDb establishes connectivity to the `db` downstream service via the
|
|
5
|
+
* ApiGateway backend. It provides a domain-specific API for database
|
|
6
|
+
* operations; every method ultimately delegates to `this.call(path, options)`,
|
|
7
|
+
* which routes through the Jux Gateway transport layer.
|
|
8
|
+
*
|
|
9
|
+
* Usage in a .jux file:
|
|
10
|
+
* const api = await jux.gateway(username, password);
|
|
11
|
+
* const db = api.connect('db');
|
|
12
|
+
*
|
|
13
|
+
* // Check connectivity
|
|
14
|
+
* const ping = await db.health();
|
|
15
|
+
*
|
|
16
|
+
* // Query rows
|
|
17
|
+
* const result = await db.query('SELECT * FROM users WHERE active = ?', [1]);
|
|
18
|
+
* if (result.ok) { console.log(result.data); }
|
|
19
|
+
*
|
|
20
|
+
* // Execute a write statement
|
|
21
|
+
* await db.execute('INSERT INTO logs (msg) VALUES (?)', ['hello']);
|
|
22
|
+
*/
|
|
23
|
+
import { JuxService, _registerServiceFactory } from '../components/gateway.js';
|
|
24
|
+
export class JuxDb extends JuxService {
|
|
25
|
+
constructor(gateway) {
|
|
26
|
+
super(gateway, 'db');
|
|
27
|
+
}
|
|
28
|
+
/** Verify connectivity to the db downstream service. */
|
|
29
|
+
async health() {
|
|
30
|
+
return this.call('health');
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Execute a read query and return result rows.
|
|
34
|
+
*
|
|
35
|
+
* @param sql SQL statement to run (SELECT …)
|
|
36
|
+
* @param params Optional positional parameters
|
|
37
|
+
*/
|
|
38
|
+
async query(sql, params) {
|
|
39
|
+
return this.call('query', {
|
|
40
|
+
method: 'POST',
|
|
41
|
+
body: { sql, params },
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Execute a write statement (INSERT / UPDATE / DELETE).
|
|
46
|
+
*
|
|
47
|
+
* @param sql SQL statement to run
|
|
48
|
+
* @param params Optional positional parameters
|
|
49
|
+
*/
|
|
50
|
+
async execute(sql, params) {
|
|
51
|
+
return this.call('execute', {
|
|
52
|
+
method: 'POST',
|
|
53
|
+
body: { sql, params },
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
// Register this service so ApiGateway.connect('db') returns a JuxDb instance.
|
|
58
|
+
_registerServiceFactory('db', (gw) => new JuxDb(gw));
|
|
59
|
+
//# sourceMappingURL=db.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"db.js","sourceRoot":"","sources":["../../lib/services/db.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,EAAc,UAAU,EAA6B,uBAAuB,EAAE,MAAM,0BAA0B,CAAC;AAEtH,MAAM,OAAO,KAAM,SAAQ,UAAU;IACjC,YAAY,OAAmB;QAC3B,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IACzB,CAAC;IAED,wDAAwD;IACxD,KAAK,CAAC,MAAM;QACR,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC/B,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,KAAK,CAAC,GAAW,EAAE,MAAc;QACnC,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;YACtB,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE;SACxB,CAAC,CAAC;IACP,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,OAAO,CAAC,GAAW,EAAE,MAAc;QACrC,OAAO,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;YACxB,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE;SACxB,CAAC,CAAC;IACP,CAAC;CACJ;AAED,8EAA8E;AAC9E,uBAAuB,CAAC,IAAI,EAAE,CAAC,EAAc,EAAE,EAAE,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC"}
|