@streamoid/settings 0.6.6 → 0.7.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.ts CHANGED
@@ -48,7 +48,11 @@ type SettingsTab = "profile"
48
48
  | "organization"
49
49
  /** Organization › Workspaces. */
50
50
  | "organizationWorkspaces"
51
- /** Organization › Domains & join requests. */
51
+ /**
52
+ * @deprecated The Domains tab is gone; join requests moved to Organization ›
53
+ * Workspaces. Kept so old links and host code still resolve — it renders
54
+ * the Workspaces view.
55
+ */
52
56
  | "organizationDomains" | "referral" | "billing" | "apikey";
53
57
  /** Which entity a tab acts on. Drives the nav grouping and the breadcrumb. */
54
58
  type SettingsScope = "account" | "workspace" | "organization" | "global";
@@ -155,10 +159,11 @@ interface SettingsWorkspaceCurrent {
155
159
  */
156
160
  organizationId?: string;
157
161
  /**
158
- * "private" = only members of this workspace can see it; "shared" = every
159
- * member of the parent org gets implicit view-only access. Toggled from
160
- * the Workspace tab; org admins always have full implicit access
161
- * regardless of this flag (host-side rule, not enforced by this package).
162
+ * "shared" = listed in the organization's workspace picker, so anyone in the
163
+ * organization can join it as a member; "private" = not listed, people get
164
+ * in by invite only. Visibility never grants access by itself. Org admins
165
+ * can open every workspace in their organization either way (host-side
166
+ * rule, not enforced by this package).
162
167
  */
163
168
  orgVisibility?: "private" | "shared";
164
169
  }
@@ -222,6 +227,16 @@ interface SettingsWorkspaceAdapter {
222
227
  role?: string;
223
228
  } | null;
224
229
  }>;
230
+ /**
231
+ * Optional: plan labels ("Free", "Pro", …) for the given workspaces, keyed by
232
+ * id. My workspaces lists workspaces a page at a time and asks only for the
233
+ * page on screen, so `list()` doesn't have to look up every workspace's plan
234
+ * before anything renders. Leave a workspace out of the result when its
235
+ * lookup failed; it is shown without a plan.
236
+ *
237
+ * When omitted, the plan on each `list()` item is used as before.
238
+ */
239
+ fetchPlans?: (workspaceIds: string[]) => Promise<Record<string, string>>;
225
240
  /**
226
241
  * Optional: host-controlled refresh after the package mutates workspace
227
242
  * state. If provided, the package will call this instead of (or in addition
@@ -242,10 +257,11 @@ interface SettingsWorkspaceAdapter {
242
257
  /**
243
258
  * An organization membership role.
244
259
  *
245
- * `guest` is an outsider who accepted an invite to a single workspace inside
246
- * the organization. They hold a membership row — so they show up in these
247
- * responses — but inherit nothing from the org: no implicit access to its
248
- * shared workspaces, and every org-level write is refused by the backend.
260
+ * `guest` is an outsider who accepted an invite to a workspace inside the
261
+ * organization. They hold a membership row — so they show up in these
262
+ * responses — but inherit nothing from the org: they can't join its shared
263
+ * workspaces from the picker, can only ever be a workspace member, and every
264
+ * org-level write is refused by the backend.
249
265
  *
250
266
  * Gate write affordances on `=== "admin"`, never on `!== "member"`: a role this
251
267
  * union does not yet name must read as least-privileged, not as an editor.
@@ -267,7 +283,15 @@ interface SettingsOrganizationCurrent {
267
283
  imageUrl?: string;
268
284
  role?: SettingsOrganizationRole | string;
269
285
  /**
270
- * Whether the viewer may invite into this organization.
286
+ * The email domain this organization is tied to (e.g. "acme.com"), when it
287
+ * has one. Organizations created for a team on a free email provider have
288
+ * none. Lets the workspace invite modal tell, from the address alone, that
289
+ * an invitee will be a guest — and so can only be invited as a member.
290
+ */
291
+ domain?: string | null;
292
+ /**
293
+ * Whether the viewer may add people to this organization through a
294
+ * workspace invite ("Colleague").
271
295
  *
272
296
  * Orthogonal to `role`, not implied by it: a guest row can carry it too, so
273
297
  * gate on `role !== "guest" && (role === "admin" || inviteAccess)`. The
@@ -279,7 +303,9 @@ interface SettingsOrganizationCurrent {
279
303
  interface OrganizationMember {
280
304
  _id: string;
281
305
  role: SettingsOrganizationRole;
282
- inviteAccess: boolean;
306
+ /** @deprecated Only meant anything for organization-level invites, which
307
+ * no longer exist. */
308
+ inviteAccess?: boolean;
283
309
  /** Populated user. Rows whose user document was deleted come back from the
284
310
  * API with a null `user` — OrganizationContent drops those on fetch, so
285
311
  * every render site can treat this as present. */
@@ -295,7 +321,10 @@ interface OrganizationMember {
295
321
  name?: string;
296
322
  };
297
323
  }
298
- /** A single row in the combined Organization invites table. */
324
+ /**
325
+ * @deprecated Organization-level invites no longer exist; the package never
326
+ * reads this. Kept so host adapters that still name it keep compiling.
327
+ */
299
328
  interface OrganizationInvite {
300
329
  _id: string;
301
330
  kind: "email" | "domain";
@@ -331,10 +360,8 @@ interface OrganizationJoinRequest {
331
360
  };
332
361
  createdAt?: string;
333
362
  }
334
- /** Result of checking whether the current user's email domain already has
335
- * an org claiming it via a domain invite — drives the "an organization
336
- * already exists for your company" prompt in the create-organization
337
- * empty state, so people don't fragment a company across duplicate orgs. */
363
+ /** @deprecated Joining by domain now happens at sign-in; the package never
364
+ * reads this. */
338
365
  interface OrganizationDomainMatch {
339
366
  organizationId: string;
340
367
  organizationName: string;
@@ -350,7 +377,9 @@ interface SettingsOrganizationAdapter {
350
377
  managementUrl?: string;
351
378
  current: SettingsOrganizationCurrent | null;
352
379
  list: () => Promise<SettingsOrganizationListItem[]>;
353
- create: (input: {
380
+ /** @deprecated Organizations are created at sign-in from the email domain,
381
+ * or from the company name given in onboarding. Never called. */
382
+ create?: (input: {
354
383
  name: string;
355
384
  imageFile?: File | null;
356
385
  }) => Promise<{
@@ -364,59 +393,55 @@ interface SettingsOrganizationAdapter {
364
393
  switch: (id: string) => Promise<void>;
365
394
  delete: (id: string) => Promise<void>;
366
395
  fetchMembers: () => Promise<OrganizationMember[]>;
367
- /** Merged email + domain invites, tagged by `kind`. Drives a single
368
- * combined pending-invites table (not two separate lists). */
369
- fetchInvites: () => Promise<OrganizationInvite[]>;
370
- inviteMemberByEmail: (input: {
396
+ /** @deprecated Never called. */
397
+ fetchInvites?: () => Promise<OrganizationInvite[]>;
398
+ /** @deprecated Never called. */
399
+ inviteMemberByEmail?: (input: {
371
400
  email: string;
372
401
  role: "admin" | "member";
373
402
  inviteAccess: boolean;
374
403
  }) => Promise<void>;
375
- inviteDomain: (input: {
404
+ /** @deprecated Never called. */
405
+ inviteDomain?: (input: {
376
406
  domain: string;
377
407
  autoJoinRole: "admin" | "member";
378
408
  }) => Promise<void>;
379
- /** Revoke a domain invite. Only stops *future* auto-joins — does not
380
- * remove members who already joined via that domain. */
381
- revokeDomainInvite: (id: string) => Promise<void>;
382
- cancelInvite: (token: string) => Promise<void>;
383
- resendInvite: (invitationId: string) => Promise<void>;
409
+ /** @deprecated Never called. */
410
+ revokeDomainInvite?: (id: string) => Promise<void>;
411
+ /** @deprecated Never called. */
412
+ cancelInvite?: (token: string) => Promise<void>;
413
+ /** @deprecated Never called. */
414
+ resendInvite?: (invitationId: string) => Promise<void>;
415
+ /** Removes the users from the organization — and, on the backend, from
416
+ * every workspace in it. */
384
417
  removeMember: (input: {
385
418
  userIds?: string[];
419
+ /** @deprecated Organization invites no longer exist. */
386
420
  invitationIds?: string[];
387
421
  }) => Promise<void>;
388
422
  updateMemberRole: (input: {
389
423
  userId: string;
390
424
  role: "admin" | "member";
425
+ /** @deprecated Organization invites no longer exist. */
391
426
  inviteAccess?: boolean;
392
427
  }) => Promise<void>;
393
428
  /** Optional: gates write affordances inside the Organization tab. Can report
394
429
  * "guest", so callers must gate on `=== "admin"` rather than `!== "member"`. */
395
430
  getHighestRole?: () => Promise<{
396
431
  role: SettingsOrganizationRole;
397
- /**
398
- * The viewer's own email domain, and whether it can be claimed at all.
399
- *
400
- * A self-serve domain claim can only ever be the claimer's OWN domain —
401
- * there is no DNS verification, so the backend refuses any other — which
402
- * makes one boolean about one known domain the entire answer. Server
403
- * computed on purpose: the disposable-domain lists it consults are
404
- * provisioned at runtime, so no bundled list could agree with it.
405
- */
432
+ /** @deprecated Domain claims no longer exist; never read. */
406
433
  emailDomain?: string | null;
434
+ /** @deprecated Domain claims no longer exist; never read. */
407
435
  canClaimEmailDomain?: boolean;
408
436
  }>;
409
437
  fetchWorkspaces: () => Promise<OrganizationWorkspaceItem[]>;
410
438
  fetchJoinRequests: () => Promise<OrganizationJoinRequest[]>;
411
439
  approveJoinRequest: (requestId: string) => Promise<void>;
412
440
  rejectJoinRequest: (requestId: string) => Promise<void>;
413
- /** Checks whether the current user's email domain already has an org
414
- * claiming it. Called when `current` is null, before showing the
415
- * "create organization" empty state. */
416
- checkDomainMatch: () => Promise<OrganizationDomainMatch | null>;
417
- /** Self-service join for the domain-match prompt — domain invites are
418
- * auto-join by design, so this doesn't need admin approval. */
419
- joinByDomain: () => Promise<void>;
441
+ /** @deprecated Joining by domain now happens at sign-in. Never called. */
442
+ checkDomainMatch?: () => Promise<OrganizationDomainMatch | null>;
443
+ /** @deprecated Joining by domain now happens at sign-in. Never called. */
444
+ joinByDomain?: () => Promise<void>;
420
445
  }
421
446
  type TokenExpiry = "30d" | "60d" | "90d" | "1y" | "never";
422
447
  interface ApiToken {
@@ -913,13 +938,18 @@ declare function ProfileTab(): react.JSX.Element;
913
938
  * workspace you are not currently inside — the current one has its own
914
939
  * General page.
915
940
  */
916
- declare function WorkspaceListTab({ workspaces, loading, onCreateClick: _onCreateClick, onEditClick, onSwitchClick, onLeaveClick, }: {
941
+ /** Workspaces shown per page in My workspaces. */
942
+ declare const WORKSPACE_LIST_PAGE_SIZE = 10;
943
+ declare function WorkspaceListTab({ workspaces, loading, onCreateClick: _onCreateClick, onEditClick, onSwitchClick, onLeaveClick, fetchPlans, pageSize, }: {
917
944
  workspaces: WorkspaceInfo[];
918
945
  loading: boolean;
919
946
  onCreateClick: () => void;
920
947
  onEditClick: (ws: WorkspaceInfo) => void;
921
948
  onSwitchClick: (ws: WorkspaceInfo) => void;
922
949
  onLeaveClick: (ws: WorkspaceInfo) => void;
950
+ /** See SettingsWorkspaceAdapter.fetchPlans. */
951
+ fetchPlans?: (workspaceIds: string[]) => Promise<Record<string, string>>;
952
+ pageSize?: number;
923
953
  }): react.JSX.Element;
924
954
  /**
925
955
  * @deprecated Renamed to `WorkspaceListTab` in 0.4.0 — the tab is a workspace
@@ -1040,21 +1070,17 @@ declare function TeamsContent({ embedded, onInviteOpen, onInviteOpenChange, work
1040
1070
  }): react.JSX.Element;
1041
1071
 
1042
1072
  /**
1043
- * Which slice of the organization to show. The tab used to stack all three on
1044
- * one scrolling page, so the members table, the workspace list and the join
1045
- * requests competed for the same screen and the sections below the table were
1046
- * easy to miss entirely.
1073
+ * Which slice of the organization to show: its people, or its workspaces
1074
+ * together with the workspaces asking to join it.
1047
1075
  *
1048
- * `people` and `domains` split invites by kind on purpose: an email invite is
1049
- * a person you are expecting, a domain invite is a standing rule. They were
1050
- * interleaved in one "Pending" list, where a row could be either.
1076
+ * `domains` is kept as an alias of `workspaces` for hosts and links that still
1077
+ * use it. The Domains tab it named is gone: an organization is tied to one
1078
+ * email domain from the moment it is created, and nobody claims one by hand.
1051
1079
  */
1052
1080
  type OrganizationView = "people" | "workspaces" | "domains";
1053
- declare function OrganizationContent({ embedded, view, onInviteOpen, onInviteOpenChange, }?: {
1081
+ declare function OrganizationContent({ embedded, view, }?: {
1054
1082
  embedded?: boolean;
1055
1083
  view?: OrganizationView;
1056
- onInviteOpen?: boolean;
1057
- onInviteOpenChange?: (open: boolean) => void;
1058
1084
  }): react.JSX.Element;
1059
1085
 
1060
1086
  declare function TokensContent({ embedded, showRevokedOverride, onShowRevokedChange: _onShowRevokedChange, createOpenOverride, onCreateOpenChange, }?: {
@@ -1141,7 +1167,9 @@ interface MemberListToolbarProps {
1141
1167
  activeLabel: string;
1142
1168
  /** Row counts, appended to each tab label. Pass `null` while still loading. */
1143
1169
  activeCount: number | null;
1144
- pendingCount: number | null;
1170
+ /** Omit (or pass `undefined`) for a list with no pending invites — the
1171
+ * organization's — and the tab pair collapses to a single label. */
1172
+ pendingCount?: number | null;
1145
1173
  searchQuery: string;
1146
1174
  onSearchChange: (value: string) => void;
1147
1175
  /** Optional trailing control, e.g. an Invite button on the page itself. */
@@ -1211,63 +1239,48 @@ interface OrganizationModalProps {
1211
1239
  }
1212
1240
  declare function OrganizationModal({ open, mode, organization, onClose, onCreate, onUpdate, onDelete, }: OrganizationModalProps): react.JSX.Element | null;
1213
1241
 
1214
- type ModalMode$1 = "invite" | "update";
1215
- interface OrganizationInviteModalProps {
1242
+ interface WorkspacePickerItem {
1243
+ _id: string;
1244
+ name: string;
1245
+ imageUrl?: string;
1246
+ /** Who created it, shown under the name. */
1247
+ ownerName?: string;
1248
+ }
1249
+ interface WorkspacePickerProps {
1250
+ organizationName?: string;
1251
+ workspaces: WorkspacePickerItem[];
1252
+ /** While the list is still loading. */
1253
+ loading?: boolean;
1254
+ /** Join the ticked workspaces as a member. Throw to keep the picker open. */
1255
+ onJoin: (workspaceIds: string[]) => Promise<void>;
1256
+ /** Create a workspace (the user becomes its admin). Throw to keep it open. */
1257
+ onCreate: (name: string) => Promise<void>;
1258
+ }
1259
+ declare function WorkspacePicker({ organizationName, workspaces, loading, onJoin, onCreate, }: WorkspacePickerProps): react.JSX.Element;
1260
+
1261
+ interface OrganizationMemberModalProps {
1216
1262
  open: boolean;
1217
- mode: ModalMode$1;
1218
- /** Update mode: the target member's email (read-only display). */
1263
+ /** The target member's email (read-only display). */
1219
1264
  userEmail?: string;
1220
1265
  /** admin/member only — the toggle below cannot express any other role, so
1221
1266
  * pass `lockRole` for a target whose role is outside that pair. */
1222
1267
  initialRole?: "admin" | "member";
1223
1268
  /**
1224
1269
  * Show the target's role read-only and disable Save, leaving Remove as the
1225
- * only action.
1226
- *
1227
- * For an organization guest: the toggle offers Admin and Member and nothing
1228
- * else, so opening it on a guest preselected "Member" and quietly promoted
1229
- * them the moment Save was pressed — even by an admin who came only to flip
1230
- * `inviteAccess`, which is itself the thing a guest must never hold. Removing
1231
- * a guest happens through this same modal, so refusing to open it was not an
1232
- * option.
1270
+ * only action. For an organization guest: the toggle offers Admin and Member
1271
+ * and nothing else, and a guest can't be made either.
1233
1272
  */
1234
1273
  lockRole?: boolean;
1235
- /**
1236
- * Whether the viewer's own email domain can be claimed at all. Defaults to
1237
- * true, preserving today's behaviour for any host that does not pass it.
1238
- *
1239
- * A domain claim can only ever be the claimer's OWN domain — there is no DNS
1240
- * verification, so the backend refuses any other — and a public provider
1241
- * like gmail.com can never be claimed by anybody. Offering the tab in that
1242
- * case advertises the one mechanism that would solve bulk onboarding and
1243
- * then fails after submit, which is worse than not offering it.
1244
- */
1245
- canClaimDomain?: boolean;
1246
- /** The viewer's own email domain: the only one they could ever claim. */
1247
- claimableDomain?: string | null;
1248
1274
  /** Label for the read-only role shown when `lockRole` is set. */
1249
1275
  lockedRoleLabel?: string;
1250
- initialInviteAccess?: boolean;
1251
- /** Lets a pending-invite row reopen this modal to resend without edits. */
1252
- allowSubmitWithoutChanges?: boolean;
1253
1276
  canRemove?: boolean;
1254
1277
  onClose: () => void;
1255
- onInviteEmail?: (input: {
1256
- email: string;
1257
- role: "admin" | "member";
1258
- inviteAccess: boolean;
1259
- }) => void;
1260
- onInviteDomain?: (input: {
1261
- domain: string;
1262
- autoJoinRole: "admin" | "member";
1263
- }) => void;
1264
1278
  onUpdate?: (input: {
1265
1279
  role: "admin" | "member";
1266
- inviteAccess: boolean;
1267
1280
  }) => void;
1268
1281
  onRemove?: () => void;
1269
1282
  }
1270
- declare function OrganizationInviteModal({ open, mode, userEmail, initialRole, lockRole, canClaimDomain, claimableDomain, lockedRoleLabel, initialInviteAccess, allowSubmitWithoutChanges, canRemove, onClose, onInviteEmail, onInviteDomain, onUpdate, onRemove, }: OrganizationInviteModalProps): react.JSX.Element | null;
1283
+ declare function OrganizationMemberModal({ open, userEmail, initialRole, lockRole, lockedRoleLabel, canRemove, onClose, onUpdate, onRemove, }: OrganizationMemberModalProps): react.JSX.Element | null;
1271
1284
 
1272
1285
  interface ConfirmLeaveModalProps {
1273
1286
  open: boolean;
@@ -1304,8 +1317,8 @@ interface StoreOption {
1304
1317
  }
1305
1318
  /**
1306
1319
  * Standing in the workspace's parent organization, as distinct from `role`,
1307
- * which is the role inside the workspace itself. The two are independent: an
1308
- * external collaborator is routinely a workspace admin and an org guest.
1320
+ * which is the role inside the workspace itself. A colleague can hold either
1321
+ * workspace role; a guest can only ever be a workspace member.
1309
1322
  */
1310
1323
  type OrganizationStanding = "colleague" | "guest";
1311
1324
  interface InviteUpdateModalProps {
@@ -1372,10 +1385,16 @@ interface InviteUpdateModalProps {
1372
1385
  allowGuestStanding?: boolean;
1373
1386
  /** Defaults to "guest" — the least-privileged of the two. */
1374
1387
  initialOrganizationStanding?: OrganizationStanding;
1388
+ /**
1389
+ * The email domain of the workspace's organization, when it has one. An
1390
+ * invitee outside it joins as a guest (unless invited as a Colleague), and
1391
+ * a guest can only be a workspace member — so Admin is locked off for them.
1392
+ */
1393
+ organizationDomain?: string | null;
1375
1394
  /** Called only in invite mode; receives (permissions, email, standing) */
1376
1395
  onInvite?: (permissions: UserPermissions, email: string, organizationStanding?: OrganizationStanding) => void;
1377
1396
  }
1378
- declare function InviteUpdateModal({ open, mode, userEmail, stores, hiddenApps, allowSubmitWithoutChanges, initialPermissions, onClose, onSave, onRemove, canRemove, showOrganizationStanding, organizationName, allowGuestStanding, initialOrganizationStanding, onInvite, }: InviteUpdateModalProps): react.JSX.Element | null;
1397
+ declare function InviteUpdateModal({ open, mode, userEmail, stores, hiddenApps, allowSubmitWithoutChanges, initialPermissions, onClose, onSave, onRemove, canRemove, showOrganizationStanding, organizationName, allowGuestStanding, initialOrganizationStanding, organizationDomain, onInvite, }: InviteUpdateModalProps): react.JSX.Element | null;
1379
1398
 
1380
1399
  interface ExportDateModalProps {
1381
1400
  title: string;
@@ -1395,4 +1414,4 @@ declare function SettingsAdaptersProvider({ adapters, children, }: {
1395
1414
  */
1396
1415
  declare function useSettingsAdapters(): SettingsAdapters;
1397
1416
 
1398
- export { APP_KEYS, type ApiToken, type AppKey, type AvailableCreditsResponse, BillingContent, type BillingEventPayload, type BillingProduct, type BillingSubscription, BuyCreditsModal, type BuyCreditsPayload, type BuyCreditsResponse, ConfirmDeleteModal, ConfirmLeaveModal, type CreatedToken, type CustomCreditInfo, type CustomCreditResponse, DEFAULT_PERMISSIONS, DEFAULT_USER_LANGUAGE, ExportDateModal, InviteUpdateModal, type InvoicePdfResponse, MemberListFrame, type MemberListFrameProps, type MemberListTab, MemberListToolbar, type MemberListToolbarProps, type MemberPermissionsPayload, OrganizationContent, type OrganizationData, type OrganizationInvite, OrganizationInviteModal, type OrganizationInviteModalProps, type OrganizationJoinRequest, type OrganizationMember, OrganizationModal, type OrganizationView, type OrganizationWorkspaceItem, type Price, type PriceMetadata, type ProductsResponse, ProfileAvatar, ProfileTab, ReferralTab, SCOPE_LABELS, ScopeHeader, type ScopeHeaderProps, type ServiceItem, type SettingsAdapters, SettingsAdaptersProvider, type SettingsApiAdapter, type SettingsAuthAdapter, type SettingsAuthUser, SettingsContent, type SettingsContentProps, type SettingsImageUploadAdapter, type SettingsNavigationAdapter, type SettingsOrganizationAdapter, type SettingsOrganizationCurrent, type SettingsOrganizationListItem, type SettingsScope, type SettingsTab, type SettingsToastAdapter, SettingsTooltip, type SettingsTooltipPlacement, type SettingsTooltipProps, type SettingsWorkspaceAdapter, type SettingsWorkspaceCurrent, type SettingsWorkspaceListItem, SiconKey, type StoreItem, type SubscriptionPlan, type SubscriptionResponse, TAB_DESCRIPTIONS, TAB_LABELS, TAB_SCOPE, TAB_TO_URL, type TeamMember, TeamsContent, type TokenExpiry, TokensContent, URL_TO_TAB, USER_LANGUAGES, type UpdateSubscriptionPayload, type UpdateSubscriptionResponse, type UsageHistoryItem, type UsageHistoryResponse, type UserLanguage, type UserPermissions, type WorkspaceData, WorkspaceGeneralTab, type WorkspaceGeneralTabProps, type WorkspaceInvite, WorkspaceListTab, type WorkspaceMember, WorkspaceModal, type WorkspaceOrganization, type WorkspaceOrganizationRequest, WorkspaceTab, type WorkspaceUsageResponse, countLabel, loadWorkspaceOrganization, resolveSettingsTabFromPath, useSettingsAdapters, useWorkspaceOrganization, userLanguageLabel };
1417
+ export { APP_KEYS, type ApiToken, type AppKey, type AvailableCreditsResponse, BillingContent, type BillingEventPayload, type BillingProduct, type BillingSubscription, BuyCreditsModal, type BuyCreditsPayload, type BuyCreditsResponse, ConfirmDeleteModal, ConfirmLeaveModal, type CreatedToken, type CustomCreditInfo, type CustomCreditResponse, DEFAULT_PERMISSIONS, DEFAULT_USER_LANGUAGE, ExportDateModal, InviteUpdateModal, type InvoicePdfResponse, MemberListFrame, type MemberListFrameProps, type MemberListTab, MemberListToolbar, type MemberListToolbarProps, type MemberPermissionsPayload, OrganizationContent, type OrganizationData, type OrganizationInvite, type OrganizationJoinRequest, type OrganizationMember, OrganizationMemberModal, type OrganizationMemberModalProps, OrganizationModal, type OrganizationView, type OrganizationWorkspaceItem, type Price, type PriceMetadata, type ProductsResponse, ProfileAvatar, ProfileTab, ReferralTab, SCOPE_LABELS, ScopeHeader, type ScopeHeaderProps, type ServiceItem, type SettingsAdapters, SettingsAdaptersProvider, type SettingsApiAdapter, type SettingsAuthAdapter, type SettingsAuthUser, SettingsContent, type SettingsContentProps, type SettingsImageUploadAdapter, type SettingsNavigationAdapter, type SettingsOrganizationAdapter, type SettingsOrganizationCurrent, type SettingsOrganizationListItem, type SettingsScope, type SettingsTab, type SettingsToastAdapter, SettingsTooltip, type SettingsTooltipPlacement, type SettingsTooltipProps, type SettingsWorkspaceAdapter, type SettingsWorkspaceCurrent, type SettingsWorkspaceListItem, SiconKey, type StoreItem, type SubscriptionPlan, type SubscriptionResponse, TAB_DESCRIPTIONS, TAB_LABELS, TAB_SCOPE, TAB_TO_URL, type TeamMember, TeamsContent, type TokenExpiry, TokensContent, URL_TO_TAB, USER_LANGUAGES, type UpdateSubscriptionPayload, type UpdateSubscriptionResponse, type UsageHistoryItem, type UsageHistoryResponse, type UserLanguage, type UserPermissions, WORKSPACE_LIST_PAGE_SIZE, type WorkspaceData, WorkspaceGeneralTab, type WorkspaceGeneralTabProps, type WorkspaceInvite, WorkspaceListTab, type WorkspaceMember, WorkspaceModal, type WorkspaceOrganization, type WorkspaceOrganizationRequest, WorkspacePicker, type WorkspacePickerItem, type WorkspacePickerProps, WorkspaceTab, type WorkspaceUsageResponse, countLabel, loadWorkspaceOrganization, resolveSettingsTabFromPath, useSettingsAdapters, useWorkspaceOrganization, userLanguageLabel };