@alepha/ui 0.18.1 → 0.18.3

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 (280) hide show
  1. package/dist/admin/{AdminApiKeys-C-6_Q-lH.js → AdminApiKeys-Dy_k-4Vd.js} +17 -38
  2. package/dist/admin/AdminApiKeys-Dy_k-4Vd.js.map +1 -0
  3. package/dist/admin/{AdminAudits-Bgbf04hO.js → AdminAudits-CKiFMSSU.js} +23 -19
  4. package/dist/admin/AdminAudits-CKiFMSSU.js.map +1 -0
  5. package/dist/admin/AdminDashboard-PhC_dZqo.js +67 -0
  6. package/dist/admin/AdminDashboard-PhC_dZqo.js.map +1 -0
  7. package/dist/admin/{AdminFiles-B9a7G3cY.js → AdminFiles-DFTjijGp.js} +3 -7
  8. package/dist/admin/AdminFiles-DFTjijGp.js.map +1 -0
  9. package/dist/admin/{AdminJobDashboard-DaTwf5OY.js → AdminJobDashboard-BL8gGPDp.js} +2 -2
  10. package/dist/admin/{AdminJobDashboard-DaTwf5OY.js.map → AdminJobDashboard-BL8gGPDp.js.map} +1 -1
  11. package/dist/admin/{AdminJobExecutions-B9cek5dl.js → AdminJobExecutions-D9E-CS-U.js} +24 -36
  12. package/dist/admin/AdminJobExecutions-D9E-CS-U.js.map +1 -0
  13. package/dist/admin/{AdminJobRegistry-DFgV3oqx.js → AdminJobRegistry-Ci9ue1zC.js} +10 -18
  14. package/dist/admin/AdminJobRegistry-Ci9ue1zC.js.map +1 -0
  15. package/dist/admin/AdminLayout-I6TlUMPc.js +61 -0
  16. package/dist/admin/AdminLayout-I6TlUMPc.js.map +1 -0
  17. package/dist/admin/AdminNotifications-ZPHCYrv7.js +542 -0
  18. package/dist/admin/AdminNotifications-ZPHCYrv7.js.map +1 -0
  19. package/dist/admin/{AdminParameters-DHw9ATgl.js → AdminParameters-CqgvhRsb.js} +120 -105
  20. package/dist/admin/AdminParameters-CqgvhRsb.js.map +1 -0
  21. package/dist/admin/{AdminSessions-BhGJPI3z.js → AdminSessions-Bz5NRuoW.js} +48 -53
  22. package/dist/admin/AdminSessions-Bz5NRuoW.js.map +1 -0
  23. package/dist/admin/{AdminUserLayout-BdC4Te8m.js → AdminUserLayout-lXT6I0Qq.js} +14 -8
  24. package/dist/admin/AdminUserLayout-lXT6I0Qq.js.map +1 -0
  25. package/dist/admin/{AdminUserProfile-DAt23fqY.js → AdminUserProfile-vFBLoJ3h.js} +3 -3
  26. package/dist/admin/{AdminUserProfile-DAt23fqY.js.map → AdminUserProfile-vFBLoJ3h.js.map} +1 -1
  27. package/dist/admin/{AdminUserSessions-1uzcx02z.js → AdminUserSessions-CT_YDim0.js} +33 -35
  28. package/dist/admin/AdminUserSessions-CT_YDim0.js.map +1 -0
  29. package/dist/admin/AdminUsers-D1UfGya9.js +206 -0
  30. package/dist/admin/AdminUsers-D1UfGya9.js.map +1 -0
  31. package/dist/admin/{AuthLayout-DFJvCvzw.js → AuthLayout-_frhdgOO.js} +2 -2
  32. package/dist/admin/{AuthLayout-DFJvCvzw.js.map → AuthLayout-_frhdgOO.js.map} +1 -1
  33. package/dist/admin/{IconGoogle-CSQLPYwX.js → IconGoogle-Ch1m3Uzl.js} +1 -1
  34. package/dist/admin/{IconGoogle-CSQLPYwX.js.map → IconGoogle-Ch1m3Uzl.js.map} +1 -1
  35. package/dist/admin/Login-xtNmQtGh.js +275 -0
  36. package/dist/admin/Login-xtNmQtGh.js.map +1 -0
  37. package/dist/{auth/Profile-BMX_Ar_s.js → admin/Profile-_AtPUwAP.js} +31 -27
  38. package/dist/admin/Profile-_AtPUwAP.js.map +1 -0
  39. package/dist/admin/{Register-Cs10l8vX.js → Register-JcCjHUUn.js} +199 -143
  40. package/dist/admin/Register-JcCjHUUn.js.map +1 -0
  41. package/dist/admin/{ResetPassword-BwDdfkGH.js → ResetPassword-CwGBPLJO.js} +7 -7
  42. package/dist/admin/ResetPassword-CwGBPLJO.js.map +1 -0
  43. package/dist/admin/{VerifyEmail-DfXHAiQl.js → VerifyEmail-hNxWejWf.js} +23 -8
  44. package/dist/admin/VerifyEmail-hNxWejWf.js.map +1 -0
  45. package/dist/admin/{core-2xoLiT0o.js → core-CYaRQ8O-.js} +2082 -688
  46. package/dist/admin/core-CYaRQ8O-.js.map +1 -0
  47. package/dist/admin/index.d.ts +112 -48
  48. package/dist/admin/index.d.ts.map +1 -1
  49. package/dist/admin/index.js +467 -69
  50. package/dist/admin/index.js.map +1 -1
  51. package/dist/auth/{AuthLayout-CAE1pX9s.js → AuthLayout-AvLlcLjS.js} +2 -2
  52. package/dist/auth/{AuthLayout-CAE1pX9s.js.map → AuthLayout-AvLlcLjS.js.map} +1 -1
  53. package/dist/auth/Login-BA1E8IZl.js +275 -0
  54. package/dist/auth/Login-BA1E8IZl.js.map +1 -0
  55. package/dist/{admin/Profile-B-c9pCPf.js → auth/Profile-YcWdeuFz.js} +31 -27
  56. package/dist/auth/Profile-YcWdeuFz.js.map +1 -0
  57. package/dist/auth/{Register-6hi_cpfF.js → Register-CPhEO5MG.js} +198 -142
  58. package/dist/auth/Register-CPhEO5MG.js.map +1 -0
  59. package/dist/{demo/ResetPassword-DWN0lzr5.js → auth/ResetPassword-DCtGcneA.js} +7 -7
  60. package/dist/auth/ResetPassword-DCtGcneA.js.map +1 -0
  61. package/dist/{demo/VerifyEmail-DZWL72K4.js → auth/VerifyEmail-DkH7NBfn.js} +23 -8
  62. package/dist/auth/VerifyEmail-DkH7NBfn.js.map +1 -0
  63. package/dist/auth/{core-niW0sFLv.js → core-D5jIAVF2.js} +1385 -329
  64. package/dist/auth/core-D5jIAVF2.js.map +1 -0
  65. package/dist/auth/index.d.ts +105 -49
  66. package/dist/auth/index.d.ts.map +1 -1
  67. package/dist/auth/index.js +29 -26
  68. package/dist/auth/index.js.map +1 -1
  69. package/dist/core/index.d.ts +210 -74
  70. package/dist/core/index.d.ts.map +1 -1
  71. package/dist/core/index.js +2247 -834
  72. package/dist/core/index.js.map +1 -1
  73. package/dist/demo/{AuthLayout-jLa0aKsI.js → AuthLayout-Brri4A-L.js} +2 -2
  74. package/dist/demo/{AuthLayout-jLa0aKsI.js.map → AuthLayout-Brri4A-L.js.map} +1 -1
  75. package/dist/demo/DemoButton-wiCxZZ_L.js +182 -0
  76. package/dist/demo/DemoButton-wiCxZZ_L.js.map +1 -0
  77. package/dist/demo/DemoControlSelect-D7ILObVg.js +305 -0
  78. package/dist/demo/DemoControlSelect-D7ILObVg.js.map +1 -0
  79. package/dist/demo/DemoDataTable-DZ5Y8pFX.js +362 -0
  80. package/dist/demo/DemoDataTable-DZ5Y8pFX.js.map +1 -0
  81. package/dist/demo/{DemoDialog-4ItHLf9t.js → DemoDialog-CUWdLHim.js} +2 -2
  82. package/dist/demo/{DemoDialog-4ItHLf9t.js.map → DemoDialog-CUWdLHim.js.map} +1 -1
  83. package/dist/demo/{DemoFlex-EtVq8QfX.js → DemoFlex-a8OhMMvq.js} +3 -3
  84. package/dist/demo/{DemoFlex-EtVq8QfX.js.map → DemoFlex-a8OhMMvq.js.map} +1 -1
  85. package/dist/demo/{DemoHeading-BS-vGfkI.js → DemoHeading-C13OVDfS.js} +3 -3
  86. package/dist/demo/{DemoHeading-BS-vGfkI.js.map → DemoHeading-C13OVDfS.js.map} +1 -1
  87. package/dist/demo/{DemoHome-Clbn8AmS.js → DemoHome-D_De3UiT.js} +2 -2
  88. package/dist/demo/{DemoHome-Clbn8AmS.js.map → DemoHome-D_De3UiT.js.map} +1 -1
  89. package/dist/demo/{DemoJsonViewer-DkIX_ky2.js → DemoJsonViewer-B50s9aGM.js} +3 -3
  90. package/dist/demo/{DemoJsonViewer-DkIX_ky2.js.map → DemoJsonViewer-B50s9aGM.js.map} +1 -1
  91. package/dist/demo/{DemoLayout-C56xb5EE.js → DemoLayout-CHU8WTwO.js} +14 -5
  92. package/dist/demo/DemoLayout-CHU8WTwO.js.map +1 -0
  93. package/dist/demo/{DemoLogin-BZwpicOS.js → DemoLogin-BBlrWpml.js} +49 -32
  94. package/dist/demo/DemoLogin-BBlrWpml.js.map +1 -0
  95. package/dist/demo/{DemoRegister-C7_qc4MJ.js → DemoRegister-BuNE3_-f.js} +49 -50
  96. package/dist/demo/DemoRegister-BuNE3_-f.js.map +1 -0
  97. package/dist/demo/{DemoResetPassword-BI1Ct4Dw.js → DemoResetPassword-D_IjjjOJ.js} +12 -16
  98. package/dist/demo/DemoResetPassword-D_IjjjOJ.js.map +1 -0
  99. package/dist/demo/{DemoSidebar-CcBo4ltC.js → DemoSidebar-Giy2HRBD.js} +3 -3
  100. package/dist/demo/{DemoSidebar-CcBo4ltC.js.map → DemoSidebar-Giy2HRBD.js.map} +1 -1
  101. package/dist/demo/{DemoText-CzXuUn3g.js → DemoText-ubcw-vog.js} +3 -3
  102. package/dist/demo/{DemoText-CzXuUn3g.js.map → DemoText-ubcw-vog.js.map} +1 -1
  103. package/dist/demo/{DemoToast-BgHDhWrX.js → DemoToast-9die_dYT.js} +2 -2
  104. package/dist/demo/{DemoToast-BgHDhWrX.js.map → DemoToast-9die_dYT.js.map} +1 -1
  105. package/dist/demo/{DemoTypeForm-DDzWoMSV.js → DemoTypeForm-D_d6OVKL.js} +8 -4
  106. package/dist/demo/DemoTypeForm-D_d6OVKL.js.map +1 -0
  107. package/dist/demo/DemoVerifyEmail-B43KlF4F.js +34 -0
  108. package/dist/demo/DemoVerifyEmail-B43KlF4F.js.map +1 -0
  109. package/dist/demo/Login-C12N4oGs.js +275 -0
  110. package/dist/demo/Login-C12N4oGs.js.map +1 -0
  111. package/dist/demo/{Profile-CWqti7FB.js → Profile-DS5q4vOh.js} +31 -27
  112. package/dist/demo/Profile-DS5q4vOh.js.map +1 -0
  113. package/dist/demo/{Register-a70LPgs2.js → Register-B4hLBeEv.js} +198 -142
  114. package/dist/demo/Register-B4hLBeEv.js.map +1 -0
  115. package/dist/{auth/ResetPassword-CqfTk1FI.js → demo/ResetPassword-D8g9ha1N.js} +7 -7
  116. package/dist/demo/ResetPassword-D8g9ha1N.js.map +1 -0
  117. package/dist/demo/{Showcase-Dq3MISpd.js → Showcase-D6Fxt4X4.js} +64 -65
  118. package/dist/demo/Showcase-D6Fxt4X4.js.map +1 -0
  119. package/dist/{auth/VerifyEmail-nWiSTMjF.js → demo/VerifyEmail-BjDo0cZA.js} +23 -8
  120. package/dist/demo/VerifyEmail-BjDo0cZA.js.map +1 -0
  121. package/dist/demo/{auth-d6n3xbug.js → auth-ByVTreDl.js} +8 -8
  122. package/dist/demo/{auth-d6n3xbug.js.map → auth-ByVTreDl.js.map} +1 -1
  123. package/dist/demo/{core-RCUw1Q-a.js → core-DFgB3yU4.js} +2182 -756
  124. package/dist/demo/core-DFgB3yU4.js.map +1 -0
  125. package/dist/demo/index.d.ts +1 -0
  126. package/dist/demo/index.d.ts.map +1 -1
  127. package/dist/demo/index.js +24 -18
  128. package/dist/demo/index.js.map +1 -1
  129. package/package.json +7 -7
  130. package/src/admin/{AdminRouter.ts → AdminRouter.tsx} +150 -18
  131. package/src/admin/components/AdminDashboard.tsx +52 -0
  132. package/src/admin/components/AdminLayout.tsx +32 -40
  133. package/src/admin/components/audits/AdminAudits.tsx +22 -16
  134. package/src/admin/components/files/AdminFiles.tsx +1 -6
  135. package/src/admin/components/jobs/AdminJobExecutions.tsx +33 -39
  136. package/src/admin/components/jobs/AdminJobRegistry.tsx +9 -18
  137. package/src/admin/components/keys/AdminApiKeys.tsx +23 -41
  138. package/src/admin/components/notifications/AdminNotifications.tsx +519 -0
  139. package/src/admin/components/parameters/ParameterDetails.tsx +12 -270
  140. package/src/admin/components/parameters/ParameterDetailsConfigForm.tsx +238 -0
  141. package/src/admin/components/parameters/ParameterDetailsLoading.tsx +24 -0
  142. package/src/admin/components/parameters/ParameterHistory.tsx +10 -11
  143. package/src/admin/components/parameters/ParameterTree.tsx +28 -184
  144. package/src/admin/components/parameters/ParameterTreeNode.tsx +151 -0
  145. package/src/admin/components/sessions/AdminSessions.tsx +71 -71
  146. package/src/admin/components/shared/AdminResourceHeader.tsx +2 -25
  147. package/src/admin/components/shared/AdminResourceHeaderMenuItem.tsx +37 -0
  148. package/src/admin/components/shared/AdminResourceTabs.tsx +2 -26
  149. package/src/admin/components/shared/AdminResourceTabsItem.tsx +36 -0
  150. package/src/admin/components/users/AdminUserSessions.tsx +33 -31
  151. package/src/admin/components/users/AdminUsers.tsx +184 -72
  152. package/src/admin/index.ts +2 -2
  153. package/src/admin/primitives/$uiAdmin.ts +1 -1
  154. package/src/auth/components/Login.tsx +188 -121
  155. package/src/auth/components/Profile.tsx +1 -22
  156. package/src/auth/components/ProfileField.tsx +39 -0
  157. package/src/auth/components/Register.tsx +215 -158
  158. package/src/auth/components/ResetPassword.tsx +7 -11
  159. package/src/auth/components/VerifyEmail.tsx +35 -10
  160. package/src/auth/components/buttons/UserButton.tsx +20 -24
  161. package/src/auth/index.ts +1 -0
  162. package/src/core/atoms/alephaSidebarAtom.ts +1 -1
  163. package/src/core/atoms/alephaThemeListAtom.ts +14 -1
  164. package/src/core/atoms/alephaThemeOverridesAtom.ts +17 -0
  165. package/src/core/atoms/themes/editorial.ts +184 -0
  166. package/src/core/atoms/themes/monochrome.ts +197 -0
  167. package/src/core/atoms/themes/rosePine.ts +208 -0
  168. package/src/core/atoms/themes/softBrutalism.ts +221 -0
  169. package/src/core/atoms/themes/terminal.ts +186 -0
  170. package/src/core/components/Flex.tsx +101 -1
  171. package/src/core/components/Text.tsx +1 -1
  172. package/src/core/components/buttons/ActionButton.tsx +109 -87
  173. package/src/core/components/buttons/DarkModeButton.tsx +3 -3
  174. package/src/core/components/buttons/LanguageButton.tsx +1 -1
  175. package/src/core/components/buttons/OmnibarButton.tsx +1 -2
  176. package/src/core/components/buttons/ThemeButton.tsx +40 -11
  177. package/src/core/components/buttons/ThemeExpertModal.tsx +184 -0
  178. package/src/core/components/buttons/ToggleSidebarButton.tsx +1 -2
  179. package/src/core/components/data/DetailDrawer.tsx +102 -96
  180. package/src/core/components/data/DetailList.tsx +2 -1
  181. package/src/core/components/layout/AppBar.tsx +10 -0
  182. package/src/core/components/layout/Breadcrumb.tsx +3 -6
  183. package/src/core/components/layout/DashboardShell.tsx +28 -11
  184. package/src/core/components/layout/Sidebar.tsx +18 -235
  185. package/src/core/components/layout/SidebarCollapsedItem.tsx +91 -0
  186. package/src/core/components/layout/SidebarItem.tsx +146 -0
  187. package/src/core/components/layout/index.ts +3 -1
  188. package/src/core/constants/ui.ts +5 -5
  189. package/src/core/form/components/Control.tsx +31 -29
  190. package/src/core/form/components/ControlArray.tsx +13 -39
  191. package/src/core/form/components/ControlDate.tsx +10 -21
  192. package/src/core/form/components/ControlNumber.tsx +4 -33
  193. package/src/core/form/components/ControlQueryBuilder.tsx +12 -175
  194. package/src/core/form/components/ControlQueryBuilderHelp.tsx +165 -0
  195. package/src/core/form/components/ControlSelect.browser.spec.tsx +343 -0
  196. package/src/core/form/components/ControlSelect.tsx +294 -92
  197. package/src/core/form/components/TypeForm.browser.spec.tsx +3 -3
  198. package/src/core/form/components/TypeForm.tsx +5 -2
  199. package/src/core/form/index.ts +8 -1
  200. package/src/core/form/utils/parseInput.ts +7 -3
  201. package/src/core/hooks/useTheme.ts +26 -3
  202. package/src/core/index.ts +9 -2
  203. package/src/core/interfaces/AlephaTheme.ts +2 -0
  204. package/src/core/json/components/JsonViewer.tsx +103 -319
  205. package/src/core/json/components/JsonViewerCopyButton.tsx +46 -0
  206. package/src/core/json/components/JsonViewerRowNode.tsx +120 -0
  207. package/src/core/json/components/JsonViewerShared.ts +76 -0
  208. package/src/core/providers/ThemeProvider.ts +108 -8
  209. package/src/core/services/DialogService.tsx +24 -3
  210. package/src/core/styles.css +33 -20
  211. package/src/core/table/components/ColumnPicker.tsx +3 -3
  212. package/src/core/table/components/DataTable.tsx +233 -143
  213. package/src/core/table/components/DataTableFilters.tsx +6 -16
  214. package/src/core/table/components/DataTablePagination.tsx +58 -29
  215. package/src/core/table/components/DataTableToolbar.tsx +16 -7
  216. package/src/core/table/components/FilterPicker.tsx +3 -3
  217. package/src/core/table/index.ts +1 -0
  218. package/src/core/table/interfaces/types.ts +42 -9
  219. package/src/core/utils/icons.tsx +2 -2
  220. package/src/demo/DemoRouter.ts +8 -1
  221. package/src/demo/components/DemoLayout.tsx +12 -2
  222. package/src/demo/components/auth/DemoLogin.tsx +35 -28
  223. package/src/demo/components/auth/DemoRegister.tsx +35 -49
  224. package/src/demo/components/auth/DemoResetPassword.tsx +5 -9
  225. package/src/demo/components/auth/DemoVerifyEmail.tsx +7 -6
  226. package/src/demo/components/core/DemoButton.tsx +123 -103
  227. package/src/demo/components/core/DemoControlSelect.tsx +325 -0
  228. package/src/demo/components/core/DemoDataTable.tsx +255 -241
  229. package/src/demo/components/core/DemoTypeForm.tsx +7 -2
  230. package/src/demo/components/shared/MacWindow.tsx +5 -11
  231. package/src/demo/components/shared/Showcase.tsx +28 -42
  232. package/dist/admin/AdminApiKeys-C-6_Q-lH.js.map +0 -1
  233. package/dist/admin/AdminAudits-Bgbf04hO.js.map +0 -1
  234. package/dist/admin/AdminFiles-B9a7G3cY.js.map +0 -1
  235. package/dist/admin/AdminJobExecutions-B9cek5dl.js.map +0 -1
  236. package/dist/admin/AdminJobRegistry-DFgV3oqx.js.map +0 -1
  237. package/dist/admin/AdminLayout-DHsvWxVB.js +0 -70
  238. package/dist/admin/AdminLayout-DHsvWxVB.js.map +0 -1
  239. package/dist/admin/AdminParameters-DHw9ATgl.js.map +0 -1
  240. package/dist/admin/AdminSessions-BhGJPI3z.js.map +0 -1
  241. package/dist/admin/AdminUserLayout-BdC4Te8m.js.map +0 -1
  242. package/dist/admin/AdminUserSessions-1uzcx02z.js.map +0 -1
  243. package/dist/admin/AdminUsers-C85c3eiQ.js +0 -121
  244. package/dist/admin/AdminUsers-C85c3eiQ.js.map +0 -1
  245. package/dist/admin/Login-BGheURrg.js +0 -219
  246. package/dist/admin/Login-BGheURrg.js.map +0 -1
  247. package/dist/admin/Profile-B-c9pCPf.js.map +0 -1
  248. package/dist/admin/Register-Cs10l8vX.js.map +0 -1
  249. package/dist/admin/ResetPassword-BwDdfkGH.js.map +0 -1
  250. package/dist/admin/VerifyEmail-DfXHAiQl.js.map +0 -1
  251. package/dist/admin/auth-Dr0Cf8I7.js +0 -319
  252. package/dist/admin/auth-Dr0Cf8I7.js.map +0 -1
  253. package/dist/admin/core-2xoLiT0o.js.map +0 -1
  254. package/dist/auth/Login-Denw_UGy.js +0 -219
  255. package/dist/auth/Login-Denw_UGy.js.map +0 -1
  256. package/dist/auth/Profile-BMX_Ar_s.js.map +0 -1
  257. package/dist/auth/Register-6hi_cpfF.js.map +0 -1
  258. package/dist/auth/ResetPassword-CqfTk1FI.js.map +0 -1
  259. package/dist/auth/VerifyEmail-nWiSTMjF.js.map +0 -1
  260. package/dist/auth/core-niW0sFLv.js.map +0 -1
  261. package/dist/demo/DemoButton-BmaWZVwf.js +0 -178
  262. package/dist/demo/DemoButton-BmaWZVwf.js.map +0 -1
  263. package/dist/demo/DemoDataTable-Z9xyV221.js +0 -362
  264. package/dist/demo/DemoDataTable-Z9xyV221.js.map +0 -1
  265. package/dist/demo/DemoLayout-C56xb5EE.js.map +0 -1
  266. package/dist/demo/DemoLogin-BZwpicOS.js.map +0 -1
  267. package/dist/demo/DemoRegister-C7_qc4MJ.js.map +0 -1
  268. package/dist/demo/DemoResetPassword-BI1Ct4Dw.js.map +0 -1
  269. package/dist/demo/DemoTypeForm-DDzWoMSV.js.map +0 -1
  270. package/dist/demo/DemoVerifyEmail-C_Irdnov.js +0 -30
  271. package/dist/demo/DemoVerifyEmail-C_Irdnov.js.map +0 -1
  272. package/dist/demo/Login-hSOU3jZc.js +0 -219
  273. package/dist/demo/Login-hSOU3jZc.js.map +0 -1
  274. package/dist/demo/Profile-CWqti7FB.js.map +0 -1
  275. package/dist/demo/Register-a70LPgs2.js.map +0 -1
  276. package/dist/demo/ResetPassword-DWN0lzr5.js.map +0 -1
  277. package/dist/demo/Showcase-Dq3MISpd.js.map +0 -1
  278. package/dist/demo/VerifyEmail-DZWL72K4.js.map +0 -1
  279. package/dist/demo/core-RCUw1Q-a.js.map +0 -1
  280. package/src/demo/styles.css +0 -0
@@ -0,0 +1,91 @@
1
+ import { IconSquareRounded } from "@tabler/icons-react";
2
+ import { useRouter } from "alepha/react/router";
3
+ import { ui } from "../../constants/ui.ts";
4
+ import { renderIcon } from "../../helpers/renderIcon.tsx";
5
+ import type {
6
+ ActionMenuConfig,
7
+ ActionMenuItem,
8
+ } from "../buttons/ActionButton.tsx";
9
+ import ActionButton from "../buttons/ActionButton.tsx";
10
+ import Flex from "../Flex.tsx";
11
+ import type { SidebarItemProps } from "./SidebarItem.tsx";
12
+
13
+ // ---------------------------------------------------------------------------------------------------------------------
14
+
15
+ export const SidebarCollapsedItem = (props: SidebarItemProps) => {
16
+ const router = useRouter();
17
+
18
+ const handleItemClick = () => {
19
+ props.onItemClick?.(props.item);
20
+ props.item.onClick?.();
21
+ };
22
+
23
+ const hasChildren = props.item.children && props.item.children.length > 0;
24
+
25
+ const menu: ActionMenuConfig | undefined = hasChildren
26
+ ? {
27
+ on: "hover",
28
+ position: "right",
29
+ menuProps: {
30
+ arrowPosition: "center",
31
+ arrowSize: 10,
32
+ withArrow: true,
33
+ },
34
+ items: [
35
+ {
36
+ type: "label",
37
+ label: props.item.label,
38
+ },
39
+ ...props.item
40
+ .children!.filter((child) => !child.can || child.can())
41
+ .map(
42
+ (child): ActionMenuItem => ({
43
+ label: child.label as string,
44
+ icon: renderIcon(child.icon, ui.sizes.icon.sm),
45
+ href: child.href,
46
+ active: child.href
47
+ ? router.isActive(child.href, {
48
+ startWith: child.activeStartsWith,
49
+ })
50
+ : undefined,
51
+ }),
52
+ ),
53
+ ],
54
+ }
55
+ : undefined;
56
+
57
+ return (
58
+ <Flex w={"100%"} justify="center" pos={"relative"}>
59
+ <ActionButton
60
+ size={
61
+ props.item.theme?.size ??
62
+ props.theme.button?.size ??
63
+ (props.level === 0 ? "sm" : "xs")
64
+ }
65
+ bd={0}
66
+ variant={"default"}
67
+ propsActive={{
68
+ variant: "outline",
69
+ }}
70
+ tooltip={
71
+ hasChildren
72
+ ? undefined
73
+ : {
74
+ label: props.item.label,
75
+ position: "right",
76
+ }
77
+ }
78
+ onClick={hasChildren ? undefined : handleItemClick}
79
+ icon={
80
+ renderIcon(props.item.icon, ui.sizes.icon.sm) ?? (
81
+ <IconSquareRounded size={ui.sizes.icon.sm} />
82
+ )
83
+ }
84
+ href={hasChildren ? undefined : (props.item.href as any)}
85
+ target={hasChildren ? undefined : props.item.target}
86
+ menu={menu}
87
+ {...props.item.actionProps}
88
+ />
89
+ </Flex>
90
+ );
91
+ };
@@ -0,0 +1,146 @@
1
+ import { IconChevronDown, IconChevronRight } from "@tabler/icons-react";
2
+ import { useEvents } from "alepha/react";
3
+ import { useRouter } from "alepha/react/router";
4
+ import { useCallback, useState } from "react";
5
+ import { ui } from "../../constants/ui.ts";
6
+ import { renderIcon } from "../../helpers/renderIcon.tsx";
7
+ import ActionButton from "../buttons/ActionButton.tsx";
8
+ import Flex from "../Flex.tsx";
9
+ import type { SidebarMenuItem, SidebarTheme } from "./Sidebar.tsx";
10
+
11
+ // ---------------------------------------------------------------------------------------------------------------------
12
+
13
+ export interface SidebarItemProps {
14
+ item: SidebarMenuItem;
15
+ level: number;
16
+ onItemClick?: (item: SidebarMenuItem) => void;
17
+ theme: SidebarTheme;
18
+ }
19
+
20
+ // ---------------------------------------------------------------------------------------------------------------------
21
+
22
+ export const SidebarItem = (props: SidebarItemProps) => {
23
+ const maxLevel = 2; // 0, 1, 2 = 3 levels total
24
+
25
+ const router = useRouter();
26
+ const isActive = useCallback((item: SidebarMenuItem): boolean => {
27
+ if (!item.children) return false;
28
+ for (const child of item.children) {
29
+ if (child.href) {
30
+ if (router.isActive(child.href)) {
31
+ return true;
32
+ }
33
+ }
34
+ if (isActive(child)) {
35
+ return true;
36
+ }
37
+ }
38
+ return false;
39
+ }, []);
40
+
41
+ const [isOpen, setIsOpen] = useState<boolean>(isActive(props.item));
42
+
43
+ useEvents(
44
+ {
45
+ "react:transition:end": () => {
46
+ // recalculate open state on transition end to ensure correct state after navigation
47
+ if (isActive(props.item)) {
48
+ setIsOpen(true);
49
+ }
50
+ },
51
+ },
52
+ [],
53
+ );
54
+
55
+ if (props.level > maxLevel) return null;
56
+
57
+ const handleItemClick = (e: MouseEvent) => {
58
+ if (!props.item.target) {
59
+ e.preventDefault();
60
+ }
61
+ if (props.item.children && props.item.children.length > 0) {
62
+ setIsOpen(!isOpen);
63
+ } else {
64
+ props.onItemClick?.(props.item);
65
+ props.item.onClick?.();
66
+ }
67
+ };
68
+
69
+ return (
70
+ <Flex direction={"column"} ps={props.level === 0 ? 0 : 32} pos={"relative"}>
71
+ <ActionButton
72
+ w={"100%"}
73
+ justify="space-between"
74
+ href={props.item.href}
75
+ target={props.item.target}
76
+ size={
77
+ props.item.theme?.size ??
78
+ props.theme.button?.size ??
79
+ (props.level === 0 ? "sm" : "xs")
80
+ }
81
+ bd={0}
82
+ fw={"normal"}
83
+ variant={"default"}
84
+ propsActive={{
85
+ variant: "outline",
86
+ }}
87
+ radius={props.item.theme?.radius ?? props.theme.button?.radius ?? "md"}
88
+ onClick={handleItemClick}
89
+ leftSection={
90
+ <Flex w={"100%"} align="center" gap={"sm"}>
91
+ {renderIcon(props.item.icon, ui.sizes.icon.sm)}
92
+ <Flex direction={"column"}>
93
+ <Flex>{props.item.label}</Flex>
94
+ </Flex>
95
+ </Flex>
96
+ }
97
+ rightSection={
98
+ props.item.children ? (
99
+ <Flex>
100
+ {isOpen ? (
101
+ <IconChevronDown size={14} />
102
+ ) : (
103
+ <IconChevronRight size={14} />
104
+ )}
105
+ </Flex>
106
+ ) : (
107
+ props.item.rightSection
108
+ )
109
+ }
110
+ {...props.item.actionProps}
111
+ />
112
+
113
+ {props.item.children && isOpen && (
114
+ <Flex
115
+ direction={"column"}
116
+ data-parent-level={props.level}
117
+ gap={2}
118
+ py={2}
119
+ >
120
+ <Flex
121
+ style={{
122
+ position: "absolute",
123
+ width: 1,
124
+ background:
125
+ "linear-gradient(to bottom, transparent, var(--mantine-color-default-border), transparent)",
126
+ top: 48,
127
+ left: 20 + 32 * props.level,
128
+ bottom: 16,
129
+ }}
130
+ />
131
+ {props.item.children
132
+ .filter((child) => !child.can || child.can())
133
+ .map((child, index) => (
134
+ <SidebarItem
135
+ key={index}
136
+ item={child}
137
+ level={props.level + 1}
138
+ onItemClick={props.onItemClick}
139
+ theme={props.theme}
140
+ />
141
+ ))}
142
+ </Flex>
143
+ )}
144
+ </Flex>
145
+ );
146
+ };
@@ -35,7 +35,6 @@ export type {
35
35
  SidebarButtonTheme,
36
36
  SidebarDivider,
37
37
  SidebarElement,
38
- SidebarItemProps,
39
38
  SidebarMenuItem,
40
39
  SidebarNode,
41
40
  SidebarProps,
@@ -45,6 +44,9 @@ export type {
45
44
  SidebarTheme,
46
45
  } from "./Sidebar.tsx";
47
46
  export { Sidebar } from "./Sidebar.tsx";
47
+ export { SidebarCollapsedItem } from "./SidebarCollapsedItem.tsx";
48
+ export type { SidebarItemProps } from "./SidebarItem.tsx";
49
+ export { SidebarItem } from "./SidebarItem.tsx";
48
50
 
49
51
  // ---------------------------------------------------------------------------------------------------------------------
50
52
 
@@ -1,17 +1,17 @@
1
1
  export const ui = {
2
2
  colors: {
3
3
  transparent: "transparent",
4
- background: "var(--alepha-background)",
4
+ background: "var(--alepha-ground)",
5
5
  surface: "var(--alepha-surface)",
6
6
  elevated: "var(--alepha-elevated)",
7
7
  border: "var(--alepha-border)",
8
8
  },
9
9
  sizes: {
10
10
  icon: {
11
- xs: 14,
12
- sm: 16,
13
- md: 20,
14
- lg: 24,
11
+ xs: 16,
12
+ sm: 20,
13
+ md: 24,
14
+ lg: 28,
15
15
  xl: 32,
16
16
  },
17
17
  },
@@ -19,7 +19,7 @@ import type {
19
19
  DateTimePickerProps,
20
20
  TimeInputProps,
21
21
  } from "@mantine/dates";
22
- import { useFormState } from "alepha/react/form";
22
+ import { useFieldValue, useFormState } from "alepha/react/form";
23
23
  import type { ComponentType } from "react";
24
24
  import { type GenericControlProps, parseInput } from "../utils/parseInput.ts";
25
25
  import ControlArray, { type ControlArrayProps } from "./ControlArray.tsx";
@@ -76,6 +76,7 @@ export interface ControlProps extends GenericControlProps {
76
76
  */
77
77
  const Control = (_props: ControlProps) => {
78
78
  const form = useFormState(_props.input, ["error"]);
79
+ const [value, setValue] = useFieldValue(_props.input);
79
80
 
80
81
  // Early return if input is not properly initialized
81
82
  if (!_props.input?.props) {
@@ -93,12 +94,11 @@ const Control = (_props: ControlProps) => {
93
94
  if (props.query) {
94
95
  return (
95
96
  <ControlQueryBuilder
96
- {...props.input.props}
97
97
  {...inputProps}
98
98
  schema={props.query}
99
- value={props.input.props.value}
100
- onChange={(value) => {
101
- props.input.set(value);
99
+ value={value}
100
+ onChange={(val) => {
101
+ setValue(val);
102
102
  }}
103
103
  />
104
104
  );
@@ -112,9 +112,9 @@ const Control = (_props: ControlProps) => {
112
112
  <Input.Wrapper {...inputProps}>
113
113
  <Flex flex={1} mt={"calc(var(--mantine-spacing-xs) / 2)"}>
114
114
  <Custom
115
- defaultValue={props.input.props.defaultValue}
116
- onChange={(value) => {
117
- props.input.set(value);
115
+ value={value}
116
+ onChange={(val) => {
117
+ setValue(val);
118
118
  }}
119
119
  />
120
120
  </Flex>
@@ -137,7 +137,7 @@ const Control = (_props: ControlProps) => {
137
137
  return (
138
138
  <ControlObject
139
139
  input={props.input}
140
- title={props.title}
140
+ label={props.label}
141
141
  description={props.description}
142
142
  {...controlObjectProps}
143
143
  />
@@ -165,7 +165,7 @@ const Control = (_props: ControlProps) => {
165
165
  return (
166
166
  <ControlArray
167
167
  input={props.input}
168
- title={props.title}
168
+ label={props.label}
169
169
  description={props.description}
170
170
  {...controlArrayProps}
171
171
  />
@@ -176,7 +176,8 @@ const Control = (_props: ControlProps) => {
176
176
  //region <NumberInput/>
177
177
  if (
178
178
  props.number ||
179
- (props.input.schema &&
179
+ (!props.select &&
180
+ props.input.schema &&
180
181
  "type" in props.input.schema &&
181
182
  (props.input.schema.type === "number" ||
182
183
  props.input.schema.type === "integer"))
@@ -190,7 +191,7 @@ const Control = (_props: ControlProps) => {
190
191
  <ControlNumber
191
192
  size={props.size}
192
193
  input={props.input}
193
- title={props.title}
194
+ label={props.label}
194
195
  description={props.description}
195
196
  icon={icon}
196
197
  {...controlNumberProps}
@@ -208,9 +209,7 @@ const Control = (_props: ControlProps) => {
208
209
  size={props.size}
209
210
  id={id}
210
211
  leftSection={icon}
211
- onChange={(file) => {
212
- props.input.set(file);
213
- }}
212
+ onChange={(file) => setValue(file)}
214
213
  {...fileInputProps}
215
214
  />
216
215
  );
@@ -226,7 +225,8 @@ const Control = (_props: ControlProps) => {
226
225
  size={props.size}
227
226
  id={id}
228
227
  leftSection={icon}
229
- {...props.input.props}
228
+ value={value ?? ""}
229
+ onChange={(val) => setValue(val)}
230
230
  {...colorInputProps}
231
231
  />
232
232
  );
@@ -244,13 +244,13 @@ const Control = (_props: ControlProps) => {
244
244
  if (isEnum || (isArray && !isArrayOfObjects) || props.select) {
245
245
  const opts = typeof props.select === "object" ? props.select : {};
246
246
  if (props.segmented) {
247
- opts.segmented ??= {};
247
+ opts.segmentedProps ??= {};
248
248
  }
249
249
  return (
250
250
  <ControlSelect
251
251
  size={props.size}
252
252
  input={props.input}
253
- title={props.title}
253
+ label={props.label}
254
254
  description={props.description}
255
255
  icon={icon}
256
256
  {...opts}
@@ -273,9 +273,9 @@ const Control = (_props: ControlProps) => {
273
273
  size={props.size}
274
274
  id={id}
275
275
  color={"blue"}
276
- defaultChecked={props.input.props.defaultValue}
276
+ checked={Boolean(value)}
277
277
  onChange={(event) => {
278
- props.input.set(event.currentTarget.checked);
278
+ setValue(event.currentTarget.checked);
279
279
  }}
280
280
  {...switchProps}
281
281
  />
@@ -284,7 +284,7 @@ const Control = (_props: ControlProps) => {
284
284
 
285
285
  const opts: ControlSelectProps = {
286
286
  input: props.input,
287
- select: {
287
+ selectProps: {
288
288
  data: [
289
289
  { value: "true", label: "Yes" },
290
290
  { value: "false", label: "No" },
@@ -295,7 +295,7 @@ const Control = (_props: ControlProps) => {
295
295
  return (
296
296
  <ControlSelect
297
297
  size={props.size}
298
- title={props.title}
298
+ label={props.label}
299
299
  description={props.description}
300
300
  icon={icon}
301
301
  {...opts}
@@ -314,7 +314,8 @@ const Control = (_props: ControlProps) => {
314
314
  size={props.size}
315
315
  id={id}
316
316
  leftSection={icon}
317
- {...props.input.props}
317
+ value={value ?? ""}
318
+ onChange={(ev) => setValue(ev.target.value)}
318
319
  {...passwordInputProps}
319
320
  />
320
321
  );
@@ -330,7 +331,8 @@ const Control = (_props: ControlProps) => {
330
331
  size={props.size}
331
332
  id={id}
332
333
  leftSection={icon}
333
- {...props.input.props}
334
+ value={value ?? ""}
335
+ onChange={(ev) => setValue(ev.target.value)}
334
336
  {...textAreaProps}
335
337
  />
336
338
  );
@@ -351,7 +353,7 @@ const Control = (_props: ControlProps) => {
351
353
  <ControlDate
352
354
  size={props.size}
353
355
  input={props.input}
354
- title={props.title}
356
+ label={props.label}
355
357
  description={props.description}
356
358
  icon={icon}
357
359
  date={props.date}
@@ -377,7 +379,7 @@ const Control = (_props: ControlProps) => {
377
379
  case "phone":
378
380
  return "tel";
379
381
  default:
380
- return undefined;
382
+ return props.input.props.type ?? "text";
381
383
  }
382
384
  };
383
385
 
@@ -388,9 +390,9 @@ const Control = (_props: ControlProps) => {
388
390
  id={id}
389
391
  leftSection={icon}
390
392
  type={getInputType()}
391
- {...props.input.props}
393
+ value={value ?? ""}
394
+ onChange={(ev) => setValue(ev.target.value)}
392
395
  {...textInputProps}
393
- inputWrapperOrder={["label", "input", "description", "error"]}
394
396
  />
395
397
  );
396
398
  //endregion
@@ -399,6 +401,6 @@ const Control = (_props: ControlProps) => {
399
401
  export default Control;
400
402
 
401
403
  export type CustomControlProps = {
402
- defaultValue: any;
404
+ value: any;
403
405
  onChange: (value: any) => void;
404
406
  };
@@ -88,11 +88,11 @@ const useArrayItems = (
88
88
  const alepha = useAlepha();
89
89
  const keyCounter = useRef(0);
90
90
 
91
- // Initialize from defaultValue
91
+ // Initialize from initialValue
92
92
  const [items, setItemsState] = useState<ArrayItem[]>(() => {
93
- const defaultValue = input?.props?.defaultValue;
94
- if (Array.isArray(defaultValue)) {
95
- return defaultValue.map((value) => ({
93
+ const initial = input?.initialValue;
94
+ if (Array.isArray(initial)) {
95
+ return initial.map((value) => ({
96
96
  key: keyCounter.current++,
97
97
  value,
98
98
  }));
@@ -126,46 +126,20 @@ const useArrayItems = (
126
126
  });
127
127
  }, []);
128
128
 
129
- // Listen for form changes and reset events
129
+ // Listen for form changes
130
130
  useEffect(() => {
131
131
  if (!input?.form) return;
132
132
 
133
133
  const formId = input.form.id;
134
134
  const fieldPath = input.path;
135
135
 
136
- const listeners = [
137
- // Handle form reset
138
- alepha.events.on("form:reset", (event) => {
139
- if (event.id === formId) {
140
- const defaultValue = input.props?.defaultValue;
141
- keyCounter.current = 0;
142
- if (Array.isArray(defaultValue)) {
143
- setItemsState(
144
- defaultValue.map((value) => ({
145
- key: keyCounter.current++,
146
- value,
147
- })),
148
- );
149
- } else {
150
- setItemsState([]);
151
- }
152
- }
153
- }),
154
-
155
- // Handle external value changes (e.g., programmatic updates)
156
- alepha.events.on("form:change", (event) => {
157
- if (event.id === formId && event.path === fieldPath) {
158
- // Value was changed externally, sync our state
159
- syncFromFormValue(event.value);
160
- }
161
- }),
162
- ];
163
-
164
- return () => {
165
- for (const unsub of listeners) {
166
- unsub();
136
+ const unsub = alepha.events.on("form:change", (event) => {
137
+ if (event.id === formId && event.path === fieldPath) {
138
+ syncFromFormValue(event.value);
167
139
  }
168
- };
140
+ });
141
+
142
+ return unsub;
169
143
  }, [alepha, input, syncFromFormValue]);
170
144
 
171
145
  // Update form when items change
@@ -200,10 +174,10 @@ const createArrayItemInput = (
200
174
  path: `${parentInput.path}/${index}`,
201
175
  required: false,
202
176
  form: parentInput.form,
177
+ initialValue: value,
203
178
  props: {
204
179
  id: `${parentInput.props.id}-${index}`,
205
180
  name: `${parentInput.props.name}[${index}]`,
206
- defaultValue: value,
207
181
  },
208
182
  set: onValueChange,
209
183
  };
@@ -228,10 +202,10 @@ const createArrayItemFieldInput = (
228
202
  path: `${parentInput.path}/${index}/${fieldName}`,
229
203
  required: itemSchema.required?.includes(fieldName) ?? false,
230
204
  form: parentInput.form,
205
+ initialValue: itemValue?.[fieldName],
231
206
  props: {
232
207
  id: `${parentInput.props.id}-${index}-${fieldName}`,
233
208
  name: `${parentInput.props.name}[${index}].${fieldName}`,
234
- defaultValue: itemValue?.[fieldName],
235
209
  },
236
210
  set: (value: any) => onFieldChange(fieldName, value),
237
211
  };
@@ -6,7 +6,7 @@ import {
6
6
  TimeInput,
7
7
  type TimeInputProps,
8
8
  } from "@mantine/dates";
9
- import { useFormState } from "alepha/react/form";
9
+ import { useFieldValue, useFormState } from "alepha/react/form";
10
10
  import { type GenericControlProps, parseInput } from "../utils/parseInput.ts";
11
11
 
12
12
  export interface ControlDateProps extends GenericControlProps {
@@ -27,6 +27,7 @@ export interface ControlDateProps extends GenericControlProps {
27
27
  */
28
28
  const ControlDate = (props: ControlDateProps) => {
29
29
  const form = useFormState(props.input);
30
+ const [value, setValue] = useFieldValue(props.input);
30
31
  const { inputProps, id, icon, format } = parseInput(props, form);
31
32
  if (!props.input?.props) {
32
33
  return null;
@@ -41,14 +42,10 @@ const ControlDate = (props: ControlDateProps) => {
41
42
  {...inputProps}
42
43
  id={id}
43
44
  leftSection={icon}
44
- defaultValue={
45
- props.input.props.defaultValue
46
- ? new Date(props.input.props.defaultValue)
47
- : undefined
45
+ value={value ? new Date(value) : null}
46
+ onChange={(val) =>
47
+ setValue(val ? new Date(val).toISOString() : undefined)
48
48
  }
49
- onChange={(value) => {
50
- props.input.set(value ? new Date(value).toISOString() : undefined);
51
- }}
52
49
  {...dateTimePickerProps}
53
50
  />
54
51
  );
@@ -63,16 +60,10 @@ const ControlDate = (props: ControlDateProps) => {
63
60
  {...inputProps}
64
61
  id={id}
65
62
  leftSection={icon}
66
- defaultValue={
67
- props.input.props.defaultValue
68
- ? new Date(props.input.props.defaultValue)
69
- : undefined
63
+ value={value ? new Date(value) : null}
64
+ onChange={(val) =>
65
+ setValue(val ? new Date(val).toISOString().slice(0, 10) : undefined)
70
66
  }
71
- onChange={(value) => {
72
- props.input.set(
73
- value ? new Date(value).toISOString().slice(0, 10) : undefined,
74
- );
75
- }}
76
67
  {...dateInputProps}
77
68
  />
78
69
  );
@@ -87,10 +78,8 @@ const ControlDate = (props: ControlDateProps) => {
87
78
  {...inputProps}
88
79
  id={id}
89
80
  leftSection={icon}
90
- defaultValue={props.input.props.defaultValue}
91
- onChange={(event) => {
92
- props.input.set(event.currentTarget.value);
93
- }}
81
+ value={value ?? ""}
82
+ onChange={(event) => setValue(event.currentTarget.value)}
94
83
  {...timeInputProps}
95
84
  />
96
85
  );