@alepha/ui 0.14.1 → 0.14.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 (183) hide show
  1. package/dist/admin/AdminAudits-B3EhKhN7.js +3 -0
  2. package/dist/admin/{AdminAudits-CwvH8e8c.js → AdminAudits-DIrCCPk3.js} +3 -2
  3. package/dist/admin/AdminAudits-DIrCCPk3.js.map +1 -0
  4. package/dist/admin/AdminFiles-C8OG4dtD.js +3 -0
  5. package/dist/admin/{AdminFiles-C_w1tb_x.js → AdminFiles-RsL178Ta.js} +2 -2
  6. package/dist/admin/{AdminFiles-C_w1tb_x.js.map → AdminFiles-RsL178Ta.js.map} +1 -1
  7. package/dist/admin/AdminNotifications-BSL4B2fQ.js +3 -0
  8. package/dist/admin/{AdminNotifications-DuYy74AN.js → AdminNotifications-cIbywWKi.js} +2 -2
  9. package/dist/admin/AdminNotifications-cIbywWKi.js.map +1 -0
  10. package/dist/admin/{AdminParameters-DYg48Jwe.js → AdminParameters-BKObzzpN.js} +1 -1
  11. package/dist/admin/{AdminParameters-YagqWTG3.js → AdminParameters-D-q3Qmhv.js} +2 -2
  12. package/dist/admin/{AdminParameters-YagqWTG3.js.map → AdminParameters-D-q3Qmhv.js.map} +1 -1
  13. package/dist/admin/AdminSessions-DHG9zPfr.js +3 -0
  14. package/dist/admin/{AdminSessions-BCjgJ-93.js → AdminSessions-vOgkrQ2U.js} +3 -2
  15. package/dist/admin/AdminSessions-vOgkrQ2U.js.map +1 -0
  16. package/dist/admin/{AdminUserAudits-B_PUXCKC.js → AdminUserAudits-CSsN1fIC.js} +3 -2
  17. package/dist/admin/AdminUserAudits-CSsN1fIC.js.map +1 -0
  18. package/dist/admin/{AdminUserAudits-D7cTcElL.js → AdminUserAudits-DmAnivo3.js} +1 -1
  19. package/dist/admin/{AdminUserCreate-DzfRbGZ4.js → AdminUserCreate-B72nu-3W.js} +3 -2
  20. package/dist/admin/AdminUserCreate-B72nu-3W.js.map +1 -0
  21. package/dist/admin/{AdminUserCreate-oUA1KDIl.js → AdminUserCreate-DpA13zwj.js} +1 -1
  22. package/dist/admin/AdminUserDetails-CKM2IEMr.js +475 -0
  23. package/dist/admin/AdminUserDetails-CKM2IEMr.js.map +1 -0
  24. package/dist/admin/{AdminUserDetails-y1H5DW8Y.js → AdminUserDetails-Zib_B6Al.js} +1 -1
  25. package/dist/admin/{AdminUserLayout-Dejnz13m.js → AdminUserLayout-BNBOEiAO.js} +1 -1
  26. package/dist/admin/AdminUserLayout-D7En9UBq.js +334 -0
  27. package/dist/admin/AdminUserLayout-D7En9UBq.js.map +1 -0
  28. package/dist/admin/AdminUserSessions-D9X2_HMA.js +3 -0
  29. package/dist/admin/{AdminUserSessions-DO9H85O-.js → AdminUserSessions-DEaGu6n6.js} +3 -2
  30. package/dist/admin/AdminUserSessions-DEaGu6n6.js.map +1 -0
  31. package/dist/admin/{AdminUserSettings-B3jA8g3p.js → AdminUserSettings-Di73D7g2.js} +8 -6
  32. package/dist/admin/AdminUserSettings-Di73D7g2.js.map +1 -0
  33. package/dist/admin/AdminUserSettings-yI-JECf5.js +3 -0
  34. package/dist/admin/{AdminUsers-ebbrJBT0.js → AdminUsers-BnGIRvmV.js} +3 -2
  35. package/dist/admin/AdminUsers-BnGIRvmV.js.map +1 -0
  36. package/dist/admin/AdminUsers-CG9-2Z8W.js +3 -0
  37. package/dist/admin/index.d.ts +25 -25
  38. package/dist/admin/index.d.ts.map +1 -1
  39. package/dist/admin/index.js +37 -36
  40. package/dist/admin/index.js.map +1 -1
  41. package/dist/auth/{AuthLayout-BAZJHzDG.js → AuthLayout-B1sUB8fB.js} +2 -2
  42. package/dist/auth/AuthLayout-B1sUB8fB.js.map +1 -0
  43. package/dist/auth/Login-BWi-pPbO.js +4 -0
  44. package/dist/auth/{Login-CeNZZjrr.js → Login-Cjxv3EDi.js} +2 -2
  45. package/dist/auth/Login-Cjxv3EDi.js.map +1 -0
  46. package/dist/auth/{Register-s4ENeyiE.js → Register-BKBIpHhW.js} +3 -2
  47. package/dist/auth/Register-BKBIpHhW.js.map +1 -0
  48. package/dist/auth/Register-CtdvihIM.js +4 -0
  49. package/dist/auth/ResetPassword-BUdM7T_R.js +3 -0
  50. package/dist/auth/{ResetPassword-GLIFkJT7.js → ResetPassword-DvqD_1SJ.js} +3 -2
  51. package/dist/auth/ResetPassword-DvqD_1SJ.js.map +1 -0
  52. package/dist/auth/VerifyEmail-BYmtnkEl.js +3 -0
  53. package/dist/auth/{VerifyEmail-R79sSej_.js → VerifyEmail-VaBruOnO.js} +3 -2
  54. package/dist/auth/VerifyEmail-VaBruOnO.js.map +1 -0
  55. package/dist/auth/index.d.ts +11 -11
  56. package/dist/auth/index.d.ts.map +1 -1
  57. package/dist/auth/index.js +10 -10
  58. package/dist/auth/index.js.map +1 -1
  59. package/dist/core/index.d.ts +36 -55
  60. package/dist/core/index.d.ts.map +1 -1
  61. package/dist/core/index.js +50 -350
  62. package/dist/core/index.js.map +1 -1
  63. package/dist/demo/DemoDataTable-2mzzf__a.js +150 -0
  64. package/dist/demo/DemoDataTable-2mzzf__a.js.map +1 -0
  65. package/dist/demo/DemoHome-CnuL5WV9.js +25 -0
  66. package/dist/demo/DemoHome-CnuL5WV9.js.map +1 -0
  67. package/dist/demo/DemoHome-D6Z7EE4V.js +3 -0
  68. package/dist/demo/DemoJsonViewer-CYUggLop.js +4 -0
  69. package/dist/demo/DemoJsonViewer-NUGst5wW.js +430 -0
  70. package/dist/demo/DemoJsonViewer-NUGst5wW.js.map +1 -0
  71. package/dist/demo/DemoLayout-ZFDzyvY3.js +3 -0
  72. package/dist/demo/DemoLayout-dvbeuBBf.js +47 -0
  73. package/dist/demo/DemoLayout-dvbeuBBf.js.map +1 -0
  74. package/dist/demo/DemoLogin--wE44i23.js +327 -0
  75. package/dist/demo/DemoLogin--wE44i23.js.map +1 -0
  76. package/dist/demo/DemoRegister-BtrMksx6.js +488 -0
  77. package/dist/demo/DemoRegister-BtrMksx6.js.map +1 -0
  78. package/dist/demo/DemoResetPassword-DVXiiiX7.js +341 -0
  79. package/dist/demo/DemoResetPassword-DVXiiiX7.js.map +1 -0
  80. package/dist/demo/DemoSidebar-DWnjYHoP.js +82 -0
  81. package/dist/demo/DemoSidebar-DWnjYHoP.js.map +1 -0
  82. package/dist/demo/DemoTypeForm-P5_VInW2.js +83 -0
  83. package/dist/demo/DemoTypeForm-P5_VInW2.js.map +1 -0
  84. package/dist/demo/DemoVerifyEmail-C_ooC5u8.js +152 -0
  85. package/dist/demo/DemoVerifyEmail-C_ooC5u8.js.map +1 -0
  86. package/dist/demo/IconGoogle-DvmFiEDB.js +58 -0
  87. package/dist/demo/IconGoogle-DvmFiEDB.js.map +1 -0
  88. package/dist/demo/Showcase-vemLuO2t.js +187 -0
  89. package/dist/demo/Showcase-vemLuO2t.js.map +1 -0
  90. package/dist/demo/index.d.ts +97 -0
  91. package/dist/demo/index.d.ts.map +1 -0
  92. package/dist/demo/index.js +121 -0
  93. package/dist/demo/index.js.map +1 -0
  94. package/dist/json/index.d.ts +58 -0
  95. package/dist/json/index.d.ts.map +1 -0
  96. package/dist/json/index.js +325 -0
  97. package/dist/json/index.js.map +1 -0
  98. package/package.json +25 -14
  99. package/src/admin/AdminRouter.ts +23 -20
  100. package/src/admin/MainRouter.ts +2 -2
  101. package/src/admin/components/audits/AdminAudits.tsx +4 -3
  102. package/src/admin/components/jobs/AdminJobs.tsx +2 -2
  103. package/src/admin/components/notifications/AdminNotifications.tsx +2 -2
  104. package/src/admin/components/parameters/AdminParameters.tsx +2 -2
  105. package/src/admin/components/sessions/AdminSessions.tsx +4 -3
  106. package/src/admin/components/shared/AdminResourceHeader.tsx +281 -0
  107. package/src/admin/components/shared/AdminResourceTabs.tsx +94 -0
  108. package/src/admin/components/shared/index.ts +10 -0
  109. package/src/admin/components/users/AdminUserAudits.tsx +4 -3
  110. package/src/admin/components/users/AdminUserCreate.tsx +4 -3
  111. package/src/admin/components/users/AdminUserDetails.tsx +339 -86
  112. package/src/admin/components/users/AdminUserLayout.tsx +165 -113
  113. package/src/admin/components/users/AdminUserSessions.tsx +4 -3
  114. package/src/admin/components/users/AdminUserSettings.tsx +12 -6
  115. package/src/admin/components/users/AdminUsers.tsx +8 -3
  116. package/src/auth/AuthRouter.ts +1 -1
  117. package/src/auth/components/AuthLayout.tsx +1 -1
  118. package/src/auth/components/Login.tsx +1 -1
  119. package/src/auth/components/Register.tsx +2 -1
  120. package/src/auth/components/ResetPassword.tsx +2 -1
  121. package/src/auth/components/VerifyEmail.tsx +2 -1
  122. package/src/auth/components/buttons/UserButton.tsx +1 -1
  123. package/src/core/RootRouter.ts +1 -1
  124. package/src/core/components/buttons/ActionButton.tsx +3 -4
  125. package/src/core/components/form/Control.tsx +12 -1
  126. package/src/core/components/form/ControlNumber.tsx +5 -0
  127. package/src/core/components/form/TypeForm.tsx +3 -2
  128. package/src/core/components/layout/AdminShell.tsx +2 -1
  129. package/src/core/components/layout/AlephaMantineProvider.tsx +7 -2
  130. package/src/core/components/layout/Omnibar.tsx +2 -1
  131. package/src/core/components/layout/Sidebar.tsx +18 -18
  132. package/src/core/index.ts +1 -2
  133. package/src/core/services/DialogService.tsx +0 -17
  134. package/{styles.css → src/core/styles.css} +1 -5
  135. package/src/demo/DemoRouter.ts +123 -0
  136. package/src/demo/components/DemoHome.tsx +29 -0
  137. package/src/demo/components/DemoLayout.tsx +52 -0
  138. package/src/demo/components/auth/DemoLogin.tsx +130 -0
  139. package/src/demo/components/auth/DemoRegister.tsx +144 -0
  140. package/src/demo/components/auth/DemoResetPassword.tsx +69 -0
  141. package/src/demo/components/auth/DemoVerifyEmail.tsx +28 -0
  142. package/src/demo/components/core/DemoDataTable.tsx +174 -0
  143. package/src/demo/components/core/DemoSidebar.tsx +85 -0
  144. package/src/demo/components/core/DemoTypeForm.tsx +69 -0
  145. package/src/demo/components/json/DemoJsonViewer.tsx +128 -0
  146. package/src/demo/components/shared/MacWindow.tsx +105 -0
  147. package/src/demo/components/shared/Showcase.tsx +112 -0
  148. package/src/demo/index.ts +30 -0
  149. package/src/demo/styles.css +0 -0
  150. package/src/json/components/JsonViewer.css +25 -0
  151. package/src/json/components/JsonViewer.tsx +526 -0
  152. package/src/json/extensions/DialogService.tsx +31 -0
  153. package/src/json/index.ts +5 -0
  154. package/src/json/styles.css +1 -0
  155. package/dist/admin/AdminAudits-CwvH8e8c.js.map +0 -1
  156. package/dist/admin/AdminAudits-Dv8Vk_6r.js +0 -3
  157. package/dist/admin/AdminFiles-5CPA3lQk.js +0 -3
  158. package/dist/admin/AdminNotifications-DLjmZWtf.js +0 -3
  159. package/dist/admin/AdminNotifications-DuYy74AN.js.map +0 -1
  160. package/dist/admin/AdminSessions-BCjgJ-93.js.map +0 -1
  161. package/dist/admin/AdminSessions-DEh2uN-4.js +0 -3
  162. package/dist/admin/AdminUserAudits-B_PUXCKC.js.map +0 -1
  163. package/dist/admin/AdminUserCreate-DzfRbGZ4.js.map +0 -1
  164. package/dist/admin/AdminUserDetails-DeTrJm-t.js +0 -221
  165. package/dist/admin/AdminUserDetails-DeTrJm-t.js.map +0 -1
  166. package/dist/admin/AdminUserLayout-CsfrrZkD.js +0 -150
  167. package/dist/admin/AdminUserLayout-CsfrrZkD.js.map +0 -1
  168. package/dist/admin/AdminUserSessions-Bbhcpz4k.js +0 -3
  169. package/dist/admin/AdminUserSessions-DO9H85O-.js.map +0 -1
  170. package/dist/admin/AdminUserSettings-B3jA8g3p.js.map +0 -1
  171. package/dist/admin/AdminUserSettings-CE0xpbQc.js +0 -3
  172. package/dist/admin/AdminUsers-CegGZDhW.js +0 -3
  173. package/dist/admin/AdminUsers-ebbrJBT0.js.map +0 -1
  174. package/dist/auth/AuthLayout-BAZJHzDG.js.map +0 -1
  175. package/dist/auth/Login-CeNZZjrr.js.map +0 -1
  176. package/dist/auth/Login-hQcu1nlu.js +0 -4
  177. package/dist/auth/Register-B6HBNVHS.js +0 -4
  178. package/dist/auth/Register-s4ENeyiE.js.map +0 -1
  179. package/dist/auth/ResetPassword-Cjd-W-Nu.js +0 -3
  180. package/dist/auth/ResetPassword-GLIFkJT7.js.map +0 -1
  181. package/dist/auth/VerifyEmail-Dc9ABKUw.js +0 -3
  182. package/dist/auth/VerifyEmail-R79sSej_.js.map +0 -1
  183. package/src/core/components/data/JsonViewer.tsx +0 -361
@@ -3,7 +3,8 @@ import { $head, AlephaReactHead } from "@alepha/react/head";
3
3
  import { AlephaReactI18n, useI18n } from "@alepha/react/i18n";
4
4
  import { $atom, $inject, $module, Alepha, AlephaError, TypeBoxError, t } from "alepha";
5
5
  import { $cookie } from "alepha/server/cookies";
6
- import { $page, NestedView, useAction, useActive, useEvents, useInject, useRouter, useStore } from "@alepha/react";
6
+ import { $page, NestedView, useActive, useRouter } from "@alepha/react/router";
7
+ import { useAction, useEvents, useInject, useStore } from "@alepha/react";
7
8
  import { ActionIcon, Anchor, AppShell, Autocomplete, Badge, Box, Burger, Button, Card, Checkbox, Collapse, ColorInput, ColorSchemeScript, CopyButton, Divider, Fieldset, FileInput, Flex, Flex as Flex$1, Grid, Group, Input, Kbd, MantineProvider, Menu, MultiSelect, NumberInput, Pagination, PasswordInput, Popover, ScrollArea, SegmentedControl, Select, Slider, Stack, Switch, Table, TagsInput, Text, Text as Text$1, TextInput, Textarea, ThemeIcon, Tooltip, UnstyledButton, useComputedColorScheme, useMantineColorScheme, useMantineTheme } from "@mantine/core";
8
9
  import { ModalsProvider, modals } from "@mantine/modals";
9
10
  import { Notifications, notifications } from "@mantine/notifications";
@@ -369,7 +370,7 @@ const AlephaMantineProvider = (props) => {
369
370
  nprogress.complete();
370
371
  },
371
372
  "react:action:error": ({ error }) => {
372
- if (error instanceof FormValidationError) return;
373
+ if (error instanceof FormValidationError || error instanceof TypeBoxError) return;
373
374
  toast.danger({
374
375
  title: error.name || "Error",
375
376
  message: error.message ?? "An error occurred while processing your action."
@@ -410,7 +411,7 @@ var RootRouter = class {
410
411
 
411
412
  //#endregion
412
413
  //#region ../../src/core/components/data/ErrorViewer.tsx
413
- const getSizeConfig$1 = (size = "sm") => {
414
+ const getSizeConfig = (size = "sm") => {
414
415
  const configs = {
415
416
  xs: {
416
417
  text: "xs",
@@ -445,7 +446,7 @@ const parseStackTrace = (stack) => {
445
446
  };
446
447
  const ErrorViewer = ({ error, showStack = true, copyable = true, size = "sm" }) => {
447
448
  const [stackExpanded, setStackExpanded] = useState(false);
448
- const sizeConfig = getSizeConfig$1(size);
449
+ const sizeConfig = getSizeConfig(size);
449
450
  const copyIconSize = sizeConfig.icon + 2;
450
451
  const isError = error instanceof Error;
451
452
  const errorName = isError ? error.name : "Error";
@@ -548,297 +549,6 @@ const ErrorViewer = ({ error, showStack = true, copyable = true, size = "sm" })
548
549
  };
549
550
  var ErrorViewer_default = ErrorViewer;
550
551
 
551
- //#endregion
552
- //#region ../../src/core/components/data/JsonViewer.tsx
553
- const getSizeConfig = (size = "sm") => {
554
- const configs = {
555
- xs: {
556
- text: "xs",
557
- icon: 12,
558
- indent: 16,
559
- gap: 4,
560
- iconWidth: 18
561
- },
562
- sm: {
563
- text: "sm",
564
- icon: 14,
565
- indent: 20,
566
- gap: 6,
567
- iconWidth: 20
568
- },
569
- md: {
570
- text: "md",
571
- icon: 16,
572
- indent: 24,
573
- gap: 8,
574
- iconWidth: 22
575
- },
576
- lg: {
577
- text: "lg",
578
- icon: 18,
579
- indent: 28,
580
- gap: 10,
581
- iconWidth: 24
582
- },
583
- xl: {
584
- text: "xl",
585
- icon: 20,
586
- indent: 32,
587
- gap: 12,
588
- iconWidth: 26
589
- }
590
- };
591
- return configs[size] || configs.sm;
592
- };
593
- const JsonNode = ({ name, value, depth, maxDepth, isLast = false, isArrayItem = false, size = "sm", iconWidth }) => {
594
- const [expanded, setExpanded] = useState(depth < 2);
595
- const sizeConfig = getSizeConfig(size);
596
- const getValueType = (val) => {
597
- if (val === null) return "null";
598
- if (val === void 0) return "undefined";
599
- if (Array.isArray(val)) return "array";
600
- return typeof val;
601
- };
602
- const valueType = getValueType(value);
603
- const renderPrimitive = (val) => {
604
- const type = getValueType(val);
605
- const textProps = {
606
- component: "span",
607
- ff: "monospace",
608
- size: sizeConfig.text
609
- };
610
- switch (type) {
611
- case "string": return /* @__PURE__ */ jsxs(Text$1, {
612
- ...textProps,
613
- c: "teal",
614
- children: [
615
- "\"",
616
- val,
617
- "\""
618
- ]
619
- });
620
- case "number": return /* @__PURE__ */ jsx(Text$1, {
621
- ...textProps,
622
- c: "blue",
623
- children: val
624
- });
625
- case "boolean": return /* @__PURE__ */ jsx(Text$1, {
626
- ...textProps,
627
- c: "violet",
628
- children: String(val)
629
- });
630
- case "null": return /* @__PURE__ */ jsx(Text$1, {
631
- ...textProps,
632
- c: "dimmed",
633
- children: "null"
634
- });
635
- case "undefined": return /* @__PURE__ */ jsx(Text$1, {
636
- ...textProps,
637
- c: "dimmed",
638
- children: "undefined"
639
- });
640
- default: return /* @__PURE__ */ jsx(Text$1, {
641
- ...textProps,
642
- children: String(val)
643
- });
644
- }
645
- };
646
- const renderKey = () => {
647
- if (name === void 0) return null;
648
- return /* @__PURE__ */ jsx(Text$1, {
649
- component: "span",
650
- c: "cyan",
651
- ff: "monospace",
652
- fw: 500,
653
- size: sizeConfig.text,
654
- children: isArrayItem ? `[${name}]` : `"${name}"`
655
- });
656
- };
657
- const comma = !isLast && /* @__PURE__ */ jsx(Text$1, {
658
- component: "span",
659
- c: "dimmed",
660
- ff: "monospace",
661
- size: sizeConfig.text,
662
- children: ","
663
- });
664
- if (valueType === "object" || valueType === "array") {
665
- const isObject = valueType === "object";
666
- const entries = isObject ? Object.entries(value) : value.map((v, i) => [i, v]);
667
- const isEmpty = entries.length === 0;
668
- const canExpand = depth < maxDepth && !isEmpty;
669
- const preview = isObject ? "{...}" : "[...]";
670
- const brackets = isObject ? ["{", "}"] : ["[", "]"];
671
- return /* @__PURE__ */ jsxs(Box, { children: [/* @__PURE__ */ jsxs(Box, {
672
- style: {
673
- display: "grid",
674
- gridTemplateColumns: `${iconWidth}px auto`,
675
- alignItems: "center"
676
- },
677
- children: [/* @__PURE__ */ jsx(Box, {
678
- style: {
679
- display: "flex",
680
- justifyContent: "center",
681
- alignItems: "center"
682
- },
683
- children: canExpand && /* @__PURE__ */ jsx(ActionIcon, {
684
- size: "xs",
685
- variant: "transparent",
686
- c: "dimmed",
687
- onClick: () => setExpanded(!expanded),
688
- style: { cursor: "pointer" },
689
- children: expanded ? /* @__PURE__ */ jsx(IconChevronDown, { size: sizeConfig.icon }) : /* @__PURE__ */ jsx(IconChevronRight, { size: sizeConfig.icon })
690
- })
691
- }), /* @__PURE__ */ jsxs(Box, {
692
- style: {
693
- display: "flex",
694
- alignItems: "center",
695
- gap: sizeConfig.gap
696
- },
697
- children: [
698
- renderKey(),
699
- name !== void 0 && /* @__PURE__ */ jsx(Text$1, {
700
- component: "span",
701
- c: "dimmed",
702
- ff: "monospace",
703
- size: sizeConfig.text,
704
- children: ":"
705
- }),
706
- /* @__PURE__ */ jsx(Text$1, {
707
- component: "span",
708
- c: "dimmed",
709
- ff: "monospace",
710
- size: sizeConfig.text,
711
- children: brackets[0]
712
- }),
713
- !expanded && !isEmpty && /* @__PURE__ */ jsx(Text$1, {
714
- component: "span",
715
- c: "dimmed",
716
- ff: "monospace",
717
- fs: "italic",
718
- size: sizeConfig.text,
719
- children: preview
720
- }),
721
- (isEmpty || !expanded) && /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx(Text$1, {
722
- component: "span",
723
- c: "dimmed",
724
- ff: "monospace",
725
- size: sizeConfig.text,
726
- children: brackets[1]
727
- }), comma] }),
728
- !isEmpty && !expanded && /* @__PURE__ */ jsxs(Text$1, {
729
- component: "span",
730
- c: "dimmed",
731
- size: sizeConfig.text,
732
- children: [
733
- entries.length,
734
- " ",
735
- entries.length === 1 ? "item" : "items"
736
- ]
737
- })
738
- ]
739
- })]
740
- }), /* @__PURE__ */ jsxs(Collapse, {
741
- in: expanded && canExpand,
742
- children: [/* @__PURE__ */ jsx(Box, {
743
- pl: sizeConfig.indent,
744
- ml: iconWidth / 2,
745
- style: { borderLeft: "1px solid var(--mantine-color-default-border)" },
746
- children: entries.map(([key, val], index) => /* @__PURE__ */ jsx(JsonNode, {
747
- name: String(key),
748
- value: val,
749
- depth: depth + 1,
750
- maxDepth,
751
- isLast: index === entries.length - 1,
752
- isArrayItem: !isObject,
753
- size,
754
- iconWidth
755
- }, String(key)))
756
- }), /* @__PURE__ */ jsxs(Box, {
757
- style: {
758
- display: "grid",
759
- gridTemplateColumns: `${iconWidth}px auto`
760
- },
761
- children: [/* @__PURE__ */ jsx(Box, {}), /* @__PURE__ */ jsxs(Box, {
762
- style: {
763
- display: "flex",
764
- gap: sizeConfig.gap
765
- },
766
- children: [/* @__PURE__ */ jsx(Text$1, {
767
- c: "dimmed",
768
- ff: "monospace",
769
- size: sizeConfig.text,
770
- children: brackets[1]
771
- }), comma]
772
- })]
773
- })]
774
- })] });
775
- }
776
- return /* @__PURE__ */ jsxs(Box, {
777
- style: {
778
- display: "grid",
779
- gridTemplateColumns: `${iconWidth}px auto`,
780
- alignItems: "center"
781
- },
782
- children: [/* @__PURE__ */ jsx(Box, {}), /* @__PURE__ */ jsxs(Box, {
783
- style: {
784
- display: "flex",
785
- alignItems: "center",
786
- gap: sizeConfig.gap
787
- },
788
- children: [
789
- renderKey(),
790
- name !== void 0 && /* @__PURE__ */ jsx(Text$1, {
791
- component: "span",
792
- c: "dimmed",
793
- ff: "monospace",
794
- size: sizeConfig.text,
795
- children: ":"
796
- }),
797
- renderPrimitive(value),
798
- comma
799
- ]
800
- })]
801
- });
802
- };
803
- const JsonViewer = ({ data, defaultExpanded = true, maxDepth = 10, copyable = true, size = "sm" }) => {
804
- const sizeConfig = getSizeConfig(size);
805
- const copyIconSize = sizeConfig.icon + 2;
806
- return /* @__PURE__ */ jsxs(Box, {
807
- pos: "relative",
808
- w: "100%",
809
- children: [copyable && /* @__PURE__ */ jsx(Box, {
810
- pos: "absolute",
811
- top: 0,
812
- right: 0,
813
- style: { zIndex: 1 },
814
- children: /* @__PURE__ */ jsx(CopyButton, {
815
- value: JSON.stringify(data, null, 2),
816
- children: ({ copied, copy }) => /* @__PURE__ */ jsx(Tooltip, {
817
- label: copied ? "Copied" : "Copy JSON",
818
- children: /* @__PURE__ */ jsx(ActionIcon, {
819
- color: copied ? "teal" : "gray",
820
- variant: "subtle",
821
- onClick: copy,
822
- size,
823
- children: copied ? /* @__PURE__ */ jsx(IconCheck, { size: copyIconSize }) : /* @__PURE__ */ jsx(IconCopy, { size: copyIconSize })
824
- })
825
- })
826
- })
827
- }), /* @__PURE__ */ jsx(Box, {
828
- pt: copyable ? 30 : 0,
829
- style: { overflowX: "auto" },
830
- children: /* @__PURE__ */ jsx(JsonNode, {
831
- value: data,
832
- depth: 0,
833
- maxDepth,
834
- size,
835
- iconWidth: sizeConfig.iconWidth
836
- })
837
- })]
838
- });
839
- };
840
- var JsonViewer_default = JsonViewer;
841
-
842
552
  //#endregion
843
553
  //#region ../../src/core/components/dialogs/AlertDialog.tsx
844
554
  const AlertDialog = ({ options, onClose }) => /* @__PURE__ */ jsxs(Fragment, { children: [options?.message && /* @__PURE__ */ jsx(Text$1, {
@@ -1009,27 +719,6 @@ var DialogService = class {
1009
719
  else modals.closeAll();
1010
720
  }
1011
721
  /**
1012
- * Show a JSON editor/viewer dialog
1013
- */
1014
- json(data, options) {
1015
- this.open({
1016
- size: "lg",
1017
- title: options?.title || "Json Viewer",
1018
- ...options,
1019
- content: /* @__PURE__ */ jsx(Flex$1, {
1020
- bdrs: "md",
1021
- w: "100%",
1022
- flex: 1,
1023
- p: "sm",
1024
- bg: ui.colors.surface,
1025
- children: /* @__PURE__ */ jsx(JsonViewer_default, {
1026
- size: "xs",
1027
- data
1028
- })
1029
- })
1030
- });
1031
- }
1032
- /**
1033
722
  * Show an error viewer dialog
1034
723
  */
1035
724
  error(error, options) {
@@ -1937,27 +1626,34 @@ const ControlNumber = (props) => {
1937
1626
  } }, [props.input]);
1938
1627
  if (!props.input?.props) return null;
1939
1628
  const { type, ...inputPropsWithoutType } = props.input.props;
1940
- if (props.sliderProps) return /* @__PURE__ */ jsx(Input.Wrapper, {
1941
- ...inputProps,
1942
- children: /* @__PURE__ */ jsx("div", {
1943
- style: {
1944
- height: 32,
1945
- padding: 8
1946
- },
1947
- children: /* @__PURE__ */ jsx(Slider, {
1948
- ...inputProps,
1949
- ref,
1950
- id,
1951
- ...inputPropsWithoutType,
1952
- ...props.sliderProps,
1953
- value,
1954
- onChange: (val) => {
1955
- setValue(val);
1956
- props.input.set(val);
1957
- }
1629
+ if (props.sliderProps) {
1630
+ const min = props.sliderProps.min ?? inputProps.minimum ?? 0;
1631
+ const max = props.sliderProps.max ?? inputProps.maximum ?? 100;
1632
+ return /* @__PURE__ */ jsx(Input.Wrapper, {
1633
+ ...inputProps,
1634
+ children: /* @__PURE__ */ jsx("div", {
1635
+ style: {
1636
+ height: 32,
1637
+ padding: 8
1638
+ },
1639
+ children: /* @__PURE__ */ jsx(Slider, {
1640
+ ...inputProps,
1641
+ ref,
1642
+ id,
1643
+ ...inputPropsWithoutType,
1644
+ ...props.sliderProps,
1645
+ value,
1646
+ min,
1647
+ max,
1648
+ label: () => value,
1649
+ onChange: (val) => {
1650
+ setValue(val);
1651
+ props.input.set(val);
1652
+ }
1653
+ })
1958
1654
  })
1959
- })
1960
- });
1655
+ });
1656
+ }
1961
1657
  return /* @__PURE__ */ jsx(NumberInput, {
1962
1658
  ...inputProps,
1963
1659
  ref,
@@ -2599,6 +2295,7 @@ const Control = (_props) => {
2599
2295
  }
2600
2296
  if (props.number || props.input.schema && "type" in props.input.schema && (props.input.schema.type === "number" || props.input.schema.type === "integer")) {
2601
2297
  const controlNumberProps = typeof props.number === "object" ? props.number : {};
2298
+ if (props.slider) controlNumberProps.sliderProps ??= {};
2602
2299
  return /* @__PURE__ */ jsx(ControlNumber_default, {
2603
2300
  input: props.input,
2604
2301
  title: props.title,
@@ -2631,6 +2328,7 @@ const Control = (_props) => {
2631
2328
  }
2632
2329
  if (props.input.schema && "enum" in props.input.schema && props.input.schema.enum || isArray && !isArrayOfObjects || props.select) {
2633
2330
  const opts = typeof props.select === "object" ? props.select : {};
2331
+ if (props.segmented) opts.segmented ??= {};
2634
2332
  return /* @__PURE__ */ jsx(ControlSelect_default, {
2635
2333
  input: props.input,
2636
2334
  title: props.title,
@@ -2647,7 +2345,9 @@ const Control = (_props) => {
2647
2345
  id,
2648
2346
  color: "blue",
2649
2347
  defaultChecked: props.input.props.defaultValue,
2650
- ...props.input.props,
2348
+ onChange: (event) => {
2349
+ props.input.set(event.currentTarget.checked);
2350
+ },
2651
2351
  ...switchProps
2652
2352
  });
2653
2353
  }
@@ -2777,7 +2477,7 @@ var Control_default = Control;
2777
2477
  * ```
2778
2478
  */
2779
2479
  const TypeForm = (props) => {
2780
- const { form, columns = 3, children, controlProps, fieldControlProps, skipFormElement = false, skipSubmitButton = false, submitButtonProps } = props;
2480
+ const { form, columns = 3, children, controlProps, fieldControlProps, skipFormElement = false, skipSubmitButton = false, submitButtonProps, fill = true } = props;
2781
2481
  const schema = props.schema || form.options.schema;
2782
2482
  if (!schema?.properties) return null;
2783
2483
  const supportedFields = Object.keys(schema.properties);
@@ -2818,7 +2518,7 @@ const TypeForm = (props) => {
2818
2518
  const content = /* @__PURE__ */ jsxs(Flex$1, {
2819
2519
  direction: "column",
2820
2520
  gap: "sm",
2821
- flex: props.fill ? 1 : void 0,
2521
+ flex: fill ? 1 : void 0,
2822
2522
  ...props.flexProps,
2823
2523
  children: [/* @__PURE__ */ jsx(Flex$1, {
2824
2524
  direction: "column",
@@ -2854,7 +2554,7 @@ const TypeForm = (props) => {
2854
2554
  if (skipFormElement) return content;
2855
2555
  return /* @__PURE__ */ jsx(Flex$1, {
2856
2556
  component: "form",
2857
- flex: props.fill ? 1 : void 0,
2557
+ flex: fill ? 1 : void 0,
2858
2558
  ...form.props,
2859
2559
  ...props.flexProps,
2860
2560
  children: content
@@ -2937,7 +2637,7 @@ var ToggleSidebarButton_default = ToggleSidebarButton;
2937
2637
  //#region ../../src/core/components/layout/Sidebar.tsx
2938
2638
  const Sidebar = (props) => {
2939
2639
  const router = useRouter();
2940
- const { top = [], bottom = [], onItemClick } = props;
2640
+ const { onItemClick } = props;
2941
2641
  const renderNode = (item, key) => {
2942
2642
  if ("type" in item) {
2943
2643
  if (item.type === "spacer") return /* @__PURE__ */ jsx(Flex$1, { h: 16 }, key);
@@ -2982,11 +2682,10 @@ const Sidebar = (props) => {
2982
2682
  }, key);
2983
2683
  };
2984
2684
  const getSidebarNodes = () => {
2985
- if (props.menu) return props.menu;
2685
+ if (props.items) return props.items;
2986
2686
  if (props.autoPopulateMenu) {
2987
- const items = router.concretePages.map((page) => ({
2687
+ const items = router.concretePages.filter((page) => !page.can || page.can()).map((page) => ({
2988
2688
  label: page.label ?? page.name,
2989
- description: page.description?.slice(0, 32),
2990
2689
  icon: renderIcon(page.icon),
2991
2690
  href: router.path(page.name)
2992
2691
  }));
@@ -2994,11 +2693,12 @@ const Sidebar = (props) => {
2994
2693
  const startsWith = props.autoPopulateMenu.startsWith;
2995
2694
  return items.filter((item) => item.href?.startsWith(startsWith));
2996
2695
  }
2696
+ return items;
2997
2697
  }
2998
2698
  return [];
2999
2699
  };
3000
2700
  const padding = "md";
3001
- const gap = props.menu ? props.gap : "xs";
2701
+ const gap = props.items ? props.gap : "xs";
3002
2702
  const menu = useMemo(() => getSidebarNodes(), []);
3003
2703
  return /* @__PURE__ */ jsxs(Flex$1, {
3004
2704
  flex: 1,
@@ -3007,11 +2707,11 @@ const Sidebar = (props) => {
3007
2707
  className: "overflow-auto",
3008
2708
  ...props.flexProps,
3009
2709
  children: [
3010
- /* @__PURE__ */ jsxs(Flex$1, {
2710
+ /* @__PURE__ */ jsx(Flex$1, {
3011
2711
  gap,
3012
2712
  px: padding,
3013
2713
  direction: "column",
3014
- children: [top.map((item, index) => renderNode(item, index)), menu.filter((it) => it.position === "top").map((item, index) => renderNode(item, index + top.length))]
2714
+ children: menu.filter((it) => it.position === "top").map((item, index) => renderNode(item, index))
3015
2715
  }),
3016
2716
  /* @__PURE__ */ jsx(Flex$1, {
3017
2717
  gap,
@@ -3021,11 +2721,11 @@ const Sidebar = (props) => {
3021
2721
  className: "overflow-auto",
3022
2722
  children: menu.filter((it) => !it.position).map((item, index) => renderNode(item, index))
3023
2723
  }),
3024
- /* @__PURE__ */ jsxs(Flex$1, {
2724
+ /* @__PURE__ */ jsx(Flex$1, {
3025
2725
  gap,
3026
2726
  px: padding,
3027
2727
  direction: "column",
3028
- children: [bottom.map((item, index) => renderNode(item, index)), menu.filter((it) => it.position === "bottom").map((item, index) => renderNode(item, index + bottom.length))]
2728
+ children: menu.filter((it) => it.position === "bottom").map((item, index) => renderNode(item, index))
3029
2729
  })
3030
2730
  ]
3031
2731
  });
@@ -3941,5 +3641,5 @@ const AlephaUI = $module({
3941
3641
  });
3942
3642
 
3943
3643
  //#endregion
3944
- export { ActionButton_default as ActionButton, AdminShell_default as AdminShell, AlephaMantineProvider_default as AlephaMantineProvider, AlephaUI, AlertDialog_default as AlertDialog, AppBar_default as AppBar, BurgerButton_default as BurgerButton, ClipboardButton_default as ClipboardButton, ConfirmDialog_default as ConfirmDialog, Control_default as Control, ControlArray_default as ControlArray, ControlDate_default as ControlDate, ControlNumber_default as ControlNumber, ControlObject_default as ControlObject, ControlQueryBuilder_default as ControlQueryBuilder, ControlSelect_default as ControlSelect, DarkModeButton_default as DarkModeButton, DataTable_default as DataTable, DialogService, Flex, JsonViewer_default as JsonViewer, LanguageButton_default as LanguageButton, OPERATOR_INFO, Omnibar_default as Omnibar, OmnibarButton_default as OmnibarButton, PromptDialog_default as PromptDialog, RootRouter, Sidebar, Text, ThemeButton_default as ThemeButton, ThemeProvider, ToastService, TypeForm_default as TypeForm, alephaThemeAtom, alephaThemeListAtom, capitalize, defaultTheme, extractSchemaFields, getDefaultIcon, getOperatorsForField, midnightTheme, prettyName, ui, useDialog, useToast };
3644
+ export { ActionButton_default as ActionButton, AdminShell_default as AdminShell, AlephaMantineProvider_default as AlephaMantineProvider, AlephaUI, AlertDialog_default as AlertDialog, AppBar_default as AppBar, BurgerButton_default as BurgerButton, ClipboardButton_default as ClipboardButton, ConfirmDialog_default as ConfirmDialog, Control_default as Control, ControlArray_default as ControlArray, ControlDate_default as ControlDate, ControlNumber_default as ControlNumber, ControlObject_default as ControlObject, ControlQueryBuilder_default as ControlQueryBuilder, ControlSelect_default as ControlSelect, DarkModeButton_default as DarkModeButton, DataTable_default as DataTable, DialogService, Flex, LanguageButton_default as LanguageButton, OPERATOR_INFO, Omnibar_default as Omnibar, OmnibarButton_default as OmnibarButton, PromptDialog_default as PromptDialog, RootRouter, Sidebar, Text, ThemeButton_default as ThemeButton, ThemeProvider, ToastService, TypeForm_default as TypeForm, alephaThemeAtom, alephaThemeListAtom, capitalize, defaultTheme, extractSchemaFields, getDefaultIcon, getOperatorsForField, midnightTheme, prettyName, ui, useDialog, useToast };
3945
3645
  //# sourceMappingURL=index.js.map