@postxl/generators 1.12.3 → 1.14.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.
Files changed (195) hide show
  1. package/dist/backend-ai/ai.generator.d.ts +18 -0
  2. package/dist/backend-ai/ai.generator.js +174 -0
  3. package/dist/backend-ai/ai.generator.js.map +1 -0
  4. package/dist/backend-ai/generators/ai-agent-service.generator.d.ts +4 -0
  5. package/dist/backend-ai/generators/ai-agent-service.generator.js +264 -0
  6. package/dist/backend-ai/generators/ai-agent-service.generator.js.map +1 -0
  7. package/dist/backend-ai/generators/ai-cache-service.generator.d.ts +1 -0
  8. package/dist/backend-ai/generators/ai-cache-service.generator.js +110 -0
  9. package/dist/backend-ai/generators/ai-cache-service.generator.js.map +1 -0
  10. package/dist/backend-ai/generators/ai-config.generator.d.ts +1 -0
  11. package/dist/backend-ai/generators/ai-config.generator.js +27 -0
  12. package/dist/backend-ai/generators/ai-config.generator.js.map +1 -0
  13. package/dist/backend-ai/generators/ai-module.generator.d.ts +2 -0
  14. package/dist/backend-ai/generators/ai-module.generator.js +89 -0
  15. package/dist/backend-ai/generators/ai-module.generator.js.map +1 -0
  16. package/dist/backend-ai/generators/ai-route.generator.d.ts +1 -0
  17. package/dist/backend-ai/generators/ai-route.generator.js +29 -0
  18. package/dist/backend-ai/generators/ai-route.generator.js.map +1 -0
  19. package/dist/backend-ai/generators/ai-tools-service.generator.d.ts +4 -0
  20. package/dist/backend-ai/generators/ai-tools-service.generator.js +222 -0
  21. package/dist/backend-ai/generators/ai-tools-service.generator.js.map +1 -0
  22. package/dist/backend-ai/generators/model-provider-interface.generator.d.ts +1 -0
  23. package/dist/backend-ai/generators/model-provider-interface.generator.js +48 -0
  24. package/dist/backend-ai/generators/model-provider-interface.generator.js.map +1 -0
  25. package/dist/backend-ai/generators/openai-model-provider-service.generator.d.ts +1 -0
  26. package/dist/backend-ai/generators/openai-model-provider-service.generator.js +128 -0
  27. package/dist/backend-ai/generators/openai-model-provider-service.generator.js.map +1 -0
  28. package/dist/backend-ai/index.d.ts +4 -0
  29. package/dist/backend-ai/index.js +40 -0
  30. package/dist/backend-ai/index.js.map +1 -0
  31. package/dist/backend-authentication/generators/authentication-service.generator.js +1 -1
  32. package/dist/backend-core/backend.generator.js +0 -4
  33. package/dist/backend-core/backend.generator.js.map +1 -1
  34. package/dist/backend-core/generators/main.generator.js +4 -3
  35. package/dist/backend-core/generators/main.generator.js.map +1 -1
  36. package/dist/backend-core/modules/backend-module-xlport.generator.js +1 -1
  37. package/dist/backend-e2e/backend-e2e.generator.js +4 -4
  38. package/dist/backend-e2e/backend-e2e.generator.js.map +1 -1
  39. package/dist/backend-excel-io/excel-io.generator.d.ts +19 -0
  40. package/dist/backend-excel-io/excel-io.generator.js +106 -0
  41. package/dist/backend-excel-io/excel-io.generator.js.map +1 -0
  42. package/dist/backend-excel-io/generators/excel-io-service.generator.d.ts +9 -0
  43. package/dist/backend-excel-io/generators/excel-io-service.generator.js +680 -0
  44. package/dist/backend-excel-io/generators/excel-io-service.generator.js.map +1 -0
  45. package/dist/backend-excel-io/index.d.ts +2 -0
  46. package/dist/backend-excel-io/index.js +22 -0
  47. package/dist/backend-excel-io/index.js.map +1 -0
  48. package/dist/backend-excel-io/template/README.md +24 -0
  49. package/dist/backend-excel-io/template/excel-io.controller.ts +195 -0
  50. package/dist/backend-excel-io/template/excel-io.module.ts +17 -0
  51. package/dist/backend-import/generators/detect-delta/detect-delta-functions.generator.js +149 -14
  52. package/dist/backend-import/generators/detect-delta/detect-delta-functions.generator.js.map +1 -1
  53. package/dist/backend-import/generators/filter-error-rows.generator.d.ts +2 -0
  54. package/dist/backend-import/generators/filter-error-rows.generator.js +28 -0
  55. package/dist/backend-import/generators/filter-error-rows.generator.js.map +1 -0
  56. package/dist/backend-import/generators/import-service.generator.js +126 -2
  57. package/dist/backend-import/generators/import-service.generator.js.map +1 -1
  58. package/dist/backend-import/import.generator.js +2 -0
  59. package/dist/backend-import/import.generator.js.map +1 -1
  60. package/dist/backend-repositories/generators/model-repository.generator.js +17 -2
  61. package/dist/backend-repositories/generators/model-repository.generator.js.map +1 -1
  62. package/dist/backend-router-trpc/generators/app-routes.generator.js +8 -1
  63. package/dist/backend-router-trpc/generators/app-routes.generator.js.map +1 -1
  64. package/dist/backend-router-trpc/generators/excel-io-route.generator.d.ts +4 -0
  65. package/dist/backend-router-trpc/generators/excel-io-route.generator.js +35 -0
  66. package/dist/backend-router-trpc/generators/excel-io-route.generator.js.map +1 -0
  67. package/dist/backend-router-trpc/generators/trpc-plugin.generator.js +9 -0
  68. package/dist/backend-router-trpc/generators/trpc-plugin.generator.js.map +1 -1
  69. package/dist/backend-router-trpc/generators/trpc-router-module.generator.js +9 -1
  70. package/dist/backend-router-trpc/generators/trpc-router-module.generator.js.map +1 -1
  71. package/dist/backend-router-trpc/generators/trpc-shared.generator.js +16 -1
  72. package/dist/backend-router-trpc/generators/trpc-shared.generator.js.map +1 -1
  73. package/dist/backend-router-trpc/router-trpc.generator.d.ts +3 -1
  74. package/dist/backend-router-trpc/router-trpc.generator.js +6 -0
  75. package/dist/backend-router-trpc/router-trpc.generator.js.map +1 -1
  76. package/dist/backend-seed/seed.generator.js +10 -1
  77. package/dist/backend-seed/seed.generator.js.map +1 -1
  78. package/dist/base/base.generator.js +0 -4
  79. package/dist/base/base.generator.js.map +1 -1
  80. package/dist/base/template/scripts/setup.sh +9 -4
  81. package/dist/base/template/sonar-project.properties +9 -1
  82. package/dist/decoders/datamodel-decoder.generator.js +91 -1
  83. package/dist/decoders/datamodel-decoder.generator.js.map +1 -1
  84. package/dist/decoders/decoders.generator.d.ts +9 -0
  85. package/dist/decoders/decoders.generator.js +15 -0
  86. package/dist/decoders/decoders.generator.js.map +1 -1
  87. package/dist/devops/devops.generator.d.ts +5 -1
  88. package/dist/devops/devops.generator.js +5 -4
  89. package/dist/devops/devops.generator.js.map +1 -1
  90. package/dist/devops/generators/bitbucket-pipelines-yml.generator.js +1 -0
  91. package/dist/devops/generators/bitbucket-pipelines-yml.generator.js.map +1 -1
  92. package/dist/devops/generators/docker-compose-yml.generator.d.ts +1 -1
  93. package/dist/devops/generators/docker-compose-yml.generator.js +16 -1
  94. package/dist/devops/generators/docker-compose-yml.generator.js.map +1 -1
  95. package/dist/devops/generators/e2e-yml.generator.js +35 -10
  96. package/dist/devops/generators/e2e-yml.generator.js.map +1 -1
  97. package/dist/devops/generators/jenkinsfile.generator.js +25 -1
  98. package/dist/devops/generators/jenkinsfile.generator.js.map +1 -1
  99. package/dist/e2e/template/e2e/specs/example.spec.ts-snapshots/Navigate-to-homepage-and-take-snapshot-1-chromium-linux.png +0 -0
  100. package/dist/frontend-actions/actions.generator.d.ts +9 -0
  101. package/dist/frontend-actions/actions.generator.js +111 -0
  102. package/dist/frontend-actions/actions.generator.js.map +1 -0
  103. package/dist/frontend-actions/generators/ai-action-text.utils.generator.d.ts +1 -0
  104. package/dist/frontend-actions/generators/ai-action-text.utils.generator.js +52 -0
  105. package/dist/frontend-actions/generators/ai-action-text.utils.generator.js.map +1 -0
  106. package/dist/frontend-actions/generators/ai-assistant-store.generator.d.ts +1 -0
  107. package/dist/frontend-actions/generators/ai-assistant-store.generator.js +230 -0
  108. package/dist/frontend-actions/generators/ai-assistant-store.generator.js.map +1 -0
  109. package/dist/frontend-actions/generators/ai-sidebar-content.generator.d.ts +1 -0
  110. package/dist/frontend-actions/generators/ai-sidebar-content.generator.js +139 -0
  111. package/dist/frontend-actions/generators/ai-sidebar-content.generator.js.map +1 -0
  112. package/dist/frontend-actions/generators/ai-sidepane.generator.d.ts +1 -0
  113. package/dist/frontend-actions/generators/ai-sidepane.generator.js +98 -0
  114. package/dist/frontend-actions/generators/ai-sidepane.generator.js.map +1 -0
  115. package/dist/frontend-actions/generators/base-global-actions.generator.d.ts +1 -0
  116. package/dist/frontend-actions/generators/base-global-actions.generator.js +405 -0
  117. package/dist/frontend-actions/generators/base-global-actions.generator.js.map +1 -0
  118. package/dist/frontend-actions/generators/command-palette-action.generator.d.ts +1 -0
  119. package/dist/frontend-actions/generators/command-palette-action.generator.js +87 -0
  120. package/dist/frontend-actions/generators/command-palette-action.generator.js.map +1 -0
  121. package/dist/frontend-actions/generators/command-palette-store.generator.d.ts +1 -0
  122. package/dist/frontend-actions/generators/command-palette-store.generator.js +288 -0
  123. package/dist/frontend-actions/generators/command-palette-store.generator.js.map +1 -0
  124. package/dist/frontend-actions/generators/command-palette.generator.d.ts +5 -0
  125. package/dist/frontend-actions/generators/command-palette.generator.js +332 -0
  126. package/dist/frontend-actions/generators/command-palette.generator.js.map +1 -0
  127. package/dist/frontend-actions/generators/filter-utils.generator.d.ts +1 -0
  128. package/dist/frontend-actions/generators/filter-utils.generator.js +50 -0
  129. package/dist/frontend-actions/generators/filter-utils.generator.js.map +1 -0
  130. package/dist/frontend-actions/generators/sidepanel-toggle.generator.d.ts +1 -0
  131. package/dist/frontend-actions/generators/sidepanel-toggle.generator.js +37 -0
  132. package/dist/frontend-actions/generators/sidepanel-toggle.generator.js.map +1 -0
  133. package/dist/frontend-actions/index.d.ts +4 -0
  134. package/dist/frontend-actions/index.js +40 -0
  135. package/dist/frontend-actions/index.js.map +1 -0
  136. package/dist/frontend-admin/admin.generator.d.ts +5 -1
  137. package/dist/frontend-admin/admin.generator.js +36 -1
  138. package/dist/frontend-admin/admin.generator.js.map +1 -1
  139. package/dist/frontend-admin/generators/admin-global-actions.generator.d.ts +4 -0
  140. package/dist/frontend-admin/generators/admin-global-actions.generator.js +230 -0
  141. package/dist/frontend-admin/generators/admin-global-actions.generator.js.map +1 -0
  142. package/dist/frontend-admin/generators/admin-overview-page.generator.js +21 -1
  143. package/dist/frontend-admin/generators/admin-overview-page.generator.js.map +1 -1
  144. package/dist/frontend-admin/generators/admin-sidebar.generator.js +20 -0
  145. package/dist/frontend-admin/generators/admin-sidebar.generator.js.map +1 -1
  146. package/dist/frontend-admin/generators/detail-sidebar.generator.js +44 -32
  147. package/dist/frontend-admin/generators/detail-sidebar.generator.js.map +1 -1
  148. package/dist/frontend-admin/generators/excel-io-page.generator.d.ts +4 -0
  149. package/dist/frontend-admin/generators/excel-io-page.generator.js +258 -0
  150. package/dist/frontend-admin/generators/excel-io-page.generator.js.map +1 -0
  151. package/dist/frontend-admin/generators/import-review-page-result-stage.generator.d.ts +1 -0
  152. package/dist/frontend-admin/generators/import-review-page-result-stage.generator.js +104 -0
  153. package/dist/frontend-admin/generators/import-review-page-result-stage.generator.js.map +1 -0
  154. package/dist/frontend-admin/generators/import-review-page-review-stage.generator.d.ts +1 -0
  155. package/dist/frontend-admin/generators/import-review-page-review-stage.generator.js +1031 -0
  156. package/dist/frontend-admin/generators/import-review-page-review-stage.generator.js.map +1 -0
  157. package/dist/frontend-admin/generators/import-review-page-upload-stage.generator.d.ts +1 -0
  158. package/dist/frontend-admin/generators/import-review-page-upload-stage.generator.js +77 -0
  159. package/dist/frontend-admin/generators/import-review-page-upload-stage.generator.js.map +1 -0
  160. package/dist/frontend-admin/generators/import-review-page.generator.d.ts +7 -0
  161. package/dist/frontend-admin/generators/import-review-page.generator.js +180 -0
  162. package/dist/frontend-admin/generators/import-review-page.generator.js.map +1 -0
  163. package/dist/frontend-admin/generators/model-admin-page.generator.js +198 -60
  164. package/dist/frontend-admin/generators/model-admin-page.generator.js.map +1 -1
  165. package/dist/frontend-admin/utils.d.ts +1 -0
  166. package/dist/frontend-admin/utils.js +26 -33
  167. package/dist/frontend-admin/utils.js.map +1 -1
  168. package/dist/frontend-core/frontend.generator.js +1 -2
  169. package/dist/frontend-core/frontend.generator.js.map +1 -1
  170. package/dist/frontend-core/generators/tsconfig.generator.js +1 -0
  171. package/dist/frontend-core/generators/tsconfig.generator.js.map +1 -1
  172. package/dist/frontend-core/template/.env.example +3 -0
  173. package/dist/frontend-core/template/src/components/admin/excel-io-actions.tsx +64 -0
  174. package/dist/frontend-core/template/src/components/admin/table-view-panel.tsx +41 -3
  175. package/dist/frontend-core/template/src/components/ui/color-mode-toggle/color-mode-toggle.tsx +1 -1
  176. package/dist/frontend-core/template/src/hooks/use-excel-io.ts +137 -0
  177. package/dist/frontend-core/template/src/hooks/use-import-review.ts +143 -0
  178. package/dist/frontend-core/template/src/lib/color.ts +6 -3
  179. package/dist/frontend-core/template/src/lib/config.ts +3 -1
  180. package/dist/frontend-core/template/src/lib/excel-download.ts +28 -0
  181. package/dist/frontend-core/types/hook.d.ts +1 -1
  182. package/dist/frontend-tables/generators/model-table.generator.js +21 -13
  183. package/dist/frontend-tables/generators/model-table.generator.js.map +1 -1
  184. package/dist/generators.js +6 -0
  185. package/dist/generators.js.map +1 -1
  186. package/dist/index.d.ts +3 -0
  187. package/dist/index.js +11 -2
  188. package/dist/index.js.map +1 -1
  189. package/dist/seed-data/seed-data.generator.d.ts +3 -0
  190. package/dist/seed-data/seed-data.generator.js +45 -1
  191. package/dist/seed-data/seed-data.generator.js.map +1 -1
  192. package/dist/types/template/ai.types.ts +34 -0
  193. package/dist/types/types.generator.js +1 -0
  194. package/dist/types/types.generator.js.map +1 -1
  195. package/package.json +4 -4
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.generateSidepanelToggle = generateSidepanelToggle;
4
+ function generateSidepanelToggle() {
5
+ return `import { PanelRightIcon } from 'lucide-react'
6
+ import { useLocation } from '@tanstack/react-router'
7
+
8
+ import { Button } from '@postxl/ui-components'
9
+
10
+ import { APP_CONFIG } from '@lib/config'
11
+ import { useAiAssistantActions, useAiAssistantState } from './ai-assistant-store'
12
+
13
+ export const SidepanelToggle = () => {
14
+ const pathname = useLocation({ select: (location) => location.pathname })
15
+ const open = useAiAssistantState((state) => state.open)
16
+ const { setOpen } = useAiAssistantActions()
17
+ const isAdminRoute = pathname.startsWith('/admin')
18
+
19
+ if (!APP_CONFIG.enableAI && !isAdminRoute) {
20
+ return null
21
+ }
22
+
23
+ return (
24
+ <Button
25
+ variant="outline"
26
+ size="icon"
27
+ className="fixed right-4 top-4 z-40"
28
+ onClick={() => setOpen(!open)}
29
+ aria-label={open ? 'Close sidepanel' : 'Open sidepanel'}
30
+ >
31
+ <PanelRightIcon className="size-4" />
32
+ </Button>
33
+ )
34
+ }
35
+ `;
36
+ }
37
+ //# sourceMappingURL=sidepanel-toggle.generator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sidepanel-toggle.generator.js","sourceRoot":"","sources":["../../../src/frontend-actions/generators/sidepanel-toggle.generator.ts"],"names":[],"mappings":";;AAAA,0DAgCC;AAhCD,SAAgB,uBAAuB;IACrC,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8BR,CAAA;AACD,CAAC"}
@@ -0,0 +1,4 @@
1
+ import * as Generator from './actions.generator';
2
+ export type WithFrontendActions<Context extends import('@postxl/generator').Context> = Generator.WithFrontendActions<Context>;
3
+ export declare const frontendActionsGenerator: import("@postxl/generator").GeneratorInterface;
4
+ export declare const frontendActionsGeneratorId: string & import("zod").$brand<"PXL.GeneratorInterfaceId">;
@@ -0,0 +1,40 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.frontendActionsGeneratorId = exports.frontendActionsGenerator = void 0;
37
+ const Generator = __importStar(require("./actions.generator"));
38
+ exports.frontendActionsGenerator = Generator.generator;
39
+ exports.frontendActionsGeneratorId = Generator.generatorId;
40
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/frontend-actions/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,+DAAgD;AAInC,QAAA,wBAAwB,GAAG,SAAS,CAAC,SAAS,CAAA;AAC9C,QAAA,0BAA0B,GAAG,SAAS,CAAC,WAAW,CAAA"}
@@ -1,12 +1,14 @@
1
1
  import * as Generator from '@postxl/generator';
2
2
  import { WithBackendTrpcRouter } from '../backend-router-trpc';
3
3
  import { WithBase } from '../base';
4
+ import { WithFrontendActions } from '../frontend-actions';
4
5
  import { WithFrontend } from '../frontend-core';
5
6
  import { WithForms } from '../frontend-forms';
6
7
  import { WithTables } from '../frontend-tables';
7
8
  import { WithTrpcClient } from '../frontend-trpc-client/trpc-client.generator';
8
9
  import { WithTypes } from '../types';
9
- type ContextRequirements = WithTables<WithFrontend<WithForms<WithTrpcClient<WithBackendTrpcRouter<WithTypes<WithBase<Generator.Context>>>>>>>;
10
+ type FrontendAdminBaseContext = WithFrontend<WithForms<WithTrpcClient<WithBackendTrpcRouter<WithTypes<WithBase<Generator.Context>>>>>>;
11
+ type ContextRequirements = WithTables<WithFrontendActions<FrontendAdminBaseContext>>;
10
12
  export type ModelContextRequirements = Generator.InferModelContext<ContextRequirements>;
11
13
  export type EnumContextRequirements = Generator.InferEnumContext<ContextRequirements>;
12
14
  export type ContextResult = WithAdmin<ContextRequirements>;
@@ -71,6 +73,8 @@ type ContextAdmin = {
71
73
  */
72
74
  overview: Page;
73
75
  dataManagement: Page;
76
+ excelIo: Page;
77
+ importReview: Page;
74
78
  };
75
79
  };
76
80
  type ModelContextAdmin = {
@@ -37,14 +37,18 @@ exports.generator = exports.generatorId = void 0;
37
37
  const node_path_1 = require("node:path");
38
38
  const Generator = __importStar(require("@postxl/generator"));
39
39
  const base_1 = require("../base");
40
+ const frontend_actions_1 = require("../frontend-actions");
40
41
  const frontend_tables_1 = require("../frontend-tables");
41
42
  const types_1 = require("../types");
43
+ const admin_global_actions_generator_1 = require("./generators/admin-global-actions.generator");
42
44
  const admin_overview_page_generator_1 = require("./generators/admin-overview-page.generator");
43
45
  const admin_sidebar_generator_1 = require("./generators/admin-sidebar.generator");
44
46
  const audit_log_sidebar_generator_1 = require("./generators/audit-log-sidebar.generator");
45
47
  const comment_sidebar_generator_1 = require("./generators/comment-sidebar.generator");
46
48
  const data_management_page_generator_1 = require("./generators/data-management-page.generator");
47
49
  const detail_sidebar_generator_1 = require("./generators/detail-sidebar.generator");
50
+ const excel_io_page_generator_1 = require("./generators/excel-io-page.generator");
51
+ const import_review_page_generator_1 = require("./generators/import-review-page.generator");
48
52
  const model_admin_page_generator_1 = require("./generators/model-admin-page.generator");
49
53
  const utils_1 = require("./utils");
50
54
  const paths = {
@@ -57,7 +61,7 @@ exports.generatorId = Generator.toGeneratorInterfaceId('frontend-admin');
57
61
  const moduleName = Generator.toBackendModuleName('admin');
58
62
  exports.generator = {
59
63
  id: exports.generatorId,
60
- requires: [base_1.baseGeneratorId, types_1.typesGeneratorId, frontend_tables_1.frontendTablesGeneratorId],
64
+ requires: [base_1.baseGeneratorId, types_1.typesGeneratorId, frontend_tables_1.frontendTablesGeneratorId, frontend_actions_1.frontendActionsGeneratorId],
61
65
  register: (context) => {
62
66
  const hasCommentModel = context.models.has('Comment');
63
67
  const admin = {
@@ -99,6 +103,20 @@ exports.generator = {
99
103
  },
100
104
  route: '/admin/data-management',
101
105
  },
106
+ excelIo: {
107
+ pageComponent: {
108
+ name: Generator.toFunctionName('ExcelIoPage'),
109
+ location: Generator.toBackendModuleLocation('@pages/admin/excel-io.page'),
110
+ },
111
+ route: '/admin/excel-io',
112
+ },
113
+ importReview: {
114
+ pageComponent: {
115
+ name: Generator.toFunctionName('ImportReviewPage'),
116
+ location: Generator.toBackendModuleLocation('@pages/admin/import-review.page'),
117
+ },
118
+ route: '/admin/import-review',
119
+ },
102
120
  },
103
121
  };
104
122
  const models = new Map();
@@ -111,6 +129,10 @@ exports.generator = {
111
129
  hasIndex: false,
112
130
  isAbsolute: true,
113
131
  });
132
+ context.frontendActions.globalActionHooks.push({
133
+ name: Generator.toFunctionName('useAdminGlobalActions'),
134
+ location: Generator.toBackendModuleLocation('@admin/admin-global.actions'),
135
+ });
114
136
  return { ...context, admin, models };
115
137
  },
116
138
  generate: async (context) => {
@@ -126,7 +148,20 @@ exports.generator = {
126
148
  vfs,
127
149
  content: (0, data_management_page_generator_1.generateDataManagementPage)({ context }),
128
150
  });
151
+ (0, utils_1.generatePage)({
152
+ page: context.admin.pages.excelIo,
153
+ paths,
154
+ vfs,
155
+ content: (0, excel_io_page_generator_1.generateExcelIoPage)({ context }),
156
+ });
157
+ (0, utils_1.generatePage)({
158
+ page: context.admin.pages.importReview,
159
+ paths,
160
+ vfs,
161
+ content: (0, import_review_page_generator_1.generateImportReviewPage)({ context }),
162
+ });
129
163
  context.vfs.write((0, node_path_1.join)(paths.components, 'admin', Generator.toLocalReactComponent(context.admin.components.sidebar)), (0, admin_sidebar_generator_1.generateAdminSidebar)({ context }));
164
+ context.vfs.write((0, node_path_1.join)(paths.components, 'admin', 'admin-global.actions.tsx'), (0, admin_global_actions_generator_1.generateAdminGlobalActions)({ context }));
130
165
  context.vfs.write((0, node_path_1.join)(paths.components, 'admin', Generator.toLocalReactComponent(context.admin.components.auditLogSidebar)), (0, audit_log_sidebar_generator_1.generateAuditLogSidebar)({ context }));
131
166
  context.vfs.write((0, node_path_1.join)(paths.components, 'admin', Generator.toLocalReactComponent(context.admin.components.adminDetailSidebar)), (0, detail_sidebar_generator_1.generateAdminDetailSidebar)({ context }));
132
167
  if (context.admin.components.commentSidebar) {
@@ -1 +1 @@
1
- {"version":3,"file":"admin.generator.js","sourceRoot":"","sources":["../../src/frontend-admin/admin.generator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"admin.generator.js","sourceRoot":"","sources":["../../src/frontend-admin/admin.generator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { ContextResult } from '../admin.generator';
2
+ export declare function generateAdminGlobalActions({ context }: {
3
+ context: ContextResult;
4
+ }): string;
@@ -0,0 +1,230 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.generateAdminGlobalActions = generateAdminGlobalActions;
37
+ const Generator = __importStar(require("@postxl/generator"));
38
+ const utils_1 = require("../utils");
39
+ function generateAdminGlobalActions({ context }) {
40
+ const imports = Generator.ImportGenerator.from(Generator.toFilePath('./admin-global-actions.tsx'))
41
+ .addImport({ from: Generator.toPackageName('react'), items: [Generator.toFunctionName('useEffect')] })
42
+ .addImport({
43
+ from: Generator.toPackageName('@tanstack/react-router'),
44
+ items: [Generator.toFunctionName('useNavigate')],
45
+ })
46
+ .addImport({
47
+ from: Generator.toBackendModuleLocation('@app-actions/command-palette-action'),
48
+ items: [Generator.toFunctionName('command'), Generator.toFunctionName('waitForNextFrame')],
49
+ })
50
+ .addImport({
51
+ from: Generator.toBackendModuleLocation('@app-actions/command-palette-store'),
52
+ items: [Generator.toFunctionName('useCommandPaletteActions')],
53
+ })
54
+ .addImport({
55
+ from: Generator.toBackendModuleLocation('@lib/config'),
56
+ items: [Generator.toConstantName('APP_CONFIG')],
57
+ })
58
+ .addImport({
59
+ from: Generator.toBackendModuleLocation('@context-providers/auth-context-provider'),
60
+ items: [Generator.toFunctionName('getAuthHeaders')],
61
+ })
62
+ .addImport({
63
+ from: Generator.toBackendModuleLocation('@lib/excel-download'),
64
+ items: [Generator.toFunctionName('downloadBlob'), Generator.toFunctionName('getFilenameFromContentDisposition')],
65
+ });
66
+ const { schemas: sortedSchemas, modelsBySchema } = (0, utils_1.groupAndSortModelsBySchema)(context);
67
+ const createActions = sortedSchemas
68
+ .map((schema) => {
69
+ const models = (modelsBySchema.get(schema) ?? []).filter((model) => !model.isReadonly);
70
+ return models
71
+ .map((model) => {
72
+ return `
73
+ command({
74
+ key: 'create-admin-${model.name.toLowerCase()}',
75
+ visibility: 'visible',
76
+ group: 'Create',
77
+ label: 'Create new ${model.userFriendlyName}',
78
+ keywords: ['create', 'new', '${model.name.toLowerCase()}', '${model.userFriendlyName.toLowerCase()}'],
79
+ run: async () => {
80
+ if (typeof globalThis !== 'undefined') {
81
+ globalThis.sessionStorage.setItem('pxl:create-intent-model', '${model.name}')
82
+ globalThis.dispatchEvent(new CustomEvent('pxl:create-intent', { detail: { model: '${model.name}' } }))
83
+ }
84
+ await navigate({ to: '${model.route}' })
85
+ await waitForNextFrame()
86
+ return { kind: 'close' }
87
+ },
88
+ })
89
+ `;
90
+ })
91
+ .join(',\n');
92
+ })
93
+ .join(',\n');
94
+ const modelActions = sortedSchemas
95
+ .map((schema) => {
96
+ const models = modelsBySchema.get(schema) ?? [];
97
+ return models
98
+ .map((model) => {
99
+ return `
100
+ command({
101
+ key: 'navigate-admin-${model.name.toLowerCase()}',
102
+ visibility: 'visible',
103
+ group: 'Navigate',
104
+ label: 'Admin: ${model.userFriendlyName}',
105
+ keywords: ['admin', '${model.name.toLowerCase()}', '${model.userFriendlyName.toLowerCase()}'],
106
+ run: async () => {
107
+ await navigate({ to: '${model.route}' })
108
+ await waitForNextFrame()
109
+ return { kind: 'close' }
110
+ },
111
+ })
112
+ `;
113
+ })
114
+ .join(',\n');
115
+ })
116
+ .join(',\n');
117
+ const exportActions = sortedSchemas
118
+ .map((schema) => {
119
+ const models = modelsBySchema.get(schema) ?? [];
120
+ return models
121
+ .map((model) => {
122
+ const endpoint = model.route.split('/').findLast(Boolean) ?? model.name.toLowerCase();
123
+ const fallbackFilename = `${endpoint}.xlsx`;
124
+ return `
125
+ command({
126
+ key: 'export-admin-${model.name.toLowerCase()}-excel',
127
+ visibility: 'visible',
128
+ group: 'Export',
129
+ label: 'Export: ${model.userFriendlyName} (Excel)',
130
+ keywords: ['export', 'excel', '${model.name.toLowerCase()}', '${model.userFriendlyName.toLowerCase()}'],
131
+ run: async () => {
132
+ await downloadFromExcelIo('export/${endpoint}', '${fallbackFilename}')
133
+ await waitForNextFrame()
134
+ return { kind: 'close' }
135
+ },
136
+ })
137
+ `;
138
+ })
139
+ .join(',\n');
140
+ })
141
+ .join(',\n');
142
+ const dynamicActions = [createActions, modelActions].filter((value) => value.trim().length > 0).join(',\n');
143
+ const adminDynamicActions = [exportActions].filter((value) => value.trim().length > 0).join(',\n');
144
+ return `
145
+ ${imports.generate()}
146
+
147
+ export const useAdminGlobalActions = () => {
148
+ const navigate = useNavigate()
149
+ const { registerGlobalActions } = useCommandPaletteActions()
150
+
151
+ useEffect(() => {
152
+ const downloadFromExcelIo = async (endpoint: string, fallbackFilename: string) => {
153
+ const response = await fetch(\`${'${APP_CONFIG.apiURL}'}/excel-io/${'${endpoint}'}\`, {
154
+ headers: getAuthHeaders(),
155
+ credentials: 'include',
156
+ })
157
+
158
+ if (!response.ok) {
159
+ throw new Error(\`Request failed with status ${'${response.status}'}\`)
160
+ }
161
+
162
+ const blob = await response.blob()
163
+ const filename = getFilenameFromContentDisposition(response.headers.get('Content-Disposition'), fallbackFilename)
164
+ downloadBlob(blob, filename)
165
+ }
166
+
167
+ const actions = [
168
+ command({
169
+ key: 'navigate-admin-overview',
170
+ visibility: 'visible',
171
+ group: 'Navigate',
172
+ label: 'Admin: Overview',
173
+ keywords: ['admin', 'overview'],
174
+ run: async () => {
175
+ await navigate({ to: '/admin' })
176
+ await waitForNextFrame()
177
+ return { kind: 'close' }
178
+ },
179
+ }),
180
+ ${dynamicActions}
181
+ ]
182
+
183
+ if (import.meta.env.VITE_PUBLIC_ALLOW_ADMIN === 'true') {
184
+ actions.push(
185
+ command({
186
+ key: 'navigate-admin-data-management',
187
+ visibility: 'visible',
188
+ group: 'Navigate',
189
+ label: 'Admin: Data Management',
190
+ keywords: ['admin', 'data', 'management'],
191
+ run: async () => {
192
+ await navigate({ to: '/admin/data-management' })
193
+ await waitForNextFrame()
194
+ return { kind: 'close' }
195
+ },
196
+ }),
197
+ command({
198
+ key: 'navigate-admin-excel-io',
199
+ visibility: 'visible',
200
+ group: 'Navigate',
201
+ label: 'Admin: Excel I/O',
202
+ keywords: ['admin', 'import', 'export', 'excel'],
203
+ run: async () => {
204
+ await navigate({ to: '/admin/excel-io' })
205
+ await waitForNextFrame()
206
+ return { kind: 'close' }
207
+ },
208
+ }),
209
+ command({
210
+ key: 'export-admin-all-models-excel',
211
+ visibility: 'visible',
212
+ group: 'Export',
213
+ label: 'Export: All models (Excel)',
214
+ keywords: ['export', 'excel', 'all', 'models'],
215
+ run: async () => {
216
+ await downloadFromExcelIo('export/all', 'all-models.xlsx')
217
+ await waitForNextFrame()
218
+ return { kind: 'close' }
219
+ },
220
+ }),
221
+ ${adminDynamicActions}
222
+ )
223
+ }
224
+
225
+ registerGlobalActions(...actions)
226
+ }, [navigate, registerGlobalActions])
227
+ }
228
+ `;
229
+ }
230
+ //# sourceMappingURL=admin-global-actions.generator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admin-global-actions.generator.js","sourceRoot":"","sources":["../../../src/frontend-admin/generators/admin-global-actions.generator.ts"],"names":[],"mappings":"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"}
@@ -82,7 +82,7 @@ export default function AdminOverviewPage() {
82
82
  </p>
83
83
 
84
84
  ${schemaSections}
85
- {import.meta.env.NEXT_PUBLIC_ALLOW_ADMIN === 'true' && (
85
+ {import.meta.env.VITE_PUBLIC_ALLOW_ADMIN === 'true' && (
86
86
  <section key="Advanced" className="mb-8">
87
87
  <h2 className="text-2xl font-bold mb-4 pb-2 border-b border-gray-200 dark:border-gray-700">
88
88
  Advanced (Dev Only)
@@ -98,6 +98,26 @@ export default function AdminOverviewPage() {
98
98
  Advanced import/export tools for database management
99
99
  </p>
100
100
  </Link>
101
+ <Link
102
+ key="ExcelIo"
103
+ to="/admin/excel-io"
104
+ className="block p-6 bg-white dark:bg-gray-900 border border-gray-200 dark:border-gray-700 rounded-lg hover:shadow-lg hover:border-blue-500 dark:hover:border-blue-400 transition-all"
105
+ >
106
+ <h3 className="text-lg font-semibold mb-2">Excel I/O</h3>
107
+ <p className="text-sm text-gray-600 dark:text-gray-400">
108
+ Export all or per-model Excel files, and import Excel with delta handling
109
+ </p>
110
+ </Link>
111
+ <Link
112
+ key="ImportReview"
113
+ to="/admin/import-review"
114
+ className="block p-6 bg-white dark:bg-gray-900 border border-gray-200 dark:border-gray-700 rounded-lg hover:shadow-lg hover:border-blue-500 dark:hover:border-blue-400 transition-all"
115
+ >
116
+ <h3 className="text-lg font-semibold mb-2">Import Review</h3>
117
+ <p className="text-sm text-gray-600 dark:text-gray-400">
118
+ Upload Excel files and review changes before applying them
119
+ </p>
120
+ </Link>
101
121
  </div>
102
122
  </section>
103
123
  )}
@@ -1 +1 @@
1
- {"version":3,"file":"admin-overview-page.generator.js","sourceRoot":"","sources":["../../../src/frontend-admin/generators/admin-overview-page.generator.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAQA,8DAyEC;AAjFD,6DAA8C;AAG9C,oCAAqD;AAErD;;GAEG;AACH,SAAgB,yBAAyB,CAAC,EAAE,OAAO,EAA8B;IAC/E,MAAM,OAAO,GAAG,SAAS,CAAC,eAAe;QACvC,EAAE;SACD,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAA;IAE5D,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,GAAG,IAAA,kCAA0B,EAAC,OAAO,CAAC,CAAA;IAEtF,+BAA+B;IAC/B,MAAM,cAAc,GAAG,aAAa;SACjC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE;QACd,MAAM,MAAM,GAAG,cAAc,CAAC,GAAG,CAAC,MAAM,CAAE,CAAA;QAC1C,MAAM,UAAU,GAAG,MAAM;aACtB,GAAG,CACF,CAAC,KAAK,EAAE,EAAE,CAAC;;qBAEA,KAAK,CAAC,IAAI;oBACX,KAAK,CAAC,KAAK;;;2DAG4B,KAAK,CAAC,gBAAgB;+EACF,KAAK,CAAC,gBAAgB,CAAC,WAAW,EAAE;oBAC/F,CACX;aACA,IAAI,CAAC,EAAE,CAAC,CAAA;QAEX,OAAO;wBACW,MAAM;uGACyE,MAAM;;cAE/F,UAAU;;mBAEL,CAAA;IACf,CAAC,CAAC;SACD,IAAI,CAAC,EAAE,CAAC,CAAA;IAEX,OAAO;;EAEP,OAAO,CAAC,QAAQ,EAAE;;;;;;;;;;;UAWV,cAAc;;;;;;;;;;;;;;;;;;;;;;;;CAwBvB,CAAA;AACD,CAAC"}
1
+ {"version":3,"file":"admin-overview-page.generator.js","sourceRoot":"","sources":["../../../src/frontend-admin/generators/admin-overview-page.generator.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAQA,8DA6FC;AArGD,6DAA8C;AAG9C,oCAAqD;AAErD;;GAEG;AACH,SAAgB,yBAAyB,CAAC,EAAE,OAAO,EAA8B;IAC/E,MAAM,OAAO,GAAG,SAAS,CAAC,eAAe;QACvC,EAAE;SACD,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAA;IAE5D,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,GAAG,IAAA,kCAA0B,EAAC,OAAO,CAAC,CAAA;IAEtF,+BAA+B;IAC/B,MAAM,cAAc,GAAG,aAAa;SACjC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE;QACd,MAAM,MAAM,GAAG,cAAc,CAAC,GAAG,CAAC,MAAM,CAAE,CAAA;QAC1C,MAAM,UAAU,GAAG,MAAM;aACtB,GAAG,CACF,CAAC,KAAK,EAAE,EAAE,CAAC;;qBAEA,KAAK,CAAC,IAAI;oBACX,KAAK,CAAC,KAAK;;;2DAG4B,KAAK,CAAC,gBAAgB;+EACF,KAAK,CAAC,gBAAgB,CAAC,WAAW,EAAE;oBAC/F,CACX;aACA,IAAI,CAAC,EAAE,CAAC,CAAA;QAEX,OAAO;wBACW,MAAM;uGACyE,MAAM;;cAE/F,UAAU;;mBAEL,CAAA;IACf,CAAC,CAAC;SACD,IAAI,CAAC,EAAE,CAAC,CAAA;IAEX,OAAO;;EAEP,OAAO,CAAC,QAAQ,EAAE;;;;;;;;;;;UAWV,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4CvB,CAAA;AACD,CAAC"}
@@ -184,6 +184,26 @@ export function AdminSidebar({ ...props }: ComponentProps<typeof Sidebar>) {
184
184
  </Link>
185
185
  </SidebarMenuSubButton>
186
186
  </SidebarMenuSubItem>
187
+ <SidebarMenuSubItem key="ExcelIo">
188
+ <SidebarMenuSubButton asChild>
189
+ <Link
190
+ to="/admin/excel-io"
191
+ className="block px-4 py-2 hover:bg-sidebar-accent rounded transition-colors"
192
+ >
193
+ Excel I/O
194
+ </Link>
195
+ </SidebarMenuSubButton>
196
+ </SidebarMenuSubItem>
197
+ <SidebarMenuSubItem key="ImportReview">
198
+ <SidebarMenuSubButton asChild>
199
+ <Link
200
+ to="/admin/import-review"
201
+ className="block px-4 py-2 hover:bg-sidebar-accent rounded transition-colors"
202
+ >
203
+ Import Review
204
+ </Link>
205
+ </SidebarMenuSubButton>
206
+ </SidebarMenuSubItem>
187
207
  </SidebarMenuSub>
188
208
  </SidebarGroupContent>
189
209
  </CollapseContent>
@@ -1 +1 @@
1
- {"version":3,"file":"admin-sidebar.generator.js","sourceRoot":"","sources":["../../../src/frontend-admin/generators/admin-sidebar.generator.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAQA,oDAqKC;AA7KD,6DAA8C;AAG9C,oCAAqD;AAErD;;GAEG;AACH,SAAgB,oBAAoB,CAAC,EAAE,OAAO,EAA8B;IAC1E,MAAM,OAAO,GAAG,SAAS,CAAC,eAAe;QACvC,EAAE;SACD,IAAI,CAAC,SAAS,CAAC,uBAAuB,CAAC,wBAAwB,CAAC,CAAC;SACjE,SAAS,CAAC;QACT,IAAI,EAAE,SAAS,CAAC,aAAa,CAAC,OAAO,CAAC;QACtC,KAAK,EAAE,CAAC,SAAS,CAAC,cAAc,CAAC,gBAAgB,CAAC,CAAC;KACpD,CAAC;SACD,SAAS,CAAC;QACT,IAAI,EAAE,SAAS,CAAC,aAAa,CAAC,cAAc,CAAC;QAC7C,KAAK,EAAE,CAAC,SAAS,CAAC,cAAc,CAAC,cAAc,CAAC,EAAE,SAAS,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;KACpF,CAAC,CAAA;IAEJ,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,GAAG,IAAA,kCAA0B,EAAC,OAAO,CAAC,CAAA;IAEtF,+EAA+E;IAC/E,MAAM,UAAU,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,CAAA;IAEtE,6CAA6C;IAC7C,MAAM,sBAAsB,GAAG,CAAC,GAAG,UAAU,EAAE,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,KAAK,GAAG,WAAW,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAEvG,+CAA+C;IAC/C,MAAM,yBAAyB,GAAG,CAAC,GAAG,UAAU,EAAE,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,KAAK,GAAG,SAAS,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAExG,+BAA+B;IAC/B,MAAM,cAAc,GAAG,aAAa;SACjC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE;QACd,MAAM,MAAM,GAAG,cAAc,CAAC,GAAG,CAAC,MAAM,CAAE,CAAA;QAC1C,MAAM,UAAU,GAAG,MAAM;aACtB,GAAG,CACF,CAAC,KAAK,EAAE,EAAE,CAAC;uCACkB,KAAK,CAAC,IAAI;;;wBAGzB,KAAK,CAAC,KAAK;;;oBAGf,KAAK,CAAC,gBAAgB;;;;WAI/B,CACF;aACA,IAAI,CAAC,EAAE,CAAC,CAAA;QAEX,MAAM,SAAS,GAAG,MAAM,CAAC,WAAW,EAAE,CAAA;QACtC,OAAO;wCAC2B,SAAS,4BAA4B,SAAS,oCAAoC,SAAS,UAAU,SAAS;;;;;oBAKlI,MAAM;8GACoF,SAAS;;;;;;;;sBAQjG,UAAU;;;;;oBAKZ,CAAA;IAChB,CAAC,CAAC;SACD,IAAI,CAAC,EAAE,CAAC,CAAA;IAEX,OAAO;;;;;;;;;;;;;;;;;;;;EAoBP,OAAO,CAAC,QAAQ,EAAE;;;;;EAKlB,sBAAsB;;;;EAItB,yBAAyB;;;;;;;;;;;;;;;;;;;;;;;;;;;;UA4BjB,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAqCvB,CAAA;AACD,CAAC"}
1
+ {"version":3,"file":"admin-sidebar.generator.js","sourceRoot":"","sources":["../../../src/frontend-admin/generators/admin-sidebar.generator.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAQA,oDAyLC;AAjMD,6DAA8C;AAG9C,oCAAqD;AAErD;;GAEG;AACH,SAAgB,oBAAoB,CAAC,EAAE,OAAO,EAA8B;IAC1E,MAAM,OAAO,GAAG,SAAS,CAAC,eAAe;QACvC,EAAE;SACD,IAAI,CAAC,SAAS,CAAC,uBAAuB,CAAC,wBAAwB,CAAC,CAAC;SACjE,SAAS,CAAC;QACT,IAAI,EAAE,SAAS,CAAC,aAAa,CAAC,OAAO,CAAC;QACtC,KAAK,EAAE,CAAC,SAAS,CAAC,cAAc,CAAC,gBAAgB,CAAC,CAAC;KACpD,CAAC;SACD,SAAS,CAAC;QACT,IAAI,EAAE,SAAS,CAAC,aAAa,CAAC,cAAc,CAAC;QAC7C,KAAK,EAAE,CAAC,SAAS,CAAC,cAAc,CAAC,cAAc,CAAC,EAAE,SAAS,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;KACpF,CAAC,CAAA;IAEJ,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,GAAG,IAAA,kCAA0B,EAAC,OAAO,CAAC,CAAA;IAEtF,+EAA+E;IAC/E,MAAM,UAAU,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,CAAA;IAEtE,6CAA6C;IAC7C,MAAM,sBAAsB,GAAG,CAAC,GAAG,UAAU,EAAE,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,KAAK,GAAG,WAAW,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAEvG,+CAA+C;IAC/C,MAAM,yBAAyB,GAAG,CAAC,GAAG,UAAU,EAAE,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,KAAK,GAAG,SAAS,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAExG,+BAA+B;IAC/B,MAAM,cAAc,GAAG,aAAa;SACjC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE;QACd,MAAM,MAAM,GAAG,cAAc,CAAC,GAAG,CAAC,MAAM,CAAE,CAAA;QAC1C,MAAM,UAAU,GAAG,MAAM;aACtB,GAAG,CACF,CAAC,KAAK,EAAE,EAAE,CAAC;uCACkB,KAAK,CAAC,IAAI;;;wBAGzB,KAAK,CAAC,KAAK;;;oBAGf,KAAK,CAAC,gBAAgB;;;;WAI/B,CACF;aACA,IAAI,CAAC,EAAE,CAAC,CAAA;QAEX,MAAM,SAAS,GAAG,MAAM,CAAC,WAAW,EAAE,CAAA;QACtC,OAAO;wCAC2B,SAAS,4BAA4B,SAAS,oCAAoC,SAAS,UAAU,SAAS;;;;;oBAKlI,MAAM;8GACoF,SAAS;;;;;;;;sBAQjG,UAAU;;;;;oBAKZ,CAAA;IAChB,CAAC,CAAC;SACD,IAAI,CAAC,EAAE,CAAC,CAAA;IAEX,OAAO;;;;;;;;;;;;;;;;;;;;EAoBP,OAAO,CAAC,QAAQ,EAAE;;;;;EAKlB,sBAAsB;;;;EAItB,yBAAyB;;;;;;;;;;;;;;;;;;;;;;;;;;;;UA4BjB,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAyDvB,CAAA;AACD,CAAC"}