@stigmer/react 3.31.0 → 3.33.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/api-key/ApiKeyListPanel.js +2 -4
- package/api-key/ApiKeyListPanel.js.map +1 -1
- package/iam-policy/OrgMembersPanel.d.ts +7 -0
- package/iam-policy/OrgMembersPanel.d.ts.map +1 -1
- package/iam-policy/OrgMembersPanel.js +28 -12
- package/iam-policy/OrgMembersPanel.js.map +1 -1
- package/iam-policy/RoleSelector.d.ts +7 -1
- package/iam-policy/RoleSelector.d.ts.map +1 -1
- package/iam-policy/RoleSelector.js +2 -2
- package/iam-policy/RoleSelector.js.map +1 -1
- package/iam-policy/useOwnerAssignment.d.ts +23 -0
- package/iam-policy/useOwnerAssignment.d.ts.map +1 -0
- package/iam-policy/useOwnerAssignment.js +23 -0
- package/iam-policy/useOwnerAssignment.js.map +1 -0
- package/iam-policy/useRoleSelector.d.ts +6 -1
- package/iam-policy/useRoleSelector.d.ts.map +1 -1
- package/iam-policy/useRoleSelector.js +11 -3
- package/iam-policy/useRoleSelector.js.map +1 -1
- package/internal/LastUsedLabel.d.ts +20 -0
- package/internal/LastUsedLabel.d.ts.map +1 -0
- package/internal/LastUsedLabel.js +23 -0
- package/internal/LastUsedLabel.js.map +1 -0
- package/invitation/InvitationManager.d.ts.map +1 -1
- package/invitation/InvitationManager.js +5 -1
- package/invitation/InvitationManager.js.map +1 -1
- package/package.json +5 -5
- package/platform-client/PlatformClientDetailPanel.d.ts +13 -3
- package/platform-client/PlatformClientDetailPanel.d.ts.map +1 -1
- package/platform-client/PlatformClientDetailPanel.js +28 -10
- package/platform-client/PlatformClientDetailPanel.js.map +1 -1
- package/platform-client/PlatformClientListPanel.d.ts +19 -3
- package/platform-client/PlatformClientListPanel.d.ts.map +1 -1
- package/platform-client/PlatformClientListPanel.js +13 -8
- package/platform-client/PlatformClientListPanel.js.map +1 -1
- package/platform-client/copy.d.ts +14 -0
- package/platform-client/copy.d.ts.map +1 -0
- package/platform-client/copy.js +14 -0
- package/platform-client/copy.js.map +1 -0
- package/platform-client/expiry.d.ts +4 -0
- package/platform-client/expiry.d.ts.map +1 -0
- package/platform-client/expiry.js +18 -0
- package/platform-client/expiry.js.map +1 -0
- package/settings/MembersSection.d.ts.map +1 -1
- package/settings/MembersSection.js +1 -1
- package/settings/MembersSection.js.map +1 -1
- package/settings/PlatformClientsSection.d.ts +7 -0
- package/settings/PlatformClientsSection.d.ts.map +1 -1
- package/settings/PlatformClientsSection.js +18 -2
- package/settings/PlatformClientsSection.js.map +1 -1
- package/src/api-key/ApiKeyListPanel.tsx +2 -6
- package/src/iam-policy/OrgMembersPanel.tsx +38 -8
- package/src/iam-policy/RoleSelector.tsx +8 -0
- package/src/iam-policy/__tests__/OrgMembersPanel.test.tsx +139 -0
- package/src/iam-policy/__tests__/useOwnerAssignment.test.tsx +55 -0
- package/src/iam-policy/useOwnerAssignment.ts +40 -0
- package/src/iam-policy/useRoleSelector.ts +14 -3
- package/src/internal/LastUsedLabel.tsx +41 -0
- package/src/invitation/InvitationManager.tsx +5 -0
- package/src/platform-client/PlatformClientDetailPanel.tsx +69 -12
- package/src/platform-client/PlatformClientListPanel.tsx +57 -21
- package/src/platform-client/__tests__/PlatformClientDetailPanel.test.tsx +139 -4
- package/src/platform-client/__tests__/PlatformClientListPanel.test.tsx +140 -0
- package/src/platform-client/__tests__/expiry.test.ts +37 -0
- package/src/platform-client/copy.ts +15 -0
- package/src/platform-client/expiry.ts +22 -0
- package/src/settings/MembersSection.tsx +2 -1
- package/src/settings/PlatformClientsSection.tsx +23 -2
- package/src/settings/__tests__/PlatformClientsSection.test.tsx +92 -5
|
@@ -8,7 +8,7 @@ import { Tooltip, TooltipContent, TooltipTrigger } from "../internal/tooltip.js"
|
|
|
8
8
|
import { useApiKeyList } from "./useApiKeyList.js";
|
|
9
9
|
import { useDeleteApiKey } from "./useDeleteApiKey.js";
|
|
10
10
|
import { SpinnerIcon } from "../internal/SpinnerIcon.js";
|
|
11
|
-
import {
|
|
11
|
+
import { LastUsedLabel } from "../internal/LastUsedLabel.js";
|
|
12
12
|
/**
|
|
13
13
|
* Displays a list of {@link ApiKey} resources for the authenticated
|
|
14
14
|
* identity with inline delete confirmation.
|
|
@@ -83,9 +83,7 @@ function ApiKeyRow({ apiKey, now, isConfirming, onConfirmDelete, onCancelDelete,
|
|
|
83
83
|
? "No expiry"
|
|
84
84
|
: expiresAt
|
|
85
85
|
? `Expires ${formatShortDate(timestampDate(expiresAt))}`
|
|
86
|
-
: "No expiry" }), _jsx("
|
|
87
|
-
? formatRelativeTime(timestampDate(lastUsedAt), now)
|
|
88
|
-
: "Never used" })] }), _jsx("button", { type: "button", onClick: onConfirmDelete, "aria-label": `Delete ${name}`, className: cn("stg:shrink-0 stg:rounded stg:p-1", "stg:text-muted-foreground stg:hover:text-destructive stg:hover:bg-destructive-subtle", "stg:transition-colors"), children: _jsx(TrashIcon, {}) })] }));
|
|
86
|
+
: "No expiry" }), _jsx(LastUsedLabel, { at: lastUsedAt, now: now })] }), _jsx("button", { type: "button", onClick: onConfirmDelete, "aria-label": `Delete ${name}`, className: cn("stg:shrink-0 stg:rounded stg:p-1", "stg:text-muted-foreground stg:hover:text-destructive stg:hover:bg-destructive-subtle", "stg:transition-colors"), children: _jsx(TrashIcon, {}) })] }));
|
|
89
87
|
}
|
|
90
88
|
// ---------------------------------------------------------------------------
|
|
91
89
|
// Formatting helpers
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ApiKeyListPanel.js","sourceRoot":"","sources":["../../src/api-key/ApiKeyListPanel.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAC9C,OAAO,EAAE,EAAE,EAAE,MAAM,gBAAgB,CAAC;AACpC,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAEvD,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACjF,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACzD,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"ApiKeyListPanel.js","sourceRoot":"","sources":["../../src/api-key/ApiKeyListPanel.tsx"],"names":[],"mappings":"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"}
|
|
@@ -19,6 +19,13 @@ export interface OrgMembersPanelProps {
|
|
|
19
19
|
* `identityAccount.whoAmI()` for self-protection (disabling
|
|
20
20
|
* destructive actions on yourself).
|
|
21
21
|
*
|
|
22
|
+
* Owner is assigned by owners: the server asks `can_assign_roles` on the
|
|
23
|
+
* organization before any change to the owner role. The panel asks the
|
|
24
|
+
* same question once, and for a caller without it offers no owner in the
|
|
25
|
+
* role picker and no change or removal on an owner's row. A role change
|
|
26
|
+
* grants the new role before it revokes the old one, so a refused step
|
|
27
|
+
* leaves the member with the role they had.
|
|
28
|
+
*
|
|
22
29
|
* All visual properties flow through `--stgm-*` design tokens.
|
|
23
30
|
*
|
|
24
31
|
* @example
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OrgMembersPanel.d.ts","sourceRoot":"","sources":["../../src/iam-policy/OrgMembersPanel.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"OrgMembersPanel.d.ts","sourceRoot":"","sources":["../../src/iam-policy/OrgMembersPanel.tsx"],"names":[],"mappings":"AAiCA,yCAAyC;AACzC,MAAM,WAAW,oBAAoB;IACnC,+DAA+D;IAC/D,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,oDAAoD;IACpD,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,IAAI,KAAK,IAAI,CAAC;IACtD,yDAAyD;IACzD,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,eAAe,CAAC,EAC9B,KAAK,EACL,YAAY,EACZ,SAAS,GACV,EAAE,oBAAoB,2CAoFtB"}
|
|
@@ -3,10 +3,12 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
|
3
3
|
import { useCallback, useState } from "react";
|
|
4
4
|
import { create } from "@bufbuild/protobuf";
|
|
5
5
|
import { ApiResourceKind } from "@stigmer/protos/ai/stigmer/commons/apiresource/apiresourcekind/api_resource_kind_pb";
|
|
6
|
+
import { IamRole } from "@stigmer/protos/ai/stigmer/iam/v1/enum_pb";
|
|
6
7
|
import { IamPolicySpecSchema, ApiResourceRefSchema, } from "@stigmer/protos/ai/stigmer/iam/iampolicy/v1/spec_pb";
|
|
7
8
|
import { cn } from "@stigmer/theme";
|
|
8
9
|
import { getUserMessage, iamRoleFromString, iamRoleToString, } from "@stigmer/sdk";
|
|
9
10
|
import { Tooltip, TooltipContent, TooltipTrigger } from "../internal/tooltip.js";
|
|
11
|
+
import { useOwnerAssignment } from "./useOwnerAssignment.js";
|
|
10
12
|
import { useResourceAccess } from "./useResourceAccess.js";
|
|
11
13
|
import { usePrincipalsCount } from "./usePrincipalsCount.js";
|
|
12
14
|
import { useWhoAmI } from "./useWhoAmI.js";
|
|
@@ -28,6 +30,13 @@ import { SpinnerIcon } from "../internal/SpinnerIcon.js";
|
|
|
28
30
|
* `identityAccount.whoAmI()` for self-protection (disabling
|
|
29
31
|
* destructive actions on yourself).
|
|
30
32
|
*
|
|
33
|
+
* Owner is assigned by owners: the server asks `can_assign_roles` on the
|
|
34
|
+
* organization before any change to the owner role. The panel asks the
|
|
35
|
+
* same question once, and for a caller without it offers no owner in the
|
|
36
|
+
* role picker and no change or removal on an owner's row. A role change
|
|
37
|
+
* grants the new role before it revokes the old one, so a refused step
|
|
38
|
+
* leaves the member with the role they had.
|
|
39
|
+
*
|
|
31
40
|
* All visual properties flow through `--stgm-*` design tokens.
|
|
32
41
|
*
|
|
33
42
|
* @example
|
|
@@ -41,6 +50,7 @@ export function OrgMembersPanel({ orgId, onRefetchRef, className, }) {
|
|
|
41
50
|
const { count, refetch: refetchCount } = usePrincipalsCount(orgId || null);
|
|
42
51
|
const { account: currentAccount } = useWhoAmI();
|
|
43
52
|
const currentAccountId = currentAccount?.metadata?.id ?? null;
|
|
53
|
+
const { canAssignOwner, unassignable } = useOwnerAssignment(orgId || null);
|
|
44
54
|
const [actionMemberId, setActionMemberId] = useState(null);
|
|
45
55
|
const handleRefetch = useCallback(() => {
|
|
46
56
|
refetch();
|
|
@@ -57,13 +67,13 @@ export function OrgMembersPanel({ orgId, onRefetchRef, className, }) {
|
|
|
57
67
|
}
|
|
58
68
|
return (_jsxs("div", { className: cn("stg:space-y-3", className), children: [_jsxs("div", { className: "stg:flex stg:items-center stg:gap-2", children: [_jsx("span", { className: "stg:text-sm stg:font-semibold stg:text-foreground", children: "Members" }), count > 0 && (_jsx("span", { className: "stg:inline-flex stg:items-center stg:rounded-full stg:bg-muted stg:px-2 stg:py-0.5 stg:text-[0.65rem] stg:font-medium stg:text-muted-foreground", children: count }))] }), members.length === 0 ? (_jsx("p", { className: "stg:text-muted-foreground stg:py-4 stg:text-center stg:text-xs", children: "No members found." })) : (_jsx("div", { role: "list", "aria-label": "Organization members", className: "stg:space-y-2", children: members.map((entry) => {
|
|
59
69
|
const memberId = entry.principal?.id ?? "";
|
|
60
|
-
return (_jsx(MemberRow, { entry: entry, orgId: orgId, isSelf: memberId === currentAccountId, isActioning: actionMemberId === memberId, onStartAction: () => setActionMemberId(memberId), onEndAction: () => setActionMemberId(null), onMutated: handleRefetch }, memberId));
|
|
70
|
+
return (_jsx(MemberRow, { entry: entry, orgId: orgId, isSelf: memberId === currentAccountId, canAssignOwner: canAssignOwner, unassignable: unassignable, isActioning: actionMemberId === memberId, onStartAction: () => setActionMemberId(memberId), onEndAction: () => setActionMemberId(null), onMutated: handleRefetch }, memberId));
|
|
61
71
|
}) }))] }));
|
|
62
72
|
}
|
|
63
73
|
// ---------------------------------------------------------------------------
|
|
64
74
|
// MemberRow (internal)
|
|
65
75
|
// ---------------------------------------------------------------------------
|
|
66
|
-
function MemberRow({ entry, orgId, isSelf, isActioning, onStartAction, onEndAction, onMutated, }) {
|
|
76
|
+
function MemberRow({ entry, orgId, isSelf, canAssignOwner, unassignable, isActioning, onStartAction, onEndAction, onMutated, }) {
|
|
67
77
|
const [actionType, setActionType] = useState(null);
|
|
68
78
|
const principal = entry.principal;
|
|
69
79
|
const memberId = principal?.id ?? "";
|
|
@@ -71,6 +81,9 @@ function MemberRow({ entry, orgId, isSelf, isActioning, onStartAction, onEndActi
|
|
|
71
81
|
const email = principal?.email ?? "";
|
|
72
82
|
const initial = name.charAt(0).toUpperCase();
|
|
73
83
|
const directRoles = entry.roles.filter((r) => !r.isInherited);
|
|
84
|
+
const holdsOwner = directRoles.some((grant) => grant.role?.code === iamRoleToString(IamRole.owner));
|
|
85
|
+
// Changing or removing an owner changes the owner role: an owner's act.
|
|
86
|
+
const mayAct = !isSelf && (canAssignOwner || !holdsOwner);
|
|
74
87
|
const startAction = (type) => {
|
|
75
88
|
setActionType(type);
|
|
76
89
|
onStartAction();
|
|
@@ -86,12 +99,12 @@ function MemberRow({ entry, orgId, isSelf, isActioning, onStartAction, onEndActi
|
|
|
86
99
|
}, onCancel: cancelAction }));
|
|
87
100
|
}
|
|
88
101
|
if (isActioning && actionType === "change-role") {
|
|
89
|
-
return (_jsx(ChangeRoleRow, { entry: entry, orgId: orgId, onDone: () => {
|
|
102
|
+
return (_jsx(ChangeRoleRow, { entry: entry, orgId: orgId, omitRoles: unassignable, onDone: () => {
|
|
90
103
|
cancelAction();
|
|
91
104
|
onMutated();
|
|
92
105
|
}, onCancel: cancelAction }));
|
|
93
106
|
}
|
|
94
|
-
return (_jsxs("div", { role: "listitem", className: "stg:flex stg:items-center stg:gap-3 stg:rounded-lg stg:border stg:border-border-muted stg:px-3 stg:py-2.5 stg:hover:border-border stg:transition-colors", children: [_jsx("div", { className: "stg:flex stg:size-8 stg:shrink-0 stg:items-center stg:justify-center stg:rounded-full stg:bg-muted stg:text-xs stg:font-medium stg:text-muted-foreground", children: initial }), _jsxs("div", { className: "stg:min-w-0 stg:flex-1", children: [_jsxs("div", { className: "stg:flex stg:items-center stg:gap-1.5", children: [_jsx("span", { className: "stg:truncate stg:text-sm stg:font-medium stg:text-foreground", children: name }), isSelf && (_jsx("span", { className: "stg:rounded stg:bg-muted stg:px-1.5 stg:py-0.5 stg:text-[0.6rem] stg:font-medium stg:text-muted-foreground", children: "You" })), _jsx(ProviderBadge, { principal: principal })] }), email && email !== name && (_jsx("span", { className: "stg:block stg:truncate stg:text-xs stg:text-muted-foreground", children: email }))] }), _jsx("div", { className: "stg:hidden stg:sm:flex stg:shrink-0 stg:items-center stg:gap-1.5", children: directRoles.map((grant) => (_jsx(RoleBadge, { grant: grant }, grant.role?.code ?? ""))) }),
|
|
107
|
+
return (_jsxs("div", { role: "listitem", className: "stg:flex stg:items-center stg:gap-3 stg:rounded-lg stg:border stg:border-border-muted stg:px-3 stg:py-2.5 stg:hover:border-border stg:transition-colors", children: [_jsx("div", { className: "stg:flex stg:size-8 stg:shrink-0 stg:items-center stg:justify-center stg:rounded-full stg:bg-muted stg:text-xs stg:font-medium stg:text-muted-foreground", children: initial }), _jsxs("div", { className: "stg:min-w-0 stg:flex-1", children: [_jsxs("div", { className: "stg:flex stg:items-center stg:gap-1.5", children: [_jsx("span", { className: "stg:truncate stg:text-sm stg:font-medium stg:text-foreground", children: name }), isSelf && (_jsx("span", { className: "stg:rounded stg:bg-muted stg:px-1.5 stg:py-0.5 stg:text-[0.6rem] stg:font-medium stg:text-muted-foreground", children: "You" })), _jsx(ProviderBadge, { principal: principal })] }), email && email !== name && (_jsx("span", { className: "stg:block stg:truncate stg:text-xs stg:text-muted-foreground", children: email }))] }), _jsx("div", { className: "stg:hidden stg:sm:flex stg:shrink-0 stg:items-center stg:gap-1.5", children: directRoles.map((grant) => (_jsx(RoleBadge, { grant: grant }, grant.role?.code ?? ""))) }), mayAct && (_jsxs("div", { className: "stg:flex stg:shrink-0 stg:items-center stg:gap-1", children: [_jsx("button", { type: "button", onClick: () => startAction("change-role"), "aria-label": `Change role for ${name}`, className: "stg:shrink-0 stg:rounded stg:p-1 stg:text-muted-foreground stg:hover:text-foreground stg:hover:bg-accent-hover stg:transition-colors", children: _jsx(EditIcon, {}) }), _jsx("button", { type: "button", onClick: () => startAction("remove"), "aria-label": `Remove ${name}`, className: "stg:shrink-0 stg:rounded stg:p-1 stg:text-muted-foreground stg:hover:text-destructive stg:hover:bg-destructive-subtle stg:transition-colors", children: _jsx(TrashIcon, {}) })] }))] }));
|
|
95
108
|
}
|
|
96
109
|
// ---------------------------------------------------------------------------
|
|
97
110
|
// RoleBadge (internal)
|
|
@@ -123,7 +136,7 @@ function RemoveConfirmation({ memberId, memberName, orgId, onDone, onCancel, })
|
|
|
123
136
|
// ---------------------------------------------------------------------------
|
|
124
137
|
// ChangeRoleRow (internal)
|
|
125
138
|
// ---------------------------------------------------------------------------
|
|
126
|
-
function ChangeRoleRow({ entry, orgId, onDone, onCancel, }) {
|
|
139
|
+
function ChangeRoleRow({ entry, orgId, omitRoles, onDone, onCancel, }) {
|
|
127
140
|
const { create: createPolicy, isCreating } = useCreateIamPolicy();
|
|
128
141
|
const { remove: deletePolicy, isDeleting } = useDeleteIamPolicy();
|
|
129
142
|
const memberId = entry.principal?.id ?? "";
|
|
@@ -142,7 +155,10 @@ function ChangeRoleRow({ entry, orgId, onDone, onCancel, }) {
|
|
|
142
155
|
return;
|
|
143
156
|
setError(null);
|
|
144
157
|
try {
|
|
145
|
-
|
|
158
|
+
// Grant first, then revoke: a refusal of either step (the owner rule,
|
|
159
|
+
// an organization's last owner) leaves the member holding a role, never
|
|
160
|
+
// none, and the revoke is the one that can be retried.
|
|
161
|
+
const createSpec = create(IamPolicySpecSchema, {
|
|
146
162
|
principal: create(ApiResourceRefSchema, {
|
|
147
163
|
kind: "identity_account",
|
|
148
164
|
id: memberId,
|
|
@@ -151,10 +167,10 @@ function ChangeRoleRow({ entry, orgId, onDone, onCancel, }) {
|
|
|
151
167
|
kind: "organization",
|
|
152
168
|
id: orgId,
|
|
153
169
|
}),
|
|
154
|
-
relation:
|
|
170
|
+
relation: iamRoleToString(selectedRole),
|
|
155
171
|
});
|
|
156
|
-
await
|
|
157
|
-
const
|
|
172
|
+
await createPolicy(createSpec);
|
|
173
|
+
const deleteSpec = create(IamPolicySpecSchema, {
|
|
158
174
|
principal: create(ApiResourceRefSchema, {
|
|
159
175
|
kind: "identity_account",
|
|
160
176
|
id: memberId,
|
|
@@ -163,9 +179,9 @@ function ChangeRoleRow({ entry, orgId, onDone, onCancel, }) {
|
|
|
163
179
|
kind: "organization",
|
|
164
180
|
id: orgId,
|
|
165
181
|
}),
|
|
166
|
-
relation:
|
|
182
|
+
relation: currentRoleCode,
|
|
167
183
|
});
|
|
168
|
-
await
|
|
184
|
+
await deletePolicy(deleteSpec);
|
|
169
185
|
onDone();
|
|
170
186
|
}
|
|
171
187
|
catch (err) {
|
|
@@ -180,7 +196,7 @@ function ChangeRoleRow({ entry, orgId, onDone, onCancel, }) {
|
|
|
180
196
|
createPolicy,
|
|
181
197
|
onDone,
|
|
182
198
|
]);
|
|
183
|
-
return (_jsxs("div", { role: "listitem", className: "stg:rounded-lg stg:border stg:border-primary/30 stg:bg-primary-subtle stg:px-3 stg:py-2.5 stg:space-y-2", children: [_jsxs("p", { className: "stg:text-xs stg:text-foreground", children: ["Change role for ", _jsx("span", { className: "stg:font-medium", children: memberName })] }), _jsx(RoleSelector, { kind: ApiResourceKind.organization, selected: selectedRole ?? currentRole, onSelect: setSelectedRole, disabled: isWorking }), error && (_jsx("p", { className: "stg:text-[0.65rem] stg:text-destructive", role: "alert", children: getUserMessage(error) })), _jsxs("div", { className: "stg:flex stg:items-center stg:gap-1.5", children: [_jsxs("button", { type: "button", onClick: handleConfirm, disabled: !canConfirm, className: cn("stg:inline-flex stg:items-center stg:gap-1 stg:rounded-md stg:px-2.5 stg:py-1 stg:text-xs stg:font-medium", "stg:bg-primary stg:text-primary-foreground stg:hover:bg-primary-hover", "stg:disabled:pointer-events-none stg:disabled:opacity-40"), children: [isWorking && _jsx(SpinnerIcon, { size: 12 }), isWorking ? "Changing role…" : "Confirm"] }), _jsx("button", { type: "button", onClick: onCancel, disabled: isWorking, className: cn("stg:rounded-md stg:px-2.5 stg:py-1 stg:text-xs", "stg:text-muted-foreground stg:hover:text-foreground stg:hover:bg-accent-hover", "stg:disabled:pointer-events-none stg:disabled:opacity-50"), children: "Cancel" })] })] }));
|
|
199
|
+
return (_jsxs("div", { role: "listitem", className: "stg:rounded-lg stg:border stg:border-primary/30 stg:bg-primary-subtle stg:px-3 stg:py-2.5 stg:space-y-2", children: [_jsxs("p", { className: "stg:text-xs stg:text-foreground", children: ["Change role for ", _jsx("span", { className: "stg:font-medium", children: memberName })] }), _jsx(RoleSelector, { kind: ApiResourceKind.organization, selected: selectedRole ?? currentRole, onSelect: setSelectedRole, omitRoles: omitRoles, disabled: isWorking }), error && (_jsx("p", { className: "stg:text-[0.65rem] stg:text-destructive", role: "alert", children: getUserMessage(error) })), _jsxs("div", { className: "stg:flex stg:items-center stg:gap-1.5", children: [_jsxs("button", { type: "button", onClick: handleConfirm, disabled: !canConfirm, className: cn("stg:inline-flex stg:items-center stg:gap-1 stg:rounded-md stg:px-2.5 stg:py-1 stg:text-xs stg:font-medium", "stg:bg-primary stg:text-primary-foreground stg:hover:bg-primary-hover", "stg:disabled:pointer-events-none stg:disabled:opacity-40"), children: [isWorking && _jsx(SpinnerIcon, { size: 12 }), isWorking ? "Changing role…" : "Confirm"] }), _jsx("button", { type: "button", onClick: onCancel, disabled: isWorking, className: cn("stg:rounded-md stg:px-2.5 stg:py-1 stg:text-xs", "stg:text-muted-foreground stg:hover:text-foreground stg:hover:bg-accent-hover", "stg:disabled:pointer-events-none stg:disabled:opacity-50"), children: "Cancel" })] })] }));
|
|
184
200
|
}
|
|
185
201
|
// ---------------------------------------------------------------------------
|
|
186
202
|
// Icons
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OrgMembersPanel.js","sourceRoot":"","sources":["../../src/iam-policy/OrgMembersPanel.tsx"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"OrgMembersPanel.js","sourceRoot":"","sources":["../../src/iam-policy/OrgMembersPanel.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAC9C,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAE,MAAM,qFAAqF,CAAC;AACtH,OAAO,EAAE,OAAO,EAAE,MAAM,2CAA2C,CAAC;AAEpE,OAAO,EACL,mBAAmB,EACnB,oBAAoB,GACrB,MAAM,qDAAqD,CAAC;AAC7D,OAAO,EAAE,EAAE,EAAE,MAAM,gBAAgB,CAAC;AACpC,OAAO,EACL,cAAc,EACd,iBAAiB,EACjB,eAAe,GAChB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACjF,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAgBzD;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,MAAM,UAAU,eAAe,CAAC,EAC9B,KAAK,EACL,YAAY,EACZ,SAAS,GACY;IACrB,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IACpE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,iBAAiB,CAAC,QAAQ,CAAC,CAAC;IAC3E,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,YAAY,EAAE,GAAG,kBAAkB,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC;IAC3E,MAAM,EAAE,OAAO,EAAE,cAAc,EAAE,GAAG,SAAS,EAAE,CAAC;IAChD,MAAM,gBAAgB,GAAG,cAAc,EAAE,QAAQ,EAAE,EAAE,IAAI,IAAI,CAAC;IAC9D,MAAM,EAAE,cAAc,EAAE,YAAY,EAAE,GAAG,kBAAkB,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC;IAE3E,MAAM,CAAC,cAAc,EAAE,iBAAiB,CAAC,GAAG,QAAQ,CAAgB,IAAI,CAAC,CAAC;IAE1E,MAAM,aAAa,GAAG,WAAW,CAAC,GAAG,EAAE;QACrC,OAAO,EAAE,CAAC;QACV,YAAY,EAAE,CAAC;IACjB,CAAC,EAAE,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC;IAE5B,IAAI,YAAY,EAAE,CAAC;QACjB,YAAY,CAAC,aAAa,CAAC,CAAC;IAC9B,CAAC;IAED,IAAI,SAAS,EAAE,CAAC;QACd,OAAO,CACL,cACE,SAAS,EAAE,EAAE,CAAC,eAAe,EAAE,SAAS,CAAC,eAC/B,MAAM,gBACL,iBAAiB,YAE3B,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CACnC,cAEE,SAAS,EAAC,+DAA+D,IADpE,CAAC,CAEN,CACH,CAAC,GACE,CACP,CAAC;IACJ,CAAC;IAED,IAAI,KAAK,EAAE,CAAC;QACV,OAAO,CACL,YAAG,SAAS,EAAE,EAAE,CAAC,kCAAkC,EAAE,SAAS,CAAC,EAAE,IAAI,EAAC,OAAO,YAC1E,cAAc,CAAC,KAAK,CAAC,GACpB,CACL,CAAC;IACJ,CAAC;IAED,OAAO,CACL,eAAK,SAAS,EAAE,EAAE,CAAC,eAAe,EAAE,SAAS,CAAC,aAE5C,eAAK,SAAS,EAAC,qCAAqC,aAClD,eAAM,SAAS,EAAC,mDAAmD,wBAAe,EACjF,KAAK,GAAG,CAAC,IAAI,CACZ,eAAM,SAAS,EAAC,iJAAiJ,YAC9J,KAAK,GACD,CACR,IACG,EAGL,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CACtB,YAAG,SAAS,EAAC,gEAAgE,kCAEzE,CACL,CAAC,CAAC,CAAC,CACF,cAAK,IAAI,EAAC,MAAM,gBAAY,sBAAsB,EAAC,SAAS,EAAC,eAAe,YACzE,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;oBACrB,MAAM,QAAQ,GAAG,KAAK,CAAC,SAAS,EAAE,EAAE,IAAI,EAAE,CAAC;oBAC3C,OAAO,CACL,KAAC,SAAS,IAER,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,KAAK,EACZ,MAAM,EAAE,QAAQ,KAAK,gBAAgB,EACrC,cAAc,EAAE,cAAc,EAC9B,YAAY,EAAE,YAAY,EAC1B,WAAW,EAAE,cAAc,KAAK,QAAQ,EACxC,aAAa,EAAE,GAAG,EAAE,CAAC,iBAAiB,CAAC,QAAQ,CAAC,EAChD,WAAW,EAAE,GAAG,EAAE,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAC1C,SAAS,EAAE,aAAa,IATnB,QAAQ,CAUb,CACH,CAAC;gBACJ,CAAC,CAAC,GACE,CACP,IACG,CACP,CAAC;AACJ,CAAC;AAED,8EAA8E;AAC9E,uBAAuB;AACvB,8EAA8E;AAE9E,SAAS,SAAS,CAAC,EACjB,KAAK,EACL,KAAK,EACL,MAAM,EACN,cAAc,EACd,YAAY,EACZ,WAAW,EACX,aAAa,EACb,WAAW,EACX,SAAS,GAaV;IACC,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,QAAQ,CAC1C,IAAI,CACL,CAAC;IAEF,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC;IAClC,MAAM,QAAQ,GAAG,SAAS,EAAE,EAAE,IAAI,EAAE,CAAC;IACrC,MAAM,IAAI,GAAG,SAAS,EAAE,IAAI,IAAI,SAAS,EAAE,KAAK,IAAI,QAAQ,CAAC;IAC7D,MAAM,KAAK,GAAG,SAAS,EAAE,KAAK,IAAI,EAAE,CAAC;IACrC,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;IAC7C,MAAM,WAAW,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;IAC9D,MAAM,UAAU,GAAG,WAAW,CAAC,IAAI,CACjC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,KAAK,eAAe,CAAC,OAAO,CAAC,KAAK,CAAC,CAC/D,CAAC;IACF,wEAAwE;IACxE,MAAM,MAAM,GAAG,CAAC,MAAM,IAAI,CAAC,cAAc,IAAI,CAAC,UAAU,CAAC,CAAC;IAE1D,MAAM,WAAW,GAAG,CAAC,IAA8B,EAAE,EAAE;QACrD,aAAa,CAAC,IAAI,CAAC,CAAC;QACpB,aAAa,EAAE,CAAC;IAClB,CAAC,CAAC;IAEF,MAAM,YAAY,GAAG,GAAG,EAAE;QACxB,aAAa,CAAC,IAAI,CAAC,CAAC;QACpB,WAAW,EAAE,CAAC;IAChB,CAAC,CAAC;IAEF,IAAI,WAAW,IAAI,UAAU,KAAK,QAAQ,EAAE,CAAC;QAC3C,OAAO,CACL,KAAC,kBAAkB,IACjB,QAAQ,EAAE,QAAQ,EAClB,UAAU,EAAE,IAAI,EAChB,KAAK,EAAE,KAAK,EACZ,MAAM,EAAE,GAAG,EAAE;gBACX,YAAY,EAAE,CAAC;gBACf,SAAS,EAAE,CAAC;YACd,CAAC,EACD,QAAQ,EAAE,YAAY,GACtB,CACH,CAAC;IACJ,CAAC;IAED,IAAI,WAAW,IAAI,UAAU,KAAK,aAAa,EAAE,CAAC;QAChD,OAAO,CACL,KAAC,aAAa,IACZ,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,KAAK,EACZ,SAAS,EAAE,YAAY,EACvB,MAAM,EAAE,GAAG,EAAE;gBACX,YAAY,EAAE,CAAC;gBACf,SAAS,EAAE,CAAC;YACd,CAAC,EACD,QAAQ,EAAE,YAAY,GACtB,CACH,CAAC;IACJ,CAAC;IAED,OAAO,CACL,eACE,IAAI,EAAC,UAAU,EACf,SAAS,EAAC,yJAAyJ,aAGnK,cAAK,SAAS,EAAC,0JAA0J,YACtK,OAAO,GACJ,EAGN,eAAK,SAAS,EAAC,wBAAwB,aACrC,eAAK,SAAS,EAAC,uCAAuC,aACpD,eAAM,SAAS,EAAC,8DAA8D,YAC3E,IAAI,GACA,EACN,MAAM,IAAI,CACT,eAAM,SAAS,EAAC,4GAA4G,oBAErH,CACR,EACD,KAAC,aAAa,IAAC,SAAS,EAAE,SAAS,GAAI,IACnC,EACL,KAAK,IAAI,KAAK,KAAK,IAAI,IAAI,CAC1B,eAAM,SAAS,EAAC,8DAA8D,YAC3E,KAAK,GACD,CACR,IACG,EAGN,cAAK,SAAS,EAAC,kEAAkE,YAC9E,WAAW,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAC1B,KAAC,SAAS,IAA8B,KAAK,EAAE,KAAK,IAApC,KAAK,CAAC,IAAI,EAAE,IAAI,IAAI,EAAE,CAAkB,CACzD,CAAC,GACE,EAGL,MAAM,IAAI,CACT,eAAK,SAAS,EAAC,kDAAkD,aAC/D,iBACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,aAAa,CAAC,gBAC7B,mBAAmB,IAAI,EAAE,EACrC,SAAS,EAAC,sIAAsI,YAEhJ,KAAC,QAAQ,KAAG,GACL,EACT,iBACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,QAAQ,CAAC,gBACxB,UAAU,IAAI,EAAE,EAC5B,SAAS,EAAC,6IAA6I,YAEvJ,KAAC,SAAS,KAAG,GACN,IACL,CACP,IACG,CACP,CAAC;AACJ,CAAC;AAED,8EAA8E;AAC9E,uBAAuB;AACvB,8EAA8E;AAE9E,SAAS,SAAS,CAAC,EAAE,KAAK,EAAwB;IAChD,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,EAAE,IAAI,IAAI,KAAK,CAAC,IAAI,EAAE,IAAI,IAAI,SAAS,CAAC;IACnE,OAAO,CACL,MAAC,OAAO,eACN,MAAC,cAAc,IACb,MAAM,EACJ,eACE,SAAS,EAAE,EAAE,CACX,mHAAmH,EACnH,KAAK,CAAC,WAAW;wBACf,CAAC,CAAC,kFAAkF;wBACpF,CAAC,CAAC,oDAAoD,CACzD,GACD,aAGH,QAAQ,EACR,KAAK,CAAC,WAAW,IAAI,CACpB,eAAM,SAAS,EAAC,uDAAuD,4BAEhE,CACR,IACc,EACjB,KAAC,cAAc,IAAC,IAAI,EAAC,KAAK,YACvB,KAAK,CAAC,WAAW;oBAChB,CAAC,CAAC,kBAAkB,KAAK,CAAC,aAAa,EAAE,IAAI,IAAI,QAAQ,EAAE;oBAC3D,CAAC,CAAC,mBAAmB,GACR,IACT,CACX,CAAC;AACJ,CAAC;AAED,8EAA8E;AAC9E,gCAAgC;AAChC,8EAA8E;AAE9E,SAAS,kBAAkB,CAAC,EAC1B,QAAQ,EACR,UAAU,EACV,KAAK,EACL,MAAM,EACN,QAAQ,GAOT;IACC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,GAAG,kBAAkB,EAAE,CAAC;IAE3D,MAAM,aAAa,GAAG,WAAW,CAAC,KAAK,IAAI,EAAE;QAC3C,IAAI,CAAC;YACH,MAAM,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;YAC9B,MAAM,EAAE,CAAC;QACX,CAAC;QAAC,MAAM,CAAC;YACP,uCAAuC;QACzC,CAAC;IACH,CAAC,EAAE,CAAC,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAEtC,OAAO,CACL,eACE,IAAI,EAAC,UAAU,EACf,SAAS,EAAC,iJAAiJ,aAE3J,eAAK,SAAS,EAAC,wBAAwB,aACrC,aAAG,SAAS,EAAC,iCAAiC,wBACrC,eAAM,SAAS,EAAC,iBAAiB,YAAE,UAAU,GAAQ,+DAE1D,EACH,KAAK,IAAI,CACR,YAAG,SAAS,EAAC,oDAAoD,YAC9D,cAAc,CAAC,KAAK,CAAC,GACpB,CACL,IACG,EAEN,eAAK,SAAS,EAAC,6DAA6D,aAC1E,kBACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,aAAa,EACtB,QAAQ,EAAE,UAAU,EACpB,SAAS,EAAE,EAAE,CACX,2GAA2G,EAC3G,mFAAmF,EACnF,0DAA0D,CAC3D,aAEA,UAAU,IAAI,KAAC,WAAW,IAAC,IAAI,EAAE,EAAE,GAAI,cAEjC,EACT,iBACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,QAAQ,EACjB,QAAQ,EAAE,UAAU,EACpB,SAAS,EAAE,EAAE,CACX,gDAAgD,EAChD,+EAA+E,EAC/E,0DAA0D,CAC3D,uBAGM,IACL,IACF,CACP,CAAC;AACJ,CAAC;AAED,8EAA8E;AAC9E,2BAA2B;AAC3B,8EAA8E;AAE9E,SAAS,aAAa,CAAC,EACrB,KAAK,EACL,KAAK,EACL,SAAS,EACT,MAAM,EACN,QAAQ,GAQT;IACC,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,UAAU,EAAE,GAAG,kBAAkB,EAAE,CAAC;IAClE,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,UAAU,EAAE,GAAG,kBAAkB,EAAE,CAAC;IAElE,MAAM,QAAQ,GAAG,KAAK,CAAC,SAAS,EAAE,EAAE,IAAI,EAAE,CAAC;IAC3C,MAAM,UAAU,GAAG,KAAK,CAAC,SAAS,EAAE,IAAI,IAAI,KAAK,CAAC,SAAS,EAAE,KAAK,IAAI,QAAQ,CAAC;IAC/E,MAAM,WAAW,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;IAC9D,MAAM,eAAe,GAAG,WAAW,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC;IACnD,MAAM,WAAW,GAAG,eAAe;QACjC,CAAC,CAAC,iBAAiB,CAAC,eAAe,CAAC,IAAI,IAAI;QAC5C,CAAC,CAAC,IAAI,CAAC;IAET,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,QAAQ,CAAiB,IAAI,CAAC,CAAC;IACvE,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAe,IAAI,CAAC,CAAC;IAEvD,MAAM,SAAS,GAAG,UAAU,IAAI,UAAU,CAAC;IAC3C,MAAM,UAAU,GACd,YAAY,KAAK,IAAI,IAAI,YAAY,KAAK,WAAW,IAAI,CAAC,SAAS,CAAC;IAEtE,MAAM,aAAa,GAAG,WAAW,CAAC,KAAK,IAAI,EAAE;QAC3C,IAAI,CAAC,YAAY,IAAI,CAAC,eAAe;YAAE,OAAO;QAC9C,QAAQ,CAAC,IAAI,CAAC,CAAC;QAEf,IAAI,CAAC;YACH,sEAAsE;YACtE,wEAAwE;YACxE,uDAAuD;YACvD,MAAM,UAAU,GAAG,MAAM,CAAC,mBAAmB,EAAE;gBAC7C,SAAS,EAAE,MAAM,CAAC,oBAAoB,EAAE;oBACtC,IAAI,EAAE,kBAAkB;oBACxB,EAAE,EAAE,QAAQ;iBACb,CAAC;gBACF,QAAQ,EAAE,MAAM,CAAC,oBAAoB,EAAE;oBACrC,IAAI,EAAE,cAAc;oBACpB,EAAE,EAAE,KAAK;iBACV,CAAC;gBACF,QAAQ,EAAE,eAAe,CAAC,YAAY,CAAC;aACxC,CAAC,CAAC;YACH,MAAM,YAAY,CAAC,UAAU,CAAC,CAAC;YAE/B,MAAM,UAAU,GAAG,MAAM,CAAC,mBAAmB,EAAE;gBAC7C,SAAS,EAAE,MAAM,CAAC,oBAAoB,EAAE;oBACtC,IAAI,EAAE,kBAAkB;oBACxB,EAAE,EAAE,QAAQ;iBACb,CAAC;gBACF,QAAQ,EAAE,MAAM,CAAC,oBAAoB,EAAE;oBACrC,IAAI,EAAE,cAAc;oBACpB,EAAE,EAAE,KAAK;iBACV,CAAC;gBACF,QAAQ,EAAE,eAAe;aAC1B,CAAC,CAAC;YACH,MAAM,YAAY,CAAC,UAAU,CAAC,CAAC;YAE/B,MAAM,EAAE,CAAC;QACX,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,QAAQ,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC,CAAC;QAC5E,CAAC;IACH,CAAC,EAAE;QACD,YAAY;QACZ,eAAe;QACf,QAAQ;QACR,KAAK;QACL,YAAY;QACZ,YAAY;QACZ,MAAM;KACP,CAAC,CAAC;IAEH,OAAO,CACL,eACE,IAAI,EAAC,UAAU,EACf,SAAS,EAAC,yGAAyG,aAEnH,aAAG,SAAS,EAAC,iCAAiC,iCAC5B,eAAM,SAAS,EAAC,iBAAiB,YAAE,UAAU,GAAQ,IACnE,EAEJ,KAAC,YAAY,IACX,IAAI,EAAE,eAAe,CAAC,YAAY,EAClC,QAAQ,EAAE,YAAY,IAAI,WAAW,EACrC,QAAQ,EAAE,eAAe,EACzB,SAAS,EAAE,SAAS,EACpB,QAAQ,EAAE,SAAS,GACnB,EAED,KAAK,IAAI,CACR,YAAG,SAAS,EAAC,yCAAyC,EAAC,IAAI,EAAC,OAAO,YAChE,cAAc,CAAC,KAAK,CAAC,GACpB,CACL,EAED,eAAK,SAAS,EAAC,uCAAuC,aACpD,kBACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,aAAa,EACtB,QAAQ,EAAE,CAAC,UAAU,EACrB,SAAS,EAAE,EAAE,CACX,2GAA2G,EAC3G,uEAAuE,EACvE,0DAA0D,CAC3D,aAEA,SAAS,IAAI,KAAC,WAAW,IAAC,IAAI,EAAE,EAAE,GAAI,EACtC,SAAS,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,SAAS,IAClC,EACT,iBACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,QAAQ,EACjB,QAAQ,EAAE,SAAS,EACnB,SAAS,EAAE,EAAE,CACX,gDAAgD,EAChD,+EAA+E,EAC/E,0DAA0D,CAC3D,uBAGM,IACL,IACF,CACP,CAAC;AACJ,CAAC;AAED,8EAA8E;AAC9E,QAAQ;AACR,8EAA8E;AAE9E,SAAS,QAAQ;IACf,OAAO,CACL,cACE,KAAK,EAAC,IAAI,EACV,MAAM,EAAC,IAAI,EACX,OAAO,EAAC,WAAW,EACnB,IAAI,EAAC,MAAM,EACX,MAAM,EAAC,cAAc,EACrB,WAAW,EAAC,KAAK,EACjB,aAAa,EAAC,OAAO,EACrB,cAAc,EAAC,OAAO,iBACV,MAAM,YAElB,eAAM,CAAC,EAAC,mCAAmC,GAAG,GAC1C,CACP,CAAC;AACJ,CAAC;AAED,SAAS,SAAS;IAChB,OAAO,CACL,eACE,KAAK,EAAC,IAAI,EACV,MAAM,EAAC,IAAI,EACX,OAAO,EAAC,WAAW,EACnB,IAAI,EAAC,MAAM,EACX,MAAM,EAAC,cAAc,EACrB,WAAW,EAAC,KAAK,EACjB,aAAa,EAAC,OAAO,EACrB,cAAc,EAAC,OAAO,iBACV,MAAM,aAElB,eAAM,CAAC,EAAC,qDAAqD,GAAG,EAChE,eAAM,CAAC,EAAC,4CAA4C,GAAG,EACvD,eAAM,EAAE,EAAC,KAAK,EAAC,EAAE,EAAC,GAAG,EAAC,EAAE,EAAC,KAAK,EAAC,EAAE,EAAC,IAAI,GAAG,EACzC,eAAM,EAAE,EAAC,KAAK,EAAC,EAAE,EAAC,GAAG,EAAC,EAAE,EAAC,KAAK,EAAC,EAAE,EAAC,IAAI,GAAG,IACrC,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -18,6 +18,12 @@ export interface RoleSelectorProps {
|
|
|
18
18
|
* Defaults to a person.
|
|
19
19
|
*/
|
|
20
20
|
readonly granteeKind?: GranteeKind;
|
|
21
|
+
/**
|
|
22
|
+
* Roles to leave out even though the kind grants them: the ones the
|
|
23
|
+
* caller may not assign (an organization's `owner`, for anyone who is not
|
|
24
|
+
* its owner). See {@link useRoleSelector}.
|
|
25
|
+
*/
|
|
26
|
+
readonly omitRoles?: readonly IamRole[];
|
|
21
27
|
/** Additional CSS class names for the root container. */
|
|
22
28
|
readonly className?: string;
|
|
23
29
|
}
|
|
@@ -39,5 +45,5 @@ export interface RoleSelectorProps {
|
|
|
39
45
|
* />
|
|
40
46
|
* ```
|
|
41
47
|
*/
|
|
42
|
-
export declare function RoleSelector({ kind, onSelect, selected: controlledSelected, defaultRole, disabled, granteeKind, className, }: RoleSelectorProps): import("react/jsx-runtime").JSX.Element | null;
|
|
48
|
+
export declare function RoleSelector({ kind, onSelect, selected: controlledSelected, defaultRole, disabled, granteeKind, omitRoles, className, }: RoleSelectorProps): import("react/jsx-runtime").JSX.Element | null;
|
|
43
49
|
//# sourceMappingURL=RoleSelector.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RoleSelector.d.ts","sourceRoot":"","sources":["../../src/iam-policy/RoleSelector.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qFAAqF,CAAC;AAC3H,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,2CAA2C,CAAC;AACzE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAKhD,sCAAsC;AACtC,MAAM,WAAW,iBAAiB;IAChC,0DAA0D;IAC1D,QAAQ,CAAC,IAAI,EAAE,eAAe,GAAG,IAAI,CAAC;IACtC,0CAA0C;IAC1C,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IAC5C,+EAA+E;IAC/E,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IACnC,kDAAkD;IAClD,QAAQ,CAAC,WAAW,CAAC,EAAE,OAAO,CAAC;IAC/B,gCAAgC;IAChC,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAC5B;;;OAGG;IACH,QAAQ,CAAC,WAAW,CAAC,EAAE,WAAW,CAAC;IACnC,yDAAyD;IACzD,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,YAAY,CAAC,EAC3B,IAAI,EACJ,QAAQ,EACR,QAAQ,EAAE,kBAAkB,EAC5B,WAAW,EACX,QAAgB,EAChB,WAAgC,EAChC,SAAS,GACV,EAAE,iBAAiB,
|
|
1
|
+
{"version":3,"file":"RoleSelector.d.ts","sourceRoot":"","sources":["../../src/iam-policy/RoleSelector.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qFAAqF,CAAC;AAC3H,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,2CAA2C,CAAC;AACzE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAKhD,sCAAsC;AACtC,MAAM,WAAW,iBAAiB;IAChC,0DAA0D;IAC1D,QAAQ,CAAC,IAAI,EAAE,eAAe,GAAG,IAAI,CAAC;IACtC,0CAA0C;IAC1C,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IAC5C,+EAA+E;IAC/E,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IACnC,kDAAkD;IAClD,QAAQ,CAAC,WAAW,CAAC,EAAE,OAAO,CAAC;IAC/B,gCAAgC;IAChC,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAC5B;;;OAGG;IACH,QAAQ,CAAC,WAAW,CAAC,EAAE,WAAW,CAAC;IACnC;;;;OAIG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,OAAO,EAAE,CAAC;IACxC,yDAAyD;IACzD,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,YAAY,CAAC,EAC3B,IAAI,EACJ,QAAQ,EACR,QAAQ,EAAE,kBAAkB,EAC5B,WAAW,EACX,QAAgB,EAChB,WAAgC,EAChC,SAAS,EACT,SAAS,GACV,EAAE,iBAAiB,kDA+DnB"}
|
|
@@ -22,13 +22,13 @@ import { useRoleSelector } from "./useRoleSelector.js";
|
|
|
22
22
|
* />
|
|
23
23
|
* ```
|
|
24
24
|
*/
|
|
25
|
-
export function RoleSelector({ kind, onSelect, selected: controlledSelected, defaultRole, disabled = false, granteeKind = "identity_account", className, }) {
|
|
25
|
+
export function RoleSelector({ kind, onSelect, selected: controlledSelected, defaultRole, disabled = false, granteeKind = "identity_account", omitRoles, className, }) {
|
|
26
26
|
// Instance-scoped radio-group name (oss#593): a hardcoded name would make
|
|
27
27
|
// every mounted RoleSelector share ONE radio group — with two copies on a
|
|
28
28
|
// page (e.g. zone-cached detail pages), keyboard selection escapes into
|
|
29
29
|
// the other, possibly aria-hidden, copy.
|
|
30
30
|
const groupName = useId();
|
|
31
|
-
const { options, selected: internalSelected, select } = useRoleSelector(kind, defaultRole, granteeKind);
|
|
31
|
+
const { options, selected: internalSelected, select } = useRoleSelector(kind, defaultRole, granteeKind, omitRoles);
|
|
32
32
|
const currentSelected = controlledSelected !== undefined
|
|
33
33
|
? controlledSelected
|
|
34
34
|
: internalSelected;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RoleSelector.js","sourceRoot":"","sources":["../../src/iam-policy/RoleSelector.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;AAI9B,OAAO,EAAE,EAAE,EAAE,MAAM,gBAAgB,CAAC;AACpC,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAClE,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"RoleSelector.js","sourceRoot":"","sources":["../../src/iam-policy/RoleSelector.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;AAI9B,OAAO,EAAE,EAAE,EAAE,MAAM,gBAAgB,CAAC;AACpC,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAClE,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AA6BvD;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,UAAU,YAAY,CAAC,EAC3B,IAAI,EACJ,QAAQ,EACR,QAAQ,EAAE,kBAAkB,EAC5B,WAAW,EACX,QAAQ,GAAG,KAAK,EAChB,WAAW,GAAG,kBAAkB,EAChC,SAAS,EACT,SAAS,GACS;IAClB,0EAA0E;IAC1E,0EAA0E;IAC1E,wEAAwE;IACxE,yCAAyC;IACzC,MAAM,SAAS,GAAG,KAAK,EAAE,CAAC;IAE1B,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,EAAE,GAAG,eAAe,CACrE,IAAI,EACJ,WAAW,EACX,WAAW,EACX,SAAS,CACV,CAAC;IAEF,MAAM,eAAe,GAAG,kBAAkB,KAAK,SAAS;QACtD,CAAC,CAAC,kBAAkB;QACpB,CAAC,CAAC,gBAAgB,CAAC;IAErB,MAAM,YAAY,GAAG,CAAC,IAAa,EAAE,EAAE;QACrC,MAAM,CAAC,IAAI,CAAC,CAAC;QACb,QAAQ,EAAE,CAAC,IAAI,CAAC,CAAC;IACnB,CAAC,CAAC;IAEF,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,CACL,oBAAU,SAAS,EAAE,EAAE,CAAC,iBAAiB,EAAE,iBAAiB,EAAE,SAAS,CAAC,aACtE,iBAAQ,SAAS,EAAC,iDAAiD,qBAAc,EACjF,cAAK,SAAS,EAAC,kCAAkC,YAC9C,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;oBACnB,MAAM,SAAS,GAAG,eAAe,KAAK,GAAG,CAAC,IAAI,CAAC;oBAC/C,OAAO,CACL,iBAEE,SAAS,EAAE,EAAE,CACX,iIAAiI,EACjI,SAAS;4BACP,CAAC,CAAC,2EAA2E;4BAC7E,CAAC,CAAC,gHAAgH,EACpH,QAAQ,IAAI,wCAAwC,CACrD,aAED,gBACE,IAAI,EAAC,OAAO,EACZ,IAAI,EAAE,SAAS,EACf,KAAK,EAAE,GAAG,CAAC,KAAK,EAChB,OAAO,EAAE,SAAS,EAClB,QAAQ,EAAE,QAAQ,EAClB,QAAQ,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,EACtC,SAAS,EAAC,aAAa,GACvB,EACF,yBAAO,GAAG,CAAC,KAAK,GAAQ,EACxB,eAAM,SAAS,EAAC,0EAA0E,YACvF,GAAG,CAAC,WAAW,GACX,KArBF,GAAG,CAAC,KAAK,CAsBR,CACT,CAAC;gBACJ,CAAC,CAAC,GACE,IACG,CACZ,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { IamRole } from "@stigmer/protos/ai/stigmer/iam/v1/enum_pb";
|
|
2
|
+
/** Return value of {@link useOwnerAssignment}. */
|
|
3
|
+
export interface UseOwnerAssignmentReturn {
|
|
4
|
+
/** Whether the caller may grant, revoke or remove the owner role on the organization. */
|
|
5
|
+
readonly canAssignOwner: boolean;
|
|
6
|
+
/**
|
|
7
|
+
* The organization roles to leave out of a role picker for this caller:
|
|
8
|
+
* owner unless they may assign it. A stable list, as `RoleSelector`'s
|
|
9
|
+
* `omitRoles` asks.
|
|
10
|
+
*/
|
|
11
|
+
readonly unassignable: readonly IamRole[];
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* The console's one reading of the owner rule: the server asks
|
|
15
|
+
* `can_assign_roles` on an organization before any change to its owner
|
|
16
|
+
* role (only its owners hold it), and every surface that offers such a
|
|
17
|
+
* change asks the same question here. Fails open, like every capability
|
|
18
|
+
* gate: the server refuses whatever this lets through.
|
|
19
|
+
*
|
|
20
|
+
* @param orgId - The organization's id, or `null` to skip the check.
|
|
21
|
+
*/
|
|
22
|
+
export declare function useOwnerAssignment(orgId: string | null): UseOwnerAssignmentReturn;
|
|
23
|
+
//# sourceMappingURL=useOwnerAssignment.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useOwnerAssignment.d.ts","sourceRoot":"","sources":["../../src/iam-policy/useOwnerAssignment.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,2CAA2C,CAAC;AAOpE,kDAAkD;AAClD,MAAM,WAAW,wBAAwB;IACvC,yFAAyF;IACzF,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAC;IACjC;;;;OAIG;IACH,QAAQ,CAAC,YAAY,EAAE,SAAS,OAAO,EAAE,CAAC;CAC3C;AAED;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,wBAAwB,CASjF"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { IamRole } from "@stigmer/protos/ai/stigmer/iam/v1/enum_pb";
|
|
3
|
+
import { useCheckPermission } from "./useCheckPermission.js";
|
|
4
|
+
/** What a caller who is not an owner may not assign: owner is assigned by owners. */
|
|
5
|
+
const OWNER_ONLY = [IamRole.owner];
|
|
6
|
+
const NOTHING_OMITTED = [];
|
|
7
|
+
/**
|
|
8
|
+
* The console's one reading of the owner rule: the server asks
|
|
9
|
+
* `can_assign_roles` on an organization before any change to its owner
|
|
10
|
+
* role (only its owners hold it), and every surface that offers such a
|
|
11
|
+
* change asks the same question here. Fails open, like every capability
|
|
12
|
+
* gate: the server refuses whatever this lets through.
|
|
13
|
+
*
|
|
14
|
+
* @param orgId - The organization's id, or `null` to skip the check.
|
|
15
|
+
*/
|
|
16
|
+
export function useOwnerAssignment(orgId) {
|
|
17
|
+
const { allowed } = useCheckPermission(orgId ? { kind: "organization", id: orgId } : null, "can_assign_roles");
|
|
18
|
+
return {
|
|
19
|
+
canAssignOwner: allowed,
|
|
20
|
+
unassignable: allowed ? NOTHING_OMITTED : OWNER_ONLY,
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=useOwnerAssignment.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useOwnerAssignment.js","sourceRoot":"","sources":["../../src/iam-policy/useOwnerAssignment.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,OAAO,EAAE,OAAO,EAAE,MAAM,2CAA2C,CAAC;AACpE,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAE7D,qFAAqF;AACrF,MAAM,UAAU,GAAuB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AACvD,MAAM,eAAe,GAAuB,EAAE,CAAC;AAc/C;;;;;;;;GAQG;AACH,MAAM,UAAU,kBAAkB,CAAC,KAAoB;IACrD,MAAM,EAAE,OAAO,EAAE,GAAG,kBAAkB,CACpC,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,EAClD,kBAAkB,CACnB,CAAC;IACF,OAAO;QACL,cAAc,EAAE,OAAO;QACvB,YAAY,EAAE,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,UAAU;KACrD,CAAC;AACJ,CAAC"}
|
|
@@ -39,6 +39,11 @@ export interface UseRoleSelectorReturn {
|
|
|
39
39
|
* @param defaultRole - Optional initial selection.
|
|
40
40
|
* @param granteeKind - Who the role is for: a person (the default) may
|
|
41
41
|
* hold any grantable role, a team only the kind's team roles.
|
|
42
|
+
* @param omit - Roles to leave out even though the kind grants them: the
|
|
43
|
+
* ones the caller may not assign (an organization's `owner`, for anyone
|
|
44
|
+
* who is not its owner). The server refuses them anyway; leaving them out
|
|
45
|
+
* keeps a choice off the screen that could only fail. Pass a stable list
|
|
46
|
+
* (a constant, or a memoized one): the options follow its identity.
|
|
42
47
|
*
|
|
43
48
|
* @example
|
|
44
49
|
* ```tsx
|
|
@@ -51,5 +56,5 @@ export interface UseRoleSelectorReturn {
|
|
|
51
56
|
* ));
|
|
52
57
|
* ```
|
|
53
58
|
*/
|
|
54
|
-
export declare function useRoleSelector(kind: ApiResourceKind | null, defaultRole?: IamRole, granteeKind?: GranteeKind): UseRoleSelectorReturn;
|
|
59
|
+
export declare function useRoleSelector(kind: ApiResourceKind | null, defaultRole?: IamRole, granteeKind?: GranteeKind, omit?: readonly IamRole[]): UseRoleSelectorReturn;
|
|
55
60
|
//# sourceMappingURL=useRoleSelector.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useRoleSelector.d.ts","sourceRoot":"","sources":["../../src/iam-policy/useRoleSelector.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qFAAqF,CAAC;AAC3H,OAAO,EAAE,OAAO,EAAE,MAAM,2CAA2C,CAAC;AACpE,OAAO,EAML,KAAK,WAAW,EACjB,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"useRoleSelector.d.ts","sourceRoot":"","sources":["../../src/iam-policy/useRoleSelector.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qFAAqF,CAAC;AAC3H,OAAO,EAAE,OAAO,EAAE,MAAM,2CAA2C,CAAC;AACpE,OAAO,EAML,KAAK,WAAW,EACjB,MAAM,cAAc,CAAC;AAKtB,kDAAkD;AAClD,MAAM,WAAW,UAAU;IACzB,8BAA8B;IAC9B,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,kDAAkD;IAClD,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,0FAA0F;IAC1F,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,8CAA8C;IAC9C,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB;AAED,+CAA+C;AAC/C,MAAM,WAAW,qBAAqB;IACpC,0DAA0D;IAC1D,QAAQ,CAAC,OAAO,EAAE,SAAS,UAAU,EAAE,CAAC;IACxC,iEAAiE;IACjE,QAAQ,CAAC,QAAQ,EAAE,OAAO,GAAG,IAAI,CAAC;IAClC,iFAAiF;IACjF,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,qBAAqB;IACrB,QAAQ,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACzC,2BAA2B;IAC3B,QAAQ,CAAC,KAAK,EAAE,MAAM,IAAI,CAAC;IAC3B,+CAA+C;IAC/C,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;CAC9B;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,wBAAgB,eAAe,CAC7B,IAAI,EAAE,eAAe,GAAG,IAAI,EAC5B,WAAW,CAAC,EAAE,OAAO,EACrB,WAAW,GAAE,WAAgC,EAC7C,IAAI,GAAE,SAAS,OAAO,EAAoB,GACzC,qBAAqB,CAsCvB"}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { useCallback, useMemo, useState } from "react";
|
|
3
3
|
import { getGrantableRoles, getTeamGrantableRoles, iamRoleDisplayName, iamRoleDescription, iamRoleToString, } from "@stigmer/sdk";
|
|
4
|
+
/** The default for `omit`: one shared empty list, so the options never recompute for it. */
|
|
5
|
+
const NOTHING_OMITTED = [];
|
|
4
6
|
/**
|
|
5
7
|
* Headless hook for selecting an IAM role for a given resource kind.
|
|
6
8
|
*
|
|
@@ -13,6 +15,11 @@ import { getGrantableRoles, getTeamGrantableRoles, iamRoleDisplayName, iamRoleDe
|
|
|
13
15
|
* @param defaultRole - Optional initial selection.
|
|
14
16
|
* @param granteeKind - Who the role is for: a person (the default) may
|
|
15
17
|
* hold any grantable role, a team only the kind's team roles.
|
|
18
|
+
* @param omit - Roles to leave out even though the kind grants them: the
|
|
19
|
+
* ones the caller may not assign (an organization's `owner`, for anyone
|
|
20
|
+
* who is not its owner). The server refuses them anyway; leaving them out
|
|
21
|
+
* keeps a choice off the screen that could only fail. Pass a stable list
|
|
22
|
+
* (a constant, or a memoized one): the options follow its identity.
|
|
16
23
|
*
|
|
17
24
|
* @example
|
|
18
25
|
* ```tsx
|
|
@@ -25,19 +32,20 @@ import { getGrantableRoles, getTeamGrantableRoles, iamRoleDisplayName, iamRoleDe
|
|
|
25
32
|
* ));
|
|
26
33
|
* ```
|
|
27
34
|
*/
|
|
28
|
-
export function useRoleSelector(kind, defaultRole, granteeKind = "identity_account") {
|
|
35
|
+
export function useRoleSelector(kind, defaultRole, granteeKind = "identity_account", omit = NOTHING_OMITTED) {
|
|
29
36
|
const [selected, setSelected] = useState(defaultRole ?? null);
|
|
30
37
|
const options = useMemo(() => {
|
|
31
38
|
if (kind === null)
|
|
32
39
|
return [];
|
|
33
|
-
const
|
|
40
|
+
const left = new Set(omit);
|
|
41
|
+
const roles = (granteeKind === "team" ? getTeamGrantableRoles(kind) : getGrantableRoles(kind)).filter((role) => !left.has(role));
|
|
34
42
|
return roles.map((role) => ({
|
|
35
43
|
role,
|
|
36
44
|
label: iamRoleDisplayName(role),
|
|
37
45
|
description: iamRoleDescription(role),
|
|
38
46
|
value: iamRoleToString(role),
|
|
39
47
|
}));
|
|
40
|
-
}, [kind, granteeKind]);
|
|
48
|
+
}, [kind, granteeKind, omit]);
|
|
41
49
|
const selectedValue = useMemo(() => (selected !== null ? iamRoleToString(selected) : ""), [selected]);
|
|
42
50
|
const select = useCallback((role) => setSelected(role), []);
|
|
43
51
|
const clear = useCallback(() => setSelected(null), []);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useRoleSelector.js","sourceRoot":"","sources":["../../src/iam-policy/useRoleSelector.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAGvD,OAAO,EACL,iBAAiB,EACjB,qBAAqB,EACrB,kBAAkB,EAClB,kBAAkB,EAClB,eAAe,GAEhB,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"useRoleSelector.js","sourceRoot":"","sources":["../../src/iam-policy/useRoleSelector.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAGvD,OAAO,EACL,iBAAiB,EACjB,qBAAqB,EACrB,kBAAkB,EAClB,kBAAkB,EAClB,eAAe,GAEhB,MAAM,cAAc,CAAC;AAEtB,4FAA4F;AAC5F,MAAM,eAAe,GAAuB,EAAE,CAAC;AA8B/C;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,MAAM,UAAU,eAAe,CAC7B,IAA4B,EAC5B,WAAqB,EACrB,cAA2B,kBAAkB,EAC7C,OAA2B,eAAe;IAE1C,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CACtC,WAAW,IAAI,IAAI,CACpB,CAAC;IAEF,MAAM,OAAO,GAAG,OAAO,CAAwB,GAAG,EAAE;QAClD,IAAI,IAAI,KAAK,IAAI;YAAE,OAAO,EAAE,CAAC;QAC7B,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC;QAC3B,MAAM,KAAK,GAAG,CACZ,WAAW,KAAK,MAAM,CAAC,CAAC,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAC/E,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;QACpC,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YAC1B,IAAI;YACJ,KAAK,EAAE,kBAAkB,CAAC,IAAI,CAAC;YAC/B,WAAW,EAAE,kBAAkB,CAAC,IAAI,CAAC;YACrC,KAAK,EAAE,eAAe,CAAC,IAAI,CAAC;SAC7B,CAAC,CAAC,CAAC;IACN,CAAC,EAAE,CAAC,IAAI,EAAE,WAAW,EAAE,IAAI,CAAC,CAAC,CAAC;IAE9B,MAAM,aAAa,GAAG,OAAO,CAC3B,GAAG,EAAE,CAAC,CAAC,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAC1D,CAAC,QAAQ,CAAC,CACX,CAAC;IAEF,MAAM,MAAM,GAAG,WAAW,CAAC,CAAC,IAAa,EAAE,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;IACrE,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;IAEvD,OAAO,OAAO,CACZ,GAAG,EAAE,CAAC,CAAC;QACL,OAAO;QACP,QAAQ;QACR,aAAa;QACb,MAAM;QACN,KAAK;QACL,UAAU,EAAE,OAAO,CAAC,MAAM,GAAG,CAAC;KAC/B,CAAC,EACF,CAAC,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,EAAE,KAAK,CAAC,CAClD,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { Timestamp } from "@bufbuild/protobuf/wkt";
|
|
2
|
+
/** Props for {@link LastUsedLabel}. */
|
|
3
|
+
export interface LastUsedLabelProps {
|
|
4
|
+
/** The credential's `status.last_used_at`; absent means it was never used. */
|
|
5
|
+
readonly at: Timestamp | undefined;
|
|
6
|
+
/** Frozen clock for tests; defaults to the wall clock. */
|
|
7
|
+
readonly now?: Date;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* When a credential was last used, said one way on every surface that
|
|
11
|
+
* lists credentials (API keys, platform clients): "Used 5m" in the SDK's
|
|
12
|
+
* compact relative vocabulary, with the exact instant in a tooltip, or
|
|
13
|
+
* "Never used". The label names what the time is, because it sits beside
|
|
14
|
+
* other dates (created, expires) in the same row.
|
|
15
|
+
*
|
|
16
|
+
* The server records a use at most once a minute, so "Used now" means
|
|
17
|
+
* within the last minute or so.
|
|
18
|
+
*/
|
|
19
|
+
export declare function LastUsedLabel({ at, now }: LastUsedLabelProps): import("react/jsx-runtime").JSX.Element;
|
|
20
|
+
//# sourceMappingURL=LastUsedLabel.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LastUsedLabel.d.ts","sourceRoot":"","sources":["../../src/internal/LastUsedLabel.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAIxD,uCAAuC;AACvC,MAAM,WAAW,kBAAkB;IACjC,8EAA8E;IAC9E,QAAQ,CAAC,EAAE,EAAE,SAAS,GAAG,SAAS,CAAC;IACnC,0DAA0D;IAC1D,QAAQ,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC;CACrB;AAED;;;;;;;;;GASG;AACH,wBAAgB,aAAa,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,kBAAkB,2CAe5D"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { timestampDate } from "@bufbuild/protobuf/wkt";
|
|
4
|
+
import { formatRelativeTime } from "../activity/format-relative-time.js";
|
|
5
|
+
import { Tooltip, TooltipContent, TooltipTrigger } from "./tooltip.js";
|
|
6
|
+
/**
|
|
7
|
+
* When a credential was last used, said one way on every surface that
|
|
8
|
+
* lists credentials (API keys, platform clients): "Used 5m" in the SDK's
|
|
9
|
+
* compact relative vocabulary, with the exact instant in a tooltip, or
|
|
10
|
+
* "Never used". The label names what the time is, because it sits beside
|
|
11
|
+
* other dates (created, expires) in the same row.
|
|
12
|
+
*
|
|
13
|
+
* The server records a use at most once a minute, so "Used now" means
|
|
14
|
+
* within the last minute or so.
|
|
15
|
+
*/
|
|
16
|
+
export function LastUsedLabel({ at, now }) {
|
|
17
|
+
if (at === undefined) {
|
|
18
|
+
return _jsx("span", { children: "Never used" });
|
|
19
|
+
}
|
|
20
|
+
const date = timestampDate(at);
|
|
21
|
+
return (_jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { render: _jsx("time", { dateTime: date.toISOString() }), children: `Used ${formatRelativeTime(date, now)}` }), _jsx(TooltipContent, { side: "top", children: `Last used ${date.toISOString()}` })] }));
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=LastUsedLabel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LastUsedLabel.js","sourceRoot":"","sources":["../../src/internal/LastUsedLabel.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAEvD,OAAO,EAAE,kBAAkB,EAAE,MAAM,qCAAqC,CAAC;AACzE,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAUvE;;;;;;;;;GASG;AACH,MAAM,UAAU,aAAa,CAAC,EAAE,EAAE,EAAE,GAAG,EAAsB;IAC3D,IAAI,EAAE,KAAK,SAAS,EAAE,CAAC;QACrB,OAAO,wCAAuB,CAAC;IACjC,CAAC;IACD,MAAM,IAAI,GAAG,aAAa,CAAC,EAAE,CAAC,CAAC;IAC/B,OAAO,CACL,MAAC,OAAO,eACN,KAAC,cAAc,IAAC,MAAM,EAAE,eAAM,QAAQ,EAAE,IAAI,CAAC,WAAW,EAAE,GAAI,YAC3D,QAAQ,kBAAkB,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,GACzB,EACjB,KAAC,cAAc,IAAC,IAAI,EAAC,KAAK,YACvB,aAAa,IAAI,CAAC,WAAW,EAAE,EAAE,GACnB,IACT,CACX,CAAC;AACJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"InvitationManager.d.ts","sourceRoot":"","sources":["../../src/invitation/InvitationManager.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"InvitationManager.d.ts","sourceRoot":"","sources":["../../src/invitation/InvitationManager.tsx"],"names":[],"mappings":"AA4BA,2CAA2C;AAC3C,MAAM,WAAW,sBAAsB;IACrC,qDAAqD;IACrD,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB;;;;;;;;OAQG;IACH,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;IACpD,yDAAyD;IACzD,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B;AAcD;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,wBAAgB,iBAAiB,CAAC,EAChC,GAAG,EACH,cAAsC,EACtC,SAAS,GACV,EAAE,sBAAsB,2CA2HxB"}
|
|
@@ -14,6 +14,7 @@ import { useRevokeInvitation } from "./useRevokeInvitation.js";
|
|
|
14
14
|
import { InvitationCreatedAlert } from "./InvitationCreatedAlert.js";
|
|
15
15
|
import { Tooltip, TooltipContent, TooltipTrigger } from "../internal/tooltip.js";
|
|
16
16
|
import { RoleSelector } from "../iam-policy/RoleSelector.js";
|
|
17
|
+
import { useOwnerAssignment } from "../iam-policy/useOwnerAssignment.js";
|
|
17
18
|
import { SpinnerIcon } from "../internal/SpinnerIcon.js";
|
|
18
19
|
import { useCopyFeedback } from "../internal/useCopyFeedback.js";
|
|
19
20
|
function defaultBuildInviteUrl(token) {
|
|
@@ -84,6 +85,9 @@ const EXPIRY_OPTIONS = [
|
|
|
84
85
|
];
|
|
85
86
|
function CreateInvitationForm({ org, onCreated, onCancel, }) {
|
|
86
87
|
const { create, isCreating, error, clearError } = useCreateInvitation();
|
|
88
|
+
// An invitation grants with its creator's authority: only an owner may
|
|
89
|
+
// invite an owner, and the server refuses anyone else.
|
|
90
|
+
const { unassignable } = useOwnerAssignment(org);
|
|
87
91
|
const baseId = useId();
|
|
88
92
|
const [label, setLabel] = useState("");
|
|
89
93
|
const [role, setRole] = useState(IamRole.viewer);
|
|
@@ -110,7 +114,7 @@ function CreateInvitationForm({ org, onCreated, onCancel, }) {
|
|
|
110
114
|
// error state is managed by useCreateInvitation
|
|
111
115
|
}
|
|
112
116
|
}, [canSubmit, label, org, role, expiry, redemptionMode, create, clearError, onCreated]);
|
|
113
|
-
return (_jsxs("form", { onSubmit: handleSubmit, className: "stg:space-y-3", children: [_jsxs("div", { className: "stg:space-y-1", children: [_jsxs("label", { htmlFor: `${baseId}-label`, className: "stg:text-xs stg:font-medium stg:text-foreground", children: ["Label", " ", _jsx("span", { className: "stg:font-normal stg:text-muted-foreground", children: "(optional)" })] }), _jsx("input", { id: `${baseId}-label`, type: "text", value: label, onChange: (e) => setLabel(e.target.value), placeholder: "e.g. Engineering team link", disabled: isCreating, autoFocus: true, maxLength: 200, className: cn("stg:w-full stg:rounded-md stg:border stg:border-input stg:bg-background stg:px-2.5 stg:py-1.5 stg:text-xs stg:text-foreground", "stg:placeholder:text-muted-foreground", "stg:focus-visible:outline-none stg:focus-visible:ring-1 stg:focus-visible:ring-ring", "stg:disabled:pointer-events-none stg:disabled:opacity-50") })] }), _jsx(RoleSelector, { kind: ApiResourceKind.organization, selected: role, onSelect: (r) => setRole(r), disabled: isCreating }), _jsxs("fieldset", { className: cn(UNSTYLED_FIELDSET, "stg:space-y-1.5"), children: [_jsx("legend", { className: "stg:text-xs stg:font-medium stg:text-foreground", children: "Expires in" }), _jsx("div", { className: "stg:flex stg:flex-wrap stg:gap-2", children: EXPIRY_OPTIONS.map(({ value, label: optLabel }) => (_jsx(ExpiryRadio, { name: `${baseId}-expiry`, value: value, label: optLabel, checked: expiry === value, disabled: isCreating, onChange: setExpiry }, value))) })] }), _jsxs("fieldset", { className: cn(UNSTYLED_FIELDSET, "stg:space-y-1.5"), children: [_jsx("legend", { className: "stg:text-xs stg:font-medium stg:text-foreground", children: "Usage limit" }), _jsxs("div", { className: "stg:flex stg:flex-wrap stg:gap-2", children: [_jsx(RedemptionRadio, { name: `${baseId}-redemption`, value: "unlimited", label: "Unlimited", description: "Anyone with the link can join", checked: redemptionMode === "unlimited", disabled: isCreating, onChange: setRedemptionMode }), _jsx(RedemptionRadio, { name: `${baseId}-redemption`, value: "single", label: "Single use", description: "One person only", checked: redemptionMode === "single", disabled: isCreating, onChange: setRedemptionMode })] })] }), error && (_jsx("p", { className: "stg:text-destructive stg:text-[0.65rem]", role: "alert", children: getUserMessage(error) })), _jsxs("div", { className: "stg:flex stg:items-center stg:gap-2", children: [_jsxs("button", { type: "submit", disabled: !canSubmit, className: cn("stg:inline-flex stg:items-center stg:gap-1.5 stg:rounded-md stg:px-3 stg:py-1.5 stg:text-xs stg:font-medium", "stg:bg-primary stg:text-primary-foreground stg:hover:bg-primary-hover", "stg:disabled:pointer-events-none stg:disabled:opacity-40"), children: [isCreating && _jsx(SpinnerIcon, { size: 12 }), "Create invite link"] }), _jsx("button", { type: "button", onClick: onCancel, disabled: isCreating, className: cn("stg:rounded-md stg:px-3 stg:py-1.5 stg:text-xs", "stg:text-muted-foreground stg:hover:text-foreground stg:hover:bg-accent-hover", "stg:disabled:pointer-events-none stg:disabled:opacity-50"), children: "Cancel" })] })] }));
|
|
117
|
+
return (_jsxs("form", { onSubmit: handleSubmit, className: "stg:space-y-3", children: [_jsxs("div", { className: "stg:space-y-1", children: [_jsxs("label", { htmlFor: `${baseId}-label`, className: "stg:text-xs stg:font-medium stg:text-foreground", children: ["Label", " ", _jsx("span", { className: "stg:font-normal stg:text-muted-foreground", children: "(optional)" })] }), _jsx("input", { id: `${baseId}-label`, type: "text", value: label, onChange: (e) => setLabel(e.target.value), placeholder: "e.g. Engineering team link", disabled: isCreating, autoFocus: true, maxLength: 200, className: cn("stg:w-full stg:rounded-md stg:border stg:border-input stg:bg-background stg:px-2.5 stg:py-1.5 stg:text-xs stg:text-foreground", "stg:placeholder:text-muted-foreground", "stg:focus-visible:outline-none stg:focus-visible:ring-1 stg:focus-visible:ring-ring", "stg:disabled:pointer-events-none stg:disabled:opacity-50") })] }), _jsx(RoleSelector, { kind: ApiResourceKind.organization, selected: role, onSelect: (r) => setRole(r), omitRoles: unassignable, disabled: isCreating }), _jsxs("fieldset", { className: cn(UNSTYLED_FIELDSET, "stg:space-y-1.5"), children: [_jsx("legend", { className: "stg:text-xs stg:font-medium stg:text-foreground", children: "Expires in" }), _jsx("div", { className: "stg:flex stg:flex-wrap stg:gap-2", children: EXPIRY_OPTIONS.map(({ value, label: optLabel }) => (_jsx(ExpiryRadio, { name: `${baseId}-expiry`, value: value, label: optLabel, checked: expiry === value, disabled: isCreating, onChange: setExpiry }, value))) })] }), _jsxs("fieldset", { className: cn(UNSTYLED_FIELDSET, "stg:space-y-1.5"), children: [_jsx("legend", { className: "stg:text-xs stg:font-medium stg:text-foreground", children: "Usage limit" }), _jsxs("div", { className: "stg:flex stg:flex-wrap stg:gap-2", children: [_jsx(RedemptionRadio, { name: `${baseId}-redemption`, value: "unlimited", label: "Unlimited", description: "Anyone with the link can join", checked: redemptionMode === "unlimited", disabled: isCreating, onChange: setRedemptionMode }), _jsx(RedemptionRadio, { name: `${baseId}-redemption`, value: "single", label: "Single use", description: "One person only", checked: redemptionMode === "single", disabled: isCreating, onChange: setRedemptionMode })] })] }), error && (_jsx("p", { className: "stg:text-destructive stg:text-[0.65rem]", role: "alert", children: getUserMessage(error) })), _jsxs("div", { className: "stg:flex stg:items-center stg:gap-2", children: [_jsxs("button", { type: "submit", disabled: !canSubmit, className: cn("stg:inline-flex stg:items-center stg:gap-1.5 stg:rounded-md stg:px-3 stg:py-1.5 stg:text-xs stg:font-medium", "stg:bg-primary stg:text-primary-foreground stg:hover:bg-primary-hover", "stg:disabled:pointer-events-none stg:disabled:opacity-40"), children: [isCreating && _jsx(SpinnerIcon, { size: 12 }), "Create invite link"] }), _jsx("button", { type: "button", onClick: onCancel, disabled: isCreating, className: cn("stg:rounded-md stg:px-3 stg:py-1.5 stg:text-xs", "stg:text-muted-foreground stg:hover:text-foreground stg:hover:bg-accent-hover", "stg:disabled:pointer-events-none stg:disabled:opacity-50"), children: "Cancel" })] })] }));
|
|
114
118
|
}
|
|
115
119
|
// ---------------------------------------------------------------------------
|
|
116
120
|
// InvitationRow (internal)
|