@arbidocs/blocks 0.3.153 → 0.3.155
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{chunk-4QUW423J.js → chunk-27Q4AST5.js} +5 -10
- package/dist/chunk-27Q4AST5.js.map +1 -0
- package/dist/{chunk-PX6AMY64.cjs → chunk-6HGMAQLB.cjs} +5 -10
- package/dist/chunk-6HGMAQLB.cjs.map +1 -0
- package/dist/index.cjs +485 -156
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +194 -1
- package/dist/index.d.ts +194 -1
- package/dist/index.js +346 -21
- package/dist/index.js.map +1 -1
- package/dist/site/index.cjs +61 -61
- package/dist/site/index.js +1 -1
- package/package.json +3 -3
- package/dist/chunk-4QUW423J.js.map +0 -1
- package/dist/chunk-PX6AMY64.cjs.map +0 -1
package/dist/index.d.cts
CHANGED
|
@@ -532,6 +532,119 @@ declare function Toolbar({ search, onSearch, searchPlaceholder, filters, actions
|
|
|
532
532
|
testId?: string;
|
|
533
533
|
}): react.JSX.Element;
|
|
534
534
|
|
|
535
|
+
/** Longest a name may be. Exported so a form editing the same field agrees. */
|
|
536
|
+
declare const IDENTITY_NAME_MAX_LENGTH = 50;
|
|
537
|
+
interface EntityIdentityField {
|
|
538
|
+
/** Row caption. Rendered with a trailing colon. */
|
|
539
|
+
label: string;
|
|
540
|
+
value: string;
|
|
541
|
+
/** Stands in for an empty value, in italics — never a blank row. */
|
|
542
|
+
placeholder: string;
|
|
543
|
+
/** Commits the edit. Not called when the value is unchanged. */
|
|
544
|
+
onSave: (next: string) => void;
|
|
545
|
+
/** A description needs line breaks; a name does not. */
|
|
546
|
+
multiline?: boolean;
|
|
547
|
+
/** Caps the input and shows a counter as it fills. Names only, by default. */
|
|
548
|
+
maxLength?: number;
|
|
549
|
+
/** Classes for the read-mode value, e.g. a larger weight for the name. */
|
|
550
|
+
valueClassName?: string;
|
|
551
|
+
/**
|
|
552
|
+
* Content pinned to the RIGHT END of this row — e.g. the owning project
|
|
553
|
+
* beside a name, a member stack beside a status. Rows without one let their
|
|
554
|
+
* value run the full width, which is what a description wants.
|
|
555
|
+
*/
|
|
556
|
+
trailing?: ReactNode;
|
|
557
|
+
/** Row test id; the pencil and input derive `-edit` and `-input`. */
|
|
558
|
+
testId?: string;
|
|
559
|
+
}
|
|
560
|
+
interface EntityIdentityBarProps {
|
|
561
|
+
/** The editable text fields, in order. Usually name then description. */
|
|
562
|
+
fields: EntityIdentityField[];
|
|
563
|
+
/**
|
|
564
|
+
* Read-only rows shown after the editable ones — anything whose control the
|
|
565
|
+
* consumer owns (a project picker, an owner avatar, a status). Rendered with
|
|
566
|
+
* the same caption column so every row lines up.
|
|
567
|
+
*/
|
|
568
|
+
extraRows?: {
|
|
569
|
+
label: string;
|
|
570
|
+
content: ReactNode;
|
|
571
|
+
trailing?: ReactNode;
|
|
572
|
+
testId?: string;
|
|
573
|
+
}[];
|
|
574
|
+
/** Hides every pencil. A viewer without permission sees values, not controls. */
|
|
575
|
+
canEdit?: boolean;
|
|
576
|
+
/** Trailing controls, pinned right — e.g. a member stack, a status. */
|
|
577
|
+
actions?: ReactNode;
|
|
578
|
+
/**
|
|
579
|
+
* Controls that act on the ENTITY rather than on any one field — typically an
|
|
580
|
+
* overflow menu holding delete or leave. Sits under the field list, where a
|
|
581
|
+
* destructive action is findable but not in the path of everyday reading.
|
|
582
|
+
*/
|
|
583
|
+
footer?: ReactNode;
|
|
584
|
+
className?: string;
|
|
585
|
+
testId?: string;
|
|
586
|
+
}
|
|
587
|
+
/**
|
|
588
|
+
* The "what am I looking at" bar for an entity's own page.
|
|
589
|
+
*
|
|
590
|
+
* A caption column (`Name:`, `Description:`, `Project:`) and a value column. The
|
|
591
|
+
* captions are the point: a bare bold string at the top of a page reads equally
|
|
592
|
+
* as a workspace, a project, a matter or a folder, and people read it as
|
|
593
|
+
* whichever they expected. Saying which field is which costs one column and
|
|
594
|
+
* removes the ambiguity entirely.
|
|
595
|
+
*
|
|
596
|
+
* Editing happens in place. The pencil is always visible to someone who can use
|
|
597
|
+
* it rather than revealed on hover — a control you have to go hunting for is one
|
|
598
|
+
* most people never find, and hover doesn't exist on touch. Commit is on blur
|
|
599
|
+
* and on Enter (single-line fields only, so a description can hold line
|
|
600
|
+
* breaks); Escape abandons the edit.
|
|
601
|
+
*
|
|
602
|
+
* Deliberately NOT a form: no submit, no dirty state, no field-level errors.
|
|
603
|
+
* When a consumer needs visibility toggles, destructive actions or validation
|
|
604
|
+
* messages, those belong in its settings form — this bar is the identity of the
|
|
605
|
+
* thing, shown where you are working on it.
|
|
606
|
+
*
|
|
607
|
+
* Styled with SEMANTIC tokens only, so every firm gets it in its own colours.
|
|
608
|
+
*/
|
|
609
|
+
declare function EntityIdentityBar({ fields, extraRows, canEdit, actions, footer, className, testId, }: EntityIdentityBarProps): react.JSX.Element;
|
|
610
|
+
|
|
611
|
+
/** One face in the stack — source-agnostic, not a raw SDK user. */
|
|
612
|
+
interface StackedMember {
|
|
613
|
+
name: string;
|
|
614
|
+
picture?: string | null;
|
|
615
|
+
}
|
|
616
|
+
interface MemberAvatarStackProps {
|
|
617
|
+
members: StackedMember[];
|
|
618
|
+
/** Total, when it exceeds what's shown. Defaults to `members.length`. */
|
|
619
|
+
total?: number;
|
|
620
|
+
/** Faces before the rest collapse into a `+N`. */
|
|
621
|
+
max?: number;
|
|
622
|
+
/**
|
|
623
|
+
* The viewer isn't allowed to see who is here (e.g. row-level security hides
|
|
624
|
+
* the members of a public workspace you haven't joined). Renders an em dash
|
|
625
|
+
* rather than lying with an empty stack.
|
|
626
|
+
*/
|
|
627
|
+
hidden?: boolean;
|
|
628
|
+
/** Makes the stack a button — e.g. to expand the member list below it. */
|
|
629
|
+
onClick?: () => void;
|
|
630
|
+
/** Rotates the chevron and drives `aria-expanded` when it is a toggle. */
|
|
631
|
+
expanded?: boolean;
|
|
632
|
+
/** Ring colour behind each face; match the surface it sits on. */
|
|
633
|
+
ringClassName?: string;
|
|
634
|
+
className?: string;
|
|
635
|
+
testId?: string;
|
|
636
|
+
}
|
|
637
|
+
/**
|
|
638
|
+
* An overlapping stack of member faces, with the overflow collapsed to `+N`.
|
|
639
|
+
*
|
|
640
|
+
* Lives here rather than inside a card because "who is in this thing" is shown
|
|
641
|
+
* in more than one place — a workspace card, a workspace's own header — and
|
|
642
|
+
* those had drawn it twice. Given `onClick` it becomes the control that expands
|
|
643
|
+
* the full list, which is a better affordance than a button labelled "Members"
|
|
644
|
+
* beside the very faces it would reveal.
|
|
645
|
+
*/
|
|
646
|
+
declare function MemberAvatarStack({ members, total, max, hidden, onClick, expanded, ringClassName, className, testId, }: MemberAvatarStackProps): react.JSX.Element;
|
|
647
|
+
|
|
535
648
|
interface MetricCardProps {
|
|
536
649
|
label: string;
|
|
537
650
|
value: string | number;
|
|
@@ -553,6 +666,86 @@ interface MetricCardProps {
|
|
|
553
666
|
/** The one true KPI tile. Used across every dashboard and module header. */
|
|
554
667
|
declare function MetricCard({ label, value, icon: Icon, hint, delta, accent, testId, }: MetricCardProps): react.JSX.Element;
|
|
555
668
|
|
|
669
|
+
/** One listed item. Source-agnostic: a chat, a file, a matter, a person. */
|
|
670
|
+
interface RecentActivityRow {
|
|
671
|
+
id: string;
|
|
672
|
+
/**
|
|
673
|
+
* The row's avatar/logo — a person's face, a file-type mark, a tinted glyph.
|
|
674
|
+
* Supplied by the consumer, because only it knows what these things look
|
|
675
|
+
* like.
|
|
676
|
+
*/
|
|
677
|
+
leading?: ReactNode;
|
|
678
|
+
title: string;
|
|
679
|
+
/** Second line: what this row is, in a few words. */
|
|
680
|
+
subtitle?: string;
|
|
681
|
+
/** Pinned right on the second line, like a message time. */
|
|
682
|
+
meta?: string;
|
|
683
|
+
onClick?: () => void;
|
|
684
|
+
/**
|
|
685
|
+
* A control rendered beside the row, OUTSIDE its button — e.g. a role
|
|
686
|
+
* dropdown. It cannot live inside the button: nested interactives are invalid
|
|
687
|
+
* and the button would eat the click. Supplying this hides `meta`, since they
|
|
688
|
+
* compete for the same edge.
|
|
689
|
+
*/
|
|
690
|
+
trailing?: ReactNode;
|
|
691
|
+
}
|
|
692
|
+
interface RecentActivityCardProps {
|
|
693
|
+
/** Glyph beside the title, in the header. */
|
|
694
|
+
icon?: LucideIcon;
|
|
695
|
+
/** The section this card is about — "Chats", "Matters", "Members". */
|
|
696
|
+
title: string;
|
|
697
|
+
/** Total across everything, not just what's listed. Omit to hide. */
|
|
698
|
+
count?: number;
|
|
699
|
+
/** Header click — go to this section's full page. */
|
|
700
|
+
onOpen?: () => void;
|
|
701
|
+
/** Secondary action that CREATES one. Omit the label to hide the button. */
|
|
702
|
+
actionLabel?: string;
|
|
703
|
+
actionIcon?: LucideIcon;
|
|
704
|
+
onAction?: () => void;
|
|
705
|
+
rows: RecentActivityRow[];
|
|
706
|
+
/** Says what the list is — "Recent", "Recently joined". */
|
|
707
|
+
caption?: string;
|
|
708
|
+
/** Shown instead of the list when there is nothing yet. */
|
|
709
|
+
emptyText?: ReactNode;
|
|
710
|
+
/**
|
|
711
|
+
* Verb for the empty card's call to action, e.g. "New chat" rather than the
|
|
712
|
+
* header button's terse "New". An empty card is mostly whitespace, and that
|
|
713
|
+
* whitespace is the best invitation the card will ever get — so it becomes
|
|
714
|
+
* the action, at full size. Defaults to `actionLabel`; the CTA only appears
|
|
715
|
+
* when there is an `onAction` to run.
|
|
716
|
+
*/
|
|
717
|
+
emptyActionLabel?: string;
|
|
718
|
+
/** Extra classes on the card root. */
|
|
719
|
+
className?: string;
|
|
720
|
+
/** Root test id; children derive `-open`, `-action`, `-caption`, `-row`. */
|
|
721
|
+
testId?: string;
|
|
722
|
+
}
|
|
723
|
+
/**
|
|
724
|
+
* A section's recent items, as a card you can get back INTO the work through.
|
|
725
|
+
*
|
|
726
|
+
* Three parts, and the split is the point:
|
|
727
|
+
*
|
|
728
|
+
* - the HEADER links to that section's full page. Clicking the thing's name
|
|
729
|
+
* should take you to the thing.
|
|
730
|
+
* - the BODY lists what changed most recently, each row jumping straight to
|
|
731
|
+
* that item.
|
|
732
|
+
* - the ACTION creates a new one, kept visually distinct from the header link
|
|
733
|
+
* so "go there" and "make one" are never the same click.
|
|
734
|
+
*
|
|
735
|
+
* Deliberately NOT a KPI tile — that's {@link MetricCard}. A count tells a
|
|
736
|
+
* returning professional nothing they need: "128 documents" doesn't help you
|
|
737
|
+
* resume work, whereas the name of the file you touched an hour ago does. The
|
|
738
|
+
* count rides along as a caption beside the title, not as the content.
|
|
739
|
+
*
|
|
740
|
+
* The row anatomy is the DM conversation chip's (leading avatar, bold name
|
|
741
|
+
* line, muted second line with the time pinned right), because a list of
|
|
742
|
+
* recognisable things reads the same way whoever owns it.
|
|
743
|
+
*
|
|
744
|
+
* Styled with SEMANTIC tokens only (card, border, foreground, muted-foreground,
|
|
745
|
+
* primary, accent), so every firm gets it in its own colours.
|
|
746
|
+
*/
|
|
747
|
+
declare function RecentActivityCard({ icon: Icon, title, count, onOpen, actionLabel, actionIcon: ActionIcon, onAction, rows, caption, emptyText, emptyActionLabel, className, testId, }: RecentActivityCardProps): react.JSX.Element;
|
|
748
|
+
|
|
556
749
|
/** One member shown in the avatar stack — source-agnostic, not the raw SDK shape. */
|
|
557
750
|
interface WorkspaceCardMember {
|
|
558
751
|
name: string;
|
|
@@ -1298,4 +1491,4 @@ interface AgentsPanelProps {
|
|
|
1298
1491
|
}
|
|
1299
1492
|
declare function AgentsPanel({ store, testIdPrefix }: AgentsPanelProps): react.JSX.Element;
|
|
1300
1493
|
|
|
1301
|
-
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, 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, type ExportedModule, type FirmArbiConfig, GridView, type GridViewEmptyState, type GridViewProps, type GridViewSelection, type ImageFieldConfig, type ImageFieldFactory, LegalArbiProvider, LiveDataProvider, type LoadResult, type MaterializeOptions, type MatterContext, MetricCard, type MetricCardProps, ModuleManager, type ModuleManagerProps, type ModuleRegistry, type ModuleStoreBundle, PageHeader, PageRenderer, type PageRendererProps, type PersistVia, type PromptConfig, type PromptLibrary, type Prompts, type ResolvedModule, Section, type SectionProps, StatGroup, type StatGroupProps, type StatItem, StudioEditor, type StudioEditorProps, type StudioPageMeta, type StudioPersistence, type StudioPersistenceConfig, ThemeBundle, ThemeState, ThemeTokens, Toolbar, UploadDropzone, type UploadDropzoneProps, 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 };
|
|
1494
|
+
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, 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, RecentActivityCard, type RecentActivityCardProps, type RecentActivityRow, type ResolvedModule, Section, type SectionProps, type StackedMember, StatGroup, type StatGroupProps, type StatItem, StudioEditor, type StudioEditorProps, type StudioPageMeta, type StudioPersistence, type StudioPersistenceConfig, ThemeBundle, ThemeState, ThemeTokens, Toolbar, UploadDropzone, type UploadDropzoneProps, 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 };
|
package/dist/index.d.ts
CHANGED
|
@@ -532,6 +532,119 @@ declare function Toolbar({ search, onSearch, searchPlaceholder, filters, actions
|
|
|
532
532
|
testId?: string;
|
|
533
533
|
}): react.JSX.Element;
|
|
534
534
|
|
|
535
|
+
/** Longest a name may be. Exported so a form editing the same field agrees. */
|
|
536
|
+
declare const IDENTITY_NAME_MAX_LENGTH = 50;
|
|
537
|
+
interface EntityIdentityField {
|
|
538
|
+
/** Row caption. Rendered with a trailing colon. */
|
|
539
|
+
label: string;
|
|
540
|
+
value: string;
|
|
541
|
+
/** Stands in for an empty value, in italics — never a blank row. */
|
|
542
|
+
placeholder: string;
|
|
543
|
+
/** Commits the edit. Not called when the value is unchanged. */
|
|
544
|
+
onSave: (next: string) => void;
|
|
545
|
+
/** A description needs line breaks; a name does not. */
|
|
546
|
+
multiline?: boolean;
|
|
547
|
+
/** Caps the input and shows a counter as it fills. Names only, by default. */
|
|
548
|
+
maxLength?: number;
|
|
549
|
+
/** Classes for the read-mode value, e.g. a larger weight for the name. */
|
|
550
|
+
valueClassName?: string;
|
|
551
|
+
/**
|
|
552
|
+
* Content pinned to the RIGHT END of this row — e.g. the owning project
|
|
553
|
+
* beside a name, a member stack beside a status. Rows without one let their
|
|
554
|
+
* value run the full width, which is what a description wants.
|
|
555
|
+
*/
|
|
556
|
+
trailing?: ReactNode;
|
|
557
|
+
/** Row test id; the pencil and input derive `-edit` and `-input`. */
|
|
558
|
+
testId?: string;
|
|
559
|
+
}
|
|
560
|
+
interface EntityIdentityBarProps {
|
|
561
|
+
/** The editable text fields, in order. Usually name then description. */
|
|
562
|
+
fields: EntityIdentityField[];
|
|
563
|
+
/**
|
|
564
|
+
* Read-only rows shown after the editable ones — anything whose control the
|
|
565
|
+
* consumer owns (a project picker, an owner avatar, a status). Rendered with
|
|
566
|
+
* the same caption column so every row lines up.
|
|
567
|
+
*/
|
|
568
|
+
extraRows?: {
|
|
569
|
+
label: string;
|
|
570
|
+
content: ReactNode;
|
|
571
|
+
trailing?: ReactNode;
|
|
572
|
+
testId?: string;
|
|
573
|
+
}[];
|
|
574
|
+
/** Hides every pencil. A viewer without permission sees values, not controls. */
|
|
575
|
+
canEdit?: boolean;
|
|
576
|
+
/** Trailing controls, pinned right — e.g. a member stack, a status. */
|
|
577
|
+
actions?: ReactNode;
|
|
578
|
+
/**
|
|
579
|
+
* Controls that act on the ENTITY rather than on any one field — typically an
|
|
580
|
+
* overflow menu holding delete or leave. Sits under the field list, where a
|
|
581
|
+
* destructive action is findable but not in the path of everyday reading.
|
|
582
|
+
*/
|
|
583
|
+
footer?: ReactNode;
|
|
584
|
+
className?: string;
|
|
585
|
+
testId?: string;
|
|
586
|
+
}
|
|
587
|
+
/**
|
|
588
|
+
* The "what am I looking at" bar for an entity's own page.
|
|
589
|
+
*
|
|
590
|
+
* A caption column (`Name:`, `Description:`, `Project:`) and a value column. The
|
|
591
|
+
* captions are the point: a bare bold string at the top of a page reads equally
|
|
592
|
+
* as a workspace, a project, a matter or a folder, and people read it as
|
|
593
|
+
* whichever they expected. Saying which field is which costs one column and
|
|
594
|
+
* removes the ambiguity entirely.
|
|
595
|
+
*
|
|
596
|
+
* Editing happens in place. The pencil is always visible to someone who can use
|
|
597
|
+
* it rather than revealed on hover — a control you have to go hunting for is one
|
|
598
|
+
* most people never find, and hover doesn't exist on touch. Commit is on blur
|
|
599
|
+
* and on Enter (single-line fields only, so a description can hold line
|
|
600
|
+
* breaks); Escape abandons the edit.
|
|
601
|
+
*
|
|
602
|
+
* Deliberately NOT a form: no submit, no dirty state, no field-level errors.
|
|
603
|
+
* When a consumer needs visibility toggles, destructive actions or validation
|
|
604
|
+
* messages, those belong in its settings form — this bar is the identity of the
|
|
605
|
+
* thing, shown where you are working on it.
|
|
606
|
+
*
|
|
607
|
+
* Styled with SEMANTIC tokens only, so every firm gets it in its own colours.
|
|
608
|
+
*/
|
|
609
|
+
declare function EntityIdentityBar({ fields, extraRows, canEdit, actions, footer, className, testId, }: EntityIdentityBarProps): react.JSX.Element;
|
|
610
|
+
|
|
611
|
+
/** One face in the stack — source-agnostic, not a raw SDK user. */
|
|
612
|
+
interface StackedMember {
|
|
613
|
+
name: string;
|
|
614
|
+
picture?: string | null;
|
|
615
|
+
}
|
|
616
|
+
interface MemberAvatarStackProps {
|
|
617
|
+
members: StackedMember[];
|
|
618
|
+
/** Total, when it exceeds what's shown. Defaults to `members.length`. */
|
|
619
|
+
total?: number;
|
|
620
|
+
/** Faces before the rest collapse into a `+N`. */
|
|
621
|
+
max?: number;
|
|
622
|
+
/**
|
|
623
|
+
* The viewer isn't allowed to see who is here (e.g. row-level security hides
|
|
624
|
+
* the members of a public workspace you haven't joined). Renders an em dash
|
|
625
|
+
* rather than lying with an empty stack.
|
|
626
|
+
*/
|
|
627
|
+
hidden?: boolean;
|
|
628
|
+
/** Makes the stack a button — e.g. to expand the member list below it. */
|
|
629
|
+
onClick?: () => void;
|
|
630
|
+
/** Rotates the chevron and drives `aria-expanded` when it is a toggle. */
|
|
631
|
+
expanded?: boolean;
|
|
632
|
+
/** Ring colour behind each face; match the surface it sits on. */
|
|
633
|
+
ringClassName?: string;
|
|
634
|
+
className?: string;
|
|
635
|
+
testId?: string;
|
|
636
|
+
}
|
|
637
|
+
/**
|
|
638
|
+
* An overlapping stack of member faces, with the overflow collapsed to `+N`.
|
|
639
|
+
*
|
|
640
|
+
* Lives here rather than inside a card because "who is in this thing" is shown
|
|
641
|
+
* in more than one place — a workspace card, a workspace's own header — and
|
|
642
|
+
* those had drawn it twice. Given `onClick` it becomes the control that expands
|
|
643
|
+
* the full list, which is a better affordance than a button labelled "Members"
|
|
644
|
+
* beside the very faces it would reveal.
|
|
645
|
+
*/
|
|
646
|
+
declare function MemberAvatarStack({ members, total, max, hidden, onClick, expanded, ringClassName, className, testId, }: MemberAvatarStackProps): react.JSX.Element;
|
|
647
|
+
|
|
535
648
|
interface MetricCardProps {
|
|
536
649
|
label: string;
|
|
537
650
|
value: string | number;
|
|
@@ -553,6 +666,86 @@ interface MetricCardProps {
|
|
|
553
666
|
/** The one true KPI tile. Used across every dashboard and module header. */
|
|
554
667
|
declare function MetricCard({ label, value, icon: Icon, hint, delta, accent, testId, }: MetricCardProps): react.JSX.Element;
|
|
555
668
|
|
|
669
|
+
/** One listed item. Source-agnostic: a chat, a file, a matter, a person. */
|
|
670
|
+
interface RecentActivityRow {
|
|
671
|
+
id: string;
|
|
672
|
+
/**
|
|
673
|
+
* The row's avatar/logo — a person's face, a file-type mark, a tinted glyph.
|
|
674
|
+
* Supplied by the consumer, because only it knows what these things look
|
|
675
|
+
* like.
|
|
676
|
+
*/
|
|
677
|
+
leading?: ReactNode;
|
|
678
|
+
title: string;
|
|
679
|
+
/** Second line: what this row is, in a few words. */
|
|
680
|
+
subtitle?: string;
|
|
681
|
+
/** Pinned right on the second line, like a message time. */
|
|
682
|
+
meta?: string;
|
|
683
|
+
onClick?: () => void;
|
|
684
|
+
/**
|
|
685
|
+
* A control rendered beside the row, OUTSIDE its button — e.g. a role
|
|
686
|
+
* dropdown. It cannot live inside the button: nested interactives are invalid
|
|
687
|
+
* and the button would eat the click. Supplying this hides `meta`, since they
|
|
688
|
+
* compete for the same edge.
|
|
689
|
+
*/
|
|
690
|
+
trailing?: ReactNode;
|
|
691
|
+
}
|
|
692
|
+
interface RecentActivityCardProps {
|
|
693
|
+
/** Glyph beside the title, in the header. */
|
|
694
|
+
icon?: LucideIcon;
|
|
695
|
+
/** The section this card is about — "Chats", "Matters", "Members". */
|
|
696
|
+
title: string;
|
|
697
|
+
/** Total across everything, not just what's listed. Omit to hide. */
|
|
698
|
+
count?: number;
|
|
699
|
+
/** Header click — go to this section's full page. */
|
|
700
|
+
onOpen?: () => void;
|
|
701
|
+
/** Secondary action that CREATES one. Omit the label to hide the button. */
|
|
702
|
+
actionLabel?: string;
|
|
703
|
+
actionIcon?: LucideIcon;
|
|
704
|
+
onAction?: () => void;
|
|
705
|
+
rows: RecentActivityRow[];
|
|
706
|
+
/** Says what the list is — "Recent", "Recently joined". */
|
|
707
|
+
caption?: string;
|
|
708
|
+
/** Shown instead of the list when there is nothing yet. */
|
|
709
|
+
emptyText?: ReactNode;
|
|
710
|
+
/**
|
|
711
|
+
* Verb for the empty card's call to action, e.g. "New chat" rather than the
|
|
712
|
+
* header button's terse "New". An empty card is mostly whitespace, and that
|
|
713
|
+
* whitespace is the best invitation the card will ever get — so it becomes
|
|
714
|
+
* the action, at full size. Defaults to `actionLabel`; the CTA only appears
|
|
715
|
+
* when there is an `onAction` to run.
|
|
716
|
+
*/
|
|
717
|
+
emptyActionLabel?: string;
|
|
718
|
+
/** Extra classes on the card root. */
|
|
719
|
+
className?: string;
|
|
720
|
+
/** Root test id; children derive `-open`, `-action`, `-caption`, `-row`. */
|
|
721
|
+
testId?: string;
|
|
722
|
+
}
|
|
723
|
+
/**
|
|
724
|
+
* A section's recent items, as a card you can get back INTO the work through.
|
|
725
|
+
*
|
|
726
|
+
* Three parts, and the split is the point:
|
|
727
|
+
*
|
|
728
|
+
* - the HEADER links to that section's full page. Clicking the thing's name
|
|
729
|
+
* should take you to the thing.
|
|
730
|
+
* - the BODY lists what changed most recently, each row jumping straight to
|
|
731
|
+
* that item.
|
|
732
|
+
* - the ACTION creates a new one, kept visually distinct from the header link
|
|
733
|
+
* so "go there" and "make one" are never the same click.
|
|
734
|
+
*
|
|
735
|
+
* Deliberately NOT a KPI tile — that's {@link MetricCard}. A count tells a
|
|
736
|
+
* returning professional nothing they need: "128 documents" doesn't help you
|
|
737
|
+
* resume work, whereas the name of the file you touched an hour ago does. The
|
|
738
|
+
* count rides along as a caption beside the title, not as the content.
|
|
739
|
+
*
|
|
740
|
+
* The row anatomy is the DM conversation chip's (leading avatar, bold name
|
|
741
|
+
* line, muted second line with the time pinned right), because a list of
|
|
742
|
+
* recognisable things reads the same way whoever owns it.
|
|
743
|
+
*
|
|
744
|
+
* Styled with SEMANTIC tokens only (card, border, foreground, muted-foreground,
|
|
745
|
+
* primary, accent), so every firm gets it in its own colours.
|
|
746
|
+
*/
|
|
747
|
+
declare function RecentActivityCard({ icon: Icon, title, count, onOpen, actionLabel, actionIcon: ActionIcon, onAction, rows, caption, emptyText, emptyActionLabel, className, testId, }: RecentActivityCardProps): react.JSX.Element;
|
|
748
|
+
|
|
556
749
|
/** One member shown in the avatar stack — source-agnostic, not the raw SDK shape. */
|
|
557
750
|
interface WorkspaceCardMember {
|
|
558
751
|
name: string;
|
|
@@ -1298,4 +1491,4 @@ interface AgentsPanelProps {
|
|
|
1298
1491
|
}
|
|
1299
1492
|
declare function AgentsPanel({ store, testIdPrefix }: AgentsPanelProps): react.JSX.Element;
|
|
1300
1493
|
|
|
1301
|
-
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, 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, type ExportedModule, type FirmArbiConfig, GridView, type GridViewEmptyState, type GridViewProps, type GridViewSelection, type ImageFieldConfig, type ImageFieldFactory, LegalArbiProvider, LiveDataProvider, type LoadResult, type MaterializeOptions, type MatterContext, MetricCard, type MetricCardProps, ModuleManager, type ModuleManagerProps, type ModuleRegistry, type ModuleStoreBundle, PageHeader, PageRenderer, type PageRendererProps, type PersistVia, type PromptConfig, type PromptLibrary, type Prompts, type ResolvedModule, Section, type SectionProps, StatGroup, type StatGroupProps, type StatItem, StudioEditor, type StudioEditorProps, type StudioPageMeta, type StudioPersistence, type StudioPersistenceConfig, ThemeBundle, ThemeState, ThemeTokens, Toolbar, UploadDropzone, type UploadDropzoneProps, 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 };
|
|
1494
|
+
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, 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, RecentActivityCard, type RecentActivityCardProps, type RecentActivityRow, type ResolvedModule, Section, type SectionProps, type StackedMember, StatGroup, type StatGroupProps, type StatItem, StudioEditor, type StudioEditorProps, type StudioPageMeta, type StudioPersistence, type StudioPersistenceConfig, ThemeBundle, ThemeState, ThemeTokens, Toolbar, UploadDropzone, type UploadDropzoneProps, 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 };
|