@maxal_studio/kratosjs-react 1.0.0

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 (529) hide show
  1. package/README.md +44 -0
  2. package/dist/FieldRenderer.d.ts +13 -0
  3. package/dist/FieldRenderer.js +62 -0
  4. package/dist/FormRenderer.d.ts +7 -0
  5. package/dist/FormRenderer.js +78 -0
  6. package/dist/TableRenderer.d.ts +2 -0
  7. package/dist/TableRenderer.js +1 -0
  8. package/dist/api/actionsApi.d.ts +23 -0
  9. package/dist/api/actionsApi.js +46 -0
  10. package/dist/api/authenticatedFetch.d.ts +8 -0
  11. package/dist/api/authenticatedFetch.js +31 -0
  12. package/dist/api/exportApi.d.ts +18 -0
  13. package/dist/api/exportApi.js +50 -0
  14. package/dist/api/http.d.ts +24 -0
  15. package/dist/api/http.js +52 -0
  16. package/dist/api/resourceApi.d.ts +37 -0
  17. package/dist/api/resourceApi.js +52 -0
  18. package/dist/api/tableApi.d.ts +83 -0
  19. package/dist/api/tableApi.js +51 -0
  20. package/dist/api/urls.d.ts +19 -0
  21. package/dist/api/urls.js +46 -0
  22. package/dist/app.d.ts +101 -0
  23. package/dist/app.js +89 -0
  24. package/dist/auth/AuthContext.d.ts +22 -0
  25. package/dist/auth/AuthContext.js +147 -0
  26. package/dist/auth/LoginPage.d.ts +10 -0
  27. package/dist/auth/LoginPage.js +179 -0
  28. package/dist/auth/ProtectedRoute.d.ts +12 -0
  29. package/dist/auth/ProtectedRoute.js +22 -0
  30. package/dist/auth/authApiClient.d.ts +24 -0
  31. package/dist/auth/authApiClient.js +95 -0
  32. package/dist/auth/types.d.ts +103 -0
  33. package/dist/auth/types.js +1 -0
  34. package/dist/components/ActionFormModal.d.ts +22 -0
  35. package/dist/components/ActionFormModal.js +8 -0
  36. package/dist/components/AdminPanel.d.ts +11 -0
  37. package/dist/components/AdminPanel.js +194 -0
  38. package/dist/components/Checkbox.d.ts +10 -0
  39. package/dist/components/Checkbox.js +8 -0
  40. package/dist/components/CheckboxField.d.ts +7 -0
  41. package/dist/components/CheckboxField.js +26 -0
  42. package/dist/components/ColorPickerField.d.ts +7 -0
  43. package/dist/components/ColorPickerField.js +26 -0
  44. package/dist/components/DateTimePickerField.d.ts +7 -0
  45. package/dist/components/DateTimePickerField.js +64 -0
  46. package/dist/components/FileUploadField.d.ts +9 -0
  47. package/dist/components/FileUploadField.js +478 -0
  48. package/dist/components/GlobalSearch.d.ts +22 -0
  49. package/dist/components/GlobalSearch.js +181 -0
  50. package/dist/components/GroupField.d.ts +7 -0
  51. package/dist/components/GroupField.js +23 -0
  52. package/dist/components/HiddenField.d.ts +3 -0
  53. package/dist/components/HiddenField.js +10 -0
  54. package/dist/components/ModalBreadcrumb.d.ts +5 -0
  55. package/dist/components/ModalBreadcrumb.js +33 -0
  56. package/dist/components/ModalDrawer.d.ts +15 -0
  57. package/dist/components/ModalDrawer.js +40 -0
  58. package/dist/components/RadioField.d.ts +7 -0
  59. package/dist/components/RadioField.js +26 -0
  60. package/dist/components/RepeaterField.d.ts +3 -0
  61. package/dist/components/RepeaterField.js +191 -0
  62. package/dist/components/ResourceModalRenderer.d.ts +10 -0
  63. package/dist/components/ResourceModalRenderer.js +80 -0
  64. package/dist/components/RichEditorField.d.ts +3 -0
  65. package/dist/components/RichEditorField.js +655 -0
  66. package/dist/components/SectionField.d.ts +9 -0
  67. package/dist/components/SectionField.js +111 -0
  68. package/dist/components/SelectField.d.ts +8 -0
  69. package/dist/components/SelectField.js +523 -0
  70. package/dist/components/TabsField.d.ts +10 -0
  71. package/dist/components/TabsField.js +214 -0
  72. package/dist/components/TagsInputField.d.ts +7 -0
  73. package/dist/components/TagsInputField.js +172 -0
  74. package/dist/components/TextInputField.d.ts +7 -0
  75. package/dist/components/TextInputField.js +44 -0
  76. package/dist/components/TextareaField.d.ts +7 -0
  77. package/dist/components/TextareaField.js +31 -0
  78. package/dist/components/ToggleField.d.ts +7 -0
  79. package/dist/components/ToggleField.js +57 -0
  80. package/dist/components/ViewModal.d.ts +25 -0
  81. package/dist/components/ViewModal.js +159 -0
  82. package/dist/components/blocks/BlockRenderer.d.ts +7 -0
  83. package/dist/components/blocks/BlockRenderer.js +36 -0
  84. package/dist/components/blocks/FormBlockRenderer.d.ts +6 -0
  85. package/dist/components/blocks/FormBlockRenderer.js +110 -0
  86. package/dist/components/blocks/TableBlockRenderer.d.ts +6 -0
  87. package/dist/components/blocks/TableBlockRenderer.js +12 -0
  88. package/dist/components/blocks/TabsBlockRenderer.d.ts +7 -0
  89. package/dist/components/blocks/TabsBlockRenderer.js +11 -0
  90. package/dist/components/blocks/WidgetBlockRenderer.d.ts +6 -0
  91. package/dist/components/blocks/WidgetBlockRenderer.js +11 -0
  92. package/dist/components/columns/CheckboxColumnComponent.d.ts +6 -0
  93. package/dist/components/columns/CheckboxColumnComponent.js +21 -0
  94. package/dist/components/columns/ColorColumnComponent.d.ts +3 -0
  95. package/dist/components/columns/ColorColumnComponent.js +11 -0
  96. package/dist/components/columns/DeeplinkWrapper.d.ts +15 -0
  97. package/dist/components/columns/DeeplinkWrapper.js +85 -0
  98. package/dist/components/columns/IconColumnComponent.d.ts +3 -0
  99. package/dist/components/columns/IconColumnComponent.js +52 -0
  100. package/dist/components/columns/ImageColumnComponent.d.ts +3 -0
  101. package/dist/components/columns/ImageColumnComponent.js +98 -0
  102. package/dist/components/columns/MediaColumnComponent.d.ts +3 -0
  103. package/dist/components/columns/MediaColumnComponent.js +160 -0
  104. package/dist/components/columns/SelectColumnComponent.d.ts +6 -0
  105. package/dist/components/columns/SelectColumnComponent.js +26 -0
  106. package/dist/components/columns/TagsColumnComponent.d.ts +3 -0
  107. package/dist/components/columns/TagsColumnComponent.js +18 -0
  108. package/dist/components/columns/TextColumnComponent.d.ts +11 -0
  109. package/dist/components/columns/TextColumnComponent.js +107 -0
  110. package/dist/components/columns/TextInputColumnComponent.d.ts +6 -0
  111. package/dist/components/columns/TextInputColumnComponent.js +18 -0
  112. package/dist/components/columns/ToggleColumnComponent.d.ts +6 -0
  113. package/dist/components/columns/ToggleColumnComponent.js +25 -0
  114. package/dist/components/columns/VideoColumnComponent.d.ts +3 -0
  115. package/dist/components/columns/VideoColumnComponent.js +125 -0
  116. package/dist/components/columns/ViewColumnComponent.d.ts +3 -0
  117. package/dist/components/columns/ViewColumnComponent.js +7 -0
  118. package/dist/components/errors/ErrorBoundary.d.ts +23 -0
  119. package/dist/components/errors/ErrorBoundary.js +33 -0
  120. package/dist/components/filters/CustomFilterComponent.d.ts +10 -0
  121. package/dist/components/filters/CustomFilterComponent.js +33 -0
  122. package/dist/components/filters/DateFilterComponent.d.ts +15 -0
  123. package/dist/components/filters/DateFilterComponent.js +132 -0
  124. package/dist/components/filters/QueryBuilderFilterComponent.d.ts +11 -0
  125. package/dist/components/filters/QueryBuilderFilterComponent.js +200 -0
  126. package/dist/components/layout/Header.d.ts +10 -0
  127. package/dist/components/layout/Header.js +70 -0
  128. package/dist/components/layout/PanelBrandMark.d.ts +8 -0
  129. package/dist/components/layout/PanelBrandMark.js +28 -0
  130. package/dist/components/layout/Sidebar.d.ts +35 -0
  131. package/dist/components/layout/Sidebar.js +125 -0
  132. package/dist/components/modals/RelationCreateModal.d.ts +19 -0
  133. package/dist/components/modals/RelationCreateModal.js +57 -0
  134. package/dist/components/modals/ResourceFormModal.d.ts +37 -0
  135. package/dist/components/modals/ResourceFormModal.js +44 -0
  136. package/dist/components/modals/useResourceForm.d.ts +40 -0
  137. package/dist/components/modals/useResourceForm.js +138 -0
  138. package/dist/components/modals/view/RecordActions.d.ts +17 -0
  139. package/dist/components/modals/view/RecordActions.js +16 -0
  140. package/dist/components/modals/view/RecordDetails.d.ts +13 -0
  141. package/dist/components/modals/view/RecordDetails.js +29 -0
  142. package/dist/components/modals/view/RelationPanel.d.ts +18 -0
  143. package/dist/components/modals/view/RelationPanel.js +16 -0
  144. package/dist/components/modals/view/RelationTabs.d.ts +32 -0
  145. package/dist/components/modals/view/RelationTabs.js +42 -0
  146. package/dist/components/modals/view/useRecordView.d.ts +18 -0
  147. package/dist/components/modals/view/useRecordView.js +114 -0
  148. package/dist/components/pages/PageRenderer.d.ts +6 -0
  149. package/dist/components/pages/PageRenderer.js +107 -0
  150. package/dist/components/table/ColumnTogglePopup.d.ts +11 -0
  151. package/dist/components/table/ColumnTogglePopup.js +16 -0
  152. package/dist/components/table/GridCard.d.ts +21 -0
  153. package/dist/components/table/GridCard.js +30 -0
  154. package/dist/components/table/GridView.d.ts +23 -0
  155. package/dist/components/table/GridView.js +49 -0
  156. package/dist/components/table/LayoutToggle.d.ts +7 -0
  157. package/dist/components/table/LayoutToggle.js +9 -0
  158. package/dist/components/table/TableActionsDropdown.d.ts +13 -0
  159. package/dist/components/table/TableActionsDropdown.js +46 -0
  160. package/dist/components/table/TableBulkActions.d.ts +11 -0
  161. package/dist/components/table/TableBulkActions.js +21 -0
  162. package/dist/components/table/TableHeader.d.ts +14 -0
  163. package/dist/components/table/TableHeader.js +23 -0
  164. package/dist/components/table/TablePagination.d.ts +13 -0
  165. package/dist/components/table/TablePagination.js +55 -0
  166. package/dist/components/table/TableRow.d.ts +21 -0
  167. package/dist/components/table/TableRow.js +32 -0
  168. package/dist/components/table/TableSearchBar.d.ts +11 -0
  169. package/dist/components/table/TableSearchBar.js +12 -0
  170. package/dist/components/table/TableTabs.d.ts +14 -0
  171. package/dist/components/table/TableTabs.js +8 -0
  172. package/dist/components/ui/Badge.d.ts +6 -0
  173. package/dist/components/ui/Badge.js +12 -0
  174. package/dist/components/ui/Button.d.ts +22 -0
  175. package/dist/components/ui/Button.js +22 -0
  176. package/dist/components/ui/Card.d.ts +7 -0
  177. package/dist/components/ui/Card.js +5 -0
  178. package/dist/components/ui/ConfirmDialog.d.ts +19 -0
  179. package/dist/components/ui/ConfirmDialog.js +45 -0
  180. package/dist/components/ui/EmptyState.d.ts +9 -0
  181. package/dist/components/ui/EmptyState.js +6 -0
  182. package/dist/components/ui/ErrorAlert.d.ts +7 -0
  183. package/dist/components/ui/ErrorAlert.js +9 -0
  184. package/dist/components/ui/Input.d.ts +11 -0
  185. package/dist/components/ui/Input.js +10 -0
  186. package/dist/components/ui/Label.d.ts +5 -0
  187. package/dist/components/ui/Label.js +5 -0
  188. package/dist/components/ui/PillButton.d.ts +14 -0
  189. package/dist/components/ui/PillButton.js +19 -0
  190. package/dist/components/ui/Select.d.ts +7 -0
  191. package/dist/components/ui/Select.js +7 -0
  192. package/dist/components/ui/Spinner.d.ts +8 -0
  193. package/dist/components/ui/Spinner.js +14 -0
  194. package/dist/components/ui/Toast.d.ts +21 -0
  195. package/dist/components/ui/Toast.js +47 -0
  196. package/dist/components/ui/index.d.ts +24 -0
  197. package/dist/components/ui/index.js +12 -0
  198. package/dist/components/utils/HintDisplay.d.ts +11 -0
  199. package/dist/components/utils/HintDisplay.js +12 -0
  200. package/dist/components/utils/Icon.d.ts +22 -0
  201. package/dist/components/utils/Icon.js +22 -0
  202. package/dist/components/utils/MediaPreviewModal.d.ts +14 -0
  203. package/dist/components/utils/MediaPreviewModal.js +32 -0
  204. package/dist/components/utils/ViewFieldWrapper.d.ts +11 -0
  205. package/dist/components/utils/ViewFieldWrapper.js +9 -0
  206. package/dist/components/utils/layoutHelpers.d.ts +19 -0
  207. package/dist/components/utils/layoutHelpers.js +257 -0
  208. package/dist/components/widgets/ChartWidget.d.ts +16 -0
  209. package/dist/components/widgets/ChartWidget.js +192 -0
  210. package/dist/components/widgets/StatsWidget.d.ts +16 -0
  211. package/dist/components/widgets/StatsWidget.js +39 -0
  212. package/dist/components/widgets/WidgetRenderer.d.ts +10 -0
  213. package/dist/components/widgets/WidgetRenderer.js +50 -0
  214. package/dist/components/widgets/WidgetShell.d.ts +9 -0
  215. package/dist/components/widgets/WidgetShell.js +7 -0
  216. package/dist/contexts/AuthChallengeRegistryContext.d.ts +15 -0
  217. package/dist/contexts/AuthChallengeRegistryContext.js +15 -0
  218. package/dist/contexts/BlockRegistryContext.d.ts +18 -0
  219. package/dist/contexts/BlockRegistryContext.js +8 -0
  220. package/dist/contexts/ColumnRegistryContext.d.ts +8 -0
  221. package/dist/contexts/ColumnRegistryContext.js +30 -0
  222. package/dist/contexts/FieldRegistryContext.d.ts +13 -0
  223. package/dist/contexts/FieldRegistryContext.js +46 -0
  224. package/dist/contexts/PanelMetadataContext.d.ts +26 -0
  225. package/dist/contexts/PanelMetadataContext.js +26 -0
  226. package/dist/contexts/PanelProviders.d.ts +27 -0
  227. package/dist/contexts/PanelProviders.js +24 -0
  228. package/dist/contexts/ResourceModalContext.d.ts +26 -0
  229. package/dist/contexts/ResourceModalContext.js +76 -0
  230. package/dist/contexts/SlotRegistryContext.d.ts +19 -0
  231. package/dist/contexts/SlotRegistryContext.js +24 -0
  232. package/dist/contexts/TableRefreshContext.d.ts +10 -0
  233. package/dist/contexts/TableRefreshContext.js +30 -0
  234. package/dist/contexts/WidgetRegistryContext.d.ts +17 -0
  235. package/dist/contexts/WidgetRegistryContext.js +14 -0
  236. package/dist/contexts/createRegistryContext.d.ts +19 -0
  237. package/dist/contexts/createRegistryContext.js +20 -0
  238. package/dist/hooks/useAfterStateUpdated.d.ts +6 -0
  239. package/dist/hooks/useAfterStateUpdated.js +62 -0
  240. package/dist/hooks/useValidation.d.ts +26 -0
  241. package/dist/hooks/useValidation.js +76 -0
  242. package/dist/i18n/I18nProvider.d.ts +27 -0
  243. package/dist/i18n/I18nProvider.js +101 -0
  244. package/dist/i18n/LocaleSwitcher.d.ts +10 -0
  245. package/dist/i18n/LocaleSwitcher.js +30 -0
  246. package/dist/i18n/activeLocale.d.ts +11 -0
  247. package/dist/i18n/activeLocale.js +34 -0
  248. package/dist/i18n/buildClientI18n.d.ts +28 -0
  249. package/dist/i18n/buildClientI18n.js +67 -0
  250. package/dist/i18n/index.d.ts +11 -0
  251. package/dist/i18n/index.js +9 -0
  252. package/dist/i18n/locales/core/en.d.ts +225 -0
  253. package/dist/i18n/locales/core/en.js +252 -0
  254. package/dist/i18n/locales/core/index.d.ts +2 -0
  255. package/dist/i18n/locales/core/index.js +4 -0
  256. package/dist/i18n/locales/core/sq.d.ts +253 -0
  257. package/dist/i18n/locales/core/sq.js +255 -0
  258. package/dist/i18n/useFormatter.d.ts +18 -0
  259. package/dist/i18n/useFormatter.js +37 -0
  260. package/dist/i18n/useLocale.d.ts +11 -0
  261. package/dist/i18n/useLocale.js +11 -0
  262. package/dist/i18n/useTranslation.d.ts +12 -0
  263. package/dist/i18n/useTranslation.js +12 -0
  264. package/dist/index.d.ts +106 -0
  265. package/dist/index.js +101 -0
  266. package/dist/pages/ResourceListPage.d.ts +8 -0
  267. package/dist/pages/ResourceListPage.js +139 -0
  268. package/dist/plugin.d.ts +79 -0
  269. package/dist/plugin.js +34 -0
  270. package/dist/runtime/conditions.d.ts +35 -0
  271. package/dist/runtime/conditions.js +97 -0
  272. package/dist/runtime/formTraversal.d.ts +25 -0
  273. package/dist/runtime/formTraversal.js +37 -0
  274. package/dist/runtime/serializedFunctions.d.ts +41 -0
  275. package/dist/runtime/serializedFunctions.js +264 -0
  276. package/dist/slots/Slot.d.ts +24 -0
  277. package/dist/slots/Slot.js +29 -0
  278. package/dist/slots/SlotCluster.d.ts +22 -0
  279. package/dist/slots/SlotCluster.js +49 -0
  280. package/dist/slots/index.d.ts +7 -0
  281. package/dist/slots/index.js +4 -0
  282. package/dist/slots/mergeSlots.d.ts +18 -0
  283. package/dist/slots/mergeSlots.js +35 -0
  284. package/dist/slots/types.d.ts +87 -0
  285. package/dist/slots/types.js +30 -0
  286. package/dist/styles.css +1 -0
  287. package/dist/table/TableContext.d.ts +36 -0
  288. package/dist/table/TableContext.js +13 -0
  289. package/dist/table/TableRenderer.d.ts +29 -0
  290. package/dist/table/TableRenderer.js +159 -0
  291. package/dist/table/components/FiltersPanel.d.ts +11 -0
  292. package/dist/table/components/FiltersPanel.js +52 -0
  293. package/dist/table/components/TableToolbar.d.ts +28 -0
  294. package/dist/table/components/TableToolbar.js +27 -0
  295. package/dist/table/components/TableToolbarButton.d.ts +6 -0
  296. package/dist/table/components/TableToolbarButton.js +9 -0
  297. package/dist/table/components/TableView.d.ts +12 -0
  298. package/dist/table/components/TableView.js +21 -0
  299. package/dist/table/defaultRowActions.d.ts +21 -0
  300. package/dist/table/defaultRowActions.js +37 -0
  301. package/dist/table/hooks/useColumnVisibility.d.ts +13 -0
  302. package/dist/table/hooks/useColumnVisibility.js +59 -0
  303. package/dist/table/hooks/useEditableRows.d.ts +22 -0
  304. package/dist/table/hooks/useEditableRows.js +63 -0
  305. package/dist/table/hooks/useTableActions.d.ts +54 -0
  306. package/dist/table/hooks/useTableActions.js +313 -0
  307. package/dist/table/hooks/useTableData.d.ts +28 -0
  308. package/dist/table/hooks/useTableData.js +63 -0
  309. package/dist/table/hooks/useTableLayout.d.ts +12 -0
  310. package/dist/table/hooks/useTableLayout.js +31 -0
  311. package/dist/table/hooks/useTableQuery.d.ts +29 -0
  312. package/dist/table/hooks/useTableQuery.js +135 -0
  313. package/dist/types/index.d.ts +224 -0
  314. package/dist/types/index.js +6 -0
  315. package/dist/utils/classNames.d.ts +7 -0
  316. package/dist/utils/classNames.js +9 -0
  317. package/dist/utils/columnMediaDimensions.d.ts +13 -0
  318. package/dist/utils/columnMediaDimensions.js +29 -0
  319. package/dist/utils/columnVisibilityStorage.d.ts +22 -0
  320. package/dist/utils/columnVisibilityStorage.js +56 -0
  321. package/dist/utils/fieldErrors.d.ts +13 -0
  322. package/dist/utils/fieldErrors.js +25 -0
  323. package/dist/utils/formatValue.d.ts +28 -0
  324. package/dist/utils/formatValue.js +109 -0
  325. package/dist/utils/layoutStorage.d.ts +23 -0
  326. package/dist/utils/layoutStorage.js +53 -0
  327. package/dist/utils/redirectHandler.d.ts +7 -0
  328. package/dist/utils/redirectHandler.js +25 -0
  329. package/dist/utils/tableFormatters.d.ts +14 -0
  330. package/dist/utils/tableFormatters.js +93 -0
  331. package/dist/utils/widgetVisibilityStorage.d.ts +11 -0
  332. package/dist/utils/widgetVisibilityStorage.js +39 -0
  333. package/package.json +101 -0
  334. package/src/FieldRenderer.test.tsx +44 -0
  335. package/src/FieldRenderer.tsx +104 -0
  336. package/src/FormRenderer.containers.test.tsx +121 -0
  337. package/src/FormRenderer.test.tsx +174 -0
  338. package/src/FormRenderer.tsx +140 -0
  339. package/src/TableRenderer.tsx +2 -0
  340. package/src/api/actionsApi.ts +76 -0
  341. package/src/api/authenticatedFetch.ts +40 -0
  342. package/src/api/exportApi.ts +66 -0
  343. package/src/api/http.test.ts +58 -0
  344. package/src/api/http.ts +68 -0
  345. package/src/api/resourceApi.ts +88 -0
  346. package/src/api/tableApi.test.ts +108 -0
  347. package/src/api/tableApi.ts +107 -0
  348. package/src/api/urls.ts +50 -0
  349. package/src/app.test.tsx +67 -0
  350. package/src/app.tsx +181 -0
  351. package/src/auth/AuthContext.tsx +188 -0
  352. package/src/auth/LoginPage.tsx +380 -0
  353. package/src/auth/ProtectedRoute.tsx +39 -0
  354. package/src/auth/authApiClient.ts +109 -0
  355. package/src/auth/authFlow.test.tsx +168 -0
  356. package/src/auth/types.ts +104 -0
  357. package/src/components/ActionFormModal.tsx +45 -0
  358. package/src/components/AdminPanel.tsx +368 -0
  359. package/src/components/Checkbox.tsx +59 -0
  360. package/src/components/CheckboxField.tsx +88 -0
  361. package/src/components/ColorPickerField.tsx +93 -0
  362. package/src/components/DateTimePickerField.tsx +112 -0
  363. package/src/components/FileUploadField.tsx +841 -0
  364. package/src/components/GlobalSearch.tsx +436 -0
  365. package/src/components/GroupField.tsx +85 -0
  366. package/src/components/HiddenField.tsx +14 -0
  367. package/src/components/ModalBreadcrumb.tsx +74 -0
  368. package/src/components/ModalDrawer.tsx +137 -0
  369. package/src/components/RadioField.tsx +80 -0
  370. package/src/components/RepeaterField.tsx +546 -0
  371. package/src/components/ResourceModalRenderer.tsx +144 -0
  372. package/src/components/RichEditorField.tsx +942 -0
  373. package/src/components/SectionField.tsx +242 -0
  374. package/src/components/SelectField.tsx +843 -0
  375. package/src/components/TabsField.test.tsx +151 -0
  376. package/src/components/TabsField.tsx +386 -0
  377. package/src/components/TagsInputField.tsx +411 -0
  378. package/src/components/TextInputField.tsx +91 -0
  379. package/src/components/TextareaField.tsx +110 -0
  380. package/src/components/ToggleField.tsx +126 -0
  381. package/src/components/ViewModal.tsx +353 -0
  382. package/src/components/blocks/BlockRenderer.tsx +56 -0
  383. package/src/components/blocks/FormBlockRenderer.tsx +160 -0
  384. package/src/components/blocks/TableBlockRenderer.tsx +33 -0
  385. package/src/components/blocks/TabsBlockRenderer.tsx +49 -0
  386. package/src/components/blocks/WidgetBlockRenderer.tsx +19 -0
  387. package/src/components/columns/CheckboxColumnComponent.tsx +38 -0
  388. package/src/components/columns/ColorColumnComponent.tsx +23 -0
  389. package/src/components/columns/CustomColumn.test.tsx +55 -0
  390. package/src/components/columns/DeeplinkWrapper.tsx +103 -0
  391. package/src/components/columns/IconColumnComponent.tsx +55 -0
  392. package/src/components/columns/ImageColumnComponent.tsx +220 -0
  393. package/src/components/columns/MediaColumnComponent.tsx +294 -0
  394. package/src/components/columns/SelectColumnComponent.tsx +49 -0
  395. package/src/components/columns/TagsColumnComponent.tsx +46 -0
  396. package/src/components/columns/TextColumnComponent.tsx +191 -0
  397. package/src/components/columns/TextInputColumnComponent.tsx +35 -0
  398. package/src/components/columns/ToggleColumnComponent.tsx +56 -0
  399. package/src/components/columns/VideoColumnComponent.tsx +236 -0
  400. package/src/components/columns/ViewColumnComponent.tsx +9 -0
  401. package/src/components/errors/ErrorBoundary.tsx +58 -0
  402. package/src/components/filters/CustomFilterComponent.tsx +130 -0
  403. package/src/components/filters/DateFilterComponent.tsx +272 -0
  404. package/src/components/filters/QueryBuilderFilterComponent.tsx +502 -0
  405. package/src/components/layout/Header.tsx +212 -0
  406. package/src/components/layout/PanelBrandMark.tsx +61 -0
  407. package/src/components/layout/Sidebar.tsx +283 -0
  408. package/src/components/modals/RelationCreateModal.tsx +107 -0
  409. package/src/components/modals/ResourceFormModal.test.tsx +119 -0
  410. package/src/components/modals/ResourceFormModal.tsx +128 -0
  411. package/src/components/modals/useResourceForm.ts +207 -0
  412. package/src/components/modals/view/RecordActions.tsx +69 -0
  413. package/src/components/modals/view/RecordDetails.tsx +60 -0
  414. package/src/components/modals/view/RelationPanel.tsx +76 -0
  415. package/src/components/modals/view/RelationTabs.tsx +145 -0
  416. package/src/components/modals/view/useRecordView.ts +134 -0
  417. package/src/components/pages/PageRenderer.tsx +173 -0
  418. package/src/components/table/ColumnTogglePopup.tsx +85 -0
  419. package/src/components/table/GridCard.tsx +155 -0
  420. package/src/components/table/GridView.tsx +138 -0
  421. package/src/components/table/LayoutToggle.tsx +24 -0
  422. package/src/components/table/TableActionsDropdown.tsx +114 -0
  423. package/src/components/table/TableBulkActions.tsx +65 -0
  424. package/src/components/table/TableHeader.tsx +96 -0
  425. package/src/components/table/TablePagination.tsx +169 -0
  426. package/src/components/table/TableRow.tsx +155 -0
  427. package/src/components/table/TableSearchBar.tsx +66 -0
  428. package/src/components/table/TableTabs.tsx +49 -0
  429. package/src/components/ui/Badge.tsx +30 -0
  430. package/src/components/ui/Button.test.tsx +78 -0
  431. package/src/components/ui/Button.tsx +102 -0
  432. package/src/components/ui/Card.tsx +23 -0
  433. package/src/components/ui/ConfirmDialog.tsx +112 -0
  434. package/src/components/ui/EmptyState.tsx +24 -0
  435. package/src/components/ui/ErrorAlert.tsx +37 -0
  436. package/src/components/ui/Input.tsx +48 -0
  437. package/src/components/ui/Label.tsx +15 -0
  438. package/src/components/ui/PillButton.tsx +72 -0
  439. package/src/components/ui/Select.tsx +33 -0
  440. package/src/components/ui/Spinner.tsx +39 -0
  441. package/src/components/ui/Toast.tsx +105 -0
  442. package/src/components/ui/index.ts +24 -0
  443. package/src/components/utils/HintDisplay.tsx +26 -0
  444. package/src/components/utils/Icon.tsx +36 -0
  445. package/src/components/utils/MediaPreviewModal.tsx +114 -0
  446. package/src/components/utils/ViewFieldWrapper.tsx +23 -0
  447. package/src/components/utils/layoutHelpers.ts +267 -0
  448. package/src/components/widgets/ChartWidget.tsx +247 -0
  449. package/src/components/widgets/StatsWidget.tsx +72 -0
  450. package/src/components/widgets/WidgetRenderer.tsx +108 -0
  451. package/src/components/widgets/WidgetShell.tsx +37 -0
  452. package/src/contexts/AuthChallengeRegistryContext.tsx +29 -0
  453. package/src/contexts/BlockRegistryContext.tsx +28 -0
  454. package/src/contexts/ColumnRegistryContext.tsx +38 -0
  455. package/src/contexts/FieldRegistryContext.tsx +56 -0
  456. package/src/contexts/PanelMetadataContext.tsx +60 -0
  457. package/src/contexts/PanelProviders.tsx +85 -0
  458. package/src/contexts/ResourceModalContext.tsx +137 -0
  459. package/src/contexts/SlotRegistryContext.tsx +35 -0
  460. package/src/contexts/TableRefreshContext.tsx +44 -0
  461. package/src/contexts/WidgetRegistryContext.tsx +34 -0
  462. package/src/contexts/createRegistryContext.tsx +29 -0
  463. package/src/hooks/useAfterStateUpdated.ts +70 -0
  464. package/src/hooks/useValidation.test.ts +59 -0
  465. package/src/hooks/useValidation.ts +95 -0
  466. package/src/i18n/I18nProvider.tsx +128 -0
  467. package/src/i18n/LocaleSwitcher.tsx +50 -0
  468. package/src/i18n/activeLocale.ts +39 -0
  469. package/src/i18n/buildClientI18n.ts +101 -0
  470. package/src/i18n/i18n.test.tsx +140 -0
  471. package/src/i18n/index.ts +12 -0
  472. package/src/i18n/locales/core/en.ts +274 -0
  473. package/src/i18n/locales/core/index.ts +5 -0
  474. package/src/i18n/locales/core/sq.ts +275 -0
  475. package/src/i18n/useFormatter.ts +42 -0
  476. package/src/i18n/useLocale.ts +16 -0
  477. package/src/i18n/useTranslation.ts +17 -0
  478. package/src/index.ts +244 -0
  479. package/src/pages/ResourceListPage.tsx +205 -0
  480. package/src/plugin.ts +110 -0
  481. package/src/runtime/conditions.test.ts +99 -0
  482. package/src/runtime/conditions.ts +148 -0
  483. package/src/runtime/formTraversal.ts +41 -0
  484. package/src/runtime/serializedFunctions.test.ts +59 -0
  485. package/src/runtime/serializedFunctions.ts +284 -0
  486. package/src/slots/Slot.test.tsx +89 -0
  487. package/src/slots/Slot.tsx +47 -0
  488. package/src/slots/SlotCluster.test.tsx +95 -0
  489. package/src/slots/SlotCluster.tsx +107 -0
  490. package/src/slots/index.ts +15 -0
  491. package/src/slots/mergeSlots.test.ts +71 -0
  492. package/src/slots/mergeSlots.ts +40 -0
  493. package/src/slots/slotNames.test.ts +21 -0
  494. package/src/slots/types.ts +119 -0
  495. package/src/styles.css +437 -0
  496. package/src/table/TableContext.tsx +41 -0
  497. package/src/table/TableRenderer.test.tsx +197 -0
  498. package/src/table/TableRenderer.tsx +390 -0
  499. package/src/table/components/FiltersPanel.tsx +193 -0
  500. package/src/table/components/TableToolbar.tsx +153 -0
  501. package/src/table/components/TableToolbarButton.tsx +14 -0
  502. package/src/table/components/TableView.tsx +106 -0
  503. package/src/table/defaultRowActions.ts +43 -0
  504. package/src/table/hooks/useColumnVisibility.test.ts +51 -0
  505. package/src/table/hooks/useColumnVisibility.ts +71 -0
  506. package/src/table/hooks/useEditableRows.test.ts +69 -0
  507. package/src/table/hooks/useEditableRows.ts +89 -0
  508. package/src/table/hooks/useTableActions.ts +393 -0
  509. package/src/table/hooks/useTableData.ts +89 -0
  510. package/src/table/hooks/useTableLayout.ts +45 -0
  511. package/src/table/hooks/useTableQuery.test.ts +116 -0
  512. package/src/table/hooks/useTableQuery.ts +172 -0
  513. package/src/test/mockFetch.ts +67 -0
  514. package/src/test/setup.ts +25 -0
  515. package/src/types/index.ts +228 -0
  516. package/src/utils/classNames.ts +10 -0
  517. package/src/utils/columnMediaDimensions.ts +45 -0
  518. package/src/utils/columnVisibilityStorage.ts +55 -0
  519. package/src/utils/fieldErrors.test.ts +35 -0
  520. package/src/utils/fieldErrors.ts +27 -0
  521. package/src/utils/formatValue.test.tsx +65 -0
  522. package/src/utils/formatValue.tsx +117 -0
  523. package/src/utils/layoutStorage.ts +52 -0
  524. package/src/utils/redirectHandler.ts +29 -0
  525. package/src/utils/tableFormatters.test.ts +54 -0
  526. package/src/utils/tableFormatters.ts +104 -0
  527. package/src/utils/widgetVisibilityStorage.ts +38 -0
  528. package/tailwind.config.js +9 -0
  529. package/vite.config.ts +17 -0
@@ -0,0 +1,194 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import { useState, useEffect, useCallback, useRef } from 'react';
3
+ import { BrowserRouter, Routes, Route, Navigate } from 'react-router-dom';
4
+ import { AlertTriangle, Loader2 } from 'lucide-react';
5
+ import { useResourceModal } from '../contexts/ResourceModalContext';
6
+ import { PanelMetadataProvider } from '../contexts/PanelMetadataContext';
7
+ import { PanelProviders } from '../contexts/PanelProviders';
8
+ import { Header } from './layout/Header';
9
+ import { Sidebar } from './layout/Sidebar';
10
+ import { ResourceListPage } from '../pages/ResourceListPage';
11
+ import { PageRenderer } from './pages/PageRenderer';
12
+ import { ResourceModalRenderer } from './ResourceModalRenderer';
13
+ import { ErrorBoundary } from './errors/ErrorBoundary';
14
+ import { Slot } from '../slots/Slot';
15
+ import { PillButton } from './ui/PillButton';
16
+ import { authenticatedFetch } from '../api/authenticatedFetch';
17
+ import { useTranslation } from '../i18n/useTranslation';
18
+ import { useLocale } from '../i18n/useLocale';
19
+ function AdminPanelContent({ apiBaseUrl, panelId }) {
20
+ const { t } = useTranslation();
21
+ const { locale } = useLocale();
22
+ const [darkMode, setDarkMode] = useState(() => {
23
+ const stored = localStorage.getItem('darkMode');
24
+ if (stored !== null) {
25
+ return stored === 'true';
26
+ }
27
+ return window.matchMedia('(prefers-color-scheme: dark)').matches;
28
+ });
29
+ const [mobileSidebarOpen, setMobileSidebarOpen] = useState(false);
30
+ const [panelMetadata, setPanelMetadata] = useState(null);
31
+ const [loading, setLoading] = useState(true);
32
+ const [error, setError] = useState(null);
33
+ // Apply dark mode to document
34
+ useEffect(() => {
35
+ if (darkMode) {
36
+ document.documentElement.classList.add('dark');
37
+ localStorage.setItem('darkMode', 'true');
38
+ }
39
+ else {
40
+ document.documentElement.classList.remove('dark');
41
+ localStorage.setItem('darkMode', 'false');
42
+ }
43
+ }, [darkMode]);
44
+ // Merge badge maps into panel metadata (resources and pages)
45
+ const mergeBadgesIntoMeta = (meta, badges) => ({
46
+ ...meta,
47
+ resources: (meta.resources || []).map(r => {
48
+ const b = badges.resources?.[r.slug];
49
+ return { ...r, badge: b?.value ?? null, badgeColor: b?.color };
50
+ }),
51
+ pages: (meta.pages || []).map(p => {
52
+ const b = badges.pages?.[p.slug];
53
+ return { ...p, badge: b?.value ?? null, badgeColor: b?.color };
54
+ }),
55
+ });
56
+ // Fetch panel metadata and badges in parallel, then merge
57
+ useEffect(() => {
58
+ const metaUrl = panelId ? `${apiBaseUrl}/meta?panelId=${panelId}` : `${apiBaseUrl}/meta`;
59
+ const badgesUrl = panelId ? `${apiBaseUrl}/meta/badges?panelId=${panelId}` : `${apiBaseUrl}/meta/badges`;
60
+ const fetchMetadata = async () => {
61
+ try {
62
+ const [metaRes, badgesRes] = await Promise.all([
63
+ authenticatedFetch(metaUrl, { headers: { 'Content-Type': 'application/json' } }, apiBaseUrl),
64
+ authenticatedFetch(badgesUrl, { headers: { 'Content-Type': 'application/json' } }, apiBaseUrl),
65
+ ]);
66
+ if (!metaRes.ok) {
67
+ if (metaRes.status === 401)
68
+ throw new Error('Unauthorized - Please login again');
69
+ throw new Error(t('core:error.connect'));
70
+ }
71
+ const meta = await metaRes.json();
72
+ const badges = badgesRes.ok ? await badgesRes.json() : { resources: {}, pages: {} };
73
+ setPanelMetadata(mergeBadgesIntoMeta(meta, badges));
74
+ }
75
+ catch (err) {
76
+ setError(err instanceof Error ? err.message : t('core:error.connect'));
77
+ }
78
+ finally {
79
+ setLoading(false);
80
+ }
81
+ };
82
+ fetchMetadata();
83
+ // `locale` is a dependency so switching language re-fetches /meta (labels,
84
+ // nav groups) in the new locale; the locale header is sent automatically.
85
+ }, [apiBaseUrl, panelId, locale]);
86
+ // Subscribe to badge refresh events and refetch badges
87
+ useEffect(() => {
88
+ const refreshBadges = async () => {
89
+ const badgesUrl = panelId ? `${apiBaseUrl}/meta/badges?panelId=${panelId}` : `${apiBaseUrl}/meta/badges`;
90
+ try {
91
+ const res = await authenticatedFetch(badgesUrl, { headers: { 'Content-Type': 'application/json' } }, apiBaseUrl);
92
+ if (!res.ok)
93
+ return;
94
+ const badges = await res.json();
95
+ setPanelMetadata(prev => (prev ? mergeBadgesIntoMeta(prev, badges) : prev));
96
+ }
97
+ catch {
98
+ // ignore
99
+ }
100
+ };
101
+ const handler = () => refreshBadges();
102
+ window.addEventListener('kratosjs-refresh-badges', handler);
103
+ return () => window.removeEventListener('kratosjs-refresh-badges', handler);
104
+ }, [apiBaseUrl, panelId]);
105
+ if (loading) {
106
+ return (_jsx("div", { className: "min-h-screen bg-base flex items-center justify-center", children: _jsxs("div", { className: "text-center", children: [_jsx(Loader2, { className: "w-12 h-12 text-accent animate-spin mx-auto" }), _jsx("p", { className: "mt-4 text-fg-secondary", children: t('core:panel.loading') })] }) }));
107
+ }
108
+ if (error) {
109
+ return (_jsx("div", { className: "min-h-screen bg-base flex items-center justify-center", children: _jsxs("div", { className: "text-center p-8 bg-surface border border-border rounded-xl max-w-md", children: [_jsx(AlertTriangle, { className: "w-16 h-16 text-red-500 mx-auto mb-4" }), _jsx("h2", { className: "text-xl font-semibold text-fg mb-2", children: t('core:panel.connection_error') }), _jsx("p", { className: "text-fg-secondary mb-4", children: error }), _jsx(PillButton, { variant: "primary", onClick: () => window.location.reload(), children: t('core:common.retry') })] }) }));
110
+ }
111
+ if (!panelMetadata) {
112
+ return (_jsx("div", { className: "min-h-screen bg-base flex items-center justify-center", children: _jsx("div", { className: "text-center p-8 bg-surface border border-border rounded-lg max-w-md", children: _jsx("p", { className: "text-fg-secondary", children: t('core:panel.empty') }) }) }));
113
+ }
114
+ // Determine default route: first page if available, otherwise first resource
115
+ const defaultRoute = panelMetadata.pages.length > 0
116
+ ? `/page/${panelMetadata.pages[0].slug}`
117
+ : panelMetadata.resources.length > 0
118
+ ? `/${panelMetadata.resources[0].slug}`
119
+ : '/';
120
+ return (_jsx(PanelMetadataProvider, { resources: panelMetadata.resources, pages: panelMetadata.pages, children: _jsxs("div", { className: "flex min-h-screen bg-base transition-colors", children: [_jsx(Sidebar, { panelTitle: panelMetadata.title, panelIcon: panelMetadata.icon, panelFavicon: panelMetadata.favicon, resources: panelMetadata.resources, pages: panelMetadata.pages, mobileOpen: mobileSidebarOpen, onMobileClose: () => setMobileSidebarOpen(false) }), _jsxs("div", { className: "flex min-w-0 flex-1 flex-col", children: [_jsx(Header, { panelId: panelMetadata.id, darkMode: darkMode, onDarkModeToggle: () => setDarkMode(!darkMode), onMobileMenuToggle: () => setMobileSidebarOpen(!mobileSidebarOpen), apiBaseUrl: apiBaseUrl, globalSearchAvailable: panelMetadata.globalSearchAvailable }), _jsx("main", { className: "flex-1 overflow-hidden", children: _jsx("div", { className: "h-full w-full overflow-auto p-4 sm:p-6", children: _jsx(ErrorBoundary, { label: "this page", children: _jsxs(Routes, { children: [_jsx(Route, { path: "/", element: _jsx(Navigate, { to: defaultRoute, replace: true }) }), panelMetadata.pages.map(page => (_jsx(Route, { path: `/page/${page.slug}`, element: _jsx(PageRenderer, { pageSlug: page.slug, apiBaseUrl: apiBaseUrl }) }, page.slug))), panelMetadata.resources.map(resource => (_jsx(Route, { path: `/${resource.slug}/*`, element: _jsx(ResourceListPage, { apiBaseUrl: apiBaseUrl, resourceSlug: resource.slug, resourceName: resource.label, pluralLabel: resource.pluralLabel }) }, resource.slug))), _jsx(Route, { path: "*", element: _jsx(Navigate, { to: defaultRoute, replace: true }) })] }) }) }) }), _jsx(Slot, { name: "panel.footer", as: "footer", className: "shrink-0 border-t border-border px-4 py-3 sm:px-6" })] }), _jsx(ModalStackRenderer, { apiBaseUrl: apiBaseUrl })] }) }));
121
+ }
122
+ /**
123
+ * Renders all modals in the modal stack
124
+ */
125
+ function ModalStackRenderer({ apiBaseUrl }) {
126
+ const { modalStack, closeModal, closeAllModals } = useResourceModal();
127
+ // Refs so handlers always read the latest values without being recreated.
128
+ // ResourceModalRenderer is memoized and ignores onClose/onCloseAll prop updates.
129
+ const modalStackRef = useRef(modalStack);
130
+ modalStackRef.current = modalStack;
131
+ // When back is pressed on modal M, replaceState to the now-visible state:
132
+ // - Parent exists → /${parent.resource}/${parent.recordId}
133
+ // - M was the last modal → /${M.resource} (the list)
134
+ // We use replaceState (not navigate) so React Router's internal location is never
135
+ // mutated — no modal refresh/flash. Re-opening still works because navigate() from
136
+ // a row-click always produces a new location.key, which ResourceListPage watches.
137
+ //
138
+ // IMPORTANT: only update the URL if it currently belongs to one of the open modal
139
+ // resources. If the user opened a modal via a cross-resource deeplink the URL bar
140
+ // still shows the origin page (e.g. /withdrawals) — we must not overwrite that.
141
+ const handleCloseModal = useCallback(() => {
142
+ const stack = modalStackRef.current;
143
+ if (stack.length === 0)
144
+ return;
145
+ const closing = stack[stack.length - 1];
146
+ closeModal();
147
+ if (stack.length === 1) {
148
+ // Last modal closing — restore to where the user came from.
149
+ // originUrl is set when the modal was opened via a cross-resource deeplink
150
+ // (pushState updated the address bar; originUrl holds the prior URL).
151
+ // Without originUrl, only update if the address bar is on this resource.
152
+ if (closing.originUrl) {
153
+ window.history.replaceState(null, '', closing.originUrl);
154
+ }
155
+ else {
156
+ const firstSegment = window.location.pathname.split('/').filter(Boolean)[0] ?? '';
157
+ if (firstSegment === closing.resource) {
158
+ window.history.replaceState(null, '', `/${closing.resource}`);
159
+ }
160
+ }
161
+ }
162
+ else {
163
+ // Parent modal is still visible — show the parent's own URL.
164
+ // NOTE: we use the parent's resource/id, NOT parent.originUrl.
165
+ // originUrl means "where to go when *the parent itself* closes",
166
+ // not the URL to display while the parent is still open.
167
+ const parent = stack[stack.length - 2];
168
+ window.history.replaceState(null, '', `/${parent.resource}/${parent.recordId || ''}`);
169
+ }
170
+ }, [closeModal]);
171
+ // Close All: jump straight to the origin (before any modal was opened).
172
+ const handleCloseAll = useCallback(() => {
173
+ const stack = modalStackRef.current;
174
+ if (stack.length === 0)
175
+ return;
176
+ const root = stack[0];
177
+ closeAllModals();
178
+ if (root.originUrl) {
179
+ // Root was opened via deeplink — restore the page the user came from.
180
+ window.history.replaceState(null, '', root.originUrl);
181
+ }
182
+ else {
183
+ // URL-based root — only reset to the list if the address bar is on it.
184
+ const firstSegment = window.location.pathname.split('/').filter(Boolean)[0] ?? '';
185
+ if (firstSegment === root.resource) {
186
+ window.history.replaceState(null, '', `/${root.resource}`);
187
+ }
188
+ }
189
+ }, [closeAllModals]);
190
+ return (_jsx(_Fragment, { children: modalStack.map(modal => (_jsx(ResourceModalRenderer, { modal: modal, apiBaseUrl: apiBaseUrl, onClose: handleCloseModal, onCloseAll: handleCloseAll }, `${modal.resource}-${modal.recordId || 'create'}-${modal.mode}-${modal.depth}`))) }));
191
+ }
192
+ export function AdminPanel({ apiBaseUrl, panelId, customFields, customColumns, customWidgets, customBlocks, customAuthChallenges, customSlots, i18nConfig, }) {
193
+ return (_jsx(BrowserRouter, { children: _jsx(PanelProviders, { apiBaseUrl: apiBaseUrl, customFields: customFields, customColumns: customColumns, customWidgets: customWidgets, customBlocks: customBlocks, customAuthChallenges: customAuthChallenges, customSlots: customSlots, i18nConfig: i18nConfig, children: _jsx(AdminPanelContent, { apiBaseUrl: apiBaseUrl, panelId: panelId }) }) }));
194
+ }
@@ -0,0 +1,10 @@
1
+ import React from 'react';
2
+ interface CheckboxProps {
3
+ checked: boolean;
4
+ onChange: (checked: boolean) => void;
5
+ id?: string;
6
+ className?: string;
7
+ disabled?: boolean;
8
+ }
9
+ export declare function Checkbox({ checked, onChange, id, className, disabled }: CheckboxProps): React.JSX.Element;
10
+ export {};
@@ -0,0 +1,8 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { cn } from '../utils/classNames';
3
+ export function Checkbox({ checked, onChange, id, className, disabled }) {
4
+ const checkboxId = id || `checkbox-${Math.random().toString(36).substr(2, 9)}`;
5
+ return (_jsxs("label", { htmlFor: checkboxId, className: cn('flex items-center cursor-pointer select-none', disabled && 'cursor-not-allowed opacity-50', className), children: [_jsx("input", { id: checkboxId, type: "checkbox", checked: checked, onChange: e => onChange(e.target.checked), disabled: disabled, className: "sr-only" }), _jsx("div", { className: cn('w-4 h-4 rounded border transition-colors flex items-center justify-center', checked
6
+ ? 'bg-accent border-accent'
7
+ : cn('border-gray-300 dark:border-gray-600', 'bg-gray-200 dark:bg-gray-700', 'hover:bg-gray-300 dark:hover:bg-gray-600'), 'focus-within:ring-2 focus-within:ring-ring/50 focus-within:border-accent ', disabled && 'hover:bg-gray-200 dark:hover:bg-gray-700 cursor-not-allowed'), children: checked && (_jsx("svg", { className: "w-3 h-3 text-white", fill: "none", strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: "2.5", viewBox: "0 0 24 24", stroke: "currentColor", children: _jsx("path", { d: "M5 13l4 4L19 7" }) })) })] }));
8
+ }
@@ -0,0 +1,7 @@
1
+ import React from 'react';
2
+ import { FieldProps } from '../types';
3
+ /**
4
+ * Checkbox field component
5
+ * Renders a single checkbox input
6
+ */
7
+ export declare function CheckboxField(props: FieldProps): React.JSX.Element;
@@ -0,0 +1,26 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useFormContext } from 'react-hook-form';
3
+ import { getFieldError } from '../utils/fieldErrors';
4
+ import { useValidation } from '../hooks/useValidation';
5
+ import { cn } from '../utils/classNames';
6
+ import { HintDisplay } from './utils/HintDisplay';
7
+ import { ViewFieldWrapper } from './utils/ViewFieldWrapper';
8
+ import { formatBoolean } from '../utils/formatValue';
9
+ import { Icon } from './utils/Icon';
10
+ /**
11
+ * Checkbox field component
12
+ * Renders a single checkbox input
13
+ */
14
+ export function CheckboxField(props) {
15
+ // View mode: render formatted display
16
+ if (props.mode === 'view') {
17
+ const value = props.value;
18
+ const displayValue = formatBoolean(value);
19
+ return (_jsx(ViewFieldWrapper, { label: props.label, children: _jsxs("div", { className: "flex items-center gap-2", children: [value ? (_jsx(Icon, { name: "Check", size: 16, className: "text-green-600" })) : (_jsx(Icon, { name: "X", size: 16, className: "text-gray-400" })), _jsx("span", { children: displayValue })] }) }));
20
+ }
21
+ const { register, formState: { errors }, } = useFormContext();
22
+ const validation = useValidation(props.validation?.rules || [], props.operation, props.name);
23
+ const error = getFieldError(errors, props.name);
24
+ const hasError = !!error;
25
+ return (_jsxs("div", { className: "mb-4", children: [_jsxs("div", { className: "flex items-start", children: [_jsx("div", { className: "flex items-center h-5", children: _jsx("input", { id: props.name, type: "checkbox", ...register(props.name, validation), disabled: props.disabled, className: cn('w-4 h-4 border rounded', 'text-accent dark:text-accent', 'k-input', 'focus:ring-2 focus:ring-ring', 'transition duration-150 ease-in-out', hasError && 'border-red-500 dark:border-red-400', props.disabled && 'opacity-60 cursor-not-allowed') }) }), props.label && (_jsxs("div", { className: "ml-3", children: [_jsxs("label", { htmlFor: props.name, className: "text-sm font-medium text-gray-700 dark:text-gray-300", children: [props.label, validation.required && _jsx("span", { className: "text-red-500 dark:text-red-400 ml-1", children: "*" })] }), props.helperText && (_jsx("p", { className: "text-sm text-gray-500 dark:text-gray-400 mt-0.5", children: props.helperText }))] }))] }), hasError && _jsx("p", { className: "mt-1 ml-7 text-sm text-red-600 dark:text-red-400", children: error?.message }), !hasError && (_jsx("div", { className: "ml-7", children: _jsx(HintDisplay, { hint: props.hint, hintIcon: props.hintIcon, hintColor: props.hintColor }) }))] }));
26
+ }
@@ -0,0 +1,7 @@
1
+ import React from 'react';
2
+ import { FieldProps } from '../types';
3
+ /**
4
+ * ColorPicker field component
5
+ * Renders a color input with preview
6
+ */
7
+ export declare function ColorPickerField(props: FieldProps): React.JSX.Element;
@@ -0,0 +1,26 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useFormContext, useWatch } from 'react-hook-form';
3
+ import { getFieldError } from '../utils/fieldErrors';
4
+ import { useValidation } from '../hooks/useValidation';
5
+ import { cn } from '../utils/classNames';
6
+ import { HintDisplay } from './utils/HintDisplay';
7
+ import { ViewFieldWrapper } from './utils/ViewFieldWrapper';
8
+ import { translate } from '../i18n/activeLocale';
9
+ /**
10
+ * ColorPicker field component
11
+ * Renders a color input with preview
12
+ */
13
+ export function ColorPickerField(props) {
14
+ // View mode: render formatted display
15
+ if (props.mode === 'view') {
16
+ const value = props.value || '#000000';
17
+ return (_jsx(ViewFieldWrapper, { label: props.label, children: _jsxs("div", { className: "flex items-center gap-3", children: [_jsx("div", { className: "w-8 h-8 rounded border border-border", style: { backgroundColor: value } }), _jsx("span", { className: "text-fg font-mono", children: value })] }) }));
18
+ }
19
+ const { register, control, formState: { errors }, } = useFormContext();
20
+ const validation = useValidation(props.validation?.rules || [], props.operation, props.name);
21
+ const error = getFieldError(errors, props.name);
22
+ const hasError = !!error;
23
+ // Watch the color value for preview
24
+ const colorValue = useWatch({ control, name: props.name, defaultValue: props.default || '#000000' });
25
+ return (_jsxs("div", { className: "mb-4", children: [props.label && (_jsxs("label", { htmlFor: props.name, className: "block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1", children: [props.label, validation.required && _jsx("span", { className: "text-red-500 dark:text-red-400 ml-1", children: "*" })] })), _jsxs("div", { className: "flex items-center gap-3", children: [_jsx("input", { id: props.name, type: "color", ...register(props.name, validation), disabled: props.disabled, className: cn('h-10 w-20 border rounded-lg cursor-pointer', 'k-input', 'focus:outline-none focus:ring-2 focus:ring-ring', 'transition duration-150 ease-in-out', hasError && 'border-red-500 dark:border-red-400', props.disabled && 'opacity-60 cursor-not-allowed') }), _jsx("div", { className: "flex-1", children: _jsx("input", { type: "text", value: colorValue, readOnly: true, className: cn('w-full px-3 py-2 border rounded-lg shadow-sm', 'bg-muted text-fg border-border text-sm font-mono') }) }), _jsx("div", { className: "h-10 w-10 rounded-lg border-2 border-border shadow-sm", style: { backgroundColor: colorValue }, title: translate('core:a11y.color_preview') })] }), hasError && _jsx("p", { className: "mt-1 text-sm text-red-600 dark:text-red-400", children: error?.message }), props.helperText && _jsx("p", { className: "mt-1 text-sm text-gray-500 dark:text-gray-400", children: props.helperText }), !hasError && _jsx(HintDisplay, { hint: props.hint, hintIcon: props.hintIcon, hintColor: props.hintColor })] }));
26
+ }
@@ -0,0 +1,7 @@
1
+ import React from 'react';
2
+ import { FieldProps } from '../types';
3
+ /**
4
+ * DateTimePicker field component
5
+ * Renders a date/datetime input
6
+ */
7
+ export declare function DateTimePickerField(props: FieldProps): React.JSX.Element;
@@ -0,0 +1,64 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useFormContext, useWatch } from 'react-hook-form';
3
+ import { getFieldError } from '../utils/fieldErrors';
4
+ import { useValidation } from '../hooks/useValidation';
5
+ import { cn } from '../utils/classNames';
6
+ import { HintDisplay } from './utils/HintDisplay';
7
+ import { ViewFieldWrapper } from './utils/ViewFieldWrapper';
8
+ import { formatDate as formatDateValue } from '../utils/formatValue';
9
+ /**
10
+ * DateTimePicker field component
11
+ * Renders a date/datetime input
12
+ */
13
+ export function DateTimePickerField(props) {
14
+ // View mode: render formatted display
15
+ if (props.mode === 'view') {
16
+ const value = props.value;
17
+ const displayValue = formatDateValue(value, props.displayFormat || props.format);
18
+ return _jsx(ViewFieldWrapper, { label: props.label, children: displayValue });
19
+ }
20
+ const { register, formState: { errors }, control, } = useFormContext();
21
+ const validation = useValidation(props.validation?.rules || [], props.operation, props.name);
22
+ const error = getFieldError(errors, props.name);
23
+ const hasError = !!error;
24
+ // Watch the current value to format it for the input
25
+ const currentValue = useWatch({
26
+ control,
27
+ name: props.name,
28
+ defaultValue: undefined,
29
+ });
30
+ // Determine input type based on format
31
+ const getInputType = () => {
32
+ const format = props.format?.toLowerCase() || '';
33
+ // Time only (HH:mm, HH:mm:ss, h:m, etc.)
34
+ if (format.includes('hh:mm') || format.includes('h:m')) {
35
+ // Check if it's ONLY time (no date components)
36
+ const hasDateComponent = format.includes('yyyy') || format.includes('dd') || format.includes('mm/') || format.includes('dd/');
37
+ if (!hasDateComponent) {
38
+ return 'time';
39
+ }
40
+ // Has both date and time
41
+ return 'datetime-local';
42
+ }
43
+ // Default to date
44
+ return 'date';
45
+ };
46
+ // Format min/max dates/times for HTML input
47
+ const formatDate = (date) => {
48
+ if (!date)
49
+ return undefined;
50
+ const d = new Date(date);
51
+ const inputType = getInputType();
52
+ if (inputType === 'time') {
53
+ // Format as HH:mm for time input
54
+ return d.toTimeString().slice(0, 5);
55
+ }
56
+ else if (inputType === 'datetime-local') {
57
+ // Format as YYYY-MM-DDTHH:mm for datetime-local input
58
+ return d.toISOString().slice(0, 16);
59
+ }
60
+ // Format as YYYY-MM-DD for date input
61
+ return d.toISOString().split('T')[0];
62
+ };
63
+ return (_jsxs("div", { className: "mb-4", children: [props.label && (_jsxs("label", { htmlFor: props.name, className: "block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1", children: [props.label, validation.required && _jsx("span", { className: "text-red-500 dark:text-red-400 ml-1", children: "*" })] })), _jsx("input", { id: props.name, type: getInputType(), ...register(props.name, validation), value: currentValue ? formatDate(currentValue) : '', disabled: props.disabled, min: formatDate(props.minDate), max: formatDate(props.maxDate), className: cn('w-full px-3 py-2 border rounded-lg shadow-sm', 'k-input', 'focus:outline-none focus:ring-2 focus:ring-ring', 'transition duration-150 ease-in-out', hasError && 'border-red-500 dark:border-red-400 focus:ring-red-500 dark:focus:ring-red-400', props.disabled && 'opacity-60 cursor-not-allowed') }), hasError && _jsx("p", { className: "mt-1 text-sm text-red-600 dark:text-red-400", children: error?.message }), props.helperText && _jsx("p", { className: "mt-1 text-sm text-gray-500 dark:text-gray-400", children: props.helperText }), !hasError && _jsx(HintDisplay, { hint: props.hint, hintIcon: props.hintIcon, hintColor: props.hintColor })] }));
64
+ }
@@ -0,0 +1,9 @@
1
+ import React from 'react';
2
+ import { FieldProps } from '../types';
3
+ export declare function FileUploadField({ name, label, helperText, hint, hintIcon, hintColor, acceptedFileTypes, maxSize, minSize, multiple, maxFiles, disabled, required, visibility, directory, bucket, apiBaseUrl, resource, mode, value, validation, operation, }: FieldProps & {
4
+ visibility?: 'public' | 'private';
5
+ directory?: string;
6
+ bucket?: string;
7
+ apiBaseUrl?: string;
8
+ resource?: string;
9
+ }): React.JSX.Element;