@alepha/ui 0.13.0 → 0.13.1

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 (117) hide show
  1. package/dist/admin/{AdminFiles-CllAxb1B.js → AdminFiles-BjofP3OC.js} +11 -11
  2. package/dist/admin/AdminFiles-BjofP3OC.js.map +1 -0
  3. package/dist/admin/AdminFiles-DldZB7oo.js +3 -0
  4. package/dist/admin/AdminJobs-BOq6AZOW.js +3 -0
  5. package/dist/admin/{AdminJobs-BXkFtlVo.js → AdminJobs-CDnVxEv6.js} +11 -11
  6. package/dist/admin/AdminJobs-CDnVxEv6.js.map +1 -0
  7. package/dist/admin/AdminLayout-Bgx25J8m.js +3 -0
  8. package/dist/admin/{AdminLayout-CtkVYk-u.js → AdminLayout-CervL8LV.js} +6 -6
  9. package/dist/admin/AdminLayout-CervL8LV.js.map +1 -0
  10. package/dist/admin/AdminNotifications-BDQXt3-e.js +3 -0
  11. package/dist/admin/{AdminNotifications-DnnulNNV.js → AdminNotifications-DvI2989x.js} +6 -6
  12. package/dist/admin/AdminNotifications-DvI2989x.js.map +1 -0
  13. package/dist/admin/{AdminParameters-B3hvpLpu.js → AdminParameters-CWi7crdn.js} +6 -6
  14. package/dist/admin/AdminParameters-CWi7crdn.js.map +1 -0
  15. package/dist/admin/AdminParameters-DKRAVen3.js +3 -0
  16. package/dist/admin/{AdminSessions-Pjdz-iZx.js → AdminSessions-CmDVneE2.js} +11 -11
  17. package/dist/admin/AdminSessions-CmDVneE2.js.map +1 -0
  18. package/dist/admin/AdminSessions-Dkk_fzWK.js +3 -0
  19. package/dist/admin/{AdminUsers-C1HsrRxn.js → AdminUsers-88De5pev.js} +9 -9
  20. package/dist/admin/AdminUsers-88De5pev.js.map +1 -0
  21. package/dist/admin/AdminUsers-oyAXqZ5l.js +3 -0
  22. package/dist/admin/AdminVerifications-D93TKymL.js +3 -0
  23. package/dist/admin/{AdminVerifications-VMpm30mS.js → AdminVerifications-DBVEoqJe.js} +6 -6
  24. package/dist/admin/AdminVerifications-DBVEoqJe.js.map +1 -0
  25. package/dist/admin/index.d.ts +80 -80
  26. package/dist/admin/index.js +17 -17
  27. package/dist/auth/{IconGoogle-Bfmuv9Rv.js → IconGoogle-v_58os2T.js} +1 -1
  28. package/dist/auth/{IconGoogle-Bfmuv9Rv.js.map → IconGoogle-v_58os2T.js.map} +1 -1
  29. package/dist/auth/Login-BC2jTczq.js +4 -0
  30. package/dist/auth/{Login-JeXFsUf5.js → Login-OCrvjs9U.js} +12 -12
  31. package/dist/auth/Login-OCrvjs9U.js.map +1 -0
  32. package/dist/auth/Register-Dh0lsQmI.js +4 -0
  33. package/dist/auth/{Register-CPQnvXCZ.js → Register-Ei34GSba.js} +16 -16
  34. package/dist/auth/Register-Ei34GSba.js.map +1 -0
  35. package/dist/auth/ResetPassword-BnlAQAOE.js +3 -0
  36. package/dist/auth/{ResetPassword-BzUjGG_-.js → ResetPassword-tO0oMzfo.js} +12 -12
  37. package/dist/auth/ResetPassword-tO0oMzfo.js.map +1 -0
  38. package/dist/auth/index.d.ts +413 -830
  39. package/dist/auth/index.js +10 -10
  40. package/dist/auth/index.js.map +1 -1
  41. package/dist/core/index.d.ts +70 -70
  42. package/package.json +6 -9
  43. package/dist/admin/AdminFiles-BM6_7_5A.cjs +0 -4
  44. package/dist/admin/AdminFiles-BaCIMeNt.js +0 -4
  45. package/dist/admin/AdminFiles-CllAxb1B.js.map +0 -1
  46. package/dist/admin/AdminFiles-DC3T8uWZ.cjs +0 -122
  47. package/dist/admin/AdminFiles-DC3T8uWZ.cjs.map +0 -1
  48. package/dist/admin/AdminJobs-BXkFtlVo.js.map +0 -1
  49. package/dist/admin/AdminJobs-C428qrNQ.cjs +0 -130
  50. package/dist/admin/AdminJobs-C428qrNQ.cjs.map +0 -1
  51. package/dist/admin/AdminJobs-DCPPaJ4i.cjs +0 -4
  52. package/dist/admin/AdminJobs-yC6DarGO.js +0 -4
  53. package/dist/admin/AdminLayout-Bqo4cd33.cjs +0 -4
  54. package/dist/admin/AdminLayout-CQpxfko6.js +0 -4
  55. package/dist/admin/AdminLayout-CiLlywAQ.cjs +0 -93
  56. package/dist/admin/AdminLayout-CiLlywAQ.cjs.map +0 -1
  57. package/dist/admin/AdminLayout-CtkVYk-u.js.map +0 -1
  58. package/dist/admin/AdminNotifications-DNUeJ-PW.cjs +0 -44
  59. package/dist/admin/AdminNotifications-DNUeJ-PW.cjs.map +0 -1
  60. package/dist/admin/AdminNotifications-DaMu1AQ4.js +0 -4
  61. package/dist/admin/AdminNotifications-DnnulNNV.js.map +0 -1
  62. package/dist/admin/AdminNotifications-ihgbKVCx.cjs +0 -4
  63. package/dist/admin/AdminParameters-B3hvpLpu.js.map +0 -1
  64. package/dist/admin/AdminParameters-U4lU1rUF.cjs +0 -4
  65. package/dist/admin/AdminParameters-gdf7036N.cjs +0 -44
  66. package/dist/admin/AdminParameters-gdf7036N.cjs.map +0 -1
  67. package/dist/admin/AdminParameters-prMcCgxf.js +0 -4
  68. package/dist/admin/AdminSessions-BF_P4lHs.cjs +0 -128
  69. package/dist/admin/AdminSessions-BF_P4lHs.cjs.map +0 -1
  70. package/dist/admin/AdminSessions-CATIU61I.cjs +0 -4
  71. package/dist/admin/AdminSessions-DqOXOpYR.js +0 -4
  72. package/dist/admin/AdminSessions-Pjdz-iZx.js.map +0 -1
  73. package/dist/admin/AdminUsers-BgTL-zSY.js +0 -4
  74. package/dist/admin/AdminUsers-C1HsrRxn.js.map +0 -1
  75. package/dist/admin/AdminUsers-HqvxwNGZ.cjs +0 -4
  76. package/dist/admin/AdminUsers-M2uEQbp5.cjs +0 -109
  77. package/dist/admin/AdminUsers-M2uEQbp5.cjs.map +0 -1
  78. package/dist/admin/AdminVerifications-BVssbtfU.cjs +0 -44
  79. package/dist/admin/AdminVerifications-BVssbtfU.cjs.map +0 -1
  80. package/dist/admin/AdminVerifications-Df6DRgNo.js +0 -4
  81. package/dist/admin/AdminVerifications-DxAtcYUR.cjs +0 -4
  82. package/dist/admin/AdminVerifications-VMpm30mS.js.map +0 -1
  83. package/dist/admin/core-CzO6aavT.js +0 -2507
  84. package/dist/admin/core-CzO6aavT.js.map +0 -1
  85. package/dist/admin/core-aFtK4l9I.cjs +0 -2530
  86. package/dist/admin/core-aFtK4l9I.cjs.map +0 -1
  87. package/dist/admin/index.cjs +0 -87
  88. package/dist/admin/index.cjs.map +0 -1
  89. package/dist/admin/index.d.cts +0 -1739
  90. package/dist/auth/IconGoogle-B17BTQyD.cjs +0 -69
  91. package/dist/auth/IconGoogle-B17BTQyD.cjs.map +0 -1
  92. package/dist/auth/Login-BTBmbnWl.cjs +0 -181
  93. package/dist/auth/Login-BTBmbnWl.cjs.map +0 -1
  94. package/dist/auth/Login-BcQOtG3v.js +0 -5
  95. package/dist/auth/Login-Btmd70Um.cjs +0 -5
  96. package/dist/auth/Login-JeXFsUf5.js.map +0 -1
  97. package/dist/auth/Register-CPQnvXCZ.js.map +0 -1
  98. package/dist/auth/Register-CbesZal3.cjs +0 -5
  99. package/dist/auth/Register-DpI_JdyO.js +0 -5
  100. package/dist/auth/Register-HP3rP71B.cjs +0 -323
  101. package/dist/auth/Register-HP3rP71B.cjs.map +0 -1
  102. package/dist/auth/ResetPassword-B-tkzV7g.cjs +0 -248
  103. package/dist/auth/ResetPassword-B-tkzV7g.cjs.map +0 -1
  104. package/dist/auth/ResetPassword-BlK3xEpU.js +0 -4
  105. package/dist/auth/ResetPassword-BzUjGG_-.js.map +0 -1
  106. package/dist/auth/ResetPassword-W3xjOnWy.cjs +0 -4
  107. package/dist/auth/chunk-DhGyd7sr.js +0 -28
  108. package/dist/auth/core-D1MHij1j.js +0 -1795
  109. package/dist/auth/core-D1MHij1j.js.map +0 -1
  110. package/dist/auth/core-rDZ9d92K.cjs +0 -1824
  111. package/dist/auth/core-rDZ9d92K.cjs.map +0 -1
  112. package/dist/auth/index.cjs +0 -211
  113. package/dist/auth/index.cjs.map +0 -1
  114. package/dist/auth/index.d.cts +0 -6265
  115. package/dist/core/index.cjs +0 -2620
  116. package/dist/core/index.cjs.map +0 -1
  117. package/dist/core/index.d.cts +0 -2737
@@ -1,10 +1,10 @@
1
- import { i as DataTable_default, n as Flex$1, r as Text$1 } from "./core-CzO6aavT.js";
2
- import { useI18n } from "@alepha/react/i18n";
1
+ import { DataTable, Flex, Text } from "@alepha/ui";
3
2
  import { t } from "alepha";
4
3
  import { useClient } from "@alepha/react";
4
+ import { useI18n } from "@alepha/react/i18n";
5
5
  import { Badge } from "@mantine/core";
6
- import { jsx } from "react/jsx-runtime";
7
6
  import { files } from "alepha/api/files";
7
+ import { jsx } from "react/jsx-runtime";
8
8
 
9
9
  //#region src/admin/components/AdminFiles.tsx
10
10
  const AdminFiles = () => {
@@ -30,9 +30,9 @@ const AdminFiles = () => {
30
30
  const i = Math.floor(Math.log(bytes) / Math.log(k));
31
31
  return `${Number.parseFloat((bytes / k ** i).toFixed(1))} ${sizes[i]}`;
32
32
  };
33
- return /* @__PURE__ */ jsx(Flex$1, {
33
+ return /* @__PURE__ */ jsx(Flex, {
34
34
  flex: 1,
35
- children: /* @__PURE__ */ jsx(DataTable_default, {
35
+ children: /* @__PURE__ */ jsx(DataTable, {
36
36
  submitOnInit: true,
37
37
  defaultSize: 10,
38
38
  typeFormProps: {
@@ -53,7 +53,7 @@ const AdminFiles = () => {
53
53
  columns: {
54
54
  name: {
55
55
  label: "Name",
56
- value: (item) => /* @__PURE__ */ jsx(Text$1, {
56
+ value: (item) => /* @__PURE__ */ jsx(Text, {
57
57
  size: "sm",
58
58
  fw: 500,
59
59
  lineClamp: 1,
@@ -73,7 +73,7 @@ const AdminFiles = () => {
73
73
  mimeType: {
74
74
  label: "Type",
75
75
  fit: true,
76
- value: (item) => /* @__PURE__ */ jsx(Text$1, {
76
+ value: (item) => /* @__PURE__ */ jsx(Text, {
77
77
  size: "xs",
78
78
  c: "dimmed",
79
79
  children: item.mimeType
@@ -82,7 +82,7 @@ const AdminFiles = () => {
82
82
  size: {
83
83
  label: "Size",
84
84
  fit: true,
85
- value: (item) => /* @__PURE__ */ jsx(Text$1, {
85
+ value: (item) => /* @__PURE__ */ jsx(Text, {
86
86
  size: "xs",
87
87
  c: "dimmed",
88
88
  children: formatFileSize(item.size)
@@ -91,7 +91,7 @@ const AdminFiles = () => {
91
91
  creatorName: {
92
92
  label: "Creator",
93
93
  fit: true,
94
- value: (item) => /* @__PURE__ */ jsx(Text$1, {
94
+ value: (item) => /* @__PURE__ */ jsx(Text, {
95
95
  size: "xs",
96
96
  c: "dimmed",
97
97
  children: item.creatorName || "-"
@@ -100,7 +100,7 @@ const AdminFiles = () => {
100
100
  createdAt: {
101
101
  label: "Created",
102
102
  fit: true,
103
- value: (item) => /* @__PURE__ */ jsx(Text$1, {
103
+ value: (item) => /* @__PURE__ */ jsx(Text, {
104
104
  size: "xs",
105
105
  c: "dimmed",
106
106
  children: l(item.createdAt, { date: "fromNow" })
@@ -114,4 +114,4 @@ var AdminFiles_default = AdminFiles;
114
114
 
115
115
  //#endregion
116
116
  export { AdminFiles_default as t };
117
- //# sourceMappingURL=AdminFiles-CllAxb1B.js.map
117
+ //# sourceMappingURL=AdminFiles-BjofP3OC.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AdminFiles-BjofP3OC.js","names":["filters"],"sources":["../../src/admin/components/AdminFiles.tsx"],"sourcesContent":["import { useClient } from \"@alepha/react\";\nimport { useI18n } from \"@alepha/react/i18n\";\nimport { DataTable, Flex, Text } from \"@alepha/ui\";\nimport { Badge } from \"@mantine/core\";\nimport { type Page, t } from \"alepha\";\nimport { type FileController, type FileEntity, files } from \"alepha/api/files\";\n\nconst AdminFiles = () => {\n const client = useClient<FileController>();\n const { l } = useI18n();\n\n const filters = t.object({\n bucket: t.optional(t.string()),\n name: t.optional(\n t.string({\n $control: {\n query: t.pick(files.schema, [\"name\", \"bucket\", \"mimeType\"]),\n },\n }),\n ),\n });\n\n const formatFileSize = (bytes: number) => {\n if (bytes === 0) return \"0 B\";\n const k = 1024;\n const sizes = [\"B\", \"KB\", \"MB\", \"GB\"];\n const i = Math.floor(Math.log(bytes) / Math.log(k));\n return `${Number.parseFloat((bytes / k ** i).toFixed(1))} ${sizes[i]}`;\n };\n\n return (\n <Flex flex={1}>\n <DataTable<FileEntity, typeof filters>\n submitOnInit\n defaultSize={10}\n typeFormProps={{\n skipSubmitButton: true,\n columns: 3,\n }}\n tableProps={{\n horizontalSpacing: \"xs\",\n verticalSpacing: \"xs\",\n }}\n onFilterChange={(key, _value, form) => {\n if (key === \"name\" || key === \"bucket\") {\n return form.submit();\n }\n }}\n filters={filters}\n items={async (filters) => {\n const response = await client.findFiles({\n query: filters,\n });\n\n return response as Page<FileEntity>;\n }}\n columns={{\n name: {\n label: \"Name\",\n value: (item) => (\n <Text size=\"sm\" fw={500} lineClamp={1}>\n {item.name}\n </Text>\n ),\n },\n bucket: {\n label: \"Bucket\",\n fit: true,\n value: (item) => (\n <Badge size=\"sm\" variant=\"light\" color=\"blue\">\n {item.bucket}\n </Badge>\n ),\n },\n mimeType: {\n label: \"Type\",\n fit: true,\n value: (item) => (\n <Text size=\"xs\" c=\"dimmed\">\n {item.mimeType}\n </Text>\n ),\n },\n size: {\n label: \"Size\",\n fit: true,\n value: (item) => (\n <Text size=\"xs\" c=\"dimmed\">\n {formatFileSize(item.size)}\n </Text>\n ),\n },\n creatorName: {\n label: \"Creator\",\n fit: true,\n value: (item) => (\n <Text size=\"xs\" c=\"dimmed\">\n {item.creatorName || \"-\"}\n </Text>\n ),\n },\n createdAt: {\n label: \"Created\",\n fit: true,\n value: (item) => (\n <Text size=\"xs\" c=\"dimmed\">\n {l(item.createdAt, { date: \"fromNow\" })}\n </Text>\n ),\n },\n }}\n />\n </Flex>\n );\n};\n\nexport default AdminFiles;\n"],"mappings":";;;;;;;;;AAOA,MAAM,mBAAmB;CACvB,MAAM,SAAS,WAA2B;CAC1C,MAAM,EAAE,MAAM,SAAS;CAEvB,MAAM,UAAU,EAAE,OAAO;EACvB,QAAQ,EAAE,SAAS,EAAE,QAAQ,CAAC;EAC9B,MAAM,EAAE,SACN,EAAE,OAAO,EACP,UAAU,EACR,OAAO,EAAE,KAAK,MAAM,QAAQ;GAAC;GAAQ;GAAU;GAAW,CAAC,EAC5D,EACF,CAAC,CACH;EACF,CAAC;CAEF,MAAM,kBAAkB,UAAkB;AACxC,MAAI,UAAU,EAAG,QAAO;EACxB,MAAM,IAAI;EACV,MAAM,QAAQ;GAAC;GAAK;GAAM;GAAM;GAAK;EACrC,MAAM,IAAI,KAAK,MAAM,KAAK,IAAI,MAAM,GAAG,KAAK,IAAI,EAAE,CAAC;AACnD,SAAO,GAAG,OAAO,YAAY,QAAQ,KAAK,GAAG,QAAQ,EAAE,CAAC,CAAC,GAAG,MAAM;;AAGpE,QACE,oBAAC;EAAK,MAAM;YACV,oBAAC;GACC;GACA,aAAa;GACb,eAAe;IACb,kBAAkB;IAClB,SAAS;IACV;GACD,YAAY;IACV,mBAAmB;IACnB,iBAAiB;IAClB;GACD,iBAAiB,KAAK,QAAQ,SAAS;AACrC,QAAI,QAAQ,UAAU,QAAQ,SAC5B,QAAO,KAAK,QAAQ;;GAGf;GACT,OAAO,OAAO,cAAY;AAKxB,WAJiB,MAAM,OAAO,UAAU,EACtC,OAAOA,WACR,CAAC;;GAIJ,SAAS;IACP,MAAM;KACJ,OAAO;KACP,QAAQ,SACN,oBAAC;MAAK,MAAK;MAAK,IAAI;MAAK,WAAW;gBACjC,KAAK;OACD;KAEV;IACD,QAAQ;KACN,OAAO;KACP,KAAK;KACL,QAAQ,SACN,oBAAC;MAAM,MAAK;MAAK,SAAQ;MAAQ,OAAM;gBACpC,KAAK;OACA;KAEX;IACD,UAAU;KACR,OAAO;KACP,KAAK;KACL,QAAQ,SACN,oBAAC;MAAK,MAAK;MAAK,GAAE;gBACf,KAAK;OACD;KAEV;IACD,MAAM;KACJ,OAAO;KACP,KAAK;KACL,QAAQ,SACN,oBAAC;MAAK,MAAK;MAAK,GAAE;gBACf,eAAe,KAAK,KAAK;OACrB;KAEV;IACD,aAAa;KACX,OAAO;KACP,KAAK;KACL,QAAQ,SACN,oBAAC;MAAK,MAAK;MAAK,GAAE;gBACf,KAAK,eAAe;OAChB;KAEV;IACD,WAAW;KACT,OAAO;KACP,KAAK;KACL,QAAQ,SACN,oBAAC;MAAK,MAAK;MAAK,GAAE;gBACf,EAAE,KAAK,WAAW,EAAE,MAAM,WAAW,CAAC;OAClC;KAEV;IACF;IACD;GACG;;AAIX,yBAAe"}
@@ -0,0 +1,3 @@
1
+ import { t as AdminFiles_default } from "./AdminFiles-BjofP3OC.js";
2
+
3
+ export { AdminFiles_default as default };
@@ -0,0 +1,3 @@
1
+ import { t as AdminJobs_default } from "./AdminJobs-CDnVxEv6.js";
2
+
3
+ export { AdminJobs_default as default };
@@ -1,10 +1,10 @@
1
- import { i as DataTable_default, n as Flex$1, r as Text$1 } from "./core-CzO6aavT.js";
2
- import { useI18n } from "@alepha/react/i18n";
1
+ import { DataTable, Flex, Text } from "@alepha/ui";
3
2
  import { t } from "alepha";
4
3
  import { useClient } from "@alepha/react";
4
+ import { useI18n } from "@alepha/react/i18n";
5
5
  import { Badge } from "@mantine/core";
6
- import { IconCheck, IconClock, IconPlayerPlay, IconX } from "@tabler/icons-react";
7
6
  import { jsx } from "react/jsx-runtime";
7
+ import { IconCheck, IconClock, IconPlayerPlay, IconX } from "@tabler/icons-react";
8
8
  import { jobExecutions } from "alepha/api/jobs";
9
9
 
10
10
  //#region src/admin/components/AdminJobs.tsx
@@ -42,9 +42,9 @@ const AdminJobs = () => {
42
42
  if (duration < 6e4) return `${(duration / 1e3).toFixed(1)}s`;
43
43
  return `${Math.floor(duration / 6e4)}m ${Math.floor(duration % 6e4 / 1e3)}s`;
44
44
  };
45
- return /* @__PURE__ */ jsx(Flex$1, {
45
+ return /* @__PURE__ */ jsx(Flex, {
46
46
  flex: 1,
47
- children: /* @__PURE__ */ jsx(DataTable_default, {
47
+ children: /* @__PURE__ */ jsx(DataTable, {
48
48
  submitOnInit: true,
49
49
  defaultSize: 10,
50
50
  typeFormProps: {
@@ -65,7 +65,7 @@ const AdminJobs = () => {
65
65
  columns: {
66
66
  job: {
67
67
  label: "Job",
68
- value: (item) => /* @__PURE__ */ jsx(Text$1, {
68
+ value: (item) => /* @__PURE__ */ jsx(Text, {
69
69
  size: "sm",
70
70
  fw: 500,
71
71
  children: item.job
@@ -85,7 +85,7 @@ const AdminJobs = () => {
85
85
  duration: {
86
86
  label: "Duration",
87
87
  fit: true,
88
- value: (item) => /* @__PURE__ */ jsx(Text$1, {
88
+ value: (item) => /* @__PURE__ */ jsx(Text, {
89
89
  size: "xs",
90
90
  c: "dimmed",
91
91
  ff: "monospace",
@@ -94,12 +94,12 @@ const AdminJobs = () => {
94
94
  },
95
95
  error: {
96
96
  label: "Error",
97
- value: (item) => item.error ? /* @__PURE__ */ jsx(Text$1, {
97
+ value: (item) => item.error ? /* @__PURE__ */ jsx(Text, {
98
98
  size: "xs",
99
99
  c: "red",
100
100
  lineClamp: 1,
101
101
  children: item.error
102
- }) : /* @__PURE__ */ jsx(Text$1, {
102
+ }) : /* @__PURE__ */ jsx(Text, {
103
103
  size: "xs",
104
104
  c: "dimmed",
105
105
  children: "-"
@@ -108,7 +108,7 @@ const AdminJobs = () => {
108
108
  createdAt: {
109
109
  label: "Started",
110
110
  fit: true,
111
- value: (item) => /* @__PURE__ */ jsx(Text$1, {
111
+ value: (item) => /* @__PURE__ */ jsx(Text, {
112
112
  size: "xs",
113
113
  c: "dimmed",
114
114
  children: l(item.createdAt, { date: "fromNow" })
@@ -122,4 +122,4 @@ var AdminJobs_default = AdminJobs;
122
122
 
123
123
  //#endregion
124
124
  export { AdminJobs_default as t };
125
- //# sourceMappingURL=AdminJobs-BXkFtlVo.js.map
125
+ //# sourceMappingURL=AdminJobs-CDnVxEv6.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AdminJobs-CDnVxEv6.js","names":["filters"],"sources":["../../src/admin/components/AdminJobs.tsx"],"sourcesContent":["import { useClient } from \"@alepha/react\";\nimport { useI18n } from \"@alepha/react/i18n\";\nimport { DataTable, Flex, Text } from \"@alepha/ui\";\nimport { Badge } from \"@mantine/core\";\nimport {\n IconCheck,\n IconClock,\n IconPlayerPlay,\n IconX,\n} from \"@tabler/icons-react\";\nimport { type Page, t } from \"alepha\";\nimport {\n type JobController,\n type JobExecutionEntity,\n jobExecutions,\n} from \"alepha/api/jobs\";\n\nconst AdminJobs = () => {\n const client = useClient<JobController>();\n const { l } = useI18n();\n\n const filters = t.object({\n job: t.optional(\n t.string({\n $control: {\n query: t.pick(jobExecutions.schema, [\"job\"]),\n },\n }),\n ),\n status: t.optional(t.enum([\"STARTED\", \"FAILED\", \"COMPLETED\"])),\n });\n\n const getStatusColor = (status: string) => {\n switch (status) {\n case \"COMPLETED\":\n return \"green\";\n case \"FAILED\":\n return \"red\";\n case \"STARTED\":\n return \"blue\";\n default:\n return \"gray\";\n }\n };\n\n const getStatusIcon = (status: string) => {\n switch (status) {\n case \"COMPLETED\":\n return <IconCheck size={12} />;\n case \"FAILED\":\n return <IconX size={12} />;\n case \"STARTED\":\n return <IconPlayerPlay size={12} />;\n default:\n return <IconClock size={12} />;\n }\n };\n\n const formatDuration = (\n start: Date | string,\n end?: Date | string | null,\n ): string => {\n const startTime = new Date(start).getTime();\n const endTime = end ? new Date(end).getTime() : Date.now();\n const duration = endTime - startTime;\n\n if (duration < 1000) return `${duration}ms`;\n if (duration < 60000) return `${(duration / 1000).toFixed(1)}s`;\n return `${Math.floor(duration / 60000)}m ${Math.floor((duration % 60000) / 1000)}s`;\n };\n\n return (\n <Flex flex={1}>\n <DataTable<JobExecutionEntity, typeof filters>\n submitOnInit\n defaultSize={10}\n typeFormProps={{\n skipSubmitButton: true,\n columns: 3,\n }}\n tableProps={{\n horizontalSpacing: \"xs\",\n verticalSpacing: \"xs\",\n }}\n onFilterChange={(key, _value, form) => {\n if (key === \"job\" || key === \"status\") {\n return form.submit();\n }\n }}\n filters={filters}\n items={async (filters) => {\n const response = await client.getJobExecutions({\n query: filters,\n });\n\n return response as Page<JobExecutionEntity>;\n }}\n columns={{\n job: {\n label: \"Job\",\n value: (item) => (\n <Text size=\"sm\" fw={500}>\n {item.job}\n </Text>\n ),\n },\n status: {\n label: \"Status\",\n fit: true,\n value: (item) => (\n <Badge\n size=\"sm\"\n variant=\"light\"\n color={getStatusColor(item.status)}\n leftSection={getStatusIcon(item.status)}\n >\n {item.status}\n </Badge>\n ),\n },\n duration: {\n label: \"Duration\",\n fit: true,\n value: (item) => (\n <Text size=\"xs\" c=\"dimmed\" ff=\"monospace\">\n {formatDuration(item.createdAt, item.finishedAt)}\n </Text>\n ),\n },\n error: {\n label: \"Error\",\n value: (item) =>\n item.error ? (\n <Text size=\"xs\" c=\"red\" lineClamp={1}>\n {item.error}\n </Text>\n ) : (\n <Text size=\"xs\" c=\"dimmed\">\n -\n </Text>\n ),\n },\n createdAt: {\n label: \"Started\",\n fit: true,\n value: (item) => (\n <Text size=\"xs\" c=\"dimmed\">\n {l(item.createdAt, { date: \"fromNow\" })}\n </Text>\n ),\n },\n }}\n />\n </Flex>\n );\n};\n\nexport default AdminJobs;\n"],"mappings":";;;;;;;;;;AAiBA,MAAM,kBAAkB;CACtB,MAAM,SAAS,WAA0B;CACzC,MAAM,EAAE,MAAM,SAAS;CAEvB,MAAM,UAAU,EAAE,OAAO;EACvB,KAAK,EAAE,SACL,EAAE,OAAO,EACP,UAAU,EACR,OAAO,EAAE,KAAK,cAAc,QAAQ,CAAC,MAAM,CAAC,EAC7C,EACF,CAAC,CACH;EACD,QAAQ,EAAE,SAAS,EAAE,KAAK;GAAC;GAAW;GAAU;GAAY,CAAC,CAAC;EAC/D,CAAC;CAEF,MAAM,kBAAkB,WAAmB;AACzC,UAAQ,QAAR;GACE,KAAK,YACH,QAAO;GACT,KAAK,SACH,QAAO;GACT,KAAK,UACH,QAAO;GACT,QACE,QAAO;;;CAIb,MAAM,iBAAiB,WAAmB;AACxC,UAAQ,QAAR;GACE,KAAK,YACH,QAAO,oBAAC,aAAU,MAAM,KAAM;GAChC,KAAK,SACH,QAAO,oBAAC,SAAM,MAAM,KAAM;GAC5B,KAAK,UACH,QAAO,oBAAC,kBAAe,MAAM,KAAM;GACrC,QACE,QAAO,oBAAC,aAAU,MAAM,KAAM;;;CAIpC,MAAM,kBACJ,OACA,QACW;EACX,MAAM,YAAY,IAAI,KAAK,MAAM,CAAC,SAAS;EAE3C,MAAM,YADU,MAAM,IAAI,KAAK,IAAI,CAAC,SAAS,GAAG,KAAK,KAAK,IAC/B;AAE3B,MAAI,WAAW,IAAM,QAAO,GAAG,SAAS;AACxC,MAAI,WAAW,IAAO,QAAO,IAAI,WAAW,KAAM,QAAQ,EAAE,CAAC;AAC7D,SAAO,GAAG,KAAK,MAAM,WAAW,IAAM,CAAC,IAAI,KAAK,MAAO,WAAW,MAAS,IAAK,CAAC;;AAGnF,QACE,oBAAC;EAAK,MAAM;YACV,oBAAC;GACC;GACA,aAAa;GACb,eAAe;IACb,kBAAkB;IAClB,SAAS;IACV;GACD,YAAY;IACV,mBAAmB;IACnB,iBAAiB;IAClB;GACD,iBAAiB,KAAK,QAAQ,SAAS;AACrC,QAAI,QAAQ,SAAS,QAAQ,SAC3B,QAAO,KAAK,QAAQ;;GAGf;GACT,OAAO,OAAO,cAAY;AAKxB,WAJiB,MAAM,OAAO,iBAAiB,EAC7C,OAAOA,WACR,CAAC;;GAIJ,SAAS;IACP,KAAK;KACH,OAAO;KACP,QAAQ,SACN,oBAAC;MAAK,MAAK;MAAK,IAAI;gBACjB,KAAK;OACD;KAEV;IACD,QAAQ;KACN,OAAO;KACP,KAAK;KACL,QAAQ,SACN,oBAAC;MACC,MAAK;MACL,SAAQ;MACR,OAAO,eAAe,KAAK,OAAO;MAClC,aAAa,cAAc,KAAK,OAAO;gBAEtC,KAAK;OACA;KAEX;IACD,UAAU;KACR,OAAO;KACP,KAAK;KACL,QAAQ,SACN,oBAAC;MAAK,MAAK;MAAK,GAAE;MAAS,IAAG;gBAC3B,eAAe,KAAK,WAAW,KAAK,WAAW;OAC3C;KAEV;IACD,OAAO;KACL,OAAO;KACP,QAAQ,SACN,KAAK,QACH,oBAAC;MAAK,MAAK;MAAK,GAAE;MAAM,WAAW;gBAChC,KAAK;OACD,GAEP,oBAAC;MAAK,MAAK;MAAK,GAAE;gBAAS;OAEpB;KAEZ;IACD,WAAW;KACT,OAAO;KACP,KAAK;KACL,QAAQ,SACN,oBAAC;MAAK,MAAK;MAAK,GAAE;gBACf,EAAE,KAAK,WAAW,EAAE,MAAM,WAAW,CAAC;OAClC;KAEV;IACF;IACD;GACG;;AAIX,wBAAe"}
@@ -0,0 +1,3 @@
1
+ import { t as AdminLayout_default } from "./AdminLayout-CervL8LV.js";
2
+
3
+ export { AdminLayout_default as default };
@@ -1,13 +1,13 @@
1
- import { a as AdminShell_default, o as AlephaMantineProvider_default } from "./core-CzO6aavT.js";
1
+ import { AdminShell, AlephaMantineProvider } from "@alepha/ui";
2
2
  import { NestedView, useRouter } from "@alepha/react";
3
- import { Flex } from "@mantine/core";
4
- import { IconChecklist, IconFileDatabase, IconJumpRope, IconMail, IconSettings, IconShield, IconTruckDelivery, IconUser } from "@tabler/icons-react";
3
+ import { Flex as Flex$1 } from "@mantine/core";
5
4
  import { jsx } from "react/jsx-runtime";
5
+ import { IconChecklist, IconFileDatabase, IconJumpRope, IconMail, IconSettings, IconShield, IconTruckDelivery, IconUser } from "@tabler/icons-react";
6
6
 
7
7
  //#region src/admin/components/AdminLayout.tsx
8
8
  const AdminLayout = () => {
9
9
  const router = useRouter();
10
- return /* @__PURE__ */ jsx(AlephaMantineProvider_default, { children: /* @__PURE__ */ jsx(AdminShell_default, {
10
+ return /* @__PURE__ */ jsx(AlephaMantineProvider, { children: /* @__PURE__ */ jsx(AdminShell, {
11
11
  appShellMainProps: { bg: "var(--alepha-background)" },
12
12
  appShellHeaderProps: { bg: "var(--alepha-background)" },
13
13
  appShellNavbarProps: { bg: "var(--alepha-background)" },
@@ -69,7 +69,7 @@ const AdminLayout = () => {
69
69
  icon: IconFileDatabase
70
70
  }
71
71
  ] },
72
- children: /* @__PURE__ */ jsx(Flex, {
72
+ children: /* @__PURE__ */ jsx(Flex$1, {
73
73
  flex: 1,
74
74
  p: "lg",
75
75
  mt: -16,
@@ -85,4 +85,4 @@ var AdminLayout_default = AdminLayout;
85
85
 
86
86
  //#endregion
87
87
  export { AdminLayout_default as t };
88
- //# sourceMappingURL=AdminLayout-CtkVYk-u.js.map
88
+ //# sourceMappingURL=AdminLayout-CervL8LV.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AdminLayout-CervL8LV.js","names":["Flex"],"sources":["../../src/admin/components/AdminLayout.tsx"],"sourcesContent":["import { NestedView, useRouter } from \"@alepha/react\";\nimport { AdminShell, AlephaMantineProvider } from \"@alepha/ui\";\nimport { Flex } from \"@mantine/core\";\nimport {\n IconChecklist,\n IconFileDatabase,\n IconJumpRope,\n IconMail,\n IconSettings,\n IconShield,\n IconTruckDelivery,\n IconUser,\n} from \"@tabler/icons-react\";\nimport type { AdminRouter } from \"../AdminRouter.ts\";\n\nconst AdminLayout = () => {\n const router = useRouter<AdminRouter>();\n return (\n <AlephaMantineProvider>\n <AdminShell\n appShellMainProps={{\n bg: \"var(--alepha-background)\",\n }}\n appShellHeaderProps={{\n bg: \"var(--alepha-background)\",\n }}\n appShellNavbarProps={{\n bg: \"var(--alepha-background)\",\n }}\n appShellProps={{\n withBorder: false,\n }}\n appBarProps={{\n items: [\n {\n type: \"search\",\n position: \"center\",\n },\n {\n type: \"dark\",\n position: \"right\",\n },\n ],\n }}\n sidebarProps={{\n menu: [\n {\n type: \"section\",\n label: \"Management\",\n },\n {\n icon: IconUser,\n label: \"Users\",\n href: router.path(\"adminUsers\"),\n },\n {\n icon: IconMail,\n label: \"Notifications\",\n href: router.path(\"adminNotifications\"),\n },\n {\n icon: IconShield,\n label: \"Sessions\",\n href: router.path(\"adminSessions\"),\n },\n {\n icon: IconChecklist,\n label: \"Verifications\",\n href: router.path(\"adminVerifications\"),\n },\n {\n type: \"section\",\n label: \"System\",\n },\n {\n label: \"Jobs\",\n href: router.path(\"adminJobs\"),\n icon: IconTruckDelivery,\n },\n {\n label: \"Workflows\",\n href: router.path(\"adminWorkflows\"),\n icon: IconJumpRope,\n },\n {\n label: \"Parameters\",\n href: router.path(\"adminParameters\"),\n icon: IconSettings,\n },\n {\n label: \"Files\",\n href: router.path(\"adminFiles\"),\n icon: IconFileDatabase,\n },\n ],\n }}\n >\n <Flex\n flex={1}\n p={\"lg\"}\n mt={-16}\n ml={-16}\n bg={\"var(--alepha-surface)\"}\n bdrs={\"lg\"}\n bd={\"1px solid var(--alepha-border)\"}\n >\n <NestedView />\n </Flex>\n </AdminShell>\n </AlephaMantineProvider>\n );\n};\n\nexport default AdminLayout;\n"],"mappings":";;;;;;;AAeA,MAAM,oBAAoB;CACxB,MAAM,SAAS,WAAwB;AACvC,QACE,oBAAC,mCACC,oBAAC;EACC,mBAAmB,EACjB,IAAI,4BACL;EACD,qBAAqB,EACnB,IAAI,4BACL;EACD,qBAAqB,EACnB,IAAI,4BACL;EACD,eAAe,EACb,YAAY,OACb;EACD,aAAa,EACX,OAAO,CACL;GACE,MAAM;GACN,UAAU;GACX,EACD;GACE,MAAM;GACN,UAAU;GACX,CACF,EACF;EACD,cAAc,EACZ,MAAM;GACJ;IACE,MAAM;IACN,OAAO;IACR;GACD;IACE,MAAM;IACN,OAAO;IACP,MAAM,OAAO,KAAK,aAAa;IAChC;GACD;IACE,MAAM;IACN,OAAO;IACP,MAAM,OAAO,KAAK,qBAAqB;IACxC;GACD;IACE,MAAM;IACN,OAAO;IACP,MAAM,OAAO,KAAK,gBAAgB;IACnC;GACD;IACE,MAAM;IACN,OAAO;IACP,MAAM,OAAO,KAAK,qBAAqB;IACxC;GACD;IACE,MAAM;IACN,OAAO;IACR;GACD;IACE,OAAO;IACP,MAAM,OAAO,KAAK,YAAY;IAC9B,MAAM;IACP;GACD;IACE,OAAO;IACP,MAAM,OAAO,KAAK,iBAAiB;IACnC,MAAM;IACP;GACD;IACE,OAAO;IACP,MAAM,OAAO,KAAK,kBAAkB;IACpC,MAAM;IACP;GACD;IACE,OAAO;IACP,MAAM,OAAO,KAAK,aAAa;IAC/B,MAAM;IACP;GACF,EACF;YAED,oBAACA;GACC,MAAM;GACN,GAAG;GACH,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,MAAM;GACN,IAAI;aAEJ,oBAAC,eAAa;IACT;GACI,GACS;;AAI5B,0BAAe"}
@@ -0,0 +1,3 @@
1
+ import { t as AdminNotifications_default } from "./AdminNotifications-DvI2989x.js";
2
+
3
+ export { AdminNotifications_default as default };
@@ -1,11 +1,11 @@
1
- import { n as Flex$1, r as Text$1 } from "./core-CzO6aavT.js";
1
+ import { Flex, Text } from "@alepha/ui";
2
2
  import { Stack } from "@mantine/core";
3
- import { IconBell } from "@tabler/icons-react";
4
3
  import { jsx, jsxs } from "react/jsx-runtime";
4
+ import { IconBell } from "@tabler/icons-react";
5
5
 
6
6
  //#region src/admin/components/AdminNotifications.tsx
7
7
  const AdminNotifications = () => {
8
- return /* @__PURE__ */ jsx(Flex$1, {
8
+ return /* @__PURE__ */ jsx(Flex, {
9
9
  flex: 1,
10
10
  justify: "center",
11
11
  align: "center",
@@ -18,11 +18,11 @@ const AdminNotifications = () => {
18
18
  stroke: 1.5,
19
19
  color: "var(--mantine-color-dimmed)"
20
20
  }),
21
- /* @__PURE__ */ jsx(Text$1, {
21
+ /* @__PURE__ */ jsx(Text, {
22
22
  c: "dimmed",
23
23
  children: "Notification Center"
24
24
  }),
25
- /* @__PURE__ */ jsx(Text$1, {
25
+ /* @__PURE__ */ jsx(Text, {
26
26
  size: "xs",
27
27
  c: "dimmed",
28
28
  ta: "center",
@@ -37,4 +37,4 @@ var AdminNotifications_default = AdminNotifications;
37
37
 
38
38
  //#endregion
39
39
  export { AdminNotifications_default as t };
40
- //# sourceMappingURL=AdminNotifications-DnnulNNV.js.map
40
+ //# sourceMappingURL=AdminNotifications-DvI2989x.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AdminNotifications-DvI2989x.js","names":[],"sources":["../../src/admin/components/AdminNotifications.tsx"],"sourcesContent":["import { Flex, Text } from \"@alepha/ui\";\nimport { Stack } from \"@mantine/core\";\nimport { IconBell } from \"@tabler/icons-react\";\n\nconst AdminNotifications = () => {\n return (\n <Flex flex={1} justify=\"center\" align=\"center\">\n <Stack align=\"center\" gap=\"xs\">\n <IconBell size={48} stroke={1.5} color=\"var(--mantine-color-dimmed)\" />\n <Text c=\"dimmed\">Notification Center</Text>\n <Text size=\"xs\" c=\"dimmed\" ta=\"center\" maw={400}>\n Notifications are processed through the queue system. Email and SMS\n notifications are sent asynchronously using the configured providers.\n </Text>\n </Stack>\n </Flex>\n );\n};\n\nexport default AdminNotifications;\n"],"mappings":";;;;;;AAIA,MAAM,2BAA2B;AAC/B,QACE,oBAAC;EAAK,MAAM;EAAG,SAAQ;EAAS,OAAM;YACpC,qBAAC;GAAM,OAAM;GAAS,KAAI;;IACxB,oBAAC;KAAS,MAAM;KAAI,QAAQ;KAAK,OAAM;MAAgC;IACvE,oBAAC;KAAK,GAAE;eAAS;MAA0B;IAC3C,oBAAC;KAAK,MAAK;KAAK,GAAE;KAAS,IAAG;KAAS,KAAK;eAAK;MAG1C;;IACD;GACH;;AAIX,iCAAe"}
@@ -1,11 +1,11 @@
1
- import { n as Flex$1, r as Text$1 } from "./core-CzO6aavT.js";
1
+ import { Flex, Text } from "@alepha/ui";
2
2
  import { Stack } from "@mantine/core";
3
- import { IconSettings } from "@tabler/icons-react";
4
3
  import { jsx, jsxs } from "react/jsx-runtime";
4
+ import { IconSettings } from "@tabler/icons-react";
5
5
 
6
6
  //#region src/admin/components/AdminParameters.tsx
7
7
  const AdminParameters = () => {
8
- return /* @__PURE__ */ jsx(Flex$1, {
8
+ return /* @__PURE__ */ jsx(Flex, {
9
9
  flex: 1,
10
10
  justify: "center",
11
11
  align: "center",
@@ -18,11 +18,11 @@ const AdminParameters = () => {
18
18
  stroke: 1.5,
19
19
  color: "var(--mantine-color-dimmed)"
20
20
  }),
21
- /* @__PURE__ */ jsx(Text$1, {
21
+ /* @__PURE__ */ jsx(Text, {
22
22
  c: "dimmed",
23
23
  children: "Parameter Management"
24
24
  }),
25
- /* @__PURE__ */ jsx(Text$1, {
25
+ /* @__PURE__ */ jsx(Text, {
26
26
  size: "xs",
27
27
  c: "dimmed",
28
28
  ta: "center",
@@ -37,4 +37,4 @@ var AdminParameters_default = AdminParameters;
37
37
 
38
38
  //#endregion
39
39
  export { AdminParameters_default as t };
40
- //# sourceMappingURL=AdminParameters-B3hvpLpu.js.map
40
+ //# sourceMappingURL=AdminParameters-CWi7crdn.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AdminParameters-CWi7crdn.js","names":[],"sources":["../../src/admin/components/AdminParameters.tsx"],"sourcesContent":["import { Flex, Text } from \"@alepha/ui\";\nimport { Stack } from \"@mantine/core\";\nimport { IconSettings } from \"@tabler/icons-react\";\n\nconst AdminParameters = () => {\n return (\n <Flex flex={1} justify=\"center\" align=\"center\">\n <Stack align=\"center\" gap=\"xs\">\n <IconSettings\n size={48}\n stroke={1.5}\n color=\"var(--mantine-color-dimmed)\"\n />\n <Text c=\"dimmed\">Parameter Management</Text>\n <Text size=\"xs\" c=\"dimmed\" ta=\"center\" maw={400}>\n Application parameters and configuration settings. Define parameters\n using the $config descriptor to manage dynamic application settings.\n </Text>\n </Stack>\n </Flex>\n );\n};\n\nexport default AdminParameters;\n"],"mappings":";;;;;;AAIA,MAAM,wBAAwB;AAC5B,QACE,oBAAC;EAAK,MAAM;EAAG,SAAQ;EAAS,OAAM;YACpC,qBAAC;GAAM,OAAM;GAAS,KAAI;;IACxB,oBAAC;KACC,MAAM;KACN,QAAQ;KACR,OAAM;MACN;IACF,oBAAC;KAAK,GAAE;eAAS;MAA2B;IAC5C,oBAAC;KAAK,MAAK;KAAK,GAAE;KAAS,IAAG;KAAS,KAAK;eAAK;MAG1C;;IACD;GACH;;AAIX,8BAAe"}
@@ -0,0 +1,3 @@
1
+ import { t as AdminParameters_default } from "./AdminParameters-CWi7crdn.js";
2
+
3
+ export { AdminParameters_default as default };
@@ -1,10 +1,10 @@
1
- import { i as DataTable_default, n as Flex$1, r as Text$1 } from "./core-CzO6aavT.js";
2
- import { useI18n } from "@alepha/react/i18n";
1
+ import { DataTable, Flex, Text } from "@alepha/ui";
3
2
  import { t } from "alepha";
4
3
  import { useClient } from "@alepha/react";
4
+ import { useI18n } from "@alepha/react/i18n";
5
5
  import { Badge, Group } from "@mantine/core";
6
- import { IconDeviceDesktop, IconDeviceMobile, IconDeviceTablet } from "@tabler/icons-react";
7
6
  import { Fragment, jsx, jsxs } from "react/jsx-runtime";
7
+ import { IconDeviceDesktop, IconDeviceMobile, IconDeviceTablet } from "@tabler/icons-react";
8
8
  import { sessions } from "alepha/api/users";
9
9
 
10
10
  //#region src/admin/components/AdminSessions.tsx
@@ -22,9 +22,9 @@ const AdminSessions = (props) => {
22
22
  const isExpired = (expiresAt) => {
23
23
  return new Date(expiresAt) < /* @__PURE__ */ new Date();
24
24
  };
25
- return /* @__PURE__ */ jsx(Flex$1, {
25
+ return /* @__PURE__ */ jsx(Flex, {
26
26
  flex: 1,
27
- children: /* @__PURE__ */ jsx(DataTable_default, {
27
+ children: /* @__PURE__ */ jsx(DataTable, {
28
28
  submitOnInit: true,
29
29
  defaultSize: 10,
30
30
  typeFormProps: {
@@ -52,7 +52,7 @@ const AdminSessions = (props) => {
52
52
  columns: {
53
53
  userId: {
54
54
  label: "User ID",
55
- value: (item) => /* @__PURE__ */ jsxs(Text$1, {
55
+ value: (item) => /* @__PURE__ */ jsxs(Text, {
56
56
  size: "xs",
57
57
  ff: "monospace",
58
58
  children: [item.userId.slice(0, 8), "..."]
@@ -68,7 +68,7 @@ const AdminSessions = (props) => {
68
68
  variant: "light",
69
69
  leftSection: getDeviceIcon(item.userAgent.device),
70
70
  children: item.userAgent.device
71
- }), /* @__PURE__ */ jsxs(Text$1, {
71
+ }), /* @__PURE__ */ jsxs(Text, {
72
72
  size: "xs",
73
73
  c: "dimmed",
74
74
  children: [
@@ -76,7 +76,7 @@ const AdminSessions = (props) => {
76
76
  " / ",
77
77
  item.userAgent.os
78
78
  ]
79
- })] }) : /* @__PURE__ */ jsx(Text$1, {
79
+ })] }) : /* @__PURE__ */ jsx(Text, {
80
80
  size: "xs",
81
81
  c: "dimmed",
82
82
  children: "-"
@@ -86,7 +86,7 @@ const AdminSessions = (props) => {
86
86
  ip: {
87
87
  label: "IP",
88
88
  fit: true,
89
- value: (item) => /* @__PURE__ */ jsx(Text$1, {
89
+ value: (item) => /* @__PURE__ */ jsx(Text, {
90
90
  size: "xs",
91
91
  ff: "monospace",
92
92
  c: "dimmed",
@@ -106,7 +106,7 @@ const AdminSessions = (props) => {
106
106
  createdAt: {
107
107
  label: "Created",
108
108
  fit: true,
109
- value: (item) => /* @__PURE__ */ jsx(Text$1, {
109
+ value: (item) => /* @__PURE__ */ jsx(Text, {
110
110
  size: "xs",
111
111
  c: "dimmed",
112
112
  children: l(item.createdAt, { date: "fromNow" })
@@ -120,4 +120,4 @@ var AdminSessions_default = AdminSessions;
120
120
 
121
121
  //#endregion
122
122
  export { AdminSessions_default as t };
123
- //# sourceMappingURL=AdminSessions-Pjdz-iZx.js.map
123
+ //# sourceMappingURL=AdminSessions-CmDVneE2.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AdminSessions-CmDVneE2.js","names":["filters"],"sources":["../../src/admin/components/AdminSessions.tsx"],"sourcesContent":["import { useClient } from \"@alepha/react\";\nimport { useI18n } from \"@alepha/react/i18n\";\nimport { DataTable, Flex, Text } from \"@alepha/ui\";\nimport { Badge, Group } from \"@mantine/core\";\nimport {\n IconDeviceDesktop,\n IconDeviceMobile,\n IconDeviceTablet,\n} from \"@tabler/icons-react\";\nimport { type Page, t } from \"alepha\";\nimport {\n type SessionController,\n type SessionEntity,\n sessions,\n} from \"alepha/api/users\";\n\nexport interface AdminSessionsProps {\n userRealmName?: string;\n}\n\nconst AdminSessions = (props: AdminSessionsProps) => {\n const client = useClient<SessionController>();\n const { l } = useI18n();\n\n const filters = t.object({\n userId: t.optional(\n t.uuid({\n $control: {\n query: t.pick(sessions.schema, [\"userId\"]),\n },\n }),\n ),\n });\n\n const getDeviceIcon = (device?: string) => {\n switch (device) {\n case \"MOBILE\":\n return <IconDeviceMobile size={14} />;\n case \"TABLET\":\n return <IconDeviceTablet size={14} />;\n default:\n return <IconDeviceDesktop size={14} />;\n }\n };\n\n const isExpired = (expiresAt: Date | string) => {\n return new Date(expiresAt) < new Date();\n };\n\n return (\n <Flex flex={1}>\n <DataTable<SessionEntity, typeof filters>\n submitOnInit\n defaultSize={10}\n typeFormProps={{\n skipSubmitButton: true,\n columns: 3,\n }}\n tableProps={{\n horizontalSpacing: \"xs\",\n verticalSpacing: \"xs\",\n }}\n onFilterChange={(key, _value, form) => {\n if (key === \"userId\") {\n return form.submit();\n }\n }}\n filters={filters}\n tableTrProps={(item) => {\n if (isExpired(item.expiresAt)) {\n return {\n opacity: 0.5,\n };\n }\n return {};\n }}\n items={async (filters) => {\n const response = await client.findSessions({\n query: {\n ...filters,\n userRealmName: props.userRealmName,\n },\n });\n\n return response as Page<SessionEntity>;\n }}\n columns={{\n userId: {\n label: \"User ID\",\n value: (item) => (\n <Text size=\"xs\" ff=\"monospace\">\n {item.userId.slice(0, 8)}...\n </Text>\n ),\n },\n userAgent: {\n label: \"Device\",\n fit: true,\n value: (item) => (\n <Group gap={4}>\n {item.userAgent ? (\n <>\n <Badge\n size=\"xs\"\n variant=\"light\"\n leftSection={getDeviceIcon(item.userAgent.device)}\n >\n {item.userAgent.device}\n </Badge>\n <Text size=\"xs\" c=\"dimmed\">\n {item.userAgent.browser} / {item.userAgent.os}\n </Text>\n </>\n ) : (\n <Text size=\"xs\" c=\"dimmed\">\n -\n </Text>\n )}\n </Group>\n ),\n },\n ip: {\n label: \"IP\",\n fit: true,\n value: (item) => (\n <Text size=\"xs\" ff=\"monospace\" c=\"dimmed\">\n {item.ip || \"-\"}\n </Text>\n ),\n },\n expiresAt: {\n label: \"Status\",\n fit: true,\n value: (item) => (\n <Badge\n size=\"sm\"\n variant=\"light\"\n color={isExpired(item.expiresAt) ? \"red\" : \"green\"}\n >\n {isExpired(item.expiresAt) ? \"Expired\" : \"Active\"}\n </Badge>\n ),\n },\n createdAt: {\n label: \"Created\",\n fit: true,\n value: (item) => (\n <Text size=\"xs\" c=\"dimmed\">\n {l(item.createdAt, { date: \"fromNow\" })}\n </Text>\n ),\n },\n }}\n />\n </Flex>\n );\n};\n\nexport default AdminSessions;\n"],"mappings":";;;;;;;;;;AAoBA,MAAM,iBAAiB,UAA8B;CACnD,MAAM,SAAS,WAA8B;CAC7C,MAAM,EAAE,MAAM,SAAS;CAEvB,MAAM,UAAU,EAAE,OAAO,EACvB,QAAQ,EAAE,SACR,EAAE,KAAK,EACL,UAAU,EACR,OAAO,EAAE,KAAK,SAAS,QAAQ,CAAC,SAAS,CAAC,EAC3C,EACF,CAAC,CACH,EACF,CAAC;CAEF,MAAM,iBAAiB,WAAoB;AACzC,UAAQ,QAAR;GACE,KAAK,SACH,QAAO,oBAAC,oBAAiB,MAAM,KAAM;GACvC,KAAK,SACH,QAAO,oBAAC,oBAAiB,MAAM,KAAM;GACvC,QACE,QAAO,oBAAC,qBAAkB,MAAM,KAAM;;;CAI5C,MAAM,aAAa,cAA6B;AAC9C,SAAO,IAAI,KAAK,UAAU,mBAAG,IAAI,MAAM;;AAGzC,QACE,oBAAC;EAAK,MAAM;YACV,oBAAC;GACC;GACA,aAAa;GACb,eAAe;IACb,kBAAkB;IAClB,SAAS;IACV;GACD,YAAY;IACV,mBAAmB;IACnB,iBAAiB;IAClB;GACD,iBAAiB,KAAK,QAAQ,SAAS;AACrC,QAAI,QAAQ,SACV,QAAO,KAAK,QAAQ;;GAGf;GACT,eAAe,SAAS;AACtB,QAAI,UAAU,KAAK,UAAU,CAC3B,QAAO,EACL,SAAS,IACV;AAEH,WAAO,EAAE;;GAEX,OAAO,OAAO,cAAY;AAQxB,WAPiB,MAAM,OAAO,aAAa,EACzC,OAAO;KACL,GAAGA;KACH,eAAe,MAAM;KACtB,EACF,CAAC;;GAIJ,SAAS;IACP,QAAQ;KACN,OAAO;KACP,QAAQ,SACN,qBAAC;MAAK,MAAK;MAAK,IAAG;iBAChB,KAAK,OAAO,MAAM,GAAG,EAAE,EAAC;OACpB;KAEV;IACD,WAAW;KACT,OAAO;KACP,KAAK;KACL,QAAQ,SACN,oBAAC;MAAM,KAAK;gBACT,KAAK,YACJ,4CACE,oBAAC;OACC,MAAK;OACL,SAAQ;OACR,aAAa,cAAc,KAAK,UAAU,OAAO;iBAEhD,KAAK,UAAU;QACV,EACR,qBAAC;OAAK,MAAK;OAAK,GAAE;;QACf,KAAK,UAAU;QAAQ;QAAI,KAAK,UAAU;;QACtC,IACN,GAEH,oBAAC;OAAK,MAAK;OAAK,GAAE;iBAAS;QAEpB;OAEH;KAEX;IACD,IAAI;KACF,OAAO;KACP,KAAK;KACL,QAAQ,SACN,oBAAC;MAAK,MAAK;MAAK,IAAG;MAAY,GAAE;gBAC9B,KAAK,MAAM;OACP;KAEV;IACD,WAAW;KACT,OAAO;KACP,KAAK;KACL,QAAQ,SACN,oBAAC;MACC,MAAK;MACL,SAAQ;MACR,OAAO,UAAU,KAAK,UAAU,GAAG,QAAQ;gBAE1C,UAAU,KAAK,UAAU,GAAG,YAAY;OACnC;KAEX;IACD,WAAW;KACT,OAAO;KACP,KAAK;KACL,QAAQ,SACN,oBAAC;MAAK,MAAK;MAAK,GAAE;gBACf,EAAE,KAAK,WAAW,EAAE,MAAM,WAAW,CAAC;OAClC;KAEV;IACF;IACD;GACG;;AAIX,4BAAe"}
@@ -0,0 +1,3 @@
1
+ import { t as AdminSessions_default } from "./AdminSessions-CmDVneE2.js";
2
+
3
+ export { AdminSessions_default as default };
@@ -1,19 +1,19 @@
1
- import { i as DataTable_default, n as Flex$1, r as Text$1 } from "./core-CzO6aavT.js";
2
- import { useI18n } from "@alepha/react/i18n";
1
+ import { DataTable, Flex, Text } from "@alepha/ui";
3
2
  import { t } from "alepha";
4
3
  import { useClient } from "@alepha/react";
4
+ import { useI18n } from "@alepha/react/i18n";
5
5
  import { Badge, Group } from "@mantine/core";
6
- import { IconCheck, IconX } from "@tabler/icons-react";
7
6
  import { jsx, jsxs } from "react/jsx-runtime";
7
+ import { IconCheck, IconX } from "@tabler/icons-react";
8
8
  import { users } from "alepha/api/users";
9
9
 
10
10
  //#region src/admin/components/AdminUsers.tsx
11
11
  const AdminUsers = (props) => {
12
12
  const client = useClient();
13
13
  const { l } = useI18n();
14
- return /* @__PURE__ */ jsx(Flex$1, {
14
+ return /* @__PURE__ */ jsx(Flex, {
15
15
  flex: 1,
16
- children: /* @__PURE__ */ jsx(DataTable_default, {
16
+ children: /* @__PURE__ */ jsx(DataTable, {
17
17
  submitOnInit: true,
18
18
  defaultSize: 10,
19
19
  typeFormProps: {
@@ -41,7 +41,7 @@ const AdminUsers = (props) => {
41
41
  columns: {
42
42
  username: {
43
43
  label: "Username",
44
- value: (item) => /* @__PURE__ */ jsx(Text$1, {
44
+ value: (item) => /* @__PURE__ */ jsx(Text, {
45
45
  size: "sm",
46
46
  fw: 500,
47
47
  children: item.username || "-"
@@ -51,7 +51,7 @@ const AdminUsers = (props) => {
51
51
  label: "Email",
52
52
  value: (item) => /* @__PURE__ */ jsxs(Group, {
53
53
  gap: "xs",
54
- children: [/* @__PURE__ */ jsx(Text$1, {
54
+ children: [/* @__PURE__ */ jsx(Text, {
55
55
  size: "sm",
56
56
  children: item.email || "-"
57
57
  }), item.email && /* @__PURE__ */ jsx(Badge, {
@@ -87,7 +87,7 @@ const AdminUsers = (props) => {
87
87
  createdAt: {
88
88
  label: "Created",
89
89
  fit: true,
90
- value: (item) => /* @__PURE__ */ jsx(Text$1, {
90
+ value: (item) => /* @__PURE__ */ jsx(Text, {
91
91
  size: "xs",
92
92
  c: "dimmed",
93
93
  children: l(item.createdAt, { date: "fromNow" })
@@ -101,4 +101,4 @@ var AdminUsers_default = AdminUsers;
101
101
 
102
102
  //#endregion
103
103
  export { AdminUsers_default as t };
104
- //# sourceMappingURL=AdminUsers-C1HsrRxn.js.map
104
+ //# sourceMappingURL=AdminUsers-88De5pev.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AdminUsers-88De5pev.js","names":[],"sources":["../../src/admin/components/AdminUsers.tsx"],"sourcesContent":["import { useClient } from \"@alepha/react\";\nimport { useI18n } from \"@alepha/react/i18n\";\nimport { DataTable, Flex, Text } from \"@alepha/ui\";\nimport { Badge, Group } from \"@mantine/core\";\nimport { IconCheck, IconX } from \"@tabler/icons-react\";\nimport { type Page, t } from \"alepha\";\nimport { type UserController, type UserEntity, users } from \"alepha/api/users\";\n\nexport interface AdminUsersProps {\n userRealmName?: string;\n}\n\nconst AdminUsers = (props: AdminUsersProps) => {\n const client = useClient<UserController>();\n const { l } = useI18n();\n\n const filters = t.object({\n query: t.optional(\n t.string({\n $control: {\n query: t.omit(users.schema, [\"id\", \"version\"]),\n },\n }),\n ),\n });\n\n return (\n <Flex flex={1}>\n <DataTable<UserEntity, typeof filters>\n submitOnInit\n defaultSize={10}\n typeFormProps={{\n skipSubmitButton: true,\n columns: 3,\n }}\n tableProps={{\n horizontalSpacing: \"xs\",\n verticalSpacing: \"xs\",\n }}\n onFilterChange={(key, value, form) => {\n if (key === \"query\") {\n return form.submit();\n }\n }}\n filters={filters}\n tableTrProps={(item) => {\n if (!item.enabled) {\n return {\n opacity: 0.5,\n };\n }\n return {};\n }}\n items={async (filters) => {\n const response = await client.findUsers({\n query: {\n ...filters,\n userRealmName: props.userRealmName,\n },\n });\n\n return response as Page<UserEntity>;\n }}\n columns={{\n username: {\n label: \"Username\",\n value: (item) => (\n <Text size=\"sm\" fw={500}>\n {item.username || \"-\"}\n </Text>\n ),\n },\n email: {\n label: \"Email\",\n value: (item) => (\n <Group gap=\"xs\">\n <Text size=\"sm\">{item.email || \"-\"}</Text>\n {item.email && (\n <Badge\n size=\"xs\"\n variant=\"light\"\n color={item.emailVerified ? \"green\" : \"gray\"}\n leftSection={\n item.emailVerified ? (\n <IconCheck size={10} />\n ) : (\n <IconX size={10} />\n )\n }\n >\n {item.emailVerified ? \"Verified\" : \"Unverified\"}\n </Badge>\n )}\n </Group>\n ),\n },\n roles: {\n label: \"Roles\",\n value: (item) => (\n <Group gap={4}>\n {item.roles.map((role: string) => (\n <Badge key={role} size=\"xs\" variant=\"outline\">\n {role}\n </Badge>\n ))}\n </Group>\n ),\n },\n enabled: {\n label: \"Status\",\n fit: true,\n value: (item) => (\n <Badge\n size=\"sm\"\n variant=\"light\"\n color={item.enabled ? \"green\" : \"red\"}\n >\n {item.enabled ? \"Active\" : \"Disabled\"}\n </Badge>\n ),\n },\n createdAt: {\n label: \"Created\",\n fit: true,\n value: (item) => (\n <Text size=\"xs\" c=\"dimmed\">\n {l(item.createdAt, { date: \"fromNow\" })}\n </Text>\n ),\n },\n }}\n />\n </Flex>\n );\n};\n\nexport default AdminUsers;\n"],"mappings":";;;;;;;;;;AAYA,MAAM,cAAc,UAA2B;CAC7C,MAAM,SAAS,WAA2B;CAC1C,MAAM,EAAE,MAAM,SAAS;AAYvB,QACE,oBAAC;EAAK,MAAM;YACV,oBAAC;GACC;GACA,aAAa;GACb,eAAe;IACb,kBAAkB;IAClB,SAAS;IACV;GACD,YAAY;IACV,mBAAmB;IACnB,iBAAiB;IAClB;GACD,iBAAiB,KAAK,OAAO,SAAS;AACpC,QAAI,QAAQ,QACV,QAAO,KAAK,QAAQ;;GAGxB,SA5BU,EAAE,OAAO,EACvB,OAAO,EAAE,SACP,EAAE,OAAO,EACP,UAAU,EACR,OAAO,EAAE,KAAK,MAAM,QAAQ,CAAC,MAAM,UAAU,CAAC,EAC/C,EACF,CAAC,CACH,EACF,CAAC;GAqBI,eAAe,SAAS;AACtB,QAAI,CAAC,KAAK,QACR,QAAO,EACL,SAAS,IACV;AAEH,WAAO,EAAE;;GAEX,OAAO,OAAO,YAAY;AAQxB,WAPiB,MAAM,OAAO,UAAU,EACtC,OAAO;KACL,GAAG;KACH,eAAe,MAAM;KACtB,EACF,CAAC;;GAIJ,SAAS;IACP,UAAU;KACR,OAAO;KACP,QAAQ,SACN,oBAAC;MAAK,MAAK;MAAK,IAAI;gBACjB,KAAK,YAAY;OACb;KAEV;IACD,OAAO;KACL,OAAO;KACP,QAAQ,SACN,qBAAC;MAAM,KAAI;iBACT,oBAAC;OAAK,MAAK;iBAAM,KAAK,SAAS;QAAW,EACzC,KAAK,SACJ,oBAAC;OACC,MAAK;OACL,SAAQ;OACR,OAAO,KAAK,gBAAgB,UAAU;OACtC,aACE,KAAK,gBACH,oBAAC,aAAU,MAAM,KAAM,GAEvB,oBAAC,SAAM,MAAM,KAAM;iBAItB,KAAK,gBAAgB,aAAa;QAC7B;OAEJ;KAEX;IACD,OAAO;KACL,OAAO;KACP,QAAQ,SACN,oBAAC;MAAM,KAAK;gBACT,KAAK,MAAM,KAAK,SACf,oBAAC;OAAiB,MAAK;OAAK,SAAQ;iBACjC;SADS,KAEJ,CACR;OACI;KAEX;IACD,SAAS;KACP,OAAO;KACP,KAAK;KACL,QAAQ,SACN,oBAAC;MACC,MAAK;MACL,SAAQ;MACR,OAAO,KAAK,UAAU,UAAU;gBAE/B,KAAK,UAAU,WAAW;OACrB;KAEX;IACD,WAAW;KACT,OAAO;KACP,KAAK;KACL,QAAQ,SACN,oBAAC;MAAK,MAAK;MAAK,GAAE;gBACf,EAAE,KAAK,WAAW,EAAE,MAAM,WAAW,CAAC;OAClC;KAEV;IACF;IACD;GACG;;AAIX,yBAAe"}
@@ -0,0 +1,3 @@
1
+ import { t as AdminUsers_default } from "./AdminUsers-88De5pev.js";
2
+
3
+ export { AdminUsers_default as default };
@@ -0,0 +1,3 @@
1
+ import { t as AdminVerifications_default } from "./AdminVerifications-DBVEoqJe.js";
2
+
3
+ export { AdminVerifications_default as default };
@@ -1,11 +1,11 @@
1
- import { n as Flex$1, r as Text$1 } from "./core-CzO6aavT.js";
1
+ import { Flex, Text } from "@alepha/ui";
2
2
  import { Stack } from "@mantine/core";
3
- import { IconShieldCheck } from "@tabler/icons-react";
4
3
  import { jsx, jsxs } from "react/jsx-runtime";
4
+ import { IconShieldCheck } from "@tabler/icons-react";
5
5
 
6
6
  //#region src/admin/components/AdminVerifications.tsx
7
7
  const AdminVerifications = () => {
8
- return /* @__PURE__ */ jsx(Flex$1, {
8
+ return /* @__PURE__ */ jsx(Flex, {
9
9
  flex: 1,
10
10
  justify: "center",
11
11
  align: "center",
@@ -18,11 +18,11 @@ const AdminVerifications = () => {
18
18
  stroke: 1.5,
19
19
  color: "var(--mantine-color-dimmed)"
20
20
  }),
21
- /* @__PURE__ */ jsx(Text$1, {
21
+ /* @__PURE__ */ jsx(Text, {
22
22
  c: "dimmed",
23
23
  children: "Verification Management"
24
24
  }),
25
- /* @__PURE__ */ jsx(Text$1, {
25
+ /* @__PURE__ */ jsx(Text, {
26
26
  size: "xs",
27
27
  c: "dimmed",
28
28
  ta: "center",
@@ -37,4 +37,4 @@ var AdminVerifications_default = AdminVerifications;
37
37
 
38
38
  //#endregion
39
39
  export { AdminVerifications_default as t };
40
- //# sourceMappingURL=AdminVerifications-VMpm30mS.js.map
40
+ //# sourceMappingURL=AdminVerifications-DBVEoqJe.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AdminVerifications-DBVEoqJe.js","names":[],"sources":["../../src/admin/components/AdminVerifications.tsx"],"sourcesContent":["import { Flex, Text } from \"@alepha/ui\";\nimport { Stack } from \"@mantine/core\";\nimport { IconShieldCheck } from \"@tabler/icons-react\";\n\nconst AdminVerifications = () => {\n return (\n <Flex flex={1} justify=\"center\" align=\"center\">\n <Stack align=\"center\" gap=\"xs\">\n <IconShieldCheck\n size={48}\n stroke={1.5}\n color=\"var(--mantine-color-dimmed)\"\n />\n <Text c=\"dimmed\">Verification Management</Text>\n <Text size=\"xs\" c=\"dimmed\" ta=\"center\" maw={400}>\n Verifications are automatically managed by the system. Email and SMS\n verification codes are generated and validated through the\n verification API endpoints.\n </Text>\n </Stack>\n </Flex>\n );\n};\n\nexport default AdminVerifications;\n"],"mappings":";;;;;;AAIA,MAAM,2BAA2B;AAC/B,QACE,oBAAC;EAAK,MAAM;EAAG,SAAQ;EAAS,OAAM;YACpC,qBAAC;GAAM,OAAM;GAAS,KAAI;;IACxB,oBAAC;KACC,MAAM;KACN,QAAQ;KACR,OAAM;MACN;IACF,oBAAC;KAAK,GAAE;eAAS;MAA8B;IAC/C,oBAAC;KAAK,MAAK;KAAK,GAAE;KAAS,IAAG;KAAS,KAAK;eAAK;MAI1C;;IACD;GACH;;AAIX,iCAAe"}