@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.
Files changed (36) hide show
  1. package/README.md +59 -22
  2. package/RELEASE_NOTES.md +45 -25
  3. package/class-generation/index.ts +23 -14
  4. package/dist/class-generation/index.d.ts +3 -2
  5. package/dist/class-generation/index.d.ts.map +1 -1
  6. package/dist/index.cjs +516 -182
  7. package/dist/index.cjs.map +1 -1
  8. package/dist/index.d.ts +3 -2
  9. package/dist/index.d.ts.map +1 -1
  10. package/dist/index.mjs +516 -182
  11. package/dist/index.mjs.map +1 -1
  12. package/dist/plugin/create-vue-pom-generator-plugins.d.ts +2 -2
  13. package/dist/plugin/create-vue-pom-generator-plugins.d.ts.map +1 -1
  14. package/dist/plugin/nuxt-discovery.d.ts +47 -0
  15. package/dist/plugin/nuxt-discovery.d.ts.map +1 -0
  16. package/dist/plugin/path-utils.d.ts +4 -5
  17. package/dist/plugin/path-utils.d.ts.map +1 -1
  18. package/dist/plugin/support/build-plugin.d.ts +6 -3
  19. package/dist/plugin/support/build-plugin.d.ts.map +1 -1
  20. package/dist/plugin/support/dev-plugin.d.ts +6 -3
  21. package/dist/plugin/support/dev-plugin.d.ts.map +1 -1
  22. package/dist/plugin/support-plugins.d.ts +5 -2
  23. package/dist/plugin/support-plugins.d.ts.map +1 -1
  24. package/dist/plugin/types.d.ts +33 -17
  25. package/dist/plugin/types.d.ts.map +1 -1
  26. package/dist/plugin/vue-plugin.d.ts +1 -1
  27. package/dist/plugin/vue-plugin.d.ts.map +1 -1
  28. package/dist/router-introspection.d.ts +4 -2
  29. package/dist/router-introspection.d.ts.map +1 -1
  30. package/dist/tests/nuxt-discovery.test.d.ts +2 -0
  31. package/dist/tests/nuxt-discovery.test.d.ts.map +1 -0
  32. package/package.json +1 -1
  33. package/dist/plugin/support/generation-metrics.d.ts +0 -10
  34. package/dist/plugin/support/generation-metrics.d.ts.map +0 -1
  35. package/dist/tests/generation-metrics.test.d.ts +0 -2
  36. 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
- scanDirs: ["src"],
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, if you use `generation.router.type: "nuxt"`, think in terms of external Vue plugin ownership.
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 `scanDirs`, compiles each `.vue` file into a snapshot, writes the configured TypeScript outputs once, then batches add/change/delete events and regenerates incrementally.
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 `scanDirs`.
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 scanned app directories.
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:** standard Vue-router apps and Nuxt file-based routing need different discovery paths.
1018
- - **Benefit:** one config field covers both app styles.
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.52
1
+ ● # Release Notes: v1.0.53
2
2
 
3
3
  ## Highlights
4
4
 
5
- - Relaxed Vite peer dependency constraint to support newer Vite versions
6
- - Improved AST-based handling of nullish coalescing in key expressions
7
- - Fixed repository-wide lint failures and updated lint configuration
8
- - Enhanced test coverage for utility functions and transform edge cases
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
- **Dependencies**
13
- - Relaxed Vite peer dependency version range to improve compatibility with downstream projects
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
- **Code Quality & Linting**
16
- - Added ESLint rule exceptions for generated runtime code patterns
17
- - Clarified AST and lint rule interactions in configuration
18
- - Polished lint cleanup helper utilities
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
- **AST & Transform Logic**
22
- - Implemented AST-based splitting for nullish coalescing key expressions
23
- - Updated transform logic to handle edge cases more robustly
24
- - Improved runtime generation to meet updated lint expectations
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
- None.
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
- - #13 Relax Vite peer dependency range (https://github.com/immense/vue-pom-generator/pull/13)
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
- All changes validated through existing test suite (`npm test`). Added test coverage for new
42
- utility functions and transform edge cases.
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
- viewsDir?: string;
340
- scanDirs?: string[];
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 viewsDir = options.viewsDir ?? "src/views";
345
- const viewsDirAbs = path.isAbsolute(viewsDir) ? viewsDir : path.resolve(root, viewsDir);
346
- const scanDirs = options.scanDirs?.length ? options.scanDirs : ["src"];
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
- scanDirs,
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
- viewsDir?: string;
691
- scanDirs?: string[];
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
- viewsDir,
753
- scanDirs,
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
- viewsDir,
767
- scanDirs,
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
- viewsDir?: string;
95
- scanDirs?: string[];
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;AAwW/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,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IAEpB,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,iBA+FnC"}
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"}