@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.
Files changed (109) hide show
  1. package/README.md +32 -0
  2. package/dist/badge/brand.d.ts +8 -0
  3. package/dist/badge/brand.d.ts.map +1 -0
  4. package/dist/badge/brand.js +22 -0
  5. package/dist/badge/brand.js.map +1 -0
  6. package/dist/badge/css-base.d.ts +25 -0
  7. package/dist/badge/css-base.d.ts.map +1 -0
  8. package/dist/badge/css-base.js +103 -0
  9. package/dist/badge/css-base.js.map +1 -0
  10. package/dist/badge/css-owner.d.ts +7 -0
  11. package/dist/badge/css-owner.d.ts.map +1 -0
  12. package/dist/badge/css-owner.js +128 -0
  13. package/dist/badge/css-owner.js.map +1 -0
  14. package/dist/badge/css-visitor.d.ts +7 -0
  15. package/dist/badge/css-visitor.d.ts.map +1 -0
  16. package/dist/badge/css-visitor.js +75 -0
  17. package/dist/badge/css-visitor.js.map +1 -0
  18. package/dist/badge/html.d.ts +26 -0
  19. package/dist/badge/html.d.ts.map +1 -0
  20. package/dist/badge/html.js +55 -0
  21. package/dist/badge/html.js.map +1 -0
  22. package/dist/badge/index.d.ts +43 -0
  23. package/dist/badge/index.d.ts.map +1 -0
  24. package/dist/badge/index.js +46 -0
  25. package/dist/badge/index.js.map +1 -0
  26. package/dist/badge/marks.d.ts +45 -0
  27. package/dist/badge/marks.d.ts.map +1 -0
  28. package/dist/badge/marks.js +126 -0
  29. package/dist/badge/marks.js.map +1 -0
  30. package/dist/badge/owner.d.ts +213 -0
  31. package/dist/badge/owner.d.ts.map +1 -0
  32. package/dist/badge/owner.js +309 -0
  33. package/dist/badge/owner.js.map +1 -0
  34. package/dist/badge/palette.d.ts +23 -0
  35. package/dist/badge/palette.d.ts.map +1 -0
  36. package/dist/badge/palette.js +86 -0
  37. package/dist/badge/palette.js.map +1 -0
  38. package/dist/badge/root.d.ts +24 -0
  39. package/dist/badge/root.d.ts.map +1 -0
  40. package/dist/badge/root.js +11 -0
  41. package/dist/badge/root.js.map +1 -0
  42. package/dist/badge/shared.d.ts +56 -0
  43. package/dist/badge/shared.d.ts.map +1 -0
  44. package/dist/badge/shared.js +53 -0
  45. package/dist/badge/shared.js.map +1 -0
  46. package/dist/badge/visitor.d.ts +96 -0
  47. package/dist/badge/visitor.d.ts.map +1 -0
  48. package/dist/badge/visitor.js +119 -0
  49. package/dist/badge/visitor.js.map +1 -0
  50. package/dist/blocks/confirm-delete-dialog.d.ts +81 -0
  51. package/dist/blocks/confirm-delete-dialog.d.ts.map +1 -0
  52. package/dist/blocks/confirm-delete-dialog.js +89 -0
  53. package/dist/blocks/confirm-delete-dialog.js.map +1 -0
  54. package/dist/blocks/entity-status.d.ts +44 -1
  55. package/dist/blocks/entity-status.d.ts.map +1 -1
  56. package/dist/blocks/entity-status.js +26 -1
  57. package/dist/blocks/entity-status.js.map +1 -1
  58. package/dist/blocks/expiry-notice.d.ts +86 -0
  59. package/dist/blocks/expiry-notice.d.ts.map +1 -0
  60. package/dist/blocks/expiry-notice.js +81 -0
  61. package/dist/blocks/expiry-notice.js.map +1 -0
  62. package/dist/blocks/icons.d.ts +22 -0
  63. package/dist/blocks/icons.d.ts.map +1 -1
  64. package/dist/blocks/icons.js +22 -0
  65. package/dist/blocks/icons.js.map +1 -1
  66. package/dist/blocks/notification-row.d.ts +88 -0
  67. package/dist/blocks/notification-row.d.ts.map +1 -0
  68. package/dist/blocks/notification-row.js +32 -0
  69. package/dist/blocks/notification-row.js.map +1 -0
  70. package/dist/blocks/phosphor-marks.d.ts +10 -0
  71. package/dist/blocks/phosphor-marks.d.ts.map +1 -1
  72. package/dist/blocks/phosphor-marks.js +15 -0
  73. package/dist/blocks/phosphor-marks.js.map +1 -1
  74. package/dist/blocks/shelf.d.ts +384 -0
  75. package/dist/blocks/shelf.d.ts.map +1 -0
  76. package/dist/blocks/shelf.js +489 -0
  77. package/dist/blocks/shelf.js.map +1 -0
  78. package/dist/brand/badge/manrope-latin-wght-normal.woff2 +0 -0
  79. package/dist/brand/badge/space-grotesk-latin-wght-normal.woff2 +0 -0
  80. package/dist/brand/email/headline-activity.png +0 -0
  81. package/dist/brand/email/headline-expired.png +0 -0
  82. package/dist/brand/email/headline-expires-tomorrow.png +0 -0
  83. package/dist/brand/email/headline-expiring-soon.png +0 -0
  84. package/dist/brand/email/headline-invited.png +0 -0
  85. package/dist/brand/email/headline-sign-in-code.png +0 -0
  86. package/dist/brand/email/mesh.png +0 -0
  87. package/dist/brand/email/wordmark.png +0 -0
  88. package/dist/email/assets.d.ts +50 -0
  89. package/dist/email/assets.d.ts.map +1 -0
  90. package/dist/email/assets.js +16 -0
  91. package/dist/email/assets.js.map +1 -0
  92. package/dist/email/index.d.ts +204 -0
  93. package/dist/email/index.d.ts.map +1 -0
  94. package/dist/email/index.js +429 -0
  95. package/dist/email/index.js.map +1 -0
  96. package/dist/email/palette.d.ts +40 -0
  97. package/dist/email/palette.d.ts.map +1 -0
  98. package/dist/email/palette.js +44 -0
  99. package/dist/email/palette.js.map +1 -0
  100. package/dist/index.d.ts +4 -0
  101. package/dist/index.d.ts.map +1 -1
  102. package/dist/index.js +4 -0
  103. package/dist/index.js.map +1 -1
  104. package/dist/shadcn.css +41 -0
  105. package/dist/ui/dropdown-menu.d.ts +8 -1
  106. package/dist/ui/dropdown-menu.d.ts.map +1 -1
  107. package/dist/ui/dropdown-menu.js +9 -2
  108. package/dist/ui/dropdown-menu.js.map +1 -1
  109. 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"}