@endora-commerce/email-components 0.100.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +45 -0
- package/dist/components/email-branding-preview-context.d.ts +7 -0
- package/dist/components/email-branding-preview-context.d.ts.map +1 -0
- package/dist/components/email-branding-preview-context.js +8 -0
- package/dist/components/email-branding-preview-context.js.map +1 -0
- package/dist/components/email-embeds-context.d.ts +11 -0
- package/dist/components/email-embeds-context.d.ts.map +1 -0
- package/dist/components/email-embeds-context.js +15 -0
- package/dist/components/email-embeds-context.js.map +1 -0
- package/dist/config.d.ts +333 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +900 -0
- package/dist/config.js.map +1 -0
- package/dist/defaults/default-footer.d.ts +13 -0
- package/dist/defaults/default-footer.d.ts.map +1 -0
- package/dist/defaults/default-footer.js +42 -0
- package/dist/defaults/default-footer.js.map +1 -0
- package/dist/defaults/default-header.d.ts +5 -0
- package/dist/defaults/default-header.d.ts.map +1 -0
- package/dist/defaults/default-header.js +34 -0
- package/dist/defaults/default-header.js.map +1 -0
- package/dist/defaults/simple-email-body.d.ts +20 -0
- package/dist/defaults/simple-email-body.d.ts.map +1 -0
- package/dist/defaults/simple-email-body.js +41 -0
- package/dist/defaults/simple-email-body.js.map +1 -0
- package/dist/directives/directive-engine.d.ts +7 -0
- package/dist/directives/directive-engine.d.ts.map +1 -0
- package/dist/directives/directive-engine.js +144 -0
- package/dist/directives/directive-engine.js.map +1 -0
- package/dist/editor/email-row-layout-presets.d.ts +33 -0
- package/dist/editor/email-row-layout-presets.d.ts.map +1 -0
- package/dist/editor/email-row-layout-presets.js +145 -0
- package/dist/editor/email-row-layout-presets.js.map +1 -0
- package/dist/index.d.ts +18 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +24 -0
- package/dist/index.js.map +1 -0
- package/dist/render/escape-html.d.ts +4 -0
- package/dist/render/escape-html.d.ts.map +1 -0
- package/dist/render/escape-html.js +21 -0
- package/dist/render/escape-html.js.map +1 -0
- package/dist/render/order-labels.d.ts +23 -0
- package/dist/render/order-labels.d.ts.map +1 -0
- package/dist/render/order-labels.js +46 -0
- package/dist/render/order-labels.js.map +1 -0
- package/dist/render/render-email-html.d.ts +18 -0
- package/dist/render/render-email-html.d.ts.map +1 -0
- package/dist/render/render-email-html.js +659 -0
- package/dist/render/render-email-html.js.map +1 -0
- package/dist/render/render-email-text.d.ts +11 -0
- package/dist/render/render-email-text.d.ts.map +1 -0
- package/dist/render/render-email-text.js +167 -0
- package/dist/render/render-email-text.js.map +1 -0
- package/dist/render/sample-variables.d.ts +15 -0
- package/dist/render/sample-variables.d.ts.map +1 -0
- package/dist/render/sample-variables.js +43 -0
- package/dist/render/sample-variables.js.map +1 -0
- package/dist/render/sanitize-email-html.d.ts +9 -0
- package/dist/render/sanitize-email-html.d.ts.map +1 -0
- package/dist/render/sanitize-email-html.js +122 -0
- package/dist/render/sanitize-email-html.js.map +1 -0
- package/dist/render/social-icon-svg.d.ts +6 -0
- package/dist/render/social-icon-svg.d.ts.map +1 -0
- package/dist/render/social-icon-svg.js +41 -0
- package/dist/render/social-icon-svg.js.map +1 -0
- package/dist/schema/component-types.d.ts +269 -0
- package/dist/schema/component-types.d.ts.map +1 -0
- package/dist/schema/component-types.js +105 -0
- package/dist/schema/component-types.js.map +1 -0
- package/dist/schema/envelope.d.ts +21 -0
- package/dist/schema/envelope.d.ts.map +1 -0
- package/dist/schema/envelope.js +8 -0
- package/dist/schema/envelope.js.map +1 -0
- package/dist/tree/walk-embeds.d.ts +7 -0
- package/dist/tree/walk-embeds.d.ts.map +1 -0
- package/dist/tree/walk-embeds.js +115 -0
- package/dist/tree/walk-embeds.js.map +1 -0
- package/package.json +71 -0
- package/tailwind.css +14 -0
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export * from './schema/component-types.js';
|
|
2
|
+
export * from './schema/envelope.js';
|
|
3
|
+
export * from './render/escape-html.js';
|
|
4
|
+
export * from './render/render-email-html.js';
|
|
5
|
+
export * from './render/render-email-text.js';
|
|
6
|
+
export * from './render/sanitize-email-html.js';
|
|
7
|
+
export * from './render/sample-variables.js';
|
|
8
|
+
export * from './render/order-labels.js';
|
|
9
|
+
export * from './directives/directive-engine.js';
|
|
10
|
+
export * from './tree/walk-embeds.js';
|
|
11
|
+
export * from './defaults/default-header.js';
|
|
12
|
+
export * from './defaults/default-footer.js';
|
|
13
|
+
export * from './defaults/simple-email-body.js';
|
|
14
|
+
export * from './components/email-embeds-context.js';
|
|
15
|
+
export * from './components/email-branding-preview-context.js';
|
|
16
|
+
export * from './editor/email-row-layout-presets.js';
|
|
17
|
+
export * from './config.js';
|
|
18
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAOA,cAAc,6BAA6B,CAAC;AAC5C,cAAc,sBAAsB,CAAC;AACrC,cAAc,yBAAyB,CAAC;AACxC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,iCAAiC,CAAC;AAChD,cAAc,8BAA8B,CAAC;AAC7C,cAAc,0BAA0B,CAAC;AACzC,cAAc,kCAAkC,CAAC;AACjD,cAAc,uBAAuB,CAAC;AACtC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,iCAAiC,CAAC;AAChD,cAAc,sCAAsC,CAAC;AACrD,cAAc,gDAAgD,CAAC;AAC/D,cAAc,sCAAsC,CAAC;AACrD,cAAc,aAAa,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
// @endora-commerce/email-components — shared transactional-email building blocks (feature 047).
|
|
2
|
+
//
|
|
3
|
+
// Root entry (admin/editor surface): re-exports the React Puck config plus the
|
|
4
|
+
// pure schema/render/directive/tree/defaults modules. The BACKEND must import
|
|
5
|
+
// the pure subpaths directly (e.g. `@endora-commerce/email-components/render/render-email-html`)
|
|
6
|
+
// to avoid pulling React into the send path.
|
|
7
|
+
export * from './schema/component-types.js';
|
|
8
|
+
export * from './schema/envelope.js';
|
|
9
|
+
export * from './render/escape-html.js';
|
|
10
|
+
export * from './render/render-email-html.js';
|
|
11
|
+
export * from './render/render-email-text.js';
|
|
12
|
+
export * from './render/sanitize-email-html.js';
|
|
13
|
+
export * from './render/sample-variables.js';
|
|
14
|
+
export * from './render/order-labels.js';
|
|
15
|
+
export * from './directives/directive-engine.js';
|
|
16
|
+
export * from './tree/walk-embeds.js';
|
|
17
|
+
export * from './defaults/default-header.js';
|
|
18
|
+
export * from './defaults/default-footer.js';
|
|
19
|
+
export * from './defaults/simple-email-body.js';
|
|
20
|
+
export * from './components/email-embeds-context.js';
|
|
21
|
+
export * from './components/email-branding-preview-context.js';
|
|
22
|
+
export * from './editor/email-row-layout-presets.js';
|
|
23
|
+
export * from './config.js';
|
|
24
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,gGAAgG;AAChG,EAAE;AACF,+EAA+E;AAC/E,8EAA8E;AAC9E,iGAAiG;AACjG,6CAA6C;AAE7C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,sBAAsB,CAAC;AACrC,cAAc,yBAAyB,CAAC;AACxC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,iCAAiC,CAAC;AAChD,cAAc,8BAA8B,CAAC;AAC7C,cAAc,0BAA0B,CAAC;AACzC,cAAc,kCAAkC,CAAC;AACjD,cAAc,uBAAuB,CAAC;AACtC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,iCAAiC,CAAC;AAChD,cAAc,sCAAsC,CAAC;AACrD,cAAc,gDAAgD,CAAC;AAC/D,cAAc,sCAAsC,CAAC;AACrD,cAAc,aAAa,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"escape-html.d.ts","sourceRoot":"","sources":["../../src/render/escape-html.ts"],"names":[],"mappings":"AAeA,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEhD;AAED,oEAAoE;AACpE,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEhD"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
// HTML escaping for email rendering (feature 047).
|
|
2
|
+
//
|
|
3
|
+
// Note: `{` and `}` are intentionally NOT escaped — the directive engine runs
|
|
4
|
+
// over the rendered HTML string AFTER component rendering, so `{{var ...}}`
|
|
5
|
+
// markers authored inside text must survive escaping. Variable *values* are
|
|
6
|
+
// escaped by the directive engine when injected into HTML output.
|
|
7
|
+
const HTML_ESCAPE = {
|
|
8
|
+
'&': '&',
|
|
9
|
+
'<': '<',
|
|
10
|
+
'>': '>',
|
|
11
|
+
'"': '"',
|
|
12
|
+
"'": ''',
|
|
13
|
+
};
|
|
14
|
+
export function escapeHtml(input) {
|
|
15
|
+
return input.replace(/[&<>"']/g, (ch) => HTML_ESCAPE[ch] ?? ch);
|
|
16
|
+
}
|
|
17
|
+
/** Escape a value for use inside a double-quoted HTML attribute. */
|
|
18
|
+
export function escapeAttr(input) {
|
|
19
|
+
return escapeHtml(input);
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=escape-html.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"escape-html.js","sourceRoot":"","sources":["../../src/render/escape-html.ts"],"names":[],"mappings":"AAAA,mDAAmD;AACnD,EAAE;AACF,8EAA8E;AAC9E,4EAA4E;AAC5E,4EAA4E;AAC5E,kEAAkE;AAElE,MAAM,WAAW,GAA2B;IAC1C,GAAG,EAAE,OAAO;IACZ,GAAG,EAAE,MAAM;IACX,GAAG,EAAE,MAAM;IACX,GAAG,EAAE,QAAQ;IACb,GAAG,EAAE,OAAO;CACb,CAAC;AAEF,MAAM,UAAU,UAAU,CAAC,KAAa;IACtC,OAAO,KAAK,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC;AAClE,CAAC;AAED,oEAAoE;AACpE,MAAM,UAAU,UAAU,CAAC,KAAa;IACtC,OAAO,UAAU,CAAC,KAAK,CAAC,CAAC;AAC3B,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/** Built-in order email UI strings (table headers + totals lines). */
|
|
2
|
+
export declare function isPolishLocale(language: string | null | undefined): boolean;
|
|
3
|
+
export interface OrderSummaryColumnLabels {
|
|
4
|
+
sku: string;
|
|
5
|
+
item: string;
|
|
6
|
+
qty: string;
|
|
7
|
+
price: string;
|
|
8
|
+
}
|
|
9
|
+
export declare function orderSummaryColumnLabels(language: string | null | undefined): OrderSummaryColumnLabels;
|
|
10
|
+
export interface OrderTotalsLabels {
|
|
11
|
+
subtotal: string;
|
|
12
|
+
tax: string;
|
|
13
|
+
delivery: string;
|
|
14
|
+
discount: string;
|
|
15
|
+
total: string;
|
|
16
|
+
none: string;
|
|
17
|
+
taxId: string;
|
|
18
|
+
}
|
|
19
|
+
export declare function orderTotalsLabels(language: string | null | undefined): OrderTotalsLabels;
|
|
20
|
+
/** Sample `order.summaryText` for admin HTML preview. */
|
|
21
|
+
export declare function sampleOrderSummaryText(language: string | null | undefined): string;
|
|
22
|
+
export declare function sampleOrderDiscountsText(language: string | null | undefined): string;
|
|
23
|
+
//# sourceMappingURL=order-labels.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"order-labels.d.ts","sourceRoot":"","sources":["../../src/render/order-labels.ts"],"names":[],"mappings":"AAAA,sEAAsE;AAEtE,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAE3E;AAED,MAAM,WAAW,wBAAwB;IACvC,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;CACf;AAED,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAClC,wBAAwB,CAK1B;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf;AAED,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,iBAAiB,CAqBxF;AAED,yDAAyD;AACzD,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,CAQlF;AAED,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,CAEpF"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/** Built-in order email UI strings (table headers + totals lines). */
|
|
2
|
+
export function isPolishLocale(language) {
|
|
3
|
+
return (language ?? '').toLowerCase().startsWith('pl');
|
|
4
|
+
}
|
|
5
|
+
export function orderSummaryColumnLabels(language) {
|
|
6
|
+
if (isPolishLocale(language)) {
|
|
7
|
+
return { sku: 'SKU', item: 'Produkt', qty: 'Ilość', price: 'Cena' };
|
|
8
|
+
}
|
|
9
|
+
return { sku: 'SKU', item: 'Item', qty: 'Qty', price: 'Price' };
|
|
10
|
+
}
|
|
11
|
+
export function orderTotalsLabels(language) {
|
|
12
|
+
if (isPolishLocale(language)) {
|
|
13
|
+
return {
|
|
14
|
+
subtotal: 'Suma częściowa',
|
|
15
|
+
tax: 'VAT',
|
|
16
|
+
delivery: 'Dostawa',
|
|
17
|
+
discount: 'Rabat',
|
|
18
|
+
total: 'Razem',
|
|
19
|
+
none: 'brak',
|
|
20
|
+
taxId: 'NIP',
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
return {
|
|
24
|
+
subtotal: 'Subtotal',
|
|
25
|
+
tax: 'Tax',
|
|
26
|
+
delivery: 'Delivery',
|
|
27
|
+
discount: 'Discount',
|
|
28
|
+
total: 'Total',
|
|
29
|
+
none: 'none',
|
|
30
|
+
taxId: 'Tax ID',
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
/** Sample `order.summaryText` for admin HTML preview. */
|
|
34
|
+
export function sampleOrderSummaryText(language) {
|
|
35
|
+
const L = orderTotalsLabels(language);
|
|
36
|
+
return [
|
|
37
|
+
` ${L.subtotal}: 99.99 PLN`,
|
|
38
|
+
` ${L.tax}: 23.00 PLN`,
|
|
39
|
+
` ${L.delivery}: 15.00 PLN`,
|
|
40
|
+
` ${L.total}: 137.99 PLN`,
|
|
41
|
+
].join('\n');
|
|
42
|
+
}
|
|
43
|
+
export function sampleOrderDiscountsText(language) {
|
|
44
|
+
return ` ${orderTotalsLabels(language).none}`;
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=order-labels.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"order-labels.js","sourceRoot":"","sources":["../../src/render/order-labels.ts"],"names":[],"mappings":"AAAA,sEAAsE;AAEtE,MAAM,UAAU,cAAc,CAAC,QAAmC;IAChE,OAAO,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;AACzD,CAAC;AASD,MAAM,UAAU,wBAAwB,CACtC,QAAmC;IAEnC,IAAI,cAAc,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC7B,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;IACtE,CAAC;IACD,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;AAClE,CAAC;AAYD,MAAM,UAAU,iBAAiB,CAAC,QAAmC;IACnE,IAAI,cAAc,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC7B,OAAO;YACL,QAAQ,EAAE,gBAAgB;YAC1B,GAAG,EAAE,KAAK;YACV,QAAQ,EAAE,SAAS;YACnB,QAAQ,EAAE,OAAO;YACjB,KAAK,EAAE,OAAO;YACd,IAAI,EAAE,MAAM;YACZ,KAAK,EAAE,KAAK;SACb,CAAC;IACJ,CAAC;IACD,OAAO;QACL,QAAQ,EAAE,UAAU;QACpB,GAAG,EAAE,KAAK;QACV,QAAQ,EAAE,UAAU;QACpB,QAAQ,EAAE,UAAU;QACpB,KAAK,EAAE,OAAO;QACd,IAAI,EAAE,MAAM;QACZ,KAAK,EAAE,QAAQ;KAChB,CAAC;AACJ,CAAC;AAED,yDAAyD;AACzD,MAAM,UAAU,sBAAsB,CAAC,QAAmC;IACxE,MAAM,CAAC,GAAG,iBAAiB,CAAC,QAAQ,CAAC,CAAC;IACtC,OAAO;QACL,KAAK,CAAC,CAAC,QAAQ,aAAa;QAC5B,KAAK,CAAC,CAAC,GAAG,aAAa;QACvB,KAAK,CAAC,CAAC,QAAQ,aAAa;QAC5B,KAAK,CAAC,CAAC,KAAK,cAAc;KAC3B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,QAAmC;IAC1E,OAAO,KAAK,iBAAiB,CAAC,QAAQ,CAAC,CAAC,IAAI,EAAE,CAAC;AACjD,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { PuckDataTree } from '../schema/envelope.js';
|
|
2
|
+
import { emailHtmlToPlainText, sanitizeEmailHtml } from './sanitize-email-html.js';
|
|
3
|
+
export interface EmailRenderEmbeds {
|
|
4
|
+
blocks: Record<string, PuckDataTree>;
|
|
5
|
+
templates: Record<string, PuckDataTree>;
|
|
6
|
+
}
|
|
7
|
+
export interface RenderEmailHtmlOptions {
|
|
8
|
+
embeds?: EmailRenderEmbeds;
|
|
9
|
+
accentColor?: string;
|
|
10
|
+
maxDepth?: number;
|
|
11
|
+
/** Wrap the body in a full HTML document shell. Default true. */
|
|
12
|
+
document?: boolean;
|
|
13
|
+
/** Locale for built-in strings (e.g. order table column headers). */
|
|
14
|
+
language?: string;
|
|
15
|
+
}
|
|
16
|
+
export declare function renderEmailHtml(tree: PuckDataTree | null | undefined, opts?: RenderEmailHtmlOptions): string;
|
|
17
|
+
export { emailHtmlToPlainText, sanitizeEmailHtml };
|
|
18
|
+
//# sourceMappingURL=render-email-html.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"render-email-html.d.ts","sourceRoot":"","sources":["../../src/render/render-email-html.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AA+B1D,OAAO,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAOnF,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IACrC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;CACzC;AAED,MAAM,WAAW,sBAAsB;IACrC,MAAM,CAAC,EAAE,iBAAiB,CAAC;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,iEAAiE;IACjE,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,qEAAqE;IACrE,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAqxBD,wBAAgB,eAAe,CAC7B,IAAI,EAAE,YAAY,GAAG,IAAI,GAAG,SAAS,EACrC,IAAI,GAAE,sBAA2B,GAChC,MAAM,CAYR;AAED,OAAO,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,CAAC"}
|