@arbidocs/blocks 0.5.23 → 0.5.25

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.
Files changed (154) hide show
  1. package/dist/{ConnectedNativeDocxComparison-GMQHSY3Z.js → ConnectedNativeDocxComparison-MZX222GC.js} +6 -6
  2. package/dist/{ConnectedNativeDocxComparison-GMQHSY3Z.js.map → ConnectedNativeDocxComparison-MZX222GC.js.map} +1 -1
  3. package/dist/{ConnectedNativeDocxComparison-HH3PHNXU.cjs → ConnectedNativeDocxComparison-WRO3J6VV.cjs} +7 -7
  4. package/dist/{ConnectedNativeDocxComparison-HH3PHNXU.cjs.map → ConnectedNativeDocxComparison-WRO3J6VV.cjs.map} +1 -1
  5. package/dist/{ConnectedNativeDocxEditor-4IAKVBEF.js → ConnectedNativeDocxEditor-OJ6SYZ3W.js} +5 -5
  6. package/dist/{ConnectedNativeDocxEditor-4IAKVBEF.js.map → ConnectedNativeDocxEditor-OJ6SYZ3W.js.map} +1 -1
  7. package/dist/{ConnectedNativeDocxEditor-JNHNZG3P.cjs → ConnectedNativeDocxEditor-XTUJWL25.cjs} +7 -7
  8. package/dist/{ConnectedNativeDocxEditor-JNHNZG3P.cjs.map → ConnectedNativeDocxEditor-XTUJWL25.cjs.map} +1 -1
  9. package/dist/{ConnectedStreamedWordArtifact-CZZOH667.cjs → ConnectedStreamedWordArtifact-5JURNV4L.cjs} +7 -7
  10. package/dist/ConnectedStreamedWordArtifact-5JURNV4L.cjs.map +1 -0
  11. package/dist/{ConnectedStreamedWordArtifact-GLJCJPTP.js → ConnectedStreamedWordArtifact-KURJRZH3.js} +6 -6
  12. package/dist/{ConnectedStreamedWordArtifact-GLJCJPTP.js.map → ConnectedStreamedWordArtifact-KURJRZH3.js.map} +1 -1
  13. package/dist/{WorkspaceTableView-ECPHGWHF.js → WorkspaceTableView-2XI6FIOO.js} +7 -7
  14. package/dist/WorkspaceTableView-2XI6FIOO.js.map +1 -0
  15. package/dist/{WorkspaceTableView-6JVHGDUB.cjs → WorkspaceTableView-KG4D53SK.cjs} +13 -13
  16. package/dist/WorkspaceTableView-KG4D53SK.cjs.map +1 -0
  17. package/dist/agents/index.cjs +326 -326
  18. package/dist/agents/index.js +4 -4
  19. package/dist/{chunk-X4Y7ZHFB.js → chunk-2GDKBLD5.js} +11 -6
  20. package/dist/chunk-2GDKBLD5.js.map +1 -0
  21. package/dist/{chunk-DXO2RXVQ.cjs → chunk-3FQHFFV5.cjs} +4 -4
  22. package/dist/{chunk-DXO2RXVQ.cjs.map → chunk-3FQHFFV5.cjs.map} +1 -1
  23. package/dist/{chunk-AAVFCPKD.js → chunk-3OATYBZK.js} +4 -4
  24. package/dist/{chunk-AAVFCPKD.js.map → chunk-3OATYBZK.js.map} +1 -1
  25. package/dist/{chunk-AF24CV6J.js → chunk-4I2V55LL.js} +3 -3
  26. package/dist/{chunk-AF24CV6J.js.map → chunk-4I2V55LL.js.map} +1 -1
  27. package/dist/{chunk-VNHLFS6T.cjs → chunk-4KLBM5K5.cjs} +4 -4
  28. package/dist/{chunk-VNHLFS6T.cjs.map → chunk-4KLBM5K5.cjs.map} +1 -1
  29. package/dist/{chunk-7DDMF3DZ.cjs → chunk-53T2FY4Z.cjs} +5 -31
  30. package/dist/chunk-53T2FY4Z.cjs.map +1 -0
  31. package/dist/{chunk-BTF4AZMG.js → chunk-57CG33XJ.js} +5 -5
  32. package/dist/chunk-57CG33XJ.js.map +1 -0
  33. package/dist/chunk-5ZBXFHZW.js +434 -0
  34. package/dist/chunk-5ZBXFHZW.js.map +1 -0
  35. package/dist/{chunk-KJVDYWAM.cjs → chunk-6UKNYQ7Q.cjs} +13 -8
  36. package/dist/chunk-6UKNYQ7Q.cjs.map +1 -0
  37. package/dist/{chunk-TTJGCJWX.cjs → chunk-6UZ6YTML.cjs} +46 -6
  38. package/dist/chunk-6UZ6YTML.cjs.map +1 -0
  39. package/dist/{chunk-NVRJ6WTR.js → chunk-7RFDYAK7.js} +3 -3
  40. package/dist/{chunk-NVRJ6WTR.js.map → chunk-7RFDYAK7.js.map} +1 -1
  41. package/dist/{chunk-ZYGQFD5Y.js → chunk-BSDZXG55.js} +3 -3
  42. package/dist/{chunk-ZYGQFD5Y.js.map → chunk-BSDZXG55.js.map} +1 -1
  43. package/dist/{chunk-O4EQYPLO.cjs → chunk-C2SZQKX2.cjs} +169 -27
  44. package/dist/chunk-C2SZQKX2.cjs.map +1 -0
  45. package/dist/{chunk-I5RK4WAE.cjs → chunk-FGZQUH2Y.cjs} +3 -3
  46. package/dist/{chunk-I5RK4WAE.cjs.map → chunk-FGZQUH2Y.cjs.map} +1 -1
  47. package/dist/{chunk-7S76Q5RK.js → chunk-GA2A7OX6.js} +3 -3
  48. package/dist/{chunk-7S76Q5RK.js.map → chunk-GA2A7OX6.js.map} +1 -1
  49. package/dist/{chunk-XL55UDLO.js → chunk-IJJKUTKM.js} +5 -30
  50. package/dist/chunk-IJJKUTKM.js.map +1 -0
  51. package/dist/{chunk-BL74GYSA.cjs → chunk-JGCYM3II.cjs} +9 -9
  52. package/dist/{chunk-BL74GYSA.cjs.map → chunk-JGCYM3II.cjs.map} +1 -1
  53. package/dist/{chunk-ZX663X3X.cjs → chunk-KNRAKOCO.cjs} +6 -428
  54. package/dist/chunk-KNRAKOCO.cjs.map +1 -0
  55. package/dist/chunk-KUQOHPKP.cjs +443 -0
  56. package/dist/chunk-KUQOHPKP.cjs.map +1 -0
  57. package/dist/{chunk-JUUOJP7I.cjs → chunk-KWJW5TMH.cjs} +5 -5
  58. package/dist/chunk-KWJW5TMH.cjs.map +1 -0
  59. package/dist/{chunk-FZVAJFRH.cjs → chunk-LAGHW4JM.cjs} +24 -10
  60. package/dist/chunk-LAGHW4JM.cjs.map +1 -0
  61. package/dist/{chunk-6XW3CMU4.js → chunk-N3KNAQ55.js} +144 -4
  62. package/dist/chunk-N3KNAQ55.js.map +1 -0
  63. package/dist/{chunk-C6P2QW36.js → chunk-NZIVQ4Q4.js} +4 -4
  64. package/dist/{chunk-C6P2QW36.js.map → chunk-NZIVQ4Q4.js.map} +1 -1
  65. package/dist/{chunk-44FPFTU2.js → chunk-ORUV4MEP.js} +3 -3
  66. package/dist/{chunk-44FPFTU2.js.map → chunk-ORUV4MEP.js.map} +1 -1
  67. package/dist/{chunk-75Z5AUMM.js → chunk-QB6JCNVG.js} +3 -3
  68. package/dist/{chunk-75Z5AUMM.js.map → chunk-QB6JCNVG.js.map} +1 -1
  69. package/dist/{chunk-S4G3DNMA.cjs → chunk-QZTA2M4U.cjs} +9 -9
  70. package/dist/{chunk-S4G3DNMA.cjs.map → chunk-QZTA2M4U.cjs.map} +1 -1
  71. package/dist/{chunk-F2BYURQZ.cjs → chunk-T67EFI43.cjs} +5 -5
  72. package/dist/{chunk-F2BYURQZ.cjs.map → chunk-T67EFI43.cjs.map} +1 -1
  73. package/dist/{chunk-RVKVGS72.js → chunk-TDFL676I.js} +25 -11
  74. package/dist/chunk-TDFL676I.js.map +1 -0
  75. package/dist/{chunk-YD3RN2FY.cjs → chunk-U72QI2W3.cjs} +3 -3
  76. package/dist/{chunk-YD3RN2FY.cjs.map → chunk-U72QI2W3.cjs.map} +1 -1
  77. package/dist/{chunk-75UVQKQ5.cjs → chunk-WTGJHS7F.cjs} +48 -48
  78. package/dist/{chunk-75UVQKQ5.cjs.map → chunk-WTGJHS7F.cjs.map} +1 -1
  79. package/dist/{chunk-SLRVI2YU.js → chunk-X6U6L6BG.js} +29 -4
  80. package/dist/chunk-X6U6L6BG.js.map +1 -0
  81. package/dist/{chunk-SQ5F5BFW.cjs → chunk-XDU3HHUU.cjs} +32 -6
  82. package/dist/chunk-XDU3HHUU.cjs.map +1 -0
  83. package/dist/{chunk-SKVVOEMX.js → chunk-XXUPUXBF.js} +8 -423
  84. package/dist/chunk-XXUPUXBF.js.map +1 -0
  85. package/dist/{chunk-PZRTRYPD.js → chunk-ZKAIT3M2.js} +46 -7
  86. package/dist/chunk-ZKAIT3M2.js.map +1 -0
  87. package/dist/connect/docx.cjs +9 -9
  88. package/dist/connect/docx.js +5 -5
  89. package/dist/connect/index.cjs +1393 -891
  90. package/dist/connect/index.cjs.map +1 -1
  91. package/dist/connect/index.js +739 -242
  92. package/dist/connect/index.js.map +1 -1
  93. package/dist/connect/viewer.cjs +4 -4
  94. package/dist/connect/viewer.js +4 -4
  95. package/dist/connection/auth/CompactLogin.d.ts +26 -0
  96. package/dist/connection/auth/ConnectedLoginPage.d.ts +9 -1
  97. package/dist/connection/auth/index.d.ts +3 -1
  98. package/dist/connection/auth/sso-popup.d.ts +13 -0
  99. package/dist/connection/auth/sso-sign-in.d.ts +38 -0
  100. package/dist/connection/auth/useLoginActions.d.ts +4 -2
  101. package/dist/connection/projects/ConnectedProjectsPanel.d.ts +9 -1
  102. package/dist/connection/projects/ProjectsListPage.d.ts +41 -0
  103. package/dist/connection/projects/index.d.ts +1 -0
  104. package/dist/connection/settings-page/appearanceSection.d.ts +30 -0
  105. package/dist/connection/settings-page/index.d.ts +1 -0
  106. package/dist/facts/index.cjs +55 -55
  107. package/dist/facts/index.js +3 -3
  108. package/dist/index.cjs +498 -526
  109. package/dist/index.cjs.map +1 -1
  110. package/dist/index.d.ts +2 -0
  111. package/dist/index.js +15 -54
  112. package/dist/index.js.map +1 -1
  113. package/dist/settings/AppearanceSettings.d.ts +1 -2
  114. package/dist/settings/index.cjs +162 -162
  115. package/dist/settings/index.d.ts +2 -1
  116. package/dist/settings/index.js +2 -2
  117. package/dist/site/index.cjs +82 -74
  118. package/dist/site/index.d.ts +2 -0
  119. package/dist/site/index.js +3 -3
  120. package/dist/studio/index.cjs +73 -73
  121. package/dist/studio/index.js +5 -5
  122. package/dist/theme/appearance.d.ts +47 -0
  123. package/dist/theme/fromCss.d.ts +33 -0
  124. package/dist/workflow-canvas/index.cjs +20 -18
  125. package/dist/workflow-canvas/index.cjs.map +1 -1
  126. package/dist/workflow-canvas/index.js +8 -6
  127. package/dist/workflow-canvas/index.js.map +1 -1
  128. package/dist/workspaces/index.cjs +43 -43
  129. package/dist/workspaces/index.js +3 -3
  130. package/node_modules/@arbidocs/coedit/package.json +1 -1
  131. package/package.json +5 -5
  132. package/dist/ConnectedStreamedWordArtifact-CZZOH667.cjs.map +0 -1
  133. package/dist/WorkspaceTableView-6JVHGDUB.cjs.map +0 -1
  134. package/dist/WorkspaceTableView-ECPHGWHF.js.map +0 -1
  135. package/dist/chunk-6XW3CMU4.js.map +0 -1
  136. package/dist/chunk-7DDMF3DZ.cjs.map +0 -1
  137. package/dist/chunk-AMTWY22T.js +0 -11
  138. package/dist/chunk-AMTWY22T.js.map +0 -1
  139. package/dist/chunk-BTF4AZMG.js.map +0 -1
  140. package/dist/chunk-FZVAJFRH.cjs.map +0 -1
  141. package/dist/chunk-JUUOJP7I.cjs.map +0 -1
  142. package/dist/chunk-KJVDYWAM.cjs.map +0 -1
  143. package/dist/chunk-O4EQYPLO.cjs.map +0 -1
  144. package/dist/chunk-PZRTRYPD.js.map +0 -1
  145. package/dist/chunk-RVKVGS72.js.map +0 -1
  146. package/dist/chunk-SKVVOEMX.js.map +0 -1
  147. package/dist/chunk-SLRVI2YU.js.map +0 -1
  148. package/dist/chunk-SQ5F5BFW.cjs.map +0 -1
  149. package/dist/chunk-TTJGCJWX.cjs.map +0 -1
  150. package/dist/chunk-X4Y7ZHFB.js.map +0 -1
  151. package/dist/chunk-XL55UDLO.js.map +0 -1
  152. package/dist/chunk-ZU2B2RZK.cjs +0 -13
  153. package/dist/chunk-ZU2B2RZK.cjs.map +0 -1
  154. package/dist/chunk-ZX663X3X.cjs.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/workspaces/workspace-type.ts","../src/workspaces/workspace-groups.ts"],"names":[],"mappings":"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","file":"chunk-JUUOJP7I.cjs","sourcesContent":["/**\n * Workspace Type Utilities\n *\n * Helper functions for determining workspace type information.\n */\n\nexport type WorkspaceVariant = 'primary' | 'secondary' | 'gray'\n\n/**\n * Count non-agent users in a workspace.\n * Workspace users with agent_ext_id are agents and should not count\n * for determining workspace type (individual vs group).\n */\nexport function getHumanUserCount(users?: { agent_ext_id?: string | null }[]): number {\n if (!users) return 0\n return users.filter((u) => !u.agent_ext_id).length\n}\n\n/**\n * Helper to determine workspace type and variant\n */\nexport function getWorkspaceTypeInfo(\n isPublic: boolean,\n userCount: number\n): { type: string; variant: WorkspaceVariant } {\n if (isPublic) {\n return { type: 'Common', variant: 'gray' }\n }\n if (userCount > 1) {\n return { type: 'Group', variant: 'secondary' }\n }\n return { type: 'Individual', variant: 'primary' }\n}\n\n/**\n * Returns the Tailwind background color class for a workspace type variant\n */\nexport function getVariantBgClass(variant: WorkspaceVariant): string {\n switch (variant) {\n case 'primary':\n return 'bg-primary'\n case 'secondary':\n return 'bg-secondary'\n case 'gray':\n return 'bg-gray-600'\n }\n}\n\n/**\n * Returns the Tailwind border color class for a workspace type variant\n */\nexport function getVariantBorderClass(variant: WorkspaceVariant): string {\n switch (variant) {\n case 'primary':\n return 'border-primary'\n case 'secondary':\n return 'border-secondary'\n case 'gray':\n return 'border-gray-600'\n }\n}\n","/**\n * The user's workspaces grouped by project, as the workspace list shows them (cards and table\n * alike): one group per project, the user's own projects first (an owned project with no\n * workspace yet still gets its group, to invite the first one), other people's projects by name,\n * and the workspaces with no visible project last. Plus the tri-state filter over the list\n * (projects and workspace categories) and the totals a group's heading shows.\n *\n * Pure: a host maps nothing; these read the API's workspace and project records as they come.\n */\nimport type { components } from '@arbidocs/client'\nimport { getHumanUserCount, getWorkspaceTypeInfo } from './workspace-type'\n\nexport type GroupedWorkspace = components['schemas']['WorkspaceResponse']\ntype Project = Pick<\n components['schemas']['ProjectResponse'],\n 'external_id' | 'name' | 'subscription' | 'created_by'\n>\n\n/** Group key of the workspaces that have no visible project. */\nexport const NO_PROJECT_GROUP_KEY = '__none__'\n\nexport interface WorkspaceProjectGroup {\n /** Stable key (the project's id, or `NO_PROJECT_GROUP_KEY`): collapse state and row ids. */\n key: string\n projectExtId: string | null\n /** The project's name with the fallbacks applied (\"Personal\", \"Common\", \"Workspaces\"…). */\n title: string\n /** The user owns the project. */\n isOwned: boolean\n /**\n * The no-project group of public workspaces the user is not a member of (\"Common\"): shared\n * with everyone, so it starts collapsed.\n */\n isCommon: boolean\n /** Pinned first, then by name. */\n workspaces: GroupedWorkspace[]\n}\n\nexport interface GroupWorkspacesOptions {\n /** The signed-in user (`usr-…`): whose projects and workspaces are \"own\". */\n selfId: string | undefined\n /** Pinned workspace ids: first within their group. */\n pinned?: ReadonlySet<string>\n /** The user's projects: fresher names, and a group for each owned project with no workspace. */\n projects?: readonly Project[]\n /** The plural word for workspaces (the own no-project group's title). */\n workspacesLabel?: string\n}\n\n/** The skills marketplace is a system workspace: reached through the skills UI, never listed. */\nexport const isListedWorkspace = (workspace: Pick<GroupedWorkspace, 'workspace_type'>): boolean =>\n workspace.workspace_type !== 'skills'\n\nconst byPinThenName =\n (pinned: ReadonlySet<string>) => (a: GroupedWorkspace, b: GroupedWorkspace) => {\n const aPinned = pinned.has(a.external_id)\n const bPinned = pinned.has(b.external_id)\n if (aPinned !== bPinned) return aPinned ? -1 : 1\n return a.name.localeCompare(b.name)\n }\n\n/**\n * Group `workspaces` (already filtered) by project. The order: own projects (by name, then the\n * own projects with no workspace), other people's projects by name, the no-project group last.\n */\nexport function groupWorkspacesByProject(\n workspaces: readonly GroupedWorkspace[],\n {\n selfId,\n pinned = new Set(),\n projects = [],\n workspacesLabel = 'Workspaces',\n }: GroupWorkspacesOptions\n): WorkspaceProjectGroup[] {\n const byProject = new Map<string | null, GroupedWorkspace[]>()\n for (const workspace of workspaces) {\n const key = workspace.project_ext_id ?? null\n const list = byProject.get(key)\n if (list) list.push(workspace)\n else byProject.set(key, [workspace])\n }\n\n const projectById = new Map(projects.map((p) => [p.external_id, p]))\n const groups: WorkspaceProjectGroup[] = []\n for (const [projectExtId, list] of byProject) {\n const first = list[0]\n const isOwned = !!projectExtId && first.project_owner_ext_id === selfId\n const isCommon = !projectExtId && !list.some((w) => w.is_member)\n const name = projectExtId\n ? projectById.get(projectExtId)?.name || first.project_name || null\n : null\n groups.push({\n key: projectExtId ?? NO_PROJECT_GROUP_KEY,\n projectExtId,\n title: projectExtId\n ? name || (isOwned ? 'Personal' : 'Unnamed project')\n : isCommon\n ? 'Common'\n : workspacesLabel,\n isOwned,\n isCommon,\n workspaces: [...list].sort(byPinThenName(pinned)),\n })\n }\n\n groups.sort((a, b) => {\n if (!a.projectExtId !== !b.projectExtId) return a.projectExtId ? -1 : 1\n if (a.isOwned !== b.isOwned) return a.isOwned ? -1 : 1\n return a.title.localeCompare(b.title)\n })\n\n // An own project with no workspace yet keeps its group (after the own projects with some).\n const empty = projects\n .filter((p) => p.created_by === selfId && !byProject.has(p.external_id))\n .map<WorkspaceProjectGroup>((p) => ({\n key: p.external_id,\n projectExtId: p.external_id,\n title: p.name || 'Personal',\n isOwned: true,\n isCommon: false,\n workspaces: [],\n }))\n const ownedCount = groups.filter((g) => g.isOwned).length\n groups.splice(ownedCount, 0, ...empty)\n return groups\n}\n\n/** Most recently updated first (the cards' order within a group). */\nexport function byRecentUpdate(a: GroupedWorkspace, b: GroupedWorkspace): number {\n const time = (w: GroupedWorkspace) => {\n const t = Date.parse(w.updated_at ?? '')\n return Number.isNaN(t) ? 0 : t\n }\n return time(b) - time(a)\n}\n\n/** What a group's heading reports about its workspaces: sums, and distinct people (no agents). */\nexport interface WorkspaceGroupStats {\n workspaces: number\n documents: number\n conversations: number\n members: number\n /** The most recent activity (ISO), `''` when none. */\n updatedAt: string\n}\n\nexport const workspaceDocumentCount = (w: GroupedWorkspace): number =>\n (w.shared_document_count ?? 0) + (w.private_document_count ?? 0)\n\nexport const workspaceConversationCount = (w: GroupedWorkspace): number =>\n (w.shared_conversation_count ?? 0) + (w.private_conversation_count ?? 0)\n\n/** An agent account (`agt-…`): kept out of member counts and faces. */\nexport const isAgentAccount = (user: { external_id: string }): boolean =>\n user.external_id.startsWith('agt-')\n\nexport function workspaceGroupStats(workspaces: readonly GroupedWorkspace[]): WorkspaceGroupStats {\n let documents = 0\n let conversations = 0\n let updatedAt = ''\n const members = new Set<string>()\n for (const workspace of workspaces) {\n documents += workspaceDocumentCount(workspace)\n conversations += workspaceConversationCount(workspace)\n const at = workspace.updated_at || workspace.created_at || ''\n if (at > updatedAt) updatedAt = at\n for (const member of workspace.users ?? []) {\n if (isAgentAccount(member.user)) continue\n members.add(member.user.external_id || member.user.email)\n }\n }\n return {\n workspaces: workspaces.length,\n documents,\n conversations,\n members: members.size,\n updatedAt,\n }\n}\n\n// ── Filtering ────────────────────────────────────────────────────────────────\n\n/** The category filters, in menu order. */\nexport const WORKSPACE_CATEGORY_FILTERS = [\n { id: 'owned', label: 'Owned by me' },\n { id: 'pinned', label: 'Pinned' },\n { id: 'individual', label: 'Individual' },\n { id: 'group', label: 'Group' },\n { id: 'common', label: 'Common' },\n] as const\n\n/** A project filter's id. */\nexport const projectFilterId = (projectExtId: string): string => `project:${projectExtId}`\n\n/** Which filters a workspace matches: its category, pinned, owned, and its project. */\nexport function workspaceFilterAttributes(\n workspace: GroupedWorkspace,\n { selfId, pinned }: { selfId: string | undefined; pinned: ReadonlySet<string> }\n): Record<string, boolean> {\n const { type } = getWorkspaceTypeInfo(workspace.is_public, getHumanUserCount(workspace.users))\n const attributes: Record<string, boolean> = {\n individual: type === 'Individual',\n group: type === 'Group',\n common: type === 'Common',\n pinned: pinned.has(workspace.external_id),\n owned: workspace.created_by_ext_id === selfId,\n }\n if (workspace.project_ext_id) attributes[projectFilterId(workspace.project_ext_id)] = true\n return attributes\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/workspaces/WorkspaceSettingsParts.tsx","../src/workspaces/CommonWorkspaceToggle.tsx","../src/workspaces/workspace-roles.ts","../src/workspaces/WorkspaceFormParts.tsx","../src/workspaces/WorkspaceCard.tsx","../src/workspaces/WorkspaceGroup.tsx","../src/workspaces/WorkspaceTypeBadge.tsx"],"names":["jsx","jsxs","Popover","PopoverTrigger","PopoverContent","Button","UserPlus","cn","LogOut","IconToggle","Globe","AlertCircle","Dialog","DialogContent","ModalHeader","Fragment","DialogTitle","DialogDescription","Select","SelectTrigger","SelectValue","SelectContent","SelectItem","SelectSeparator","Plus","ArrowUpRight","useId","useState","KeyValueRow","FileText","Input","AlignLeft","CreditCard","createContext","useMemo","ActionLink","useContext","Check","ChevronRight","MessagesSquare","Users","MemberAvatarStack","fmtDate","formatRelativeTime","CollapsibleSection","getHumanUserCount","getWorkspaceTypeInfo","User","WorkspaceTypeBadgeView","getVariantBgClass"],"mappings":";;;;;;;;;;;;;;AASO,SAAS,kBAAA,CAAmB,EAAE,MAAA,EAAQ,QAAA,EAAS,EAA6C;AACjG,EAAA,uBACEA,cAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAU,iCAAA;AAAA,MACV,WAAA,EAAU,gBAAA;AAAA,MACV,aAAA,EAAa,MAAA;AAAA,MAGb,QAAA,kBAAAA,cAAA,CAAC,SAAI,SAAA,EAAU,2EAAA,EACb,yCAAC,KAAA,EAAA,EAAI,SAAA,EAAU,kCAAA,EAAoC,QAAA,EAAS,CAAA,EAC9D;AAAA;AAAA,GACF;AAEJ;AAGO,SAAS,sBAAA,CAAuB,EAAE,QAAA,EAAS,EAA4B;AAC5E,EAAA,uBACEA,cAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,0BAAA;AAAA,MACV,SAAA,EAAU,mEAAA;AAAA,MAET;AAAA;AAAA,GACH;AAEJ;AAUO,SAAS,oBAAA,CAAqB,EAAE,MAAA,EAAQ,OAAA,EAAS,UAAS,EAA8B;AAC7F,EAAA,uBACEA,cAAA,CAAC,SAAI,SAAA,EAAU,iCAAA,EACb,0CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,wCAAA,EAAyC,aAAA,EAAa,MAAA,EACnE,QAAA,EAAA;AAAA,oBAAAA,cAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,SAAA,EAAW,QAAA,EAAA,OAAA,EAAQ,CAAA;AAAA,IAClC;AAAA,GAAA,EACH,CAAA,EACF,CAAA;AAEJ;AAGO,SAAS,UAAA,CAAW,EAAE,QAAA,EAAS,EAA4B;AAChE,EAAA,uBAAOA,cAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,sCAAA,EAAwC,QAAA,EAAS,CAAA;AAC1E;AAoBO,SAAS,qBAAA,CAAsB,EAAE,UAAA,EAAY,OAAA,EAAS,OAAM,EAA+B;AAChG,EAAA,uBACEC,eAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,6CAAA,EAA8C,aAAU,oBAAA,EACtE,QAAA,EAAA;AAAA,oBAAAA,eAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,yBAAA,EAA0B,aAAA,EAAa,WAAW,MAAA,EAChE,QAAA,EAAA;AAAA,sBAAAD,cAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,SAAA,EAAW,QAAA,EAAA,UAAA,CAAW,OAAA,EAAQ,CAAA;AAAA,MAC7C,UAAA,CAAW,MAAA;AAAA,sCAEXE,UAAA,EAAA,EACC,QAAA,EAAA;AAAA,wBAAAF,cAAA,CAACG,iBAAA,EAAA,EAAe,SAAA,EAAU,gNAAA,EACvB,QAAA,EAAA,UAAA,CAAW,SAAA,EACd,CAAA;AAAA,uCACCC,iBAAA,EAAA,EAAe,KAAA,EAAM,SAAQ,SAAA,EAAU,cAAA,EACrC,qBAAW,SAAA,EACd;AAAA,OAAA,EACF;AAAA,KAAA,EACF,CAAA;AAAA,oBAEAH,eAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,yBAAA,EACb,QAAA,EAAA;AAAA,MAAA,OAAA;AAAA,MACA,KAAA,oBACCA,eAAA;AAAA,QAACI,SAAA;AAAA,QAAA;AAAA,UACC,OAAA,EAAQ,SAAA;AAAA,UACR,IAAA,EAAK,IAAA;AAAA,UACL,SAAA,EAAU,8CAAA;AAAA,UACV,SAAS,KAAA,CAAM,OAAA;AAAA,UACf,eAAa,KAAA,CAAM,MAAA;AAAA,UAEnB,QAAA,EAAA;AAAA,4BAAAL,cAAA,CAACM,oBAAA,EAAA,EAAS,WAAU,QAAA,EAAS,CAAA;AAAA,YAC5B,KAAA,CAAM;AAAA;AAAA;AAAA;AACT,KAAA,EAEJ;AAAA,GAAA,EACF,CAAA;AAEJ;AAMO,SAAS,iBAAA,CAAkB;AAAA,EAChC,QAAA;AAAA,EACA,MAAA;AAAA,EACA;AACF,CAAA,EAIG;AACD,EAAA,uBACEN,cAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAWO,KAAA;AAAA,QACT,+DAAA;AAAA,QACA,WAAW,iBAAA,GAAoB;AAAA,OACjC;AAAA,MACA,WAAA,EAAU,oBAAA;AAAA,MACV,eAAA,EAAe,QAAA;AAAA,MACf,aAAA,EAAa,MAAA;AAAA,MAEb,QAAA,kBAAAP,cAAA,CAAC,SAAI,SAAA,EAAU,iBAAA,EACb,yCAAC,KAAA,EAAA,EAAI,SAAA,EAAU,kCAAA,EAAoC,QAAA,EAAS,CAAA,EAC9D;AAAA;AAAA,GACF;AAEJ;AAGO,SAAS,WAAA,CAAY,EAAE,QAAA,EAAS,EAA4B;AACjE,EAAA,uBAAOA,cAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,uCAAA,EAAyC,QAAA,EAAS,CAAA;AAC1E;AAQO,SAAS,WAAA,CAAY,EAAE,MAAA,EAAQ,KAAA,EAAM,EAAqB;AAC/D,EAAA,sCACG,KAAA,EAAA,EAAI,SAAA,EAAU,oBAAmB,WAAA,EAAU,cAAA,EAAe,eAAa,MAAA,EACtE,QAAA,kBAAAC,eAAA;AAAA,IAACI,SAAA;AAAA,IAAA;AAAA,MACC,OAAA,EAAQ,OAAA;AAAA,MACR,IAAA,EAAK,IAAA;AAAA,MACL,SAAS,KAAA,CAAM,OAAA;AAAA,MACf,UAAU,KAAA,CAAM,QAAA;AAAA,MAChB,SAAA,EAAU,sGAAA;AAAA,MACV,eAAa,KAAA,CAAM,MAAA;AAAA,MAEnB,QAAA,EAAA;AAAA,wBAAAL,cAAA,CAACQ,kBAAA,EAAA,EAAO,WAAU,eAAA,EAAgB,CAAA;AAAA,QACjC,KAAA,CAAM;AAAA;AAAA;AAAA,GACT,EACF,CAAA;AAEJ;ACxJA,IAAM,MAAA,GAAS;AAAA,EACb,IAAA,EAAM,uBAAA;AAAA,EACN,EAAA,EAAI;AACN,CAAA;AAEO,SAAS,qBAAA,CAAsB;AAAA,EACpC,QAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA,GAAW,KAAA;AAAA,EACX,eAAA;AAAA,EACA,aAAA,EAAe;AACjB,CAAA,EAA+B;AAC7B,EAAA,uBACER,cAAAA;AAAA,IAACS,aAAA;AAAA,IAAA;AAAA,MACC,IAAA,EAAMC,iBAAA;AAAA,MACN,QAAA,EAAU,QAAA;AAAA,MACV,QAAA;AAAA,MACA,MAAA,EAAQ,MAAA;AAAA,MACR,QAAA;AAAA,MACA,eAAA;AAAA,MACA,aAAA,EAAc,8EAAA;AAAA,MACd,eAAA,EAAgB,oGAAA;AAAA,MAChB,aAAA,EAAa;AAAA;AAAA,GACf;AAEJ;;;ACpCO,SAAS,WAAW,IAAA,EAAsB;AAC/C,EAAA,OAAO,IAAA,CAAK,OAAO,CAAC,CAAA,CAAE,aAAY,GAAI,IAAA,CAAK,MAAM,CAAC,CAAA;AACpD;AAEA,IAAM,kBAAA,GAAwD;AAAA,EAC5D,KAAA,EAAO,8DAAA;AAAA,EACP,YAAA,EAAc,oEAAA;AAAA,EACd,KAAA,EAAO;AACT,CAAA;AAGO,SAAS,kBAAkB,IAAA,EAAiC;AACjE,EAAA,OAAO,mBAAmB,IAAI,CAAA;AAChC;AAEA,IAAM,iBAAA,GAAuD;AAAA,EAC3D,KAAA,EACE,4IAAA;AAAA,EACF,YAAA,EACE,0JAAA;AAAA,EACF,KAAA,EACE;AACJ,CAAA;AAGO,SAAS,mBAAmB,IAAA,EAAiC;AAClE,EAAA,OAAO,kBAAkB,IAAI,CAAA;AAC/B;ACNO,SAAS,eAAA,CAAgB;AAAA,EAC9B,OAAA;AAAA,EACA,MAAA;AAAA,EACA,SAAA;AAAA,EACA;AACF,CAAA,EAMG;AACD,EAAA,uBACET,eAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,EAAA;AAAA,MACA,IAAA,EAAK,OAAA;AAAA,MACL,WAAA,EAAU,YAAA;AAAA,MACV,aAAA,EAAa,MAAA;AAAA,MACb,SAAA,EAAWM,KAAAA;AAAA,QACT,iGAAA;AAAA,QACA;AAAA,OACF;AAAA,MAEA,QAAA,EAAA;AAAA,wBAAAP,cAAAA,CAACW,uBAAA,EAAA,EAAY,SAAA,EAAU,iBAAA,EAAkB,eAAY,MAAA,EAAO,CAAA;AAAA,QAC3D;AAAA;AAAA;AAAA,GACH;AAEJ;AAGO,SAAS,WAAA,CAAY,EAAE,SAAA,EAAW,QAAA,EAAS,EAAgD;AAChG,EAAA,uBACEX,cAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,cAAA;AAAA,MACV,SAAA,EAAWO,KAAAA,CAAG,2DAAA,EAA6D,SAAS,CAAA;AAAA,MAEnF;AAAA;AAAA,GACH;AAEJ;AAGO,SAAS,cAAA,CAAe,EAAE,QAAA,EAAS,EAA4B;AACpE,EAAA,uBACEP,cAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,kBAAA;AAAA,MACV,SAAA,EAAU,wJAAA;AAAA,MAET;AAAA;AAAA,GACH;AAEJ;AAiBO,SAAS,kBAAA,CAAmB;AAAA,EACjC,IAAA;AAAA,EACA,YAAA;AAAA,EACA,KAAA;AAAA,EACA,IAAA;AAAA,EACA,KAAA;AAAA,EACA,MAAA;AAAA,EACA,WAAA,GAAc,wBAAA;AAAA,EACd;AACF,CAAA,EAA4B;AAC1B,EAAA,uBACEA,cAAAA,CAACY,SAAA,EAAA,EAAO,IAAA,EAAY,cAClB,QAAA,kBAAAX,eAAAA;AAAA,IAACY,gBAAA;AAAA,IAAA;AAAA,MACC,YAAA,EAAa,OAAA;AAAA,MACb,SAAA,EAAU,sEAAA;AAAA,MACV,aAAA,EAAa,MAAA;AAAA,MAEb,QAAA,EAAA;AAAA,wBAAAb,cAAAA,CAACc,iCACC,QAAA,kBAAAd,cAAAA,CAAC,iBAAc,IAAA,EAAY,KAAA,EAAc,aAA0B,CAAA,EACrE,CAAA;AAAA,wBACAC,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,wCAAA,EACZ,QAAA,EAAA;AAAA,UAAA,KAAA,oBAASD,cAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,sCAAsC,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,UAClE;AAAA,SAAA,EACH;AAAA;AAAA;AAAA,GACF,EACF,CAAA;AAEJ;AAEA,SAAS,aAAA,CAAc;AAAA,EACrB,IAAA;AAAA,EACA,KAAA;AAAA,EACA;AACF,CAAA,EAIG;AACD,EAAA,uBACEC,gBAAAc,mBAAA,EAAA,EACE,QAAA,EAAA;AAAA,oBAAAf,eAACgB,cAAA,EAAA,EACC,QAAA,kBAAAf,eAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,yBAAA,EACZ,QAAA,EAAA;AAAA,MAAA,IAAA;AAAA,sBACDD,cAAAA,CAAC,MAAA,EAAA,EAAM,QAAA,EAAA,KAAA,EAAM;AAAA,KAAA,EACf,CAAA,EACF,CAAA;AAAA,oBACAA,cAAAA,CAACiB,oBAAA,EAAA,EAAkB,SAAA,EAAU,WAAW,QAAA,EAAA,WAAA,EAAY;AAAA,GAAA,EACtD,CAAA;AAEJ;AAGO,SAAS,gBAAA,CAAiB,EAAE,QAAA,EAAU,IAAA,EAAK,EAA2C;AAC3F,EAAA,uBACEhB,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,wCAAA,EACZ,QAAA,EAAA;AAAA,IAAA,QAAA;AAAA,IACA,wBAAQD,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,kDAAkD,QAAA,EAAA,IAAA,EAAK;AAAA,GAAA,EAClF,CAAA;AAEJ;AA0BA,IAAM,YAAA,GAAe,YAAA;AAId,SAAS,aAAA,CAAc;AAAA,EAC5B,KAAA;AAAA,EACA,OAAA;AAAA,EACA,QAAA;AAAA,EACA,OAAA,GAAU,MAAA;AAAA,EACV,QAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA;AAAA,EACA,MAAA,GAAS,EAAE,WAAA,EAAa,gBAAA,EAAkB,QAAQ,uBAAA,EAAwB;AAAA,EAC1E;AACF,CAAA,EAAuB;AACrB,EAAA,MAAM,UAAU,OAAA,KAAY,SAAA;AAC5B,EAAA,uBACEC,eAAAA;AAAA,IAACiB,SAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAO,KAAA,IAAS,OAAA,CAAQ,CAAC,CAAA,EAAG,EAAA;AAAA,MAC5B,aAAA,EAAe,CAAC,CAAA,KAAO,CAAA,KAAM,eAAe,QAAA,IAAW,GAAI,SAAS,CAAC,CAAA;AAAA,MACrE,UAAU,QAAA,IAAY,QAAA;AAAA,MAEtB,QAAA,EAAA;AAAA,wBAAAlB,cAAAA;AAAA,UAACmB,gBAAA;AAAA,UAAA;AAAA,YACC,SAAA,EAAWZ,KAAAA;AAAA,cACT,OAAA,IACE,4GAAA;AAAA,cACF,SAAA;AAAA,cACA,QAAA,IAAY;AAAA,aACd;AAAA,YACA,aAAA,EACE,MAAA,KAAW,OAAA,GAAU,8BAAA,GAAiC,0BAAA,CAAA;AAAA,YAGvD,QAAA,EAAA,OAAA,mBAAUP,cAAAA,CAACoB,cAAA,EAAA,EAAY,CAAA,mBAAKpB,cAAAA,CAACoB,cAAA,EAAA,EAAY,WAAA,EAAa,MAAA,CAAO,WAAA,EAAa;AAAA;AAAA,SAC7E;AAAA,wBACAnB,eAAAA,CAACoB,gBAAA,EAAA,EAAc,KAAA,EAAO,OAAA,GAAU,QAAQ,MAAA,EACrC,QAAA,EAAA;AAAA,UAAA,OAAA,CAAQ,GAAA,CAAI,CAAC,CAAA,qBACZrB,cAAAA,CAACsB,aAAA,EAAA,EAAsB,KAAA,EAAO,CAAA,CAAE,EAAA,EAC7B,QAAA,EAAA,CAAA,CAAE,OAAA,EAAA,EADY,CAAA,CAAE,EAEnB,CACD,CAAA;AAAA,UACA,QAAA,oBACCrB,eAAAA,CAAAc,mBAAA,EAAA,EACE,QAAA,EAAA;AAAA,4BAAAf,eAACuB,kBAAA,EAAA,EAAgB,CAAA;AAAA,4BACjBvB,eAACsB,aAAA,EAAA,EAAW,KAAA,EAAO,cACjB,QAAA,kBAAArB,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,wCAAA,EACb,QAAA,EAAA;AAAA,8BAAAD,cAAAA,CAACwB,gBAAA,EAAA,EAAK,SAAA,EAAU,UAAA,EAAW,CAAA;AAAA,8BAC3BxB,cAAAA,CAAC,MAAA,EAAA,EAAM,QAAA,EAAA,MAAA,CAAO,MAAA,EAAO;AAAA,aAAA,EACvB,CAAA,EACF;AAAA,WAAA,EACF;AAAA,SAAA,EAEJ;AAAA;AAAA;AAAA,GACF;AAEJ;AAGO,SAAS,mBAAA,CAAoB;AAAA,EAClC,KAAA;AAAA,EACA,OAAA;AAAA,EACA,SAAA;AAAA,EACA;AACF,CAAA,EAKG;AACD,EAAA,uBACEC,eAAAA;AAAA,IAACI,SAAAA;AAAA,IAAA;AAAA,MACC,IAAA,EAAK,QAAA;AAAA,MACL,OAAA,EAAQ,SAAA;AAAA,MACR,IAAA,EAAK,IAAA;AAAA,MACL,OAAA;AAAA,MACA,SAAA,EAAWE,KAAAA;AAAA,QACT,iFAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,aAAA,EAAa,MAAA;AAAA,MAEb,QAAA,EAAA;AAAA,wBAAAP,cAAAA,CAACyB,wBAAA,EAAA,EAAa,SAAA,EAAU,UAAA,EAAW,CAAA;AAAA,QAClC;AAAA;AAAA;AAAA,GACH;AAEJ;AAmCA,IAAM,cAAA,GAAwC;AAAA,EAC5C,cAAA,EAAgB,qBAAA;AAAA,EAChB,IAAA,EAAM,QAAA;AAAA,EACN,WAAA,EAAa,aAAA;AAAA,EACb,UAAA,EAAY,YAAA;AAAA,EACZ,OAAA,EAAS,SAAA;AAAA,EACT,IAAA,EAAM,CAAC,CAAA,KAAM,CAAA,EAAG,CAAC,CAAA,KAAA,CAAA;AAAA,EACjB,SAAA,EAAW,CAAC,CAAA,KAAM,CAAA,EAAG,CAAC,CAAA,WAAA;AACxB,CAAA;AAGO,SAAS,mBAAA,CAAoB;AAAA,EAClC,OAAA,GAAU,OAAA;AAAA,EACV,IAAA;AAAA,EACA,WAAA;AAAA,EACA,YAAA;AAAA,EACA,mBAAA;AAAA,EACA,UAAA;AAAA,EACA,WAAA;AAAA,EACA,iBAAA;AAAA,EACA,QAAA,GAAW,KAAA;AAAA,EACX,QAAA,GAAW,KAAA;AAAA,EACX,OAAA;AAAA,EACA,aAAA,GAAgB,EAAA;AAAA,EAChB,UAAA;AAAA,EACA,OAAA;AAAA,EACA;AACF,CAAA,EAA6B;AAC3B,EAAA,MAAM,yBAAyBC,WAAA,EAAM;AACrC,EAAA,MAAM,kBAAkBA,WAAA,EAAM;AAC9B,EAAA,MAAM,CAAA,GAAI,EAAE,GAAG,cAAA,EAAgB,GAAG,MAAA,EAAO;AACzC,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAIC,eAAS,KAAK,CAAA;AACpD,EAAA,MAAM,UAAU,OAAA,KAAY,OAAA;AAC5B,EAAA,MAAM,SAAA,GAAY,gBAAgB,IAAA,CAAK,MAAA;AAEvC,EAAA,MAAM,iBAAiB,CAAC,QAAA,IAAY,WAAA,KAAgB,CAAC,WAAW,SAAA,IAAa,EAAA,CAAA;AAC7E,EAAA,MAAM,UAAA,GAAa,OAAA,GAAU,QAAA,GAAW,QAAA,IAAY,QAAA;AAEpD,EAAA,uBACE1B,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,WAAA,EAAY,aAAU,kBAAA,EAClC,QAAA,EAAA;AAAA,IAAA,QAAA,oBACCD,eAAC,KAAA,EAAA,EAAI,aAAA,EAAY,kCAAiC,SAAA,EAAU,SAAA,EACzD,YAAE,cAAA,EACL,CAAA;AAAA,oBAEFA,cAAAA,CAAC4B,6BAAA,EAAA,EAAY,OAAO,CAAA,CAAE,IAAA,EAAM,sBAAM5B,cAAAA,CAAC6B,wBAAS,IAAA,EAAM,EAAA,EAAI,GAAI,OAAA,EAAS,eAAA,EACjE,0BAAA5B,eAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,UAAA,EACb,QAAA,EAAA;AAAA,sBAAAD,cAAAA;AAAA,QAAC8B,QAAA;AAAA,QAAA;AAAA,UACC,EAAA,EAAI,eAAA;AAAA,UACJ,IAAA,EAAK,MAAA;AAAA,UACL,KAAA,EAAO,IAAA;AAAA,UACP,UAAU,CAAC,CAAA,KAAM,YAAA,CAAa,CAAA,CAAE,OAAO,KAAK,CAAA;AAAA,UAC5C,QAAQ,MAAM;AACZ,YAAA,cAAA,CAAe,KAAK,CAAA;AACpB,YAAA,UAAA,IAAa;AAAA,UACf,CAAA;AAAA,UACA,SAAS,MAAM;AACb,YAAA,cAAA,CAAe,IAAI,CAAA;AACnB,YAAA,WAAA,IAAc;AAAA,UAChB,CAAA;AAAA,UACA,SAAA,EAAW,aAAA;AAAA,UACX,QAAA;AAAA,UACA,QAAA,EAAU,UAAA;AAAA,UACV,SAAA,EAAWvB,KAAAA;AAAA,YACT,UAAU,eAAA,GAAkB,YAAA;AAAA,YAC5B,QAAA,IAAY,oBAAA;AAAA,YACZ;AAAA,WACF;AAAA,UACA,QAAA,EAAQ,IAAA;AAAA,UACR,cAAA,EAAc,UAAU,IAAA,GAAO,MAAA;AAAA,UAC/B,kBAAA,EAAkB,OAAA;AAAA,UAClB,aAAA,EAAY;AAAA;AAAA,OACd;AAAA,MACC,kCACCP,cAAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UACC,SAAA,EAAWO,KAAAA;AAAA,YACT,uFAAA;AAAA,YACA,SAAA,GAAY,IAAI,eAAA,GAAkB;AAAA,WACpC;AAAA,UAEC,QAAA,EAAA,SAAA,GAAY,IAAI,CAAA,CAAE,IAAA,CAAK,CAAC,SAAS,CAAA,GAAI,CAAA,CAAE,SAAA,CAAU,SAAS;AAAA;AAAA;AAC7D,KAAA,EAEJ,CAAA,EACF,CAAA;AAAA,oBAEAP,cAAAA;AAAA,MAAC4B,6BAAA;AAAA,MAAA;AAAA,QACC,OAAO,CAAA,CAAE,WAAA;AAAA,QACT,IAAA,kBAAM5B,cAAAA,CAAC+B,qBAAA,EAAA,EAAU,MAAM,EAAA,EAAI,CAAA;AAAA,QAC3B,OAAA,EAAS,sBAAA;AAAA,QAET,QAAA,kBAAA/B,cAAAA;AAAA,UAAC8B,QAAA;AAAA,UAAA;AAAA,YACC,EAAA,EAAI,sBAAA;AAAA,YACJ,IAAA,EAAK,MAAA;AAAA,YACL,OAAA,EAAO,IAAA;AAAA,YACP,KAAA,EAAO,WAAA;AAAA,YACP,UAAU,CAAC,CAAA,KAAM,mBAAA,CAAoB,CAAA,CAAE,OAAO,KAAK,CAAA;AAAA,YACnD,MAAA,EAAQ,iBAAA;AAAA,YACR,QAAA;AAAA,YACA,QAAA,EAAU,UAAA;AAAA,YACV,SAAA,EAAWvB,KAAAA,CAAG,OAAA,IAAW,eAAA,EAAiB,YAAY,oBAAoB,CAAA;AAAA,YAC1E,aAAA,EAAY;AAAA;AAAA;AACd;AAAA,KACF;AAAA,IAEC,UAAA,oBACCP,cAAAA,CAAC4B,6BAAA,EAAA,EAAY,OAAO,CAAA,CAAE,UAAA,EAAY,IAAA,kBAAM5B,eAACU,iBAAAA,EAAA,EAAM,IAAA,EAAM,EAAA,EAAI,GACtD,QAAA,EAAA,UAAA,EACH,CAAA;AAAA,IAED,OAAA,oBACCV,cAAAA,CAAC4B,6BAAA,EAAA,EAAY,OAAO,CAAA,CAAE,OAAA,EAAS,IAAA,kBAAM5B,cAAAA,CAACgC,sBAAA,EAAA,EAAW,IAAA,EAAM,EAAA,EAAI,GACxD,QAAA,EAAA,OAAA,EACH;AAAA,GAAA,EAEJ,CAAA;AAEJ;ACtXO,IAAM,6BAAA,GAAqD;AAAA,EAChE,aAAA,EAAe,CAAC,IAAA,KAAS,CAAA,eAAA,EAAkB,IAAI,CAAA,CAAA;AAAA,EAC/C,gBAAA,EAAkB,mBAAA;AAAA,EAClB,SAAA,EAAW,WAAA;AAAA,EACX,KAAA,EAAO,OAAA;AAAA,EACP,OAAA,EAAS,SAAA;AAAA,EACT,OAAA,EAAS,CAAC,QAAA,KAAa,CAAA,QAAA,EAAW,QAAQ,CAAA;AAC5C;AAQA,IAAM,cAAcC,mBAAA,CAAgC;AAAA,EAClD,OAAA,EAAS,KAAA;AAAA,EACT,MAAA,EAAQ;AACV,CAAC,CAAA;AA4BD,SAAS,iBAAA,CAAkB;AAAA,EACzB,OAAA,GAAU,KAAA;AAAA,EACV,QAAA;AAAA,EACA,IAAA;AAAA,EACA,KAAA;AAAA,EACA,MAAA;AAAA,EACA,MAAA;AAAA,EACA,SAAA;AAAA,EACA,QAAA;AAAA,EACA,GAAG;AACL,CAAA,EAA2B;AACzB,EAAA,MAAM,YAAA,GAAeC,aAAA,CAAQ,OAAO,EAAE,GAAG,6BAAA,EAA+B,GAAG,MAAA,EAAO,CAAA,EAAI,CAAC,MAAM,CAAC,CAAA;AAC9F,EAAA,MAAM,YAAA,GAAe3B,KAAAA;AAAA,IACnB,kHAAA;AAAA,IACA,yEAAA;AAAA,IACA,UACI,kCAAA,GACA,kGAAA;AAAA,IACJ;AAAA,GACF;AACA,EAAA,MAAM,aAAA,GAAgB,CAAC,KAAA,KAAyC;AAC9D,IAAA,IAAI,KAAA,CAAM,MAAA,KAAW,KAAA,CAAM,aAAA,EAAe;AAC1C,IAAA,IAAI,KAAA,CAAM,GAAA,KAAQ,OAAA,IAAW,KAAA,CAAM,QAAQ,GAAA,EAAK;AAC9C,MAAA,KAAA,CAAM,cAAA,EAAe;AACrB,MAAA,QAAA,EAAS;AAAA,IACX;AAAA,EACF,CAAA;AACA,EAAA,uBACEP,cAAAA,CAAC,WAAA,CAAY,QAAA,EAAZ,EAAqB,KAAA,EAAO,EAAE,OAAA,EAAS,MAAA,EAAQ,MAAA,EAAQ,YAAA,EAAa,EAClE,iCACCA,cAAAA;AAAA,IAACmC,4BAAA;AAAA,IAAA;AAAA,MACE,GAAI,IAAA;AAAA,MACL,IAAA;AAAA,MACA,QAAA;AAAA,MACA,YAAA,EAAY,KAAA;AAAA,MACZ,cAAA,EAAc,UAAU,MAAA,GAAS,MAAA;AAAA,MACjC,WAAA,EAAU,gBAAA;AAAA,MACV,aAAA,EAAa,MAAA;AAAA,MACb,eAAa,OAAA,IAAW,MAAA;AAAA,MACxB,SAAA,EAAW,YAAA;AAAA,MAEV;AAAA;AAAA,sBAGHnC,cAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACE,GAAG,IAAA;AAAA,MACJ,IAAA,EAAK,QAAA;AAAA,MACL,QAAA,EAAU,CAAA;AAAA,MACV,YAAA,EAAY,KAAA;AAAA,MACZ,cAAA,EAAc,UAAU,MAAA,GAAS,MAAA;AAAA,MACjC,WAAA,EAAU,gBAAA;AAAA,MACV,aAAA,EAAa,MAAA;AAAA,MACb,eAAa,OAAA,IAAW,MAAA;AAAA,MACxB,OAAA,EAAS,QAAA;AAAA,MACT,SAAA,EAAW,aAAA;AAAA,MACX,SAAA,EAAW,YAAA;AAAA,MAEV;AAAA;AAAA,GACH,EAEJ,CAAA;AAEJ;AAGA,SAAS,oBAAoB,EAAE,SAAA,EAAW,QAAA,EAAU,GAAG,MAAK,EAAuC;AACjG,EAAA,uBACEA,cAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACE,GAAG,IAAA;AAAA,MACJ,SAAA,EAAWO,KAAAA,CAAG,6CAAA,EAA+C,SAAS,CAAA;AAAA,MACtE,WAAA,EAAU,uBAAA;AAAA,MAET;AAAA;AAAA,GACH;AAEJ;AAEA,SAAS,kBAAA,CAAmB,EAAE,QAAA,EAAU,SAAA,EAAU,EAAgD;AAChG,EAAA,MAAM,EAAE,MAAA,EAAO,GAAI6B,gBAAA,CAAW,WAAW,CAAA;AACzC,EAAA,uBACEpC,cAAAA;AAAA,IAAC,IAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAWO,KAAAA;AAAA,QACT,gGAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,WAAA,EAAU,sBAAA;AAAA,MACV,aAAA,EAAa,MAAA,IAAU,CAAA,EAAG,MAAM,CAAA,MAAA,CAAA;AAAA,MAE/B;AAAA;AAAA,GACH;AAEJ;AAMA,SAAS,oBAAA,CAAqB;AAAA,EAC5B,MAAA;AAAA,EACA;AACF,CAAA,EAKG;AACD,EAAA,MAAM,EAAE,OAAA,EAAS,MAAA,EAAO,GAAI6B,iBAAW,WAAW,CAAA;AAClD,EAAA,uBACEpC,cAAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAU,oFAAA;AAAA,MACV,WAAA,EAAU,yBAAA;AAAA,MACV,aAAA,EAAa,MAAA;AAAA,MAEZ,QAAA,EAAA,OAAA;AAAA;AAAA;AAAA,wBAGCC,eAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,8HAAA,EACd,QAAA,EAAA;AAAA,0BAAAD,cAAAA,CAACqC,iBAAA,EAAA,EAAM,SAAA,EAAU,8CAAA,EAA+C,eAAY,MAAA,EAAO,CAAA;AAAA,0BACnFrC,cAAAA,CAAC,MAAA,EAAA,EAAK,WAAU,0CAAA,EACb,QAAA,EAAA,YAAA,IAAgB,OAAO,gBAAA,EAC1B;AAAA,SAAA,EACF;AAAA,0BAEAA,cAAAA,CAACsC,wBAAA,EAAA,EAAa,SAAA,EAAU,QAAA,EAAS,eAAY,MAAA,EAAO;AAAA;AAAA,GAExD;AAEJ;AAEA,SAAS,wBAAA,CAAyB;AAAA,EAChC,QAAA;AAAA,EACA;AACF,CAAA,EAGG;AACD,EAAA,uBACEtC,cAAAA;AAAA,IAAC,GAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAWO,KAAAA,CAAG,4CAAA,EAA8C,SAAS,CAAA;AAAA,MACrE,KAAA,EAAO,OAAO,QAAA,KAAa,QAAA,GAAW,QAAA,GAAW,MAAA;AAAA,MACjD,WAAA,EAAU,4BAAA;AAAA,MAET;AAAA;AAAA,GACH;AAEJ;AAGA,SAAS,qBAAA,CAAsB;AAAA,EAC7B,SAAA;AAAA,EACA,QAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAuC;AACrC,EAAA,uBACEP,cAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACE,GAAG,IAAA;AAAA,MACJ,SAAA,EAAWO,KAAAA,CAAG,wCAAA,EAA0C,SAAS,CAAA;AAAA,MACjE,WAAA,EAAU,yBAAA;AAAA,MAET;AAAA;AAAA,GACH;AAEJ;AAGA,SAAS,oBAAoB,EAAE,SAAA,EAAW,QAAA,EAAU,GAAG,MAAK,EAAuC;AACjG,EAAA,uBACEP,cAAAA,CAAC,KAAA,EAAA,EAAK,GAAG,IAAA,EAAM,WAAWO,KAAAA,CAAG,6BAAA,EAA+B,SAAS,CAAA,EAClE,QAAA,EACH,CAAA;AAEJ;AAeA,SAAS,kBAAA,CAAmB;AAAA,EAC1B,QAAA;AAAA,EACA,SAAA;AAAA,EACA,WAAA;AAAA,EACA,UAAU,EAAC;AAAA,EACX,aAAA,GAAgB,KAAA;AAAA,EAChB,UAAA,GAAa,CAAA;AAAA,EACb;AACF,CAAA,EAA4B;AAC1B,EAAA,MAAM,EAAE,OAAA,EAAS,MAAA,EAAQ,MAAA,EAAO,GAAI6B,iBAAW,WAAW,CAAA;AAC1D,EAAA,uBACEnC,eAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAWM,KAAAA,CAAG,gEAAA,EAAkE,SAAS,CAAA;AAAA,MACzF,WAAA,EAAU,sBAAA;AAAA,MAEV,QAAA,EAAA;AAAA,wBAAAN,gBAAC,MAAA,EAAA,EAAK,SAAA,EAAU,kCAAA,EAAmC,KAAA,EAAO,OAAO,SAAA,EAC/D,QAAA,EAAA;AAAA,0BAAAD,eAAC6B,oBAAAA,EAAA,EAAS,SAAA,EAAU,QAAA,EAAS,eAAY,MAAA,EAAO,CAAA;AAAA,0BAChD7B,cAAAA,CAAC,MAAA,EAAA,EAAK,WAAU,cAAA,EAAgB,QAAA,EAAA,QAAA,CAAS,gBAAe,EAAE;AAAA,SAAA,EAC5D,CAAA;AAAA,QACC,SAAA,KAAc,0BACbC,eAAAA,CAAC,UAAK,SAAA,EAAU,kCAAA,EAAmC,KAAA,EAAO,MAAA,CAAO,KAAA,EAC/D,QAAA,EAAA;AAAA,0BAAAD,cAAAA,CAACuC,0BAAA,EAAA,EAAe,SAAA,EAAU,QAAA,EAAS,eAAY,MAAA,EAAO,CAAA;AAAA,0BACtDvC,cAAAA,CAAC,MAAA,EAAA,EAAK,WAAU,cAAA,EAAgB,QAAA,EAAA,SAAA,CAAU,gBAAe,EAAE;AAAA,SAAA,EAC7D,CAAA;AAAA,wBAEFC,eAAAA,CAAC,MAAA,EAAA,EAAK,WAAU,kCAAA,EAAmC,KAAA,EAAO,OAAO,OAAA,EAC/D,QAAA,EAAA;AAAA,0BAAAD,cAAAA,CAACwC,iBAAA,EAAA,EAAM,SAAA,EAAU,QAAA,EAAS,eAAY,MAAA,EAAO,CAAA;AAAA,0BAC7CxC,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,cAAA,EAAe,aAAA,EAAa,MAAA,IAAU,CAAA,EAAG,MAAM,CAAA,aAAA,CAAA,EAC5D,QAAA,EAAA,aAAA,GAAgB,QAAA,GAAM,WAAA,EACzB;AAAA,SAAA,EACF,CAAA;AAAA,wBACAA,cAAAA;AAAA,UAACyC,mCAAA;AAAA,UAAA;AAAA,YACC,OAAA;AAAA,YACA,KAAA,EAAO,WAAA;AAAA,YACP,GAAA,EAAK,UAAA;AAAA,YACL,MAAA,EAAQ,aAAA;AAAA,YACR,aAAA,EAAe,UAAU,aAAA,GAAgB,YAAA;AAAA,YACzC,OAAO,MAAA,CAAO,OAAA;AAAA,YACd,SAAA,EAAU,SAAA;AAAA,YACV,MAAA,EAAQ,MAAA,IAAU,CAAA,EAAG,MAAM,CAAA,eAAA;AAAA;AAAA;AAC7B;AAAA;AAAA,GACF;AAEJ;AAGA,SAAS,iBAAA,CAAkB,EAAE,SAAA,EAAU,EAA0B;AAC/D,EAAA,MAAM,EAAE,MAAA,EAAO,GAAIL,gBAAA,CAAW,WAAW,CAAA;AACzC,EAAA,uBACEpC,cAAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAU,sEAAA;AAAA,MACV,KAAA,EAAO0C,0BAAQ,SAAS,CAAA;AAAA,MACxB,WAAA,EAAU,qBAAA;AAAA,MAET,QAAA,EAAA,MAAA,CAAO,OAAA,CAAQC,qBAAA,CAAmB,SAAS,CAAC;AAAA;AAAA,GAC/C;AAEJ;AAoCA,SAAS,iBAAA,CAAkB;AAAA,EACzB,SAAA;AAAA,EACA,OAAA,GAAU,KAAA;AAAA,EACV,QAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,MAAA;AAAA,EACA,aAAA;AAAA,EACA,UAAA;AAAA,EACA,KAAA;AAAA,EACA,MAAA;AAAA,EACA;AACF,CAAA,EAAuB;AACrB,EAAA,MAAM,YAAA,GAAe,EAAE,GAAG,6BAAA,EAA+B,GAAG,MAAA,EAAO;AACnE,EAAA,uBACE1C,eAAAA;AAAA,IAAC,iBAAA;AAAA,IAAA;AAAA,MACC,OAAA;AAAA,MACA,QAAA;AAAA,MACA,IAAA;AAAA,MACA,KAAA,EAAO,YAAA,CAAa,aAAA,CAAc,SAAA,CAAU,IAAI,CAAA;AAAA,MAChD,MAAA;AAAA,MACA,MAAA;AAAA,MACA,SAAA;AAAA,MAEA,QAAA,EAAA;AAAA,wBAAAA,gBAAC,mBAAA,EAAA,EACE,QAAA,EAAA;AAAA,UAAA,IAAA;AAAA,0BACDD,cAAAA,CAAC,kBAAA,EAAA,EAAoB,QAAA,EAAA,SAAA,CAAU,IAAA,EAAK,CAAA;AAAA,0BACpCA,cAAAA,CAAC,oBAAA,EAAA,EAAqB,MAAA,EAAQ,aAAA,EAAe;AAAA,SAAA,EAC/C,CAAA;AAAA,QACC,UAAU,QAAA,oBAAYA,cAAAA,CAAC,qBAAA,EAAA,EAAuB,oBAAU,QAAA,EAAS,CAAA;AAAA,QACjE,UAAU,WAAA,oBACTA,cAAAA,CAAC,wBAAA,EAAA,EAA0B,oBAAU,WAAA,EAAY,CAAA;AAAA,wBAEnDC,gBAAC,mBAAA,EAAA,EACE,QAAA,EAAA;AAAA,UAAA,KAAA,KAAU,yBACTD,cAAAA;AAAA,YAAC,kBAAA;AAAA,YAAA;AAAA,cACC,UAAU,SAAA,CAAU,QAAA;AAAA,cACpB,WAAW,SAAA,CAAU,SAAA;AAAA,cACrB,aAAa,SAAA,CAAU,WAAA;AAAA,cACvB,SAAS,SAAA,CAAU,OAAA;AAAA,cACnB,eAAe,SAAA,CAAU,aAAA;AAAA,cACzB;AAAA;AAAA,WACF,GAEA,KAAA;AAAA,UAED,UAAU,SAAA,oBAAaA,eAAC,iBAAA,EAAA,EAAkB,SAAA,EAAW,UAAU,SAAA,EAAW;AAAA,SAAA,EAC7E;AAAA;AAAA;AAAA,GACF;AAEJ;AAEO,IAAM,aAAA,GAAgB,MAAA,CAAO,MAAA,CAAO,iBAAA,EAAmB;AAAA,EAC5D,IAAA,EAAM,iBAAA;AAAA,EACN,MAAA,EAAQ,mBAAA;AAAA,EACR,KAAA,EAAO,kBAAA;AAAA,EACP,OAAA,EAAS,oBAAA;AAAA,EACT,QAAA,EAAU,qBAAA;AAAA,EACV,WAAA,EAAa,wBAAA;AAAA,EACb,MAAA,EAAQ,mBAAA;AAAA,EACR,KAAA,EAAO,kBAAA;AAAA,EACP,IAAA,EAAM;AACR,CAAC;ACraM,SAAS,aAAA,CAAc,EAAE,QAAA,EAAU,SAAA,EAAW,QAAO,EAAuB;AACjF,EAAA,uBACEA,cAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAWO,KAAAA,CAAG,8CAAA,EAAgD,SAAS,CAAA;AAAA,MACvE,WAAA,EAAU,gBAAA;AAAA,MACV,aAAA,EAAa,MAAA;AAAA,MAEZ;AAAA;AAAA,GACH;AAEJ;AAyBO,SAAS,cAAA,CAAe;AAAA,EAC7B,KAAA;AAAA,EACA,UAAA;AAAA,EACA,QAAA;AAAA,EACA,MAAA;AAAA,EACA,SAAA;AAAA,EACA,aAAA;AAAA,EACA,QAAA;AAAA,EACA;AACF,CAAA,EAAwB;AACtB,EAAA,uBACEP,cAAAA;AAAA,IAAC4C,oCAAA;AAAA,IAAA;AAAA,MACC,KAAA;AAAA,MACA,UAAA;AAAA,MACA,QAAA;AAAA,MACA,aAAA,EAAe,MAAA;AAAA,MACf,cACE,MAAA,IAAU,SAAA,mBACR3C,eAAAA,CAAC,MAAA,EAAA,EAAK,WAAU,4EAAA,EACb,QAAA,EAAA;AAAA,QAAA,SAAA;AAAA,wBACDD,cAAAA,CAACsC,wBAAAA,EAAA,EAAa,SAAA,EAAU,iBAAA,EAAkB,eAAY,MAAA,EAAO;AAAA,OAAA,EAC/D,CAAA,GACE,aAAA,IAAiB,CAAC,UAAA,mBACpBtC,eAAC,MAAA,EAAA,EAAK,SAAA,EAAU,wCAAA,EAA0C,QAAA,EAAA,aAAA,EAAc,CAAA,GACtE,MAAA;AAAA,MAEN,SAAA,EAAWO,KAAAA,CAAG,OAAA,EAAS,SAAS,CAAA;AAAA,MAChC,eAAA,EAAgB,qEAAA;AAAA,MAChB,iBAAA,EAAkB,kDAAA;AAAA,MAEjB;AAAA;AAAA,GACH;AAEJ;AC7DO,SAAS,kBAAA,CAAmB;AAAA,EACjC,SAAA;AAAA,EACA,WAAA,GAAc,KAAA;AAAA,EACd,IAAA,GAAO,IAAA;AAAA,EACP,UAAA,GAAa,KAAA;AAAA,EACb;AACF,CAAA,EAA4B;AAC1B,EAAA,MAAM,SAAA,GAAYsC,mCAAA,CAAkB,SAAA,CAAU,KAAK,CAAA;AACnD,EAAA,MAAM,EAAE,IAAA,EAAM,OAAA,KAAYC,sCAAA,CAAqB,SAAA,CAAU,WAAW,SAAS,CAAA;AAC7E,EAAA,MAAM,OAAO,SAAA,CAAU,SAAA,GAAYpC,iBAAAA,GAAQ,SAAA,GAAY,IAAI8B,iBAAAA,GAAQO,gBAAA;AAEnE,EAAA,uBACE/C,cAAAA;AAAA,IAACgD,wCAAA;AAAA,IAAA;AAAA,MACC,IAAA;AAAA,MACA,OAAA,EAASC,oCAAkB,OAAO,CAAA;AAAA,MAClC,SAAA,EAAW,IAAA;AAAA,MACX,WAAA;AAAA,MACA,IAAA;AAAA,MACA,UAAA;AAAA,MACA;AAAA;AAAA,GACF;AAEJ","file":"chunk-KJVDYWAM.cjs","sourcesContent":["import type { ReactNode } from 'react'\nimport { LogOut, UserPlus } from 'lucide-react'\nimport { Button, cn, Popover, PopoverContent, PopoverTrigger } from '@arbidocs/react/ui'\n\n/**\n * Page frame of a workspace's home: a bounded column whose ONE scroll region spans the full\n * width (scrollbar on the outer edge), the inset living on the content inside it. A container,\n * so children can use `@2xl:` queries.\n */\nexport function WorkspacePageFrame({ testId, children }: { testId?: string; children: ReactNode }) {\n return (\n <div\n className=\"flex h-full flex-col @container\"\n data-slot=\"workspace-page\"\n data-testid={testId}\n >\n {/* scrollbar-gutter:stable keeps the content from jumping when a scrollbar appears. */}\n <div className=\"scrollbar-subtle min-h-0 flex-1 overflow-y-auto [scrollbar-gutter:stable]\">\n <div className=\"space-y-6 px-4 pb-6 sm:px-6 pt-4\">{children}</div>\n </div>\n </div>\n )\n}\n\n/** Tinted card holding the identity bar and the expandable member list. */\nexport function WorkspaceIdentityPanel({ children }: { children: ReactNode }) {\n return (\n <div\n data-slot=\"workspace-identity-panel\"\n className=\"group rounded-lg border border-border bg-card px-4 py-3 shadow-xs\"\n >\n {children}\n </div>\n )\n}\n\nexport interface WorkspaceProjectSlotProps {\n testId: string\n /** Screen-reader caption (\"Project:\"): the chip says what it is without a word in front. */\n caption: string\n children: ReactNode\n}\n\n/** The project control / chip pinned to the end of the name row. */\nexport function WorkspaceProjectSlot({ testId, caption, children }: WorkspaceProjectSlotProps) {\n return (\n <div className=\"flex min-w-0 items-center gap-3\">\n <div className=\"flex min-w-0 flex-1 items-center gap-2\" data-testid={testId}>\n <span className=\"sr-only\">{caption}</span>\n {children}\n </div>\n </div>\n )\n}\n\n/** Stated absence (\"None\") rather than a blank gap. */\nexport function ItalicNone({ children }: { children: ReactNode }) {\n return <span className=\"text-sm italic text-muted-foreground\">{children}</span>\n}\n\nexport interface WorkspaceAudienceLineProps {\n visibility: {\n testId: string\n caption: string\n /** The owner's visibility switch (developers only). */\n toggle?: ReactNode\n /** The state named in words, so the switch is never a puzzle. */\n stateText: string\n /** What the state means for who can see the workspace; opened by tapping the state words. */\n stateHelp: string\n }\n /** Member avatar stack. */\n members: ReactNode\n /** \"Share\" button (owners). */\n share?: { label: string; onClick: () => void; testId: string }\n}\n\n/** Visibility and members end the description line together: who can see and use the workspace. */\nexport function WorkspaceAudienceLine({ visibility, members, share }: WorkspaceAudienceLineProps) {\n return (\n <span className=\"flex flex-wrap items-center gap-x-4 gap-y-2\" data-slot=\"workspace-audience\">\n <span className=\"flex items-center gap-2\" data-testid={visibility.testId}>\n <span className=\"sr-only\">{visibility.caption}</span>\n {visibility.toggle}\n {/* Tap-to-explain, not hover-only: the words must answer a click on touch screens too. */}\n <Popover>\n <PopoverTrigger className=\"touch-hit cursor-pointer rounded-sm text-sm text-muted-foreground underline decoration-dotted underline-offset-4 hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\">\n {visibility.stateText}\n </PopoverTrigger>\n <PopoverContent align=\"start\" className=\"w-64 text-sm\">\n {visibility.stateHelp}\n </PopoverContent>\n </Popover>\n </span>\n {/* Faces first, then Share: \"these people ... add more\". */}\n <span className=\"flex items-center gap-1\">\n {members}\n {share && (\n <Button\n variant=\"outline\"\n size=\"sm\"\n className=\"h-8 gap-1.5 px-3 text-sm pointer-coarse:h-11\"\n onClick={share.onClick}\n data-testid={share.testId}\n >\n <UserPlus className=\"size-4\" />\n {share.label}\n </Button>\n )}\n </span>\n </span>\n )\n}\n\n/**\n * Collapsible block under the identity bar. Stays mounted and animates its height (grid-rows\n * 0fr to 1fr), so opening and closing glides instead of snapping.\n */\nexport function ExpandableSection({\n expanded,\n testId,\n children,\n}: {\n expanded: boolean\n testId?: string\n children: ReactNode\n}) {\n return (\n <div\n className={cn(\n 'grid transition-[grid-template-rows] duration-300 ease-in-out',\n expanded ? 'grid-rows-[1fr]' : 'grid-rows-[0fr]'\n )}\n data-slot=\"expandable-section\"\n data-expanded={expanded}\n data-testid={testId}\n >\n <div className=\"overflow-hidden\">\n <div className=\"mt-4 border-t border-border pt-4\">{children}</div>\n </div>\n </div>\n )\n}\n\n/** Centered loading placeholder of a page body. */\nexport function PageLoading({ children }: { children: ReactNode }) {\n return <div className=\"flex h-64 items-center justify-center\">{children}</div>\n}\n\nexport interface LeaveFooterProps {\n testId?: string\n leave: { label: string; disabled?: boolean; onClick: () => void; testId?: string }\n}\n\n/** Leaving ENDS your part in the workspace, so it sits last and alone at the foot of the page. */\nexport function LeaveFooter({ testId, leave }: LeaveFooterProps) {\n return (\n <div className=\"flex justify-end\" data-slot=\"leave-footer\" data-testid={testId}>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={leave.onClick}\n disabled={leave.disabled}\n className=\"h-7 px-2 text-sm text-destructive hover:bg-destructive/10 hover:text-destructive pointer-coarse:h-11\"\n data-testid={leave.testId}\n >\n <LogOut className=\"mr-1 size-3.5\" />\n {leave.label}\n </Button>\n </div>\n )\n}\n","/**\n * CommonWorkspaceToggle Component\n *\n * Toggle for workspace common/members-only visibility.\n * Takes isCommon and onToggle as props for form integration.\n */\n\nimport { Globe } from 'lucide-react'\nimport { IconToggle } from '@arbidocs/react/ui'\n\nexport interface CommonWorkspaceToggleProps {\n isCommon: boolean\n onToggle: (isCommon: boolean) => void\n disabled?: boolean\n /** Tooltip to show when disabled */\n disabledTooltip?: string\n 'data-testid'?: string\n}\n\nconst COLORS = {\n text: 'text-muted-foreground',\n bg: 'bg-gray-600',\n}\n\nexport function CommonWorkspaceToggle({\n isCommon,\n onToggle,\n disabled = false,\n disabledTooltip,\n 'data-testid': dataTestId,\n}: CommonWorkspaceToggleProps) {\n return (\n <IconToggle\n icon={Globe}\n isActive={isCommon}\n onToggle={onToggle}\n colors={COLORS}\n disabled={disabled}\n disabledTooltip={disabledTooltip}\n tooltipActive=\"On: everyone on this deployment can see it. Turn off to limit it to members.\"\n tooltipInactive=\"Off: only members of this workspace can see it. Turn on to let everyone on this deployment see it.\"\n data-testid={dataTestId}\n />\n )\n}\n","/**\n * A workspace role ('owner' | 'collaborator' | 'guest') as people see it: its name, its badge\n * colours and what it lets a member do.\n */\n\nexport type WorkspaceRoleName = 'owner' | 'collaborator' | 'guest'\n\n/** \"Owner\", \"Collaborator\", \"Guest\". */\nexport function formatRole(role: string): string {\n return role.charAt(0).toUpperCase() + role.slice(1)\n}\n\nconst ROLE_BADGE_CLASSES: Record<WorkspaceRoleName, string> = {\n owner: 'bg-primary text-white hover:bg-primary border border-primary',\n collaborator: 'bg-secondary text-white hover:bg-secondary border border-secondary',\n guest: 'bg-gray-600 text-white hover:bg-gray-600 border border-gray-600',\n}\n\n/** The badge classes of a role. */\nexport function getRoleBadgeClass(role: WorkspaceRoleName): string {\n return ROLE_BADGE_CLASSES[role]\n}\n\nconst ROLE_DESCRIPTIONS: Record<WorkspaceRoleName, string> = {\n owner:\n 'Owners have full control of the workspace, including adding and removing members, but cannot see private content created by other members.',\n collaborator:\n 'Collaborators can create and edit shared content, but cannot delete shared content created by others and cannot manage workspace settings or membership.',\n guest:\n 'Guests can create private content and view shared content, but cannot create or edit shared content.',\n}\n\n/** What a role lets a member do (a tooltip). */\nexport function getRoleDescription(role: WorkspaceRoleName): string {\n return ROLE_DESCRIPTIONS[role]\n}\n","import { useState, type ReactNode, useId } from 'react'\nimport {\n AlertCircle,\n AlignLeft,\n ArrowUpRight,\n CreditCard,\n FileText,\n Globe,\n Plus,\n} from 'lucide-react'\nimport {\n Button,\n cn,\n Dialog,\n DialogContent,\n DialogDescription,\n DialogTitle,\n Input,\n Select,\n SelectContent,\n SelectItem,\n SelectSeparator,\n SelectTrigger,\n SelectValue,\n} from '@arbidocs/react/ui'\nimport { KeyValueRow } from '../home/KeyValueRow'\nimport { ModalHeader } from '../settings/ModalScaffold'\n\n/** Inline error strip of a form. */\nexport function FormErrorBanner({\n message,\n testId,\n className,\n id,\n}: {\n message: string\n testId?: string\n className?: string\n /** Lets a field point at this message with `aria-describedby`. */\n id?: string\n}) {\n return (\n <div\n id={id}\n role=\"alert\"\n data-slot=\"form-error\"\n data-testid={testId}\n className={cn(\n 'flex items-center gap-2 rounded-md border border-red-border bg-red-bg p-3 text-sm text-red-text',\n className\n )}\n >\n <AlertCircle className=\"size-4 shrink-0\" aria-hidden=\"true\" />\n {message}\n </div>\n )\n}\n\n/** Right-aligned footer row of a form (Cancel + submit). */\nexport function FormActions({ className, children }: { className?: string; children: ReactNode }) {\n return (\n <div\n data-slot=\"form-actions\"\n className={cn('sticky bottom-0 flex justify-end gap-2 bg-background pt-2', className)}\n >\n {children}\n </div>\n )\n}\n\n/** Footer row of a modal body, separated by a rule. */\nexport function ModalActionRow({ children }: { children: ReactNode }) {\n return (\n <div\n data-slot=\"modal-action-row\"\n className=\"sticky bottom-0 -mx-6 -mb-6 flex flex-col-reverse gap-2 border-t border-border bg-background px-6 pb-6 pt-3 sm:flex-row sm:items-center sm:justify-end\"\n >\n {children}\n </div>\n )\n}\n\nexport interface WorkspaceFormModalProps {\n open: boolean\n onOpenChange: (open: boolean) => void\n title: ReactNode\n /** Icon before the title. */\n icon?: ReactNode\n /** Optional intro paragraph above the form (first-run welcome). */\n intro?: ReactNode\n testId?: string\n /** Visually hidden description. */\n description?: string\n children: ReactNode\n}\n\n/** Dialog frame of the create-workspace form: header, optional intro, scrolling body. */\nexport function WorkspaceFormModal({\n open,\n onOpenChange,\n title,\n icon,\n intro,\n testId,\n description = 'Create a new workspace',\n children,\n}: WorkspaceFormModalProps) {\n return (\n <Dialog open={open} onOpenChange={onOpenChange}>\n <DialogContent\n presentation=\"sheet\"\n className=\"flex max-h-panel w-modal max-w-modal-vw flex-col overflow-hidden p-0\"\n data-testid={testId}\n >\n <ModalHeader>\n <ModalTitleRow icon={icon} title={title} description={description} />\n </ModalHeader>\n <div className=\"min-h-0 flex-1 overflow-auto px-6 pb-6\">\n {intro && <p className=\"pb-4 text-sm text-muted-foreground\">{intro}</p>}\n {children}\n </div>\n </DialogContent>\n </Dialog>\n )\n}\n\nfunction ModalTitleRow({\n icon,\n title,\n description,\n}: {\n icon?: ReactNode\n title: ReactNode\n description: string\n}) {\n return (\n <>\n <DialogTitle>\n <div className=\"flex items-center gap-2\">\n {icon}\n <span>{title}</span>\n </div>\n </DialogTitle>\n <DialogDescription className=\"sr-only\">{description}</DialogDescription>\n </>\n )\n}\n\n/** One entry of the project picker: identity on the left, optional quota summary on the right. */\nexport function ProjectOptionRow({ identity, meta }: { identity: ReactNode; meta?: string }) {\n return (\n <div className=\"flex w-full min-w-0 items-center gap-2\">\n {identity}\n {meta && <span className=\"ml-auto truncate text-sm text-muted-foreground\">{meta}</span>}\n </div>\n )\n}\n\nexport interface ProjectPickerOption {\n id: string\n content: ReactNode\n}\n\nexport interface ProjectPickerProps {\n value?: string\n options: ProjectPickerOption[]\n onChange: (id: string) => void\n /**\n * `form` (default): the full-width field of the workspace form. `welcome`: the compact switcher\n * in the welcome dialog's quota header (muted pill, menu aligned to its end).\n */\n variant?: 'form' | 'welcome'\n /** Adds a \"Create new project...\" entry. */\n onCreate?: () => void\n disabled?: boolean\n readOnly?: boolean\n className?: string\n labels?: { placeholder: string; create: string }\n /** Trigger test id (default `workspace-project-select`, or `welcome-modal-project-select`). */\n testId?: string\n}\n\nconst CREATE_VALUE = '__create__'\n\n/** The one project picker: a workspace's owning project (optionally with a create entry), or the\n * welcome dialog's project switcher (`variant=\"welcome\"`). */\nexport function ProjectPicker({\n value,\n options,\n onChange,\n variant = 'form',\n onCreate,\n disabled,\n readOnly,\n className,\n labels = { placeholder: 'Select project', create: 'Create new project...' },\n testId,\n}: ProjectPickerProps) {\n const welcome = variant === 'welcome'\n return (\n <Select\n value={value ?? options[0]?.id}\n onValueChange={(v) => (v === CREATE_VALUE ? onCreate?.() : onChange(v))}\n disabled={disabled || readOnly}\n >\n <SelectTrigger\n className={cn(\n welcome &&\n 'h-7 w-auto max-w-[9.5rem] shrink-0 gap-1 border-none bg-muted px-2 text-xs font-medium pointer-coarse:h-11',\n className,\n readOnly && 'cursor-not-allowed'\n )}\n data-testid={\n testId ?? (welcome ? 'welcome-modal-project-select' : 'workspace-project-select')\n }\n >\n {welcome ? <SelectValue /> : <SelectValue placeholder={labels.placeholder} />}\n </SelectTrigger>\n <SelectContent align={welcome ? 'end' : undefined}>\n {options.map((o) => (\n <SelectItem key={o.id} value={o.id}>\n {o.content}\n </SelectItem>\n ))}\n {onCreate && (\n <>\n <SelectSeparator />\n <SelectItem value={CREATE_VALUE}>\n <div className=\"flex items-center gap-1.5 text-primary\">\n <Plus className=\"size-3.5\" />\n <span>{labels.create}</span>\n </div>\n </SelectItem>\n </>\n )}\n </SelectContent>\n </Select>\n )\n}\n\n/** Compact CTA on a project row (e.g. Upgrade / Change plan). */\nexport function ProjectActionButton({\n label,\n onClick,\n className,\n testId,\n}: {\n label: string\n onClick: () => void\n className?: string\n testId?: string\n}) {\n return (\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"sm\"\n onClick={onClick}\n className={cn(\n 'h-7 gap-1.5 whitespace-nowrap px-2 py-0 text-sm font-medium pointer-coarse:h-11',\n className\n )}\n data-testid={testId}\n >\n <ArrowUpRight className=\"size-3.5\" />\n {label}\n </Button>\n )\n}\n\nexport interface WorkspaceFieldsViewProps {\n /** `modal` (create flow) or `settings` (editing an existing workspace). */\n variant?: 'modal' | 'settings'\n name: string\n description: string\n onNameChange: (value: string) => void\n onDescriptionChange: (value: string) => void\n onNameBlur?: () => void\n onNameFocus?: () => void\n onDescriptionBlur?: () => void\n disabled?: boolean\n readOnly?: boolean\n maxNameLength?: number\n /** Id of the form's error message (a `FormErrorBanner id`): the name input is then `aria-invalid`\n * and described by it. */\n errorId?: string\n /** Content of the Visibility row (settings only); omit to hide the row. */\n visibility?: ReactNode\n /** Content of the Project row; omit to hide the row. */\n project?: ReactNode\n labels?: Partial<WorkspaceFieldsLabels>\n}\n\nexport interface WorkspaceFieldsLabels {\n readOnlyNotice: string\n name: string\n description: string\n visibility: string\n project: string\n over: (n: number) => string\n charsLeft: (n: number) => string\n}\n\nconst DEFAULT_LABELS: WorkspaceFieldsLabels = {\n readOnlyNotice: 'Read-only workspace',\n name: 'Name *',\n description: 'Description',\n visibility: 'Visibility',\n project: 'Project',\n over: (n) => `${n} over`,\n charsLeft: (n) => `${n} chars left`,\n}\n\n/** Name / description / visibility / project rows shared by the create and settings forms. */\nexport function WorkspaceFieldsView({\n variant = 'modal',\n name,\n description,\n onNameChange,\n onDescriptionChange,\n onNameBlur,\n onNameFocus,\n onDescriptionBlur,\n disabled = false,\n readOnly = false,\n errorId,\n maxNameLength = 50,\n visibility,\n project,\n labels,\n}: WorkspaceFieldsViewProps) {\n const workspaceDescriptionId = useId()\n const workspaceNameId = useId()\n const l = { ...DEFAULT_LABELS, ...labels }\n const [nameFocused, setNameFocused] = useState(false)\n const isModal = variant === 'modal'\n const charsLeft = maxNameLength - name.length\n // The modal only surfaces the counter near the limit; settings shows it while focused.\n const counterVisible = !readOnly && nameFocused && (!isModal || charsLeft <= 10)\n const isDisabled = isModal ? disabled : disabled || readOnly\n\n return (\n <div className=\"space-y-1\" data-slot=\"workspace-fields\">\n {readOnly && (\n <div data-testid=\"workspace-form-readonly-notice\" className=\"sr-only\">\n {l.readOnlyNotice}\n </div>\n )}\n <KeyValueRow label={l.name} icon={<FileText size={14} />} htmlFor={workspaceNameId}>\n <div className=\"relative\">\n <Input\n id={workspaceNameId}\n type=\"text\"\n value={name}\n onChange={(e) => onNameChange(e.target.value)}\n onBlur={() => {\n setNameFocused(false)\n onNameBlur?.()\n }}\n onFocus={() => {\n setNameFocused(true)\n onNameFocus?.()\n }}\n maxLength={maxNameLength}\n readOnly={readOnly}\n disabled={isDisabled}\n className={cn(\n isModal ? 'bg-background' : 'capitalize',\n readOnly && 'cursor-not-allowed',\n 'pr-20'\n )}\n required\n aria-invalid={errorId ? true : undefined}\n aria-describedby={errorId}\n data-testid=\"workspace-form-name-input\"\n />\n {counterVisible && (\n <div\n className={cn(\n 'pointer-events-none absolute right-3 top-1/2 hidden -translate-y-1/2 text-sm lg:block',\n charsLeft < 0 ? 'text-red-text' : 'text-muted-foreground'\n )}\n >\n {charsLeft < 0 ? l.over(-charsLeft) : l.charsLeft(charsLeft)}\n </div>\n )}\n </div>\n </KeyValueRow>\n\n <KeyValueRow\n label={l.description}\n icon={<AlignLeft size={14} />}\n htmlFor={workspaceDescriptionId}\n >\n <Input\n id={workspaceDescriptionId}\n type=\"text\"\n dictate\n value={description}\n onChange={(e) => onDescriptionChange(e.target.value)}\n onBlur={onDescriptionBlur}\n readOnly={readOnly}\n disabled={isDisabled}\n className={cn(isModal && 'bg-background', readOnly && 'cursor-not-allowed')}\n data-testid=\"workspace-form-description-input\"\n />\n </KeyValueRow>\n\n {visibility && (\n <KeyValueRow label={l.visibility} icon={<Globe size={14} />}>\n {visibility}\n </KeyValueRow>\n )}\n {project && (\n <KeyValueRow label={l.project} icon={<CreditCard size={14} />}>\n {project}\n </KeyValueRow>\n )}\n </div>\n )\n}\n","import {\n createContext,\n useContext,\n type HTMLAttributes,\n useMemo,\n type KeyboardEvent,\n type ReactNode,\n} from 'react'\nimport { Check, ChevronRight, FileText, MessagesSquare, Users } from 'lucide-react'\nimport { cn } from '@arbidocs/react/ui'\nimport { formatRelativeTime } from '@arbidocs/react/ui'\nimport { fmtDate } from '../lib/format'\nimport { ActionLink } from '../components/ActionLink'\nimport { MemberAvatarStack, type StackedMember } from '../components/MemberAvatarStack'\n\n/** Everything a workspace tile shows, source-agnostic (not the raw SDK shape). */\nexport interface WorkspaceSummary {\n id: string\n name: string\n description?: string | null\n /** Host-supplied line under the name (a reference, a client, a status...). Not interpreted. */\n subtitle?: ReactNode\n docCount: number\n /** Hidden when undefined, so a host without chats shows no empty counter. */\n chatCount?: number\n /** Number of visible members (agents excluded by the caller). */\n memberCount: number\n members: StackedMember[]\n /** The viewer may not see who is here (RLS): renders an em dash, not a `0`. */\n membersHidden?: boolean\n /** ISO timestamp: rendered as \"Updated {relative}\". */\n updatedAt?: string | null\n}\n\n/** Every fixed string of the workspace tile. Pass a partial `labels` to translate or reword. */\nexport interface WorkspaceCardLabels {\n /** The tile's accessible name. */\n openWorkspace: (name: string) => string\n currentWorkspace: string\n documents: string\n chats: string\n members: string\n /** `relative` is the formatted \"3 days ago\". */\n updated: (relative: string) => string\n}\n\nexport const DEFAULT_WORKSPACE_CARD_LABELS: WorkspaceCardLabels = {\n openWorkspace: (name) => `Open workspace ${name}`,\n currentWorkspace: 'Current workspace',\n documents: 'Documents',\n chats: 'Tasks',\n members: 'Members',\n updated: (relative) => `Updated ${relative}`,\n}\n\ninterface CardContextValue {\n current: boolean\n testId?: string\n labels: WorkspaceCardLabels\n}\n\nconst CardContext = createContext<CardContextValue>({\n current: false,\n labels: DEFAULT_WORKSPACE_CARD_LABELS,\n})\n\ntype DivProps = Omit<HTMLAttributes<HTMLDivElement>, 'children'>\n\n/* ------------------------------------------------------------------ */\n/* Parts */\n/* ------------------------------------------------------------------ */\n\nexport interface WorkspaceCardRootProps extends DivProps {\n /** This is the workspace you are in: accented surface, \"Current workspace\" cue. */\n current?: boolean\n onSelect: () => void\n /**\n * Real link target. The tile then renders as an anchor (ctrl-click / new tab, in-SPA through\n * the host environment's `linkComponent`); `onSelect` still fires on a plain click.\n */\n href?: string\n /** Accessible name; defaults to `labels.openWorkspace(name)` when composed via `WorkspaceCard`. */\n label: string\n testId?: string\n labels?: Partial<WorkspaceCardLabels>\n children: ReactNode\n}\n\n/**\n * The tile surface: one button that opens the workspace. A raised white card\n * (hairline border, soft shadow, hover lift); the current workspace takes the selection tint.\n */\nfunction WorkspaceCardRoot({\n current = false,\n onSelect,\n href,\n label,\n testId,\n labels,\n className,\n children,\n ...rest\n}: WorkspaceCardRootProps) {\n const mergedLabels = useMemo(() => ({ ...DEFAULT_WORKSPACE_CARD_LABELS, ...labels }), [labels])\n const surfaceClass = cn(\n '@container/ws-card flex min-h-40 w-full cursor-pointer flex-col gap-3 rounded-lg p-4 text-left transition-colors',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',\n current\n ? 'bg-accent text-accent-foreground'\n : 'border border-border bg-card shadow-xs transition-colors hover:border-ring/50 hover:bg-accent/40',\n className\n )\n const handleKeyDown = (event: KeyboardEvent<HTMLDivElement>) => {\n if (event.target !== event.currentTarget) return\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault()\n onSelect()\n }\n }\n return (\n <CardContext.Provider value={{ current, testId, labels: mergedLabels }}>\n {href ? (\n <ActionLink\n {...(rest as object)}\n href={href}\n onSelect={onSelect}\n aria-label={label}\n aria-current={current ? 'page' : undefined}\n data-slot=\"workspace-card\"\n data-testid={testId}\n data-active={current || undefined}\n className={surfaceClass}\n >\n {children}\n </ActionLink>\n ) : (\n <div\n {...rest}\n role=\"button\"\n tabIndex={0}\n aria-label={label}\n aria-current={current ? 'page' : undefined}\n data-slot=\"workspace-card\"\n data-testid={testId}\n data-active={current || undefined}\n onClick={onSelect}\n onKeyDown={handleKeyDown}\n className={surfaceClass}\n >\n {children}\n </div>\n )}\n </CardContext.Provider>\n )\n}\n\n/** Mark + name + open cue, on one row. Put the entity mark first. */\nfunction WorkspaceCardHeader({ className, children, ...rest }: DivProps & { children: ReactNode }) {\n return (\n <div\n {...rest}\n className={cn('flex flex-wrap items-center gap-x-3 gap-y-2', className)}\n data-slot=\"workspace-card-header\"\n >\n {children}\n </div>\n )\n}\n\nfunction WorkspaceCardTitle({ children, className }: { children: ReactNode; className?: string }) {\n const { testId } = useContext(CardContext)\n return (\n <h3\n className={cn(\n 'line-clamp-2 min-w-24 flex-1 break-words text-base font-semibold leading-tight text-foreground',\n className\n )}\n data-slot=\"workspace-card-title\"\n data-testid={testId && `${testId}-title`}\n >\n {children}\n </h3>\n )\n}\n\n/**\n * The open cue is always on screen (never hover-only): a chevron, or the words\n * \"Current workspace\" on the one you are in.\n */\nfunction WorkspaceCardOpenCue({\n testId,\n currentLabel,\n}: {\n /** Deliberately separate from the card id: suites count cards by prefix. */\n testId?: string\n /** Overrides `labels.currentWorkspace`. */\n currentLabel?: string\n}) {\n const { current, labels } = useContext(CardContext)\n return (\n <span\n className=\"inline-flex max-w-full min-w-0 shrink-0 items-center text-sm text-muted-foreground\"\n data-slot=\"workspace-card-open-cue\"\n data-testid={testId}\n >\n {current ? (\n // Never wider than the card: the words truncate, and in a card narrower than 20rem\n // the pill shrinks to a check (the words stay as the accessible name).\n <span className=\"inline-flex max-w-full min-w-0 items-center gap-1 rounded-full bg-background px-2 py-0.5 text-xs font-medium text-foreground\">\n <Check className=\"hidden size-3 shrink-0 @max-xs/ws-card:block\" aria-hidden=\"true\" />\n <span className=\"min-w-0 truncate @max-xs/ws-card:sr-only\">\n {currentLabel ?? labels.currentWorkspace}\n </span>\n </span>\n ) : (\n <ChevronRight className=\"size-4\" aria-hidden=\"true\" />\n )}\n </span>\n )\n}\n\nfunction WorkspaceCardDescription({\n children,\n className,\n}: {\n children: ReactNode\n className?: string\n}) {\n return (\n <p\n className={cn('line-clamp-2 text-sm text-muted-foreground', className)}\n title={typeof children === 'string' ? children : undefined}\n data-slot=\"workspace-card-description\"\n >\n {children}\n </p>\n )\n}\n\n/** Host-supplied line under the title. */\nfunction WorkspaceCardSubtitle({\n className,\n children,\n ...rest\n}: DivProps & { children: ReactNode }) {\n return (\n <div\n {...rest}\n className={cn('truncate text-xs text-muted-foreground', className)}\n data-slot=\"workspace-card-subtitle\"\n >\n {children}\n </div>\n )\n}\n\n/** Footer block: stats row and meta line, pinned to the bottom of the tile. */\nfunction WorkspaceCardFooter({ className, children, ...rest }: DivProps & { children: ReactNode }) {\n return (\n <div {...rest} className={cn('mt-auto flex flex-col gap-2', className)}>\n {children}\n </div>\n )\n}\n\nexport interface WorkspaceCardStatsProps {\n docCount: number\n /** Omit to hide the chats counter. */\n chatCount?: number\n memberCount: number\n members?: StackedMember[]\n membersHidden?: boolean\n /** Faces before the rest collapse into `+N`. */\n maxAvatars?: number\n className?: string\n}\n\n/** Documents / chats / members counts, with the member faces at the trailing edge. */\nfunction WorkspaceCardStats({\n docCount,\n chatCount,\n memberCount,\n members = [],\n membersHidden = false,\n maxAvatars = 3,\n className,\n}: WorkspaceCardStatsProps) {\n const { current, testId, labels } = useContext(CardContext)\n return (\n <div\n className={cn('flex w-full items-center gap-x-4 text-sm text-muted-foreground', className)}\n data-slot=\"workspace-card-stats\"\n >\n <span className=\"inline-flex items-center gap-1.5\" title={labels.documents}>\n <FileText className=\"size-4\" aria-hidden=\"true\" />\n <span className=\"tabular-nums\">{docCount.toLocaleString()}</span>\n </span>\n {chatCount !== undefined && (\n <span className=\"inline-flex items-center gap-1.5\" title={labels.chats}>\n <MessagesSquare className=\"size-4\" aria-hidden=\"true\" />\n <span className=\"tabular-nums\">{chatCount.toLocaleString()}</span>\n </span>\n )}\n <span className=\"inline-flex items-center gap-1.5\" title={labels.members}>\n <Users className=\"size-4\" aria-hidden=\"true\" />\n <span className=\"tabular-nums\" data-testid={testId && `${testId}-member-count`}>\n {membersHidden ? '—' : memberCount}\n </span>\n </span>\n <MemberAvatarStack\n members={members}\n total={memberCount}\n max={maxAvatars}\n hidden={membersHidden}\n ringClassName={current ? 'ring-accent' : 'ring-muted'}\n label={labels.members}\n className=\"ml-auto\"\n testId={testId && `${testId}-member-avatars`}\n />\n </div>\n )\n}\n\n/** \"Updated 3 days ago\", with the exact date on the title. */\nfunction WorkspaceCardMeta({ updatedAt }: { updatedAt: string }) {\n const { labels } = useContext(CardContext)\n return (\n <span\n className=\"min-w-0 max-w-full self-start truncate text-xs text-muted-foreground\"\n title={fmtDate(updatedAt)}\n data-slot=\"workspace-card-meta\"\n >\n {labels.updated(formatRelativeTime(updatedAt))}\n </span>\n )\n}\n\n/* ------------------------------------------------------------------ */\n/* Default composition */\n/* ------------------------------------------------------------------ */\n\nexport interface WorkspaceCardProps {\n workspace: WorkspaceSummary\n current?: boolean\n onSelect: () => void\n /** Real link target; see `WorkspaceCard.Root`. */\n href?: string\n /** The entity mark shown before the name (the host's own workspace glyph). */\n mark?: ReactNode\n /** Card id; derived ids: `-title`, `-member-count`, `-member-avatars`. */\n testId?: string\n /** Id for the open cue (kept apart from `testId`, see `WorkspaceCard.OpenCue`). */\n openCueTestId?: string\n maxAvatars?: number\n /**\n * The stats row: omit for the default counts + member faces, `false` to hide it, or any node to\n * replace it.\n */\n stats?: ReactNode | false\n /** Reword the tile's fixed strings. */\n labels?: Partial<WorkspaceCardLabels>\n className?: string\n}\n\n/**\n * The workspace tile: mark + name + open cue, description, stats and meta.\n * The whole tile opens the workspace; nothing on it is hover-only.\n *\n * Need a different layout? Compose the parts: `WorkspaceCard.Root`, `.Header`,\n * `.Title`, `.OpenCue`, `.Subtitle`, `.Description`, `.Footer`, `.Stats`, `.Meta`.\n */\nfunction WorkspaceCardBase({\n workspace,\n current = false,\n onSelect,\n href,\n mark,\n testId,\n openCueTestId,\n maxAvatars,\n stats,\n labels,\n className,\n}: WorkspaceCardProps) {\n const mergedLabels = { ...DEFAULT_WORKSPACE_CARD_LABELS, ...labels }\n return (\n <WorkspaceCardRoot\n current={current}\n onSelect={onSelect}\n href={href}\n label={mergedLabels.openWorkspace(workspace.name)}\n labels={labels}\n testId={testId}\n className={className}\n >\n <WorkspaceCardHeader>\n {mark}\n <WorkspaceCardTitle>{workspace.name}</WorkspaceCardTitle>\n <WorkspaceCardOpenCue testId={openCueTestId} />\n </WorkspaceCardHeader>\n {workspace.subtitle && <WorkspaceCardSubtitle>{workspace.subtitle}</WorkspaceCardSubtitle>}\n {workspace.description && (\n <WorkspaceCardDescription>{workspace.description}</WorkspaceCardDescription>\n )}\n <WorkspaceCardFooter>\n {stats === undefined ? (\n <WorkspaceCardStats\n docCount={workspace.docCount}\n chatCount={workspace.chatCount}\n memberCount={workspace.memberCount}\n members={workspace.members}\n membersHidden={workspace.membersHidden}\n maxAvatars={maxAvatars}\n />\n ) : (\n stats\n )}\n {workspace.updatedAt && <WorkspaceCardMeta updatedAt={workspace.updatedAt} />}\n </WorkspaceCardFooter>\n </WorkspaceCardRoot>\n )\n}\n\nexport const WorkspaceCard = Object.assign(WorkspaceCardBase, {\n Root: WorkspaceCardRoot,\n Header: WorkspaceCardHeader,\n Title: WorkspaceCardTitle,\n OpenCue: WorkspaceCardOpenCue,\n Subtitle: WorkspaceCardSubtitle,\n Description: WorkspaceCardDescription,\n Footer: WorkspaceCardFooter,\n Stats: WorkspaceCardStats,\n Meta: WorkspaceCardMeta,\n})\n","import type { ReactNode } from 'react'\nimport { ChevronRight } from 'lucide-react'\nimport { cn } from '@arbidocs/react/ui'\nimport { CollapsibleSection } from '../home/CollapsibleSection'\n\nexport interface WorkspaceListProps {\n children: ReactNode\n className?: string\n testId?: string\n}\n\n/** The column that stacks workspace groups (padding follows the page gutter). */\nexport function WorkspaceList({ children, className, testId }: WorkspaceListProps) {\n return (\n <div\n className={cn('flex w-full flex-col gap-2 px-4 py-4 sm:px-8', className)}\n data-slot=\"workspace-list\"\n data-testid={testId}\n >\n {children}\n </div>\n )\n}\n\nexport interface WorkspaceGroupProps {\n /** Group heading: name, count, badges. Plain text on the canvas, no band. */\n title: ReactNode\n isExpanded: boolean\n onToggle: () => void\n /**\n * Makes the whole header one target (e.g. open the project panel); the\n * chevron stays a separate toggle. Adds a trailing `openLabel` affordance.\n */\n onOpen?: () => void\n /** Words beside the trailing chevron when `onOpen` is set, e.g. \"Plans & Usage\". */\n openLabel?: string\n /** Muted words on the right of a collapsed group without `onOpen`, e.g. \"Show 11 shared workspaces\". */\n collapsedHint?: string\n /** The cards, laid out in a responsive grid (1 / 2 / 3 columns). */\n children: ReactNode\n className?: string\n}\n\n/**\n * One collapsible band of workspace tiles under a slim header. The open\n * affordance is always visible, so nothing is reachable by hover alone.\n */\nexport function WorkspaceGroup({\n title,\n isExpanded,\n onToggle,\n onOpen,\n openLabel,\n collapsedHint,\n children,\n className,\n}: WorkspaceGroupProps) {\n return (\n <CollapsibleSection\n title={title}\n isExpanded={isExpanded}\n onToggle={onToggle}\n onHeaderClick={onOpen}\n rightContent={\n onOpen && openLabel ? (\n <span className=\"flex shrink-0 items-center gap-1 text-sm font-medium text-muted-foreground\">\n {openLabel}\n <ChevronRight className=\"size-4 shrink-0\" aria-hidden=\"true\" />\n </span>\n ) : collapsedHint && !isExpanded ? (\n <span className=\"shrink-0 text-sm text-muted-foreground\">{collapsedHint}</span>\n ) : undefined\n }\n className={cn('group', className)}\n headerClassName=\"mb-3 flex-wrap gap-y-2 rounded-md px-1 py-1 pointer-coarse:min-h-11\"\n childrenClassName=\"mb-8 grid gap-3 @xl:grid-cols-2 @5xl:grid-cols-3\"\n >\n {children}\n </CollapsibleSection>\n )\n}\n","/**\n * WorkspaceTypeBadge: a workspace's type badge (private, shared or public: icon, colour, label).\n */\n\nimport { User, Users, Globe } from 'lucide-react'\nimport type { components } from '@arbidocs/client'\nimport { WorkspaceTypeBadgeView } from './WorkspaceBadges'\nimport { getHumanUserCount, getVariantBgClass, getWorkspaceTypeInfo } from './workspace-type'\n\ntype Workspace = Pick<components['schemas']['WorkspaceResponse'], 'is_public' | 'users'>\n\nexport interface WorkspaceTypeBadgeProps {\n workspace: Workspace\n showTooltip?: boolean\n size?: 'sm' | 'md'\n isSelected?: boolean\n className?: string\n}\n\nexport function WorkspaceTypeBadge({\n workspace,\n showTooltip = false,\n size = 'md',\n isSelected = false,\n className,\n}: WorkspaceTypeBadgeProps) {\n const userCount = getHumanUserCount(workspace.users)\n const { type, variant } = getWorkspaceTypeInfo(workspace.is_public, userCount)\n const icon = workspace.is_public ? Globe : userCount > 1 ? Users : User\n\n return (\n <WorkspaceTypeBadgeView\n icon={icon}\n bgClass={getVariantBgClass(variant)}\n typeLabel={type}\n showTooltip={showTooltip}\n size={size}\n isSelected={isSelected}\n className={className}\n />\n )\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/CollectionDetail.tsx","../src/components/Chart.tsx","../src/components/editorial/Eyebrow.tsx","../src/components/editorial/EditorialHeading.tsx","../src/components/editorial/EditorialHero.tsx","../src/components/editorial/EditorialSection.tsx","../src/components/editorial/lists.tsx","../src/components/editorial/Reveal.tsx","../src/components/editorial/PanelGrid.tsx","../src/components/editorial/PullQuote.tsx","../src/components/editorial/ArticleList.tsx","../src/components/editorial/Bands.tsx"],"names":["jsx","Fragment","useMemo","jsxs","cn","useEditorialTone","formatIndex","EditorialToneContext","Check","useRef","useState","useEffect","ArrowUpRight","BlockLink","COLS","BlockImage"],"mappings":"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","file":"chunk-O4EQYPLO.cjs","sourcesContent":["import type { ReactNode } from 'react'\n\nexport interface CollectionDetailContext<T> {\n previous?: T\n next?: T\n}\n\nexport interface CollectionDetailProps<T> {\n /** The collection, supplied by the host (CMS, files, API...). */\n items: T[]\n /** The slug from the host's route. Absent: the list is rendered. */\n slug?: string\n getSlug: (item: T) => string\n renderList: (items: T[]) => ReactNode\n /** One item's page. `previous` / `next` are the neighbours in `items` order. */\n renderDetail: (item: T, context: CollectionDetailContext<T>) => ReactNode\n /** Shown when `slug` matches nothing. */\n renderNotFound?: (slug: string) => ReactNode\n}\n\n/**\n * The list-and-detail page contract for a collection (people, articles, services...). It owns\n * only the slug lookup; the host owns the route, the data and every pixel of both views, so one\n * route (`/things/:slug?`) serves the list and each detail page.\n */\nexport function CollectionDetail<T>({\n items,\n slug,\n getSlug,\n renderList,\n renderDetail,\n renderNotFound,\n}: CollectionDetailProps<T>) {\n if (!slug) return <>{renderList(items)}</>\n const index = items.findIndex((item) => getSlug(item) === slug)\n if (index === -1) {\n return (\n <>\n {renderNotFound ? (\n renderNotFound(slug)\n ) : (\n <p role=\"status\" data-slot=\"collection-not-found\">\n Not found\n </p>\n )}\n </>\n )\n }\n return <>{renderDetail(items[index], { previous: items[index - 1], next: items[index + 1] })}</>\n}\n","import { useMemo } from 'react'\nimport { cn } from '@arbidocs/react/ui'\n\nexport interface ChartSeries {\n key: string\n /** Legend text (defaults to `key`). */\n label?: string\n /** One value per entry of `labels`. */\n values: number[]\n}\n\nexport interface ChartProps {\n type: 'bar' | 'line' | 'pie'\n /** Category (x) labels. For `pie` they name the slices of the first series. */\n labels: string[]\n series: ChartSeries[]\n /** Accessible description of the whole chart. */\n ariaLabel: string\n /** Formats values in axis ticks and slice titles. */\n formatValue?: (value: number) => string\n /** Hide the legend. */\n hideLegend?: boolean\n emptyLabel?: string\n /**\n * Longest category label drawn on the x axis, in characters; longer labels are cut with an\n * ellipsis and carry the full text as a `<title>`. Default: what fits the band (about 5px a\n * character), at least 3.\n */\n maxLabelChars?: number\n className?: string\n testId?: string\n}\n\nconst W = 440\nconst H = 160\nconst PAD = { top: 8, right: 8, bottom: 22, left: 40 }\n\n/** Series colours come from the `--chart-1..5` theme tokens, so charts follow the host theme. */\nconst color = (i: number) => `hsl(var(--chart-${(i % 5) + 1}))`\n\n/** Cut `label` to `max` characters with an ellipsis (the full text stays in a `<title>`). */\nexport function truncateLabel(label: string, max: number): string {\n const chars = Array.from(label)\n return chars.length <= max\n ? label\n : `${chars\n .slice(0, Math.max(1, max - 1))\n .join('')\n .trimEnd()}…`\n}\n\nconst defaultFormat = (v: number) => (v >= 1000 ? `${Math.round(v / 100) / 10}k` : String(v))\n\nfunction polar(cx: number, cy: number, r: number, angle: number): [number, number] {\n return [cx + r * Math.sin(angle), cy - r * Math.cos(angle)]\n}\n\n/**\n * Data-bound bar, line or pie chart in plain SVG. No chart library: it renders from props,\n * is themed by tokens and carries a text alternative (`ariaLabel`, slice and bar `<title>`s).\n */\nexport function Chart({\n type,\n labels,\n series,\n ariaLabel,\n formatValue = defaultFormat,\n hideLegend = false,\n emptyLabel = 'No data',\n maxLabelChars,\n className,\n testId,\n}: ChartProps) {\n const max = useMemo(() => Math.max(...series.flatMap((s) => s.values), 1), [series])\n if (!labels.length || !series.length) {\n return <p className=\"text-sm text-muted-foreground\">{emptyLabel}</p>\n }\n\n const legendItems =\n type === 'pie'\n ? labels.map((label, i) => ({ label, color: color(i) }))\n : series.map((s, i) => ({ label: s.label ?? s.key, color: color(i) }))\n\n let body\n if (type === 'pie') {\n const values = series[0].values\n const total = values.reduce((a, b) => a + Math.max(b, 0), 0)\n const cx = 80\n const cy = 80\n const r = 72\n let angle = 0\n body = (\n <svg viewBox=\"0 0 160 160\" className=\"mx-auto h-40 w-40\" role=\"img\" aria-label={ariaLabel}>\n {total > 0 &&\n values.map((v, i) => {\n const sweep = (Math.max(v, 0) / total) * Math.PI * 2\n if (sweep === 0) return null\n const title = `${labels[i]}: ${formatValue(v)}`\n if (sweep >= Math.PI * 2 - 1e-6) {\n return (\n <circle key={i} cx={cx} cy={cy} r={r} fill={color(i)}>\n <title>{title}</title>\n </circle>\n )\n }\n const [x1, y1] = polar(cx, cy, r, angle)\n const [x2, y2] = polar(cx, cy, r, angle + sweep)\n const d = `M${cx},${cy} L${x1},${y1} A${r},${r} 0 ${sweep > Math.PI ? 1 : 0} 1 ${x2},${y2} Z`\n angle += sweep\n return (\n <path key={i} d={d} fill={color(i)}>\n <title>{title}</title>\n </path>\n )\n })}\n </svg>\n )\n } else {\n const plotW = W - PAD.left - PAD.right\n const plotH = H - PAD.top - PAD.bottom\n const y = (v: number) => PAD.top + plotH - (v / max) * plotH\n const band = plotW / labels.length\n const xCenter = (i: number) => PAD.left + band * i + band / 2\n const maxChars = maxLabelChars ?? Math.max(3, Math.floor((band - 4) / 5))\n body = (\n <svg viewBox={`0 0 ${W} ${H}`} className=\"h-auto w-full\" role=\"img\" aria-label={ariaLabel}>\n {[0, max / 2, max].map((v) => (\n <g key={v}>\n <line\n x1={PAD.left}\n x2={W - PAD.right}\n y1={y(v)}\n y2={y(v)}\n className=\"stroke-border\"\n strokeDasharray=\"2,2\"\n />\n <text\n x={PAD.left - 4}\n y={y(v) + 3}\n textAnchor=\"end\"\n className=\"fill-muted-foreground text-[9px]\"\n >\n {formatValue(v)}\n </text>\n </g>\n ))}\n {labels.map((label, i) => (\n <text\n key={i}\n x={xCenter(i)}\n y={H - 6}\n textAnchor=\"middle\"\n className=\"fill-muted-foreground text-[9px]\"\n >\n {truncateLabel(label, maxChars)}\n {Array.from(label).length > maxChars && <title>{label}</title>}\n </text>\n ))}\n {type === 'bar' &&\n series.map((s, si) => {\n const barW = (band * 0.7) / series.length\n return s.values.map((v, i) => (\n <rect\n key={`${s.key}-${i}`}\n x={xCenter(i) - (band * 0.7) / 2 + si * barW}\n y={y(v)}\n width={barW}\n height={PAD.top + plotH - y(v)}\n fill={color(si)}\n rx={1.5}\n >\n <title>{`${labels[i]} ${s.label ?? s.key}: ${formatValue(v)}`}</title>\n </rect>\n ))\n })}\n {type === 'line' &&\n series.map((s, si) => (\n <g key={s.key}>\n <polyline\n fill=\"none\"\n stroke={color(si)}\n strokeWidth={2}\n points={s.values.map((v, i) => `${xCenter(i)},${y(v)}`).join(' ')}\n />\n {s.values.map((v, i) => (\n <circle key={i} cx={xCenter(i)} cy={y(v)} r={2.5} fill={color(si)}>\n <title>{`${labels[i]} ${s.label ?? s.key}: ${formatValue(v)}`}</title>\n </circle>\n ))}\n </g>\n ))}\n </svg>\n )\n }\n\n return (\n <figure\n className={cn('flex min-w-0 max-w-full flex-col gap-2', className)}\n data-slot=\"chart\"\n data-type={type}\n data-testid={testId}\n >\n {body}\n {!hideLegend && (\n <figcaption className=\"flex flex-wrap justify-center gap-x-4 gap-y-1 text-xs text-muted-foreground\">\n {legendItems.map((item) => (\n <span key={item.label} className=\"inline-flex items-center gap-1.5\">\n <span\n aria-hidden=\"true\"\n className=\"inline-block size-2 rounded-full\"\n style={{ background: item.color }}\n />\n {item.label}\n </span>\n ))}\n </figcaption>\n )}\n </figure>\n )\n}\n","import type { ReactNode } from 'react'\nimport { cn } from '@arbidocs/react/ui'\nimport { formatIndex, useEditorialTone, type EditorialTone } from './tone'\n\nexport interface EyebrowProps {\n children: ReactNode\n /** A number or label before the text: `1` renders `01`. */\n index?: number | string\n /** A short accent rule before the text. */\n rule?: boolean\n tone?: EditorialTone\n className?: string\n testId?: string\n}\n\n/** Small uppercase label above a heading: optional index and accent rule. */\nexport function Eyebrow({ children, index, rule = false, tone, className, testId }: EyebrowProps) {\n const t = useEditorialTone(tone)\n return (\n <p\n className={cn(\n 'flex items-center gap-3 text-xs font-semibold uppercase tracking-wider',\n t.subtle,\n className\n )}\n data-slot=\"eyebrow\"\n data-testid={testId}\n >\n {rule && <span aria-hidden=\"true\" className=\"h-px w-8 shrink-0 bg-primary\" />}\n {index !== undefined && (\n <span className={cn('tabular-nums', t.accent)}>{formatIndex(index)}</span>\n )}\n <span>{children}</span>\n </p>\n )\n}\n","import type { ReactNode } from 'react'\nimport { cn } from '@arbidocs/react/ui'\nimport { Eyebrow } from './Eyebrow'\nimport { useEditorialTone, type EditorialTone } from './tone'\n\nexport interface EditorialHeadingProps {\n eyebrow?: ReactNode\n /** Section number or label shown with the eyebrow. */\n index?: number | string\n title: ReactNode\n lead?: ReactNode\n /** Heading element level (default 2). */\n level?: 1 | 2 | 3\n align?: 'start' | 'center'\n tone?: EditorialTone\n className?: string\n testId?: string\n}\n\n/** Section heading: numbered or labelled eyebrow, display title and lead. */\nexport function EditorialHeading({\n eyebrow,\n index,\n title,\n lead,\n level = 2,\n align = 'start',\n tone,\n className,\n testId,\n}: EditorialHeadingProps) {\n const t = useEditorialTone(tone)\n const Heading = `h${level}` as 'h1' | 'h2' | 'h3'\n return (\n <div\n className={cn('max-w-3xl', align === 'center' && 'mx-auto text-center', className)}\n data-slot=\"editorial-heading\"\n data-testid={testId}\n >\n {(eyebrow || index !== undefined) && (\n <Eyebrow\n index={index}\n tone={tone}\n className={cn('mb-4', align === 'center' && 'justify-center')}\n >\n {eyebrow}\n </Eyebrow>\n )}\n <Heading\n className={cn(\n 'font-display text-3xl font-semibold tracking-tight text-balance sm:text-4xl',\n t.text\n )}\n >\n {title}\n </Heading>\n {lead && <p className={cn('mt-4 text-lg leading-relaxed', t.muted)}>{lead}</p>}\n </div>\n )\n}\n","import type { ReactNode } from 'react'\nimport { cn } from '@arbidocs/react/ui'\nimport { Eyebrow } from './Eyebrow'\nimport { EditorialToneContext, useEditorialTone, type EditorialTone } from './tone'\n\nexport type EditorialSurface = 'plain' | 'muted' | 'inverse'\n\nexport interface EditorialHeroTestIds {\n root: string\n eyebrow: string\n title: string\n lede: string\n actions: string\n aside: string\n}\n\nexport interface EditorialHeroProps {\n eyebrow?: ReactNode\n /** Show the accent rule before the eyebrow. */\n eyebrowRule?: boolean\n /** The headline: text or any node. */\n title: ReactNode\n /** A phrase inside a string `title` set in the italic accent. */\n emphasis?: string\n /** The paragraph under the headline. */\n lede?: ReactNode\n /** Buttons or links under the lede. */\n actions?: ReactNode\n /** Anything under the actions (badges, a trust line). */\n footer?: ReactNode\n /** The figure beside (below on phones) the copy: an image frame, a card, a media slot. */\n aside?: ReactNode\n /** Decoration behind the copy (texture, wash, background image). Hidden from assistive tech. */\n backdrop?: ReactNode\n /** `start` copy, or `center` (no aside). */\n align?: 'start' | 'center'\n /** `page`: a page-opening header band. `cover`: the larger home-page hero. */\n size?: 'page' | 'cover'\n surface?: EditorialSurface\n className?: string\n testId?: string\n testIds?: Partial<EditorialHeroTestIds>\n}\n\nexport const SURFACE_CLASS: Record<EditorialSurface, string> = {\n plain: 'bg-background text-foreground',\n muted: 'bg-muted text-foreground',\n inverse: 'bg-foreground text-background',\n}\n\nexport const SURFACE_TONE: Record<EditorialSurface, EditorialTone> = {\n plain: 'default',\n muted: 'default',\n inverse: 'inverse',\n}\n\nfunction renderTitle(title: ReactNode, emphasis?: string): ReactNode {\n if (typeof title !== 'string' || !emphasis || !title.includes(emphasis)) return title\n const parts = title.split(emphasis)\n return parts.map((part, i) => (\n <span key={i}>\n {part}\n {i < parts.length - 1 && <em className=\"italic text-primary\">{emphasis}</em>}\n </span>\n ))\n}\n\n/**\n * Editorial opening band: eyebrow, display headline with an italic accent phrase, lede, actions\n * and an optional aside (image, card). Covers a page header (no aside, `size=\"page\"`), a split\n * hero (aside) and a centred landing hero (`align=\"center\"`, `size=\"cover\"`).\n */\nexport function EditorialHero({\n eyebrow,\n eyebrowRule = false,\n title,\n emphasis,\n lede,\n actions,\n footer,\n aside,\n backdrop,\n align = 'start',\n size = 'page',\n surface = 'plain',\n className,\n testId,\n testIds,\n}: EditorialHeroProps) {\n const tone = SURFACE_TONE[surface]\n const t = useEditorialTone(tone)\n const centered = align === 'center' && !aside\n const ids = {\n root: testIds?.root ?? testId,\n eyebrow: testIds?.eyebrow ?? (testId ? `${testId}-eyebrow` : undefined),\n title: testIds?.title ?? (testId ? `${testId}-title` : undefined),\n lede: testIds?.lede ?? (testId ? `${testId}-lede` : undefined),\n actions: testIds?.actions ?? (testId ? `${testId}-actions` : undefined),\n aside: testIds?.aside ?? (testId ? `${testId}-aside` : undefined),\n }\n return (\n <EditorialToneContext.Provider value={tone}>\n <section\n className={cn('relative isolate overflow-hidden', SURFACE_CLASS[surface], className)}\n data-slot=\"editorial-hero\"\n data-size={size}\n data-testid={ids.root}\n >\n {backdrop && (\n <div aria-hidden=\"true\" className=\"pointer-events-none absolute inset-0 -z-10\">\n {backdrop}\n </div>\n )}\n <div\n className={cn(\n 'mx-auto max-w-7xl px-5 lg:px-8',\n size === 'cover' ? 'py-16 lg:py-28' : 'py-14 lg:py-24',\n aside && 'grid items-center gap-12 lg:grid-cols-[1.02fr_0.98fr] lg:gap-14'\n )}\n >\n <div className={cn('max-w-3xl', centered && 'mx-auto text-center')}>\n {eyebrow && (\n <Eyebrow\n rule={eyebrowRule}\n tone={tone}\n className={cn('mb-6', centered && 'justify-center')}\n testId={ids.eyebrow}\n >\n {eyebrow}\n </Eyebrow>\n )}\n <h1\n className={cn(\n 'font-display font-semibold tracking-tight text-balance',\n size === 'cover'\n ? 'text-[2.6rem] leading-[1.03] sm:text-6xl lg:text-[4.4rem]'\n : 'text-4xl leading-[1.05] sm:text-5xl',\n t.text\n )}\n data-testid={ids.title}\n >\n {renderTitle(title, emphasis)}\n </h1>\n {lede && (\n <p\n className={cn(\n 'mt-6 max-w-2xl text-lg leading-relaxed',\n centered && 'mx-auto',\n t.muted\n )}\n data-testid={ids.lede}\n >\n {lede}\n </p>\n )}\n {actions && (\n <div\n className={cn(\n 'mt-8 flex flex-col gap-3 sm:flex-row',\n centered && 'sm:justify-center'\n )}\n data-testid={ids.actions}\n >\n {actions}\n </div>\n )}\n {footer && (\n <div className={cn('mt-8', centered && 'flex justify-center')}>{footer}</div>\n )}\n </div>\n {aside && (\n <div\n className=\"relative min-w-0\"\n data-slot=\"editorial-hero-aside\"\n data-testid={ids.aside}\n >\n {aside}\n </div>\n )}\n </div>\n </section>\n </EditorialToneContext.Provider>\n )\n}\n","import type { ReactNode } from 'react'\nimport { cn } from '@arbidocs/react/ui'\nimport { EditorialHeading } from './EditorialHeading'\nimport { SURFACE_CLASS, SURFACE_TONE, type EditorialSurface } from './EditorialHero'\nimport { EditorialToneContext, useEditorialTone } from './tone'\n\nexport interface EditorialSectionProps {\n id?: string\n eyebrow?: ReactNode\n /** Section number or label: `1` renders `01`. */\n index?: number | string\n title?: ReactNode\n lead?: ReactNode\n /** Sits beside the heading from `sm` up (a \"see all\" link or button). */\n action?: ReactNode\n /**\n * `stacked`: heading above the content. `split`: heading column beside the content from `lg`.\n * `split-wide`: the same with a wider content column.\n */\n layout?: 'stacked' | 'split' | 'split-wide'\n /** `plain`, `muted` (tinted band) or `inverse` (dark band on a light theme). */\n surface?: EditorialSurface\n /** Hairline above and below the band. */\n bordered?: boolean\n /** Vertical rhythm. */\n spacing?: 'md' | 'lg'\n /** Backdrop behind the content (texture, image), hidden from assistive tech. */\n backdrop?: ReactNode\n /** Accessible name when there is no `title`. */\n 'aria-label'?: string\n children?: ReactNode\n className?: string\n testId?: string\n}\n\n/**\n * A page band: numbered or labelled heading, optional action, and content stacked below or in a\n * second column. Sets the tone for the parts inside it, so the same list or panel grid reads on\n * a plain, tinted or inverse band.\n */\nexport function EditorialSection({\n id,\n eyebrow,\n index,\n title,\n lead,\n action,\n layout = 'stacked',\n surface = 'plain',\n bordered = false,\n spacing = 'lg',\n backdrop,\n 'aria-label': ariaLabel,\n children,\n className,\n testId,\n}: EditorialSectionProps) {\n const tone = SURFACE_TONE[surface]\n const t = useEditorialTone(tone)\n const hasHeading = Boolean(title || eyebrow || index !== undefined)\n const heading =\n hasHeading && title ? (\n <EditorialHeading eyebrow={eyebrow} index={index} title={title} lead={lead} tone={tone} />\n ) : null\n const split = layout !== 'stacked'\n return (\n <EditorialToneContext.Provider value={tone}>\n <section\n id={id}\n aria-label={title ? undefined : ariaLabel}\n className={cn(\n 'relative isolate overflow-hidden scroll-mt-24',\n SURFACE_CLASS[surface],\n bordered && cn('border-y', t.hairline),\n className\n )}\n data-slot=\"editorial-section\"\n data-testid={testId}\n >\n {backdrop && (\n <div aria-hidden=\"true\" className=\"pointer-events-none absolute inset-0 -z-10\">\n {backdrop}\n </div>\n )}\n <div\n className={cn(\n 'mx-auto max-w-7xl px-5 lg:px-8',\n spacing === 'lg' ? 'py-16 lg:py-24' : 'py-12 lg:py-16',\n split &&\n cn(\n 'grid gap-10 lg:gap-16',\n layout === 'split-wide' ? 'lg:grid-cols-[1fr_1.4fr]' : 'lg:grid-cols-2'\n )\n )}\n >\n {split ? (\n <>\n {heading && <div>{heading}</div>}\n <div className=\"min-w-0\">{children}</div>\n </>\n ) : (\n <>\n {heading && (\n <div className=\"flex flex-col justify-between gap-6 sm:flex-row sm:items-end\">\n {heading}\n {action && <div className=\"shrink-0\">{action}</div>}\n </div>\n )}\n {children && <div className={cn(heading && 'mt-12 lg:mt-14')}>{children}</div>}\n </>\n )}\n </div>\n </section>\n </EditorialToneContext.Provider>\n )\n}\n\nexport interface EditorialProseProps {\n /** One entry per paragraph. */\n paragraphs: ReactNode[]\n /** Two columns from `md` up (paragraphs never split across columns). */\n columns?: 1 | 2\n size?: 'base' | 'lg'\n className?: string\n testId?: string\n}\n\n/** Long-form paragraphs set at a readable measure, in one or two columns. */\nexport function EditorialProse({\n paragraphs,\n columns = 1,\n size = 'base',\n className,\n testId,\n}: EditorialProseProps) {\n const t = useEditorialTone()\n return (\n <div\n className={cn(\n size === 'lg' ? 'text-lg' : 'text-base',\n 'leading-relaxed',\n t.muted,\n columns === 2 ? 'gap-10 md:columns-2' : 'max-w-prose',\n className\n )}\n data-slot=\"editorial-prose\"\n data-testid={testId}\n >\n {paragraphs.map((p, i) => (\n <p key={i} className={cn(columns === 2 ? 'mb-5 break-inside-avoid' : 'mt-5 first:mt-0')}>\n {p}\n </p>\n ))}\n </div>\n )\n}\n","import type { ReactNode } from 'react'\nimport { Check } from 'lucide-react'\nimport { cn } from '@arbidocs/react/ui'\nimport { useEditorialTone } from './tone'\n\nexport interface DefinitionItem {\n term: ReactNode\n description: ReactNode\n /** A leading icon; without one the `dot` marker is used when `marker=\"dot\"`. */\n icon?: ReactNode\n testId?: string\n}\n\nexport interface DefinitionListProps {\n items: DefinitionItem[]\n /**\n * `rows`: each entry is a lifted row with a marker. `ruled`: a spec sheet, term and description\n * side by side between hairlines.\n */\n layout?: 'rows' | 'ruled'\n /** Marker of an entry with no `icon` in the `rows` layout. */\n marker?: 'dot' | 'none'\n className?: string\n testId?: string\n}\n\n/** Term and description pairs (`<dl>`): feature rows, a spec sheet, a definition list. */\nexport function DefinitionList({\n items,\n layout = 'rows',\n marker = 'dot',\n className,\n testId,\n}: DefinitionListProps) {\n const t = useEditorialTone()\n return (\n <dl\n className={cn(layout === 'rows' ? 'space-y-3' : 'divide-y', t.hairline, className)}\n data-slot=\"definition-list\"\n data-layout={layout}\n data-testid={testId}\n >\n {items.map((item, i) =>\n layout === 'rows' ? (\n <div\n key={i}\n className={cn(\n 'flex gap-4 rounded-sm border p-5 transition-colors',\n t.panel,\n t.panelHover\n )}\n data-testid={item.testId ?? (testId ? `${testId}-item-${i}` : undefined)}\n >\n {item.icon ? (\n <span\n className={cn(\n 'flex size-9 shrink-0 items-center justify-center rounded-sm border',\n t.tile\n )}\n aria-hidden=\"true\"\n >\n {item.icon}\n </span>\n ) : (\n marker === 'dot' && (\n <span aria-hidden=\"true\" className=\"mt-2 size-2 shrink-0 rounded-full bg-primary\" />\n )\n )}\n <div className=\"min-w-0\">\n <dt className=\"font-medium\">{item.term}</dt>\n <dd className={cn('mt-0.5 text-sm', t.muted)}>{item.description}</dd>\n </div>\n </div>\n ) : (\n <div\n key={i}\n className=\"grid gap-1 py-4 sm:grid-cols-[minmax(0,1fr)_minmax(0,2fr)] sm:gap-8\"\n data-testid={item.testId ?? (testId ? `${testId}-item-${i}` : undefined)}\n >\n <dt className=\"font-medium\">{item.term}</dt>\n <dd className={cn('text-sm leading-relaxed', t.muted)}>{item.description}</dd>\n </div>\n )\n )}\n </dl>\n )\n}\n\nexport interface CheckListProps {\n items: ReactNode[]\n /** Two columns from `sm` up. */\n columns?: 1 | 2\n /** Replaces the check mark. */\n icon?: ReactNode\n className?: string\n testId?: string\n}\n\n/** A list of points, each with a ringed check mark. */\nexport function CheckList({ items, columns = 1, icon, className, testId }: CheckListProps) {\n const t = useEditorialTone()\n return (\n <ul\n className={cn(columns === 2 ? 'grid gap-4 sm:grid-cols-2' : 'space-y-3', className)}\n data-slot=\"check-list\"\n data-testid={testId}\n >\n {items.map((item, i) => (\n <li\n key={i}\n className={cn('flex items-start gap-3 text-sm leading-relaxed', t.muted)}\n data-testid={testId ? `${testId}-item-${i}` : undefined}\n >\n <span\n aria-hidden=\"true\"\n className={cn(\n 'mt-0.5 flex size-5 shrink-0 items-center justify-center rounded-full border',\n t.tile\n )}\n >\n {icon ?? <Check className=\"size-3\" />}\n </span>\n <span>{item}</span>\n </li>\n ))}\n </ul>\n )\n}\n\nexport interface TagListProps {\n items: string[]\n /** Accessible name of the list. */\n label?: string\n className?: string\n testId?: string\n}\n\n/** Small bordered chips: sectors, focus areas, topics. */\nexport function TagList({ items, label, className, testId }: TagListProps) {\n const t = useEditorialTone()\n if (items.length === 0) return null\n return (\n <ul\n aria-label={label}\n className={cn('flex flex-wrap gap-1.5', className)}\n data-slot=\"tag-list\"\n data-testid={testId}\n >\n {items.map((tag) => (\n <li key={tag} className={cn('rounded-sm border px-2 py-0.5 text-[11px]', t.chip)}>\n {tag}\n </li>\n ))}\n </ul>\n )\n}\n","import { useEffect, useRef, useState, type CSSProperties, type ReactNode } from 'react'\nimport { cn } from '@arbidocs/react/ui'\n\nexport interface RevealProps {\n children: ReactNode\n /** Delay in ms before the reveal starts (stagger siblings with `index * 90`). */\n delay?: number\n className?: string\n testId?: string\n}\n\n/**\n * Fade-and-rise on first scroll into view. Content is fully visible until the part has mounted\n * and found an `IntersectionObserver`, so server rendering, no-JS and jsdom show everything; the\n * hidden state and transition live in `blocks.css` (`[data-reveal]`) and collapse under\n * `prefers-reduced-motion`.\n */\nexport function Reveal({ children, delay = 0, className, testId }: RevealProps) {\n const ref = useRef<HTMLDivElement>(null)\n const [state, setState] = useState<'idle' | 'pending' | 'shown'>('idle')\n\n useEffect(() => {\n const el = ref.current\n if (!el || typeof IntersectionObserver === 'undefined') return\n setState('pending')\n const io = new IntersectionObserver(\n (entries) => {\n if (entries.some((e) => e.isIntersecting)) {\n setState('shown')\n io.disconnect()\n }\n },\n { rootMargin: '0px 0px -90px 0px' }\n )\n io.observe(el)\n return () => io.disconnect()\n }, [])\n\n return (\n <div\n ref={ref}\n data-slot=\"reveal\"\n data-reveal={state === 'idle' ? undefined : state}\n style={delay ? ({ '--reveal-delay': `${delay}ms` } as CSSProperties) : undefined}\n className={cn(className)}\n data-testid={testId}\n >\n {children}\n </div>\n )\n}\n","import type { ReactNode } from 'react'\nimport { ArrowUpRight } from 'lucide-react'\nimport { cn } from '@arbidocs/react/ui'\nimport { BlockLink, type BlockLinkComponent } from '../blockLink'\nimport { CheckList, TagList } from './lists'\nimport { Reveal } from './Reveal'\nimport { EditorialToneContext, formatIndex, useEditorialTone, type EditorialTone } from './tone'\n\nexport interface PanelItem {\n title: ReactNode\n body?: ReactNode\n /** Icon in a bordered tile. */\n icon?: ReactNode\n /** Explicit number or label; with `numbered` on the grid it defaults to the position. */\n index?: number | string\n /** A small label above the title (category). */\n kicker?: ReactNode\n /** Bulleted points under the body. */\n points?: ReactNode[]\n /** Chips at the foot. */\n tags?: string[]\n /** Anything at the foot (a meta line, a link). */\n footer?: ReactNode\n /** Makes the whole panel a link. */\n href?: string\n testId?: string\n}\n\nexport interface PanelGridProps {\n items: PanelItem[]\n columns?: 2 | 3 | 4\n /** `cards`: separate bordered panels. `joined`: one hairline-ruled table of cells. */\n variant?: 'cards' | 'joined'\n /** Number the panels 01, 02, ... */\n numbered?: boolean\n /** Fade each panel in on scroll, staggered. */\n reveal?: boolean\n /** Router link for panels with an `href`. */\n linkComponent?: BlockLinkComponent\n /** Heading level of the panel titles (default 3). */\n headingLevel?: 2 | 3 | 4\n tone?: EditorialTone\n className?: string\n testId?: string\n}\n\nconst COLS: Record<2 | 3 | 4, string> = {\n 2: 'sm:grid-cols-2',\n 3: 'sm:grid-cols-2 lg:grid-cols-3',\n 4: 'sm:grid-cols-2 lg:grid-cols-4',\n}\n\n/**\n * Icon, title and body panels: principles, process steps, capability cards, security pillars,\n * practice areas. Cards or a joined hairline table, optional numbers, bullet points, chips and\n * a link per panel.\n */\nexport function PanelGrid({\n items,\n columns = 3,\n variant = 'cards',\n numbered = false,\n reveal = false,\n linkComponent,\n headingLevel = 3,\n tone,\n className,\n testId,\n}: PanelGridProps) {\n const t = useEditorialTone(tone)\n const Heading = `h${headingLevel}` as 'h2' | 'h3' | 'h4'\n const joined = variant === 'joined'\n return (\n <EditorialToneContext.Provider value={t.tone}>\n <ul\n className={cn(\n 'grid',\n joined ? cn('gap-px overflow-hidden rounded-sm border', t.hairline) : 'gap-4',\n joined && (t.tone === 'inverse' ? 'bg-background/15' : 'bg-border'),\n COLS[columns] ?? COLS[3],\n className\n )}\n data-slot=\"panel-grid\"\n data-variant={variant}\n data-testid={testId}\n >\n {items.map((item, i) => {\n const number = item.index ?? (numbered ? i + 1 : undefined)\n const inner = (\n <div\n className={cn(\n 'group flex h-full flex-col p-6 transition-colors duration-300',\n joined\n ? cn(\n t.tone === 'inverse' ? 'bg-foreground' : 'bg-background',\n item.href && 'hover:bg-muted/40'\n )\n : cn('rounded-sm border', t.panel, item.href && t.panelHover)\n )}\n data-testid={item.testId ?? (testId ? `${testId}-item-${i}` : undefined)}\n >\n {(item.icon || number !== undefined || item.href) && (\n <div className=\"flex items-start justify-between gap-4\">\n {item.icon ? (\n <span\n aria-hidden=\"true\"\n className={cn(\n 'flex size-11 items-center justify-center rounded-sm border',\n t.tile\n )}\n >\n {item.icon}\n </span>\n ) : (\n <span />\n )}\n {number !== undefined ? (\n <span className={cn('font-display text-sm tabular-nums', t.subtle)}>\n {formatIndex(number)}\n </span>\n ) : (\n item.href && (\n <ArrowUpRight\n aria-hidden=\"true\"\n className={cn(\n 'size-4 transition-colors group-hover:text-primary',\n t.subtle\n )}\n />\n )\n )}\n </div>\n )}\n {item.kicker && (\n <p\n className={cn(\n 'text-xs font-semibold uppercase tracking-wider',\n item.icon || number !== undefined ? 'mt-5' : '',\n t.accent\n )}\n >\n {item.kicker}\n </p>\n )}\n <Heading\n className={cn(\n 'font-display text-lg font-semibold leading-snug',\n item.icon || number !== undefined || item.kicker ? 'mt-4' : '',\n t.text\n )}\n >\n {item.title}\n </Heading>\n {item.body && (\n <div className={cn('mt-2 text-sm leading-relaxed', t.muted)}>{item.body}</div>\n )}\n {item.points && item.points.length > 0 && (\n <CheckList\n items={item.points}\n className={cn('mt-4 space-y-2 border-t pt-4', t.hairline)}\n />\n )}\n {item.tags && item.tags.length > 0 && (\n <TagList items={item.tags} className=\"mt-auto pt-5\" />\n )}\n {item.footer && (\n <div className={cn('mt-auto pt-5 text-xs', t.subtle)}>{item.footer}</div>\n )}\n </div>\n )\n const cell = (\n <BlockLink href={item.href} linkComponent={linkComponent} className=\"block h-full\">\n {inner}\n </BlockLink>\n )\n return (\n <li key={i} className=\"min-w-0\">\n {reveal ? (\n <Reveal delay={i * 90} className=\"h-full\">\n {cell}\n </Reveal>\n ) : (\n cell\n )}\n </li>\n )\n })}\n </ul>\n </EditorialToneContext.Provider>\n )\n}\n","import type { ReactNode } from 'react'\nimport { cn } from '@arbidocs/react/ui'\nimport { useEditorialTone } from './tone'\n\nexport interface PullQuoteProps {\n quote: ReactNode\n /** Who said it. */\n attribution?: { name: ReactNode; role?: ReactNode }\n /** Link to the source. */\n cite?: string\n align?: 'start' | 'center'\n size?: 'md' | 'lg'\n className?: string\n testId?: string\n}\n\n/** A large display quotation with an accent rule and attribution. */\nexport function PullQuote({\n quote,\n attribution,\n cite,\n align = 'start',\n size = 'md',\n className,\n testId,\n}: PullQuoteProps) {\n const t = useEditorialTone()\n const centered = align === 'center'\n return (\n <figure\n className={cn(\n 'max-w-3xl',\n centered ? 'mx-auto text-center' : 'border-l-2 border-primary pl-6 lg:pl-8',\n className\n )}\n data-slot=\"pull-quote\"\n data-testid={testId}\n >\n <blockquote\n cite={cite}\n className={cn(\n 'font-display font-medium leading-snug text-balance',\n size === 'lg' ? 'text-3xl sm:text-4xl' : 'text-2xl sm:text-3xl',\n t.text\n )}\n >\n <p>{quote}</p>\n </blockquote>\n {attribution && (\n <figcaption className={cn('mt-5 text-sm', t.muted)}>\n <span className={cn('font-semibold', t.text)}>{attribution.name}</span>\n {attribution.role && <span>, {attribution.role}</span>}\n </figcaption>\n )}\n </figure>\n )\n}\n","import type { ReactNode } from 'react'\nimport { ArrowUpRight } from 'lucide-react'\nimport { cn } from '@arbidocs/react/ui'\nimport { BlockImage } from '../BlockImage'\nimport { BlockLink, type BlockLinkComponent } from '../blockLink'\nimport { useEditorialTone } from './tone'\n\nexport interface ArticleItem {\n title: ReactNode\n summary?: ReactNode\n /** Category or type, shown as an accent label. */\n kicker?: ReactNode\n /** Short facts joined with a middle dot: author, date, reading time. */\n meta?: ReactNode[]\n href?: string\n imageUrl?: string\n imageAlt?: string\n testId?: string\n}\n\nexport interface ArticleListProps {\n items: ArticleItem[]\n /**\n * `cards`: a grid of cards. `rows`: ruled rows (kicker and meta beside the title), best for an\n * archive.\n */\n layout?: 'cards' | 'rows'\n /** `cards` only: the first item is a large card beside a column of the rest from `lg`. */\n featureFirst?: boolean\n columns?: 2 | 3\n linkComponent?: BlockLinkComponent\n /** Rendered instead of the list when `items` is empty. */\n empty?: ReactNode\n className?: string\n testId?: string\n}\n\nconst COLS: Record<2 | 3, string> = {\n 2: 'md:grid-cols-2',\n 3: 'md:grid-cols-2 lg:grid-cols-3',\n}\n\n/** Insight, news or post listing: `meta` joined with a middle dot, linked cards or rows. */\nfunction MetaLine({ meta, className }: { meta?: ReactNode[]; className?: string }) {\n if (!meta || meta.length === 0) return null\n return (\n <p className={className}>\n {meta.map((m, i) => (\n <span key={i}>\n {i > 0 && <span aria-hidden=\"true\"> · </span>}\n {m}\n </span>\n ))}\n </p>\n )\n}\n\n/** Article, insight or news items as cards (optionally with a lead card) or ruled archive rows. */\nexport function ArticleList({\n items,\n layout = 'cards',\n featureFirst = false,\n columns = 3,\n linkComponent,\n empty,\n className,\n testId,\n}: ArticleListProps) {\n const t = useEditorialTone()\n if (items.length === 0) return empty ? <>{empty}</> : null\n\n const idOf = (item: ArticleItem, i: number) =>\n item.testId ?? (testId ? `${testId}-item-${i}` : undefined)\n\n if (layout === 'rows') {\n return (\n <ul\n className={cn('divide-y border-y', t.hairline, className)}\n data-slot=\"article-list\"\n data-layout=\"rows\"\n data-testid={testId}\n >\n {items.map((item, i) => (\n <li key={i}>\n <BlockLink href={item.href} linkComponent={linkComponent} className=\"group block\">\n <article\n className=\"grid gap-2 py-6 transition-colors sm:grid-cols-[10rem_minmax(0,1fr)_auto] sm:gap-8\"\n data-testid={idOf(item, i)}\n >\n <div className=\"space-y-1\">\n {item.kicker && (\n <p className={cn('text-xs font-semibold uppercase tracking-wider', t.accent)}>\n {item.kicker}\n </p>\n )}\n <MetaLine meta={item.meta} className={cn('text-xs', t.subtle)} />\n </div>\n <div className=\"min-w-0\">\n <h3\n className={cn(\n 'font-display text-xl font-semibold leading-snug transition-colors group-hover:text-primary',\n t.text\n )}\n >\n {item.title}\n </h3>\n {item.summary && (\n <p className={cn('mt-2 text-sm leading-relaxed', t.muted)}>{item.summary}</p>\n )}\n </div>\n {item.href && (\n <ArrowUpRight\n aria-hidden=\"true\"\n className={cn(\n 'hidden size-4 transition-colors group-hover:text-primary sm:block',\n t.subtle\n )}\n />\n )}\n </article>\n </BlockLink>\n </li>\n ))}\n </ul>\n )\n }\n\n const card = (item: ArticleItem, i: number, lead: boolean) => (\n <BlockLink href={item.href} linkComponent={linkComponent} className=\"group block h-full\">\n <article\n className={cn(\n 'flex h-full flex-col rounded-sm border transition-colors duration-300',\n t.panel,\n item.href && t.panelHover,\n lead ? 'p-6 lg:p-8' : 'p-6'\n )}\n data-testid={idOf(item, i)}\n >\n {item.imageUrl && (\n <BlockImage\n src={item.imageUrl}\n alt={item.imageAlt ?? ''}\n aspect=\"16:9\"\n rounded=\"none\"\n className=\"mb-5 w-full\"\n />\n )}\n <div className=\"flex items-start justify-between gap-3\">\n {item.kicker ? (\n <p className={cn('text-xs font-semibold uppercase tracking-wider', t.accent)}>\n {item.kicker}\n </p>\n ) : (\n <span />\n )}\n {item.href && (\n <ArrowUpRight\n aria-hidden=\"true\"\n className={cn('size-4 transition-colors group-hover:text-primary', t.subtle)}\n />\n )}\n </div>\n <h3\n className={cn(\n 'mt-3 font-display font-semibold leading-snug',\n lead ? 'text-2xl sm:text-3xl' : 'text-lg',\n t.text\n )}\n >\n {item.title}\n </h3>\n {item.summary && (\n <p\n className={cn(\n 'mt-3 flex-1 text-sm leading-relaxed',\n lead && 'max-w-xl text-base',\n t.muted\n )}\n >\n {item.summary}\n </p>\n )}\n <MetaLine meta={item.meta} className={cn('mt-5 text-xs', t.subtle)} />\n </article>\n </BlockLink>\n )\n\n if (featureFirst && items.length > 1) {\n const [lead, ...rest] = items\n return (\n <div\n className={cn('grid gap-5 lg:grid-cols-[1.4fr_1fr]', className)}\n data-slot=\"article-list\"\n data-layout=\"feature\"\n data-testid={testId}\n >\n <div>{card(lead, 0, true)}</div>\n <ul className=\"grid gap-5\">\n {rest.map((item, i) => (\n <li key={i}>{card(item, i + 1, false)}</li>\n ))}\n </ul>\n </div>\n )\n }\n\n return (\n <ul\n className={cn('grid gap-5', COLS[columns] ?? COLS[3], className)}\n data-slot=\"article-list\"\n data-layout=\"cards\"\n data-testid={testId}\n >\n {items.map((item, i) => (\n <li key={i}>{card(item, i, false)}</li>\n ))}\n </ul>\n )\n}\n","import type { ReactNode } from 'react'\nimport { cn } from '@arbidocs/react/ui'\nimport { SURFACE_CLASS, SURFACE_TONE, type EditorialSurface } from './EditorialHero'\nimport { EditorialToneContext, useEditorialTone } from './tone'\n\nexport interface ProofStripProps {\n /** The lead statement (an icon and a sentence). */\n lead?: ReactNode\n /** Short labels: standards, memberships, clients. */\n items: ReactNode[]\n /** Accessible name of the label list. */\n label?: string\n surface?: EditorialSurface\n className?: string\n testId?: string\n}\n\n/** A thin band of proof points: a lead statement and a row of short uppercase labels. */\nexport function ProofStrip({\n lead,\n items,\n label,\n surface = 'muted',\n className,\n testId,\n}: ProofStripProps) {\n const tone = SURFACE_TONE[surface]\n const t = useEditorialTone(tone)\n return (\n <EditorialToneContext.Provider value={tone}>\n <section\n aria-label={label}\n className={cn('border-y', t.hairline, SURFACE_CLASS[surface], className)}\n data-slot=\"proof-strip\"\n data-testid={testId}\n >\n <div className=\"mx-auto flex max-w-7xl flex-col items-center gap-5 px-5 py-6 lg:flex-row lg:justify-between lg:px-8\">\n {lead && <div className=\"flex items-center gap-2.5 text-sm font-medium\">{lead}</div>}\n <ul className=\"flex flex-wrap items-center justify-center gap-x-6 gap-y-2\">\n {items.map((item, i) => (\n <li\n key={i}\n className={cn('text-xs font-semibold uppercase tracking-wider', t.subtle)}\n >\n {item}\n </li>\n ))}\n </ul>\n </div>\n </section>\n </EditorialToneContext.Provider>\n )\n}\n\nexport interface CtaBandProps {\n title: ReactNode\n lead?: ReactNode\n /** Buttons or links. */\n actions?: ReactNode\n /** Decoration behind the copy (image, texture), hidden from assistive tech. */\n backdrop?: ReactNode\n /** Default `inverse`: a dark closing band. */\n surface?: EditorialSurface\n className?: string\n testId?: string\n}\n\n/** Closing call-to-action band: centred heading, lead and actions over an optional backdrop. */\nexport function CtaBand({\n title,\n lead,\n actions,\n backdrop,\n surface = 'inverse',\n className,\n testId,\n}: CtaBandProps) {\n const tone = SURFACE_TONE[surface]\n const t = useEditorialTone(tone)\n return (\n <EditorialToneContext.Provider value={tone}>\n <section\n className={cn('relative isolate overflow-hidden', SURFACE_CLASS[surface], className)}\n data-slot=\"cta-band\"\n data-testid={testId}\n >\n {backdrop && (\n <div aria-hidden=\"true\" className=\"pointer-events-none absolute inset-0 -z-10\">\n {backdrop}\n </div>\n )}\n <div className=\"mx-auto max-w-4xl px-5 py-20 text-center lg:px-8 lg:py-24\">\n <h2\n className={cn(\n 'font-display text-3xl font-semibold tracking-tight text-balance sm:text-4xl',\n t.text\n )}\n >\n {title}\n </h2>\n {lead && <p className={cn('mx-auto mt-4 max-w-2xl text-lg', t.muted)}>{lead}</p>}\n {actions && (\n <div className=\"mt-8 flex flex-col items-center justify-center gap-3 sm:flex-row\">\n {actions}\n </div>\n )}\n </div>\n </section>\n </EditorialToneContext.Provider>\n )\n}\n"]}