@solidxai/core-ui 0.1.9-beta.18 → 0.1.9-beta.19

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 (177) hide show
  1. package/dist/adapters/auth/handleLogout.d.ts +1 -1
  2. package/dist/adapters/auth/handleLogout.d.ts.map +1 -1
  3. package/dist/adapters/auth/handleLogout.js +20 -32
  4. package/dist/adapters/auth/handleLogout.js.map +1 -1
  5. package/dist/adapters/auth/handleLogout.ts +7 -14
  6. package/dist/components/core/common/SolidAccountSettings/SolidChangePassword.d.ts.map +1 -1
  7. package/dist/components/core/common/SolidAccountSettings/SolidChangePassword.js +1 -10
  8. package/dist/components/core/common/SolidAccountSettings/SolidChangePassword.js.map +1 -1
  9. package/dist/components/core/common/SolidAccountSettings/SolidChangePassword.tsx +1 -8
  10. package/dist/components/core/common/SolidAccountSettings/SolidNotifications.d.ts.map +1 -1
  11. package/dist/components/core/common/SolidAccountSettings/SolidNotifications.js +6 -11
  12. package/dist/components/core/common/SolidAccountSettings/SolidNotifications.js.map +1 -1
  13. package/dist/components/core/common/SolidAccountSettings/SolidNotifications.tsx +5 -31
  14. package/dist/components/core/common/SolidGlobalSearchElement.d.ts.map +1 -1
  15. package/dist/components/core/common/SolidGlobalSearchElement.js +47 -13
  16. package/dist/components/core/common/SolidGlobalSearchElement.js.map +1 -1
  17. package/dist/components/core/common/SolidGlobalSearchElement.tsx +38 -4
  18. package/dist/components/core/extension/solid-core/metadata/MetadataExplorerFormWidget.d.ts +16 -0
  19. package/dist/components/core/extension/solid-core/metadata/MetadataExplorerFormWidget.d.ts.map +1 -0
  20. package/dist/components/core/extension/solid-core/metadata/MetadataExplorerFormWidget.js +31 -0
  21. package/dist/components/core/extension/solid-core/metadata/MetadataExplorerFormWidget.js.map +1 -0
  22. package/dist/components/core/extension/solid-core/metadata/MetadataExplorerFormWidget.tsx +43 -0
  23. package/dist/components/core/extension/solid-core/moduleMetadata/list/ClearModulePackageRuntimeHeaderAction.d.ts +3 -0
  24. package/dist/components/core/extension/solid-core/moduleMetadata/list/ClearModulePackageRuntimeHeaderAction.d.ts.map +1 -0
  25. package/dist/components/core/extension/solid-core/moduleMetadata/list/ClearModulePackageRuntimeHeaderAction.js +141 -0
  26. package/dist/components/core/extension/solid-core/moduleMetadata/list/ClearModulePackageRuntimeHeaderAction.js.map +1 -0
  27. package/dist/components/core/extension/solid-core/moduleMetadata/list/ClearModulePackageRuntimeHeaderAction.tsx +205 -0
  28. package/dist/components/core/extension/solid-core/moduleMetadata/list/ExportModulePackageRowAction.d.ts +4 -0
  29. package/dist/components/core/extension/solid-core/moduleMetadata/list/ExportModulePackageRowAction.d.ts.map +1 -0
  30. package/dist/components/core/extension/solid-core/moduleMetadata/list/ExportModulePackageRowAction.js +112 -0
  31. package/dist/components/core/extension/solid-core/moduleMetadata/list/ExportModulePackageRowAction.js.map +1 -0
  32. package/dist/components/core/extension/solid-core/moduleMetadata/list/ExportModulePackageRowAction.tsx +146 -0
  33. package/dist/components/core/extension/solid-core/moduleMetadata/list/ModuleImportListHeaderAction.d.ts +11 -0
  34. package/dist/components/core/extension/solid-core/moduleMetadata/list/ModuleImportListHeaderAction.d.ts.map +1 -0
  35. package/dist/components/core/extension/solid-core/moduleMetadata/list/ModuleImportListHeaderAction.js +22 -0
  36. package/dist/components/core/extension/solid-core/moduleMetadata/list/ModuleImportListHeaderAction.js.map +1 -0
  37. package/dist/components/core/extension/solid-core/moduleMetadata/list/ModuleImportListHeaderAction.tsx +36 -0
  38. package/dist/components/core/extension/solid-core/moduleMetadata/list/moduleMetadataListOnLoad.d.ts +3 -0
  39. package/dist/components/core/extension/solid-core/moduleMetadata/list/moduleMetadataListOnLoad.d.ts.map +1 -0
  40. package/dist/components/core/extension/solid-core/moduleMetadata/list/moduleMetadataListOnLoad.js +133 -0
  41. package/dist/components/core/extension/solid-core/moduleMetadata/list/moduleMetadataListOnLoad.js.map +1 -0
  42. package/dist/components/core/extension/solid-core/moduleMetadata/list/moduleMetadataListOnLoad.ts +76 -0
  43. package/dist/components/core/form/fields/relations/RolesGroupedByModuleWidget.d.ts +12 -0
  44. package/dist/components/core/form/fields/relations/RolesGroupedByModuleWidget.d.ts.map +1 -0
  45. package/dist/components/core/form/fields/relations/RolesGroupedByModuleWidget.js +168 -0
  46. package/dist/components/core/form/fields/relations/RolesGroupedByModuleWidget.js.map +1 -0
  47. package/dist/components/core/form/fields/relations/RolesGroupedByModuleWidget.tsx +241 -0
  48. package/dist/components/core/list/SolidEmptyListViewPlaceholder.d.ts.map +1 -1
  49. package/dist/components/core/list/SolidEmptyListViewPlaceholder.js +3 -0
  50. package/dist/components/core/list/SolidEmptyListViewPlaceholder.js.map +1 -1
  51. package/dist/components/core/list/SolidEmptyListViewPlaceholder.tsx +2 -0
  52. package/dist/components/core/list/SolidListView.d.ts.map +1 -1
  53. package/dist/components/core/list/SolidListView.js +74 -68
  54. package/dist/components/core/list/SolidListView.js.map +1 -1
  55. package/dist/components/core/list/SolidListView.tsx +13 -4
  56. package/dist/components/core/list/SolidListViewColumn.d.ts.map +1 -1
  57. package/dist/components/core/list/SolidListViewColumn.js +0 -2
  58. package/dist/components/core/list/SolidListViewColumn.js.map +1 -1
  59. package/dist/components/core/list/SolidListViewColumn.tsx +0 -1
  60. package/dist/components/core/list/SolidListViewConfigure.d.ts.map +1 -1
  61. package/dist/components/core/list/SolidListViewConfigure.js +10 -9
  62. package/dist/components/core/list/SolidListViewConfigure.js.map +1 -1
  63. package/dist/components/core/list/SolidListViewConfigure.tsx +3 -1
  64. package/dist/components/core/list/SolidListViewHeaderButton.d.ts.map +1 -1
  65. package/dist/components/core/list/SolidListViewHeaderButton.js +3 -0
  66. package/dist/components/core/list/SolidListViewHeaderButton.js.map +1 -1
  67. package/dist/components/core/list/SolidListViewHeaderButton.tsx +2 -0
  68. package/dist/components/core/list/SolidListViewHeaderContextMenuButton.d.ts.map +1 -1
  69. package/dist/components/core/list/SolidListViewHeaderContextMenuButton.js +3 -0
  70. package/dist/components/core/list/SolidListViewHeaderContextMenuButton.js.map +1 -1
  71. package/dist/components/core/list/SolidListViewHeaderContextMenuButton.tsx +2 -0
  72. package/dist/components/core/list/SolidListViewRowActionsMenu.d.ts.map +1 -1
  73. package/dist/components/core/list/SolidListViewRowActionsMenu.js +7 -1
  74. package/dist/components/core/list/SolidListViewRowActionsMenu.js.map +1 -1
  75. package/dist/components/core/list/SolidListViewRowActionsMenu.tsx +5 -1
  76. package/dist/components/core/list/columns/SolidBooleanColumn.d.ts.map +1 -1
  77. package/dist/components/core/list/columns/SolidBooleanColumn.js +4 -6
  78. package/dist/components/core/list/columns/SolidBooleanColumn.js.map +1 -1
  79. package/dist/components/core/list/columns/SolidBooleanColumn.tsx +1 -3
  80. package/dist/components/core/list/columns/SolidMediaMultipleColumn.d.ts.map +1 -1
  81. package/dist/components/core/list/columns/SolidMediaMultipleColumn.js +3 -2
  82. package/dist/components/core/list/columns/SolidMediaMultipleColumn.js.map +1 -1
  83. package/dist/components/core/list/columns/SolidMediaMultipleColumn.tsx +3 -2
  84. package/dist/components/core/list/columns/SolidMediaSingleColumn.d.ts.map +1 -1
  85. package/dist/components/core/list/columns/SolidMediaSingleColumn.js +3 -2
  86. package/dist/components/core/list/columns/SolidMediaSingleColumn.js.map +1 -1
  87. package/dist/components/core/list/columns/SolidMediaSingleColumn.tsx +3 -2
  88. package/dist/components/core/model/CreateModel.css +48 -0
  89. package/dist/components/core/model/CreateModel.d.ts +1 -0
  90. package/dist/components/core/model/CreateModel.d.ts.map +1 -1
  91. package/dist/components/core/model/CreateModel.js +69 -104
  92. package/dist/components/core/model/CreateModel.js.map +1 -1
  93. package/dist/components/core/model/CreateModel.tsx +92 -204
  94. package/dist/components/core/model/FieldMetaData.d.ts +1 -1
  95. package/dist/components/core/model/FieldMetaData.d.ts.map +1 -1
  96. package/dist/components/core/model/FieldMetaData.js +6 -22
  97. package/dist/components/core/model/FieldMetaData.js.map +1 -1
  98. package/dist/components/core/model/FieldMetaData.tsx +6 -45
  99. package/dist/components/core/model/FieldMetaDataForm.d.ts.map +1 -1
  100. package/dist/components/core/model/FieldMetaDataForm.js +196 -222
  101. package/dist/components/core/model/FieldMetaDataForm.js.map +1 -1
  102. package/dist/components/core/model/FieldMetaDataForm.tsx +0 -72
  103. package/dist/components/core/model/ModelMetaData.d.ts.map +1 -1
  104. package/dist/components/core/model/ModelMetaData.js +7 -7
  105. package/dist/components/core/model/ModelMetaData.js.map +1 -1
  106. package/dist/components/core/model/ModelMetaData.tsx +7 -0
  107. package/dist/components/core/module/CreateModule.css +44 -0
  108. package/dist/components/core/module/CreateModule.d.ts +1 -0
  109. package/dist/components/core/module/CreateModule.d.ts.map +1 -1
  110. package/dist/components/core/module/CreateModule.js +40 -43
  111. package/dist/components/core/module/CreateModule.js.map +1 -1
  112. package/dist/components/core/module/CreateModule.tsx +243 -247
  113. package/dist/components/core/module/ModuleListViewData.d.ts.map +1 -1
  114. package/dist/components/core/module/ModuleListViewData.js +47 -7
  115. package/dist/components/core/module/ModuleListViewData.js.map +1 -1
  116. package/dist/components/core/module/ModuleListViewData.tsx +58 -0
  117. package/dist/components/core/module/ModuleMetadataExplorer.css +638 -0
  118. package/dist/components/core/module/ModuleMetadataExplorer.d.ts +15 -0
  119. package/dist/components/core/module/ModuleMetadataExplorer.d.ts.map +1 -0
  120. package/dist/components/core/module/ModuleMetadataExplorer.js +666 -0
  121. package/dist/components/core/module/ModuleMetadataExplorer.js.map +1 -0
  122. package/dist/components/core/module/ModuleMetadataExplorer.tsx +1000 -0
  123. package/dist/components/core/module/ModulePackageDialog.css +540 -0
  124. package/dist/components/core/module/ModulePackageDialog.d.ts +16 -0
  125. package/dist/components/core/module/ModulePackageDialog.d.ts.map +1 -0
  126. package/dist/components/core/module/ModulePackageDialog.js +625 -0
  127. package/dist/components/core/module/ModulePackageDialog.js.map +1 -0
  128. package/dist/components/core/module/ModulePackageDialog.tsx +906 -0
  129. package/dist/components/layout/user-profile-menu.d.ts.map +1 -1
  130. package/dist/components/layout/user-profile-menu.js +57 -33
  131. package/dist/components/layout/user-profile-menu.js.map +1 -1
  132. package/dist/components/layout/user-profile-menu.tsx +11 -59
  133. package/dist/helpers/buttonEnvironment.d.ts +5 -0
  134. package/dist/helpers/buttonEnvironment.d.ts.map +1 -0
  135. package/dist/helpers/buttonEnvironment.js +30 -0
  136. package/dist/helpers/buttonEnvironment.js.map +1 -0
  137. package/dist/helpers/buttonEnvironment.ts +35 -0
  138. package/dist/helpers/fileTypeIcon.d.ts +12 -0
  139. package/dist/helpers/fileTypeIcon.d.ts.map +1 -0
  140. package/dist/helpers/fileTypeIcon.js +37 -0
  141. package/dist/helpers/fileTypeIcon.js.map +1 -0
  142. package/dist/helpers/fileTypeIcon.tsx +65 -0
  143. package/dist/helpers/registry.d.ts.map +1 -1
  144. package/dist/helpers/registry.js +10 -0
  145. package/dist/helpers/registry.js.map +1 -1
  146. package/dist/helpers/registry.ts +10 -0
  147. package/dist/helpers/waitForBackendAvailability.d.ts +7 -0
  148. package/dist/helpers/waitForBackendAvailability.d.ts.map +1 -0
  149. package/dist/helpers/waitForBackendAvailability.js +86 -0
  150. package/dist/helpers/waitForBackendAvailability.js.map +1 -0
  151. package/dist/helpers/waitForBackendAvailability.ts +37 -0
  152. package/dist/index.d.ts +2 -1
  153. package/dist/index.d.ts.map +1 -1
  154. package/dist/index.js +2 -1
  155. package/dist/index.js.map +1 -1
  156. package/dist/index.ts +18 -0
  157. package/dist/redux/api/moduleApi.d.ts +26 -1
  158. package/dist/redux/api/moduleApi.d.ts.map +1 -1
  159. package/dist/redux/api/moduleApi.js +237 -1
  160. package/dist/redux/api/moduleApi.js.map +1 -1
  161. package/dist/redux/api/moduleApi.ts +181 -1
  162. package/dist/redux/store/defaultStoreConfig.d.ts +22 -0
  163. package/dist/redux/store/defaultStoreConfig.d.ts.map +1 -1
  164. package/dist/redux/store/solidEntityApiPool.d.ts +1 -0
  165. package/dist/redux/store/solidEntityApiPool.d.ts.map +1 -1
  166. package/dist/redux/store/solidEntityApiPool.js +4 -0
  167. package/dist/redux/store/solidEntityApiPool.js.map +1 -1
  168. package/dist/redux/store/solidEntityApiPool.ts +4 -0
  169. package/dist/resources/globals.css +56 -0
  170. package/dist/resources/shadcn-base.css +5 -0
  171. package/dist/routes/AppEventListener.d.ts.map +1 -1
  172. package/dist/routes/AppEventListener.js +58 -8
  173. package/dist/routes/AppEventListener.js.map +1 -1
  174. package/dist/routes/AppEventListener.tsx +69 -8
  175. package/dist/types/index.d.ts +1 -0
  176. package/dist/types/jsoneditor.d.ts +4 -0
  177. package/package.json +2 -1
@@ -0,0 +1,625 @@
1
+ var __assign = (this && this.__assign) || function () {
2
+ __assign = Object.assign || function(t) {
3
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
4
+ s = arguments[i];
5
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
6
+ t[p] = s[p];
7
+ }
8
+ return t;
9
+ };
10
+ return __assign.apply(this, arguments);
11
+ };
12
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
13
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
14
+ return new (P || (P = Promise))(function (resolve, reject) {
15
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
16
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
17
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
18
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
19
+ });
20
+ };
21
+ var __generator = (this && this.__generator) || function (thisArg, body) {
22
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
23
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
24
+ function verb(n) { return function (v) { return step([n, v]); }; }
25
+ function step(op) {
26
+ if (f) throw new TypeError("Generator is already executing.");
27
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
28
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
29
+ if (y = 0, t) op = [op[0] & 2, t.value];
30
+ switch (op[0]) {
31
+ case 0: case 1: t = op; break;
32
+ case 4: _.label++; return { value: op[1], done: false };
33
+ case 5: _.label++; y = op[1]; op = [0]; continue;
34
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
35
+ default:
36
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
37
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
38
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
39
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
40
+ if (t[2]) _.ops.pop();
41
+ _.trys.pop(); continue;
42
+ }
43
+ op = body.call(thisArg, _);
44
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
45
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
46
+ }
47
+ };
48
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
49
+ import { useCallback, useEffect, useMemo, useRef, useState } from "react";
50
+ import { useDropzone } from "react-dropzone";
51
+ import { FileArchive, FolderTree, RefreshCw, Sparkles, UploadCloud, X } from "lucide-react";
52
+ import { useConfirmModulePackageImportMutation, useDismissModulePackageImportMutation, useLazyGetModulePackageImportStatusQuery, useRunModulePackageBuildMutation, useRunModulePackageSeedMutation, useValidateModulePackageImportMutation, } from "../../../redux/api/moduleApi";
53
+ import { showToast } from "../../../redux/features/toastSlice";
54
+ import { useDispatch } from "react-redux";
55
+ import { SolidButton, SolidCheckbox, SolidDialog, SolidDialogBody, SolidDialogDescription, SolidDialogHeader, SolidDialogSeparator, SolidDialogTitle, SolidIcon, SolidSpinner, } from "../../shad-cn-ui";
56
+ import "./ModulePackageDialog.css";
57
+ var STEP_ORDER = ["preview", "import", "build", "seed"];
58
+ function createInitialSteps() {
59
+ return {
60
+ preview: {
61
+ title: "Preview",
62
+ description: "Upload a `.sldx` archive to validate it and preview its contents automatically.",
63
+ status: "pending",
64
+ },
65
+ import: {
66
+ title: "Import",
67
+ description: "Import the files locally. This may restart the UI and API, dismiss the popup, and require a page refresh before you continue.",
68
+ status: "pending",
69
+ },
70
+ build: {
71
+ title: "Build",
72
+ description: "After the services restart and you refresh this module list page, continue with the build step.",
73
+ status: "pending",
74
+ },
75
+ seed: {
76
+ title: "Seed",
77
+ description: "Seed the imported module after the build step completes.",
78
+ status: "pending",
79
+ },
80
+ };
81
+ }
82
+ function getErrorMessage(error) {
83
+ var responseData = error === null || error === void 0 ? void 0 : error.data;
84
+ if (typeof (responseData === null || responseData === void 0 ? void 0 : responseData.message) === "string")
85
+ return responseData.message;
86
+ if (Array.isArray(responseData === null || responseData === void 0 ? void 0 : responseData.message))
87
+ return responseData.message.join(", ");
88
+ if (typeof (responseData === null || responseData === void 0 ? void 0 : responseData.error) === "string")
89
+ return responseData.error;
90
+ if (typeof (error === null || error === void 0 ? void 0 : error.error) === "string")
91
+ return error.error;
92
+ if (typeof (error === null || error === void 0 ? void 0 : error.message) === "string")
93
+ return error.message;
94
+ return "Something went wrong while processing the module package.";
95
+ }
96
+ function formatBytes(bytes) {
97
+ if (!bytes)
98
+ return "0 B";
99
+ var units = ["B", "KB", "MB", "GB"];
100
+ var exponent = Math.min(Math.floor(Math.log(bytes) / Math.log(1024)), units.length - 1);
101
+ var value = bytes / Math.pow(1024, exponent);
102
+ return "".concat(value.toFixed(exponent === 0 ? 0 : 2), " ").concat(units[exponent]);
103
+ }
104
+ function isResumableModulePackageStatus(status) {
105
+ return [
106
+ "import_running",
107
+ "awaiting_restart",
108
+ "build_running",
109
+ "build_failed",
110
+ "build_succeeded",
111
+ "seed_running",
112
+ "seed_failed",
113
+ ].includes(String(status !== null && status !== void 0 ? status : ""));
114
+ }
115
+ function getBuildStepStatusFromTransaction(transaction) {
116
+ var _a;
117
+ if ((transaction === null || transaction === void 0 ? void 0 : transaction.status) === "build_running")
118
+ return "warning";
119
+ if ((_a = transaction === null || transaction === void 0 ? void 0 : transaction.outputs) === null || _a === void 0 ? void 0 : _a.build) {
120
+ return String(transaction.outputs.build).includes("[failed]") ? "warning" : "success";
121
+ }
122
+ return "pending";
123
+ }
124
+ function hydrateStepsFromTransaction(transaction) {
125
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p;
126
+ var nextSteps = createInitialSteps();
127
+ var status = String((_a = transaction === null || transaction === void 0 ? void 0 : transaction.status) !== null && _a !== void 0 ? _a : "");
128
+ if ((transaction === null || transaction === void 0 ? void 0 : transaction.preview) || (transaction === null || transaction === void 0 ? void 0 : transaction.validation)) {
129
+ nextSteps.preview = __assign(__assign({}, nextSteps.preview), { status: ((_b = transaction === null || transaction === void 0 ? void 0 : transaction.validation) === null || _b === void 0 ? void 0 : _b.valid) ? "success" : "warning", description: ((_c = transaction === null || transaction === void 0 ? void 0 : transaction.validation) === null || _c === void 0 ? void 0 : _c.valid)
130
+ ? "Archive validated and ready for import."
131
+ : "Archive preview loaded, but the package has validation issues to fix first." });
132
+ }
133
+ if (((_d = transaction === null || transaction === void 0 ? void 0 : transaction.outputs) === null || _d === void 0 ? void 0 : _d.import) ||
134
+ ["awaiting_restart", "build_running", "build_failed", "build_succeeded", "seed_running", "seed_failed", "completed"].includes(status)) {
135
+ nextSteps.import = __assign(__assign({}, nextSteps.import), { status: "success", description: "Archive extracted. Wait for the UI and API to finish restarting, then refresh this page to continue.", output: (_f = (_e = transaction === null || transaction === void 0 ? void 0 : transaction.outputs) === null || _e === void 0 ? void 0 : _e.import) !== null && _f !== void 0 ? _f : undefined });
136
+ }
137
+ var buildStatus = getBuildStepStatusFromTransaction(transaction);
138
+ if (buildStatus !== "pending") {
139
+ nextSteps.build = __assign(__assign({}, nextSteps.build), { status: buildStatus, description: status === "build_running"
140
+ ? "Build was previously started. Use Build Now to run it again once you are ready."
141
+ : buildStatus === "warning"
142
+ ? (transaction === null || transaction === void 0 ? void 0 : transaction.errorMessage) || "The build step completed with warnings."
143
+ : "Both build targets completed successfully.", output: (_h = (_g = transaction === null || transaction === void 0 ? void 0 : transaction.outputs) === null || _g === void 0 ? void 0 : _g.build) !== null && _h !== void 0 ? _h : undefined });
144
+ }
145
+ else if (status === "awaiting_restart") {
146
+ nextSteps.build = __assign(__assign({}, nextSteps.build), { status: "pending", description: "Import completed. Once the UI and API are back, refresh this module list page and continue with Build Now." });
147
+ }
148
+ if (status === "seed_running") {
149
+ nextSteps.seed = __assign(__assign({}, nextSteps.seed), { status: "warning", description: "Seed was previously started. Use Seed to run it again once you are ready.", output: (_k = (_j = transaction === null || transaction === void 0 ? void 0 : transaction.outputs) === null || _j === void 0 ? void 0 : _j.seed) !== null && _k !== void 0 ? _k : undefined });
150
+ }
151
+ else if (status === "seed_failed") {
152
+ nextSteps.seed = __assign(__assign({}, nextSteps.seed), { status: "warning", description: (transaction === null || transaction === void 0 ? void 0 : transaction.errorMessage) || "The seed step finished with warnings.", output: (_m = (_l = transaction === null || transaction === void 0 ? void 0 : transaction.outputs) === null || _l === void 0 ? void 0 : _l.seed) !== null && _m !== void 0 ? _m : undefined });
153
+ }
154
+ else if (status === "completed") {
155
+ nextSteps.seed = __assign(__assign({}, nextSteps.seed), { status: "success", description: "Module metadata seeding completed successfully.", output: (_p = (_o = transaction === null || transaction === void 0 ? void 0 : transaction.outputs) === null || _o === void 0 ? void 0 : _o.seed) !== null && _p !== void 0 ? _p : undefined });
156
+ }
157
+ return nextSteps;
158
+ }
159
+ function getSuggestedStepFromSteps(steps, hasPreview, isArchiveValid) {
160
+ if (!hasPreview || !isArchiveValid)
161
+ return "preview";
162
+ if (steps.import.status !== "success")
163
+ return "import";
164
+ if (steps.build.status !== "success" && steps.build.status !== "warning")
165
+ return "build";
166
+ if (steps.seed.status !== "success" && steps.seed.status !== "warning")
167
+ return "seed";
168
+ return "seed";
169
+ }
170
+ function StepStatusIcon(_a) {
171
+ var status = _a.status;
172
+ if (status === "running") {
173
+ return _jsx(SolidSpinner, { size: 16 });
174
+ }
175
+ if (status === "success") {
176
+ return _jsx(SolidIcon, { name: "si-check-circle" });
177
+ }
178
+ if (status === "warning" || status === "error") {
179
+ return _jsx(SolidIcon, { name: "si-exclamation-triangle" });
180
+ }
181
+ return _jsx("span", { className: "solid-module-package-step-dot", "aria-hidden": "true" });
182
+ }
183
+ export function ModulePackageDialog(_a) {
184
+ var open = _a.open, onOpenChange = _a.onOpenChange, onImported = _a.onImported;
185
+ return (_jsx(SolidDialog, { open: open, onOpenChange: function (next) {
186
+ if (!next) {
187
+ onOpenChange(false);
188
+ }
189
+ }, className: "solid-module-package-dialog", dismissible: false, showHeader: false, children: open ? _jsx(ModulePackageImportContent, { onClose: function () { return onOpenChange(false); }, onImported: onImported }) : null }));
190
+ }
191
+ export function ModulePackageImportContent(_a) {
192
+ var _this = this;
193
+ var _b, _c, _d, _e;
194
+ var onClose = _a.onClose, onImported = _a.onImported, _f = _a.initialTransactionKey, initialTransactionKey = _f === void 0 ? null : _f, _g = _a.autoResume, autoResume = _g === void 0 ? false : _g;
195
+ var dispatch = useDispatch();
196
+ var _h = useState(null), selectedFile = _h[0], setSelectedFile = _h[1];
197
+ var _j = useState(null), previewResponse = _j[0], setPreviewResponse = _j[1];
198
+ var _k = useState(null), transactionKey = _k[0], setTransactionKey = _k[1];
199
+ var _l = useState(false), overwriteExisting = _l[0], setOverwriteExisting = _l[1];
200
+ var _m = useState(function () { return createInitialSteps(); }), steps = _m[0], setSteps = _m[1];
201
+ var _o = useState("preview"), selectedStep = _o[0], setSelectedStep = _o[1];
202
+ var _p = useState(null), finalSummary = _p[0], setFinalSummary = _p[1];
203
+ var _q = useState(false), isPreviewing = _q[0], setIsPreviewing = _q[1];
204
+ var _r = useState(false), isProcessing = _r[0], setIsProcessing = _r[1];
205
+ var validateModulePackageImport = useValidateModulePackageImportMutation()[0];
206
+ var confirmModulePackageImport = useConfirmModulePackageImportMutation()[0];
207
+ var dismissModulePackageImport = useDismissModulePackageImportMutation()[0];
208
+ var fetchModulePackageImportStatus = useLazyGetModulePackageImportStatusQuery()[0];
209
+ var runModulePackageBuild = useRunModulePackageBuildMutation()[0];
210
+ var runModulePackageSeed = useRunModulePackageSeedMutation()[0];
211
+ var hasResumedTransactionRef = useRef(false);
212
+ var lastAutoPreviewFileRef = useRef(null);
213
+ var updateStep = useCallback(function (key, nextState) {
214
+ setSteps(function (current) {
215
+ var _a;
216
+ return (__assign(__assign({}, current), (_a = {}, _a[key] = __assign(__assign({}, current[key]), nextState), _a)));
217
+ });
218
+ }, []);
219
+ var _s = useDropzone({
220
+ accept: {
221
+ "application/octet-stream": [".sldx"],
222
+ "application/x-zip-compressed": [".sldx"],
223
+ "application/zip": [".sldx"],
224
+ },
225
+ multiple: false,
226
+ noClick: true,
227
+ noKeyboard: true,
228
+ onDrop: function (acceptedFiles) {
229
+ if (acceptedFiles[0]) {
230
+ setSelectedFile(acceptedFiles[0]);
231
+ }
232
+ },
233
+ }), getRootProps = _s.getRootProps, getInputProps = _s.getInputProps, openFilePicker = _s.open, isDragActive = _s.isDragActive;
234
+ var isArchiveValid = Boolean((_b = previewResponse === null || previewResponse === void 0 ? void 0 : previewResponse.validation) === null || _b === void 0 ? void 0 : _b.valid);
235
+ var hasConflicts = ((_d = (_c = previewResponse === null || previewResponse === void 0 ? void 0 : previewResponse.conflicts) === null || _c === void 0 ? void 0 : _c.length) !== null && _d !== void 0 ? _d : 0) > 0;
236
+ var suggestedStep = getSuggestedStepFromSteps(steps, Boolean(previewResponse), isArchiveValid);
237
+ var canImport = steps.preview.status !== "pending" && isArchiveValid && steps.import.status !== "success" && !isProcessing && !isPreviewing;
238
+ var canRunBuild = steps.import.status === "success" && !isProcessing;
239
+ var canRunSeed = (steps.build.status === "success" || steps.build.status === "warning") && !isProcessing;
240
+ var canContinueFromPreview = Boolean(previewResponse) && isArchiveValid && !isPreviewing;
241
+ var activeStep = useMemo(function () {
242
+ if (selectedStep === "seed" && !(steps.build.status === "success" || steps.build.status === "warning" || steps.seed.status !== "pending")) {
243
+ return suggestedStep;
244
+ }
245
+ if (selectedStep === "build" && !(steps.import.status === "success" || steps.build.status !== "pending")) {
246
+ return suggestedStep;
247
+ }
248
+ if (selectedStep === "import" && !(isArchiveValid || steps.import.status !== "pending")) {
249
+ return suggestedStep;
250
+ }
251
+ return selectedStep;
252
+ }, [
253
+ previewResponse,
254
+ selectedStep,
255
+ steps.build.status,
256
+ steps.import.status,
257
+ steps.seed.status,
258
+ suggestedStep,
259
+ ]);
260
+ var completedSteps = STEP_ORDER.filter(function (stepKey) { return steps[stepKey].status === "success"; }).length;
261
+ var maxUnlockedStepIndex = useMemo(function () {
262
+ if (!previewResponse || !isArchiveValid)
263
+ return 0;
264
+ if (steps.import.status !== "success")
265
+ return 1;
266
+ if (steps.build.status !== "success" && steps.build.status !== "warning")
267
+ return 2;
268
+ return 3;
269
+ }, [isArchiveValid, previewResponse, steps.build.status, steps.import.status]);
270
+ var handlePreviewArchive = useCallback(function () { return __awaiter(_this, void 0, void 0, function () {
271
+ var formData, response, error_1;
272
+ var _a, _b, _c, _d;
273
+ return __generator(this, function (_e) {
274
+ switch (_e.label) {
275
+ case 0:
276
+ if (!selectedFile) {
277
+ return [2 /*return*/];
278
+ }
279
+ formData = new FormData();
280
+ formData.append("modulePackage", selectedFile);
281
+ _e.label = 1;
282
+ case 1:
283
+ _e.trys.push([1, 3, 4, 5]);
284
+ setIsPreviewing(true);
285
+ return [4 /*yield*/, validateModulePackageImport(formData).unwrap()];
286
+ case 2:
287
+ response = _e.sent();
288
+ setPreviewResponse(response);
289
+ setTransactionKey((_a = response === null || response === void 0 ? void 0 : response.transactionKey) !== null && _a !== void 0 ? _a : null);
290
+ setOverwriteExisting(false);
291
+ setFinalSummary(null);
292
+ setSteps(hydrateStepsFromTransaction(response));
293
+ setSelectedStep("preview");
294
+ dispatch(showToast({
295
+ severity: ((_b = response === null || response === void 0 ? void 0 : response.validation) === null || _b === void 0 ? void 0 : _b.valid) ? "success" : "warn",
296
+ summary: ((_c = response === null || response === void 0 ? void 0 : response.validation) === null || _c === void 0 ? void 0 : _c.valid) ? "Archive validated" : "Archive needs attention",
297
+ detail: ((_d = response === null || response === void 0 ? void 0 : response.validation) === null || _d === void 0 ? void 0 : _d.valid)
298
+ ? "Review the preview and continue with the import when you are ready."
299
+ : "The uploaded archive is missing one or more required SolidX validation markers.",
300
+ }));
301
+ return [3 /*break*/, 5];
302
+ case 3:
303
+ error_1 = _e.sent();
304
+ dispatch(showToast({ severity: "error", summary: "Preview failed", detail: getErrorMessage(error_1) }));
305
+ return [3 /*break*/, 5];
306
+ case 4:
307
+ setIsPreviewing(false);
308
+ return [7 /*endfinally*/];
309
+ case 5: return [2 /*return*/];
310
+ }
311
+ });
312
+ }); }, [dispatch, selectedFile, validateModulePackageImport]);
313
+ useEffect(function () {
314
+ if (!selectedFile) {
315
+ lastAutoPreviewFileRef.current = null;
316
+ return;
317
+ }
318
+ var fileSignature = "".concat(selectedFile.name, ":").concat(selectedFile.size, ":").concat(selectedFile.lastModified);
319
+ if (lastAutoPreviewFileRef.current === fileSignature) {
320
+ return;
321
+ }
322
+ lastAutoPreviewFileRef.current = fileSignature;
323
+ void handlePreviewArchive();
324
+ }, [handlePreviewArchive, selectedFile]);
325
+ var executeBuildStep = useCallback(function (activeTransactionKey) { return __awaiter(_this, void 0, void 0, function () {
326
+ var buildResponse, buildFailed;
327
+ var _a;
328
+ return __generator(this, function (_b) {
329
+ switch (_b.label) {
330
+ case 0:
331
+ updateStep("build", {
332
+ status: "running",
333
+ description: "Running `solidctl build` followed by `solidctl build --ui-only`.",
334
+ });
335
+ return [4 /*yield*/, runModulePackageBuild({
336
+ transactionKey: activeTransactionKey,
337
+ buildSolidApi: true,
338
+ buildSolidUi: true,
339
+ }).unwrap()];
340
+ case 1:
341
+ buildResponse = _b.sent();
342
+ buildFailed = (buildResponse === null || buildResponse === void 0 ? void 0 : buildResponse.status) === "build_failed";
343
+ updateStep("build", {
344
+ status: buildFailed ? "warning" : "success",
345
+ description: buildFailed
346
+ ? (buildResponse === null || buildResponse === void 0 ? void 0 : buildResponse.errorMessage) || "The module was imported, but one or more build targets failed."
347
+ : "Both build targets completed successfully.",
348
+ output: (_a = buildResponse === null || buildResponse === void 0 ? void 0 : buildResponse.outputs) === null || _a === void 0 ? void 0 : _a.build,
349
+ });
350
+ return [2 /*return*/, buildResponse];
351
+ }
352
+ });
353
+ }); }, [runModulePackageBuild, updateStep]);
354
+ var executeSeedStep = useCallback(function (activeTransactionKey) { return __awaiter(_this, void 0, void 0, function () {
355
+ var seedResponse, seedFailed;
356
+ var _a;
357
+ return __generator(this, function (_b) {
358
+ switch (_b.label) {
359
+ case 0:
360
+ updateStep("seed", {
361
+ status: "running",
362
+ description: "Running `solidctl seed --modules-to-seed` for the imported module.",
363
+ });
364
+ return [4 /*yield*/, runModulePackageSeed({
365
+ transactionKey: activeTransactionKey,
366
+ seedGlobalMetadata: false,
367
+ }).unwrap()];
368
+ case 1:
369
+ seedResponse = _b.sent();
370
+ seedFailed = (seedResponse === null || seedResponse === void 0 ? void 0 : seedResponse.status) === "seed_failed";
371
+ updateStep("seed", {
372
+ status: seedFailed ? "warning" : "success",
373
+ description: seedFailed
374
+ ? (seedResponse === null || seedResponse === void 0 ? void 0 : seedResponse.errorMessage) || "The seed step finished with warnings."
375
+ : "Module metadata seeding completed successfully.",
376
+ output: (_a = seedResponse === null || seedResponse === void 0 ? void 0 : seedResponse.outputs) === null || _a === void 0 ? void 0 : _a.seed,
377
+ });
378
+ return [2 /*return*/, seedResponse];
379
+ }
380
+ });
381
+ }); }, [runModulePackageSeed, updateStep]);
382
+ var handleRunBuild = useCallback(function () { return __awaiter(_this, void 0, void 0, function () {
383
+ var buildResponse, error_2;
384
+ return __generator(this, function (_a) {
385
+ switch (_a.label) {
386
+ case 0:
387
+ if (!transactionKey) {
388
+ dispatch(showToast({ severity: "error", summary: "Missing transaction", detail: "Import the module before running the build step." }));
389
+ return [2 /*return*/];
390
+ }
391
+ _a.label = 1;
392
+ case 1:
393
+ _a.trys.push([1, 3, , 4]);
394
+ setIsProcessing(true);
395
+ setFinalSummary(null);
396
+ return [4 /*yield*/, executeBuildStep(transactionKey)];
397
+ case 2:
398
+ buildResponse = _a.sent();
399
+ setPreviewResponse(buildResponse);
400
+ setSelectedStep("seed");
401
+ setIsProcessing(false);
402
+ return [3 /*break*/, 4];
403
+ case 3:
404
+ error_2 = _a.sent();
405
+ updateStep("build", {
406
+ status: "error",
407
+ description: getErrorMessage(error_2),
408
+ });
409
+ setFinalSummary("The build step needs attention before you continue.");
410
+ setIsProcessing(false);
411
+ return [3 /*break*/, 4];
412
+ case 4: return [2 /*return*/];
413
+ }
414
+ });
415
+ }); }, [dispatch, executeBuildStep, transactionKey, updateStep]);
416
+ var handleRunSeed = useCallback(function () { return __awaiter(_this, void 0, void 0, function () {
417
+ var seedResponse, buildFailed, seedFailed, error_3;
418
+ var _a, _b;
419
+ return __generator(this, function (_c) {
420
+ switch (_c.label) {
421
+ case 0:
422
+ if (!transactionKey) {
423
+ dispatch(showToast({ severity: "error", summary: "Missing transaction", detail: "Import the module before running the seed step." }));
424
+ return [2 /*return*/];
425
+ }
426
+ _c.label = 1;
427
+ case 1:
428
+ _c.trys.push([1, 3, , 4]);
429
+ setIsProcessing(true);
430
+ setFinalSummary(null);
431
+ return [4 /*yield*/, executeSeedStep(transactionKey)];
432
+ case 2:
433
+ seedResponse = _c.sent();
434
+ setPreviewResponse(seedResponse);
435
+ setSelectedStep("seed");
436
+ setIsProcessing(false);
437
+ buildFailed = steps.build.status === "warning" || String((_b = (_a = previewResponse === null || previewResponse === void 0 ? void 0 : previewResponse.outputs) === null || _a === void 0 ? void 0 : _a.build) !== null && _b !== void 0 ? _b : "").includes("[failed]");
438
+ seedFailed = (seedResponse === null || seedResponse === void 0 ? void 0 : seedResponse.status) === "seed_failed";
439
+ if (!seedFailed) {
440
+ onImported === null || onImported === void 0 ? void 0 : onImported();
441
+ }
442
+ if (buildFailed && !seedFailed) {
443
+ setFinalSummary("Module imported and seeded successfully, but the build step reported errors.");
444
+ return [2 /*return*/];
445
+ }
446
+ if (seedFailed) {
447
+ setFinalSummary("Module imported, but the seed step needs attention.");
448
+ return [2 /*return*/];
449
+ }
450
+ setFinalSummary("Module import completed successfully.");
451
+ return [3 /*break*/, 4];
452
+ case 3:
453
+ error_3 = _c.sent();
454
+ updateStep("seed", {
455
+ status: "error",
456
+ description: getErrorMessage(error_3),
457
+ });
458
+ setFinalSummary("The seed step needs attention before the workflow can be closed.");
459
+ setIsProcessing(false);
460
+ return [3 /*break*/, 4];
461
+ case 4: return [2 /*return*/];
462
+ }
463
+ });
464
+ }); }, [dispatch, executeSeedStep, onImported, (_e = previewResponse === null || previewResponse === void 0 ? void 0 : previewResponse.outputs) === null || _e === void 0 ? void 0 : _e.build, steps.build.status, transactionKey, updateStep]);
465
+ useEffect(function () {
466
+ if (!initialTransactionKey || hasResumedTransactionRef.current) {
467
+ return;
468
+ }
469
+ hasResumedTransactionRef.current = true;
470
+ var loadTransaction = function () { return __awaiter(_this, void 0, void 0, function () {
471
+ var transaction, hydratedSteps, error_4;
472
+ var _a, _b;
473
+ return __generator(this, function (_c) {
474
+ switch (_c.label) {
475
+ case 0:
476
+ _c.trys.push([0, 2, , 3]);
477
+ return [4 /*yield*/, fetchModulePackageImportStatus({ transactionKey: initialTransactionKey }).unwrap()];
478
+ case 1:
479
+ transaction = _c.sent();
480
+ hydratedSteps = hydrateStepsFromTransaction(transaction);
481
+ setPreviewResponse(transaction);
482
+ setTransactionKey((_a = transaction === null || transaction === void 0 ? void 0 : transaction.transactionKey) !== null && _a !== void 0 ? _a : null);
483
+ setSteps(hydratedSteps);
484
+ setSelectedStep(getSuggestedStepFromSteps(hydratedSteps, Boolean((transaction === null || transaction === void 0 ? void 0 : transaction.preview) || (transaction === null || transaction === void 0 ? void 0 : transaction.validation)), Boolean((_b = transaction === null || transaction === void 0 ? void 0 : transaction.validation) === null || _b === void 0 ? void 0 : _b.valid)));
485
+ if ((transaction === null || transaction === void 0 ? void 0 : transaction.status) === "completed") {
486
+ setFinalSummary("Module import completed successfully.");
487
+ return [2 /*return*/];
488
+ }
489
+ if ((transaction === null || transaction === void 0 ? void 0 : transaction.status) === "seed_failed") {
490
+ setFinalSummary("Module imported, but the seed step needs attention.");
491
+ return [2 /*return*/];
492
+ }
493
+ if (!autoResume || !isResumableModulePackageStatus(transaction === null || transaction === void 0 ? void 0 : transaction.status)) {
494
+ return [2 /*return*/];
495
+ }
496
+ return [3 /*break*/, 3];
497
+ case 2:
498
+ error_4 = _c.sent();
499
+ dispatch(showToast({ severity: "error", summary: "Unable to resume import", detail: getErrorMessage(error_4) }));
500
+ return [3 /*break*/, 3];
501
+ case 3: return [2 /*return*/];
502
+ }
503
+ });
504
+ }); };
505
+ void loadTransaction();
506
+ }, [autoResume, dispatch, fetchModulePackageImportStatus, initialTransactionKey]);
507
+ var handleStartImport = function () { return __awaiter(_this, void 0, void 0, function () {
508
+ var response, error_5;
509
+ var _a;
510
+ return __generator(this, function (_b) {
511
+ switch (_b.label) {
512
+ case 0:
513
+ if (!transactionKey) {
514
+ dispatch(showToast({ severity: "error", summary: "Missing preview", detail: "Upload an archive and wait for preview to finish first." }));
515
+ return [2 /*return*/];
516
+ }
517
+ _b.label = 1;
518
+ case 1:
519
+ _b.trys.push([1, 3, , 4]);
520
+ setIsProcessing(true);
521
+ setFinalSummary(null);
522
+ updateStep("import", {
523
+ status: "running",
524
+ description: "Extracting the archive and placing files into `solid-api` and `solid-ui`.",
525
+ });
526
+ return [4 /*yield*/, confirmModulePackageImport({
527
+ transactionKey: transactionKey,
528
+ overwriteExisting: overwriteExisting,
529
+ }).unwrap()];
530
+ case 2:
531
+ response = _b.sent();
532
+ updateStep("import", {
533
+ status: "success",
534
+ description: "Archive extracted. The local UI/API may restart now, so refresh this page once both services are back.",
535
+ output: (_a = response === null || response === void 0 ? void 0 : response.outputs) === null || _a === void 0 ? void 0 : _a.import,
536
+ });
537
+ setPreviewResponse(response);
538
+ setIsProcessing(false);
539
+ dispatch(showToast({
540
+ severity: "success",
541
+ summary: "Module imported",
542
+ detail: "The module files were placed locally. Wait for the UI and API to restart, then refresh this module list page to continue with build and seed.",
543
+ }));
544
+ onClose();
545
+ return [3 /*break*/, 4];
546
+ case 3:
547
+ error_5 = _b.sent();
548
+ updateStep("import", {
549
+ status: "error",
550
+ description: getErrorMessage(error_5),
551
+ });
552
+ setFinalSummary("The module import could not be completed.");
553
+ setIsProcessing(false);
554
+ return [3 /*break*/, 4];
555
+ case 4: return [2 /*return*/];
556
+ }
557
+ });
558
+ }); };
559
+ var handleClose = function () {
560
+ if (isProcessing)
561
+ return;
562
+ if (finalSummary && transactionKey) {
563
+ void dismissModulePackageImport({ transactionKey: transactionKey });
564
+ }
565
+ onClose();
566
+ };
567
+ var renderPreviewContent = function () {
568
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x;
569
+ return (_jsxs("div", { className: "solid-module-package-preview", children: [!selectedFile ? (_jsxs("div", __assign({}, getRootProps({
570
+ className: "solid-module-package-dropzone".concat(isDragActive ? " is-active" : ""),
571
+ }), { children: [_jsx("input", __assign({}, getInputProps())), _jsx("div", { className: "solid-module-package-dropzone__icon", children: _jsx(UploadCloud, { size: 22 }) }), _jsxs("div", { className: "solid-module-package-dropzone__copy", children: [_jsx("div", { className: "solid-module-package-dropzone__title", children: "Upload `.sldx` archive" }), _jsx("p", { children: "Choose a packaged SolidX module archive from the local file system. Preview starts automatically after upload." })] }), _jsx("div", { className: "solid-module-package-dropzone__actions", children: _jsx(SolidButton, { type: "button", size: "small", variant: "outline", onClick: function (event) {
572
+ event.stopPropagation();
573
+ openFilePicker();
574
+ }, children: "Browse archive" }) })] }))) : (_jsxs("div", { className: "solid-module-package-file-card", children: [_jsxs("div", { className: "solid-module-package-file-card__main", children: [_jsx("div", { className: "solid-module-package-file-card__icon", children: _jsx(FileArchive, { size: 18 }) }), _jsxs("div", { children: [_jsx("div", { className: "solid-module-package-file-card__name", children: selectedFile.name }), _jsxs("div", { className: "solid-module-package-file-card__meta", children: [formatBytes(selectedFile.size), isPreviewing ? " • Previewing archive..." : ""] })] })] }), _jsx(SolidButton, { type: "button", size: "small", variant: "ghost", onClick: function () {
575
+ setSelectedFile(null);
576
+ setPreviewResponse(null);
577
+ setTransactionKey(null);
578
+ setOverwriteExisting(false);
579
+ setFinalSummary(null);
580
+ setSelectedStep("preview");
581
+ setSteps(createInitialSteps());
582
+ }, disabled: isProcessing, children: "Remove" })] })), !previewResponse ? (_jsxs("div", { className: "solid-module-package-empty", children: [isPreviewing ? _jsx(SolidSpinner, { size: 18 }) : _jsx(FolderTree, { size: 18 }), _jsx("p", { children: isPreviewing
583
+ ? "Reading the archive and validating the SolidX markers."
584
+ : "Upload an archive to start the automatic preview and validation flow." })] })) : (_jsxs(_Fragment, { children: [_jsxs("div", { className: "solid-module-package-metrics", children: [_jsxs("div", { className: "solid-module-package-metric", children: [_jsx("span", { className: "solid-module-package-metric__label", children: "Module" }), _jsx("span", { className: "solid-module-package-metric__value", children: ((_b = (_a = previewResponse === null || previewResponse === void 0 ? void 0 : previewResponse.preview) === null || _a === void 0 ? void 0 : _a.module) === null || _b === void 0 ? void 0 : _b.name) || "Unknown" })] }), _jsxs("div", { className: "solid-module-package-metric", children: [_jsx("span", { className: "solid-module-package-metric__label", children: "solid-api files" }), _jsx("span", { className: "solid-module-package-metric__value", children: (_e = (_d = (_c = previewResponse === null || previewResponse === void 0 ? void 0 : previewResponse.preview) === null || _c === void 0 ? void 0 : _c.contentsSummary) === null || _d === void 0 ? void 0 : _d.solidApiEntries) !== null && _e !== void 0 ? _e : 0 })] }), _jsxs("div", { className: "solid-module-package-metric", children: [_jsx("span", { className: "solid-module-package-metric__label", children: "solid-ui files" }), _jsx("span", { className: "solid-module-package-metric__value", children: (_h = (_g = (_f = previewResponse === null || previewResponse === void 0 ? void 0 : previewResponse.preview) === null || _f === void 0 ? void 0 : _f.contentsSummary) === null || _g === void 0 ? void 0 : _g.solidUiEntries) !== null && _h !== void 0 ? _h : 0 })] })] }), _jsxs("div", { className: "solid-module-package-checklist", children: [_jsxs("div", { className: "solid-module-package-checklist__section", children: [_jsx("div", { className: "solid-module-package-checklist__title", children: "Required markers" }), _jsxs("ul", { className: "solid-module-package-inline-list", children: [_jsx("li", { children: (_k = (_j = previewResponse === null || previewResponse === void 0 ? void 0 : previewResponse.preview) === null || _j === void 0 ? void 0 : _j.requiredPaths) === null || _k === void 0 ? void 0 : _k.metadataPath }), _jsx("li", { children: (_m = (_l = previewResponse === null || previewResponse === void 0 ? void 0 : previewResponse.preview) === null || _l === void 0 ? void 0 : _l.requiredPaths) === null || _m === void 0 ? void 0 : _m.apiModulePath }), _jsx("li", { children: (_p = (_o = previewResponse === null || previewResponse === void 0 ? void 0 : previewResponse.preview) === null || _o === void 0 ? void 0 : _o.requiredPaths) === null || _p === void 0 ? void 0 : _p.uiModulePath })] })] }), ((_s = (_r = (_q = previewResponse === null || previewResponse === void 0 ? void 0 : previewResponse.validation) === null || _q === void 0 ? void 0 : _q.warnings) === null || _r === void 0 ? void 0 : _r.length) !== null && _s !== void 0 ? _s : 0) > 0 ? (_jsxs("div", { className: "solid-module-package-notice is-warning", children: [_jsx("div", { className: "solid-module-package-notice__title", children: "Warnings" }), _jsx("ul", { className: "solid-module-package-inline-list", children: previewResponse.validation.warnings.map(function (warning) { return (_jsx("li", { children: warning }, warning)); }) })] })) : null, ((_v = (_u = (_t = previewResponse === null || previewResponse === void 0 ? void 0 : previewResponse.validation) === null || _t === void 0 ? void 0 : _t.errors) === null || _u === void 0 ? void 0 : _u.length) !== null && _v !== void 0 ? _v : 0) > 0 ? (_jsxs("div", { className: "solid-module-package-notice is-danger", children: [_jsx("div", { className: "solid-module-package-notice__title", children: "Validation issues" }), _jsx("ul", { className: "solid-module-package-inline-list", children: previewResponse.validation.errors.map(function (error) { return (_jsx("li", { children: error }, error)); }) })] })) : null, hasConflicts ? (_jsxs("div", { className: "solid-module-package-notice is-warning", children: [_jsx("div", { className: "solid-module-package-notice__title", children: "Existing files detected" }), _jsx("ul", { className: "solid-module-package-inline-list", children: previewResponse.conflicts.map(function (conflict) { return (_jsx("li", { children: conflict }, conflict)); }) }), _jsx(SolidCheckbox, { checked: overwriteExisting, onChange: function (event) { return setOverwriteExisting(event.currentTarget.checked); }, label: "Overwrite the existing module folders during import" })] })) : null] }), _jsx("div", { className: "solid-module-package-tree", children: ((_x = (_w = previewResponse === null || previewResponse === void 0 ? void 0 : previewResponse.preview) === null || _w === void 0 ? void 0 : _w.fileTree) !== null && _x !== void 0 ? _x : []).map(function (entry) { return (_jsx("div", { className: "solid-module-package-tree__row", children: entry }, entry)); }) })] }))] }));
585
+ };
586
+ var renderActiveStepCta = function () {
587
+ if (activeStep === "preview") {
588
+ return (_jsx(SolidButton, { type: "button", size: "small", onClick: function () { return setSelectedStep("import"); }, disabled: !canContinueFromPreview, rightIcon: _jsx(Sparkles, { size: 14 }), children: "Continue to import" }));
589
+ }
590
+ if (activeStep === "import") {
591
+ return (_jsx(SolidButton, { type: "button", size: "small", onClick: handleStartImport, disabled: !canImport, loading: isProcessing && steps.import.status === "running", leftIcon: _jsx(Sparkles, { size: 14 }), children: "Import Module" }));
592
+ }
593
+ if (activeStep === "build") {
594
+ return (_jsx(SolidButton, { type: "button", size: "small", variant: "outline", onClick: handleRunBuild, disabled: !canRunBuild, loading: isProcessing && steps.build.status === "running", children: steps.build.status === "success" || steps.build.status === "warning" ? "Build Again" : "Build Now" }));
595
+ }
596
+ if (activeStep === "seed") {
597
+ return (_jsx(SolidButton, { type: "button", size: "small", variant: "outline", onClick: handleRunSeed, disabled: !canRunSeed, loading: isProcessing && steps.seed.status === "running", children: steps.seed.status === "success" || steps.seed.status === "warning" ? "Seed Again" : "Seed" }));
598
+ }
599
+ return null;
600
+ };
601
+ var renderActiveStepContent = function () {
602
+ if (activeStep === "preview") {
603
+ return renderPreviewContent();
604
+ }
605
+ if (activeStep === "import") {
606
+ return (_jsxs("div", { className: "solid-module-package-step-stack", children: [_jsxs("div", { className: "solid-module-package-notice is-warning", children: [_jsx("div", { className: "solid-module-package-notice__title", children: "What happens after import" }), _jsxs("ul", { className: "solid-module-package-inline-list", children: [_jsx("li", { children: "Depending on the files in this archive, both the UI and API services may restart immediately." }), _jsx("li", { children: "This popup may get dismissed as part of that restart." }), _jsx("li", { children: "Wait for both services to come back, then refresh this module list page to continue with build and seed." })] })] }), steps.import.output ? _jsx("pre", { className: "solid-module-package-step__output", children: steps.import.output }) : null] }));
607
+ }
608
+ if (activeStep === "build" && steps.build.output) {
609
+ return _jsx("pre", { className: "solid-module-package-step__output", children: steps.build.output });
610
+ }
611
+ if (activeStep === "seed" && steps.seed.output) {
612
+ return _jsx("pre", { className: "solid-module-package-step__output", children: steps.seed.output });
613
+ }
614
+ return null;
615
+ };
616
+ return (_jsxs(_Fragment, { children: [_jsxs(SolidDialogHeader, { className: "solid-filter-dialog-head solid-module-package-dialog__header", children: [_jsxs("div", { children: [_jsx(SolidDialogTitle, { className: "solid-filter-dialog-title m-0", children: "Import Module Package" }), _jsx(SolidDialogDescription, { className: "solid-filter-dialog-subtitle m-0", children: "Upload a `.sldx` archive, let SolidX preview it automatically, then move through import, build, and seed." })] }), !isProcessing ? (_jsx("button", { type: "button", className: "solid-filter-dialog-close solid-radix-dialog-close", "aria-label": "Close", onClick: handleClose, children: _jsx(X, { size: 16 }) })) : null] }), _jsx(SolidDialogSeparator, { className: "solid-filter-dialog-sep" }), _jsx(SolidDialogBody, { className: "solid-filter-dialog-body solid-module-package-dialog__body", children: _jsx("section", { className: "solid-module-package-shell", children: _jsxs("div", { className: "solid-module-package-panel solid-module-package-panel--wizard", children: [_jsx("div", { className: "solid-module-package-stepper", children: STEP_ORDER.map(function (stepKey, index) {
617
+ var step = steps[stepKey];
618
+ var isCurrent = activeStep === stepKey;
619
+ var isDone = step.status === "success";
620
+ var isWarning = step.status === "warning" || step.status === "error";
621
+ var isUnlocked = index <= maxUnlockedStepIndex;
622
+ return (_jsxs("div", { className: "solid-module-package-stepper__item".concat(isCurrent ? " is-current" : "").concat(isDone ? " is-done" : "").concat(isWarning ? " is-warning" : "").concat(isUnlocked ? " is-clickable" : ""), children: [_jsx("div", { className: "solid-module-package-stepper__track" }), _jsxs("button", { type: "button", className: "solid-module-package-stepper__button", onClick: function () { return setSelectedStep(stepKey); }, disabled: !isUnlocked, children: [_jsx("div", { className: "solid-module-package-stepper__node", children: isDone ? _jsx(SolidIcon, { name: "si-check" }) : _jsx("span", { children: index + 1 }) }), _jsx("div", { className: "solid-module-package-stepper__label", children: step.title }), _jsx("div", { className: "solid-module-package-stepper__caption", children: step.description })] })] }, stepKey));
623
+ }) }), _jsxs("div", { className: "solid-module-package-stage", children: [_jsxs("div", { className: "solid-module-package-stage__meta", children: [_jsxs("span", { children: ["Step ", STEP_ORDER.indexOf(activeStep) + 1, " of ", STEP_ORDER.length] }), _jsxs("span", { children: [completedSteps, " completed"] })] }), _jsxs("div", { className: "solid-module-package-stage__header", children: [_jsx("p", { children: steps[activeStep].description }), _jsx("div", { className: "solid-module-package-stage__status is-".concat(steps[activeStep].status), children: _jsx(StepStatusIcon, { status: steps[activeStep].status }) })] }), renderActiveStepContent(), _jsx("div", { className: "solid-module-package-stage__cta", children: renderActiveStepCta() })] }), finalSummary ? (_jsxs("div", { className: "solid-module-package-summary", children: [_jsx("span", { className: "solid-module-package-summary__copy", children: finalSummary }), _jsx(SolidButton, { type: "button", size: "small", variant: "outline", leftIcon: _jsx(RefreshCw, { size: 14 }), onClick: function () { return window.location.reload(); }, children: "Reload" })] })) : null] }) }) })] }));
624
+ }
625
+ //# sourceMappingURL=ModulePackageDialog.js.map