@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
package/src/core/index.ts CHANGED
@@ -5,6 +5,7 @@ import { AlephaReactI18n } from "alepha/react/i18n";
5
5
  import type { ComponentType, ReactNode } from "react";
6
6
  import { alephaSidebarAtom } from "./atoms/alephaSidebarAtom.ts";
7
7
  import { alephaThemeAtom } from "./atoms/alephaThemeAtom.ts";
8
+ import { alephaThemeOverridesAtom } from "./atoms/alephaThemeOverridesAtom.ts";
8
9
  import { ThemeProvider } from "./providers/ThemeProvider.ts";
9
10
  import { DialogService } from "./services/DialogService.tsx";
10
11
  import { ToastService } from "./services/ToastService.tsx";
@@ -15,6 +16,7 @@ import { UiRouter } from "./UiRouter.ts";
15
16
  export * from "./atoms/alephaSidebarAtom.ts";
16
17
  export * from "./atoms/alephaThemeAtom.ts";
17
18
  export * from "./atoms/alephaThemeListAtom.ts";
19
+ export * from "./atoms/alephaThemeOverridesAtom.ts";
18
20
  export * from "./atoms/themes/default.ts";
19
21
  export * from "./atoms/themes/midnight.ts";
20
22
  export type { AlephaMantineProviderProps } from "./components/AlephaMantineProvider.tsx";
@@ -91,7 +93,6 @@ export type {
91
93
  SidebarButtonTheme,
92
94
  SidebarDivider,
93
95
  SidebarElement,
94
- SidebarItemProps,
95
96
  SidebarMenuItem,
96
97
  SidebarNode,
97
98
  SidebarProps,
@@ -101,6 +102,9 @@ export type {
101
102
  SidebarTheme,
102
103
  } from "./components/layout/Sidebar.tsx";
103
104
  export { Sidebar } from "./components/layout/Sidebar.tsx";
105
+ export { SidebarCollapsedItem } from "./components/layout/SidebarCollapsedItem.tsx";
106
+ export type { SidebarItemProps } from "./components/layout/SidebarItem.tsx";
107
+ export { SidebarItem } from "./components/layout/SidebarItem.tsx";
104
108
  export type { TextProps } from "./components/Text.tsx";
105
109
  export { default as Text } from "./components/Text.tsx";
106
110
  export * from "./constants/ui.ts";
@@ -109,7 +113,7 @@ export * from "./form/index.ts";
109
113
  export * from "./helpers/isComponentType.ts";
110
114
  export * from "./helpers/renderIcon.tsx";
111
115
  export { useDialog } from "./hooks/useDialog.ts";
112
- export { useTheme } from "./hooks/useTheme.ts";
116
+ export { type ThemeExpert, useTheme } from "./hooks/useTheme.ts";
113
117
  export { useToast } from "./hooks/useToast.ts";
114
118
  export * from "./interfaces/AlephaIntent.ts";
115
119
  // JSON
@@ -140,6 +144,9 @@ declare module "alepha" {
140
144
  interface State {
141
145
  [alephaSidebarAtom.key]?: Static<typeof alephaSidebarAtom.schema>;
142
146
  [alephaThemeAtom.key]?: Static<typeof alephaThemeAtom.schema>;
147
+ [alephaThemeOverridesAtom.key]?: Static<
148
+ typeof alephaThemeOverridesAtom.schema
149
+ >;
143
150
  }
144
151
  }
145
152
 
@@ -1,7 +1,9 @@
1
1
  import type { MantineThemeOverride } from "@mantine/core";
2
+ import type { SimpleHead } from "alepha/react/head";
2
3
 
3
4
  export type AlephaTheme = MantineThemeOverride & {
4
5
  name: string;
5
6
  description: string;
6
7
  defaultColorScheme?: "light" | "dark"; // or "system"
8
+ head?: Pick<SimpleHead, "link" | "meta" | "script">;
7
9
  };
@@ -1,31 +1,24 @@
1
1
  import {
2
- ActionIcon,
3
- Flex,
4
2
  getTreeExpandedState,
5
3
  type MantineSize,
6
4
  Text,
7
5
  Tree,
8
6
  useTree,
9
7
  } from "@mantine/core";
8
+ import { type ReactNode, useCallback, useMemo } from "react";
9
+ import { JsonViewerRowNode } from "./JsonViewerRowNode.tsx";
10
10
  import {
11
- IconCheck,
12
- IconChevronDown,
13
- IconChevronRight,
14
- IconCopy,
15
- } from "@tabler/icons-react";
16
- import {
17
- type CSSProperties,
18
- type ReactNode,
19
- useCallback,
20
- useMemo,
21
- useState,
22
- } from "react";
11
+ getValueType,
12
+ type JsonTreeNode,
13
+ SIZE_CONFIG,
14
+ STYLES,
15
+ } from "./JsonViewerShared.ts";
23
16
 
24
17
  // =============================================================================
25
- // TYPES
18
+ // PROPS
26
19
  // =============================================================================
27
20
 
28
- interface JsonViewerProps {
21
+ export interface JsonViewerProps {
29
22
  data: any;
30
23
  /**
31
24
  * Depth level to expand by default (0 = collapsed, Infinity = all expanded)
@@ -57,312 +50,21 @@ interface JsonViewerProps {
57
50
  ) => string | number | undefined;
58
51
  }
59
52
 
60
- interface JsonTreeNode {
61
- value: string;
62
- label: string;
63
- children?: JsonTreeNode[];
64
- // Custom properties
65
- nodeValue: any;
66
- nodeKey: string | undefined;
67
- path: string[];
68
- isArrayItem: boolean;
69
- isRoot?: boolean;
70
- }
71
-
72
- // =============================================================================
73
- // CONSTANTS
74
- // =============================================================================
75
-
76
- const SIZE_CONFIG: Record<MantineSize, { icon: number; levelOffset: number }> =
77
- {
78
- xs: { icon: 14, levelOffset: 16 },
79
- sm: { icon: 16, levelOffset: 20 },
80
- md: { icon: 18, levelOffset: 24 },
81
- lg: { icon: 20, levelOffset: 28 },
82
- xl: { icon: 22, levelOffset: 32 },
83
- };
84
-
85
- const STYLES = {
86
- root: {
87
- fontFamily: "var(--mantine-font-family-monospace)",
88
- } satisfies CSSProperties,
89
- chevron: {
90
- flexShrink: 0,
91
- color: "var(--mantine-color-dimmed)",
92
- } satisfies CSSProperties,
93
- key: {
94
- color: "var(--mantine-color-cyan-text)",
95
- fontWeight: 500,
96
- } satisfies CSSProperties,
97
- colon: {
98
- color: "var(--mantine-color-dimmed)",
99
- } satisfies CSSProperties,
100
- string: {
101
- color: "var(--mantine-color-teal-text)",
102
- } satisfies CSSProperties,
103
- number: {
104
- color: "var(--mantine-color-blue-text)",
105
- } satisfies CSSProperties,
106
- boolean: {
107
- color: "var(--mantine-color-violet-text)",
108
- } satisfies CSSProperties,
109
- null: {
110
- color: "var(--mantine-color-dimmed)",
111
- fontStyle: "italic",
112
- } satisfies CSSProperties,
113
- preview: {
114
- color: "var(--mantine-color-dimmed)",
115
- } satisfies CSSProperties,
116
- };
117
-
118
- // =============================================================================
119
- // HELPERS
120
- // =============================================================================
121
-
122
- const getValueType = (val: any): string => {
123
- if (val === null) return "null";
124
- if (val === undefined) return "undefined";
125
- if (Array.isArray(val)) return "array";
126
- return typeof val;
127
- };
128
-
129
- // Convert JSON to tree data structure
130
- function buildTreeNodes(
131
- data: any,
132
- path: string[] = [],
133
- key?: string,
134
- isArrayItem = false,
135
- maxDepth = 10,
136
- ): JsonTreeNode | null {
137
- const currentPath = key !== undefined ? [...path, key] : path;
138
- const nodeId = currentPath.length > 0 ? currentPath.join(".") : "root";
139
-
140
- if (currentPath.length > maxDepth) {
141
- return {
142
- value: nodeId,
143
- label: key ?? "",
144
- nodeValue: data,
145
- nodeKey: key,
146
- path: currentPath,
147
- isArrayItem,
148
- };
149
- }
150
-
151
- const type = getValueType(data);
152
-
153
- if (type === "object" || type === "array") {
154
- const entries =
155
- type === "array"
156
- ? (data as any[]).map((v, i) => [String(i), v] as const)
157
- : Object.entries(data);
158
-
159
- const children = entries
160
- .map(([k, v]) =>
161
- buildTreeNodes(v, currentPath, k, type === "array", maxDepth),
162
- )
163
- .filter((n): n is JsonTreeNode => n !== null);
164
-
165
- return {
166
- value: nodeId,
167
- label: key ?? "",
168
- nodeValue: data,
169
- nodeKey: key,
170
- path: currentPath,
171
- isArrayItem,
172
- children: children.length > 0 ? children : undefined,
173
- };
174
- }
175
-
176
- return {
177
- value: nodeId,
178
- label: key ?? "",
179
- nodeValue: data,
180
- nodeKey: key,
181
- path: currentPath,
182
- isArrayItem,
183
- };
184
- }
185
-
186
- // Get all expandable node IDs up to a certain depth
187
- function getExpandedIds(
188
- nodes: JsonTreeNode[],
189
- targetDepth: number,
190
- currentDepth = 0,
191
- ): string[] {
192
- if (currentDepth >= targetDepth) return [];
193
- const ids: string[] = [];
194
- for (const node of nodes) {
195
- if (node.children) {
196
- ids.push(node.value);
197
- ids.push(...getExpandedIds(node.children, targetDepth, currentDepth + 1));
198
- }
199
- }
200
- return ids;
201
- }
202
-
203
53
  // =============================================================================
204
- // COPY BUTTON COMPONENT
54
+ // COMPONENT
205
55
  // =============================================================================
206
56
 
207
- const CopyButton = ({
208
- value,
209
- iconSize,
210
- }: {
211
- value: string;
212
- iconSize: number;
213
- }) => {
214
- const [copied, setCopied] = useState(false);
215
-
216
- const handleCopy = useCallback(
217
- (e: React.MouseEvent) => {
218
- e.stopPropagation();
219
- navigator.clipboard.writeText(value);
220
- setCopied(true);
221
- setTimeout(() => setCopied(false), 1500);
222
- },
223
- [value],
224
- );
225
-
226
- return (
227
- <ActionIcon
228
- size={iconSize + 4}
229
- variant="transparent"
230
- c={copied ? "green" : "dimmed"}
231
- onClick={handleCopy}
232
- className="alepha-json-viewer-copy"
233
- >
234
- {copied ? <IconCheck size={iconSize} /> : <IconCopy size={iconSize} />}
235
- </ActionIcon>
236
- );
237
- };
238
-
239
- // =============================================================================
240
- // ROW NODE COMPONENT
241
- // =============================================================================
242
-
243
- interface RowNodeProps {
244
- node: JsonTreeNode;
245
- expanded: boolean;
246
- hasChildren: boolean;
247
- elementProps: any;
248
- size: MantineSize;
249
- config: { icon: number; levelOffset: number };
250
- showQuotes: boolean;
251
- showCopyButton: boolean;
252
- renderValue: (val: any, key: string | undefined, path: string[]) => ReactNode;
253
- }
57
+ export const JsonViewer = (props: JsonViewerProps) => {
58
+ const {
59
+ data,
60
+ defaultExpandedDepth = 2,
61
+ maxDepth = 10,
62
+ size = "sm",
63
+ showQuotes = false,
64
+ showCopyButton = true,
65
+ formatValue,
66
+ } = props;
254
67
 
255
- const RowNode = ({
256
- node,
257
- expanded,
258
- hasChildren,
259
- elementProps,
260
- size,
261
- config,
262
- showQuotes,
263
- showCopyButton,
264
- renderValue,
265
- }: RowNodeProps) => {
266
- const { nodeValue, nodeKey, path, isArrayItem, isRoot } = node;
267
- const type = getValueType(nodeValue);
268
- const isExpandable = type === "object" || type === "array";
269
-
270
- const getPreview = () => {
271
- if (!isExpandable) return null;
272
- const entries = type === "array" ? nodeValue : Object.keys(nodeValue);
273
- const count = entries.length;
274
- const label = type === "array" ? "item" : "key";
275
-
276
- // For root node or collapsed nodes, show the count
277
- if (!expanded) {
278
- return (
279
- <Text fs={"italic"} component="span" size={size} style={STYLES.preview}>
280
- {count === 0
281
- ? type === "array"
282
- ? "[]"
283
- : "{}"
284
- : type === "array"
285
- ? `[ ${count} ${count === 1 ? label : `${label}s`} ]`
286
- : `{ ${count} ${count === 1 ? label : `${label}s`} }`}
287
- </Text>
288
- );
289
- }
290
-
291
- return null;
292
- };
293
-
294
- const getCopyValue = () =>
295
- isExpandable ? JSON.stringify(nodeValue, null, 2) : String(nodeValue ?? "");
296
-
297
- return (
298
- <Flex
299
- gap={6}
300
- wrap="nowrap"
301
- {...elementProps}
302
- className={`alepha-json-viewer-row ${elementProps.className || ""}`}
303
- >
304
- {hasChildren ? (
305
- expanded ? (
306
- <IconChevronDown size={config.icon} style={STYLES.chevron} />
307
- ) : (
308
- <IconChevronRight size={config.icon} style={STYLES.chevron} />
309
- )
310
- ) : (
311
- <span style={{ width: config.icon, flexShrink: 0 }} />
312
- )}
313
-
314
- {nodeKey !== undefined && !isArrayItem && (
315
- <Text component="span" size={size}>
316
- <span style={STYLES.key}>
317
- {showQuotes ? `"${nodeKey}"` : nodeKey}
318
- </span>
319
- <span style={STYLES.colon}>:</span>
320
- </Text>
321
- )}
322
-
323
- {nodeKey !== undefined && isArrayItem && (
324
- <Text component="span" size={size}>
325
- <span style={STYLES.key}>{nodeKey}</span>
326
- <span style={STYLES.colon}>:</span>
327
- </Text>
328
- )}
329
-
330
- {hasChildren ? (
331
- getPreview()
332
- ) : isExpandable ? (
333
- type === "array" ? (
334
- <Text component="span" size={size} style={STYLES.preview}>
335
- []
336
- </Text>
337
- ) : (
338
- <Text component="span" size={size} style={STYLES.preview}>
339
- {"{}"}
340
- </Text>
341
- )
342
- ) : (
343
- renderValue(nodeValue, nodeKey, path)
344
- )}
345
-
346
- {showCopyButton && (
347
- <CopyButton value={getCopyValue()} iconSize={config.icon} />
348
- )}
349
- </Flex>
350
- );
351
- };
352
-
353
- // =============================================================================
354
- // MAIN COMPONENT
355
- // =============================================================================
356
-
357
- export const JsonViewer = ({
358
- data,
359
- defaultExpandedDepth = 2,
360
- maxDepth = 10,
361
- size = "sm",
362
- showQuotes = false,
363
- showCopyButton = true,
364
- formatValue,
365
- }: JsonViewerProps) => {
366
68
  const config = SIZE_CONFIG[size] || SIZE_CONFIG.sm;
367
69
 
368
70
  // Build tree data from JSON with root wrapper
@@ -487,7 +189,7 @@ export const JsonViewer = ({
487
189
  elementProps: any;
488
190
  }): ReactNode => {
489
191
  return (
490
- <RowNode
192
+ <JsonViewerRowNode
491
193
  node={node}
492
194
  expanded={expanded}
493
195
  hasChildren={hasChildren}
@@ -523,4 +225,86 @@ export const JsonViewer = ({
523
225
  );
524
226
  };
525
227
 
228
+ // =============================================================================
229
+ // HELPERS
230
+ // =============================================================================
231
+
232
+ /**
233
+ * Convert JSON to tree data structure.
234
+ */
235
+ const buildTreeNodes = (
236
+ data: any,
237
+ path: string[] = [],
238
+ key?: string,
239
+ isArrayItem = false,
240
+ maxDepth = 10,
241
+ ): JsonTreeNode | null => {
242
+ const currentPath = key !== undefined ? [...path, key] : path;
243
+ const nodeId = currentPath.length > 0 ? currentPath.join(".") : "root";
244
+
245
+ if (currentPath.length > maxDepth) {
246
+ return {
247
+ value: nodeId,
248
+ label: key ?? "",
249
+ nodeValue: data,
250
+ nodeKey: key,
251
+ path: currentPath,
252
+ isArrayItem,
253
+ };
254
+ }
255
+
256
+ const type = getValueType(data);
257
+
258
+ if (type === "object" || type === "array") {
259
+ const entries =
260
+ type === "array"
261
+ ? (data as any[]).map((v, i) => [String(i), v] as const)
262
+ : Object.entries(data);
263
+
264
+ const children = entries
265
+ .map(([k, v]) =>
266
+ buildTreeNodes(v, currentPath, k, type === "array", maxDepth),
267
+ )
268
+ .filter((n): n is JsonTreeNode => n !== null);
269
+
270
+ return {
271
+ value: nodeId,
272
+ label: key ?? "",
273
+ nodeValue: data,
274
+ nodeKey: key,
275
+ path: currentPath,
276
+ isArrayItem,
277
+ children: children.length > 0 ? children : undefined,
278
+ };
279
+ }
280
+
281
+ return {
282
+ value: nodeId,
283
+ label: key ?? "",
284
+ nodeValue: data,
285
+ nodeKey: key,
286
+ path: currentPath,
287
+ isArrayItem,
288
+ };
289
+ };
290
+
291
+ /**
292
+ * Get all expandable node IDs up to a certain depth.
293
+ */
294
+ const getExpandedIds = (
295
+ nodes: JsonTreeNode[],
296
+ targetDepth: number,
297
+ currentDepth = 0,
298
+ ): string[] => {
299
+ if (currentDepth >= targetDepth) return [];
300
+ const ids: string[] = [];
301
+ for (const node of nodes) {
302
+ if (node.children) {
303
+ ids.push(node.value);
304
+ ids.push(...getExpandedIds(node.children, targetDepth, currentDepth + 1));
305
+ }
306
+ }
307
+ return ids;
308
+ };
309
+
526
310
  export default JsonViewer;
@@ -0,0 +1,46 @@
1
+ import { ActionIcon } from "@mantine/core";
2
+ import { IconCheck, IconCopy } from "@tabler/icons-react";
3
+ import { useCallback, useState } from "react";
4
+
5
+ // =============================================================================
6
+ // PROPS
7
+ // =============================================================================
8
+
9
+ export interface JsonViewerCopyButtonProps {
10
+ value: string;
11
+ iconSize: number;
12
+ }
13
+
14
+ // =============================================================================
15
+ // COMPONENT
16
+ // =============================================================================
17
+
18
+ export const JsonViewerCopyButton = (props: JsonViewerCopyButtonProps) => {
19
+ const [copied, setCopied] = useState(false);
20
+
21
+ const handleCopy = useCallback(
22
+ (e: React.MouseEvent) => {
23
+ e.stopPropagation();
24
+ navigator.clipboard.writeText(props.value);
25
+ setCopied(true);
26
+ setTimeout(() => setCopied(false), 1500);
27
+ },
28
+ [props.value],
29
+ );
30
+
31
+ return (
32
+ <ActionIcon
33
+ size={props.iconSize + 4}
34
+ variant="transparent"
35
+ c={copied ? "green" : "dimmed"}
36
+ onClick={handleCopy}
37
+ className="alepha-json-viewer-copy"
38
+ >
39
+ {copied ? (
40
+ <IconCheck size={props.iconSize} />
41
+ ) : (
42
+ <IconCopy size={props.iconSize} />
43
+ )}
44
+ </ActionIcon>
45
+ );
46
+ };
@@ -0,0 +1,120 @@
1
+ import { Flex, type MantineSize, Text } from "@mantine/core";
2
+ import { IconChevronDown, IconChevronRight } from "@tabler/icons-react";
3
+ import type { ReactNode } from "react";
4
+ import { JsonViewerCopyButton } from "./JsonViewerCopyButton.tsx";
5
+ import { getValueType, type JsonTreeNode, STYLES } from "./JsonViewerShared.ts";
6
+
7
+ // =============================================================================
8
+ // PROPS
9
+ // =============================================================================
10
+
11
+ export interface JsonViewerRowNodeProps {
12
+ node: JsonTreeNode;
13
+ expanded: boolean;
14
+ hasChildren: boolean;
15
+ elementProps: any;
16
+ size: MantineSize;
17
+ config: { icon: number; levelOffset: number };
18
+ showQuotes: boolean;
19
+ showCopyButton: boolean;
20
+ renderValue: (val: any, key: string | undefined, path: string[]) => ReactNode;
21
+ }
22
+
23
+ // =============================================================================
24
+ // COMPONENT
25
+ // =============================================================================
26
+
27
+ export const JsonViewerRowNode = (props: JsonViewerRowNodeProps) => {
28
+ const { nodeValue, nodeKey, path, isArrayItem } = props.node;
29
+ const type = getValueType(nodeValue);
30
+ const isExpandable = type === "object" || type === "array";
31
+
32
+ const getPreview = () => {
33
+ if (!isExpandable) return null;
34
+ const entries = type === "array" ? nodeValue : Object.keys(nodeValue);
35
+ const count = entries.length;
36
+ const label = type === "array" ? "item" : "key";
37
+
38
+ if (!props.expanded) {
39
+ return (
40
+ <Text
41
+ fs={"italic"}
42
+ component="span"
43
+ size={props.size}
44
+ style={STYLES.preview}
45
+ >
46
+ {count === 0
47
+ ? type === "array"
48
+ ? "[]"
49
+ : "{}"
50
+ : type === "array"
51
+ ? `[ ${count} ${count === 1 ? label : `${label}s`} ]`
52
+ : `{ ${count} ${count === 1 ? label : `${label}s`} }`}
53
+ </Text>
54
+ );
55
+ }
56
+
57
+ return null;
58
+ };
59
+
60
+ const getCopyValue = () =>
61
+ isExpandable ? JSON.stringify(nodeValue, null, 2) : String(nodeValue ?? "");
62
+
63
+ return (
64
+ <Flex
65
+ gap={6}
66
+ wrap="nowrap"
67
+ {...props.elementProps}
68
+ className={`alepha-json-viewer-row ${props.elementProps.className || ""}`}
69
+ >
70
+ {props.hasChildren ? (
71
+ props.expanded ? (
72
+ <IconChevronDown size={props.config.icon} style={STYLES.chevron} />
73
+ ) : (
74
+ <IconChevronRight size={props.config.icon} style={STYLES.chevron} />
75
+ )
76
+ ) : (
77
+ <span style={{ width: props.config.icon, flexShrink: 0 }} />
78
+ )}
79
+
80
+ {nodeKey !== undefined && !isArrayItem && (
81
+ <Text component="span" size={props.size}>
82
+ <span style={STYLES.key}>
83
+ {props.showQuotes ? `"${nodeKey}"` : nodeKey}
84
+ </span>
85
+ <span style={STYLES.colon}>:</span>
86
+ </Text>
87
+ )}
88
+
89
+ {nodeKey !== undefined && isArrayItem && (
90
+ <Text component="span" size={props.size}>
91
+ <span style={STYLES.key}>{nodeKey}</span>
92
+ <span style={STYLES.colon}>:</span>
93
+ </Text>
94
+ )}
95
+
96
+ {props.hasChildren ? (
97
+ getPreview()
98
+ ) : isExpandable ? (
99
+ type === "array" ? (
100
+ <Text component="span" size={props.size} style={STYLES.preview}>
101
+ []
102
+ </Text>
103
+ ) : (
104
+ <Text component="span" size={props.size} style={STYLES.preview}>
105
+ {"{}"}
106
+ </Text>
107
+ )
108
+ ) : (
109
+ props.renderValue(nodeValue, nodeKey, path)
110
+ )}
111
+
112
+ {props.showCopyButton && (
113
+ <JsonViewerCopyButton
114
+ value={getCopyValue()}
115
+ iconSize={props.config.icon}
116
+ />
117
+ )}
118
+ </Flex>
119
+ );
120
+ };