@stapel/workspaces-react 0.16.0 → 0.19.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/CHANGELOG.md +194 -0
- package/README.md +39 -8
- package/dist/api/generated/schema.d.ts +187 -60
- package/dist/api/generated/schema.d.ts.map +1 -1
- package/dist/default/ActiveWorkspace.d.ts +43 -0
- package/dist/default/ActiveWorkspace.d.ts.map +1 -0
- package/dist/default/ActiveWorkspace.js +33 -0
- package/dist/default/ActiveWorkspace.js.map +1 -0
- package/dist/default/AuditTrailPane.d.ts +12 -0
- package/dist/default/AuditTrailPane.d.ts.map +1 -0
- package/dist/default/AuditTrailPane.js +154 -0
- package/dist/default/AuditTrailPane.js.map +1 -0
- package/dist/default/InvitationsPane.d.ts +19 -0
- package/dist/default/InvitationsPane.d.ts.map +1 -0
- package/dist/default/InvitationsPane.js +217 -0
- package/dist/default/InvitationsPane.js.map +1 -0
- package/dist/default/InviteAcceptPage.d.ts +7 -0
- package/dist/default/InviteAcceptPage.d.ts.map +1 -1
- package/dist/default/InviteAcceptPage.js +74 -38
- package/dist/default/InviteAcceptPage.js.map +1 -1
- package/dist/default/MembersManager.d.ts +12 -4
- package/dist/default/MembersManager.d.ts.map +1 -1
- package/dist/default/MembersManager.js +320 -84
- package/dist/default/MembersManager.js.map +1 -1
- package/dist/default/RoleSelectField.d.ts +64 -0
- package/dist/default/RoleSelectField.d.ts.map +1 -0
- package/dist/default/RoleSelectField.js +78 -0
- package/dist/default/RoleSelectField.js.map +1 -0
- package/dist/default/WorkspaceSettings.d.ts +7 -1
- package/dist/default/WorkspaceSettings.d.ts.map +1 -1
- package/dist/default/WorkspaceSettings.js +203 -45
- package/dist/default/WorkspaceSettings.js.map +1 -1
- package/dist/default/WorkspacesPage.d.ts +13 -0
- package/dist/default/WorkspacesPage.d.ts.map +1 -0
- package/dist/default/WorkspacesPage.js +108 -0
- package/dist/default/WorkspacesPage.js.map +1 -0
- package/dist/default/index.d.ts +28 -7
- package/dist/default/index.d.ts.map +1 -1
- package/dist/default/index.js +24 -7
- package/dist/default/index.js.map +1 -1
- package/dist/default/parts.d.ts +104 -0
- package/dist/default/parts.d.ts.map +1 -0
- package/dist/default/parts.js +140 -0
- package/dist/default/parts.js.map +1 -0
- package/dist/headless/Members.d.ts +59 -14
- package/dist/headless/Members.d.ts.map +1 -1
- package/dist/headless/Members.js +35 -10
- package/dist/headless/Members.js.map +1 -1
- package/dist/headless/RoleSelect.d.ts +9 -3
- package/dist/headless/RoleSelect.d.ts.map +1 -1
- package/dist/headless/RoleSelect.js +3 -2
- package/dist/headless/RoleSelect.js.map +1 -1
- package/dist/i18n/es.d.ts +11 -12
- package/dist/i18n/es.d.ts.map +1 -1
- package/dist/i18n/es.js +267 -14
- package/dist/i18n/es.js.map +1 -1
- package/dist/i18n/generated/errors.es.gen.d.ts.map +1 -1
- package/dist/i18n/generated/errors.es.gen.js +5 -0
- package/dist/i18n/generated/errors.es.gen.js.map +1 -1
- package/dist/i18n/generated/errors.gen.d.ts +30 -0
- package/dist/i18n/generated/errors.gen.d.ts.map +1 -1
- package/dist/i18n/generated/errors.gen.js +15 -0
- package/dist/i18n/generated/errors.gen.js.map +1 -1
- package/dist/i18n/generated/errors.ru.gen.d.ts.map +1 -1
- package/dist/i18n/generated/errors.ru.gen.js +5 -0
- package/dist/i18n/generated/errors.ru.gen.js.map +1 -1
- package/dist/i18n/keys.d.ts +209 -1
- package/dist/i18n/keys.d.ts.map +1 -1
- package/dist/i18n/keys.js +410 -4
- package/dist/i18n/keys.js.map +1 -1
- package/dist/i18n/ru.d.ts +7 -2
- package/dist/i18n/ru.d.ts.map +1 -1
- package/dist/i18n/ru.js +209 -4
- package/dist/i18n/ru.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -2
- package/dist/index.js.map +1 -1
- package/dist/model/format.d.ts +56 -0
- package/dist/model/format.d.ts.map +1 -0
- package/dist/model/format.js +125 -0
- package/dist/model/format.js.map +1 -0
- package/dist/model/mandate.d.ts +23 -1
- package/dist/model/mandate.d.ts.map +1 -1
- package/dist/model/mandate.js +24 -0
- package/dist/model/mandate.js.map +1 -1
- package/dist/model/selection.d.ts +15 -0
- package/dist/model/selection.d.ts.map +1 -1
- package/dist/model/selection.js +18 -1
- package/dist/model/selection.js.map +1 -1
- package/dist/nav/manifest.d.ts +45 -0
- package/dist/nav/manifest.d.ts.map +1 -0
- package/dist/nav/manifest.js +77 -0
- package/dist/nav/manifest.js.map +1 -0
- package/llms.txt +11 -10
- package/manifest.json +282 -69
- package/package.json +18 -12
- package/src/analytics/generated/events.json +1 -1
- package/src/api/generated/schema.ts +187 -60
- package/src/default/ActiveWorkspace.tsx +97 -0
- package/src/default/AuditTrailPane.tsx +309 -0
- package/src/default/InvitationsPane.tsx +501 -0
- package/src/default/InviteAcceptPage.tsx +187 -90
- package/src/default/MembersManager.tsx +832 -222
- package/src/default/RoleSelectField.tsx +187 -0
- package/src/default/WorkspaceSettings.tsx +540 -125
- package/src/default/WorkspacesPage.tsx +387 -0
- package/src/default/index.ts +28 -7
- package/src/default/parts.tsx +308 -0
- package/src/headless/Members.tsx +84 -16
- package/src/headless/RoleSelect.tsx +12 -5
- package/src/i18n/es.ts +326 -14
- package/src/i18n/generated/errors.es.gen.ts +5 -0
- package/src/i18n/generated/errors.gen.ts +15 -0
- package/src/i18n/generated/errors.json +37 -0
- package/src/i18n/generated/errors.ru.gen.ts +5 -0
- package/src/i18n/keys.ts +462 -5
- package/src/i18n/ru.ts +259 -5
- package/src/index.ts +6 -1
- package/src/model/format.ts +158 -0
- package/src/model/mandate.ts +26 -1
- package/src/model/selection.tsx +19 -1
- package/src/nav/manifest.ts +120 -0
- package/dist/default/ErrorAlert.d.ts +0 -8
- package/dist/default/ErrorAlert.d.ts.map +0 -1
- package/dist/default/ErrorAlert.js +0 -30
- package/dist/default/ErrorAlert.js.map +0 -1
- package/src/default/ErrorAlert.tsx +0 -47
|
@@ -1,101 +1,337 @@
|
|
|
1
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
2
|
/**
|
|
3
|
-
* `<MembersManager/>` — default skin for
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
* wrapper (`useMembers`/`useInviteMembers`/`useUpdateMemberRole`/
|
|
7
|
-
* `useRemoveMember`) — no new backend surface.
|
|
3
|
+
* `<MembersManager/>` — the default skin for "who is in this workspace":
|
|
4
|
+
* the roster, an invite, a role change, a name correction, a removal, and a
|
|
5
|
+
* page walk that actually reaches the second page.
|
|
8
6
|
*
|
|
9
|
-
* Roles come from the EFFECTIVE registry via
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
* backend enforces "only an owner grants owner"
|
|
15
|
-
* the invite dialog
|
|
7
|
+
* Roles come from the EFFECTIVE registry via `<RoleSelectField/>` (GET /roles,
|
|
8
|
+
* org-program §A2) — never a hardcoded builtin four: a deployment that
|
|
9
|
+
* overlays `STAPEL_WORKSPACES["ROLES"]` (e.g. a `secretary`) sees its roles
|
|
10
|
+
* here, labelled by `workspaces.role.<key>` where a bundle carries one and
|
|
11
|
+
* title-cased from the key where it does not. `owner` is offered only on an
|
|
12
|
+
* existing member's row (the backend enforces "only an owner grants owner"
|
|
13
|
+
* and last-owner protection); the invite dialog leaves it out.
|
|
14
|
+
*
|
|
15
|
+
* ## What a row's controls are allowed to claim
|
|
16
|
+
*
|
|
17
|
+
* A control that offers an action the caller's situation makes impossible is
|
|
18
|
+
* a lie the backend then has to tell. Two such rows exist here, and the
|
|
19
|
+
* members contract answers only one of them:
|
|
20
|
+
*
|
|
21
|
+
* - **The last owner.** Answerable: `MemberResponse.role` is on every row and
|
|
22
|
+
* the page envelope says whether the page IS the roster
|
|
23
|
+
* (`MembersBag.rosterComplete`). With the whole roster in hand, "exactly
|
|
24
|
+
* one row holds `owner`" is a fact, so "Remove" on that row is switched off
|
|
25
|
+
* with the reason printed beside it. On any page of a longer roster nothing
|
|
26
|
+
* is claimed — a count of a page is not a count of the roster.
|
|
27
|
+
* - **The caller's own row.** Answerable only by the SERVER. This pair has no
|
|
28
|
+
* caller identity to compare `user_id` against (`@stapel/core`'s session
|
|
29
|
+
* exposes a STATUS, never a subject; the mandate axis resolves to
|
|
30
|
+
* `anonymous`/`guest`/`member`, never to a user id), and `my_role ===
|
|
31
|
+
* "owner"` does not make the caller the user in `owner_id` once more than
|
|
32
|
+
* one membership can hold the role — guessing would grey out somebody
|
|
33
|
+
* else's row. So the row is gated on `MemberResponse.is_self`, the
|
|
34
|
+
* server-derived flag (stapel-workspaces 0.30.0), and on nothing else: a
|
|
35
|
+
* build talking to a backend that does not send it claims nothing rather
|
|
36
|
+
* than guessing. See {@link isSelf}.
|
|
37
|
+
*
|
|
38
|
+
* `is_self` gates TWO controls, not one. `MemberPasswordResetView` refuses
|
|
39
|
+
* the caller's own row with the byte-identical 404 it gives for a stranger —
|
|
40
|
+
* correct on the server (one refusal shape, nothing to learn from the
|
|
41
|
+
* difference) and invisible to a client without this flag: an ungated "Reset
|
|
42
|
+
* password" on your own row comes back with a 404 that reads as "this member
|
|
43
|
+
* has been removed". Both controls therefore ask {@link isSelf} first.
|
|
44
|
+
*
|
|
45
|
+
* ## Two-factor evidence
|
|
46
|
+
*
|
|
47
|
+
* `MemberResponse.mfa_compliant` is true / false / **null**, and null is a
|
|
48
|
+
* state of its own — nobody has asked yet (WORK-01). Under a `require_mfa`
|
|
49
|
+
* policy those members are the ones an administrator acts on, so the column
|
|
50
|
+
* prints three different things and never folds the unknown into a "no".
|
|
16
51
|
*/
|
|
17
52
|
import { useState } from "react";
|
|
18
|
-
import { Button, Card,
|
|
19
|
-
import {
|
|
53
|
+
import { Button, Card, Flex, Input, Typography, theme as antdTheme } from "antd";
|
|
54
|
+
import { actionAvailable, actionBlocked, firstBlock, useT, useTPlural, } from "@stapel/core";
|
|
55
|
+
import { EmptyState, ErrorAlert, GatedButton, LoadList, SkinConfirm, SkinDialog, SkinTheme, } from "@stapel/tokens-antd/skin";
|
|
56
|
+
import { spacing } from "@stapel/tokens";
|
|
20
57
|
import { Members } from "../headless/Members.js";
|
|
21
|
-
import {
|
|
58
|
+
import { useResetMemberPassword } from "../model/mutations.js";
|
|
59
|
+
import { ActiveWorkspaceBoundary } from "./ActiveWorkspace.js";
|
|
60
|
+
import { useWorkspaceFormat } from "../model/format.js";
|
|
22
61
|
import { WORKSPACES_I18N_KEYS } from "../i18n/keys.js";
|
|
23
|
-
import {
|
|
62
|
+
import { AnchorPager, Muted, PersonLine, RowActions, StatusTag } from "./parts.js";
|
|
63
|
+
import { RoleSelectField } from "./RoleSelectField.js";
|
|
24
64
|
const DEFAULT_INVITE_ROLE = "member";
|
|
65
|
+
/** The system-protected role the backend's last-owner rule is about. */
|
|
66
|
+
const OWNER_ROLE = "owner";
|
|
67
|
+
/** The suspension the `require_mfa` sweep writes. Any other reason is shown
|
|
68
|
+
* as the plain "suspended" tag — this pair does not invent copy for a value
|
|
69
|
+
* the backend has not documented. */
|
|
70
|
+
const SUSPENDED_NO_MFA = "no_mfa";
|
|
71
|
+
const FIRST_PAGE = { anchor: undefined, direction: undefined, index: 1 };
|
|
72
|
+
/** A shape good enough to send: the backend answers `error.400.invalid_email`
|
|
73
|
+
* per address after a round trip, and finding out one at a time is the defect
|
|
74
|
+
* this closes. Deliberately loose — address validation belongs to the server;
|
|
75
|
+
* this only catches what is obviously not an address. */
|
|
76
|
+
function looksLikeEmail(value) {
|
|
77
|
+
return /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(value);
|
|
78
|
+
}
|
|
79
|
+
function splitEmails(text) {
|
|
80
|
+
return text
|
|
81
|
+
.split(/[,\s]+/)
|
|
82
|
+
.map((value) => value.trim())
|
|
83
|
+
.filter((value) => value.length > 0);
|
|
84
|
+
}
|
|
25
85
|
export function MembersManager(props) {
|
|
86
|
+
return (_jsx(SkinTheme, { "data-testid": "members-manager", children: _jsx(ActiveWorkspaceBoundary, { workspaceId: props.workspaceId, testId: "members-manager-workspace", children: (workspaceId) => (_jsx(Roster, { workspaceId: workspaceId, canManage: props.canManage ?? true })) }) }));
|
|
87
|
+
}
|
|
88
|
+
/** The roster once the workspace is known — the walk and the filter live here
|
|
89
|
+
* because the cursor belongs to this screen's state, not to the bag's. */
|
|
90
|
+
function Roster(props) {
|
|
91
|
+
const [walk, setWalk] = useState(FIRST_PAGE);
|
|
92
|
+
const [search, setSearch] = useState("");
|
|
93
|
+
const params = {
|
|
94
|
+
...(walk.anchor !== undefined ? { anchor: walk.anchor } : {}),
|
|
95
|
+
...(walk.direction !== undefined ? { direction: walk.direction } : {}),
|
|
96
|
+
...(search.trim() !== "" ? { search: search.trim() } : {}),
|
|
97
|
+
};
|
|
98
|
+
return (_jsx(Members, { workspaceId: props.workspaceId, params: params, children: (bag) => (_jsx(RosterCard, { bag: bag, workspaceId: props.workspaceId, canManage: props.canManage, walk: walk, search: search, onSearch: (value) => {
|
|
99
|
+
// A new filter is a new walk: an anchor from the old one points
|
|
100
|
+
// into a list that no longer exists.
|
|
101
|
+
setSearch(value);
|
|
102
|
+
setWalk(FIRST_PAGE);
|
|
103
|
+
}, onWalk: setWalk })) }));
|
|
104
|
+
}
|
|
105
|
+
function RosterCard(props) {
|
|
26
106
|
const t = useT();
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
// 2026-08-09). `useErrorText` folds any thrown value into the one dialect.
|
|
30
|
-
const errorDisplay = useErrorDisplay(WORKSPACES_I18N_KEYS.unknownError);
|
|
31
|
-
const canManage = props.canManage ?? true;
|
|
107
|
+
const tPlural = useTPlural();
|
|
108
|
+
const { bag, canManage } = props;
|
|
32
109
|
const [inviteOpen, setInviteOpen] = useState(false);
|
|
33
|
-
const [
|
|
34
|
-
const [
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
function submitInvite() {
|
|
54
|
-
const emails = emailsText
|
|
55
|
-
.split(/[,\s]+/)
|
|
56
|
-
.map((e) => e.trim())
|
|
57
|
-
.filter((e) => e.length > 0);
|
|
58
|
-
if (emails.length === 0)
|
|
59
|
-
return;
|
|
60
|
-
invite({ emails, role: inviteRole });
|
|
110
|
+
const [removing, setRemoving] = useState(null);
|
|
111
|
+
const [renaming, setRenaming] = useState(null);
|
|
112
|
+
const [resetting, setResetting] = useState(null);
|
|
113
|
+
const page = bag.page;
|
|
114
|
+
const rosterEmpty = bag.state.status === "ready" && bag.state.data.length === 0;
|
|
115
|
+
const showSearch = !rosterEmpty || props.search.trim() !== "";
|
|
116
|
+
return (_jsxs(Card, { "data-testid": "members-manager-card", children: [_jsxs(Flex, { justify: "space-between", align: "flex-start", gap: spacing["4"], wrap: true, children: [_jsxs(Flex, { vertical: true, gap: spacing["1"], children: [_jsx(Typography.Title, { level: 4, style: { marginTop: 0, marginBottom: 0 }, children: t(WORKSPACES_I18N_KEYS.membersTitle) }), _jsx(Typography.Text, { type: "secondary", children: t(WORKSPACES_I18N_KEYS.membersSubtitle) }), page !== null && (_jsx(Muted, { testId: "members-count", children: tPlural(WORKSPACES_I18N_KEYS.membersCount, { count: page.count }) }))] }), canManage && !rosterEmpty && (_jsx(Button, { type: "primary", onClick: () => setInviteOpen(true), "data-analytics": "none", "data-analytics-reason": "local-ui-open-invite-dialog", "data-testid": "members-invite-open", children: t(WORKSPACES_I18N_KEYS.membersInvite) }))] }), !canManage && (_jsx("div", { style: { marginTop: spacing["2"] }, children: _jsx(Muted, { testId: "members-read-only", children: t(WORKSPACES_I18N_KEYS.membersBlockedReadOnly) }) })), showSearch && (_jsx("div", { style: { marginTop: spacing["4"] }, children: _jsx(Input, { value: props.search, onChange: (event) => props.onSearch(event.target.value), placeholder: t(WORKSPACES_I18N_KEYS.membersSearchPlaceholder), "aria-label": t(WORKSPACES_I18N_KEYS.membersSearchPlaceholder), allowClear: true, "data-testid": "members-search" }) })), _jsx(ErrorAlert, { thrown: bag.writeError, style: { marginTop: spacing["3"] }, testId: "members-write-error" }), _jsx("div", { style: { marginTop: spacing["4"] }, children: _jsx(LoadList, { state: bag.state, testId: "members-list", onRetry: bag.refetch, empty: _jsx(EmptyState, { title: t(WORKSPACES_I18N_KEYS.membersEmpty), testId: "members-list-empty", ...(canManage
|
|
117
|
+
? {
|
|
118
|
+
action: (_jsx(Button, { type: "primary", onClick: () => setInviteOpen(true), "data-analytics": "none", "data-analytics-reason": "local-ui-open-invite-dialog", "data-testid": "members-invite-open", children: t(WORKSPACES_I18N_KEYS.membersInvite) })),
|
|
119
|
+
}
|
|
120
|
+
: {}) }), children: (members) => (_jsx("div", { role: "list", "data-testid": "members-rows", children: members.map((member) => (_jsx(MemberRow, { member: member, rows: members, bag: bag, canManage: canManage, onRename: () => setRenaming(member), onRemove: () => setRemoving(member), onResetPassword: () => setResetting(member) }, member.id))) })) }) }), page !== null && (_jsx(AnchorPager, { hasPrev: page.hasPrev, hasNext: page.hasNext, prevLabel: t(WORKSPACES_I18N_KEYS.pagerPrev), nextLabel: t(WORKSPACES_I18N_KEYS.pagerNext), position: t(WORKSPACES_I18N_KEYS.pagerPosition, { page: props.walk.index }), testId: "members-pager", onPrev: () => props.onWalk({
|
|
121
|
+
anchor: page.prevAnchor ?? undefined,
|
|
122
|
+
direction: "prev",
|
|
123
|
+
index: Math.max(1, props.walk.index - 1),
|
|
124
|
+
}), onNext: () => props.onWalk({
|
|
125
|
+
anchor: page.nextAnchor ?? undefined,
|
|
126
|
+
direction: "next",
|
|
127
|
+
index: props.walk.index + 1,
|
|
128
|
+
}) })), _jsx(InviteDialog, { open: inviteOpen, onClose: () => setInviteOpen(false), isInviting: bag.isInviting, onInvite: (body) => {
|
|
129
|
+
bag.invite(body);
|
|
61
130
|
setInviteOpen(false);
|
|
62
|
-
}
|
|
63
|
-
|
|
131
|
+
} }), _jsx(RenameDialog, { member: renaming, onClose: () => setRenaming(null), isRenaming: bag.isRenaming, onRename: (displayName) => {
|
|
132
|
+
if (renaming === null)
|
|
133
|
+
return;
|
|
134
|
+
bag.rename({ userId: renaming.user_id, displayName });
|
|
135
|
+
setRenaming(null);
|
|
136
|
+
} }), _jsx(PasswordResetDialog, { workspaceId: props.workspaceId, member: resetting, onClose: () => setResetting(null) }), _jsx(SkinConfirm, { open: removing !== null, danger: true, title: t(WORKSPACES_I18N_KEYS.membersRemoveConfirm), body: t(WORKSPACES_I18N_KEYS.membersRemoveConfirmBody, {
|
|
137
|
+
member: removing?.display_name ?? removing?.email ?? "",
|
|
138
|
+
}), confirmLabel: t(WORKSPACES_I18N_KEYS.membersRemove), cancelLabel: t(WORKSPACES_I18N_KEYS.cancel), confirming: bag.isRemoving, onConfirm: () => {
|
|
139
|
+
if (removing !== null)
|
|
140
|
+
bag.remove(removing.user_id);
|
|
141
|
+
setRemoving(null);
|
|
142
|
+
}, onCancel: () => setRemoving(null), "data-testid": "members-remove-confirm" })] }));
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Is this row the READER? The server's answer (`MemberResponse.is_self`,
|
|
146
|
+
* stapel-workspaces 0.30.0) and only the server's.
|
|
147
|
+
*
|
|
148
|
+
* The field is OPTIONAL in the contract, and the `=== true` is the whole
|
|
149
|
+
* point of reading it that way: a deployment on an older backend sends
|
|
150
|
+
* nothing, and the absence must read as "the server did not say" — never as
|
|
151
|
+
* "no". A comparison against a session id would be the client re-deriving an
|
|
152
|
+
* identity it does not hold, which is the shape of the `my_role` defect
|
|
153
|
+
* `can_delete` was added to close.
|
|
154
|
+
*/
|
|
155
|
+
function isSelf(member) {
|
|
156
|
+
return member.is_self === true;
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* Whether removing THIS member is offerable. Two rules, in the order a person
|
|
160
|
+
* would be told them; everything else is the backend's to refuse.
|
|
161
|
+
*/
|
|
162
|
+
function removeAvailability(member, rows, rosterComplete) {
|
|
163
|
+
if (isSelf(member)) {
|
|
164
|
+
return actionBlocked(WORKSPACES_I18N_KEYS.membersRemoveBlockedSelf);
|
|
165
|
+
}
|
|
166
|
+
if (!rosterComplete || member.role !== OWNER_ROLE)
|
|
167
|
+
return actionAvailable();
|
|
168
|
+
const owners = rows.filter((row) => row.role === OWNER_ROLE).length;
|
|
169
|
+
return owners <= 1
|
|
170
|
+
? actionBlocked(WORKSPACES_I18N_KEYS.membersRemoveBlockedLastOwner)
|
|
171
|
+
: actionAvailable();
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* Whether "Reset password" is offerable on THIS row. One rule, and it is the
|
|
175
|
+
* server's: `MemberPasswordResetView` refuses the caller's own row with the
|
|
176
|
+
* byte-identical 404 it gives for a stranger ("Yourself is not in the set
|
|
177
|
+
* this endpoint acts on"), so an ungated button here would read the backend's
|
|
178
|
+
* correct refusal as "this member has been removed" and say so to an admin
|
|
179
|
+
* looking at their own name. Everything else — the owner-target rule, the
|
|
180
|
+
* privileged-account refusal, the step-up — the backend answers, and this
|
|
181
|
+
* screen states rather than predicts.
|
|
182
|
+
*/
|
|
183
|
+
function resetPasswordAvailability(member) {
|
|
184
|
+
return isSelf(member)
|
|
185
|
+
? actionBlocked(WORKSPACES_I18N_KEYS.membersResetBlockedSelf)
|
|
186
|
+
: actionAvailable();
|
|
187
|
+
}
|
|
188
|
+
function MemberRow(props) {
|
|
189
|
+
const t = useT();
|
|
190
|
+
const format = useWorkspaceFormat();
|
|
191
|
+
const { token } = antdTheme.useToken();
|
|
192
|
+
const { member, bag, canManage } = props;
|
|
193
|
+
const lastSeen = format.relative(member.last_accessed_at);
|
|
194
|
+
const joined = format.date(member.accepted_at ?? member.invited_at);
|
|
195
|
+
const tags = (_jsxs(_Fragment, { children: [member.suspended_at !== null && member.suspended_at !== undefined && (_jsx(StatusTag, { tone: "danger", testId: "member-suspended", children: t(WORKSPACES_I18N_KEYS.membersSuspended) })), member.provisioned === true && (_jsx(StatusTag, { tone: "neutral", children: t(WORKSPACES_I18N_KEYS.membersProvisioned) })), _jsx(MfaTag, { compliant: member.mfa_compliant ?? null })] }));
|
|
196
|
+
return (_jsxs("div", { role: "listitem", "data-testid": `member-row-${member.user_id}`, style: {
|
|
197
|
+
display: "flex",
|
|
198
|
+
flexWrap: "wrap",
|
|
199
|
+
alignItems: "center",
|
|
200
|
+
justifyContent: "space-between",
|
|
201
|
+
gap: spacing["3"],
|
|
202
|
+
paddingTop: spacing["3"],
|
|
203
|
+
paddingBottom: spacing["3"],
|
|
204
|
+
borderBottom: `1px solid ${token.colorSplit}`,
|
|
205
|
+
}, children: [_jsx(PersonLine, { name: member.display_name ?? null, email: member.email, tags: tags, caption: _jsxs(_Fragment, { children: [joined !== null && t(WORKSPACES_I18N_KEYS.membersJoined, { date: joined }), joined !== null && " · ", lastSeen === null
|
|
206
|
+
? t(WORKSPACES_I18N_KEYS.membersLastSeenNever)
|
|
207
|
+
: t(WORKSPACES_I18N_KEYS.membersLastSeen, { date: lastSeen }), member.suspension_reason === SUSPENDED_NO_MFA && (_jsxs(_Fragment, { children: [" \u00B7 ", t(WORKSPACES_I18N_KEYS.membersSuspendedNoMfa)] }))] }) }), _jsx(Flex, { gap: spacing["3"], align: "center", wrap: true, children: _jsx("div", { style: { minWidth: "10rem" }, children: _jsx(RoleSelectField, { value: member.role, size: "small", label: t(WORKSPACES_I18N_KEYS.membersRolePickerLabel, {
|
|
208
|
+
member: member.display_name ?? member.email ?? member.role,
|
|
209
|
+
}), disabled: !canManage, onChange: (role) => bag.updateRole({ userId: member.user_id, role }), testId: `member-role-${member.user_id}` }) }) }), canManage && (_jsx(RowActions, { testId: `member-blocked-${member.user_id}`, actions: [
|
|
64
210
|
{
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
211
|
+
key: "rename",
|
|
212
|
+
gate: actionAvailable(),
|
|
213
|
+
label: t(WORKSPACES_I18N_KEYS.membersRename),
|
|
214
|
+
onClick: props.onRename,
|
|
215
|
+
testId: `member-rename-${member.user_id}`,
|
|
69
216
|
},
|
|
70
217
|
{
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
// role) — antd shows the raw value then, which matches
|
|
77
|
-
// labelFor's raw-name fallback contract.
|
|
78
|
-
options: roleOptions })) : (_jsx("span", { children: labelFor(member.role) })),
|
|
218
|
+
key: "reset",
|
|
219
|
+
gate: resetPasswordAvailability(member),
|
|
220
|
+
label: t(WORKSPACES_I18N_KEYS.membersResetPassword),
|
|
221
|
+
onClick: props.onResetPassword,
|
|
222
|
+
testId: `member-reset-password-${member.user_id}`,
|
|
79
223
|
},
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
224
|
+
{
|
|
225
|
+
key: "remove",
|
|
226
|
+
gate: removeAvailability(member, props.rows, bag.rosterComplete),
|
|
227
|
+
label: t(WORKSPACES_I18N_KEYS.membersRemove),
|
|
228
|
+
onClick: props.onRemove,
|
|
229
|
+
danger: true,
|
|
230
|
+
testId: `member-remove-${member.user_id}`,
|
|
231
|
+
},
|
|
232
|
+
] }))] }));
|
|
233
|
+
}
|
|
234
|
+
/** Three states, never two: confirmed, missing, and nobody has asked. */
|
|
235
|
+
function MfaTag(props) {
|
|
236
|
+
const t = useT();
|
|
237
|
+
if (props.compliant === true) {
|
|
238
|
+
return (_jsx(StatusTag, { tone: "success", testId: "member-mfa", children: `${t(WORKSPACES_I18N_KEYS.membersMfaLabel)}: ${t(WORKSPACES_I18N_KEYS.membersMfaCompliant)}` }));
|
|
239
|
+
}
|
|
240
|
+
if (props.compliant === false) {
|
|
241
|
+
return (_jsx(StatusTag, { tone: "warning", testId: "member-mfa", children: `${t(WORKSPACES_I18N_KEYS.membersMfaLabel)}: ${t(WORKSPACES_I18N_KEYS.membersMfaNoncompliant)}` }));
|
|
242
|
+
}
|
|
243
|
+
return (_jsx(StatusTag, { tone: "neutral", testId: "member-mfa", children: `${t(WORKSPACES_I18N_KEYS.membersMfaLabel)}: ${t(WORKSPACES_I18N_KEYS.membersMfaUnknown)}` }));
|
|
244
|
+
}
|
|
245
|
+
/**
|
|
246
|
+
* The invite dialog — a bottom sheet on a phone, a centred modal on
|
|
247
|
+
* tablet/desktop, because that is what `SkinDialog` is (owner ruling
|
|
248
|
+
* 2026-08-24, stated once in `@stapel/tokens-antd/skin`).
|
|
249
|
+
*/
|
|
250
|
+
function InviteDialog(props) {
|
|
251
|
+
const t = useT();
|
|
252
|
+
const [emailsText, setEmailsText] = useState("");
|
|
253
|
+
const [role, setRole] = useState(DEFAULT_INVITE_ROLE);
|
|
254
|
+
const [displayName, setDisplayName] = useState("");
|
|
255
|
+
const emails = splitEmails(emailsText);
|
|
256
|
+
const firstBad = emails.find((email) => !looksLikeEmail(email));
|
|
257
|
+
// Ordered the way it would be explained out loud: the thing that is empty
|
|
258
|
+
// first, the thing that is wrong second.
|
|
259
|
+
const gate = firstBlock(emails.length === 0
|
|
260
|
+
? actionBlocked(WORKSPACES_I18N_KEYS.membersInviteBlockedNoEmails)
|
|
261
|
+
: actionAvailable(), firstBad !== undefined
|
|
262
|
+
? actionBlocked(WORKSPACES_I18N_KEYS.membersInviteBlockedBadEmail, {
|
|
263
|
+
email: firstBad,
|
|
264
|
+
})
|
|
265
|
+
: actionAvailable());
|
|
266
|
+
return (_jsx(SkinDialog, { open: props.open, onClose: props.onClose, title: t(WORKSPACES_I18N_KEYS.membersInviteDialogTitle), dismissLabel: t(WORKSPACES_I18N_KEYS.dialogClose), "data-testid": "members-invite-dialog", footer: _jsx(GatedButton, { gate: gate, type: "primary", loading: props.isInviting, onClick: () => {
|
|
267
|
+
props.onInvite({
|
|
268
|
+
emails: [...emails],
|
|
269
|
+
role,
|
|
270
|
+
...(displayName.trim() !== "" ? { display_name: displayName.trim() } : {}),
|
|
271
|
+
});
|
|
272
|
+
setEmailsText("");
|
|
273
|
+
setDisplayName("");
|
|
274
|
+
setRole(DEFAULT_INVITE_ROLE);
|
|
275
|
+
}, testId: "members-invite-submit", "data-analytics": "none", "data-analytics-reason": "business action \u2014 host app wraps with its own tracked()", children: t(WORKSPACES_I18N_KEYS.membersInviteSubmit) }), children: _jsxs(Flex, { vertical: true, gap: spacing["3"], children: [_jsxs(Flex, { vertical: true, gap: spacing["1"], children: [_jsx(Typography.Text, { children: t(WORKSPACES_I18N_KEYS.membersInviteEmailsLabel) }), _jsx(Input, { value: emailsText, onChange: (event) => setEmailsText(event.target.value), placeholder: t(WORKSPACES_I18N_KEYS.membersInviteEmailsPlaceholder), "aria-label": t(WORKSPACES_I18N_KEYS.membersInviteEmailsLabel) })] }), _jsxs(Flex, { vertical: true, gap: spacing["1"], children: [_jsx(Typography.Text, { children: t(WORKSPACES_I18N_KEYS.membersInviteNameLabel) }), _jsx(Input, { value: displayName, onChange: (event) => setDisplayName(event.target.value), placeholder: t(WORKSPACES_I18N_KEYS.membersInviteNamePlaceholder), "aria-label": t(WORKSPACES_I18N_KEYS.membersInviteNameLabel) })] }), _jsx(RoleSelectField, { value: role, onChange: setRole, excludeOwner: true, showLabel: true, label: t(WORKSPACES_I18N_KEYS.membersInviteRoleLabel), testId: "members-invite-role" })] }) }));
|
|
276
|
+
}
|
|
277
|
+
/**
|
|
278
|
+
* The name correction an owner/admin applies without waiting for the person
|
|
279
|
+
* themselves. It writes the CANONICAL name (stapel-profiles), which the hint
|
|
280
|
+
* under the field says out loud — a workspace-local note is what people
|
|
281
|
+
* expect from a field in a workspace screen, and this is not one.
|
|
282
|
+
*/
|
|
283
|
+
function RenameDialog(props) {
|
|
284
|
+
const t = useT();
|
|
285
|
+
const current = props.member?.display_name ?? "";
|
|
286
|
+
const [value, setValue] = useState(current);
|
|
287
|
+
const [editingId, setEditingId] = useState(null);
|
|
288
|
+
// Seed the field from the row the dialog was opened for, without an effect:
|
|
289
|
+
// a different member in the same mounted dialog is a different edit.
|
|
290
|
+
if (props.member !== null && editingId !== props.member.id) {
|
|
291
|
+
setEditingId(props.member.id);
|
|
292
|
+
setValue(props.member.display_name ?? "");
|
|
293
|
+
}
|
|
294
|
+
const gate = value.trim() === current.trim()
|
|
295
|
+
? actionBlocked(WORKSPACES_I18N_KEYS.membersRenameBlockedUnchanged)
|
|
296
|
+
: actionAvailable();
|
|
297
|
+
return (_jsx(SkinDialog, { open: props.member !== null, onClose: props.onClose, title: t(WORKSPACES_I18N_KEYS.membersRenameDialogTitle), dismissLabel: t(WORKSPACES_I18N_KEYS.dialogClose), "data-testid": "members-rename-dialog", footer: _jsx(GatedButton, { gate: gate, type: "primary", loading: props.isRenaming, onClick: () => props.onRename(value.trim() === "" ? null : value.trim()), testId: "members-rename-submit", "data-analytics": "none", "data-analytics-reason": "business action \u2014 host app wraps with its own tracked()", children: t(WORKSPACES_I18N_KEYS.membersRenameSubmit) }), children: _jsxs(Flex, { vertical: true, gap: spacing["2"], children: [_jsx(Typography.Text, { children: t(WORKSPACES_I18N_KEYS.membersRenameLabel) }), _jsx(Input, { value: value, onChange: (event) => setValue(event.target.value), placeholder: t(WORKSPACES_I18N_KEYS.membersRenamePlaceholder), "aria-label": t(WORKSPACES_I18N_KEYS.membersRenameLabel), "data-testid": "members-rename-input" }), _jsx(Muted, { children: t(WORKSPACES_I18N_KEYS.membersRenameHint) })] }) }));
|
|
298
|
+
}
|
|
299
|
+
/**
|
|
300
|
+
* Reset a member's password on the organization's order — an account takeover
|
|
301
|
+
* performed on purpose, so the dialog states every part of it before the
|
|
302
|
+
* click and once more after.
|
|
303
|
+
*
|
|
304
|
+
* Three things this surface has to get right, all of them the backend's own
|
|
305
|
+
* rules stated on the glass rather than re-derived:
|
|
306
|
+
*
|
|
307
|
+
* - **The step-up is announced, not discovered.** The capability is declared
|
|
308
|
+
* `high`, so `@requires_verification(scope="sensitive")` will demand a
|
|
309
|
+
* fresh confirmation; core's client drives the challenge and replays the
|
|
310
|
+
* call. A person who reads "you will be asked to confirm" before pressing
|
|
311
|
+
* the button experiences a step, not a refusal.
|
|
312
|
+
* - **The generated password is shown ONCE.** It comes back only when the
|
|
313
|
+
* request omitted one, is never re-fetchable, and the hook deliberately
|
|
314
|
+
* keeps it out of the query cache (`gcTime: 0`). Closing the dialog resets
|
|
315
|
+
* the mutation, so the credential leaves the screen with it.
|
|
316
|
+
* - **`notified: false` is said out loud.** It means the account had no
|
|
317
|
+
* channel to be told on, which makes the admin the only person who can
|
|
318
|
+
* tell them — silence there is how a reset becomes indistinguishable from
|
|
319
|
+
* a takeover.
|
|
320
|
+
*/
|
|
321
|
+
function PasswordResetDialog(props) {
|
|
322
|
+
const t = useT();
|
|
323
|
+
const reset = useResetMemberPassword(props.workspaceId);
|
|
324
|
+
const { member } = props;
|
|
325
|
+
const who = member?.display_name ?? member?.email ?? "";
|
|
326
|
+
const result = reset.data;
|
|
327
|
+
const close = () => {
|
|
328
|
+
// The result carries a live credential: it goes when the dialog goes.
|
|
329
|
+
reset.reset();
|
|
330
|
+
props.onClose();
|
|
331
|
+
};
|
|
332
|
+
return (_jsx(SkinDialog, { open: member !== null, onClose: close, title: t(WORKSPACES_I18N_KEYS.membersResetDialogTitle, { member: who }), dismissLabel: t(WORKSPACES_I18N_KEYS.dialogClose), "data-testid": "members-reset-dialog", footer: result === undefined ? (_jsx(Button, { type: "primary", danger: true, loading: reset.isPending, onClick: () => {
|
|
333
|
+
if (member !== null)
|
|
334
|
+
reset.mutate({ userId: member.user_id });
|
|
335
|
+
}, "data-testid": "members-reset-submit", "data-analytics": "none", "data-analytics-reason": "business action \u2014 host app wraps with its own tracked()", children: t(WORKSPACES_I18N_KEYS.membersResetSubmit) })) : (_jsx(Button, { type: "primary", onClick: close, "data-testid": "members-reset-done", "data-analytics": "none", "data-analytics-reason": "local-ui-close-dialog", children: t(WORKSPACES_I18N_KEYS.dialogClose) })), children: _jsx(Flex, { vertical: true, gap: spacing["3"], children: result === undefined ? (_jsxs(_Fragment, { children: [_jsx(Typography.Text, { children: t(WORKSPACES_I18N_KEYS.membersResetDialogBody) }), _jsx(Muted, { testId: "members-reset-stepup", children: t(WORKSPACES_I18N_KEYS.membersResetStepUp) }), _jsx(ErrorAlert, { thrown: reset.error, testId: "members-reset-error" })] })) : (_jsxs(Flex, { vertical: true, gap: spacing["2"], "data-testid": "members-reset-result", children: [_jsx(Typography.Text, { children: t(WORKSPACES_I18N_KEYS.membersResetDone, { member: who }) }), typeof result.generated_password === "string" && (_jsxs(_Fragment, { children: [_jsx(Typography.Text, { children: t(WORKSPACES_I18N_KEYS.membersResetGenerated) }), _jsx(Typography.Text, { code: true, "data-testid": "members-reset-password", children: result.generated_password }), _jsx(Muted, { children: t(WORKSPACES_I18N_KEYS.membersResetGeneratedHint) })] })), result.notified === false && (_jsx(Muted, { testId: "members-reset-not-notified", children: t(WORKSPACES_I18N_KEYS.membersResetNotNotified) }))] })) }) }));
|
|
100
336
|
}
|
|
101
337
|
//# sourceMappingURL=MembersManager.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MembersManager.js","sourceRoot":"","sources":["../../src/default/MembersManager.tsx"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"MembersManager.js","sourceRoot":"","sources":["../../src/default/MembersManager.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `<RoleSelectField/>` — the default skin for {@link RoleSelect} (§54: every
|
|
3
|
+
* headless primitive gets an AntD default).
|
|
4
|
+
*
|
|
5
|
+
* The visual pass photographed the role story as five bullet points: no
|
|
6
|
+
* control, no current value, nothing focusable, and a deployment role
|
|
7
|
+
* (`secretary`) printed lowercase beside title-cased builtin ones. This is
|
|
8
|
+
* that primitive drawn as what it is — a real `<Select>` with an accessible
|
|
9
|
+
* name, the effective registry behind it, and the role's RANK as the caption
|
|
10
|
+
* in the menu, because "admin outranks member" is the fact a person picking a
|
|
11
|
+
* role is actually reasoning about.
|
|
12
|
+
*
|
|
13
|
+
* The three non-ready states are not a select at all:
|
|
14
|
+
* - loading — the control is there and busy, so the layout does not jump.
|
|
15
|
+
* - failed — NO picker. An enabled `<Select options={[]}/>` offers a choice
|
|
16
|
+
* that does not exist; the reason is printed instead (the registry read is
|
|
17
|
+
* a separate load from whatever list the caller is drawing).
|
|
18
|
+
* - empty — a registry with no roles is not a picker either.
|
|
19
|
+
*/
|
|
20
|
+
import type { ReactElement } from "react";
|
|
21
|
+
export interface RoleSelectFieldProps {
|
|
22
|
+
/** The registry key currently chosen. Kept as the VALUE even when the
|
|
23
|
+
* registry has no label for it — a deployment that removed an overlay role
|
|
24
|
+
* must still show what the member actually holds. */
|
|
25
|
+
readonly value: string;
|
|
26
|
+
readonly onChange: (role: string) => void;
|
|
27
|
+
/**
|
|
28
|
+
* The control's accessible name. Required, not optional: a roster renders
|
|
29
|
+
* one of these per row, and "combobox, combobox, combobox" is what a screen
|
|
30
|
+
* reader says when the name is left to the layout.
|
|
31
|
+
*/
|
|
32
|
+
readonly label: string;
|
|
33
|
+
/** Draw the name above the control as well. Off in a table cell, where the
|
|
34
|
+
* column header is the visible label. */
|
|
35
|
+
readonly showLabel?: boolean;
|
|
36
|
+
/** Leave `owner` out of the menu — the invite path, where the backend
|
|
37
|
+
* enforces "only an owner grants owner" anyway. */
|
|
38
|
+
readonly excludeOwner?: boolean;
|
|
39
|
+
readonly size?: "small" | "middle" | "large";
|
|
40
|
+
/** Forwarded straight to the control by a caller that has already stated
|
|
41
|
+
* its own reason beside it (a gate, a read-only roster). */
|
|
42
|
+
readonly disabled?: boolean;
|
|
43
|
+
readonly "aria-describedby"?: string | undefined;
|
|
44
|
+
readonly testId?: string | undefined;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Role key → the word for it, with no registry read behind it.
|
|
48
|
+
*
|
|
49
|
+
* `RoleSelect`'s own `labelFor` is a bundle lookup that never touches the
|
|
50
|
+
* query, but mounting `<RoleSelect>` to reach it also fires GET /roles — which
|
|
51
|
+
* on the PUBLIC invitation page is a call an anonymous reader cannot make.
|
|
52
|
+
* A caption that only needs a word asks for a word.
|
|
53
|
+
*/
|
|
54
|
+
export declare function useRoleLabel(): (role: string) => string;
|
|
55
|
+
/**
|
|
56
|
+
* A role as a WORD, where there is nothing to pick — an invitation's granted
|
|
57
|
+
* role, a read-only roster. The same label resolution as the field, so one
|
|
58
|
+
* screen never calls `admin` "Admin" while its neighbour prints `admin`.
|
|
59
|
+
*/
|
|
60
|
+
export declare function RoleLabel(props: {
|
|
61
|
+
readonly role: string;
|
|
62
|
+
}): ReactElement;
|
|
63
|
+
export declare function RoleSelectField(props: RoleSelectFieldProps): ReactElement;
|
|
64
|
+
//# sourceMappingURL=RoleSelectField.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RoleSelectField.d.ts","sourceRoot":"","sources":["../../src/default/RoleSelectField.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AACH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AAa1C,MAAM,WAAW,oBAAoB;IACnC;;yDAEqD;IACrD,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC1C;;;;OAIG;IACH,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB;6CACyC;IACzC,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC;IAC7B;uDACmD;IACnD,QAAQ,CAAC,YAAY,CAAC,EAAE,OAAO,CAAC;IAChC,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAC;IAC7C;gEAC4D;IAC5D,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,kBAAkB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACjD,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACtC;AAED;;;;;;;GAOG;AACH,wBAAgB,YAAY,IAAI,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAMvD;AAED;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,YAAY,CAGxE;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,oBAAoB,GAAG,YAAY,CAsGzE"}
|