@solidxai/core-ui 0.1.18-beta.1 → 0.1.18-beta.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (34) hide show
  1. package/dist/components/core/form/SolidVersionHistory.d.ts.map +1 -1
  2. package/dist/components/core/form/SolidVersionHistory.js +1 -1
  3. package/dist/components/core/form/SolidVersionHistory.js.map +1 -1
  4. package/dist/components/core/form/SolidVersionHistory.tsx +1 -9
  5. package/dist/components/core/form/fields/SolidDateField.js +1 -1
  6. package/dist/components/core/form/fields/SolidDateField.js.map +1 -1
  7. package/dist/components/core/form/fields/SolidDateField.tsx +1 -1
  8. package/dist/components/core/form/fields/SolidDateTimeField.js +1 -1
  9. package/dist/components/core/form/fields/SolidDateTimeField.js.map +1 -1
  10. package/dist/components/core/form/fields/SolidDateTimeField.tsx +1 -1
  11. package/dist/components/core/form/fields/SolidIntegerField.d.ts.map +1 -1
  12. package/dist/components/core/form/fields/SolidIntegerField.js +10 -10
  13. package/dist/components/core/form/fields/SolidIntegerField.js.map +1 -1
  14. package/dist/components/core/form/fields/SolidIntegerField.tsx +22 -23
  15. package/dist/components/core/form/fields/SolidTimeField.js +1 -1
  16. package/dist/components/core/form/fields/SolidTimeField.js.map +1 -1
  17. package/dist/components/core/form/fields/SolidTimeField.tsx +1 -1
  18. package/dist/components/core/form/fields/relations/SolidRelationManyToManyField.d.ts.map +1 -1
  19. package/dist/components/core/form/fields/relations/SolidRelationManyToManyField.js +3 -3
  20. package/dist/components/core/form/fields/relations/SolidRelationManyToManyField.js.map +1 -1
  21. package/dist/components/core/form/fields/relations/SolidRelationManyToManyField.tsx +3 -5
  22. package/dist/components/core/form/fields/relations/SolidRelationManyToOneField.d.ts.map +1 -1
  23. package/dist/components/core/form/fields/relations/SolidRelationManyToOneField.js +41 -41
  24. package/dist/components/core/form/fields/relations/SolidRelationManyToOneField.js.map +1 -1
  25. package/dist/components/core/form/fields/relations/SolidRelationManyToOneField.tsx +6 -12
  26. package/dist/components/core/model/FieldMetaDataForm.css +22 -2
  27. package/dist/components/core/model/FieldMetaDataForm.js +2 -2
  28. package/dist/components/core/model/FieldMetaDataForm.js.map +1 -1
  29. package/dist/components/core/model/FieldMetaDataForm.tsx +2 -2
  30. package/dist/components/core/users/CreateUser.js +1 -1
  31. package/dist/components/core/users/CreateUser.js.map +1 -1
  32. package/dist/components/core/users/CreateUser.tsx +6 -6
  33. package/dist/resources/solid-custom.css +21 -3
  34. package/package.json +1 -1
@@ -3528,7 +3528,7 @@ const FieldMetaDataForm = ({
3528
3528
 
3529
3529
  {formik.values.encrypt === true && (
3530
3530
  <div className="mt-2 flex flex-wrap -mx-2">
3531
- <div className="w-full px-2 pt-2 md:w-1/2">
3531
+ <div className="basis-full px-2 pt-2 md:basis-1/2">
3532
3532
  <div className="field flex w-full flex-col gap-2">
3533
3533
  <label
3534
3534
  htmlFor="encryptionType"
@@ -3572,7 +3572,7 @@ const FieldMetaDataForm = ({
3572
3572
  )}
3573
3573
  </div>
3574
3574
  </div>
3575
- <div className="px-2 pt-2 md:w-1/2">
3575
+ <div className="basis-full px-2 pt-2 md:basis-1/2">
3576
3576
  <div className="field flex w-full flex-col gap-2">
3577
3577
  <label htmlFor="decryptWhen" className={classNames("form-field-label", styles.fieldLabel)}>
3578
3578
  Decrypt When
@@ -276,7 +276,7 @@ var CreateUser = function (_a) {
276
276
  /** Extracted form body so it can be used both inside and outside the tab wrapper */
277
277
  function UserDetailsContent(_a) {
278
278
  var formik = _a.formik, fieldError = _a.fieldError, selectedRoles = _a.selectedRoles, handleCheckboxChange = _a.handleCheckboxChange, isEditMode = _a.isEditMode;
279
- return (_jsx("div", { className: "solid-user-details-layout", children: _jsxs("div", { className: "solid-user-details-stack", children: [_jsx(SolidPanel, { header: "Basic Info", className: "solid-column-panel", children: _jsxs("div", { className: "flex flex-wrap -mx-2 -mt-2", children: [_jsxs("div", { className: "field flex w-full flex-col gap-2 px-2 pt-2 md:w-1/2", children: [_jsx("label", { htmlFor: "fullName", className: "form-field-label", children: "Full Name" }), _jsx(SolidInput, { type: "text", id: "fullName", name: "fullName", autoComplete: "off", onChange: formik.handleChange, onBlur: formik.handleBlur, value: formik.values.fullName, className: cx(fieldError("fullName") && "solid-user-form-input-invalid") }), fieldError("fullName") ? _jsx(SolidMessage, { severity: "error", text: fieldError("fullName") }) : null] }), _jsxs("div", { className: "field flex w-full flex-col gap-2 px-2 pt-2 md:w-1/2", children: [_jsx("label", { htmlFor: "username", className: "form-field-label", children: "Username" }), _jsx(SolidInput, { type: "text", id: "username", name: "username", autoComplete: "off", disabled: Boolean(formik.values.username) && isEditMode, onChange: formik.handleChange, onBlur: formik.handleBlur, value: formik.values.username, className: cx(fieldError("username") && "solid-user-form-input-invalid") }), fieldError("username") ? _jsx(SolidMessage, { severity: "error", text: fieldError("username") }) : null] }), _jsxs("div", { className: "field mt-4 flex w-full flex-col gap-2 px-2 pt-2 md:w-1/2", children: [_jsx("label", { htmlFor: "email", className: "form-field-label", children: "Email" }), _jsx(SolidInput, { type: "email", id: "email", name: "email", autoComplete: "off", disabled: isEditMode, onChange: formik.handleChange, onBlur: formik.handleBlur, value: formik.values.email, className: cx(fieldError("email") && "solid-user-form-input-invalid") }), fieldError("email") ? _jsx(SolidMessage, { severity: "error", text: fieldError("email") }) : null] }), _jsxs("div", { className: "field mt-4 flex w-full flex-col gap-2 px-2 pt-2 md:w-1/2", children: [_jsx("label", { htmlFor: "mobile", className: "form-field-label", children: "Mobile" }), _jsx(SolidInput, { type: "text", id: "mobile", name: "mobile", autoComplete: "off", onChange: formik.handleChange, onBlur: formik.handleBlur, value: formik.values.mobile, className: cx(fieldError("mobile") && "solid-user-form-input-invalid") }), fieldError("mobile") ? _jsx(SolidMessage, { severity: "error", text: fieldError("mobile") }) : null] }), !isEditMode ? (_jsxs(_Fragment, { children: [_jsxs("div", { className: "field mt-4 flex w-full flex-col gap-2 px-2 pt-2 md:w-1/2", children: [_jsx("label", { htmlFor: "password", className: "form-field-label", children: "Password" }), _jsx(SolidPasswordInput, { id: "password", name: "password", autoComplete: "off", value: formik.values.password, onChange: formik.handleChange, onBlur: formik.handleBlur, className: cx(fieldError("password") && "solid-user-form-input-invalid") }), fieldError("password") ? _jsx(SolidMessage, { severity: "error", text: fieldError("password") }) : null] }), _jsxs("div", { className: "field mt-4 flex w-full flex-col gap-2 px-2 pt-2 md:w-1/2", children: [_jsx("label", { htmlFor: "confirmPassword", className: "form-field-label", children: "Confirm Password" }), _jsx(SolidPasswordInput, { id: "confirmPassword", name: "confirmPassword", autoComplete: "off", value: formik.values.confirmPassword, onChange: formik.handleChange, onBlur: formik.handleBlur, className: cx(fieldError("confirmPassword") && "solid-user-form-input-invalid") }), fieldError("confirmPassword") ? (_jsx(SolidMessage, { severity: "error", text: fieldError("confirmPassword") })) : null] })] })) : null] }) }), _jsx(SolidPanel, { toggleable: true, header: "Access", className: "solid-column-panel", children: _jsxs("div", { className: "flex flex-wrap -mx-2 -mt-2 solid-user-access-grid", children: [isEditMode ? (_jsxs("div", { className: "field w-full px-2 pt-2 solid-user-access-row", children: [_jsxs("div", { className: "solid-user-access-copy", children: [_jsx("p", { className: "form-field-label m-0", children: "Active User" }), _jsx("p", { className: "solid-user-section-helper m-0 mt-1", children: "Control whether this user account is active and allowed to sign in." })] }), _jsx(SolidSwitch, { checked: formik.values.active, onChange: function (checked) { return formik.setFieldValue("active", checked); } })] })) : null, _jsxs("div", { className: "field w-full px-2 pt-2 solid-user-access-row", children: [_jsxs("div", { className: "solid-user-access-copy", children: [_jsx("p", { className: "form-field-label m-0", children: "Allow API Key Generation" }), _jsx("p", { className: "solid-user-section-helper m-0 mt-1", children: "When enabled, this user can generate API keys for programmatic access." })] }), _jsx(SolidSwitch, { checked: formik.values.isAllowedToGenerateApiKeys, onChange: function (checked) { return formik.setFieldValue("isAllowedToGenerateApiKeys", checked); } })] })] }) }), _jsxs(SolidPanel, { toggleable: true, header: "Roles", className: "solid-column-panel", children: [_jsx("p", { className: "solid-user-section-copy", children: "Select the roles that should be assigned to this user." }), _jsx(RolesGroupedByModuleWidget, { selectedRoles: selectedRoles, onToggle: handleCheckboxChange })] })] }) }));
279
+ return (_jsx("div", { className: "solid-user-details-layout", children: _jsxs("div", { className: "solid-user-details-stack", children: [_jsx(SolidPanel, { header: "Basic Info", className: "solid-column-panel", children: _jsxs("div", { className: "flex flex-wrap -mx-2 -mt-2", children: [_jsxs("div", { className: "field flex basis-full flex-col gap-2 px-2 pt-2 md:basis-1/2", children: [_jsx("label", { htmlFor: "fullName", className: "form-field-label", children: "Full Name" }), _jsx(SolidInput, { type: "text", id: "fullName", name: "fullName", autoComplete: "off", onChange: formik.handleChange, onBlur: formik.handleBlur, value: formik.values.fullName, className: cx(fieldError("fullName") && "solid-user-form-input-invalid") }), fieldError("fullName") ? _jsx(SolidMessage, { severity: "error", text: fieldError("fullName") }) : null] }), _jsxs("div", { className: "field flex basis-full flex-col gap-2 px-2 pt-2 md:basis-1/2", children: [_jsx("label", { htmlFor: "username", className: "form-field-label", children: "Username" }), _jsx(SolidInput, { type: "text", id: "username", name: "username", autoComplete: "off", disabled: Boolean(formik.values.username) && isEditMode, onChange: formik.handleChange, onBlur: formik.handleBlur, value: formik.values.username, className: cx(fieldError("username") && "solid-user-form-input-invalid") }), fieldError("username") ? _jsx(SolidMessage, { severity: "error", text: fieldError("username") }) : null] }), _jsxs("div", { className: "field mt-4 flex basis-full flex-col gap-2 px-2 pt-2 md:basis-1/2", children: [_jsx("label", { htmlFor: "email", className: "form-field-label", children: "Email" }), _jsx(SolidInput, { type: "email", id: "email", name: "email", autoComplete: "off", disabled: isEditMode, onChange: formik.handleChange, onBlur: formik.handleBlur, value: formik.values.email, className: cx(fieldError("email") && "solid-user-form-input-invalid") }), fieldError("email") ? _jsx(SolidMessage, { severity: "error", text: fieldError("email") }) : null] }), _jsxs("div", { className: "field mt-4 flex basis-full flex-col gap-2 px-2 pt-2 md:basis-1/2", children: [_jsx("label", { htmlFor: "mobile", className: "form-field-label", children: "Mobile" }), _jsx(SolidInput, { type: "text", id: "mobile", name: "mobile", autoComplete: "off", onChange: formik.handleChange, onBlur: formik.handleBlur, value: formik.values.mobile, className: cx(fieldError("mobile") && "solid-user-form-input-invalid") }), fieldError("mobile") ? _jsx(SolidMessage, { severity: "error", text: fieldError("mobile") }) : null] }), !isEditMode ? (_jsxs(_Fragment, { children: [_jsxs("div", { className: "field mt-4 flex basis-full flex-col gap-2 px-2 pt-2 md:basis-1/2", children: [_jsx("label", { htmlFor: "password", className: "form-field-label", children: "Password" }), _jsx(SolidPasswordInput, { id: "password", name: "password", autoComplete: "off", value: formik.values.password, onChange: formik.handleChange, onBlur: formik.handleBlur, className: cx(fieldError("password") && "solid-user-form-input-invalid") }), fieldError("password") ? _jsx(SolidMessage, { severity: "error", text: fieldError("password") }) : null] }), _jsxs("div", { className: "field mt-4 flex basis-full flex-col gap-2 px-2 pt-2 md:basis-1/2", children: [_jsx("label", { htmlFor: "confirmPassword", className: "form-field-label", children: "Confirm Password" }), _jsx(SolidPasswordInput, { id: "confirmPassword", name: "confirmPassword", autoComplete: "off", value: formik.values.confirmPassword, onChange: formik.handleChange, onBlur: formik.handleBlur, className: cx(fieldError("confirmPassword") && "solid-user-form-input-invalid") }), fieldError("confirmPassword") ? (_jsx(SolidMessage, { severity: "error", text: fieldError("confirmPassword") })) : null] })] })) : null] }) }), _jsx(SolidPanel, { toggleable: true, header: "Access", className: "solid-column-panel", children: _jsxs("div", { className: "flex flex-wrap -mx-2 -mt-2 solid-user-access-grid", children: [isEditMode ? (_jsxs("div", { className: "field w-full px-2 pt-2 solid-user-access-row", children: [_jsxs("div", { className: "solid-user-access-copy", children: [_jsx("p", { className: "form-field-label m-0", children: "Active User" }), _jsx("p", { className: "solid-user-section-helper m-0 mt-1", children: "Control whether this user account is active and allowed to sign in." })] }), _jsx(SolidSwitch, { checked: formik.values.active, onChange: function (checked) { return formik.setFieldValue("active", checked); } })] })) : null, _jsxs("div", { className: "field w-full px-2 pt-2 solid-user-access-row", children: [_jsxs("div", { className: "solid-user-access-copy", children: [_jsx("p", { className: "form-field-label m-0", children: "Allow API Key Generation" }), _jsx("p", { className: "solid-user-section-helper m-0 mt-1", children: "When enabled, this user can generate API keys for programmatic access." })] }), _jsx(SolidSwitch, { checked: formik.values.isAllowedToGenerateApiKeys, onChange: function (checked) { return formik.setFieldValue("isAllowedToGenerateApiKeys", checked); } })] })] }) }), _jsxs(SolidPanel, { toggleable: true, header: "Roles", className: "solid-column-panel", children: [_jsx("p", { className: "solid-user-section-copy", children: "Select the roles that should be assigned to this user." }), _jsx(RolesGroupedByModuleWidget, { selectedRoles: selectedRoles, onToggle: handleCheckboxChange })] })] }) }));
280
280
  }
281
281
  export default CreateUser;
282
282
  //# sourceMappingURL=CreateUser.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"CreateUser.js","sourceRoot":"","sources":["../../../../src/components/core/users/CreateUser.tsx"],"names":[],"mappings":"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","sourcesContent":["import { FetchBaseQueryError } from \"@reduxjs/toolkit/dist/query\";\nimport { useFormik } from \"formik\";\nimport { useEffect, useState } from \"react\";\nimport { useDispatch } from \"react-redux\";\nimport * as Yup from \"yup\";\nimport { BackButton } from \"../../../components/common/BackButton\";\nimport { CancelButton } from \"../../../components/common/CancelButton\";\nimport { SolidFormHeader } from \"../../../components/common/SolidFormHeader\";\nimport { ERROR_MESSAGES } from \"../../../constants/error-messages\";\nimport { useRouter } from \"../../../hooks/useRouter\";\nimport { useRegisterPrivateMutation, useUpdateUserMutation } from \"../../../redux/api/authApi\";\nimport { useDeleteUserMutation } from \"../../../redux/api/userApi\";\nimport { RolesGroupedByModuleWidget } from \"../../core/form/fields/relations/RolesGroupedByModuleWidget\";\nimport { showToast } from \"../../../redux/features/toastSlice\";\nimport {\n SolidButton,\n SolidInput,\n SolidMessage,\n SolidPanel,\n SolidPasswordInput,\n SolidSwitch,\n SolidTabGroup,\n} from \"../../shad-cn-ui\";\nimport { ApiKeysTab, GenerateApiKeyModal, RevealApiKeyModal } from \"./ApiKeysTab\";\nimport \"./CreateUser.css\";\n\ninterface ErrorResponseData {\n message: string;\n statusCode: number;\n error: string;\n}\n\nfunction cx(...parts: Array<string | false | undefined>) {\n return parts.filter(Boolean).join(\" \");\n}\n\nconst CreateUser = ({ data, params }: any) => {\n const dispatch = useDispatch();\n const router = useRouter();\n const [selectedRoles, setSelectedRoles] = useState<string[]>([]);\n const [failedAttempts, setFailedAttempts] = useState<number>(data?.failedLoginAttempts ?? 0);\n const [activeTab, setActiveTab] = useState(\"userDetails\");\n const [newUserIdForApiKey, setNewUserIdForApiKey] = useState<number | null>(null);\n const [revealKey, setRevealKey] = useState<{ apiKey: string; keyName: string } | null>(null);\n\n const [registerPrivate, { isLoading, error: userCreateError }] = useRegisterPrivateMutation();\n const [\n updateUser,\n {\n isLoading: isUserUpdating,\n error: userUpdateError,\n },\n ] = useUpdateUserMutation();\n\n const [deleteUser, { isLoading: isUserDeleting, isSuccess: isDeleteUserSuccess }] = useDeleteUserMutation();\n\n useEffect(() => {\n if (data?.roles) {\n setSelectedRoles(data.roles.map((role: any) => role.name));\n }\n setFailedAttempts(data?.failedLoginAttempts ?? 0);\n }, [data]);\n\n const initialValues = {\n fullName: data?.fullName ?? \"\",\n username: data?.username ?? \"\",\n email: data?.email ?? \"\",\n mobile: data?.mobile ?? \"\",\n password: \"\",\n confirmPassword: \"\",\n active: data?.active ?? true,\n isAllowedToGenerateApiKeys: data?.isAllowedToGenerateApiKeys ?? false,\n };\n\n const validationSchema = Yup.object({\n fullName: Yup.string().required(ERROR_MESSAGES.FIELD_REUQIRED(\"Full Name\")),\n username: Yup.string().required(\"Username is required\"),\n email: Yup.string()\n .email(ERROR_MESSAGES.FIELD_INVALID(\"email address\"))\n .required(ERROR_MESSAGES.FIELD_REUQIRED(\"Email\")),\n password: Yup.string().min(6, ERROR_MESSAGES.PASSWORD_CHARACTER(6)).nullable(),\n confirmPassword: Yup.string().when(\"password\", {\n is: (val: any) => !!val,\n then: (schema) => schema.oneOf([Yup.ref(\"password\")], ERROR_MESSAGES.FIELD_MUST_MATCH(\"Password\")).nullable(),\n otherwise: (schema) => schema.notRequired().nullable(),\n }),\n mobile: Yup.string().nullable(),\n });\n\n function isFetchBaseQueryErrorWithErrorResponse(\n error: any\n ): error is FetchBaseQueryError & { data: ErrorResponseData } {\n return error && typeof error === \"object\" && \"data\" in error && \"message\" in error.data;\n }\n\n const formik = useFormik({\n initialValues,\n validationSchema,\n enableReinitialize: true,\n onSubmit: async (values) => {\n if (data) {\n const userData: any = {\n fullName: values.fullName,\n username: values.username,\n email: values.email,\n mobile: values.mobile,\n roles: selectedRoles,\n active: values.active,\n isAllowedToGenerateApiKeys: values.isAllowedToGenerateApiKeys,\n };\n\n if (values.password) {\n userData.password = values.password;\n }\n\n try {\n await updateUser({ id: data.id, data: userData }).unwrap();\n dispatch(\n showToast({\n severity: \"success\",\n summary: ERROR_MESSAGES.FORM_UPDATE,\n detail: ERROR_MESSAGES.FORM_UPDATE_SUCCESSFULLY,\n })\n );\n router.back();\n } catch {\n // error shown via userUpdateError effect\n }\n return;\n }\n\n try {\n const response = await registerPrivate({\n fullName: values.fullName,\n username: values.username,\n email: values.email,\n mobile: values.mobile,\n password: values.password,\n roles: selectedRoles,\n isAllowedToGenerateApiKeys: values.isAllowedToGenerateApiKeys,\n }).unwrap();\n\n if (values.isAllowedToGenerateApiKeys) {\n const userId = (response as any)?.data?.id ?? (response as any)?.id;\n if (userId) {\n setNewUserIdForApiKey(userId);\n return;\n }\n }\n router.back();\n } catch {\n // error shown via userCreateError effect\n }\n },\n });\n\n const fieldError = (fieldName: keyof typeof initialValues) =>\n formik.touched[fieldName] && formik.errors[fieldName] ? String(formik.errors[fieldName]) : \"\";\n\n const handleCheckboxChange = (roleName: string) => {\n const updatedRoles = selectedRoles.includes(roleName)\n ? selectedRoles.filter((name) => name !== roleName)\n : [...selectedRoles, roleName];\n\n setSelectedRoles(updatedRoles);\n formik.setFieldTouched(\"roles\", true);\n formik.setFieldValue(\"roles\", updatedRoles);\n };\n\n useEffect(() => {\n const handleError = (errorToast: any) => {\n let errorMessage: any = [ERROR_MESSAGES.ERROR_OCCURED];\n\n if (isFetchBaseQueryErrorWithErrorResponse(errorToast)) {\n errorMessage = errorToast.data.message;\n } else {\n errorMessage = [ERROR_MESSAGES.SOMETHING_WRONG];\n }\n\n const detail = Array.isArray(errorMessage) ? errorMessage.join(\", \") : errorMessage;\n dispatch(showToast({ severity: \"error\", summary: ERROR_MESSAGES.ERROR, detail }));\n };\n\n if (userCreateError) handleError(userCreateError);\n if (userUpdateError) handleError(userUpdateError);\n }, [dispatch, userCreateError, userUpdateError]);\n\n useEffect(() => {\n if (isDeleteUserSuccess) {\n router.back();\n }\n }, [isDeleteUserSuccess, router]);\n\n const isEditMode = params.id !== \"new\";\n const isSaving = isLoading || isUserUpdating;\n\n const handleUnblockUser = async () => {\n if (!data?.id) return;\n\n try {\n await updateUser({\n id: data.id,\n data: { failedLoginAttempts: 0 },\n }).unwrap();\n dispatch(\n showToast({\n severity: \"success\",\n summary: \"Success\",\n detail: \"User is unblocked.\",\n })\n );\n setFailedAttempts(0);\n } catch {\n // error shown via userUpdateError effect\n }\n };\n\n return (\n <div className=\"solid-form-wrapper\">\n <div className=\"solid-form-section\">\n <form onSubmit={formik.handleSubmit}>\n <div className=\"solid-form-header flex items-center justify-between gap-4 flex-wrap\">\n <div className=\"solid-user-form-titleblock flex items-center gap-4\">\n <BackButton />\n <div>\n <div className=\"form-wrapper-title\">{isEditMode ? \"Update User\" : \"Create User\"}</div>\n <p className=\"solid-user-form-subtitle m-0\">\n {isEditMode\n ? \"Update account details, access roles, and security controls.\"\n : \"Create a user account and assign the right access roles.\"}\n </p>\n </div>\n </div>\n <div className=\"flex gap-4 flex-wrap\">\n {isEditMode && failedAttempts > 0 ? (\n <SolidButton size=\"small\" type=\"button\" variant=\"outline\" loading={isUserUpdating} onClick={handleUnblockUser}>\n Unblock User\n </SolidButton>\n ) : null}\n {formik.dirty ? (\n <SolidButton size=\"small\" type=\"submit\" loading={isSaving}>\n Save\n </SolidButton>\n ) : null}\n {data ? (\n <SolidButton\n size=\"small\"\n type=\"button\"\n variant=\"destructive\"\n loading={isUserDeleting}\n onClick={() => deleteUser(data.id)}\n >\n Delete\n </SolidButton>\n ) : null}\n <CancelButton />\n </div>\n </div>\n\n <SolidFormHeader />\n\n <div className=\"px-3 py-3 md:p-4 solid-form-content\">\n {isEditMode ? (\n <SolidTabGroup\n value={activeTab}\n onValueChange={setActiveTab}\n tabs={[\n {\n value: \"userDetails\",\n label: \"User Details\",\n content: (\n <UserDetailsContent\n formik={formik}\n fieldError={fieldError}\n selectedRoles={selectedRoles}\n handleCheckboxChange={handleCheckboxChange}\n isEditMode={isEditMode}\n />\n ),\n },\n {\n value: \"apiKeys\",\n label: \"API Keys\",\n content: (\n <div className=\"solid-user-edit-api-keys-pane\">\n <ApiKeysTab userId={data?.id} canCreate={data?.isAllowedToGenerateApiKeys ?? false} />\n </div>\n ),\n },\n ]}\n />\n ) : (\n <UserDetailsContent\n formik={formik}\n fieldError={fieldError}\n selectedRoles={selectedRoles}\n handleCheckboxChange={handleCheckboxChange}\n isEditMode={isEditMode}\n />\n )}\n </div>\n </form>\n </div>\n\n {newUserIdForApiKey !== null && (\n <GenerateApiKeyModal\n open={true}\n userId={newUserIdForApiKey}\n onClose={() => {\n setNewUserIdForApiKey(null);\n router.back();\n }}\n onCreated={(apiKey, keyName) => {\n setNewUserIdForApiKey(null);\n setRevealKey({ apiKey, keyName });\n }}\n />\n )}\n\n {revealKey && (\n <RevealApiKeyModal\n open={true}\n apiKey={revealKey.apiKey}\n keyName={revealKey.keyName}\n onClose={() => {\n setRevealKey(null);\n router.back();\n }}\n />\n )}\n </div>\n );\n};\n\n/** Extracted form body so it can be used both inside and outside the tab wrapper */\nfunction UserDetailsContent({\n formik,\n fieldError,\n selectedRoles,\n handleCheckboxChange,\n isEditMode,\n}: {\n formik: any;\n fieldError: (field: any) => string;\n selectedRoles: string[];\n handleCheckboxChange: (roleName: string) => void;\n isEditMode: boolean;\n}) {\n return (\n <div className=\"solid-user-details-layout\">\n <div className=\"solid-user-details-stack\">\n <SolidPanel header=\"Basic Info\" className=\"solid-column-panel\">\n <div className=\"flex flex-wrap -mx-2 -mt-2\">\n <div className=\"field flex w-full flex-col gap-2 px-2 pt-2 md:w-1/2\">\n <label htmlFor=\"fullName\" className=\"form-field-label\">\n Full Name\n </label>\n <SolidInput\n type=\"text\"\n id=\"fullName\"\n name=\"fullName\"\n autoComplete=\"off\"\n onChange={formik.handleChange}\n onBlur={formik.handleBlur}\n value={formik.values.fullName}\n className={cx(fieldError(\"fullName\") && \"solid-user-form-input-invalid\")}\n />\n {fieldError(\"fullName\") ? <SolidMessage severity=\"error\" text={fieldError(\"fullName\")} /> : null}\n </div>\n\n <div className=\"field flex w-full flex-col gap-2 px-2 pt-2 md:w-1/2\">\n <label htmlFor=\"username\" className=\"form-field-label\">\n Username\n </label>\n <SolidInput\n type=\"text\"\n id=\"username\"\n name=\"username\"\n autoComplete=\"off\"\n disabled={Boolean(formik.values.username) && isEditMode}\n onChange={formik.handleChange}\n onBlur={formik.handleBlur}\n value={formik.values.username}\n className={cx(fieldError(\"username\") && \"solid-user-form-input-invalid\")}\n />\n {fieldError(\"username\") ? <SolidMessage severity=\"error\" text={fieldError(\"username\")} /> : null}\n </div>\n\n <div className=\"field mt-4 flex w-full flex-col gap-2 px-2 pt-2 md:w-1/2\">\n <label htmlFor=\"email\" className=\"form-field-label\">\n Email\n </label>\n <SolidInput\n type=\"email\"\n id=\"email\"\n name=\"email\"\n autoComplete=\"off\"\n disabled={isEditMode}\n onChange={formik.handleChange}\n onBlur={formik.handleBlur}\n value={formik.values.email}\n className={cx(fieldError(\"email\") && \"solid-user-form-input-invalid\")}\n />\n {fieldError(\"email\") ? <SolidMessage severity=\"error\" text={fieldError(\"email\")} /> : null}\n </div>\n\n <div className=\"field mt-4 flex w-full flex-col gap-2 px-2 pt-2 md:w-1/2\">\n <label htmlFor=\"mobile\" className=\"form-field-label\">\n Mobile\n </label>\n <SolidInput\n type=\"text\"\n id=\"mobile\"\n name=\"mobile\"\n autoComplete=\"off\"\n onChange={formik.handleChange}\n onBlur={formik.handleBlur}\n value={formik.values.mobile}\n className={cx(fieldError(\"mobile\") && \"solid-user-form-input-invalid\")}\n />\n {fieldError(\"mobile\") ? <SolidMessage severity=\"error\" text={fieldError(\"mobile\")} /> : null}\n </div>\n\n {!isEditMode ? (\n <>\n <div className=\"field mt-4 flex w-full flex-col gap-2 px-2 pt-2 md:w-1/2\">\n <label htmlFor=\"password\" className=\"form-field-label\">\n Password\n </label>\n <SolidPasswordInput\n id=\"password\"\n name=\"password\"\n autoComplete=\"off\"\n value={formik.values.password}\n onChange={formik.handleChange}\n onBlur={formik.handleBlur}\n className={cx(fieldError(\"password\") && \"solid-user-form-input-invalid\")}\n />\n {fieldError(\"password\") ? <SolidMessage severity=\"error\" text={fieldError(\"password\")} /> : null}\n </div>\n\n <div className=\"field mt-4 flex w-full flex-col gap-2 px-2 pt-2 md:w-1/2\">\n <label htmlFor=\"confirmPassword\" className=\"form-field-label\">\n Confirm Password\n </label>\n <SolidPasswordInput\n id=\"confirmPassword\"\n name=\"confirmPassword\"\n autoComplete=\"off\"\n value={formik.values.confirmPassword}\n onChange={formik.handleChange}\n onBlur={formik.handleBlur}\n className={cx(fieldError(\"confirmPassword\") && \"solid-user-form-input-invalid\")}\n />\n {fieldError(\"confirmPassword\") ? (\n <SolidMessage severity=\"error\" text={fieldError(\"confirmPassword\")} />\n ) : null}\n </div>\n </>\n ) : null}\n </div>\n </SolidPanel>\n\n <SolidPanel toggleable header=\"Access\" className=\"solid-column-panel\">\n <div className=\"flex flex-wrap -mx-2 -mt-2 solid-user-access-grid\">\n {isEditMode ? (\n <div className=\"field w-full px-2 pt-2 solid-user-access-row\">\n <div className=\"solid-user-access-copy\">\n <p className=\"form-field-label m-0\">Active User</p>\n <p className=\"solid-user-section-helper m-0 mt-1\">\n Control whether this user account is active and allowed to sign in.\n </p>\n </div>\n <SolidSwitch\n checked={formik.values.active}\n onChange={(checked) => formik.setFieldValue(\"active\", checked)}\n />\n </div>\n ) : null}\n <div className=\"field w-full px-2 pt-2 solid-user-access-row\">\n <div className=\"solid-user-access-copy\">\n <p className=\"form-field-label m-0\">Allow API Key Generation</p>\n <p className=\"solid-user-section-helper m-0 mt-1\">\n When enabled, this user can generate API keys for programmatic access.\n </p>\n </div>\n <SolidSwitch\n checked={formik.values.isAllowedToGenerateApiKeys}\n onChange={(checked) => formik.setFieldValue(\"isAllowedToGenerateApiKeys\", checked)}\n />\n </div>\n </div>\n </SolidPanel>\n\n <SolidPanel toggleable header=\"Roles\" className=\"solid-column-panel\">\n <p className=\"solid-user-section-copy\">Select the roles that should be assigned to this user.</p>\n <RolesGroupedByModuleWidget\n selectedRoles={selectedRoles}\n onToggle={handleCheckboxChange}\n />\n </SolidPanel>\n </div>\n </div>\n );\n}\n\nexport default CreateUser;\n"]}
1
+ {"version":3,"file":"CreateUser.js","sourceRoot":"","sources":["../../../../src/components/core/users/CreateUser.tsx"],"names":[],"mappings":"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","sourcesContent":["import { FetchBaseQueryError } from \"@reduxjs/toolkit/dist/query\";\nimport { useFormik } from \"formik\";\nimport { useEffect, useState } from \"react\";\nimport { useDispatch } from \"react-redux\";\nimport * as Yup from \"yup\";\nimport { BackButton } from \"../../../components/common/BackButton\";\nimport { CancelButton } from \"../../../components/common/CancelButton\";\nimport { SolidFormHeader } from \"../../../components/common/SolidFormHeader\";\nimport { ERROR_MESSAGES } from \"../../../constants/error-messages\";\nimport { useRouter } from \"../../../hooks/useRouter\";\nimport { useRegisterPrivateMutation, useUpdateUserMutation } from \"../../../redux/api/authApi\";\nimport { useDeleteUserMutation } from \"../../../redux/api/userApi\";\nimport { RolesGroupedByModuleWidget } from \"../../core/form/fields/relations/RolesGroupedByModuleWidget\";\nimport { showToast } from \"../../../redux/features/toastSlice\";\nimport {\n SolidButton,\n SolidInput,\n SolidMessage,\n SolidPanel,\n SolidPasswordInput,\n SolidSwitch,\n SolidTabGroup,\n} from \"../../shad-cn-ui\";\nimport { ApiKeysTab, GenerateApiKeyModal, RevealApiKeyModal } from \"./ApiKeysTab\";\nimport \"./CreateUser.css\";\n\ninterface ErrorResponseData {\n message: string;\n statusCode: number;\n error: string;\n}\n\nfunction cx(...parts: Array<string | false | undefined>) {\n return parts.filter(Boolean).join(\" \");\n}\n\nconst CreateUser = ({ data, params }: any) => {\n const dispatch = useDispatch();\n const router = useRouter();\n const [selectedRoles, setSelectedRoles] = useState<string[]>([]);\n const [failedAttempts, setFailedAttempts] = useState<number>(data?.failedLoginAttempts ?? 0);\n const [activeTab, setActiveTab] = useState(\"userDetails\");\n const [newUserIdForApiKey, setNewUserIdForApiKey] = useState<number | null>(null);\n const [revealKey, setRevealKey] = useState<{ apiKey: string; keyName: string } | null>(null);\n\n const [registerPrivate, { isLoading, error: userCreateError }] = useRegisterPrivateMutation();\n const [\n updateUser,\n {\n isLoading: isUserUpdating,\n error: userUpdateError,\n },\n ] = useUpdateUserMutation();\n\n const [deleteUser, { isLoading: isUserDeleting, isSuccess: isDeleteUserSuccess }] = useDeleteUserMutation();\n\n useEffect(() => {\n if (data?.roles) {\n setSelectedRoles(data.roles.map((role: any) => role.name));\n }\n setFailedAttempts(data?.failedLoginAttempts ?? 0);\n }, [data]);\n\n const initialValues = {\n fullName: data?.fullName ?? \"\",\n username: data?.username ?? \"\",\n email: data?.email ?? \"\",\n mobile: data?.mobile ?? \"\",\n password: \"\",\n confirmPassword: \"\",\n active: data?.active ?? true,\n isAllowedToGenerateApiKeys: data?.isAllowedToGenerateApiKeys ?? false,\n };\n\n const validationSchema = Yup.object({\n fullName: Yup.string().required(ERROR_MESSAGES.FIELD_REUQIRED(\"Full Name\")),\n username: Yup.string().required(\"Username is required\"),\n email: Yup.string()\n .email(ERROR_MESSAGES.FIELD_INVALID(\"email address\"))\n .required(ERROR_MESSAGES.FIELD_REUQIRED(\"Email\")),\n password: Yup.string().min(6, ERROR_MESSAGES.PASSWORD_CHARACTER(6)).nullable(),\n confirmPassword: Yup.string().when(\"password\", {\n is: (val: any) => !!val,\n then: (schema) => schema.oneOf([Yup.ref(\"password\")], ERROR_MESSAGES.FIELD_MUST_MATCH(\"Password\")).nullable(),\n otherwise: (schema) => schema.notRequired().nullable(),\n }),\n mobile: Yup.string().nullable(),\n });\n\n function isFetchBaseQueryErrorWithErrorResponse(\n error: any\n ): error is FetchBaseQueryError & { data: ErrorResponseData } {\n return error && typeof error === \"object\" && \"data\" in error && \"message\" in error.data;\n }\n\n const formik = useFormik({\n initialValues,\n validationSchema,\n enableReinitialize: true,\n onSubmit: async (values) => {\n if (data) {\n const userData: any = {\n fullName: values.fullName,\n username: values.username,\n email: values.email,\n mobile: values.mobile,\n roles: selectedRoles,\n active: values.active,\n isAllowedToGenerateApiKeys: values.isAllowedToGenerateApiKeys,\n };\n\n if (values.password) {\n userData.password = values.password;\n }\n\n try {\n await updateUser({ id: data.id, data: userData }).unwrap();\n dispatch(\n showToast({\n severity: \"success\",\n summary: ERROR_MESSAGES.FORM_UPDATE,\n detail: ERROR_MESSAGES.FORM_UPDATE_SUCCESSFULLY,\n })\n );\n router.back();\n } catch {\n // error shown via userUpdateError effect\n }\n return;\n }\n\n try {\n const response = await registerPrivate({\n fullName: values.fullName,\n username: values.username,\n email: values.email,\n mobile: values.mobile,\n password: values.password,\n roles: selectedRoles,\n isAllowedToGenerateApiKeys: values.isAllowedToGenerateApiKeys,\n }).unwrap();\n\n if (values.isAllowedToGenerateApiKeys) {\n const userId = (response as any)?.data?.id ?? (response as any)?.id;\n if (userId) {\n setNewUserIdForApiKey(userId);\n return;\n }\n }\n router.back();\n } catch {\n // error shown via userCreateError effect\n }\n },\n });\n\n const fieldError = (fieldName: keyof typeof initialValues) =>\n formik.touched[fieldName] && formik.errors[fieldName] ? String(formik.errors[fieldName]) : \"\";\n\n const handleCheckboxChange = (roleName: string) => {\n const updatedRoles = selectedRoles.includes(roleName)\n ? selectedRoles.filter((name) => name !== roleName)\n : [...selectedRoles, roleName];\n\n setSelectedRoles(updatedRoles);\n formik.setFieldTouched(\"roles\", true);\n formik.setFieldValue(\"roles\", updatedRoles);\n };\n\n useEffect(() => {\n const handleError = (errorToast: any) => {\n let errorMessage: any = [ERROR_MESSAGES.ERROR_OCCURED];\n\n if (isFetchBaseQueryErrorWithErrorResponse(errorToast)) {\n errorMessage = errorToast.data.message;\n } else {\n errorMessage = [ERROR_MESSAGES.SOMETHING_WRONG];\n }\n\n const detail = Array.isArray(errorMessage) ? errorMessage.join(\", \") : errorMessage;\n dispatch(showToast({ severity: \"error\", summary: ERROR_MESSAGES.ERROR, detail }));\n };\n\n if (userCreateError) handleError(userCreateError);\n if (userUpdateError) handleError(userUpdateError);\n }, [dispatch, userCreateError, userUpdateError]);\n\n useEffect(() => {\n if (isDeleteUserSuccess) {\n router.back();\n }\n }, [isDeleteUserSuccess, router]);\n\n const isEditMode = params.id !== \"new\";\n const isSaving = isLoading || isUserUpdating;\n\n const handleUnblockUser = async () => {\n if (!data?.id) return;\n\n try {\n await updateUser({\n id: data.id,\n data: { failedLoginAttempts: 0 },\n }).unwrap();\n dispatch(\n showToast({\n severity: \"success\",\n summary: \"Success\",\n detail: \"User is unblocked.\",\n })\n );\n setFailedAttempts(0);\n } catch {\n // error shown via userUpdateError effect\n }\n };\n\n return (\n <div className=\"solid-form-wrapper\">\n <div className=\"solid-form-section\">\n <form onSubmit={formik.handleSubmit}>\n <div className=\"solid-form-header flex items-center justify-between gap-4 flex-wrap\">\n <div className=\"solid-user-form-titleblock flex items-center gap-4\">\n <BackButton />\n <div>\n <div className=\"form-wrapper-title\">{isEditMode ? \"Update User\" : \"Create User\"}</div>\n <p className=\"solid-user-form-subtitle m-0\">\n {isEditMode\n ? \"Update account details, access roles, and security controls.\"\n : \"Create a user account and assign the right access roles.\"}\n </p>\n </div>\n </div>\n <div className=\"flex gap-4 flex-wrap\">\n {isEditMode && failedAttempts > 0 ? (\n <SolidButton size=\"small\" type=\"button\" variant=\"outline\" loading={isUserUpdating} onClick={handleUnblockUser}>\n Unblock User\n </SolidButton>\n ) : null}\n {formik.dirty ? (\n <SolidButton size=\"small\" type=\"submit\" loading={isSaving}>\n Save\n </SolidButton>\n ) : null}\n {data ? (\n <SolidButton\n size=\"small\"\n type=\"button\"\n variant=\"destructive\"\n loading={isUserDeleting}\n onClick={() => deleteUser(data.id)}\n >\n Delete\n </SolidButton>\n ) : null}\n <CancelButton />\n </div>\n </div>\n\n <SolidFormHeader />\n\n <div className=\"px-3 py-3 md:p-4 solid-form-content\">\n {isEditMode ? (\n <SolidTabGroup\n value={activeTab}\n onValueChange={setActiveTab}\n tabs={[\n {\n value: \"userDetails\",\n label: \"User Details\",\n content: (\n <UserDetailsContent\n formik={formik}\n fieldError={fieldError}\n selectedRoles={selectedRoles}\n handleCheckboxChange={handleCheckboxChange}\n isEditMode={isEditMode}\n />\n ),\n },\n {\n value: \"apiKeys\",\n label: \"API Keys\",\n content: (\n <div className=\"solid-user-edit-api-keys-pane\">\n <ApiKeysTab userId={data?.id} canCreate={data?.isAllowedToGenerateApiKeys ?? false} />\n </div>\n ),\n },\n ]}\n />\n ) : (\n <UserDetailsContent\n formik={formik}\n fieldError={fieldError}\n selectedRoles={selectedRoles}\n handleCheckboxChange={handleCheckboxChange}\n isEditMode={isEditMode}\n />\n )}\n </div>\n </form>\n </div>\n\n {newUserIdForApiKey !== null && (\n <GenerateApiKeyModal\n open={true}\n userId={newUserIdForApiKey}\n onClose={() => {\n setNewUserIdForApiKey(null);\n router.back();\n }}\n onCreated={(apiKey, keyName) => {\n setNewUserIdForApiKey(null);\n setRevealKey({ apiKey, keyName });\n }}\n />\n )}\n\n {revealKey && (\n <RevealApiKeyModal\n open={true}\n apiKey={revealKey.apiKey}\n keyName={revealKey.keyName}\n onClose={() => {\n setRevealKey(null);\n router.back();\n }}\n />\n )}\n </div>\n );\n};\n\n/** Extracted form body so it can be used both inside and outside the tab wrapper */\nfunction UserDetailsContent({\n formik,\n fieldError,\n selectedRoles,\n handleCheckboxChange,\n isEditMode,\n}: {\n formik: any;\n fieldError: (field: any) => string;\n selectedRoles: string[];\n handleCheckboxChange: (roleName: string) => void;\n isEditMode: boolean;\n}) {\n return (\n <div className=\"solid-user-details-layout\">\n <div className=\"solid-user-details-stack\">\n <SolidPanel header=\"Basic Info\" className=\"solid-column-panel\">\n <div className=\"flex flex-wrap -mx-2 -mt-2\">\n <div className=\"field flex basis-full flex-col gap-2 px-2 pt-2 md:basis-1/2\">\n <label htmlFor=\"fullName\" className=\"form-field-label\">\n Full Name\n </label>\n <SolidInput\n type=\"text\"\n id=\"fullName\"\n name=\"fullName\"\n autoComplete=\"off\"\n onChange={formik.handleChange}\n onBlur={formik.handleBlur}\n value={formik.values.fullName}\n className={cx(fieldError(\"fullName\") && \"solid-user-form-input-invalid\")}\n />\n {fieldError(\"fullName\") ? <SolidMessage severity=\"error\" text={fieldError(\"fullName\")} /> : null}\n </div>\n\n <div className=\"field flex basis-full flex-col gap-2 px-2 pt-2 md:basis-1/2\">\n <label htmlFor=\"username\" className=\"form-field-label\">\n Username\n </label>\n <SolidInput\n type=\"text\"\n id=\"username\"\n name=\"username\"\n autoComplete=\"off\"\n disabled={Boolean(formik.values.username) && isEditMode}\n onChange={formik.handleChange}\n onBlur={formik.handleBlur}\n value={formik.values.username}\n className={cx(fieldError(\"username\") && \"solid-user-form-input-invalid\")}\n />\n {fieldError(\"username\") ? <SolidMessage severity=\"error\" text={fieldError(\"username\")} /> : null}\n </div>\n\n <div className=\"field mt-4 flex basis-full flex-col gap-2 px-2 pt-2 md:basis-1/2\">\n <label htmlFor=\"email\" className=\"form-field-label\">\n Email\n </label>\n <SolidInput\n type=\"email\"\n id=\"email\"\n name=\"email\"\n autoComplete=\"off\"\n disabled={isEditMode}\n onChange={formik.handleChange}\n onBlur={formik.handleBlur}\n value={formik.values.email}\n className={cx(fieldError(\"email\") && \"solid-user-form-input-invalid\")}\n />\n {fieldError(\"email\") ? <SolidMessage severity=\"error\" text={fieldError(\"email\")} /> : null}\n </div>\n\n <div className=\"field mt-4 flex basis-full flex-col gap-2 px-2 pt-2 md:basis-1/2\">\n <label htmlFor=\"mobile\" className=\"form-field-label\">\n Mobile\n </label>\n <SolidInput\n type=\"text\"\n id=\"mobile\"\n name=\"mobile\"\n autoComplete=\"off\"\n onChange={formik.handleChange}\n onBlur={formik.handleBlur}\n value={formik.values.mobile}\n className={cx(fieldError(\"mobile\") && \"solid-user-form-input-invalid\")}\n />\n {fieldError(\"mobile\") ? <SolidMessage severity=\"error\" text={fieldError(\"mobile\")} /> : null}\n </div>\n\n {!isEditMode ? (\n <>\n <div className=\"field mt-4 flex basis-full flex-col gap-2 px-2 pt-2 md:basis-1/2\">\n <label htmlFor=\"password\" className=\"form-field-label\">\n Password\n </label>\n <SolidPasswordInput\n id=\"password\"\n name=\"password\"\n autoComplete=\"off\"\n value={formik.values.password}\n onChange={formik.handleChange}\n onBlur={formik.handleBlur}\n className={cx(fieldError(\"password\") && \"solid-user-form-input-invalid\")}\n />\n {fieldError(\"password\") ? <SolidMessage severity=\"error\" text={fieldError(\"password\")} /> : null}\n </div>\n\n <div className=\"field mt-4 flex basis-full flex-col gap-2 px-2 pt-2 md:basis-1/2\">\n <label htmlFor=\"confirmPassword\" className=\"form-field-label\">\n Confirm Password\n </label>\n <SolidPasswordInput\n id=\"confirmPassword\"\n name=\"confirmPassword\"\n autoComplete=\"off\"\n value={formik.values.confirmPassword}\n onChange={formik.handleChange}\n onBlur={formik.handleBlur}\n className={cx(fieldError(\"confirmPassword\") && \"solid-user-form-input-invalid\")}\n />\n {fieldError(\"confirmPassword\") ? (\n <SolidMessage severity=\"error\" text={fieldError(\"confirmPassword\")} />\n ) : null}\n </div>\n </>\n ) : null}\n </div>\n </SolidPanel>\n\n <SolidPanel toggleable header=\"Access\" className=\"solid-column-panel\">\n <div className=\"flex flex-wrap -mx-2 -mt-2 solid-user-access-grid\">\n {isEditMode ? (\n <div className=\"field w-full px-2 pt-2 solid-user-access-row\">\n <div className=\"solid-user-access-copy\">\n <p className=\"form-field-label m-0\">Active User</p>\n <p className=\"solid-user-section-helper m-0 mt-1\">\n Control whether this user account is active and allowed to sign in.\n </p>\n </div>\n <SolidSwitch\n checked={formik.values.active}\n onChange={(checked) => formik.setFieldValue(\"active\", checked)}\n />\n </div>\n ) : null}\n <div className=\"field w-full px-2 pt-2 solid-user-access-row\">\n <div className=\"solid-user-access-copy\">\n <p className=\"form-field-label m-0\">Allow API Key Generation</p>\n <p className=\"solid-user-section-helper m-0 mt-1\">\n When enabled, this user can generate API keys for programmatic access.\n </p>\n </div>\n <SolidSwitch\n checked={formik.values.isAllowedToGenerateApiKeys}\n onChange={(checked) => formik.setFieldValue(\"isAllowedToGenerateApiKeys\", checked)}\n />\n </div>\n </div>\n </SolidPanel>\n\n <SolidPanel toggleable header=\"Roles\" className=\"solid-column-panel\">\n <p className=\"solid-user-section-copy\">Select the roles that should be assigned to this user.</p>\n <RolesGroupedByModuleWidget\n selectedRoles={selectedRoles}\n onToggle={handleCheckboxChange}\n />\n </SolidPanel>\n </div>\n </div>\n );\n}\n\nexport default CreateUser;\n"]}
@@ -351,7 +351,7 @@ function UserDetailsContent({
351
351
  <div className="solid-user-details-stack">
352
352
  <SolidPanel header="Basic Info" className="solid-column-panel">
353
353
  <div className="flex flex-wrap -mx-2 -mt-2">
354
- <div className="field flex w-full flex-col gap-2 px-2 pt-2 md:w-1/2">
354
+ <div className="field flex basis-full flex-col gap-2 px-2 pt-2 md:basis-1/2">
355
355
  <label htmlFor="fullName" className="form-field-label">
356
356
  Full Name
357
357
  </label>
@@ -368,7 +368,7 @@ function UserDetailsContent({
368
368
  {fieldError("fullName") ? <SolidMessage severity="error" text={fieldError("fullName")} /> : null}
369
369
  </div>
370
370
 
371
- <div className="field flex w-full flex-col gap-2 px-2 pt-2 md:w-1/2">
371
+ <div className="field flex basis-full flex-col gap-2 px-2 pt-2 md:basis-1/2">
372
372
  <label htmlFor="username" className="form-field-label">
373
373
  Username
374
374
  </label>
@@ -386,7 +386,7 @@ function UserDetailsContent({
386
386
  {fieldError("username") ? <SolidMessage severity="error" text={fieldError("username")} /> : null}
387
387
  </div>
388
388
 
389
- <div className="field mt-4 flex w-full flex-col gap-2 px-2 pt-2 md:w-1/2">
389
+ <div className="field mt-4 flex basis-full flex-col gap-2 px-2 pt-2 md:basis-1/2">
390
390
  <label htmlFor="email" className="form-field-label">
391
391
  Email
392
392
  </label>
@@ -404,7 +404,7 @@ function UserDetailsContent({
404
404
  {fieldError("email") ? <SolidMessage severity="error" text={fieldError("email")} /> : null}
405
405
  </div>
406
406
 
407
- <div className="field mt-4 flex w-full flex-col gap-2 px-2 pt-2 md:w-1/2">
407
+ <div className="field mt-4 flex basis-full flex-col gap-2 px-2 pt-2 md:basis-1/2">
408
408
  <label htmlFor="mobile" className="form-field-label">
409
409
  Mobile
410
410
  </label>
@@ -423,7 +423,7 @@ function UserDetailsContent({
423
423
 
424
424
  {!isEditMode ? (
425
425
  <>
426
- <div className="field mt-4 flex w-full flex-col gap-2 px-2 pt-2 md:w-1/2">
426
+ <div className="field mt-4 flex basis-full flex-col gap-2 px-2 pt-2 md:basis-1/2">
427
427
  <label htmlFor="password" className="form-field-label">
428
428
  Password
429
429
  </label>
@@ -439,7 +439,7 @@ function UserDetailsContent({
439
439
  {fieldError("password") ? <SolidMessage severity="error" text={fieldError("password")} /> : null}
440
440
  </div>
441
441
 
442
- <div className="field mt-4 flex w-full flex-col gap-2 px-2 pt-2 md:w-1/2">
442
+ <div className="field mt-4 flex basis-full flex-col gap-2 px-2 pt-2 md:basis-1/2">
443
443
  <label htmlFor="confirmPassword" className="form-field-label">
444
444
  Confirm Password
445
445
  </label>
@@ -1576,7 +1576,8 @@ textarea {
1576
1576
 
1577
1577
  .solid-select {
1578
1578
  width: 100%;
1579
- min-height: 32px;
1579
+ height: 34px;
1580
+ box-sizing: border-box;
1580
1581
  border-radius: 8px;
1581
1582
  border: 1px solid var(--border);
1582
1583
  background: var(--card);
@@ -1593,6 +1594,8 @@ textarea {
1593
1594
  justify-content: flex-start;
1594
1595
  text-align: left;
1595
1596
  cursor: pointer;
1597
+ height: 34px;
1598
+ box-sizing: border-box;
1596
1599
  }
1597
1600
 
1598
1601
  .solid-select-trigger:disabled {
@@ -1674,7 +1677,8 @@ textarea {
1674
1677
 
1675
1678
  .solid-input {
1676
1679
  width: 100%;
1677
- min-height: 32px;
1680
+ height: 34px;
1681
+ box-sizing: border-box;
1678
1682
  border-radius: 8px;
1679
1683
  border: 1px solid var(--border);
1680
1684
  background: var(--card);
@@ -1699,6 +1703,11 @@ textarea {
1699
1703
  cursor: not-allowed;
1700
1704
  }
1701
1705
 
1706
+ .solid-textarea {
1707
+ height: auto;
1708
+ min-height: 34px;
1709
+ }
1710
+
1702
1711
  .solid-autocomplete {
1703
1712
  position: relative;
1704
1713
  width: 100%;
@@ -1710,11 +1719,17 @@ textarea {
1710
1719
  display: flex;
1711
1720
  align-items: center;
1712
1721
  width: 100%;
1722
+ box-sizing: border-box;
1713
1723
  min-width: 0;
1714
1724
  }
1715
1725
 
1726
+ .solid-autocomplete-control:not(.solid-autocomplete-chip-control) {
1727
+ height: 34px;
1728
+ }
1729
+
1716
1730
  .solid-autocomplete-chip-control {
1717
- min-height: 32px;
1731
+ box-sizing: border-box;
1732
+ min-height: 34px;
1718
1733
  border: 1px solid var(--border);
1719
1734
  border-radius: 8px;
1720
1735
  background: var(--card);
@@ -7001,6 +7016,9 @@ html.dark .solid-paginator-btn:hover:not(:disabled),
7001
7016
  .solid-segmented {
7002
7017
  display: inline-flex;
7003
7018
  align-items: stretch;
7019
+ align-self: flex-start;
7020
+ width: fit-content;
7021
+ max-width: 100%;
7004
7022
  border: 1px solid color-mix(in srgb, var(--border) 80%, transparent);
7005
7023
  border-radius: 999px;
7006
7024
  background: color-mix(in srgb, var(--surface-card) 85%, #ffffff 15%);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@solidxai/core-ui",
3
- "version": "0.1.18-beta.1",
3
+ "version": "0.1.18-beta.2",
4
4
  "scripts": {
5
5
  "build:tailwind": "tailwindcss -i ./src/resources/solid-tailwind.css -o ./src/resources/solid-tailwind-generated.css -c ./tailwind.config.js --minify",
6
6
  "prebuild": "npm run build:tailwind && npm run copy-resources && npm run copy-styles",