@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
@@ -29,10 +29,71 @@ export interface FlexProps extends MantineFlexProps {
29
29
  * Shorthand for direction="column".
30
30
  */
31
31
  col?: boolean;
32
+
33
+ /**
34
+ * Set ground to `var(--alepha-ground)`.
35
+ */
36
+ ground?: boolean;
37
+
38
+ /**
39
+ * Set ground to `var(--alepha-surface)`.
40
+ */
41
+ surface?: boolean;
42
+
43
+ /**
44
+ * Set ground to `var(--alepha-elevated)`.
45
+ */
46
+ elevated?: boolean;
47
+
48
+ /**
49
+ * Add rounded corners to the container. If `true`, a default border radius will be applied. You can also specify a custom border radius value (e.g., "sm", "md", "lg", or any valid CSS border-radius value).
50
+ */
51
+ rounded?: boolean | number | string;
52
+
53
+ /**
54
+ * Add a border to the container. The color will be determined by the current theme.
55
+ */
56
+ bordered?: boolean;
57
+
58
+ /**
59
+ * Add a top border only.
60
+ */
61
+ borderedTop?: boolean;
62
+
63
+ /**
64
+ * Add a bottom border only.
65
+ */
66
+ borderedBottom?: boolean;
67
+
68
+ /**
69
+ * Add a shadow to the container. The intensity will be determined by the current theme.
70
+ */
71
+ shadowed?: boolean | number | string;
72
+
73
+ /**
74
+ * Set overflow to "auto" to enable scrolling when content overflows the container.
75
+ */
76
+ overflow?: boolean;
32
77
  }
33
78
 
34
79
  const Flex = forwardRef<HTMLDivElement, FlexProps>((props, ref) => {
35
- const { fill, center, centerX, centerY, col, ...rest } = props;
80
+ const {
81
+ fill,
82
+ center,
83
+ centerX,
84
+ centerY,
85
+ col,
86
+ ground,
87
+ surface,
88
+ elevated,
89
+ rounded,
90
+ bordered,
91
+ borderedTop,
92
+ borderedBottom,
93
+ shadowed,
94
+ overflow,
95
+ ...rest
96
+ } = props;
36
97
 
37
98
  if (fill) {
38
99
  rest.flex ??= 1;
@@ -55,6 +116,45 @@ const Flex = forwardRef<HTMLDivElement, FlexProps>((props, ref) => {
55
116
  rest.align ??= "center";
56
117
  }
57
118
 
119
+ if (ground) {
120
+ rest.bg = "var(--alepha-ground)";
121
+ } else if (surface) {
122
+ rest.bg = "var(--alepha-surface)";
123
+ } else if (elevated) {
124
+ rest.bg = "var(--alepha-elevated)";
125
+ }
126
+
127
+ if (rounded) {
128
+ rest.bdrs = rounded === true ? "md" : rounded;
129
+ }
130
+
131
+ if (bordered) {
132
+ rest.bd = "1px solid var(--alepha-border)";
133
+ }
134
+
135
+ if (borderedTop) {
136
+ rest.style = {
137
+ borderTop: "1px solid var(--alepha-border)",
138
+ ...((rest.style as object) ?? {}),
139
+ };
140
+ }
141
+
142
+ if (borderedBottom) {
143
+ rest.style = {
144
+ borderBottom: "1px solid var(--alepha-border)",
145
+ ...((rest.style as object) ?? {}),
146
+ };
147
+ }
148
+
149
+ if (shadowed) {
150
+ rest.className =
151
+ `${rest.className ?? ""} shadow-${shadowed === true ? "md" : shadowed}`.trim();
152
+ }
153
+
154
+ if (overflow) {
155
+ rest.className = `${rest.className ?? ""} overflow-auto`.trim();
156
+ }
157
+
58
158
  return <MantineFlex ref={ref} {...rest} />;
59
159
  });
60
160
 
@@ -109,7 +109,7 @@ const Text = forwardRef<HTMLParagraphElement, TextProps>((props, ref) => {
109
109
  }
110
110
 
111
111
  if (small) {
112
- rest.size ??= "sm";
112
+ rest.size ??= "xs";
113
113
  }
114
114
 
115
115
  if (uppercase) {
@@ -8,7 +8,6 @@ import {
8
8
  type MenuItemProps,
9
9
  type MenuProps,
10
10
  type MenuTargetProps,
11
- ThemeIcon,
12
11
  type ThemeIconProps,
13
12
  Tooltip,
14
13
  type TooltipProps,
@@ -113,6 +112,9 @@ export interface ActionMenuConfig {
113
112
  export interface ActionCommonProps extends ButtonProps {
114
113
  children?: ReactNode;
115
114
 
115
+ /**
116
+ * If set, the button will show only the icon on smaller screens and reveal the text from the specified breakpoint and up.
117
+ */
116
118
  textVisibleFrom?: "xs" | "sm" | "md" | "lg" | "xl";
117
119
 
118
120
  /**
@@ -140,6 +142,11 @@ export interface ActionCommonProps extends ButtonProps {
140
142
  */
141
143
  icon?: ReactNode | ComponentType;
142
144
 
145
+ /**
146
+ * Size of the icon. Can be a number (pixels) or a string (e.g., "1em", "20px").
147
+ */
148
+ iconSize?: number | string;
149
+
143
150
  /**
144
151
  * Additional props to pass to the ThemeIcon wrapping the icon.
145
152
  */
@@ -149,6 +156,11 @@ export interface ActionCommonProps extends ButtonProps {
149
156
  * Visual intent of the action button.
150
157
  */
151
158
  intent?: "primary" | "success" | "danger" | "warning" | "info" | "none";
159
+
160
+ /**
161
+ * Active state styling for navigation actions. When set, the button will apply active styles based on the current route.
162
+ */
163
+ variant?: ButtonProps["variant"] | "minimal";
152
164
  }
153
165
 
154
166
  export type ActionProps = ActionCommonProps &
@@ -162,95 +174,21 @@ export type ActionProps = ActionCommonProps &
162
174
 
163
175
  // ---------------------------------------------------------------------------------------------------------------------
164
176
 
165
- // Helper function to render menu items recursively
166
- const ActionMenuItem = (props: {
167
- item: ActionMenuItem;
168
- index: number;
169
- }): ReactNode => {
170
- const { item, index } = props;
171
-
172
- const router = useRouter();
173
- const action = useAction(
174
- {
175
- handler: async (e: any) => {
176
- await item.onClick?.();
177
- },
178
- },
179
- [item.onClick],
180
- );
181
-
182
- // Render divider
183
- if (item.type === "divider") {
184
- return <Menu.Divider key={index} />;
185
- }
186
-
187
- // Render label
188
- if (item.type === "label") {
189
- return <Menu.Label key={index}>{item.label}</Menu.Label>;
190
- }
191
-
192
- // Render submenu if it has children
193
- if (item.children && item.children.length > 0) {
194
- return (
195
- <Menu key={index} trigger="hover" position="right-start" offset={2}>
196
- <Menu.Target>
197
- <Menu.Item
198
- leftSection={item.icon}
199
- rightSection={<IconChevronRight size={14} />}
200
- >
201
- {item.label}
202
- </Menu.Item>
203
- </Menu.Target>
204
- <Menu.Dropdown>
205
- {item.children.map((child, childIndex) => (
206
- <ActionMenuItem item={child} index={childIndex} key={childIndex} />
207
- ))}
208
- </Menu.Dropdown>
209
- </Menu>
210
- );
211
- }
212
-
213
- const menuItemProps: MenuItemProps & ButtonHTMLAttributes<unknown> = {};
214
- if (props.item.onClick) {
215
- menuItemProps.onClick = action.run;
216
- } else if (props.item.href) {
217
- Object.assign(menuItemProps, router.anchor(props.item.href));
218
- }
219
-
220
- // render regular menu item
221
- return (
222
- <Menu.Item
223
- key={index}
224
- leftSection={item.icon}
225
- onClick={item.onClick}
226
- color={item.color}
227
- rightSection={
228
- item.active ? (
229
- <ThemeIcon size={"xs"} variant={"transparent"}>
230
- <IconCheck />
231
- </ThemeIcon>
232
- ) : undefined
233
- }
234
- {...menuItemProps}
235
- >
236
- {item.label}
237
- </Menu.Item>
238
- );
239
- };
177
+ // ---------------------------------------------------------------------------------------------------------------------
240
178
 
241
179
  const ActionButton = (_props: ActionProps) => {
242
180
  const theme = useMantineTheme();
243
181
  const props = { ..._props };
244
- const { tooltip, menu, icon, ...restProps } = props;
245
182
 
246
- if (props.variant === "subtle" || props.variant === "outline") {
247
- restProps.color ??= "gray";
183
+ if (props.variant === "minimal") {
184
+ //props.variant = "default";
185
+ //props.bd = 0;
248
186
  }
249
187
 
188
+ const { tooltip, menu, icon, iconSize, ...restProps } = props;
189
+
250
190
  if (props.intent) {
251
- if (props.intent === "none") {
252
- restProps.color ??= "gray";
253
- } else if (props.intent === "primary") {
191
+ if (props.intent === "primary") {
254
192
  restProps.color ??= theme.primaryColor;
255
193
  } else if (props.intent === "success") {
256
194
  restProps.c ??= "white";
@@ -268,15 +206,16 @@ const ActionButton = (_props: ActionProps) => {
268
206
 
269
207
  if (props.icon) {
270
208
  const sizes = ui.sizes.icon as Record<string, number>;
209
+ const iconSize = props.iconSize ?? sizes[props.size || "sm"];
271
210
  const icon = isComponentType(props.icon) ? (
272
- <props.icon size={sizes[props.size || "md"]} />
211
+ <props.icon size={iconSize} />
273
212
  ) : (
274
213
  <span>{props.icon as ReactNode}</span>
275
214
  );
276
215
 
277
216
  if (!props.children) {
278
217
  restProps.children = Children.only(icon);
279
- restProps.px ??= "xs"; // TODO: change based on props.size ?
218
+ restProps.p ??= 8;
280
219
  } else {
281
220
  restProps.leftSection = icon;
282
221
  }
@@ -302,7 +241,13 @@ const ActionButton = (_props: ActionProps) => {
302
241
  </ActionButton>
303
242
  </Flex>
304
243
  <Flex w={"100%"} hiddenFrom={textVisibleFrom}>
305
- <ActionButton px={"xs"} {...rest} tooltip={tooltip} menu={menu}>
244
+ <ActionButton
245
+ px={"xs"}
246
+ {...rest}
247
+ aria-label={typeof children === "string" ? children : undefined}
248
+ tooltip={tooltip}
249
+ menu={menu}
250
+ >
306
251
  {leftSection}
307
252
  </ActionButton>
308
253
  </Flex>
@@ -568,6 +513,7 @@ const ActionNavigationButton = (props: ActionNavigationButtonProps) => {
568
513
  propsActive,
569
514
  routerGoOptions,
570
515
  onClick: propsOnClick,
516
+ anchorProps: buttonAnchorProps,
571
517
  anchor,
572
518
  ...buttonProps
573
519
  } = props as ActionNavigationButtonProps & { onClick?: (e: any) => void };
@@ -592,13 +538,13 @@ const ActionNavigationButton = (props: ActionNavigationButtonProps) => {
592
538
  buttonProps.className = `${className} ${classNameActive}`.trim();
593
539
  }
594
540
 
595
- if (props.anchorProps || anchor) {
541
+ if (buttonAnchorProps || anchor) {
596
542
  return (
597
543
  <Anchor
598
544
  component={"a"}
599
545
  {...anchorProps}
600
546
  {...(buttonProps as AnchorProps)}
601
- {...props.anchorProps}
547
+ {...buttonAnchorProps}
602
548
  onClick={combinedOnClick}
603
549
  >
604
550
  {props.children}
@@ -643,3 +589,79 @@ const ActionHrefButton = (props: ActionNavigationButtonProps) => {
643
589
  };
644
590
 
645
591
  // ---------------------------------------------------------------------------------------------------------------------
592
+
593
+ // Helper function to render menu items recursively
594
+ const ActionMenuItem = (props: {
595
+ item: ActionMenuItem;
596
+ index: number;
597
+ }): ReactNode => {
598
+ const { item, index } = props;
599
+
600
+ const router = useRouter();
601
+ const action = useAction(
602
+ {
603
+ handler: async (e: any) => {
604
+ await item.onClick?.();
605
+ },
606
+ },
607
+ [item.onClick],
608
+ );
609
+
610
+ // Render divider
611
+ if (item.type === "divider") {
612
+ return <Menu.Divider key={index} />;
613
+ }
614
+
615
+ // Render label
616
+ if (item.type === "label") {
617
+ return <Menu.Label key={index}>{item.label}</Menu.Label>;
618
+ }
619
+
620
+ // Render submenu if it has children
621
+ if (item.children && item.children.length > 0) {
622
+ return (
623
+ <Menu key={index} trigger="hover" position="right-start" offset={2}>
624
+ <Menu.Target>
625
+ <Menu.Item
626
+ leftSection={item.icon}
627
+ rightSection={<IconChevronRight size={14} />}
628
+ >
629
+ {item.label}
630
+ </Menu.Item>
631
+ </Menu.Target>
632
+ <Menu.Dropdown>
633
+ {item.children.map((child, childIndex) => (
634
+ <ActionMenuItem item={child} index={childIndex} key={childIndex} />
635
+ ))}
636
+ </Menu.Dropdown>
637
+ </Menu>
638
+ );
639
+ }
640
+
641
+ const menuItemProps: MenuItemProps & ButtonHTMLAttributes<unknown> = {};
642
+ if (props.item.onClick) {
643
+ menuItemProps.onClick = action.run;
644
+ } else if (props.item.href) {
645
+ Object.assign(menuItemProps, router.anchor(props.item.href));
646
+ }
647
+
648
+ // render regular menu item
649
+ return (
650
+ <Menu.Item
651
+ key={index}
652
+ leftSection={
653
+ item.icon ??
654
+ (item.active ? (
655
+ <IconCheck size={ui.sizes.icon.sm} />
656
+ ) : (
657
+ <Flex w={ui.sizes.icon.sm} />
658
+ ))
659
+ }
660
+ onClick={item.onClick}
661
+ color={item.color}
662
+ {...menuItemProps}
663
+ >
664
+ {item.label}
665
+ </Menu.Item>
666
+ );
667
+ };
@@ -20,14 +20,14 @@ const DarkModeButton = (props: Partial<ActionProps>) => {
20
20
  setColorScheme(current === "dark" ? "light" : "dark");
21
21
  };
22
22
 
23
- const size = props.size ?? "md";
23
+ const size = props.size ?? "sm";
24
24
  const iconSize =
25
- (ui.sizes.icon as Record<string, number>)[size] ?? ui.sizes.icon.md;
25
+ (ui.sizes.icon as Record<string, number>)[size] ?? ui.sizes.icon.sm;
26
26
 
27
27
  return (
28
28
  <ActionButton
29
29
  onClick={toggleColorScheme}
30
- variant={props.variant ?? "subtle"}
30
+ variant={props.variant ?? "default"}
31
31
  size={size}
32
32
  aria-label="Toggle color scheme"
33
33
  icon={
@@ -6,7 +6,7 @@ const LanguageButton = (props: Partial<ActionProps>) => {
6
6
  const i18n = useI18n();
7
7
  return (
8
8
  <ActionButton
9
- variant={"subtle"}
9
+ variant={"default"}
10
10
  icon={IconLanguage}
11
11
  menu={{
12
12
  items: i18n.languages.map((lang) => ({
@@ -20,8 +20,7 @@ const OmnibarButton = (props: OmnibarButtonProps) => {
20
20
  <ActionButton
21
21
  variant={"subtle"}
22
22
  onClick={spotlight.open}
23
- radius={"md"}
24
- icon={<IconSearch size={16} />}
23
+ icon={IconSearch}
25
24
  tooltip={{ label: "Search", position: "right" }}
26
25
  {...props.actionProps}
27
26
  />
@@ -1,28 +1,57 @@
1
1
  import { IconPalette } from "@tabler/icons-react";
2
2
  import { useStore } from "alepha/react";
3
3
  import { alephaThemeListAtom } from "../../atoms/alephaThemeListAtom.ts";
4
+ import { useDialog } from "../../hooks/useDialog.ts";
4
5
  import { useTheme } from "../../hooks/useTheme.ts";
6
+ import type { ActionMenuItem } from "./ActionButton.tsx";
5
7
  import ActionButton, { type ActionProps } from "./ActionButton.tsx";
8
+ import ThemeExpertModal from "./ThemeExpertModal.tsx";
6
9
 
7
- const ThemeButton = (props: Partial<ActionProps>) => {
10
+ type ThemeButtonProps = Partial<ActionProps> & {
11
+ /**
12
+ * Enable expert mode with color, radius, and font customization.
13
+ */
14
+ expert?: boolean;
15
+ };
16
+
17
+ const ThemeButton = (props: ThemeButtonProps) => {
18
+ const { expert, ...actionProps } = props;
8
19
  const [theme, setTheme] = useTheme();
9
20
  const themeList = useStore(alephaThemeListAtom)[0];
21
+ const dialog = useDialog();
22
+
23
+ const items: ActionMenuItem[] = themeList.map((it, index) => ({
24
+ label: it.name,
25
+ onClick: () =>
26
+ setTheme({
27
+ index,
28
+ }),
29
+ active: theme.name === it.name,
30
+ }));
31
+
32
+ if (expert) {
33
+ items.push(
34
+ { type: "divider" },
35
+ {
36
+ label: "Customize...",
37
+ onClick: () => {
38
+ dialog.open({
39
+ title: "Customize Theme",
40
+ content: <ThemeExpertModal />,
41
+ });
42
+ },
43
+ },
44
+ );
45
+ }
10
46
 
11
47
  return (
12
48
  <ActionButton
13
- variant="subtle"
49
+ variant="default"
14
50
  icon={IconPalette}
15
51
  menu={{
16
- items: themeList.map((it, index) => ({
17
- label: it.name,
18
- onClick: () =>
19
- setTheme({
20
- index,
21
- }),
22
- active: theme.name === it.name,
23
- })),
52
+ items,
24
53
  }}
25
- {...props}
54
+ {...actionProps}
26
55
  />
27
56
  );
28
57
  };
@@ -0,0 +1,184 @@
1
+ import {
2
+ ColorSwatch,
3
+ Flex,
4
+ Select,
5
+ SimpleGrid,
6
+ Text,
7
+ useMantineTheme,
8
+ } from "@mantine/core";
9
+ import { IconCheck } from "@tabler/icons-react";
10
+ import type { AlephaThemeOverrides } from "../../atoms/alephaThemeOverridesAtom.ts";
11
+ import { useDialog } from "../../hooks/useDialog.ts";
12
+ import { useTheme } from "../../hooks/useTheme.ts";
13
+ import ActionButton from "./ActionButton.tsx";
14
+
15
+ const MANTINE_COLORS = [
16
+ "red",
17
+ "pink",
18
+ "grape",
19
+ "violet",
20
+ "indigo",
21
+ "blue",
22
+ "cyan",
23
+ "teal",
24
+ "green",
25
+ "lime",
26
+ "yellow",
27
+ "orange",
28
+ ];
29
+
30
+ const RADIUS_OPTIONS = [
31
+ { label: "xs", value: "xs" },
32
+ { label: "sm", value: "sm" },
33
+ { label: "md", value: "md" },
34
+ { label: "lg", value: "lg" },
35
+ { label: "xl", value: "xl" },
36
+ ];
37
+
38
+ const SIZE_OPTIONS = [
39
+ { label: "xs", value: "xs" },
40
+ { label: "sm", value: "sm" },
41
+ { label: "md", value: "md" },
42
+ { label: "lg", value: "lg" },
43
+ { label: "xl", value: "xl" },
44
+ ];
45
+
46
+ const FONT_OPTIONS = [
47
+ { label: "System", value: "" },
48
+ { label: "Inter", value: "Inter, sans-serif" },
49
+ { label: "Mono", value: "ui-monospace, SFMono-Regular, Menlo, monospace" },
50
+ { label: "Serif", value: "Georgia, 'Times New Roman', serif" },
51
+ ];
52
+
53
+ const ThemeExpertModal = () => {
54
+ const [, , expert] = useTheme();
55
+ const dialog = useDialog();
56
+ const mantineTheme = useMantineTheme();
57
+ const { overrides, setOverrides } = expert;
58
+
59
+ const currentColor = overrides.primaryColor || mantineTheme.primaryColor;
60
+ const currentRadius = overrides.radius || mantineTheme.defaultRadius || "md";
61
+ const currentFont = overrides.fontFamily || "";
62
+ const currentFontSize = overrides.fontSize || "md";
63
+ const currentScale = overrides.scale || "md";
64
+
65
+ const updateOverrides = (patch: Partial<AlephaThemeOverrides>) => {
66
+ setOverrides({ ...overrides, ...patch });
67
+ };
68
+
69
+ return (
70
+ <Flex direction="column" gap="lg">
71
+ <Flex direction="column" gap="xs">
72
+ <Text fw={500} size="sm">
73
+ Primary Color
74
+ </Text>
75
+ <SimpleGrid cols={6} spacing="xs">
76
+ {MANTINE_COLORS.map((color) => (
77
+ <Flex key={color} justify="center">
78
+ <ColorSwatch
79
+ color={mantineTheme.colors[color]?.[6] ?? color}
80
+ onClick={() => updateOverrides({ primaryColor: color })}
81
+ style={{ cursor: "pointer" }}
82
+ size={32}
83
+ >
84
+ {currentColor === color && (
85
+ <IconCheck size={14} color="white" />
86
+ )}
87
+ </ColorSwatch>
88
+ </Flex>
89
+ ))}
90
+ </SimpleGrid>
91
+ </Flex>
92
+
93
+ <Flex direction="column" gap="xs">
94
+ <Text fw={500} size="sm">
95
+ Border Radius
96
+ </Text>
97
+ <Flex gap="xs">
98
+ {RADIUS_OPTIONS.map((opt) => (
99
+ <ActionButton
100
+ key={opt.value}
101
+ variant={
102
+ String(currentRadius) === opt.value ? "filled" : "default"
103
+ }
104
+ size="xs"
105
+ flex={1}
106
+ onClick={() => updateOverrides({ radius: opt.value })}
107
+ >
108
+ {opt.label}
109
+ </ActionButton>
110
+ ))}
111
+ </Flex>
112
+ </Flex>
113
+
114
+ <Flex direction="column" gap="xs">
115
+ <Text fw={500} size="sm">
116
+ Font Family
117
+ </Text>
118
+ <Select
119
+ data={FONT_OPTIONS}
120
+ value={currentFont}
121
+ onChange={(value) => updateOverrides({ fontFamily: value ?? "" })}
122
+ allowDeselect={false}
123
+ />
124
+ </Flex>
125
+
126
+ <Flex direction="column" gap="xs">
127
+ <Text fw={500} size="sm">
128
+ Font Size
129
+ </Text>
130
+ <Flex gap="xs">
131
+ {SIZE_OPTIONS.map((opt) => (
132
+ <ActionButton
133
+ key={opt.value}
134
+ variant={currentFontSize === opt.value ? "filled" : "default"}
135
+ size="xs"
136
+ flex={1}
137
+ onClick={() => updateOverrides({ fontSize: opt.value })}
138
+ >
139
+ {opt.label}
140
+ </ActionButton>
141
+ ))}
142
+ </Flex>
143
+ </Flex>
144
+
145
+ <Flex direction="column" gap="xs">
146
+ <Text fw={500} size="sm">
147
+ Scale
148
+ </Text>
149
+ <Flex gap="xs">
150
+ {SIZE_OPTIONS.map((opt) => (
151
+ <ActionButton
152
+ key={opt.value}
153
+ variant={currentScale === opt.value ? "filled" : "default"}
154
+ size="xs"
155
+ flex={1}
156
+ onClick={() => updateOverrides({ scale: opt.value })}
157
+ >
158
+ {opt.label}
159
+ </ActionButton>
160
+ ))}
161
+ </Flex>
162
+ </Flex>
163
+
164
+ <Flex justify="space-between">
165
+ <ActionButton
166
+ variant="subtle"
167
+ color="red"
168
+ onClick={() => expert.resetOverrides()}
169
+ >
170
+ Reset
171
+ </ActionButton>
172
+ <ActionButton
173
+ variant={"default"}
174
+ px={"xl"}
175
+ onClick={() => dialog.close()}
176
+ >
177
+ OK
178
+ </ActionButton>
179
+ </Flex>
180
+ </Flex>
181
+ );
182
+ };
183
+
184
+ export default ThemeExpertModal;