@arbidocs/blocks 0.3.177 → 0.3.180

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.cts CHANGED
@@ -1,5 +1,5 @@
1
- import { ap as ThemeBundle, ax as ThemeTokens, av as ThemeState } from './index-er1L8kkn.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-er1L8kkn.cjs';
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
3
  import * as react from 'react';
4
4
  import react__default, { ReactNode, KeyboardEventHandler, RefObject, ComponentType } from 'react';
5
5
  import * as _arbidocs_react from '@arbidocs/react';
@@ -326,12 +326,12 @@ declare function useWorkspaceDocs(): {
326
326
  doctags: {
327
327
  note?: string | null | undefined;
328
328
  citations?: {
329
- passages: {
329
+ doc_ext_id: string;
330
+ chunks?: {
330
331
  chunk_id: string;
331
- doc_ext_id?: string | null | undefined;
332
332
  page?: number | null | undefined;
333
- }[];
334
- } | null | undefined;
333
+ }[] | undefined;
334
+ }[] | null | undefined;
335
335
  external_id: string;
336
336
  doc_ext_id: string;
337
337
  tag_ext_id: string;
@@ -499,6 +499,24 @@ declare function UsageMeter({ icon: Icon, label, value, pct, hint, className, te
499
499
  testId?: string;
500
500
  }): react.JSX.Element;
501
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
+
502
520
  interface UploadDropzoneProps {
503
521
  /** Called with the chosen/dropped files. */
504
522
  onFiles: (files: File[]) => void;
@@ -575,6 +593,20 @@ interface EntityIdentityField {
575
593
  * value run the full width, which is what a description wants.
576
594
  */
577
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;
578
610
  /** Row test id; the pencil and input derive `-edit` and `-input`. */
579
611
  testId?: string;
580
612
  }
@@ -699,7 +731,7 @@ interface RecentActivityRow {
699
731
  title: string;
700
732
  /** Second line: what this row is, in a few words. */
701
733
  subtitle?: string;
702
- /** Pinned right on the second line, like a message time. */
734
+ /** Pinned right on the title line, like a message time. */
703
735
  meta?: string;
704
736
  onClick?: () => void;
705
737
  /**
@@ -765,7 +797,7 @@ interface RecentActivityCardProps {
765
797
  * count rides along as a caption beside the title, not as the content.
766
798
  *
767
799
  * The row anatomy is the DM conversation chip's (leading avatar, bold name
768
- * line, muted second line with the time pinned right), because a list of
800
+ * line with the time pinned right, muted second line), because a list of
769
801
  * recognisable things reads the same way whoever owns it.
770
802
  *
771
803
  * Styled with SEMANTIC tokens only (card, border, foreground, muted-foreground,
@@ -821,6 +853,43 @@ interface ResumeStripProps {
821
853
  }
822
854
  declare function ResumeStrip({ items, caption, className, testId, }: ResumeStripProps): react.JSX.Element | null;
823
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
+
824
893
  interface SectionStripRow {
825
894
  id: string;
826
895
  /** The row's mark — a pin, a dot, a tiny glyph. Consumer-supplied. */
@@ -1645,4 +1714,4 @@ interface AgentsPanelProps {
1645
1714
  }
1646
1715
  declare function AgentsPanel({ store, testIdPrefix }: AgentsPanelProps): react.JSX.Element;
1647
1716
 
1648
- 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, RecentActivityCard, type RecentActivityCardProps, type RecentActivityRow, type ResolvedModule, ResumeStrip, type ResumeStripItem, type ResumeStripProps, Section, 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, ThemeBundle, ThemeState, ThemeTokens, 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 };
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 };
package/dist/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
- import { ap as ThemeBundle, ax as ThemeTokens, av as ThemeState } from './index-er1L8kkn.js';
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-er1L8kkn.js';
1
+ import { ap as ThemeBundle, ax as ThemeTokens, av as ThemeState } from './index-DduoEosi.js';
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.js';
3
3
  import * as react from 'react';
4
4
  import react__default, { ReactNode, KeyboardEventHandler, RefObject, ComponentType } from 'react';
5
5
  import * as _arbidocs_react from '@arbidocs/react';
@@ -326,12 +326,12 @@ declare function useWorkspaceDocs(): {
326
326
  doctags: {
327
327
  note?: string | null | undefined;
328
328
  citations?: {
329
- passages: {
329
+ doc_ext_id: string;
330
+ chunks?: {
330
331
  chunk_id: string;
331
- doc_ext_id?: string | null | undefined;
332
332
  page?: number | null | undefined;
333
- }[];
334
- } | null | undefined;
333
+ }[] | undefined;
334
+ }[] | null | undefined;
335
335
  external_id: string;
336
336
  doc_ext_id: string;
337
337
  tag_ext_id: string;
@@ -499,6 +499,24 @@ declare function UsageMeter({ icon: Icon, label, value, pct, hint, className, te
499
499
  testId?: string;
500
500
  }): react.JSX.Element;
501
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
+
502
520
  interface UploadDropzoneProps {
503
521
  /** Called with the chosen/dropped files. */
504
522
  onFiles: (files: File[]) => void;
@@ -575,6 +593,20 @@ interface EntityIdentityField {
575
593
  * value run the full width, which is what a description wants.
576
594
  */
577
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;
578
610
  /** Row test id; the pencil and input derive `-edit` and `-input`. */
579
611
  testId?: string;
580
612
  }
@@ -699,7 +731,7 @@ interface RecentActivityRow {
699
731
  title: string;
700
732
  /** Second line: what this row is, in a few words. */
701
733
  subtitle?: string;
702
- /** Pinned right on the second line, like a message time. */
734
+ /** Pinned right on the title line, like a message time. */
703
735
  meta?: string;
704
736
  onClick?: () => void;
705
737
  /**
@@ -765,7 +797,7 @@ interface RecentActivityCardProps {
765
797
  * count rides along as a caption beside the title, not as the content.
766
798
  *
767
799
  * The row anatomy is the DM conversation chip's (leading avatar, bold name
768
- * line, muted second line with the time pinned right), because a list of
800
+ * line with the time pinned right, muted second line), because a list of
769
801
  * recognisable things reads the same way whoever owns it.
770
802
  *
771
803
  * Styled with SEMANTIC tokens only (card, border, foreground, muted-foreground,
@@ -821,6 +853,43 @@ interface ResumeStripProps {
821
853
  }
822
854
  declare function ResumeStrip({ items, caption, className, testId, }: ResumeStripProps): react.JSX.Element | null;
823
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
+
824
893
  interface SectionStripRow {
825
894
  id: string;
826
895
  /** The row's mark — a pin, a dot, a tiny glyph. Consumer-supplied. */
@@ -1645,4 +1714,4 @@ interface AgentsPanelProps {
1645
1714
  }
1646
1715
  declare function AgentsPanel({ store, testIdPrefix }: AgentsPanelProps): react.JSX.Element;
1647
1716
 
1648
- 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, RecentActivityCard, type RecentActivityCardProps, type RecentActivityRow, type ResolvedModule, ResumeStrip, type ResumeStripItem, type ResumeStripProps, Section, 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, ThemeBundle, ThemeState, ThemeTokens, 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 };
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 };
package/dist/index.js CHANGED
@@ -1,5 +1,5 @@
1
- import { formatPageRefs, tid, initials, fromNow, fmtDate, assetRefId, applyStoredTheme, AssetResolverProvider, ThemeEditor, applyThemeVars, SectionHeading, PricingTable, Tabs as Tabs$1, Accordion, Gallery, VideoEmbed, ContactForm, Banner, MediaText, TeamGrid, Steps, TestimonialGrid, Columns, Spacer, Container, Hero, FeatureGrid, Testimonial, CTABanner, LogoCloud, FAQ, Timeline, RichTextBlock, Callout, BlockImage, AvatarBlock, Navbar, Footer, ListBlock, isAssetRef, asAssetRef } from './chunk-27Q4AST5.js';
2
- export { ASSET_REF_PREFIX, Accordion, AssetResolverProvider, AvatarBlock, Banner, BlockImage, BlockLink, CTABanner, Callout, Columns, ContactForm, Container, FAQ, FONT_PAIRINGS, FeatureGrid, Footer, Gallery, Hero, ListBlock, LogoCloud, MediaText, Navbar, PricingTable, RichTextBlock, SectionHeading, Spacer, Steps, THEME_STYLE_ID, Tabs, TeamGrid, Testimonial, TestimonialGrid, ThemeEditor, Timeline, TimelineCalendar, TimelineGantt, VideoEmbed, applyFontVars, applyStoredTheme, applyThemeVars, asAssetRef, assetRefId, clearFontVars, clearThemeVars, createThemeStore, dayKey, daysUntil, fmtDate, fmtDateTime, fontPackages, formatPageRefs, formatSpan, fromNow, gbp, getFontPairing, hrs, initials, isAssetRef, matchFontPairing, monthLabel, parseIso, pct, tid, toEmbedUrl, toHslTriplet, useAssetRenderer, useAssetResolverActive, utcDay } from './chunk-27Q4AST5.js';
1
+ import { formatPageRefs, tid, initials, fromNow, fmtDate, assetRefId, applyStoredTheme, AssetResolverProvider, ThemeEditor, applyThemeVars, SectionHeading, PricingTable, Tabs as Tabs$1, Accordion, Gallery, VideoEmbed, ContactForm, Banner, MediaText, TeamGrid, Steps, TestimonialGrid, Columns, Spacer, Container, Hero, FeatureGrid, Testimonial, CTABanner, LogoCloud, FAQ, Timeline, RichTextBlock, Callout, BlockImage, AvatarBlock, Navbar, Footer, ListBlock, isAssetRef, asAssetRef } from './chunk-FZ2S6VAZ.js';
2
+ export { ASSET_REF_PREFIX, Accordion, AssetResolverProvider, AvatarBlock, Banner, BlockImage, BlockLink, CTABanner, Callout, Columns, ContactForm, Container, FAQ, FONT_PAIRINGS, FeatureGrid, Footer, Gallery, Hero, ListBlock, LogoCloud, MediaText, Navbar, PricingTable, RichTextBlock, SectionHeading, Spacer, Steps, THEME_STYLE_ID, TIMELINE_ZOOM, Tabs, TeamGrid, Testimonial, TestimonialGrid, ThemeEditor, Timeline, TimelineCalendar, TimelineGantt, TimelineZoomControl, VideoEmbed, applyFontVars, applyStoredTheme, applyThemeVars, asAssetRef, assetRefId, clearFontVars, clearThemeVars, createThemeStore, dayKey, daysUntil, fmtDate, fmtDateTime, fontPackages, formatPageRefs, formatSpan, fromNow, gbp, getFontPairing, hrs, initials, isAssetRef, matchFontPairing, monthLabel, parseIso, pct, tid, toEmbedUrl, toHslTriplet, useAssetRenderer, useAssetResolverActive, utcDay } from './chunk-FZ2S6VAZ.js';
3
3
  import { createContext, useState, useRef, useEffect, useMemo, useCallback, useContext } from 'react';
4
4
  import { MessageSquare, Cpu, Code, Cloud, Layers, Target, Award, MapPin, Phone, Mail, Lock, Globe, Heart, Star, Rocket, Shield, Zap, Sparkles, Gavel, Scale, Bell, Activity, BarChart3, DollarSign, TrendingUp, Info, AlertCircle, CheckCircle, Clock, Calendar, Briefcase, Users, Folder, FileText, X, Loader2, UploadCloud, Search, Pencil, ChevronDown, ArrowUpRight, ArrowDownRight, Plus, FolderLock, CheckCircle2, ArrowLeftRight, MessagesSquare, Menu, ArrowLeft, Palette, RotateCcw, ChevronUp, BrainCircuit, Bot, LayoutGrid, FileJson, Download, Crop, ImagePlus, Upload, Link2, Check } from 'lucide-react';
5
5
  import { Textarea, cn, DocumentEntity, useArbi, ArbiProvider, useAiTask, useWorkspaceDocs as useWorkspaceDocs$1, useSemanticSearch as useSemanticSearch$1, Table, TableHeader, TableRow, TableHead, TableBody, TableCell, Input, Avatar, AvatarImage, AvatarFallback, Card, Button, CardHeader, CardTitle, CardDescription, CardContent, Tooltip, TooltipTrigger, TooltipContent, CardFooter, TooltipProvider, NotificationBell, UserMenu, useThumbnails, Badge, Switch, useConfigs, useAgents, Checkbox, Tabs, TabsList, TabsTrigger, TabsContent, Separator, ArbiWebSocketProvider, useDocuments, ImageCropModal, DEFAULT_ASPECT_OPTIONS, useConversations } from '@arbidocs/react';
@@ -219,27 +219,25 @@ function CitationEditor({
219
219
  setLocalValue(value);
220
220
  }
221
221
  }, [value, isEditing]);
222
- const passages = useMemo(() => citations?.passages ?? [], [citations]);
223
- const hasCitations = passages.length > 0;
222
+ const sources = useMemo(() => citations ?? [], [citations]);
223
+ const hasCitations = sources.length > 0;
224
224
  const byDoc = useMemo(() => {
225
225
  const groups = /* @__PURE__ */ new Map();
226
- for (const passage of passages) {
227
- if (!passage.doc_ext_id) continue;
228
- const group = groups.get(passage.doc_ext_id) ?? { pages: [], count: 0 };
229
- group.count += 1;
230
- if (passage.page != null && !group.pages.includes(passage.page))
231
- group.pages.push(passage.page);
232
- groups.set(passage.doc_ext_id, group);
226
+ for (const doc of sources) {
227
+ const chunks = doc.chunks ?? [];
228
+ const pages = [];
229
+ for (const c of chunks) if (c.page != null && !pages.includes(c.page)) pages.push(c.page);
230
+ groups.set(doc.doc_ext_id, { pages, count: chunks.length });
233
231
  }
234
232
  return groups;
235
- }, [passages]);
233
+ }, [sources]);
236
234
  const docIds = Array.from(byDoc.keys());
237
235
  const handleRemoveDocument = useCallback(
238
236
  (docExtId) => {
239
- const remaining = passages.filter((p) => p.doc_ext_id !== docExtId);
240
- onChange(localValue, remaining.length ? { passages: remaining } : null);
237
+ const remaining = sources.filter((d) => d.doc_ext_id !== docExtId);
238
+ onChange(localValue, remaining.length ? remaining : null);
241
239
  },
242
- [passages, localValue, onChange]
240
+ [sources, localValue, onChange]
243
241
  );
244
242
  const handleToggleDocument = useCallback(
245
243
  (docExtId) => {
@@ -346,10 +344,6 @@ function CitationEditor({
346
344
  docId
347
345
  );
348
346
  }),
349
- passages.some((p) => !p.doc_ext_id) && /* @__PURE__ */ jsxs("span", { className: "text-sm text-muted-foreground", children: [
350
- passages.filter((p) => !p.doc_ext_id).length,
351
- " passage(s) without a recorded document"
352
- ] }),
353
347
  !readOnly && /* @__PURE__ */ jsx("div", { className: "flex items-center gap-1", children: /* @__PURE__ */ jsx("div", { className: "flex-1 min-w-0", "data-testid": "citation-document-picker", children: renderDocumentPicker?.(handleToggleDocument, docIds) }) })
354
348
  ] }),
355
349
  activeCitationKey && /* @__PURE__ */ jsxs("p", { className: "text-sm text-blue-text", children: [
@@ -1269,16 +1263,24 @@ function EntityIdentityBar({
1269
1263
  children: [
1270
1264
  /* @__PURE__ */ jsxs("dl", { className: "min-w-0 flex-1 space-y-1.5", children: [
1271
1265
  fields.map((field) => /* @__PURE__ */ jsx(IdentityFieldRow, { field, canEdit }, field.label)),
1272
- extraRows.map((row) => /* @__PURE__ */ jsxs("div", { className: "flex min-w-0 items-center gap-2", "data-testid": row.testId, children: [
1273
- /* @__PURE__ */ jsxs("dt", { className: "w-24 shrink-0 text-sm font-medium text-muted-foreground", children: [
1274
- row.label,
1275
- ":"
1276
- ] }),
1277
- /* @__PURE__ */ jsxs("dd", { className: "flex min-w-0 flex-1 items-center gap-2", children: [
1278
- row.content,
1279
- row.trailing ? /* @__PURE__ */ jsx("div", { className: "ml-auto shrink-0", children: row.trailing }) : null
1280
- ] })
1281
- ] }, row.label)),
1266
+ extraRows.map((row) => /* @__PURE__ */ jsxs(
1267
+ "div",
1268
+ {
1269
+ className: "flex min-h-7 min-w-0 items-center gap-2",
1270
+ "data-testid": row.testId,
1271
+ children: [
1272
+ /* @__PURE__ */ jsxs("dt", { className: "w-24 shrink-0 text-sm font-medium text-muted-foreground", children: [
1273
+ row.label,
1274
+ ":"
1275
+ ] }),
1276
+ /* @__PURE__ */ jsxs("dd", { className: "flex min-w-0 flex-1 items-center gap-2", children: [
1277
+ row.content,
1278
+ row.trailing ? /* @__PURE__ */ jsx("div", { className: "ml-auto shrink-0", children: row.trailing }) : null
1279
+ ] })
1280
+ ]
1281
+ },
1282
+ row.label
1283
+ )),
1282
1284
  footer ? /* @__PURE__ */ jsx("div", { className: "flex items-center pt-0.5", children: footer }) : null
1283
1285
  ] }),
1284
1286
  actions ? /* @__PURE__ */ jsx("div", { className: "flex shrink-0 items-center gap-2", children: actions }) : null
@@ -1295,6 +1297,8 @@ function IdentityFieldRow({ field, canEdit }) {
1295
1297
  multiline = false,
1296
1298
  maxLength,
1297
1299
  valueClassName,
1300
+ leading,
1301
+ hideLabel,
1298
1302
  trailing,
1299
1303
  testId
1300
1304
  } = field;
@@ -1333,13 +1337,12 @@ function IdentityFieldRow({ field, canEdit }) {
1333
1337
  }
1334
1338
  }
1335
1339
  };
1336
- return /* @__PURE__ */ jsxs("div", { className: cn("flex min-w-0 gap-2", multiline ? "items-start" : "items-center"), children: [
1340
+ return /* @__PURE__ */ jsxs("div", { className: cn("flex min-h-7 min-w-0 gap-2", multiline ? "items-start" : "items-center"), children: [
1337
1341
  /* @__PURE__ */ jsxs(
1338
1342
  "dt",
1339
1343
  {
1340
1344
  className: cn(
1341
- "w-24 shrink-0 text-sm font-medium text-muted-foreground",
1342
- multiline && "pt-1"
1345
+ hideLabel ? "sr-only" : cn("w-24 shrink-0 text-sm font-medium text-muted-foreground", multiline && "pt-1")
1343
1346
  ),
1344
1347
  children: [
1345
1348
  label,
@@ -1348,6 +1351,7 @@ function IdentityFieldRow({ field, canEdit }) {
1348
1351
  }
1349
1352
  ),
1350
1353
  /* @__PURE__ */ jsxs("dd", { className: "flex min-w-0 flex-1 items-center gap-2", children: [
1354
+ leading,
1351
1355
  isEditing ? /* @__PURE__ */ jsxs("div", { className: "relative min-w-0 flex-1", children: [
1352
1356
  multiline ? /* @__PURE__ */ jsx(
1353
1357
  Textarea,
@@ -1577,7 +1581,7 @@ function RecentActivityCard({
1577
1581
  /* @__PURE__ */ jsx(
1578
1582
  "p",
1579
1583
  {
1580
- className: "mt-1 px-4 pb-1 text-[11px] font-medium uppercase tracking-wide text-muted-foreground",
1584
+ className: "mt-1 px-4 pb-1 text-right text-[11px] font-medium uppercase tracking-wide text-muted-foreground",
1581
1585
  "data-testid": testId && `${testId}-caption`,
1582
1586
  children: caption
1583
1587
  }
@@ -1603,18 +1607,18 @@ function RecentActivityCard({
1603
1607
  onClick: row.onClick,
1604
1608
  title: row.title,
1605
1609
  className: cn(
1606
- "flex min-w-0 flex-1 items-start gap-3 py-2.5 pl-4 pr-2 text-left focus-visible:outline-none",
1610
+ "flex min-w-0 flex-1 items-start gap-3 py-1.5 pl-4 pr-2 text-left focus-visible:outline-none",
1607
1611
  row.onClick && "cursor-pointer"
1608
1612
  ),
1609
1613
  "data-testid": testId && `${testId}-row`,
1610
1614
  children: [
1611
1615
  row.leading,
1612
1616
  /* @__PURE__ */ jsxs("div", { className: "min-w-0 flex-1", children: [
1613
- /* @__PURE__ */ jsx("span", { className: "block truncate text-sm font-semibold text-foreground group-hover:text-primary", children: row.title }),
1614
- /* @__PURE__ */ jsxs("div", { className: "mt-0.5 flex items-center gap-1.5", children: [
1615
- /* @__PURE__ */ jsx("p", { className: "min-w-0 flex-1 truncate text-xs text-muted-foreground", children: row.subtitle }),
1617
+ /* @__PURE__ */ jsxs("div", { className: "flex items-baseline gap-1.5", children: [
1618
+ /* @__PURE__ */ jsx("span", { className: "min-w-0 flex-1 truncate text-sm font-semibold text-foreground group-hover:text-primary", children: row.title }),
1616
1619
  !row.trailing && row.meta && /* @__PURE__ */ jsx("span", { className: "shrink-0 text-[11px] text-muted-foreground", children: row.meta })
1617
- ] })
1620
+ ] }),
1621
+ /* @__PURE__ */ jsx("p", { className: "mt-0.5 truncate text-xs text-muted-foreground", children: row.subtitle })
1618
1622
  ] })
1619
1623
  ]
1620
1624
  }
@@ -1758,6 +1762,74 @@ function ResumeStrip({
1758
1762
  )) })
1759
1763
  ] });
1760
1764
  }
1765
+ function SectionCaption({ children, className, testId }) {
1766
+ return /* @__PURE__ */ jsx(
1767
+ "p",
1768
+ {
1769
+ className: cn(
1770
+ "text-[11px] font-medium uppercase tracking-wide text-muted-foreground",
1771
+ className
1772
+ ),
1773
+ "data-testid": testId,
1774
+ children
1775
+ }
1776
+ );
1777
+ }
1778
+ function QuickActionCards({
1779
+ items,
1780
+ caption,
1781
+ className,
1782
+ testId = "quick-action-cards"
1783
+ }) {
1784
+ if (items.length === 0) return null;
1785
+ return /* @__PURE__ */ jsxs("section", { className: cn("flex flex-col gap-2", className), "data-testid": testId, children: [
1786
+ caption && /* @__PURE__ */ jsx(SectionCaption, { children: caption }),
1787
+ /* @__PURE__ */ jsx("div", { className: "grid gap-2 [grid-template-columns:repeat(auto-fit,minmax(190px,1fr))]", children: items.map((item) => {
1788
+ const Icon = item.icon;
1789
+ return /* @__PURE__ */ jsxs(
1790
+ "button",
1791
+ {
1792
+ type: "button",
1793
+ onClick: item.onClick,
1794
+ disabled: item.disabled,
1795
+ title: item.disabled ? item.disabledReason : void 0,
1796
+ "aria-describedby": void 0,
1797
+ className: cn(
1798
+ "group flex h-full items-start gap-3 rounded-2xl border-2 border-border bg-card p-4 text-left",
1799
+ "transition-colors",
1800
+ // `[&:hover]` rather than `hover:` — Tailwind v4 wraps the hover
1801
+ // variant in @media (hover: hover), so on a touchscreen the
1802
+ // affordance would never appear at all.
1803
+ "[&:hover]:border-theme-cyan/50 [&:hover]:bg-theme-cyan/5",
1804
+ "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-theme-cyan focus-visible:ring-offset-2",
1805
+ "disabled:cursor-default disabled:opacity-55",
1806
+ "disabled:[&:hover]:border-border disabled:[&:hover]:bg-card"
1807
+ ),
1808
+ "data-testid": item.testId,
1809
+ children: [
1810
+ /* @__PURE__ */ jsx(
1811
+ "span",
1812
+ {
1813
+ className: cn(
1814
+ "flex h-10 w-10 shrink-0 items-center justify-center rounded-full",
1815
+ "bg-theme-cyan/10 text-theme-cyan transition-colors",
1816
+ "[.group:hover_&]:bg-theme-cyan/20",
1817
+ item.disabled && "bg-muted text-muted-foreground [.group:hover_&]:bg-muted"
1818
+ ),
1819
+ children: /* @__PURE__ */ jsx(Icon, { className: "h-5 w-5" })
1820
+ }
1821
+ ),
1822
+ /* @__PURE__ */ jsxs("span", { className: "min-w-0", children: [
1823
+ /* @__PURE__ */ jsx("span", { className: "block text-base font-medium text-foreground", children: item.title }),
1824
+ /* @__PURE__ */ jsx("span", { className: "mt-0.5 block text-sm leading-snug text-muted-foreground", children: item.disabled && item.disabledReason ? item.disabledReason : item.description })
1825
+ ] })
1826
+ ]
1827
+ },
1828
+ item.id
1829
+ );
1830
+ }) })
1831
+ ] });
1832
+ }
1761
1833
  function SectionStrip({
1762
1834
  icon: Icon,
1763
1835
  title,
@@ -1773,7 +1845,10 @@ function SectionStrip({
1773
1845
  return /* @__PURE__ */ jsxs(
1774
1846
  "div",
1775
1847
  {
1776
- className: cn("rounded-xl border border-border/60 bg-card p-2 shadow-sm", className),
1848
+ className: cn(
1849
+ "@container rounded-xl border border-border/60 bg-card p-2 shadow-sm",
1850
+ className
1851
+ ),
1777
1852
  "data-testid": testId,
1778
1853
  children: [
1779
1854
  /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-1", children: [
@@ -1842,7 +1917,7 @@ function SectionStrip({
1842
1917
  ]
1843
1918
  }
1844
1919
  ) : null : /* @__PURE__ */ jsx("div", { className: "grid gap-x-4 @2xl:grid-cols-2", children: filledGroups.map((group) => /* @__PURE__ */ jsxs("div", { children: [
1845
- /* @__PURE__ */ jsx("p", { className: "mt-1 px-2 pb-0.5 text-[11px] font-medium uppercase tracking-wide text-muted-foreground", children: group.caption }),
1920
+ /* @__PURE__ */ jsx("p", { className: "mt-1 px-2 pb-0.5 text-right text-[11px] font-medium uppercase tracking-wide text-muted-foreground", children: group.caption }),
1846
1921
  /* @__PURE__ */ jsx("ul", { children: group.rows.map((row) => /* @__PURE__ */ jsx("li", { children: /* @__PURE__ */ jsxs(
1847
1922
  "button",
1848
1923
  {
@@ -2049,18 +2124,18 @@ function WorkspaceCard({
2049
2124
  )
2050
2125
  ] }),
2051
2126
  /* @__PURE__ */ jsxs(CardFooter, { className: "mt-auto flex w-full min-w-0 flex-col items-stretch gap-3 overflow-hidden p-0", children: [
2052
- /* @__PURE__ */ jsxs("div", { className: "flex w-full items-center gap-x-3 text-sm", children: [
2127
+ /* @__PURE__ */ jsxs("div", { className: "flex w-full items-center gap-x-3 text-[15px]", children: [
2053
2128
  /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-x-3", children: [
2054
2129
  /* @__PURE__ */ jsxs("span", { className: "inline-flex items-center gap-1 text-foreground", title: "Documents", children: [
2055
- /* @__PURE__ */ jsx(FileText, { className: "size-3.5 text-muted-foreground" }),
2130
+ /* @__PURE__ */ jsx(FileText, { className: "size-4 text-muted-foreground" }),
2056
2131
  /* @__PURE__ */ jsx("span", { className: "font-medium tabular-nums", children: docCount.toLocaleString() })
2057
2132
  ] }),
2058
2133
  chatCount !== void 0 && /* @__PURE__ */ jsxs("span", { className: "inline-flex items-center gap-1 text-foreground", title: "Chats", children: [
2059
- /* @__PURE__ */ jsx(MessagesSquare, { className: "size-3.5 text-muted-foreground" }),
2134
+ /* @__PURE__ */ jsx(MessagesSquare, { className: "size-4 text-muted-foreground" }),
2060
2135
  /* @__PURE__ */ jsx("span", { className: "font-medium tabular-nums", children: chatCount.toLocaleString() })
2061
2136
  ] }),
2062
2137
  /* @__PURE__ */ jsxs("span", { className: "inline-flex items-center gap-1 text-foreground", title: "Members", children: [
2063
- /* @__PURE__ */ jsx(Users, { className: "size-3.5 text-muted-foreground" }),
2138
+ /* @__PURE__ */ jsx(Users, { className: "size-4 text-muted-foreground" }),
2064
2139
  /* @__PURE__ */ jsx(
2065
2140
  "span",
2066
2141
  {
@@ -5532,6 +5607,6 @@ function VerticalBuilder({
5532
5607
  ] });
5533
5608
  }
5534
5609
 
5535
- export { AgentsPanel, AppHeader, AppShell, AskBar, AssetThumb, CitationEditor, ConnectionProvider, DataTable, DataTableBlock, EmptyState, EntityIdentityBar, GridView, IDENTITY_NAME_MAX_LENGTH, LegalArbiProvider, LiveDataProvider, MemberAvatarStack, MetricCard, ModuleManager, PageHeader, PageRenderer, RecentActivityCard, ResumeStrip, Section, SectionStrip, StartHero, StatGroup, StudioEditor, Toolbar, UploadDropzone, UsageMeter, VerticalBuilder, WidgetPlaceholder, WorkspaceCard, createAgentSelectionStore, createAiFields, createArbiBlocksConfig, createArbiMaterializer, createBlockKit, createImageField, createLiveWidgets, createModuleRegistry, createModuleStore, createPromptLibrary, createSiteBlocks, createStudioPersistence, createVerticalExport, createWebsiteBlocks, iconMap, isAuthenticated, materializePageData, matterToContext, useAssetImage, useConnection, useFirmAiTask, useImageGen, useLiveDataActive, useSemanticSearch, useWorkspaceDocs };
5610
+ export { AgentsPanel, AppHeader, AppShell, AskBar, AssetThumb, CitationEditor, ConnectionProvider, DataTable, DataTableBlock, EmptyState, EntityIdentityBar, GridView, IDENTITY_NAME_MAX_LENGTH, LegalArbiProvider, LiveDataProvider, MemberAvatarStack, MetricCard, ModuleManager, PageHeader, PageRenderer, QuickActionCards, RecentActivityCard, ResumeStrip, Section, SectionCaption, SectionStrip, StartHero, StatGroup, StudioEditor, Toolbar, UploadDropzone, UsageMeter, VerticalBuilder, WidgetPlaceholder, WorkspaceCard, createAgentSelectionStore, createAiFields, createArbiBlocksConfig, createArbiMaterializer, createBlockKit, createImageField, createLiveWidgets, createModuleRegistry, createModuleStore, createPromptLibrary, createSiteBlocks, createStudioPersistence, createVerticalExport, createWebsiteBlocks, iconMap, isAuthenticated, materializePageData, matterToContext, useAssetImage, useConnection, useFirmAiTask, useImageGen, useLiveDataActive, useSemanticSearch, useWorkspaceDocs };
5536
5611
  //# sourceMappingURL=index.js.map
5537
5612
  //# sourceMappingURL=index.js.map