@cloudgrid-io/ui 0.31.3 → 0.31.5
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/README.md +32 -0
- package/dist/badge/brand.d.ts +8 -0
- package/dist/badge/brand.d.ts.map +1 -0
- package/dist/badge/brand.js +22 -0
- package/dist/badge/brand.js.map +1 -0
- package/dist/badge/css-base.d.ts +25 -0
- package/dist/badge/css-base.d.ts.map +1 -0
- package/dist/badge/css-base.js +103 -0
- package/dist/badge/css-base.js.map +1 -0
- package/dist/badge/css-owner.d.ts +7 -0
- package/dist/badge/css-owner.d.ts.map +1 -0
- package/dist/badge/css-owner.js +128 -0
- package/dist/badge/css-owner.js.map +1 -0
- package/dist/badge/css-visitor.d.ts +7 -0
- package/dist/badge/css-visitor.d.ts.map +1 -0
- package/dist/badge/css-visitor.js +75 -0
- package/dist/badge/css-visitor.js.map +1 -0
- package/dist/badge/html.d.ts +26 -0
- package/dist/badge/html.d.ts.map +1 -0
- package/dist/badge/html.js +55 -0
- package/dist/badge/html.js.map +1 -0
- package/dist/badge/index.d.ts +43 -0
- package/dist/badge/index.d.ts.map +1 -0
- package/dist/badge/index.js +46 -0
- package/dist/badge/index.js.map +1 -0
- package/dist/badge/marks.d.ts +45 -0
- package/dist/badge/marks.d.ts.map +1 -0
- package/dist/badge/marks.js +126 -0
- package/dist/badge/marks.js.map +1 -0
- package/dist/badge/owner.d.ts +213 -0
- package/dist/badge/owner.d.ts.map +1 -0
- package/dist/badge/owner.js +309 -0
- package/dist/badge/owner.js.map +1 -0
- package/dist/badge/palette.d.ts +23 -0
- package/dist/badge/palette.d.ts.map +1 -0
- package/dist/badge/palette.js +86 -0
- package/dist/badge/palette.js.map +1 -0
- package/dist/badge/root.d.ts +24 -0
- package/dist/badge/root.d.ts.map +1 -0
- package/dist/badge/root.js +11 -0
- package/dist/badge/root.js.map +1 -0
- package/dist/badge/shared.d.ts +56 -0
- package/dist/badge/shared.d.ts.map +1 -0
- package/dist/badge/shared.js +53 -0
- package/dist/badge/shared.js.map +1 -0
- package/dist/badge/visitor.d.ts +96 -0
- package/dist/badge/visitor.d.ts.map +1 -0
- package/dist/badge/visitor.js +119 -0
- package/dist/badge/visitor.js.map +1 -0
- package/dist/blocks/confirm-delete-dialog.d.ts +81 -0
- package/dist/blocks/confirm-delete-dialog.d.ts.map +1 -0
- package/dist/blocks/confirm-delete-dialog.js +89 -0
- package/dist/blocks/confirm-delete-dialog.js.map +1 -0
- package/dist/blocks/entity-status.d.ts +44 -1
- package/dist/blocks/entity-status.d.ts.map +1 -1
- package/dist/blocks/entity-status.js +26 -1
- package/dist/blocks/entity-status.js.map +1 -1
- package/dist/blocks/expiry-notice.d.ts +86 -0
- package/dist/blocks/expiry-notice.d.ts.map +1 -0
- package/dist/blocks/expiry-notice.js +81 -0
- package/dist/blocks/expiry-notice.js.map +1 -0
- package/dist/blocks/icons.d.ts +22 -0
- package/dist/blocks/icons.d.ts.map +1 -1
- package/dist/blocks/icons.js +22 -0
- package/dist/blocks/icons.js.map +1 -1
- package/dist/blocks/notification-row.d.ts +88 -0
- package/dist/blocks/notification-row.d.ts.map +1 -0
- package/dist/blocks/notification-row.js +32 -0
- package/dist/blocks/notification-row.js.map +1 -0
- package/dist/blocks/phosphor-marks.d.ts +10 -0
- package/dist/blocks/phosphor-marks.d.ts.map +1 -1
- package/dist/blocks/phosphor-marks.js +15 -0
- package/dist/blocks/phosphor-marks.js.map +1 -1
- package/dist/blocks/shelf.d.ts +384 -0
- package/dist/blocks/shelf.d.ts.map +1 -0
- package/dist/blocks/shelf.js +489 -0
- package/dist/blocks/shelf.js.map +1 -0
- package/dist/brand/badge/manrope-latin-wght-normal.woff2 +0 -0
- package/dist/brand/badge/space-grotesk-latin-wght-normal.woff2 +0 -0
- package/dist/brand/email/headline-activity.png +0 -0
- package/dist/brand/email/headline-expired.png +0 -0
- package/dist/brand/email/headline-expires-tomorrow.png +0 -0
- package/dist/brand/email/headline-expiring-soon.png +0 -0
- package/dist/brand/email/headline-invited.png +0 -0
- package/dist/brand/email/headline-sign-in-code.png +0 -0
- package/dist/brand/email/mesh.png +0 -0
- package/dist/brand/email/wordmark.png +0 -0
- package/dist/email/assets.d.ts +50 -0
- package/dist/email/assets.d.ts.map +1 -0
- package/dist/email/assets.js +16 -0
- package/dist/email/assets.js.map +1 -0
- package/dist/email/index.d.ts +204 -0
- package/dist/email/index.d.ts.map +1 -0
- package/dist/email/index.js +429 -0
- package/dist/email/index.js.map +1 -0
- package/dist/email/palette.d.ts +40 -0
- package/dist/email/palette.d.ts.map +1 -0
- package/dist/email/palette.js +44 -0
- package/dist/email/palette.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -1
- package/dist/shadcn.css +41 -0
- package/dist/ui/dropdown-menu.d.ts +8 -1
- package/dist/ui/dropdown-menu.d.ts.map +1 -1
- package/dist/ui/dropdown-menu.js +9 -2
- package/dist/ui/dropdown-menu.js.map +1 -1
- package/package.json +17 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"assets.d.ts","sourceRoot":"","sources":["../../src/email/assets.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,cAAc;;;;;CAA8E,CAAA;AAEzG,eAAO,MAAM,UAAU;;;CAA0C,CAAA;AAEjE,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAOlB,CAAA;AAEV,MAAM,MAAM,aAAa,GAAG,MAAM,OAAO,eAAe,CAAA"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
// GENERATED by scripts/generate-email-assets.mjs. Do not edit; regenerate.
|
|
2
|
+
//
|
|
3
|
+
// The email's images, in packages/ui/src/brand/email/ (shipped as
|
|
4
|
+
// dist/brand/email/). Each PNG is 2x the width and height below; the email shows
|
|
5
|
+
// it at these sizes. A headline's `text` is its alt text.
|
|
6
|
+
export const EMAIL_WORDMARK = { file: "wordmark.png", width: 110, height: 26, alt: "CloudGrid" };
|
|
7
|
+
export const EMAIL_MESH = { file: "mesh.png", size: 22 };
|
|
8
|
+
export const EMAIL_HEADLINES = {
|
|
9
|
+
"expiring-soon": { text: "EXPIRING SOON", file: "headline-expiring-soon.png", width: 236, height: 47 },
|
|
10
|
+
"expires-tomorrow": { text: "EXPIRES TOMORROW", file: "headline-expires-tomorrow.png", width: 314, height: 47 },
|
|
11
|
+
"expired": { text: "IT EXPIRED", file: "headline-expired.png", width: 165, height: 47 },
|
|
12
|
+
"sign-in-code": { text: "YOUR SIGN-IN CODE", file: "headline-sign-in-code.png", width: 297, height: 47 },
|
|
13
|
+
"invited": { text: "YOU'RE INVITED", file: "headline-invited.png", width: 236, height: 47 },
|
|
14
|
+
"activity": { text: "WHAT'S HAPPENING", file: "headline-activity.png", width: 301, height: 47 },
|
|
15
|
+
};
|
|
16
|
+
//# sourceMappingURL=assets.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"assets.js","sourceRoot":"","sources":["../../src/email/assets.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAC3E,EAAE;AACF,kEAAkE;AAClE,iFAAiF;AACjF,0DAA0D;AAE1D,MAAM,CAAC,MAAM,cAAc,GAAG,EAAE,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,GAAG,EAAE,WAAW,EAAW,CAAA;AAEzG,MAAM,CAAC,MAAM,UAAU,GAAG,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,EAAE,EAAW,CAAA;AAEjE,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,eAAe,EAAE,EAAE,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,4BAA4B,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE;IACtG,kBAAkB,EAAE,EAAE,IAAI,EAAE,kBAAkB,EAAE,IAAI,EAAE,+BAA+B,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE;IAC/G,SAAS,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,sBAAsB,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE;IACvF,cAAc,EAAE,EAAE,IAAI,EAAE,mBAAmB,EAAE,IAAI,EAAE,2BAA2B,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE;IACxG,SAAS,EAAE,EAAE,IAAI,EAAE,gBAAgB,EAAE,IAAI,EAAE,sBAAsB,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE;IAC3F,UAAU,EAAE,EAAE,IAAI,EAAE,kBAAkB,EAAE,IAAI,EAAE,uBAAuB,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE;CACvF,CAAA"}
|
|
@@ -0,0 +1,204 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* THE CLOUDGRID EMAIL LAYOUT (ui#295). Content in, `{ html, text }` out.
|
|
3
|
+
*
|
|
4
|
+
* One layout for every email CloudGrid sends: the sign-in code, invites,
|
|
5
|
+
* reactions, activity and the expiry warnings. The platform calls it; the
|
|
6
|
+
* styleguide previews its real output (`/gallery/email`), so what a reviewer
|
|
7
|
+
* sees is the string the platform will send.
|
|
8
|
+
*
|
|
9
|
+
* ```ts
|
|
10
|
+
* import { renderEmail } from "@cloudgrid-io/ui/email"
|
|
11
|
+
* const { html, text } = renderEmail({ headline: "expiring-soon", title, points, action, note, footer })
|
|
12
|
+
* ```
|
|
13
|
+
*
|
|
14
|
+
* ## It speaks the library's language (founder revision, 2026-10-11)
|
|
15
|
+
*
|
|
16
|
+
* The first cut was a generic transactional email, and the founder rejected it:
|
|
17
|
+
* "it doesn't use our logo or our language". So every element here is taken
|
|
18
|
+
* from a library element and its tokens, the way the Console's sign-in and the
|
|
19
|
+
* `EmptyCreations` block draw them:
|
|
20
|
+
*
|
|
21
|
+
* the logo `Logo`'s own paths, as a PNG (wordmark.png), top left
|
|
22
|
+
* the headline Tanker, uppercase, brand purple, at the sign-in's size
|
|
23
|
+
* ("READY TO PLUG IN?"), as a PNG per headline, its words as
|
|
24
|
+
* styled alt text
|
|
25
|
+
* the body Space Grotesk where the client loads web fonts, else the
|
|
26
|
+
* system stack; the title is the first line under the
|
|
27
|
+
* headline, at the sign-in subline's 19px
|
|
28
|
+
* the button the `cta` button as `EmptyCreations` sets it: teal, ink
|
|
29
|
+
* label in Manrope bold, 40px tall, 16px corners, 20px sides
|
|
30
|
+
* an item the entity card: the identity media (field colour, the grid,
|
|
31
|
+
* the monogram tile), name and kind, and the expiring status
|
|
32
|
+
* pill exactly as `EntityExpiryStatus` draws it
|
|
33
|
+
* the frame lavender ground, the white container at the library's
|
|
34
|
+
* container radius, centred like the sign-in and the empty
|
|
35
|
+
* state, and the sign-in's footer
|
|
36
|
+
*
|
|
37
|
+
* ## No React, no dependencies
|
|
38
|
+
*
|
|
39
|
+
* The API runs this, not a browser. The module imports only its two generated
|
|
40
|
+
* siblings, `./palette.js` (colours and shape, from tokens.css at build) and
|
|
41
|
+
* `./assets.js` (the image manifest, from scripts/generate-email-assets.mjs).
|
|
42
|
+
* `test/email.test.mjs` asserts that.
|
|
43
|
+
*
|
|
44
|
+
* ## Email clients
|
|
45
|
+
*
|
|
46
|
+
* Outlook for Windows renders with Word: no flexbox, no `var()`, no rounded
|
|
47
|
+
* corners, no background images on a cell without VML. Gmail strips `<link>`
|
|
48
|
+
* and every custom property, and loads no web font. So: nested tables, inline
|
|
49
|
+
* styles, colours as hex and again as `bgcolor`, a fixed 560px column inside an
|
|
50
|
+
* Outlook-only table, and pictures for the two things a system font cannot be
|
|
51
|
+
* (the wordmark and the Tanker headline). Outlook draws the corners square and
|
|
52
|
+
* the identity field flat; everything else holds.
|
|
53
|
+
*
|
|
54
|
+
* ## Images off
|
|
55
|
+
*
|
|
56
|
+
* The wordmark and headline carry alt text styled as what they show (purple,
|
|
57
|
+
* bold, uppercase for a headline), so an inbox that blocks images still shows a
|
|
58
|
+
* purple "EXPIRING SOON" where the picture was. The identity media keeps its
|
|
59
|
+
* field colour without the grid; the monogram tile is not an image at all.
|
|
60
|
+
*
|
|
61
|
+
* ## Assets: the sender names the host, or there are none
|
|
62
|
+
*
|
|
63
|
+
* The library never chooses where a recipient's mail client fetches anything
|
|
64
|
+
* from (Gilad's review of ui#296: a third-party host sees every recipient's IP
|
|
65
|
+
* and open time, is blocked on some networks, and costs deliverability).
|
|
66
|
+
*
|
|
67
|
+
* - `assetBaseUrl` set: the wordmark, the headline and the grid tile load from
|
|
68
|
+
* there. The sender serves this package's `dist/brand/email/*` from its own
|
|
69
|
+
* domain and passes that base.
|
|
70
|
+
* - `assetBaseUrl` absent: the email is image-free for every client. The
|
|
71
|
+
* wordmark and headline are live text, the treatment Outlook gets anyway,
|
|
72
|
+
* and the identity field is plain colour. Nothing is requested from any
|
|
73
|
+
* host the caller did not name.
|
|
74
|
+
* - `webFontsUrl` likewise: the brand faces load only from a stylesheet the
|
|
75
|
+
* caller names; without it the system stack renders.
|
|
76
|
+
* - An item's `imageUrl` is the caller's own URL and is used as given.
|
|
77
|
+
*
|
|
78
|
+
* ## Escaping
|
|
79
|
+
*
|
|
80
|
+
* Every string the caller passes is text, never HTML: `&`, `<`, `>`, `"` and
|
|
81
|
+
* `'` are escaped wherever they land. A URL is percent-encoded where it is not
|
|
82
|
+
* already, then attribute-escaped. A URL with any scheme other than `http`,
|
|
83
|
+
* `https` or `mailto` (a `javascript:` link, say) is replaced by `#`.
|
|
84
|
+
*/
|
|
85
|
+
import { EMAIL_HEADLINES, type EmailHeadline } from "./assets.js";
|
|
86
|
+
export type { EmailHeadline };
|
|
87
|
+
export { EMAIL_HEADLINES };
|
|
88
|
+
export type EmailTone = "page" | "app" | "agent";
|
|
89
|
+
export type EmailLink = {
|
|
90
|
+
label: string;
|
|
91
|
+
url: string;
|
|
92
|
+
};
|
|
93
|
+
/** The `EntityExpiryStatus` pill: amber `soon`, red `urgent`. */
|
|
94
|
+
export type EmailStatus = {
|
|
95
|
+
label: string;
|
|
96
|
+
tone: "soon" | "urgent";
|
|
97
|
+
};
|
|
98
|
+
export interface EmailItem {
|
|
99
|
+
/** "Pricing Grid" */
|
|
100
|
+
name: string;
|
|
101
|
+
/** The kind line. "Page · not opened in 25 days" */
|
|
102
|
+
detail: string;
|
|
103
|
+
/** "PG". One or two characters; anything longer is cut to two. */
|
|
104
|
+
monogram: string;
|
|
105
|
+
/** The identity colour. Absent: the app's purple. */
|
|
106
|
+
tone?: EmailTone;
|
|
107
|
+
/** The status pill, e.g. `{ label: "Expires tomorrow", tone: "urgent" }`. */
|
|
108
|
+
status?: EmailStatus;
|
|
109
|
+
/** The first cut's name for `status`. Still accepted; `status` wins when both are set. */
|
|
110
|
+
badge?: EmailStatus;
|
|
111
|
+
/** A button on the item itself, e.g. Keep it. */
|
|
112
|
+
action?: EmailLink;
|
|
113
|
+
/**
|
|
114
|
+
* The entity's picture, its public OG card (1200x630):
|
|
115
|
+
* `https://api.cloudgrid.io/api/v2/entities/<id>/og.png`. Shown full width in
|
|
116
|
+
* the card's media area, alt = the item's name. Absent (a never-published app
|
|
117
|
+
* has no screenshot), the tinted grid and the monogram tile show instead; with
|
|
118
|
+
* images off, the tinted grid shows behind the alt text.
|
|
119
|
+
*/
|
|
120
|
+
imageUrl?: string;
|
|
121
|
+
}
|
|
122
|
+
export interface EmailContent {
|
|
123
|
+
/** Hidden inbox preview text. */
|
|
124
|
+
preheader?: string;
|
|
125
|
+
/** The Tanker display line, from the fixed set. A pre-made image; its words are the alt text. */
|
|
126
|
+
headline?: EmailHeadline;
|
|
127
|
+
/**
|
|
128
|
+
* The first body line, under the headline: "Pricing Grid expires in 5 days."
|
|
129
|
+
* Without a headline it is the email's heading. Also a good default subject.
|
|
130
|
+
*/
|
|
131
|
+
title: string;
|
|
132
|
+
/**
|
|
133
|
+
* Short scannable facts under the title, as a compact bulleted list:
|
|
134
|
+
* "Not opened in 25 days", "Expires Friday, October 16". The expiry emails
|
|
135
|
+
* use these instead of `lines` (founder, 2026-10-11: "use short points").
|
|
136
|
+
*/
|
|
137
|
+
points?: string[];
|
|
138
|
+
/** Paragraphs, plain text, for the emails that need prose. */
|
|
139
|
+
lines?: string[];
|
|
140
|
+
items?: EmailItem[];
|
|
141
|
+
/** A sign-in code, e.g. "482-913". */
|
|
142
|
+
code?: string;
|
|
143
|
+
/** The one main button. */
|
|
144
|
+
action?: EmailLink;
|
|
145
|
+
/** One small muted line directly under the main button: "Kept pages don't expire." */
|
|
146
|
+
note?: string;
|
|
147
|
+
/** "Or open it first:" and a link. */
|
|
148
|
+
secondary?: {
|
|
149
|
+
prefix: string;
|
|
150
|
+
link: EmailLink;
|
|
151
|
+
};
|
|
152
|
+
/** Lines of small print, then an optional link with a suffix. The copyright line follows them. */
|
|
153
|
+
footer: {
|
|
154
|
+
lines: string[];
|
|
155
|
+
link?: EmailLink & {
|
|
156
|
+
suffix?: string;
|
|
157
|
+
};
|
|
158
|
+
};
|
|
159
|
+
/**
|
|
160
|
+
* Absolute base URL where the sender serves this package's `brand/email/*`
|
|
161
|
+
* files (the wordmark, the headline images, the grid tile), on its own domain.
|
|
162
|
+
* No default: without it the email is image-free, with the wordmark and
|
|
163
|
+
* headline as live text.
|
|
164
|
+
*/
|
|
165
|
+
assetBaseUrl?: string;
|
|
166
|
+
/**
|
|
167
|
+
* A stylesheet that loads Space Grotesk and Manrope, on a host the sender
|
|
168
|
+
* chooses (its own, or Google Fonts if it accepts that). No default: without
|
|
169
|
+
* it the system stack renders, which is what Gmail and Outlook do anyway.
|
|
170
|
+
*/
|
|
171
|
+
webFontsUrl?: string;
|
|
172
|
+
/**
|
|
173
|
+
* The first cut's mark image. Accepted and ignored: the email's logo is the
|
|
174
|
+
* wordmark now (founder revision, 2026-10-11).
|
|
175
|
+
* @deprecated
|
|
176
|
+
*/
|
|
177
|
+
markUrl?: string;
|
|
178
|
+
}
|
|
179
|
+
export interface RenderedEmail {
|
|
180
|
+
html: string;
|
|
181
|
+
text: string;
|
|
182
|
+
}
|
|
183
|
+
/**
|
|
184
|
+
* The Google Fonts stylesheet for the two faces the email names, for a sender
|
|
185
|
+
* that chooses to accept Google as a host. Passed as `webFontsUrl`; never used
|
|
186
|
+
* unless passed.
|
|
187
|
+
*/
|
|
188
|
+
export declare const GOOGLE_FONTS_EMAIL_CSS = "https://fonts.googleapis.com/css2?family=Space+Grotesk:wght@400;500;600;700&family=Manrope:wght@500;600;700&display=swap";
|
|
189
|
+
/** Text to HTML text, safe in an element body and in a quoted attribute. */
|
|
190
|
+
export declare function escapeHtml(value: string): string;
|
|
191
|
+
/**
|
|
192
|
+
* A URL, percent-encoded where it is not already, with any scheme other than
|
|
193
|
+
* http, https or mailto replaced by `#`. Returns the URL for a text body; pass
|
|
194
|
+
* the result through `escapeHtml` before putting it in an attribute.
|
|
195
|
+
*/
|
|
196
|
+
export declare function safeUrl(url: string): string;
|
|
197
|
+
/**
|
|
198
|
+
* The width an item's picture is drawn at: the 560 column, less the container's
|
|
199
|
+
* 1px border and 40px padding a side, less the card's own 1px border.
|
|
200
|
+
*/
|
|
201
|
+
export declare const EMAIL_ITEM_IMAGE_WIDTH: number;
|
|
202
|
+
/** Render one email. Pure: the same content always gives the same strings (within a year). */
|
|
203
|
+
export declare function renderEmail(content: EmailContent): RenderedEmail;
|
|
204
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/email/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmFG;AAEH,OAAO,EAAE,eAAe,EAA8B,KAAK,aAAa,EAAE,MAAM,aAAa,CAAA;AAG7F,YAAY,EAAE,aAAa,EAAE,CAAA;AAC7B,OAAO,EAAE,eAAe,EAAE,CAAA;AAE1B,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,KAAK,GAAG,OAAO,CAAA;AAEhD,MAAM,MAAM,SAAS,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAAA;AAEtD,iEAAiE;AACjE,MAAM,MAAM,WAAW,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,CAAA;CAAE,CAAA;AAEpE,MAAM,WAAW,SAAS;IACxB,qBAAqB;IACrB,IAAI,EAAE,MAAM,CAAA;IACZ,oDAAoD;IACpD,MAAM,EAAE,MAAM,CAAA;IACd,kEAAkE;IAClE,QAAQ,EAAE,MAAM,CAAA;IAChB,qDAAqD;IACrD,IAAI,CAAC,EAAE,SAAS,CAAA;IAChB,6EAA6E;IAC7E,MAAM,CAAC,EAAE,WAAW,CAAA;IACpB,0FAA0F;IAC1F,KAAK,CAAC,EAAE,WAAW,CAAA;IACnB,iDAAiD;IACjD,MAAM,CAAC,EAAE,SAAS,CAAA;IAClB;;;;;;OAMG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB;AAED,MAAM,WAAW,YAAY;IAC3B,iCAAiC;IACjC,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,iGAAiG;IACjG,QAAQ,CAAC,EAAE,aAAa,CAAA;IACxB;;;OAGG;IACH,KAAK,EAAE,MAAM,CAAA;IACb;;;;OAIG;IACH,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;IACjB,8DAA8D;IAC9D,KAAK,CAAC,EAAE,MAAM,EAAE,CAAA;IAChB,KAAK,CAAC,EAAE,SAAS,EAAE,CAAA;IACnB,sCAAsC;IACtC,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,2BAA2B;IAC3B,MAAM,CAAC,EAAE,SAAS,CAAA;IAClB,sFAAsF;IACtF,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,sCAAsC;IACtC,SAAS,CAAC,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,SAAS,CAAA;KAAE,CAAA;IAC/C,kGAAkG;IAClG,MAAM,EAAE;QAAE,KAAK,EAAE,MAAM,EAAE,CAAC;QAAC,IAAI,CAAC,EAAE,SAAS,GAAG;YAAE,MAAM,CAAC,EAAE,MAAM,CAAA;SAAE,CAAA;KAAE,CAAA;IACnE;;;;;OAKG;IACH,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB;;;;OAIG;IACH,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB;;;;OAIG;IACH,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;CACb;AAED;;;;GAIG;AACH,eAAO,MAAM,sBAAsB,6HACyF,CAAA;AAY5H,4EAA4E;AAC5E,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEhD;AAOD;;;;GAIG;AACH,wBAAgB,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAwB3C;AAuCD;;;GAGG;AACH,eAAO,MAAM,sBAAsB,QAA6B,CAAA;AA2ThE,8FAA8F;AAC9F,wBAAgB,WAAW,CAAC,OAAO,EAAE,YAAY,GAAG,aAAa,CAEhE"}
|