@solidstarters/solid-core-ui 1.1.211 → 1.1.212

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 (373) hide show
  1. package/dist/components/Svg/DevDocs.tsx +9 -0
  2. package/dist/components/Svg/DocsSvg.tsx +9 -0
  3. package/dist/components/Svg/ExcelSvg.tsx +15 -0
  4. package/dist/components/Svg/FieldSvg.tsx +9 -0
  5. package/dist/components/Svg/FileSvg.tsx +18 -0
  6. package/dist/components/Svg/HomePageModuleSvg.tsx +179 -0
  7. package/dist/components/Svg/ModelSvg.tsx +9 -0
  8. package/dist/components/Svg/ModuleSvg.tsx +9 -0
  9. package/dist/components/Svg/PDFSvg.tsx +15 -0
  10. package/dist/components/Svg/RightArrowSvg.tsx +9 -0
  11. package/dist/components/Svg/SettingsSvg.tsx +9 -0
  12. package/dist/components/auth/AuthLayout.tsx +223 -0
  13. package/dist/components/auth/ForgotPasswordThankYou.tsx +33 -0
  14. package/dist/components/auth/GoogleAuthChecking.tsx +63 -0
  15. package/dist/components/auth/SolidChangeForcePassword.tsx +222 -0
  16. package/dist/components/auth/SolidForgotPassword.tsx +127 -0
  17. package/dist/components/auth/SolidInitialLoginOtp.tsx +271 -0
  18. package/dist/components/auth/SolidInitiateRegisterOtp.tsx +218 -0
  19. package/dist/components/auth/SolidLogin.d.ts.map +1 -1
  20. package/dist/components/auth/SolidLogin.js +14 -8
  21. package/dist/components/auth/SolidLogin.js.map +1 -1
  22. package/dist/components/auth/SolidLogin.tsx +428 -0
  23. package/dist/components/auth/SolidOTPVerify.tsx +133 -0
  24. package/dist/components/auth/SolidRegister.tsx +454 -0
  25. package/dist/components/auth/SolidResetPassword.tsx +194 -0
  26. package/dist/components/common/AuthBanner.tsx +41 -0
  27. package/dist/components/common/AutoCompleteField.tsx +79 -0
  28. package/dist/components/common/BackButton.tsx +72 -0
  29. package/dist/components/common/CancelButton.tsx +61 -0
  30. package/dist/components/common/CodeEditor.tsx +38 -0
  31. package/dist/components/common/CreateButton.tsx +17 -0
  32. package/dist/components/common/DownloadProgressToast.tsx +55 -0
  33. package/dist/components/common/DropzonePlaceholder.tsx +31 -0
  34. package/dist/components/common/DropzoneUpload.tsx +11 -0
  35. package/dist/components/common/FileReaderExt.tsx +20 -0
  36. package/dist/components/common/GeneralSettings.tsx +1225 -0
  37. package/dist/components/common/HeaderDynamicTitles.tsx +13 -0
  38. package/dist/components/common/MarkdownViewer.tsx +84 -0
  39. package/dist/components/common/MultipleSelectAutoCompleteField.tsx +64 -0
  40. package/dist/components/common/NotFound.tsx +22 -0
  41. package/dist/components/common/SingleSelectAutoCompleteField.tsx +73 -0
  42. package/dist/components/common/SocialMediaLogin.tsx +53 -0
  43. package/dist/components/common/SolidAdmin.tsx +6 -0
  44. package/dist/components/common/SolidBreadcrumb.tsx +129 -0
  45. package/dist/components/common/SolidExport.tsx +563 -0
  46. package/dist/components/common/SolidExportStepper.tsx +135 -0
  47. package/dist/components/common/SolidFieldTooltip.tsx +23 -0
  48. package/dist/components/common/SolidFormHeader.tsx +25 -0
  49. package/dist/components/common/SolidFormStepper.tsx +350 -0
  50. package/dist/components/common/SolidModuleHome.tsx +128 -0
  51. package/dist/components/common/SolidPopupContainer.tsx +37 -0
  52. package/dist/components/common/SolidSettings/LlmSettings/AnthropicProviderComponent.tsx +45 -0
  53. package/dist/components/common/SolidSettings/LlmSettings/OpenAiProviderComponent.tsx +45 -0
  54. package/dist/components/common/SolidSettings/SettingDropzoneActivePlaceholder.tsx +20 -0
  55. package/dist/components/common/SolidSettings/SettingsImageRemoveButton.tsx +15 -0
  56. package/dist/components/common/SolidSettings/SolidUploadedImage.tsx +16 -0
  57. package/dist/components/common/SolidThemeLink.tsx +6 -0
  58. package/dist/components/common/SolidThemeProvider.tsx +44 -0
  59. package/dist/components/common/StepperArrows/ActiveArrowStep.tsx +18 -0
  60. package/dist/components/common/StepperArrows/ActiveBeforeStepArrow.tsx +18 -0
  61. package/dist/components/common/StepperArrows/InactiveStepArrow.tsx +19 -0
  62. package/dist/components/common/error.tsx +30 -0
  63. package/dist/components/common/useHandleFormCustomButtonClick.ts +40 -0
  64. package/dist/components/common/useHandleListCustomButtonClick.ts +42 -0
  65. package/dist/components/core/chatter/SolidChatter.tsx +248 -0
  66. package/dist/components/core/chatter/SolidChatterAuditMessage.tsx +35 -0
  67. package/dist/components/core/chatter/SolidChatterCustomMessage.tsx +46 -0
  68. package/dist/components/core/chatter/SolidChatterDateDivider.tsx +16 -0
  69. package/dist/components/core/chatter/SolidChatterHeader.tsx +218 -0
  70. package/dist/components/core/chatter/SolidChatterMessageBox.tsx +163 -0
  71. package/dist/components/core/chatter/SolidMessageComposer.tsx +146 -0
  72. package/dist/components/core/common/AvatarWidget.tsx +55 -0
  73. package/dist/components/core/common/DateFieldViewComponent.tsx +36 -0
  74. package/dist/components/core/common/FilterComponent.tsx +458 -0
  75. package/dist/components/core/common/LoadDynamicJsxComponent.tsx +70 -0
  76. package/dist/components/core/common/PDFViewer.tsx +117 -0
  77. package/dist/components/core/common/SolidAccountSettings/SolidAccountSettings.tsx +89 -0
  78. package/dist/components/core/common/SolidAccountSettings/SolidChangePassword.tsx +188 -0
  79. package/dist/components/core/common/SolidAccountSettings/SolidNotifications.tsx +139 -0
  80. package/dist/components/core/common/SolidAccountSettings/SolidPersonalInfo.tsx +311 -0
  81. package/dist/components/core/common/SolidCreateButton.tsx +48 -0
  82. package/dist/components/core/common/SolidGenericImport/DocumentSvg.tsx +15 -0
  83. package/dist/components/core/common/SolidGenericImport/SolidGenericImport.tsx +64 -0
  84. package/dist/components/core/common/SolidGenericImport/SolidImportDropzone.tsx +125 -0
  85. package/dist/components/core/common/SolidGenericImport/SolidImportInstructions.tsx +122 -0
  86. package/dist/components/core/common/SolidGenericImport/SolidImportStepper.tsx +217 -0
  87. package/dist/components/core/common/SolidGenericImport/SolidImportTransaction.tsx +205 -0
  88. package/dist/components/core/common/SolidGenericImport/SolidImportTransactionStatus.tsx +158 -0
  89. package/dist/components/core/common/SolidGenericImport/SolidImportWrapper.tsx +29 -0
  90. package/dist/components/core/common/SolidGlobalSearchElement.tsx +1470 -0
  91. package/dist/components/core/common/SolidLayoutViews.tsx +87 -0
  92. package/dist/components/core/common/SolidListViewOptions.tsx +31 -0
  93. package/dist/components/core/common/SolidLoaders/SolidCircularLoader.tsx +7 -0
  94. package/dist/components/core/common/SolidPasswordHelperText.tsx +34 -0
  95. package/dist/components/core/common/SolidSaveCustomFilterForm.tsx +75 -0
  96. package/dist/components/core/common/SolidSearchBox.tsx +17 -0
  97. package/dist/components/core/common/SolidViewLayoutManager.ts +421 -0
  98. package/dist/components/core/common/SolidXAiIframe.tsx +77 -0
  99. package/dist/components/core/dashboard/SolidDashboard.tsx +332 -0
  100. package/dist/components/core/dashboard/SolidDashboardBody.tsx +117 -0
  101. package/dist/components/core/dashboard/SolidDashboardFilterRequired.tsx +28 -0
  102. package/dist/components/core/dashboard/SolidDashboardHeader.tsx +10 -0
  103. package/dist/components/core/dashboard/SolidDashboardLoading.tsx +55 -0
  104. package/dist/components/core/dashboard/SolidDashboardNotAvailable.tsx +32 -0
  105. package/dist/components/core/dashboard/SolidDashboardRenderError.tsx +29 -0
  106. package/dist/components/core/dashboard/SolidDashboardVariable.tsx +256 -0
  107. package/dist/components/core/dashboard/SolidQuestionRenderer.tsx +78 -0
  108. package/dist/components/core/dashboard/chart-renderers/ChartJsRenderer.tsx +18 -0
  109. package/dist/components/core/dashboard/chart-renderers/PrimeReactDatatableRenderer.tsx +54 -0
  110. package/dist/components/core/dashboard/chart-renderers/init-chartjs.ts +25 -0
  111. package/dist/components/core/dashboard/dashboard-utils.ts +39 -0
  112. package/dist/components/core/extension/solid-core/CustomIcon/StatusIcon.tsx +17 -0
  113. package/dist/components/core/extension/solid-core/dashboardQuestion/ChartFormPreviewWidget.tsx +36 -0
  114. package/dist/components/core/extension/solid-core/emailTemplate/emailFormTypeChangeHandler.ts +18 -0
  115. package/dist/components/core/extension/solid-core/emailTemplate/emailFormTypeLoad.ts +18 -0
  116. package/dist/components/core/extension/solid-core/modelMetadata/list/DeleteModelRowAction.tsx +114 -0
  117. package/dist/components/core/extension/solid-core/modelMetadata/list/GenerateModelCodeRowAction.tsx +213 -0
  118. package/dist/components/core/extension/solid-core/moduleMetadata/list/DeleteModuleRowAction.tsx +138 -0
  119. package/dist/components/core/extension/solid-core/moduleMetadata/list/GenerateModuleCodeRowAction.tsx +209 -0
  120. package/dist/components/core/extension/solid-core/roleMetadata/RolePermissionsManyToManyFieldWidget.tsx +131 -0
  121. package/dist/components/core/field/FieldListViewData.tsx +313 -0
  122. package/dist/components/core/filter/SolidBooleanFilterElement.tsx +30 -0
  123. package/dist/components/core/filter/SolidFilterFields.tsx +131 -0
  124. package/dist/components/core/filter/SolidManyToManyFilterElement.tsx +64 -0
  125. package/dist/components/core/filter/SolidManyToOneFilterElement.tsx +61 -0
  126. package/dist/components/core/filter/SolidSelectionDynamicFilterElement.tsx +50 -0
  127. package/dist/components/core/filter/SolidSelectionStaticFilterElement.tsx +32 -0
  128. package/dist/components/core/filter/SolidVarInputsFilterElement.tsx +209 -0
  129. package/dist/components/core/filter/fields/SolidBigintField.tsx +9 -0
  130. package/dist/components/core/filter/fields/SolidBooleanField.tsx +68 -0
  131. package/dist/components/core/filter/fields/SolidComputedField.tsx +23 -0
  132. package/dist/components/core/filter/fields/SolidDateField.tsx +63 -0
  133. package/dist/components/core/filter/fields/SolidDatetimeField.tsx +54 -0
  134. package/dist/components/core/filter/fields/SolidDecimalField.tsx +9 -0
  135. package/dist/components/core/filter/fields/SolidExternalIdField.tsx +52 -0
  136. package/dist/components/core/filter/fields/SolidFloatField.tsx +9 -0
  137. package/dist/components/core/filter/fields/SolidIdField.tsx +46 -0
  138. package/dist/components/core/filter/fields/SolidIntField.tsx +61 -0
  139. package/dist/components/core/filter/fields/SolidLongTextField.tsx +9 -0
  140. package/dist/components/core/filter/fields/SolidMediaMultipleField.tsx +60 -0
  141. package/dist/components/core/filter/fields/SolidMediaSingleField.tsx +62 -0
  142. package/dist/components/core/filter/fields/SolidRelationField.tsx +17 -0
  143. package/dist/components/core/filter/fields/SolidRichTextField.tsx +9 -0
  144. package/dist/components/core/filter/fields/SolidSelectionDynamicField.tsx +52 -0
  145. package/dist/components/core/filter/fields/SolidSelectionStaticField.tsx +54 -0
  146. package/dist/components/core/filter/fields/SolidShortTextField.tsx +60 -0
  147. package/dist/components/core/filter/fields/SolidTimeField.tsx +48 -0
  148. package/dist/components/core/filter/fields/SolidUuidField.tsx +51 -0
  149. package/dist/components/core/filter/fields/relations/SolidRelationManyToManyField.tsx +62 -0
  150. package/dist/components/core/filter/fields/relations/SolidRelationManyToOneField.tsx +84 -0
  151. package/dist/components/core/form/SolidFormActionHeader.tsx +497 -0
  152. package/dist/components/core/form/SolidFormFieldRender.tsx +53 -0
  153. package/dist/components/core/form/SolidFormFieldRenderExtension.tsx +26 -0
  154. package/dist/components/core/form/SolidFormFooter.tsx +162 -0
  155. package/dist/components/core/form/SolidFormLayouts.tsx +104 -0
  156. package/dist/components/core/form/SolidFormUserViewLayout.tsx +84 -0
  157. package/dist/components/core/form/SolidFormView.tsx +1856 -0
  158. package/dist/components/core/form/SolidFormViewContextMenuHeaderButton.tsx +52 -0
  159. package/dist/components/core/form/SolidFormViewNormalHeaderButton.tsx +52 -0
  160. package/dist/components/core/form/SolidFormViewShimmerLoading.tsx +109 -0
  161. package/dist/components/core/form/fields/ISolidField.tsx +71 -0
  162. package/dist/components/core/form/fields/SolidBooleanField.tsx +434 -0
  163. package/dist/components/core/form/fields/SolidDateField.tsx +247 -0
  164. package/dist/components/core/form/fields/SolidDateTimeField.tsx +229 -0
  165. package/dist/components/core/form/fields/SolidDecimalField.tsx +171 -0
  166. package/dist/components/core/form/fields/SolidEmailField.tsx +176 -0
  167. package/dist/components/core/form/fields/SolidIntegerField.tsx +282 -0
  168. package/dist/components/core/form/fields/SolidJsonField.tsx +185 -0
  169. package/dist/components/core/form/fields/SolidLongTextField.tsx +618 -0
  170. package/dist/components/core/form/fields/SolidMediaMultipleField.tsx +663 -0
  171. package/dist/components/core/form/fields/SolidMediaSingleField.tsx +547 -0
  172. package/dist/components/core/form/fields/SolidPasswordField.tsx +390 -0
  173. package/dist/components/core/form/fields/SolidRelationField.tsx +56 -0
  174. package/dist/components/core/form/fields/SolidRichTextField.tsx +188 -0
  175. package/dist/components/core/form/fields/SolidSelectionDynamicField.tsx +340 -0
  176. package/dist/components/core/form/fields/SolidSelectionStaticField.tsx +462 -0
  177. package/dist/components/core/form/fields/SolidShortTextField.tsx +399 -0
  178. package/dist/components/core/form/fields/SolidTimeField.tsx +245 -0
  179. package/dist/components/core/form/fields/relations/SolidRelationManyToManyField.tsx +453 -0
  180. package/dist/components/core/form/fields/relations/SolidRelationManyToOneField.tsx +1036 -0
  181. package/dist/components/core/form/fields/relations/SolidRelationOneToManyField.tsx +627 -0
  182. package/dist/components/core/form/fields/relations/widgets/helpers/InlineRelationEntityDialog.tsx +38 -0
  183. package/dist/components/core/form/fields/relations/widgets/helpers/useRelationEntityHandler.ts +64 -0
  184. package/dist/components/core/form/fields/widgets/SolidAiInteractionMessageFieldFormWidget.tsx +135 -0
  185. package/dist/components/core/form/fields/widgets/SolidAiInteractionMetadataFieldFormWidget.tsx +144 -0
  186. package/dist/components/core/form/fields/widgets/SolidIconEditWidget.tsx +265 -0
  187. package/dist/components/core/form/fields/widgets/SolidIconViewWidget.tsx +32 -0
  188. package/dist/components/core/form/fields/widgets/SolidRelationFieldAvatarFormWidget.tsx +50 -0
  189. package/dist/components/core/form/fields/widgets/SolidS3FileViewerWidget.tsx +222 -0
  190. package/dist/components/core/form/fields/widgets/SolidShortTextFieldAvatarWidget.tsx +70 -0
  191. package/dist/components/core/form/widgets/CustomHtml.tsx +20 -0
  192. package/dist/components/core/kanban/KanbanBoard.tsx +150 -0
  193. package/dist/components/core/kanban/KanbanCard.tsx +279 -0
  194. package/dist/components/core/kanban/KanbanColumn.tsx +139 -0
  195. package/dist/components/core/kanban/KanbanUserViewLayout.tsx +84 -0
  196. package/dist/components/core/kanban/SolidKanbanView.tsx +894 -0
  197. package/dist/components/core/kanban/SolidKanbanViewConfigure.tsx +154 -0
  198. package/dist/components/core/kanban/SolidKanbanViewFields.tsx +164 -0
  199. package/dist/components/core/kanban/SolidManyToOneFilterElement.tsx +59 -0
  200. package/dist/components/core/kanban/SolidSelectionDynamicFilterElement.tsx +50 -0
  201. package/dist/components/core/kanban/SolidSelectionStaticFilterElement.tsx +32 -0
  202. package/dist/components/core/kanban/SolidVarInputsFilterElement.tsx +184 -0
  203. package/dist/components/core/kanban/kanban-fields/SolidBigintKanbanField.tsx +9 -0
  204. package/dist/components/core/kanban/kanban-fields/SolidBooleanKanbanField.tsx +16 -0
  205. package/dist/components/core/kanban/kanban-fields/SolidComputedKanbanField.tsx +23 -0
  206. package/dist/components/core/kanban/kanban-fields/SolidDateKanbanField.tsx +14 -0
  207. package/dist/components/core/kanban/kanban-fields/SolidDatetimeKanbanField.tsx +13 -0
  208. package/dist/components/core/kanban/kanban-fields/SolidDecimalKanbanField.tsx +9 -0
  209. package/dist/components/core/kanban/kanban-fields/SolidExternalIdKanbanField.tsx +12 -0
  210. package/dist/components/core/kanban/kanban-fields/SolidFloatKanbanField.tsx +9 -0
  211. package/dist/components/core/kanban/kanban-fields/SolidIdKanbanField.tsx +14 -0
  212. package/dist/components/core/kanban/kanban-fields/SolidIntKanbanField.tsx +20 -0
  213. package/dist/components/core/kanban/kanban-fields/SolidLongTextKanbanField.tsx +9 -0
  214. package/dist/components/core/kanban/kanban-fields/SolidMediaMultipleKanbanField.tsx +140 -0
  215. package/dist/components/core/kanban/kanban-fields/SolidMediaSingleKanbanField.tsx +164 -0
  216. package/dist/components/core/kanban/kanban-fields/SolidRelationKanbanField.tsx +13 -0
  217. package/dist/components/core/kanban/kanban-fields/SolidRichTextKanbanField.tsx +9 -0
  218. package/dist/components/core/kanban/kanban-fields/SolidSelectionDynamicKanbanField.tsx +14 -0
  219. package/dist/components/core/kanban/kanban-fields/SolidSelectionStaticKanbanField.tsx +14 -0
  220. package/dist/components/core/kanban/kanban-fields/SolidShortTextKanbanField.tsx +121 -0
  221. package/dist/components/core/kanban/kanban-fields/SolidTimeKanbanField.tsx +12 -0
  222. package/dist/components/core/kanban/kanban-fields/SolidUuidKanbanField.tsx +13 -0
  223. package/dist/components/core/kanban/kanban-fields/relations/SolidRelationManyToOneKanbanField.tsx +16 -0
  224. package/dist/components/core/list/ListViewRowActionPopup.tsx +41 -0
  225. package/dist/components/core/list/SolidColumnSelector/SolidListColumnSelector.tsx +242 -0
  226. package/dist/components/core/list/SolidEmptyListViewPlaceholder.tsx +111 -0
  227. package/dist/components/core/list/SolidListView.tsx +2007 -0
  228. package/dist/components/core/list/SolidListViewColumn.tsx +165 -0
  229. package/dist/components/core/list/SolidListViewConfigure.tsx +339 -0
  230. package/dist/components/core/list/SolidListViewHeaderButton.tsx +31 -0
  231. package/dist/components/core/list/SolidListViewHeaderContextMenuButton.tsx +30 -0
  232. package/dist/components/core/list/SolidListViewRowButtonContextMenu.tsx +41 -0
  233. package/dist/components/core/list/SolidListViewShimmerLoading.tsx +78 -0
  234. package/dist/components/core/list/SolidListingHeader.tsx +42 -0
  235. package/dist/components/core/list/SolidManyToOneFilterElement.tsx +60 -0
  236. package/dist/components/core/list/SolidSelectionDynamicFilterElement.tsx +50 -0
  237. package/dist/components/core/list/SolidSelectionStaticFilterElement.tsx +32 -0
  238. package/dist/components/core/list/SolidTableRowCell.tsx +35 -0
  239. package/dist/components/core/list/SolidVarInputsFilterElement.tsx +184 -0
  240. package/dist/components/core/list/columns/SolidBigintColumn.tsx +9 -0
  241. package/dist/components/core/list/columns/SolidBooleanColumn.tsx +90 -0
  242. package/dist/components/core/list/columns/SolidComputedColumn.tsx +27 -0
  243. package/dist/components/core/list/columns/SolidDateColumn.tsx +90 -0
  244. package/dist/components/core/list/columns/SolidDatetimeColumn.tsx +79 -0
  245. package/dist/components/core/list/columns/SolidDecimalColumn.tsx +9 -0
  246. package/dist/components/core/list/columns/SolidExternalIdColumn.tsx +80 -0
  247. package/dist/components/core/list/columns/SolidFloatColumn.tsx +9 -0
  248. package/dist/components/core/list/columns/SolidIdColumn.tsx +79 -0
  249. package/dist/components/core/list/columns/SolidIntColumn.tsx +87 -0
  250. package/dist/components/core/list/columns/SolidLongTextColumn.tsx +9 -0
  251. package/dist/components/core/list/columns/SolidMediaMultipleColumn.tsx +301 -0
  252. package/dist/components/core/list/columns/SolidMediaSingleColumn.tsx +170 -0
  253. package/dist/components/core/list/columns/SolidRelationColumn.tsx +21 -0
  254. package/dist/components/core/list/columns/SolidRichTextColumn.tsx +9 -0
  255. package/dist/components/core/list/columns/SolidSelectionDynamicColumn.tsx +80 -0
  256. package/dist/components/core/list/columns/SolidSelectionStaticColumn.tsx +81 -0
  257. package/dist/components/core/list/columns/SolidShortTextColumn.tsx +160 -0
  258. package/dist/components/core/list/columns/SolidTimeColumn.tsx +78 -0
  259. package/dist/components/core/list/columns/SolidUuidColumn.tsx +79 -0
  260. package/dist/components/core/list/columns/relations/SolidRelationManyToManyColumn.tsx +106 -0
  261. package/dist/components/core/list/columns/relations/SolidRelationManyToOneColumn.tsx +117 -0
  262. package/dist/components/core/list/columns/relations/SolidRelationOneToManyColumn.tsx +110 -0
  263. package/dist/components/core/list/widgets/SolidManyToManyRelationAvatarListWidget.tsx +30 -0
  264. package/dist/components/core/list/widgets/SolidManyToOneRelationAvatarListWidget.tsx +30 -0
  265. package/dist/components/core/list/widgets/SolidShortTextAvatarWidget.tsx +70 -0
  266. package/dist/components/core/list/widgets/SolidShortTextFieldImageRenderModeWidget.tsx +21 -0
  267. package/dist/components/core/locales/SolidChatterLocaleTabView.tsx +91 -0
  268. package/dist/components/core/locales/SolidLocale.tsx +127 -0
  269. package/dist/components/core/model/CreateModel.tsx +495 -0
  270. package/dist/components/core/model/FieldMetaData.tsx +263 -0
  271. package/dist/components/core/model/FieldMetaDataForm.tsx +3509 -0
  272. package/dist/components/core/model/FieldSelector.tsx +62 -0
  273. package/dist/components/core/model/ModelListViewData.tsx +384 -0
  274. package/dist/components/core/model/ModelMetaData.tsx +921 -0
  275. package/dist/components/core/module/CreateModule.tsx +617 -0
  276. package/dist/components/core/module/ModuleListViewData.tsx +431 -0
  277. package/dist/components/core/solid-ai/SolidAiMainWrapper.tsx +8 -0
  278. package/dist/components/core/solid-ai/SolidXAIIcon.tsx +37 -0
  279. package/dist/components/core/users/CreateUser.tsx +467 -0
  280. package/dist/components/core/users/CreateUserRole.tsx +212 -0
  281. package/dist/components/core/users/UserListView.tsx +376 -0
  282. package/dist/components/layout/AdminLayout.tsx +57 -0
  283. package/dist/components/layout/AdminSidebar.tsx +65 -0
  284. package/dist/components/layout/AppConfig.tsx +104 -0
  285. package/dist/components/layout/AppSidebar.tsx +232 -0
  286. package/dist/components/layout/ButtonLoader.tsx +7 -0
  287. package/dist/components/layout/CustomPagination.tsx +55 -0
  288. package/dist/components/layout/DashboardHeader.tsx +89 -0
  289. package/dist/components/layout/FilterMenu.tsx +122 -0
  290. package/dist/components/layout/Footer.tsx +13 -0
  291. package/dist/components/layout/GlobalSearch.tsx +37 -0
  292. package/dist/components/layout/Header.tsx +8 -0
  293. package/dist/components/layout/Layout.tsx +205 -0
  294. package/dist/components/layout/ListingHeader.tsx +204 -0
  295. package/dist/components/layout/Loader.tsx +16 -0
  296. package/dist/components/layout/UserSidebar.tsx +53 -0
  297. package/dist/components/layout/context/layoutcontext.tsx +52 -0
  298. package/dist/components/layout/navbar-one.tsx +258 -0
  299. package/dist/components/layout/navbar-two-menu.tsx +72 -0
  300. package/dist/components/layout/navbar-two.tsx +37 -0
  301. package/dist/components/layout/user-profile-menu.tsx +213 -0
  302. package/dist/components/layout/user-profile.tsx +7 -0
  303. package/dist/components/modelsComponents/filterIcon.tsx +9 -0
  304. package/dist/constants/error-messages.ts +238 -0
  305. package/dist/declarations.d.ts +22 -0
  306. package/dist/helpers/AppTitle.tsx +12 -0
  307. package/dist/helpers/ToastContainer.tsx +94 -0
  308. package/dist/helpers/autoCompleteVirtualScroll.ts +41 -0
  309. package/dist/helpers/countries.tsx +260 -0
  310. package/dist/helpers/downloadFileWithProgress.ts +91 -0
  311. package/dist/helpers/downloadMediaFile.tsx +21 -0
  312. package/dist/helpers/getAcceptedFileTypes.tsx +22 -0
  313. package/dist/helpers/getRandomColors.tsx +68 -0
  314. package/dist/helpers/helpers.ts +61 -0
  315. package/dist/helpers/hydrateRelationRules.ts +120 -0
  316. package/dist/helpers/permissions.ts +7 -0
  317. package/dist/helpers/registry.ts +337 -0
  318. package/dist/helpers/resendOtpHelper.tsx +5 -0
  319. package/dist/helpers/revalidate.ts +7 -0
  320. package/dist/helpers/rolesHelper.ts +17 -0
  321. package/dist/helpers/solidIcons.tsx +1831 -0
  322. package/dist/helpers/updatePasswordField.ts +41 -0
  323. package/dist/index.ts +421 -0
  324. package/dist/nextAuth/authProviders.d.ts.map +1 -1
  325. package/dist/nextAuth/authProviders.js +6 -5
  326. package/dist/nextAuth/authProviders.js.map +1 -1
  327. package/dist/nextAuth/authProviders.tsx +232 -0
  328. package/dist/nextAuth/handleLogout.tsx +39 -0
  329. package/dist/nextAuth/refreshAccessToken.tsx +28 -0
  330. package/dist/redux/api/aiInteractionApi.ts +59 -0
  331. package/dist/redux/api/authApi.ts +131 -0
  332. package/dist/redux/api/dashboardApi.ts +56 -0
  333. package/dist/redux/api/dashboardQuestionApi.ts +17 -0
  334. package/dist/redux/api/exportTemplateApi.tsx +59 -0
  335. package/dist/redux/api/fetchBaseQuery.tsx +118 -0
  336. package/dist/redux/api/fieldApi.ts +86 -0
  337. package/dist/redux/api/importTransactionApi.tsx +69 -0
  338. package/dist/redux/api/mediaApi.ts +55 -0
  339. package/dist/redux/api/mediaStorageProviderApi.ts +55 -0
  340. package/dist/redux/api/modelApi.ts +80 -0
  341. package/dist/redux/api/moduleApi.ts +72 -0
  342. package/dist/redux/api/permissionApi.ts +32 -0
  343. package/dist/redux/api/pincodeApi.tsx +56 -0
  344. package/dist/redux/api/roleApi.ts +58 -0
  345. package/dist/redux/api/solidActionApi.ts +66 -0
  346. package/dist/redux/api/solidChatterMessageApi.ts +25 -0
  347. package/dist/redux/api/solidEntityApi.tsx +164 -0
  348. package/dist/redux/api/solidMenuApi.ts +71 -0
  349. package/dist/redux/api/solidServiceApi.ts +31 -0
  350. package/dist/redux/api/solidSettingsApi.tsx +83 -0
  351. package/dist/redux/api/solidViewApi.ts +73 -0
  352. package/dist/redux/api/stateApi.tsx +56 -0
  353. package/dist/redux/api/testApi.ts +21 -0
  354. package/dist/redux/api/userApi.ts +135 -0
  355. package/dist/redux/features/authSlice.ts +19 -0
  356. package/dist/redux/features/dataViewSlice.ts +26 -0
  357. package/dist/redux/features/navbarSlice.ts +21 -0
  358. package/dist/redux/features/popupSlice.ts +37 -0
  359. package/dist/redux/features/settingsSlice.ts +60 -0
  360. package/dist/redux/features/themeSlice.ts +17 -0
  361. package/dist/redux/features/userSlice.ts +28 -0
  362. package/dist/redux/hooks/useSolidPopup.ts +20 -0
  363. package/dist/redux/store/defaultStoreConfig.ts +62 -0
  364. package/dist/styles.ts +4 -0
  365. package/dist/types/handlebars.d.ts +4 -0
  366. package/dist/types/index.d.ts +76 -0
  367. package/dist/types/layout.d.ts +94 -0
  368. package/dist/types/next-auth.d.ts +0 -0
  369. package/dist/types/next.d.ts +46 -0
  370. package/dist/types/solid-core.d.ts +320 -0
  371. package/package.json +1 -1
  372. package/src/components/auth/SolidLogin.tsx +26 -13
  373. package/src/nextAuth/authProviders.tsx +9 -5
@@ -0,0 +1,399 @@
1
+ 'use client';
2
+ import { InputText } from "primereact/inputtext";
3
+ import { Message } from "primereact/message";
4
+ import * as Yup from 'yup';
5
+ import { FormikObject, ISolidField, SolidFieldProps } from "./ISolidField";
6
+ import { getExtensionComponent } from "../../../../helpers/registry";
7
+ import { SolidFormFieldWidgetProps, SolidListFieldWidgetProps } from "../../../../types/solid-core";
8
+ import { SolidFieldTooltip } from "../../../../components/common/SolidFieldTooltip";
9
+ import { Button } from "primereact/button";
10
+ import { useState } from "react";
11
+ import { Password } from "primereact/password";
12
+ import { ERROR_MESSAGES } from "../../../../constants/error-messages";
13
+
14
+ export class SolidShortTextField implements ISolidField {
15
+
16
+ private fieldContext: SolidFieldProps;
17
+
18
+ constructor(fieldContext: SolidFieldProps) {
19
+ this.fieldContext = fieldContext;
20
+ }
21
+
22
+ updateFormData(value: any, formData: FormData): any {
23
+ const fieldLayoutInfo = this.fieldContext.field;
24
+ const editWidget = fieldLayoutInfo?.attrs?.editWidget;
25
+ if (editWidget === "PseudoRelationManyToOneFormWidget") {
26
+ if (value?.solidManyToOneValue) {
27
+ formData.append(fieldLayoutInfo?.attrs?.name, value.solidManyToOneValue);
28
+ }
29
+ } else {
30
+ if (value !== undefined && value !== null) {
31
+ formData.append(fieldLayoutInfo?.attrs?.name, value);
32
+ }
33
+ }
34
+ }
35
+
36
+ initialValue(): any {
37
+ const fieldName = this.fieldContext.field.attrs.name;
38
+ const fieldDefaultValue = this.fieldContext?.fieldMetadata?.defaultValue;
39
+ const fieldLayoutInfo = this.fieldContext.field;
40
+
41
+ const editWidget = fieldLayoutInfo?.attrs?.editWidget;
42
+
43
+ if (this.fieldContext.parentData && this.fieldContext.parentData[fieldName]) {
44
+ const parentDataForKey = this.fieldContext.parentData[fieldName];
45
+ if (editWidget === "PseudoRelationManyToOneFormWidget") {
46
+ if (parentDataForKey) {
47
+ return { solidManyToOneLabel: this.fieldContext.parentData[fieldName], solidManyToOneValue: this.fieldContext.parentData[fieldName] };
48
+ }
49
+ } else {
50
+ if (parentDataForKey && typeof parentDataForKey !== 'object') {
51
+ return this.fieldContext.parentData[fieldName]
52
+ }
53
+ }
54
+ }
55
+ let existingValue = this.fieldContext.data[fieldName];
56
+
57
+ if (editWidget === "PseudoRelationManyToOneFormWidget" && this.fieldContext.data[fieldName]) {
58
+ existingValue = { solidManyToOneLabel: this.fieldContext.data[fieldName], solidManyToOneValue: this.fieldContext.data[fieldName] };
59
+
60
+ }
61
+
62
+ return existingValue !== undefined && existingValue !== null ? existingValue : fieldDefaultValue || '';
63
+ }
64
+
65
+ validationSchema(): Yup.Schema {
66
+ const fieldMetadata = this.fieldContext.fieldMetadata;
67
+ const fieldLayoutInfo = this.fieldContext.field;
68
+ const fieldLabel = fieldLayoutInfo?.attrs?.label ?? fieldMetadata.displayName;
69
+ const editWidget = fieldLayoutInfo?.attrs?.editWidget;
70
+ if (editWidget === "PseudoRelationManyToOneFormWidget") {
71
+ let schema = Yup.mixed();
72
+
73
+ // Custom validation for relation field
74
+ if (fieldMetadata.required) {
75
+ schema = schema.test(
76
+ ERROR_MESSAGES.REQUIRED_REALTION,
77
+ ERROR_MESSAGES.FIELD_REUQIRED(fieldLabel),
78
+ function (value: any) {
79
+ // Handle empty values
80
+ if (!value) return false;
81
+
82
+ // If it's an object with solidManyToOneValue, check if it's valid
83
+ if (typeof value === 'object' && value !== null && (value as any).solidManyToOneValue) {
84
+ return true;
85
+ }
86
+
87
+ // If it's a string (user typed but didn't select), it's invalid for required field
88
+ if (typeof value === 'string') {
89
+ return false;
90
+ }
91
+
92
+ return false;
93
+ }
94
+ );
95
+ }
96
+
97
+ // Add validation to ensure valid selection
98
+ schema = schema.test(
99
+ ERROR_MESSAGES.VALIDATE_SELECTION,
100
+ ERROR_MESSAGES.SELECT_VALID_FROM_DROPDOWN(fieldLabel),
101
+ function (value: any) {
102
+ // If not required and empty, it's valid
103
+ if (!fieldMetadata.required && (!value || value === '')) {
104
+ return true;
105
+ }
106
+
107
+ // If it's an object with solidManyToOneValue, it's a valid selection
108
+ if (typeof value === 'object' && value !== null && (value as any).solidManyToOneValue) {
109
+ return true;
110
+ }
111
+
112
+ // If it's a string (user typed but didn't select), it's invalid
113
+ if (typeof value === 'string' && value.trim() !== '') {
114
+ return false;
115
+ }
116
+
117
+ // Empty value for non-required field
118
+ return !fieldMetadata.required;
119
+ }
120
+ );
121
+ return schema;
122
+ } else {
123
+
124
+ let schema: Yup.StringSchema<string | null | undefined> = Yup.string();
125
+ const fieldMetadata = this.fieldContext.fieldMetadata;
126
+ const fieldLayoutInfo = this.fieldContext.field;
127
+ const fieldLabel = fieldLayoutInfo.attrs.label ?? fieldMetadata.displayName;
128
+ // 1. required
129
+ // 1. required
130
+ if (fieldMetadata.required) {
131
+ schema = schema.required(ERROR_MESSAGES.FIELD_REUQIRED(fieldLabel));
132
+ } else {
133
+ schema = schema.nullable(); // Allow null when not required
134
+ }
135
+ // 2. length (min/max)
136
+ if (fieldMetadata.min && fieldMetadata.min > 0) {
137
+ schema = schema.min(fieldMetadata.min, ERROR_MESSAGES.FIELD_MINIMUM_CHARACTER(fieldLabel, fieldMetadata.min));
138
+ }
139
+ if (fieldMetadata.max && fieldMetadata.max > 0) {
140
+ schema = schema.max(fieldMetadata.max, ERROR_MESSAGES.FIELD_MAXIMUM_CHARACTER(fieldLabel, fieldMetadata.max));
141
+ }
142
+ // 3. regular expression
143
+ if (fieldMetadata.regexPattern) {
144
+ const regexPatternNotMatchingErrorMsg = fieldMetadata.regexPatternNotMatchingErrorMsg ?? ERROR_MESSAGES.FIELD_INVALID_DATA(fieldLabel)
145
+ schema = schema.matches(fieldMetadata.regexPattern, regexPatternNotMatchingErrorMsg);
146
+ }
147
+ return schema;
148
+ }
149
+ }
150
+
151
+ render(formik: FormikObject) {
152
+ const fieldMetadata = this.fieldContext.fieldMetadata;
153
+ const fieldLayoutInfo = this.fieldContext.field;
154
+ const solidFormViewMetaData = this.fieldContext.solidFormViewMetaData;
155
+ const className = fieldLayoutInfo.attrs?.className || 'field col-12';
156
+ const isFormFieldValid = (formik: any, fieldName: string) => formik.touched[fieldName] && formik.errors[fieldName];
157
+
158
+ let viewWidget = fieldLayoutInfo.attrs.viewWidget;
159
+ let editWidget = fieldLayoutInfo.attrs.editWidget;
160
+ if (!editWidget) {
161
+ editWidget = 'DefaultShortTextFormEditWidget';
162
+ }
163
+ if (!viewWidget) {
164
+ viewWidget = 'DefaultShortTextFormViewWidget';
165
+ }
166
+ const viewMode: string = this.fieldContext.viewMode;
167
+ return (
168
+ <>
169
+ <div className={className}>
170
+ {viewMode === "view" &&
171
+ this.renderExtensionRenderMode(viewWidget, formik)
172
+ }
173
+ {viewMode === "edit" &&
174
+ <>
175
+ {editWidget &&
176
+ this.renderExtensionRenderMode(editWidget, formik)
177
+ }
178
+ </>
179
+ }
180
+ </div>
181
+ </>
182
+
183
+ );
184
+ }
185
+
186
+ renderExtensionRenderMode(widget: string, formik: FormikObject) {
187
+ let DynamicWidget = getExtensionComponent(widget);
188
+ const widgetProps: SolidFormFieldWidgetProps = {
189
+ formik: formik,
190
+ fieldContext: this.fieldContext,
191
+ }
192
+ return (
193
+ <>
194
+ {DynamicWidget && <DynamicWidget {...widgetProps} />}
195
+ </>
196
+ )
197
+ }
198
+ }
199
+
200
+
201
+ export const DefaultShortTextFormEditWidget = ({ formik, fieldContext }: SolidFormFieldWidgetProps) => {
202
+ const fieldMetadata = fieldContext.fieldMetadata;
203
+ const fieldLayoutInfo = fieldContext.field;
204
+ const className = fieldLayoutInfo.attrs?.className || 'field col-12';
205
+ const includeWrapper = fieldLayoutInfo.attrs?.includeWrapper || 'yes';
206
+ const fieldLabel = fieldLayoutInfo.attrs.label ?? fieldMetadata.displayName;
207
+ const fieldDescription = fieldLayoutInfo.attrs.description ?? fieldMetadata.description;
208
+ const solidFormViewMetaData = fieldContext.solidFormViewMetaData;
209
+ const showFieldLabel = fieldLayoutInfo?.attrs?.showLabel;
210
+ const readOnlyPermission = fieldContext.readOnly;
211
+ const isPrimaryKey = fieldMetadata.isPrimaryKey || false;
212
+
213
+ const isFormFieldValid = (formik: any, fieldName: string) => formik.touched[fieldName] && formik.errors[fieldName];
214
+
215
+ const fieldDisabled = fieldLayoutInfo.attrs?.disabled;
216
+ const fieldReadonly = fieldLayoutInfo.attrs?.readonly;
217
+
218
+ const formDisabled = solidFormViewMetaData.data.solidView?.layout?.attrs?.disabled;
219
+ const formReadonly = solidFormViewMetaData.data.solidView?.layout?.attrs?.readonly;
220
+ return (
221
+ <>
222
+ {includeWrapper === 'yes' &&
223
+ <div className="relative">
224
+ <div className="flex flex-column gap-2 mt-1 sm:mt-2 md:mt-3 lg:mt-4">
225
+ {showFieldLabel != false &&
226
+ <label htmlFor={fieldLayoutInfo.attrs.name} className="form-field-label">{fieldLabel}
227
+ {fieldMetadata.required && <span className="text-red-500"> *</span>}
228
+ <SolidFieldTooltip fieldContext={fieldContext} />
229
+ {/* &nbsp; {fieldDescription && <span className="form_field_help">({fieldDescription}) </span>} */}
230
+ </label>
231
+ }
232
+ <InputText
233
+ readOnly={formReadonly || fieldReadonly || readOnlyPermission || isPrimaryKey}
234
+ disabled={formDisabled || fieldDisabled || isPrimaryKey}
235
+ id={fieldLayoutInfo.attrs.name}
236
+ name={fieldMetadata.name}
237
+ aria-describedby={`${fieldLayoutInfo.attrs.name}-help`}
238
+ // onChange={formik.handleChange}
239
+ onChange={(e) => fieldContext.onChange(e, 'onFieldChange')}
240
+ onBlur={(e) => fieldContext.onBlur(e, 'onFieldBlur')}
241
+ value={formik.values[fieldLayoutInfo.attrs.name] || ''}
242
+ />
243
+ </div>
244
+ {isFormFieldValid(formik, fieldLayoutInfo.attrs.name) && (
245
+ <div className="absolute mt-1">
246
+ <Message severity="error" text={formik?.errors[fieldLayoutInfo.attrs.name]?.toString()} />
247
+ </div>
248
+ )}
249
+ </div>
250
+ }
251
+ {includeWrapper === 'no' &&
252
+ <>
253
+ {showFieldLabel != false &&
254
+ <label htmlFor={fieldLayoutInfo.attrs.name} className="form-field-label">{fieldLabel}
255
+ {fieldMetadata.required && <span className="text-red-500"> *</span>}
256
+ <SolidFieldTooltip fieldContext={fieldContext} />
257
+ {/* &nbsp; {fieldDescription && <span className="form_field_help">({fieldDescription}) </span>} */}
258
+ </label>
259
+ }
260
+ <InputText
261
+ readOnly={formReadonly || fieldReadonly || readOnlyPermission}
262
+ disabled={formDisabled || fieldDisabled}
263
+ id={fieldLayoutInfo.attrs.name}
264
+ name={fieldMetadata.name}
265
+ aria-describedby={`${fieldLayoutInfo.attrs.name}-help`}
266
+ // onChange={formik.handleChange}
267
+ onChange={(e) => fieldContext.onChange(e, 'onFieldChange')}
268
+ onBlur={(e) => fieldContext.onBlur(e, 'onFieldBlur')}
269
+ value={formik.values[fieldLayoutInfo.attrs.name] || ''}
270
+ />
271
+ </>
272
+ }
273
+ </>
274
+ );
275
+ }
276
+
277
+ export const DefaultShortTextFormViewWidget = ({ formik, fieldContext }: SolidFormFieldWidgetProps) => {
278
+
279
+ const fieldMetadata = fieldContext.fieldMetadata;
280
+ const fieldLayoutInfo = fieldContext.field;
281
+ const fieldLabel = fieldLayoutInfo.attrs.label ?? fieldMetadata.displayName;
282
+ const showFieldLabel = fieldLayoutInfo?.attrs?.showLabel;
283
+ return (
284
+ <div className="mt-2 flex-column gap-2">
285
+ {showFieldLabel !== false && (
286
+ <p className="m-0 form-field-label font-medium">{fieldLabel}</p>
287
+ )}
288
+ <p className="m-0">{formik.values[fieldLayoutInfo.attrs.name] && typeof formik.values[fieldLayoutInfo.attrs.name] !== "object" && typeof formik.values[fieldLayoutInfo.attrs.name] == "string" && formik.values[fieldLayoutInfo.attrs.name]}</p>
289
+ </div>
290
+ );
291
+ }
292
+
293
+ // Masked ShortText - LIST
294
+ export const MaskedShortTextListViewWidget = ({ rowData, solidListViewMetaData, fieldMetadata, column }: SolidListFieldWidgetProps) => {
295
+ const colVal = rowData[column.attrs.name];
296
+ // Mask it (show same number of * as characters, or fixed length if you want)
297
+ const maskedValue = colVal ? '*'.repeat(colVal.length) : '';
298
+ return (
299
+ <span>{maskedValue}</span>
300
+ );
301
+ };
302
+
303
+ // Masked ShortText - VIEW
304
+ export const MaskedShortTextFormViewWidget = ({ formik, fieldContext }: SolidFormFieldWidgetProps) => {
305
+ const fieldMetadata = fieldContext.fieldMetadata;
306
+ const fieldLayoutInfo = fieldContext.field;
307
+ const fieldLabel = fieldLayoutInfo.attrs.label ?? fieldMetadata.displayName;
308
+ const showFieldLabel = fieldLayoutInfo?.attrs?.showLabel;
309
+ // Get actual value
310
+ const rawValue: string = formik.values[fieldLayoutInfo.attrs.name] || '';
311
+
312
+ // Mask it (show same number of * as characters, or fixed length if you want)
313
+ const maskedValue = rawValue ? '*'.repeat(rawValue.length) : '';
314
+
315
+ return (
316
+ <div className="mt-2 flex-column gap-2">
317
+ {showFieldLabel !== false && (
318
+ <p className="m-0 form-field-label font-medium">{fieldLabel}</p>
319
+ )}
320
+ <p className="m-0">{maskedValue}</p>
321
+ </div>
322
+ );
323
+ };
324
+
325
+ // Masked ShortText - EDIT
326
+ export const MaskedShortTextFormEditWidget = ({ formik, fieldContext }: SolidFormFieldWidgetProps) => {
327
+ const fieldMetadata = fieldContext.fieldMetadata;
328
+ const fieldLayoutInfo = fieldContext.field;
329
+ const includeWrapper = fieldLayoutInfo.attrs?.includeWrapper || 'yes';
330
+ const fieldLabel = fieldLayoutInfo.attrs.label ?? fieldMetadata.displayName;
331
+ const solidFormViewMetaData = fieldContext.solidFormViewMetaData;
332
+ const showFieldLabel = fieldLayoutInfo?.attrs?.showLabel;
333
+ const readOnlyPermission = fieldContext.readOnly;
334
+ const isPrimaryKey = fieldMetadata.isPrimaryKey || false;
335
+
336
+ const isFormFieldValid = (formik: any, fieldName: string) =>
337
+ formik.touched[fieldName] && formik.errors[fieldName];
338
+
339
+ const fieldDisabled = fieldLayoutInfo.attrs?.disabled;
340
+ const fieldReadonly = fieldLayoutInfo.attrs?.readonly;
341
+ const formDisabled = solidFormViewMetaData.data.solidView?.layout?.attrs?.disabled;
342
+ const formReadonly = solidFormViewMetaData.data.solidView?.layout?.attrs?.readonly;
343
+
344
+ const passwordField = (
345
+ <Password
346
+ toggleMask
347
+ feedback={false}
348
+ readOnly={formReadonly || fieldReadonly || readOnlyPermission || isPrimaryKey}
349
+ disabled={formDisabled || fieldDisabled || isPrimaryKey}
350
+ id={fieldLayoutInfo.attrs.name}
351
+ name={fieldMetadata.name}
352
+ aria-describedby={`${fieldLayoutInfo.attrs.name}-help`}
353
+ onChange={(e) => fieldContext.onChange(e, 'onFieldChange')}
354
+ onBlur={(e) => fieldContext.onBlur(e, 'onFieldBlur')}
355
+ value={formik.values[fieldLayoutInfo.attrs.name] || ''}
356
+ className="w-full"
357
+ />
358
+ );
359
+
360
+ return (
361
+ <>
362
+ {includeWrapper === 'yes' && (
363
+ <div className="relative">
364
+ <div className="flex flex-column gap-2 mt-1 sm:mt-2 md:mt-3 lg:mt-4">
365
+ {showFieldLabel !== false && (
366
+ <label htmlFor={fieldLayoutInfo.attrs.name} className="form-field-label">
367
+ {fieldLabel}
368
+ {fieldMetadata.required && <span className="text-red-500"> *</span>}
369
+ <SolidFieldTooltip fieldContext={fieldContext} />
370
+ </label>
371
+ )}
372
+ {passwordField}
373
+ </div>
374
+ {isFormFieldValid(formik, fieldLayoutInfo.attrs.name) && (
375
+ <div className="absolute mt-1">
376
+ <Message
377
+ severity="error"
378
+ text={formik?.errors[fieldLayoutInfo.attrs.name]?.toString()}
379
+ />
380
+ </div>
381
+ )}
382
+ </div>
383
+ )}
384
+
385
+ {includeWrapper === 'no' && (
386
+ <>
387
+ {showFieldLabel !== false && (
388
+ <label htmlFor={fieldLayoutInfo.attrs.name} className="form-field-label">
389
+ {fieldLabel}
390
+ {fieldMetadata.required && <span className="text-red-500"> *</span>}
391
+ <SolidFieldTooltip fieldContext={fieldContext} />
392
+ </label>
393
+ )}
394
+ {passwordField}
395
+ </>
396
+ )}
397
+ </>
398
+ );
399
+ };
@@ -0,0 +1,245 @@
1
+ 'use client';
2
+ import { Calendar } from "primereact/calendar";
3
+ import { Message } from "primereact/message";
4
+ import { useRef } from "react";
5
+ import * as Yup from 'yup';
6
+ import { FormikObject, ISolidField, SolidFieldProps } from "./ISolidField";
7
+ import { getExtensionComponent } from "../../../../helpers/registry";
8
+ import { SolidFormFieldWidgetProps } from "../../../../types/solid-core";
9
+ import { SolidFieldTooltip } from "../../../../components/common/SolidFieldTooltip";
10
+ import { ERROR_MESSAGES } from "../../../../constants/error-messages";
11
+ import { DateFieldViewComponent } from '../../../../components/core/common/DateFieldViewComponent';
12
+
13
+
14
+ // Converts multiple time formats into a JavaScript Date object
15
+ function parseTimeStringToDate(timeStr: string): Date | null {
16
+ if (!timeStr) return null;
17
+
18
+ // CASE 1: HH:mm:ss
19
+ if (typeof timeStr === "string" && /^\d{2}:\d{2}:\d{2}$/.test(timeStr)) {
20
+ const [h, m, s] = timeStr.split(":").map(Number);
21
+ const d = new Date();
22
+ d.setHours(h, m, s, 0);
23
+ return d;
24
+ }
25
+
26
+ // CASE 2: timestamp or timestamptz
27
+ try {
28
+ const d = new Date(timeStr); // ← AUTO UTC → LOCAL conversion
29
+ if (!isNaN(d.getTime())) return d;
30
+ } catch (e) {
31
+ console.error(`${ERROR_MESSAGES.FIELD_INAVLID_FORMAT('Date')}:,${e}`)
32
+ }
33
+
34
+ return null;
35
+ }
36
+
37
+ // Formats a Date object to a HH:mm:ss string for display
38
+ function formatTime(date: Date | null): string {
39
+ if (!date) return "";
40
+ return date.toLocaleTimeString();
41
+ }
42
+
43
+
44
+ export class SolidTimeField implements ISolidField {
45
+
46
+ private fieldContext: SolidFieldProps;
47
+
48
+ constructor(fieldContext: SolidFieldProps) {
49
+ this.fieldContext = fieldContext;
50
+ }
51
+
52
+ updateFormData(value: any, formData: FormData): any {
53
+ const fieldLayoutInfo = this.fieldContext.field;
54
+ if (value instanceof Date) {
55
+ // Use local date with selected time
56
+ const now = new Date();
57
+ const localDate = new Date(
58
+ now.getFullYear(),
59
+ now.getMonth(),
60
+ now.getDate(),
61
+ value.getHours(),
62
+ value.getMinutes(),
63
+ value.getSeconds()
64
+ );
65
+
66
+ formData.append(fieldLayoutInfo.attrs.name, localDate.toISOString());
67
+ } else if (value) {
68
+ formData.append(fieldLayoutInfo.attrs.name, value);
69
+ }
70
+ }
71
+
72
+ initialValue(): any {
73
+ const fieldName = this.fieldContext.field.attrs.name;
74
+ const fieldDefaultValue = this.fieldContext?.fieldMetadata?.defaultValue;
75
+ const existingValue = this.fieldContext.data[fieldName];
76
+
77
+ if (existingValue) {
78
+ if (existingValue instanceof Date) {
79
+ return existingValue;
80
+ }
81
+ if (typeof existingValue === "string") {
82
+ const parsed = parseTimeStringToDate(existingValue);
83
+ if (parsed) return parsed;
84
+ }
85
+ }
86
+
87
+ return fieldDefaultValue ? new Date(fieldDefaultValue) : null;
88
+ }
89
+
90
+ validationSchema(): Yup.Schema {
91
+ let schema = Yup.date().nullable();
92
+ const fieldMetadata = this.fieldContext.fieldMetadata;
93
+ const fieldLayoutInfo = this.fieldContext.field;
94
+ const fieldLabel = fieldLayoutInfo.attrs.label ?? fieldMetadata.displayName;
95
+
96
+ // 1. required
97
+ if (fieldMetadata.required) {
98
+ schema = schema.required(ERROR_MESSAGES.FIELD_REUQIRED(fieldLabel));
99
+ }
100
+ return schema;
101
+ }
102
+
103
+ render(formik: FormikObject) {
104
+ const fieldMetadata = this.fieldContext.fieldMetadata;
105
+ const fieldLayoutInfo = this.fieldContext.field;
106
+ const isFormFieldValid = (formik: any, fieldName: string) => formik.touched[fieldName] && formik.errors[fieldName];
107
+ const className = fieldLayoutInfo.attrs?.className || 'field col-12';
108
+
109
+
110
+ let viewWidget = fieldLayoutInfo.attrs.viewWidget;
111
+ let editWidget = fieldLayoutInfo.attrs.editWidget;
112
+ if (!editWidget) {
113
+ editWidget = 'DefaultTimeFormEditWidget';
114
+ }
115
+ if (!viewWidget) {
116
+ viewWidget = 'DefaultTimeFormViewWidget';
117
+ }
118
+ const viewMode: string = this.fieldContext.viewMode;
119
+
120
+ return (
121
+ <>
122
+ <div className={className}>
123
+ {viewMode === "view" &&
124
+ this.renderExtensionRenderMode(viewWidget, formik)
125
+ }
126
+ {viewMode === "edit" &&
127
+ <>
128
+ {editWidget &&
129
+ this.renderExtensionRenderMode(editWidget, formik)
130
+ }
131
+ </>
132
+ }
133
+ </div>
134
+ </>
135
+ );
136
+ }
137
+
138
+ renderExtensionRenderMode(widget: string, formik: FormikObject) {
139
+ let DynamicWidget = getExtensionComponent(widget);
140
+ const widgetProps: SolidFormFieldWidgetProps = {
141
+ formik: formik,
142
+ fieldContext: this.fieldContext,
143
+ }
144
+ return (
145
+ <>
146
+ {DynamicWidget && <DynamicWidget {...widgetProps} />}
147
+ </>
148
+ )
149
+ }
150
+ }
151
+
152
+
153
+
154
+ export const DefaultTimeFormEditWidget = ({ formik, fieldContext }: SolidFormFieldWidgetProps) => {
155
+ const fieldMetadata = fieldContext.fieldMetadata;
156
+ const fieldLayoutInfo = fieldContext.field;
157
+ const className = fieldLayoutInfo.attrs?.className || 'field col-12';
158
+ const fieldLabel = fieldLayoutInfo.attrs.label ?? fieldMetadata.displayName;
159
+ const calendarRef = useRef<any>(null); // Reference for the Calendar component
160
+ const fieldDescription = fieldLayoutInfo.attrs.description ?? fieldMetadata.description;
161
+ const solidFormViewMetaData = fieldContext.solidFormViewMetaData;
162
+ const showFieldLabel = fieldLayoutInfo?.attrs?.showLabel;
163
+ const readOnlyPermission = fieldContext.readOnly;
164
+
165
+ const isFormFieldValid = (formik: any, fieldName: string) => formik.touched[fieldName] && formik.errors[fieldName];
166
+
167
+ const fieldDisabled = fieldLayoutInfo.attrs?.disabled;
168
+ const formDisabled = solidFormViewMetaData.data.solidView?.layout?.attrs?.disabled;
169
+
170
+ const fieldValue = formik.values[fieldLayoutInfo.attrs.name];
171
+
172
+
173
+
174
+ return (
175
+ <div className="relative">
176
+ <div className="flex flex-column gap-2 mt-1 sm:mt-2 md:mt-3 lg:mt-4">
177
+ {showFieldLabel != false &&
178
+ <label htmlFor={fieldLayoutInfo.attrs.name} className="form-field-label">{fieldLabel}
179
+ {fieldMetadata.required && <span className="text-red-500"> *</span>}
180
+ <SolidFieldTooltip fieldContext={fieldContext} />
181
+ {/* &nbsp; {fieldDescription && <span className="form_field_help">({fieldDescription}) </span>} */}
182
+ </label>
183
+ }
184
+ <Calendar
185
+ disabled={formDisabled || fieldDisabled || readOnlyPermission}
186
+ ref={calendarRef} // Attach ref to Calendar
187
+ id={fieldLayoutInfo.attrs.name}
188
+ aria-describedby={`${fieldLayoutInfo.attrs.name}-help`}
189
+ // onChange={formik.handleChange}
190
+ onChange={(e) => fieldContext.onChange(e, 'onFieldChange')}
191
+
192
+ //@ts-ignore
193
+ // value={formik.values[fieldLayoutInfo.attrs.name] ? formik.values[fieldLayoutInfo.attrs.name] : Date()}
194
+ value={fieldValue instanceof Date ? fieldValue : typeof fieldValue === "string" ? parseTimeStringToDate(fieldValue) : null}
195
+ // dateFormat="mm/dd/yy"
196
+ // placeholder="mm/dd/yyyy hh:mm"
197
+ hideOnDateTimeSelect
198
+ timeOnly
199
+ showTime className=""
200
+ hourFormat="24"
201
+
202
+ />
203
+ </div>
204
+ {isFormFieldValid(formik, fieldLayoutInfo.attrs.name) && (
205
+ <div className="absolute mt-1">
206
+ <Message severity="error" text={formik?.errors[fieldLayoutInfo.attrs.name]?.toString()} />
207
+ </div>
208
+ )}
209
+ </div>
210
+ );
211
+ }
212
+
213
+
214
+ export const DefaultTimeFormViewWidget = ({
215
+ formik,
216
+ fieldContext,
217
+ }: SolidFormFieldWidgetProps) => {
218
+ const fieldMetadata = fieldContext.fieldMetadata;
219
+ const fieldLayoutInfo = fieldContext.field;
220
+
221
+ const fieldName = fieldLayoutInfo.attrs.name;
222
+ const fieldLabel =
223
+ fieldLayoutInfo.attrs.label ?? fieldMetadata.displayName;
224
+ const showFieldLabel = fieldLayoutInfo?.attrs?.showLabel;
225
+
226
+ const rawValue = formik.values[fieldName];
227
+ const format = fieldLayoutInfo.attrs?.format
228
+
229
+
230
+ return (
231
+ <div className="mt-2 flex flex-column gap-2">
232
+ {showFieldLabel !== false && (
233
+ <p className="m-0 form-field-label font-medium">
234
+ {fieldLabel}
235
+ </p>
236
+ )}
237
+
238
+ <p className="m-0">
239
+ {/* {displayValue ?? "-"} */}
240
+ <DateFieldViewComponent value={rawValue} format={format} fallback="-"></DateFieldViewComponent>
241
+
242
+ </p>
243
+ </div>
244
+ );
245
+ };