@solidxai/core-ui 0.1.13-beta.4 → 0.1.13-beta.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/auth/AuthTabs.d.ts.map +1 -1
- package/dist/components/auth/AuthTabs.js +1 -1
- package/dist/components/auth/AuthTabs.js.map +1 -1
- package/dist/components/auth/AuthTabs.tsx +1 -0
- package/dist/components/auth/SolidChangeForcePassword.d.ts.map +1 -1
- package/dist/components/auth/SolidChangeForcePassword.js +2 -2
- package/dist/components/auth/SolidChangeForcePassword.js.map +1 -1
- package/dist/components/auth/SolidChangeForcePassword.tsx +9 -8
- package/dist/components/common/SettingsComponent.d.ts.map +1 -1
- package/dist/components/common/SettingsComponent.js +1 -1
- package/dist/components/common/SettingsComponent.js.map +1 -1
- package/dist/components/common/SettingsComponent.tsx +1 -0
- package/dist/components/common/SolidFieldTooltip.d.ts.map +1 -1
- package/dist/components/common/SolidFieldTooltip.js +1 -33
- package/dist/components/common/SolidFieldTooltip.js.map +1 -1
- package/dist/components/common/SolidFieldTooltip.tsx +8 -64
- package/dist/components/common/SolidMaterialSymbol.d.ts +1 -1
- package/dist/components/common/SolidMaterialSymbol.d.ts.map +1 -1
- package/dist/components/common/SolidMaterialSymbol.js +6 -37
- package/dist/components/common/SolidMaterialSymbol.js.map +1 -1
- package/dist/components/common/SolidMaterialSymbol.tsx +6 -54
- package/dist/components/common/SolidSettings/LlmSettings/AiModelConfigTab.d.ts.map +1 -1
- package/dist/components/common/SolidSettings/LlmSettings/AiModelConfigTab.js +2 -2
- package/dist/components/common/SolidSettings/LlmSettings/AiModelConfigTab.js.map +1 -1
- package/dist/components/common/SolidSettings/LlmSettings/AiModelConfigTab.tsx +2 -0
- package/dist/components/core/card/CardItem.d.ts.map +1 -1
- package/dist/components/core/card/CardItem.js +1 -1
- package/dist/components/core/card/CardItem.js.map +1 -1
- package/dist/components/core/card/CardItem.tsx +16 -14
- package/dist/components/core/card/SolidCardView.d.ts.map +1 -1
- package/dist/components/core/card/SolidCardView.js +69 -40
- package/dist/components/core/card/SolidCardView.js.map +1 -1
- package/dist/components/core/card/SolidCardView.tsx +55 -24
- package/dist/components/core/common/SolidAccountSettings/SolidAccountSettings.module.css +99 -0
- package/dist/components/core/common/SolidAccountSettings/SolidVersionInfo.d.ts.map +1 -1
- package/dist/components/core/common/SolidAccountSettings/SolidVersionInfo.js +76 -5
- package/dist/components/core/common/SolidAccountSettings/SolidVersionInfo.js.map +1 -1
- package/dist/components/core/common/SolidAccountSettings/SolidVersionInfo.tsx +39 -4
- package/dist/components/core/common/SolidGlobalSearchElement.d.ts.map +1 -1
- package/dist/components/core/common/SolidGlobalSearchElement.js +172 -124
- package/dist/components/core/common/SolidGlobalSearchElement.js.map +1 -1
- package/dist/components/core/common/SolidGlobalSearchElement.tsx +73 -84
- package/dist/components/core/common/globalSearchPersistence.d.ts +3 -0
- package/dist/components/core/common/globalSearchPersistence.d.ts.map +1 -1
- package/dist/components/core/common/globalSearchPersistence.js +33 -24
- package/dist/components/core/common/globalSearchPersistence.js.map +1 -1
- package/dist/components/core/common/globalSearchPersistence.ts +34 -27
- package/dist/components/core/filter/fields/SolidMediaMultipleField.js +2 -2
- package/dist/components/core/filter/fields/SolidMediaMultipleField.js.map +1 -1
- package/dist/components/core/filter/fields/SolidMediaMultipleField.tsx +2 -2
- package/dist/components/core/filter/fields/SolidMediaSingleField.js +2 -2
- package/dist/components/core/filter/fields/SolidMediaSingleField.js.map +1 -1
- package/dist/components/core/filter/fields/SolidMediaSingleField.tsx +2 -2
- package/dist/components/core/filter/fields/SolidShortTextField.js +2 -2
- package/dist/components/core/filter/fields/SolidShortTextField.js.map +1 -1
- package/dist/components/core/filter/fields/SolidShortTextField.tsx +2 -2
- package/dist/components/core/kanban/KanbanCard.d.ts.map +1 -1
- package/dist/components/core/kanban/KanbanCard.js +1 -1
- package/dist/components/core/kanban/KanbanCard.js.map +1 -1
- package/dist/components/core/kanban/KanbanCard.tsx +18 -16
- package/dist/components/core/kanban/SolidKanbanView.d.ts.map +1 -1
- package/dist/components/core/kanban/SolidKanbanView.js +67 -48
- package/dist/components/core/kanban/SolidKanbanView.js.map +1 -1
- package/dist/components/core/kanban/SolidKanbanView.tsx +51 -11
- package/dist/components/core/kanban/SolidKanbanViewConfigure.d.ts +1 -1
- package/dist/components/core/kanban/SolidKanbanViewConfigure.d.ts.map +1 -1
- package/dist/components/core/kanban/SolidKanbanViewConfigure.js +11 -2
- package/dist/components/core/kanban/SolidKanbanViewConfigure.js.map +1 -1
- package/dist/components/core/kanban/SolidKanbanViewConfigure.tsx +35 -0
- package/dist/components/core/list/SolidListView.d.ts.map +1 -1
- package/dist/components/core/list/SolidListView.js +6 -2
- package/dist/components/core/list/SolidListView.js.map +1 -1
- package/dist/components/core/list/SolidListView.tsx +7 -1
- package/dist/components/core/list/SolidListViewConfigure.d.ts.map +1 -1
- package/dist/components/core/list/SolidListViewConfigure.js +15 -11
- package/dist/components/core/list/SolidListViewConfigure.js.map +1 -1
- package/dist/components/core/list/SolidListViewConfigure.tsx +25 -6
- package/dist/components/core/list/SolidListViewHeaderContextMenuButton.d.ts +1 -1
- package/dist/components/core/list/SolidListViewHeaderContextMenuButton.d.ts.map +1 -1
- package/dist/components/core/list/SolidListViewHeaderContextMenuButton.js +3 -1
- package/dist/components/core/list/SolidListViewHeaderContextMenuButton.js.map +1 -1
- package/dist/components/core/list/SolidListViewHeaderContextMenuButton.tsx +3 -1
- package/dist/components/core/list/columns/SolidMediaMultipleColumn.d.ts.map +1 -1
- package/dist/components/core/list/columns/SolidMediaMultipleColumn.js +7 -0
- package/dist/components/core/list/columns/SolidMediaMultipleColumn.js.map +1 -1
- package/dist/components/core/list/columns/SolidMediaMultipleColumn.tsx +5 -0
- package/dist/components/core/list/columns/SolidMediaSingleColumn.d.ts.map +1 -1
- package/dist/components/core/list/columns/SolidMediaSingleColumn.js +3 -0
- package/dist/components/core/list/columns/SolidMediaSingleColumn.js.map +1 -1
- package/dist/components/core/list/columns/SolidMediaSingleColumn.tsx +2 -0
- package/dist/components/core/list/widgets/SolidShortTextFieldImageRenderModeWidget.d.ts.map +1 -1
- package/dist/components/core/list/widgets/SolidShortTextFieldImageRenderModeWidget.js +3 -0
- package/dist/components/core/list/widgets/SolidShortTextFieldImageRenderModeWidget.js.map +1 -1
- package/dist/components/core/list/widgets/SolidShortTextFieldImageRenderModeWidget.tsx +2 -0
- package/dist/components/core/model/CreateModel.css +10 -0
- package/dist/components/core/model/FieldMetaDataForm.css +10 -0
- package/dist/components/core/model/FieldMetaDataForm.js +8 -8
- package/dist/components/core/model/FieldMetaDataForm.js.map +1 -1
- package/dist/components/core/model/FieldMetaDataForm.tsx +13 -13
- package/dist/components/core/module/ModuleMetadataExplorer.css +23 -0
- package/dist/components/core/module/ModuleMetadataExplorer.d.ts.map +1 -1
- package/dist/components/core/module/ModuleMetadataExplorer.js +1 -1
- package/dist/components/core/module/ModuleMetadataExplorer.js.map +1 -1
- package/dist/components/core/module/ModuleMetadataExplorer.tsx +9 -0
- package/dist/components/core/tree/SolidTreeView.d.ts.map +1 -1
- package/dist/components/core/tree/SolidTreeView.js +249 -138
- package/dist/components/core/tree/SolidTreeView.js.map +1 -1
- package/dist/components/core/tree/SolidTreeView.tsx +220 -92
- package/dist/components/core/users/ApiKeysTab/GenerateApiKeyModal.d.ts.map +1 -1
- package/dist/components/core/users/ApiKeysTab/GenerateApiKeyModal.js +1 -1
- package/dist/components/core/users/ApiKeysTab/GenerateApiKeyModal.js.map +1 -1
- package/dist/components/core/users/ApiKeysTab/GenerateApiKeyModal.tsx +1 -0
- package/dist/components/layout/AdminHeaderActions.js +6 -13
- package/dist/components/layout/AdminHeaderActions.js.map +1 -1
- package/dist/components/layout/AdminHeaderActions.tsx +11 -11
- package/dist/components/layout/AdminLayout.d.ts.map +1 -1
- package/dist/components/layout/AdminLayout.js +2 -2
- package/dist/components/layout/AdminLayout.js.map +1 -1
- package/dist/components/layout/AdminLayout.tsx +5 -4
- package/dist/components/layout/AppSidebar.d.ts.map +1 -1
- package/dist/components/layout/AppSidebar.js +17 -2
- package/dist/components/layout/AppSidebar.js.map +1 -1
- package/dist/components/layout/AppSidebar.tsx +21 -2
- package/dist/components/shad-cn-ui/SolidDatePicker.d.ts +1 -1
- package/dist/components/shad-cn-ui/SolidDatePicker.d.ts.map +1 -1
- package/dist/components/shad-cn-ui/SolidDatePicker.js +35 -3
- package/dist/components/shad-cn-ui/SolidDatePicker.js.map +1 -1
- package/dist/components/shad-cn-ui/SolidDatePicker.tsx +84 -0
- package/dist/components/shad-cn-ui/SolidTooltip.d.ts.map +1 -1
- package/dist/components/shad-cn-ui/SolidTooltip.js +55 -2
- package/dist/components/shad-cn-ui/SolidTooltip.js.map +1 -1
- package/dist/components/shad-cn-ui/SolidTooltip.tsx +95 -1
- package/dist/resources/globals.css +109 -1
- package/dist/resources/solid-custom.css +53 -3
- package/dist/resources/solid-tailwind-generated.css +1 -1
- package/dist/routes/pages/admin/core/DashboardPage.d.ts.map +1 -1
- package/dist/routes/pages/admin/core/DashboardPage.js +2 -2
- package/dist/routes/pages/admin/core/DashboardPage.js.map +1 -1
- package/dist/routes/pages/admin/core/DashboardPage.tsx +2 -0
- package/dist/routes/pages/admin/core/DatasourceIntrospectionPage.d.ts.map +1 -1
- package/dist/routes/pages/admin/core/DatasourceIntrospectionPage.js +1 -1
- package/dist/routes/pages/admin/core/DatasourceIntrospectionPage.js.map +1 -1
- package/dist/routes/pages/admin/core/DatasourceIntrospectionPage.tsx +1 -0
- package/dist/types/css-modules.d.ts +2 -0
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AuthTabs.d.ts","sourceRoot":"","sources":["../../../src/components/auth/AuthTabs.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,KAAK,GAAG,GAAG;IACT,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,KAAK,CAAC,SAAS,CAAC;CAC1B,CAAC;AAEF,KAAK,aAAa,GAAG;IACnB,IAAI,EAAE,GAAG,EAAE,CAAC;IACZ,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CACnC,CAAC;AAEF,eAAO,MAAM,QAAQ,oCAAqC,aAAa,
|
|
1
|
+
{"version":3,"file":"AuthTabs.d.ts","sourceRoot":"","sources":["../../../src/components/auth/AuthTabs.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,KAAK,GAAG,GAAG;IACT,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,KAAK,CAAC,SAAS,CAAC;CAC1B,CAAC;AAEF,KAAK,aAAa,GAAG;IACnB,IAAI,EAAE,GAAG,EAAE,CAAC;IACZ,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CACnC,CAAC;AAEF,eAAO,MAAM,QAAQ,oCAAqC,aAAa,mDAsBtE,CAAC"}
|
|
@@ -10,7 +10,7 @@ export var AuthTabs = function (_a) {
|
|
|
10
10
|
value: tab.key,
|
|
11
11
|
label: tab.label,
|
|
12
12
|
content: tab.content,
|
|
13
|
-
}); }), value: activeValue, onValueChange: function (value) {
|
|
13
|
+
}); }), value: activeValue, listClassName: "solid-auth-tablist", onValueChange: function (value) {
|
|
14
14
|
var nextIndex = tabs.findIndex(function (tab) { return tab.key === value; });
|
|
15
15
|
if (nextIndex >= 0)
|
|
16
16
|
onChange(nextIndex);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AuthTabs.js","sourceRoot":"","sources":["../../../src/components/auth/AuthTabs.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAc9C,MAAM,CAAC,IAAM,QAAQ,GAAG,UAAC,EAA8C;;QAA5C,IAAI,UAAA,EAAE,WAAW,iBAAA,EAAE,QAAQ,cAAA;IACpD,IAAI,CAAC,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IAE9B,IAAM,WAAW,GAAG,CAAA,MAAA,IAAI,CAAC,WAAW,CAAC,0CAAE,GAAG,KAAI,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IAE1D,OAAO,CACL,cAAK,SAAS,EAAC,iBAAiB,YAC9B,KAAC,aAAa,IACZ,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,UAAC,GAAG,IAAK,OAAA,CAAC;gBACvB,KAAK,EAAE,GAAG,CAAC,GAAG;gBACd,KAAK,EAAE,GAAG,CAAC,KAAK;gBAChB,OAAO,EAAE,GAAG,CAAC,OAAO;aACrB,CAAC,EAJsB,CAItB,CAAC,EACH,KAAK,EAAE,WAAW,EAClB,aAAa,EAAE,UAAC,KAAK;gBACnB,IAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,UAAC,GAAG,IAAK,OAAA,GAAG,CAAC,GAAG,KAAK,KAAK,EAAjB,CAAiB,CAAC,CAAC;gBAC7D,IAAI,SAAS,IAAI,CAAC;oBAAE,QAAQ,CAAC,SAAS,CAAC,CAAC;YAC1C,CAAC,GACD,GACE,CACP,CAAC;AACJ,CAAC,CAAC","sourcesContent":["import React from \"react\";\nimport { SolidTabGroup } from \"../shad-cn-ui\";\n\ntype Tab = {\n key: string;\n label: string;\n content: React.ReactNode;\n};\n\ntype AuthTabsProps = {\n tabs: Tab[];\n activeIndex: number;\n onChange: (index: number) => void;\n};\n\nexport const AuthTabs = ({ tabs, activeIndex, onChange }: AuthTabsProps) => {\n if (!tabs.length) return null;\n\n const activeValue = tabs[activeIndex]?.key || tabs[0].key;\n\n return (\n <div className=\"solid-auth-tabs\">\n <SolidTabGroup\n tabs={tabs.map((tab) => ({\n value: tab.key,\n label: tab.label,\n content: tab.content,\n }))}\n value={activeValue}\n onValueChange={(value) => {\n const nextIndex = tabs.findIndex((tab) => tab.key === value);\n if (nextIndex >= 0) onChange(nextIndex);\n }}\n />\n </div>\n );\n};\n"]}
|
|
1
|
+
{"version":3,"file":"AuthTabs.js","sourceRoot":"","sources":["../../../src/components/auth/AuthTabs.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAc9C,MAAM,CAAC,IAAM,QAAQ,GAAG,UAAC,EAA8C;;QAA5C,IAAI,UAAA,EAAE,WAAW,iBAAA,EAAE,QAAQ,cAAA;IACpD,IAAI,CAAC,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IAE9B,IAAM,WAAW,GAAG,CAAA,MAAA,IAAI,CAAC,WAAW,CAAC,0CAAE,GAAG,KAAI,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IAE1D,OAAO,CACL,cAAK,SAAS,EAAC,iBAAiB,YAC9B,KAAC,aAAa,IACZ,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,UAAC,GAAG,IAAK,OAAA,CAAC;gBACvB,KAAK,EAAE,GAAG,CAAC,GAAG;gBACd,KAAK,EAAE,GAAG,CAAC,KAAK;gBAChB,OAAO,EAAE,GAAG,CAAC,OAAO;aACrB,CAAC,EAJsB,CAItB,CAAC,EACH,KAAK,EAAE,WAAW,EAClB,aAAa,EAAC,oBAAoB,EAClC,aAAa,EAAE,UAAC,KAAK;gBACnB,IAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,UAAC,GAAG,IAAK,OAAA,GAAG,CAAC,GAAG,KAAK,KAAK,EAAjB,CAAiB,CAAC,CAAC;gBAC7D,IAAI,SAAS,IAAI,CAAC;oBAAE,QAAQ,CAAC,SAAS,CAAC,CAAC;YAC1C,CAAC,GACD,GACE,CACP,CAAC;AACJ,CAAC,CAAC","sourcesContent":["import React from \"react\";\nimport { SolidTabGroup } from \"../shad-cn-ui\";\n\ntype Tab = {\n key: string;\n label: string;\n content: React.ReactNode;\n};\n\ntype AuthTabsProps = {\n tabs: Tab[];\n activeIndex: number;\n onChange: (index: number) => void;\n};\n\nexport const AuthTabs = ({ tabs, activeIndex, onChange }: AuthTabsProps) => {\n if (!tabs.length) return null;\n\n const activeValue = tabs[activeIndex]?.key || tabs[0].key;\n\n return (\n <div className=\"solid-auth-tabs\">\n <SolidTabGroup\n tabs={tabs.map((tab) => ({\n value: tab.key,\n label: tab.label,\n content: tab.content,\n }))}\n value={activeValue}\n listClassName=\"solid-auth-tablist\"\n onValueChange={(value) => {\n const nextIndex = tabs.findIndex((tab) => tab.key === value);\n if (nextIndex >= 0) onChange(nextIndex);\n }}\n />\n </div>\n );\n};\n"]}
|
|
@@ -27,6 +27,7 @@ export const AuthTabs = ({ tabs, activeIndex, onChange }: AuthTabsProps) => {
|
|
|
27
27
|
content: tab.content,
|
|
28
28
|
}))}
|
|
29
29
|
value={activeValue}
|
|
30
|
+
listClassName="solid-auth-tablist"
|
|
30
31
|
onValueChange={(value) => {
|
|
31
32
|
const nextIndex = tabs.findIndex((tab) => tab.key === value);
|
|
32
33
|
if (nextIndex >= 0) onChange(nextIndex);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SolidChangeForcePassword.d.ts","sourceRoot":"","sources":["../../../src/components/auth/SolidChangeForcePassword.tsx"],"names":[],"mappings":"AAWA,QAAA,MAAM,wBAAwB,+
|
|
1
|
+
{"version":3,"file":"SolidChangeForcePassword.d.ts","sourceRoot":"","sources":["../../../src/components/auth/SolidChangeForcePassword.tsx"],"names":[],"mappings":"AAWA,QAAA,MAAM,wBAAwB,+CA6M7B,CAAA;AACD,eAAe,wBAAwB,CAAA"}
|
|
@@ -150,9 +150,9 @@ var SolidChangeForcePassword = function () {
|
|
|
150
150
|
policy: "One special character(!, @, #, $)"
|
|
151
151
|
},
|
|
152
152
|
];
|
|
153
|
-
return (_jsx(_Fragment, { children: _jsxs("form", { onSubmit: formik.handleSubmit, className:
|
|
153
|
+
return (_jsx(_Fragment, { children: _jsxs("form", { onSubmit: formik.handleSubmit, className: "flex flex-col gap-5", children: [_jsxs("div", { className: "flex flex-col gap-2", children: [_jsx("label", { htmlFor: "currentPassword", className: "solid-auth-input-label", children: "Current Password" }), _jsx(SolidPasswordInput, { id: "currentPassword", name: "currentPassword", value: formik.values.currentPassword, onChange: formik.handleChange, onBlur: formik.handleBlur, toggle: true, "aria-invalid": !!formik.errors.currentPassword, className: "w-full" }), isFormFieldValid(formik, "currentPassword") && (_jsx(SolidMessage, { className: "text-red-500 text-sm", severity: "error", text: (_f = (_e = formik === null || formik === void 0 ? void 0 : formik.errors) === null || _e === void 0 ? void 0 : _e.currentPassword) === null || _f === void 0 ? void 0 : _f.toString() }))] }), _jsxs("div", { className: "flex flex-col gap-2", children: [_jsx("label", { htmlFor: "newPassword", className: "solid-auth-input-label", children: "New Password" }), _jsx(SolidPasswordInput, { id: "newPassword", name: "newPassword", value: formik.values.newPassword, onChange: formik.handleChange, onBlur: formik.handleBlur, toggle: true, "aria-invalid": !!formik.errors.newPassword, className: "w-full" }), isFormFieldValid(formik, "newPassword") && (_jsx(SolidMessage, { className: "text-red-500 text-sm", severity: "error", text: (_h = (_g = formik === null || formik === void 0 ? void 0 : formik.errors) === null || _g === void 0 ? void 0 : _g.newPassword) === null || _h === void 0 ? void 0 : _h.toString() }))] }), _jsxs("div", { className: "flex flex-col gap-2", children: [_jsx("label", { htmlFor: "confirmPassword", className: "solid-auth-input-label", children: "Confirm Password" }), _jsx(SolidPasswordInput, { id: "confirmPassword", name: "confirmPassword", value: formik.values.confirmPassword, onChange: formik.handleChange, onBlur: formik.handleBlur, toggle: true, "aria-invalid": !!formik.errors.confirmPassword, className: "w-full" }), isFormFieldValid(formik, "confirmPassword") && (_jsx(SolidMessage, { className: "text-red-500 text-sm", severity: "error", text: (_k = (_j = formik === null || formik === void 0 ? void 0 : formik.errors) === null || _j === void 0 ? void 0 : _j.confirmPassword) === null || _k === void 0 ? void 0 : _k.toString() }))] }), envPasswordHelperText && (_jsx("div", { className: "mt-6", children: _jsx("div", { className: "flex flex-wrap -mx-2 gap-y-2", children: envPasswordHelperText
|
|
154
154
|
.split('\\n')
|
|
155
|
-
.map(function (text, idx) { return (_jsx("div", { className: "w-1/2 px-2 pt-0", children: _jsxs("div", { className: 'flex gap-2', children: [_jsx("span", { children: "\u2022" }), _jsx("span", { children: text })] }) }, idx)); }) }) })), _jsx("div", { className: "
|
|
155
|
+
.map(function (text, idx) { return (_jsx("div", { className: "w-1/2 px-2 pt-0", children: _jsxs("div", { className: 'flex gap-2', children: [_jsx("span", { children: "\u2022" }), _jsx("span", { children: text })] }) }, idx)); }) }) })), _jsx("div", { className: "pt-2", children: _jsx(SolidButton, { type: "submit", fullWidth: true, className: "font-light auth-submit-button", label: "Change Password", disabled: formik.isSubmitting, loading: formik.isSubmitting }) })] }) }));
|
|
156
156
|
};
|
|
157
157
|
export default SolidChangeForcePassword;
|
|
158
158
|
//# sourceMappingURL=SolidChangeForcePassword.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SolidChangeForcePassword.js","sourceRoot":"","sources":["../../../src/components/auth/SolidChangeForcePassword.tsx"],"names":[],"mappings":"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","sourcesContent":["import { ERROR_MESSAGES } from '../../constants/error-messages';\nimport { useChangePasswordMutation } from '../../redux/api/authApi';\nimport { useFormik } from 'formik';\nimport { signOut } from \"../../adapters/auth/index\";\nimport { useSession } from \"../../hooks/useSession\";\nimport { useDispatch } from 'react-redux';\nimport * as Yup from 'yup';\nimport { env } from \"../../adapters/env\";\nimport { showToast } from \"../../redux/features/toastSlice\";\nimport { SolidButton, SolidMessage, SolidPasswordInput } from \"../shad-cn-ui\";\n\nconst SolidChangeForcePassword = () => {\n const dispatch = useDispatch();\n const [changePassword] = useChangePasswordMutation();\n\n const session: any = useSession();\n\n const envPasswordRegex = env(\"NEXT_PUBLIC_PASSWORD_REGEX\");\n const envPasswordHelperText = env(\"NEXT_PUBLIC_PASSWORD_COMPLEXITY_DESC\");\n let passwordRegex: RegExp | null = null;\n try {\n if (envPasswordRegex) {\n const unescaped = JSON.parse(`\"${envPasswordRegex}\"`);\n passwordRegex = new RegExp(unescaped);\n }\n } catch (error) {\n console.error(ERROR_MESSAGES.INVALID_PASSWORD_REGX, error);\n }\n\n const newPasswordValidation = passwordRegex\n ? Yup.string()\n .matches(passwordRegex, ERROR_MESSAGES.PASSWORD_DO_NOT_MEET)\n .required(ERROR_MESSAGES.FIELD_REUQIRED('New password'))\n : Yup.string().min(6, ERROR_MESSAGES.PASSWORD_CHARACTER(6))\n .required(ERROR_MESSAGES.FIELD_REUQIRED('New password'));\n\n const validationSchema = Yup.object({\n email: Yup.string().email(ERROR_MESSAGES.FIELD_INAVLID_FORMAT('email')).required(ERROR_MESSAGES.FIELD_REUQIRED('Email')),\n currentPassword: Yup.string().min(6, ERROR_MESSAGES.PASSWORD_CHARACTER(6)).required(ERROR_MESSAGES.FIELD_REUQIRED('Current password')),\n newPassword: newPasswordValidation,\n confirmPassword: Yup.string()\n .oneOf([Yup.ref('newPassword')], ERROR_MESSAGES.MUST_MATCH)\n .required(ERROR_MESSAGES.FIELD_REUQIRED('Confirm password')),\n id: Yup.number().required(ERROR_MESSAGES.FIELD_REUQIRED('User ID')),\n });\n\n const formik = useFormik({\n initialValues: {\n email: session?.data?.user?.email,\n currentPassword: \"\",\n newPassword: \"\",\n confirmPassword: \"\",\n id: session?.data?.user?.id,\n },\n validationSchema,\n onSubmit: async (values, { setErrors }) => {\n try {\n const payload = {\n id: values.id,\n email: session?.data?.user?.email,\n currentPassword: values.currentPassword,\n newPassword: values.newPassword,\n };\n\n // Call the mutation and handle the response\n const response = await changePassword(payload).unwrap(); // Await the API call and unwrap to handle errors.\n if (response?.error) {\n dispatch(showToast({ severity: \"error\", summary: ERROR_MESSAGES.ERROR, detail: response.error }))\n setErrors({\n currentPassword: ERROR_MESSAGES.INCORRECT_CURRENT,\n newPassword: ERROR_MESSAGES.MUST_MATCH,\n confirmPassword: ERROR_MESSAGES.MUST_MATCH,\n })\n } else {\n dispatch(showToast({ severity: \"success\", summary: ERROR_MESSAGES.FORCE_PASSWORD_CHANGE, detail: ERROR_MESSAGES.PASSWORD_CHANGE }));\n signOut({ callbackUrl: \"/auth/login\" })\n }\n } catch (err: any) {\n dispatch(showToast({ severity: \"error\", summary: ERROR_MESSAGES.LOGIN_ERROR, detail: err?.data?.message }));\n // setErrors({\n // currentPassword: \"Incorrect Current Password\",\n // })\n }\n },\n });\n const isFormFieldValid = (formik: any, fieldName: string) =>\n formik.touched[fieldName] && formik.errors[fieldName];\n\n const passwordPolicies = [\n {\n policy: \"8 characters minimum\"\n },\n {\n policy: \"No Spaces Allowed\"\n },\n {\n policy: \"One uppercase letter\"\n },\n {\n policy: \"One lowercase letter\"\n },\n {\n policy: \"One numeric digit\"\n },\n {\n policy: \"One special character(!, @, #, $)\"\n },\n ]\n\n return (\n <>\n <form onSubmit={formik.handleSubmit} className='flex flex-col gap-4 auth-form'>\n <div className=\"flex flex-col gap-2 mt-2\" style={{}}>\n <label htmlFor=\"currentPassword\" className=\"solid-auth-input-label\">Current Password</label>\n <SolidPasswordInput\n id=\"currentPassword\"\n name=\"currentPassword\"\n value={formik.values.currentPassword}\n onChange={formik.handleChange}\n onBlur={formik.handleBlur}\n toggle\n aria-invalid={!!formik.errors.currentPassword}\n className=\"w-full\"\n />\n {isFormFieldValid(formik, \"currentPassword\") && (\n <SolidMessage\n className=\"text-red-500 text-sm\"\n severity=\"error\"\n text={formik?.errors?.currentPassword?.toString()}\n />\n )}\n </div>\n <div className=\"flex flex-col gap-2 mt-1 sm:mt-2 md:mt-3 lg:mt-4\" style={{}}>\n <label htmlFor=\"password\" className=\"solid-auth-input-label\">New Password</label>\n <SolidPasswordInput\n id=\"newPassword\"\n name=\"newPassword\"\n value={formik.values.newPassword}\n onChange={formik.handleChange}\n onBlur={formik.handleBlur}\n toggle\n aria-invalid={!!formik.errors.newPassword}\n className=\"w-full\"\n />\n {isFormFieldValid(formik, \"newPassword\") && (\n <SolidMessage\n className=\"text-red-500 text-sm\"\n severity=\"error\"\n text={formik?.errors?.newPassword?.toString()}\n />\n )}\n </div>\n <div className=\"flex flex-col gap-2 mt-1 sm:mt-2 md:mt-3 lg:mt-4\" style={{}}>\n <label htmlFor=\"password\" className=\"solid-auth-input-label\">Confirm Password</label>\n <SolidPasswordInput\n id=\"confirmPassword\"\n name=\"confirmPassword\"\n value={formik.values.confirmPassword}\n onChange={formik.handleChange}\n onBlur={formik.handleBlur}\n toggle\n aria-invalid={!!formik.errors.confirmPassword}\n className=\"w-full\"\n />\n {isFormFieldValid(formik, \"confirmPassword\") && (\n <SolidMessage\n className=\"text-red-500 text-sm\"\n severity=\"error\"\n text={formik?.errors?.confirmPassword?.toString()}\n />\n )}\n </div>\n {/* <div className='mt-6'>\n <div className='flex flex-wrap -mx-2 gap-y-2'>\n {passwordPolicies.map((policy, index) => {\n return (\n <div key={index} className='w-1/2 px-2'>\n <p className=\"solid-auth-input-label flex items-center gap-2\">\n <div className='flex items-center justify-center' style={{ height: 14, width: 14, borderRadius: '50%', backgroundColor: '#A4A4A4' }}>\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\">\n <path d=\"M4.86813 8.72999L2.28979 6.15166L2.91396 5.52749L4.86813 7.48166L9.08563 3.26416L9.7098 3.88833L4.86813 8.72999Z\" fill=\"#E8EAED\" />\n </svg>\n </div>\n {policy.policy}\n </p>\n </div>\n )\n })}\n </div>\n </div> */}\n {envPasswordHelperText && (\n <div className=\"mt-6\">\n <div className=\"flex flex-wrap -mx-2 gap-y-2\">\n {envPasswordHelperText\n .split('\\\\n')\n .map((text, idx) => (\n <div key={idx} className=\"w-1/2 px-2 pt-0\">\n <div className='flex gap-2'><span>•</span><span>{text}</span></div>\n </div>\n ))}\n </div>\n </div>\n )}\n <div className=\"mt-6\">\n <SolidButton\n type=\"submit\"\n className=\"w-full font-light auth-submit-button\"\n label=\"Change Password\"\n disabled={formik.isSubmitting}\n loading={formik.isSubmitting}\n />\n </div>\n </form>\n </>\n )\n}\nexport default SolidChangeForcePassword\n"]}
|
|
1
|
+
{"version":3,"file":"SolidChangeForcePassword.js","sourceRoot":"","sources":["../../../src/components/auth/SolidChangeForcePassword.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAChE,OAAO,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AACpE,OAAO,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACnC,OAAO,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,KAAK,GAAG,MAAM,KAAK,CAAC;AAC3B,OAAO,EAAE,GAAG,EAAE,MAAM,oBAAoB,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,iCAAiC,CAAC;AAC5D,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAE9E,IAAM,wBAAwB,GAAG;;IAC7B,IAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;IACxB,IAAA,cAAc,GAAI,yBAAyB,EAAE,GAA/B,CAAgC;IAErD,IAAM,OAAO,GAAQ,UAAU,EAAE,CAAC;IAElC,IAAM,gBAAgB,GAAG,GAAG,CAAC,4BAA4B,CAAC,CAAC;IAC3D,IAAM,qBAAqB,GAAG,GAAG,CAAC,sCAAsC,CAAC,CAAC;IAC1E,IAAI,aAAa,GAAkB,IAAI,CAAC;IACxC,IAAI;QACA,IAAI,gBAAgB,EAAE;YAClB,IAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,YAAI,gBAAgB,OAAG,CAAC,CAAC;YACtD,aAAa,GAAG,IAAI,MAAM,CAAC,SAAS,CAAC,CAAC;SACzC;KACJ;IAAC,OAAO,KAAK,EAAE;QACZ,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC,qBAAqB,EAAE,KAAK,CAAC,CAAC;KAC9D;IAED,IAAM,qBAAqB,GAAG,aAAa;QACvC,CAAC,CAAC,GAAG,CAAC,MAAM,EAAE;aACT,OAAO,CAAC,aAAa,EAAE,cAAc,CAAC,oBAAoB,CAAC;aAC3D,QAAQ,CAAC,cAAc,CAAC,cAAc,CAAC,cAAc,CAAC,CAAC;QAC5D,CAAC,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,cAAc,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC;aACtD,QAAQ,CAAC,cAAc,CAAC,cAAc,CAAC,cAAc,CAAC,CAAC,CAAC;IAEjE,IAAM,gBAAgB,GAAG,GAAG,CAAC,MAAM,CAAC;QAChC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,cAAc,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,cAAc,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;QACxH,eAAe,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,cAAc,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,cAAc,CAAC,cAAc,CAAC,kBAAkB,CAAC,CAAC;QACtI,WAAW,EAAE,qBAAqB;QAClC,eAAe,EAAE,GAAG,CAAC,MAAM,EAAE;aACxB,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,EAAE,cAAc,CAAC,UAAU,CAAC;aAC1D,QAAQ,CAAC,cAAc,CAAC,cAAc,CAAC,kBAAkB,CAAC,CAAC;QAChE,EAAE,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;KACtE,CAAC,CAAC;IAEH,IAAM,MAAM,GAAG,SAAS,CAAC;QACrB,aAAa,EAAE;YACX,KAAK,EAAE,MAAA,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,IAAI,0CAAE,IAAI,0CAAE,KAAK;YACjC,eAAe,EAAE,EAAE;YACnB,WAAW,EAAE,EAAE;YACf,eAAe,EAAE,EAAE;YACnB,EAAE,EAAE,MAAA,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,IAAI,0CAAE,IAAI,0CAAE,EAAE;SAC9B;QACD,gBAAgB,kBAAA;QAChB,QAAQ,EAAE,UAAO,MAAM,EAAE,EAAa;gBAAX,SAAS,eAAA;;;;;;;;4BAEtB,OAAO,GAAG;gCACZ,EAAE,EAAE,MAAM,CAAC,EAAE;gCACb,KAAK,EAAE,MAAA,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,IAAI,0CAAE,IAAI,0CAAE,KAAK;gCACjC,eAAe,EAAE,MAAM,CAAC,eAAe;gCACvC,WAAW,EAAE,MAAM,CAAC,WAAW;6BAClC,CAAC;4BAGe,qBAAM,cAAc,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAA;;4BAAjD,QAAQ,GAAG,SAAsC;4BACvD,IAAI,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,KAAK,EAAE;gCACjB,QAAQ,CAAC,SAAS,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC,CAAA;gCACjG,SAAS,CAAC;oCACN,eAAe,EAAE,cAAc,CAAC,iBAAiB;oCACjD,WAAW,EAAE,cAAc,CAAC,UAAU;oCACtC,eAAe,EAAE,cAAc,CAAC,UAAU;iCAC7C,CAAC,CAAA;6BACL;iCAAM;gCACH,QAAQ,CAAC,SAAS,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,cAAc,CAAC,qBAAqB,EAAE,MAAM,EAAE,cAAc,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC;gCACpI,OAAO,CAAC,EAAE,WAAW,EAAE,aAAa,EAAE,CAAC,CAAA;6BAC1C;;;;4BAED,QAAQ,CAAC,SAAS,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,cAAc,CAAC,WAAW,EAAE,MAAM,EAAE,MAAA,KAAG,aAAH,KAAG,uBAAH,KAAG,CAAE,IAAI,0CAAE,OAAO,EAAE,CAAC,CAAC,CAAC;;;;;;SAKnH;KACJ,CAAC,CAAC;IACH,IAAM,gBAAgB,GAAG,UAAC,MAAW,EAAE,SAAiB;QACpD,OAAA,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC;IAArD,CAAqD,CAAC;IAE1D,IAAM,gBAAgB,GAAG;QACrB;YACI,MAAM,EAAE,sBAAsB;SACjC;QACD;YACI,MAAM,EAAE,mBAAmB;SAC9B;QACD;YACI,MAAM,EAAE,sBAAsB;SACjC;QACD;YACI,MAAM,EAAE,sBAAsB;SACjC;QACD;YACI,MAAM,EAAE,mBAAmB;SAC9B;QACD;YACI,MAAM,EAAE,mCAAmC;SAC9C;KACJ,CAAA;IAED,OAAO,CACH,4BACI,gBAAM,QAAQ,EAAE,MAAM,CAAC,YAAY,EAAE,SAAS,EAAC,qBAAqB,aAChE,eAAK,SAAS,EAAC,qBAAqB,aAChC,gBAAO,OAAO,EAAC,iBAAiB,EAAC,SAAS,EAAC,wBAAwB,iCAAyB,EAC5F,KAAC,kBAAkB,IACf,EAAE,EAAC,iBAAiB,EACpB,IAAI,EAAC,iBAAiB,EACtB,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,eAAe,EACpC,QAAQ,EAAE,MAAM,CAAC,YAAY,EAC7B,MAAM,EAAE,MAAM,CAAC,UAAU,EACzB,MAAM,wBACQ,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,eAAe,EAC7C,SAAS,EAAC,QAAQ,GACpB,EACD,gBAAgB,CAAC,MAAM,EAAE,iBAAiB,CAAC,IAAI,CAC5C,KAAC,YAAY,IACT,SAAS,EAAC,sBAAsB,EAChC,QAAQ,EAAC,OAAO,EAChB,IAAI,EAAE,MAAA,MAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,MAAM,0CAAE,eAAe,0CAAE,QAAQ,EAAE,GACnD,CACL,IACC,EACN,eAAK,SAAS,EAAC,qBAAqB,aAChC,gBAAO,OAAO,EAAC,aAAa,EAAC,SAAS,EAAC,wBAAwB,6BAAqB,EACpF,KAAC,kBAAkB,IACf,EAAE,EAAC,aAAa,EAChB,IAAI,EAAC,aAAa,EAClB,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,WAAW,EAChC,QAAQ,EAAE,MAAM,CAAC,YAAY,EAC7B,MAAM,EAAE,MAAM,CAAC,UAAU,EACzB,MAAM,wBACQ,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,EACzC,SAAS,EAAC,QAAQ,GACpB,EACD,gBAAgB,CAAC,MAAM,EAAE,aAAa,CAAC,IAAI,CACxC,KAAC,YAAY,IACT,SAAS,EAAC,sBAAsB,EAChC,QAAQ,EAAC,OAAO,EAChB,IAAI,EAAE,MAAA,MAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,MAAM,0CAAE,WAAW,0CAAE,QAAQ,EAAE,GAC/C,CACL,IACC,EACN,eAAK,SAAS,EAAC,qBAAqB,aAChC,gBAAO,OAAO,EAAC,iBAAiB,EAAC,SAAS,EAAC,wBAAwB,iCAAyB,EAC5F,KAAC,kBAAkB,IACf,EAAE,EAAC,iBAAiB,EACpB,IAAI,EAAC,iBAAiB,EACtB,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,eAAe,EACpC,QAAQ,EAAE,MAAM,CAAC,YAAY,EAC7B,MAAM,EAAE,MAAM,CAAC,UAAU,EACzB,MAAM,wBACQ,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,eAAe,EAC7C,SAAS,EAAC,QAAQ,GACpB,EACD,gBAAgB,CAAC,MAAM,EAAE,iBAAiB,CAAC,IAAI,CAC5C,KAAC,YAAY,IACT,SAAS,EAAC,sBAAsB,EAChC,QAAQ,EAAC,OAAO,EAChB,IAAI,EAAE,MAAA,MAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,MAAM,0CAAE,eAAe,0CAAE,QAAQ,EAAE,GACnD,CACL,IACC,EAmBL,qBAAqB,IAAI,CACtB,cAAK,SAAS,EAAC,MAAM,YACjB,cAAK,SAAS,EAAC,8BAA8B,YACxC,qBAAqB;6BACjB,KAAK,CAAC,KAAK,CAAC;6BACZ,GAAG,CAAC,UAAC,IAAI,EAAE,GAAG,IAAK,OAAA,CAChB,cAAe,SAAS,EAAC,iBAAiB,YACtC,eAAK,SAAS,EAAC,YAAY,aAAC,oCAAc,EAAA,yBAAO,IAAI,GAAQ,IAAM,IAD7D,GAAG,CAEP,CACT,EAJmB,CAInB,CAAC,GACJ,GACJ,CACT,EACD,cAAK,SAAS,EAAC,MAAM,YACjB,KAAC,WAAW,IACR,IAAI,EAAC,QAAQ,EACb,SAAS,QACT,SAAS,EAAC,+BAA+B,EACzC,KAAK,EAAC,iBAAiB,EACvB,QAAQ,EAAE,MAAM,CAAC,YAAY,EAC7B,OAAO,EAAE,MAAM,CAAC,YAAY,GAC9B,GACA,IACH,GACR,CACN,CAAA;AACL,CAAC,CAAA;AACD,eAAe,wBAAwB,CAAA","sourcesContent":["import { ERROR_MESSAGES } from '../../constants/error-messages';\nimport { useChangePasswordMutation } from '../../redux/api/authApi';\nimport { useFormik } from 'formik';\nimport { signOut } from \"../../adapters/auth/index\";\nimport { useSession } from \"../../hooks/useSession\";\nimport { useDispatch } from 'react-redux';\nimport * as Yup from 'yup';\nimport { env } from \"../../adapters/env\";\nimport { showToast } from \"../../redux/features/toastSlice\";\nimport { SolidButton, SolidMessage, SolidPasswordInput } from \"../shad-cn-ui\";\n\nconst SolidChangeForcePassword = () => {\n const dispatch = useDispatch();\n const [changePassword] = useChangePasswordMutation();\n\n const session: any = useSession();\n\n const envPasswordRegex = env(\"NEXT_PUBLIC_PASSWORD_REGEX\");\n const envPasswordHelperText = env(\"NEXT_PUBLIC_PASSWORD_COMPLEXITY_DESC\");\n let passwordRegex: RegExp | null = null;\n try {\n if (envPasswordRegex) {\n const unescaped = JSON.parse(`\"${envPasswordRegex}\"`);\n passwordRegex = new RegExp(unescaped);\n }\n } catch (error) {\n console.error(ERROR_MESSAGES.INVALID_PASSWORD_REGX, error);\n }\n\n const newPasswordValidation = passwordRegex\n ? Yup.string()\n .matches(passwordRegex, ERROR_MESSAGES.PASSWORD_DO_NOT_MEET)\n .required(ERROR_MESSAGES.FIELD_REUQIRED('New password'))\n : Yup.string().min(6, ERROR_MESSAGES.PASSWORD_CHARACTER(6))\n .required(ERROR_MESSAGES.FIELD_REUQIRED('New password'));\n\n const validationSchema = Yup.object({\n email: Yup.string().email(ERROR_MESSAGES.FIELD_INAVLID_FORMAT('email')).required(ERROR_MESSAGES.FIELD_REUQIRED('Email')),\n currentPassword: Yup.string().min(6, ERROR_MESSAGES.PASSWORD_CHARACTER(6)).required(ERROR_MESSAGES.FIELD_REUQIRED('Current password')),\n newPassword: newPasswordValidation,\n confirmPassword: Yup.string()\n .oneOf([Yup.ref('newPassword')], ERROR_MESSAGES.MUST_MATCH)\n .required(ERROR_MESSAGES.FIELD_REUQIRED('Confirm password')),\n id: Yup.number().required(ERROR_MESSAGES.FIELD_REUQIRED('User ID')),\n });\n\n const formik = useFormik({\n initialValues: {\n email: session?.data?.user?.email,\n currentPassword: \"\",\n newPassword: \"\",\n confirmPassword: \"\",\n id: session?.data?.user?.id,\n },\n validationSchema,\n onSubmit: async (values, { setErrors }) => {\n try {\n const payload = {\n id: values.id,\n email: session?.data?.user?.email,\n currentPassword: values.currentPassword,\n newPassword: values.newPassword,\n };\n\n // Call the mutation and handle the response\n const response = await changePassword(payload).unwrap(); // Await the API call and unwrap to handle errors.\n if (response?.error) {\n dispatch(showToast({ severity: \"error\", summary: ERROR_MESSAGES.ERROR, detail: response.error }))\n setErrors({\n currentPassword: ERROR_MESSAGES.INCORRECT_CURRENT,\n newPassword: ERROR_MESSAGES.MUST_MATCH,\n confirmPassword: ERROR_MESSAGES.MUST_MATCH,\n })\n } else {\n dispatch(showToast({ severity: \"success\", summary: ERROR_MESSAGES.FORCE_PASSWORD_CHANGE, detail: ERROR_MESSAGES.PASSWORD_CHANGE }));\n signOut({ callbackUrl: \"/auth/login\" })\n }\n } catch (err: any) {\n dispatch(showToast({ severity: \"error\", summary: ERROR_MESSAGES.LOGIN_ERROR, detail: err?.data?.message }));\n // setErrors({\n // currentPassword: \"Incorrect Current Password\",\n // })\n }\n },\n });\n const isFormFieldValid = (formik: any, fieldName: string) =>\n formik.touched[fieldName] && formik.errors[fieldName];\n\n const passwordPolicies = [\n {\n policy: \"8 characters minimum\"\n },\n {\n policy: \"No Spaces Allowed\"\n },\n {\n policy: \"One uppercase letter\"\n },\n {\n policy: \"One lowercase letter\"\n },\n {\n policy: \"One numeric digit\"\n },\n {\n policy: \"One special character(!, @, #, $)\"\n },\n ]\n\n return (\n <>\n <form onSubmit={formik.handleSubmit} className=\"flex flex-col gap-5\">\n <div className=\"flex flex-col gap-2\">\n <label htmlFor=\"currentPassword\" className=\"solid-auth-input-label\">Current Password</label>\n <SolidPasswordInput\n id=\"currentPassword\"\n name=\"currentPassword\"\n value={formik.values.currentPassword}\n onChange={formik.handleChange}\n onBlur={formik.handleBlur}\n toggle\n aria-invalid={!!formik.errors.currentPassword}\n className=\"w-full\"\n />\n {isFormFieldValid(formik, \"currentPassword\") && (\n <SolidMessage\n className=\"text-red-500 text-sm\"\n severity=\"error\"\n text={formik?.errors?.currentPassword?.toString()}\n />\n )}\n </div>\n <div className=\"flex flex-col gap-2\">\n <label htmlFor=\"newPassword\" className=\"solid-auth-input-label\">New Password</label>\n <SolidPasswordInput\n id=\"newPassword\"\n name=\"newPassword\"\n value={formik.values.newPassword}\n onChange={formik.handleChange}\n onBlur={formik.handleBlur}\n toggle\n aria-invalid={!!formik.errors.newPassword}\n className=\"w-full\"\n />\n {isFormFieldValid(formik, \"newPassword\") && (\n <SolidMessage\n className=\"text-red-500 text-sm\"\n severity=\"error\"\n text={formik?.errors?.newPassword?.toString()}\n />\n )}\n </div>\n <div className=\"flex flex-col gap-2\">\n <label htmlFor=\"confirmPassword\" className=\"solid-auth-input-label\">Confirm Password</label>\n <SolidPasswordInput\n id=\"confirmPassword\"\n name=\"confirmPassword\"\n value={formik.values.confirmPassword}\n onChange={formik.handleChange}\n onBlur={formik.handleBlur}\n toggle\n aria-invalid={!!formik.errors.confirmPassword}\n className=\"w-full\"\n />\n {isFormFieldValid(formik, \"confirmPassword\") && (\n <SolidMessage\n className=\"text-red-500 text-sm\"\n severity=\"error\"\n text={formik?.errors?.confirmPassword?.toString()}\n />\n )}\n </div>\n {/* <div className='mt-6'>\n <div className='flex flex-wrap -mx-2 gap-y-2'>\n {passwordPolicies.map((policy, index) => {\n return (\n <div key={index} className='w-1/2 px-2'>\n <p className=\"solid-auth-input-label flex items-center gap-2\">\n <div className='flex items-center justify-center' style={{ height: 14, width: 14, borderRadius: '50%', backgroundColor: '#A4A4A4' }}>\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\">\n <path d=\"M4.86813 8.72999L2.28979 6.15166L2.91396 5.52749L4.86813 7.48166L9.08563 3.26416L9.7098 3.88833L4.86813 8.72999Z\" fill=\"#E8EAED\" />\n </svg>\n </div>\n {policy.policy}\n </p>\n </div>\n )\n })}\n </div>\n </div> */}\n {envPasswordHelperText && (\n <div className=\"mt-6\">\n <div className=\"flex flex-wrap -mx-2 gap-y-2\">\n {envPasswordHelperText\n .split('\\\\n')\n .map((text, idx) => (\n <div key={idx} className=\"w-1/2 px-2 pt-0\">\n <div className='flex gap-2'><span>•</span><span>{text}</span></div>\n </div>\n ))}\n </div>\n </div>\n )}\n <div className=\"pt-2\">\n <SolidButton\n type=\"submit\"\n fullWidth\n className=\"font-light auth-submit-button\"\n label=\"Change Password\"\n disabled={formik.isSubmitting}\n loading={formik.isSubmitting}\n />\n </div>\n </form>\n </>\n )\n}\nexport default SolidChangeForcePassword\n"]}
|
|
@@ -109,8 +109,8 @@ const SolidChangeForcePassword = () => {
|
|
|
109
109
|
|
|
110
110
|
return (
|
|
111
111
|
<>
|
|
112
|
-
<form onSubmit={formik.handleSubmit} className=
|
|
113
|
-
<div className="flex flex-col gap-2
|
|
112
|
+
<form onSubmit={formik.handleSubmit} className="flex flex-col gap-5">
|
|
113
|
+
<div className="flex flex-col gap-2">
|
|
114
114
|
<label htmlFor="currentPassword" className="solid-auth-input-label">Current Password</label>
|
|
115
115
|
<SolidPasswordInput
|
|
116
116
|
id="currentPassword"
|
|
@@ -130,8 +130,8 @@ const SolidChangeForcePassword = () => {
|
|
|
130
130
|
/>
|
|
131
131
|
)}
|
|
132
132
|
</div>
|
|
133
|
-
<div className="flex flex-col gap-2
|
|
134
|
-
<label htmlFor="
|
|
133
|
+
<div className="flex flex-col gap-2">
|
|
134
|
+
<label htmlFor="newPassword" className="solid-auth-input-label">New Password</label>
|
|
135
135
|
<SolidPasswordInput
|
|
136
136
|
id="newPassword"
|
|
137
137
|
name="newPassword"
|
|
@@ -150,8 +150,8 @@ const SolidChangeForcePassword = () => {
|
|
|
150
150
|
/>
|
|
151
151
|
)}
|
|
152
152
|
</div>
|
|
153
|
-
<div className="flex flex-col gap-2
|
|
154
|
-
<label htmlFor="
|
|
153
|
+
<div className="flex flex-col gap-2">
|
|
154
|
+
<label htmlFor="confirmPassword" className="solid-auth-input-label">Confirm Password</label>
|
|
155
155
|
<SolidPasswordInput
|
|
156
156
|
id="confirmPassword"
|
|
157
157
|
name="confirmPassword"
|
|
@@ -201,10 +201,11 @@ const SolidChangeForcePassword = () => {
|
|
|
201
201
|
</div>
|
|
202
202
|
</div>
|
|
203
203
|
)}
|
|
204
|
-
<div className="
|
|
204
|
+
<div className="pt-2">
|
|
205
205
|
<SolidButton
|
|
206
206
|
type="submit"
|
|
207
|
-
|
|
207
|
+
fullWidth
|
|
208
|
+
className="font-light auth-submit-button"
|
|
208
209
|
label="Change Password"
|
|
209
210
|
disabled={formik.isSubmitting}
|
|
210
211
|
loading={formik.isSubmitting}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SettingsComponent.d.ts","sourceRoot":"","sources":["../../../src/components/common/SettingsComponent.tsx"],"names":[],"mappings":"AAmGA,wBAAgB,iBAAiB,
|
|
1
|
+
{"version":3,"file":"SettingsComponent.d.ts","sourceRoot":"","sources":["../../../src/components/common/SettingsComponent.tsx"],"names":[],"mappings":"AAmGA,wBAAgB,iBAAiB,4CAkfhC"}
|
|
@@ -339,7 +339,7 @@ export function SettingsComponent() {
|
|
|
339
339
|
return (_jsxs("div", { className: styles.settingRow, children: [_jsxs("div", { className: styles.settingLabelWrap, children: [_jsxs("div", { className: styles.settingLabelLine, children: [_jsx("p", { className: styles.settingLabel, children: settingName }), settingHelpText ? (_jsxs(SolidTooltip, { children: [_jsx(SolidTooltipTrigger, { asChild: true, children: _jsx("button", { type: "button", className: styles.settingHelpButton, "aria-label": "Show help for ".concat(settingName), children: _jsx(CircleHelp, { size: 14, "aria-hidden": true }) }) }), _jsx(SolidTooltipContent, { align: "start", className: styles.settingHelpTooltip, children: settingHelpText })] })) : null, !setting.editable ? (_jsxs(SolidTooltip, { children: [_jsx(SolidTooltipTrigger, { asChild: true, children: _jsx("span", { children: _jsx(SolidTag, { tone: "warn", children: "Read only" }) }) }), _jsx(SolidTooltipContent, { children: "This value comes from system configuration and cannot be changed from the admin UI." })] })) : null] }), setting.description ? _jsx("p", { className: styles.settingDescription, children: setting.description }) : null] }), !setting.editable ? (setting.controlType === "custom" ? (customWidgetErrorText ? (_jsx("div", { className: styles.readonlyValue, children: _jsx("span", { className: styles.customWidgetError, children: customWidgetErrorText }) })) : SettingsWidget ? ((function () {
|
|
340
340
|
var ResolvedSettingsWidget = SettingsWidget;
|
|
341
341
|
return _jsx(ResolvedSettingsWidget, __assign({}, settingsWidgetProps));
|
|
342
|
-
})()) : null) : setting.controlType === "mediaSingle" && value ? (_jsx("div", { className: styles.mediaPreview, children: _jsx(SolidUploadedImage, { src: normalizeAssetUrl(String(value)) }) })) : (_jsx("div", { className: styles.readonlyValue, children: _jsx("span", { className: value === null || value === undefined || value === "" ? styles.emptyValue : undefined, children: formatReadonlyValue(setting, value) }) }))) : (_jsxs("div", { className: "".concat(styles.controlStack, " ").concat(setting.controlType === "custom" ? styles.customControlStack : ""), children: [setting.controlType === "boolean" ? (_jsxs("div", { className: styles.boolRow, children: [_jsx(SolidSwitch, { checked: Boolean(value), onChange: function (checked) { return updateValue(setting.key, checked); } }), _jsx("span", { className: styles.boolText, children: value ? "Enabled" : "Disabled" })] })) : null, setting.controlType === "shortText" ? (_jsx(SolidInput, { type: "text", value: value == null ? "" : String(value), placeholder: setting.placeholder || setting.label, onChange: function (event) { return updateValue(setting.key, event.target.value); } })) : null, setting.controlType === "longText" ? (_jsx(SolidTextarea, { rows: 4, value: value == null ? "" : typeof value === "string" ? value : JSON.stringify(value, null, 2), placeholder: setting.placeholder || setting.label, onChange: function (event) { return updateValue(setting.key, event.target.value); } })) : null, setting.controlType === "numeric" ? (_jsx(SolidInput, { type: "number", value: value == null ? "" : String(value), placeholder: setting.placeholder || setting.label, onChange: function (event) { return updateValue(setting.key, event.target.value === "" ? null : Number(event.target.value)); } })) : null, setting.controlType === "selectionStatic" ? (_jsx(SolidSelect, { value: value, options: setting.options || [], placeholder: setting.placeholder || "Select", onChange: function (event) { return updateValue(setting.key, event.value); } })) : null, setting.controlType === "date" || setting.controlType === "datetime" ? (_jsx(SolidDatePicker, { selected: value ? new Date(String(value)) : null, showTimeSelect: setting.controlType === "datetime", dateFormat: setting.controlType === "datetime" ? "yyyy-MM-dd HH:mm:ss" : "yyyy-MM-dd", onChange: function (date) { return updateValue(setting.key, date instanceof Date ? date.toISOString() : null); } })) : null, setting.controlType === "mediaSingle" ? (_jsxs("div", { className: styles.mediaField, children: [_jsxs("div", { className: styles.mediaComposer, children: [_jsxs("label", { className: styles.mediaDropzone, children: [_jsx("input", { className: styles.mediaInput, type: "file", accept: ".png,.jpg,.jpeg,.svg,.webp", onChange: function (event) { var _a, _b; return updateFileValue(setting.key, (_b = (_a = event.target.files) === null || _a === void 0 ? void 0 : _a[0]) !== null && _b !== void 0 ? _b : null); } }), _jsx(SettingDropzoneActivePlaceholder, { note: "PNG, JPG, JPEG, SVG, WEBP | Max size: 2 MB" })] }), (filePreviews[setting.key] || value) ? (_jsx("div", { className: styles.mediaPreview, children: _jsx(SolidUploadedImage, { src: filePreviews[setting.key] || normalizeAssetUrl(String(value)) }) })) : (_jsx("div", { className: styles.mediaEmptyState, children: "Preview appears here after upload" }))] }), (filePreviews[setting.key] || value) ? (_jsx(SettingsImageRemoveButton, { onClick: function () { return updateFileValue(setting.key, null); } })) : null] })) : null, setting.controlType === "custom" ? (customWidgetErrorText ? (_jsx("div", { className: styles.readonlyValue, children: _jsx("span", { className: styles.customWidgetError, children: customWidgetErrorText }) })) : SettingsWidget ? ((function () {
|
|
342
|
+
})()) : null) : setting.controlType === "mediaSingle" && value ? (_jsx("div", { className: styles.mediaPreview, children: _jsx(SolidUploadedImage, { src: normalizeAssetUrl(String(value)) }) })) : (_jsx("div", { className: styles.readonlyValue, children: _jsx("span", { className: value === null || value === undefined || value === "" ? styles.emptyValue : undefined, children: formatReadonlyValue(setting, value) }) }))) : (_jsxs("div", { className: "".concat(styles.controlStack, " ").concat(setting.controlType === "custom" ? styles.customControlStack : ""), children: [setting.controlType === "boolean" ? (_jsxs("div", { className: styles.boolRow, children: [_jsx(SolidSwitch, { checked: Boolean(value), onChange: function (checked) { return updateValue(setting.key, checked); } }), _jsx("span", { className: styles.boolText, children: value ? "Enabled" : "Disabled" })] })) : null, setting.controlType === "shortText" ? (_jsx(SolidInput, { type: "text", value: value == null ? "" : String(value), placeholder: setting.placeholder || setting.label, onChange: function (event) { return updateValue(setting.key, event.target.value); } })) : null, setting.controlType === "longText" ? (_jsx(SolidTextarea, { rows: 4, value: value == null ? "" : typeof value === "string" ? value : JSON.stringify(value, null, 2), placeholder: setting.placeholder || setting.label, onChange: function (event) { return updateValue(setting.key, event.target.value); } })) : null, setting.controlType === "numeric" ? (_jsx(SolidInput, { type: "number", value: value == null ? "" : String(value), placeholder: setting.placeholder || setting.label, onChange: function (event) { return updateValue(setting.key, event.target.value === "" ? null : Number(event.target.value)); } })) : null, setting.controlType === "selectionStatic" ? (_jsx(SolidSelect, { value: value, options: setting.options || [], placeholder: setting.placeholder || "Select", native: false, onChange: function (event) { return updateValue(setting.key, event.value); } })) : null, setting.controlType === "date" || setting.controlType === "datetime" ? (_jsx(SolidDatePicker, { selected: value ? new Date(String(value)) : null, showTimeSelect: setting.controlType === "datetime", dateFormat: setting.controlType === "datetime" ? "yyyy-MM-dd HH:mm:ss" : "yyyy-MM-dd", onChange: function (date) { return updateValue(setting.key, date instanceof Date ? date.toISOString() : null); } })) : null, setting.controlType === "mediaSingle" ? (_jsxs("div", { className: styles.mediaField, children: [_jsxs("div", { className: styles.mediaComposer, children: [_jsxs("label", { className: styles.mediaDropzone, children: [_jsx("input", { className: styles.mediaInput, type: "file", accept: ".png,.jpg,.jpeg,.svg,.webp", onChange: function (event) { var _a, _b; return updateFileValue(setting.key, (_b = (_a = event.target.files) === null || _a === void 0 ? void 0 : _a[0]) !== null && _b !== void 0 ? _b : null); } }), _jsx(SettingDropzoneActivePlaceholder, { note: "PNG, JPG, JPEG, SVG, WEBP | Max size: 2 MB" })] }), (filePreviews[setting.key] || value) ? (_jsx("div", { className: styles.mediaPreview, children: _jsx(SolidUploadedImage, { src: filePreviews[setting.key] || normalizeAssetUrl(String(value)) }) })) : (_jsx("div", { className: styles.mediaEmptyState, children: "Preview appears here after upload" }))] }), (filePreviews[setting.key] || value) ? (_jsx(SettingsImageRemoveButton, { onClick: function () { return updateFileValue(setting.key, null); } })) : null] })) : null, setting.controlType === "custom" ? (customWidgetErrorText ? (_jsx("div", { className: styles.readonlyValue, children: _jsx("span", { className: styles.customWidgetError, children: customWidgetErrorText }) })) : SettingsWidget ? ((function () {
|
|
343
343
|
var ResolvedSettingsWidget = SettingsWidget;
|
|
344
344
|
return _jsx(ResolvedSettingsWidget, __assign({}, settingsWidgetProps));
|
|
345
345
|
})()) : null) : null] }))] }, setting.key));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SettingsComponent.js","sourceRoot":"","sources":["../../../src/components/common/SettingsComponent.tsx"],"names":[],"mappings":"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","sourcesContent":["import { useEffect, useMemo, useState, type ComponentType } from \"react\";\nimport { CircleHelp, Search } from \"lucide-react\";\nimport { useDispatch } from \"react-redux\";\nimport { ERROR_MESSAGES } from \"../../constants/error-messages\";\nimport { normalizeAssetUrl } from \"../../helpers/assetUrl\";\nimport { getExtensionComponent } from \"../../helpers/registry\";\nimport {\n extractSettingsList,\n getSettingOptionLabel,\n getSettingsMap,\n humanizeSettingToken,\n type AdminSettingDefinition,\n} from \"../../helpers/settingsPayload\";\nimport type { SolidSettingsWidgetProps } from \"../../types/solid-core\";\nimport { showToast } from \"../../redux/features/toastSlice\";\nimport {\n useBulkUpdateSolidSettingsMutation,\n useGetSolidSettingsQuery,\n} from \"../../redux/api/solidSettingsApi\";\nimport {\n SolidButton,\n SolidDatePicker,\n SolidInput,\n SolidSelect,\n SolidSwitch,\n SolidTabGroup,\n SolidTag,\n SolidTextarea,\n SolidTooltip,\n SolidTooltipContent,\n SolidTooltipTrigger,\n} from \"../shad-cn-ui\";\nimport { SettingDropzoneActivePlaceholder } from \"./SolidSettings/SettingDropzoneActivePlaceholder\";\nimport { SettingsImageRemoveButton } from \"./SolidSettings/SettingsImageRemoveButton\";\nimport { SolidUploadedImage } from \"./SolidSettings/SolidUploadedImage\";\nimport styles from \"./SettingsComponent.module.css\";\n\ntype SettingsFormValue = string | number | boolean | null | File;\ntype SettingsFilterMode = \"all\" | \"read-only\" | \"editable\";\n\nfunction toModuleInitials(moduleName: string) {\n return moduleName\n .split(/[-_\\s]+/)\n .filter(Boolean)\n .map((token) => token[0]?.toUpperCase())\n .join(\"\")\n .slice(0, 2);\n}\n\nfunction serializeValue(value: unknown) {\n if (value === null || value === undefined) return \"\";\n if (typeof value === \"string\") return value;\n return JSON.stringify(value);\n}\n\nfunction areValuesEqual(left: unknown, right: unknown) {\n if (left instanceof File || right instanceof File) return false;\n return serializeValue(left) === serializeValue(right);\n}\n\nfunction formatReadonlyValue(setting: AdminSettingDefinition, value: unknown) {\n if (value === null || value === undefined || value === \"\") {\n return \"Not set\";\n }\n\n if (setting.controlType === \"boolean\") {\n return value ? \"Enabled\" : \"Disabled\";\n }\n\n if (setting.controlType === \"selectionStatic\") {\n return getSettingOptionLabel(setting, value);\n }\n\n if (setting.controlType === \"mediaSingle\") {\n return String(value);\n }\n\n if (typeof value === \"object\") {\n return JSON.stringify(value, null, 2);\n }\n\n return String(value);\n}\n\nfunction getSettingsWidgetName(setting: AdminSettingDefinition) {\n return setting.settingsWidget || \"\";\n}\n\nfunction getCustomWidgetErrorText(setting: AdminSettingDefinition, widgetName: string, settingsWidget: ComponentType<any> | null) {\n if (setting.controlType !== \"custom\") return null;\n if (!widgetName) {\n return `controlType is \"custom\" for setting \"${setting.key}\" but no settingsWidget is specified.`;\n }\n if (!settingsWidget) {\n return `Widget \"${widgetName}\" is not registered for setting \"${setting.key}\".`;\n }\n return null;\n}\n\nexport function SettingsComponent() {\n const dispatch = useDispatch();\n const { data: settingsResponse, refetch } = useGetSolidSettingsQuery(undefined);\n const [bulkUpdateSolidSettings] = useBulkUpdateSolidSettingsMutation();\n const [searchTerm, setSearchTerm] = useState(\"\");\n const [filterMode, setFilterMode] = useState<SettingsFilterMode>(\"all\");\n const [activeModule, setActiveModule] = useState(\"\");\n const [formValues, setFormValues] = useState<Record<string, SettingsFormValue>>({});\n const [filePreviews, setFilePreviews] = useState<Record<string, string>>({});\n\n const settingsList = useMemo(\n () => extractSettingsList(settingsResponse).filter((setting) => setting.level !== \"internal-user\"),\n [settingsResponse],\n );\n const settingsMap = useMemo(() => getSettingsMap(settingsResponse), [settingsResponse]);\n const totalSettingsCount = settingsList.length;\n const editableSettingsCount = useMemo(\n () => settingsList.filter((setting) => setting.editable).length,\n [settingsList],\n );\n\n useEffect(() => {\n if (!settingsList.length) return;\n const nextValues = Object.fromEntries(\n settingsList.map((setting) => [setting.key, settingsMap[setting.key] ?? setting.value ?? null]),\n );\n setFormValues(nextValues);\n }, [settingsList, settingsMap]);\n\n const filteredSettings = useMemo(() => {\n const scopedSettings = settingsList.filter((setting) => {\n if (filterMode === \"read-only\") return !setting.editable;\n if (filterMode === \"editable\") return setting.editable;\n return true;\n });\n const query = searchTerm.trim().toLowerCase();\n if (!query) return scopedSettings;\n\n return scopedSettings.filter((setting) => {\n const haystack = [\n setting.moduleName,\n setting.group,\n setting.key,\n setting.label,\n setting.description,\n setting.helpText,\n setting.options?.map((option) => `${option.label} ${option.value}`).join(\" \"),\n ]\n .filter(Boolean)\n .join(\" \")\n .toLowerCase();\n\n return haystack.includes(query);\n });\n }, [filterMode, searchTerm, settingsList]);\n\n const moduleEntries = useMemo(() => {\n const grouped = new Map<string, AdminSettingDefinition[]>();\n filteredSettings.forEach((setting) => {\n const current = grouped.get(setting.moduleName) ?? [];\n current.push(setting);\n grouped.set(setting.moduleName, current);\n });\n\n return Array.from(grouped.entries()).map(([moduleName, moduleSettings]) => ({\n moduleName,\n label: humanizeSettingToken(moduleName),\n badge: toModuleInitials(moduleName) || \"S\",\n settings: moduleSettings,\n }));\n }, [filteredSettings]);\n\n useEffect(() => {\n if (!moduleEntries.length) {\n setActiveModule(\"\");\n return;\n }\n\n if (!moduleEntries.some((entry) => entry.moduleName === activeModule)) {\n setActiveModule(moduleEntries[0].moduleName);\n }\n }, [activeModule, moduleEntries]);\n\n const hasChanges = useMemo(\n () =>\n settingsList.some(\n (setting) =>\n setting.editable &&\n !areValuesEqual(formValues[setting.key], settingsMap[setting.key] ?? setting.value ?? null),\n ),\n [formValues, settingsList, settingsMap],\n );\n\n const groupedModuleSettings = useMemo(() => {\n const currentModule = moduleEntries.find((entry) => entry.moduleName === activeModule);\n if (!currentModule) return [];\n\n const grouped = new Map<string, AdminSettingDefinition[]>();\n currentModule.settings.forEach((setting) => {\n const groupKey = setting.group || \"general\";\n const current = grouped.get(groupKey) ?? [];\n current.push(setting);\n grouped.set(groupKey, current);\n });\n\n return Array.from(grouped.entries()).map(([groupKey, groupSettings]) => ({\n key: groupKey,\n label: humanizeSettingToken(groupKey),\n settings: groupSettings.sort((left, right) => {\n const leftSort = left.sortOrder ?? Number.MAX_SAFE_INTEGER;\n const rightSort = right.sortOrder ?? Number.MAX_SAFE_INTEGER;\n if (leftSort !== rightSort) return leftSort - rightSort;\n return (left.label ?? left.key).localeCompare(right.label ?? right.key);\n }),\n }));\n }, [activeModule, moduleEntries]);\n\n const updateValue = (key: string, value: SettingsFormValue) => {\n setFormValues((current) => ({ ...current, [key]: value }));\n };\n\n const updateFileValue = (key: string, file: File | null) => {\n if (!file) {\n if (filePreviews[key]) {\n URL.revokeObjectURL(filePreviews[key]);\n }\n setFilePreviews((current) => {\n const next = { ...current };\n delete next[key];\n return next;\n });\n updateValue(key, null);\n return;\n }\n\n if (file.size > 2 * 1024 * 1024) {\n dispatch(showToast({ severity: \"error\", summary: \"File too large\", detail: \"Maximum file size is 2MB\" }));\n return;\n }\n\n if (filePreviews[key]) {\n URL.revokeObjectURL(filePreviews[key]);\n }\n\n const preview = URL.createObjectURL(file);\n setFilePreviews((current) => ({ ...current, [key]: preview }));\n updateValue(key, file);\n };\n\n useEffect(\n () => () => {\n Object.values(filePreviews).forEach((preview) => URL.revokeObjectURL(preview));\n },\n [filePreviews],\n );\n\n const handleSave = async () => {\n try {\n const updatedSettingsArray: Array<{ key: string; value: string; type: string }> = [];\n const formData = new FormData();\n\n settingsList.forEach((setting) => {\n if (!setting.editable) return;\n\n const nextValue = formValues[setting.key];\n const currentValue = settingsMap[setting.key] ?? setting.value ?? null;\n\n if (nextValue instanceof File) {\n formData.append(setting.key, nextValue);\n updatedSettingsArray.push({ key: setting.key, value: \"\", type: \"system\" });\n return;\n }\n\n if (!areValuesEqual(nextValue, currentValue)) {\n updatedSettingsArray.push({\n key: setting.key,\n value: serializeValue(nextValue),\n type: \"system\",\n });\n }\n });\n\n if (!updatedSettingsArray.length) {\n dispatch(showToast({ severity: \"success\", summary: \"No Changes\", detail: \"No settings were updated\" }));\n return;\n }\n\n formData.append(\"settings\", JSON.stringify(updatedSettingsArray));\n const response = await bulkUpdateSolidSettings({ data: formData }).unwrap();\n\n if (response?.statusCode === 200) {\n dispatch(showToast({ severity: \"success\", summary: \"Updated\", detail: \"Settings updated\" }));\n if (typeof window !== \"undefined\") {\n window.dispatchEvent(new CustomEvent(\"solid:settings-updated\"));\n }\n } else {\n dispatch(showToast({ severity: \"error\", summary: ERROR_MESSAGES.FAILED, detail: ERROR_MESSAGES.SOMETHING_WRONG }));\n }\n\n await refetch();\n setFilePreviews({});\n } catch (error: any) {\n dispatch(showToast({ severity: \"error\", summary: ERROR_MESSAGES.FAILED, detail: error?.data?.message || ERROR_MESSAGES.SOMETHING_WRONG }));\n }\n };\n\n const moduleTabs = moduleEntries.map((entry) => ({\n value: entry.moduleName,\n label: (\n <span className={styles.moduleTab}>\n <span className={styles.moduleTabBadge}>{entry.badge}</span>\n <span className={styles.moduleTabText}>\n <span className={styles.moduleTabLabel}>{entry.label}</span>\n <span className={styles.moduleTabMeta}>{entry.settings.length} settings</span>\n </span>\n </span>\n ),\n content: (\n <div>\n {groupedModuleSettings.length ? (\n groupedModuleSettings.map((group) => (\n <section key={group.key} className={styles.groupSection}>\n <div className={styles.groupCard}>\n <div className={styles.groupHeader}>\n <div>\n <h3 className={styles.groupTitle}>{group.label}</h3>\n <div className={styles.groupMeta}>{group.settings.length} item{group.settings.length === 1 ? \"\" : \"s\"}</div>\n </div>\n </div>\n <div className={styles.groupBody}>\n {group.settings.map((setting) => {\n const value = formValues[setting.key];\n const settingName = setting.label || humanizeSettingToken(setting.key);\n const settingHelpText = setting.helpText?.trim() || \"\";\n const settingsWidgetName = getSettingsWidgetName(setting);\n const SettingsWidget = settingsWidgetName ? getExtensionComponent(settingsWidgetName) : null;\n const customWidgetErrorText = getCustomWidgetErrorText(setting, settingsWidgetName, SettingsWidget);\n const settingsWidgetProps: SolidSettingsWidgetProps = {\n setting,\n value,\n settingsMap,\n formValues,\n editable: Boolean(setting.editable),\n updateValue,\n updateFileValue,\n };\n return (\n <div key={setting.key} className={styles.settingRow}>\n <div className={styles.settingLabelWrap}>\n <div className={styles.settingLabelLine}>\n <p className={styles.settingLabel}>{settingName}</p>\n {settingHelpText ? (\n <SolidTooltip>\n <SolidTooltipTrigger asChild>\n <button\n type=\"button\"\n className={styles.settingHelpButton}\n aria-label={`Show help for ${settingName}`}\n >\n <CircleHelp size={14} aria-hidden />\n </button>\n </SolidTooltipTrigger>\n <SolidTooltipContent align=\"start\" className={styles.settingHelpTooltip}>\n {settingHelpText}\n </SolidTooltipContent>\n </SolidTooltip>\n ) : null}\n {!setting.editable ? (\n <SolidTooltip>\n <SolidTooltipTrigger asChild>\n <span>\n <SolidTag tone=\"warn\">Read only</SolidTag>\n </span>\n </SolidTooltipTrigger>\n <SolidTooltipContent>\n This value comes from system configuration and cannot be changed from the admin UI.\n </SolidTooltipContent>\n </SolidTooltip>\n ) : null}\n </div>\n {setting.description ? <p className={styles.settingDescription}>{setting.description}</p> : null}\n </div>\n\n {!setting.editable ? (\n setting.controlType === \"custom\" ? (\n customWidgetErrorText ? (\n <div className={styles.readonlyValue}>\n <span className={styles.customWidgetError}>{customWidgetErrorText}</span>\n </div>\n ) : SettingsWidget ? (\n (() => {\n const ResolvedSettingsWidget = SettingsWidget as ComponentType<any>;\n return <ResolvedSettingsWidget {...settingsWidgetProps} />;\n })()\n ) : null\n ) : setting.controlType === \"mediaSingle\" && value ? (\n <div className={styles.mediaPreview}>\n <SolidUploadedImage src={normalizeAssetUrl(String(value))} />\n </div>\n ) : (\n <div className={styles.readonlyValue}>\n <span className={value === null || value === undefined || value === \"\" ? styles.emptyValue : undefined}>\n {formatReadonlyValue(setting, value)}\n </span>\n </div>\n )\n ) : (\n <div className={`${styles.controlStack} ${setting.controlType === \"custom\" ? styles.customControlStack : \"\"}`}>\n {setting.controlType === \"boolean\" ? (\n <div className={styles.boolRow}>\n <SolidSwitch checked={Boolean(value)} onChange={(checked) => updateValue(setting.key, checked)} />\n <span className={styles.boolText}>{value ? \"Enabled\" : \"Disabled\"}</span>\n </div>\n ) : null}\n\n {setting.controlType === \"shortText\" ? (\n <SolidInput\n type=\"text\"\n value={value == null ? \"\" : String(value)}\n placeholder={setting.placeholder || setting.label}\n onChange={(event: any) => updateValue(setting.key, event.target.value)}\n />\n ) : null}\n\n {setting.controlType === \"longText\" ? (\n <SolidTextarea\n rows={4}\n value={value == null ? \"\" : typeof value === \"string\" ? value : JSON.stringify(value, null, 2)}\n placeholder={setting.placeholder || setting.label}\n onChange={(event: any) => updateValue(setting.key, event.target.value)}\n />\n ) : null}\n\n {setting.controlType === \"numeric\" ? (\n <SolidInput\n type=\"number\"\n value={value == null ? \"\" : String(value)}\n placeholder={setting.placeholder || setting.label}\n onChange={(event: any) => updateValue(setting.key, event.target.value === \"\" ? null : Number(event.target.value))}\n />\n ) : null}\n\n {setting.controlType === \"selectionStatic\" ? (\n <SolidSelect\n value={value}\n options={setting.options || []}\n placeholder={setting.placeholder || \"Select\"}\n onChange={(event) => updateValue(setting.key, event.value)}\n />\n ) : null}\n\n {setting.controlType === \"date\" || setting.controlType === \"datetime\" ? (\n <SolidDatePicker\n selected={value ? new Date(String(value)) : null}\n showTimeSelect={setting.controlType === \"datetime\"}\n dateFormat={setting.controlType === \"datetime\" ? \"yyyy-MM-dd HH:mm:ss\" : \"yyyy-MM-dd\"}\n onChange={(date: Date | null) => updateValue(setting.key, date instanceof Date ? date.toISOString() : null)}\n />\n ) : null}\n\n {setting.controlType === \"mediaSingle\" ? (\n <div className={styles.mediaField}>\n <div className={styles.mediaComposer}>\n <label className={styles.mediaDropzone}>\n <input\n className={styles.mediaInput}\n type=\"file\"\n accept=\".png,.jpg,.jpeg,.svg,.webp\"\n onChange={(event) => updateFileValue(setting.key, event.target.files?.[0] ?? null)}\n />\n <SettingDropzoneActivePlaceholder note=\"PNG, JPG, JPEG, SVG, WEBP | Max size: 2 MB\" />\n </label>\n {(filePreviews[setting.key] || value) ? (\n <div className={styles.mediaPreview}>\n <SolidUploadedImage src={filePreviews[setting.key] || normalizeAssetUrl(String(value))} />\n </div>\n ) : (\n <div className={styles.mediaEmptyState}>Preview appears here after upload</div>\n )}\n </div>\n {(filePreviews[setting.key] || value) ? (\n <SettingsImageRemoveButton onClick={() => updateFileValue(setting.key, null)} />\n ) : null}\n </div>\n ) : null}\n\n {setting.controlType === \"custom\" ? (\n customWidgetErrorText ? (\n <div className={styles.readonlyValue}>\n <span className={styles.customWidgetError}>{customWidgetErrorText}</span>\n </div>\n ) : SettingsWidget ? (\n (() => {\n const ResolvedSettingsWidget = SettingsWidget as ComponentType<any>;\n return <ResolvedSettingsWidget {...settingsWidgetProps} />;\n })()\n ) : null\n ) : null}\n </div>\n )}\n </div>\n );\n })}\n </div>\n </div>\n </section>\n ))\n ) : (\n <div className={styles.emptyState}>No settings match the current filter.</div>\n )}\n </div>\n ),\n }));\n\n return (\n <div className={styles.page}>\n <div className={`page-header ${styles.pageHeader}`}>\n <div className={styles.headerIntro}>\n <div className=\"form-wrapper-title\">Settings</div>\n <div className={styles.subtitle}>Manage platform configuration across modules from a single workspace.</div>\n <div className={styles.summaryChips}>\n <span className={styles.summaryChip}>{moduleEntries.length} module{moduleEntries.length === 1 ? \"\" : \"s\"}</span>\n <span className={styles.summaryChip}>{totalSettingsCount} setting{totalSettingsCount === 1 ? \"\" : \"s\"}</span>\n <button\n type=\"button\"\n className={`${styles.summaryChip} ${styles.summaryChipButton} ${filterMode === \"editable\" ? styles.summaryChipActive : \"\"}`}\n aria-pressed={filterMode === \"editable\"}\n onClick={() => setFilterMode((current) => (current === \"editable\" ? \"all\" : \"editable\"))}\n >\n {editableSettingsCount} editable\n </button>\n </div>\n </div>\n <div className={styles.headerSearch}>\n <div className={styles.searchIcon}>\n <Search size={16} />\n <SolidInput\n className={styles.searchInput}\n value={searchTerm}\n placeholder=\"Search settings, groups, or modules\"\n onChange={(event: any) => setSearchTerm(event.target.value)}\n />\n </div>\n {searchTerm ? (\n <span className={styles.resultsMeta}>\n {filteredSettings.length} result{filteredSettings.length === 1 ? \"\" : \"s\"}\n </span>\n ) : null}\n </div>\n <div className={styles.toolbarActions}>\n <div className={styles.legend}>\n <button\n type=\"button\"\n className={`${styles.readonlyFilterButton} ${filterMode === \"read-only\" ? styles.readonlyFilterButtonActive : \"\"}`}\n aria-pressed={filterMode === \"read-only\"}\n aria-label={filterMode === \"read-only\" ? \"Disable read-only filter\" : \"Enable read-only filter\"}\n onClick={() => setFilterMode((current) => (current === \"read-only\" ? \"all\" : \"read-only\"))}\n >\n <SolidTag tone=\"warn\">Read only</SolidTag>\n </button>\n <span className={filterMode === \"read-only\" ? styles.legendLabelActive : undefined}>\n {filterMode === \"read-only\" ? \"Read-only filter active\" : \"System-managed value\"}\n </span>\n <SolidTooltip>\n <SolidTooltipTrigger asChild>\n <button type=\"button\" className={styles.legendButton} aria-label=\"Read-only legend details\">\n i\n </button>\n </SolidTooltipTrigger>\n <SolidTooltipContent>\n Read-only settings are visible here for context, but can only be changed through environment or backend configuration.\n </SolidTooltipContent>\n </SolidTooltip>\n </div>\n <SolidButton size=\"sm\" type=\"button\" loading={false} onClick={handleSave} disabled={!hasChanges}>\n Save\n </SolidButton>\n </div>\n </div>\n\n <div className={styles.workspace}>\n {moduleTabs.length ? (\n <SolidTabGroup\n tabs={moduleTabs}\n value={activeModule}\n onValueChange={setActiveModule}\n className={styles.tabGroup}\n listClassName={styles.tabList}\n panelClassName={styles.tabPanel}\n orientation=\"vertical\"\n />\n ) : (\n <div className={styles.emptyState}>No settings are available.</div>\n )}\n </div>\n </div>\n );\n}\n"]}
|
|
1
|
+
{"version":3,"file":"SettingsComponent.js","sourceRoot":"","sources":["../../../src/components/common/SettingsComponent.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAsB,MAAM,OAAO,CAAC;AACzE,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAChE,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,EACL,mBAAmB,EACnB,qBAAqB,EACrB,cAAc,EACd,oBAAoB,GAErB,MAAM,+BAA+B,CAAC;AAEvC,OAAO,EAAE,SAAS,EAAE,MAAM,iCAAiC,CAAC;AAC5D,OAAO,EACL,kCAAkC,EAClC,wBAAwB,GACzB,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EACL,WAAW,EACX,eAAe,EACf,UAAU,EACV,WAAW,EACX,WAAW,EACX,aAAa,EACb,QAAQ,EACR,aAAa,EACb,YAAY,EACZ,mBAAmB,EACnB,mBAAmB,GACpB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,gCAAgC,EAAE,MAAM,kDAAkD,CAAC;AACpG,OAAO,EAAE,yBAAyB,EAAE,MAAM,2CAA2C,CAAC;AACtF,OAAO,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AACxE,OAAO,MAAM,MAAM,gCAAgC,CAAC;AAKpD,SAAS,gBAAgB,CAAC,UAAkB;IAC1C,OAAO,UAAU;SACd,KAAK,CAAC,SAAS,CAAC;SAChB,MAAM,CAAC,OAAO,CAAC;SACf,GAAG,CAAC,UAAC,KAAK,YAAK,OAAA,MAAA,KAAK,CAAC,CAAC,CAAC,0CAAE,WAAW,EAAE,CAAA,EAAA,CAAC;SACvC,IAAI,CAAC,EAAE,CAAC;SACR,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACjB,CAAC;AAED,SAAS,cAAc,CAAC,KAAc;IACpC,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,EAAE,CAAC;IACrD,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAC5C,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;AAC/B,CAAC;AAED,SAAS,cAAc,CAAC,IAAa,EAAE,KAAc;IACnD,IAAI,IAAI,YAAY,IAAI,IAAI,KAAK,YAAY,IAAI;QAAE,OAAO,KAAK,CAAC;IAChE,OAAO,cAAc,CAAC,IAAI,CAAC,KAAK,cAAc,CAAC,KAAK,CAAC,CAAC;AACxD,CAAC;AAED,SAAS,mBAAmB,CAAC,OAA+B,EAAE,KAAc;IAC1E,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,EAAE,EAAE;QACzD,OAAO,SAAS,CAAC;KAClB;IAED,IAAI,OAAO,CAAC,WAAW,KAAK,SAAS,EAAE;QACrC,OAAO,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC;KACvC;IAED,IAAI,OAAO,CAAC,WAAW,KAAK,iBAAiB,EAAE;QAC7C,OAAO,qBAAqB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;KAC9C;IAED,IAAI,OAAO,CAAC,WAAW,KAAK,aAAa,EAAE;QACzC,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;KACtB;IAED,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;QAC7B,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;KACvC;IAED,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;AACvB,CAAC;AAED,SAAS,qBAAqB,CAAC,OAA+B;IAC5D,OAAO,OAAO,CAAC,cAAc,IAAI,EAAE,CAAC;AACtC,CAAC;AAED,SAAS,wBAAwB,CAAC,OAA+B,EAAE,UAAkB,EAAE,cAAyC;IAC9H,IAAI,OAAO,CAAC,WAAW,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IAClD,IAAI,CAAC,UAAU,EAAE;QACf,OAAO,kDAAwC,OAAO,CAAC,GAAG,2CAAuC,CAAC;KACnG;IACD,IAAI,CAAC,cAAc,EAAE;QACnB,OAAO,mBAAW,UAAU,gDAAoC,OAAO,CAAC,GAAG,QAAI,CAAC;KACjF;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,iBAAiB;IAAjC,iBAkfC;IAjfC,IAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;IACzB,IAAA,KAAsC,wBAAwB,CAAC,SAAS,CAAC,EAAjE,gBAAgB,UAAA,EAAE,OAAO,aAAwC,CAAC;IACzE,IAAA,uBAAuB,GAAI,kCAAkC,EAAE,GAAxC,CAAyC;IACjE,IAAA,KAA8B,QAAQ,CAAC,EAAE,CAAC,EAAzC,UAAU,QAAA,EAAE,aAAa,QAAgB,CAAC;IAC3C,IAAA,KAA8B,QAAQ,CAAqB,KAAK,CAAC,EAAhE,UAAU,QAAA,EAAE,aAAa,QAAuC,CAAC;IAClE,IAAA,KAAkC,QAAQ,CAAC,EAAE,CAAC,EAA7C,YAAY,QAAA,EAAE,eAAe,QAAgB,CAAC;IAC/C,IAAA,KAA8B,QAAQ,CAAoC,EAAE,CAAC,EAA5E,UAAU,QAAA,EAAE,aAAa,QAAmD,CAAC;IAC9E,IAAA,KAAkC,QAAQ,CAAyB,EAAE,CAAC,EAArE,YAAY,QAAA,EAAE,eAAe,QAAwC,CAAC;IAE7E,IAAM,YAAY,GAAG,OAAO,CAC1B,cAAM,OAAA,mBAAmB,CAAC,gBAAgB,CAAC,CAAC,MAAM,CAAC,UAAC,OAAO,IAAK,OAAA,OAAO,CAAC,KAAK,KAAK,eAAe,EAAjC,CAAiC,CAAC,EAA5F,CAA4F,EAClG,CAAC,gBAAgB,CAAC,CACnB,CAAC;IACF,IAAM,WAAW,GAAG,OAAO,CAAC,cAAM,OAAA,cAAc,CAAC,gBAAgB,CAAC,EAAhC,CAAgC,EAAE,CAAC,gBAAgB,CAAC,CAAC,CAAC;IACxF,IAAM,kBAAkB,GAAG,YAAY,CAAC,MAAM,CAAC;IAC/C,IAAM,qBAAqB,GAAG,OAAO,CACnC,cAAM,OAAA,YAAY,CAAC,MAAM,CAAC,UAAC,OAAO,IAAK,OAAA,OAAO,CAAC,QAAQ,EAAhB,CAAgB,CAAC,CAAC,MAAM,EAAzD,CAAyD,EAC/D,CAAC,YAAY,CAAC,CACf,CAAC;IAEF,SAAS,CAAC;QACR,IAAI,CAAC,YAAY,CAAC,MAAM;YAAE,OAAO;QACjC,IAAM,UAAU,GAAG,MAAM,CAAC,WAAW,CACnC,YAAY,CAAC,GAAG,CAAC,UAAC,OAAO,gBAAK,OAAA,CAAC,OAAO,CAAC,GAAG,EAAE,MAAA,MAAA,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,mCAAI,OAAO,CAAC,KAAK,mCAAI,IAAI,CAAC,CAAA,EAAA,CAAC,CAChG,CAAC;QACF,aAAa,CAAC,UAAU,CAAC,CAAC;IAC5B,CAAC,EAAE,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC,CAAC;IAEhC,IAAM,gBAAgB,GAAG,OAAO,CAAC;QAC/B,IAAM,cAAc,GAAG,YAAY,CAAC,MAAM,CAAC,UAAC,OAAO;YACjD,IAAI,UAAU,KAAK,WAAW;gBAAE,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC;YACzD,IAAI,UAAU,KAAK,UAAU;gBAAE,OAAO,OAAO,CAAC,QAAQ,CAAC;YACvD,OAAO,IAAI,CAAC;QACd,CAAC,CAAC,CAAC;QACH,IAAM,KAAK,GAAG,UAAU,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAC9C,IAAI,CAAC,KAAK;YAAE,OAAO,cAAc,CAAC;QAElC,OAAO,cAAc,CAAC,MAAM,CAAC,UAAC,OAAO;;YACnC,IAAM,QAAQ,GAAG;gBACf,OAAO,CAAC,UAAU;gBAClB,OAAO,CAAC,KAAK;gBACb,OAAO,CAAC,GAAG;gBACX,OAAO,CAAC,KAAK;gBACb,OAAO,CAAC,WAAW;gBACnB,OAAO,CAAC,QAAQ;gBAChB,MAAA,OAAO,CAAC,OAAO,0CAAE,GAAG,CAAC,UAAC,MAAM,IAAK,OAAA,UAAG,MAAM,CAAC,KAAK,cAAI,MAAM,CAAC,KAAK,CAAE,EAAjC,CAAiC,EAAE,IAAI,CAAC,GAAG,CAAC;aAC9E;iBACE,MAAM,CAAC,OAAO,CAAC;iBACf,IAAI,CAAC,GAAG,CAAC;iBACT,WAAW,EAAE,CAAC;YAEjB,OAAO,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QAClC,CAAC,CAAC,CAAC;IACL,CAAC,EAAE,CAAC,UAAU,EAAE,UAAU,EAAE,YAAY,CAAC,CAAC,CAAC;IAE3C,IAAM,aAAa,GAAG,OAAO,CAAC;QAC5B,IAAM,OAAO,GAAG,IAAI,GAAG,EAAoC,CAAC;QAC5D,gBAAgB,CAAC,OAAO,CAAC,UAAC,OAAO;;YAC/B,IAAM,OAAO,GAAG,MAAA,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,mCAAI,EAAE,CAAC;YACtD,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACtB,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QAC3C,CAAC,CAAC,CAAC;QAEH,OAAO,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,UAAC,EAA4B;gBAA3B,UAAU,QAAA,EAAE,cAAc,QAAA;YAAM,OAAA,CAAC;gBAC1E,UAAU,YAAA;gBACV,KAAK,EAAE,oBAAoB,CAAC,UAAU,CAAC;gBACvC,KAAK,EAAE,gBAAgB,CAAC,UAAU,CAAC,IAAI,GAAG;gBAC1C,QAAQ,EAAE,cAAc;aACzB,CAAC;QALyE,CAKzE,CAAC,CAAC;IACN,CAAC,EAAE,CAAC,gBAAgB,CAAC,CAAC,CAAC;IAEvB,SAAS,CAAC;QACR,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE;YACzB,eAAe,CAAC,EAAE,CAAC,CAAC;YACpB,OAAO;SACR;QAED,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,UAAC,KAAK,IAAK,OAAA,KAAK,CAAC,UAAU,KAAK,YAAY,EAAjC,CAAiC,CAAC,EAAE;YACrE,eAAe,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;SAC9C;IACH,CAAC,EAAE,CAAC,YAAY,EAAE,aAAa,CAAC,CAAC,CAAC;IAElC,IAAM,UAAU,GAAG,OAAO,CACxB;QACE,OAAA,YAAY,CAAC,IAAI,CACf,UAAC,OAAO;;YACN,OAAA,OAAO,CAAC,QAAQ;gBAChB,CAAC,cAAc,CAAC,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,MAAA,MAAA,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,mCAAI,OAAO,CAAC,KAAK,mCAAI,IAAI,CAAC,CAAA;SAAA,CAC9F;IAJD,CAIC,EACH,CAAC,UAAU,EAAE,YAAY,EAAE,WAAW,CAAC,CACxC,CAAC;IAEF,IAAM,qBAAqB,GAAG,OAAO,CAAC;QACpC,IAAM,aAAa,GAAG,aAAa,CAAC,IAAI,CAAC,UAAC,KAAK,IAAK,OAAA,KAAK,CAAC,UAAU,KAAK,YAAY,EAAjC,CAAiC,CAAC,CAAC;QACvF,IAAI,CAAC,aAAa;YAAE,OAAO,EAAE,CAAC;QAE9B,IAAM,OAAO,GAAG,IAAI,GAAG,EAAoC,CAAC;QAC5D,aAAa,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAC,OAAO;;YACrC,IAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,IAAI,SAAS,CAAC;YAC5C,IAAM,OAAO,GAAG,MAAA,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,mCAAI,EAAE,CAAC;YAC5C,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACtB,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QACjC,CAAC,CAAC,CAAC;QAEH,OAAO,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,UAAC,EAAyB;gBAAxB,QAAQ,QAAA,EAAE,aAAa,QAAA;YAAM,OAAA,CAAC;gBACvE,GAAG,EAAE,QAAQ;gBACb,KAAK,EAAE,oBAAoB,CAAC,QAAQ,CAAC;gBACrC,QAAQ,EAAE,aAAa,CAAC,IAAI,CAAC,UAAC,IAAI,EAAE,KAAK;;oBACvC,IAAM,QAAQ,GAAG,MAAA,IAAI,CAAC,SAAS,mCAAI,MAAM,CAAC,gBAAgB,CAAC;oBAC3D,IAAM,SAAS,GAAG,MAAA,KAAK,CAAC,SAAS,mCAAI,MAAM,CAAC,gBAAgB,CAAC;oBAC7D,IAAI,QAAQ,KAAK,SAAS;wBAAE,OAAO,QAAQ,GAAG,SAAS,CAAC;oBACxD,OAAO,CAAC,MAAA,IAAI,CAAC,KAAK,mCAAI,IAAI,CAAC,GAAG,CAAC,CAAC,aAAa,CAAC,MAAA,KAAK,CAAC,KAAK,mCAAI,KAAK,CAAC,GAAG,CAAC,CAAC;gBAC1E,CAAC,CAAC;aACH,CAAC;QATsE,CAStE,CAAC,CAAC;IACN,CAAC,EAAE,CAAC,YAAY,EAAE,aAAa,CAAC,CAAC,CAAC;IAElC,IAAM,WAAW,GAAG,UAAC,GAAW,EAAE,KAAwB;QACxD,aAAa,CAAC,UAAC,OAAO;;YAAK,OAAA,uBAAM,OAAO,gBAAG,GAAG,IAAG,KAAK,OAAG;QAA9B,CAA8B,CAAC,CAAC;IAC7D,CAAC,CAAC;IAEF,IAAM,eAAe,GAAG,UAAC,GAAW,EAAE,IAAiB;QACrD,IAAI,CAAC,IAAI,EAAE;YACT,IAAI,YAAY,CAAC,GAAG,CAAC,EAAE;gBACrB,GAAG,CAAC,eAAe,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC;aACxC;YACD,eAAe,CAAC,UAAC,OAAO;gBACtB,IAAM,IAAI,gBAAQ,OAAO,CAAE,CAAC;gBAC5B,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC;gBACjB,OAAO,IAAI,CAAC;YACd,CAAC,CAAC,CAAC;YACH,WAAW,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;YACvB,OAAO;SACR;QAED,IAAI,IAAI,CAAC,IAAI,GAAG,CAAC,GAAG,IAAI,GAAG,IAAI,EAAE;YAC/B,QAAQ,CAAC,SAAS,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,gBAAgB,EAAE,MAAM,EAAE,0BAA0B,EAAE,CAAC,CAAC,CAAC;YAC1G,OAAO;SACR;QAED,IAAI,YAAY,CAAC,GAAG,CAAC,EAAE;YACrB,GAAG,CAAC,eAAe,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC;SACxC;QAED,IAAM,OAAO,GAAG,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;QAC1C,eAAe,CAAC,UAAC,OAAO;;YAAK,OAAA,uBAAM,OAAO,gBAAG,GAAG,IAAG,OAAO,OAAG;QAAhC,CAAgC,CAAC,CAAC;QAC/D,WAAW,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IACzB,CAAC,CAAC;IAEF,SAAS,CACP,cAAM,OAAA;QACJ,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,UAAC,OAAO,IAAK,OAAA,GAAG,CAAC,eAAe,CAAC,OAAO,CAAC,EAA5B,CAA4B,CAAC,CAAC;IACjF,CAAC,EAFK,CAEL,EACD,CAAC,YAAY,CAAC,CACf,CAAC;IAEF,IAAM,UAAU,GAAG;;;;;;;oBAET,yBAA4E,EAAE,CAAC;oBAC/E,aAAW,IAAI,QAAQ,EAAE,CAAC;oBAEhC,YAAY,CAAC,OAAO,CAAC,UAAC,OAAO;;wBAC3B,IAAI,CAAC,OAAO,CAAC,QAAQ;4BAAE,OAAO;wBAE9B,IAAM,SAAS,GAAG,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;wBAC1C,IAAM,YAAY,GAAG,MAAA,MAAA,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,mCAAI,OAAO,CAAC,KAAK,mCAAI,IAAI,CAAC;wBAEvE,IAAI,SAAS,YAAY,IAAI,EAAE;4BAC7B,UAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;4BACxC,sBAAoB,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;4BAC3E,OAAO;yBACR;wBAED,IAAI,CAAC,cAAc,CAAC,SAAS,EAAE,YAAY,CAAC,EAAE;4BAC5C,sBAAoB,CAAC,IAAI,CAAC;gCACxB,GAAG,EAAE,OAAO,CAAC,GAAG;gCAChB,KAAK,EAAE,cAAc,CAAC,SAAS,CAAC;gCAChC,IAAI,EAAE,QAAQ;6BACf,CAAC,CAAC;yBACJ;oBACH,CAAC,CAAC,CAAC;oBAEH,IAAI,CAAC,sBAAoB,CAAC,MAAM,EAAE;wBAChC,QAAQ,CAAC,SAAS,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,0BAA0B,EAAE,CAAC,CAAC,CAAC;wBACxG,sBAAO;qBACR;oBAED,UAAQ,CAAC,MAAM,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,sBAAoB,CAAC,CAAC,CAAC;oBACjD,qBAAM,uBAAuB,CAAC,EAAE,IAAI,EAAE,UAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,EAAA;;oBAArE,QAAQ,GAAG,SAA0D;oBAE3E,IAAI,CAAA,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,UAAU,MAAK,GAAG,EAAE;wBAChC,QAAQ,CAAC,SAAS,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,kBAAkB,EAAE,CAAC,CAAC,CAAC;wBAC7F,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE;4BACjC,MAAM,CAAC,aAAa,CAAC,IAAI,WAAW,CAAC,wBAAwB,CAAC,CAAC,CAAC;yBACjE;qBACF;yBAAM;wBACL,QAAQ,CAAC,SAAS,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,cAAc,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC;qBACpH;oBAED,qBAAM,OAAO,EAAE,EAAA;;oBAAf,SAAe,CAAC;oBAChB,eAAe,CAAC,EAAE,CAAC,CAAC;;;;oBAEpB,QAAQ,CAAC,SAAS,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,CAAA,MAAA,OAAK,aAAL,OAAK,uBAAL,OAAK,CAAE,IAAI,0CAAE,OAAO,KAAI,cAAc,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC;;;;;SAE9I,CAAC;IAEF,IAAM,UAAU,GAAG,aAAa,CAAC,GAAG,CAAC,UAAC,KAAK,IAAK,OAAA,CAAC;QAC/C,KAAK,EAAE,KAAK,CAAC,UAAU;QACvB,KAAK,EAAE,CACL,gBAAM,SAAS,EAAE,MAAM,CAAC,SAAS,aAC/B,eAAM,SAAS,EAAE,MAAM,CAAC,cAAc,YAAG,KAAK,CAAC,KAAK,GAAQ,EAC5D,gBAAM,SAAS,EAAE,MAAM,CAAC,aAAa,aACnC,eAAM,SAAS,EAAE,MAAM,CAAC,cAAc,YAAG,KAAK,CAAC,KAAK,GAAQ,EAC5D,gBAAM,SAAS,EAAE,MAAM,CAAC,aAAa,aAAG,KAAK,CAAC,QAAQ,CAAC,MAAM,iBAAiB,IACzE,IACF,CACR;QACD,OAAO,EAAE,CACP,wBACG,qBAAqB,CAAC,MAAM,CAAC,CAAC,CAAC,CAC9B,qBAAqB,CAAC,GAAG,CAAC,UAAC,KAAK,IAAK,OAAA,CACnC,kBAAyB,SAAS,EAAE,MAAM,CAAC,YAAY,YACrD,eAAK,SAAS,EAAE,MAAM,CAAC,SAAS,aAC9B,cAAK,SAAS,EAAE,MAAM,CAAC,WAAW,YAChC,0BACE,aAAI,SAAS,EAAE,MAAM,CAAC,UAAU,YAAG,KAAK,CAAC,KAAK,GAAM,EACpD,eAAK,SAAS,EAAE,MAAM,CAAC,SAAS,aAAG,KAAK,CAAC,QAAQ,CAAC,MAAM,WAAO,KAAK,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,IAAO,IACxG,GACF,EACN,cAAK,SAAS,EAAE,MAAM,CAAC,SAAS,YAC7B,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAC,OAAO;;gCAC1B,IAAM,KAAK,GAAG,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;gCACtC,IAAM,WAAW,GAAG,OAAO,CAAC,KAAK,IAAI,oBAAoB,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;gCACvE,IAAM,eAAe,GAAG,CAAA,MAAA,OAAO,CAAC,QAAQ,0CAAE,IAAI,EAAE,KAAI,EAAE,CAAC;gCACvD,IAAM,kBAAkB,GAAG,qBAAqB,CAAC,OAAO,CAAC,CAAC;gCAC1D,IAAM,cAAc,GAAG,kBAAkB,CAAC,CAAC,CAAC,qBAAqB,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;gCAC7F,IAAM,qBAAqB,GAAG,wBAAwB,CAAC,OAAO,EAAE,kBAAkB,EAAE,cAAc,CAAC,CAAC;gCACpG,IAAM,mBAAmB,GAA6B;oCACpD,OAAO,SAAA;oCACP,KAAK,OAAA;oCACL,WAAW,aAAA;oCACX,UAAU,YAAA;oCACV,QAAQ,EAAE,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC;oCACnC,WAAW,aAAA;oCACX,eAAe,iBAAA;iCAChB,CAAC;gCACF,OAAO,CACL,eAAuB,SAAS,EAAE,MAAM,CAAC,UAAU,aACjD,eAAK,SAAS,EAAE,MAAM,CAAC,gBAAgB,aACrC,eAAK,SAAS,EAAE,MAAM,CAAC,gBAAgB,aACrC,YAAG,SAAS,EAAE,MAAM,CAAC,YAAY,YAAG,WAAW,GAAK,EACnD,eAAe,CAAC,CAAC,CAAC,CACjB,MAAC,YAAY,eACX,KAAC,mBAAmB,IAAC,OAAO,kBAC1B,iBACE,IAAI,EAAC,QAAQ,EACb,SAAS,EAAE,MAAM,CAAC,iBAAiB,gBACvB,wBAAiB,WAAW,CAAE,YAE1C,KAAC,UAAU,IAAC,IAAI,EAAE,EAAE,wBAAgB,GAC7B,GACW,EACtB,KAAC,mBAAmB,IAAC,KAAK,EAAC,OAAO,EAAC,SAAS,EAAE,MAAM,CAAC,kBAAkB,YACpE,eAAe,GACI,IACT,CAChB,CAAC,CAAC,CAAC,IAAI,EACP,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CACnB,MAAC,YAAY,eACX,KAAC,mBAAmB,IAAC,OAAO,kBAC1B,yBACE,KAAC,QAAQ,IAAC,IAAI,EAAC,MAAM,0BAAqB,GACrC,GACa,EACtB,KAAC,mBAAmB,sGAEE,IACT,CAChB,CAAC,CAAC,CAAC,IAAI,IACJ,EACL,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,YAAG,SAAS,EAAE,MAAM,CAAC,kBAAkB,YAAG,OAAO,CAAC,WAAW,GAAK,CAAC,CAAC,CAAC,IAAI,IAC5F,EAEL,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CACnB,OAAO,CAAC,WAAW,KAAK,QAAQ,CAAC,CAAC,CAAC,CACjC,qBAAqB,CAAC,CAAC,CAAC,CACtB,cAAK,SAAS,EAAE,MAAM,CAAC,aAAa,YAClC,eAAM,SAAS,EAAE,MAAM,CAAC,iBAAiB,YAAG,qBAAqB,GAAQ,GACrE,CACP,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,CACnB,CAAC;4CACC,IAAM,sBAAsB,GAAG,cAAoC,CAAC;4CACpE,OAAO,KAAC,sBAAsB,eAAK,mBAAmB,EAAI,CAAC;wCAC7D,CAAC,CAAC,EAAE,CACL,CAAC,CAAC,CAAC,IAAI,CACT,CAAC,CAAC,CAAC,OAAO,CAAC,WAAW,KAAK,aAAa,IAAI,KAAK,CAAC,CAAC,CAAC,CACnD,cAAK,SAAS,EAAE,MAAM,CAAC,YAAY,YACjC,KAAC,kBAAkB,IAAC,GAAG,EAAE,iBAAiB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,GAAI,GACzD,CACP,CAAC,CAAC,CAAC,CACF,cAAK,SAAS,EAAE,MAAM,CAAC,aAAa,YAClC,eAAM,SAAS,EAAE,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,YACnG,mBAAmB,CAAC,OAAO,EAAE,KAAK,CAAC,GAC/B,GACH,CACP,CACF,CAAC,CAAC,CAAC,CACF,eAAK,SAAS,EAAE,UAAG,MAAM,CAAC,YAAY,cAAI,OAAO,CAAC,WAAW,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC,CAAC,EAAE,CAAE,aAC1G,OAAO,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,CACnC,eAAK,SAAS,EAAE,MAAM,CAAC,OAAO,aAC5B,KAAC,WAAW,IAAC,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,EAAE,QAAQ,EAAE,UAAC,OAAO,IAAK,OAAA,WAAW,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,EAAjC,CAAiC,GAAI,EAClG,eAAM,SAAS,EAAE,MAAM,CAAC,QAAQ,YAAG,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,GAAQ,IACrE,CACP,CAAC,CAAC,CAAC,IAAI,EAEP,OAAO,CAAC,WAAW,KAAK,WAAW,CAAC,CAAC,CAAC,CACrC,KAAC,UAAU,IACT,IAAI,EAAC,MAAM,EACX,KAAK,EAAE,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EACzC,WAAW,EAAE,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,KAAK,EACjD,QAAQ,EAAE,UAAC,KAAU,IAAK,OAAA,WAAW,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,EAA5C,CAA4C,GACtE,CACH,CAAC,CAAC,CAAC,IAAI,EAEP,OAAO,CAAC,WAAW,KAAK,UAAU,CAAC,CAAC,CAAC,CACpC,KAAC,aAAa,IACZ,IAAI,EAAE,CAAC,EACP,KAAK,EAAE,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,EAC9F,WAAW,EAAE,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,KAAK,EACjD,QAAQ,EAAE,UAAC,KAAU,IAAK,OAAA,WAAW,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,EAA5C,CAA4C,GACtE,CACH,CAAC,CAAC,CAAC,IAAI,EAEP,OAAO,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,CACnC,KAAC,UAAU,IACT,IAAI,EAAC,QAAQ,EACb,KAAK,EAAE,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EACzC,WAAW,EAAE,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,KAAK,EACjD,QAAQ,EAAE,UAAC,KAAU,IAAK,OAAA,WAAW,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC,MAAM,CAAC,KAAK,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAvF,CAAuF,GACjH,CACH,CAAC,CAAC,CAAC,IAAI,EAEP,OAAO,CAAC,WAAW,KAAK,iBAAiB,CAAC,CAAC,CAAC,CAC3C,KAAC,WAAW,IACV,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,EAAE,EAC9B,WAAW,EAAE,OAAO,CAAC,WAAW,IAAI,QAAQ,EAC5C,MAAM,EAAE,KAAK,EACb,QAAQ,EAAE,UAAC,KAAK,IAAK,OAAA,WAAW,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC,KAAK,CAAC,EAArC,CAAqC,GAC1D,CACH,CAAC,CAAC,CAAC,IAAI,EAEP,OAAO,CAAC,WAAW,KAAK,MAAM,IAAI,OAAO,CAAC,WAAW,KAAK,UAAU,CAAC,CAAC,CAAC,CACtE,KAAC,eAAe,IACd,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAChD,cAAc,EAAE,OAAO,CAAC,WAAW,KAAK,UAAU,EAClD,UAAU,EAAE,OAAO,CAAC,WAAW,KAAK,UAAU,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,YAAY,EACrF,QAAQ,EAAE,UAAC,IAAiB,IAAK,OAAA,WAAW,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,YAAY,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,EAA1E,CAA0E,GAC3G,CACH,CAAC,CAAC,CAAC,IAAI,EAEP,OAAO,CAAC,WAAW,KAAK,aAAa,CAAC,CAAC,CAAC,CACvC,eAAK,SAAS,EAAE,MAAM,CAAC,UAAU,aAC/B,eAAK,SAAS,EAAE,MAAM,CAAC,aAAa,aAClC,iBAAO,SAAS,EAAE,MAAM,CAAC,aAAa,aACpC,gBACE,SAAS,EAAE,MAAM,CAAC,UAAU,EAC5B,IAAI,EAAC,MAAM,EACX,MAAM,EAAC,4BAA4B,EACnC,QAAQ,EAAE,UAAC,KAAK,gBAAK,OAAA,eAAe,CAAC,OAAO,CAAC,GAAG,EAAE,MAAA,MAAA,KAAK,CAAC,MAAM,CAAC,KAAK,0CAAG,CAAC,CAAC,mCAAI,IAAI,CAAC,CAAA,EAAA,GAClF,EACF,KAAC,gCAAgC,IAAC,IAAI,EAAC,4CAA4C,GAAG,IAChF,EACP,CAAC,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,CACtC,cAAK,SAAS,EAAE,MAAM,CAAC,YAAY,YACjC,KAAC,kBAAkB,IAAC,GAAG,EAAE,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,iBAAiB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,GAAI,GACtF,CACP,CAAC,CAAC,CAAC,CACF,cAAK,SAAS,EAAE,MAAM,CAAC,eAAe,kDAAyC,CAChF,IACG,EACL,CAAC,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,CACtC,KAAC,yBAAyB,IAAC,OAAO,EAAE,cAAM,OAAA,eAAe,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,EAAlC,CAAkC,GAAI,CACjF,CAAC,CAAC,CAAC,IAAI,IACJ,CACP,CAAC,CAAC,CAAC,IAAI,EAEP,OAAO,CAAC,WAAW,KAAK,QAAQ,CAAC,CAAC,CAAC,CAClC,qBAAqB,CAAC,CAAC,CAAC,CACtB,cAAK,SAAS,EAAE,MAAM,CAAC,aAAa,YAClC,eAAM,SAAS,EAAE,MAAM,CAAC,iBAAiB,YAAG,qBAAqB,GAAQ,GACrE,CACP,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,CACnB,CAAC;oDACC,IAAM,sBAAsB,GAAG,cAAoC,CAAC;oDACpE,OAAO,KAAC,sBAAsB,eAAK,mBAAmB,EAAI,CAAC;gDAC7D,CAAC,CAAC,EAAE,CACL,CAAC,CAAC,CAAC,IAAI,CACT,CAAC,CAAC,CAAC,IAAI,IACJ,CACP,KAzJO,OAAO,CAAC,GAAG,CA0Jf,CACP,CAAC;4BACJ,CAAC,CAAC,GACE,IACF,IAxLM,KAAK,CAAC,GAAG,CAyLb,CACX,EA3LoC,CA2LpC,CAAC,CACH,CAAC,CAAC,CAAC,CACF,cAAK,SAAS,EAAE,MAAM,CAAC,UAAU,sDAA6C,CAC/E,GACG,CACP;KACF,CAAC,EA/M8C,CA+M9C,CAAC,CAAC;IAEJ,OAAO,CACL,eAAK,SAAS,EAAE,MAAM,CAAC,IAAI,aACzB,eAAK,SAAS,EAAE,sBAAe,MAAM,CAAC,UAAU,CAAE,aAChD,eAAK,SAAS,EAAE,MAAM,CAAC,WAAW,aAChC,cAAK,SAAS,EAAC,oBAAoB,yBAAe,EAClD,cAAK,SAAS,EAAE,MAAM,CAAC,QAAQ,sFAA6E,EAC5G,eAAK,SAAS,EAAE,MAAM,CAAC,YAAY,aACjC,gBAAM,SAAS,EAAE,MAAM,CAAC,WAAW,aAAG,aAAa,CAAC,MAAM,aAAS,aAAa,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,IAAQ,EAChH,gBAAM,SAAS,EAAE,MAAM,CAAC,WAAW,aAAG,kBAAkB,cAAU,kBAAkB,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,IAAQ,EAC7G,kBACE,IAAI,EAAC,QAAQ,EACb,SAAS,EAAE,UAAG,MAAM,CAAC,WAAW,cAAI,MAAM,CAAC,iBAAiB,cAAI,UAAU,KAAK,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAAE,CAAE,kBAC7G,UAAU,KAAK,UAAU,EACvC,OAAO,EAAE,cAAM,OAAA,aAAa,CAAC,UAAC,OAAO,IAAK,OAAA,CAAC,OAAO,KAAK,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC,EAA7C,CAA6C,CAAC,EAAzE,CAAyE,aAEvF,qBAAqB,iBACf,IACL,IACF,EACN,eAAK,SAAS,EAAE,MAAM,CAAC,YAAY,aACjC,eAAK,SAAS,EAAE,MAAM,CAAC,UAAU,aAC/B,KAAC,MAAM,IAAC,IAAI,EAAE,EAAE,GAAI,EACpB,KAAC,UAAU,IACT,SAAS,EAAE,MAAM,CAAC,WAAW,EAC7B,KAAK,EAAE,UAAU,EACjB,WAAW,EAAC,qCAAqC,EACjD,QAAQ,EAAE,UAAC,KAAU,IAAK,OAAA,aAAa,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,EAAjC,CAAiC,GAC3D,IACE,EACL,UAAU,CAAC,CAAC,CAAC,CACZ,gBAAM,SAAS,EAAE,MAAM,CAAC,WAAW,aAChC,gBAAgB,CAAC,MAAM,aAAS,gBAAgB,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,IACpE,CACR,CAAC,CAAC,CAAC,IAAI,IACJ,EACN,eAAK,SAAS,EAAE,MAAM,CAAC,cAAc,aACnC,eAAK,SAAS,EAAE,MAAM,CAAC,MAAM,aAC3B,iBACE,IAAI,EAAC,QAAQ,EACb,SAAS,EAAE,UAAG,MAAM,CAAC,oBAAoB,cAAI,UAAU,KAAK,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,0BAA0B,CAAC,CAAC,CAAC,EAAE,CAAE,kBACpG,UAAU,KAAK,WAAW,gBAC5B,UAAU,KAAK,WAAW,CAAC,CAAC,CAAC,0BAA0B,CAAC,CAAC,CAAC,yBAAyB,EAC/F,OAAO,EAAE,cAAM,OAAA,aAAa,CAAC,UAAC,OAAO,IAAK,OAAA,CAAC,OAAO,KAAK,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,WAAW,CAAC,EAA/C,CAA+C,CAAC,EAA3E,CAA2E,YAE1F,KAAC,QAAQ,IAAC,IAAI,EAAC,MAAM,0BAAqB,GACnC,EACT,eAAM,SAAS,EAAE,UAAU,KAAK,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,CAAC,SAAS,YAC/E,UAAU,KAAK,WAAW,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,sBAAsB,GAC3E,EACP,MAAC,YAAY,eACX,KAAC,mBAAmB,IAAC,OAAO,kBAC1B,iBAAQ,IAAI,EAAC,QAAQ,EAAC,SAAS,EAAE,MAAM,CAAC,YAAY,gBAAa,0BAA0B,kBAElF,GACW,EACtB,KAAC,mBAAmB,yIAEE,IACT,IACX,EACN,KAAC,WAAW,IAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,QAAQ,EAAC,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC,UAAU,qBAEjF,IACV,IACF,EAEN,cAAK,SAAS,EAAE,MAAM,CAAC,SAAS,YAC7B,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CACnB,KAAC,aAAa,IACZ,IAAI,EAAE,UAAU,EAChB,KAAK,EAAE,YAAY,EACnB,aAAa,EAAE,eAAe,EAC9B,SAAS,EAAE,MAAM,CAAC,QAAQ,EAC1B,aAAa,EAAE,MAAM,CAAC,OAAO,EAC7B,cAAc,EAAE,MAAM,CAAC,QAAQ,EAC/B,WAAW,EAAC,UAAU,GACtB,CACH,CAAC,CAAC,CAAC,CACF,cAAK,SAAS,EAAE,MAAM,CAAC,UAAU,2CAAkC,CACpE,GACG,IACF,CACP,CAAC;AACJ,CAAC","sourcesContent":["import { useEffect, useMemo, useState, type ComponentType } from \"react\";\nimport { CircleHelp, Search } from \"lucide-react\";\nimport { useDispatch } from \"react-redux\";\nimport { ERROR_MESSAGES } from \"../../constants/error-messages\";\nimport { normalizeAssetUrl } from \"../../helpers/assetUrl\";\nimport { getExtensionComponent } from \"../../helpers/registry\";\nimport {\n extractSettingsList,\n getSettingOptionLabel,\n getSettingsMap,\n humanizeSettingToken,\n type AdminSettingDefinition,\n} from \"../../helpers/settingsPayload\";\nimport type { SolidSettingsWidgetProps } from \"../../types/solid-core\";\nimport { showToast } from \"../../redux/features/toastSlice\";\nimport {\n useBulkUpdateSolidSettingsMutation,\n useGetSolidSettingsQuery,\n} from \"../../redux/api/solidSettingsApi\";\nimport {\n SolidButton,\n SolidDatePicker,\n SolidInput,\n SolidSelect,\n SolidSwitch,\n SolidTabGroup,\n SolidTag,\n SolidTextarea,\n SolidTooltip,\n SolidTooltipContent,\n SolidTooltipTrigger,\n} from \"../shad-cn-ui\";\nimport { SettingDropzoneActivePlaceholder } from \"./SolidSettings/SettingDropzoneActivePlaceholder\";\nimport { SettingsImageRemoveButton } from \"./SolidSettings/SettingsImageRemoveButton\";\nimport { SolidUploadedImage } from \"./SolidSettings/SolidUploadedImage\";\nimport styles from \"./SettingsComponent.module.css\";\n\ntype SettingsFormValue = string | number | boolean | null | File;\ntype SettingsFilterMode = \"all\" | \"read-only\" | \"editable\";\n\nfunction toModuleInitials(moduleName: string) {\n return moduleName\n .split(/[-_\\s]+/)\n .filter(Boolean)\n .map((token) => token[0]?.toUpperCase())\n .join(\"\")\n .slice(0, 2);\n}\n\nfunction serializeValue(value: unknown) {\n if (value === null || value === undefined) return \"\";\n if (typeof value === \"string\") return value;\n return JSON.stringify(value);\n}\n\nfunction areValuesEqual(left: unknown, right: unknown) {\n if (left instanceof File || right instanceof File) return false;\n return serializeValue(left) === serializeValue(right);\n}\n\nfunction formatReadonlyValue(setting: AdminSettingDefinition, value: unknown) {\n if (value === null || value === undefined || value === \"\") {\n return \"Not set\";\n }\n\n if (setting.controlType === \"boolean\") {\n return value ? \"Enabled\" : \"Disabled\";\n }\n\n if (setting.controlType === \"selectionStatic\") {\n return getSettingOptionLabel(setting, value);\n }\n\n if (setting.controlType === \"mediaSingle\") {\n return String(value);\n }\n\n if (typeof value === \"object\") {\n return JSON.stringify(value, null, 2);\n }\n\n return String(value);\n}\n\nfunction getSettingsWidgetName(setting: AdminSettingDefinition) {\n return setting.settingsWidget || \"\";\n}\n\nfunction getCustomWidgetErrorText(setting: AdminSettingDefinition, widgetName: string, settingsWidget: ComponentType<any> | null) {\n if (setting.controlType !== \"custom\") return null;\n if (!widgetName) {\n return `controlType is \"custom\" for setting \"${setting.key}\" but no settingsWidget is specified.`;\n }\n if (!settingsWidget) {\n return `Widget \"${widgetName}\" is not registered for setting \"${setting.key}\".`;\n }\n return null;\n}\n\nexport function SettingsComponent() {\n const dispatch = useDispatch();\n const { data: settingsResponse, refetch } = useGetSolidSettingsQuery(undefined);\n const [bulkUpdateSolidSettings] = useBulkUpdateSolidSettingsMutation();\n const [searchTerm, setSearchTerm] = useState(\"\");\n const [filterMode, setFilterMode] = useState<SettingsFilterMode>(\"all\");\n const [activeModule, setActiveModule] = useState(\"\");\n const [formValues, setFormValues] = useState<Record<string, SettingsFormValue>>({});\n const [filePreviews, setFilePreviews] = useState<Record<string, string>>({});\n\n const settingsList = useMemo(\n () => extractSettingsList(settingsResponse).filter((setting) => setting.level !== \"internal-user\"),\n [settingsResponse],\n );\n const settingsMap = useMemo(() => getSettingsMap(settingsResponse), [settingsResponse]);\n const totalSettingsCount = settingsList.length;\n const editableSettingsCount = useMemo(\n () => settingsList.filter((setting) => setting.editable).length,\n [settingsList],\n );\n\n useEffect(() => {\n if (!settingsList.length) return;\n const nextValues = Object.fromEntries(\n settingsList.map((setting) => [setting.key, settingsMap[setting.key] ?? setting.value ?? null]),\n );\n setFormValues(nextValues);\n }, [settingsList, settingsMap]);\n\n const filteredSettings = useMemo(() => {\n const scopedSettings = settingsList.filter((setting) => {\n if (filterMode === \"read-only\") return !setting.editable;\n if (filterMode === \"editable\") return setting.editable;\n return true;\n });\n const query = searchTerm.trim().toLowerCase();\n if (!query) return scopedSettings;\n\n return scopedSettings.filter((setting) => {\n const haystack = [\n setting.moduleName,\n setting.group,\n setting.key,\n setting.label,\n setting.description,\n setting.helpText,\n setting.options?.map((option) => `${option.label} ${option.value}`).join(\" \"),\n ]\n .filter(Boolean)\n .join(\" \")\n .toLowerCase();\n\n return haystack.includes(query);\n });\n }, [filterMode, searchTerm, settingsList]);\n\n const moduleEntries = useMemo(() => {\n const grouped = new Map<string, AdminSettingDefinition[]>();\n filteredSettings.forEach((setting) => {\n const current = grouped.get(setting.moduleName) ?? [];\n current.push(setting);\n grouped.set(setting.moduleName, current);\n });\n\n return Array.from(grouped.entries()).map(([moduleName, moduleSettings]) => ({\n moduleName,\n label: humanizeSettingToken(moduleName),\n badge: toModuleInitials(moduleName) || \"S\",\n settings: moduleSettings,\n }));\n }, [filteredSettings]);\n\n useEffect(() => {\n if (!moduleEntries.length) {\n setActiveModule(\"\");\n return;\n }\n\n if (!moduleEntries.some((entry) => entry.moduleName === activeModule)) {\n setActiveModule(moduleEntries[0].moduleName);\n }\n }, [activeModule, moduleEntries]);\n\n const hasChanges = useMemo(\n () =>\n settingsList.some(\n (setting) =>\n setting.editable &&\n !areValuesEqual(formValues[setting.key], settingsMap[setting.key] ?? setting.value ?? null),\n ),\n [formValues, settingsList, settingsMap],\n );\n\n const groupedModuleSettings = useMemo(() => {\n const currentModule = moduleEntries.find((entry) => entry.moduleName === activeModule);\n if (!currentModule) return [];\n\n const grouped = new Map<string, AdminSettingDefinition[]>();\n currentModule.settings.forEach((setting) => {\n const groupKey = setting.group || \"general\";\n const current = grouped.get(groupKey) ?? [];\n current.push(setting);\n grouped.set(groupKey, current);\n });\n\n return Array.from(grouped.entries()).map(([groupKey, groupSettings]) => ({\n key: groupKey,\n label: humanizeSettingToken(groupKey),\n settings: groupSettings.sort((left, right) => {\n const leftSort = left.sortOrder ?? Number.MAX_SAFE_INTEGER;\n const rightSort = right.sortOrder ?? Number.MAX_SAFE_INTEGER;\n if (leftSort !== rightSort) return leftSort - rightSort;\n return (left.label ?? left.key).localeCompare(right.label ?? right.key);\n }),\n }));\n }, [activeModule, moduleEntries]);\n\n const updateValue = (key: string, value: SettingsFormValue) => {\n setFormValues((current) => ({ ...current, [key]: value }));\n };\n\n const updateFileValue = (key: string, file: File | null) => {\n if (!file) {\n if (filePreviews[key]) {\n URL.revokeObjectURL(filePreviews[key]);\n }\n setFilePreviews((current) => {\n const next = { ...current };\n delete next[key];\n return next;\n });\n updateValue(key, null);\n return;\n }\n\n if (file.size > 2 * 1024 * 1024) {\n dispatch(showToast({ severity: \"error\", summary: \"File too large\", detail: \"Maximum file size is 2MB\" }));\n return;\n }\n\n if (filePreviews[key]) {\n URL.revokeObjectURL(filePreviews[key]);\n }\n\n const preview = URL.createObjectURL(file);\n setFilePreviews((current) => ({ ...current, [key]: preview }));\n updateValue(key, file);\n };\n\n useEffect(\n () => () => {\n Object.values(filePreviews).forEach((preview) => URL.revokeObjectURL(preview));\n },\n [filePreviews],\n );\n\n const handleSave = async () => {\n try {\n const updatedSettingsArray: Array<{ key: string; value: string; type: string }> = [];\n const formData = new FormData();\n\n settingsList.forEach((setting) => {\n if (!setting.editable) return;\n\n const nextValue = formValues[setting.key];\n const currentValue = settingsMap[setting.key] ?? setting.value ?? null;\n\n if (nextValue instanceof File) {\n formData.append(setting.key, nextValue);\n updatedSettingsArray.push({ key: setting.key, value: \"\", type: \"system\" });\n return;\n }\n\n if (!areValuesEqual(nextValue, currentValue)) {\n updatedSettingsArray.push({\n key: setting.key,\n value: serializeValue(nextValue),\n type: \"system\",\n });\n }\n });\n\n if (!updatedSettingsArray.length) {\n dispatch(showToast({ severity: \"success\", summary: \"No Changes\", detail: \"No settings were updated\" }));\n return;\n }\n\n formData.append(\"settings\", JSON.stringify(updatedSettingsArray));\n const response = await bulkUpdateSolidSettings({ data: formData }).unwrap();\n\n if (response?.statusCode === 200) {\n dispatch(showToast({ severity: \"success\", summary: \"Updated\", detail: \"Settings updated\" }));\n if (typeof window !== \"undefined\") {\n window.dispatchEvent(new CustomEvent(\"solid:settings-updated\"));\n }\n } else {\n dispatch(showToast({ severity: \"error\", summary: ERROR_MESSAGES.FAILED, detail: ERROR_MESSAGES.SOMETHING_WRONG }));\n }\n\n await refetch();\n setFilePreviews({});\n } catch (error: any) {\n dispatch(showToast({ severity: \"error\", summary: ERROR_MESSAGES.FAILED, detail: error?.data?.message || ERROR_MESSAGES.SOMETHING_WRONG }));\n }\n };\n\n const moduleTabs = moduleEntries.map((entry) => ({\n value: entry.moduleName,\n label: (\n <span className={styles.moduleTab}>\n <span className={styles.moduleTabBadge}>{entry.badge}</span>\n <span className={styles.moduleTabText}>\n <span className={styles.moduleTabLabel}>{entry.label}</span>\n <span className={styles.moduleTabMeta}>{entry.settings.length} settings</span>\n </span>\n </span>\n ),\n content: (\n <div>\n {groupedModuleSettings.length ? (\n groupedModuleSettings.map((group) => (\n <section key={group.key} className={styles.groupSection}>\n <div className={styles.groupCard}>\n <div className={styles.groupHeader}>\n <div>\n <h3 className={styles.groupTitle}>{group.label}</h3>\n <div className={styles.groupMeta}>{group.settings.length} item{group.settings.length === 1 ? \"\" : \"s\"}</div>\n </div>\n </div>\n <div className={styles.groupBody}>\n {group.settings.map((setting) => {\n const value = formValues[setting.key];\n const settingName = setting.label || humanizeSettingToken(setting.key);\n const settingHelpText = setting.helpText?.trim() || \"\";\n const settingsWidgetName = getSettingsWidgetName(setting);\n const SettingsWidget = settingsWidgetName ? getExtensionComponent(settingsWidgetName) : null;\n const customWidgetErrorText = getCustomWidgetErrorText(setting, settingsWidgetName, SettingsWidget);\n const settingsWidgetProps: SolidSettingsWidgetProps = {\n setting,\n value,\n settingsMap,\n formValues,\n editable: Boolean(setting.editable),\n updateValue,\n updateFileValue,\n };\n return (\n <div key={setting.key} className={styles.settingRow}>\n <div className={styles.settingLabelWrap}>\n <div className={styles.settingLabelLine}>\n <p className={styles.settingLabel}>{settingName}</p>\n {settingHelpText ? (\n <SolidTooltip>\n <SolidTooltipTrigger asChild>\n <button\n type=\"button\"\n className={styles.settingHelpButton}\n aria-label={`Show help for ${settingName}`}\n >\n <CircleHelp size={14} aria-hidden />\n </button>\n </SolidTooltipTrigger>\n <SolidTooltipContent align=\"start\" className={styles.settingHelpTooltip}>\n {settingHelpText}\n </SolidTooltipContent>\n </SolidTooltip>\n ) : null}\n {!setting.editable ? (\n <SolidTooltip>\n <SolidTooltipTrigger asChild>\n <span>\n <SolidTag tone=\"warn\">Read only</SolidTag>\n </span>\n </SolidTooltipTrigger>\n <SolidTooltipContent>\n This value comes from system configuration and cannot be changed from the admin UI.\n </SolidTooltipContent>\n </SolidTooltip>\n ) : null}\n </div>\n {setting.description ? <p className={styles.settingDescription}>{setting.description}</p> : null}\n </div>\n\n {!setting.editable ? (\n setting.controlType === \"custom\" ? (\n customWidgetErrorText ? (\n <div className={styles.readonlyValue}>\n <span className={styles.customWidgetError}>{customWidgetErrorText}</span>\n </div>\n ) : SettingsWidget ? (\n (() => {\n const ResolvedSettingsWidget = SettingsWidget as ComponentType<any>;\n return <ResolvedSettingsWidget {...settingsWidgetProps} />;\n })()\n ) : null\n ) : setting.controlType === \"mediaSingle\" && value ? (\n <div className={styles.mediaPreview}>\n <SolidUploadedImage src={normalizeAssetUrl(String(value))} />\n </div>\n ) : (\n <div className={styles.readonlyValue}>\n <span className={value === null || value === undefined || value === \"\" ? styles.emptyValue : undefined}>\n {formatReadonlyValue(setting, value)}\n </span>\n </div>\n )\n ) : (\n <div className={`${styles.controlStack} ${setting.controlType === \"custom\" ? styles.customControlStack : \"\"}`}>\n {setting.controlType === \"boolean\" ? (\n <div className={styles.boolRow}>\n <SolidSwitch checked={Boolean(value)} onChange={(checked) => updateValue(setting.key, checked)} />\n <span className={styles.boolText}>{value ? \"Enabled\" : \"Disabled\"}</span>\n </div>\n ) : null}\n\n {setting.controlType === \"shortText\" ? (\n <SolidInput\n type=\"text\"\n value={value == null ? \"\" : String(value)}\n placeholder={setting.placeholder || setting.label}\n onChange={(event: any) => updateValue(setting.key, event.target.value)}\n />\n ) : null}\n\n {setting.controlType === \"longText\" ? (\n <SolidTextarea\n rows={4}\n value={value == null ? \"\" : typeof value === \"string\" ? value : JSON.stringify(value, null, 2)}\n placeholder={setting.placeholder || setting.label}\n onChange={(event: any) => updateValue(setting.key, event.target.value)}\n />\n ) : null}\n\n {setting.controlType === \"numeric\" ? (\n <SolidInput\n type=\"number\"\n value={value == null ? \"\" : String(value)}\n placeholder={setting.placeholder || setting.label}\n onChange={(event: any) => updateValue(setting.key, event.target.value === \"\" ? null : Number(event.target.value))}\n />\n ) : null}\n\n {setting.controlType === \"selectionStatic\" ? (\n <SolidSelect\n value={value}\n options={setting.options || []}\n placeholder={setting.placeholder || \"Select\"}\n native={false}\n onChange={(event) => updateValue(setting.key, event.value)}\n />\n ) : null}\n\n {setting.controlType === \"date\" || setting.controlType === \"datetime\" ? (\n <SolidDatePicker\n selected={value ? new Date(String(value)) : null}\n showTimeSelect={setting.controlType === \"datetime\"}\n dateFormat={setting.controlType === \"datetime\" ? \"yyyy-MM-dd HH:mm:ss\" : \"yyyy-MM-dd\"}\n onChange={(date: Date | null) => updateValue(setting.key, date instanceof Date ? date.toISOString() : null)}\n />\n ) : null}\n\n {setting.controlType === \"mediaSingle\" ? (\n <div className={styles.mediaField}>\n <div className={styles.mediaComposer}>\n <label className={styles.mediaDropzone}>\n <input\n className={styles.mediaInput}\n type=\"file\"\n accept=\".png,.jpg,.jpeg,.svg,.webp\"\n onChange={(event) => updateFileValue(setting.key, event.target.files?.[0] ?? null)}\n />\n <SettingDropzoneActivePlaceholder note=\"PNG, JPG, JPEG, SVG, WEBP | Max size: 2 MB\" />\n </label>\n {(filePreviews[setting.key] || value) ? (\n <div className={styles.mediaPreview}>\n <SolidUploadedImage src={filePreviews[setting.key] || normalizeAssetUrl(String(value))} />\n </div>\n ) : (\n <div className={styles.mediaEmptyState}>Preview appears here after upload</div>\n )}\n </div>\n {(filePreviews[setting.key] || value) ? (\n <SettingsImageRemoveButton onClick={() => updateFileValue(setting.key, null)} />\n ) : null}\n </div>\n ) : null}\n\n {setting.controlType === \"custom\" ? (\n customWidgetErrorText ? (\n <div className={styles.readonlyValue}>\n <span className={styles.customWidgetError}>{customWidgetErrorText}</span>\n </div>\n ) : SettingsWidget ? (\n (() => {\n const ResolvedSettingsWidget = SettingsWidget as ComponentType<any>;\n return <ResolvedSettingsWidget {...settingsWidgetProps} />;\n })()\n ) : null\n ) : null}\n </div>\n )}\n </div>\n );\n })}\n </div>\n </div>\n </section>\n ))\n ) : (\n <div className={styles.emptyState}>No settings match the current filter.</div>\n )}\n </div>\n ),\n }));\n\n return (\n <div className={styles.page}>\n <div className={`page-header ${styles.pageHeader}`}>\n <div className={styles.headerIntro}>\n <div className=\"form-wrapper-title\">Settings</div>\n <div className={styles.subtitle}>Manage platform configuration across modules from a single workspace.</div>\n <div className={styles.summaryChips}>\n <span className={styles.summaryChip}>{moduleEntries.length} module{moduleEntries.length === 1 ? \"\" : \"s\"}</span>\n <span className={styles.summaryChip}>{totalSettingsCount} setting{totalSettingsCount === 1 ? \"\" : \"s\"}</span>\n <button\n type=\"button\"\n className={`${styles.summaryChip} ${styles.summaryChipButton} ${filterMode === \"editable\" ? styles.summaryChipActive : \"\"}`}\n aria-pressed={filterMode === \"editable\"}\n onClick={() => setFilterMode((current) => (current === \"editable\" ? \"all\" : \"editable\"))}\n >\n {editableSettingsCount} editable\n </button>\n </div>\n </div>\n <div className={styles.headerSearch}>\n <div className={styles.searchIcon}>\n <Search size={16} />\n <SolidInput\n className={styles.searchInput}\n value={searchTerm}\n placeholder=\"Search settings, groups, or modules\"\n onChange={(event: any) => setSearchTerm(event.target.value)}\n />\n </div>\n {searchTerm ? (\n <span className={styles.resultsMeta}>\n {filteredSettings.length} result{filteredSettings.length === 1 ? \"\" : \"s\"}\n </span>\n ) : null}\n </div>\n <div className={styles.toolbarActions}>\n <div className={styles.legend}>\n <button\n type=\"button\"\n className={`${styles.readonlyFilterButton} ${filterMode === \"read-only\" ? styles.readonlyFilterButtonActive : \"\"}`}\n aria-pressed={filterMode === \"read-only\"}\n aria-label={filterMode === \"read-only\" ? \"Disable read-only filter\" : \"Enable read-only filter\"}\n onClick={() => setFilterMode((current) => (current === \"read-only\" ? \"all\" : \"read-only\"))}\n >\n <SolidTag tone=\"warn\">Read only</SolidTag>\n </button>\n <span className={filterMode === \"read-only\" ? styles.legendLabelActive : undefined}>\n {filterMode === \"read-only\" ? \"Read-only filter active\" : \"System-managed value\"}\n </span>\n <SolidTooltip>\n <SolidTooltipTrigger asChild>\n <button type=\"button\" className={styles.legendButton} aria-label=\"Read-only legend details\">\n i\n </button>\n </SolidTooltipTrigger>\n <SolidTooltipContent>\n Read-only settings are visible here for context, but can only be changed through environment or backend configuration.\n </SolidTooltipContent>\n </SolidTooltip>\n </div>\n <SolidButton size=\"sm\" type=\"button\" loading={false} onClick={handleSave} disabled={!hasChanges}>\n Save\n </SolidButton>\n </div>\n </div>\n\n <div className={styles.workspace}>\n {moduleTabs.length ? (\n <SolidTabGroup\n tabs={moduleTabs}\n value={activeModule}\n onValueChange={setActiveModule}\n className={styles.tabGroup}\n listClassName={styles.tabList}\n panelClassName={styles.tabPanel}\n orientation=\"vertical\"\n />\n ) : (\n <div className={styles.emptyState}>No settings are available.</div>\n )}\n </div>\n </div>\n );\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SolidFieldTooltip.d.ts","sourceRoot":"","sources":["../../../src/components/common/SolidFieldTooltip.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"SolidFieldTooltip.d.ts","sourceRoot":"","sources":["../../../src/components/common/SolidFieldTooltip.tsx"],"names":[],"mappings":"AAQA,eAAO,MAAM,iBAAiB,qBAAsB,GAAG,mDA2BtD,CAAC"}
|
|
@@ -1,6 +1,4 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import React, { useEffect } from "react";
|
|
3
|
-
import { SolidPopover, SolidPopoverContent, SolidPopoverTrigger, } from "../shad-cn-ui";
|
|
4
2
|
import { SolidTooltip, SolidTooltipContent, SolidTooltipTrigger, } from "../shad-cn-ui/SolidTooltip";
|
|
5
3
|
import { SolidIcon } from "../shad-cn-ui";
|
|
6
4
|
export var SolidFieldTooltip = function (_a) {
|
|
@@ -9,40 +7,10 @@ export var SolidFieldTooltip = function (_a) {
|
|
|
9
7
|
var solidFormViewMetaData = fieldContext.solidFormViewMetaData;
|
|
10
8
|
var fieldLayoutInfo = fieldContext.field;
|
|
11
9
|
var fieldMetadata = fieldContext.fieldMetadata;
|
|
12
|
-
var _g = React.useState(false), useTapPopover = _g[0], setUseTapPopover = _g[1];
|
|
13
10
|
var showTooltip = (_e = (_d = (_c = (_b = solidFormViewMetaData.data.solidView) === null || _b === void 0 ? void 0 : _b.layout) === null || _c === void 0 ? void 0 : _c.attrs) === null || _d === void 0 ? void 0 : _d.showTooltip) !== null && _e !== void 0 ? _e : true;
|
|
14
11
|
var fieldDescription = (_f = fieldLayoutInfo.attrs.description) !== null && _f !== void 0 ? _f : fieldMetadata.description;
|
|
15
|
-
useEffect(function () {
|
|
16
|
-
if (typeof window === "undefined" || typeof window.matchMedia !== "function") {
|
|
17
|
-
return;
|
|
18
|
-
}
|
|
19
|
-
var touchMedia = window.matchMedia("(hover: none), (pointer: coarse)");
|
|
20
|
-
var responsiveMedia = window.matchMedia("(max-width: 991px)");
|
|
21
|
-
var updateMode = function () {
|
|
22
|
-
setUseTapPopover(touchMedia.matches || responsiveMedia.matches);
|
|
23
|
-
};
|
|
24
|
-
updateMode();
|
|
25
|
-
var addChangeListener = function (mediaQuery, listener) {
|
|
26
|
-
if (typeof mediaQuery.addEventListener === "function") {
|
|
27
|
-
mediaQuery.addEventListener("change", listener);
|
|
28
|
-
return function () { return mediaQuery.removeEventListener("change", listener); };
|
|
29
|
-
}
|
|
30
|
-
mediaQuery.addListener(listener);
|
|
31
|
-
return function () { return mediaQuery.removeListener(listener); };
|
|
32
|
-
};
|
|
33
|
-
var removeTouchListener = addChangeListener(touchMedia, updateMode);
|
|
34
|
-
var removeResponsiveListener = addChangeListener(responsiveMedia, updateMode);
|
|
35
|
-
return function () {
|
|
36
|
-
removeTouchListener();
|
|
37
|
-
removeResponsiveListener();
|
|
38
|
-
};
|
|
39
|
-
}, []);
|
|
40
12
|
if (!showTooltip || !fieldDescription)
|
|
41
13
|
return null;
|
|
42
|
-
|
|
43
|
-
if (useTapPopover) {
|
|
44
|
-
return (_jsxs(SolidPopover, { children: [_jsx(SolidPopoverTrigger, { asChild: true, children: triggerButton }), _jsx(SolidPopoverContent, { side: "top", align: "center", sideOffset: 6, className: "solid-field-tooltip-popover", children: fieldDescription })] }));
|
|
45
|
-
}
|
|
46
|
-
return (_jsxs(SolidTooltip, { children: [_jsx(SolidTooltipTrigger, { asChild: true, children: triggerButton }), _jsx(SolidTooltipContent, { side: "top", align: "center", children: fieldDescription })] }));
|
|
14
|
+
return (_jsxs(SolidTooltip, { children: [_jsx(SolidTooltipTrigger, { asChild: true, children: _jsx("button", { type: "button", className: "solid-field-tooltip-icon", "aria-label": "Field info", children: _jsx(SolidIcon, { name: "si-info-circle" }) }) }), _jsx(SolidTooltipContent, { side: "top", align: "center", children: fieldDescription })] }));
|
|
47
15
|
};
|
|
48
16
|
//# sourceMappingURL=SolidFieldTooltip.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SolidFieldTooltip.js","sourceRoot":"","sources":["../../../src/components/common/SolidFieldTooltip.tsx"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"SolidFieldTooltip.js","sourceRoot":"","sources":["../../../src/components/common/SolidFieldTooltip.tsx"],"names":[],"mappings":";AACA,OAAO,EACH,YAAY,EACZ,mBAAmB,EACnB,mBAAmB,GACtB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAE1C,MAAM,CAAC,IAAM,iBAAiB,GAAG,UAAC,EAAqB;;QAAnB,YAAY,kBAAA;IAC5C,IAAM,qBAAqB,GAAG,YAAY,CAAC,qBAAqB,CAAC;IACjE,IAAM,eAAe,GAAG,YAAY,CAAC,KAAK,CAAC;IAC3C,IAAM,aAAa,GAAG,YAAY,CAAC,aAAa,CAAC;IACjD,IAAM,WAAW,GACb,MAAA,MAAA,MAAA,MAAA,qBAAqB,CAAC,IAAI,CAAC,SAAS,0CAAE,MAAM,0CAAE,KAAK,0CAAE,WAAW,mCAAI,IAAI,CAAC;IAC7E,IAAM,gBAAgB,GAClB,MAAA,eAAe,CAAC,KAAK,CAAC,WAAW,mCAAI,aAAa,CAAC,WAAW,CAAC;IAEnE,IAAI,CAAC,WAAW,IAAI,CAAC,gBAAgB;QAAE,OAAO,IAAI,CAAC;IAEnD,OAAO,CACH,MAAC,YAAY,eACT,KAAC,mBAAmB,IAAC,OAAO,kBACxB,iBACI,IAAI,EAAC,QAAQ,EACb,SAAS,EAAC,0BAA0B,gBACzB,YAAY,YAEvB,KAAC,SAAS,IAAC,IAAI,EAAC,gBAAgB,GAAG,GAC9B,GACS,EACtB,KAAC,mBAAmB,IAAC,IAAI,EAAC,KAAK,EAAC,KAAK,EAAC,QAAQ,YACzC,gBAAgB,GACC,IACX,CAClB,CAAC;AACN,CAAC,CAAC","sourcesContent":["import React from \"react\";\nimport {\n SolidTooltip,\n SolidTooltipContent,\n SolidTooltipTrigger,\n} from \"../shad-cn-ui/SolidTooltip\";\nimport { SolidIcon } from \"../shad-cn-ui\";\n\nexport const SolidFieldTooltip = ({ fieldContext }: any) => {\n const solidFormViewMetaData = fieldContext.solidFormViewMetaData;\n const fieldLayoutInfo = fieldContext.field;\n const fieldMetadata = fieldContext.fieldMetadata;\n const showTooltip =\n solidFormViewMetaData.data.solidView?.layout?.attrs?.showTooltip ?? true;\n const fieldDescription =\n fieldLayoutInfo.attrs.description ?? fieldMetadata.description;\n\n if (!showTooltip || !fieldDescription) return null;\n\n return (\n <SolidTooltip>\n <SolidTooltipTrigger asChild>\n <button\n type=\"button\"\n className=\"solid-field-tooltip-icon\"\n aria-label=\"Field info\"\n >\n <SolidIcon name=\"si-info-circle\" />\n </button>\n </SolidTooltipTrigger>\n <SolidTooltipContent side=\"top\" align=\"center\">\n {fieldDescription}\n </SolidTooltipContent>\n </SolidTooltip>\n );\n};\n"]}
|