basalt-ui 1.19.1 → 1.21.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/AGENTS.md +19 -1
- package/CHANGELOG.md +39 -0
- package/MIGRATING.md +326 -0
- package/README.md +87 -9
- package/agent/rules/basalt-app.md +84 -0
- package/agent/rules/basalt-charts.md +32 -17
- package/agent/rules/basalt-content.md +4 -0
- package/agent/rules/basalt-mantine.md +25 -10
- package/agent/rules/basalt-router.md +79 -15
- package/agent/rules/basalt-state.md +21 -3
- package/agent/rules/basalt-tokens.md +132 -6
- package/agent/skills/basalt-app/SKILL.md +45 -6
- package/agent/skills/basalt-charts/SKILL.md +5 -3
- package/agent/templates/CLAUDE-block.md.tpl +11 -5
- package/configs/check.yml +11 -4
- package/configs/lefthook.yml +59 -7
- package/configs/oxlint-plugin.js +633 -30
- package/configs/oxlint-plugin.test.ts +594 -15
- package/configs/oxlint.json +10 -1
- package/dist/agent/stick-to-bottom.js +1 -1
- package/dist/agent-chat/thread-detail-panel.js +1 -1
- package/dist/agent-chat/thread-message.js +2 -2
- package/dist/agent-chat/tool-chip.js +1 -1
- package/dist/charts/kinds/Bars.d.ts +1 -1
- package/dist/charts/kinds/Bars.d.ts.map +1 -1
- package/dist/charts/kinds/Donut.d.ts +1 -1
- package/dist/charts/kinds/Donut.d.ts.map +1 -1
- package/dist/charts/kinds/Donut.js +1 -1
- package/dist/charts/kinds/DualPanel.d.ts +1 -1
- package/dist/charts/kinds/DualPanel.d.ts.map +1 -1
- package/dist/charts/kinds/Heatmap.d.ts +1 -1
- package/dist/charts/kinds/Heatmap.d.ts.map +1 -1
- package/dist/charts/kinds/MultiLine.d.ts +1 -1
- package/dist/charts/kinds/MultiLine.d.ts.map +1 -1
- package/dist/charts/kinds/StackedArea.d.ts +1 -1
- package/dist/charts/kinds/StackedArea.d.ts.map +1 -1
- package/dist/charts/kinds/ZonedLine.d.ts +1 -1
- package/dist/charts/kinds/ZonedLine.d.ts.map +1 -1
- package/dist/charts/primitives/ChartLegend.js +2 -2
- package/dist/charts/primitives/ChartTooltip.js +1 -1
- package/dist/cli/index.d.ts +146 -20
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +901 -101
- package/dist/cli/toolchain-wiring.test.d.ts +2 -0
- package/dist/cli/toolchain-wiring.test.d.ts.map +1 -0
- package/dist/cli/waiver-audit.test.d.ts +2 -0
- package/dist/cli/waiver-audit.test.d.ts.map +1 -0
- package/dist/dashboard/delta-badge.js +2 -2
- package/dist/dashboard/stat-card.js +1 -1
- package/dist/data/virtual-list.js +5 -5
- package/dist/guard/index.d.ts +101 -2
- package/dist/guard/index.d.ts.map +1 -1
- package/dist/guard/index.js +474 -62
- package/dist/guard/types.d.ts +25 -5
- package/dist/guard/types.d.ts.map +1 -1
- package/dist/register.d.ts +25 -0
- package/dist/register.d.ts.map +1 -1
- package/dist/router-tanstack/multi-search-param-store.d.ts +13 -0
- package/dist/router-tanstack/multi-search-param-store.d.ts.map +1 -1
- package/dist/router-tanstack/multi-search-param-store.js +4 -1
- package/dist/router-tanstack/search-param-store.d.ts +29 -5
- package/dist/router-tanstack/search-param-store.d.ts.map +1 -1
- package/dist/router-tanstack/search-param-store.js +31 -3
- package/dist/router-tanstack/search-param-store.test.d.ts +2 -0
- package/dist/router-tanstack/search-param-store.test.d.ts.map +1 -0
- package/dist/shell/app-mobile-nav.module.css +11 -3
- package/dist/shell/index.d.ts +12 -5
- package/dist/shell/index.d.ts.map +1 -1
- package/dist/shell/index.js +24 -6
- package/dist/surfaces.d.ts +1 -1
- package/dist/surfaces.js +1 -1
- package/dist/tokens/index.d.ts +5 -3
- package/dist/tokens/index.d.ts.map +1 -1
- package/dist/tokens/index.js +7 -1
- package/dist/tokens/palette.d.ts +35 -27
- package/dist/tokens/palette.d.ts.map +1 -1
- package/dist/tokens/palette.js +24 -18
- package/dist/tokens/text-scale.test.d.ts +2 -0
- package/dist/tokens/text-scale.test.d.ts.map +1 -0
- package/dist/tokens.css +21 -17
- package/dist/vite-color-mix.js +2 -2
- package/dist/vite.d.ts +24 -2
- package/dist/vite.d.ts.map +1 -1
- package/dist/vite.js +54 -13
- package/llms.txt +3 -3
- package/package.json +4 -3
- package/src/agent/stick-to-bottom.tsx +1 -1
- package/src/agent-chat/thread-detail-panel.tsx +1 -1
- package/src/agent-chat/thread-message.tsx +3 -3
- package/src/agent-chat/tool-chip.tsx +1 -1
- package/src/charts/kinds/Bars.tsx +1 -1
- package/src/charts/kinds/Donut.tsx +3 -2
- package/src/charts/kinds/DualPanel.tsx +2 -2
- package/src/charts/kinds/Heatmap.tsx +1 -1
- package/src/charts/kinds/MultiLine.tsx +1 -1
- package/src/charts/kinds/StackedArea.tsx +1 -1
- package/src/charts/kinds/ZonedLine.tsx +1 -1
- package/src/charts/primitives/ChartLegend.tsx +2 -2
- package/src/charts/primitives/ChartTooltip.tsx +1 -1
- package/src/cli/index.ts +1614 -164
- package/src/cli/init-sync.test.ts +21 -3
- package/src/cli/template-ledger.test.ts +1 -1
- package/src/cli/tokens-css.test.ts +27 -14
- package/src/cli/toolchain-wiring.test.ts +856 -0
- package/src/cli/waiver-audit.test.ts +131 -0
- package/src/dashboard/delta-badge.tsx +3 -3
- package/src/dashboard/stat-card.tsx +1 -1
- package/src/data/virtual-list.tsx +8 -8
- package/src/guard/check-source.test.ts +1104 -12
- package/src/guard/index.ts +1106 -103
- package/src/guard/types.ts +29 -4
- package/src/register.ts +32 -0
- package/src/router-tanstack/multi-search-param-store.ts +16 -1
- package/src/router-tanstack/search-param-store.test.ts +135 -0
- package/src/router-tanstack/search-param-store.ts +90 -8
- package/src/shell/app-mobile-nav.module.css +11 -3
- package/src/shell/app-mobile-nav.tsx +1 -1
- package/src/shell/index.test.tsx +52 -0
- package/src/shell/index.tsx +64 -13
- package/src/surfaces.ts +1 -1
- package/src/theme/density-relations.test.ts +8 -5
- package/src/theme/spacing.test.ts +2 -0
- package/src/theme-toggle/index.tsx +2 -2
- package/src/tokens/index.ts +28 -3
- package/src/tokens/palette.ts +24 -18
- package/src/tokens/text-scale.test.ts +51 -0
- package/src/vite-color-mix.ts +2 -2
- package/src/vite.test.ts +125 -6
- package/src/vite.ts +148 -20
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"toolchain-wiring.test.d.ts","sourceRoot":"","sources":["../../src/cli/toolchain-wiring.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"waiver-audit.test.d.ts","sourceRoot":"","sources":["../../src/cli/waiver-audit.test.ts"],"names":[],"mappings":""}
|
|
@@ -22,10 +22,10 @@ function DeltaBadge({
|
|
|
22
22
|
},
|
|
23
23
|
label: {
|
|
24
24
|
display: "inline-flex",
|
|
25
|
-
// theme-allow
|
|
25
|
+
// theme-allow inline-display — a Badge `styles.label` part, not a layout node Flex could replace
|
|
26
26
|
alignItems: "center",
|
|
27
27
|
gap: 3,
|
|
28
|
-
// theme-allow
|
|
28
|
+
// theme-allow inline-spacing — sub-scale glyph-to-label gap, below the smallest scale stop
|
|
29
29
|
fontFamily: "var(--basalt-font-mono)",
|
|
30
30
|
fontSize: VX.text.xs,
|
|
31
31
|
fontWeight: 600,
|
|
@@ -30,7 +30,7 @@ function StatCard({
|
|
|
30
30
|
padding: "var(--mantine-spacing-xs) var(--mantine-spacing-sm)",
|
|
31
31
|
minHeight: 118,
|
|
32
32
|
display: "flex",
|
|
33
|
-
// theme-allow
|
|
33
|
+
// theme-allow inline-display — Card root as a flex column; Mantine Card takes no layout props
|
|
34
34
|
flexDirection: "column",
|
|
35
35
|
gap: "var(--vx-space-stat-card-gap)",
|
|
36
36
|
overflow: "hidden",
|
|
@@ -30,9 +30,9 @@ function BasaltVirtualList({
|
|
|
30
30
|
});
|
|
31
31
|
if (isLoading) {
|
|
32
32
|
return (
|
|
33
|
-
// theme-allow — matches the virtualizer's own scroll box below, so the skeleton doesn't reflow.
|
|
33
|
+
// theme-allow raw-scroll-container — matches the virtualizer's own scroll box below, so the skeleton doesn't reflow.
|
|
34
34
|
/* @__PURE__ */ jsx(Box, { style: { height, overflow: "auto" }, children: Array.from({ length: skeletonRows }, (_, i) => /* @__PURE__ */ jsx(
|
|
35
|
-
|
|
35
|
+
Box,
|
|
36
36
|
{
|
|
37
37
|
style: {
|
|
38
38
|
height: estimateSize,
|
|
@@ -57,11 +57,11 @@ function BasaltVirtualList({
|
|
|
57
57
|
ref: parentRef,
|
|
58
58
|
style: {
|
|
59
59
|
height,
|
|
60
|
-
// theme-allow — TanStack Virtual measures this element as the scroll container.
|
|
60
|
+
// theme-allow raw-scroll-container — TanStack Virtual measures this element as the scroll container.
|
|
61
61
|
overflow: "auto"
|
|
62
62
|
},
|
|
63
63
|
children: /* @__PURE__ */ jsx(
|
|
64
|
-
|
|
64
|
+
Box,
|
|
65
65
|
{
|
|
66
66
|
style: {
|
|
67
67
|
height: rowVirtualizer.getTotalSize(),
|
|
@@ -71,7 +71,7 @@ function BasaltVirtualList({
|
|
|
71
71
|
const item = items[virtualItem.index];
|
|
72
72
|
if (item === void 0) return null;
|
|
73
73
|
return /* @__PURE__ */ jsx(
|
|
74
|
-
|
|
74
|
+
Box,
|
|
75
75
|
{
|
|
76
76
|
style: {
|
|
77
77
|
position: "absolute",
|
package/dist/guard/index.d.ts
CHANGED
|
@@ -1,15 +1,59 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* ./guard — headless policy core. Mantine-free, dependency-free.
|
|
3
3
|
*
|
|
4
|
-
* GUARD_RULES: the closed registry of all
|
|
4
|
+
* GUARD_RULES: the closed registry of all 25 violation kinds.
|
|
5
5
|
* checkSource: pure (text, relPath, cfg) → Finding[]. No FS, no walk, no console.
|
|
6
6
|
*/
|
|
7
7
|
import type { Finding, GuardConfig, GuardKind, GuardSeverity } from './types.js';
|
|
8
8
|
export type { Finding, GuardConfig, GuardKind, GuardSeverity };
|
|
9
9
|
/** Shared default config — CLI and tests import this to avoid duplication. */
|
|
10
10
|
export declare const DEFAULT_GUARD_CONFIG: GuardConfig;
|
|
11
|
+
/** One `exemptRules` entry that suppressed nothing, and why — see {@link unmatchedExemptPatterns}. */
|
|
12
|
+
export type UnmatchedExemptPattern = {
|
|
13
|
+
readonly kind: string;
|
|
14
|
+
readonly pattern: string;
|
|
15
|
+
readonly reason: 'unknown-kind' | 'no-match';
|
|
16
|
+
};
|
|
17
|
+
/**
|
|
18
|
+
* Every `exemptRules` entry that matched no scanned file, so a run can say so instead of passing.
|
|
19
|
+
*
|
|
20
|
+
* An exemption is a claim ("this rule does not apply here"), and a claim that resolves to nothing is
|
|
21
|
+
* not harmless — it reads as coverage in a config review while enforcing exactly as much as an empty
|
|
22
|
+
* object. rollhook's `["public/site.webmanifest"]` was correct, matched nothing under the
|
|
23
|
+
* segments-only matcher, and reported no diagnostic; the finding it was written for kept failing the
|
|
24
|
+
* build with the config sitting right there looking like the answer. A silent no-op exemption is the
|
|
25
|
+
* same false-green family as a guard that reports green while enforcing nothing.
|
|
26
|
+
*
|
|
27
|
+
* Called once per run by the CLI with every relative path it scanned. Kind keys are checked too: a
|
|
28
|
+
* typo'd kind name is an exemption for a rule that does not exist.
|
|
29
|
+
*/
|
|
30
|
+
export declare function unmatchedExemptPatterns(cfg: GuardConfig, scannedRelPaths: readonly string[]): UnmatchedExemptPattern[];
|
|
31
|
+
/**
|
|
32
|
+
* The exact first line of every stylesheet the CLI emits — the contract between `basalt-ui
|
|
33
|
+
* tokens:css` / `fonts:css` and this scanner, and the single source of truth for it (`src/cli`
|
|
34
|
+
* imports this rather than keeping its own copy, which is how the two used to drift apart).
|
|
35
|
+
*
|
|
36
|
+
* The marker exists because `check-theme` reported the file a sibling command had just written:
|
|
37
|
+
* 116 of rollhook's 117 violations were inside the emitted token stylesheet, which is nothing but
|
|
38
|
+
* hex and `rgba()` by construction.
|
|
39
|
+
*
|
|
40
|
+
* **Command-NEUTRAL by necessity.** Line 1 is compared verbatim, so it cannot name the command
|
|
41
|
+
* that produced the file without needing one accepted marker per command — and a second accepted
|
|
42
|
+
* marker is a second forgery surface. It points at the provenance line instead, which does name
|
|
43
|
+
* the command. It used to say `regenerate with \`bunx basalt-ui tokens:css\`` on a `fonts:css`
|
|
44
|
+
* file too: following that instruction overwrote a font sheet with the palette sheet.
|
|
45
|
+
*/
|
|
46
|
+
export declare const GENERATED_HEADER_LINE = "/* @generated basalt-ui \u2014 do not edit; regenerate with the command on the next line */";
|
|
11
47
|
/**
|
|
12
|
-
*
|
|
48
|
+
* Kinds disabled under `profile: 'tokens-only'` — every kind whose remedy is a Mantine component,
|
|
49
|
+
* a Mantine prop, or the React theme factory. See {@link GuardConfig.profile}.
|
|
50
|
+
*
|
|
51
|
+
* Exported so the CLI can name the profile in `--help`/`doctor` output without re-deriving the
|
|
52
|
+
* list, and so a test can assert the two halves (disabled vs. surviving) partition the registry.
|
|
53
|
+
*/
|
|
54
|
+
export declare const TOKENS_ONLY_DISABLED_KINDS: ReadonlySet<GuardKind>;
|
|
55
|
+
/**
|
|
56
|
+
* The closed registry of all 25 guard kinds. The triad test asserts
|
|
13
57
|
* `surface.guardKinds ⊆ keyof GUARD_RULES` at runtime.
|
|
14
58
|
*
|
|
15
59
|
* raw-surface, raw-html-layout, and sub-16-input-font are handled inline in checkSource
|
|
@@ -151,7 +195,62 @@ export declare const GUARD_RULES: {
|
|
|
151
195
|
readonly appliesTo: (relPath: string) => boolean;
|
|
152
196
|
readonly message: "fontSize below 16 on a form control is dead code — the styles.css iOS floor is `!important` and always wins. Either drop the override, or be honest about 16px in the design.";
|
|
153
197
|
};
|
|
198
|
+
readonly 'theme-allow-unscoped': {
|
|
199
|
+
readonly kind: "theme-allow-unscoped";
|
|
200
|
+
readonly pattern: RegExp;
|
|
201
|
+
readonly message: "theme-allow without a usable rule id and a reason. Write `theme-allow <rule-id> — <why>`: the id scopes the exception to that one kind (a bare comment waives EVERY kind on the line, including ones added later), and the reason is what makes it reviewable in a diff. An id that names no rule is a typo, not a blanket waiver — it suppresses nothing. `theme-allow-file <rule-id> — <why>` declares the whole file, and must name its ids: a bare one waives nothing.";
|
|
202
|
+
};
|
|
203
|
+
readonly 'surface-shadow-override': {
|
|
204
|
+
readonly kind: "surface-shadow-override";
|
|
205
|
+
readonly pattern: RegExp;
|
|
206
|
+
readonly enabled: (cfg: GuardConfig) => boolean;
|
|
207
|
+
readonly message: "Token-composed boxShadow that REPLACES surface depth — a card whose shadow drops --vx-shadow-card is the one card in the app with no depth. Compose with the depth token for its tier (`${VX.shadowCard}, <your ring>`; a fixed/floating surface wants --vx-shadow-overlay) rather than instead of it.";
|
|
208
|
+
};
|
|
209
|
+
readonly 'css-raw-surface': {
|
|
210
|
+
readonly kind: "css-raw-surface";
|
|
211
|
+
readonly pattern: RegExp;
|
|
212
|
+
readonly enabled: (cfg: GuardConfig) => boolean;
|
|
213
|
+
readonly appliesTo: (relPath: string) => boolean;
|
|
214
|
+
readonly message: "Surface literal in CSS — use var(--vx-radius-card|--vx-radius-md) for a corner and var(--vx-shadow-card) for depth, the same tokens the TSX side is held to.";
|
|
215
|
+
};
|
|
216
|
+
readonly 'hidden-inline-style': {
|
|
217
|
+
readonly kind: "hidden-inline-style";
|
|
218
|
+
readonly pattern: RegExp;
|
|
219
|
+
readonly enabled: (cfg: GuardConfig) => boolean;
|
|
220
|
+
readonly appliesTo: (relPath: string) => boolean;
|
|
221
|
+
readonly message: "Raw HTML element with inline layout/surface styling that the line scan cannot see — the tag is formatted across lines, or the style object is hoisted to a const. Same violation as raw-html-layout: use a Mantine layout primitive (Box/Flex/Grid/Stack/Group). Its own kind for one minor so the widening lands as a warning; it merges into raw-html-layout at the promotion.";
|
|
222
|
+
};
|
|
223
|
+
readonly 'inline-font-size': {
|
|
224
|
+
readonly kind: "inline-font-size";
|
|
225
|
+
readonly pattern: RegExp;
|
|
226
|
+
readonly message: "Raw font-size literal — route through VX.text.* (numbers) / --vx-text-* (CSS), or the Mantine fz token. Same rule the oxlint plugin enforces as basalt/no-raw-font-size; this is the half a check-theme-only CI can see.";
|
|
227
|
+
};
|
|
154
228
|
};
|
|
229
|
+
/**
|
|
230
|
+
* The one-line remedy for `kind`, as a report reads it: `raw-hex: Route color through VX.* / …`.
|
|
231
|
+
*
|
|
232
|
+
* The registry has always carried a remedy per kind; `check-theme`'s `Fix:` epilogue read a
|
|
233
|
+
* hand-duplicated subset instead, and the subset was missing every kind added at 1.20.0. Since all
|
|
234
|
+
* five of those ship `warn` under grace, the findings whose whole argument is "this looks correct
|
|
235
|
+
* and is not" arrived with no argument at all — just "add a `theme-allow`", which reads as advice to
|
|
236
|
+
* waive. Sourcing the epilogue from here retires the duplicate rather than extending it.
|
|
237
|
+
*/
|
|
238
|
+
export declare function guardKindRemedy(kind: GuardKind): string;
|
|
239
|
+
/**
|
|
240
|
+
* How to waive a finding **in this file's syntax** — the closer a report prints under `Fix:`.
|
|
241
|
+
*
|
|
242
|
+
* `check-theme` printed one closer for every file class, and from 1.20.0 (when the scan reached
|
|
243
|
+
* `.webmanifest` / `.json`) it prescribed a `theme-allow` comment to files that cannot hold a
|
|
244
|
+
* comment. Two consumers read that, found no route, and fell back to a blanket `exemptRules` entry —
|
|
245
|
+
* the un-reviewable shape the release was spent retiring.
|
|
246
|
+
*
|
|
247
|
+
* A manifest gets the sharper answer first, because a hex there can never be *right*: a manifest
|
|
248
|
+
* cannot reference a CSS custom property, so the value is a hand-copy of a token that drifts the day
|
|
249
|
+
* the palette moves (which is exactly what both consumers found — two dead colours). The remedy is
|
|
250
|
+
* to stop hand-writing the file: `basaltAppPlugin` emits it from `SURFACE.bg`. The annotation is the
|
|
251
|
+
* fallback for a manifest basalt does not generate.
|
|
252
|
+
*/
|
|
253
|
+
export declare function guardWaiverHint(relPath: string): string;
|
|
155
254
|
/**
|
|
156
255
|
* Scan ONE file's text for theme-guard violations. Pure: same (text, relPath, cfg) → same Finding[].
|
|
157
256
|
* No FS, no walk, no console. The 3 dynamic regexes (forbiddenAccent, spacing, radius) are derived
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/guard/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AAE7E,YAAY,EAAE,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,aAAa,EAAE,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/guard/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AAE7E,YAAY,EAAE,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,aAAa,EAAE,CAAA;AAyb9D,8EAA8E;AAC9E,eAAO,MAAM,oBAAoB,EAAE,WAoBlC,CAAA;AAmJD,sGAAsG;AACtG,MAAM,MAAM,sBAAsB,GAAG;IACnC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,MAAM,EAAE,cAAc,GAAG,UAAU,CAAA;CAC7C,CAAA;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,uBAAuB,CACrC,GAAG,EAAE,WAAW,EAChB,eAAe,EAAE,SAAS,MAAM,EAAE,GACjC,sBAAsB,EAAE,CAc1B;AA8WD;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,qBAAqB,gGACwD,CAAA;AA8F1F;;;;;;GAMG;AACH,eAAO,MAAM,0BAA0B,EAAE,WAAW,CAAC,SAAS,CAqB5D,CAAA;AA2NF;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;gCA0BL,WAAW;;;;;;;gCAcX,WAAW;;;;;gCAMX,WAAW;;;;;;;gCAaX,WAAW;;;;;;;gCAQX,WAAW;;;;;;gCAOX,WAAW;;;;;;;gCASX,WAAW;;;;;;gCAOX,WAAW;;;;;;;gCAaX,WAAW;;;;;;gCAMX,WAAW;;;;;;;gCAaX,WAAW;;;;;;;gCAUX,WAAW;;;;;;;gCAUX,WAAW;;;;;;;gCASX,WAAW;;;;;;;gCASX,WAAW;;;;;;;gCAUX,WAAW;;;;;;;;;;;;gCAgBX,WAAW;;;;;;gCAOX,WAAW;;;;;;;gCASX,WAAW;;;;;;;;;CAWmB,CAAA;AAEjD;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,SAAS,GAAG,MAAM,CAEvD;AAKD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAgBvD;AAUD;;;;;;;;;GASG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,WAAW,GAAG,OAAO,EAAE,CA0XtF"}
|