@blotch/dolan 22.2.2 → 22.2.4
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/dist/commands/add.d.ts +6 -2
- package/dist/commands/add.js +41 -11
- package/dist/commands/add.js.map +1 -1
- package/dist/commands/add.test.js +162 -9
- package/dist/commands/add.test.js.map +1 -1
- package/dist/commands/diff.d.ts +2 -1
- package/dist/commands/diff.js +38 -25
- package/dist/commands/diff.js.map +1 -1
- package/dist/commands/diff.test.js +72 -11
- package/dist/commands/diff.test.js.map +1 -1
- package/dist/commands/doctor.js +228 -34
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/doctor.test.js +367 -10
- package/dist/commands/doctor.test.js.map +1 -1
- package/dist/commands/eject.js +7 -0
- package/dist/commands/eject.js.map +1 -1
- package/dist/commands/eject.test.js +39 -0
- package/dist/commands/eject.test.js.map +1 -1
- package/dist/commands/info.js +3 -2
- package/dist/commands/info.js.map +1 -1
- package/dist/commands/init.d.ts +37 -1
- package/dist/commands/init.js +169 -40
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/init.test.js +392 -27
- package/dist/commands/init.test.js.map +1 -1
- package/dist/commands/install-packages.d.ts +6 -0
- package/dist/commands/install-packages.js +20 -0
- package/dist/commands/install-packages.js.map +1 -0
- package/dist/commands/install-packages.test.d.ts +1 -0
- package/dist/commands/install-packages.test.js +55 -0
- package/dist/commands/install-packages.test.js.map +1 -0
- package/dist/commands/list.js +21 -14
- package/dist/commands/list.js.map +1 -1
- package/dist/commands/list.test.js +62 -5
- package/dist/commands/list.test.js.map +1 -1
- package/dist/commands/outdated.js +11 -10
- package/dist/commands/outdated.js.map +1 -1
- package/dist/commands/outdated.test.js +20 -5
- package/dist/commands/outdated.test.js.map +1 -1
- package/dist/commands/remove.d.ts +4 -0
- package/dist/commands/remove.js +17 -4
- package/dist/commands/remove.js.map +1 -1
- package/dist/commands/remove.test.js +53 -2
- package/dist/commands/remove.test.js.map +1 -1
- package/dist/commands/theme.js +1 -1
- package/dist/commands/theme.js.map +1 -1
- package/dist/commands/update.d.ts +11 -0
- package/dist/commands/update.js +174 -58
- package/dist/commands/update.js.map +1 -1
- package/dist/commands/update.test.js +587 -33
- package/dist/commands/update.test.js.map +1 -1
- package/dist/index.js +7 -0
- package/dist/index.js.map +1 -1
- package/dist/lockfile.d.ts +7 -0
- package/dist/lockfile.js +36 -0
- package/dist/lockfile.js.map +1 -1
- package/dist/lockfile.test.d.ts +1 -0
- package/dist/lockfile.test.js +25 -0
- package/dist/lockfile.test.js.map +1 -0
- package/dist/registry.d.ts +14 -0
- package/dist/registry.js +78 -24
- package/dist/registry.js.map +1 -1
- package/dist/registry.test.js +119 -38
- package/dist/registry.test.js.map +1 -1
- package/dist/test-utils.d.ts +5 -0
- package/dist/test-utils.js +6 -1
- package/dist/test-utils.js.map +1 -1
- package/dist/testing/fire-lynx-event.d.ts +14 -0
- package/dist/testing/fire-lynx-event.js +19 -0
- package/dist/testing/fire-lynx-event.js.map +1 -0
- package/dist/testing/fire-lynx-event.test.d.ts +1 -0
- package/dist/testing/fire-lynx-event.test.js +44 -0
- package/dist/testing/fire-lynx-event.test.js.map +1 -0
- package/dist/testing/lynx-main-thread.d.ts +22 -0
- package/dist/testing/lynx-main-thread.js +11 -0
- package/dist/testing/lynx-main-thread.js.map +1 -0
- package/dist/testing/lynx-main-thread.test.d.ts +1 -0
- package/dist/testing/lynx-main-thread.test.js +24 -0
- package/dist/testing/lynx-main-thread.test.js.map +1 -0
- package/dist/testing/set-input-signal.d.ts +14 -0
- package/dist/testing/set-input-signal.js +21 -0
- package/dist/testing/set-input-signal.js.map +1 -0
- package/dist/testing/set-input-signal.test.d.ts +1 -0
- package/dist/testing/set-input-signal.test.js +20 -0
- package/dist/testing/set-input-signal.test.js.map +1 -0
- package/dist/ui/components/accordion/accordion.test.ts +158 -144
- package/dist/ui/components/accordion/accordion.ts +19 -14
- package/dist/ui/components/action-sheet/action-sheet.test.ts +283 -151
- package/dist/ui/components/action-sheet/action-sheet.ts +77 -43
- package/dist/ui/components/alert/alert.test.ts +67 -19
- package/dist/ui/components/alert/alert.ts +14 -16
- package/dist/ui/components/alert-dialog/alert-dialog.test.ts +208 -94
- package/dist/ui/components/alert-dialog/alert-dialog.ts +75 -38
- package/dist/ui/components/area-chart/area-chart.test.ts +134 -119
- package/dist/ui/components/area-chart/area-chart.ts +100 -315
- package/dist/ui/components/area-chart/index.ts +2 -3
- package/dist/ui/components/avatar/avatar.test.ts +89 -45
- package/dist/ui/components/badge/badge.test.ts +57 -23
- package/dist/ui/components/badge/badge.ts +12 -14
- package/dist/ui/components/bar-chart/bar-chart.test.ts +172 -45
- package/dist/ui/components/bar-chart/bar-chart.ts +140 -294
- package/dist/ui/components/bar-chart/index.ts +3 -3
- package/dist/ui/components/bottom-sheet/bottom-sheet.test.ts +386 -128
- package/dist/ui/components/bottom-sheet/bottom-sheet.ts +170 -53
- package/dist/ui/components/button/button.test.ts +611 -2
- package/dist/ui/components/button/button.ts +434 -49
- package/dist/ui/components/button/index.ts +2 -0
- package/dist/ui/components/button-group/button-group.test.ts +484 -2
- package/dist/ui/components/button-group/button-group.ts +380 -68
- package/dist/ui/components/button-group/index.ts +3 -0
- package/dist/ui/components/candlestick-chart/candlestick-chart.test.ts +183 -58
- package/dist/ui/components/candlestick-chart/candlestick-chart.ts +150 -323
- package/dist/ui/components/candlestick-chart/index.ts +3 -4
- package/dist/ui/components/card/card.test.ts +82 -62
- package/dist/ui/components/chart/chart-focus.test.ts +132 -0
- package/dist/ui/components/chart/chart-focus.ts +115 -0
- package/dist/ui/components/chart/chart-presets.test.ts +335 -0
- package/dist/ui/components/chart/chart-presets.ts +278 -0
- package/dist/ui/components/chart/chart-scene.test.ts +589 -0
- package/dist/ui/components/chart/chart-scene.ts +483 -0
- package/dist/ui/components/chart/chart-theme.test.ts +85 -0
- package/dist/ui/components/chart/chart-theme.ts +210 -0
- package/dist/ui/components/chart/chart-zoom.test.ts +159 -0
- package/dist/ui/components/chart/chart-zoom.ts +162 -0
- package/dist/ui/components/chart/chart.test.ts +1017 -0
- package/dist/ui/components/chart/chart.ts +934 -0
- package/dist/ui/components/chart/index.ts +24 -0
- package/dist/ui/components/checkbox/checkbox.test.ts +124 -42
- package/dist/ui/components/checkbox/checkbox.ts +23 -23
- package/dist/ui/components/collapsible/collapsible.test.ts +158 -81
- package/dist/ui/components/collapsible/collapsible.ts +19 -14
- package/dist/ui/components/context-menu/context-menu.test.ts +224 -0
- package/dist/ui/components/context-menu/context-menu.ts +110 -0
- package/dist/ui/components/context-menu/index.ts +1 -0
- package/dist/ui/components/dialog/dialog.test.ts +213 -108
- package/dist/ui/components/dialog/dialog.ts +72 -35
- package/dist/ui/components/dock/dock-scroll.test.ts +130 -0
- package/dist/ui/components/dock/dock-scroll.ts +133 -0
- package/dist/ui/components/dock/dock.test.ts +749 -0
- package/dist/ui/components/dock/dock.ts +960 -0
- package/dist/ui/components/dock/index.ts +2 -0
- package/dist/ui/components/empty-state/empty-state.test.ts +28 -39
- package/dist/ui/components/glass/concentric-radius.test.ts +13 -0
- package/dist/ui/components/glass/concentric-radius.ts +17 -0
- package/dist/ui/components/glass/glass-design.test.ts +78 -0
- package/dist/ui/components/glass/glass-design.ts +119 -0
- package/dist/ui/components/glass/glass.test.ts +338 -0
- package/dist/ui/components/glass/glass.ts +360 -0
- package/dist/ui/components/glass/index.ts +18 -0
- package/dist/ui/components/icon/icon-theme.test.ts +169 -0
- package/dist/ui/components/icon/icon-theme.ts +227 -0
- package/dist/ui/components/icon/icon.test.ts +85 -25
- package/dist/ui/components/icon/icon.ts +38 -21
- package/dist/ui/components/input/input.test.ts +178 -101
- package/dist/ui/components/input/input.ts +15 -12
- package/dist/ui/components/label/label.test.ts +11 -24
- package/dist/ui/components/line-chart/index.ts +2 -3
- package/dist/ui/components/line-chart/line-chart.test.ts +149 -56
- package/dist/ui/components/line-chart/line-chart.ts +83 -241
- package/dist/ui/components/list/list.test.ts +119 -21
- package/dist/ui/components/list/list.ts +21 -15
- package/dist/ui/components/menu/index.ts +25 -0
- package/dist/ui/components/menu/menu-placement.test.ts +153 -0
- package/dist/ui/components/menu/menu-placement.ts +159 -0
- package/dist/ui/components/menu/menu-popup.test.ts +632 -0
- package/dist/ui/components/menu/menu-popup.ts +544 -0
- package/dist/ui/components/menu/menu.test.ts +429 -0
- package/dist/ui/components/menu/menu.ts +415 -0
- package/dist/ui/components/nav-drawer/nav-drawer.test.ts +435 -191
- package/dist/ui/components/nav-drawer/nav-drawer.ts +127 -56
- package/dist/ui/components/pagination/pagination.test.ts +177 -65
- package/dist/ui/components/pagination/pagination.ts +55 -8
- package/dist/ui/components/progress/progress.test.ts +102 -46
- package/dist/ui/components/progress/progress.ts +52 -54
- package/dist/ui/components/radio-group/radio-group.test.ts +128 -83
- package/dist/ui/components/radio-group/radio-group.ts +24 -24
- package/dist/ui/components/scatter-chart/index.ts +2 -3
- package/dist/ui/components/scatter-chart/scatter-chart.test.ts +131 -26
- package/dist/ui/components/scatter-chart/scatter-chart.ts +104 -250
- package/dist/ui/components/scroll-area/scroll-area.test.ts +95 -24
- package/dist/ui/components/scroll-area/scroll-area.ts +8 -8
- package/dist/ui/components/select/select.test.ts +138 -78
- package/dist/ui/components/select/select.ts +17 -11
- package/dist/ui/components/separator/separator.test.ts +18 -17
- package/dist/ui/components/sheet/sheet.test.ts +64 -11
- package/dist/ui/components/sheet/sheet.ts +9 -1
- package/dist/ui/components/skeleton/skeleton.test.ts +24 -7
- package/dist/ui/components/skeleton/skeleton.ts +10 -16
- package/dist/ui/components/spinner/spinner.test.ts +67 -22
- package/dist/ui/components/spinner/spinner.ts +48 -41
- package/dist/ui/components/switch/switch.test.ts +116 -46
- package/dist/ui/components/switch/switch.ts +8 -13
- package/dist/ui/components/tab-bar/index.ts +1 -0
- package/dist/ui/components/tab-bar/tab-bar.test.ts +280 -0
- package/dist/ui/components/tab-bar/tab-bar.ts +230 -0
- package/dist/ui/components/tabs/tabs.test.ts +215 -157
- package/dist/ui/components/tabs/tabs.ts +110 -118
- package/dist/ui/components/textarea/textarea.test.ts +206 -100
- package/dist/ui/components/textarea/textarea.ts +14 -12
- package/dist/ui/components/toast/toast.test.ts +436 -315
- package/dist/ui/components/toast/toast.ts +62 -55
- package/dist/ui/components/toggle/toggle.test.ts +247 -140
- package/dist/ui/theme/chart-colors.test.ts +35 -0
- package/dist/ui/theme/dark.css +46 -2
- package/dist/ui/theme/default.css +63 -7
- package/dist/ui/theme/icon-colors.test.ts +35 -0
- package/dist/ui/theme/rgb-channels.test.ts +84 -0
- package/dist/ui/theme/tailwind-build.test.ts +114 -0
- package/dist/ui/theme/tailwind-css.test.ts +83 -0
- package/dist/ui/theme/tailwind-plugin.test.ts +42 -2
- package/dist/ui/theme/tailwind-plugin.ts +98 -25
- package/dist/ui/theme/tailwind.css +113 -0
- package/dist/ui/utils/animate.test.ts +13 -1
- package/dist/utils/analyze.d.ts +14 -0
- package/dist/utils/analyze.js +15 -0
- package/dist/utils/analyze.js.map +1 -1
- package/dist/utils/analyze.test.js +14 -1
- package/dist/utils/analyze.test.js.map +1 -1
- package/dist/utils/installed.d.ts +29 -0
- package/dist/utils/installed.js +43 -0
- package/dist/utils/installed.js.map +1 -0
- package/dist/utils/installed.test.d.ts +1 -0
- package/dist/utils/installed.test.js +57 -0
- package/dist/utils/installed.test.js.map +1 -0
- package/dist/utils/interactive.d.ts +9 -0
- package/dist/utils/interactive.js +10 -0
- package/dist/utils/interactive.js.map +1 -0
- package/dist/utils/interactive.test.d.ts +1 -0
- package/dist/utils/interactive.test.js +24 -0
- package/dist/utils/interactive.test.js.map +1 -0
- package/dist/utils/packages.d.ts +36 -0
- package/dist/utils/packages.js +70 -0
- package/dist/utils/packages.js.map +1 -0
- package/dist/utils/packages.test.d.ts +1 -0
- package/dist/utils/packages.test.js +89 -0
- package/dist/utils/packages.test.js.map +1 -0
- package/dist/utils/resolve-paths.d.ts +17 -1
- package/dist/utils/resolve-paths.js +21 -3
- package/dist/utils/resolve-paths.js.map +1 -1
- package/dist/utils/resolve-paths.test.js +38 -2
- package/dist/utils/resolve-paths.test.js.map +1 -1
- package/dist/utils/tailwind.d.ts +25 -0
- package/dist/utils/tailwind.js +51 -0
- package/dist/utils/tailwind.js.map +1 -0
- package/dist/utils/tailwind.test.d.ts +1 -0
- package/dist/utils/tailwind.test.js +71 -0
- package/dist/utils/tailwind.test.js.map +1 -0
- package/package.json +13 -1
- package/dist/ui/components/area-chart/area-chart-render.test.ts +0 -121
- package/dist/ui/components/bar-chart/bar-chart-render.test.ts +0 -174
- package/dist/ui/components/button/button-render.test.ts +0 -113
- package/dist/ui/components/button-group/button-group-render.test.ts +0 -146
- package/dist/ui/components/candlestick-chart/candlestick-chart-render.test.ts +0 -174
- package/dist/ui/components/cartesian-chart/cartesian-chart-render.test.ts +0 -188
- package/dist/ui/components/cartesian-chart/cartesian-chart.test.ts +0 -525
- package/dist/ui/components/cartesian-chart/cartesian-chart.ts +0 -1140
- package/dist/ui/components/cartesian-chart/index.ts +0 -18
- package/dist/ui/components/line-chart/line-chart-render.test.ts +0 -121
- package/dist/ui/components/scatter-chart/scatter-chart-render.test.ts +0 -157
package/dist/registry.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"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"}
|
package/dist/registry.test.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { describe, expect, it } from 'vitest';
|
|
2
|
-
import {
|
|
2
|
+
import { readdirSync, readFileSync } from 'node:fs';
|
|
3
|
+
import { getComponentNames, getEntry, registry, resolveDependencies, resolvePackages, } from './registry';
|
|
3
4
|
describe('getComponentNames', () => {
|
|
4
5
|
it('returns all component names', () => {
|
|
5
6
|
const names = getComponentNames();
|
|
@@ -14,7 +15,16 @@ describe('getEntry', () => {
|
|
|
14
15
|
const entry = getEntry('button');
|
|
15
16
|
expect(entry).toEqual({
|
|
16
17
|
name: 'button',
|
|
17
|
-
dependencies: ['spinner'],
|
|
18
|
+
dependencies: ['spinner', 'glass', 'icon'],
|
|
19
|
+
packages: ['class-variance-authority@^0.7.1'],
|
|
20
|
+
themeColors: [
|
|
21
|
+
'glass-tint',
|
|
22
|
+
'glass-tint-foreground',
|
|
23
|
+
'glass-foreground',
|
|
24
|
+
'glass-muted-foreground',
|
|
25
|
+
'glass-clear-foreground',
|
|
26
|
+
'glass-dim',
|
|
27
|
+
],
|
|
18
28
|
});
|
|
19
29
|
});
|
|
20
30
|
it('returns undefined for non-existent component', () => {
|
|
@@ -27,11 +37,11 @@ describe('resolveDependencies', () => {
|
|
|
27
37
|
});
|
|
28
38
|
it('resolves transitive dependencies in dependency-first order', () => {
|
|
29
39
|
const resolved = resolveDependencies(['button']);
|
|
30
|
-
expect(resolved).toEqual(['spinner', 'button']);
|
|
40
|
+
expect(resolved).toEqual(['icon', 'spinner', 'glass', 'button']);
|
|
31
41
|
});
|
|
32
42
|
it('deduplicates when dependency is also explicitly listed', () => {
|
|
33
43
|
const resolved = resolveDependencies(['button', 'spinner']);
|
|
34
|
-
expect(resolved).toEqual(['spinner', 'button']);
|
|
44
|
+
expect(resolved).toEqual(['icon', 'spinner', 'glass', 'button']);
|
|
35
45
|
});
|
|
36
46
|
it('handles empty input', () => {
|
|
37
47
|
expect(resolveDependencies([])).toEqual([]);
|
|
@@ -46,40 +56,14 @@ describe('resolveDependencies', () => {
|
|
|
46
56
|
it('resolves sheet with its bottom-sheet dependency', () => {
|
|
47
57
|
expect(resolveDependencies(['sheet'])).toEqual(['bottom-sheet', 'sheet']);
|
|
48
58
|
});
|
|
49
|
-
it(
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
expect(resolveDependencies(['bar-chart'])).toEqual([
|
|
58
|
-
'cartesian-chart',
|
|
59
|
-
'bar-chart',
|
|
60
|
-
]);
|
|
61
|
-
});
|
|
62
|
-
it('resolves scatter-chart with its cartesian-chart dependency', () => {
|
|
63
|
-
// Scatter draws straight onto the base — the base must land first.
|
|
64
|
-
expect(resolveDependencies(['scatter-chart'])).toEqual([
|
|
65
|
-
'cartesian-chart',
|
|
66
|
-
'scatter-chart',
|
|
67
|
-
]);
|
|
68
|
-
});
|
|
69
|
-
it('resolves candlestick-chart with its cartesian-chart dependency', () => {
|
|
70
|
-
// Candlestick draws straight onto the base — the base must land first.
|
|
71
|
-
expect(resolveDependencies(['candlestick-chart'])).toEqual([
|
|
72
|
-
'cartesian-chart',
|
|
73
|
-
'candlestick-chart',
|
|
74
|
-
]);
|
|
75
|
-
});
|
|
76
|
-
it('resolves area-chart with its transitive chart dependencies in order', () => {
|
|
77
|
-
// area-chart → line-chart → cartesian-chart; the base must land first.
|
|
78
|
-
expect(resolveDependencies(['area-chart'])).toEqual([
|
|
79
|
-
'cartesian-chart',
|
|
80
|
-
'line-chart',
|
|
81
|
-
'area-chart',
|
|
82
|
-
]);
|
|
59
|
+
it.each([
|
|
60
|
+
'line-chart',
|
|
61
|
+
'area-chart',
|
|
62
|
+
'bar-chart',
|
|
63
|
+
'scatter-chart',
|
|
64
|
+
'candlestick-chart',
|
|
65
|
+
])('resolves %s with the chart it builds on first', (preset) => {
|
|
66
|
+
expect(resolveDependencies([preset])).toEqual(['chart', preset]);
|
|
83
67
|
});
|
|
84
68
|
it('deduplicates bottom-sheet when both select and sheet are selected', () => {
|
|
85
69
|
expect(resolveDependencies(['select', 'sheet'])).toEqual([
|
|
@@ -91,5 +75,102 @@ describe('resolveDependencies', () => {
|
|
|
91
75
|
it('skips unknown component names', () => {
|
|
92
76
|
expect(resolveDependencies(['nonexistent'])).toEqual([]);
|
|
93
77
|
});
|
|
78
|
+
it("lists every component another one's files import", () => {
|
|
79
|
+
// A component that imports a sibling it doesn't list gets copied without
|
|
80
|
+
// it, and the app doesn't build. Tests count too: dolan copies them.
|
|
81
|
+
const components = new URL('../../ui/src/lib/components/', import.meta.url);
|
|
82
|
+
for (const name of getComponentNames()) {
|
|
83
|
+
const folder = new URL(`${name}/`, components);
|
|
84
|
+
const imported = new Set();
|
|
85
|
+
for (const file of readdirSync(folder)) {
|
|
86
|
+
const source = readFileSync(new URL(file, folder), 'utf-8');
|
|
87
|
+
for (const [, sibling] of source.matchAll(/from '\.\.\/([\w-]+)/g)) {
|
|
88
|
+
imported.add(sibling);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
expect([...imported].sort(), name).toEqual([...getEntry(name).dependencies].sort());
|
|
92
|
+
}
|
|
93
|
+
});
|
|
94
|
+
});
|
|
95
|
+
describe('resolvePackages', () => {
|
|
96
|
+
it('collects the npm packages of the given components, once each', () => {
|
|
97
|
+
const packages = resolvePackages(['chart', 'line-chart', 'card']);
|
|
98
|
+
expect(packages.map((spec) => spec.replace(/@[^@]*$/, ''))).toEqual([
|
|
99
|
+
'@tanstack/charts',
|
|
100
|
+
'd3-shape',
|
|
101
|
+
]);
|
|
102
|
+
expect(resolvePackages(['card', 'nonexistent'])).toEqual([]);
|
|
103
|
+
});
|
|
104
|
+
it('asks for the versions packages/ui builds against', () => {
|
|
105
|
+
const ui = JSON.parse(readFileSync(new URL('../../ui/package.json', import.meta.url), 'utf-8'));
|
|
106
|
+
for (const entry of registry) {
|
|
107
|
+
for (const spec of entry.packages ?? []) {
|
|
108
|
+
const at = spec.lastIndexOf('@');
|
|
109
|
+
expect(ui.dependencies[spec.slice(0, at)], spec).toBe(spec.slice(at + 1));
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
});
|
|
113
|
+
it('lists every npm package a component imports', () => {
|
|
114
|
+
// A component whose import isn't listed gets copied without the package,
|
|
115
|
+
// and the app doesn't build (class-variance-authority, #65). A package its
|
|
116
|
+
// dependencies list counts too (the chart presets use `chart`'s), since
|
|
117
|
+
// `add` installs those along with it. Angular, the runtime and dolan's own
|
|
118
|
+
// utils are already the app's dependencies; tests aren't checked, since
|
|
119
|
+
// their imports only matter to a test setup.
|
|
120
|
+
const provided = /^(@angular\/|@blotch\/angular-lynx|@blotch\/dolan\/)/;
|
|
121
|
+
const components = new URL('../../ui/src/lib/components/', import.meta.url);
|
|
122
|
+
for (const { name } of registry) {
|
|
123
|
+
const folder = new URL(`${name}/`, components);
|
|
124
|
+
const imported = new Set();
|
|
125
|
+
for (const file of readdirSync(folder)) {
|
|
126
|
+
if (file.endsWith('.test.ts'))
|
|
127
|
+
continue;
|
|
128
|
+
const source = readFileSync(new URL(file, folder), 'utf-8');
|
|
129
|
+
for (const [, specifier] of source.matchAll(/from '([^.'][^']*)'/g)) {
|
|
130
|
+
if (provided.test(specifier))
|
|
131
|
+
continue;
|
|
132
|
+
// `@scope/name/sub/path` and `name/sub/path` → the package name.
|
|
133
|
+
const parts = specifier.split('/');
|
|
134
|
+
imported.add(parts.slice(0, specifier.startsWith('@') ? 2 : 1).join('/'));
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
const listed = resolvePackages(resolveDependencies([name])).map((spec) => spec.slice(0, spec.lastIndexOf('@')));
|
|
138
|
+
expect(listed, name).toEqual(expect.arrayContaining([...imported]));
|
|
139
|
+
}
|
|
140
|
+
});
|
|
141
|
+
});
|
|
142
|
+
describe('themeColors', () => {
|
|
143
|
+
it("names colors dolan's theme sets in both schemes and maps for both Tailwinds", () => {
|
|
144
|
+
// doctor checks an app's theme for these, and quotes dolan's lines.
|
|
145
|
+
const theme = new URL('../../ui/src/lib/theme/', import.meta.url);
|
|
146
|
+
const read = (file) => readFileSync(new URL(file, theme), 'utf-8');
|
|
147
|
+
const [light, dark, plugin, css] = [
|
|
148
|
+
'default.css',
|
|
149
|
+
'dark.css',
|
|
150
|
+
'tailwind-plugin.ts',
|
|
151
|
+
'tailwind.css',
|
|
152
|
+
].map(read);
|
|
153
|
+
const colors = registry.flatMap((entry) => entry.themeColors ?? []);
|
|
154
|
+
expect(colors).toContain('glass-foreground');
|
|
155
|
+
for (const color of colors) {
|
|
156
|
+
expect(light, color).toContain(`--${color}:`);
|
|
157
|
+
expect(dark, color).toContain(`--${color}:`);
|
|
158
|
+
expect(plugin, color).toMatch(new RegExp(`'${color}'|'var\\(--${color}\\)'`));
|
|
159
|
+
expect(css, color).toContain(`var(--${color})`);
|
|
160
|
+
}
|
|
161
|
+
});
|
|
162
|
+
it("lists every glass color the glass component's code names", () => {
|
|
163
|
+
const folder = new URL('../../ui/src/lib/components/glass/', import.meta.url);
|
|
164
|
+
const named = new Set();
|
|
165
|
+
for (const file of readdirSync(folder)) {
|
|
166
|
+
if (file.endsWith('.test.ts'))
|
|
167
|
+
continue;
|
|
168
|
+
const source = readFileSync(new URL(file, folder), 'utf-8');
|
|
169
|
+
for (const [color] of source.matchAll(/glass-(?:[a-z]+-)*foreground|glass-tint|glass-dim/g)) {
|
|
170
|
+
named.add(color);
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
expect(getEntry('glass').themeColors).toEqual(expect.arrayContaining([...named]));
|
|
174
|
+
});
|
|
94
175
|
});
|
|
95
176
|
//# sourceMappingURL=registry.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.test.js","sourceRoot":"","sources":["../src/registry.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAE9C,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"registry.test.js","sourceRoot":"","sources":["../src/registry.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAE9C,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACpD,OAAO,EACL,iBAAiB,EACjB,QAAQ,EACR,QAAQ,EACR,mBAAmB,EACnB,eAAe,GAChB,MAAM,YAAY,CAAC;AAEpB,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;IACjC,EAAE,CAAC,6BAA6B,EAAE,GAAG,EAAE;QACrC,MAAM,KAAK,GAAG,iBAAiB,EAAE,CAAC;QAClC,MAAM,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QAClC,MAAM,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QAChC,MAAM,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;QACnC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,UAAU,EAAE,GAAG,EAAE;IACxB,EAAE,CAAC,sCAAsC,EAAE,GAAG,EAAE;QAC9C,MAAM,KAAK,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACjC,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC;YACpB,IAAI,EAAE,QAAQ;YACd,YAAY,EAAE,CAAC,SAAS,EAAE,OAAO,EAAE,MAAM,CAAC;YAC1C,QAAQ,EAAE,CAAC,iCAAiC,CAAC;YAC7C,WAAW,EAAE;gBACX,YAAY;gBACZ,uBAAuB;gBACvB,kBAAkB;gBAClB,wBAAwB;gBACxB,wBAAwB;gBACxB,WAAW;aACZ;SACF,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8CAA8C,EAAE,GAAG,EAAE;QACtD,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC;IAClD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,qBAAqB,EAAE,GAAG,EAAE;IACnC,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;QAChD,MAAM,CAAC,mBAAmB,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;IAC1D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4DAA4D,EAAE,GAAG,EAAE;QACpE,MAAM,QAAQ,GAAG,mBAAmB,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;QACjD,MAAM,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC;IACnE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wDAAwD,EAAE,GAAG,EAAE;QAChE,MAAM,QAAQ,GAAG,mBAAmB,CAAC,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC;QAC5D,MAAM,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC;IACnE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qBAAqB,EAAE,GAAG,EAAE;QAC7B,MAAM,CAAC,mBAAmB,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+CAA+C,EAAE,GAAG,EAAE;QACvD,MAAM,QAAQ,GAAG,mBAAmB,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC;QACtD,MAAM,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC,CAAC;IACpD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kDAAkD,EAAE,GAAG,EAAE;QAC1D,MAAM,CAAC,mBAAmB,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC,CAAC;IAC9E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iDAAiD,EAAE,GAAG,EAAE;QACzD,MAAM,CAAC,mBAAmB,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC,CAAC;IAC5E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,IAAI,CAAC;QACN,YAAY;QACZ,YAAY;QACZ,WAAW;QACX,eAAe;QACf,mBAAmB;KACpB,CAAC,CAAC,+CAA+C,EAAE,CAAC,MAAM,EAAE,EAAE;QAC7D,MAAM,CAAC,mBAAmB,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC;IACnE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mEAAmE,EAAE,GAAG,EAAE;QAC3E,MAAM,CAAC,mBAAmB,CAAC,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;YACvD,cAAc;YACd,QAAQ;YACR,OAAO;SACR,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+BAA+B,EAAE,GAAG,EAAE;QACvC,MAAM,CAAC,mBAAmB,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAC3D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kDAAkD,EAAE,GAAG,EAAE;QAC1D,yEAAyE;QACzE,qEAAqE;QACrE,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,8BAA8B,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC5E,KAAK,MAAM,IAAI,IAAI,iBAAiB,EAAE,EAAE,CAAC;YACvC,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,IAAI,GAAG,EAAE,UAAU,CAAC,CAAC;YAC/C,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAU,CAAC;YACnC,KAAK,MAAM,IAAI,IAAI,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC;gBACvC,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,OAAO,CAAC,CAAC;gBAC5D,KAAK,MAAM,CAAC,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,uBAAuB,CAAC,EAAE,CAAC;oBACnE,QAAQ,CAAC,GAAG,CAAC,OAAQ,CAAC,CAAC;gBACzB,CAAC;YACH,CAAC;YACD,MAAM,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,IAAI,EAAE,EAAE,IAAI,CAAC,CAAC,OAAO,CACxC,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAE,CAAC,YAAY,CAAC,CAAC,IAAI,EAAE,CACzC,CAAC;QACJ,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE;IAC/B,EAAE,CAAC,8DAA8D,EAAE,GAAG,EAAE;QACtE,MAAM,QAAQ,GAAG,eAAe,CAAC,CAAC,OAAO,EAAE,YAAY,EAAE,MAAM,CAAC,CAAC,CAAC;QAClE,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;YAClE,kBAAkB;YAClB,UAAU;SACX,CAAC,CAAC;QACH,MAAM,CAAC,eAAe,CAAC,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAC/D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kDAAkD,EAAE,GAAG,EAAE;QAC1D,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CACnB,YAAY,CAAC,IAAI,GAAG,CAAC,uBAAuB,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,CAC7B,CAAC;QAC9C,KAAK,MAAM,KAAK,IAAI,QAAQ,EAAE,CAAC;YAC7B,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,QAAQ,IAAI,EAAE,EAAE,CAAC;gBACxC,MAAM,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;gBACjC,MAAM,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,IAAI,CACnD,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,CACnB,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;QACrD,yEAAyE;QACzE,2EAA2E;QAC3E,wEAAwE;QACxE,2EAA2E;QAC3E,wEAAwE;QACxE,6CAA6C;QAC7C,MAAM,QAAQ,GAAG,sDAAsD,CAAC;QACxE,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,8BAA8B,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC5E,KAAK,MAAM,EAAE,IAAI,EAAE,IAAI,QAAQ,EAAE,CAAC;YAChC,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,IAAI,GAAG,EAAE,UAAU,CAAC,CAAC;YAC/C,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAU,CAAC;YACnC,KAAK,MAAM,IAAI,IAAI,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC;gBACvC,IAAI,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC;oBAAE,SAAS;gBACxC,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,OAAO,CAAC,CAAC;gBAC5D,KAAK,MAAM,CAAC,EAAE,SAAS,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,sBAAsB,CAAC,EAAE,CAAC;oBACpE,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAU,CAAC;wBAAE,SAAS;oBACxC,iEAAiE;oBACjE,MAAM,KAAK,GAAG,SAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;oBACpC,QAAQ,CAAC,GAAG,CACV,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,SAAU,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAC7D,CAAC;gBACJ,CAAC;YACH,CAAC;YACD,MAAM,MAAM,GAAG,eAAe,CAAC,mBAAmB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CACvE,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CACrC,CAAC;YACF,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;QACtE,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,aAAa,EAAE,GAAG,EAAE;IAC3B,EAAE,CAAC,6EAA6E,EAAE,GAAG,EAAE;QACrF,oEAAoE;QACpE,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,yBAAyB,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAClE,MAAM,IAAI,GAAG,CAAC,IAAY,EAAE,EAAE,CAAC,YAAY,CAAC,IAAI,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,OAAO,CAAC,CAAC;QAC3E,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,CAAC,GAAG;YACjC,aAAa;YACb,UAAU;YACV,oBAAoB;YACpB,cAAc;SACf,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACZ,MAAM,MAAM,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC;QACpE,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,kBAAkB,CAAC,CAAC;QAC7C,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,SAAS,CAAC,KAAK,KAAK,GAAG,CAAC,CAAC;YAC9C,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,SAAS,CAAC,KAAK,KAAK,GAAG,CAAC,CAAC;YAC7C,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,OAAO,CAC3B,IAAI,MAAM,CAAC,IAAI,KAAK,cAAc,KAAK,MAAM,CAAC,CAC/C,CAAC;YACF,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,SAAS,CAAC,SAAS,KAAK,GAAG,CAAC,CAAC;QAClD,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0DAA0D,EAAE,GAAG,EAAE;QAClE,MAAM,MAAM,GAAG,IAAI,GAAG,CACpB,oCAAoC,EACpC,MAAM,CAAC,IAAI,CAAC,GAAG,CAChB,CAAC;QACF,MAAM,KAAK,GAAG,IAAI,GAAG,EAAU,CAAC;QAChC,KAAK,MAAM,IAAI,IAAI,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC;YACvC,IAAI,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC;gBAAE,SAAS;YACxC,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,OAAO,CAAC,CAAC;YAC5D,KAAK,MAAM,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,QAAQ,CACnC,oDAAoD,CACrD,EAAE,CAAC;gBACF,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YACnB,CAAC;QACH,CAAC;QACD,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAE,CAAC,WAAW,CAAC,CAAC,OAAO,CAC5C,MAAM,CAAC,eAAe,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CACnC,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
package/dist/test-utils.d.ts
CHANGED
|
@@ -14,3 +14,8 @@ export type Fixture = {
|
|
|
14
14
|
};
|
|
15
15
|
export declare const createFixture: (options?: FixtureOptions) => Fixture;
|
|
16
16
|
export declare const DEFAULT_CONFIG: DolanConfig;
|
|
17
|
+
/**
|
|
18
|
+
* A theme file exactly as 22.2.2's `init` copied it (from the v22.2.2 tag),
|
|
19
|
+
* which left the lockfile without its hash. lockfile.ts knows its hash.
|
|
20
|
+
*/
|
|
21
|
+
export declare const shippedTheme: (file: "default.css" | "dark.css") => string;
|
package/dist/test-utils.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { mkdirSync, writeFileSync, rmSync } from 'node:fs';
|
|
1
|
+
import { mkdirSync, readFileSync, writeFileSync, rmSync } from 'node:fs';
|
|
2
2
|
import { join } from 'node:path';
|
|
3
3
|
import { tmpdir } from 'node:os';
|
|
4
4
|
import { randomUUID } from 'node:crypto';
|
|
@@ -62,4 +62,9 @@ export const DEFAULT_CONFIG = {
|
|
|
62
62
|
theme: 'src/styles',
|
|
63
63
|
},
|
|
64
64
|
};
|
|
65
|
+
/**
|
|
66
|
+
* A theme file exactly as 22.2.2's `init` copied it (from the v22.2.2 tag),
|
|
67
|
+
* which left the lockfile without its hash. lockfile.ts knows its hash.
|
|
68
|
+
*/
|
|
69
|
+
export const shippedTheme = (file) => readFileSync(new URL(`./fixtures/theme-22.2.2/${file}`, import.meta.url), 'utf-8');
|
|
65
70
|
//# sourceMappingURL=test-utils.js.map
|
package/dist/test-utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"test-utils.js","sourceRoot":"","sources":["../src/test-utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"test-utils.js","sourceRoot":"","sources":["../src/test-utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Fires a Lynx event on an element the way Lynx dispatches it, for the events
|
|
3
|
+
* the testing library's `fireEvent` has no shortcut for: `mouseleave`, an
|
|
4
|
+
* image's `load` and `error`, an accessibility action, and so on. `fields` go
|
|
5
|
+
* on the event, where Lynx puts its `detail`. `eventType` picks the kind of
|
|
6
|
+
* listener: `bindEvent` for `(bindtap)`, `catchEvent` for `(catchtap)`.
|
|
7
|
+
*
|
|
8
|
+
* fireLynxEvent(view, 'mouseleave');
|
|
9
|
+
* fireLynxEvent(image, 'error', { detail: { errMsg: 'Not found' } });
|
|
10
|
+
*
|
|
11
|
+
* dolan copies component tests into apps with an import of
|
|
12
|
+
* `@blotch/dolan/testing/fire-lynx-event`, a copy of this file.
|
|
13
|
+
*/
|
|
14
|
+
export declare const fireLynxEvent: (element: EventTarget, name: string, fields?: Record<string, unknown>, eventType?: string) => boolean;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Fires a Lynx event on an element the way Lynx dispatches it, for the events
|
|
3
|
+
* the testing library's `fireEvent` has no shortcut for: `mouseleave`, an
|
|
4
|
+
* image's `load` and `error`, an accessibility action, and so on. `fields` go
|
|
5
|
+
* on the event, where Lynx puts its `detail`. `eventType` picks the kind of
|
|
6
|
+
* listener: `bindEvent` for `(bindtap)`, `catchEvent` for `(catchtap)`.
|
|
7
|
+
*
|
|
8
|
+
* fireLynxEvent(view, 'mouseleave');
|
|
9
|
+
* fireLynxEvent(image, 'error', { detail: { errMsg: 'Not found' } });
|
|
10
|
+
*
|
|
11
|
+
* dolan copies component tests into apps with an import of
|
|
12
|
+
* `@blotch/dolan/testing/fire-lynx-event`, a copy of this file.
|
|
13
|
+
*/
|
|
14
|
+
export const fireLynxEvent = (element, name, fields = {}, eventType = 'bindEvent') => element.dispatchEvent(Object.assign(new Event(`${eventType}:${name}`), {
|
|
15
|
+
eventType,
|
|
16
|
+
eventName: name,
|
|
17
|
+
...fields,
|
|
18
|
+
}));
|
|
19
|
+
//# sourceMappingURL=fire-lynx-event.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fire-lynx-event.js","sourceRoot":"","sources":["../../src/testing/fire-lynx-event.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CAC3B,OAAoB,EACpB,IAAY,EACZ,SAAkC,EAAE,EACpC,SAAS,GAAG,WAAW,EACd,EAAE,CACX,OAAO,CAAC,aAAa,CACnB,MAAM,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,GAAG,SAAS,IAAI,IAAI,EAAE,CAAC,EAAE;IAC/C,SAAS;IACT,SAAS,EAAE,IAAI;IACf,GAAG,MAAM;CACV,CAAC,CACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { readFileSync } from 'node:fs';
|
|
2
|
+
import { describe, expect, it } from 'vitest';
|
|
3
|
+
import { fireLynxEvent } from './fire-lynx-event';
|
|
4
|
+
/**
|
|
5
|
+
* An element stand-in that records the events dispatched on it.
|
|
6
|
+
*/
|
|
7
|
+
const target = () => {
|
|
8
|
+
const element = new EventTarget();
|
|
9
|
+
const events = [];
|
|
10
|
+
for (const type of ['bindEvent:mouseleave', 'catchEvent:tap']) {
|
|
11
|
+
element.addEventListener(type, (event) => events.push(event));
|
|
12
|
+
}
|
|
13
|
+
return { element, events };
|
|
14
|
+
};
|
|
15
|
+
describe('fireLynxEvent', () => {
|
|
16
|
+
it('dispatches a bindEvent with its name, as Lynx does', () => {
|
|
17
|
+
const { element, events } = target();
|
|
18
|
+
expect(fireLynxEvent(element, 'mouseleave')).toBe(true);
|
|
19
|
+
expect(events).toHaveLength(1);
|
|
20
|
+
expect(events[0]).toMatchObject({
|
|
21
|
+
type: 'bindEvent:mouseleave',
|
|
22
|
+
eventType: 'bindEvent',
|
|
23
|
+
eventName: 'mouseleave',
|
|
24
|
+
});
|
|
25
|
+
});
|
|
26
|
+
it("puts the fields on the event, for the listener's kind", () => {
|
|
27
|
+
const { element, events } = target();
|
|
28
|
+
fireLynxEvent(element, 'tap', { detail: { x: 1 } }, 'catchEvent');
|
|
29
|
+
expect(events[0]).toMatchObject({
|
|
30
|
+
type: 'catchEvent:tap',
|
|
31
|
+
eventType: 'catchEvent',
|
|
32
|
+
detail: { x: 1 },
|
|
33
|
+
});
|
|
34
|
+
});
|
|
35
|
+
it('is the helper the component tests import from packages/ui', () => {
|
|
36
|
+
// Copied tests import `../../../test-utils/fire-lynx-event`, which dolan
|
|
37
|
+
// rewrites to this file. A copy that drifted would test differently in an
|
|
38
|
+
// app than in the library.
|
|
39
|
+
const shipped = readFileSync(new URL('./fire-lynx-event.ts', import.meta.url), 'utf-8');
|
|
40
|
+
const library = readFileSync(new URL('../../../ui/src/test-utils/fire-lynx-event.ts', import.meta.url), 'utf-8');
|
|
41
|
+
expect(shipped).toBe(library);
|
|
42
|
+
});
|
|
43
|
+
});
|
|
44
|
+
//# sourceMappingURL=fire-lynx-event.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fire-lynx-event.test.js","sourceRoot":"","sources":["../../src/testing/fire-lynx-event.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAElD;;GAEG;AACH,MAAM,MAAM,GAAG,GAAG,EAAE;IAClB,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC;IAClC,MAAM,MAAM,GAAY,EAAE,CAAC;IAC3B,KAAK,MAAM,IAAI,IAAI,CAAC,sBAAsB,EAAE,gBAAgB,CAAC,EAAE,CAAC;QAC9D,OAAO,CAAC,gBAAgB,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IAChE,CAAC;IACD,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;AAC7B,CAAC,CAAC;AAEF,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;IAC7B,EAAE,CAAC,oDAAoD,EAAE,GAAG,EAAE;QAC5D,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC;QACrC,MAAM,CAAC,aAAa,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACxD,MAAM,CAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QAC/B,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC;YAC9B,IAAI,EAAE,sBAAsB;YAC5B,SAAS,EAAE,WAAW;YACtB,SAAS,EAAE,YAAY;SACxB,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uDAAuD,EAAE,GAAG,EAAE;QAC/D,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC;QACrC,aAAa,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,YAAY,CAAC,CAAC;QAClE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC;YAC9B,IAAI,EAAE,gBAAgB;YACtB,SAAS,EAAE,YAAY;YACvB,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE;SACjB,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2DAA2D,EAAE,GAAG,EAAE;QACnE,yEAAyE;QACzE,0EAA0E;QAC1E,2BAA2B;QAC3B,MAAM,OAAO,GAAG,YAAY,CAC1B,IAAI,GAAG,CAAC,sBAAsB,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAChD,OAAO,CACR,CAAC;QACF,MAAM,OAAO,GAAG,YAAY,CAC1B,IAAI,GAAG,CAAC,+CAA+C,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EACzE,OAAO,CACR,CAAC;QACF,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAChC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The Lynx element functions a test watches with `vi.spyOn()`, as the testing
|
|
3
|
+
* library's main thread runs them.
|
|
4
|
+
*/
|
|
5
|
+
export type LynxMainThread = {
|
|
6
|
+
/** Starts, plays, pauses or cancels an element's animation. */
|
|
7
|
+
__ElementAnimate: (element: Element, args: unknown[]) => void;
|
|
8
|
+
/** Sets an attribute, such as a boolean jsdom doesn't keep as Lynx does. */
|
|
9
|
+
__SetAttribute: (element: Element, name: string, value: unknown) => void;
|
|
10
|
+
/** Sets one inline style, including those jsdom drops. */
|
|
11
|
+
__AddInlineStyle: (element: Element, name: string | number, value: unknown) => void;
|
|
12
|
+
};
|
|
13
|
+
/**
|
|
14
|
+
* The testing library's Lynx main thread, to watch what reaches Lynx where
|
|
15
|
+
* the rendered element can't show it: an animation, or a value jsdom drops.
|
|
16
|
+
*
|
|
17
|
+
* const animate = vi.spyOn(lynxMainThread(), '__ElementAnimate');
|
|
18
|
+
*
|
|
19
|
+
* dolan copies component tests into apps with an import of
|
|
20
|
+
* `@blotch/dolan/testing/lynx-main-thread`, a copy of this file.
|
|
21
|
+
*/
|
|
22
|
+
export declare const lynxMainThread: () => LynxMainThread;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The testing library's Lynx main thread, to watch what reaches Lynx where
|
|
3
|
+
* the rendered element can't show it: an animation, or a value jsdom drops.
|
|
4
|
+
*
|
|
5
|
+
* const animate = vi.spyOn(lynxMainThread(), '__ElementAnimate');
|
|
6
|
+
*
|
|
7
|
+
* dolan copies component tests into apps with an import of
|
|
8
|
+
* `@blotch/dolan/testing/lynx-main-thread`, a copy of this file.
|
|
9
|
+
*/
|
|
10
|
+
export const lynxMainThread = () => globalThis.lynxTestingEnv.mainThread.globalThis;
|
|
11
|
+
//# sourceMappingURL=lynx-main-thread.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lynx-main-thread.js","sourceRoot":"","sources":["../../src/testing/lynx-main-thread.ts"],"names":[],"mappings":"AAiBA;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,GAAmB,EAAE,CAE/C,UAGD,CAAC,cAAc,CAAC,UAAU,CAAC,UAAU,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { readFileSync } from 'node:fs';
|
|
2
|
+
import { afterEach, describe, expect, it } from 'vitest';
|
|
3
|
+
import { lynxMainThread } from './lynx-main-thread';
|
|
4
|
+
describe('lynxMainThread', () => {
|
|
5
|
+
afterEach(() => {
|
|
6
|
+
delete globalThis.lynxTestingEnv;
|
|
7
|
+
});
|
|
8
|
+
it("is the testing library's main thread globals", () => {
|
|
9
|
+
const globals = { __ElementAnimate: () => { } };
|
|
10
|
+
globalThis.lynxTestingEnv = {
|
|
11
|
+
mainThread: { globalThis: globals },
|
|
12
|
+
};
|
|
13
|
+
expect(lynxMainThread()).toBe(globals);
|
|
14
|
+
});
|
|
15
|
+
it('is the helper the component tests import from packages/ui', () => {
|
|
16
|
+
// Copied tests import `../../../test-utils/lynx-main-thread`, which dolan
|
|
17
|
+
// rewrites to this file. A copy that drifted would test differently in an
|
|
18
|
+
// app than in the library.
|
|
19
|
+
const shipped = readFileSync(new URL('./lynx-main-thread.ts', import.meta.url), 'utf-8');
|
|
20
|
+
const library = readFileSync(new URL('../../../ui/src/test-utils/lynx-main-thread.ts', import.meta.url), 'utf-8');
|
|
21
|
+
expect(shipped).toBe(library);
|
|
22
|
+
});
|
|
23
|
+
});
|
|
24
|
+
//# sourceMappingURL=lynx-main-thread.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lynx-main-thread.test.js","sourceRoot":"","sources":["../../src/testing/lynx-main-thread.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEpD,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;IAC9B,SAAS,CAAC,GAAG,EAAE;QACb,OAAQ,UAA2C,CAAC,cAAc,CAAC;IACrE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8CAA8C,EAAE,GAAG,EAAE;QACtD,MAAM,OAAO,GAAG,EAAE,gBAAgB,EAAE,GAAG,EAAE,GAAE,CAAC,EAAE,CAAC;QAC9C,UAA2C,CAAC,cAAc,GAAG;YAC5D,UAAU,EAAE,EAAE,UAAU,EAAE,OAAO,EAAE;SACpC,CAAC;QACF,MAAM,CAAC,cAAc,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACzC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2DAA2D,EAAE,GAAG,EAAE;QACnE,0EAA0E;QAC1E,0EAA0E;QAC1E,2BAA2B;QAC3B,MAAM,OAAO,GAAG,YAAY,CAC1B,IAAI,GAAG,CAAC,uBAAuB,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EACjD,OAAO,CACR,CAAC;QACF,MAAM,OAAO,GAAG,YAAY,CAC1B,IAAI,GAAG,CACL,gDAAgD,EAChD,MAAM,CAAC,IAAI,CAAC,GAAG,CAChB,EACD,OAAO,CACR,CAAC;QACF,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAChC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Sets an Angular `input()` / `model()` signal's value from a test.
|
|
3
|
+
*
|
|
4
|
+
* Under `ng test`, which compiles ahead of time, bind the input from a host
|
|
5
|
+
* component's template or call `ComponentRef.setInput()` instead. This is for
|
|
6
|
+
* tests compiled just in time (plain Vitest), where neither reaches a signal
|
|
7
|
+
* input: that metadata is only emitted by Angular's AOT compiler. Angular's own
|
|
8
|
+
* reactive-node API is the supported escape hatch there: reach the
|
|
9
|
+
* input's SIGNAL node and call `applyValueToInputSignal`, exactly as a parent
|
|
10
|
+
* template binding would at runtime. This drives a PUBLIC input to a value — it
|
|
11
|
+
* does not touch a component's private (`#`) state — and mirrors the existing
|
|
12
|
+
* pattern in packages/runtime/src/lib/transition/lynx-transition.test.ts.
|
|
13
|
+
*/
|
|
14
|
+
export declare const setInputSignal: (signalFn: unknown, value: unknown) => void;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Sets an Angular `input()` / `model()` signal's value from a test.
|
|
3
|
+
*
|
|
4
|
+
* Under `ng test`, which compiles ahead of time, bind the input from a host
|
|
5
|
+
* component's template or call `ComponentRef.setInput()` instead. This is for
|
|
6
|
+
* tests compiled just in time (plain Vitest), where neither reaches a signal
|
|
7
|
+
* input: that metadata is only emitted by Angular's AOT compiler. Angular's own
|
|
8
|
+
* reactive-node API is the supported escape hatch there: reach the
|
|
9
|
+
* input's SIGNAL node and call `applyValueToInputSignal`, exactly as a parent
|
|
10
|
+
* template binding would at runtime. This drives a PUBLIC input to a value — it
|
|
11
|
+
* does not touch a component's private (`#`) state — and mirrors the existing
|
|
12
|
+
* pattern in packages/runtime/src/lib/transition/lynx-transition.test.ts.
|
|
13
|
+
*/
|
|
14
|
+
export const setInputSignal = (signalFn, value) => {
|
|
15
|
+
const symbols = Object.getOwnPropertySymbols(signalFn);
|
|
16
|
+
const signalSymbol = symbols.find((s) => s.toString() === 'Symbol(SIGNAL)');
|
|
17
|
+
const node = signalFn[signalSymbol];
|
|
18
|
+
const proto = Object.getPrototypeOf(node);
|
|
19
|
+
proto.applyValueToInputSignal(node, value);
|
|
20
|
+
};
|
|
21
|
+
//# sourceMappingURL=set-input-signal.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"set-input-signal.js","sourceRoot":"","sources":["../../src/testing/set-input-signal.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,QAAiB,EAAE,KAAc,EAAQ,EAAE;IACxE,MAAM,OAAO,GAAG,MAAM,CAAC,qBAAqB,CAAC,QAAkB,CAAC,CAAC;IACjE,MAAM,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE,KAAK,gBAAgB,CAAE,CAAC;IAC7E,MAAM,IAAI,GAAI,QAAoC,CAAC,YAAY,CAAC,CAAC;IACjE,MAAM,KAAK,GAAG,MAAM,CAAC,cAAc,CAAC,IAAI,CAEvC,CAAC;IACF,KAAK,CAAC,uBAAuB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AAC7C,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { Injector, input, runInInjectionContext } from '@angular/core';
|
|
2
|
+
import { readFileSync } from 'node:fs';
|
|
3
|
+
import { describe, expect, it } from 'vitest';
|
|
4
|
+
import { setInputSignal } from './set-input-signal';
|
|
5
|
+
describe('setInputSignal', () => {
|
|
6
|
+
it("sets an input signal's value", () => {
|
|
7
|
+
const count = runInInjectionContext(Injector.create({ providers: [] }), () => input(0));
|
|
8
|
+
setInputSignal(count, 5);
|
|
9
|
+
expect(count()).toBe(5);
|
|
10
|
+
});
|
|
11
|
+
it('is the helper the component tests import from packages/ui', () => {
|
|
12
|
+
// Copied tests import `../../../test-utils/set-input-signal`, which dolan
|
|
13
|
+
// rewrites to this file. A copy that drifted would test differently in an
|
|
14
|
+
// app than in the library.
|
|
15
|
+
const shipped = readFileSync(new URL('./set-input-signal.ts', import.meta.url), 'utf-8');
|
|
16
|
+
const library = readFileSync(new URL('../../../ui/src/test-utils/set-input-signal.ts', import.meta.url), 'utf-8');
|
|
17
|
+
expect(shipped).toBe(library);
|
|
18
|
+
});
|
|
19
|
+
});
|
|
20
|
+
//# sourceMappingURL=set-input-signal.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"set-input-signal.test.js","sourceRoot":"","sources":["../../src/testing/set-input-signal.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AACvE,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEpD,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;IAC9B,EAAE,CAAC,8BAA8B,EAAE,GAAG,EAAE;QACtC,MAAM,KAAK,GAAG,qBAAqB,CACjC,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,EAClC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CACf,CAAC;QACF,cAAc,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QACzB,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC1B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2DAA2D,EAAE,GAAG,EAAE;QACnE,0EAA0E;QAC1E,0EAA0E;QAC1E,2BAA2B;QAC3B,MAAM,OAAO,GAAG,YAAY,CAC1B,IAAI,GAAG,CAAC,uBAAuB,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EACjD,OAAO,CACR,CAAC;QACF,MAAM,OAAO,GAAG,YAAY,CAC1B,IAAI,GAAG,CACL,gDAAgD,EAChD,MAAM,CAAC,IAAI,CAAC,GAAG,CAChB,EACD,OAAO,CACR,CAAC;QACF,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAChC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|