@datatechsolutions/ui 3.13.0 → 3.14.0
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.
- package/dist/astrlabe/graph-node.js +6 -6
- package/dist/astrlabe/graph-node.mjs +2 -2
- package/dist/astrlabe/index.js +114 -114
- package/dist/astrlabe/index.mjs +6 -6
- package/dist/astrlabe/workflow-canvas.js +6 -6
- package/dist/astrlabe/workflow-canvas.mjs +5 -5
- package/dist/{chunk-AMCFAGK3.js → chunk-2II2NLAZ.js} +42 -41
- package/dist/chunk-2II2NLAZ.js.map +1 -0
- package/dist/{chunk-WR55H7DH.mjs → chunk-2SBVFLPZ.mjs} +19 -2
- package/dist/chunk-2SBVFLPZ.mjs.map +1 -0
- package/dist/{chunk-UXHJS2SH.mjs → chunk-33ZWFDVG.mjs} +282 -331
- package/dist/chunk-33ZWFDVG.mjs.map +1 -0
- package/dist/{chunk-2ECLDHAT.js → chunk-4HZ55YKZ.js} +9 -9
- package/dist/{chunk-2ECLDHAT.js.map → chunk-4HZ55YKZ.js.map} +1 -1
- package/dist/{chunk-VI4IUTMX.js → chunk-4P72IJOM.js} +6 -6
- package/dist/{chunk-VI4IUTMX.js.map → chunk-4P72IJOM.js.map} +1 -1
- package/dist/{chunk-D5OTZGA2.js → chunk-5SCZB5UI.js} +382 -431
- package/dist/chunk-5SCZB5UI.js.map +1 -0
- package/dist/{chunk-4VHFGW7I.mjs → chunk-5YCH7FHT.mjs} +3 -3
- package/dist/{chunk-4VHFGW7I.mjs.map → chunk-5YCH7FHT.mjs.map} +1 -1
- package/dist/{chunk-P4RVGMZL.js → chunk-6NBQTIXX.js} +9 -37
- package/dist/chunk-6NBQTIXX.js.map +1 -0
- package/dist/{chunk-EZQ2D47U.js → chunk-6NEESZVO.js} +4 -4
- package/dist/{chunk-EZQ2D47U.js.map → chunk-6NEESZVO.js.map} +1 -1
- package/dist/{chunk-N4YT3QA5.js → chunk-72XZ7DSF.js} +13 -13
- package/dist/{chunk-N4YT3QA5.js.map → chunk-72XZ7DSF.js.map} +1 -1
- package/dist/{chunk-QGRTV35L.mjs → chunk-7NHJSD4A.mjs} +6 -6
- package/dist/{chunk-QGRTV35L.mjs.map → chunk-7NHJSD4A.mjs.map} +1 -1
- package/dist/{chunk-PPIUMCUZ.js → chunk-7SDB2VC2.js} +4 -4
- package/dist/{chunk-PPIUMCUZ.js.map → chunk-7SDB2VC2.js.map} +1 -1
- package/dist/{chunk-QGLGQXJE.js → chunk-A5OMGPMR.js} +10 -10
- package/dist/chunk-A5OMGPMR.js.map +1 -0
- package/dist/{chunk-K5567JM5.js → chunk-AUCS2KF4.js} +26 -26
- package/dist/{chunk-K5567JM5.js.map → chunk-AUCS2KF4.js.map} +1 -1
- package/dist/{chunk-MSKKNPRE.mjs → chunk-F4KHAKTP.mjs} +172 -116
- package/dist/chunk-F4KHAKTP.mjs.map +1 -0
- package/dist/{chunk-SDYKXLCU.js → chunk-FHGWXWVZ.js} +67 -67
- package/dist/{chunk-SDYKXLCU.js.map → chunk-FHGWXWVZ.js.map} +1 -1
- package/dist/{chunk-5ETT54QS.js → chunk-FZUV7GNB.js} +241 -184
- package/dist/chunk-FZUV7GNB.js.map +1 -0
- package/dist/{chunk-6KDTVSZT.mjs → chunk-HQNIETHV.mjs} +11 -10
- package/dist/chunk-HQNIETHV.mjs.map +1 -0
- package/dist/{chunk-PLTLRL2V.mjs → chunk-KDDXDQR2.mjs} +3 -3
- package/dist/{chunk-PLTLRL2V.mjs.map → chunk-KDDXDQR2.mjs.map} +1 -1
- package/dist/{chunk-6YTYD4P5.js → chunk-LJGPMMKB.js} +156 -193
- package/dist/chunk-LJGPMMKB.js.map +1 -0
- package/dist/{chunk-BHOT22QL.js → chunk-MXQ2EYG2.js} +19 -2
- package/dist/chunk-MXQ2EYG2.js.map +1 -0
- package/dist/{chunk-ANFSQJNI.mjs → chunk-N6SGVUTR.mjs} +17 -20
- package/dist/chunk-N6SGVUTR.mjs.map +1 -0
- package/dist/{chunk-IIRS5XZY.js → chunk-NIZSQJRW.js} +33 -33
- package/dist/{chunk-IIRS5XZY.js.map → chunk-NIZSQJRW.js.map} +1 -1
- package/dist/{chunk-AKWCT53S.mjs → chunk-NXWIT4YQ.mjs} +47 -50
- package/dist/chunk-NXWIT4YQ.mjs.map +1 -0
- package/dist/{chunk-OC4AOYU5.mjs → chunk-OTQXU4WG.mjs} +83 -120
- package/dist/chunk-OTQXU4WG.mjs.map +1 -0
- package/dist/{chunk-CSOMZ5UM.mjs → chunk-PO66V2PN.mjs} +9 -9
- package/dist/{chunk-CSOMZ5UM.mjs.map → chunk-PO66V2PN.mjs.map} +1 -1
- package/dist/{chunk-OY5HUZSD.js → chunk-PXGESUKI.js} +94 -97
- package/dist/chunk-PXGESUKI.js.map +1 -0
- package/dist/{chunk-7TYNV6SY.mjs → chunk-Q2FUNDCP.mjs} +14 -14
- package/dist/{chunk-7TYNV6SY.mjs.map → chunk-Q2FUNDCP.mjs.map} +1 -1
- package/dist/{chunk-KWH7JIRP.mjs → chunk-Q5TZTA6H.mjs} +9 -8
- package/dist/chunk-Q5TZTA6H.mjs.map +1 -0
- package/dist/{chunk-ZRCXDKBE.mjs → chunk-T7DROKWJ.mjs} +4 -4
- package/dist/{chunk-ZRCXDKBE.mjs.map → chunk-T7DROKWJ.mjs.map} +1 -1
- package/dist/{chunk-3VYD7QL2.mjs → chunk-TQADF23S.mjs} +9 -9
- package/dist/chunk-TQADF23S.mjs.map +1 -0
- package/dist/{chunk-VIB42VMZ.mjs → chunk-U7VMFQFN.mjs} +5 -5
- package/dist/{chunk-VIB42VMZ.mjs.map → chunk-U7VMFQFN.mjs.map} +1 -1
- package/dist/{chunk-AHNH2PMI.mjs → chunk-WE35EV7J.mjs} +3 -3
- package/dist/{chunk-AHNH2PMI.mjs.map → chunk-WE35EV7J.mjs.map} +1 -1
- package/dist/{chunk-UPYACFZJ.mjs → chunk-WTSMTLSP.mjs} +303 -347
- package/dist/chunk-WTSMTLSP.mjs.map +1 -0
- package/dist/{chunk-WOTKBKS6.js → chunk-YFMMZHL5.js} +47 -50
- package/dist/chunk-YFMMZHL5.js.map +1 -0
- package/dist/{chunk-DJ33CSGJ.mjs → chunk-ZBX7UCAP.mjs} +9 -37
- package/dist/chunk-ZBX7UCAP.mjs.map +1 -0
- package/dist/{chunk-NF5DDM5V.js → chunk-ZE6U4N4Q.js} +44 -43
- package/dist/chunk-ZE6U4N4Q.js.map +1 -0
- package/dist/{chunk-MQDCUBVW.js → chunk-ZIRD3X6G.js} +459 -503
- package/dist/chunk-ZIRD3X6G.js.map +1 -0
- package/dist/index.d.mts +77 -7
- package/dist/index.d.ts +77 -7
- package/dist/index.js +708 -704
- package/dist/index.mjs +3 -3
- package/dist/platform/admin/index.js +12 -12
- package/dist/platform/admin/index.mjs +6 -6
- package/dist/platform/agents-workspace.js +9 -9
- package/dist/platform/agents-workspace.mjs +8 -8
- package/dist/platform/app-shell.js +5 -5
- package/dist/platform/app-shell.mjs +4 -4
- package/dist/platform/auth/index.js +29 -29
- package/dist/platform/auth/index.mjs +6 -6
- package/dist/platform/billing/index.js +7 -7
- package/dist/platform/billing/index.mjs +5 -5
- package/dist/platform/impersonation/index.js +5 -5
- package/dist/platform/impersonation/index.mjs +4 -4
- package/dist/platform/index.js +99 -99
- package/dist/platform/index.js.map +1 -1
- package/dist/platform/index.mjs +30 -30
- package/dist/platform/index.mjs.map +1 -1
- package/dist/platform/pages/index.d.mts +115 -3
- package/dist/platform/pages/index.d.ts +115 -3
- package/dist/platform/pages/index.js +966 -519
- package/dist/platform/pages/index.js.map +1 -1
- package/dist/platform/pages/index.mjs +562 -121
- package/dist/platform/pages/index.mjs.map +1 -1
- package/dist/platform/settings/index.js +9 -9
- package/dist/platform/settings/index.mjs +8 -8
- package/dist/platform/workflow-canvas-shell.js +7 -7
- package/dist/platform/workflow-canvas-shell.mjs +6 -6
- package/package.json +1 -1
- package/dist/chunk-3VYD7QL2.mjs.map +0 -1
- package/dist/chunk-5ETT54QS.js.map +0 -1
- package/dist/chunk-6KDTVSZT.mjs.map +0 -1
- package/dist/chunk-6YTYD4P5.js.map +0 -1
- package/dist/chunk-AKWCT53S.mjs.map +0 -1
- package/dist/chunk-AMCFAGK3.js.map +0 -1
- package/dist/chunk-ANFSQJNI.mjs.map +0 -1
- package/dist/chunk-BHOT22QL.js.map +0 -1
- package/dist/chunk-D5OTZGA2.js.map +0 -1
- package/dist/chunk-DJ33CSGJ.mjs.map +0 -1
- package/dist/chunk-KWH7JIRP.mjs.map +0 -1
- package/dist/chunk-MQDCUBVW.js.map +0 -1
- package/dist/chunk-MSKKNPRE.mjs.map +0 -1
- package/dist/chunk-NF5DDM5V.js.map +0 -1
- package/dist/chunk-OC4AOYU5.mjs.map +0 -1
- package/dist/chunk-OY5HUZSD.js.map +0 -1
- package/dist/chunk-P4RVGMZL.js.map +0 -1
- package/dist/chunk-QGLGQXJE.js.map +0 -1
- package/dist/chunk-UPYACFZJ.mjs.map +0 -1
- package/dist/chunk-UXHJS2SH.mjs.map +0 -1
- package/dist/chunk-WOTKBKS6.js.map +0 -1
- package/dist/chunk-WR55H7DH.mjs.map +0 -1
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
'use strict';
|
|
3
3
|
|
|
4
|
-
var
|
|
4
|
+
var chunkFZUV7GNB_js = require('./chunk-FZUV7GNB.js');
|
|
5
5
|
var chunkY5VN4SPH_js = require('./chunk-Y5VN4SPH.js');
|
|
6
|
-
var
|
|
6
|
+
var chunkMXQ2EYG2_js = require('./chunk-MXQ2EYG2.js');
|
|
7
7
|
var chunkUZ3CMNUJ_js = require('./chunk-UZ3CMNUJ.js');
|
|
8
8
|
var react = require('react');
|
|
9
9
|
var outline = require('@heroicons/react/24/outline');
|
|
@@ -61,14 +61,14 @@ function MembersTabContent({
|
|
|
61
61
|
return "zinc";
|
|
62
62
|
};
|
|
63
63
|
if (isLoading) {
|
|
64
|
-
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-center gap-2 p-8 text-sm text-
|
|
65
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
64
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-center gap-2 p-8 text-sm text-slate-500 dark:text-slate-400", children: [
|
|
65
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkFZUV7GNB_js.InlineSpinner, {}),
|
|
66
66
|
/* @__PURE__ */ jsxRuntime.jsx("span", { children: t("admin.organizationDetail.members.loading") })
|
|
67
67
|
] });
|
|
68
68
|
}
|
|
69
69
|
if (members.length === 0) {
|
|
70
70
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
71
|
-
|
|
71
|
+
chunkFZUV7GNB_js.EmptyState,
|
|
72
72
|
{
|
|
73
73
|
message: t("admin.organizationDetail.members.emptyMessage"),
|
|
74
74
|
description: t("admin.organizationDetail.members.emptyDescription"),
|
|
@@ -78,11 +78,11 @@ function MembersTabContent({
|
|
|
78
78
|
);
|
|
79
79
|
}
|
|
80
80
|
return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
81
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
82
|
-
|
|
81
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkFZUV7GNB_js.ListCard, { children: members.map((member) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
82
|
+
chunkFZUV7GNB_js.ListCardItem,
|
|
83
83
|
{
|
|
84
84
|
leading: /* @__PURE__ */ jsxRuntime.jsx(
|
|
85
|
-
|
|
85
|
+
chunkFZUV7GNB_js.Avatar,
|
|
86
86
|
{
|
|
87
87
|
src: member.image,
|
|
88
88
|
initials: (member.name ?? member.email).slice(0, 2).toUpperCase(),
|
|
@@ -90,7 +90,7 @@ function MembersTabContent({
|
|
|
90
90
|
}
|
|
91
91
|
),
|
|
92
92
|
trailing: member.role !== "owner" ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
93
|
-
|
|
93
|
+
chunkMXQ2EYG2_js.Button,
|
|
94
94
|
{
|
|
95
95
|
size: "sm",
|
|
96
96
|
color: "ios-glass-red",
|
|
@@ -102,16 +102,16 @@ function MembersTabContent({
|
|
|
102
102
|
) : void 0,
|
|
103
103
|
children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2", children: [
|
|
104
104
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "min-w-0", children: [
|
|
105
|
-
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "truncate text-sm font-medium text-
|
|
106
|
-
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "truncate text-xs text-
|
|
105
|
+
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "truncate text-sm font-medium text-slate-900 dark:text-white", children: member.name ?? member.email }),
|
|
106
|
+
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "truncate text-xs text-slate-500 dark:text-slate-400", children: member.email })
|
|
107
107
|
] }),
|
|
108
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
108
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkMXQ2EYG2_js.Badge, { color: roleBadgeColor(member.role), children: member.role })
|
|
109
109
|
] })
|
|
110
110
|
},
|
|
111
111
|
member.id
|
|
112
112
|
)) }),
|
|
113
113
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
114
|
-
|
|
114
|
+
chunkFZUV7GNB_js.DynamicIslandConfirm,
|
|
115
115
|
{
|
|
116
116
|
open: removeTarget !== null,
|
|
117
117
|
onClose: handleRemoveCancel,
|
|
@@ -195,15 +195,15 @@ function InvitationsTabContent({
|
|
|
195
195
|
};
|
|
196
196
|
const roleOptions = ["viewer", "member", "admin", "owner"];
|
|
197
197
|
if (isLoading) {
|
|
198
|
-
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-center gap-2 p-8 text-sm text-
|
|
199
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
198
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-center gap-2 p-8 text-sm text-slate-500 dark:text-slate-400", children: [
|
|
199
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkFZUV7GNB_js.InlineSpinner, {}),
|
|
200
200
|
/* @__PURE__ */ jsxRuntime.jsx("span", { children: t("admin.organizationDetail.invitations.loading") })
|
|
201
201
|
] });
|
|
202
202
|
}
|
|
203
203
|
return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
204
204
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-4", children: [
|
|
205
205
|
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
206
|
-
|
|
206
|
+
chunkMXQ2EYG2_js.Button,
|
|
207
207
|
{
|
|
208
208
|
color: "ios-glass-blue",
|
|
209
209
|
onClick: handleOpenInviteSheet,
|
|
@@ -215,21 +215,21 @@ function InvitationsTabContent({
|
|
|
215
215
|
}
|
|
216
216
|
),
|
|
217
217
|
invitations.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
218
|
-
|
|
218
|
+
chunkFZUV7GNB_js.EmptyState,
|
|
219
219
|
{
|
|
220
220
|
message: t("admin.organizationDetail.invitations.emptyMessage"),
|
|
221
221
|
description: t("admin.organizationDetail.invitations.emptyDescription"),
|
|
222
222
|
icon: outline.EnvelopeIcon,
|
|
223
223
|
variant: "card"
|
|
224
224
|
}
|
|
225
|
-
) : /* @__PURE__ */ jsxRuntime.jsx(
|
|
226
|
-
|
|
225
|
+
) : /* @__PURE__ */ jsxRuntime.jsx(chunkFZUV7GNB_js.ListCard, { children: invitations.map((invitation) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
226
|
+
chunkFZUV7GNB_js.ListCardItem,
|
|
227
227
|
{
|
|
228
228
|
leading: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex h-9 w-9 items-center justify-center rounded-xl bg-gradient-to-br from-amber-500 to-orange-600 shadow-sm", children: /* @__PURE__ */ jsxRuntime.jsx(outline.EnvelopeIcon, { className: "h-5 w-5 text-white" }) }),
|
|
229
|
-
trailing: /* @__PURE__ */ jsxRuntime.jsx(
|
|
229
|
+
trailing: /* @__PURE__ */ jsxRuntime.jsx(chunkMXQ2EYG2_js.Badge, { color: statusBadgeColor(invitation.status), children: invitation.status }),
|
|
230
230
|
children: /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
|
|
231
|
-
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm font-medium text-
|
|
232
|
-
/* @__PURE__ */ jsxRuntime.jsxs("p", { className: "mt-0.5 text-xs text-
|
|
231
|
+
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm font-medium text-slate-900 dark:text-white", children: invitation.email }),
|
|
232
|
+
/* @__PURE__ */ jsxRuntime.jsxs("p", { className: "mt-0.5 text-xs text-slate-500 dark:text-slate-400", children: [
|
|
233
233
|
t("admin.organizationDetail.invitations.roleLabel", { role: invitation.role }),
|
|
234
234
|
" \xB7 ",
|
|
235
235
|
format.dateTime(new Date(invitation.createdAt), {
|
|
@@ -243,7 +243,7 @@ function InvitationsTabContent({
|
|
|
243
243
|
)) })
|
|
244
244
|
] }),
|
|
245
245
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
246
|
-
|
|
246
|
+
chunkFZUV7GNB_js.Sheet,
|
|
247
247
|
{
|
|
248
248
|
open: isInviteSheetOpen,
|
|
249
249
|
onClose: handleCloseInviteSheet,
|
|
@@ -252,7 +252,7 @@ function InvitationsTabContent({
|
|
|
252
252
|
size: "md",
|
|
253
253
|
children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-4 p-4 sm:p-6", children: [
|
|
254
254
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
255
|
-
|
|
255
|
+
chunkFZUV7GNB_js.Input,
|
|
256
256
|
{
|
|
257
257
|
label: t("admin.organizationDetail.invitations.emailLabel"),
|
|
258
258
|
type: "email",
|
|
@@ -264,15 +264,12 @@ function InvitationsTabContent({
|
|
|
264
264
|
}
|
|
265
265
|
),
|
|
266
266
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
|
|
267
|
-
/* @__PURE__ */ jsxRuntime.jsx("label", { className: "mb-1.5 block text-sm font-medium text-
|
|
267
|
+
/* @__PURE__ */ jsxRuntime.jsx("label", { className: "mb-1.5 block text-sm font-medium text-slate-900 dark:text-white", children: t("admin.organizationDetail.invitations.roleSelectLabel") }),
|
|
268
268
|
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "grid grid-cols-4 gap-2", children: roleOptions.map((role) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
269
|
-
|
|
269
|
+
chunkFZUV7GNB_js.PickerTile,
|
|
270
270
|
{
|
|
271
|
-
|
|
272
|
-
onClick: () =>
|
|
273
|
-
setInviteRole(role);
|
|
274
|
-
chunkUZ3CMNUJ_js.triggerHaptic("light");
|
|
275
|
-
},
|
|
271
|
+
selected: inviteRole === role,
|
|
272
|
+
onClick: () => setInviteRole(role),
|
|
276
273
|
className: `rounded-xl border px-2 py-2 text-xs font-semibold backdrop-blur-xl transition ${inviteRole === role ? "border-indigo-400/80 bg-gradient-to-br from-indigo-100/85 via-white/80 to-sky-100/75 text-slate-900 dark:border-indigo-300/70 dark:bg-[linear-gradient(140deg,rgba(99,102,241,0.32)_0%,rgba(30,41,59,0.72)_100%)] dark:text-indigo-100" : "border-white/55 bg-gradient-to-br from-white/82 via-white/66 to-slate-100/62 text-slate-700 hover:from-white/92 hover:to-sky-100/72 dark:border-white/15 dark:bg-[linear-gradient(140deg,rgba(30,41,59,0.72)_0%,rgba(15,23,42,0.62)_100%)] dark:text-slate-100 dark:hover:bg-[linear-gradient(140deg,rgba(51,65,85,0.76)_0%,rgba(30,41,59,0.68)_100%)]"}`,
|
|
277
274
|
children: role
|
|
278
275
|
},
|
|
@@ -281,7 +278,7 @@ function InvitationsTabContent({
|
|
|
281
278
|
] }),
|
|
282
279
|
inviteError && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm text-red-600 dark:text-red-400", role: "alert", children: inviteError }),
|
|
283
280
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
284
|
-
|
|
281
|
+
chunkMXQ2EYG2_js.Button,
|
|
285
282
|
{
|
|
286
283
|
color: "ios-glass-blue",
|
|
287
284
|
fullWidth: true,
|
|
@@ -366,15 +363,15 @@ function DomainsTabContent({
|
|
|
366
363
|
}
|
|
367
364
|
}, [client, organizationId, fetchDomains]);
|
|
368
365
|
if (isLoading) {
|
|
369
|
-
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-center gap-2 p-8 text-sm text-
|
|
370
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
366
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-center gap-2 p-8 text-sm text-slate-500 dark:text-slate-400", children: [
|
|
367
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkFZUV7GNB_js.InlineSpinner, {}),
|
|
371
368
|
/* @__PURE__ */ jsxRuntime.jsx("span", { children: t("admin.organizationDetail.domains.loading") })
|
|
372
369
|
] });
|
|
373
370
|
}
|
|
374
371
|
return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
375
372
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-4", children: [
|
|
376
373
|
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
377
|
-
|
|
374
|
+
chunkMXQ2EYG2_js.Button,
|
|
378
375
|
{
|
|
379
376
|
color: "ios-glass-blue",
|
|
380
377
|
onClick: handleOpenAddSheet,
|
|
@@ -386,19 +383,19 @@ function DomainsTabContent({
|
|
|
386
383
|
}
|
|
387
384
|
),
|
|
388
385
|
domains.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
389
|
-
|
|
386
|
+
chunkFZUV7GNB_js.EmptyState,
|
|
390
387
|
{
|
|
391
388
|
message: t("admin.organizationDetail.domains.emptyMessage"),
|
|
392
389
|
description: t("admin.organizationDetail.domains.emptyDescription"),
|
|
393
390
|
icon: outline.GlobeAltIcon,
|
|
394
391
|
variant: "card"
|
|
395
392
|
}
|
|
396
|
-
) : /* @__PURE__ */ jsxRuntime.jsx(
|
|
397
|
-
|
|
393
|
+
) : /* @__PURE__ */ jsxRuntime.jsx(chunkFZUV7GNB_js.ListCard, { children: domains.map((domain) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
394
|
+
chunkFZUV7GNB_js.ListCardItem,
|
|
398
395
|
{
|
|
399
396
|
leading: /* @__PURE__ */ jsxRuntime.jsx("div", { className: `flex h-9 w-9 items-center justify-center rounded-xl shadow-sm ${domain.verified ? "bg-gradient-to-br from-emerald-500 to-green-600" : "bg-gradient-to-br from-amber-500 to-orange-600"}`, children: domain.verified ? /* @__PURE__ */ jsxRuntime.jsx(outline.CheckCircleIcon, { className: "h-5 w-5 text-white" }) : /* @__PURE__ */ jsxRuntime.jsx(outline.GlobeAltIcon, { className: "h-5 w-5 text-white" }) }),
|
|
400
397
|
trailing: !domain.verified ? /* @__PURE__ */ jsxRuntime.jsxs(
|
|
401
|
-
|
|
398
|
+
chunkMXQ2EYG2_js.Button,
|
|
402
399
|
{
|
|
403
400
|
size: "sm",
|
|
404
401
|
color: "ios-glass-blue",
|
|
@@ -410,17 +407,17 @@ function DomainsTabContent({
|
|
|
410
407
|
t("admin.organizationDetail.domains.verifyButton")
|
|
411
408
|
]
|
|
412
409
|
}
|
|
413
|
-
) : /* @__PURE__ */ jsxRuntime.jsx(
|
|
410
|
+
) : /* @__PURE__ */ jsxRuntime.jsx(chunkFZUV7GNB_js.StatusBadge, { status: "active", label: t("admin.organizationDetail.domains.verifiedLabel"), size: "sm" }),
|
|
414
411
|
children: /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
|
|
415
|
-
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm font-medium text-
|
|
416
|
-
domain.autoJoinEnabled && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mt-0.5 text-xs text-
|
|
412
|
+
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm font-medium text-slate-900 dark:text-white", children: domain.domain }),
|
|
413
|
+
domain.autoJoinEnabled && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mt-0.5 text-xs text-slate-500 dark:text-slate-400", children: t("admin.organizationDetail.domains.autoJoinEnabled") })
|
|
417
414
|
] })
|
|
418
415
|
},
|
|
419
416
|
domain.id
|
|
420
417
|
)) })
|
|
421
418
|
] }),
|
|
422
419
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
423
|
-
|
|
420
|
+
chunkFZUV7GNB_js.Sheet,
|
|
424
421
|
{
|
|
425
422
|
open: isAddSheetOpen,
|
|
426
423
|
onClose: handleCloseAddSheet,
|
|
@@ -429,7 +426,7 @@ function DomainsTabContent({
|
|
|
429
426
|
size: "md",
|
|
430
427
|
children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-4 p-4 sm:p-6", children: [
|
|
431
428
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
432
|
-
|
|
429
|
+
chunkFZUV7GNB_js.Input,
|
|
433
430
|
{
|
|
434
431
|
label: t("admin.organizationDetail.domains.domainLabel"),
|
|
435
432
|
value: newDomain,
|
|
@@ -441,7 +438,7 @@ function DomainsTabContent({
|
|
|
441
438
|
),
|
|
442
439
|
addError && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm text-red-600 dark:text-red-400", role: "alert", children: addError }),
|
|
443
440
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
444
|
-
|
|
441
|
+
chunkMXQ2EYG2_js.Button,
|
|
445
442
|
{
|
|
446
443
|
color: "ios-glass-blue",
|
|
447
444
|
fullWidth: true,
|
|
@@ -467,7 +464,7 @@ function AdminOrganizationDetail({
|
|
|
467
464
|
label: t(`admin.organizationDetail.tabs.${tab}`)
|
|
468
465
|
}));
|
|
469
466
|
return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "space-y-6", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
470
|
-
|
|
467
|
+
chunkFZUV7GNB_js.SectionCard,
|
|
471
468
|
{
|
|
472
469
|
header: {
|
|
473
470
|
icon: /* @__PURE__ */ jsxRuntime.jsx(outline.UsersIcon, { className: "h-5 w-5 text-white" }),
|
|
@@ -475,7 +472,7 @@ function AdminOrganizationDetail({
|
|
|
475
472
|
subtitle: organization.description ?? t("admin.organizationDetail.defaultSubtitle"),
|
|
476
473
|
gradient: "from-emerald-500 via-teal-500 to-cyan-500",
|
|
477
474
|
rightContent: /* @__PURE__ */ jsxRuntime.jsx(
|
|
478
|
-
|
|
475
|
+
chunkFZUV7GNB_js.StatusBadge,
|
|
479
476
|
{
|
|
480
477
|
status: organization.enabled ? "active" : "inactive",
|
|
481
478
|
label: organization.enabled ? t("admin.organizationDetail.statusEnabled") : t("admin.organizationDetail.statusDisabled"),
|
|
@@ -485,7 +482,7 @@ function AdminOrganizationDetail({
|
|
|
485
482
|
},
|
|
486
483
|
children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-4", children: [
|
|
487
484
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
488
|
-
|
|
485
|
+
chunkFZUV7GNB_js.SegmentedControl,
|
|
489
486
|
{
|
|
490
487
|
segments,
|
|
491
488
|
value: activeTab,
|
|
@@ -502,5 +499,5 @@ function AdminOrganizationDetail({
|
|
|
502
499
|
}
|
|
503
500
|
|
|
504
501
|
exports.AdminOrganizationDetail = AdminOrganizationDetail;
|
|
505
|
-
//# sourceMappingURL=chunk-
|
|
506
|
-
//# sourceMappingURL=chunk-
|
|
502
|
+
//# sourceMappingURL=chunk-YFMMZHL5.js.map
|
|
503
|
+
//# sourceMappingURL=chunk-YFMMZHL5.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/platform/admin/admin-organization-detail.tsx"],"names":["useTranslations","useState","useCallback","useEffect","triggerHaptic","jsxs","jsx","InlineSpinner","EmptyState","UsersIcon","Fragment","ListCard","ListCardItem","Avatar","Button","TrashIcon","Badge","DynamicIslandConfirm","useFormatter","PlusIcon","EnvelopeIcon","Sheet","Input","PickerTile","GlobeAltIcon","CheckCircleIcon","ArrowPathIcon","StatusBadge","SectionCard","SegmentedControl"],"mappings":"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","file":"chunk-YFMMZHL5.js","sourcesContent":["import { useState, useEffect, useCallback } from 'react'\nimport { useTranslations, useFormatter } from '@ui/lib/i18n-context'\nimport {\n SectionCard,\n SegmentedControl,\n ListCard,\n ListCardItem,\n Button,\n Input,\n Badge,\n StatusBadge,\n EmptyState,\n InlineSpinner,\n Sheet,\n DynamicIslandConfirm,\n Avatar,\n PickerTile,\n triggerHaptic,\n} from '@ui/index'\nimport {\n UsersIcon,\n EnvelopeIcon,\n GlobeAltIcon,\n PlusIcon,\n TrashIcon,\n CheckCircleIcon,\n ArrowPathIcon,\n} from '@heroicons/react/24/outline'\nimport type {\n AuthOrganizationDomain,\n AuthOrganizationInvitation,\n} from '@datatechsolutions/shared-domain'\n\nexport type { AdminOrganizationDetailProps } from '@datatechsolutions/shared-domain'\nimport type {\n AdminOrganizationDetailProps,\n AdminOrganizationDetailTab,\n AdminOrganizationMember,\n AdminCreateInvitationInput,\n} from '@datatechsolutions/shared-domain'\nimport type { AuthOrganizationRole } from '@datatechsolutions/shared-domain'\n\nconst ALL_TABS: AdminOrganizationDetailTab[] = ['members', 'invitations', 'domains']\n\n// ── Members Tab ─────────────────────────────────────────────────────────────\n\nfunction MembersTabContent({\n organizationId,\n client,\n}: {\n organizationId: string\n client: AdminOrganizationDetailProps['client']\n}) {\n const t = useTranslations('windsock')\n\n const [members, setMembers] = useState<AdminOrganizationMember[]>([])\n const [isLoading, setIsLoading] = useState(true)\n const [removingId, setRemovingId] = useState<string | null>(null)\n const [removeTarget, setRemoveTarget] = useState<AdminOrganizationMember | null>(null)\n\n const fetchMembers = useCallback(async () => {\n setIsLoading(true)\n try {\n const result = await client.listOrganizationMembers(organizationId)\n setMembers(result)\n } catch {\n // Fail gracefully\n } finally {\n setIsLoading(false)\n }\n }, [client, organizationId])\n\n useEffect(() => {\n fetchMembers()\n }, [fetchMembers])\n\n const handleRemoveRequest = useCallback((member: AdminOrganizationMember) => {\n triggerHaptic('warning')\n setRemoveTarget(member)\n }, [])\n\n const handleRemoveConfirm = useCallback(async () => {\n if (!removeTarget) return\n setRemovingId(removeTarget.id)\n triggerHaptic('medium')\n try {\n await client.removeOrganizationMember(organizationId, removeTarget.id)\n setRemoveTarget(null)\n triggerHaptic('success')\n fetchMembers()\n } catch {\n triggerHaptic('error')\n } finally {\n setRemovingId(null)\n }\n }, [removeTarget, client, organizationId, fetchMembers])\n\n const handleRemoveCancel = useCallback(() => {\n triggerHaptic('light')\n setRemoveTarget(null)\n }, [])\n\n const roleBadgeColor = (role: string) => {\n if (role === 'owner') return 'purple' as const\n if (role === 'admin') return 'blue' as const\n return 'zinc' as const\n }\n\n if (isLoading) {\n return (\n <div className=\"flex items-center justify-center gap-2 p-8 text-sm text-slate-500 dark:text-slate-400\">\n <InlineSpinner />\n <span>{t('admin.organizationDetail.members.loading')}</span>\n </div>\n )\n }\n\n if (members.length === 0) {\n return (\n <EmptyState\n message={t('admin.organizationDetail.members.emptyMessage')}\n description={t('admin.organizationDetail.members.emptyDescription')}\n icon={UsersIcon}\n variant=\"card\"\n />\n )\n }\n\n return (\n <>\n <ListCard>\n {members.map((member) => (\n <ListCardItem\n key={member.id}\n leading={\n <Avatar\n src={(member as unknown as { image?: string }).image}\n initials={(member.name ?? member.email).slice(0, 2).toUpperCase()}\n alt={member.name ?? member.email}\n />\n }\n trailing={\n member.role !== 'owner' ? (\n <Button\n size=\"sm\"\n color=\"ios-glass-red\"\n onClick={() => handleRemoveRequest(member)}\n loading={removingId === member.id}\n disabled={removingId !== null}\n >\n <TrashIcon className=\"h-3.5 w-3.5\" />\n </Button>\n ) : undefined\n }\n >\n <div className=\"flex items-center gap-2\">\n <div className=\"min-w-0\">\n <p className=\"truncate text-sm font-medium text-slate-900 dark:text-white\">\n {member.name ?? member.email}\n </p>\n <p className=\"truncate text-xs text-slate-500 dark:text-slate-400\">\n {member.email}\n </p>\n </div>\n <Badge color={roleBadgeColor(member.role)}>{member.role}</Badge>\n </div>\n </ListCardItem>\n ))}\n </ListCard>\n\n <DynamicIslandConfirm\n open={removeTarget !== null}\n onClose={handleRemoveCancel}\n onConfirm={handleRemoveConfirm}\n title={t('admin.organizationDetail.members.removeConfirmTitle', { name: removeTarget?.name ?? removeTarget?.email ?? '' })}\n icon={<TrashIcon className=\"h-5 w-5 text-white\" />}\n iconBackground=\"bg-ios-red\"\n confirmLabel={t('admin.organizationDetail.members.removeConfirmButton')}\n cancelLabel={t('admin.organizationDetail.members.removeCancelButton')}\n />\n </>\n )\n}\n\n// ── Invitations Tab ─────────────────────────────────────────────────────────\n\nfunction InvitationsTabContent({\n organizationId,\n client,\n}: {\n organizationId: string\n client: AdminOrganizationDetailProps['client']\n}) {\n const t = useTranslations('windsock')\n const format = useFormatter()\n\n const [invitations, setInvitations] = useState<AuthOrganizationInvitation[]>([])\n const [isLoading, setIsLoading] = useState(true)\n const [isInviteSheetOpen, setIsInviteSheetOpen] = useState(false)\n const [inviteEmail, setInviteEmail] = useState('')\n const [inviteRole, setInviteRole] = useState<AuthOrganizationRole>('member')\n const [isInviting, setIsInviting] = useState(false)\n const [inviteError, setInviteError] = useState<string | null>(null)\n\n const fetchInvitations = useCallback(async () => {\n setIsLoading(true)\n try {\n const result = await client.listOrganizationInvitations(organizationId)\n setInvitations(result)\n } catch {\n // Fail gracefully\n } finally {\n setIsLoading(false)\n }\n }, [client, organizationId])\n\n useEffect(() => {\n fetchInvitations()\n }, [fetchInvitations])\n\n const handleOpenInviteSheet = useCallback(() => {\n triggerHaptic('light')\n setInviteEmail('')\n setInviteRole('member')\n setInviteError(null)\n setIsInviteSheetOpen(true)\n }, [])\n\n const handleCloseInviteSheet = useCallback(() => {\n triggerHaptic('light')\n setIsInviteSheetOpen(false)\n }, [])\n\n const handleSendInvitation = useCallback(async () => {\n if (!inviteEmail.trim()) {\n setInviteError(t('admin.organizationDetail.invitations.errorEmailRequired'))\n triggerHaptic('error')\n return\n }\n\n setInviteError(null)\n setIsInviting(true)\n triggerHaptic('light')\n\n try {\n const data: AdminCreateInvitationInput = {\n email: inviteEmail.trim().toLowerCase(),\n role: inviteRole,\n }\n await client.createOrganizationInvitation(organizationId, data)\n triggerHaptic('success')\n setIsInviteSheetOpen(false)\n fetchInvitations()\n } catch {\n setInviteError(t('admin.organizationDetail.invitations.errorSendFailed'))\n triggerHaptic('error')\n } finally {\n setIsInviting(false)\n }\n }, [inviteEmail, inviteRole, client, organizationId, fetchInvitations, t])\n\n const statusBadgeColor = (status: string) => {\n if (status === 'accepted') return 'green' as const\n if (status === 'pending') return 'amber' as const\n if (status === 'revoked' || status === 'expired') return 'red' as const\n return 'zinc' as const\n }\n\n const roleOptions: AuthOrganizationRole[] = ['viewer', 'member', 'admin', 'owner']\n\n if (isLoading) {\n return (\n <div className=\"flex items-center justify-center gap-2 p-8 text-sm text-slate-500 dark:text-slate-400\">\n <InlineSpinner />\n <span>{t('admin.organizationDetail.invitations.loading')}</span>\n </div>\n )\n }\n\n return (\n <>\n <div className=\"space-y-4\">\n <Button\n color=\"ios-glass-blue\"\n onClick={handleOpenInviteSheet}\n fullWidth\n >\n <PlusIcon className=\"mr-1.5 h-4 w-4\" />\n {t('admin.organizationDetail.invitations.inviteButton')}\n </Button>\n\n {invitations.length === 0 ? (\n <EmptyState\n message={t('admin.organizationDetail.invitations.emptyMessage')}\n description={t('admin.organizationDetail.invitations.emptyDescription')}\n icon={EnvelopeIcon}\n variant=\"card\"\n />\n ) : (\n <ListCard>\n {invitations.map((invitation) => (\n <ListCardItem\n key={invitation.id}\n leading={\n <div className=\"flex h-9 w-9 items-center justify-center rounded-xl bg-gradient-to-br from-amber-500 to-orange-600 shadow-sm\">\n <EnvelopeIcon className=\"h-5 w-5 text-white\" />\n </div>\n }\n trailing={\n <Badge color={statusBadgeColor(invitation.status)}>{invitation.status}</Badge>\n }\n >\n <div>\n <p className=\"text-sm font-medium text-slate-900 dark:text-white\">\n {invitation.email}\n </p>\n <p className=\"mt-0.5 text-xs text-slate-500 dark:text-slate-400\">\n {t('admin.organizationDetail.invitations.roleLabel', { role: invitation.role })}\n {' · '}\n {format.dateTime(new Date(invitation.createdAt), {\n month: 'short',\n day: 'numeric',\n })}\n </p>\n </div>\n </ListCardItem>\n ))}\n </ListCard>\n )}\n </div>\n\n {/* Invite sheet */}\n <Sheet\n open={isInviteSheetOpen}\n onClose={handleCloseInviteSheet}\n title={t('admin.organizationDetail.invitations.sheetTitle')}\n side=\"bottom\"\n size=\"md\"\n >\n <div className=\"space-y-4 p-4 sm:p-6\">\n <Input\n label={t('admin.organizationDetail.invitations.emailLabel')}\n type=\"email\"\n value={inviteEmail}\n onChange={(event: React.ChangeEvent<HTMLInputElement>) => setInviteEmail(event.target.value)}\n placeholder={t('admin.organizationDetail.invitations.emailPlaceholder')}\n disabled={isInviting}\n autoFocus\n />\n\n <div>\n <label className=\"mb-1.5 block text-sm font-medium text-slate-900 dark:text-white\">\n {t('admin.organizationDetail.invitations.roleSelectLabel')}\n </label>\n <div className=\"grid grid-cols-4 gap-2\">\n {roleOptions.map((role) => (\n <PickerTile\n key={role}\n selected={inviteRole === role}\n onClick={() => setInviteRole(role)}\n className={`rounded-xl border px-2 py-2 text-xs font-semibold backdrop-blur-xl transition ${\n inviteRole === role\n ? 'border-indigo-400/80 bg-gradient-to-br from-indigo-100/85 via-white/80 to-sky-100/75 text-slate-900 dark:border-indigo-300/70 dark:bg-[linear-gradient(140deg,rgba(99,102,241,0.32)_0%,rgba(30,41,59,0.72)_100%)] dark:text-indigo-100'\n : 'border-white/55 bg-gradient-to-br from-white/82 via-white/66 to-slate-100/62 text-slate-700 hover:from-white/92 hover:to-sky-100/72 dark:border-white/15 dark:bg-[linear-gradient(140deg,rgba(30,41,59,0.72)_0%,rgba(15,23,42,0.62)_100%)] dark:text-slate-100 dark:hover:bg-[linear-gradient(140deg,rgba(51,65,85,0.76)_0%,rgba(30,41,59,0.68)_100%)]'\n }`}\n >\n {role}\n </PickerTile>\n ))}\n </div>\n </div>\n\n {inviteError && (\n <p className=\"text-sm text-red-600 dark:text-red-400\" role=\"alert\">{inviteError}</p>\n )}\n\n <Button\n color=\"ios-glass-blue\"\n fullWidth\n onClick={handleSendInvitation}\n loading={isInviting}\n disabled={isInviting || !inviteEmail.trim()}\n >\n {t('admin.organizationDetail.invitations.sendButton')}\n </Button>\n </div>\n </Sheet>\n </>\n )\n}\n\n// ── Domains Tab ─────────────────────────────────────────────────────────────\n\nfunction DomainsTabContent({\n organizationId,\n client,\n}: {\n organizationId: string\n client: AdminOrganizationDetailProps['client']\n}) {\n const t = useTranslations('windsock')\n\n const [domains, setDomains] = useState<AuthOrganizationDomain[]>([])\n const [isLoading, setIsLoading] = useState(true)\n const [isAddSheetOpen, setIsAddSheetOpen] = useState(false)\n const [newDomain, setNewDomain] = useState('')\n const [isAdding, setIsAdding] = useState(false)\n const [addError, setAddError] = useState<string | null>(null)\n const [verifyingDomain, setVerifyingDomain] = useState<string | null>(null)\n\n const fetchDomains = useCallback(async () => {\n setIsLoading(true)\n try {\n const result = await client.listOrganizationDomains(organizationId)\n setDomains(result)\n } catch {\n // Fail gracefully\n } finally {\n setIsLoading(false)\n }\n }, [client, organizationId])\n\n useEffect(() => {\n fetchDomains()\n }, [fetchDomains])\n\n const handleOpenAddSheet = useCallback(() => {\n triggerHaptic('light')\n setNewDomain('')\n setAddError(null)\n setIsAddSheetOpen(true)\n }, [])\n\n const handleCloseAddSheet = useCallback(() => {\n triggerHaptic('light')\n setIsAddSheetOpen(false)\n }, [])\n\n const handleAddDomain = useCallback(async () => {\n if (!newDomain.trim()) {\n setAddError(t('admin.organizationDetail.domains.errorDomainRequired'))\n triggerHaptic('error')\n return\n }\n\n setAddError(null)\n setIsAdding(true)\n triggerHaptic('light')\n\n try {\n await client.addOrganizationDomain(organizationId, newDomain.trim().toLowerCase())\n triggerHaptic('success')\n setIsAddSheetOpen(false)\n fetchDomains()\n } catch {\n setAddError(t('admin.organizationDetail.domains.errorAddFailed'))\n triggerHaptic('error')\n } finally {\n setIsAdding(false)\n }\n }, [newDomain, client, organizationId, fetchDomains, t])\n\n const handleVerifyDomain = useCallback(async (domain: string) => {\n setVerifyingDomain(domain)\n triggerHaptic('light')\n try {\n await client.verifyOrganizationDomain(organizationId, domain)\n triggerHaptic('success')\n fetchDomains()\n } catch {\n triggerHaptic('error')\n } finally {\n setVerifyingDomain(null)\n }\n }, [client, organizationId, fetchDomains])\n\n if (isLoading) {\n return (\n <div className=\"flex items-center justify-center gap-2 p-8 text-sm text-slate-500 dark:text-slate-400\">\n <InlineSpinner />\n <span>{t('admin.organizationDetail.domains.loading')}</span>\n </div>\n )\n }\n\n return (\n <>\n <div className=\"space-y-4\">\n <Button\n color=\"ios-glass-blue\"\n onClick={handleOpenAddSheet}\n fullWidth\n >\n <PlusIcon className=\"mr-1.5 h-4 w-4\" />\n {t('admin.organizationDetail.domains.addButton')}\n </Button>\n\n {domains.length === 0 ? (\n <EmptyState\n message={t('admin.organizationDetail.domains.emptyMessage')}\n description={t('admin.organizationDetail.domains.emptyDescription')}\n icon={GlobeAltIcon}\n variant=\"card\"\n />\n ) : (\n <ListCard>\n {domains.map((domain) => (\n <ListCardItem\n key={domain.id}\n leading={\n <div className={`flex h-9 w-9 items-center justify-center rounded-xl shadow-sm ${\n domain.verified\n ? 'bg-gradient-to-br from-emerald-500 to-green-600'\n : 'bg-gradient-to-br from-amber-500 to-orange-600'\n }`}>\n {domain.verified\n ? <CheckCircleIcon className=\"h-5 w-5 text-white\" />\n : <GlobeAltIcon className=\"h-5 w-5 text-white\" />\n }\n </div>\n }\n trailing={\n !domain.verified ? (\n <Button\n size=\"sm\"\n color=\"ios-glass-blue\"\n onClick={() => handleVerifyDomain(domain.domain)}\n loading={verifyingDomain === domain.domain}\n disabled={verifyingDomain !== null}\n >\n <ArrowPathIcon className=\"mr-1 h-3.5 w-3.5\" />\n {t('admin.organizationDetail.domains.verifyButton')}\n </Button>\n ) : (\n <StatusBadge status=\"active\" label={t('admin.organizationDetail.domains.verifiedLabel')} size=\"sm\" />\n )\n }\n >\n <div>\n <p className=\"text-sm font-medium text-slate-900 dark:text-white\">\n {domain.domain}\n </p>\n {domain.autoJoinEnabled && (\n <p className=\"mt-0.5 text-xs text-slate-500 dark:text-slate-400\">\n {t('admin.organizationDetail.domains.autoJoinEnabled')}\n </p>\n )}\n </div>\n </ListCardItem>\n ))}\n </ListCard>\n )}\n </div>\n\n {/* Add domain sheet */}\n <Sheet\n open={isAddSheetOpen}\n onClose={handleCloseAddSheet}\n title={t('admin.organizationDetail.domains.sheetTitle')}\n side=\"bottom\"\n size=\"md\"\n >\n <div className=\"space-y-4 p-4 sm:p-6\">\n <Input\n label={t('admin.organizationDetail.domains.domainLabel')}\n value={newDomain}\n onChange={(event: React.ChangeEvent<HTMLInputElement>) => setNewDomain(event.target.value)}\n placeholder={t('admin.organizationDetail.domains.domainPlaceholder')}\n disabled={isAdding}\n autoFocus\n />\n\n {addError && (\n <p className=\"text-sm text-red-600 dark:text-red-400\" role=\"alert\">{addError}</p>\n )}\n\n <Button\n color=\"ios-glass-blue\"\n fullWidth\n onClick={handleAddDomain}\n loading={isAdding}\n disabled={isAdding || !newDomain.trim()}\n >\n {t('admin.organizationDetail.domains.addDomainButton')}\n </Button>\n </div>\n </Sheet>\n </>\n )\n}\n\n// ── AdminOrganizationDetail ─────────────────────────────────────────────────\n\nexport function AdminOrganizationDetail({\n organization,\n client,\n}: AdminOrganizationDetailProps) {\n const t = useTranslations('windsock')\n\n const [activeTab, setActiveTab] = useState<AdminOrganizationDetailTab>('members')\n\n const segments = ALL_TABS.map((tab) => ({\n value: tab,\n label: t(`admin.organizationDetail.tabs.${tab}`),\n }))\n\n return (\n <div className=\"space-y-6\">\n {/* Organization header */}\n <SectionCard\n header={{\n icon: <UsersIcon className=\"h-5 w-5 text-white\" />,\n title: organization.displayName ?? organization.name,\n subtitle: organization.description ?? t('admin.organizationDetail.defaultSubtitle'),\n gradient: 'from-emerald-500 via-teal-500 to-cyan-500',\n rightContent: (\n <StatusBadge\n status={organization.enabled ? 'active' : 'inactive'}\n label={organization.enabled\n ? t('admin.organizationDetail.statusEnabled')\n : t('admin.organizationDetail.statusDisabled')}\n size=\"sm\"\n />\n ),\n }}\n >\n <div className=\"space-y-4\">\n <SegmentedControl\n segments={segments}\n value={activeTab}\n onChange={(value: string) => setActiveTab(value as AdminOrganizationDetailTab)}\n fullWidth\n />\n\n {activeTab === 'members' && (\n <MembersTabContent organizationId={organization.id} client={client} />\n )}\n\n {activeTab === 'invitations' && (\n <InvitationsTabContent organizationId={organization.id} client={client} />\n )}\n\n {activeTab === 'domains' && (\n <DomainsTabContent organizationId={organization.id} client={client} />\n )}\n </div>\n </SectionCard>\n </div>\n )\n}\n"]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use client";
|
|
2
|
+
import { Button } from './chunk-2SBVFLPZ.mjs';
|
|
2
3
|
import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
|
|
3
4
|
|
|
4
|
-
// src/platform/billing/upgrade-prompt.tsx
|
|
5
5
|
var TIER_DISPLAY_NAMES = {
|
|
6
6
|
free_trial: "Free Trial",
|
|
7
7
|
starter: "Starter",
|
|
@@ -57,9 +57,9 @@ function UpgradePrompt({
|
|
|
57
57
|
)
|
|
58
58
|
}
|
|
59
59
|
) }),
|
|
60
|
-
/* @__PURE__ */ jsx("h3", { className: "text-lg font-semibold text-
|
|
61
|
-
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2 text-sm text-
|
|
62
|
-
/* @__PURE__ */ jsx("span", { className: "rounded-md bg-
|
|
60
|
+
/* @__PURE__ */ jsx("h3", { className: "text-lg font-semibold text-slate-900 dark:text-white", children: heading }),
|
|
61
|
+
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2 text-sm text-slate-600 dark:text-slate-300", children: [
|
|
62
|
+
/* @__PURE__ */ jsx("span", { className: "rounded-md bg-slate-200/60 px-2 py-0.5 font-medium dark:bg-white/10", children: currentTierName }),
|
|
63
63
|
requiredTierName && /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
64
64
|
/* @__PURE__ */ jsx(
|
|
65
65
|
"svg",
|
|
@@ -67,7 +67,7 @@ function UpgradePrompt({
|
|
|
67
67
|
xmlns: "http://www.w3.org/2000/svg",
|
|
68
68
|
viewBox: "0 0 20 20",
|
|
69
69
|
fill: "currentColor",
|
|
70
|
-
className: "h-4 w-4 text-
|
|
70
|
+
className: "h-4 w-4 text-slate-400 dark:text-slate-500",
|
|
71
71
|
"aria-hidden": "true",
|
|
72
72
|
children: /* @__PURE__ */ jsx(
|
|
73
73
|
"path",
|
|
@@ -84,36 +84,8 @@ function UpgradePrompt({
|
|
|
84
84
|
] }),
|
|
85
85
|
children,
|
|
86
86
|
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-3 pt-1", children: [
|
|
87
|
-
onUpgrade && /* @__PURE__ */ jsx(
|
|
88
|
-
|
|
89
|
-
{
|
|
90
|
-
type: "button",
|
|
91
|
-
onClick: onUpgrade,
|
|
92
|
-
className: [
|
|
93
|
-
"rounded-xl bg-gradient-to-r from-violet-600 to-blue-600 px-5 py-2 text-sm font-semibold text-white",
|
|
94
|
-
"shadow-md shadow-violet-500/25 transition-all",
|
|
95
|
-
"hover:from-violet-500 hover:to-blue-500 hover:shadow-lg hover:shadow-violet-500/30",
|
|
96
|
-
"focus:outline-none focus:ring-2 focus:ring-violet-500 focus:ring-offset-2",
|
|
97
|
-
"active:scale-[0.98]",
|
|
98
|
-
"dark:shadow-violet-500/10 dark:hover:shadow-violet-500/20"
|
|
99
|
-
].join(" "),
|
|
100
|
-
children: "Upgrade Now"
|
|
101
|
-
}
|
|
102
|
-
),
|
|
103
|
-
onDismiss && /* @__PURE__ */ jsx(
|
|
104
|
-
"button",
|
|
105
|
-
{
|
|
106
|
-
type: "button",
|
|
107
|
-
onClick: onDismiss,
|
|
108
|
-
className: [
|
|
109
|
-
"rounded-xl px-4 py-2 text-sm font-medium",
|
|
110
|
-
"text-gray-500 transition-colors",
|
|
111
|
-
"hover:text-gray-700 dark:text-gray-400 dark:hover:text-gray-200",
|
|
112
|
-
"focus:outline-none focus:ring-2 focus:ring-gray-300 focus:ring-offset-2"
|
|
113
|
-
].join(" "),
|
|
114
|
-
children: "Maybe Later"
|
|
115
|
-
}
|
|
116
|
-
)
|
|
87
|
+
onUpgrade && /* @__PURE__ */ jsx(Button, { type: "button", gradient: true, onClick: onUpgrade, children: "Upgrade Now" }),
|
|
88
|
+
onDismiss && /* @__PURE__ */ jsx(Button, { type: "button", plain: true, onClick: onDismiss, children: "Maybe Later" })
|
|
117
89
|
] })
|
|
118
90
|
] })
|
|
119
91
|
]
|
|
@@ -122,5 +94,5 @@ function UpgradePrompt({
|
|
|
122
94
|
}
|
|
123
95
|
|
|
124
96
|
export { UpgradePrompt };
|
|
125
|
-
//# sourceMappingURL=chunk-
|
|
126
|
-
//# sourceMappingURL=chunk-
|
|
97
|
+
//# sourceMappingURL=chunk-ZBX7UCAP.mjs.map
|
|
98
|
+
//# sourceMappingURL=chunk-ZBX7UCAP.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/platform/billing/upgrade-prompt.tsx"],"names":[],"mappings":"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","file":"chunk-ZBX7UCAP.mjs","sourcesContent":["// =============================================================================\n// @datatechsolutions/windsock/ui — UpgradePrompt Component\n// Glassmorphism-styled prompt shown when a user hits subscription limits.\n// =============================================================================\n\nimport { type ReactNode } from 'react'\nimport type { SubscriptionTier } from '@datatechsolutions/shared-domain'\nimport { Button } from '@ui/components/button'\n\n/** Human-readable tier display names */\nconst TIER_DISPLAY_NAMES: Record<SubscriptionTier, string> = {\n free_trial: 'Free Trial',\n starter: 'Starter',\n professional: 'Professional',\n enterprise: 'Enterprise',\n}\n\ninterface UpgradePromptProps {\n /** The user's current subscription tier */\n currentTier: SubscriptionTier\n /** The minimum tier required for access (shown in the prompt) */\n requiredTier?: SubscriptionTier\n /** Feature name that triggered the prompt */\n feature?: string\n /** Called when the user clicks \"Upgrade Now\" */\n onUpgrade?: () => void\n /** Called when the user dismisses the prompt */\n onDismiss?: () => void\n /** Optional custom content to render inside the card */\n children?: ReactNode\n}\n\n/**\n * A glassmorphism-styled upgrade prompt shown when users hit subscription\n * limits or try to access features above their current tier.\n *\n * Renders a card with the current tier, the required tier (or feature name),\n * and action buttons for upgrading or dismissing.\n */\nexport function UpgradePrompt({\n currentTier,\n requiredTier,\n feature,\n onUpgrade,\n onDismiss,\n children,\n}: UpgradePromptProps) {\n const currentTierName = TIER_DISPLAY_NAMES[currentTier] ?? currentTier\n const requiredTierName = requiredTier ? TIER_DISPLAY_NAMES[requiredTier] ?? requiredTier : null\n\n const heading = feature\n ? `Upgrade to unlock ${feature}`\n : requiredTierName\n ? `Upgrade to ${requiredTierName}`\n : 'Upgrade your plan'\n\n return (\n <div\n className={[\n 'relative overflow-hidden rounded-2xl border border-white/20',\n 'bg-white/10 p-6 backdrop-blur-xl',\n 'shadow-lg shadow-black/5',\n 'dark:border-white/10 dark:bg-white/5 dark:shadow-black/20',\n ].join(' ')}\n role=\"alert\"\n aria-label=\"Subscription upgrade prompt\"\n >\n {/* Decorative gradient accent */}\n <div\n className=\"pointer-events-none absolute -right-8 -top-8 h-32 w-32 rounded-full bg-gradient-to-br from-violet-500/20 to-blue-500/20 blur-2xl\"\n aria-hidden=\"true\"\n />\n\n <div className=\"relative flex flex-col gap-4\">\n {/* Icon */}\n <div className=\"flex h-10 w-10 items-center justify-center rounded-xl bg-gradient-to-br from-violet-500 to-blue-500 text-white\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n className=\"h-5 w-5\"\n aria-hidden=\"true\"\n >\n <path\n fillRule=\"evenodd\"\n d=\"M9 4.5a.75.75 0 0 1 .721.544l.813 2.846a3.75 3.75 0 0 0 2.576 2.576l2.846.813a.75.75 0 0 1 0 1.442l-2.846.813a3.75 3.75 0 0 0-2.576 2.576l-.813 2.846a.75.75 0 0 1-1.442 0l-.813-2.846a3.75 3.75 0 0 0-2.576-2.576l-2.846-.813a.75.75 0 0 1 0-1.442l2.846-.813A3.75 3.75 0 0 0 7.466 7.89l.813-2.846A.75.75 0 0 1 9 4.5ZM18 1.5a.75.75 0 0 1 .728.568l.258 1.036c.236.94.97 1.674 1.91 1.91l1.036.258a.75.75 0 0 1 0 1.456l-1.036.258c-.94.236-1.674.97-1.91 1.91l-.258 1.036a.75.75 0 0 1-1.456 0l-.258-1.036a2.625 2.625 0 0 0-1.91-1.91l-1.036-.258a.75.75 0 0 1 0-1.456l1.036-.258a2.625 2.625 0 0 0 1.91-1.91l.258-1.036A.75.75 0 0 1 18 1.5Z\"\n clipRule=\"evenodd\"\n />\n </svg>\n </div>\n\n {/* Heading */}\n <h3 className=\"text-lg font-semibold text-slate-900 dark:text-white\">\n {heading}\n </h3>\n\n {/* Tier comparison */}\n <div className=\"flex items-center gap-2 text-sm text-slate-600 dark:text-slate-300\">\n <span className=\"rounded-md bg-slate-200/60 px-2 py-0.5 font-medium dark:bg-white/10\">\n {currentTierName}\n </span>\n {requiredTierName && (\n <>\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n className=\"h-4 w-4 text-slate-400 dark:text-slate-500\"\n aria-hidden=\"true\"\n >\n <path\n fillRule=\"evenodd\"\n d=\"M3 10a.75.75 0 0 1 .75-.75h10.638L10.23 5.29a.75.75 0 1 1 1.04-1.08l5.5 5.25a.75.75 0 0 1 0 1.08l-5.5 5.25a.75.75 0 1 1-1.04-1.08l4.158-3.96H3.75A.75.75 0 0 1 3 10Z\"\n clipRule=\"evenodd\"\n />\n </svg>\n <span className=\"rounded-md bg-gradient-to-r from-violet-500/10 to-blue-500/10 px-2 py-0.5 font-medium text-violet-700 dark:from-violet-500/20 dark:to-blue-500/20 dark:text-violet-300\">\n {requiredTierName}\n </span>\n </>\n )}\n </div>\n\n {/* Optional custom content */}\n {children}\n\n {/* Actions */}\n <div className=\"flex items-center gap-3 pt-1\">\n {onUpgrade && (\n <Button type=\"button\" gradient onClick={onUpgrade}>\n Upgrade Now\n </Button>\n )}\n {onDismiss && (\n <Button type=\"button\" plain onClick={onDismiss}>\n Maybe Later\n </Button>\n )}\n </div>\n </div>\n </div>\n )\n}\n\nexport type { UpgradePromptProps }\n"]}
|