@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,106 @@
1
+ export { FormRenderer } from './FormRenderer';
2
+ export { FieldRenderer } from './FieldRenderer';
3
+ export { definePluginClient, mergePluginClients } from './plugin';
4
+ export type { KratosPluginClient, MergedPluginRegistries } from './plugin';
5
+ export { mountAdminPanel } from './app';
6
+ export type { MountAdminPanelOptions } from './app';
7
+ export { FieldRegistryProvider, FieldRegistryContext, useFieldRegistry } from './contexts/FieldRegistryContext';
8
+ export type { FieldRegistryProviderProps } from './contexts/FieldRegistryContext';
9
+ export { useValidation } from './hooks/useValidation';
10
+ export { getFieldError } from './utils/fieldErrors';
11
+ export { ApiError, apiFetch, apiGet, apiPost } from './api/http';
12
+ export { TableApiClient } from './api/tableApi';
13
+ export type { QueryParams, QueryResult, PaginationMeta } from './api/tableApi';
14
+ export { executeAction, executeBulkAction } from './api/actionsApi';
15
+ export type { ActionResult } from './api/actionsApi';
16
+ export * as resourceApi from './api/resourceApi';
17
+ export { authenticatedFetch } from './api/authenticatedFetch';
18
+ export { deriveApiBaseUrl, resourceSlugFromUrl } from './api/urls';
19
+ export { evaluateCondition, evaluateConditionAst } from './runtime/conditions';
20
+ export type { Condition, ConditionAst, ConditionOperator } from './runtime/conditions';
21
+ export { executeSerializedFunction, compileSerializedFunction } from './runtime/serializedFunctions';
22
+ export { Button, IconButton, Input, Textarea, Select, Label, Badge, Card, Spinner, EmptyState, ErrorAlert, ToastProvider, useToast, ConfirmProvider, useConfirm, } from './components/ui';
23
+ export type { ButtonProps, IconButtonProps, ButtonVariant, ButtonSize, InputProps, TextareaProps, SelectProps, LabelProps, BadgeProps, BadgeVariant, CardProps, SpinnerProps, EmptyStateProps, ErrorAlertProps, ToastApi, ToastOptions, ToastVariant, ConfirmOptions, } from './components/ui';
24
+ export { ErrorBoundary } from './components/errors/ErrorBoundary';
25
+ export type { ErrorBoundaryProps } from './components/errors/ErrorBoundary';
26
+ export { QueryBuilderFilterComponent } from './components/filters/QueryBuilderFilterComponent';
27
+ export { CustomFilterComponent } from './components/filters/CustomFilterComponent';
28
+ export type { FieldProps, FieldComponent, FieldRegistry, FormRendererProps, FieldRendererProps, RHFValidationRules, SerializedRelation, } from './types';
29
+ export { TextInputField } from './components/TextInputField';
30
+ export { SelectField } from './components/SelectField';
31
+ export { TextareaField } from './components/TextareaField';
32
+ export { CheckboxField } from './components/CheckboxField';
33
+ export { ToggleField } from './components/ToggleField';
34
+ export { RadioField } from './components/RadioField';
35
+ export { DateTimePickerField } from './components/DateTimePickerField';
36
+ export { ColorPickerField } from './components/ColorPickerField';
37
+ export { RepeaterField } from './components/RepeaterField';
38
+ export { HiddenField } from './components/HiddenField';
39
+ export { FileUploadField } from './components/FileUploadField';
40
+ export { RichEditorField } from './components/RichEditorField';
41
+ export { SectionField } from './components/SectionField';
42
+ export { GroupField } from './components/GroupField';
43
+ export { HintDisplay } from './components/utils/HintDisplay';
44
+ export type { HintDisplayProps } from './components/utils/HintDisplay';
45
+ export { ViewFieldWrapper } from './components/utils/ViewFieldWrapper';
46
+ export type { ViewFieldWrapperProps } from './components/utils/ViewFieldWrapper';
47
+ export { cn } from './utils/classNames';
48
+ export { Icon } from './components/utils/Icon';
49
+ export type { IconName, IconProps } from './components/utils/Icon';
50
+ export * from 'lucide-react';
51
+ export { TableRenderer } from './TableRenderer';
52
+ export type { TableRendererProps } from './TableRenderer';
53
+ export { useTableContext } from './table/TableContext';
54
+ export type { TableContextValue } from './table/TableContext';
55
+ export { ViewModal } from './components/ViewModal';
56
+ export { ResourceFormModal } from './components/modals/ResourceFormModal';
57
+ export type { ResourceFormModalProps } from './components/modals/ResourceFormModal';
58
+ export { RelationCreateModal } from './components/modals/RelationCreateModal';
59
+ export { ActionFormModal } from './components/ActionFormModal';
60
+ export { ModalDrawer } from './components/ModalDrawer';
61
+ export { useResourceForm } from './components/modals/useResourceForm';
62
+ export type { UseResourceFormOptions, ResourceFormApi, ResourceFormMode } from './components/modals/useResourceForm';
63
+ export { ColumnRegistryProvider, useColumnRegistry } from './contexts/ColumnRegistryContext';
64
+ export type { ColumnRegistry, ColumnComponent } from './contexts/ColumnRegistryContext';
65
+ export { ResourceModalProvider, useResourceModal } from './contexts/ResourceModalContext';
66
+ export type { ModalState } from './contexts/ResourceModalContext';
67
+ export { PanelMetadataProvider, usePanelMetadata } from './contexts/PanelMetadataContext';
68
+ export type { PageMetadata } from './contexts/PanelMetadataContext';
69
+ export { TextColumnComponent } from './components/columns/TextColumnComponent';
70
+ export type { ColumnProps } from './components/columns/TextColumnComponent';
71
+ export { IconColumnComponent } from './components/columns/IconColumnComponent';
72
+ export { ImageColumnComponent } from './components/columns/ImageColumnComponent';
73
+ export { VideoColumnComponent } from './components/columns/VideoColumnComponent';
74
+ export { MediaColumnComponent } from './components/columns/MediaColumnComponent';
75
+ export { ColorColumnComponent } from './components/columns/ColorColumnComponent';
76
+ export { TagsColumnComponent } from './components/columns/TagsColumnComponent';
77
+ export { ViewColumnComponent } from './components/columns/ViewColumnComponent';
78
+ export { CheckboxColumnComponent } from './components/columns/CheckboxColumnComponent';
79
+ export { ToggleColumnComponent } from './components/columns/ToggleColumnComponent';
80
+ export { SelectColumnComponent } from './components/columns/SelectColumnComponent';
81
+ export { TextInputColumnComponent } from './components/columns/TextInputColumnComponent';
82
+ export { AdminPanel } from './components/AdminPanel';
83
+ export type { AdminPanelProps, BlockRegistry } from './types';
84
+ export { I18nProvider, useI18nContext, useTranslation, useLocale, useFormatter, LocaleSwitcher, getActiveLocale, translate, buildClientI18n, } from './i18n';
85
+ export type { I18nContextValue, I18nProviderProps, ClientI18nConfig, ClientTranslations, LocaleSwitcherProps, } from './i18n';
86
+ export { AuthProvider, useAuth } from './auth/AuthContext';
87
+ export { LoginPage } from './auth/LoginPage';
88
+ export { ProtectedRoute } from './auth/ProtectedRoute';
89
+ export { AuthApiClient } from './auth/authApiClient';
90
+ export type { AuthUser, AuthProvider as AuthProviderType, AuthTokens, LoginCredentials, LoginResult, PendingChallenge, AuthChallengeProps, AuthChallengeComponent, } from './auth/types';
91
+ export { AuthChallengeRegistryProvider, AuthChallengeRegistryContext, useAuthChallengeRegistry, } from './contexts/AuthChallengeRegistryContext';
92
+ export type { AuthChallengeRegistry } from './contexts/AuthChallengeRegistryContext';
93
+ export { WidgetRegistryProvider, useWidgetRegistry } from './contexts/WidgetRegistryContext';
94
+ export { StatsWidget } from './components/widgets/StatsWidget';
95
+ export { ChartWidget } from './components/widgets/ChartWidget';
96
+ export { WidgetRenderer } from './components/widgets/WidgetRenderer';
97
+ export type { WidgetComponentProps } from './contexts/WidgetRegistryContext';
98
+ export type { StatsWidgetProps } from './components/widgets/StatsWidget';
99
+ export type { ChartWidgetProps } from './components/widgets/ChartWidget';
100
+ export type { WidgetRendererProps } from './components/widgets/WidgetRenderer';
101
+ export { Slot, SlotCluster, renderSlot, SLOT_NAMES } from './slots';
102
+ export type { SlotProps, SlotClusterProps, SlotName, BuiltInSlotName, SlotContext, SlotRender, SlotContribution, SlotMap, ResolvedSlots, } from './slots';
103
+ export { SlotRegistryProvider, SlotRegistryContext, useSlot, useSlotRegistry } from './contexts/SlotRegistryContext';
104
+ export type { SlotRegistryProviderProps } from './contexts/SlotRegistryContext';
105
+ export { BlockRegistryProvider, useBlockRegistry } from './contexts/BlockRegistryContext';
106
+ export type { CustomBlockComponentProps, CustomBlockComponent, BlockRegistry as BlockRegistryType, } from './contexts/BlockRegistryContext';
package/dist/index.js ADDED
@@ -0,0 +1,101 @@
1
+ // Main exports
2
+ export { FormRenderer } from './FormRenderer';
3
+ export { FieldRenderer } from './FieldRenderer';
4
+ // Plugin-author API
5
+ export { definePluginClient, mergePluginClients } from './plugin';
6
+ // App entry (mount the admin SPA)
7
+ export { mountAdminPanel } from './app';
8
+ // Field registry
9
+ export { FieldRegistryProvider, FieldRegistryContext, useFieldRegistry } from './contexts/FieldRegistryContext';
10
+ // Hooks
11
+ export { useValidation } from './hooks/useValidation';
12
+ // Field utilities (for custom field components)
13
+ export { getFieldError } from './utils/fieldErrors';
14
+ // HTTP / API layer
15
+ export { ApiError, apiFetch, apiGet, apiPost } from './api/http';
16
+ export { TableApiClient } from './api/tableApi';
17
+ export { executeAction, executeBulkAction } from './api/actionsApi';
18
+ export * as resourceApi from './api/resourceApi';
19
+ export { authenticatedFetch } from './api/authenticatedFetch';
20
+ export { deriveApiBaseUrl, resourceSlugFromUrl } from './api/urls';
21
+ // Condition / serialized-function runtime
22
+ export { evaluateCondition, evaluateConditionAst } from './runtime/conditions';
23
+ export { executeSerializedFunction, compileSerializedFunction } from './runtime/serializedFunctions';
24
+ // UI primitives (stable styling contract for plugin authors)
25
+ export { Button, IconButton, Input, Textarea, Select, Label, Badge, Card, Spinner, EmptyState, ErrorAlert, ToastProvider, useToast, ConfirmProvider, useConfirm, } from './components/ui';
26
+ export { ErrorBoundary } from './components/errors/ErrorBoundary';
27
+ // Filter Components
28
+ export { QueryBuilderFilterComponent } from './components/filters/QueryBuilderFilterComponent';
29
+ export { CustomFilterComponent } from './components/filters/CustomFilterComponent';
30
+ // Built-in field components (for custom rendering or extending)
31
+ export { TextInputField } from './components/TextInputField';
32
+ export { SelectField } from './components/SelectField';
33
+ export { TextareaField } from './components/TextareaField';
34
+ export { CheckboxField } from './components/CheckboxField';
35
+ export { ToggleField } from './components/ToggleField';
36
+ export { RadioField } from './components/RadioField';
37
+ export { DateTimePickerField } from './components/DateTimePickerField';
38
+ export { ColorPickerField } from './components/ColorPickerField';
39
+ export { RepeaterField } from './components/RepeaterField';
40
+ export { HiddenField } from './components/HiddenField';
41
+ export { FileUploadField } from './components/FileUploadField';
42
+ export { RichEditorField } from './components/RichEditorField';
43
+ export { SectionField } from './components/SectionField';
44
+ export { GroupField } from './components/GroupField';
45
+ export { HintDisplay } from './components/utils/HintDisplay';
46
+ export { ViewFieldWrapper } from './components/utils/ViewFieldWrapper';
47
+ // Utilities
48
+ export { cn } from './utils/classNames';
49
+ // Icon component and types
50
+ export { Icon } from './components/utils/Icon';
51
+ // Re-export all Lucide icons for convenience
52
+ export * from 'lucide-react';
53
+ // Table
54
+ export { TableRenderer } from './TableRenderer';
55
+ export { useTableContext } from './table/TableContext';
56
+ // Modals
57
+ export { ViewModal } from './components/ViewModal';
58
+ export { ResourceFormModal } from './components/modals/ResourceFormModal';
59
+ export { RelationCreateModal } from './components/modals/RelationCreateModal';
60
+ export { ActionFormModal } from './components/ActionFormModal';
61
+ export { ModalDrawer } from './components/ModalDrawer';
62
+ export { useResourceForm } from './components/modals/useResourceForm';
63
+ // Table context
64
+ export { ColumnRegistryProvider, useColumnRegistry } from './contexts/ColumnRegistryContext';
65
+ // Modal context
66
+ export { ResourceModalProvider, useResourceModal } from './contexts/ResourceModalContext';
67
+ // Panel metadata context
68
+ export { PanelMetadataProvider, usePanelMetadata } from './contexts/PanelMetadataContext';
69
+ // Table column components (for custom rendering or extending)
70
+ export { TextColumnComponent } from './components/columns/TextColumnComponent';
71
+ export { IconColumnComponent } from './components/columns/IconColumnComponent';
72
+ export { ImageColumnComponent } from './components/columns/ImageColumnComponent';
73
+ export { VideoColumnComponent } from './components/columns/VideoColumnComponent';
74
+ export { MediaColumnComponent } from './components/columns/MediaColumnComponent';
75
+ export { ColorColumnComponent } from './components/columns/ColorColumnComponent';
76
+ export { TagsColumnComponent } from './components/columns/TagsColumnComponent';
77
+ export { ViewColumnComponent } from './components/columns/ViewColumnComponent';
78
+ export { CheckboxColumnComponent } from './components/columns/CheckboxColumnComponent';
79
+ export { ToggleColumnComponent } from './components/columns/ToggleColumnComponent';
80
+ export { SelectColumnComponent } from './components/columns/SelectColumnComponent';
81
+ export { TextInputColumnComponent } from './components/columns/TextInputColumnComponent';
82
+ // AdminPanel component
83
+ export { AdminPanel } from './components/AdminPanel';
84
+ // Internationalization (i18n)
85
+ export { I18nProvider, useI18nContext, useTranslation, useLocale, useFormatter, LocaleSwitcher, getActiveLocale, translate, buildClientI18n, } from './i18n';
86
+ // Auth components
87
+ export { AuthProvider, useAuth } from './auth/AuthContext';
88
+ export { LoginPage } from './auth/LoginPage';
89
+ export { ProtectedRoute } from './auth/ProtectedRoute';
90
+ export { AuthApiClient } from './auth/authApiClient';
91
+ export { AuthChallengeRegistryProvider, AuthChallengeRegistryContext, useAuthChallengeRegistry, } from './contexts/AuthChallengeRegistryContext';
92
+ // Widget exports
93
+ export { WidgetRegistryProvider, useWidgetRegistry } from './contexts/WidgetRegistryContext';
94
+ export { StatsWidget } from './components/widgets/StatsWidget';
95
+ export { ChartWidget } from './components/widgets/ChartWidget';
96
+ export { WidgetRenderer } from './components/widgets/WidgetRenderer';
97
+ // Slots (additive UI injection points)
98
+ export { Slot, SlotCluster, renderSlot, SLOT_NAMES } from './slots';
99
+ export { SlotRegistryProvider, SlotRegistryContext, useSlot, useSlotRegistry } from './contexts/SlotRegistryContext';
100
+ // Block registry (custom blocks)
101
+ export { BlockRegistryProvider, useBlockRegistry } from './contexts/BlockRegistryContext';
@@ -0,0 +1,8 @@
1
+ import React from 'react';
2
+ export interface ResourceListPageProps {
3
+ apiBaseUrl: string;
4
+ resourceSlug: string;
5
+ resourceName: string;
6
+ pluralLabel: string;
7
+ }
8
+ export declare function ResourceListPage({ apiBaseUrl, resourceSlug, resourceName, pluralLabel }: ResourceListPageProps): React.JSX.Element;
@@ -0,0 +1,139 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import { useState, useEffect } from 'react';
3
+ import { useNavigate, useLocation } from 'react-router-dom';
4
+ import { Loader2 } from 'lucide-react';
5
+ import { TableRenderer } from '../TableRenderer';
6
+ import { authenticatedFetch } from '../api/authenticatedFetch';
7
+ import { useResourceModal } from '../contexts/ResourceModalContext';
8
+ import { useTableRefresh } from '../contexts/TableRefreshContext';
9
+ import { PillButton } from '../components/ui/PillButton';
10
+ import { translate } from '../i18n/activeLocale';
11
+ export function ResourceListPage({ apiBaseUrl, resourceSlug, resourceName, pluralLabel }) {
12
+ const navigate = useNavigate();
13
+ const location = useLocation();
14
+ const { openModal, closeAllModals, clearModalsForResource } = useResourceModal();
15
+ const [tableSchema, setTableSchema] = useState(null);
16
+ // Track which resource the current tableSchema belongs to, to avoid mismatches on navigation
17
+ const [tableSchemaResource, setTableSchemaResource] = useState(null);
18
+ const [canCreate, setCanCreate] = useState(true);
19
+ const [canEdit, setCanEdit] = useState(true);
20
+ const [canDelete, setCanDelete] = useState(true);
21
+ const [canView, setCanView] = useState(true);
22
+ const [loading, setLoading] = useState(true);
23
+ const [error, setError] = useState(null);
24
+ const [refreshKey, setRefreshKey] = useState(0);
25
+ const { registerRefresh } = useTableRefresh();
26
+ // Register refresh callback for this resource
27
+ useEffect(() => {
28
+ const unregister = registerRefresh(resourceSlug, () => {
29
+ setRefreshKey(prev => prev + 1);
30
+ });
31
+ return unregister;
32
+ }, [resourceSlug, registerRefresh]);
33
+ // Parse route to determine which modal to show via context
34
+ // This only manages modals for THIS resource (URL-based modals)
35
+ useEffect(() => {
36
+ const pathParts = location.pathname.split('/').filter(Boolean);
37
+ const resourceIndex = pathParts.indexOf(resourceSlug);
38
+ if (resourceIndex === -1) {
39
+ // Not on this resource page anymore, clear only this resource's modals
40
+ clearModalsForResource(resourceSlug);
41
+ return;
42
+ }
43
+ const nextPart = pathParts[resourceIndex + 1];
44
+ const thirdPart = pathParts[resourceIndex + 2];
45
+ // Check for edit route: /resourceSlug/:id/edit
46
+ if (nextPart && thirdPart === 'edit') {
47
+ if (canEdit) {
48
+ openModal(resourceSlug, 'edit', nextPart);
49
+ }
50
+ }
51
+ else if (nextPart === 'create') {
52
+ // Check for create route: /resourceSlug/create
53
+ if (canCreate) {
54
+ openModal(resourceSlug, 'create');
55
+ }
56
+ }
57
+ else if (nextPart && nextPart !== 'create' && nextPart !== 'edit') {
58
+ // It's an ID for view: /resourceSlug/:id
59
+ if (canView) {
60
+ openModal(resourceSlug, 'view', nextPart);
61
+ }
62
+ }
63
+ else {
64
+ // Just the resource slug, no modals in URL: /resourceSlug
65
+ // Clear only this resource's URL-based modals (keeps cross-resource modals open)
66
+ clearModalsForResource(resourceSlug);
67
+ }
68
+ // location.key is included so the effect re-fires even when the pathname
69
+ // hasn't changed from React Router's perspective — this happens after a
70
+ // replaceState (back/breadcrumb) when the user clicks the same row again.
71
+ // navigate() always produces a new location.key, replaceState never does.
72
+ }, [location.pathname, location.key, resourceSlug, canCreate, canEdit, canView, openModal, clearModalsForResource]);
73
+ // Fetch table schema
74
+ useEffect(() => {
75
+ const fetchTableSchema = async () => {
76
+ setError(null);
77
+ try {
78
+ const response = await authenticatedFetch(`${apiBaseUrl}/${resourceSlug}/schema/table`, {
79
+ headers: {
80
+ 'Content-Type': 'application/json',
81
+ },
82
+ }, apiBaseUrl);
83
+ if (!response.ok) {
84
+ if (response.status === 401) {
85
+ throw new Error('Unauthorized - Please login again');
86
+ }
87
+ const error = await response.json();
88
+ throw new Error(`Failed to fetch table schema: ${error.message || response.statusText}`);
89
+ }
90
+ const data = await response.json();
91
+ setTableSchema(data.schema);
92
+ setTableSchemaResource(resourceSlug);
93
+ // Extract canCreate, canEdit, canDelete, and canView from API response
94
+ setCanCreate(data.canCreate !== false); // Default to true if undefined
95
+ setCanEdit(data.canEdit !== false); // Default to true if undefined
96
+ setCanDelete(data.canDelete !== false); // Default to true if undefined
97
+ setCanView(data.canView !== false); // Default to true if undefined
98
+ }
99
+ catch (err) {
100
+ setError(err instanceof Error ? err.message : translate('core:error.load_schema'));
101
+ }
102
+ finally {
103
+ setLoading(false);
104
+ }
105
+ };
106
+ if (resourceSlug) {
107
+ // Set loading and clear schema together to prevent race conditions
108
+ // This prevents TableRenderer from rendering with mismatched schema/resourceKey
109
+ setLoading(true);
110
+ setTableSchema(null);
111
+ setTableSchemaResource(null);
112
+ fetchTableSchema();
113
+ }
114
+ }, [apiBaseUrl, resourceSlug]);
115
+ // Handlers for table actions - navigate to update URL (these are always same-resource)
116
+ const handleCreateClick = () => {
117
+ navigate(`/${resourceSlug}/create`);
118
+ };
119
+ const handleViewClick = (rowId) => {
120
+ navigate(`/${resourceSlug}/${rowId}`);
121
+ };
122
+ const handleEditClick = (rowId) => {
123
+ navigate(`/${resourceSlug}/${rowId}/edit`);
124
+ };
125
+ // Guard against rendering a schema that belongs to a previous resource
126
+ if (tableSchema && tableSchemaResource !== resourceSlug) {
127
+ return (_jsxs("div", { className: "flex items-center justify-center py-12", children: [_jsx(Loader2, { className: "w-8 h-8 text-accent animate-spin" }), _jsx("span", { className: "ml-3 text-fg-secondary", children: translate('core:common.loading_ellipsis') })] }));
128
+ }
129
+ if (loading) {
130
+ return (_jsxs("div", { className: "flex items-center justify-center py-12", children: [_jsx(Loader2, { className: "w-8 h-8 text-accent animate-spin" }), _jsx("span", { className: "ml-3 text-fg-secondary", children: translate('core:common.loading_ellipsis') })] }));
131
+ }
132
+ if (error) {
133
+ return (_jsx("div", { className: "", children: _jsxs("div", { className: "text-center py-12", children: [_jsx("p", { className: "text-red-600 mb-4", children: error }), _jsx(PillButton, { variant: "primary", onClick: () => window.location.reload(), children: translate('core:common.retry') })] }) }));
134
+ }
135
+ if (!tableSchema) {
136
+ return (_jsx("div", { className: "", children: _jsx("div", { className: "text-center py-12 text-fg-secondary", children: translate('core:state.no_table_schema') }) }));
137
+ }
138
+ return (_jsx(_Fragment, { children: _jsx("div", { className: "w-full max-w-7xl mx-auto", children: _jsx("div", { className: "w-full", children: _jsx(TableRenderer, { isResource: true, schema: tableSchema, apiUrl: `${apiBaseUrl}/${resourceSlug}`, apiBaseUrl: apiBaseUrl, onCreateClick: canCreate ? handleCreateClick : undefined, onEditClick: canEdit ? handleEditClick : undefined, onViewClick: canView ? handleViewClick : undefined, canCreate: canCreate, canEdit: canEdit, canDelete: canDelete, canView: canView, refreshKey: refreshKey }) }) }) }));
139
+ }
@@ -0,0 +1,79 @@
1
+ import type { FieldRegistry, WidgetRegistry, BlockRegistry } from './types';
2
+ import type { ColumnRegistry } from './contexts/ColumnRegistryContext';
3
+ import type { AuthChallengeRegistry } from './contexts/AuthChallengeRegistryContext';
4
+ import type { RuleDefinition } from '@maxal_studio/kratosjs';
5
+ import type { SlotMap, ResolvedSlots } from './slots/types';
6
+ /**
7
+ * Client-side manifest of a KratosJs plugin.
8
+ *
9
+ * Plugins export this from their `/client` entry. Components are statically
10
+ * imported, so the app's bundler (Vite) bundles them with a single shared
11
+ * React instance — no runtime transformation or dynamic URL loading.
12
+ *
13
+ * @example
14
+ * ```typescript
15
+ * // my-plugin/src/client/index.ts
16
+ * import { definePluginClient } from '@maxal_studio/kratosjs-react';
17
+ * import StarRatingField from './StarRatingField';
18
+ *
19
+ * export default definePluginClient({
20
+ * name: 'star-rating',
21
+ * fields: { 'star-rating': StarRatingField },
22
+ * });
23
+ * ```
24
+ */
25
+ export interface KratosPluginClient {
26
+ /** Optional plugin name (for debugging) */
27
+ name?: string;
28
+ /** Custom field components keyed by field type (e.g. 'star-rating') */
29
+ fields?: FieldRegistry;
30
+ /** Custom column components keyed by column type */
31
+ columns?: ColumnRegistry;
32
+ /** Custom widget components keyed by widget type */
33
+ widgets?: WidgetRegistry;
34
+ /** Custom page block components keyed by block type */
35
+ blocks?: BlockRegistry;
36
+ /**
37
+ * Challenge UI components keyed by challenge `type` (e.g. '2fa-totp'). Rendered on the
38
+ * login screen when the server returns a matching pending challenge. Pairs with the
39
+ * plugin's server-side `panel.registerAuthChallenge(...)`.
40
+ */
41
+ authChallenges?: AuthChallengeRegistry;
42
+ /**
43
+ * Custom validation rules keyed by rule name (e.g. 'phone'). Authored once as
44
+ * a `RuleDefinition` and referenced from both the plugin's server `register()`
45
+ * (via `panel.registerValidationRule`) and this client manifest, so the rule
46
+ * behaves identically on both sides.
47
+ */
48
+ rules?: Record<string, RuleDefinition>;
49
+ /**
50
+ * UI slot contributions keyed by slot name (e.g. `'header.right'`). Unlike the
51
+ * component registries above (which are 1:1 and override-based), slots are
52
+ * 1:many — every plugin and the app can stack elements into the same slot.
53
+ * A value is a single `SlotContribution` or an array of them.
54
+ *
55
+ * @example
56
+ * slots: {
57
+ * 'header.right': { id: 'docs-link', render: () => <a href="/docs">Docs</a> },
58
+ * }
59
+ */
60
+ slots?: SlotMap;
61
+ }
62
+ /**
63
+ * Identity helper that provides type inference for plugin client manifests.
64
+ */
65
+ export declare function definePluginClient(client: KratosPluginClient): KratosPluginClient;
66
+ export interface MergedPluginRegistries {
67
+ fields: FieldRegistry;
68
+ columns: ColumnRegistry;
69
+ widgets: WidgetRegistry;
70
+ blocks: BlockRegistry;
71
+ authChallenges: AuthChallengeRegistry;
72
+ rules: Record<string, RuleDefinition>;
73
+ slots: ResolvedSlots;
74
+ }
75
+ /**
76
+ * Merge multiple plugin client manifests into flat component registries.
77
+ * Later plugins win on name collisions.
78
+ */
79
+ export declare function mergePluginClients(plugins?: KratosPluginClient[]): MergedPluginRegistries;
package/dist/plugin.js ADDED
@@ -0,0 +1,34 @@
1
+ import { appendSlots, sortSlots } from './slots/mergeSlots';
2
+ /**
3
+ * Identity helper that provides type inference for plugin client manifests.
4
+ */
5
+ export function definePluginClient(client) {
6
+ return client;
7
+ }
8
+ /**
9
+ * Merge multiple plugin client manifests into flat component registries.
10
+ * Later plugins win on name collisions.
11
+ */
12
+ export function mergePluginClients(plugins = []) {
13
+ const merged = {
14
+ fields: {},
15
+ columns: {},
16
+ widgets: {},
17
+ blocks: {},
18
+ authChallenges: {},
19
+ rules: {},
20
+ slots: {},
21
+ };
22
+ for (const plugin of plugins) {
23
+ Object.assign(merged.fields, plugin.fields ?? {});
24
+ Object.assign(merged.columns, plugin.columns ?? {});
25
+ Object.assign(merged.widgets, plugin.widgets ?? {});
26
+ Object.assign(merged.blocks, plugin.blocks ?? {});
27
+ Object.assign(merged.authChallenges, plugin.authChallenges ?? {});
28
+ Object.assign(merged.rules, plugin.rules ?? {});
29
+ // Slots stack (1:many) rather than override; later plugins append after earlier ones.
30
+ appendSlots(merged.slots, plugin.slots);
31
+ }
32
+ sortSlots(merged.slots);
33
+ return merged;
34
+ }
@@ -0,0 +1,35 @@
1
+ /**
2
+ * Conditional visibility / disabled-state evaluation.
3
+ *
4
+ * Three condition forms are supported, in priority order:
5
+ * 1. `boolean` — static.
6
+ * 2. Structured condition object (preferred) — a small declarative AST that
7
+ * is interpreted without executing any code, so it works under a strict
8
+ * CSP and cannot do anything besides read form values.
9
+ * 3. Serialized function string — `({ get, operation }) => boolean`,
10
+ * compiled via the serialized-function runtime (see its trust-boundary
11
+ * notes).
12
+ */
13
+ export type ConditionOperator = 'eq' | 'ne' | 'in' | 'nin' | 'truthy' | 'falsy' | 'gt' | 'gte' | 'lt' | 'lte' | 'operation';
14
+ export type ConditionAst = {
15
+ all: ConditionAst[];
16
+ } | {
17
+ any: ConditionAst[];
18
+ } | {
19
+ not: ConditionAst;
20
+ } | {
21
+ op: ConditionOperator;
22
+ field?: string;
23
+ value?: any;
24
+ };
25
+ export type Condition = boolean | string | ConditionAst | undefined;
26
+ export type FormOperation = 'create' | 'edit' | 'view';
27
+ /**
28
+ * Pure interpreter for structured conditions — no code execution.
29
+ */
30
+ export declare function evaluateConditionAst(ast: ConditionAst, formState: Record<string, any>, operation?: FormOperation): boolean;
31
+ /**
32
+ * Evaluate a hidden/disabled condition against the current form state.
33
+ * Returns false (not hidden / not disabled) for undefined or invalid input.
34
+ */
35
+ export declare function evaluateCondition(condition: Condition, formState: Record<string, any>, operation?: FormOperation): boolean;
@@ -0,0 +1,97 @@
1
+ import { compileSerializedFunction } from './serializedFunctions';
2
+ /** Read a (possibly dot-separated) field path from the form state. */
3
+ function getFieldValue(formState, fieldName) {
4
+ let value = formState;
5
+ for (const key of fieldName.split('.')) {
6
+ if (value === undefined || value === null) {
7
+ return undefined;
8
+ }
9
+ value = value[key];
10
+ }
11
+ return value;
12
+ }
13
+ function isConditionAst(condition) {
14
+ if (!condition || typeof condition !== 'object' || Array.isArray(condition)) {
15
+ return false;
16
+ }
17
+ const c = condition;
18
+ return Array.isArray(c.all) || Array.isArray(c.any) || typeof c.not === 'object' || typeof c.op === 'string';
19
+ }
20
+ /**
21
+ * Pure interpreter for structured conditions — no code execution.
22
+ */
23
+ export function evaluateConditionAst(ast, formState, operation) {
24
+ if ('all' in ast && Array.isArray(ast.all)) {
25
+ return ast.all.every(child => evaluateConditionAst(child, formState, operation));
26
+ }
27
+ if ('any' in ast && Array.isArray(ast.any)) {
28
+ return ast.any.some(child => evaluateConditionAst(child, formState, operation));
29
+ }
30
+ if ('not' in ast && ast.not) {
31
+ return !evaluateConditionAst(ast.not, formState, operation);
32
+ }
33
+ const { op, field, value } = ast;
34
+ const actual = op === 'operation' ? operation : field !== undefined ? getFieldValue(formState, field) : undefined;
35
+ switch (op) {
36
+ case 'eq':
37
+ return actual === value;
38
+ case 'ne':
39
+ return actual !== value;
40
+ case 'in':
41
+ return Array.isArray(value) && value.includes(actual);
42
+ case 'nin':
43
+ return Array.isArray(value) && !value.includes(actual);
44
+ case 'truthy':
45
+ return Boolean(actual);
46
+ case 'falsy':
47
+ return !actual;
48
+ case 'gt':
49
+ return actual > value;
50
+ case 'gte':
51
+ return actual >= value;
52
+ case 'lt':
53
+ return actual < value;
54
+ case 'lte':
55
+ return actual <= value;
56
+ case 'operation':
57
+ return operation === value;
58
+ default:
59
+ console.warn('Unknown condition operator:', op);
60
+ return false;
61
+ }
62
+ }
63
+ /**
64
+ * Evaluate a hidden/disabled condition against the current form state.
65
+ * Returns false (not hidden / not disabled) for undefined or invalid input.
66
+ */
67
+ export function evaluateCondition(condition, formState, operation) {
68
+ if (condition === undefined || condition === null) {
69
+ return false;
70
+ }
71
+ if (typeof condition === 'boolean') {
72
+ return condition;
73
+ }
74
+ if (isConditionAst(condition)) {
75
+ try {
76
+ return evaluateConditionAst(condition, formState, operation);
77
+ }
78
+ catch (error) {
79
+ console.error('Error evaluating condition AST:', condition, error);
80
+ return false;
81
+ }
82
+ }
83
+ if (typeof condition === 'string') {
84
+ try {
85
+ const fn = compileSerializedFunction(condition);
86
+ if (!fn)
87
+ return false;
88
+ const get = (fieldName) => getFieldValue(formState, fieldName);
89
+ return Boolean(fn({ get, operation }));
90
+ }
91
+ catch (error) {
92
+ console.error('Error evaluating condition:', condition, error);
93
+ return false;
94
+ }
95
+ }
96
+ return false;
97
+ }
@@ -0,0 +1,25 @@
1
+ import { SerializedComponent } from '@maxal_studio/kratosjs';
2
+ /**
3
+ * Frontend implementation of the declarative children contract (mirrors
4
+ * `src/utils/formSchemaTraversal`). The core package's
5
+ * barrel pulls Node-only deps, so we share the *contract* (the serialized
6
+ * shape), not the module:
7
+ * - children live under `schema`
8
+ * - `isLayout` marks pure layout containers (no value of their own)
9
+ * - `childScope: 'array'` marks item-template containers (Repeater)
10
+ *
11
+ * Any component (core or plugin) that follows the contract is traversed
12
+ * correctly with no type-specific code.
13
+ */
14
+ /** Direct child components of a node. */
15
+ export declare function getChildComponents(node: SerializedComponent): SerializedComponent[];
16
+ /** A pure layout container (inherits parent value scope, holds no value of its own). */
17
+ export declare function isLayout(node: SerializedComponent): boolean;
18
+ /** Children form an item template whose value lives under the node's own name (Repeater). */
19
+ export declare function isArrayScope(node: SerializedComponent): boolean;
20
+ /**
21
+ * Depth-first predicate over a node and all of its descendants. Recursion stops
22
+ * descending past array-scope containers (their item template is a separate
23
+ * value scope) — the predicate still sees the container node itself.
24
+ */
25
+ export declare function someComponent(node: SerializedComponent, predicate: (node: SerializedComponent) => boolean): boolean;