@solidxai/core-ui 0.1.7-beta.9 → 0.1.7

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/README.md ADDED
@@ -0,0 +1,215 @@
1
+ # @solidxai/core-ui
2
+
3
+ > The React UI framework behind every SolidX application — auth flows, metadata-driven forms and tables, dashboards, and full state management — wired up and ready to use.
4
+
5
+ `@solidxai/core-ui` is the frontend counterpart to [`@solidxai/core`](https://www.npmjs.com/package/@solidxai/core). It ships a complete set of React components, Redux slices, RTK Query API integrations, route guards, and utility hooks designed to work with the SolidX backend platform — so you can build production-grade admin and data-management interfaces without rebuilding the same infrastructure on every project.
6
+
7
+ [![npm version](https://img.shields.io/npm/v/@solidxai/core-ui)](https://www.npmjs.com/package/@solidxai/core-ui)
8
+ [![License: BSL](https://img.shields.io/badge/License-BSL-blue.svg)](https://opensource.org/licenses/BSL-1.1)
9
+ [![Documentation](https://img.shields.io/badge/docs-solidxai.com-blue)](https://docs.solidxai.com/docs)
10
+
11
+
12
+ ## Why @solidxai/core-ui?
13
+
14
+ Building admin dashboards and data-management UIs involves the same heavy lifting every time: authentication screens, data tables with filtering and pagination, form builders for every field type, role-aware UI elements, file upload flows, and a global state layer that ties it all together.
15
+
16
+ `@solidxai/core-ui` bundles all of that into a single, cohesive package that is:
17
+
18
+ - **Metadata-driven** — point `SolidListView` or `SolidFormView` at a model name and get a fully functional table or form without writing column definitions or field components by hand.
19
+ - **Fully typed** — complete TypeScript definitions for every component, hook, slice, and utility.
20
+ - **Extensible** — register custom components and functions into the extension registry; the core engine picks them up automatically.
21
+ - **Backend-agnostic escape hatches** — pre-configured Axios instance and RTK Query base query, but nothing prevents you from calling your own endpoints alongside them.
22
+
23
+
24
+ ## Core Capabilities
25
+
26
+ ### Metadata-driven Views
27
+
28
+ The centrepiece of the library. Describe your data model once and get complete UI for free.
29
+
30
+ - **`SolidListView`** — data table with multi-column sorting, rich filter expressions, group-by, column visibility, row actions, import/export, and pagination; supports 15+ column types including relations, media, rich text, and computed fields.
31
+ - **`SolidFormView`** — full create/edit form rendered from model metadata; supports 15+ field types — boolean, date/time, decimal, integer, short/long text, rich text, JSON, media (single & multiple), static/dynamic selection, relation, email, password, and more.
32
+ - **`SolidFormStepper`** — multi-step wizard wrapper for any form.
33
+ - **`SolidTreeView` / `SolidTreeTable`** — hierarchical tree display, with optional table columns.
34
+ - **`SolidKanbanView`** — kanban board view backed by the same model metadata.
35
+
36
+ ### Authentication
37
+
38
+ Complete auth UI with no extra wiring needed.
39
+
40
+ - Login, registration, forgot/reset password, and force-change-password screens
41
+ - OTP / passwordless flows (SMS and email)
42
+ - Google OAuth2 integration
43
+ - JWT access/refresh token management via `authSlice` and the `baseQueryWithAuth` RTK Query adapter
44
+ - `AuthGuard` and `GuestGuard` route protection components
45
+
46
+ ### Layouts & Navigation
47
+
48
+ - `AdminLayout` / `Layout` — shell layouts with sidebar, header, and footer regions
49
+ - `SolidAiStudioLayout` / `SolidStudio` — studio/configuration mode for admin users
50
+ - `NavbarOne`, `NavbarTwo` — responsive top navigation bars
51
+ - `AdminSidebar`, `UserSidebar` — collapsible sidebars
52
+ - `GlobalSearch` — application-wide search component
53
+ - `FilterMenu` — slide-in advanced filter panel
54
+
55
+ ### Dashboards
56
+
57
+ - `SolidDashboard` — drag-and-drop dashboard grid backed by Gridstack
58
+ - `SolidViewLayoutManager` — layout composer for arranging views
59
+ - Chart.js integration: bar, line, pie, doughnut, data table, and meter-group chart types
60
+ - Security-aware aggregates that respect the active user's role
61
+
62
+ ### Redux Store & API Layer
63
+
64
+ A pre-wired Redux Toolkit store with slices and RTK Query API definitions ready to drop in.
65
+
66
+ | Slices | Purpose |
67
+ |---|---|
68
+ | `authSlice` | Token storage and logout |
69
+ | `userSlice` | Current user and authentication state |
70
+ | `themeSlice` | Light / dark theme |
71
+ | `toastSlice` | Toast notification queue |
72
+ | `popupSlice` | Modal open/close state |
73
+ | `navbarSlice` | Navbar visibility |
74
+ | `dataViewSlice` | Grid vs list view toggle |
75
+
76
+ API slices (RTK Query) cover: auth, users, roles, modules, models, fields, views, menus, media, import/export, dashboards, settings, chatter, API keys, and AI interactions.
77
+
78
+ ### UI Component Library
79
+
80
+ A complete set of primitives built on Radix UI, PrimeReact, and Bootstrap, including:
81
+
82
+ - Buttons, inputs, textareas, password fields, date pickers, autocomplete
83
+ - Dialogs, popovers, tooltips, accordions, tabs, dropdowns
84
+ - Checkboxes, radio groups, switches, sliders, progress bars
85
+ - Rich text editor (Quill), code editor (Monaco / CodeMirror)
86
+ - Media lightbox, image viewer, PDF viewer
87
+ - `SolidIcon` — custom icon registry backed by Lucide React
88
+
89
+ ### State, Routing & Providers
90
+
91
+ - `StoreProvider` — wraps the app with the Redux store
92
+ - `SolidThemeProvider` — theme context
93
+ - `SolidToastProvider` — toast notification context
94
+ - `SolidLayoutRegistryProvider` — layout registry context
95
+ - `getSolidRoutes` — generates the full route tree from module metadata
96
+ - `useSession`, `useRouter`, `usePathname`, `useSearchParams` — familiar routing hooks
97
+
98
+ ### Utilities & Helpers
99
+
100
+ - `solidAxios` — pre-configured Axios instance with auth headers
101
+ - `solidGet`, `solidPost`, `solidPut`, `solidPatch`, `solidDelete` — typed HTTP helpers
102
+ - `signIn`, `signOut`, `getSession`, `refreshAccessToken` — auth session helpers
103
+ - `permissionExpression`, `hasAnyRole` — permission evaluation helpers
104
+ - `downloadFileWithProgress`, `downloadMediaFile`, `fetchS3Url` — file utilities
105
+ - `eventBus` / `AppEvents` — application-wide event system
106
+ - `registerExtensionComponent`, `registerExtensionFunction` — extension registry
107
+
108
+ ### Chatter
109
+
110
+ - `SolidChatter` — per-record messaging thread and activity feed component, mirroring the backend Chatter feature
111
+
112
+
113
+ ## Installation
114
+
115
+ ```bash
116
+ npm install @solidxai/core-ui
117
+ ```
118
+
119
+ ### Peer dependencies
120
+
121
+ ```bash
122
+ npm install react react-dom react-router-dom \
123
+ @reduxjs/toolkit react-redux \
124
+ bootstrap primereact primeicons primeflex
125
+ ```
126
+
127
+
128
+ ## Quick Setup
129
+
130
+ ### 1. Create the store
131
+
132
+ ```typescript
133
+ import { createSolidStore } from '@solidxai/core-ui';
134
+
135
+ export const store = createSolidStore({
136
+ entities: ['User', 'Post'], // your entity names
137
+ reducers: { mySlice: myReducer },
138
+ middlewares: [myMiddleware],
139
+ });
140
+ ```
141
+
142
+ ### 2. Wrap your app
143
+
144
+ ```typescript
145
+ import {
146
+ StoreProvider,
147
+ SolidThemeProvider,
148
+ SolidToastProvider,
149
+ } from '@solidxai/core-ui';
150
+
151
+ export default function App() {
152
+ return (
153
+ <StoreProvider store={store}>
154
+ <SolidThemeProvider>
155
+ <SolidToastProvider>
156
+ <Router />
157
+ </SolidToastProvider>
158
+ </SolidThemeProvider>
159
+ </StoreProvider>
160
+ );
161
+ }
162
+ ```
163
+
164
+ ### 3. Use metadata-driven views
165
+
166
+ ```typescript
167
+ import { SolidListView, SolidFormView } from '@solidxai/core-ui';
168
+
169
+ // Renders a full data table for the "users" model
170
+ <SolidListView moduleName="users" viewName="list" />
171
+
172
+ // Renders a create/edit form for the "users" model
173
+ <SolidFormView moduleName="users" viewName="create" />
174
+ ```
175
+
176
+ For full configuration options — environment variables, theming, extension points, and advanced layout setup — see the [Developer Documentation](https://docs.solidxai.com/docs).
177
+
178
+
179
+ ## Technology Stack
180
+
181
+ | Concern | Technology |
182
+ |---|---|
183
+ | Framework | React 18 + TypeScript |
184
+ | Routing | React Router DOM 7 |
185
+ | State management | Redux Toolkit + RTK Query |
186
+ | HTTP | Axios |
187
+ | UI primitives | Radix UI · PrimeReact · Bootstrap 5 |
188
+ | Data tables | TanStack Table 8 |
189
+ | Charts | Chart.js |
190
+ | Dashboard grid | Gridstack · React Grid Layout |
191
+ | Rich text | Quill |
192
+ | Code editor | Monaco Editor · CodeMirror |
193
+ | Forms | Formik + Yup |
194
+ | Drag and drop | @hello-pangea/dnd |
195
+ | Date/time | Day.js |
196
+ | Icons | Lucide React |
197
+
198
+ ---
199
+
200
+ ## Part of the SolidX Platform
201
+
202
+ `@solidxai/core-ui` is the frontend foundation of the [SolidX](https://solidxai.com) low-code development platform. It pairs with [`@solidxai/core`](https://www.npmjs.com/package/@solidxai/core) (the NestJS backend module) to form a complete full-stack framework. SolidX generates fully open-source, standards-based NestJS + React code that your team owns outright — no proprietary runtime, no lock-in.
203
+
204
+ | | |
205
+ |---|---|
206
+ | Website | [solidxai.com](https://solidxai.com) |
207
+ | Documentation | [docs.solidxai.com](https://docs.solidxai.com/docs) |
208
+ | Backend package | [@solidxai/core](https://www.npmjs.com/package/@solidxai/core) |
209
+ | Support | support@solidxai.com |
210
+
211
+ ---
212
+
213
+ ## License
214
+
215
+ BSL-1.1 © [Logicloop](https://logicloop.io)
@@ -197,7 +197,7 @@ var SolidLogin = function (_a) {
197
197
  // identifier: Yup.string().required("required"),
198
198
  // })
199
199
  // }
200
- validationSchema: Yup.object({ identifier: Yup.string().required("Rxequired") }), enableReinitialize: false, onSubmit: function (values, _a) {
200
+ validationSchema: Yup.object({ identifier: Yup.string().required("Required") }), enableReinitialize: false, onSubmit: function (values, _a) {
201
201
  var setSubmitting = _a.setSubmitting, setErrors = _a.setErrors;
202
202
  return __awaiter(void 0, void 0, void 0, function () {
203
203
  var RESEND_OTP_KEY, RESEND_OTP_TIMER_MIN, RESEND_OTP_TIMER, authType, payload, storedTimeStr, now, lastSent, elapsed, remaining, formatted, response, identifier, err_1;
@@ -1 +1 @@
1
- {"version":3,"file":"SolidLogin.js","sourceRoot":"","sources":["../../../src/components/auth/SolidLogin.tsx"],"names":[],"mappings":"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","sourcesContent":["import { Form, Formik } from \"formik\";\nimport { signIn } from \"../../adapters/auth/index\";\nimport Link from \"../common/Link\";\nimport { useRouter } from \"../../hooks/useRouter\";\nimport { useEffect, useState } from \"react\";\nimport * as Yup from \"yup\";\nimport { SocialMediaLogin } from \"../common/SocialMediaLogin\";\nimport { useInitateLoginMutation } from \"../../redux/api/authApi\";\nimport { formatTimeLeft } from \"../../helpers/resendOtpHelper\";\nimport { ERROR_MESSAGES } from \"../../constants/error-messages\";\nimport { useLazyGetAuthSettingsQuery } from \"../../redux/api/solidSettingsApi\";\nimport { env } from \"../../adapters/env\";\nimport { showToast } from \"../../redux/features/toastSlice\";\nimport { AuthTabs } from \"./AuthTabs\";\nimport { loadSession } from \"../../adapters/auth/storage\";\nimport { hasAnyRole } from \"../../helpers/rolesHelper\";\nimport { useDispatch } from \"react-redux\";\nimport { SolidButton, SolidDivider, SolidInput, SolidMessage, SolidPasswordInput, SolidRadioGroup } from \"../shad-cn-ui\";\n\ninterface AuthModesProps {\n passwordBasedAuth: boolean;\n passwordLessAuth: boolean;\n}\nconst SolidLogin = ({ signInValidatorLabel, signInValidatorPlaceholder }: any) => {\n\n const [trigger, { data: solidSettingsData }] = useLazyGetAuthSettingsQuery();\n useEffect(() => {\n trigger(\"\") // Fetch settings on mount\n }, [trigger])\n\n const [initiateLogin] = useInitateLoginMutation();\n const [activeIndex, setActiveIndex] = useState(0);\n useEffect(() => {\n sessionStorage.removeItem(\"app-mounted\");\n }, [])\n const dispatch = useDispatch();\n const router = useRouter();\n\n const isFormFieldValid = (formik: any, fieldName: string) =>\n formik.touched[fieldName] && formik.errors[fieldName];\n const emailOrUsernameRegex = /^[a-zA-Z0-9._]{2,30}$/;\n\n const PasswordLogin = () => {\n return (\n <Formik\n initialValues={{\n identifier: \"\",\n // email: initialEmail,\n password: \"\",\n // rememberMe: rememberMe,\n }}\n enableReinitialize={false}\n validationSchema={Yup.object({\n identifier: Yup.string()\n .required(ERROR_MESSAGES.FIELD_REUQIRED(\"Email or Username\"))\n .test(\n \"email-or-username\",\n ERROR_MESSAGES.FIELD_INVALID(\"email or username\"),\n (value) => {\n // if (!value) return false;\n\n const isEmail = Yup.string().email().isValidSync(value);\n const isUsername = emailOrUsernameRegex.test(value);\n\n return isEmail || isUsername;\n }\n ),\n password: Yup.string().required(ERROR_MESSAGES.FIELD_REUQIRED(\"Password\")),\n })}\n onSubmit={async (values, { setSubmitting, setErrors }) => {\n try {\n // Handle Remember Me\n // if (values.rememberMe) {\n // localStorage.setItem(\"rememberedEmail\", values.email);\n // } else {\n // localStorage.removeItem(\"rememberedEmail\");\n // }\n const response = await signIn(\"credentials\", {\n redirect: false,\n identifier: values.identifier,\n password: values.password,\n });\n\n if (response?.error) {\n dispatch(showToast({ severity: \"error\", summary: ERROR_MESSAGES.LOGIN_ERROR, detail: response.error }));\n setErrors({\n identifier: ERROR_MESSAGES.INVALID_CREDENTIALS,\n password: ERROR_MESSAGES.INVALID_CREDENTIALS,\n });\n } else {\n dispatch(showToast({ severity: \"success\", summary: ERROR_MESSAGES.LOGIN_SUCCESS, detail: ERROR_MESSAGES.DASHBOARD_REDIRECTING }));\n const session = loadSession();\n const isAdmin = hasAnyRole(session?.user?.roles, [\"Admin\"]);\n const isDev = env(\"VITE_SOLIDX_ENV\") === \"dev\";\n const redirectUrl = isAdmin && isDev ? \"/studio\" : (env(\"NEXT_PUBLIC_LOGIN_REDIRECT_URL\") || \"/admin\");\n router.push(redirectUrl);\n }\n } catch (error: any) {\n dispatch(showToast({ severity: \"error\", summary: ERROR_MESSAGES.LOGIN_ERROR, detail: error?.data ? error?.data?.message : ERROR_MESSAGES.SOMETHING_WRONG }));\n } finally {\n setSubmitting(false); // Re-enable the button after submission\n }\n }}\n >\n {(formik) => (\n <Form>\n <div className=\"flex flex-column gap-2 mt-3\">\n <label htmlFor=\"email\" className=\"solid-auth-input-label\">{signInValidatorLabel ? signInValidatorLabel : \"Username or Email\"}</label>\n <SolidInput\n id=\"identifier\"\n name=\"identifier\"\n placeholder={signInValidatorPlaceholder ? signInValidatorPlaceholder : \"Email or Username\"}\n onChange={formik.handleChange}\n value={formik.values.identifier}\n onBlur={formik.handleBlur}\n aria-invalid={!!isFormFieldValid(formik, \"identifier\")}\n className=\"w-full\"\n />\n {isFormFieldValid(formik, \"identifier\") && (\n <SolidMessage\n className=\"text-red-500 text-sm\"\n severity=\"error\"\n text={formik?.errors?.identifier?.toString()}\n />\n )}\n </div>\n <div className=\"flex flex-column gap-1 mt-4\" style={{}}>\n <div className=\"flex align-items-center justify-content-between\">\n <label htmlFor=\"password\" className=\"solid-auth-input-label\">Password</label>\n <Link href={\"/auth/initiate-forgot-password\"} className=\"solid-auth-inline-link\">Forgot your password?</Link>\n </div>\n <SolidPasswordInput\n id=\"password\"\n name=\"password\"\n value={formik.values.password}\n onChange={formik.handleChange}\n toggle\n className=\"w-full\"\n aria-invalid={!!isFormFieldValid(formik, \"password\")}\n />\n {isFormFieldValid(formik, \"password\") && (\n <SolidMessage\n className=\"text-red-500 text-sm\"\n severity=\"error\"\n text={formik?.errors?.password?.toString()}\n />\n )}\n </div>\n {/* <div className=\"flex align-items-center mt-4\">\n <Checkbox inputId=\"remember\" onChange={(e: any) => setChecked(e.checked)} checked={checked} />\n <label htmlFor=\"remember\" className=\"ml-2\">Remember me</label>\n </div> */}\n <div className=\"mt-4\">\n <SolidButton\n type=\"submit\"\n className=\"w-full font-light auth-submit-button\"\n label=\"Sign In\"\n disabled={formik.isSubmitting}\n loading={formik.isSubmitting}\n />\n </div>\n </Form>\n )}\n </Formik>\n )\n }\n\n const PasswordLessLogin = () => {\n const validationType = solidSettingsData?.data?.passwordlessLoginValidateWhat || \"email\";\n const [selectedAuthMethod, setSelectedAuthMethod] = useState<\"email\" | \"mobile\">(\"email\");\n\n const getFieldConfig = () => {\n if (validationType === \"selectable\") {\n if (selectedAuthMethod === \"mobile\") {\n return {\n label: \"Mobile Number / Username\",\n placeholder: \"Enter your mobile number or username\",\n type: \"mobile\",\n // validationSchema: Yup.string()\n // .matches(/^[0-9]{10}$/, ERROR_MESSAGES.FIELD_INVALID('mobile number'))\n // .required(ERROR_MESSAGES.FIELD_REUQIRED('Mobile number'))\n };\n } else {\n return {\n label: \"Email Address / Username\",\n placeholder: \"Enter your email or username\",\n type: \"email\",\n // validationSchema: Yup.string()\n // .email(ERROR_MESSAGES.FIELD_INVALID('email address'))\n // .required(ERROR_MESSAGES.FIELD_REUQIRED('Email'))\n };\n }\n }\n switch (validationType) {\n case \"mobile\":\n return {\n label: signInValidatorLabel || \"Mobile Number / Username\",\n placeholder: signInValidatorPlaceholder || \"Enter your mobile number / username\",\n type: \"mobile\",\n // validationSchema: Yup.string()\n // .matches(/^[0-9]{10}$/, ERROR_MESSAGES.FIELD_INVALID('mobile number'))\n // .required(ERROR_MESSAGES.FIELD_REUQIRED('Mobile number'))\n };\n case \"email\":\n default:\n return {\n label: signInValidatorLabel || \"Email / Username\",\n placeholder: signInValidatorPlaceholder || \"Email ID / username\",\n type: \"email\",\n // validationSchema: Yup.string()\n // .email(ERROR_MESSAGES.FIELD_INVALID('email address'))\n // .required(ERROR_MESSAGES.FIELD_REUQIRED('Email'))\n };\n }\n };\n\n const fieldConfig = getFieldConfig();\n return (\n <Formik\n initialValues={{\n identifier: \"\",\n }}\n // validationSchema={\n // fieldConfig.validationSchema \n // ? Yup.object({\n // identifier: fieldConfig.validationSchema\n // })\n // : Yup.object({\n // identifier: Yup.string().required(\"required\"),\n // })\n // }\n validationSchema={\n Yup.object({ identifier: Yup.string().required(\"Rxequired\") })\n }\n enableReinitialize={false}\n onSubmit={async (values, { setSubmitting, setErrors }) => {\n try {\n const RESEND_OTP_KEY = `resendOtpLogin_${values.identifier}`;\n const RESEND_OTP_TIMER_MIN = parseFloat(env(\"NEXT_PUBLIC_RESEND_OTP_TIMER\") || '0.5');\n const RESEND_OTP_TIMER = Math.round(RESEND_OTP_TIMER_MIN * 60);\n\n // Use selectedAuthMethod for selectable, otherwise use fieldConfig.type\n const authType = validationType === \"selectable\" ? selectedAuthMethod : fieldConfig.type;\n\n const payload: { identifier: string; type?: string } = {\n identifier: values.identifier,\n };\n if (validationType === \"selectable\") {\n payload.type = selectedAuthMethod;\n }\n\n const storedTimeStr = localStorage.getItem(RESEND_OTP_KEY);\n const now = Date.now();\n if (storedTimeStr) {\n const lastSent = parseInt(storedTimeStr, 10);\n const elapsed = Math.floor((now - lastSent) / 1000);\n const remaining = RESEND_OTP_TIMER - elapsed;\n\n if (remaining > 0) {\n const formatted = formatTimeLeft(remaining);\n dispatch(showToast({ severity: \"error\", summary: ERROR_MESSAGES.PLEASE_WAIT, detail: ERROR_MESSAGES.OPT_FORMAT(formatted) }));\n setSubmitting(false);\n return; // Prevent request\n }\n }\n const response = await initiateLogin(payload).unwrap(); // Call mutation trigger\n\n if (response?.statusCode === 200) {\n dispatch(showToast({ severity: \"success\", summary: ERROR_MESSAGES.OPT_RESEND, detail: response?.data?.message }));\n const identifier = values.identifier;\n localStorage.setItem(`resendOtpLogin_${identifier}`, Date.now().toString());\n router.push(`/auth/initiate-login?identifier=${encodeURIComponent(identifier)}&type=${authType}`);\n } else {\n dispatch(showToast({ severity: \"error\", summary: ERROR_MESSAGES.LOGIN_ERROR, detail: response.error }));\n }\n } catch (err: any) {\n dispatch(showToast({ severity: \"error\", summary: ERROR_MESSAGES.LOGIN_ERROR, detail: err?.data ? err?.data?.message : ERROR_MESSAGES.SOMETHING_WRONG }));\n setErrors({\n identifier: \"Invalid Credentials\",\n });\n } finally {\n setSubmitting(false);\n }\n }}\n >\n {(formik) => (\n <Form>\n {/* Radio buttons for selectable type */}\n {validationType === \"selectable\" && (\n <div className=\"flex flex-column gap-3 mt-3\">\n <label className=\"solid-auth-input-label\">Select Authentication Method</label>\n <SolidRadioGroup\n name=\"authMethod\"\n value={selectedAuthMethod}\n options={[\n { label: \"Email / Username\", value: \"email\" },\n { label: \"Mobile / Username\", value: \"mobile\" },\n ]}\n onChange={(value) => {\n setSelectedAuthMethod(value);\n formik.setFieldValue(\"identifier\", \"\");\n }}\n className=\"solid-auth-radio-options flex gap-4 flex-wrap\"\n />\n </div>\n )}\n <div className=\"flex flex-column gap-2 mt-3\">\n <label htmlFor=\"identifier\" className=\"solid-auth-input-label\">{fieldConfig.label}</label>\n <SolidInput\n id=\"identifier\"\n name=\"identifier\"\n placeholder={fieldConfig.placeholder}\n onChange={formik.handleChange}\n value={formik.values.identifier}\n onBlur={formik.handleBlur}\n aria-invalid={!!isFormFieldValid(formik, \"identifier\")}\n className=\"w-full\"\n />\n {isFormFieldValid(formik, \"identifier\") && (\n <SolidMessage\n className=\"text-red-500 text-sm\"\n severity=\"error\"\n text={ signInValidatorLabel ? `${signInValidatorLabel} is ${formik?.errors?.identifier?.toString()}` : formik?.errors?.identifier?.toString()}\n />\n )}\n </div>\n <div className=\"mt-4\">\n <SolidButton\n type=\"submit\"\n className=\"w-full font-light auth-submit-button\"\n label=\"Sign In\"\n disabled={formik.isSubmitting}\n loading={formik.isSubmitting}\n />\n </div>\n </Form>\n )}\n </Formik>\n )\n }\n\n const RenderAuthModes: React.FC<AuthModesProps> = ({ passwordBasedAuth, passwordLessAuth }) => {\n if (passwordBasedAuth && passwordLessAuth) {\n return (\n <AuthTabs\n activeIndex={activeIndex}\n onChange={setActiveIndex}\n tabs={[\n { key: \"with-password\", label: \"With Password\", content: <PasswordLogin /> },\n { key: \"without-password\", label: \"Without Password\", content: <PasswordLessLogin /> },\n ]}\n />\n );\n } else if (passwordBasedAuth) {\n return <PasswordLogin />;\n } else if (passwordLessAuth) {\n return <PasswordLessLogin />;\n } else {\n return <p>No authentication method available</p>;\n }\n };\n\n return (\n <div className=\"\">\n <div className={`auth-container ${solidSettingsData?.data?.authPagesLayout === 'center' ? 'center' : 'side'}`}>\n <h2 className=\"solid-auth-title\">Login to your account</h2>\n <p className=\"solid-auth-helper\">Enter your credentials below to login to your account</p>\n\n <RenderAuthModes passwordBasedAuth={solidSettingsData?.data?.passwordBasedAuth} passwordLessAuth={solidSettingsData?.data?.passwordLessAuth} />\n {solidSettingsData?.data?.iamGoogleOAuthEnabled && (\n <>\n <div className=\"solid-auth-divider flex align-items-center gap-2 my-4\">\n <SolidDivider className=\"flex-1\" />\n <span className=\"text-sm text-500\">Or continue with</span>\n <SolidDivider className=\"flex-1\" />\n </div>\n <SocialMediaLogin />\n </>\n )}\n </div>\n {solidSettingsData?.data?.allowPublicRegistration && <div className=\"mt-3 md:mt-5\">\n <div className=\"text-sm text-center text-400 secondary-dark-color\">\n Don’t have an account ? <Link className=\"font-bold\" href=\"/auth/register\">Sign Up</Link>\n </div>\n </div>}\n </div>\n );\n};\n\nexport default SolidLogin;\n"]}
1
+ {"version":3,"file":"SolidLogin.js","sourceRoot":"","sources":["../../../src/components/auth/SolidLogin.tsx"],"names":[],"mappings":"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","sourcesContent":["import { Form, Formik } from \"formik\";\nimport { signIn } from \"../../adapters/auth/index\";\nimport Link from \"../common/Link\";\nimport { useRouter } from \"../../hooks/useRouter\";\nimport { useEffect, useState } from \"react\";\nimport * as Yup from \"yup\";\nimport { SocialMediaLogin } from \"../common/SocialMediaLogin\";\nimport { useInitateLoginMutation } from \"../../redux/api/authApi\";\nimport { formatTimeLeft } from \"../../helpers/resendOtpHelper\";\nimport { ERROR_MESSAGES } from \"../../constants/error-messages\";\nimport { useLazyGetAuthSettingsQuery } from \"../../redux/api/solidSettingsApi\";\nimport { env } from \"../../adapters/env\";\nimport { showToast } from \"../../redux/features/toastSlice\";\nimport { AuthTabs } from \"./AuthTabs\";\nimport { loadSession } from \"../../adapters/auth/storage\";\nimport { hasAnyRole } from \"../../helpers/rolesHelper\";\nimport { useDispatch } from \"react-redux\";\nimport { SolidButton, SolidDivider, SolidInput, SolidMessage, SolidPasswordInput, SolidRadioGroup } from \"../shad-cn-ui\";\n\ninterface AuthModesProps {\n passwordBasedAuth: boolean;\n passwordLessAuth: boolean;\n}\nconst SolidLogin = ({ signInValidatorLabel, signInValidatorPlaceholder }: any) => {\n\n const [trigger, { data: solidSettingsData }] = useLazyGetAuthSettingsQuery();\n useEffect(() => {\n trigger(\"\") // Fetch settings on mount\n }, [trigger])\n\n const [initiateLogin] = useInitateLoginMutation();\n const [activeIndex, setActiveIndex] = useState(0);\n useEffect(() => {\n sessionStorage.removeItem(\"app-mounted\");\n }, [])\n const dispatch = useDispatch();\n const router = useRouter();\n\n const isFormFieldValid = (formik: any, fieldName: string) =>\n formik.touched[fieldName] && formik.errors[fieldName];\n const emailOrUsernameRegex = /^[a-zA-Z0-9._]{2,30}$/;\n\n const PasswordLogin = () => {\n return (\n <Formik\n initialValues={{\n identifier: \"\",\n // email: initialEmail,\n password: \"\",\n // rememberMe: rememberMe,\n }}\n enableReinitialize={false}\n validationSchema={Yup.object({\n identifier: Yup.string()\n .required(ERROR_MESSAGES.FIELD_REUQIRED(\"Email or Username\"))\n .test(\n \"email-or-username\",\n ERROR_MESSAGES.FIELD_INVALID(\"email or username\"),\n (value) => {\n // if (!value) return false;\n\n const isEmail = Yup.string().email().isValidSync(value);\n const isUsername = emailOrUsernameRegex.test(value);\n\n return isEmail || isUsername;\n }\n ),\n password: Yup.string().required(ERROR_MESSAGES.FIELD_REUQIRED(\"Password\")),\n })}\n onSubmit={async (values, { setSubmitting, setErrors }) => {\n try {\n // Handle Remember Me\n // if (values.rememberMe) {\n // localStorage.setItem(\"rememberedEmail\", values.email);\n // } else {\n // localStorage.removeItem(\"rememberedEmail\");\n // }\n const response = await signIn(\"credentials\", {\n redirect: false,\n identifier: values.identifier,\n password: values.password,\n });\n\n if (response?.error) {\n dispatch(showToast({ severity: \"error\", summary: ERROR_MESSAGES.LOGIN_ERROR, detail: response.error }));\n setErrors({\n identifier: ERROR_MESSAGES.INVALID_CREDENTIALS,\n password: ERROR_MESSAGES.INVALID_CREDENTIALS,\n });\n } else {\n dispatch(showToast({ severity: \"success\", summary: ERROR_MESSAGES.LOGIN_SUCCESS, detail: ERROR_MESSAGES.DASHBOARD_REDIRECTING }));\n const session = loadSession();\n const isAdmin = hasAnyRole(session?.user?.roles, [\"Admin\"]);\n const isDev = env(\"VITE_SOLIDX_ENV\") === \"dev\";\n const redirectUrl = isAdmin && isDev ? \"/studio\" : (env(\"NEXT_PUBLIC_LOGIN_REDIRECT_URL\") || \"/admin\");\n router.push(redirectUrl);\n }\n } catch (error: any) {\n dispatch(showToast({ severity: \"error\", summary: ERROR_MESSAGES.LOGIN_ERROR, detail: error?.data ? error?.data?.message : ERROR_MESSAGES.SOMETHING_WRONG }));\n } finally {\n setSubmitting(false); // Re-enable the button after submission\n }\n }}\n >\n {(formik) => (\n <Form>\n <div className=\"flex flex-column gap-2 mt-3\">\n <label htmlFor=\"email\" className=\"solid-auth-input-label\">{signInValidatorLabel ? signInValidatorLabel : \"Username or Email\"}</label>\n <SolidInput\n id=\"identifier\"\n name=\"identifier\"\n placeholder={signInValidatorPlaceholder ? signInValidatorPlaceholder : \"Email or Username\"}\n onChange={formik.handleChange}\n value={formik.values.identifier}\n onBlur={formik.handleBlur}\n aria-invalid={!!isFormFieldValid(formik, \"identifier\")}\n className=\"w-full\"\n />\n {isFormFieldValid(formik, \"identifier\") && (\n <SolidMessage\n className=\"text-red-500 text-sm\"\n severity=\"error\"\n text={formik?.errors?.identifier?.toString()}\n />\n )}\n </div>\n <div className=\"flex flex-column gap-1 mt-4\" style={{}}>\n <div className=\"flex align-items-center justify-content-between\">\n <label htmlFor=\"password\" className=\"solid-auth-input-label\">Password</label>\n <Link href={\"/auth/initiate-forgot-password\"} className=\"solid-auth-inline-link\">Forgot your password?</Link>\n </div>\n <SolidPasswordInput\n id=\"password\"\n name=\"password\"\n value={formik.values.password}\n onChange={formik.handleChange}\n toggle\n className=\"w-full\"\n aria-invalid={!!isFormFieldValid(formik, \"password\")}\n />\n {isFormFieldValid(formik, \"password\") && (\n <SolidMessage\n className=\"text-red-500 text-sm\"\n severity=\"error\"\n text={formik?.errors?.password?.toString()}\n />\n )}\n </div>\n {/* <div className=\"flex align-items-center mt-4\">\n <Checkbox inputId=\"remember\" onChange={(e: any) => setChecked(e.checked)} checked={checked} />\n <label htmlFor=\"remember\" className=\"ml-2\">Remember me</label>\n </div> */}\n <div className=\"mt-4\">\n <SolidButton\n type=\"submit\"\n className=\"w-full font-light auth-submit-button\"\n label=\"Sign In\"\n disabled={formik.isSubmitting}\n loading={formik.isSubmitting}\n />\n </div>\n </Form>\n )}\n </Formik>\n )\n }\n\n const PasswordLessLogin = () => {\n const validationType = solidSettingsData?.data?.passwordlessLoginValidateWhat || \"email\";\n const [selectedAuthMethod, setSelectedAuthMethod] = useState<\"email\" | \"mobile\">(\"email\");\n\n const getFieldConfig = () => {\n if (validationType === \"selectable\") {\n if (selectedAuthMethod === \"mobile\") {\n return {\n label: \"Mobile Number / Username\",\n placeholder: \"Enter your mobile number or username\",\n type: \"mobile\",\n // validationSchema: Yup.string()\n // .matches(/^[0-9]{10}$/, ERROR_MESSAGES.FIELD_INVALID('mobile number'))\n // .required(ERROR_MESSAGES.FIELD_REUQIRED('Mobile number'))\n };\n } else {\n return {\n label: \"Email Address / Username\",\n placeholder: \"Enter your email or username\",\n type: \"email\",\n // validationSchema: Yup.string()\n // .email(ERROR_MESSAGES.FIELD_INVALID('email address'))\n // .required(ERROR_MESSAGES.FIELD_REUQIRED('Email'))\n };\n }\n }\n switch (validationType) {\n case \"mobile\":\n return {\n label: signInValidatorLabel || \"Mobile Number / Username\",\n placeholder: signInValidatorPlaceholder || \"Enter your mobile number / username\",\n type: \"mobile\",\n // validationSchema: Yup.string()\n // .matches(/^[0-9]{10}$/, ERROR_MESSAGES.FIELD_INVALID('mobile number'))\n // .required(ERROR_MESSAGES.FIELD_REUQIRED('Mobile number'))\n };\n case \"email\":\n default:\n return {\n label: signInValidatorLabel || \"Email / Username\",\n placeholder: signInValidatorPlaceholder || \"Email ID / username\",\n type: \"email\",\n // validationSchema: Yup.string()\n // .email(ERROR_MESSAGES.FIELD_INVALID('email address'))\n // .required(ERROR_MESSAGES.FIELD_REUQIRED('Email'))\n };\n }\n };\n\n const fieldConfig = getFieldConfig();\n return (\n <Formik\n initialValues={{\n identifier: \"\",\n }}\n // validationSchema={\n // fieldConfig.validationSchema \n // ? Yup.object({\n // identifier: fieldConfig.validationSchema\n // })\n // : Yup.object({\n // identifier: Yup.string().required(\"required\"),\n // })\n // }\n validationSchema={\n Yup.object({ identifier: Yup.string().required(\"Required\") })\n }\n enableReinitialize={false}\n onSubmit={async (values, { setSubmitting, setErrors }) => {\n try {\n const RESEND_OTP_KEY = `resendOtpLogin_${values.identifier}`;\n const RESEND_OTP_TIMER_MIN = parseFloat(env(\"NEXT_PUBLIC_RESEND_OTP_TIMER\") || '0.5');\n const RESEND_OTP_TIMER = Math.round(RESEND_OTP_TIMER_MIN * 60);\n\n // Use selectedAuthMethod for selectable, otherwise use fieldConfig.type\n const authType = validationType === \"selectable\" ? selectedAuthMethod : fieldConfig.type;\n\n const payload: { identifier: string; type?: string } = {\n identifier: values.identifier,\n };\n if (validationType === \"selectable\") {\n payload.type = selectedAuthMethod;\n }\n\n const storedTimeStr = localStorage.getItem(RESEND_OTP_KEY);\n const now = Date.now();\n if (storedTimeStr) {\n const lastSent = parseInt(storedTimeStr, 10);\n const elapsed = Math.floor((now - lastSent) / 1000);\n const remaining = RESEND_OTP_TIMER - elapsed;\n\n if (remaining > 0) {\n const formatted = formatTimeLeft(remaining);\n dispatch(showToast({ severity: \"error\", summary: ERROR_MESSAGES.PLEASE_WAIT, detail: ERROR_MESSAGES.OPT_FORMAT(formatted) }));\n setSubmitting(false);\n return; // Prevent request\n }\n }\n const response = await initiateLogin(payload).unwrap(); // Call mutation trigger\n\n if (response?.statusCode === 200) {\n dispatch(showToast({ severity: \"success\", summary: ERROR_MESSAGES.OPT_RESEND, detail: response?.data?.message }));\n const identifier = values.identifier;\n localStorage.setItem(`resendOtpLogin_${identifier}`, Date.now().toString());\n router.push(`/auth/initiate-login?identifier=${encodeURIComponent(identifier)}&type=${authType}`);\n } else {\n dispatch(showToast({ severity: \"error\", summary: ERROR_MESSAGES.LOGIN_ERROR, detail: response.error }));\n }\n } catch (err: any) {\n dispatch(showToast({ severity: \"error\", summary: ERROR_MESSAGES.LOGIN_ERROR, detail: err?.data ? err?.data?.message : ERROR_MESSAGES.SOMETHING_WRONG }));\n setErrors({\n identifier: \"Invalid Credentials\",\n });\n } finally {\n setSubmitting(false);\n }\n }}\n >\n {(formik) => (\n <Form>\n {/* Radio buttons for selectable type */}\n {validationType === \"selectable\" && (\n <div className=\"flex flex-column gap-3 mt-3\">\n <label className=\"solid-auth-input-label\">Select Authentication Method</label>\n <SolidRadioGroup\n name=\"authMethod\"\n value={selectedAuthMethod}\n options={[\n { label: \"Email / Username\", value: \"email\" },\n { label: \"Mobile / Username\", value: \"mobile\" },\n ]}\n onChange={(value) => {\n setSelectedAuthMethod(value);\n formik.setFieldValue(\"identifier\", \"\");\n }}\n className=\"solid-auth-radio-options flex gap-4 flex-wrap\"\n />\n </div>\n )}\n <div className=\"flex flex-column gap-2 mt-3\">\n <label htmlFor=\"identifier\" className=\"solid-auth-input-label\">{fieldConfig.label}</label>\n <SolidInput\n id=\"identifier\"\n name=\"identifier\"\n placeholder={fieldConfig.placeholder}\n onChange={formik.handleChange}\n value={formik.values.identifier}\n onBlur={formik.handleBlur}\n aria-invalid={!!isFormFieldValid(formik, \"identifier\")}\n className=\"w-full\"\n />\n {isFormFieldValid(formik, \"identifier\") && (\n <SolidMessage\n className=\"text-red-500 text-sm\"\n severity=\"error\"\n text={signInValidatorLabel ? `${signInValidatorLabel} is ${formik?.errors?.identifier?.toString()}` : formik?.errors?.identifier?.toString()}\n />\n )}\n </div>\n <div className=\"mt-4\">\n <SolidButton\n type=\"submit\"\n className=\"w-full font-light auth-submit-button\"\n label=\"Sign In\"\n disabled={formik.isSubmitting}\n loading={formik.isSubmitting}\n />\n </div>\n </Form>\n )}\n </Formik>\n )\n }\n\n const RenderAuthModes: React.FC<AuthModesProps> = ({ passwordBasedAuth, passwordLessAuth }) => {\n if (passwordBasedAuth && passwordLessAuth) {\n return (\n <AuthTabs\n activeIndex={activeIndex}\n onChange={setActiveIndex}\n tabs={[\n { key: \"with-password\", label: \"With Password\", content: <PasswordLogin /> },\n { key: \"without-password\", label: \"Without Password\", content: <PasswordLessLogin /> },\n ]}\n />\n );\n } else if (passwordBasedAuth) {\n return <PasswordLogin />;\n } else if (passwordLessAuth) {\n return <PasswordLessLogin />;\n } else {\n return <p>No authentication method available</p>;\n }\n };\n\n return (\n <div className=\"\">\n <div className={`auth-container ${solidSettingsData?.data?.authPagesLayout === 'center' ? 'center' : 'side'}`}>\n <h2 className=\"solid-auth-title\">Login to your account</h2>\n <p className=\"solid-auth-helper\">Enter your credentials below to login to your account</p>\n\n <RenderAuthModes passwordBasedAuth={solidSettingsData?.data?.passwordBasedAuth} passwordLessAuth={solidSettingsData?.data?.passwordLessAuth} />\n {solidSettingsData?.data?.iamGoogleOAuthEnabled && (\n <>\n <div className=\"solid-auth-divider flex align-items-center gap-2 my-4\">\n <SolidDivider className=\"flex-1\" />\n <span className=\"text-sm text-500\">Or continue with</span>\n <SolidDivider className=\"flex-1\" />\n </div>\n <SocialMediaLogin />\n </>\n )}\n </div>\n {solidSettingsData?.data?.allowPublicRegistration && <div className=\"mt-3 md:mt-5\">\n <div className=\"text-sm text-center text-400 secondary-dark-color\">\n Don’t have an account ? <Link className=\"font-bold\" href=\"/auth/register\">Sign Up</Link>\n </div>\n </div>}\n </div>\n );\n};\n\nexport default SolidLogin;\n"]}
@@ -230,7 +230,7 @@ const SolidLogin = ({ signInValidatorLabel, signInValidatorPlaceholder }: any) =
230
230
  // })
231
231
  // }
232
232
  validationSchema={
233
- Yup.object({ identifier: Yup.string().required("Rxequired") })
233
+ Yup.object({ identifier: Yup.string().required("Required") })
234
234
  }
235
235
  enableReinitialize={false}
236
236
  onSubmit={async (values, { setSubmitting, setErrors }) => {
@@ -320,7 +320,7 @@ const SolidLogin = ({ signInValidatorLabel, signInValidatorPlaceholder }: any) =
320
320
  <SolidMessage
321
321
  className="text-red-500 text-sm"
322
322
  severity="error"
323
- text={ signInValidatorLabel ? `${signInValidatorLabel} is ${formik?.errors?.identifier?.toString()}` : formik?.errors?.identifier?.toString()}
323
+ text={signInValidatorLabel ? `${signInValidatorLabel} is ${formik?.errors?.identifier?.toString()}` : formik?.errors?.identifier?.toString()}
324
324
  />
325
325
  )}
326
326
  </div>
@@ -60,7 +60,7 @@ import { useDropzone } from 'react-dropzone';
60
60
  import { SettingDropzoneActivePlaceholder } from './SolidSettings/SettingDropzoneActivePlaceholder';
61
61
  import { SolidUploadedImage } from './SolidSettings/SolidUploadedImage';
62
62
  import { SettingsImageRemoveButton } from './SolidSettings/SettingsImageRemoveButton';
63
- import { AiModelConfigTab } from './SolidSettings/LlmSettings/AiModelConfigTab';
63
+ import { ModelConfigTab, ProvidersTab, ensureBuiltInProviders } from './SolidSettings/LlmSettings/AiModelConfigTab';
64
64
  import { useDispatch } from 'react-redux';
65
65
  import { ERROR_MESSAGES } from '../../constants/error-messages';
66
66
  import { useBulkUpdateSolidSettingsMutation, useLazyGetSolidSettingsQuery } from '../../redux/api/solidSettingsApi';
@@ -117,8 +117,8 @@ export var GeneralSettings = function () {
117
117
  var _a;
118
118
  var defaultAiConfig = {
119
119
  models: {
120
- default: { providerKey: "", behavior: { streaming: false, custom: "" } },
121
- fast: { providerKey: "", behavior: { streaming: false, custom: "" } },
120
+ default: { providerId: "", model: "", behavior: { streaming: false, custom: "" } },
121
+ fast: { providerId: "", model: "", behavior: { streaming: false, custom: "" } },
122
122
  },
123
123
  providers: {},
124
124
  };
@@ -456,35 +456,37 @@ export var GeneralSettings = function () {
456
456
  _jsx(AiSettingsSection, { aiConfig: formik.values.solidXGenAiCodeBuilderConfig, onAiConfigChange: handleAiConfigChange }), pathname.includes("api-keys") && ((_43 = session === null || session === void 0 ? void 0 : session.user) === null || _43 === void 0 ? void 0 : _43.id) &&
457
457
  _jsx(ApiKeysTab, { userId: session.user.id, canCreate: (_45 = (_44 = session === null || session === void 0 ? void 0 : session.user) === null || _44 === void 0 ? void 0 : _44.isAllowedToGenerateApiKeys) !== null && _45 !== void 0 ? _45 : false })] })] }) }) }) }));
458
458
  };
459
- var AI_TABS = [
460
- { key: "fast", label: "Fast Model", title: "Fast Model" },
461
- { key: "default", label: "Intelligent Model", title: "Intelligent Model (Reasoning & tool use)" },
462
- ];
463
459
  var DEFAULT_BEHAVIOR = { streaming: false, custom: "" };
460
+ var DEFAULT_MODEL_ENTRY = { providerId: "", model: "", behavior: DEFAULT_BEHAVIOR };
464
461
  var AiSettingsSection = function (_a) {
462
+ var _b, _c, _d, _e, _f;
465
463
  var aiConfig = _a.aiConfig, onAiConfigChange = _a.onAiConfigChange;
466
- var _b = useState("fast"), activeTab = _b[0], setActiveTab = _b[1];
467
- var tabItems = AI_TABS.map(function (tab) {
468
- var _a, _b, _c, _d, _e, _f, _g;
469
- var modelEntry = (_b = (_a = aiConfig.models) === null || _a === void 0 ? void 0 : _a[tab.key]) !== null && _b !== void 0 ? _b : { providerKey: "", behavior: DEFAULT_BEHAVIOR };
470
- var providerKey = (_c = modelEntry.providerKey) !== null && _c !== void 0 ? _c : "";
471
- var providerConfig = (_e = (_d = aiConfig.providers) === null || _d === void 0 ? void 0 : _d[providerKey]) !== null && _e !== void 0 ? _e : { provider: providerKey, apiKey: "", model: "" };
472
- var behavior = (_f = modelEntry.behavior) !== null && _f !== void 0 ? _f : DEFAULT_BEHAVIOR;
473
- return {
474
- value: tab.key,
475
- label: tab.label,
476
- content: (_jsx(AiModelConfigTab, { providerKey: providerKey, providerConfig: providerConfig, behavior: behavior, allProviders: (_g = aiConfig.providers) !== null && _g !== void 0 ? _g : {}, onProviderKeyChange: function (newKey, newConfig) {
477
- var _a, _b;
478
- onAiConfigChange(__assign(__assign({}, aiConfig), { models: __assign(__assign({}, aiConfig.models), (_a = {}, _a[tab.key] = __assign(__assign({}, modelEntry), { providerKey: newKey }), _a)), providers: __assign(__assign({}, aiConfig.providers), (_b = {}, _b[newKey] = newConfig, _b)) }));
479
- }, onProviderConfigChange: function (pk, config) {
480
- var _a;
481
- onAiConfigChange(__assign(__assign({}, aiConfig), { providers: __assign(__assign({}, aiConfig.providers), (_a = {}, _a[pk] = config, _a)) }));
482
- }, onBehaviorChange: function (newBehavior) {
483
- var _a;
484
- onAiConfigChange(__assign(__assign({}, aiConfig), { models: __assign(__assign({}, aiConfig.models), (_a = {}, _a[tab.key] = __assign(__assign({}, modelEntry), { behavior: newBehavior }), _a)) }));
464
+ var _g = useState("providers"), activeTab = _g[0], setActiveTab = _g[1];
465
+ var _h = useState(false), showAddProvider = _h[0], setShowAddProvider = _h[1];
466
+ var providers = ensureBuiltInProviders((_b = aiConfig.providers) !== null && _b !== void 0 ? _b : {});
467
+ var tabItems = [
468
+ {
469
+ value: "providers",
470
+ label: "Providers",
471
+ content: (_jsx(ProvidersTab, { providers: providers, onProvidersChange: function (newProviders) {
472
+ onAiConfigChange(__assign(__assign({}, aiConfig), { providers: newProviders }));
473
+ }, showAddModal: showAddProvider, onAddModalClose: function () { return setShowAddProvider(false); } })),
474
+ },
475
+ {
476
+ value: "default",
477
+ label: "Intelligent Model",
478
+ content: (_jsx(ModelConfigTab, { modelEntry: (_d = (_c = aiConfig.models) === null || _c === void 0 ? void 0 : _c.default) !== null && _d !== void 0 ? _d : DEFAULT_MODEL_ENTRY, providers: providers, onModelEntryChange: function (entry) {
479
+ onAiConfigChange(__assign(__assign({}, aiConfig), { models: __assign(__assign({}, aiConfig.models), { default: entry }) }));
485
480
  } })),
486
- };
487
- });
488
- return (_jsxs("div", { children: [_jsx("p", { className: "solid-settings-heading", style: { marginBottom: "1rem" }, children: "AI Model Configuration" }), _jsx(SolidTabGroup, { tabs: tabItems, value: activeTab, onValueChange: function (value) { return setActiveTab(value); }, tabPosition: "left" })] }));
481
+ },
482
+ {
483
+ value: "fast",
484
+ label: "Fast Model",
485
+ content: (_jsx(ModelConfigTab, { modelEntry: (_f = (_e = aiConfig.models) === null || _e === void 0 ? void 0 : _e.fast) !== null && _f !== void 0 ? _f : DEFAULT_MODEL_ENTRY, providers: providers, onModelEntryChange: function (entry) {
486
+ onAiConfigChange(__assign(__assign({}, aiConfig), { models: __assign(__assign({}, aiConfig.models), { fast: entry }) }));
487
+ } })),
488
+ },
489
+ ];
490
+ return (_jsxs("div", { children: [_jsx("p", { className: "solid-settings-heading", style: { marginBottom: "1rem" }, children: "AI Model Configuration" }), _jsx(SolidTabGroup, { tabs: tabItems, value: activeTab, onValueChange: function (value) { return setActiveTab(value); }, tabPosition: "left", extra: activeTab === "providers" ? (_jsx(SolidButton, { size: "sm", onClick: function () { return setShowAddProvider(true); }, children: "Add" })) : undefined })] }));
489
491
  };
490
492
  //# sourceMappingURL=GeneralSettings.js.map