@connectstudio/gastro-ui 0.3.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/CHANGELOG.md +51 -0
- package/README.md +22 -0
- package/dist/client.d.ts +129 -0
- package/dist/client.js +47 -0
- package/dist/client.js.map +1 -0
- package/dist/components/BookingWidget.d.ts +60 -0
- package/dist/components/BookingWidget.js +176 -0
- package/dist/components/BookingWidget.js.map +1 -0
- package/dist/components/Menu.d.ts +28 -0
- package/dist/components/Menu.js +51 -0
- package/dist/components/Menu.js.map +1 -0
- package/dist/dietary.d.ts +37 -0
- package/dist/dietary.js +46 -0
- package/dist/dietary.js.map +1 -0
- package/dist/format.d.ts +11 -0
- package/dist/format.js +40 -0
- package/dist/format.js.map +1 -0
- package/dist/index.d.ts +15 -0
- package/dist/index.js +13 -0
- package/dist/index.js.map +1 -0
- package/dist/lmiv.d.ts +43 -0
- package/dist/lmiv.js +48 -0
- package/dist/lmiv.js.map +1 -0
- package/dist/styles.css +359 -0
- package/dist/theme.d.ts +25 -0
- package/dist/theme.js +42 -0
- package/dist/theme.js.map +1 -0
- package/dist/types.d.ts +56 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/package.json +64 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Menu.js","sourceRoot":"","sources":["../../src/components/Menu.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { type AllergenCode } from './lmiv.js';
|
|
2
|
+
/**
|
|
3
|
+
* Ernährungsangaben (Connect Tables Stufe 1, docs/15): Kostformen + LMIV-Allergene + freier Hinweis.
|
|
4
|
+
* Gleicher Katalog im Widget, in der Public API und im Dashboard — nichts wird doppelt gepflegt.
|
|
5
|
+
*/
|
|
6
|
+
export declare const DIETS: readonly [{
|
|
7
|
+
readonly key: "vegetarian";
|
|
8
|
+
readonly label: "Vegetarisch";
|
|
9
|
+
}, {
|
|
10
|
+
readonly key: "vegan";
|
|
11
|
+
readonly label: "Vegan";
|
|
12
|
+
}, {
|
|
13
|
+
readonly key: "gluten_free";
|
|
14
|
+
readonly label: "Glutenfrei";
|
|
15
|
+
}, {
|
|
16
|
+
readonly key: "lactose_free";
|
|
17
|
+
readonly label: "Laktosefrei";
|
|
18
|
+
}, {
|
|
19
|
+
readonly key: "halal";
|
|
20
|
+
readonly label: "Halal";
|
|
21
|
+
}, {
|
|
22
|
+
readonly key: "kosher";
|
|
23
|
+
readonly label: "Koscher";
|
|
24
|
+
}];
|
|
25
|
+
export type DietKey = (typeof DIETS)[number]['key'];
|
|
26
|
+
export declare const DIET_KEYS: readonly DietKey[];
|
|
27
|
+
export interface DietaryInfo {
|
|
28
|
+
diets: DietKey[];
|
|
29
|
+
allergens: AllergenCode[];
|
|
30
|
+
note?: string;
|
|
31
|
+
}
|
|
32
|
+
export declare function dietLabel(key: string): string;
|
|
33
|
+
export declare function isDietKey(x: unknown): x is DietKey;
|
|
34
|
+
/** Tolerant: unbekannte Werte fallen weg; leer → null. */
|
|
35
|
+
export declare function parseDietary(x: unknown): DietaryInfo | null;
|
|
36
|
+
/** „Vegan · Allergien: Eier, Sellerie · kein Koriander“ — für Listen, Mails, Küchenzettel. */
|
|
37
|
+
export declare function dietarySummary(d: DietaryInfo | null): string;
|
package/dist/dietary.js
ADDED
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { ALLERGEN_CODES, LMIV_ALLERGENS } from './lmiv.js';
|
|
2
|
+
/**
|
|
3
|
+
* Ernährungsangaben (Connect Tables Stufe 1, docs/15): Kostformen + LMIV-Allergene + freier Hinweis.
|
|
4
|
+
* Gleicher Katalog im Widget, in der Public API und im Dashboard — nichts wird doppelt gepflegt.
|
|
5
|
+
*/
|
|
6
|
+
export const DIETS = [
|
|
7
|
+
{ key: 'vegetarian', label: 'Vegetarisch' },
|
|
8
|
+
{ key: 'vegan', label: 'Vegan' },
|
|
9
|
+
{ key: 'gluten_free', label: 'Glutenfrei' },
|
|
10
|
+
{ key: 'lactose_free', label: 'Laktosefrei' },
|
|
11
|
+
{ key: 'halal', label: 'Halal' },
|
|
12
|
+
{ key: 'kosher', label: 'Koscher' },
|
|
13
|
+
];
|
|
14
|
+
export const DIET_KEYS = DIETS.map((d) => d.key);
|
|
15
|
+
export function dietLabel(key) {
|
|
16
|
+
return DIETS.find((d) => d.key === key)?.label ?? key;
|
|
17
|
+
}
|
|
18
|
+
export function isDietKey(x) {
|
|
19
|
+
return typeof x === 'string' && DIET_KEYS.includes(x);
|
|
20
|
+
}
|
|
21
|
+
/** Tolerant: unbekannte Werte fallen weg; leer → null. */
|
|
22
|
+
export function parseDietary(x) {
|
|
23
|
+
if (!x || typeof x !== 'object' || Array.isArray(x))
|
|
24
|
+
return null;
|
|
25
|
+
const o = x;
|
|
26
|
+
const diets = Array.isArray(o.diets) ? [...new Set(o.diets.filter(isDietKey))] : [];
|
|
27
|
+
const allergens = Array.isArray(o.allergens) ? [...new Set(o.allergens.filter((a) => typeof a === 'string' && ALLERGEN_CODES.includes(a)))] : [];
|
|
28
|
+
const note = typeof o.note === 'string' && o.note.trim() ? o.note.trim().slice(0, 300) : undefined;
|
|
29
|
+
if (diets.length === 0 && allergens.length === 0 && !note)
|
|
30
|
+
return null;
|
|
31
|
+
return { diets, allergens, ...(note ? { note } : {}) };
|
|
32
|
+
}
|
|
33
|
+
/** „Vegan · Allergien: Eier, Sellerie · kein Koriander“ — für Listen, Mails, Küchenzettel. */
|
|
34
|
+
export function dietarySummary(d) {
|
|
35
|
+
if (!d)
|
|
36
|
+
return '';
|
|
37
|
+
const parts = [];
|
|
38
|
+
if (d.diets.length)
|
|
39
|
+
parts.push(d.diets.map(dietLabel).join(', '));
|
|
40
|
+
if (d.allergens.length)
|
|
41
|
+
parts.push(`Allergien: ${d.allergens.map((a) => LMIV_ALLERGENS[a]).join(', ')}`);
|
|
42
|
+
if (d.note)
|
|
43
|
+
parts.push(d.note);
|
|
44
|
+
return parts.join(' · ');
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=dietary.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dietary.js","sourceRoot":"","sources":["../src/dietary.ts"],"names":[],"mappings":"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"}
|
package/dist/format.d.ts
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/** Datums-/Zeit-Helfer in der Zeitzone des Betriebs (nie die Zone des Besuchers). */
|
|
2
|
+
export declare function localDateIn(d: Date, timeZone: string): string;
|
|
3
|
+
export declare function addDays(isoDate: string, n: number): string;
|
|
4
|
+
export declare function formatTime(iso: string, timeZone: string, locale?: string): string;
|
|
5
|
+
export declare function formatDayLabel(isoDate: string, todayIso: string, locale?: string): string;
|
|
6
|
+
export declare function formatDateLong(isoDate: string, locale?: string): string;
|
|
7
|
+
/** Kalenderzelle im Datumsstreifen: Wochentag-Kürzel über Tageszahl (docs/10). */
|
|
8
|
+
export declare function formatDayCell(isoDate: string, locale?: string): {
|
|
9
|
+
weekday: string;
|
|
10
|
+
day: string;
|
|
11
|
+
};
|
package/dist/format.js
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/** Datums-/Zeit-Helfer in der Zeitzone des Betriebs (nie die Zone des Besuchers). */
|
|
2
|
+
export function localDateIn(d, timeZone) {
|
|
3
|
+
const parts = new Intl.DateTimeFormat('en-CA', { timeZone, year: 'numeric', month: '2-digit', day: '2-digit' }).formatToParts(d);
|
|
4
|
+
const get = (t) => parts.find((p) => p.type === t)?.value ?? '';
|
|
5
|
+
return `${get('year')}-${get('month')}-${get('day')}`;
|
|
6
|
+
}
|
|
7
|
+
export function addDays(isoDate, n) {
|
|
8
|
+
const d = new Date(`${isoDate}T12:00:00Z`);
|
|
9
|
+
d.setUTCDate(d.getUTCDate() + n);
|
|
10
|
+
return d.toISOString().slice(0, 10);
|
|
11
|
+
}
|
|
12
|
+
export function formatTime(iso, timeZone, locale = 'de-DE') {
|
|
13
|
+
return new Intl.DateTimeFormat(locale, { hour: '2-digit', minute: '2-digit', timeZone }).format(new Date(iso));
|
|
14
|
+
}
|
|
15
|
+
export function formatDayLabel(isoDate, todayIso, locale = 'de-DE') {
|
|
16
|
+
if (isoDate === todayIso)
|
|
17
|
+
return 'Heute';
|
|
18
|
+
if (isoDate === addDays(todayIso, 1))
|
|
19
|
+
return 'Morgen';
|
|
20
|
+
const d = new Date(`${isoDate}T12:00:00Z`);
|
|
21
|
+
const diffDays = Math.round((d.getTime() - new Date(`${todayIso}T12:00:00Z`).getTime()) / 86_400_000);
|
|
22
|
+
const weekday = new Intl.DateTimeFormat(locale, { weekday: 'short', timeZone: 'UTC' }).format(d).replace(/\.$/, '');
|
|
23
|
+
if (diffDays < 7)
|
|
24
|
+
return weekday; // „Fr“, „Sa“ — eindeutig innerhalb einer Woche
|
|
25
|
+
const dayMonth = new Intl.DateTimeFormat(locale, { day: 'numeric', month: 'numeric', timeZone: 'UTC' }).format(d);
|
|
26
|
+
return `${weekday} ${dayMonth}`;
|
|
27
|
+
}
|
|
28
|
+
export function formatDateLong(isoDate, locale = 'de-DE') {
|
|
29
|
+
const d = new Date(`${isoDate}T12:00:00Z`);
|
|
30
|
+
return new Intl.DateTimeFormat(locale, { weekday: 'long', day: 'numeric', month: 'long', timeZone: 'UTC' }).format(d);
|
|
31
|
+
}
|
|
32
|
+
/** Kalenderzelle im Datumsstreifen: Wochentag-Kürzel über Tageszahl (docs/10). */
|
|
33
|
+
export function formatDayCell(isoDate, locale = 'de-DE') {
|
|
34
|
+
const d = new Date(`${isoDate}T12:00:00Z`);
|
|
35
|
+
return {
|
|
36
|
+
weekday: new Intl.DateTimeFormat(locale, { weekday: 'short', timeZone: 'UTC' }).format(d).replace(/\.$/, ''),
|
|
37
|
+
day: new Intl.DateTimeFormat(locale, { day: 'numeric', timeZone: 'UTC' }).format(d),
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=format.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"format.js","sourceRoot":"","sources":["../src/format.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @connectstudio/gastro-ui — Buchungs-Widget + Speisekarte für Kunden-Websites (docs/09).
|
|
3
|
+
* Styling: `import '@connectstudio/gastro-ui/styles.css'` (Default-Theme), Variablen `--cg-*`.
|
|
4
|
+
*/
|
|
5
|
+
export * from './lmiv.js';
|
|
6
|
+
export * from './dietary.js';
|
|
7
|
+
export * from './types.js';
|
|
8
|
+
export * from './theme.js';
|
|
9
|
+
export * from './format.js';
|
|
10
|
+
export { createPublicClient, PublicApiError, DEFAULT_BASE_URL } from './client.js';
|
|
11
|
+
export type { PublicClient, PublicClientOptions, PublicInfo, PublicMenu, PublicAvailability, CreateReservationInput, PublicReservation } from './client.js';
|
|
12
|
+
export { Menu } from './components/Menu.js';
|
|
13
|
+
export type { MenuProps } from './components/Menu.js';
|
|
14
|
+
export { BookingWidget, DEFAULT_LABELS } from './components/BookingWidget.js';
|
|
15
|
+
export type { BookingWidgetProps, BookingWidgetLabels } from './components/BookingWidget.js';
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @connectstudio/gastro-ui — Buchungs-Widget + Speisekarte für Kunden-Websites (docs/09).
|
|
3
|
+
* Styling: `import '@connectstudio/gastro-ui/styles.css'` (Default-Theme), Variablen `--cg-*`.
|
|
4
|
+
*/
|
|
5
|
+
export * from './lmiv.js';
|
|
6
|
+
export * from './dietary.js';
|
|
7
|
+
export * from './types.js';
|
|
8
|
+
export * from './theme.js';
|
|
9
|
+
export * from './format.js';
|
|
10
|
+
export { createPublicClient, PublicApiError, DEFAULT_BASE_URL } from './client.js';
|
|
11
|
+
export { Menu } from './components/Menu.js';
|
|
12
|
+
export { BookingWidget, DEFAULT_LABELS } from './components/BookingWidget.js';
|
|
13
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,cAAc,WAAW,CAAA;AACzB,cAAc,cAAc,CAAA;AAC5B,cAAc,YAAY,CAAA;AAC1B,cAAc,YAAY,CAAA;AAC1B,cAAc,aAAa,CAAA;AAC3B,OAAO,EAAE,kBAAkB,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AAElF,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAA;AAE3C,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAA"}
|
package/dist/lmiv.d.ts
ADDED
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LMIV — die 14 deklarationspflichtigen Allergene (Anhang II LMIV, EU 1169/2011)
|
|
3
|
+
* mit den in der deutschen Gastronomie üblichen Buchstabencodes A–N.
|
|
4
|
+
* Einzige Quelle für Plattform (Dashboard) und Kunden-Websites (<Menu />).
|
|
5
|
+
*/
|
|
6
|
+
export declare const LMIV_ALLERGENS: {
|
|
7
|
+
readonly A: "Glutenhaltiges Getreide";
|
|
8
|
+
readonly B: "Krebstiere";
|
|
9
|
+
readonly C: "Eier";
|
|
10
|
+
readonly D: "Fisch";
|
|
11
|
+
readonly E: "Erdnüsse";
|
|
12
|
+
readonly F: "Sojabohnen";
|
|
13
|
+
readonly G: "Milch (einschließlich Laktose)";
|
|
14
|
+
readonly H: "Schalenfrüchte";
|
|
15
|
+
readonly I: "Sellerie";
|
|
16
|
+
readonly J: "Senf";
|
|
17
|
+
readonly K: "Sesamsamen";
|
|
18
|
+
readonly L: "Schwefeldioxid und Sulfite";
|
|
19
|
+
readonly M: "Lupinen";
|
|
20
|
+
readonly N: "Weichtiere";
|
|
21
|
+
};
|
|
22
|
+
export type AllergenCode = keyof typeof LMIV_ALLERGENS;
|
|
23
|
+
export declare const ALLERGEN_CODES: AllergenCode[];
|
|
24
|
+
/** Zusatzstoffe (Kennzeichnung nach ZZulV / LMZDV), übliche Ziffernkennzeichnung. */
|
|
25
|
+
export declare const ADDITIVES: {
|
|
26
|
+
readonly '1': "mit Farbstoff";
|
|
27
|
+
readonly '2': "mit Konservierungsstoff";
|
|
28
|
+
readonly '3': "mit Antioxidationsmittel";
|
|
29
|
+
readonly '4': "mit Geschmacksverstärker";
|
|
30
|
+
readonly '5': "geschwefelt";
|
|
31
|
+
readonly '6': "geschwärzt";
|
|
32
|
+
readonly '7': "gewachst";
|
|
33
|
+
readonly '8': "mit Phosphat";
|
|
34
|
+
readonly '9': "mit Süßungsmittel(n)";
|
|
35
|
+
readonly '10': "enthält eine Phenylalaninquelle";
|
|
36
|
+
readonly '11': "koffeinhaltig";
|
|
37
|
+
readonly '12': "chininhaltig";
|
|
38
|
+
readonly '13': "mit Taurin";
|
|
39
|
+
};
|
|
40
|
+
export type AdditiveCode = keyof typeof ADDITIVES;
|
|
41
|
+
export declare function isAllergenCode(x: string): x is AllergenCode;
|
|
42
|
+
export declare function allergenLabel(code: string): string;
|
|
43
|
+
export declare function additiveLabel(code: string): string;
|
package/dist/lmiv.js
ADDED
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LMIV — die 14 deklarationspflichtigen Allergene (Anhang II LMIV, EU 1169/2011)
|
|
3
|
+
* mit den in der deutschen Gastronomie üblichen Buchstabencodes A–N.
|
|
4
|
+
* Einzige Quelle für Plattform (Dashboard) und Kunden-Websites (<Menu />).
|
|
5
|
+
*/
|
|
6
|
+
export const LMIV_ALLERGENS = {
|
|
7
|
+
A: 'Glutenhaltiges Getreide',
|
|
8
|
+
B: 'Krebstiere',
|
|
9
|
+
C: 'Eier',
|
|
10
|
+
D: 'Fisch',
|
|
11
|
+
E: 'Erdnüsse',
|
|
12
|
+
F: 'Sojabohnen',
|
|
13
|
+
G: 'Milch (einschließlich Laktose)',
|
|
14
|
+
H: 'Schalenfrüchte',
|
|
15
|
+
I: 'Sellerie',
|
|
16
|
+
J: 'Senf',
|
|
17
|
+
K: 'Sesamsamen',
|
|
18
|
+
L: 'Schwefeldioxid und Sulfite',
|
|
19
|
+
M: 'Lupinen',
|
|
20
|
+
N: 'Weichtiere',
|
|
21
|
+
};
|
|
22
|
+
export const ALLERGEN_CODES = Object.keys(LMIV_ALLERGENS);
|
|
23
|
+
/** Zusatzstoffe (Kennzeichnung nach ZZulV / LMZDV), übliche Ziffernkennzeichnung. */
|
|
24
|
+
export const ADDITIVES = {
|
|
25
|
+
'1': 'mit Farbstoff',
|
|
26
|
+
'2': 'mit Konservierungsstoff',
|
|
27
|
+
'3': 'mit Antioxidationsmittel',
|
|
28
|
+
'4': 'mit Geschmacksverstärker',
|
|
29
|
+
'5': 'geschwefelt',
|
|
30
|
+
'6': 'geschwärzt',
|
|
31
|
+
'7': 'gewachst',
|
|
32
|
+
'8': 'mit Phosphat',
|
|
33
|
+
'9': 'mit Süßungsmittel(n)',
|
|
34
|
+
'10': 'enthält eine Phenylalaninquelle',
|
|
35
|
+
'11': 'koffeinhaltig',
|
|
36
|
+
'12': 'chininhaltig',
|
|
37
|
+
'13': 'mit Taurin',
|
|
38
|
+
};
|
|
39
|
+
export function isAllergenCode(x) {
|
|
40
|
+
return x in LMIV_ALLERGENS;
|
|
41
|
+
}
|
|
42
|
+
export function allergenLabel(code) {
|
|
43
|
+
return isAllergenCode(code) ? LMIV_ALLERGENS[code] : code;
|
|
44
|
+
}
|
|
45
|
+
export function additiveLabel(code) {
|
|
46
|
+
return code in ADDITIVES ? ADDITIVES[code] : code;
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=lmiv.js.map
|
package/dist/lmiv.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lmiv.js","sourceRoot":"","sources":["../src/lmiv.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,CAAC,EAAE,yBAAyB;IAC5B,CAAC,EAAE,YAAY;IACf,CAAC,EAAE,MAAM;IACT,CAAC,EAAE,OAAO;IACV,CAAC,EAAE,UAAU;IACb,CAAC,EAAE,YAAY;IACf,CAAC,EAAE,gCAAgC;IACnC,CAAC,EAAE,gBAAgB;IACnB,CAAC,EAAE,UAAU;IACb,CAAC,EAAE,MAAM;IACT,CAAC,EAAE,YAAY;IACf,CAAC,EAAE,4BAA4B;IAC/B,CAAC,EAAE,SAAS;IACZ,CAAC,EAAE,YAAY;CACP,CAAA;AAIV,MAAM,CAAC,MAAM,cAAc,GAAG,MAAM,CAAC,IAAI,CAAC,cAAc,CAAmB,CAAA;AAE3E,qFAAqF;AACrF,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB,GAAG,EAAE,eAAe;IACpB,GAAG,EAAE,yBAAyB;IAC9B,GAAG,EAAE,0BAA0B;IAC/B,GAAG,EAAE,0BAA0B;IAC/B,GAAG,EAAE,aAAa;IAClB,GAAG,EAAE,YAAY;IACjB,GAAG,EAAE,UAAU;IACf,GAAG,EAAE,cAAc;IACnB,GAAG,EAAE,sBAAsB;IAC3B,IAAI,EAAE,iCAAiC;IACvC,IAAI,EAAE,eAAe;IACrB,IAAI,EAAE,cAAc;IACpB,IAAI,EAAE,YAAY;CACV,CAAA;AAIV,MAAM,UAAU,cAAc,CAAC,CAAS;IACtC,OAAO,CAAC,IAAI,cAAc,CAAA;AAC5B,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,IAAY;IACxC,OAAO,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;AAC3D,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,IAAY;IACxC,OAAO,IAAI,IAAI,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,IAAoB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;AACnE,CAAC"}
|