@immense/vue-pom-generator 1.0.52 → 1.0.53
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 +59 -22
- package/RELEASE_NOTES.md +45 -25
- package/class-generation/index.ts +23 -14
- package/dist/class-generation/index.d.ts +3 -2
- package/dist/class-generation/index.d.ts.map +1 -1
- package/dist/index.cjs +516 -182
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +3 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.mjs +516 -182
- package/dist/index.mjs.map +1 -1
- package/dist/plugin/create-vue-pom-generator-plugins.d.ts +2 -2
- package/dist/plugin/create-vue-pom-generator-plugins.d.ts.map +1 -1
- package/dist/plugin/nuxt-discovery.d.ts +47 -0
- package/dist/plugin/nuxt-discovery.d.ts.map +1 -0
- package/dist/plugin/path-utils.d.ts +4 -5
- package/dist/plugin/path-utils.d.ts.map +1 -1
- package/dist/plugin/support/build-plugin.d.ts +6 -3
- package/dist/plugin/support/build-plugin.d.ts.map +1 -1
- package/dist/plugin/support/dev-plugin.d.ts +6 -3
- package/dist/plugin/support/dev-plugin.d.ts.map +1 -1
- package/dist/plugin/support-plugins.d.ts +5 -2
- package/dist/plugin/support-plugins.d.ts.map +1 -1
- package/dist/plugin/types.d.ts +33 -17
- package/dist/plugin/types.d.ts.map +1 -1
- package/dist/plugin/vue-plugin.d.ts +1 -1
- package/dist/plugin/vue-plugin.d.ts.map +1 -1
- package/dist/router-introspection.d.ts +4 -2
- package/dist/router-introspection.d.ts.map +1 -1
- package/dist/tests/nuxt-discovery.test.d.ts +2 -0
- package/dist/tests/nuxt-discovery.test.d.ts.map +1 -0
- package/package.json +1 -1
- package/dist/plugin/support/generation-metrics.d.ts +0 -10
- package/dist/plugin/support/generation-metrics.d.ts.map +0 -1
- package/dist/tests/generation-metrics.test.d.ts +0 -2
- package/dist/tests/generation-metrics.test.d.ts.map +0 -1
package/README.md
CHANGED
|
@@ -191,9 +191,10 @@ Exports:
|
|
|
191
191
|
- `createVuePomGeneratorPlugins()`
|
|
192
192
|
- `vuePomGenerator()` (alias)
|
|
193
193
|
- `defineVuePomGeneratorConfig()`
|
|
194
|
+
- `defineNuxtPomGeneratorConfig()`
|
|
194
195
|
- `@immense/vue-pom-generator/eslint`
|
|
195
196
|
|
|
196
|
-
## Basic Vite setup
|
|
197
|
+
## Basic Vue/Vite setup
|
|
197
198
|
|
|
198
199
|
```ts
|
|
199
200
|
import { defineConfig } from "vite";
|
|
@@ -208,7 +209,8 @@ const pomConfig = defineVuePomGeneratorConfig({
|
|
|
208
209
|
injection: {
|
|
209
210
|
attribute: "data-testid",
|
|
210
211
|
viewsDir: "src/views",
|
|
211
|
-
|
|
212
|
+
componentDirs: ["src/components"],
|
|
213
|
+
layoutDirs: ["src/layouts"],
|
|
212
214
|
wrapperSearchRoots: ["../shared-ui/src/components"],
|
|
213
215
|
nativeWrappers: {
|
|
214
216
|
AppButton: { role: "button" },
|
|
@@ -261,6 +263,29 @@ export default defineConfig({
|
|
|
261
263
|
});
|
|
262
264
|
```
|
|
263
265
|
|
|
266
|
+
## Basic Nuxt setup
|
|
267
|
+
|
|
268
|
+
```ts
|
|
269
|
+
import { defineNuxtConfig } from "nuxt/config";
|
|
270
|
+
import { defineNuxtPomGeneratorConfig, vuePomGenerator } from "@immense/vue-pom-generator";
|
|
271
|
+
|
|
272
|
+
const pomConfig = defineNuxtPomGeneratorConfig({
|
|
273
|
+
generation: {
|
|
274
|
+
outDir: "tests/playwright/__generated__",
|
|
275
|
+
},
|
|
276
|
+
});
|
|
277
|
+
|
|
278
|
+
export default defineNuxtConfig({
|
|
279
|
+
vite: {
|
|
280
|
+
plugins: [
|
|
281
|
+
...vuePomGenerator(pomConfig),
|
|
282
|
+
],
|
|
283
|
+
},
|
|
284
|
+
});
|
|
285
|
+
```
|
|
286
|
+
|
|
287
|
+
Nuxt projects are auto-detected from standard project artifacts, and their pages/layouts/components are resolved from Nuxt's own config. That means custom page directories such as `dir.pages = "views"` come from `nuxt.config`, while component directories are picked up automatically from Nuxt conventions/config. `defineNuxtPomGeneratorConfig(...)` is optional, but it keeps the config surface Nuxt-specific at type-check time.
|
|
288
|
+
|
|
264
289
|
### Important Vite ownership rule
|
|
265
290
|
|
|
266
291
|
By default, this package creates and returns its own `@vitejs/plugin-vue` instance.
|
|
@@ -289,7 +314,7 @@ export default defineConfig({
|
|
|
289
314
|
});
|
|
290
315
|
```
|
|
291
316
|
|
|
292
|
-
Nuxt-style routing also uses the resolved app-owned Vue plugin. In practice,
|
|
317
|
+
Nuxt-style routing also uses the resolved app-owned Vue plugin. In practice, Nuxt projects are auto-detected and use external Vue plugin ownership automatically.
|
|
293
318
|
|
|
294
319
|
## What gets generated
|
|
295
320
|
|
|
@@ -320,7 +345,7 @@ If you emit outside a `__generated__` path, the generator also manages `.gitattr
|
|
|
320
345
|
|
|
321
346
|
This is important if you are deciding whether the tool will fit into a real codebase.
|
|
322
347
|
|
|
323
|
-
- **Dev server:** on startup, it scans the configured
|
|
348
|
+
- **Dev server:** on startup, it scans the configured Vue page/component/layout directories (or the directories resolved from Nuxt config in Nuxt mode), compiles each `.vue` file into a snapshot, writes the configured TypeScript outputs once, then batches add/change/delete events and regenerates incrementally.
|
|
324
349
|
- **Build:** it generates from the richest build pass it sees, which matters because Vite can run multiple passes (for example SSR plus client). The generator avoids letting a thinner pass clobber a richer one.
|
|
325
350
|
- **Always-on virtual module:** `virtual:testids` is registered whether generation is enabled or disabled.
|
|
326
351
|
- **Generation can be disabled:** `generation: false` still keeps compile-time test-id injection and the virtual module, but skips emitted POM files.
|
|
@@ -857,6 +882,30 @@ The sections below follow the actual `VuePomGeneratorPluginOptions` shape from `
|
|
|
857
882
|
injection: { viewsDir: "app/pages" }
|
|
858
883
|
```
|
|
859
884
|
|
|
885
|
+
#### `injection.componentDirs`
|
|
886
|
+
|
|
887
|
+
- **What it does:** Lists the directories that should be treated as reusable component roots.
|
|
888
|
+
- **Why it exists:** Vue apps often keep components outside a single catch-all tree, and the generator needs explicit component roots now that generic scan lists are gone.
|
|
889
|
+
- **Benefit:** component naming and filesystem supplementation stay aligned with the directories you actually consider components.
|
|
890
|
+
- **Without it:** the generator uses `["src/components"]`.
|
|
891
|
+
- **Example:**
|
|
892
|
+
|
|
893
|
+
```ts
|
|
894
|
+
injection: { componentDirs: ["src/components", "../shared-ui/src/components"] }
|
|
895
|
+
```
|
|
896
|
+
|
|
897
|
+
#### `injection.layoutDirs`
|
|
898
|
+
|
|
899
|
+
- **What it does:** Lists layout-style Vue directories that should be included in generation and naming.
|
|
900
|
+
- **Why it exists:** some Vue apps keep shell components outside `views` and `components`, but still want them in the generated POM graph.
|
|
901
|
+
- **Benefit:** layouts participate explicitly without falling back to a generic scan of unrelated folders.
|
|
902
|
+
- **Without it:** the generator uses `["src/layouts"]`.
|
|
903
|
+
- **Example:**
|
|
904
|
+
|
|
905
|
+
```ts
|
|
906
|
+
injection: { layoutDirs: ["src/layouts"] }
|
|
907
|
+
```
|
|
908
|
+
|
|
860
909
|
#### `injection.nativeWrappers`
|
|
861
910
|
|
|
862
911
|
- **What it does:** Describes wrapper components so the generator can treat them like native controls.
|
|
@@ -910,24 +959,12 @@ The sections below follow the actual `VuePomGeneratorPluginOptions` shape from `
|
|
|
910
959
|
injection: { excludeComponents: ["LegacyWidget"] }
|
|
911
960
|
```
|
|
912
961
|
|
|
913
|
-
#### `injection.scanDirs`
|
|
914
|
-
|
|
915
|
-
- **What it does:** Sets which directories are scanned for `.vue` files when building the POM graph.
|
|
916
|
-
- **Why it exists:** real projects rarely keep all SFCs under one folder, especially in Nuxt or monorepos.
|
|
917
|
-
- **Benefit:** generation sees the same files your app actually uses.
|
|
918
|
-
- **Without it:** the generator scans `src`.
|
|
919
|
-
- **Example:**
|
|
920
|
-
|
|
921
|
-
```ts
|
|
922
|
-
injection: { scanDirs: ["src", "components", "layouts"] }
|
|
923
|
-
```
|
|
924
|
-
|
|
925
962
|
#### `injection.wrapperSearchRoots`
|
|
926
963
|
|
|
927
|
-
- **What it does:** Adds extra roots for wrapper inference outside
|
|
964
|
+
- **What it does:** Adds extra roots for wrapper inference outside the configured page/component/layout directories.
|
|
928
965
|
- **Why it exists:** wrapper components often live in sibling packages or shared UI workspaces.
|
|
929
966
|
- **Benefit:** local wrapper inference can still work across package boundaries.
|
|
930
|
-
- **Without it:** no extra wrapper lookup is done outside the
|
|
967
|
+
- **Without it:** no extra wrapper lookup is done outside the configured app directories.
|
|
931
968
|
- **Example:**
|
|
932
969
|
|
|
933
970
|
```ts
|
|
@@ -1013,13 +1050,13 @@ If omitted, router introspection is off.
|
|
|
1013
1050
|
|
|
1014
1051
|
#### `generation.router.type`
|
|
1015
1052
|
|
|
1016
|
-
- **What it does:** Chooses the router discovery strategy.
|
|
1017
|
-
- **Why it exists:**
|
|
1018
|
-
- **Benefit:**
|
|
1053
|
+
- **What it does:** Chooses the Vue-router discovery strategy for standard Vue apps.
|
|
1054
|
+
- **Why it exists:** some Vue apps want router introspection without any Nuxt integration.
|
|
1055
|
+
- **Benefit:** keeps Vue-router discovery explicit.
|
|
1019
1056
|
- **Without it:** defaults to `"vue-router"`.
|
|
1057
|
+
- **Nuxt note:** Nuxt projects are auto-detected. Do not set `generation.router.type: "nuxt"`.
|
|
1020
1058
|
- **Current options:**
|
|
1021
1059
|
- `"vue-router"`
|
|
1022
|
-
- `"nuxt"`
|
|
1023
1060
|
|
|
1024
1061
|
#### `generation.router.moduleShims`
|
|
1025
1062
|
|
package/RELEASE_NOTES.md
CHANGED
|
@@ -1,43 +1,63 @@
|
|
|
1
|
-
● # Release Notes: v1.0.
|
|
1
|
+
● # Release Notes: v1.0.53
|
|
2
2
|
|
|
3
3
|
## Highlights
|
|
4
4
|
|
|
5
|
-
-
|
|
6
|
-
|
|
7
|
-
-
|
|
8
|
-
-
|
|
5
|
+
- **Nuxt auto-detection**: Framework mode is now automatically detected—no manual configuration
|
|
6
|
+
required
|
|
7
|
+
- **Simplified configuration**: Removed `scanDirs` option in favor of automatic discovery
|
|
8
|
+
- **Improved dev-mode reliability**: Multiple fixes for Nuxt app-root POM generation and
|
|
9
|
+
snapshot preservation
|
|
10
|
+
- **Cleaner codebase**: Removed unused generation-metrics feature
|
|
9
11
|
|
|
10
12
|
## Changes
|
|
11
13
|
|
|
12
|
-
|
|
13
|
-
-
|
|
14
|
+
### Configuration & Auto-detection
|
|
15
|
+
- Auto-detect Nuxt mode without requiring explicit `mode` config
|
|
16
|
+
- Remove `scanDirs` configuration option (replaced by automatic discovery)
|
|
14
17
|
|
|
15
|
-
|
|
16
|
-
-
|
|
17
|
-
-
|
|
18
|
-
-
|
|
19
|
-
- Fixed existing lint violations across the codebase
|
|
18
|
+
### Bug Fixes
|
|
19
|
+
- Resolve Nuxt app-root dev POM clobber issue
|
|
20
|
+
- Preserve richer dev POM snapshots during generation
|
|
21
|
+
- Confirm incomplete dev snapshots to prevent silent failures
|
|
20
22
|
|
|
21
|
-
|
|
22
|
-
-
|
|
23
|
-
-
|
|
24
|
-
-
|
|
25
|
-
|
|
26
|
-
**Testing**
|
|
27
|
-
- Added test coverage for new utility functions
|
|
28
|
-
- Updated test expectations for class generation coverage
|
|
29
|
-
- Enhanced transform tests with additional edge case scenarios
|
|
23
|
+
### Internal
|
|
24
|
+
- Add dedicated Nuxt discovery module (`plugin/nuxt-discovery.ts`)
|
|
25
|
+
- Remove generation-metrics feature and associated code
|
|
26
|
+
- Refactor path utilities and plugin creation logic
|
|
30
27
|
|
|
31
28
|
## Breaking Changes
|
|
32
29
|
|
|
33
|
-
|
|
30
|
+
- **Removed `scanDirs` config option**: The plugin now uses automatic directory discovery.
|
|
31
|
+
Remove any `scanDirs` configuration from your setup.
|
|
32
|
+
- **Removed generation-metrics**: The generation metrics tracking feature has been removed along
|
|
33
|
+
with `plugin/support/generation-metrics.ts`.
|
|
34
34
|
|
|
35
35
|
## Pull Requests Included
|
|
36
36
|
|
|
37
|
-
- #
|
|
37
|
+
- #15 [fix: resolve Nuxt app-root dev POM
|
|
38
|
+
clobber](https://github.com/immense/vue-pom-generator/pull/15) (@dkattan)
|
|
39
|
+
- #13 [Relax Vite peer dependency range](https://github.com/immense/vue-pom-generator/pull/13)
|
|
40
|
+
(@Copilot)
|
|
41
|
+
- #12 [feat: add split Playwright POM output for
|
|
42
|
+
discoverability](https://github.com/immense/vue-pom-generator/pull/12) (@dkattan)
|
|
43
|
+
- #11 [feat: fail fast on unnameable wrapper
|
|
44
|
+
handlers](https://github.com/immense/vue-pom-generator/pull/11) (@dkattan)
|
|
45
|
+
- #8 [chore: bump version to 1.0.43](https://github.com/immense/vue-pom-generator/pull/8)
|
|
46
|
+
(@mayfieldiv)
|
|
47
|
+
- #7 [test: add build–serve parity regression
|
|
48
|
+
tests](https://github.com/immense/vue-pom-generator/pull/7) (@mayfieldiv)
|
|
49
|
+
- #6 [fix: fail fast on dev snapshot generation
|
|
50
|
+
errors](https://github.com/immense/vue-pom-generator/pull/6) (@dkattan)
|
|
51
|
+
- #5 [fix: dev-mode POM generation parity with build
|
|
52
|
+
mode](https://github.com/immense/vue-pom-generator/pull/5) (@mayfieldiv)
|
|
53
|
+
- #4 [Fix keyed POM dedupe and C# navigation
|
|
54
|
+
returns](https://github.com/immense/vue-pom-generator/pull/4) (@dkattan)
|
|
55
|
+
- #1 [Add PR release-notes preview
|
|
56
|
+
comments](https://github.com/immense/vue-pom-generator/pull/1) (@dkattan)
|
|
38
57
|
|
|
39
58
|
## Testing
|
|
40
59
|
|
|
41
|
-
|
|
42
|
-
|
|
60
|
+
Added `tests/nuxt-discovery.test.ts` for new Nuxt auto-detection. Significantly expanded
|
|
61
|
+
`tests/build-serve-parity.test.ts` (+210 lines) and updated multiple test suites for
|
|
62
|
+
configuration and dev-plugin changes.
|
|
43
63
|
|
|
@@ -336,23 +336,29 @@ async function getRouteMetaByComponent(
|
|
|
336
336
|
routerEntry?: string,
|
|
337
337
|
routerType?: "vue-router" | "nuxt",
|
|
338
338
|
options: {
|
|
339
|
-
|
|
340
|
-
|
|
339
|
+
pageDirs?: string[];
|
|
340
|
+
componentDirs?: string[];
|
|
341
|
+
layoutDirs?: string[];
|
|
341
342
|
} = {},
|
|
342
343
|
): Promise<Record<string, RouteMeta>> {
|
|
343
344
|
const root = projectRoot ?? process.cwd();
|
|
344
|
-
const
|
|
345
|
-
const
|
|
346
|
-
const
|
|
345
|
+
const pageDirs = options.pageDirs?.length ? options.pageDirs : ["src/views"];
|
|
346
|
+
const pageDirsAbs = pageDirs.map(dir => path.isAbsolute(dir) ? dir : path.resolve(root, dir));
|
|
347
|
+
const primaryPageDirAbs = pageDirsAbs[0] ?? path.resolve(root, "src/views");
|
|
348
|
+
const sourceDirs = [
|
|
349
|
+
...pageDirs,
|
|
350
|
+
...(options.componentDirs?.length ? options.componentDirs : ["src/components"]),
|
|
351
|
+
...(options.layoutDirs?.length ? options.layoutDirs : ["src/layouts"]),
|
|
352
|
+
];
|
|
347
353
|
const extraRoots = process.cwd() !== root ? [process.cwd()] : [];
|
|
348
354
|
|
|
349
355
|
const { routeMetaEntries } = routerType === "nuxt"
|
|
350
|
-
? await introspectNuxtPages(root)
|
|
356
|
+
? await introspectNuxtPages(root, { pageDirs: pageDirsAbs })
|
|
351
357
|
: await parseRouterFileFromCwd(resolveRouterEntry(root, routerEntry), {
|
|
352
358
|
componentNaming: {
|
|
353
359
|
projectRoot: root,
|
|
354
|
-
viewsDirAbs,
|
|
355
|
-
|
|
360
|
+
viewsDirAbs: primaryPageDirAbs,
|
|
361
|
+
sourceDirs,
|
|
356
362
|
extraRoots,
|
|
357
363
|
},
|
|
358
364
|
});
|
|
@@ -687,8 +693,9 @@ export interface GenerateFilesOptions {
|
|
|
687
693
|
/** The type of router introspection to perform. */
|
|
688
694
|
routerType?: "vue-router" | "nuxt";
|
|
689
695
|
|
|
690
|
-
|
|
691
|
-
|
|
696
|
+
pageDirs?: string[];
|
|
697
|
+
componentDirs?: string[];
|
|
698
|
+
layoutDirs?: string[];
|
|
692
699
|
|
|
693
700
|
routeMetaByComponent?: Record<string, RouteMeta>;
|
|
694
701
|
}
|
|
@@ -749,8 +756,9 @@ export async function generateFiles(
|
|
|
749
756
|
vueRouterFluentChaining,
|
|
750
757
|
routerEntry,
|
|
751
758
|
routerType,
|
|
752
|
-
|
|
753
|
-
|
|
759
|
+
pageDirs,
|
|
760
|
+
componentDirs,
|
|
761
|
+
layoutDirs,
|
|
754
762
|
routeMetaByComponent: routeMetaByComponentOverride,
|
|
755
763
|
} = options;
|
|
756
764
|
|
|
@@ -763,8 +771,9 @@ export async function generateFiles(
|
|
|
763
771
|
const routeMetaByComponent = routeMetaByComponentOverride
|
|
764
772
|
?? (vueRouterFluentChaining
|
|
765
773
|
? await getRouteMetaByComponent(projectRoot, routerEntry, routerType, {
|
|
766
|
-
|
|
767
|
-
|
|
774
|
+
pageDirs,
|
|
775
|
+
componentDirs,
|
|
776
|
+
layoutDirs,
|
|
768
777
|
})
|
|
769
778
|
: undefined);
|
|
770
779
|
const generatedFilePaths: string[] = [];
|
|
@@ -91,8 +91,9 @@ export interface GenerateFilesOptions {
|
|
|
91
91
|
routerEntry?: string;
|
|
92
92
|
/** The type of router introspection to perform. */
|
|
93
93
|
routerType?: "vue-router" | "nuxt";
|
|
94
|
-
|
|
95
|
-
|
|
94
|
+
pageDirs?: string[];
|
|
95
|
+
componentDirs?: string[];
|
|
96
|
+
layoutDirs?: string[];
|
|
96
97
|
routeMetaByComponent?: Record<string, RouteMeta>;
|
|
97
98
|
}
|
|
98
99
|
export declare function generateFiles(componentHierarchyMap: Map<string, IComponentDependencies>, vueFilesPathMap: Map<string, string>, basePageClassPath: string, options?: GenerateFilesOptions): Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../class-generation/index.ts"],"names":[],"mappings":"AAUA,OAAO,EAAkC,oCAAoC,EAAE,MAAM,sBAAsB,CAAC;AAsB5G,OAAO,EACL,sBAAsB,EAMvB,MAAM,UAAU,CAAC;AAQlB,OAAO,EAAE,oCAAoC,EAAE,CAAC;AAqKhD,UAAU,SAAS;IACjB,QAAQ,EAAE,MAAM,CAAC;CAClB;AASD,UAAU,mBAAmB;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,wBAAwB,EAAE,MAAM,EAAE,CAAC;IACnC,QAAQ,CAAC,EAAE,OAAO,GAAG,YAAY,GAAG,MAAM,GAAG,oBAAoB,CAAC;IAClE,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AASD,MAAM,MAAM,yBAAyB,GAAG,YAAY,GAAG,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../class-generation/index.ts"],"names":[],"mappings":"AAUA,OAAO,EAAkC,oCAAoC,EAAE,MAAM,sBAAsB,CAAC;AAsB5G,OAAO,EACL,sBAAsB,EAMvB,MAAM,UAAU,CAAC;AAQlB,OAAO,EAAE,oCAAoC,EAAE,CAAC;AAqKhD,UAAU,SAAS;IACjB,QAAQ,EAAE,MAAM,CAAC;CAClB;AASD,UAAU,mBAAmB;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,wBAAwB,EAAE,MAAM,EAAE,CAAC;IACnC,QAAQ,CAAC,EAAE,OAAO,GAAG,YAAY,GAAG,MAAM,GAAG,oBAAoB,CAAC;IAClE,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AASD,MAAM,MAAM,yBAAyB,GAAG,YAAY,GAAG,OAAO,CAAC;AA8W/D,MAAM,WAAW,oBAAoB;IACnC;;;;OAIG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB;;;;;;;;;;;;;;;OAeG;IACH,gBAAgB,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG;QAAE,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAE1D;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB;;;;;;;OAOG;IACH,sBAAsB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAEhD;;;;;OAKG;IACH,oCAAoC,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC;IAEzD;;;;OAIG;IACH,oBAAoB,CAAC,EAAE,mBAAmB,EAAE,CAAC;IAE7C,yEAAyE;IACzE,eAAe,CAAC,EAAE,MAAM,CAAC;IAEzB,uDAAuD;IACvD,aAAa,CAAC,EAAE,KAAK,CAAC,IAAI,GAAG,QAAQ,CAAC,CAAC;IAEvC;;;;;OAKG;IACH,yBAAyB,CAAC,EAAE,yBAAyB,CAAC;IAEtD,6BAA6B;IAC7B,MAAM,CAAC,EAAE;QACP,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,CAAC;IAEF,6EAA6E;IAC7E,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAElC,2FAA2F;IAC3F,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,mDAAmD;IACnD,UAAU,CAAC,EAAE,YAAY,GAAG,MAAM,CAAC;IAEnC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IAEtB,oBAAoB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;CAClD;AAqCD,wBAAsB,aAAa,CACjC,qBAAqB,EAAE,GAAG,CAAC,MAAM,EAAE,sBAAsB,CAAC,EAC1D,eAAe,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EACpC,iBAAiB,EAAE,MAAM,EACzB,OAAO,GAAE,oBAAyB,iBAiGnC"}
|