@solidxai/core-ui 0.1.14-beta.4 → 0.1.14-beta.9

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 (176) hide show
  1. package/dist/components/auth/AuthLayout.js +1 -1
  2. package/dist/components/auth/AuthLayout.js.map +1 -1
  3. package/dist/components/auth/AuthLayout.tsx +2 -2
  4. package/dist/components/common/SettingsComponent.module.css +4 -1
  5. package/dist/components/common/SolidFieldTooltip.d.ts.map +1 -1
  6. package/dist/components/common/SolidFieldTooltip.js +1 -1
  7. package/dist/components/common/SolidFieldTooltip.js.map +1 -1
  8. package/dist/components/common/SolidFieldTooltip.tsx +1 -0
  9. package/dist/components/common/SolidFormStepper.d.ts.map +1 -1
  10. package/dist/components/common/SolidFormStepper.js +7 -6
  11. package/dist/components/common/SolidFormStepper.js.map +1 -1
  12. package/dist/components/common/SolidFormStepper.tsx +7 -1
  13. package/dist/components/common/SolidThemeProvider.d.ts.map +1 -1
  14. package/dist/components/common/SolidThemeProvider.js +127 -11
  15. package/dist/components/common/SolidThemeProvider.js.map +1 -1
  16. package/dist/components/common/SolidThemeProvider.tsx +104 -22
  17. package/dist/components/core/card/CardGrid.d.ts +1 -1
  18. package/dist/components/core/card/CardGrid.d.ts.map +1 -1
  19. package/dist/components/core/card/CardGrid.js +2 -2
  20. package/dist/components/core/card/CardGrid.js.map +1 -1
  21. package/dist/components/core/card/CardGrid.tsx +4 -0
  22. package/dist/components/core/card/CardItem.d.ts +2 -0
  23. package/dist/components/core/card/CardItem.d.ts.map +1 -1
  24. package/dist/components/core/card/CardItem.js +4 -3
  25. package/dist/components/core/card/CardItem.js.map +1 -1
  26. package/dist/components/core/card/CardItem.tsx +15 -0
  27. package/dist/components/core/card/SolidCardView.d.ts +28 -1
  28. package/dist/components/core/card/SolidCardView.d.ts.map +1 -1
  29. package/dist/components/core/card/SolidCardView.js +99 -44
  30. package/dist/components/core/card/SolidCardView.js.map +1 -1
  31. package/dist/components/core/card/SolidCardView.tsx +124 -7
  32. package/dist/components/core/card/SolidCardViewConfigure.d.ts +1 -1
  33. package/dist/components/core/card/SolidCardViewConfigure.d.ts.map +1 -1
  34. package/dist/components/core/card/SolidCardViewConfigure.js +15 -6
  35. package/dist/components/core/card/SolidCardViewConfigure.js.map +1 -1
  36. package/dist/components/core/card/SolidCardViewConfigure.tsx +34 -0
  37. package/dist/components/core/card/cardViewRegistry.d.ts +7 -0
  38. package/dist/components/core/card/cardViewRegistry.d.ts.map +1 -0
  39. package/dist/components/core/card/cardViewRegistry.js +17 -0
  40. package/dist/components/core/card/cardViewRegistry.js.map +1 -0
  41. package/dist/components/core/card/cardViewRegistry.ts +23 -0
  42. package/dist/components/core/common/PDFViewer.d.ts +9 -5
  43. package/dist/components/core/common/PDFViewer.d.ts.map +1 -1
  44. package/dist/components/core/common/PDFViewer.js +10 -102
  45. package/dist/components/core/common/PDFViewer.js.map +1 -1
  46. package/dist/components/core/common/PDFViewer.tsx +29 -88
  47. package/dist/components/core/common/SolidCollectionRowActionMenuItems.d.ts +12 -0
  48. package/dist/components/core/common/SolidCollectionRowActionMenuItems.d.ts.map +1 -0
  49. package/dist/components/core/common/SolidCollectionRowActionMenuItems.js +50 -0
  50. package/dist/components/core/common/SolidCollectionRowActionMenuItems.js.map +1 -0
  51. package/dist/components/core/common/SolidCollectionRowActionMenuItems.tsx +91 -0
  52. package/dist/components/core/common/SolidCreateButton.d.ts.map +1 -1
  53. package/dist/components/core/common/SolidCreateButton.js +2 -2
  54. package/dist/components/core/common/SolidCreateButton.js.map +1 -1
  55. package/dist/components/core/common/SolidCreateButton.tsx +22 -2
  56. package/dist/components/core/common/SolidGlobalSearchElement.d.ts.map +1 -1
  57. package/dist/components/core/common/SolidGlobalSearchElement.js +137 -134
  58. package/dist/components/core/common/SolidGlobalSearchElement.js.map +1 -1
  59. package/dist/components/core/common/SolidGlobalSearchElement.tsx +127 -119
  60. package/dist/components/core/form/SolidFormActionHeader.d.ts.map +1 -1
  61. package/dist/components/core/form/SolidFormActionHeader.js +21 -21
  62. package/dist/components/core/form/SolidFormActionHeader.js.map +1 -1
  63. package/dist/components/core/form/SolidFormActionHeader.tsx +62 -53
  64. package/dist/components/core/form/SolidFormView.d.ts.map +1 -1
  65. package/dist/components/core/form/SolidFormView.js +5 -2
  66. package/dist/components/core/form/SolidFormView.js.map +1 -1
  67. package/dist/components/core/form/SolidFormView.tsx +7 -2
  68. package/dist/components/core/kanban/KanbanBoard.d.ts +1 -1
  69. package/dist/components/core/kanban/KanbanBoard.d.ts.map +1 -1
  70. package/dist/components/core/kanban/KanbanBoard.js +2 -2
  71. package/dist/components/core/kanban/KanbanBoard.js.map +1 -1
  72. package/dist/components/core/kanban/KanbanBoard.tsx +3 -1
  73. package/dist/components/core/kanban/KanbanCard.d.ts +2 -0
  74. package/dist/components/core/kanban/KanbanCard.d.ts.map +1 -1
  75. package/dist/components/core/kanban/KanbanCard.js +4 -2
  76. package/dist/components/core/kanban/KanbanCard.js.map +1 -1
  77. package/dist/components/core/kanban/KanbanCard.tsx +14 -1
  78. package/dist/components/core/kanban/KanbanColumn.d.ts +3 -1
  79. package/dist/components/core/kanban/KanbanColumn.d.ts.map +1 -1
  80. package/dist/components/core/kanban/KanbanColumn.js +2 -2
  81. package/dist/components/core/kanban/KanbanColumn.js.map +1 -1
  82. package/dist/components/core/kanban/KanbanColumn.tsx +4 -2
  83. package/dist/components/core/kanban/SolidKanbanView.d.ts +25 -1
  84. package/dist/components/core/kanban/SolidKanbanView.d.ts.map +1 -1
  85. package/dist/components/core/kanban/SolidKanbanView.js +89 -50
  86. package/dist/components/core/kanban/SolidKanbanView.js.map +1 -1
  87. package/dist/components/core/kanban/SolidKanbanView.tsx +82 -9
  88. package/dist/components/core/kanban/kanbanViewRegistry.d.ts +7 -0
  89. package/dist/components/core/kanban/kanbanViewRegistry.d.ts.map +1 -0
  90. package/dist/components/core/kanban/kanbanViewRegistry.js +17 -0
  91. package/dist/components/core/kanban/kanbanViewRegistry.js.map +1 -0
  92. package/dist/components/core/kanban/kanbanViewRegistry.ts +23 -0
  93. package/dist/components/core/list/PLAN.md +1 -1
  94. package/dist/components/core/list/SolidListView.d.ts +11 -0
  95. package/dist/components/core/list/SolidListView.d.ts.map +1 -1
  96. package/dist/components/core/list/SolidListView.js +11 -6
  97. package/dist/components/core/list/SolidListView.js.map +1 -1
  98. package/dist/components/core/list/SolidListView.tsx +88 -45
  99. package/dist/components/core/list/SolidListViewConfigure.js +1 -1
  100. package/dist/components/core/list/SolidListViewConfigure.js.map +1 -1
  101. package/dist/components/core/list/SolidListViewConfigure.tsx +1 -1
  102. package/dist/components/core/list/columns/relations/SolidRelationManyToOneColumn.d.ts.map +1 -1
  103. package/dist/components/core/list/columns/relations/SolidRelationManyToOneColumn.js +2 -1
  104. package/dist/components/core/list/columns/relations/SolidRelationManyToOneColumn.js.map +1 -1
  105. package/dist/components/core/list/columns/relations/SolidRelationManyToOneColumn.tsx +2 -1
  106. package/dist/components/core/model/CreateModel.d.ts.map +1 -1
  107. package/dist/components/core/model/CreateModel.js +2 -1
  108. package/dist/components/core/model/CreateModel.js.map +1 -1
  109. package/dist/components/core/model/CreateModel.tsx +2 -0
  110. package/dist/components/core/model/FieldMetaData.d.ts +1 -1
  111. package/dist/components/core/model/FieldMetaData.d.ts.map +1 -1
  112. package/dist/components/core/model/FieldMetaData.js +8 -8
  113. package/dist/components/core/model/FieldMetaData.js.map +1 -1
  114. package/dist/components/core/model/FieldMetaData.tsx +2 -2
  115. package/dist/components/core/model/FieldMetaDataForm.css +119 -0
  116. package/dist/components/core/model/FieldMetaDataForm.js +1 -1
  117. package/dist/components/core/model/FieldMetaDataForm.js.map +1 -1
  118. package/dist/components/core/model/FieldMetaDataForm.tsx +1 -1
  119. package/dist/components/core/module/ModuleMetadataExplorer.css +64 -0
  120. package/dist/components/core/module/ModulePackageDialog.css +117 -12
  121. package/dist/components/core/tree/SolidTreeView.d.ts.map +1 -1
  122. package/dist/components/core/tree/SolidTreeView.js +6 -3
  123. package/dist/components/core/tree/SolidTreeView.js.map +1 -1
  124. package/dist/components/core/tree/SolidTreeView.tsx +35 -13
  125. package/dist/components/layout/AdminHeaderActions.d.ts.map +1 -1
  126. package/dist/components/layout/AdminHeaderActions.js +15 -10
  127. package/dist/components/layout/AdminHeaderActions.js.map +1 -1
  128. package/dist/components/layout/AdminHeaderActions.tsx +15 -8
  129. package/dist/components/layout/AdminTopHeader.d.ts.map +1 -1
  130. package/dist/components/layout/AdminTopHeader.js +1 -18
  131. package/dist/components/layout/AdminTopHeader.js.map +1 -1
  132. package/dist/components/layout/AdminTopHeader.tsx +3 -21
  133. package/dist/helpers/resolveActiveUserId.d.ts +13 -0
  134. package/dist/helpers/resolveActiveUserId.d.ts.map +1 -0
  135. package/dist/helpers/resolveActiveUserId.js +86 -0
  136. package/dist/helpers/resolveActiveUserId.js.map +1 -0
  137. package/dist/helpers/resolveActiveUserId.ts +90 -0
  138. package/dist/index.d.ts +5 -0
  139. package/dist/index.d.ts.map +1 -1
  140. package/dist/index.js +3 -0
  141. package/dist/index.js.map +1 -1
  142. package/dist/index.ts +5 -0
  143. package/dist/resources/globals.css +15 -0
  144. package/dist/resources/solid-custom.css +18 -1
  145. package/dist/resources/solid-tailwind-generated.css +1 -1
  146. package/dist/resources/themes/solid-dark-enterprise/theme-variables.css +28 -0
  147. package/dist/resources/themes/solid-dark-enterprise/theme.css +926 -0
  148. package/dist/resources/themes/solid-dark-modern/theme-variables.css +27 -0
  149. package/dist/resources/themes/solid-dark-modern/theme.css +600 -0
  150. package/dist/resources/themes/solid-light-enterprise/theme-variables.css +28 -0
  151. package/dist/resources/themes/solid-light-enterprise/theme.css +930 -0
  152. package/dist/resources/themes/solid-light-modern/theme-variables.css +31 -0
  153. package/dist/resources/themes/solid-light-modern/theme.css +1041 -0
  154. package/dist/routes/pages/admin/core/CardPage.d.ts.map +1 -1
  155. package/dist/routes/pages/admin/core/CardPage.js +15 -2
  156. package/dist/routes/pages/admin/core/CardPage.js.map +1 -1
  157. package/dist/routes/pages/admin/core/CardPage.tsx +17 -2
  158. package/dist/routes/pages/admin/core/DashboardPage.d.ts.map +1 -1
  159. package/dist/routes/pages/admin/core/DashboardPage.js +31 -3
  160. package/dist/routes/pages/admin/core/DashboardPage.js.map +1 -1
  161. package/dist/routes/pages/admin/core/DashboardPage.tsx +39 -11
  162. package/dist/routes/pages/admin/core/KanbanPage.d.ts.map +1 -1
  163. package/dist/routes/pages/admin/core/KanbanPage.js +15 -2
  164. package/dist/routes/pages/admin/core/KanbanPage.js.map +1 -1
  165. package/dist/routes/pages/admin/core/KanbanPage.tsx +17 -2
  166. package/dist/routes/pages/admin/core/ListPage.d.ts.map +1 -1
  167. package/dist/routes/pages/admin/core/ListPage.js +5 -13
  168. package/dist/routes/pages/admin/core/ListPage.js.map +1 -1
  169. package/dist/routes/pages/admin/core/ListPage.tsx +5 -15
  170. package/dist/theme/theme-registry.d.ts +6 -0
  171. package/dist/theme/theme-registry.d.ts.map +1 -0
  172. package/dist/theme/theme-registry.js +65 -0
  173. package/dist/theme/theme-registry.js.map +1 -0
  174. package/dist/theme/theme-registry.ts +78 -0
  175. package/dist/types/solid-core.d.ts +8 -0
  176. package/package.json +1 -1
@@ -1,9 +1,11 @@
1
1
  import { useEffect, useMemo, useRef, useState } from "react";
2
2
  import { useParams } from "react-router-dom";
3
+ import { useDispatch } from "react-redux";
3
4
  import { AlertTriangle, Filter, RefreshCw, Save } from "lucide-react";
4
5
  import { GridStack, type GridStackNode } from "gridstack";
5
6
  import "gridstack/dist/gridstack.min.css";
6
7
  import { getExtensionComponent } from "../../../../helpers/registry";
8
+ import { ERROR_MESSAGES } from "../../../../constants/error-messages";
7
9
  import {
8
10
  SolidAutocomplete,
9
11
  SolidButton,
@@ -22,6 +24,7 @@ import {
22
24
  useLazyGetDashboardVariableOptionsQuery,
23
25
  useSaveDashboardLayoutMutation,
24
26
  } from "../../../../redux/api/dashboardRuntimeApi";
27
+ import { showToast } from "../../../../redux/features/toastSlice";
25
28
  import type { DashboardGridLayoutItem, DashboardWidgetComponentProps } from "../../../../types/dashboard";
26
29
  import styles from "./DashboardPage.module.css";
27
30
 
@@ -79,6 +82,11 @@ const toIso = (value: Date | null | undefined): string | null => {
79
82
  return value.toISOString();
80
83
  };
81
84
 
85
+ const getErrorMessage = (error: any, fallback: string): string => {
86
+ const message = error?.data?.message ?? error?.data?.error ?? error?.message;
87
+ return Array.isArray(message) ? message.join(", ") : message || fallback;
88
+ };
89
+
82
90
  const extractWidgetName = (widgetData: any): string =>
83
91
  widgetData?.meta?.widgetName ?? widgetData?.widgetName ?? widgetData?.id ?? "";
84
92
 
@@ -424,6 +432,7 @@ const isUnauthorizedWidgetRuntime = (runtime: any): boolean =>
424
432
  !!(runtime?.meta?.unauthorized || runtime?.uiHints?.state === "unauthorized");
425
433
 
426
434
  export function DashboardPage() {
435
+ const dispatch = useDispatch();
427
436
  const params = useParams();
428
437
  const moduleName = params.moduleName ?? "";
429
438
  const dashboardName = params.dashboardName ?? "";
@@ -748,17 +757,36 @@ export function DashboardPage() {
748
757
  ? draftLayoutItems
749
758
  : baseLayout;
750
759
 
751
- await saveDashboardLayout({
752
- moduleName,
753
- dashboardName,
754
- layout: {
755
- engine: "gridstack",
756
- columns: gridColumns,
757
- items,
758
- },
759
- }).unwrap();
760
-
761
- setDraftLayoutItems(null);
760
+ try {
761
+ await saveDashboardLayout({
762
+ moduleName,
763
+ dashboardName,
764
+ layout: {
765
+ engine: "gridstack",
766
+ columns: gridColumns,
767
+ items,
768
+ },
769
+ }).unwrap();
770
+
771
+ setDraftLayoutItems(null);
772
+ dispatch(
773
+ showToast({
774
+ severity: "success",
775
+ summary: ERROR_MESSAGES.LAYOUT,
776
+ detail: ERROR_MESSAGES.DASHBOARD_LAYOUT_UPDATE_SUCCESSFULLY,
777
+ life: 3000,
778
+ })
779
+ );
780
+ } catch (error) {
781
+ dispatch(
782
+ showToast({
783
+ severity: "error",
784
+ summary: ERROR_MESSAGES.UPDATE_FAILED,
785
+ detail: getErrorMessage(error, ERROR_MESSAGES.DASHBOARD_LAYOUT_UPDATE_FAILED),
786
+ life: 4000,
787
+ })
788
+ );
789
+ }
762
790
  }
763
791
 
764
792
  const renderVariable = (variable: any) => {
@@ -1 +1 @@
1
- {"version":3,"file":"KanbanPage.d.ts","sourceRoot":"","sources":["../../../../../src/routes/pages/admin/core/KanbanPage.tsx"],"names":[],"mappings":"AAQA,wBAAgB,UAAU,4CAczB"}
1
+ {"version":3,"file":"KanbanPage.d.ts","sourceRoot":"","sources":["../../../../../src/routes/pages/admin/core/KanbanPage.tsx"],"names":[],"mappings":"AAUA,wBAAgB,UAAU,4CA2BzB"}
@@ -11,8 +11,9 @@ var __assign = (this && this.__assign) || function () {
11
11
  };
12
12
  import { jsx as _jsx } from "react/jsx-runtime";
13
13
  import { SolidKanbanView } from "../../../../components/core/kanban/SolidKanbanView";
14
+ import { registerKanbanView, unregisterKanbanView } from "../../../../components/core/kanban/kanbanViewRegistry";
14
15
  import { camelCase } from "lodash";
15
- import { useEffect } from "react";
16
+ import { useCallback, useEffect } from "react";
16
17
  import { useParams } from "react-router-dom";
17
18
  import { storeCurrentModelViewContext } from "../../../../helpers/modelViewPersistence";
18
19
  import { usePathname } from "../../../../hooks/usePathname";
@@ -24,10 +25,22 @@ export function KanbanPage() {
24
25
  var search = searchParams.toString();
25
26
  var moduleName = params.moduleName || "";
26
27
  var modelName = params.modelName ? camelCase(params.modelName) : "";
28
+ var menuItemId = searchParams.get("menuItemId") || "";
29
+ var menuItemName = searchParams.get("menuItemName") || "";
30
+ var actionId = searchParams.get("actionId") || "";
31
+ var actionName = searchParams.get("actionName") || "";
32
+ var kanbanId = "page:".concat(moduleName, ":").concat(modelName, ":").concat(menuItemId, ":").concat(menuItemName, ":").concat(actionId, ":").concat(actionName);
33
+ var setKanbanRef = useCallback(function (handle) {
34
+ if (handle) {
35
+ registerKanbanView(kanbanId, handle);
36
+ return;
37
+ }
38
+ unregisterKanbanView(kanbanId);
39
+ }, [kanbanId]);
27
40
  useEffect(function () {
28
41
  var currentUrl = search ? "".concat(pathname, "?").concat(search) : pathname;
29
42
  storeCurrentModelViewContext(currentUrl);
30
43
  }, [pathname, search]);
31
- return _jsx(SolidKanbanView, __assign({}, params, { embeded: false, moduleName: moduleName, modelName: modelName }));
44
+ return _jsx(SolidKanbanView, __assign({ ref: setKanbanRef }, params, { embeded: false, moduleName: moduleName, modelName: modelName }), kanbanId);
32
45
  }
33
46
  //# sourceMappingURL=KanbanPage.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"KanbanPage.js","sourceRoot":"","sources":["../../../../../src/routes/pages/admin/core/KanbanPage.tsx"],"names":[],"mappings":";;;;;;;;;;;;AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,oDAAoD,CAAC;AACrF,OAAO,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACnC,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAClC,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,4BAA4B,EAAE,MAAM,0CAA0C,CAAC;AACxF,OAAO,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AAEpE,MAAM,UAAU,UAAU;IACxB,IAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAC3B,IAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;IAC/B,IAAM,YAAY,GAAG,eAAe,EAAE,CAAC;IACvC,IAAM,MAAM,GAAG,YAAY,CAAC,QAAQ,EAAE,CAAC;IACvC,IAAM,UAAU,GAAG,MAAM,CAAC,UAAU,IAAI,EAAE,CAAC;IAC3C,IAAM,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAEtE,SAAS,CAAC;QACR,IAAM,UAAU,GAAG,MAAM,CAAC,CAAC,CAAC,UAAG,QAAQ,cAAI,MAAM,CAAE,CAAC,CAAC,CAAC,QAAQ,CAAC;QAC/D,4BAA4B,CAAC,UAAU,CAAC,CAAC;IAC3C,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC;IAEvB,OAAO,KAAC,eAAe,eAAK,MAAM,IAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,IAAI,CAAC;AACvG,CAAC","sourcesContent":["import { SolidKanbanView } from \"../../../../components/core/kanban/SolidKanbanView\";\nimport { camelCase } from \"lodash\";\nimport { useEffect } from \"react\";\nimport { useParams } from \"react-router-dom\";\nimport { storeCurrentModelViewContext } from \"../../../../helpers/modelViewPersistence\";\nimport { usePathname } from \"../../../../hooks/usePathname\";\nimport { useSearchParams } from \"../../../../hooks/useSearchParams\";\n\nexport function KanbanPage() {\n const params = useParams();\n const pathname = usePathname();\n const searchParams = useSearchParams();\n const search = searchParams.toString();\n const moduleName = params.moduleName || \"\";\n const modelName = params.modelName ? camelCase(params.modelName) : \"\";\n\n useEffect(() => {\n const currentUrl = search ? `${pathname}?${search}` : pathname;\n storeCurrentModelViewContext(currentUrl);\n }, [pathname, search]);\n\n return <SolidKanbanView {...params} embeded={false} moduleName={moduleName} modelName={modelName} />;\n}\n"]}
1
+ {"version":3,"file":"KanbanPage.js","sourceRoot":"","sources":["../../../../../src/routes/pages/admin/core/KanbanPage.tsx"],"names":[],"mappings":";;;;;;;;;;;;AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,oDAAoD,CAAC;AAErF,OAAO,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,uDAAuD,CAAC;AACjH,OAAO,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACnC,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAC/C,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,4BAA4B,EAAE,MAAM,0CAA0C,CAAC;AACxF,OAAO,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AAEpE,MAAM,UAAU,UAAU;IACxB,IAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAC3B,IAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;IAC/B,IAAM,YAAY,GAAG,eAAe,EAAE,CAAC;IACvC,IAAM,MAAM,GAAG,YAAY,CAAC,QAAQ,EAAE,CAAC;IACvC,IAAM,UAAU,GAAG,MAAM,CAAC,UAAU,IAAI,EAAE,CAAC;IAC3C,IAAM,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACtE,IAAM,UAAU,GAAG,YAAY,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;IACxD,IAAM,YAAY,GAAG,YAAY,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC;IAC5D,IAAM,QAAQ,GAAG,YAAY,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;IACpD,IAAM,UAAU,GAAG,YAAY,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;IACxD,IAAM,QAAQ,GAAG,eAAQ,UAAU,cAAI,SAAS,cAAI,UAAU,cAAI,YAAY,cAAI,QAAQ,cAAI,UAAU,CAAE,CAAC;IAE3G,IAAM,YAAY,GAAG,WAAW,CAAC,UAAC,MAAoC;QACpE,IAAI,MAAM,EAAE;YACV,kBAAkB,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;YACrC,OAAO;SACR;QACD,oBAAoB,CAAC,QAAQ,CAAC,CAAC;IACjC,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;IAEf,SAAS,CAAC;QACR,IAAM,UAAU,GAAG,MAAM,CAAC,CAAC,CAAC,UAAG,QAAQ,cAAI,MAAM,CAAE,CAAC,CAAC,CAAC,QAAQ,CAAC;QAC/D,4BAA4B,CAAC,UAAU,CAAC,CAAC;IAC3C,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC;IAEvB,OAAO,KAAC,eAAe,aAAC,GAAG,EAAE,YAAY,IAAqB,MAAM,IAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,KAAlF,QAAQ,CAA8E,CAAC;AACzI,CAAC","sourcesContent":["import { SolidKanbanView } from \"../../../../components/core/kanban/SolidKanbanView\";\nimport type { SolidKanbanViewHandle } from \"../../../../components/core/kanban/SolidKanbanView\";\nimport { registerKanbanView, unregisterKanbanView } from \"../../../../components/core/kanban/kanbanViewRegistry\";\nimport { camelCase } from \"lodash\";\nimport { useCallback, useEffect } from \"react\";\nimport { useParams } from \"react-router-dom\";\nimport { storeCurrentModelViewContext } from \"../../../../helpers/modelViewPersistence\";\nimport { usePathname } from \"../../../../hooks/usePathname\";\nimport { useSearchParams } from \"../../../../hooks/useSearchParams\";\n\nexport function KanbanPage() {\n const params = useParams();\n const pathname = usePathname();\n const searchParams = useSearchParams();\n const search = searchParams.toString();\n const moduleName = params.moduleName || \"\";\n const modelName = params.modelName ? camelCase(params.modelName) : \"\";\n const menuItemId = searchParams.get(\"menuItemId\") || \"\";\n const menuItemName = searchParams.get(\"menuItemName\") || \"\";\n const actionId = searchParams.get(\"actionId\") || \"\";\n const actionName = searchParams.get(\"actionName\") || \"\";\n const kanbanId = `page:${moduleName}:${modelName}:${menuItemId}:${menuItemName}:${actionId}:${actionName}`;\n\n const setKanbanRef = useCallback((handle: SolidKanbanViewHandle | null) => {\n if (handle) {\n registerKanbanView(kanbanId, handle);\n return;\n }\n unregisterKanbanView(kanbanId);\n }, [kanbanId]);\n\n useEffect(() => {\n const currentUrl = search ? `${pathname}?${search}` : pathname;\n storeCurrentModelViewContext(currentUrl);\n }, [pathname, search]);\n\n return <SolidKanbanView ref={setKanbanRef} key={kanbanId} {...params} embeded={false} moduleName={moduleName} modelName={modelName} />;\n}\n"]}
@@ -1,6 +1,8 @@
1
1
  import { SolidKanbanView } from "../../../../components/core/kanban/SolidKanbanView";
2
+ import type { SolidKanbanViewHandle } from "../../../../components/core/kanban/SolidKanbanView";
3
+ import { registerKanbanView, unregisterKanbanView } from "../../../../components/core/kanban/kanbanViewRegistry";
2
4
  import { camelCase } from "lodash";
3
- import { useEffect } from "react";
5
+ import { useCallback, useEffect } from "react";
4
6
  import { useParams } from "react-router-dom";
5
7
  import { storeCurrentModelViewContext } from "../../../../helpers/modelViewPersistence";
6
8
  import { usePathname } from "../../../../hooks/usePathname";
@@ -13,11 +15,24 @@ export function KanbanPage() {
13
15
  const search = searchParams.toString();
14
16
  const moduleName = params.moduleName || "";
15
17
  const modelName = params.modelName ? camelCase(params.modelName) : "";
18
+ const menuItemId = searchParams.get("menuItemId") || "";
19
+ const menuItemName = searchParams.get("menuItemName") || "";
20
+ const actionId = searchParams.get("actionId") || "";
21
+ const actionName = searchParams.get("actionName") || "";
22
+ const kanbanId = `page:${moduleName}:${modelName}:${menuItemId}:${menuItemName}:${actionId}:${actionName}`;
23
+
24
+ const setKanbanRef = useCallback((handle: SolidKanbanViewHandle | null) => {
25
+ if (handle) {
26
+ registerKanbanView(kanbanId, handle);
27
+ return;
28
+ }
29
+ unregisterKanbanView(kanbanId);
30
+ }, [kanbanId]);
16
31
 
17
32
  useEffect(() => {
18
33
  const currentUrl = search ? `${pathname}?${search}` : pathname;
19
34
  storeCurrentModelViewContext(currentUrl);
20
35
  }, [pathname, search]);
21
36
 
22
- return <SolidKanbanView {...params} embeded={false} moduleName={moduleName} modelName={modelName} />;
37
+ return <SolidKanbanView ref={setKanbanRef} key={kanbanId} {...params} embeded={false} moduleName={moduleName} modelName={modelName} />;
23
38
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ListPage.d.ts","sourceRoot":"","sources":["../../../../../src/routes/pages/admin/core/ListPage.tsx"],"names":[],"mappings":"AAUA,wBAAgB,QAAQ,4CA+CvB"}
1
+ {"version":3,"file":"ListPage.d.ts","sourceRoot":"","sources":["../../../../../src/routes/pages/admin/core/ListPage.tsx"],"names":[],"mappings":"AAUA,wBAAgB,QAAQ,4CAqCvB"}
@@ -40,20 +40,12 @@ export function ListPage() {
40
40
  }, [listId]);
41
41
  useEffect(function () {
42
42
  var currentUrl = search ? "".concat(pathname, "?").concat(search) : pathname;
43
- var hasSavedQuery = searchParams.has("savedQuery");
44
- if (!hasSavedQuery) {
45
- var retainedUrl = resolveRetainedModelViewRoute(currentUrl);
46
- if (retainedUrl !== currentUrl) {
47
- router.replace(retainedUrl);
48
- return;
49
- }
43
+ var retainedUrl = resolveRetainedModelViewRoute(currentUrl);
44
+ if (retainedUrl !== currentUrl) {
45
+ router.replace(retainedUrl);
46
+ return;
50
47
  }
51
- // savedQuery strip karke store karo
52
- var params = new URLSearchParams(search);
53
- params.delete("savedQuery");
54
- var cleanSearch = params.toString();
55
- var urlToStore = cleanSearch ? "".concat(pathname, "?").concat(cleanSearch) : pathname;
56
- storeCurrentModelViewContext(urlToStore);
48
+ storeCurrentModelViewContext(currentUrl);
57
49
  }, [pathname, search]);
58
50
  return _jsx(SolidListView, __assign({ ref: setListRef }, params, { embeded: false, moduleName: moduleName, modelName: modelName }), listId);
59
51
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ListPage.js","sourceRoot":"","sources":["../../../../../src/routes/pages/admin/core/ListPage.tsx"],"names":[],"mappings":";;;;;;;;;;;;AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,gDAAgD,CAAC;AAC/E,OAAO,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACnC,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAC/C,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAE9D,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,mDAAmD,CAAC;AACzG,OAAO,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAC5D,OAAO,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AACxD,OAAO,EAAE,6BAA6B,EAAE,4BAA4B,EAAE,MAAM,0CAA0C,CAAC;AAEvH,MAAM,UAAU,QAAQ;IACtB,IAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IACpB,IAAA,YAAY,GAAI,eAAe,EAAE,GAArB,CAAsB;IACzC,IAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;IAC/B,IAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAC3B,IAAM,MAAM,GAAG,YAAY,CAAC,QAAQ,EAAE,CAAC;IAEvC,IAAM,UAAU,GAAG,MAAM,CAAC,UAAU,IAAI,EAAE,CAAC;IAC3C,IAAM,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAEtE,IAAM,UAAU,GAAG,YAAY,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;IACxD,IAAM,YAAY,GAAG,YAAY,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC;IAC5D,IAAM,QAAQ,GAAG,YAAY,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;IACpD,IAAM,UAAU,GAAG,YAAY,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;IAExD,IAAM,MAAM,GAAG,eAAQ,UAAU,cAAI,SAAS,cAAI,UAAU,cAAI,YAAY,cAAI,QAAQ,cAAI,UAAU,CAAE,CAAC;IAEzG,IAAM,UAAU,GAAG,WAAW,CAAC,UAAC,MAAkC;QAChE,IAAI,MAAM,EAAE;YACV,gBAAgB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YACjC,OAAO;SACR;QACD,kBAAkB,CAAC,MAAM,CAAC,CAAC;IAC7B,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IAEb,SAAS,CAAC;QACR,IAAM,UAAU,GAAG,MAAM,CAAC,CAAC,CAAC,UAAG,QAAQ,cAAI,MAAM,CAAE,CAAC,CAAC,CAAC,QAAQ,CAAC;QAC/D,IAAM,aAAa,GAAG,YAAY,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QAErD,IAAI,CAAC,aAAa,EAAE;YAClB,IAAM,WAAW,GAAG,6BAA6B,CAAC,UAAU,CAAC,CAAC;YAC9D,IAAI,WAAW,KAAK,UAAU,EAAE;gBAC9B,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;gBAC5B,OAAO;aACR;SACF;QAED,oCAAoC;QACpC,IAAM,MAAM,GAAG,IAAI,eAAe,CAAC,MAAM,CAAC,CAAC;QAC3C,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;QAC5B,IAAM,WAAW,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC;QACtC,IAAM,UAAU,GAAG,WAAW,CAAC,CAAC,CAAC,UAAG,QAAQ,cAAI,WAAW,CAAE,CAAC,CAAC,CAAC,QAAQ,CAAC;QAEzE,4BAA4B,CAAC,UAAU,CAAC,CAAC;IAC3C,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC;IAEvB,OAAO,KAAC,aAAa,aAAC,GAAG,EAAE,UAAU,IAAmB,MAAM,IAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,KAAhF,MAAM,CAA8E,CAAC;AACnI,CAAC","sourcesContent":["import { SolidListView } from \"../../../../components/core/list/SolidListView\";\nimport { camelCase } from \"lodash\";\nimport { useCallback, useEffect } from \"react\";\nimport { useParams, useSearchParams } from \"react-router-dom\";\nimport type { SolidListViewHandle } from \"../../../../components/core/list/SolidListView\";\nimport { registerListView, unregisterListView } from \"../../../../components/core/list/listViewRegistry\";\nimport { usePathname } from \"../../../../hooks/usePathname\";\nimport { useRouter } from \"../../../../hooks/useRouter\";\nimport { resolveRetainedModelViewRoute, storeCurrentModelViewContext } from \"../../../../helpers/modelViewPersistence\";\n\nexport function ListPage() {\n const params = useParams();\n const [searchParams] = useSearchParams();\n const pathname = usePathname();\n const router = useRouter();\n const search = searchParams.toString();\n\n const moduleName = params.moduleName || \"\";\n const modelName = params.modelName ? camelCase(params.modelName) : \"\";\n\n const menuItemId = searchParams.get(\"menuItemId\") || \"\";\n const menuItemName = searchParams.get(\"menuItemName\") || \"\";\n const actionId = searchParams.get(\"actionId\") || \"\";\n const actionName = searchParams.get(\"actionName\") || \"\";\n\n const listId = `page:${moduleName}:${modelName}:${menuItemId}:${menuItemName}:${actionId}:${actionName}`;\n\n const setListRef = useCallback((handle: SolidListViewHandle | null) => {\n if (handle) {\n registerListView(listId, handle);\n return;\n }\n unregisterListView(listId);\n }, [listId]);\n\n useEffect(() => {\n const currentUrl = search ? `${pathname}?${search}` : pathname;\n const hasSavedQuery = searchParams.has(\"savedQuery\");\n\n if (!hasSavedQuery) {\n const retainedUrl = resolveRetainedModelViewRoute(currentUrl);\n if (retainedUrl !== currentUrl) {\n router.replace(retainedUrl);\n return;\n }\n }\n\n // savedQuery strip karke store karo\n const params = new URLSearchParams(search);\n params.delete(\"savedQuery\");\n const cleanSearch = params.toString();\n const urlToStore = cleanSearch ? `${pathname}?${cleanSearch}` : pathname;\n\n storeCurrentModelViewContext(urlToStore);\n }, [pathname, search]);\n\n return <SolidListView ref={setListRef} key={listId} {...params} embeded={false} moduleName={moduleName} modelName={modelName} />;\n}\n"]}
1
+ {"version":3,"file":"ListPage.js","sourceRoot":"","sources":["../../../../../src/routes/pages/admin/core/ListPage.tsx"],"names":[],"mappings":";;;;;;;;;;;;AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,gDAAgD,CAAC;AAC/E,OAAO,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACnC,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAC/C,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAE9D,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,mDAAmD,CAAC;AACzG,OAAO,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAC5D,OAAO,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AACxD,OAAO,EAAE,6BAA6B,EAAE,4BAA4B,EAAE,MAAM,0CAA0C,CAAC;AAEvH,MAAM,UAAU,QAAQ;IACtB,IAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IACpB,IAAA,YAAY,GAAI,eAAe,EAAE,GAArB,CAAsB;IACzC,IAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;IAC/B,IAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAC3B,IAAM,MAAM,GAAG,YAAY,CAAC,QAAQ,EAAE,CAAC;IAEvC,IAAM,UAAU,GAAG,MAAM,CAAC,UAAU,IAAI,EAAE,CAAC;IAC3C,IAAM,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAEtE,IAAM,UAAU,GAAG,YAAY,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;IACxD,IAAM,YAAY,GAAG,YAAY,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC;IAC5D,IAAM,QAAQ,GAAG,YAAY,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;IACpD,IAAM,UAAU,GAAG,YAAY,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;IAExD,IAAM,MAAM,GAAG,eAAQ,UAAU,cAAI,SAAS,cAAI,UAAU,cAAI,YAAY,cAAI,QAAQ,cAAI,UAAU,CAAE,CAAC;IAEzG,IAAM,UAAU,GAAG,WAAW,CAAC,UAAC,MAAkC;QAChE,IAAI,MAAM,EAAE;YACV,gBAAgB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YACjC,OAAO;SACR;QACD,kBAAkB,CAAC,MAAM,CAAC,CAAC;IAC7B,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IAEb,SAAS,CAAC;QACR,IAAM,UAAU,GAAG,MAAM,CAAC,CAAC,CAAC,UAAG,QAAQ,cAAI,MAAM,CAAE,CAAC,CAAC,CAAC,QAAQ,CAAC;QAC/D,IAAM,WAAW,GAAG,6BAA6B,CAAC,UAAU,CAAC,CAAC;QAC9D,IAAI,WAAW,KAAK,UAAU,EAAE;YAC9B,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;YAC5B,OAAO;SACR;QAED,4BAA4B,CAAC,UAAU,CAAC,CAAC;IAC3C,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC;IAEvB,OAAO,KAAC,aAAa,aAAC,GAAG,EAAE,UAAU,IAAmB,MAAM,IAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,KAAhF,MAAM,CAA8E,CAAC;AACnI,CAAC","sourcesContent":["import { SolidListView } from \"../../../../components/core/list/SolidListView\";\nimport { camelCase } from \"lodash\";\nimport { useCallback, useEffect } from \"react\";\nimport { useParams, useSearchParams } from \"react-router-dom\";\nimport type { SolidListViewHandle } from \"../../../../components/core/list/SolidListView\";\nimport { registerListView, unregisterListView } from \"../../../../components/core/list/listViewRegistry\";\nimport { usePathname } from \"../../../../hooks/usePathname\";\nimport { useRouter } from \"../../../../hooks/useRouter\";\nimport { resolveRetainedModelViewRoute, storeCurrentModelViewContext } from \"../../../../helpers/modelViewPersistence\";\n\nexport function ListPage() {\n const params = useParams();\n const [searchParams] = useSearchParams();\n const pathname = usePathname();\n const router = useRouter();\n const search = searchParams.toString();\n\n const moduleName = params.moduleName || \"\";\n const modelName = params.modelName ? camelCase(params.modelName) : \"\";\n\n const menuItemId = searchParams.get(\"menuItemId\") || \"\";\n const menuItemName = searchParams.get(\"menuItemName\") || \"\";\n const actionId = searchParams.get(\"actionId\") || \"\";\n const actionName = searchParams.get(\"actionName\") || \"\";\n\n const listId = `page:${moduleName}:${modelName}:${menuItemId}:${menuItemName}:${actionId}:${actionName}`;\n\n const setListRef = useCallback((handle: SolidListViewHandle | null) => {\n if (handle) {\n registerListView(listId, handle);\n return;\n }\n unregisterListView(listId);\n }, [listId]);\n\n useEffect(() => {\n const currentUrl = search ? `${pathname}?${search}` : pathname;\n const retainedUrl = resolveRetainedModelViewRoute(currentUrl);\n if (retainedUrl !== currentUrl) {\n router.replace(retainedUrl);\n return;\n }\n\n storeCurrentModelViewContext(currentUrl);\n }, [pathname, search]);\n\n return <SolidListView ref={setListRef} key={listId} {...params} embeded={false} moduleName={moduleName} modelName={modelName} />;\n}\n"]}
@@ -35,23 +35,13 @@ export function ListPage() {
35
35
 
36
36
  useEffect(() => {
37
37
  const currentUrl = search ? `${pathname}?${search}` : pathname;
38
- const hasSavedQuery = searchParams.has("savedQuery");
39
-
40
- if (!hasSavedQuery) {
41
- const retainedUrl = resolveRetainedModelViewRoute(currentUrl);
42
- if (retainedUrl !== currentUrl) {
43
- router.replace(retainedUrl);
44
- return;
45
- }
38
+ const retainedUrl = resolveRetainedModelViewRoute(currentUrl);
39
+ if (retainedUrl !== currentUrl) {
40
+ router.replace(retainedUrl);
41
+ return;
46
42
  }
47
43
 
48
- // savedQuery strip karke store karo
49
- const params = new URLSearchParams(search);
50
- params.delete("savedQuery");
51
- const cleanSearch = params.toString();
52
- const urlToStore = cleanSearch ? `${pathname}?${cleanSearch}` : pathname;
53
-
54
- storeCurrentModelViewContext(urlToStore);
44
+ storeCurrentModelViewContext(currentUrl);
55
45
  }, [pathname, search]);
56
46
 
57
47
  return <SolidListView ref={setListRef} key={listId} {...params} embeded={false} moduleName={moduleName} modelName={modelName} />;
@@ -0,0 +1,6 @@
1
+ export type ThemeMode = "light" | "dark";
2
+ export declare function getThemeModeFromThemeKey(value?: string | null): ThemeMode | null;
3
+ export declare function getDefaultThemeKey(mode?: ThemeMode): string;
4
+ export declare function toThemeModeVariant(value: string, mode: ThemeMode): string | null;
5
+ export declare function isRegisteredThemeKey(value?: string | null, mode?: ThemeMode): value is string;
6
+ //# sourceMappingURL=theme-registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"theme-registry.d.ts","sourceRoot":"","sources":["../../src/theme/theme-registry.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,SAAS,GAAG,OAAO,GAAG,MAAM,CAAC;AAgDzC,wBAAgB,wBAAwB,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,IAAI,CAQhF;AAED,wBAAgB,kBAAkB,CAAC,IAAI,GAAE,SAAmB,GAAG,MAAM,CAEpE;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,GAAG,MAAM,GAAG,IAAI,CAShF;AAED,wBAAgB,oBAAoB,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,EAAE,IAAI,CAAC,EAAE,SAAS,GAAG,KAAK,IAAI,MAAM,CAI7F"}
@@ -0,0 +1,65 @@
1
+ var DEFAULT_THEME_KEYS = {
2
+ light: "solid-light-purple",
3
+ dark: "solid-dark-purple",
4
+ };
5
+ var THEME_MODE_TOKENS = {
6
+ light: "-light-",
7
+ dark: "-dark-",
8
+ };
9
+ var THEME_MODE_SUFFIXES = {
10
+ light: "-light",
11
+ dark: "-dark",
12
+ };
13
+ function normalizeThemeKey(value) {
14
+ var normalized = value === null || value === void 0 ? void 0 : value.trim().toLowerCase();
15
+ return normalized || null;
16
+ }
17
+ function matchesThemeMode(value, mode) {
18
+ return (value.includes(THEME_MODE_TOKENS[mode])
19
+ || value.endsWith(THEME_MODE_SUFFIXES[mode])
20
+ || value === mode);
21
+ }
22
+ function replaceThemeMode(value, targetMode) {
23
+ var sourceMode = targetMode === "light" ? "dark" : "light";
24
+ var sourceToken = THEME_MODE_TOKENS[sourceMode];
25
+ var targetToken = THEME_MODE_TOKENS[targetMode];
26
+ var sourceSuffix = THEME_MODE_SUFFIXES[sourceMode];
27
+ var targetSuffix = THEME_MODE_SUFFIXES[targetMode];
28
+ if (value.includes(sourceToken)) {
29
+ return value.replace(sourceToken, targetToken);
30
+ }
31
+ if (value.endsWith(sourceSuffix)) {
32
+ return "".concat(value.slice(0, -sourceSuffix.length)).concat(targetSuffix);
33
+ }
34
+ return null;
35
+ }
36
+ export function getThemeModeFromThemeKey(value) {
37
+ var normalized = normalizeThemeKey(value);
38
+ if (!normalized)
39
+ return null;
40
+ if (matchesThemeMode(normalized, "light"))
41
+ return "light";
42
+ if (matchesThemeMode(normalized, "dark"))
43
+ return "dark";
44
+ return null;
45
+ }
46
+ export function getDefaultThemeKey(mode) {
47
+ if (mode === void 0) { mode = "light"; }
48
+ return DEFAULT_THEME_KEYS[mode];
49
+ }
50
+ export function toThemeModeVariant(value, mode) {
51
+ var normalized = normalizeThemeKey(value);
52
+ if (!normalized)
53
+ return null;
54
+ if (getThemeModeFromThemeKey(normalized) === mode) {
55
+ return normalized;
56
+ }
57
+ return replaceThemeMode(normalized, mode);
58
+ }
59
+ export function isRegisteredThemeKey(value, mode) {
60
+ var currentMode = getThemeModeFromThemeKey(value);
61
+ if (!value || !currentMode)
62
+ return false;
63
+ return mode ? currentMode === mode : true;
64
+ }
65
+ //# sourceMappingURL=theme-registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"theme-registry.js","sourceRoot":"","sources":["../../src/theme/theme-registry.ts"],"names":[],"mappings":"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","sourcesContent":["export type ThemeMode = \"light\" | \"dark\";\n\nconst DEFAULT_THEME_KEYS: Record<ThemeMode, string> = {\n light: \"solid-light-purple\",\n dark: \"solid-dark-purple\",\n};\n\nconst THEME_MODE_TOKENS: Record<ThemeMode, string> = {\n light: \"-light-\",\n dark: \"-dark-\",\n};\n\nconst THEME_MODE_SUFFIXES: Record<ThemeMode, string> = {\n light: \"-light\",\n dark: \"-dark\",\n};\n\nfunction normalizeThemeKey(value?: string | null): string | null {\n const normalized = value?.trim().toLowerCase();\n return normalized || null;\n}\n\nfunction matchesThemeMode(value: string, mode: ThemeMode): boolean {\n return (\n value.includes(THEME_MODE_TOKENS[mode])\n || value.endsWith(THEME_MODE_SUFFIXES[mode])\n || value === mode\n );\n}\n\nfunction replaceThemeMode(value: string, targetMode: ThemeMode): string | null {\n const sourceMode: ThemeMode = targetMode === \"light\" ? \"dark\" : \"light\";\n const sourceToken = THEME_MODE_TOKENS[sourceMode];\n const targetToken = THEME_MODE_TOKENS[targetMode];\n const sourceSuffix = THEME_MODE_SUFFIXES[sourceMode];\n const targetSuffix = THEME_MODE_SUFFIXES[targetMode];\n\n if (value.includes(sourceToken)) {\n return value.replace(sourceToken, targetToken);\n }\n\n if (value.endsWith(sourceSuffix)) {\n return `${value.slice(0, -sourceSuffix.length)}${targetSuffix}`;\n }\n\n return null;\n}\n\nexport function getThemeModeFromThemeKey(value?: string | null): ThemeMode | null {\n const normalized = normalizeThemeKey(value);\n if (!normalized) return null;\n\n if (matchesThemeMode(normalized, \"light\")) return \"light\";\n if (matchesThemeMode(normalized, \"dark\")) return \"dark\";\n\n return null;\n}\n\nexport function getDefaultThemeKey(mode: ThemeMode = \"light\"): string {\n return DEFAULT_THEME_KEYS[mode];\n}\n\nexport function toThemeModeVariant(value: string, mode: ThemeMode): string | null {\n const normalized = normalizeThemeKey(value);\n if (!normalized) return null;\n\n if (getThemeModeFromThemeKey(normalized) === mode) {\n return normalized;\n }\n\n return replaceThemeMode(normalized, mode);\n}\n\nexport function isRegisteredThemeKey(value?: string | null, mode?: ThemeMode): value is string {\n const currentMode = getThemeModeFromThemeKey(value);\n if (!value || !currentMode) return false;\n return mode ? currentMode === mode : true;\n}\n"]}
@@ -0,0 +1,78 @@
1
+ export type ThemeMode = "light" | "dark";
2
+
3
+ const DEFAULT_THEME_KEYS: Record<ThemeMode, string> = {
4
+ light: "solid-light-purple",
5
+ dark: "solid-dark-purple",
6
+ };
7
+
8
+ const THEME_MODE_TOKENS: Record<ThemeMode, string> = {
9
+ light: "-light-",
10
+ dark: "-dark-",
11
+ };
12
+
13
+ const THEME_MODE_SUFFIXES: Record<ThemeMode, string> = {
14
+ light: "-light",
15
+ dark: "-dark",
16
+ };
17
+
18
+ function normalizeThemeKey(value?: string | null): string | null {
19
+ const normalized = value?.trim().toLowerCase();
20
+ return normalized || null;
21
+ }
22
+
23
+ function matchesThemeMode(value: string, mode: ThemeMode): boolean {
24
+ return (
25
+ value.includes(THEME_MODE_TOKENS[mode])
26
+ || value.endsWith(THEME_MODE_SUFFIXES[mode])
27
+ || value === mode
28
+ );
29
+ }
30
+
31
+ function replaceThemeMode(value: string, targetMode: ThemeMode): string | null {
32
+ const sourceMode: ThemeMode = targetMode === "light" ? "dark" : "light";
33
+ const sourceToken = THEME_MODE_TOKENS[sourceMode];
34
+ const targetToken = THEME_MODE_TOKENS[targetMode];
35
+ const sourceSuffix = THEME_MODE_SUFFIXES[sourceMode];
36
+ const targetSuffix = THEME_MODE_SUFFIXES[targetMode];
37
+
38
+ if (value.includes(sourceToken)) {
39
+ return value.replace(sourceToken, targetToken);
40
+ }
41
+
42
+ if (value.endsWith(sourceSuffix)) {
43
+ return `${value.slice(0, -sourceSuffix.length)}${targetSuffix}`;
44
+ }
45
+
46
+ return null;
47
+ }
48
+
49
+ export function getThemeModeFromThemeKey(value?: string | null): ThemeMode | null {
50
+ const normalized = normalizeThemeKey(value);
51
+ if (!normalized) return null;
52
+
53
+ if (matchesThemeMode(normalized, "light")) return "light";
54
+ if (matchesThemeMode(normalized, "dark")) return "dark";
55
+
56
+ return null;
57
+ }
58
+
59
+ export function getDefaultThemeKey(mode: ThemeMode = "light"): string {
60
+ return DEFAULT_THEME_KEYS[mode];
61
+ }
62
+
63
+ export function toThemeModeVariant(value: string, mode: ThemeMode): string | null {
64
+ const normalized = normalizeThemeKey(value);
65
+ if (!normalized) return null;
66
+
67
+ if (getThemeModeFromThemeKey(normalized) === mode) {
68
+ return normalized;
69
+ }
70
+
71
+ return replaceThemeMode(normalized, mode);
72
+ }
73
+
74
+ export function isRegisteredThemeKey(value?: string | null, mode?: ThemeMode): value is string {
75
+ const currentMode = getThemeModeFromThemeKey(value);
76
+ if (!value || !currentMode) return false;
77
+ return mode ? currentMode === mode : true;
78
+ }
@@ -108,7 +108,15 @@ export type LayoutAttribute = {
108
108
  showEditFormButton?: boolean;
109
109
  showAddFormButton?: boolean;
110
110
  showDeleteFormButton?: boolean;
111
+ action?: string;
112
+ actionInContextMenu?: boolean;
113
+ openInPopup?: boolean;
114
+ popupWidth?: string;
115
+ closable?: boolean;
116
+ roles?: string[];
117
+ env?: string[] | string;
111
118
  formButtons?: any;
119
+ headerButtons?: any;
112
120
  rowButtons?: any;
113
121
  whereClause?: string;
114
122
  disabled?: boolean;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@solidxai/core-ui",
3
- "version": "0.1.14-beta.4",
3
+ "version": "0.1.14-beta.9",
4
4
  "scripts": {
5
5
  "build:tailwind": "tailwindcss -i ./src/resources/solid-tailwind.css -o ./src/resources/solid-tailwind-generated.css -c ./tailwind.config.js --minify",
6
6
  "prebuild": "npm run build:tailwind && npm run copy-resources && npm run copy-styles",