@arbidocs/blocks 0.3.184 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +100 -0
- package/dist/agents/approvals/AuthorizeAgentParts.d.ts +79 -0
- package/dist/agents/approvals/ConsentPage.d.ts +76 -0
- package/dist/agents/approvals/ConsentParts.d.ts +37 -0
- package/dist/agents/approvals/index.d.ts +3 -0
- package/dist/agents/config/ConfigField.d.ts +43 -0
- package/dist/agents/config/ConfigForm.d.ts +35 -0
- package/dist/agents/config/TupleArrayField.d.ts +32 -0
- package/dist/agents/config/index.d.ts +4 -0
- package/dist/agents/config/schema-utils.d.ts +28 -0
- package/dist/agents/definitions/AgentCard.d.ts +63 -0
- package/dist/agents/definitions/AgentCreator.d.ts +118 -0
- package/dist/agents/definitions/AgentEditorParts.d.ts +63 -0
- package/dist/agents/definitions/AgentGallery.d.ts +29 -0
- package/dist/agents/definitions/index.d.ts +4 -0
- package/dist/agents/index.cjs +595 -0
- package/dist/agents/index.cjs.map +1 -0
- package/dist/agents/index.d.ts +7 -0
- package/dist/agents/index.js +14 -0
- package/dist/agents/index.js.map +1 -0
- package/dist/agents/runs/AgentBar.d.ts +103 -0
- package/dist/agents/runs/AgentSteps.d.ts +157 -0
- package/dist/agents/runs/SubagentRoster.d.ts +37 -0
- package/dist/agents/runs/index.d.ts +3 -0
- package/dist/agents/skills/SkillBrowserParts.d.ts +70 -0
- package/dist/agents/skills/SkillCard.d.ts +48 -0
- package/dist/agents/skills/SkillForms.d.ts +64 -0
- package/dist/agents/skills/SkillParts.d.ts +31 -0
- package/dist/agents/skills/SkillRow.d.ts +34 -0
- package/dist/agents/skills/index.d.ts +5 -0
- package/dist/agents/tasks/LiveRunsBanner.d.ts +26 -0
- package/dist/agents/tasks/RecurrenceBuilder.d.ts +36 -0
- package/dist/agents/tasks/TaskComposer.d.ts +108 -0
- package/dist/agents/tasks/TaskPlan.d.ts +78 -0
- package/dist/agents/tasks/TaskRowActions.d.ts +43 -0
- package/dist/agents/tasks/TaskRunsDialog.d.ts +45 -0
- package/dist/agents/tasks/TasksChrome.d.ts +36 -0
- package/dist/agents/tasks/UploadTaskItem.d.ts +39 -0
- package/dist/agents/tasks/UploadTaskList.d.ts +35 -0
- package/dist/agents/tasks/elapsed.d.ts +2 -0
- package/dist/agents/tasks/index.d.ts +13 -0
- package/dist/agents/tasks/rrule.d.ts +36 -0
- package/dist/agents/tasks/taskColumns.d.ts +68 -0
- package/dist/agents/tasks/taskLabels.d.ts +26 -0
- package/dist/agents/workflows/AgentSelect.d.ts +33 -0
- package/dist/agents/workflows/SchemaForm.d.ts +37 -0
- package/dist/agents/workflows/WorkflowConfigDialog.d.ts +73 -0
- package/dist/agents/workflows/WorkflowLauncher.d.ts +38 -0
- package/dist/agents/workflows/index.d.ts +6 -0
- package/dist/agents/workflows/types.d.ts +125 -0
- package/dist/agents/workflows/workflow.d.ts +62 -0
- package/dist/auth/AuthFooter.d.ts +56 -0
- package/dist/auth/AuthForm.d.ts +105 -0
- package/dist/auth/AuthLayout.d.ts +46 -0
- package/dist/auth/PasswordStrengthInput.d.ts +44 -0
- package/dist/auth/RecoveryDialogs.d.ts +90 -0
- package/dist/auth/SsoLoginButton.d.ts +19 -0
- package/dist/auth/index.cjs +123 -0
- package/dist/auth/index.cjs.map +1 -0
- package/dist/auth/index.d.ts +6 -0
- package/dist/auth/index.js +6 -0
- package/dist/auth/index.js.map +1 -0
- package/dist/builder/AgentsPanel.d.ts +9 -0
- package/dist/builder/ModuleManager.d.ts +6 -0
- package/dist/builder/VerticalBuilder.d.ts +32 -0
- package/dist/builder/agents/store.d.ts +21 -0
- package/dist/builder/export.d.ts +30 -0
- package/dist/builder/modules/registry.d.ts +11 -0
- package/dist/builder/modules/store.d.ts +29 -0
- package/dist/builder/modules/types.d.ts +29 -0
- package/dist/builder/types.d.ts +28 -0
- package/dist/chat/BranchControls.d.ts +33 -0
- package/dist/chat/Composer.d.ts +156 -0
- package/dist/chat/ContextChip.d.ts +19 -0
- package/dist/chat/ContextPanel.d.ts +108 -0
- package/dist/chat/ConversationEmpty.d.ts +53 -0
- package/dist/chat/ConversationLayout.d.ts +40 -0
- package/dist/chat/ConversationParts.d.ts +62 -0
- package/dist/chat/ConversationSearchView.d.ts +57 -0
- package/dist/chat/LabelPinRow.d.ts +30 -0
- package/dist/chat/Message.d.ts +189 -0
- package/dist/chat/MessageAlert.d.ts +25 -0
- package/dist/chat/MessageList.d.ts +102 -0
- package/dist/chat/ModelPicker.d.ts +103 -0
- package/dist/chat/PendingAnswerBar.d.ts +36 -0
- package/dist/chat/PinnedDocChip.d.ts +22 -0
- package/dist/chat/SlashMenu.d.ts +57 -0
- package/dist/chat/ThreadMap.d.ts +45 -0
- package/dist/chat/index.cjs +423 -0
- package/dist/chat/index.cjs.map +1 -0
- package/dist/chat/index.d.ts +21 -0
- package/dist/chat/index.js +6 -0
- package/dist/chat/index.js.map +1 -0
- package/dist/chat/test-id.d.ts +16 -0
- package/dist/chat/useStreamAnnouncement.d.ts +19 -0
- package/dist/chunk-223D4727.cjs +50 -0
- package/dist/chunk-223D4727.cjs.map +1 -0
- package/dist/chunk-4EZVCGRL.js +803 -0
- package/dist/chunk-4EZVCGRL.js.map +1 -0
- package/dist/chunk-54Q3RNJU.cjs +516 -0
- package/dist/chunk-54Q3RNJU.cjs.map +1 -0
- package/dist/chunk-5B4PXAKI.cjs +287 -0
- package/dist/chunk-5B4PXAKI.cjs.map +1 -0
- package/dist/chunk-5TYEJOXY.js +1762 -0
- package/dist/chunk-5TYEJOXY.js.map +1 -0
- package/dist/chunk-6ALISABK.cjs +677 -0
- package/dist/chunk-6ALISABK.cjs.map +1 -0
- package/dist/chunk-6HIPFEID.cjs +574 -0
- package/dist/chunk-6HIPFEID.cjs.map +1 -0
- package/dist/chunk-76JDDMSP.js +31 -0
- package/dist/chunk-76JDDMSP.js.map +1 -0
- package/dist/chunk-7F6CBP3Z.js +12 -0
- package/dist/chunk-7F6CBP3Z.js.map +1 -0
- package/dist/chunk-7G2LJMUG.cjs +45 -0
- package/dist/chunk-7G2LJMUG.cjs.map +1 -0
- package/dist/chunk-7G3JNSJB.cjs +1809 -0
- package/dist/chunk-7G3JNSJB.cjs.map +1 -0
- package/dist/chunk-A2YAC22G.js +93 -0
- package/dist/chunk-A2YAC22G.js.map +1 -0
- package/dist/chunk-ADOKTJHV.cjs +262 -0
- package/dist/chunk-ADOKTJHV.cjs.map +1 -0
- package/dist/chunk-AXIZ2MDV.js +751 -0
- package/dist/chunk-AXIZ2MDV.js.map +1 -0
- package/dist/chunk-AZQDNYH4.js +2865 -0
- package/dist/chunk-AZQDNYH4.js.map +1 -0
- package/dist/chunk-C54XEN5T.cjs +34 -0
- package/dist/chunk-C54XEN5T.cjs.map +1 -0
- package/dist/chunk-CQCC7LE7.js +210 -0
- package/dist/chunk-CQCC7LE7.js.map +1 -0
- package/dist/chunk-CRIKTUEU.cjs +47 -0
- package/dist/chunk-CRIKTUEU.cjs.map +1 -0
- package/dist/chunk-CTZ5745I.js +564 -0
- package/dist/chunk-CTZ5745I.js.map +1 -0
- package/dist/chunk-DPLRHEJZ.js +78 -0
- package/dist/chunk-DPLRHEJZ.js.map +1 -0
- package/dist/chunk-DVLEQURC.js +672 -0
- package/dist/chunk-DVLEQURC.js.map +1 -0
- package/dist/chunk-ELR74ME6.cjs +68 -0
- package/dist/chunk-ELR74ME6.cjs.map +1 -0
- package/dist/{chunk-DBAUZD7A.cjs → chunk-FZQJ2S6P.cjs} +244 -1123
- package/dist/chunk-FZQJ2S6P.cjs.map +1 -0
- package/dist/chunk-G3G7LZPM.cjs +205 -0
- package/dist/chunk-G3G7LZPM.cjs.map +1 -0
- package/dist/chunk-GDFWJ73C.cjs +2973 -0
- package/dist/chunk-GDFWJ73C.cjs.map +1 -0
- package/dist/chunk-ITGHMJOM.js +5528 -0
- package/dist/chunk-ITGHMJOM.js.map +1 -0
- package/dist/chunk-K4BGOPGG.js +79 -0
- package/dist/chunk-K4BGOPGG.js.map +1 -0
- package/dist/chunk-KUA3BCT2.cjs +272 -0
- package/dist/chunk-KUA3BCT2.cjs.map +1 -0
- package/dist/chunk-LGBAZD37.js +341 -0
- package/dist/chunk-LGBAZD37.js.map +1 -0
- package/dist/chunk-MHVNT4J3.cjs +15 -0
- package/dist/chunk-MHVNT4J3.cjs.map +1 -0
- package/dist/chunk-MMYCZRKT.cjs +168 -0
- package/dist/chunk-MMYCZRKT.cjs.map +1 -0
- package/dist/chunk-NBV56SGU.js +42 -0
- package/dist/chunk-NBV56SGU.js.map +1 -0
- package/dist/chunk-NPLYHR2E.js +13 -0
- package/dist/chunk-NPLYHR2E.js.map +1 -0
- package/dist/chunk-NUNKSZKU.js +203 -0
- package/dist/chunk-NUNKSZKU.js.map +1 -0
- package/dist/chunk-OB5F4577.cjs +40 -0
- package/dist/chunk-OB5F4577.cjs.map +1 -0
- package/dist/chunk-OUW6G4O2.cjs +96 -0
- package/dist/chunk-OUW6G4O2.cjs.map +1 -0
- package/dist/chunk-OVEQERPO.js +66 -0
- package/dist/chunk-OVEQERPO.js.map +1 -0
- package/dist/chunk-P6GHJSLR.js +34 -0
- package/dist/chunk-P6GHJSLR.js.map +1 -0
- package/dist/chunk-PCB2BPN3.cjs +41 -0
- package/dist/chunk-PCB2BPN3.cjs.map +1 -0
- package/dist/chunk-PPCATBOY.cjs +15 -0
- package/dist/chunk-PPCATBOY.cjs.map +1 -0
- package/dist/chunk-QN42OA5J.js +887 -0
- package/dist/chunk-QN42OA5J.js.map +1 -0
- package/dist/{chunk-FZ2S6VAZ.js → chunk-RBXZYNVB.js} +223 -1102
- package/dist/chunk-RBXZYNVB.js.map +1 -0
- package/dist/chunk-RC6VTY2H.js +47 -0
- package/dist/chunk-RC6VTY2H.js.map +1 -0
- package/dist/chunk-RFIBUWLF.cjs +232 -0
- package/dist/chunk-RFIBUWLF.cjs.map +1 -0
- package/dist/chunk-S5T7ZTX2.js +266 -0
- package/dist/chunk-S5T7ZTX2.js.map +1 -0
- package/dist/chunk-S7PSMMRG.js +38 -0
- package/dist/chunk-S7PSMMRG.js.map +1 -0
- package/dist/chunk-SCFYPAG6.cjs +18 -0
- package/dist/chunk-SCFYPAG6.cjs.map +1 -0
- package/dist/chunk-SYDHKKRZ.cjs +818 -0
- package/dist/chunk-SYDHKKRZ.cjs.map +1 -0
- package/dist/chunk-TX2ZICS7.js +139 -0
- package/dist/chunk-TX2ZICS7.js.map +1 -0
- package/dist/chunk-TYZUCAT7.js +787 -0
- package/dist/chunk-TYZUCAT7.js.map +1 -0
- package/dist/chunk-U2E3WT3J.js +45 -0
- package/dist/chunk-U2E3WT3J.js.map +1 -0
- package/dist/chunk-UBNVIIBT.js +284 -0
- package/dist/chunk-UBNVIIBT.js.map +1 -0
- package/dist/chunk-UFHMLHIR.cjs +66 -0
- package/dist/chunk-UFHMLHIR.cjs.map +1 -0
- package/dist/chunk-UJE32SST.js +39 -0
- package/dist/chunk-UJE32SST.js.map +1 -0
- package/dist/chunk-ULWRNGGE.cjs +146 -0
- package/dist/chunk-ULWRNGGE.cjs.map +1 -0
- package/dist/chunk-UTWX2X2A.js +165 -0
- package/dist/chunk-UTWX2X2A.js.map +1 -0
- package/dist/chunk-UWGIB3VQ.js +64 -0
- package/dist/chunk-UWGIB3VQ.js.map +1 -0
- package/dist/chunk-V4ISCZJ7.cjs +207 -0
- package/dist/chunk-V4ISCZJ7.cjs.map +1 -0
- package/dist/chunk-VFUWWH52.cjs +83 -0
- package/dist/chunk-VFUWWH52.cjs.map +1 -0
- package/dist/chunk-VILAPTCB.js +259 -0
- package/dist/chunk-VILAPTCB.js.map +1 -0
- package/dist/chunk-VLCY46K6.cjs +82 -0
- package/dist/chunk-VLCY46K6.cjs.map +1 -0
- package/dist/chunk-VPPX5XUF.cjs +813 -0
- package/dist/chunk-VPPX5XUF.cjs.map +1 -0
- package/dist/chunk-WJMEXTVD.cjs +122 -0
- package/dist/chunk-WJMEXTVD.cjs.map +1 -0
- package/dist/chunk-WTNMWEBC.js +504 -0
- package/dist/chunk-WTNMWEBC.js.map +1 -0
- package/dist/chunk-WW6EOVZA.js +112 -0
- package/dist/chunk-WW6EOVZA.js.map +1 -0
- package/dist/chunk-XNBAXRY7.cjs +5673 -0
- package/dist/chunk-XNBAXRY7.cjs.map +1 -0
- package/dist/chunk-XQ7PKKDY.cjs +787 -0
- package/dist/chunk-XQ7PKKDY.cjs.map +1 -0
- package/dist/chunk-XZIYRKLW.cjs +347 -0
- package/dist/chunk-XZIYRKLW.cjs.map +1 -0
- package/dist/chunk-YBXCZEWS.js +187 -0
- package/dist/chunk-YBXCZEWS.js.map +1 -0
- package/dist/chunk-YDHO4AVL.js +16 -0
- package/dist/chunk-YDHO4AVL.js.map +1 -0
- package/dist/chunk-ZORQ5M3W.cjs +934 -0
- package/dist/chunk-ZORQ5M3W.cjs.map +1 -0
- package/dist/chunk-ZW6FPIFC.cjs +36 -0
- package/dist/chunk-ZW6FPIFC.cjs.map +1 -0
- package/dist/citations/CitationEditor.d.ts +58 -0
- package/dist/citations/PassagePill.d.ts +49 -0
- package/dist/citations/QuietMarks.d.ts +81 -0
- package/dist/citations/index.cjs +47 -0
- package/dist/citations/index.cjs.map +1 -0
- package/dist/citations/index.d.ts +3 -0
- package/dist/citations/index.js +6 -0
- package/dist/citations/index.js.map +1 -0
- package/dist/collaboration/contacts/AddContactsParts.d.ts +46 -0
- package/dist/collaboration/contacts/index.d.ts +1 -0
- package/dist/collaboration/direct-messages/DirectMessages.d.ts +33 -0
- package/dist/collaboration/direct-messages/DmParts.d.ts +139 -0
- package/dist/collaboration/direct-messages/index.d.ts +2 -0
- package/dist/collaboration/index.cjs +141 -0
- package/dist/collaboration/index.cjs.map +1 -0
- package/dist/collaboration/index.d.ts +5 -0
- package/dist/collaboration/index.js +8 -0
- package/dist/collaboration/index.js.map +1 -0
- package/dist/collaboration/mail/MailFolderTree.d.ts +34 -0
- package/dist/collaboration/mail/index.d.ts +2 -0
- package/dist/collaboration/mail/mailFolders.d.ts +25 -0
- package/dist/collaboration/members/WorkspaceMembers.d.ts +74 -0
- package/dist/collaboration/members/index.d.ts +1 -0
- package/dist/collaboration/sharing/ShareControl.d.ts +38 -0
- package/dist/collaboration/sharing/index.d.ts +1 -0
- package/dist/components/Accordion.d.ts +12 -0
- package/dist/components/ActionLink.d.ts +18 -0
- package/dist/components/AskBar.d.ts +48 -0
- package/dist/components/AvatarBlock.d.ts +9 -0
- package/dist/components/Banner.d.ts +12 -0
- package/dist/components/BlockImage.d.ts +18 -0
- package/dist/components/CTABanner.d.ts +17 -0
- package/dist/components/Callout.d.ts +9 -0
- package/dist/components/Chart.d.ts +27 -0
- package/dist/components/CollectionDetail.d.ts +23 -0
- package/dist/components/Columns.d.ts +11 -0
- package/dist/components/ContactForm.d.ts +42 -0
- package/dist/components/Container.d.ts +11 -0
- package/dist/components/DataTable.d.ts +47 -0
- package/dist/components/DataTableBlock.d.ts +26 -0
- package/dist/components/EmptyState.d.ts +11 -0
- package/dist/components/EntityChip.d.ts +24 -0
- package/dist/components/EntityIdentityBar.d.ts +90 -0
- package/dist/components/EntityTooltip.d.ts +43 -0
- package/dist/components/FAQ.d.ts +14 -0
- package/dist/components/FeatureGrid.d.ts +18 -0
- package/dist/components/Footer.d.ts +25 -0
- package/dist/components/Gallery.d.ts +15 -0
- package/dist/components/Hero.d.ts +35 -0
- package/dist/components/ListBlock.d.ts +10 -0
- package/dist/components/LogoCloud.d.ts +12 -0
- package/dist/components/MediaText.d.ts +15 -0
- package/dist/components/MemberAvatarStack.d.ts +36 -0
- package/dist/components/MetricCard.d.ts +28 -0
- package/dist/components/Navbar.d.ts +39 -0
- package/dist/components/PageHeader.d.ts +15 -0
- package/dist/components/PricingTable.d.ts +19 -0
- package/dist/components/RichTextBlock.d.ts +10 -0
- package/dist/components/SectionHeading.d.ts +11 -0
- package/dist/components/Spacer.d.ts +7 -0
- package/dist/components/StatGroup.d.ts +12 -0
- package/dist/components/Steps.d.ts +12 -0
- package/dist/components/Tabs.d.ts +15 -0
- package/dist/components/TeamGrid.d.ts +18 -0
- package/dist/components/Testimonial.d.ts +9 -0
- package/dist/components/TestimonialGrid.d.ts +13 -0
- package/dist/components/ToneBadge.d.ts +18 -0
- package/dist/components/Toolbar.d.ts +11 -0
- package/dist/components/UsageMeter.d.ts +21 -0
- package/dist/components/VideoEmbed.d.ts +16 -0
- package/dist/components/assetImage.d.ts +16 -0
- package/dist/components/assetResolver.d.ts +57 -0
- package/dist/components/blockLink.d.ts +26 -0
- package/dist/components/tones.d.ts +14 -0
- package/dist/connect/index.cjs +65 -0
- package/dist/connect/index.cjs.map +1 -0
- package/dist/connect/index.d.ts +8 -0
- package/dist/connect/index.js +28 -0
- package/dist/connect/index.js.map +1 -0
- package/dist/connection/ArbiAppProvider.d.ts +16 -0
- package/dist/connection/ConnectionProvider.d.ts +50 -0
- package/dist/connection/ai.d.ts +99 -0
- package/dist/connection/types.d.ts +54 -0
- package/dist/connection/useImageGen.d.ts +22 -0
- package/dist/facts/FactComposer.d.ts +75 -0
- package/dist/facts/FactDateInput.d.ts +34 -0
- package/dist/facts/FactLabelsCell.d.ts +35 -0
- package/dist/facts/FactPassages.d.ts +52 -0
- package/dist/facts/FactRowActions.d.ts +18 -0
- package/dist/facts/FactSearchParts.d.ts +80 -0
- package/dist/facts/FactSourceGroup.d.ts +26 -0
- package/dist/facts/FactTimelineViews.d.ts +37 -0
- package/dist/facts/FactsBulkBar.d.ts +53 -0
- package/dist/facts/FactsEmptyState.d.ts +38 -0
- package/dist/facts/FactsFieldsButton.d.ts +21 -0
- package/dist/facts/FactsFilterInput.d.ts +46 -0
- package/dist/facts/FactsTable.d.ts +28 -0
- package/dist/facts/FactsToolbar.d.ts +53 -0
- package/dist/facts/FactsViewToggle.d.ts +36 -0
- package/dist/facts/fact-date.d.ts +22 -0
- package/dist/facts/fact-text.d.ts +14 -0
- package/dist/facts/factColumns.d.ts +88 -0
- package/dist/facts/index.cjs +2372 -0
- package/dist/facts/index.cjs.map +1 -0
- package/dist/facts/index.d.ts +34 -0
- package/dist/facts/index.js +2316 -0
- package/dist/facts/index.js.map +1 -0
- package/dist/facts/timezone.d.ts +4 -0
- package/dist/files/AiReviewDialog.d.ts +77 -0
- package/dist/files/DocStatusIcon.d.ts +12 -0
- package/dist/files/DocumentGrid.d.ts +27 -0
- package/dist/files/Explorer.d.ts +10 -0
- package/dist/files/ExplorerSurface.d.ts +34 -0
- package/dist/files/ExplorerTile.d.ts +142 -0
- package/dist/files/ExportParts.d.ts +114 -0
- package/dist/files/FieldParts.d.ts +64 -0
- package/dist/files/FilesPage.d.ts +20 -0
- package/dist/files/FilesToolbar.d.ts +59 -0
- package/dist/files/FolderPicker.d.ts +82 -0
- package/dist/files/GridView.d.ts +59 -0
- package/dist/files/HtmlViewerParts.d.ts +183 -0
- package/dist/files/MoveToFolderDialog.d.ts +32 -0
- package/dist/files/RedlineParts.d.ts +72 -0
- package/dist/files/SelectionBar.d.ts +65 -0
- package/dist/files/StatusPill.d.ts +23 -0
- package/dist/files/TagPassagePanel.d.ts +60 -0
- package/dist/files/UploadDropzone.d.ts +33 -0
- package/dist/files/UploadFooter.d.ts +59 -0
- package/dist/files/UploadParts.d.ts +78 -0
- package/dist/files/UploadSources.d.ts +77 -0
- package/dist/files/VersionTimeline.d.ts +60 -0
- package/dist/files/ViewToggle.d.ts +49 -0
- package/dist/files/ViewerChrome.d.ts +155 -0
- package/dist/files/ViewerLayout.d.ts +32 -0
- package/dist/files/ViewerParts.d.ts +62 -0
- package/dist/files/bulk/BulkActionsBar.d.ts +76 -0
- package/dist/files/bulk/FolderFilterButton.d.ts +35 -0
- package/dist/files/bulk/index.d.ts +2 -0
- package/dist/files/cells/DocumentNameCell.d.ts +31 -0
- package/dist/files/cells/FolderCell.d.ts +25 -0
- package/dist/files/cells/HoverIconCell.d.ts +21 -0
- package/dist/files/cells/LabelMultiSelect.d.ts +50 -0
- package/dist/files/cells/RelatedDocsCell.d.ts +22 -0
- package/dist/files/cells/TagColumnParts.d.ts +29 -0
- package/dist/files/cells/index.d.ts +6 -0
- package/dist/files/documentGridLayout.d.ts +31 -0
- package/dist/files/grid-test-ids.d.ts +18 -0
- package/dist/files/import/CalendarImportRow.d.ts +26 -0
- package/dist/files/import/ImportParts.d.ts +114 -0
- package/dist/files/import/TaskSection.d.ts +51 -0
- package/dist/files/import/UrlInputDialogView.d.ts +63 -0
- package/dist/files/import/VendorLogo.d.ts +15 -0
- package/dist/files/import/index.d.ts +5 -0
- package/dist/files/index.cjs +7589 -0
- package/dist/files/index.cjs.map +1 -0
- package/dist/files/index.d.ts +34 -0
- package/dist/files/index.js +7374 -0
- package/dist/files/index.js.map +1 -0
- package/dist/files/page/FilesAddMenu.d.ts +30 -0
- package/dist/files/page/FilesPageParts.d.ts +24 -0
- package/dist/files/page/FilesPageTitle.d.ts +24 -0
- package/dist/files/page/index.d.ts +3 -0
- package/dist/files/tags/BulkTagEditor.d.ts +136 -0
- package/dist/files/tags/DocTagPopover.d.ts +113 -0
- package/dist/files/tags/TagManager.d.ts +54 -0
- package/dist/files/tags/index.d.ts +3 -0
- package/dist/files/views/FieldsEditorParts.d.ts +151 -0
- package/dist/files/views/FieldsManagerParts.d.ts +17 -0
- package/dist/files/views/TagFormParts.d.ts +109 -0
- package/dist/files/views/ViewSelectorMenu.d.ts +66 -0
- package/dist/files/views/fieldsEditorModel.d.ts +43 -0
- package/dist/files/views/index.d.ts +5 -0
- package/dist/home/ActionMenuDialog.d.ts +26 -0
- package/dist/home/AddFilesFirst.d.ts +22 -0
- package/dist/home/CardHeaderBar.d.ts +40 -0
- package/dist/home/CollapsibleSection.d.ts +43 -0
- package/dist/home/CreateTile.d.ts +17 -0
- package/dist/home/DashboardParts.d.ts +32 -0
- package/dist/home/FactsStrip.d.ts +41 -0
- package/dist/home/FoldSection.d.ts +19 -0
- package/dist/home/GettingStartedStrip.d.ts +49 -0
- package/dist/home/Greeting.d.ts +18 -0
- package/dist/home/HomeLayout.d.ts +28 -0
- package/dist/home/KeyValueRow.d.ts +43 -0
- package/dist/home/ProjectBandParts.d.ts +70 -0
- package/dist/home/QuickActionDialogHeader.d.ts +21 -0
- package/dist/home/RecentList.d.ts +48 -0
- package/dist/home/ScopePicker.d.ts +65 -0
- package/dist/home/StartTiles.d.ts +33 -0
- package/dist/home/index.cjs +854 -0
- package/dist/home/index.cjs.map +1 -0
- package/dist/home/index.d.ts +37 -0
- package/dist/home/index.js +763 -0
- package/dist/home/index.js.map +1 -0
- package/dist/home/sections.d.ts +33 -0
- package/dist/index.cjs +1932 -5547
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +71 -1716
- package/dist/index.js +142 -5316
- package/dist/index.js.map +1 -1
- package/dist/lib/balanced-columns.d.ts +8 -0
- package/dist/lib/format.d.ts +37 -0
- package/dist/lib/observe-resize.d.ts +6 -0
- package/dist/lib/password-strength.d.ts +24 -0
- package/dist/lib/sidebar-mode.d.ts +46 -0
- package/dist/lib/testid.d.ts +7 -0
- package/dist/lib/use-drawer.d.ts +11 -0
- package/dist/lib/useControllableState.d.ts +5 -0
- package/dist/lib/useDismissibleCard.d.ts +15 -0
- package/dist/lib/useListKeyNav.d.ts +42 -0
- package/dist/lib/useLongPaste.d.ts +15 -0
- package/dist/lib/useRestoreFocus.d.ts +11 -0
- package/dist/lib/useScopeSelection.d.ts +34 -0
- package/dist/nav/types.d.ts +19 -0
- package/dist/provider/BlocksProvider.d.ts +20 -0
- package/dist/provider/TooltipScope.d.ts +9 -0
- package/dist/record/index.cjs +2 -4
- package/dist/record/index.cjs.map +1 -1
- package/dist/record/index.d.ts +12 -16
- package/dist/record/index.js +2 -4
- package/dist/record/index.js.map +1 -1
- package/dist/retrieval/HighlightText.d.ts +21 -0
- package/dist/retrieval/SearchEmptyState.d.ts +39 -0
- package/dist/retrieval/SearchGroupHeader.d.ts +21 -0
- package/dist/retrieval/SearchHit.d.ts +36 -0
- package/dist/retrieval/SearchPage.d.ts +187 -0
- package/dist/retrieval/SearchPagination.d.ts +21 -0
- package/dist/retrieval/highlight.d.ts +21 -0
- package/dist/retrieval/index.cjs +160 -0
- package/dist/retrieval/index.cjs.map +1 -0
- package/dist/retrieval/index.d.ts +7 -0
- package/dist/retrieval/index.js +7 -0
- package/dist/retrieval/index.js.map +1 -0
- package/dist/settings/AccountDialogs.d.ts +89 -0
- package/dist/settings/AvatarPicker.d.ts +25 -0
- package/dist/settings/Billing.d.ts +113 -0
- package/dist/settings/ConfigSwitcherBar.d.ts +46 -0
- package/dist/settings/ConfirmDialog.d.ts +28 -0
- package/dist/settings/ConnectionCard.d.ts +58 -0
- package/dist/settings/ConversationSettingsParts.d.ts +53 -0
- package/dist/settings/DocumentPicker.d.ts +57 -0
- package/dist/settings/EmailWorkspaceDialogView.d.ts +60 -0
- package/dist/settings/ErrorDialog.d.ts +36 -0
- package/dist/settings/FloatingPanel.d.ts +32 -0
- package/dist/settings/JsonTree.d.ts +24 -0
- package/dist/settings/LogoutDialog.d.ts +51 -0
- package/dist/settings/ModalBreadcrumbHeader.d.ts +32 -0
- package/dist/settings/ModalScaffold.d.ts +60 -0
- package/dist/settings/MultiSelect.d.ts +111 -0
- package/dist/settings/NotificationCategoryList.d.ts +26 -0
- package/dist/settings/PanelFrame.d.ts +47 -0
- package/dist/settings/PasswordChangeDialog.d.ts +64 -0
- package/dist/settings/PlanBadge.d.ts +14 -0
- package/dist/settings/PlanCard.d.ts +97 -0
- package/dist/settings/PremiumModelsFrame.d.ts +17 -0
- package/dist/settings/ProfileCard.d.ts +67 -0
- package/dist/settings/Projects.d.ts +108 -0
- package/dist/settings/QuotaMeter.d.ts +31 -0
- package/dist/settings/ReferralCredit.d.ts +46 -0
- package/dist/settings/SegmentedControl.d.ts +20 -0
- package/dist/settings/ServerConnectionControls.d.ts +31 -0
- package/dist/settings/SettingsPanel.d.ts +61 -0
- package/dist/settings/SettingsSwitchRow.d.ts +21 -0
- package/dist/settings/SubscriptionParts.d.ts +215 -0
- package/dist/settings/SupportPanel.d.ts +32 -0
- package/dist/settings/SyncDialogParts.d.ts +155 -0
- package/dist/settings/ThreadPreviewDialog.d.ts +18 -0
- package/dist/settings/TipsEditorDialog.d.ts +94 -0
- package/dist/settings/TriStateFilterMenu.d.ts +66 -0
- package/dist/settings/Usage.d.ts +102 -0
- package/dist/settings/WelcomeDialog.d.ts +79 -0
- package/dist/settings/index.cjs +5131 -0
- package/dist/settings/index.cjs.map +1 -0
- package/dist/settings/index.d.ts +38 -0
- package/dist/settings/index.js +4922 -0
- package/dist/settings/index.js.map +1 -0
- package/dist/shell/ActionCluster.d.ts +28 -0
- package/dist/shell/AskField.d.ts +71 -0
- package/dist/shell/InfoBar.d.ts +20 -0
- package/dist/shell/MobileBars.d.ts +47 -0
- package/dist/shell/OfflinePill.d.ts +28 -0
- package/dist/shell/RemoteControlPill.d.ts +23 -0
- package/dist/shell/Shell.d.ts +123 -0
- package/dist/shell/Sidebar.d.ts +104 -0
- package/dist/shell/SidebarBadgeRow.d.ts +29 -0
- package/dist/shell/SidebarRowAction.d.ts +24 -0
- package/dist/shell/StatusRow.d.ts +20 -0
- package/dist/shell/TabHeader.d.ts +70 -0
- package/dist/shell/TipCard.d.ts +46 -0
- package/dist/shell/ToolButton.d.ts +12 -0
- package/dist/shell/Workspace.d.ts +90 -0
- package/dist/shell/index.cjs +187 -0
- package/dist/shell/index.cjs.map +1 -0
- package/dist/shell/index.d.ts +20 -0
- package/dist/shell/index.js +10 -0
- package/dist/shell/index.js.map +1 -0
- package/dist/shell/sidebar-context.d.ts +19 -0
- package/dist/shell/types.d.ts +48 -0
- package/dist/site/index.cjs +113 -90
- package/dist/site/index.d.ts +59 -4
- package/dist/site/index.js +8 -1
- package/dist/studio/PageRenderer.d.ts +35 -0
- package/dist/studio/Section.d.ts +24 -0
- package/dist/studio/StudioEditor.d.ts +32 -0
- package/dist/studio/aiFields.d.ts +17 -0
- package/dist/studio/blockKit.d.ts +36 -0
- package/dist/studio/blocksConfig.d.ts +42 -0
- package/dist/studio/imageFields.d.ts +14 -0
- package/dist/studio/index.cjs +3353 -0
- package/dist/studio/index.cjs.map +1 -0
- package/dist/studio/index.d.ts +32 -0
- package/dist/studio/index.js +3297 -0
- package/dist/studio/index.js.map +1 -0
- package/dist/studio/liveData.d.ts +4 -0
- package/dist/studio/liveWidgetRuntime.d.ts +41 -0
- package/dist/studio/persistence.d.ts +38 -0
- package/dist/studio/publish.d.ts +39 -0
- package/dist/studio/siteBlocks.d.ts +14 -0
- package/dist/studio/types.d.ts +46 -0
- package/dist/studio/websiteBlocks.d.ts +4 -0
- package/dist/studio/widgets.d.ts +20 -0
- package/dist/theme/ThemeEditor.d.ts +16 -0
- package/dist/theme/fontPairings.d.ts +48 -0
- package/dist/theme/store.d.ts +53 -0
- package/dist/theme/tokens.d.ts +105 -0
- package/dist/timeline/Timeline.d.ts +27 -0
- package/dist/timeline/TimelineCalendar.d.ts +54 -0
- package/dist/timeline/TimelineGantt.d.ts +71 -0
- package/dist/timeline/TimelineZoomControl.d.ts +17 -0
- package/dist/timeline/index.cjs +50 -0
- package/dist/timeline/index.cjs.map +1 -0
- package/dist/timeline/index.d.ts +13 -0
- package/dist/timeline/index.js +5 -0
- package/dist/timeline/index.js.map +1 -0
- package/dist/timeline/span.d.ts +29 -0
- package/dist/timeline/types.d.ts +30 -0
- package/dist/workspaces/WorkspaceBadges.d.ts +27 -0
- package/dist/workspaces/WorkspaceCard.d.ts +142 -0
- package/dist/workspaces/WorkspaceFormParts.d.ts +98 -0
- package/dist/workspaces/WorkspaceGroup.d.ts +31 -0
- package/dist/workspaces/WorkspaceSettingsParts.d.ts +70 -0
- package/dist/workspaces/index.cjs +690 -0
- package/dist/workspaces/index.cjs.map +1 -0
- package/dist/workspaces/index.d.ts +9 -0
- package/dist/workspaces/index.js +661 -0
- package/dist/workspaces/index.js.map +1 -0
- package/package.json +164 -9
- package/src/blocks.css +348 -0
- package/src/components/grid.css +60 -107
- package/src/source.css +20 -0
- package/src/studio/studio.css +3 -3
- package/src/tokens.css +226 -0
- package/dist/chunk-DBAUZD7A.cjs.map +0 -1
- package/dist/chunk-FZ2S6VAZ.js.map +0 -1
- package/dist/index-DduoEosi.d.cts +0 -846
- package/dist/index-DduoEosi.d.ts +0 -846
- package/dist/index.d.cts +0 -1717
- package/dist/record/index.d.cts +0 -96
- package/dist/site/index.d.cts +0 -4
package/dist/index.d.cts
DELETED
|
@@ -1,1717 +0,0 @@
|
|
|
1
|
-
import { ap as ThemeBundle, ax as ThemeTokens, av as ThemeState } from './index-DduoEosi.cjs';
|
|
2
|
-
export { A as Accordion, a as AccordionItem, b as AccordionProps, c as ApplyThemeOptions, d as AvatarBlock, e as AvatarBlockProps, B as Banner, f as BannerProps, g as BannerTone, h as BlockImage, i as BlockImageProps, j as BlockLink, k as BlockLinkComponent, l as BlockLinkProps, C as CTABanner, m as CTABannerProps, n as Callout, o as CalloutProps, p as CalloutVariant, q as ColorToken, r as Columns, s as ColumnsProps, t as ContactField, u as ContactForm, v as ContactFormProps, w as Container, x as ContainerProps, F as FAQ, y as FAQProps, z as FONT_PAIRINGS, D as FaqItem, E as FeatureGrid, G as FeatureGridProps, H as FeatureItem, I as FontPairing, J as Footer, K as FooterColumn, L as FooterLink, M as FooterProps, N as Gallery, O as GalleryImage, P as GalleryProps, Q as Hero, R as HeroCta, S as HeroProps, T as ListBlock, U as ListBlockProps, V as ListItem, W as LogoCloud, X as LogoCloudProps, Y as LogoItem, Z as MediaText, _ as MediaTextProps, $ as NavLink, a0 as Navbar, a1 as NavbarProps, a2 as PricingPlan, a3 as PricingTable, a4 as PricingTableProps, a5 as RichTextBlock, a6 as RichTextBlockProps, a7 as SectionHeading, a8 as Spacer, a9 as SpacerProps, aa as StepItem, ab as Steps, ac as StepsProps, ad as THEME_STYLE_ID, ae as TabItem, af as Tabs, ag as TabsProps, ah as TeamGrid, ai as TeamGridProps, aj as TeamMember, ak as Testimonial, al as TestimonialGrid, am as TestimonialGridProps, an as TestimonialItem, ao as TestimonialProps, aq as ThemeEditor, ar as ThemeEditorProps, as as ThemeEmitMode, at as ThemeFonts, au as ThemePreset, aw as ThemeStoreConfig, ay as Timeline, az as TimelineCalendar, aA as TimelineCalendarProps, aB as TimelineGantt, aC as TimelineGanttProps, aD as TimelineItem, aE as TimelineProps, aF as TimelineViewMode, aG as VideoAspect, aH as VideoEmbed, aI as VideoEmbedProps, aJ as applyFontVars, aK as applyStoredTheme, aL as applyThemeVars, aM as clearFontVars, aN as clearThemeVars, aO as createThemeStore, aP as dayKey, aQ as daysUntil, aR as fmtDate, aS as fmtDateTime, aT as fontPackages, aU as formatPageRefs, aV as formatSpan, aW as fromNow, aX as gbp, aY as getFontPairing, aZ as hrs, a_ as initials, a$ as matchFontPairing, b0 as monthLabel, b1 as parseIso, b2 as pct, b3 as tid, b4 as toEmbedUrl, b5 as toHslTriplet, b6 as utcDay } from './index-DduoEosi.cjs';
|
|
3
|
-
import * as react from 'react';
|
|
4
|
-
import react__default, { ReactNode, KeyboardEventHandler, RefObject, ComponentType } from 'react';
|
|
5
|
-
import * as _arbidocs_react from '@arbidocs/react';
|
|
6
|
-
import { DocumentLike, AiRunOptions, UserMenuItem, NotifyVariant, useArbi, AiTaskStatus } from '@arbidocs/react';
|
|
7
|
-
export { AiRunOptions, AiTaskStatus, ArtifactEvent, DocumentCard, DocumentCardProps, SearchChunk, Table, TableBody, TableCell, TableHead, TableHeader, TableRow, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, redlineStats, textToArtifact, toRedlineMarkdown } from '@arbidocs/react';
|
|
8
|
-
import { components } from '@arbidocs/client';
|
|
9
|
-
import { ColDef, GridOptions, GridApi, CellValueChangedEvent, GridState } from 'ag-grid-community';
|
|
10
|
-
import { LucideIcon } from 'lucide-react';
|
|
11
|
-
import { CustomField, Field, ComponentConfig, Data, Config } from '@measured/puck';
|
|
12
|
-
import { UseBoundStore, StoreApi } from 'zustand';
|
|
13
|
-
|
|
14
|
-
/**
|
|
15
|
-
* The reusable AI-native law-firm prompt library.
|
|
16
|
-
*
|
|
17
|
-
* Deliberately opinionated, litigation-grade instructions: they demand citations
|
|
18
|
-
* to the source documents, hedge appropriately, and always frame the output as a
|
|
19
|
-
* draft for a regulated lawyer to review ("AI proposes, the lawyer disposes").
|
|
20
|
-
* Firm-specific register (name, jurisdiction, house language) is injected via
|
|
21
|
-
* {@link PromptConfig} so a second firm reuses the same library with its own
|
|
22
|
-
* voice — call {@link createPromptLibrary} once and share the result app-wide.
|
|
23
|
-
*/
|
|
24
|
-
interface MatterContext {
|
|
25
|
-
title: string;
|
|
26
|
-
client?: string;
|
|
27
|
-
court?: string;
|
|
28
|
-
claimNumber?: string;
|
|
29
|
-
practice?: string;
|
|
30
|
-
summary?: string;
|
|
31
|
-
}
|
|
32
|
-
/** Build a {@link MatterContext} from any matter-shaped record. */
|
|
33
|
-
declare function matterToContext(m: {
|
|
34
|
-
title: string;
|
|
35
|
-
clientName?: string;
|
|
36
|
-
court?: string | null;
|
|
37
|
-
claimNumber?: string | null;
|
|
38
|
-
practice?: string;
|
|
39
|
-
summary?: string;
|
|
40
|
-
}): MatterContext;
|
|
41
|
-
/** Firm voice for the prompt library — everything firm-specific lives here. */
|
|
42
|
-
interface PromptConfig {
|
|
43
|
-
/** The firm's name, e.g. "Acme Legal". */
|
|
44
|
-
firmName: string;
|
|
45
|
-
/** The legal system adjective used throughout, e.g. "English". */
|
|
46
|
-
jurisdiction?: string;
|
|
47
|
-
/** House writing language, e.g. "British English". */
|
|
48
|
-
language?: string;
|
|
49
|
-
/** How the reviewing professional is addressed, e.g. "qualified solicitor". */
|
|
50
|
-
reviewerTitle?: string;
|
|
51
|
-
/** Who signs off compliance/onboarding, e.g. "MLRO". */
|
|
52
|
-
complianceOfficer?: string;
|
|
53
|
-
}
|
|
54
|
-
type PromptLibrary = ReturnType<typeof createPromptLibrary>;
|
|
55
|
-
/** The map of prompt builders (`prompts.brief(ctx)`, `prompts.revise(...)`, …). */
|
|
56
|
-
type Prompts = PromptLibrary['prompts'];
|
|
57
|
-
/**
|
|
58
|
-
* Build a firm-branded prompt library. Every prompt grounds on the supplied
|
|
59
|
-
* documents, cites sources, and is framed as a draft for a lawyer to review.
|
|
60
|
-
*/
|
|
61
|
-
declare function createPromptLibrary(config: PromptConfig): {
|
|
62
|
-
prompts: {
|
|
63
|
-
/** Executive brief of the matter, from the live bundle. */
|
|
64
|
-
brief: (m?: MatterContext) => string;
|
|
65
|
-
/** Sourced chronology of events. */
|
|
66
|
-
chronology: (m?: MatterContext) => string;
|
|
67
|
-
/** Disclosure / relevance + privilege review. */
|
|
68
|
-
disclosure: (m?: MatterContext) => string;
|
|
69
|
-
/** Merits / risk assessment — the real "AI outlook". */
|
|
70
|
-
risk: (m?: MatterContext) => string;
|
|
71
|
-
/** Extract deadlines / key dates with rule references. */
|
|
72
|
-
deadlines: (m?: MatterContext) => string;
|
|
73
|
-
/** Draft a document (letter / pleading / note). */
|
|
74
|
-
draft: (kind: string, m?: MatterContext) => string;
|
|
75
|
-
/** Free-form question about the matter. */
|
|
76
|
-
ask: (question: string, m?: MatterContext) => string;
|
|
77
|
-
/**
|
|
78
|
-
* Draft a clean document artifact (output IS the document — no preamble).
|
|
79
|
-
*
|
|
80
|
-
* Pure single-pass generation from the matter context: it deliberately does
|
|
81
|
-
* NOT tell the agent to look up or cite the document bundle. Asking a drafting
|
|
82
|
-
* agent to "cite the source behind each fact" sends it into a retrieval loop
|
|
83
|
-
* that can spin for minutes before emitting a token; a lawyer wants a fast
|
|
84
|
-
* first draft to refine, so we draft from the known matter facts and mark
|
|
85
|
-
* genuinely-missing specifics as [PLACEHOLDER]. (Grounded, cited analysis is
|
|
86
|
-
* what {@link brief}/{@link risk} are for.)
|
|
87
|
-
*/
|
|
88
|
-
draftArtifact: (kind: string, instructions: string, m?: MatterContext) => string;
|
|
89
|
-
/**
|
|
90
|
-
* Revise a supplied passage. Returns ONLY the full revised text (no commentary),
|
|
91
|
-
* so the app can diff it against the original into a redline.
|
|
92
|
-
*/
|
|
93
|
-
revise: (original: string, instruction: string, m?: MatterContext) => string;
|
|
94
|
-
/** Morning digest across the matter. */
|
|
95
|
-
digest: (m?: MatterContext) => string;
|
|
96
|
-
/** UTBMS-coded billing narrative from time context. */
|
|
97
|
-
billing: (activity: string, m?: MatterContext) => string;
|
|
98
|
-
/** Closing / lessons-learned memo. */
|
|
99
|
-
closing: (m?: MatterContext) => string;
|
|
100
|
-
/** Thought-leadership / insight article from the matter's themes. */
|
|
101
|
-
insight: (m?: MatterContext) => string;
|
|
102
|
-
/** Auto-tagging / issue classification of documents. */
|
|
103
|
-
autoTag: (m?: MatterContext) => string;
|
|
104
|
-
/** Verify uploaded onboarding documents against a KYC/CDD checklist. */
|
|
105
|
-
kyc: (clientName: string, m?: MatterContext) => string;
|
|
106
|
-
/** Triage a prospective enquiry. */
|
|
107
|
-
triage: (enquiry: string, m?: MatterContext) => string;
|
|
108
|
-
/** Conflict-of-interest style check against the workspace. */
|
|
109
|
-
conflict: (parties: string, m?: MatterContext) => string;
|
|
110
|
-
/** Capability statement / pitch letter. */
|
|
111
|
-
pitch: (opportunity: string, m?: MatterContext) => string;
|
|
112
|
-
};
|
|
113
|
-
WORKFLOW_ACTIONS: readonly [{
|
|
114
|
-
readonly id: "brief";
|
|
115
|
-
readonly title: "Matter brief";
|
|
116
|
-
readonly prompt: (m?: MatterContext) => string;
|
|
117
|
-
}, {
|
|
118
|
-
readonly id: "chronology";
|
|
119
|
-
readonly title: "Build a chronology";
|
|
120
|
-
readonly prompt: (m?: MatterContext) => string;
|
|
121
|
-
}, {
|
|
122
|
-
readonly id: "disclosure";
|
|
123
|
-
readonly title: "Review for disclosure";
|
|
124
|
-
readonly prompt: (m?: MatterContext) => string;
|
|
125
|
-
}, {
|
|
126
|
-
readonly id: "risk";
|
|
127
|
-
readonly title: "Merits & risk";
|
|
128
|
-
readonly prompt: (m?: MatterContext) => string;
|
|
129
|
-
}];
|
|
130
|
-
};
|
|
131
|
-
|
|
132
|
-
type CitationSources = components['schemas']['CitationSources'];
|
|
133
|
-
type Citations = CitationSources | null;
|
|
134
|
-
interface CitationEditorProps {
|
|
135
|
-
value: string;
|
|
136
|
-
citations: Citations | null;
|
|
137
|
-
onChange: (note: string, citations: Citations | null) => void;
|
|
138
|
-
/** Currently active citation key (controlled from parent) */
|
|
139
|
-
activeCitationKey?: string | null;
|
|
140
|
-
/**
|
|
141
|
-
* Open a document in the viewer, armed to collect passages for this field —
|
|
142
|
-
* and tag its first passage, so a chosen document is immediately a usable
|
|
143
|
-
* citation. Passages are picked by reading, so citing means opening.
|
|
144
|
-
*
|
|
145
|
-
* The caller owns this because resolving "first passage" needs the parsed
|
|
146
|
-
* document, and keeping that fetch out here is what lets this component stay
|
|
147
|
-
* store- and API-free (and therefore hoistable to @arbidocs/blocks).
|
|
148
|
-
*/
|
|
149
|
-
onCiteDocument?: (docExtId: string) => void;
|
|
150
|
-
/** Cited documents, already resolved by the caller — keyed by external id. */
|
|
151
|
-
citedDocs?: Record<string, DocumentLike>;
|
|
152
|
-
/**
|
|
153
|
-
* The app's document picker, injected as a slot. It is store-coupled, so it
|
|
154
|
-
* is passed in rather than imported, and receives the chosen document id.
|
|
155
|
-
*/
|
|
156
|
-
renderDocumentPicker?: (onSelect: (docExtId: string) => void, selectedIds: string[]) => React.ReactNode;
|
|
157
|
-
placeholder?: string;
|
|
158
|
-
readOnly?: boolean;
|
|
159
|
-
className?: string;
|
|
160
|
-
/** Start in edit mode with the caret in the field (composer behaviour). */
|
|
161
|
-
autoFocus?: boolean;
|
|
162
|
-
/** Applied to the text field itself, so callers can target it directly. */
|
|
163
|
-
'data-testid'?: string;
|
|
164
|
-
/** Persisted textarea height in pixels */
|
|
165
|
-
defaultHeight?: number;
|
|
166
|
-
/** Called after user resizes the textarea */
|
|
167
|
-
onHeightChange?: (height: number) => void;
|
|
168
|
-
}
|
|
169
|
-
declare function CitationEditor({ value, citations, onChange, activeCitationKey, onCiteDocument, citedDocs, renderDocumentPicker, autoFocus, 'data-testid': dataTestId, placeholder, readOnly, className, defaultHeight, onHeightChange, }: CitationEditorProps): react.JSX.Element;
|
|
170
|
-
|
|
171
|
-
/**
|
|
172
|
-
* Shared shapes for the ARBI adapter — identical in demo and live mode so UI
|
|
173
|
-
* never needs to know which backend is serving it — plus the per-firm config a
|
|
174
|
-
* firm app supplies once to wire the connection + AI layer.
|
|
175
|
-
*/
|
|
176
|
-
type ArbiMode = 'demo' | 'live';
|
|
177
|
-
type ConnectionStatus = 'demo' | 'disconnected' | 'connecting' | 'authenticated' | 'error';
|
|
178
|
-
interface ArbiUser {
|
|
179
|
-
name: string;
|
|
180
|
-
email: string;
|
|
181
|
-
/** The user's external_id (usr-…), when known (live sessions). */
|
|
182
|
-
externalId?: string;
|
|
183
|
-
/** Avatar image URL / data-URL from the backend profile, when set. */
|
|
184
|
-
picture?: string | null;
|
|
185
|
-
}
|
|
186
|
-
/** A retrieval-augmented answer step surfaced from the agent loop. */
|
|
187
|
-
interface AssistantStep {
|
|
188
|
-
label: string;
|
|
189
|
-
detail?: string;
|
|
190
|
-
status: 'done' | 'running' | 'queued';
|
|
191
|
-
}
|
|
192
|
-
interface AssistantCitation {
|
|
193
|
-
docId: string;
|
|
194
|
-
docName: string;
|
|
195
|
-
page?: number;
|
|
196
|
-
quote: string;
|
|
197
|
-
}
|
|
198
|
-
interface AssistantMessage {
|
|
199
|
-
id: string;
|
|
200
|
-
role: 'user' | 'assistant';
|
|
201
|
-
content: string;
|
|
202
|
-
steps?: AssistantStep[];
|
|
203
|
-
citations?: AssistantCitation[];
|
|
204
|
-
streaming?: boolean;
|
|
205
|
-
}
|
|
206
|
-
/**
|
|
207
|
-
* Everything firm-specific about the ARBI wiring, injected once at the app root.
|
|
208
|
-
* Framework-agnostic on purpose: the app reads its own env (Vite, Next, …) and
|
|
209
|
-
* passes the resolved values in, so the package never touches `import.meta.env`.
|
|
210
|
-
*/
|
|
211
|
-
interface FirmArbiConfig {
|
|
212
|
-
/** Live backend URL. Empty string ⇒ run entirely in seeded demo mode. */
|
|
213
|
-
apiUrl: string;
|
|
214
|
-
/** Inert URL used to mount the SDK provider when there's no live backend. */
|
|
215
|
-
demoApiUrl?: string;
|
|
216
|
-
/** Preferred live workspace ext_id (else the first workspace is used). */
|
|
217
|
-
workspaceId?: string;
|
|
218
|
-
/** Default assistant *configuration* ext_id every agentic run is grounded on. */
|
|
219
|
-
assistantConfig?: string;
|
|
220
|
-
/** The seeded demo identity shown when running without a backend. */
|
|
221
|
-
demoUser: ArbiUser;
|
|
222
|
-
/** Workspace id used in demo mode (default "demo-firm"). */
|
|
223
|
-
demoWorkspaceId?: string;
|
|
224
|
-
}
|
|
225
|
-
|
|
226
|
-
interface ConnectionValue {
|
|
227
|
-
mode: ArbiMode;
|
|
228
|
-
status: ConnectionStatus;
|
|
229
|
-
user: ArbiUser | null;
|
|
230
|
-
workspaceId: string | null;
|
|
231
|
-
apiConfigured: boolean;
|
|
232
|
-
apiUrl: string;
|
|
233
|
-
error: string | null;
|
|
234
|
-
/** Default assistant config ext_id (for the AI hooks). */
|
|
235
|
-
assistantConfig?: string;
|
|
236
|
-
/** Fallback workspace ext_id when none is actively selected. */
|
|
237
|
-
fallbackWorkspaceId?: string;
|
|
238
|
-
/** Authenticate. Live login when a backend is configured, otherwise the demo firm. */
|
|
239
|
-
login: (email: string, password: string) => Promise<void>;
|
|
240
|
-
/** One-click demo entry (no backend required). */
|
|
241
|
-
enterDemo: () => void;
|
|
242
|
-
logout: () => void;
|
|
243
|
-
/**
|
|
244
|
-
* Affirmatively select a workspace: opens it on the server (via the SDK),
|
|
245
|
-
* updates the app-wide state, and persists the choice so it survives future
|
|
246
|
-
* logins. This is the single entry point for "the user is now in workspace X".
|
|
247
|
-
*/
|
|
248
|
-
setWorkspace: (id: string) => Promise<void>;
|
|
249
|
-
/**
|
|
250
|
-
* Re-assert the selected workspace on the server session (idempotent `/open`).
|
|
251
|
-
* Call before a workspace-scoped write when the session may have lost its open
|
|
252
|
-
* workspace (token re-login, backend restart, session expiry) — the server
|
|
253
|
-
* resolves the workspace from the session, so a dropped `/open` yields
|
|
254
|
-
* "No active workspace" until it's re-opened.
|
|
255
|
-
*/
|
|
256
|
-
ensureWorkspaceOpen: () => Promise<void>;
|
|
257
|
-
}
|
|
258
|
-
declare function ConnectionProvider({ config, children, }: {
|
|
259
|
-
config: FirmArbiConfig;
|
|
260
|
-
children: ReactNode;
|
|
261
|
-
}): react.JSX.Element;
|
|
262
|
-
declare function useConnection(): ConnectionValue;
|
|
263
|
-
declare const isAuthenticated: (s: ConnectionStatus) => s is "demo" | "authenticated";
|
|
264
|
-
|
|
265
|
-
declare function LegalArbiProvider({ config, children, }: {
|
|
266
|
-
config: FirmArbiConfig;
|
|
267
|
-
children: ReactNode;
|
|
268
|
-
}): react.JSX.Element;
|
|
269
|
-
|
|
270
|
-
/**
|
|
271
|
-
* The kit's `useAiTask` with the firm's default assistant configuration
|
|
272
|
-
* injected, so call sites needn't know the config ext_id.
|
|
273
|
-
*/
|
|
274
|
-
declare function useFirmAiTask(): {
|
|
275
|
-
run: (question: string, docIds: string[], opts?: AiRunOptions) => Promise<_arbidocs_react.SSEStreamResult | null>;
|
|
276
|
-
status: _arbidocs_react.AiTaskStatus;
|
|
277
|
-
text: string;
|
|
278
|
-
stepCount: number;
|
|
279
|
-
error: string | null;
|
|
280
|
-
responseId: string | null;
|
|
281
|
-
artifacts: {
|
|
282
|
-
t?: number | null;
|
|
283
|
-
type: "arbi.artifact";
|
|
284
|
-
doc_ext_id: string;
|
|
285
|
-
title: string;
|
|
286
|
-
mode: "markdown" | "html" | "text" | "image";
|
|
287
|
-
content: string;
|
|
288
|
-
file_type: string;
|
|
289
|
-
is_complete: boolean;
|
|
290
|
-
version: number;
|
|
291
|
-
message_ext_id?: string | null;
|
|
292
|
-
}[];
|
|
293
|
-
reset: () => void;
|
|
294
|
-
isRunning: boolean;
|
|
295
|
-
isDone: boolean;
|
|
296
|
-
};
|
|
297
|
-
/** Resolve the active workspace + its document ids (what we ground the agent on). */
|
|
298
|
-
declare function useWorkspaceDocs(): {
|
|
299
|
-
wsId: string | undefined;
|
|
300
|
-
docs: {
|
|
301
|
-
external_id: string;
|
|
302
|
-
workspace_ext_id: string;
|
|
303
|
-
file_name?: string | null | undefined;
|
|
304
|
-
status?: string | null | undefined;
|
|
305
|
-
error_message?: string | null | undefined;
|
|
306
|
-
failed_stage?: string | null | undefined;
|
|
307
|
-
n_pages?: number | null | undefined;
|
|
308
|
-
n_chunks?: number | null | undefined;
|
|
309
|
-
tokens?: number | null | undefined;
|
|
310
|
-
file_type?: string | null | undefined;
|
|
311
|
-
file_size?: number | null | undefined;
|
|
312
|
-
storage_type?: string | null | undefined;
|
|
313
|
-
storage_uri?: string | null | undefined;
|
|
314
|
-
content_hash?: string | null | undefined;
|
|
315
|
-
shared?: boolean | null | undefined;
|
|
316
|
-
re_ocred?: boolean | null | undefined;
|
|
317
|
-
config_ext_id?: string | null | undefined;
|
|
318
|
-
parent_ext_id?: string | null | undefined;
|
|
319
|
-
created_by_ext_id: string;
|
|
320
|
-
updated_by_ext_id?: string | null | undefined;
|
|
321
|
-
created_at: string;
|
|
322
|
-
updated_at: string;
|
|
323
|
-
wp_type?: string | null | undefined;
|
|
324
|
-
folder?: string | null | undefined;
|
|
325
|
-
sender?: string | null | undefined;
|
|
326
|
-
doctags: {
|
|
327
|
-
note?: string | null | undefined;
|
|
328
|
-
citations?: {
|
|
329
|
-
doc_ext_id: string;
|
|
330
|
-
chunks?: {
|
|
331
|
-
chunk_id: string;
|
|
332
|
-
page?: number | null | undefined;
|
|
333
|
-
}[] | undefined;
|
|
334
|
-
}[] | null | undefined;
|
|
335
|
-
external_id: string;
|
|
336
|
-
doc_ext_id: string;
|
|
337
|
-
tag_ext_id: string;
|
|
338
|
-
created_by_ext_id: string;
|
|
339
|
-
updated_by_ext_id?: string | null | undefined;
|
|
340
|
-
created_at: string;
|
|
341
|
-
updated_at: string;
|
|
342
|
-
}[];
|
|
343
|
-
doc_metadata?: {
|
|
344
|
-
doc_nature?: string | null | undefined;
|
|
345
|
-
doc_author?: string | null | undefined;
|
|
346
|
-
doc_subject?: string | null | undefined;
|
|
347
|
-
doc_date?: string | null | undefined;
|
|
348
|
-
title?: string | null | undefined;
|
|
349
|
-
} | null | undefined;
|
|
350
|
-
}[];
|
|
351
|
-
docIds: string[];
|
|
352
|
-
isLoading: boolean;
|
|
353
|
-
isError: boolean;
|
|
354
|
-
ready: boolean;
|
|
355
|
-
};
|
|
356
|
-
/** Search the active workspace's documents and return the top matching passages. */
|
|
357
|
-
declare function useSemanticSearch(): {
|
|
358
|
-
query: string;
|
|
359
|
-
results: _arbidocs_react.SearchChunk[];
|
|
360
|
-
status: _arbidocs_react.AiTaskStatus;
|
|
361
|
-
error: string | null;
|
|
362
|
-
search: (q: string, mode?: "semantic" | "keyword" | "hybrid") => Promise<void>;
|
|
363
|
-
isRunning: boolean;
|
|
364
|
-
};
|
|
365
|
-
|
|
366
|
-
interface Column<T> {
|
|
367
|
-
key: string;
|
|
368
|
-
header: ReactNode;
|
|
369
|
-
render: (row: T) => ReactNode;
|
|
370
|
-
align?: 'left' | 'right' | 'center';
|
|
371
|
-
className?: string;
|
|
372
|
-
headClassName?: string;
|
|
373
|
-
}
|
|
374
|
-
interface DataTableProps<T> {
|
|
375
|
-
columns: Column<T>[];
|
|
376
|
-
rows: T[];
|
|
377
|
-
getRowId: (row: T) => string;
|
|
378
|
-
onRowClick?: (row: T) => void;
|
|
379
|
-
/** testid area prefix, e.g. "matters" -> rows get "matters-row-{id}" */
|
|
380
|
-
area: string;
|
|
381
|
-
emptyTitle?: string;
|
|
382
|
-
emptyDescription?: string;
|
|
383
|
-
className?: string;
|
|
384
|
-
}
|
|
385
|
-
/** The one true table. Column-config driven, fully test-id'd, optional row navigation. */
|
|
386
|
-
declare function DataTable<T>({ columns, rows, getRowId, onRowClick, area, emptyTitle, emptyDescription, className, }: DataTableProps<T>): react.JSX.Element;
|
|
387
|
-
|
|
388
|
-
interface DataTableBlockColumn {
|
|
389
|
-
/** Column heading text. */
|
|
390
|
-
header: string;
|
|
391
|
-
/** Key used to look a cell up in each row record. */
|
|
392
|
-
field: string;
|
|
393
|
-
/** Cell/heading alignment. */
|
|
394
|
-
align?: 'left' | 'right' | 'center';
|
|
395
|
-
}
|
|
396
|
-
interface DataTableBlockProps {
|
|
397
|
-
/** Serializable column schema. */
|
|
398
|
-
columns: DataTableBlockColumn[];
|
|
399
|
-
/** One record per row; cells are looked up by each column's `field`. */
|
|
400
|
-
rows: Array<Record<string, string>>;
|
|
401
|
-
/** Optional caption rendered above the table. */
|
|
402
|
-
caption?: string;
|
|
403
|
-
/** Empty-state title shown when there are no rows. */
|
|
404
|
-
emptyText?: string;
|
|
405
|
-
/** testid area prefix; also set on the wrapper element. */
|
|
406
|
-
testId?: string;
|
|
407
|
-
}
|
|
408
|
-
/**
|
|
409
|
-
* Renders a {@link DataTable} from a flat, serializable schema. Columns are mapped
|
|
410
|
-
* to `Column<TableRowData>[]` (header string, positional-stable key, alignment) and
|
|
411
|
-
* each cell is resolved by `field`; rows carry a synthetic id for React keys/testids.
|
|
412
|
-
*/
|
|
413
|
-
declare function DataTableBlock({ columns, rows, caption, emptyText, testId }: DataTableBlockProps): react.JSX.Element;
|
|
414
|
-
|
|
415
|
-
/**
|
|
416
|
-
* GridView — a flexible AG Grid presentational core.
|
|
417
|
-
*
|
|
418
|
-
* Pure and app-agnostic: it owns no global state and pulls in no store. Column
|
|
419
|
-
* state persistence (order / width / visibility / sort / filter) is exposed as a
|
|
420
|
-
* controlled/uncontrolled prop pair — `gridState` (initial state, read once at
|
|
421
|
-
* mount) and `onGridStateChange` (called whenever AG Grid's state changes). An
|
|
422
|
-
* app wires those to wherever it keeps the state (Zustand, localStorage, a URL,
|
|
423
|
-
* a server) via a thin adapter; the core stays decoupled.
|
|
424
|
-
*
|
|
425
|
-
* Themed entirely via CSS variables (see the sibling `grid.css`, which a
|
|
426
|
-
* consuming app imports globally), so it inherits the host's light/dark theme.
|
|
427
|
-
*/
|
|
428
|
-
|
|
429
|
-
interface GridViewSelection<T> {
|
|
430
|
-
mode: 'single' | 'multiple';
|
|
431
|
-
selected: T[];
|
|
432
|
-
onSelectionChange: (items: T[]) => void;
|
|
433
|
-
}
|
|
434
|
-
interface GridViewEmptyState {
|
|
435
|
-
icon?: react__default.ReactNode;
|
|
436
|
-
title?: string;
|
|
437
|
-
message?: string;
|
|
438
|
-
action?: react__default.ReactNode;
|
|
439
|
-
}
|
|
440
|
-
interface GridViewProps<T> {
|
|
441
|
-
items: T[];
|
|
442
|
-
columnDefs: ColDef<T>[];
|
|
443
|
-
getItemId: (item: T) => string;
|
|
444
|
-
selection?: GridViewSelection<T>;
|
|
445
|
-
emptyState?: GridViewEmptyState;
|
|
446
|
-
isLoading?: boolean;
|
|
447
|
-
loadingMessage?: string;
|
|
448
|
-
gridOptions?: Partial<GridOptions<T>>;
|
|
449
|
-
onGridReady?: (params: {
|
|
450
|
-
api: GridApi<T>;
|
|
451
|
-
}) => void;
|
|
452
|
-
onCellValueChanged?: (event: CellValueChangedEvent<T>) => void;
|
|
453
|
-
onRowClick?: (item: T) => void;
|
|
454
|
-
persistState?: boolean;
|
|
455
|
-
gridId?: string;
|
|
456
|
-
gridState?: GridState;
|
|
457
|
-
onGridStateChange?: (state: GridState) => void;
|
|
458
|
-
initialVisibleColumns?: string[];
|
|
459
|
-
className?: string;
|
|
460
|
-
height?: string | number;
|
|
461
|
-
rowHeight?: number;
|
|
462
|
-
testId?: string;
|
|
463
|
-
pinnedBottomRowData?: T[];
|
|
464
|
-
pinnedTopRowData?: T[];
|
|
465
|
-
pagination?: boolean;
|
|
466
|
-
paginationPageSizeSelector?: number[];
|
|
467
|
-
showEmpty?: boolean;
|
|
468
|
-
}
|
|
469
|
-
declare function GridView<T>({ items, columnDefs, getItemId, selection, emptyState, isLoading, loadingMessage, gridOptions, onGridReady, onCellValueChanged, onRowClick, persistState, gridState, onGridStateChange, initialVisibleColumns, className, height, rowHeight, testId, pinnedBottomRowData, pinnedTopRowData, pagination, paginationPageSizeSelector, showEmpty, }: GridViewProps<T>): react__default.JSX.Element;
|
|
470
|
-
|
|
471
|
-
/** Centered placeholder for empty lists/panels: icon + title + description + action. */
|
|
472
|
-
declare function EmptyState({ icon: Icon, title, description, action, className, testId, }: {
|
|
473
|
-
icon?: LucideIcon;
|
|
474
|
-
title: string;
|
|
475
|
-
description?: string;
|
|
476
|
-
action?: ReactNode;
|
|
477
|
-
className?: string;
|
|
478
|
-
testId?: string;
|
|
479
|
-
}): react.JSX.Element;
|
|
480
|
-
|
|
481
|
-
/**
|
|
482
|
-
* One labelled quota meter: icon + label on the left, used-of-limit on the
|
|
483
|
-
* right, a thin bar underneath. The bar's tone follows pressure with the shared
|
|
484
|
-
* green → yellow → red gradation — green while there's room, yellow past the
|
|
485
|
-
* halfway mark, red at the limit — so a stack of meters reads at a glance which
|
|
486
|
-
* quota is the one to think about.
|
|
487
|
-
*/
|
|
488
|
-
declare function UsageMeter({ icon: Icon, label, value, pct, hint, className, testId, }: {
|
|
489
|
-
icon?: LucideIcon;
|
|
490
|
-
label: string;
|
|
491
|
-
/** Formatted used-of-limit text, e.g. "1,200 / 25,000" or "40 / 500 MB". */
|
|
492
|
-
value: string;
|
|
493
|
-
/** Fill percentage, 0–100 (values are clamped). */
|
|
494
|
-
pct: number;
|
|
495
|
-
/** Inline parenthetical after the label, e.g. "resets May 31, 2025" —
|
|
496
|
-
* same font as the label, so the meter never grows an extra row. */
|
|
497
|
-
hint?: string;
|
|
498
|
-
className?: string;
|
|
499
|
-
testId?: string;
|
|
500
|
-
}): react.JSX.Element;
|
|
501
|
-
|
|
502
|
-
/** Zoom bounds shared by the control and the chart, so a hoisted control stays in
|
|
503
|
-
* step with the plot scaling. STEP is the slider granularity. */
|
|
504
|
-
declare const TIMELINE_ZOOM: {
|
|
505
|
-
readonly MIN: 1;
|
|
506
|
-
readonly MAX: 10;
|
|
507
|
-
readonly STEP: 0.25;
|
|
508
|
-
};
|
|
509
|
-
interface TimelineZoomControlProps {
|
|
510
|
-
/** Current zoom factor (1 = fit). */
|
|
511
|
-
zoom: number;
|
|
512
|
-
/** Fired with the next clamped zoom factor. */
|
|
513
|
-
onZoomChange: (zoom: number) => void;
|
|
514
|
-
className?: string;
|
|
515
|
-
/** Prefix for the `data-testid`s this control emits. */
|
|
516
|
-
testId?: string;
|
|
517
|
-
}
|
|
518
|
-
declare function TimelineZoomControl({ zoom, onZoomChange, className, testId, }: TimelineZoomControlProps): react.JSX.Element;
|
|
519
|
-
|
|
520
|
-
interface UploadDropzoneProps {
|
|
521
|
-
/** Called with the chosen/dropped files. */
|
|
522
|
-
onFiles: (files: File[]) => void;
|
|
523
|
-
/** `accept` attribute for the file picker (e.g. `.pdf,.docx`). */
|
|
524
|
-
accept?: string;
|
|
525
|
-
/** Allow selecting more than one file. Defaults to true. */
|
|
526
|
-
multiple?: boolean;
|
|
527
|
-
/** Disables picking/dropping (e.g. no active workspace yet). */
|
|
528
|
-
disabled?: boolean;
|
|
529
|
-
/** Shows a spinner + busy copy while an upload is in flight. */
|
|
530
|
-
uploading?: boolean;
|
|
531
|
-
/** Primary line, e.g. "Drag files here". */
|
|
532
|
-
title?: string;
|
|
533
|
-
/** Secondary line under the title. */
|
|
534
|
-
description?: string;
|
|
535
|
-
/** Small muted hint, e.g. "PDF, DOCX, images — up to 50MB". */
|
|
536
|
-
hint?: string;
|
|
537
|
-
/** Copy shown next to the spinner while uploading. */
|
|
538
|
-
uploadingLabel?: string;
|
|
539
|
-
/** Glyph in the tile. Defaults to an upload-cloud icon. */
|
|
540
|
-
icon?: LucideIcon;
|
|
541
|
-
testId?: string;
|
|
542
|
-
className?: string;
|
|
543
|
-
}
|
|
544
|
-
/**
|
|
545
|
-
* A themeable drag-and-drop upload target. Source-agnostic: it just surfaces
|
|
546
|
-
* chosen files via `onFiles` — the host owns the actual upload. Handles its own
|
|
547
|
-
* drag-over state, click-to-browse, and a busy state, styled with the kit's
|
|
548
|
-
* SEMANTIC tokens only (border, muted, primary, foreground) so it renders in
|
|
549
|
-
* each firm's colours.
|
|
550
|
-
*/
|
|
551
|
-
declare function UploadDropzone({ onFiles, accept, multiple, disabled, uploading, title, description, hint, uploadingLabel, icon: Icon, testId, className, }: UploadDropzoneProps): react.JSX.Element;
|
|
552
|
-
|
|
553
|
-
/** Standard back-office page title block: eyebrow + title + description + actions. */
|
|
554
|
-
declare function PageHeader({ title, eyebrow, description, actions, className, testId, }: {
|
|
555
|
-
title: string;
|
|
556
|
-
eyebrow?: string;
|
|
557
|
-
description?: string;
|
|
558
|
-
actions?: ReactNode;
|
|
559
|
-
className?: string;
|
|
560
|
-
testId?: string;
|
|
561
|
-
}): react.JSX.Element;
|
|
562
|
-
|
|
563
|
-
/** Search + filter bar used above every list view. */
|
|
564
|
-
declare function Toolbar({ search, onSearch, searchPlaceholder, filters, actions, className, testId, }: {
|
|
565
|
-
search?: string;
|
|
566
|
-
onSearch?: (v: string) => void;
|
|
567
|
-
searchPlaceholder?: string;
|
|
568
|
-
filters?: ReactNode;
|
|
569
|
-
actions?: ReactNode;
|
|
570
|
-
className?: string;
|
|
571
|
-
testId?: string;
|
|
572
|
-
}): react.JSX.Element;
|
|
573
|
-
|
|
574
|
-
/** Longest a name may be. Exported so a form editing the same field agrees. */
|
|
575
|
-
declare const IDENTITY_NAME_MAX_LENGTH = 50;
|
|
576
|
-
interface EntityIdentityField {
|
|
577
|
-
/** Row caption. Rendered with a trailing colon. */
|
|
578
|
-
label: string;
|
|
579
|
-
value: string;
|
|
580
|
-
/** Stands in for an empty value, in italics — never a blank row. */
|
|
581
|
-
placeholder: string;
|
|
582
|
-
/** Commits the edit. Not called when the value is unchanged. */
|
|
583
|
-
onSave: (next: string) => void;
|
|
584
|
-
/** A description needs line breaks; a name does not. */
|
|
585
|
-
multiline?: boolean;
|
|
586
|
-
/** Caps the input and shows a counter as it fills. Names only, by default. */
|
|
587
|
-
maxLength?: number;
|
|
588
|
-
/** Classes for the read-mode value, e.g. a larger weight for the name. */
|
|
589
|
-
valueClassName?: string;
|
|
590
|
-
/**
|
|
591
|
-
* Content pinned to the RIGHT END of this row — e.g. the owning project
|
|
592
|
-
* beside a name, a member stack beside a status. Rows without one let their
|
|
593
|
-
* value run the full width, which is what a description wants.
|
|
594
|
-
*/
|
|
595
|
-
trailing?: ReactNode;
|
|
596
|
-
/**
|
|
597
|
-
* Content rendered immediately BEFORE the value — the entity's own mark.
|
|
598
|
-
* Sits outside the edit swap, so starting to edit the name doesn't make the
|
|
599
|
-
* icon jump or disappear.
|
|
600
|
-
*/
|
|
601
|
-
leading?: ReactNode;
|
|
602
|
-
/**
|
|
603
|
-
* Drops the caption from view for this row, leaving the value flush left.
|
|
604
|
-
* For a field whose value already says what it is — a workspace's name and
|
|
605
|
-
* description read as exactly that — the caption is a word the eye has to
|
|
606
|
-
* step over on the way in. The caption stays in the markup for screen
|
|
607
|
-
* readers, which have no such visual cue to fall back on.
|
|
608
|
-
*/
|
|
609
|
-
hideLabel?: boolean;
|
|
610
|
-
/** Row test id; the pencil and input derive `-edit` and `-input`. */
|
|
611
|
-
testId?: string;
|
|
612
|
-
}
|
|
613
|
-
interface EntityIdentityBarProps {
|
|
614
|
-
/** The editable text fields, in order. Usually name then description. */
|
|
615
|
-
fields: EntityIdentityField[];
|
|
616
|
-
/**
|
|
617
|
-
* Read-only rows shown after the editable ones — anything whose control the
|
|
618
|
-
* consumer owns (a project picker, an owner avatar, a status). Rendered with
|
|
619
|
-
* the same caption column so every row lines up.
|
|
620
|
-
*/
|
|
621
|
-
extraRows?: {
|
|
622
|
-
label: string;
|
|
623
|
-
content: ReactNode;
|
|
624
|
-
trailing?: ReactNode;
|
|
625
|
-
testId?: string;
|
|
626
|
-
}[];
|
|
627
|
-
/** Hides every pencil. A viewer without permission sees values, not controls. */
|
|
628
|
-
canEdit?: boolean;
|
|
629
|
-
/** Trailing controls, pinned right — e.g. a member stack, a status. */
|
|
630
|
-
actions?: ReactNode;
|
|
631
|
-
/**
|
|
632
|
-
* Controls that act on the ENTITY rather than on any one field — typically an
|
|
633
|
-
* overflow menu holding delete or leave. Sits under the field list, where a
|
|
634
|
-
* destructive action is findable but not in the path of everyday reading.
|
|
635
|
-
*/
|
|
636
|
-
footer?: ReactNode;
|
|
637
|
-
className?: string;
|
|
638
|
-
testId?: string;
|
|
639
|
-
}
|
|
640
|
-
/**
|
|
641
|
-
* The "what am I looking at" bar for an entity's own page.
|
|
642
|
-
*
|
|
643
|
-
* A caption column (`Name:`, `Description:`, `Project:`) and a value column. The
|
|
644
|
-
* captions are the point: a bare bold string at the top of a page reads equally
|
|
645
|
-
* as a workspace, a project, a matter or a folder, and people read it as
|
|
646
|
-
* whichever they expected. Saying which field is which costs one column and
|
|
647
|
-
* removes the ambiguity entirely.
|
|
648
|
-
*
|
|
649
|
-
* Editing happens in place. The pencil is always visible to someone who can use
|
|
650
|
-
* it rather than revealed on hover — a control you have to go hunting for is one
|
|
651
|
-
* most people never find, and hover doesn't exist on touch. Commit is on blur
|
|
652
|
-
* and on Enter (single-line fields only, so a description can hold line
|
|
653
|
-
* breaks); Escape abandons the edit.
|
|
654
|
-
*
|
|
655
|
-
* Deliberately NOT a form: no submit, no dirty state, no field-level errors.
|
|
656
|
-
* When a consumer needs visibility toggles, destructive actions or validation
|
|
657
|
-
* messages, those belong in its settings form — this bar is the identity of the
|
|
658
|
-
* thing, shown where you are working on it.
|
|
659
|
-
*
|
|
660
|
-
* Styled with SEMANTIC tokens only, so every firm gets it in its own colours.
|
|
661
|
-
*/
|
|
662
|
-
declare function EntityIdentityBar({ fields, extraRows, canEdit, actions, footer, className, testId, }: EntityIdentityBarProps): react.JSX.Element;
|
|
663
|
-
|
|
664
|
-
/** One face in the stack — source-agnostic, not a raw SDK user. */
|
|
665
|
-
interface StackedMember {
|
|
666
|
-
name: string;
|
|
667
|
-
picture?: string | null;
|
|
668
|
-
}
|
|
669
|
-
interface MemberAvatarStackProps {
|
|
670
|
-
members: StackedMember[];
|
|
671
|
-
/** Total, when it exceeds what's shown. Defaults to `members.length`. */
|
|
672
|
-
total?: number;
|
|
673
|
-
/** Faces before the rest collapse into a `+N`. */
|
|
674
|
-
max?: number;
|
|
675
|
-
/**
|
|
676
|
-
* The viewer isn't allowed to see who is here (e.g. row-level security hides
|
|
677
|
-
* the members of a public workspace you haven't joined). Renders an em dash
|
|
678
|
-
* rather than lying with an empty stack.
|
|
679
|
-
*/
|
|
680
|
-
hidden?: boolean;
|
|
681
|
-
/** Makes the stack a button — e.g. to expand the member list below it. */
|
|
682
|
-
onClick?: () => void;
|
|
683
|
-
/** Rotates the chevron and drives `aria-expanded` when it is a toggle. */
|
|
684
|
-
expanded?: boolean;
|
|
685
|
-
/** Ring colour behind each face; match the surface it sits on. */
|
|
686
|
-
ringClassName?: string;
|
|
687
|
-
className?: string;
|
|
688
|
-
testId?: string;
|
|
689
|
-
}
|
|
690
|
-
/**
|
|
691
|
-
* An overlapping stack of member faces, with the overflow collapsed to `+N`.
|
|
692
|
-
*
|
|
693
|
-
* Lives here rather than inside a card because "who is in this thing" is shown
|
|
694
|
-
* in more than one place — a workspace card, a workspace's own header — and
|
|
695
|
-
* those had drawn it twice. Given `onClick` it becomes the control that expands
|
|
696
|
-
* the full list, which is a better affordance than a button labelled "Members"
|
|
697
|
-
* beside the very faces it would reveal.
|
|
698
|
-
*/
|
|
699
|
-
declare function MemberAvatarStack({ members, total, max, hidden, onClick, expanded, ringClassName, className, testId, }: MemberAvatarStackProps): react.JSX.Element;
|
|
700
|
-
|
|
701
|
-
interface MetricCardProps {
|
|
702
|
-
label: string;
|
|
703
|
-
value: string | number;
|
|
704
|
-
icon?: LucideIcon;
|
|
705
|
-
hint?: string;
|
|
706
|
-
delta?: {
|
|
707
|
-
value: string;
|
|
708
|
-
direction: 'up' | 'down';
|
|
709
|
-
good?: boolean;
|
|
710
|
-
};
|
|
711
|
-
/**
|
|
712
|
-
* Icon accent as a theme colour-token key (e.g. `primary`, `success`, or a
|
|
713
|
-
* firm's own brand token). Resolved to `var(--color-<accent>)` at render, so
|
|
714
|
-
* it themes with whatever firm consumes it. `'default'` inherits `foreground`.
|
|
715
|
-
*/
|
|
716
|
-
accent?: string;
|
|
717
|
-
testId?: string;
|
|
718
|
-
}
|
|
719
|
-
/** The one true KPI tile. Used across every dashboard and module header. */
|
|
720
|
-
declare function MetricCard({ label, value, icon: Icon, hint, delta, accent, testId, }: MetricCardProps): react.JSX.Element;
|
|
721
|
-
|
|
722
|
-
/** One listed item. Source-agnostic: a chat, a file, a matter, a person. */
|
|
723
|
-
interface RecentActivityRow {
|
|
724
|
-
id: string;
|
|
725
|
-
/**
|
|
726
|
-
* The row's avatar/logo — a person's face, a file-type mark, a tinted glyph.
|
|
727
|
-
* Supplied by the consumer, because only it knows what these things look
|
|
728
|
-
* like.
|
|
729
|
-
*/
|
|
730
|
-
leading?: ReactNode;
|
|
731
|
-
title: string;
|
|
732
|
-
/** Second line: what this row is, in a few words. */
|
|
733
|
-
subtitle?: string;
|
|
734
|
-
/** Pinned right on the title line, like a message time. */
|
|
735
|
-
meta?: string;
|
|
736
|
-
onClick?: () => void;
|
|
737
|
-
/**
|
|
738
|
-
* A control rendered beside the row, OUTSIDE its button — e.g. a role
|
|
739
|
-
* dropdown. It cannot live inside the button: nested interactives are invalid
|
|
740
|
-
* and the button would eat the click. Supplying this hides `meta`, since they
|
|
741
|
-
* compete for the same edge.
|
|
742
|
-
*/
|
|
743
|
-
trailing?: ReactNode;
|
|
744
|
-
}
|
|
745
|
-
interface RecentActivityCardProps {
|
|
746
|
-
/** Glyph beside the title, in the header. */
|
|
747
|
-
icon?: LucideIcon;
|
|
748
|
-
/** The section this card is about — "Chats", "Matters", "Members". */
|
|
749
|
-
title: string;
|
|
750
|
-
/** Total across everything, not just what's listed. Omit to hide. */
|
|
751
|
-
count?: number;
|
|
752
|
-
/** Header click — go to this section's full page. */
|
|
753
|
-
onOpen?: () => void;
|
|
754
|
-
/** Secondary action that CREATES one. Omit the label to hide the button. */
|
|
755
|
-
actionLabel?: string;
|
|
756
|
-
actionIcon?: LucideIcon;
|
|
757
|
-
onAction?: () => void;
|
|
758
|
-
/**
|
|
759
|
-
* A custom header action node — rendered in the action slot INSTEAD of the
|
|
760
|
-
* built-in label button. For actions that aren't a single click (e.g. a
|
|
761
|
-
* source dropdown). The empty-card CTA still uses `onAction`/`emptyActionLabel`.
|
|
762
|
-
*/
|
|
763
|
-
action?: ReactNode;
|
|
764
|
-
rows: RecentActivityRow[];
|
|
765
|
-
/** Says what the list is — "Recent", "Recently joined". */
|
|
766
|
-
caption?: string;
|
|
767
|
-
/** Shown instead of the list when there is nothing yet. */
|
|
768
|
-
emptyText?: ReactNode;
|
|
769
|
-
/**
|
|
770
|
-
* Verb for the empty card's call to action, e.g. "New chat" rather than the
|
|
771
|
-
* header button's terse "New". An empty card is mostly whitespace, and that
|
|
772
|
-
* whitespace is the best invitation the card will ever get — so it becomes
|
|
773
|
-
* the action, at full size. Defaults to `actionLabel`; the CTA only appears
|
|
774
|
-
* when there is an `onAction` to run.
|
|
775
|
-
*/
|
|
776
|
-
emptyActionLabel?: string;
|
|
777
|
-
/** Extra classes on the card root. */
|
|
778
|
-
className?: string;
|
|
779
|
-
/** Root test id; children derive `-open`, `-action`, `-caption`, `-row`. */
|
|
780
|
-
testId?: string;
|
|
781
|
-
}
|
|
782
|
-
/**
|
|
783
|
-
* A section's recent items, as a card you can get back INTO the work through.
|
|
784
|
-
*
|
|
785
|
-
* Three parts, and the split is the point:
|
|
786
|
-
*
|
|
787
|
-
* - the HEADER links to that section's full page. Clicking the thing's name
|
|
788
|
-
* should take you to the thing.
|
|
789
|
-
* - the BODY lists what changed most recently, each row jumping straight to
|
|
790
|
-
* that item.
|
|
791
|
-
* - the ACTION creates a new one, kept visually distinct from the header link
|
|
792
|
-
* so "go there" and "make one" are never the same click.
|
|
793
|
-
*
|
|
794
|
-
* Deliberately NOT a KPI tile — that's {@link MetricCard}. A count tells a
|
|
795
|
-
* returning professional nothing they need: "128 documents" doesn't help you
|
|
796
|
-
* resume work, whereas the name of the file you touched an hour ago does. The
|
|
797
|
-
* count rides along as a caption beside the title, not as the content.
|
|
798
|
-
*
|
|
799
|
-
* The row anatomy is the DM conversation chip's (leading avatar, bold name
|
|
800
|
-
* line with the time pinned right, muted second line), because a list of
|
|
801
|
-
* recognisable things reads the same way whoever owns it.
|
|
802
|
-
*
|
|
803
|
-
* Styled with SEMANTIC tokens only (card, border, foreground, muted-foreground,
|
|
804
|
-
* primary, accent), so every firm gets it in its own colours.
|
|
805
|
-
*/
|
|
806
|
-
declare function RecentActivityCard({ icon: Icon, title, count, onOpen, actionLabel, actionIcon: ActionIcon, onAction, action, rows, caption, emptyText, emptyActionLabel, className, testId, }: RecentActivityCardProps): react.JSX.Element;
|
|
807
|
-
|
|
808
|
-
interface AskBarProps {
|
|
809
|
-
/** Receives the trimmed question; the caller owns what asking means. */
|
|
810
|
-
onAsk: (text: string) => void;
|
|
811
|
-
/** Second destination for the same text — retrieval. Omit to hide. */
|
|
812
|
-
onSearch?: (text: string) => void;
|
|
813
|
-
/** Prefill-on-click starter questions, shown under the input. */
|
|
814
|
-
suggestions?: string[];
|
|
815
|
-
placeholder?: string;
|
|
816
|
-
askLabel?: string;
|
|
817
|
-
searchLabel?: string;
|
|
818
|
-
/** Controlled value. Omit for the bar to own its own text. */
|
|
819
|
-
value?: string;
|
|
820
|
-
onValueChange?: (value: string) => void;
|
|
821
|
-
/** Raw keydown on the input — lets a consumer run an autocomplete
|
|
822
|
-
* (arrow/Enter/Tab/Escape) before the form's own submit handling.
|
|
823
|
-
* preventDefault() on Enter suppresses the submit. */
|
|
824
|
-
onInputKeyDown?: KeyboardEventHandler<HTMLInputElement>;
|
|
825
|
-
/** Popover anchored to the pill (e.g. a slash-command menu). Rendered in a
|
|
826
|
-
* relative wrapper around the form, so absolute children position against
|
|
827
|
-
* the pill. */
|
|
828
|
-
menu?: ReactNode;
|
|
829
|
-
/** External input ref, for consumers that refocus after menu selection. */
|
|
830
|
-
inputRef?: RefObject<HTMLInputElement | null>;
|
|
831
|
-
className?: string;
|
|
832
|
-
/** Root test id; children derive `-input`, `-submit`, `-search`, `-suggestion`. */
|
|
833
|
-
testId?: string;
|
|
834
|
-
}
|
|
835
|
-
declare function AskBar({ onAsk, onSearch, suggestions, placeholder, askLabel, searchLabel, value, onValueChange, onInputKeyDown, menu, inputRef: externalInputRef, className, testId, }: AskBarProps): react.JSX.Element;
|
|
836
|
-
|
|
837
|
-
interface ResumeStripItem {
|
|
838
|
-
id: string;
|
|
839
|
-
/** The item's type mark — a chat glyph, a document's file icon. */
|
|
840
|
-
leading?: ReactNode;
|
|
841
|
-
title: string;
|
|
842
|
-
/** Compact age, e.g. "2h", "3d". */
|
|
843
|
-
meta?: string;
|
|
844
|
-
onClick?: () => void;
|
|
845
|
-
}
|
|
846
|
-
interface ResumeStripProps {
|
|
847
|
-
items: ResumeStripItem[];
|
|
848
|
-
/** Says what the strip is. */
|
|
849
|
-
caption?: string;
|
|
850
|
-
className?: string;
|
|
851
|
-
/** Root test id; chips derive `-item`. */
|
|
852
|
-
testId?: string;
|
|
853
|
-
}
|
|
854
|
-
declare function ResumeStrip({ items, caption, className, testId, }: ResumeStripProps): react.JSX.Element | null;
|
|
855
|
-
|
|
856
|
-
interface QuickActionItem {
|
|
857
|
-
id: string;
|
|
858
|
-
icon: LucideIcon;
|
|
859
|
-
/** The job, in the user's words — "Deep research", not "Research agent". */
|
|
860
|
-
title: string;
|
|
861
|
-
/** One line on what happens. Sentence case, no full stop needed. */
|
|
862
|
-
description: string;
|
|
863
|
-
onClick: () => void;
|
|
864
|
-
/** Rendered non-interactive and dimmed; `disabledReason` explains why. */
|
|
865
|
-
disabled?: boolean;
|
|
866
|
-
/** Shown as the card's tooltip when disabled — say how to unblock it. */
|
|
867
|
-
disabledReason?: string;
|
|
868
|
-
testId?: string;
|
|
869
|
-
}
|
|
870
|
-
interface QuickActionCardsProps {
|
|
871
|
-
items: QuickActionItem[];
|
|
872
|
-
/** Optional lead-in above the row. */
|
|
873
|
-
caption?: string;
|
|
874
|
-
className?: string;
|
|
875
|
-
testId?: string;
|
|
876
|
-
}
|
|
877
|
-
declare function QuickActionCards({ items, caption, className, testId, }: QuickActionCardsProps): react.JSX.Element | null;
|
|
878
|
-
|
|
879
|
-
interface SectionCaptionProps {
|
|
880
|
-
children: ReactNode;
|
|
881
|
-
className?: string;
|
|
882
|
-
testId?: string;
|
|
883
|
-
}
|
|
884
|
-
/**
|
|
885
|
-
* The small uppercase eyebrow that names a band of a page — "Start something",
|
|
886
|
-
* "Continue a chat". One component so every band on a home surface wears the
|
|
887
|
-
* same caption, and a single screenful never mixes two caption languages.
|
|
888
|
-
*
|
|
889
|
-
* Styled with SEMANTIC tokens only, so every firm gets it in its own colours.
|
|
890
|
-
*/
|
|
891
|
-
declare function SectionCaption({ children, className, testId }: SectionCaptionProps): react.JSX.Element;
|
|
892
|
-
|
|
893
|
-
interface SectionStripRow {
|
|
894
|
-
id: string;
|
|
895
|
-
/** The row's mark — a pin, a dot, a tiny glyph. Consumer-supplied. */
|
|
896
|
-
leading?: ReactNode;
|
|
897
|
-
title: string;
|
|
898
|
-
/** Pinned right: a date, an age. */
|
|
899
|
-
meta?: string;
|
|
900
|
-
onClick?: () => void;
|
|
901
|
-
}
|
|
902
|
-
interface SectionStripGroup {
|
|
903
|
-
/** Says what the group is — "Upcoming", "Recent". */
|
|
904
|
-
caption: string;
|
|
905
|
-
rows: SectionStripRow[];
|
|
906
|
-
/** Test id for this group's rows. Falls back to `<root>-row`. */
|
|
907
|
-
rowTestId?: string;
|
|
908
|
-
}
|
|
909
|
-
interface SectionStripAction {
|
|
910
|
-
icon?: LucideIcon;
|
|
911
|
-
label: string;
|
|
912
|
-
onClick: () => void;
|
|
913
|
-
testId?: string;
|
|
914
|
-
/**
|
|
915
|
-
* A custom element rendered in place of the default ghost button — for a
|
|
916
|
-
* primary/emphasised action that shouldn't look like the quiet header doors.
|
|
917
|
-
*/
|
|
918
|
-
node?: ReactNode;
|
|
919
|
-
}
|
|
920
|
-
interface SectionStripProps {
|
|
921
|
-
/** Glyph beside the title, in the header. */
|
|
922
|
-
icon?: LucideIcon;
|
|
923
|
-
/** The section this band is about. */
|
|
924
|
-
title: string;
|
|
925
|
-
/** Total across everything, not just what's listed. Omit to hide. */
|
|
926
|
-
count?: number;
|
|
927
|
-
/** Header click — go to this section's full page. */
|
|
928
|
-
onOpen?: () => void;
|
|
929
|
-
/** Header-right actions: distinct doors into the section's experiences. */
|
|
930
|
-
actions?: SectionStripAction[];
|
|
931
|
-
/** Captioned row groups; groups with no rows are skipped. */
|
|
932
|
-
groups: SectionStripGroup[];
|
|
933
|
-
/**
|
|
934
|
-
* Shown when every group is empty. By default a single quiet row. Supply an
|
|
935
|
-
* `icon` (and optional `description`) to render the fuller dashed empty state
|
|
936
|
-
* instead — the same shape a card uses, for sections that want the empty
|
|
937
|
-
* state to invite rather than just note.
|
|
938
|
-
*/
|
|
939
|
-
empty?: {
|
|
940
|
-
label: ReactNode;
|
|
941
|
-
onClick?: () => void;
|
|
942
|
-
testId?: string;
|
|
943
|
-
icon?: LucideIcon;
|
|
944
|
-
description?: ReactNode;
|
|
945
|
-
};
|
|
946
|
-
className?: string;
|
|
947
|
-
/** Root test id; children derive `-open` and per-action/per-group ids. */
|
|
948
|
-
testId?: string;
|
|
949
|
-
}
|
|
950
|
-
declare function SectionStrip({ icon: Icon, title, count, onOpen, actions, groups, empty, className, testId, }: SectionStripProps): react.JSX.Element;
|
|
951
|
-
|
|
952
|
-
interface StartHeroProps {
|
|
953
|
-
title: string;
|
|
954
|
-
subtitle?: string;
|
|
955
|
-
/** The primary way in — typically an AskBar. */
|
|
956
|
-
children?: ReactNode;
|
|
957
|
-
/** The big dashed secondary door. */
|
|
958
|
-
tile?: {
|
|
959
|
-
icon: LucideIcon;
|
|
960
|
-
label: string;
|
|
961
|
-
description?: string;
|
|
962
|
-
onClick: () => void;
|
|
963
|
-
testId?: string;
|
|
964
|
-
};
|
|
965
|
-
/** A quiet closing line — membership state, a hint. */
|
|
966
|
-
footer?: ReactNode;
|
|
967
|
-
className?: string;
|
|
968
|
-
testId?: string;
|
|
969
|
-
}
|
|
970
|
-
declare function StartHero({ title, subtitle, children, tile, footer, className, testId, }: StartHeroProps): react.JSX.Element;
|
|
971
|
-
|
|
972
|
-
/** One member shown in the avatar stack — source-agnostic, not the raw SDK shape. */
|
|
973
|
-
interface WorkspaceCardMember {
|
|
974
|
-
name: string;
|
|
975
|
-
picture?: string | null;
|
|
976
|
-
}
|
|
977
|
-
interface WorkspaceCardProps {
|
|
978
|
-
name: string;
|
|
979
|
-
/** Uppercase eyebrow under the name, e.g. the matter reference. Omit to let
|
|
980
|
-
* the name and description carry the card on their own. */
|
|
981
|
-
matterRef?: string;
|
|
982
|
-
description?: string;
|
|
983
|
-
docCount: number;
|
|
984
|
-
/** Conversation count, shown as a third stat. Omit to hide the stat entirely. */
|
|
985
|
-
chatCount?: number;
|
|
986
|
-
/** Defaults to `members.length` when omitted. */
|
|
987
|
-
memberCount?: number;
|
|
988
|
-
/** Drives the overlapping avatar stack (shows up to 3, then a `+N` overflow). */
|
|
989
|
-
members?: WorkspaceCardMember[];
|
|
990
|
-
/**
|
|
991
|
-
* The member list is not visible to this viewer (e.g. row-level security hides
|
|
992
|
-
* the members of a public workspace you haven't joined). Renders an em dash in
|
|
993
|
-
* place of the count and drops the avatar stack, rather than lying with a `0`.
|
|
994
|
-
*/
|
|
995
|
-
membersHidden?: boolean;
|
|
996
|
-
/** ISO timestamp — renders "Updated {relative} ago" at the footer's right edge. */
|
|
997
|
-
updatedAt?: string;
|
|
998
|
-
/** Marks this as the current workspace: an accented card surface and a footer label. */
|
|
999
|
-
active?: boolean;
|
|
1000
|
-
/** Shows a spinner in the Open affordance while a switch is in flight. */
|
|
1001
|
-
busy?: boolean;
|
|
1002
|
-
onOpen?: () => void;
|
|
1003
|
-
/** Icon in the header tile. Defaults to a lock/folder glyph. */
|
|
1004
|
-
icon?: LucideIcon;
|
|
1005
|
-
/** Replaces the whole header icon tile — for a richer, app-supplied glyph. */
|
|
1006
|
-
iconSlot?: ReactNode;
|
|
1007
|
-
/** Canonical workspace entity pill shown at the top of the description tooltip. */
|
|
1008
|
-
tooltipEntitySlot?: ReactNode;
|
|
1009
|
-
/**
|
|
1010
|
-
* Secondary context for the card (the ARBI app puts the owning project here).
|
|
1011
|
-
* Sits top-right and is revealed on hover/focus, so the resting card stays
|
|
1012
|
-
* about the workspace itself.
|
|
1013
|
-
*/
|
|
1014
|
-
cornerSlot?: ReactNode;
|
|
1015
|
-
/**
|
|
1016
|
-
* Accent as a theme colour-token key (e.g. `emerald`, or a firm's own brand
|
|
1017
|
-
* token), resolved to `var(--color-<accent>)` at render — same contract as
|
|
1018
|
-
* MetricCard. Tints the icon tile and the Open affordance, so a firm can accent
|
|
1019
|
-
* the card without its brand classes leaking into the kit. `'default'` (or
|
|
1020
|
-
* omitted) uses the semantic `primary` token.
|
|
1021
|
-
*/
|
|
1022
|
-
accent?: string;
|
|
1023
|
-
/** Stable id for the card root; the footer action gets `${testId}-open`. */
|
|
1024
|
-
testId?: string;
|
|
1025
|
-
/** Overrides the footer action's test id when a caller needs a specific one. */
|
|
1026
|
-
buttonTestId?: string;
|
|
1027
|
-
className?: string;
|
|
1028
|
-
}
|
|
1029
|
-
/**
|
|
1030
|
-
* The one true workspace card. A themeable, source-agnostic tile, in three bands:
|
|
1031
|
-
*
|
|
1032
|
-
* 1. header — icon + workspace name; secondary context (`cornerSlot`) hides
|
|
1033
|
-
* top-right until hover, keeping the resting card about the workspace.
|
|
1034
|
-
* 2. body — an expanded description area with the centred Open/current
|
|
1035
|
-
* affordance layered over it only on hover or keyboard focus.
|
|
1036
|
-
* 3. footer — doc/chat counts stay left and membership stays right, followed
|
|
1037
|
-
* by a final left-aligned update timestamp.
|
|
1038
|
-
*
|
|
1039
|
-
* State is said once, in words. There is deliberately no status badge.
|
|
1040
|
-
*
|
|
1041
|
-
* Styled with the kit's SEMANTIC tokens only (foreground, muted-foreground,
|
|
1042
|
-
* primary, card, border, accent), so every firm gets it in its own colours
|
|
1043
|
-
* without any firm-branded classes leaking in.
|
|
1044
|
-
*/
|
|
1045
|
-
declare function WorkspaceCard({ name, matterRef, description, docCount, chatCount, memberCount, members, membersHidden, updatedAt, active, busy, onOpen, icon: Icon, iconSlot, tooltipEntitySlot, cornerSlot, accent, testId, buttonTestId, className, }: WorkspaceCardProps): react.JSX.Element;
|
|
1046
|
-
|
|
1047
|
-
interface StatItem {
|
|
1048
|
-
value: string;
|
|
1049
|
-
label: string;
|
|
1050
|
-
/** Optional caption under the label (e.g. a qualifier or unit). */
|
|
1051
|
-
sub?: string;
|
|
1052
|
-
}
|
|
1053
|
-
interface StatGroupProps {
|
|
1054
|
-
items: StatItem[];
|
|
1055
|
-
testId?: string;
|
|
1056
|
-
}
|
|
1057
|
-
/** Big-number stat group — headline metrics with captions. */
|
|
1058
|
-
declare function StatGroup({ items, testId }: StatGroupProps): react.JSX.Element;
|
|
1059
|
-
|
|
1060
|
-
/**
|
|
1061
|
-
* Navigation shapes shared by firm app shells. The concrete nav manifest (which
|
|
1062
|
-
* modules, in what order) is per-firm data the app supplies; these interfaces
|
|
1063
|
-
* give it a typed contract the shared shell can render.
|
|
1064
|
-
*/
|
|
1065
|
-
|
|
1066
|
-
interface AppNavItem {
|
|
1067
|
-
to: string;
|
|
1068
|
-
label: string;
|
|
1069
|
-
icon: LucideIcon;
|
|
1070
|
-
id: string;
|
|
1071
|
-
/** true for ARBI-powered modules (document management + agentic AI). */
|
|
1072
|
-
arbi?: boolean;
|
|
1073
|
-
end?: boolean;
|
|
1074
|
-
}
|
|
1075
|
-
interface AppNavSection {
|
|
1076
|
-
heading: string;
|
|
1077
|
-
items: AppNavItem[];
|
|
1078
|
-
}
|
|
1079
|
-
|
|
1080
|
-
interface AppShellProps {
|
|
1081
|
-
/** Nav sections to render (already filtered/ordered by the app). */
|
|
1082
|
-
sections: AppNavSection[];
|
|
1083
|
-
/** Footer nav items pinned to the bottom of the sidebar (e.g. Settings). */
|
|
1084
|
-
footerItems?: AppNavItem[];
|
|
1085
|
-
/** Brand mark shown in the sidebar header. */
|
|
1086
|
-
logo?: ReactNode;
|
|
1087
|
-
/** Where the logo links to (omit to render the logo without a link). */
|
|
1088
|
-
logoHref?: string;
|
|
1089
|
-
logoLabel?: string;
|
|
1090
|
-
/** Extra content below the footer nav (e.g. a connection-status pill). */
|
|
1091
|
-
sidebarFooter?: ReactNode;
|
|
1092
|
-
/** Topbar content, rendered to the right of the mobile hamburger. */
|
|
1093
|
-
topbar?: ReactNode;
|
|
1094
|
-
/** Optional docked panel on the far right (e.g. an AI chat rail). */
|
|
1095
|
-
rightRail?: ReactNode;
|
|
1096
|
-
/** Main scroll region content (typically a router `<Outlet/>` wrapper). */
|
|
1097
|
-
children: ReactNode;
|
|
1098
|
-
/** Extra classes for the `<main>` scroll region (e.g. a slim-scrollbar util). */
|
|
1099
|
-
mainClassName?: string;
|
|
1100
|
-
/** Testid namespace for the shell/topbar/sidebar. Default "app". */
|
|
1101
|
-
testIdPrefix?: string;
|
|
1102
|
-
}
|
|
1103
|
-
declare function AppShell({ sections, footerItems, logo, logoHref, logoLabel, sidebarFooter, topbar, rightRail, children, mainClassName, testIdPrefix, }: AppShellProps): react.JSX.Element;
|
|
1104
|
-
|
|
1105
|
-
interface AppHeaderUser {
|
|
1106
|
-
name: string;
|
|
1107
|
-
email?: string | null;
|
|
1108
|
-
picture?: string | null;
|
|
1109
|
-
}
|
|
1110
|
-
interface AppHeaderProps {
|
|
1111
|
-
/** Open the command palette (⌘K). Bound to the search trigger. */
|
|
1112
|
-
onSearch: () => void;
|
|
1113
|
-
/** Open the palette in ask mode (defaults to `onSearch`). */
|
|
1114
|
-
onAsk?: () => void;
|
|
1115
|
-
searchPlaceholder?: string;
|
|
1116
|
-
searchKbd?: string;
|
|
1117
|
-
askLabel?: string;
|
|
1118
|
-
/** Right-cluster content before the action buttons (e.g. a running-timer). */
|
|
1119
|
-
leading?: ReactNode;
|
|
1120
|
-
/** Extra icon buttons between Ask AI and the bell (e.g. a chat toggle). */
|
|
1121
|
-
actions?: ReactNode;
|
|
1122
|
-
user: AppHeaderUser;
|
|
1123
|
-
/** Account actions above sign-out (e.g. Settings). */
|
|
1124
|
-
userItems?: UserMenuItem[];
|
|
1125
|
-
onLogout: () => void;
|
|
1126
|
-
/** Called with a notification's href when an entry is clicked. */
|
|
1127
|
-
onNotificationNavigate?: (href: string) => void;
|
|
1128
|
-
/** Override per-variant notification glyph colours (e.g. brand accent). */
|
|
1129
|
-
notificationTones?: Partial<Record<NotifyVariant, string>>;
|
|
1130
|
-
classNames?: {
|
|
1131
|
-
search?: string;
|
|
1132
|
-
askButton?: string;
|
|
1133
|
-
};
|
|
1134
|
-
testIdPrefix?: string;
|
|
1135
|
-
}
|
|
1136
|
-
declare function AppHeader({ onSearch, onAsk, searchPlaceholder, searchKbd, askLabel, leading, actions, user, userItems, onLogout, onNotificationNavigate, notificationTones, classNames, testIdPrefix, }: AppHeaderProps): react.JSX.Element;
|
|
1137
|
-
|
|
1138
|
-
/**
|
|
1139
|
-
* Shared studio types — the persistence contract, page metadata and the AI
|
|
1140
|
-
* prompt-builder signature the firm supplies. Firm-agnostic: a firm app wires
|
|
1141
|
-
* these to its own marketing workspace and voice.
|
|
1142
|
-
*/
|
|
1143
|
-
|
|
1144
|
-
/** The Arbi instance type, borrowed from the hook so we don't import internals. */
|
|
1145
|
-
type Arbi = ReturnType<typeof useArbi>;
|
|
1146
|
-
/** A page the studio can author (slug → friendly label). */
|
|
1147
|
-
interface StudioPageMeta {
|
|
1148
|
-
slug: string;
|
|
1149
|
-
label: string;
|
|
1150
|
-
}
|
|
1151
|
-
/** Where a save/load ultimately resolved. */
|
|
1152
|
-
type PersistVia = 'arbi' | 'local';
|
|
1153
|
-
interface LoadResult<T> {
|
|
1154
|
-
data: T | null;
|
|
1155
|
-
via: PersistVia;
|
|
1156
|
-
}
|
|
1157
|
-
/** The save/load surface the studio + renderer consume. */
|
|
1158
|
-
interface StudioPersistence {
|
|
1159
|
-
/** Persist the authoring layout for a slug (image values stay `asset:` refs). */
|
|
1160
|
-
savePage: (arbi: Arbi | null, live: boolean, slug: string, data: unknown) => Promise<PersistVia>;
|
|
1161
|
-
loadPage: <T>(arbi: Arbi | null, live: boolean, slug: string) => Promise<LoadResult<T>>;
|
|
1162
|
-
/**
|
|
1163
|
-
* Persist the **published** layout for a slug — a self-contained copy whose
|
|
1164
|
-
* asset refs have been materialized to `data:` URIs, so the unauthenticated
|
|
1165
|
-
* public renderer can paint it. The public renderer reads this, not savePage's.
|
|
1166
|
-
*/
|
|
1167
|
-
savePublished: (arbi: Arbi | null, live: boolean, slug: string, data: unknown) => Promise<PersistVia>;
|
|
1168
|
-
loadPublished: <T>(arbi: Arbi | null, live: boolean, slug: string) => Promise<LoadResult<T>>;
|
|
1169
|
-
/**
|
|
1170
|
-
* Delete a slug's stored authoring + published pages (backend and localStorage
|
|
1171
|
-
* mirror). Lets a page be reset to empty; also the deterministic-reset hook a
|
|
1172
|
-
* test/demo needs, since backend content otherwise wins over a fresh seed.
|
|
1173
|
-
*/
|
|
1174
|
-
deletePage: (arbi: Arbi | null, live: boolean, slug: string) => Promise<void>;
|
|
1175
|
-
saveTheme: (arbi: Arbi | null, live: boolean, theme: unknown) => Promise<PersistVia>;
|
|
1176
|
-
loadTheme: <T>(arbi: Arbi | null, live: boolean) => Promise<LoadResult<T>>;
|
|
1177
|
-
}
|
|
1178
|
-
/** Build an AI instruction for a field, given its kind, label and current text. */
|
|
1179
|
-
type BuildPrompt = (a: {
|
|
1180
|
-
kind: string;
|
|
1181
|
-
label: string;
|
|
1182
|
-
current: string;
|
|
1183
|
-
}) => string;
|
|
1184
|
-
|
|
1185
|
-
interface AiFieldsConfig {
|
|
1186
|
-
/** The marketing workspace the AI grounds on. */
|
|
1187
|
-
workspaceId: string;
|
|
1188
|
-
/** Turns a field's kind/label/current text into an instruction. */
|
|
1189
|
-
buildPrompt: BuildPrompt;
|
|
1190
|
-
/** Default prompt kind when a field does not specify one. */
|
|
1191
|
-
defaultKind?: string;
|
|
1192
|
-
/** Testid namespace for the field + write button. */
|
|
1193
|
-
testIdPrefix?: string;
|
|
1194
|
-
}
|
|
1195
|
-
interface AiFields {
|
|
1196
|
-
aiText: (label: string, placeholder?: string) => CustomField<string>;
|
|
1197
|
-
aiTextarea: (label: string, placeholder?: string, kind?: string) => CustomField<string>;
|
|
1198
|
-
}
|
|
1199
|
-
declare function createAiFields(cfg: AiFieldsConfig): AiFields;
|
|
1200
|
-
|
|
1201
|
-
/**
|
|
1202
|
-
* Shared field helpers for the block registry. Every block config — the built-ins
|
|
1203
|
-
* in {@link createArbiBlocksConfig} and the website blocks in
|
|
1204
|
-
* {@link file://./websiteBlocks.tsx} — builds its Puck fields from this one kit so
|
|
1205
|
-
* the AI-or-plain copy fallback, the icon `select`, the tone/bool radios and the
|
|
1206
|
-
* stable render-time testid are declared once.
|
|
1207
|
-
*/
|
|
1208
|
-
|
|
1209
|
-
declare const iconMap: Record<string, LucideIcon>;
|
|
1210
|
-
/** The bundle of field helpers a block config needs. */
|
|
1211
|
-
interface BlockKit {
|
|
1212
|
-
/** Single-line copy: AI-authorable when a firm supplies aiFields, else plain text. */
|
|
1213
|
-
textField: (label: string, placeholder?: string) => Field;
|
|
1214
|
-
/** Multi-line copy: AI-authorable when a firm supplies aiFields, else plain textarea. */
|
|
1215
|
-
textareaField: (label: string, placeholder?: string, kind?: string) => Field;
|
|
1216
|
-
/** Image source: a workspace-asset picker when a firm supplies imageField, else a URL input. */
|
|
1217
|
-
imageField: (label: string) => Field;
|
|
1218
|
-
/** A Yes/No radio. */
|
|
1219
|
-
boolRadio: (label: string) => Field;
|
|
1220
|
-
/** A `select` over {@link iconMap} names. */
|
|
1221
|
-
iconField: (label?: string) => Field;
|
|
1222
|
-
/** Resolve an icon name to its Lucide component. */
|
|
1223
|
-
resolveIcon: (name?: string) => LucideIcon | undefined;
|
|
1224
|
-
/** Stable, e2e-locatable testid derived from a block's Puck id. */
|
|
1225
|
-
blockTestId: (id: string) => string;
|
|
1226
|
-
/**
|
|
1227
|
-
* Optional firm override for the eyebrow style on heading-bearing blocks
|
|
1228
|
-
* (Hero, Section heading). Lets a consumer render a brand accent (e.g. a brass
|
|
1229
|
-
* eyebrow) without forking the blocks. Undefined → the default token classes.
|
|
1230
|
-
*/
|
|
1231
|
-
eyebrowClassName?: string;
|
|
1232
|
-
}
|
|
1233
|
-
/** Build the shared field helpers, closing over the firm's optional AI + image fields. */
|
|
1234
|
-
declare function createBlockKit(ai?: AiFields, image?: (label: string) => Field, eyebrowClassName?: string): BlockKit;
|
|
1235
|
-
|
|
1236
|
-
/**
|
|
1237
|
-
* Live-widget block factory for @arbidocs/blocks.
|
|
1238
|
-
*
|
|
1239
|
-
* Mirrors the other `create*Blocks` factories: it only WIRES pre-built block
|
|
1240
|
-
* components (from {@link ./liveWidgetRuntime}) into Puck `ComponentConfig`s, so
|
|
1241
|
-
* it exports a single function and defines no components of its own — keeping it
|
|
1242
|
-
* fast-refresh clean. The blocks gate on the live-data flag ({@link ./liveData}),
|
|
1243
|
-
* rendering real ARBI data inside an authenticated app tree and a placeholder in
|
|
1244
|
-
* the editor/public. They read the SHARED `@arbidocs/react` hooks, so any client
|
|
1245
|
-
* with an ARBI workspace gets them; a client supplies only *composition* via
|
|
1246
|
-
* `createArbiBlocksConfig({ liveWidgets: true })`.
|
|
1247
|
-
*/
|
|
1248
|
-
|
|
1249
|
-
/**
|
|
1250
|
-
* Build the live-widget block set, closing over the shared {@link BlockKit} for
|
|
1251
|
-
* stable testids. Registered under a "Widgets" category when a consumer opts in
|
|
1252
|
-
* with `createArbiBlocksConfig({ liveWidgets: true })`.
|
|
1253
|
-
*/
|
|
1254
|
-
declare function createLiveWidgets(kit: BlockKit): Record<string, ComponentConfig>;
|
|
1255
|
-
|
|
1256
|
-
/** Marks the subtree as an authenticated app tree, so live widgets resolve data. */
|
|
1257
|
-
declare function LiveDataProvider({ children }: {
|
|
1258
|
-
children: ReactNode;
|
|
1259
|
-
}): react.JSX.Element;
|
|
1260
|
-
/**
|
|
1261
|
-
* What a live widget shows when it can't (or shouldn't) resolve data: a labelled,
|
|
1262
|
-
* dashed card. Used in the Studio canvas and the public renderer so authoring a
|
|
1263
|
-
* dashboard is WYSIWYG-ish without leaking live back-office data.
|
|
1264
|
-
*/
|
|
1265
|
-
declare function WidgetPlaceholder({ label, icon: Icon, testId, }: {
|
|
1266
|
-
label: string;
|
|
1267
|
-
icon?: LucideIcon;
|
|
1268
|
-
testId?: string;
|
|
1269
|
-
}): react.JSX.Element;
|
|
1270
|
-
|
|
1271
|
-
/** Whether live widgets may resolve backend data here (false in editor/public). */
|
|
1272
|
-
declare function useLiveDataActive(): boolean;
|
|
1273
|
-
|
|
1274
|
-
/**
|
|
1275
|
-
* Publish-time asset materialization.
|
|
1276
|
-
*
|
|
1277
|
-
* While authoring, an image is stored as a workspace **asset ref**
|
|
1278
|
-
* (`asset:<docId>`) — resolvable only inside the authenticated Studio. The
|
|
1279
|
-
* public marketing renderer has no auth token, so a published page must be
|
|
1280
|
-
* **self-contained**: every asset ref is replaced with a directly-renderable
|
|
1281
|
-
* source before the page is saved for the public.
|
|
1282
|
-
*
|
|
1283
|
-
* The default {@link createArbiMaterializer} downloads each asset once and
|
|
1284
|
-
* inlines it as a `data:` URI — the bytes travel *inside* the published JSON,
|
|
1285
|
-
* so nothing is fetched, served or auth-gated at render time (no backend). A
|
|
1286
|
-
* consumer that prefers a CDN/static host can pass a `publishAsset` hook that
|
|
1287
|
-
* uploads the bytes and returns a URL instead; that is purely a payload-size
|
|
1288
|
-
* optimization and keeps this package firm- and backend-agnostic.
|
|
1289
|
-
*/
|
|
1290
|
-
|
|
1291
|
-
/** Resolve a workspace document ext_id to a public-renderable src, or null. */
|
|
1292
|
-
type AssetMaterializer = (docId: string) => Promise<string | null>;
|
|
1293
|
-
interface MaterializeOptions {
|
|
1294
|
-
/**
|
|
1295
|
-
* Optional sink: given a doc id + its bytes, store them somewhere public and
|
|
1296
|
-
* return the URL. When omitted, bytes are inlined as a `data:` URI (no backend).
|
|
1297
|
-
*/
|
|
1298
|
-
publishAsset?: (docId: string, blob: Blob) => Promise<string>;
|
|
1299
|
-
}
|
|
1300
|
-
/**
|
|
1301
|
-
* A materializer backed by the authenticated Arbi client: download the asset,
|
|
1302
|
-
* then either hand it to `publishAsset` or inline it as a data URI. Any failure
|
|
1303
|
-
* resolves to `null` so a single broken asset never fails the whole publish.
|
|
1304
|
-
*/
|
|
1305
|
-
declare function createArbiMaterializer(arbi: Arbi, opts?: MaterializeOptions): AssetMaterializer;
|
|
1306
|
-
/**
|
|
1307
|
-
* Return a copy of `data` with every `asset:<docId>` ref replaced by its
|
|
1308
|
-
* materialized source. Each distinct ref is resolved exactly once; a ref that
|
|
1309
|
-
* fails to resolve is left untouched (it simply won't paint for the public).
|
|
1310
|
-
*/
|
|
1311
|
-
declare function materializePageData(data: Data, materialize: AssetMaterializer): Promise<Data>;
|
|
1312
|
-
|
|
1313
|
-
interface StudioEditorProps {
|
|
1314
|
-
config: Config;
|
|
1315
|
-
pages: readonly StudioPageMeta[];
|
|
1316
|
-
persistence: StudioPersistence;
|
|
1317
|
-
themeBundle: ThemeBundle;
|
|
1318
|
-
defaultTheme: ThemeTokens;
|
|
1319
|
-
brandLabel: string;
|
|
1320
|
-
backHref?: string;
|
|
1321
|
-
backLabel?: string;
|
|
1322
|
-
live: boolean;
|
|
1323
|
-
initialSlug?: string;
|
|
1324
|
-
testIdPrefix?: string;
|
|
1325
|
-
/**
|
|
1326
|
-
* Install a DEV-only `window.__studioResetSlug(slug)` hook that clears a slug's
|
|
1327
|
-
* stored page so a fresh seed governs the canvas. For tests/demos only — it can
|
|
1328
|
-
* delete pages, so keep it off in production (pass `import.meta.env.DEV`). The
|
|
1329
|
-
* package stays env-agnostic; the consumer owns the flag.
|
|
1330
|
-
*/
|
|
1331
|
-
resetSeam?: boolean;
|
|
1332
|
-
/**
|
|
1333
|
-
* Optional sink for published image bytes. When omitted, publishing inlines
|
|
1334
|
-
* each asset as a `data:` URI (self-contained, no backend). Provide this to
|
|
1335
|
-
* upload bytes to a CDN/static host and return a URL instead.
|
|
1336
|
-
*/
|
|
1337
|
-
publishAsset?: MaterializeOptions['publishAsset'];
|
|
1338
|
-
}
|
|
1339
|
-
declare function StudioEditor({ config, pages, persistence, themeBundle, defaultTheme, brandLabel, backHref, backLabel, live, initialSlug, testIdPrefix, publishAsset, resetSeam, }: StudioEditorProps): react.JSX.Element;
|
|
1340
|
-
|
|
1341
|
-
interface PageRendererProps {
|
|
1342
|
-
config: Config;
|
|
1343
|
-
persistence: StudioPersistence;
|
|
1344
|
-
defaultTheme: ThemeTokens;
|
|
1345
|
-
live: boolean;
|
|
1346
|
-
slug?: string;
|
|
1347
|
-
emptyState?: {
|
|
1348
|
-
title: string;
|
|
1349
|
-
body: string;
|
|
1350
|
-
};
|
|
1351
|
-
testIdPrefix?: string;
|
|
1352
|
-
/**
|
|
1353
|
-
* Render inside a {@link LiveDataProvider}, so live-widget blocks resolve real
|
|
1354
|
-
* ARBI data. Only pass this when mounting the renderer INSIDE the authenticated
|
|
1355
|
-
* app tree (providers + a selected workspace present); on the public site leave
|
|
1356
|
-
* it off and widgets render placeholders.
|
|
1357
|
-
*/
|
|
1358
|
-
liveData?: boolean;
|
|
1359
|
-
/**
|
|
1360
|
-
* Render this page verbatim instead of loading a slug from persistence — for an
|
|
1361
|
-
* in-code page (e.g. a config-authored in-app board) that isn't a published
|
|
1362
|
-
* studio document. The slug is ignored.
|
|
1363
|
-
*/
|
|
1364
|
-
initialData?: Data;
|
|
1365
|
-
/**
|
|
1366
|
-
* Apply the persisted studio theme to the document (default true). Turn OFF for
|
|
1367
|
-
* an in-app renderer so it keeps the ambient app theme instead of repainting the
|
|
1368
|
-
* whole document with the marketing palette.
|
|
1369
|
-
*/
|
|
1370
|
-
applyTheme?: boolean;
|
|
1371
|
-
}
|
|
1372
|
-
declare function PageRenderer({ config, persistence, defaultTheme, live, slug: slugProp, emptyState, testIdPrefix, liveData, initialData, applyTheme, }: PageRendererProps): react.JSX.Element;
|
|
1373
|
-
|
|
1374
|
-
interface StudioPersistenceConfig {
|
|
1375
|
-
/** The public marketing workspace that backs the site builder. */
|
|
1376
|
-
workspaceId: string;
|
|
1377
|
-
/** Folder inside the workspace where studio artefacts live. */
|
|
1378
|
-
folder?: string;
|
|
1379
|
-
/** Prefix for the localStorage mirror keys (e.g. "studio-"). */
|
|
1380
|
-
storagePrefix: string;
|
|
1381
|
-
/** localStorage key for the theme mirror (default `${storagePrefix}theme`). */
|
|
1382
|
-
themeStorageKey?: string;
|
|
1383
|
-
/** File name for the persisted theme document (default "theme.json"). */
|
|
1384
|
-
themeFileName?: string;
|
|
1385
|
-
/** File name for a page's persisted document (default `${slug}.json`). */
|
|
1386
|
-
pageFileName?: (slug: string) => string;
|
|
1387
|
-
/** File name for a page's published document (default `${slug}.published.json`). */
|
|
1388
|
-
publishedFileName?: (slug: string) => string;
|
|
1389
|
-
}
|
|
1390
|
-
declare function createStudioPersistence(cfg: StudioPersistenceConfig): StudioPersistence;
|
|
1391
|
-
|
|
1392
|
-
interface ImageFieldConfig {
|
|
1393
|
-
/** The workspace uploads/generations are saved to, and assets are picked from. */
|
|
1394
|
-
workspaceId: string;
|
|
1395
|
-
/** Folder for uploaded/authored assets. Default "assets". */
|
|
1396
|
-
folder?: string;
|
|
1397
|
-
/** Testid namespace. Default "studio". */
|
|
1398
|
-
testIdPrefix?: string;
|
|
1399
|
-
}
|
|
1400
|
-
interface ImageFieldFactory {
|
|
1401
|
-
imageField: (label: string) => CustomField<string>;
|
|
1402
|
-
}
|
|
1403
|
-
/** Build the image field, closing over the firm's workspace + testid prefix. */
|
|
1404
|
-
declare function createImageField(cfg: ImageFieldConfig): ImageFieldFactory;
|
|
1405
|
-
|
|
1406
|
-
interface UseImageGen {
|
|
1407
|
-
/** ext_id of the most recently generated image document (null until one exists). */
|
|
1408
|
-
docExtId: string | null;
|
|
1409
|
-
/** Underlying task status: 'idle' | 'running' | 'done' | 'error'. */
|
|
1410
|
-
status: AiTaskStatus;
|
|
1411
|
-
/** Human-readable failure message, or null. */
|
|
1412
|
-
error: string | null;
|
|
1413
|
-
/** True while a generation is in flight. */
|
|
1414
|
-
isGenerating: boolean;
|
|
1415
|
-
/**
|
|
1416
|
-
* Generate an image from a prompt, optionally editing / drawing on one or
|
|
1417
|
-
* more reference images already in the workspace. Pass the reference images'
|
|
1418
|
-
* document ext_ids in `referenceDocIds` (omit or `[]` for plain text→image).
|
|
1419
|
-
* Resolves with the new image document's ext_id, or null when the prompt is
|
|
1420
|
-
* empty or no image was produced.
|
|
1421
|
-
*/
|
|
1422
|
-
generate: (prompt: string, referenceDocIds?: string[]) => Promise<string | null>;
|
|
1423
|
-
/** Clear the current result and error. */
|
|
1424
|
-
reset: () => void;
|
|
1425
|
-
}
|
|
1426
|
-
declare function useImageGen(): UseImageGen;
|
|
1427
|
-
|
|
1428
|
-
/** Marks a stored image value as a workspace asset ref rather than a URL. */
|
|
1429
|
-
declare const ASSET_REF_PREFIX = "asset:";
|
|
1430
|
-
/** Wrap a workspace document ext_id as a storable asset ref. */
|
|
1431
|
-
declare function asAssetRef(docId: string): string;
|
|
1432
|
-
/** The workspace document ext_id behind an asset ref (`asset:doc-1` → `doc-1`). */
|
|
1433
|
-
declare function assetRefId(src: string): string;
|
|
1434
|
-
/** What a resolver component receives. `AssetThumb` in `./assetImage` implements it. */
|
|
1435
|
-
interface AssetRenderProps {
|
|
1436
|
-
docId: string;
|
|
1437
|
-
alt?: string;
|
|
1438
|
-
className?: string;
|
|
1439
|
-
testId?: string;
|
|
1440
|
-
}
|
|
1441
|
-
/** Renders a workspace asset ext_id as an image. */
|
|
1442
|
-
type AssetRenderer = ComponentType<AssetRenderProps>;
|
|
1443
|
-
declare function AssetResolverProvider({ render, children, }: {
|
|
1444
|
-
/** Typically `AssetThumb` from `./assetImage`. */
|
|
1445
|
-
render: AssetRenderer;
|
|
1446
|
-
children: ReactNode;
|
|
1447
|
-
}): react.JSX.Element;
|
|
1448
|
-
/** The active resolver, or `null` when asset refs must render verbatim. */
|
|
1449
|
-
declare function useAssetRenderer(): AssetRenderer | null;
|
|
1450
|
-
/** True only where a bare asset ext_id can be resolved (the authenticated Studio). */
|
|
1451
|
-
declare function useAssetResolverActive(): boolean;
|
|
1452
|
-
/**
|
|
1453
|
-
* Is `src` a workspace asset ref (`asset:<docId>`) rather than an already-
|
|
1454
|
-
* renderable URL / `data:` URI? Only prefixed refs need resolution.
|
|
1455
|
-
*/
|
|
1456
|
-
declare function isAssetRef(src: string | undefined): src is string;
|
|
1457
|
-
|
|
1458
|
-
/**
|
|
1459
|
-
* Resolve an asset ext_id to a displayable image src.
|
|
1460
|
-
*
|
|
1461
|
-
* Prefer the cheap thumbnail endpoint, but fall back to downloading the actual
|
|
1462
|
-
* bytes as an object URL when there's no thumbnail — AI-generated (and freshly
|
|
1463
|
-
* uploaded) images have no thumbnail yet, so the thumbnail-only path renders a
|
|
1464
|
-
* broken `<img>`. The bytes always exist (it's a stored document), so the editor
|
|
1465
|
-
* shows the real image immediately instead of waiting on async thumbnailing.
|
|
1466
|
-
*/
|
|
1467
|
-
declare function useAssetImage(docId: string): string | undefined;
|
|
1468
|
-
/**
|
|
1469
|
-
* Resolve a single asset ext_id and render it as an `<img>`. This is the
|
|
1470
|
-
* `AssetRenderer` the Studio injects; it satisfies `AssetRenderProps`.
|
|
1471
|
-
*/
|
|
1472
|
-
declare function AssetThumb({ docId, alt, className, testId }: AssetRenderProps): react.JSX.Element;
|
|
1473
|
-
|
|
1474
|
-
type SectionTone = 'default' | 'muted' | 'ink';
|
|
1475
|
-
type SectionPadding = 'none' | 'sm' | 'md' | 'lg';
|
|
1476
|
-
type SectionWidth = 'narrow' | 'default' | 'wide' | 'full';
|
|
1477
|
-
interface SectionProps {
|
|
1478
|
-
children: ReactNode;
|
|
1479
|
-
tone?: SectionTone;
|
|
1480
|
-
padding?: SectionPadding;
|
|
1481
|
-
maxWidth?: SectionWidth;
|
|
1482
|
-
/** Subtle grain/texture overlay in the current text colour (editorial surfaces). */
|
|
1483
|
-
texture?: boolean;
|
|
1484
|
-
className?: string;
|
|
1485
|
-
}
|
|
1486
|
-
declare function Section({ children, tone, padding, maxWidth, texture, className, }: SectionProps): react.JSX.Element;
|
|
1487
|
-
|
|
1488
|
-
interface ArbiBlocksConfigOptions {
|
|
1489
|
-
/**
|
|
1490
|
-
* Firm AI fields from {@link createAiFields}. When present, every string copy
|
|
1491
|
-
* prop becomes an AI-authorable field; when absent, plain Puck text inputs.
|
|
1492
|
-
*/
|
|
1493
|
-
aiFields?: AiFields;
|
|
1494
|
-
/**
|
|
1495
|
-
* Firm image field from {@link createImageField}. When present, image props
|
|
1496
|
-
* become a workspace-asset picker (pick / upload / URL / generate); when absent,
|
|
1497
|
-
* a plain URL text input.
|
|
1498
|
-
*/
|
|
1499
|
-
imageField?: (label: string) => Field;
|
|
1500
|
-
/**
|
|
1501
|
-
* Page canvas overrides. The builder paints every page inside this root; a
|
|
1502
|
-
* consumer sets e.g. a dark editorial canvas without forking the package.
|
|
1503
|
-
* Defaults to `bg-background text-foreground font-sans` on a neutral wrapper.
|
|
1504
|
-
*/
|
|
1505
|
-
root?: {
|
|
1506
|
-
/** Extra classes appended to (and able to override) the default canvas classes. */
|
|
1507
|
-
className?: string;
|
|
1508
|
-
/** testid for the page root wrapper. Defaults to `arbi-blocks-page-root`. */
|
|
1509
|
-
testId?: string;
|
|
1510
|
-
};
|
|
1511
|
-
/**
|
|
1512
|
-
* Firm override for the eyebrow style on heading-bearing blocks (Hero, Section
|
|
1513
|
-
* heading) — e.g. a brand accent like a brass eyebrow. Undefined → token default.
|
|
1514
|
-
*/
|
|
1515
|
-
eyebrowClassName?: string;
|
|
1516
|
-
/**
|
|
1517
|
-
* Register the live-widget blocks (a "Widgets" category) that read shared ARBI
|
|
1518
|
-
* hooks — Agent activity, Live metric. They render placeholders in the editor
|
|
1519
|
-
* and on the public site, resolving real data only inside an authenticated
|
|
1520
|
-
* in-app renderer (`PageRenderer liveData`). Opt-in so a pure marketing builder
|
|
1521
|
-
* doesn't surface back-office widgets.
|
|
1522
|
-
*/
|
|
1523
|
-
liveWidgets?: boolean;
|
|
1524
|
-
}
|
|
1525
|
-
|
|
1526
|
-
declare function createArbiBlocksConfig(opts?: ArbiBlocksConfigOptions): Config;
|
|
1527
|
-
|
|
1528
|
-
/** Build every website block, closing over the shared field {@link BlockKit}. */
|
|
1529
|
-
declare function createWebsiteBlocks(kit: BlockKit): Record<string, ComponentConfig>;
|
|
1530
|
-
|
|
1531
|
-
/**
|
|
1532
|
-
* The extended site-building block set — the richer vocabulary a builder needs to
|
|
1533
|
-
* assemble arbitrary sites beyond the marketing basics: pricing, tabs, accordion,
|
|
1534
|
-
* gallery, video, contact form, banner, split media, team, steps and a
|
|
1535
|
-
* multi-testimonial grid.
|
|
1536
|
-
*
|
|
1537
|
-
* Same contract as {@link createWebsiteBlocks}: serializable-only props, semantic
|
|
1538
|
-
* tokens (themes with the firm), a stable render-time `data-testid`, and sensible
|
|
1539
|
-
* defaults so each block looks right the moment it is dropped. Copy props route
|
|
1540
|
-
* through the shared {@link BlockKit} AI-or-plain fields.
|
|
1541
|
-
*/
|
|
1542
|
-
|
|
1543
|
-
declare function createSiteBlocks(kit: BlockKit): Record<string, ComponentConfig>;
|
|
1544
|
-
|
|
1545
|
-
/**
|
|
1546
|
-
* Module registry types — a typed model of a firm's back-office modules,
|
|
1547
|
-
* derived from its canonical nav. The builder toggles/reorders these; the
|
|
1548
|
-
* sidebar consumes the resolved result. Firm-agnostic: the nav manifest is
|
|
1549
|
-
* supplied to {@link createModuleRegistry}.
|
|
1550
|
-
*/
|
|
1551
|
-
|
|
1552
|
-
interface BuilderModule {
|
|
1553
|
-
id: string;
|
|
1554
|
-
label: string;
|
|
1555
|
-
/** Section heading it belongs to (Practice / Knowledge & AI / …). */
|
|
1556
|
-
section: string;
|
|
1557
|
-
icon: LucideIcon;
|
|
1558
|
-
to: string;
|
|
1559
|
-
arbi: boolean;
|
|
1560
|
-
end: boolean;
|
|
1561
|
-
/** Original position — global index across all sections. */
|
|
1562
|
-
defaultOrder: number;
|
|
1563
|
-
}
|
|
1564
|
-
interface ResolvedModule extends BuilderModule {
|
|
1565
|
-
enabled: boolean;
|
|
1566
|
-
order: number;
|
|
1567
|
-
}
|
|
1568
|
-
interface ModuleRegistry {
|
|
1569
|
-
DEFAULT_MODULES: BuilderModule[];
|
|
1570
|
-
SECTION_ORDER: string[];
|
|
1571
|
-
toNavItem: (m: BuilderModule) => AppNavItem;
|
|
1572
|
-
}
|
|
1573
|
-
|
|
1574
|
-
/**
|
|
1575
|
-
* Module registry — a typed model of the back-office modules derived from a
|
|
1576
|
-
* firm's canonical nav. We read the nav rather than re-declaring it so the
|
|
1577
|
-
* registry can never drift from the shipped nav (DRY). The builder
|
|
1578
|
-
* toggles/reorders these; the sidebar can consume the result via the module
|
|
1579
|
-
* store's `useEnabledNav()` without any nav data being duplicated here.
|
|
1580
|
-
*/
|
|
1581
|
-
|
|
1582
|
-
/** Build a registry from a firm's nav manifest. */
|
|
1583
|
-
declare function createModuleRegistry(appNav: AppNavSection[]): ModuleRegistry;
|
|
1584
|
-
|
|
1585
|
-
interface ModuleOverride {
|
|
1586
|
-
enabled: boolean;
|
|
1587
|
-
/** Effective order within the section. */
|
|
1588
|
-
order: number;
|
|
1589
|
-
}
|
|
1590
|
-
interface ModuleStore {
|
|
1591
|
-
/** Sparse overrides keyed by module id; absent → registry default. */
|
|
1592
|
-
overrides: Record<string, ModuleOverride>;
|
|
1593
|
-
toggle: (id: string) => void;
|
|
1594
|
-
/** Move a module up/down among its enabled+disabled section siblings. */
|
|
1595
|
-
move: (id: string, dir: 'up' | 'down') => void;
|
|
1596
|
-
reset: () => void;
|
|
1597
|
-
}
|
|
1598
|
-
interface ModuleStoreBundle {
|
|
1599
|
-
useModuleStore: UseBoundStore<StoreApi<ModuleStore>>;
|
|
1600
|
-
useResolvedModules: () => {
|
|
1601
|
-
section: string;
|
|
1602
|
-
modules: ResolvedModule[];
|
|
1603
|
-
}[];
|
|
1604
|
-
useEnabledNav: () => AppNavSection[];
|
|
1605
|
-
}
|
|
1606
|
-
declare function createModuleStore({ registry, storageKey, }: {
|
|
1607
|
-
registry: ModuleRegistry;
|
|
1608
|
-
storageKey: string;
|
|
1609
|
-
}): ModuleStoreBundle;
|
|
1610
|
-
|
|
1611
|
-
/**
|
|
1612
|
-
* Agent-selection store — which ARBI behaviour configurations and agents the
|
|
1613
|
-
* firm marks "active" for this vertical. Pure selection state (the configs and
|
|
1614
|
-
* agents themselves come live from ARBI via React Query), persisted so the
|
|
1615
|
-
* choice seeds the exported vertical config.
|
|
1616
|
-
*
|
|
1617
|
-
* Firm-agnostic: {@link createAgentSelectionStore} parameterises the persist key.
|
|
1618
|
-
*/
|
|
1619
|
-
|
|
1620
|
-
interface AgentSelectionStore {
|
|
1621
|
-
/** Configuration ext_ids marked active. */
|
|
1622
|
-
configIds: string[];
|
|
1623
|
-
/** Agent ext_ids marked active. */
|
|
1624
|
-
agentIds: string[];
|
|
1625
|
-
toggleConfig: (id: string) => void;
|
|
1626
|
-
toggleAgent: (id: string) => void;
|
|
1627
|
-
clear: () => void;
|
|
1628
|
-
}
|
|
1629
|
-
declare function createAgentSelectionStore({ storageKey, }: {
|
|
1630
|
-
storageKey: string;
|
|
1631
|
-
}): UseBoundStore<StoreApi<AgentSelectionStore>>;
|
|
1632
|
-
|
|
1633
|
-
/**
|
|
1634
|
-
* Vertical-config export shapes — the JSON seed a generator consumes to stamp
|
|
1635
|
-
* out a new vertical app (theme + enabled/ordered modules + selected agents).
|
|
1636
|
-
*/
|
|
1637
|
-
|
|
1638
|
-
interface ExportedModule {
|
|
1639
|
-
id: string;
|
|
1640
|
-
label: string;
|
|
1641
|
-
section: string;
|
|
1642
|
-
to: string;
|
|
1643
|
-
arbi: boolean;
|
|
1644
|
-
enabled: boolean;
|
|
1645
|
-
order: number;
|
|
1646
|
-
}
|
|
1647
|
-
interface VerticalConfig {
|
|
1648
|
-
version: 1;
|
|
1649
|
-
generatedAt: string;
|
|
1650
|
-
vertical: {
|
|
1651
|
-
name: string;
|
|
1652
|
-
key: string;
|
|
1653
|
-
};
|
|
1654
|
-
theme: ThemeTokens;
|
|
1655
|
-
modules: ExportedModule[];
|
|
1656
|
-
agents: {
|
|
1657
|
-
configIds: string[];
|
|
1658
|
-
agentIds: string[];
|
|
1659
|
-
};
|
|
1660
|
-
}
|
|
1661
|
-
|
|
1662
|
-
/**
|
|
1663
|
-
* Vertical-config export — combine the configured theme, enabled/ordered
|
|
1664
|
-
* modules and selected ARBI agent configs into one JSON document. This is the
|
|
1665
|
-
* seed a generator would consume to stamp out a new vertical app.
|
|
1666
|
-
*
|
|
1667
|
-
* Firm-agnostic: {@link createVerticalExport} closes over the theme/module/agent
|
|
1668
|
-
* stores and the module registry.
|
|
1669
|
-
*/
|
|
1670
|
-
|
|
1671
|
-
interface VerticalExportConfig {
|
|
1672
|
-
vertical: {
|
|
1673
|
-
name: string;
|
|
1674
|
-
key: string;
|
|
1675
|
-
};
|
|
1676
|
-
themeStore: UseBoundStore<StoreApi<ThemeState>>;
|
|
1677
|
-
moduleStore: ModuleStoreBundle;
|
|
1678
|
-
agentStore: UseBoundStore<StoreApi<AgentSelectionStore>>;
|
|
1679
|
-
registry: ModuleRegistry;
|
|
1680
|
-
}
|
|
1681
|
-
interface VerticalExport {
|
|
1682
|
-
buildVerticalConfig: () => VerticalConfig;
|
|
1683
|
-
serialize: (cfg?: VerticalConfig) => string;
|
|
1684
|
-
download: (cfg?: VerticalConfig) => void;
|
|
1685
|
-
}
|
|
1686
|
-
declare function createVerticalExport(cfg: VerticalExportConfig): VerticalExport;
|
|
1687
|
-
|
|
1688
|
-
type AgentStore$1 = UseBoundStore<StoreApi<AgentSelectionStore>>;
|
|
1689
|
-
interface VerticalBuilderProps {
|
|
1690
|
-
themeBundle: ThemeBundle;
|
|
1691
|
-
moduleStore: ModuleStoreBundle;
|
|
1692
|
-
agentStore: AgentStore$1;
|
|
1693
|
-
exporter: VerticalExport;
|
|
1694
|
-
themePreview: {
|
|
1695
|
-
title: string;
|
|
1696
|
-
subtitle?: string;
|
|
1697
|
-
};
|
|
1698
|
-
header?: ReactNode;
|
|
1699
|
-
studioHref?: string;
|
|
1700
|
-
testIdPrefix?: string;
|
|
1701
|
-
}
|
|
1702
|
-
declare function VerticalBuilder({ themeBundle, moduleStore, agentStore, exporter, themePreview, header, testIdPrefix, }: VerticalBuilderProps): react.JSX.Element;
|
|
1703
|
-
|
|
1704
|
-
interface ModuleManagerProps {
|
|
1705
|
-
store: ModuleStoreBundle;
|
|
1706
|
-
testIdPrefix?: string;
|
|
1707
|
-
}
|
|
1708
|
-
declare function ModuleManager({ store, testIdPrefix }: ModuleManagerProps): react.JSX.Element;
|
|
1709
|
-
|
|
1710
|
-
type AgentStore = UseBoundStore<StoreApi<AgentSelectionStore>>;
|
|
1711
|
-
interface AgentsPanelProps {
|
|
1712
|
-
store: AgentStore;
|
|
1713
|
-
testIdPrefix?: string;
|
|
1714
|
-
}
|
|
1715
|
-
declare function AgentsPanel({ store, testIdPrefix }: AgentsPanelProps): react.JSX.Element;
|
|
1716
|
-
|
|
1717
|
-
export { ASSET_REF_PREFIX, type AgentSelectionStore, AgentsPanel, type AgentsPanelProps, type AiFields, type AiFieldsConfig, AppHeader, type AppHeaderProps, type AppHeaderUser, type AppNavItem, type AppNavSection, AppShell, type AppShellProps, type ArbiBlocksConfigOptions, type ArbiMode, type ArbiUser, AskBar, type AskBarProps, type AssetMaterializer, type AssetRenderProps, type AssetRenderer, AssetResolverProvider, AssetThumb, type AssistantCitation, type AssistantMessage, type AssistantStep, type BlockKit, type BuildPrompt, type BuilderModule, CitationEditor, type CitationEditorProps, type Column, ConnectionProvider, type ConnectionStatus, DataTable, DataTableBlock, type DataTableBlockColumn, type DataTableBlockProps, EmptyState, EntityIdentityBar, type EntityIdentityBarProps, type EntityIdentityField, type ExportedModule, type FirmArbiConfig, GridView, type GridViewEmptyState, type GridViewProps, type GridViewSelection, IDENTITY_NAME_MAX_LENGTH, type ImageFieldConfig, type ImageFieldFactory, LegalArbiProvider, LiveDataProvider, type LoadResult, type MaterializeOptions, type MatterContext, MemberAvatarStack, type MemberAvatarStackProps, MetricCard, type MetricCardProps, ModuleManager, type ModuleManagerProps, type ModuleRegistry, type ModuleStoreBundle, PageHeader, PageRenderer, type PageRendererProps, type PersistVia, type PromptConfig, type PromptLibrary, type Prompts, QuickActionCards, type QuickActionCardsProps, type QuickActionItem, RecentActivityCard, type RecentActivityCardProps, type RecentActivityRow, type ResolvedModule, ResumeStrip, type ResumeStripItem, type ResumeStripProps, Section, SectionCaption, type SectionCaptionProps, type SectionProps, SectionStrip, type SectionStripAction, type SectionStripGroup, type SectionStripProps, type SectionStripRow, type StackedMember, StartHero, type StartHeroProps, StatGroup, type StatGroupProps, type StatItem, StudioEditor, type StudioEditorProps, type StudioPageMeta, type StudioPersistence, type StudioPersistenceConfig, TIMELINE_ZOOM, ThemeBundle, ThemeState, ThemeTokens, TimelineZoomControl, type TimelineZoomControlProps, Toolbar, UploadDropzone, type UploadDropzoneProps, UsageMeter, type UseImageGen, VerticalBuilder, type VerticalBuilderProps, type VerticalConfig, type VerticalExport, type VerticalExportConfig, WidgetPlaceholder, WorkspaceCard, type WorkspaceCardMember, type WorkspaceCardProps, asAssetRef, assetRefId, createAgentSelectionStore, createAiFields, createArbiBlocksConfig, createArbiMaterializer, createBlockKit, createImageField, createLiveWidgets, createModuleRegistry, createModuleStore, createPromptLibrary, createSiteBlocks, createStudioPersistence, createVerticalExport, createWebsiteBlocks, iconMap, isAssetRef, isAuthenticated, materializePageData, matterToContext, useAssetImage, useAssetRenderer, useAssetResolverActive, useConnection, useFirmAiTask, useImageGen, useLiveDataActive, useSemanticSearch, useWorkspaceDocs };
|