@streamoid/settings 0.8.1 → 0.9.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.mts CHANGED
@@ -44,6 +44,9 @@ type SettingsTab = "profile"
44
44
  | "workspaceMembers"
45
45
  /** Account › My workspaces — the memberships and switch/create list. */
46
46
  | "workspaceList"
47
+ /** Organization › My organizations — every org the viewer belongs to:
48
+ * open one, manage the ones they admin, create another. */
49
+ | "organizationList"
47
50
  /** Organization › People. */
48
51
  | "organization"
49
52
  /** Organization › Workspaces. */
@@ -207,6 +210,11 @@ interface SettingsWorkspaceAdapter {
207
210
  create: (input: {
208
211
  name: string;
209
212
  imageFile?: File | null;
213
+ /** The organization to create it in (the viewer must be its admin). */
214
+ organizationId?: string;
215
+ /** "shared": org members can join it from the workspace picker;
216
+ * "private": invite-only. */
217
+ orgVisibility?: "private" | "shared";
210
218
  imageUrl?: string | null;
211
219
  }) => Promise<{
212
220
  id: string;
@@ -300,10 +308,36 @@ interface SettingsOrganizationListItem {
300
308
  name: string;
301
309
  imageUrl?: string;
302
310
  role?: SettingsOrganizationRole;
311
+ /** The organization the viewer is in right now. */
312
+ isCurrent?: boolean;
313
+ /** Its email domain; absent for an organization with none. */
314
+ domain?: string | null;
315
+ type?: SettingsOrganizationType;
316
+ }
317
+ /** "shared": offered to new users from the company domain at signup.
318
+ * "private": invite-only. */
319
+ type SettingsOrganizationType = "shared" | "private";
320
+ /** Whether the viewer may create an organization, and on which domains
321
+ * (GET /organization/create-options). */
322
+ interface SettingsOrganizationCreateOptions {
323
+ canCreate: boolean;
324
+ /** The Streamoid team: any domain. */
325
+ anyDomain: boolean;
326
+ /** The viewer's company; null for a public email address, whose
327
+ * organizations have no domain. */
328
+ rootDomain: string | null;
329
+ /** Prefill for the domain field. */
330
+ defaultDomain: string | null;
303
331
  }
304
332
  interface SettingsOrganizationCurrent {
305
333
  id: string;
306
334
  name?: string;
335
+ /** Absent on organizations created before types existed: treat as shared. */
336
+ type?: SettingsOrganizationType;
337
+ /** The company the organization belongs to ("abfrl.com" for an org on
338
+ * ownd.abfrl.com). Members from the same company join as members; anyone
339
+ * else is a guest. Absent for organizations with no domain. */
340
+ rootDomain?: string | null;
307
341
  imageUrl?: string;
308
342
  role?: SettingsOrganizationRole | string;
309
343
  /**
@@ -416,18 +450,32 @@ interface SettingsOrganizationAdapter {
416
450
  managementUrl?: string;
417
451
  current: SettingsOrganizationCurrent | null;
418
452
  list: () => Promise<SettingsOrganizationListItem[]>;
419
- /** @deprecated Organizations are created at sign-in from the email domain,
420
- * or from the company name given in onboarding. Never called. */
453
+ /** Optional: create an organization (POST /organization). The caller
454
+ * becomes its admin, and it comes with a default shared workspace. The
455
+ * backend decides which domains the caller may use. */
421
456
  create?: (input: {
422
457
  name: string;
423
458
  imageFile?: File | null;
459
+ /** Defaults to the caller's own email domain. */
460
+ domain?: string;
461
+ type?: SettingsOrganizationType;
424
462
  }) => Promise<{
425
463
  id: string;
426
464
  } | void>;
465
+ /** Optional: who sees "Create organization" in Organization settings —
466
+ * company admins, public email users and the Streamoid team. Without it, or
467
+ * without `create`, the button never shows. */
468
+ getCreateOptions?: () => Promise<SettingsOrganizationCreateOptions>;
427
469
  update: (id: string, patch: {
428
470
  name?: string;
429
471
  imageFile?: File | null;
430
472
  imageUrl?: string | null;
473
+ /** Shared orgs are offered to new users from the company at signup;
474
+ * private ones are invite-only. Any org admin may change it. */
475
+ type?: SettingsOrganizationType;
476
+ /** Only an admin whose own email is on the org's company may change it,
477
+ * and only to a domain of the same company. */
478
+ domain?: string;
431
479
  }) => Promise<void>;
432
480
  switch: (id: string) => Promise<void>;
433
481
  delete: (id: string) => Promise<void>;
@@ -460,7 +508,8 @@ interface SettingsOrganizationAdapter {
460
508
  }) => Promise<void>;
461
509
  updateMemberRole: (input: {
462
510
  userId: string;
463
- role: "admin" | "member";
511
+ /** Any direction, guest included. */
512
+ role: "admin" | "member" | "guest";
464
513
  /** @deprecated Organization invites no longer exist. */
465
514
  inviteAccess?: boolean;
466
515
  }) => Promise<void>;
@@ -1203,7 +1252,9 @@ interface WorkspaceModalProps {
1203
1252
  mode: "create" | "update";
1204
1253
  workspace?: WorkspaceData | null;
1205
1254
  onClose: () => void;
1206
- onCreate?: (name: string, imageFile: File | null) => void | boolean | Promise<void | boolean>;
1255
+ onCreate?: (name: string, imageFile: File | null, details?: {
1256
+ orgVisibility: "private" | "shared";
1257
+ }) => void | boolean | Promise<void | boolean>;
1207
1258
  onUpdate?: (name: string, imageFile: File | null, imageRemoved: boolean) => void | boolean | Promise<void | boolean>;
1208
1259
  onLeave?: () => void | boolean | Promise<void | boolean>;
1209
1260
  onDelete?: () => void | boolean | Promise<void | boolean>;
@@ -1263,10 +1314,13 @@ declare function memberRoleUpdate(current: {
1263
1314
  }, permissions: UserPermissions, services: ServiceItem[]): ({
1264
1315
  userId: string;
1265
1316
  } & MemberPermissionsPayload) | null;
1266
- declare function TeamsContent({ embedded, onInviteOpen, onInviteOpenChange, workspaceName, workspaceImageUrl, organizationName, hiddenApps, }?: {
1317
+ declare function TeamsContent({ embedded, onInviteOpen, onInviteOpenChange, onCanInviteChange, workspaceName, workspaceImageUrl, organizationName, hiddenApps, }?: {
1267
1318
  embedded?: boolean;
1268
1319
  onInviteOpen?: boolean;
1269
1320
  onInviteOpenChange?: (open: boolean) => void;
1321
+ /** Told whether the viewer may invite here, so a host-drawn Invite button
1322
+ * can follow the same rule as this screen's own. */
1323
+ onCanInviteChange?: (canInvite: boolean) => void;
1270
1324
  /**
1271
1325
  * The workspace these members belong to. Supplied by the settings shell so
1272
1326
  * the page can name its own subject — without it this screen was a list of
@@ -1473,17 +1527,37 @@ interface OrganizationData {
1473
1527
  isCurrent: boolean;
1474
1528
  imageUrl?: string;
1475
1529
  imageName?: string;
1530
+ /** "shared": offered to new users from the company at signup;
1531
+ * "private": invite-only. */
1532
+ type?: "shared" | "private";
1533
+ /** The organization's email domain; null when it has none. */
1534
+ domain?: string | null;
1535
+ }
1536
+ /** Type and domain, passed to onCreate / onUpdate after the name and image. */
1537
+ interface OrganizationDetails {
1538
+ type?: "shared" | "private";
1539
+ /** Only set when it was changed (update) or filled in (create). */
1540
+ domain?: string;
1476
1541
  }
1477
1542
  interface OrganizationModalProps {
1478
1543
  open: boolean;
1479
1544
  mode: "create" | "update";
1480
1545
  organization?: OrganizationData | null;
1546
+ /** Create mode: whether the new organization can have a domain at all
1547
+ * (false for a public email user's org). Defaults to true. */
1548
+ allowDomain?: boolean;
1549
+ /** Create mode: the domain field's prefill. */
1550
+ defaultDomain?: string | null;
1551
+ /** Update mode: trust `organization.role` for the delete button instead of
1552
+ * asking `getHighestRole`, which answers for the *current* organization —
1553
+ * wrong when managing another one from My organizations. */
1554
+ trustRole?: boolean;
1481
1555
  onClose: () => void;
1482
- onCreate?: (name: string, imageFile: File | null) => void | boolean | Promise<void | boolean>;
1483
- onUpdate?: (name: string, imageFile: File | null, imageRemoved: boolean) => void | boolean | Promise<void | boolean>;
1556
+ onCreate?: (name: string, imageFile: File | null, details: OrganizationDetails) => void | boolean | Promise<void | boolean>;
1557
+ onUpdate?: (name: string, imageFile: File | null, imageRemoved: boolean, details: OrganizationDetails) => void | boolean | Promise<void | boolean>;
1484
1558
  onDelete?: () => void | boolean | Promise<void | boolean>;
1485
1559
  }
1486
- declare function OrganizationModal({ open, mode, organization, onClose, onCreate, onUpdate, onDelete, }: OrganizationModalProps): react.JSX.Element | null;
1560
+ declare function OrganizationModal({ open, mode, organization, allowDomain, defaultDomain, trustRole, onClose, onCreate, onUpdate, onDelete, }: OrganizationModalProps): react.JSX.Element | null;
1487
1561
 
1488
1562
  interface WorkspacePickerItem {
1489
1563
  _id: string;
@@ -1492,41 +1566,87 @@ interface WorkspacePickerItem {
1492
1566
  /** Who created it, shown under the name. */
1493
1567
  ownerName?: string;
1494
1568
  }
1569
+ /** One organization's section of a multi-organization picker. */
1570
+ interface WorkspacePickerGroup {
1571
+ organizationId: string;
1572
+ organizationName: string;
1573
+ imageUrl?: string;
1574
+ workspaces: WorkspacePickerItem[];
1575
+ /** The viewer may create workspaces in it (an org admin). */
1576
+ canCreate?: boolean;
1577
+ }
1495
1578
  interface WorkspacePickerProps {
1496
1579
  organizationName?: string;
1497
- workspaces: WorkspacePickerItem[];
1580
+ workspaces?: WorkspacePickerItem[];
1581
+ /** Several organizations at once, one collapsible section each. Takes the
1582
+ * place of `organizationName` / `workspaces`. */
1583
+ groups?: WorkspacePickerGroup[];
1498
1584
  /** While the list is still loading. */
1499
1585
  loading?: boolean;
1500
1586
  /** Join the ticked workspaces as a member. Throw to keep the picker open. */
1501
1587
  onJoin: (workspaceIds: string[]) => Promise<void>;
1502
- /** Create a workspace (the user becomes its admin). Throw to keep it open. */
1503
- onCreate: (name: string) => Promise<void>;
1588
+ /** Create a workspace (the user becomes its admin), shared (org members
1589
+ * can join it) or private (invite-only), in `organizationId` when the
1590
+ * picker lists groups. Throw to keep it open.
1591
+ * Omit it for anyone who may not create workspaces in the organization
1592
+ * (only org admins may); the picker then offers joining only. */
1593
+ onCreate?: (name: string, visibility: "private" | "shared", organizationId?: string) => Promise<void>;
1594
+ }
1595
+ declare function WorkspacePicker({ organizationName, workspaces, groups, loading, onJoin, onCreate, }: WorkspacePickerProps): react.JSX.Element;
1596
+
1597
+ interface OrganizationPickerItem {
1598
+ _id: string;
1599
+ name: string;
1600
+ domain?: string;
1601
+ imageUrl?: string;
1504
1602
  }
1505
- declare function WorkspacePicker({ organizationName, workspaces, loading, onJoin, onCreate, }: WorkspacePickerProps): react.JSX.Element;
1603
+ type OrganizationPickerType = "shared" | "private";
1604
+ interface OrganizationPickerProps {
1605
+ /** The company's shared organizations, exact-domain ones first. */
1606
+ organizations: OrganizationPickerItem[];
1607
+ /** The user's company ("abfrl.com"); absent for a public email domain. */
1608
+ companyDomain?: string | null;
1609
+ /** Signed in with a public email address (gmail.com and the like). */
1610
+ publicDomain?: boolean;
1611
+ /** Prefill for the new organization's name. */
1612
+ suggestedName?: string;
1613
+ loading?: boolean;
1614
+ /** Join the ticked organizations as a member. Throw to keep the picker open. */
1615
+ onJoin: (organizationIds: string[]) => Promise<void>;
1616
+ /** Create an organization (the user becomes its admin). Throw to keep it open. */
1617
+ onCreate: (input: {
1618
+ name: string;
1619
+ type: OrganizationPickerType;
1620
+ }) => Promise<void>;
1621
+ }
1622
+ declare function OrganizationPicker({ organizations, companyDomain, publicDomain, suggestedName, loading, onJoin, onCreate, }: OrganizationPickerProps): react.JSX.Element;
1506
1623
 
1624
+ type OrganizationMemberRole = "admin" | "member" | "guest";
1507
1625
  interface OrganizationMemberModalProps {
1508
1626
  open: boolean;
1509
1627
  /** The target member's email (read-only display). */
1510
1628
  userEmail?: string;
1511
- /** admin/member only — the toggle below cannot express any other role, so
1512
- * pass `lockRole` for a target whose role is outside that pair. */
1513
- initialRole?: "admin" | "member";
1629
+ initialRole?: OrganizationMemberRole;
1514
1630
  /**
1515
- * Show the target's role read-only and disable Save, leaving Remove as the
1516
- * only action. For an organization guest: the toggle offers Admin and Member
1517
- * and nothing else, and a guest can't be made either.
1631
+ * The target's email is not on the organization's company domain. Making
1632
+ * them an org admin then asks for confirmation first.
1518
1633
  */
1634
+ outsideDomain?: boolean;
1635
+ /** The organization's company domain, named in that confirmation. */
1636
+ organizationDomain?: string | null;
1637
+ /** Show the target's role read-only and disable Save, leaving Remove as the
1638
+ * only action. */
1519
1639
  lockRole?: boolean;
1520
1640
  /** Label for the read-only role shown when `lockRole` is set. */
1521
1641
  lockedRoleLabel?: string;
1522
1642
  canRemove?: boolean;
1523
1643
  onClose: () => void;
1524
1644
  onUpdate?: (input: {
1525
- role: "admin" | "member";
1645
+ role: OrganizationMemberRole;
1526
1646
  }) => void;
1527
1647
  onRemove?: () => void;
1528
1648
  }
1529
- declare function OrganizationMemberModal({ open, userEmail, initialRole, lockRole, lockedRoleLabel, canRemove, onClose, onUpdate, onRemove, }: OrganizationMemberModalProps): react.JSX.Element | null;
1649
+ declare function OrganizationMemberModal({ open, userEmail, initialRole, outsideDomain, organizationDomain, lockRole, lockedRoleLabel, canRemove, onClose, onUpdate, onRemove, }: OrganizationMemberModalProps): react.JSX.Element | null;
1530
1650
 
1531
1651
  interface ConfirmLeaveModalProps {
1532
1652
  open: boolean;
@@ -1563,8 +1683,8 @@ interface StoreOption {
1563
1683
  }
1564
1684
  /**
1565
1685
  * Standing in the workspace's parent organization, as distinct from `role`,
1566
- * which is the role inside the workspace itself. A colleague can hold either
1567
- * workspace role; a guest can only ever be a workspace member.
1686
+ * which is the role inside the workspace itself. Either can hold either
1687
+ * workspace role.
1568
1688
  */
1569
1689
  type OrganizationStanding = "colleague" | "guest";
1570
1690
  interface InviteUpdateModalProps {
@@ -1632,15 +1752,20 @@ interface InviteUpdateModalProps {
1632
1752
  /** Defaults to "guest" — the least-privileged of the two. */
1633
1753
  initialOrganizationStanding?: OrganizationStanding;
1634
1754
  /**
1635
- * The email domain of the workspace's organization, when it has one. An
1636
- * invitee outside it joins as a guest (unless invited as a Colleague), and
1637
- * a guest can only be a workspace member — so Admin is locked off for them.
1755
+ * @deprecated No longer read. A guest may be invited as a workspace admin,
1756
+ * so the organization's domain no longer locks Admin off.
1638
1757
  */
1639
1758
  organizationDomain?: string | null;
1759
+ /**
1760
+ * Invite mode: whether the inviter may invite an admin. Only workspace
1761
+ * admins (org admins included) can; a member with invite access invites
1762
+ * members only. Defaults to true.
1763
+ */
1764
+ allowAdminRole?: boolean;
1640
1765
  /** Called only in invite mode; receives (permissions, email, standing) */
1641
1766
  onInvite?: (permissions: UserPermissions, email: string, organizationStanding?: OrganizationStanding) => void;
1642
1767
  }
1643
- 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;
1768
+ declare function InviteUpdateModal({ open, mode, userEmail, stores, hiddenApps, allowSubmitWithoutChanges, initialPermissions, onClose, onSave, onRemove, canRemove, showOrganizationStanding, organizationName, allowGuestStanding, initialOrganizationStanding, organizationDomain: _organizationDomain, allowAdminRole, onInvite, }: InviteUpdateModalProps): react.JSX.Element | null;
1644
1769
 
1645
1770
  interface ExportDateModalProps {
1646
1771
  title: string;
@@ -1779,4 +1904,4 @@ declare function SettingsAdaptersProvider({ adapters, children, }: {
1779
1904
  */
1780
1905
  declare function useSettingsAdapters(): SettingsAdapters;
1781
1906
 
1782
- export { APP_KEYS, type ApiToken, type AppKey, type AvailableCreditsResponse, BillingContent, type BillingEventPayload, type BillingProduct, type BillingSubscription, BuyCreditsModal, type BuyCreditsPayload, type BuyCreditsResponse, ConfirmDeleteModal, ConfirmLeaveModal, type ConnectedApp, ConnectedAppsContent, type CreatedToken, type CreditCycleUnit, type CreditLimitValidation, type CustomCreditInfo, type CustomCreditResponse, DEFAULT_PERMISSIONS, DEFAULT_USER_LANGUAGE, ExportDateModal, InviteUpdateModal, type InvoicePdfResponse, type MemberCreditLimit, MemberCreditLimitModal, type MemberCreditLimitRow, type MemberCreditLimitSource, type MemberCreditLimitsResponse, MemberListFrame, type MemberListFrameProps, type MemberListTab, MemberListToolbar, type MemberListToolbarProps, type MemberPermissionsPayload, OrganizationContent, type OrganizationData, OrganizationIntegrationsContent, type OrganizationInvite, type OrganizationJoinRequest, type OrganizationJoinableWorkspace, type OrganizationMember, OrganizationMemberModal, type OrganizationMemberModalProps, OrganizationModal, type OrganizationView, type OrganizationWorkspaceItem, PerUserLimitsView, 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 SettingsIntegrationsAdapter, 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, type WorkspaceListOrganization, WorkspaceListTab, type WorkspaceMember, WorkspaceModal, type WorkspaceOrganization, type WorkspaceOrganizationRequest, WorkspacePicker, type WorkspacePickerItem, type WorkspacePickerProps, WorkspaceTab, type WorkspaceUsageResponse, belowUsageReason, cleanCreditLimitInput, countLabel, creditCycleUnit, describeDefaultLimit, describeMemberLimit, formatCreditLimit, formatCredits, groupWorkspaceList, isLimitBelowUsage, joinMembersWithLimits, lastUsedLabel, limitBelowUsageUsed, limitSourceLabel, loadWorkspaceOrganization, memberRoleUpdate, minimumCreditLimit, resolveSettingsTabFromPath, roundCredits, useSettingsAdapters, useWorkspaceOrganization, userLanguageLabel, validateCreditLimitInput, validateDefaultCreditLimitInput };
1907
+ export { APP_KEYS, type ApiToken, type AppKey, type AvailableCreditsResponse, BillingContent, type BillingEventPayload, type BillingProduct, type BillingSubscription, BuyCreditsModal, type BuyCreditsPayload, type BuyCreditsResponse, ConfirmDeleteModal, ConfirmLeaveModal, type ConnectedApp, ConnectedAppsContent, type CreatedToken, type CreditCycleUnit, type CreditLimitValidation, type CustomCreditInfo, type CustomCreditResponse, DEFAULT_PERMISSIONS, DEFAULT_USER_LANGUAGE, ExportDateModal, InviteUpdateModal, type InvoicePdfResponse, type MemberCreditLimit, MemberCreditLimitModal, type MemberCreditLimitRow, type MemberCreditLimitSource, type MemberCreditLimitsResponse, MemberListFrame, type MemberListFrameProps, type MemberListTab, MemberListToolbar, type MemberListToolbarProps, type MemberPermissionsPayload, OrganizationContent, type OrganizationData, type OrganizationDetails, OrganizationIntegrationsContent, type OrganizationInvite, type OrganizationJoinRequest, type OrganizationJoinableWorkspace, type OrganizationMember, OrganizationMemberModal, type OrganizationMemberModalProps, type OrganizationMemberRole, OrganizationModal, OrganizationPicker, type OrganizationPickerItem, type OrganizationPickerProps, type OrganizationPickerType, type OrganizationView, type OrganizationWorkspaceItem, PerUserLimitsView, 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 SettingsIntegrationsAdapter, type SettingsNavigationAdapter, type SettingsOrganizationAdapter, type SettingsOrganizationCreateOptions, type SettingsOrganizationCurrent, type SettingsOrganizationListItem, type SettingsOrganizationType, 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, type WorkspaceListOrganization, WorkspaceListTab, type WorkspaceMember, WorkspaceModal, type WorkspaceOrganization, type WorkspaceOrganizationRequest, WorkspacePicker, type WorkspacePickerGroup, type WorkspacePickerItem, type WorkspacePickerProps, WorkspaceTab, type WorkspaceUsageResponse, belowUsageReason, cleanCreditLimitInput, countLabel, creditCycleUnit, describeDefaultLimit, describeMemberLimit, formatCreditLimit, formatCredits, groupWorkspaceList, isLimitBelowUsage, joinMembersWithLimits, lastUsedLabel, limitBelowUsageUsed, limitSourceLabel, loadWorkspaceOrganization, memberRoleUpdate, minimumCreditLimit, resolveSettingsTabFromPath, roundCredits, useSettingsAdapters, useWorkspaceOrganization, userLanguageLabel, validateCreditLimitInput, validateDefaultCreditLimitInput };
package/dist/index.d.ts CHANGED
@@ -44,6 +44,9 @@ type SettingsTab = "profile"
44
44
  | "workspaceMembers"
45
45
  /** Account › My workspaces — the memberships and switch/create list. */
46
46
  | "workspaceList"
47
+ /** Organization › My organizations — every org the viewer belongs to:
48
+ * open one, manage the ones they admin, create another. */
49
+ | "organizationList"
47
50
  /** Organization › People. */
48
51
  | "organization"
49
52
  /** Organization › Workspaces. */
@@ -207,6 +210,11 @@ interface SettingsWorkspaceAdapter {
207
210
  create: (input: {
208
211
  name: string;
209
212
  imageFile?: File | null;
213
+ /** The organization to create it in (the viewer must be its admin). */
214
+ organizationId?: string;
215
+ /** "shared": org members can join it from the workspace picker;
216
+ * "private": invite-only. */
217
+ orgVisibility?: "private" | "shared";
210
218
  imageUrl?: string | null;
211
219
  }) => Promise<{
212
220
  id: string;
@@ -300,10 +308,36 @@ interface SettingsOrganizationListItem {
300
308
  name: string;
301
309
  imageUrl?: string;
302
310
  role?: SettingsOrganizationRole;
311
+ /** The organization the viewer is in right now. */
312
+ isCurrent?: boolean;
313
+ /** Its email domain; absent for an organization with none. */
314
+ domain?: string | null;
315
+ type?: SettingsOrganizationType;
316
+ }
317
+ /** "shared": offered to new users from the company domain at signup.
318
+ * "private": invite-only. */
319
+ type SettingsOrganizationType = "shared" | "private";
320
+ /** Whether the viewer may create an organization, and on which domains
321
+ * (GET /organization/create-options). */
322
+ interface SettingsOrganizationCreateOptions {
323
+ canCreate: boolean;
324
+ /** The Streamoid team: any domain. */
325
+ anyDomain: boolean;
326
+ /** The viewer's company; null for a public email address, whose
327
+ * organizations have no domain. */
328
+ rootDomain: string | null;
329
+ /** Prefill for the domain field. */
330
+ defaultDomain: string | null;
303
331
  }
304
332
  interface SettingsOrganizationCurrent {
305
333
  id: string;
306
334
  name?: string;
335
+ /** Absent on organizations created before types existed: treat as shared. */
336
+ type?: SettingsOrganizationType;
337
+ /** The company the organization belongs to ("abfrl.com" for an org on
338
+ * ownd.abfrl.com). Members from the same company join as members; anyone
339
+ * else is a guest. Absent for organizations with no domain. */
340
+ rootDomain?: string | null;
307
341
  imageUrl?: string;
308
342
  role?: SettingsOrganizationRole | string;
309
343
  /**
@@ -416,18 +450,32 @@ interface SettingsOrganizationAdapter {
416
450
  managementUrl?: string;
417
451
  current: SettingsOrganizationCurrent | null;
418
452
  list: () => Promise<SettingsOrganizationListItem[]>;
419
- /** @deprecated Organizations are created at sign-in from the email domain,
420
- * or from the company name given in onboarding. Never called. */
453
+ /** Optional: create an organization (POST /organization). The caller
454
+ * becomes its admin, and it comes with a default shared workspace. The
455
+ * backend decides which domains the caller may use. */
421
456
  create?: (input: {
422
457
  name: string;
423
458
  imageFile?: File | null;
459
+ /** Defaults to the caller's own email domain. */
460
+ domain?: string;
461
+ type?: SettingsOrganizationType;
424
462
  }) => Promise<{
425
463
  id: string;
426
464
  } | void>;
465
+ /** Optional: who sees "Create organization" in Organization settings —
466
+ * company admins, public email users and the Streamoid team. Without it, or
467
+ * without `create`, the button never shows. */
468
+ getCreateOptions?: () => Promise<SettingsOrganizationCreateOptions>;
427
469
  update: (id: string, patch: {
428
470
  name?: string;
429
471
  imageFile?: File | null;
430
472
  imageUrl?: string | null;
473
+ /** Shared orgs are offered to new users from the company at signup;
474
+ * private ones are invite-only. Any org admin may change it. */
475
+ type?: SettingsOrganizationType;
476
+ /** Only an admin whose own email is on the org's company may change it,
477
+ * and only to a domain of the same company. */
478
+ domain?: string;
431
479
  }) => Promise<void>;
432
480
  switch: (id: string) => Promise<void>;
433
481
  delete: (id: string) => Promise<void>;
@@ -460,7 +508,8 @@ interface SettingsOrganizationAdapter {
460
508
  }) => Promise<void>;
461
509
  updateMemberRole: (input: {
462
510
  userId: string;
463
- role: "admin" | "member";
511
+ /** Any direction, guest included. */
512
+ role: "admin" | "member" | "guest";
464
513
  /** @deprecated Organization invites no longer exist. */
465
514
  inviteAccess?: boolean;
466
515
  }) => Promise<void>;
@@ -1203,7 +1252,9 @@ interface WorkspaceModalProps {
1203
1252
  mode: "create" | "update";
1204
1253
  workspace?: WorkspaceData | null;
1205
1254
  onClose: () => void;
1206
- onCreate?: (name: string, imageFile: File | null) => void | boolean | Promise<void | boolean>;
1255
+ onCreate?: (name: string, imageFile: File | null, details?: {
1256
+ orgVisibility: "private" | "shared";
1257
+ }) => void | boolean | Promise<void | boolean>;
1207
1258
  onUpdate?: (name: string, imageFile: File | null, imageRemoved: boolean) => void | boolean | Promise<void | boolean>;
1208
1259
  onLeave?: () => void | boolean | Promise<void | boolean>;
1209
1260
  onDelete?: () => void | boolean | Promise<void | boolean>;
@@ -1263,10 +1314,13 @@ declare function memberRoleUpdate(current: {
1263
1314
  }, permissions: UserPermissions, services: ServiceItem[]): ({
1264
1315
  userId: string;
1265
1316
  } & MemberPermissionsPayload) | null;
1266
- declare function TeamsContent({ embedded, onInviteOpen, onInviteOpenChange, workspaceName, workspaceImageUrl, organizationName, hiddenApps, }?: {
1317
+ declare function TeamsContent({ embedded, onInviteOpen, onInviteOpenChange, onCanInviteChange, workspaceName, workspaceImageUrl, organizationName, hiddenApps, }?: {
1267
1318
  embedded?: boolean;
1268
1319
  onInviteOpen?: boolean;
1269
1320
  onInviteOpenChange?: (open: boolean) => void;
1321
+ /** Told whether the viewer may invite here, so a host-drawn Invite button
1322
+ * can follow the same rule as this screen's own. */
1323
+ onCanInviteChange?: (canInvite: boolean) => void;
1270
1324
  /**
1271
1325
  * The workspace these members belong to. Supplied by the settings shell so
1272
1326
  * the page can name its own subject — without it this screen was a list of
@@ -1473,17 +1527,37 @@ interface OrganizationData {
1473
1527
  isCurrent: boolean;
1474
1528
  imageUrl?: string;
1475
1529
  imageName?: string;
1530
+ /** "shared": offered to new users from the company at signup;
1531
+ * "private": invite-only. */
1532
+ type?: "shared" | "private";
1533
+ /** The organization's email domain; null when it has none. */
1534
+ domain?: string | null;
1535
+ }
1536
+ /** Type and domain, passed to onCreate / onUpdate after the name and image. */
1537
+ interface OrganizationDetails {
1538
+ type?: "shared" | "private";
1539
+ /** Only set when it was changed (update) or filled in (create). */
1540
+ domain?: string;
1476
1541
  }
1477
1542
  interface OrganizationModalProps {
1478
1543
  open: boolean;
1479
1544
  mode: "create" | "update";
1480
1545
  organization?: OrganizationData | null;
1546
+ /** Create mode: whether the new organization can have a domain at all
1547
+ * (false for a public email user's org). Defaults to true. */
1548
+ allowDomain?: boolean;
1549
+ /** Create mode: the domain field's prefill. */
1550
+ defaultDomain?: string | null;
1551
+ /** Update mode: trust `organization.role` for the delete button instead of
1552
+ * asking `getHighestRole`, which answers for the *current* organization —
1553
+ * wrong when managing another one from My organizations. */
1554
+ trustRole?: boolean;
1481
1555
  onClose: () => void;
1482
- onCreate?: (name: string, imageFile: File | null) => void | boolean | Promise<void | boolean>;
1483
- onUpdate?: (name: string, imageFile: File | null, imageRemoved: boolean) => void | boolean | Promise<void | boolean>;
1556
+ onCreate?: (name: string, imageFile: File | null, details: OrganizationDetails) => void | boolean | Promise<void | boolean>;
1557
+ onUpdate?: (name: string, imageFile: File | null, imageRemoved: boolean, details: OrganizationDetails) => void | boolean | Promise<void | boolean>;
1484
1558
  onDelete?: () => void | boolean | Promise<void | boolean>;
1485
1559
  }
1486
- declare function OrganizationModal({ open, mode, organization, onClose, onCreate, onUpdate, onDelete, }: OrganizationModalProps): react.JSX.Element | null;
1560
+ declare function OrganizationModal({ open, mode, organization, allowDomain, defaultDomain, trustRole, onClose, onCreate, onUpdate, onDelete, }: OrganizationModalProps): react.JSX.Element | null;
1487
1561
 
1488
1562
  interface WorkspacePickerItem {
1489
1563
  _id: string;
@@ -1492,41 +1566,87 @@ interface WorkspacePickerItem {
1492
1566
  /** Who created it, shown under the name. */
1493
1567
  ownerName?: string;
1494
1568
  }
1569
+ /** One organization's section of a multi-organization picker. */
1570
+ interface WorkspacePickerGroup {
1571
+ organizationId: string;
1572
+ organizationName: string;
1573
+ imageUrl?: string;
1574
+ workspaces: WorkspacePickerItem[];
1575
+ /** The viewer may create workspaces in it (an org admin). */
1576
+ canCreate?: boolean;
1577
+ }
1495
1578
  interface WorkspacePickerProps {
1496
1579
  organizationName?: string;
1497
- workspaces: WorkspacePickerItem[];
1580
+ workspaces?: WorkspacePickerItem[];
1581
+ /** Several organizations at once, one collapsible section each. Takes the
1582
+ * place of `organizationName` / `workspaces`. */
1583
+ groups?: WorkspacePickerGroup[];
1498
1584
  /** While the list is still loading. */
1499
1585
  loading?: boolean;
1500
1586
  /** Join the ticked workspaces as a member. Throw to keep the picker open. */
1501
1587
  onJoin: (workspaceIds: string[]) => Promise<void>;
1502
- /** Create a workspace (the user becomes its admin). Throw to keep it open. */
1503
- onCreate: (name: string) => Promise<void>;
1588
+ /** Create a workspace (the user becomes its admin), shared (org members
1589
+ * can join it) or private (invite-only), in `organizationId` when the
1590
+ * picker lists groups. Throw to keep it open.
1591
+ * Omit it for anyone who may not create workspaces in the organization
1592
+ * (only org admins may); the picker then offers joining only. */
1593
+ onCreate?: (name: string, visibility: "private" | "shared", organizationId?: string) => Promise<void>;
1594
+ }
1595
+ declare function WorkspacePicker({ organizationName, workspaces, groups, loading, onJoin, onCreate, }: WorkspacePickerProps): react.JSX.Element;
1596
+
1597
+ interface OrganizationPickerItem {
1598
+ _id: string;
1599
+ name: string;
1600
+ domain?: string;
1601
+ imageUrl?: string;
1504
1602
  }
1505
- declare function WorkspacePicker({ organizationName, workspaces, loading, onJoin, onCreate, }: WorkspacePickerProps): react.JSX.Element;
1603
+ type OrganizationPickerType = "shared" | "private";
1604
+ interface OrganizationPickerProps {
1605
+ /** The company's shared organizations, exact-domain ones first. */
1606
+ organizations: OrganizationPickerItem[];
1607
+ /** The user's company ("abfrl.com"); absent for a public email domain. */
1608
+ companyDomain?: string | null;
1609
+ /** Signed in with a public email address (gmail.com and the like). */
1610
+ publicDomain?: boolean;
1611
+ /** Prefill for the new organization's name. */
1612
+ suggestedName?: string;
1613
+ loading?: boolean;
1614
+ /** Join the ticked organizations as a member. Throw to keep the picker open. */
1615
+ onJoin: (organizationIds: string[]) => Promise<void>;
1616
+ /** Create an organization (the user becomes its admin). Throw to keep it open. */
1617
+ onCreate: (input: {
1618
+ name: string;
1619
+ type: OrganizationPickerType;
1620
+ }) => Promise<void>;
1621
+ }
1622
+ declare function OrganizationPicker({ organizations, companyDomain, publicDomain, suggestedName, loading, onJoin, onCreate, }: OrganizationPickerProps): react.JSX.Element;
1506
1623
 
1624
+ type OrganizationMemberRole = "admin" | "member" | "guest";
1507
1625
  interface OrganizationMemberModalProps {
1508
1626
  open: boolean;
1509
1627
  /** The target member's email (read-only display). */
1510
1628
  userEmail?: string;
1511
- /** admin/member only — the toggle below cannot express any other role, so
1512
- * pass `lockRole` for a target whose role is outside that pair. */
1513
- initialRole?: "admin" | "member";
1629
+ initialRole?: OrganizationMemberRole;
1514
1630
  /**
1515
- * Show the target's role read-only and disable Save, leaving Remove as the
1516
- * only action. For an organization guest: the toggle offers Admin and Member
1517
- * and nothing else, and a guest can't be made either.
1631
+ * The target's email is not on the organization's company domain. Making
1632
+ * them an org admin then asks for confirmation first.
1518
1633
  */
1634
+ outsideDomain?: boolean;
1635
+ /** The organization's company domain, named in that confirmation. */
1636
+ organizationDomain?: string | null;
1637
+ /** Show the target's role read-only and disable Save, leaving Remove as the
1638
+ * only action. */
1519
1639
  lockRole?: boolean;
1520
1640
  /** Label for the read-only role shown when `lockRole` is set. */
1521
1641
  lockedRoleLabel?: string;
1522
1642
  canRemove?: boolean;
1523
1643
  onClose: () => void;
1524
1644
  onUpdate?: (input: {
1525
- role: "admin" | "member";
1645
+ role: OrganizationMemberRole;
1526
1646
  }) => void;
1527
1647
  onRemove?: () => void;
1528
1648
  }
1529
- declare function OrganizationMemberModal({ open, userEmail, initialRole, lockRole, lockedRoleLabel, canRemove, onClose, onUpdate, onRemove, }: OrganizationMemberModalProps): react.JSX.Element | null;
1649
+ declare function OrganizationMemberModal({ open, userEmail, initialRole, outsideDomain, organizationDomain, lockRole, lockedRoleLabel, canRemove, onClose, onUpdate, onRemove, }: OrganizationMemberModalProps): react.JSX.Element | null;
1530
1650
 
1531
1651
  interface ConfirmLeaveModalProps {
1532
1652
  open: boolean;
@@ -1563,8 +1683,8 @@ interface StoreOption {
1563
1683
  }
1564
1684
  /**
1565
1685
  * Standing in the workspace's parent organization, as distinct from `role`,
1566
- * which is the role inside the workspace itself. A colleague can hold either
1567
- * workspace role; a guest can only ever be a workspace member.
1686
+ * which is the role inside the workspace itself. Either can hold either
1687
+ * workspace role.
1568
1688
  */
1569
1689
  type OrganizationStanding = "colleague" | "guest";
1570
1690
  interface InviteUpdateModalProps {
@@ -1632,15 +1752,20 @@ interface InviteUpdateModalProps {
1632
1752
  /** Defaults to "guest" — the least-privileged of the two. */
1633
1753
  initialOrganizationStanding?: OrganizationStanding;
1634
1754
  /**
1635
- * The email domain of the workspace's organization, when it has one. An
1636
- * invitee outside it joins as a guest (unless invited as a Colleague), and
1637
- * a guest can only be a workspace member — so Admin is locked off for them.
1755
+ * @deprecated No longer read. A guest may be invited as a workspace admin,
1756
+ * so the organization's domain no longer locks Admin off.
1638
1757
  */
1639
1758
  organizationDomain?: string | null;
1759
+ /**
1760
+ * Invite mode: whether the inviter may invite an admin. Only workspace
1761
+ * admins (org admins included) can; a member with invite access invites
1762
+ * members only. Defaults to true.
1763
+ */
1764
+ allowAdminRole?: boolean;
1640
1765
  /** Called only in invite mode; receives (permissions, email, standing) */
1641
1766
  onInvite?: (permissions: UserPermissions, email: string, organizationStanding?: OrganizationStanding) => void;
1642
1767
  }
1643
- 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;
1768
+ declare function InviteUpdateModal({ open, mode, userEmail, stores, hiddenApps, allowSubmitWithoutChanges, initialPermissions, onClose, onSave, onRemove, canRemove, showOrganizationStanding, organizationName, allowGuestStanding, initialOrganizationStanding, organizationDomain: _organizationDomain, allowAdminRole, onInvite, }: InviteUpdateModalProps): react.JSX.Element | null;
1644
1769
 
1645
1770
  interface ExportDateModalProps {
1646
1771
  title: string;
@@ -1779,4 +1904,4 @@ declare function SettingsAdaptersProvider({ adapters, children, }: {
1779
1904
  */
1780
1905
  declare function useSettingsAdapters(): SettingsAdapters;
1781
1906
 
1782
- export { APP_KEYS, type ApiToken, type AppKey, type AvailableCreditsResponse, BillingContent, type BillingEventPayload, type BillingProduct, type BillingSubscription, BuyCreditsModal, type BuyCreditsPayload, type BuyCreditsResponse, ConfirmDeleteModal, ConfirmLeaveModal, type ConnectedApp, ConnectedAppsContent, type CreatedToken, type CreditCycleUnit, type CreditLimitValidation, type CustomCreditInfo, type CustomCreditResponse, DEFAULT_PERMISSIONS, DEFAULT_USER_LANGUAGE, ExportDateModal, InviteUpdateModal, type InvoicePdfResponse, type MemberCreditLimit, MemberCreditLimitModal, type MemberCreditLimitRow, type MemberCreditLimitSource, type MemberCreditLimitsResponse, MemberListFrame, type MemberListFrameProps, type MemberListTab, MemberListToolbar, type MemberListToolbarProps, type MemberPermissionsPayload, OrganizationContent, type OrganizationData, OrganizationIntegrationsContent, type OrganizationInvite, type OrganizationJoinRequest, type OrganizationJoinableWorkspace, type OrganizationMember, OrganizationMemberModal, type OrganizationMemberModalProps, OrganizationModal, type OrganizationView, type OrganizationWorkspaceItem, PerUserLimitsView, 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 SettingsIntegrationsAdapter, 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, type WorkspaceListOrganization, WorkspaceListTab, type WorkspaceMember, WorkspaceModal, type WorkspaceOrganization, type WorkspaceOrganizationRequest, WorkspacePicker, type WorkspacePickerItem, type WorkspacePickerProps, WorkspaceTab, type WorkspaceUsageResponse, belowUsageReason, cleanCreditLimitInput, countLabel, creditCycleUnit, describeDefaultLimit, describeMemberLimit, formatCreditLimit, formatCredits, groupWorkspaceList, isLimitBelowUsage, joinMembersWithLimits, lastUsedLabel, limitBelowUsageUsed, limitSourceLabel, loadWorkspaceOrganization, memberRoleUpdate, minimumCreditLimit, resolveSettingsTabFromPath, roundCredits, useSettingsAdapters, useWorkspaceOrganization, userLanguageLabel, validateCreditLimitInput, validateDefaultCreditLimitInput };
1907
+ export { APP_KEYS, type ApiToken, type AppKey, type AvailableCreditsResponse, BillingContent, type BillingEventPayload, type BillingProduct, type BillingSubscription, BuyCreditsModal, type BuyCreditsPayload, type BuyCreditsResponse, ConfirmDeleteModal, ConfirmLeaveModal, type ConnectedApp, ConnectedAppsContent, type CreatedToken, type CreditCycleUnit, type CreditLimitValidation, type CustomCreditInfo, type CustomCreditResponse, DEFAULT_PERMISSIONS, DEFAULT_USER_LANGUAGE, ExportDateModal, InviteUpdateModal, type InvoicePdfResponse, type MemberCreditLimit, MemberCreditLimitModal, type MemberCreditLimitRow, type MemberCreditLimitSource, type MemberCreditLimitsResponse, MemberListFrame, type MemberListFrameProps, type MemberListTab, MemberListToolbar, type MemberListToolbarProps, type MemberPermissionsPayload, OrganizationContent, type OrganizationData, type OrganizationDetails, OrganizationIntegrationsContent, type OrganizationInvite, type OrganizationJoinRequest, type OrganizationJoinableWorkspace, type OrganizationMember, OrganizationMemberModal, type OrganizationMemberModalProps, type OrganizationMemberRole, OrganizationModal, OrganizationPicker, type OrganizationPickerItem, type OrganizationPickerProps, type OrganizationPickerType, type OrganizationView, type OrganizationWorkspaceItem, PerUserLimitsView, 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 SettingsIntegrationsAdapter, type SettingsNavigationAdapter, type SettingsOrganizationAdapter, type SettingsOrganizationCreateOptions, type SettingsOrganizationCurrent, type SettingsOrganizationListItem, type SettingsOrganizationType, 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, type WorkspaceListOrganization, WorkspaceListTab, type WorkspaceMember, WorkspaceModal, type WorkspaceOrganization, type WorkspaceOrganizationRequest, WorkspacePicker, type WorkspacePickerGroup, type WorkspacePickerItem, type WorkspacePickerProps, WorkspaceTab, type WorkspaceUsageResponse, belowUsageReason, cleanCreditLimitInput, countLabel, creditCycleUnit, describeDefaultLimit, describeMemberLimit, formatCreditLimit, formatCredits, groupWorkspaceList, isLimitBelowUsage, joinMembersWithLimits, lastUsedLabel, limitBelowUsageUsed, limitSourceLabel, loadWorkspaceOrganization, memberRoleUpdate, minimumCreditLimit, resolveSettingsTabFromPath, roundCredits, useSettingsAdapters, useWorkspaceOrganization, userLanguageLabel, validateCreditLimitInput, validateDefaultCreditLimitInput };