@arbidocs/blocks 0.3.176 → 0.3.179

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;
@@ -699,7 +717,7 @@ interface RecentActivityRow {
699
717
  title: string;
700
718
  /** Second line: what this row is, in a few words. */
701
719
  subtitle?: string;
702
- /** Pinned right on the second line, like a message time. */
720
+ /** Pinned right on the title line, like a message time. */
703
721
  meta?: string;
704
722
  onClick?: () => void;
705
723
  /**
@@ -765,7 +783,7 @@ interface RecentActivityCardProps {
765
783
  * count rides along as a caption beside the title, not as the content.
766
784
  *
767
785
  * 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
786
+ * line with the time pinned right, muted second line), because a list of
769
787
  * recognisable things reads the same way whoever owns it.
770
788
  *
771
789
  * Styled with SEMANTIC tokens only (card, border, foreground, muted-foreground,
@@ -821,6 +839,43 @@ interface ResumeStripProps {
821
839
  }
822
840
  declare function ResumeStrip({ items, caption, className, testId, }: ResumeStripProps): react.JSX.Element | null;
823
841
 
842
+ interface QuickActionItem {
843
+ id: string;
844
+ icon: LucideIcon;
845
+ /** The job, in the user's words — "Deep research", not "Research agent". */
846
+ title: string;
847
+ /** One line on what happens. Sentence case, no full stop needed. */
848
+ description: string;
849
+ onClick: () => void;
850
+ /** Rendered non-interactive and dimmed; `disabledReason` explains why. */
851
+ disabled?: boolean;
852
+ /** Shown as the card's tooltip when disabled — say how to unblock it. */
853
+ disabledReason?: string;
854
+ testId?: string;
855
+ }
856
+ interface QuickActionCardsProps {
857
+ items: QuickActionItem[];
858
+ /** Optional lead-in above the row. */
859
+ caption?: string;
860
+ className?: string;
861
+ testId?: string;
862
+ }
863
+ declare function QuickActionCards({ items, caption, className, testId, }: QuickActionCardsProps): react.JSX.Element | null;
864
+
865
+ interface SectionCaptionProps {
866
+ children: ReactNode;
867
+ className?: string;
868
+ testId?: string;
869
+ }
870
+ /**
871
+ * The small uppercase eyebrow that names a band of a page — "Start something",
872
+ * "Continue a chat". One component so every band on a home surface wears the
873
+ * same caption, and a single screenful never mixes two caption languages.
874
+ *
875
+ * Styled with SEMANTIC tokens only, so every firm gets it in its own colours.
876
+ */
877
+ declare function SectionCaption({ children, className, testId }: SectionCaptionProps): react.JSX.Element;
878
+
824
879
  interface SectionStripRow {
825
880
  id: string;
826
881
  /** The row's mark — a pin, a dot, a tiny glyph. Consumer-supplied. */
@@ -1645,4 +1700,4 @@ interface AgentsPanelProps {
1645
1700
  }
1646
1701
  declare function AgentsPanel({ store, testIdPrefix }: AgentsPanelProps): react.JSX.Element;
1647
1702
 
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 };
1703
+ 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;
@@ -699,7 +717,7 @@ interface RecentActivityRow {
699
717
  title: string;
700
718
  /** Second line: what this row is, in a few words. */
701
719
  subtitle?: string;
702
- /** Pinned right on the second line, like a message time. */
720
+ /** Pinned right on the title line, like a message time. */
703
721
  meta?: string;
704
722
  onClick?: () => void;
705
723
  /**
@@ -765,7 +783,7 @@ interface RecentActivityCardProps {
765
783
  * count rides along as a caption beside the title, not as the content.
766
784
  *
767
785
  * 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
786
+ * line with the time pinned right, muted second line), because a list of
769
787
  * recognisable things reads the same way whoever owns it.
770
788
  *
771
789
  * Styled with SEMANTIC tokens only (card, border, foreground, muted-foreground,
@@ -821,6 +839,43 @@ interface ResumeStripProps {
821
839
  }
822
840
  declare function ResumeStrip({ items, caption, className, testId, }: ResumeStripProps): react.JSX.Element | null;
823
841
 
842
+ interface QuickActionItem {
843
+ id: string;
844
+ icon: LucideIcon;
845
+ /** The job, in the user's words — "Deep research", not "Research agent". */
846
+ title: string;
847
+ /** One line on what happens. Sentence case, no full stop needed. */
848
+ description: string;
849
+ onClick: () => void;
850
+ /** Rendered non-interactive and dimmed; `disabledReason` explains why. */
851
+ disabled?: boolean;
852
+ /** Shown as the card's tooltip when disabled — say how to unblock it. */
853
+ disabledReason?: string;
854
+ testId?: string;
855
+ }
856
+ interface QuickActionCardsProps {
857
+ items: QuickActionItem[];
858
+ /** Optional lead-in above the row. */
859
+ caption?: string;
860
+ className?: string;
861
+ testId?: string;
862
+ }
863
+ declare function QuickActionCards({ items, caption, className, testId, }: QuickActionCardsProps): react.JSX.Element | null;
864
+
865
+ interface SectionCaptionProps {
866
+ children: ReactNode;
867
+ className?: string;
868
+ testId?: string;
869
+ }
870
+ /**
871
+ * The small uppercase eyebrow that names a band of a page — "Start something",
872
+ * "Continue a chat". One component so every band on a home surface wears the
873
+ * same caption, and a single screenful never mixes two caption languages.
874
+ *
875
+ * Styled with SEMANTIC tokens only, so every firm gets it in its own colours.
876
+ */
877
+ declare function SectionCaption({ children, className, testId }: SectionCaptionProps): react.JSX.Element;
878
+
824
879
  interface SectionStripRow {
825
880
  id: string;
826
881
  /** The row's mark — a pin, a dot, a tiny glyph. Consumer-supplied. */
@@ -1645,4 +1700,4 @@ interface AgentsPanelProps {
1645
1700
  }
1646
1701
  declare function AgentsPanel({ store, testIdPrefix }: AgentsPanelProps): react.JSX.Element;
1647
1702
 
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 };
1703
+ 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: [
@@ -760,6 +754,12 @@ function GridView({
760
754
  },
761
755
  [onRowClick]
762
756
  );
757
+ const desiredHiddenRef = useRef(null);
758
+ const snapshotDesiredHidden = useCallback(() => {
759
+ const api = gridApiRef.current;
760
+ if (!api) return;
761
+ desiredHiddenRef.current = new Map(api.getColumnState().map((c) => [c.colId, !!c.hide]));
762
+ }, []);
763
763
  const handleGridReady = useCallback(
764
764
  (event) => {
765
765
  gridApiRef.current = event.api;
@@ -800,6 +800,7 @@ function GridView({
800
800
  }
801
801
  }
802
802
  ensureSelectionColumnVisible();
803
+ snapshotDesiredHidden();
803
804
  if (onGridReady) {
804
805
  onGridReady({ api: event.api });
805
806
  }
@@ -813,11 +814,36 @@ function GridView({
813
814
  });
814
815
  }
815
816
  },
816
- [onGridReady, getItemId, ensureSelectionColumnVisible, initialState, initialVisibleColumns]
817
+ [
818
+ onGridReady,
819
+ getItemId,
820
+ ensureSelectionColumnVisible,
821
+ snapshotDesiredHidden,
822
+ initialState,
823
+ initialVisibleColumns
824
+ ]
825
+ );
826
+ const handleColumnVisible = useCallback(
827
+ (event) => {
828
+ const api = gridApiRef.current;
829
+ if (!api) return;
830
+ if (event.source === "gridOptionsChanged") {
831
+ const desired = desiredHiddenRef.current;
832
+ if (!desired) return;
833
+ const fixes = api.getColumnState().filter(
834
+ (c) => c.colId !== "ag-Grid-SelectionColumn" && desired.has(c.colId) && desired.get(c.colId) !== !!c.hide
835
+ ).map((c) => ({ colId: c.colId, hide: desired.get(c.colId) }));
836
+ if (fixes.length) api.applyColumnState({ state: fixes });
837
+ } else {
838
+ snapshotDesiredHidden();
839
+ }
840
+ },
841
+ [snapshotDesiredHidden]
817
842
  );
818
843
  const handleFirstDataRendered = useCallback(() => {
819
844
  ensureSelectionColumnVisible();
820
- }, [ensureSelectionColumnVisible]);
845
+ snapshotDesiredHidden();
846
+ }, [ensureSelectionColumnVisible, snapshotDesiredHidden]);
821
847
  const handleModelUpdated = useCallback(() => {
822
848
  }, []);
823
849
  const prevItemsRef = useRef([]);
@@ -1036,6 +1062,7 @@ function GridView({
1036
1062
  onCellValueChanged,
1037
1063
  onRowClicked: handleRowClicked,
1038
1064
  onStateUpdated: handleStateUpdated,
1065
+ onColumnVisible: handleColumnVisible,
1039
1066
  ...combinedOptions
1040
1067
  }
1041
1068
  ) });
@@ -1236,16 +1263,24 @@ function EntityIdentityBar({
1236
1263
  children: [
1237
1264
  /* @__PURE__ */ jsxs("dl", { className: "min-w-0 flex-1 space-y-1.5", children: [
1238
1265
  fields.map((field) => /* @__PURE__ */ jsx(IdentityFieldRow, { field, canEdit }, field.label)),
1239
- extraRows.map((row) => /* @__PURE__ */ jsxs("div", { className: "flex min-w-0 items-center gap-2", "data-testid": row.testId, children: [
1240
- /* @__PURE__ */ jsxs("dt", { className: "w-24 shrink-0 text-sm font-medium text-muted-foreground", children: [
1241
- row.label,
1242
- ":"
1243
- ] }),
1244
- /* @__PURE__ */ jsxs("dd", { className: "flex min-w-0 flex-1 items-center gap-2", children: [
1245
- row.content,
1246
- row.trailing ? /* @__PURE__ */ jsx("div", { className: "ml-auto shrink-0", children: row.trailing }) : null
1247
- ] })
1248
- ] }, 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
+ )),
1249
1284
  footer ? /* @__PURE__ */ jsx("div", { className: "flex items-center pt-0.5", children: footer }) : null
1250
1285
  ] }),
1251
1286
  actions ? /* @__PURE__ */ jsx("div", { className: "flex shrink-0 items-center gap-2", children: actions }) : null
@@ -1300,7 +1335,7 @@ function IdentityFieldRow({ field, canEdit }) {
1300
1335
  }
1301
1336
  }
1302
1337
  };
1303
- return /* @__PURE__ */ jsxs("div", { className: cn("flex min-w-0 gap-2", multiline ? "items-start" : "items-center"), children: [
1338
+ return /* @__PURE__ */ jsxs("div", { className: cn("flex min-h-7 min-w-0 gap-2", multiline ? "items-start" : "items-center"), children: [
1304
1339
  /* @__PURE__ */ jsxs(
1305
1340
  "dt",
1306
1341
  {
@@ -1570,18 +1605,18 @@ function RecentActivityCard({
1570
1605
  onClick: row.onClick,
1571
1606
  title: row.title,
1572
1607
  className: cn(
1573
- "flex min-w-0 flex-1 items-start gap-3 py-2.5 pl-4 pr-2 text-left focus-visible:outline-none",
1608
+ "flex min-w-0 flex-1 items-start gap-3 py-1.5 pl-4 pr-2 text-left focus-visible:outline-none",
1574
1609
  row.onClick && "cursor-pointer"
1575
1610
  ),
1576
1611
  "data-testid": testId && `${testId}-row`,
1577
1612
  children: [
1578
1613
  row.leading,
1579
1614
  /* @__PURE__ */ jsxs("div", { className: "min-w-0 flex-1", children: [
1580
- /* @__PURE__ */ jsx("span", { className: "block truncate text-sm font-semibold text-foreground group-hover:text-primary", children: row.title }),
1581
- /* @__PURE__ */ jsxs("div", { className: "mt-0.5 flex items-center gap-1.5", children: [
1582
- /* @__PURE__ */ jsx("p", { className: "min-w-0 flex-1 truncate text-xs text-muted-foreground", children: row.subtitle }),
1615
+ /* @__PURE__ */ jsxs("div", { className: "flex items-baseline gap-1.5", children: [
1616
+ /* @__PURE__ */ jsx("span", { className: "min-w-0 flex-1 truncate text-sm font-semibold text-foreground group-hover:text-primary", children: row.title }),
1583
1617
  !row.trailing && row.meta && /* @__PURE__ */ jsx("span", { className: "shrink-0 text-[11px] text-muted-foreground", children: row.meta })
1584
- ] })
1618
+ ] }),
1619
+ /* @__PURE__ */ jsx("p", { className: "mt-0.5 truncate text-xs text-muted-foreground", children: row.subtitle })
1585
1620
  ] })
1586
1621
  ]
1587
1622
  }
@@ -1725,6 +1760,74 @@ function ResumeStrip({
1725
1760
  )) })
1726
1761
  ] });
1727
1762
  }
1763
+ function SectionCaption({ children, className, testId }) {
1764
+ return /* @__PURE__ */ jsx(
1765
+ "p",
1766
+ {
1767
+ className: cn(
1768
+ "text-[11px] font-medium uppercase tracking-wide text-muted-foreground",
1769
+ className
1770
+ ),
1771
+ "data-testid": testId,
1772
+ children
1773
+ }
1774
+ );
1775
+ }
1776
+ function QuickActionCards({
1777
+ items,
1778
+ caption,
1779
+ className,
1780
+ testId = "quick-action-cards"
1781
+ }) {
1782
+ if (items.length === 0) return null;
1783
+ return /* @__PURE__ */ jsxs("section", { className: cn("flex flex-col gap-2", className), "data-testid": testId, children: [
1784
+ caption && /* @__PURE__ */ jsx(SectionCaption, { children: caption }),
1785
+ /* @__PURE__ */ jsx("div", { className: "grid gap-2 [grid-template-columns:repeat(auto-fit,minmax(190px,1fr))]", children: items.map((item) => {
1786
+ const Icon = item.icon;
1787
+ return /* @__PURE__ */ jsxs(
1788
+ "button",
1789
+ {
1790
+ type: "button",
1791
+ onClick: item.onClick,
1792
+ disabled: item.disabled,
1793
+ title: item.disabled ? item.disabledReason : void 0,
1794
+ "aria-describedby": void 0,
1795
+ className: cn(
1796
+ "group flex h-full items-start gap-3 rounded-2xl border border-border/70 bg-card p-4 text-left",
1797
+ "transition-colors",
1798
+ // `[&:hover]` rather than `hover:` — Tailwind v4 wraps the hover
1799
+ // variant in @media (hover: hover), so on a touchscreen the
1800
+ // affordance would never appear at all.
1801
+ "[&:hover]:border-theme-cyan/50 [&:hover]:bg-theme-cyan/5",
1802
+ "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-theme-cyan focus-visible:ring-offset-2",
1803
+ "disabled:cursor-default disabled:opacity-55",
1804
+ "disabled:[&:hover]:border-border/70 disabled:[&:hover]:bg-card"
1805
+ ),
1806
+ "data-testid": item.testId,
1807
+ children: [
1808
+ /* @__PURE__ */ jsx(
1809
+ "span",
1810
+ {
1811
+ className: cn(
1812
+ "flex h-10 w-10 shrink-0 items-center justify-center rounded-full",
1813
+ "bg-theme-cyan/10 text-theme-cyan transition-colors",
1814
+ "[.group:hover_&]:bg-theme-cyan/20",
1815
+ item.disabled && "bg-muted text-muted-foreground [.group:hover_&]:bg-muted"
1816
+ ),
1817
+ children: /* @__PURE__ */ jsx(Icon, { className: "h-5 w-5" })
1818
+ }
1819
+ ),
1820
+ /* @__PURE__ */ jsxs("span", { className: "min-w-0", children: [
1821
+ /* @__PURE__ */ jsx("span", { className: "block text-base font-medium text-foreground", children: item.title }),
1822
+ /* @__PURE__ */ jsx("span", { className: "mt-0.5 block text-sm leading-snug text-muted-foreground", children: item.disabled && item.disabledReason ? item.disabledReason : item.description })
1823
+ ] })
1824
+ ]
1825
+ },
1826
+ item.id
1827
+ );
1828
+ }) })
1829
+ ] });
1830
+ }
1728
1831
  function SectionStrip({
1729
1832
  icon: Icon,
1730
1833
  title,
@@ -2016,18 +2119,18 @@ function WorkspaceCard({
2016
2119
  )
2017
2120
  ] }),
2018
2121
  /* @__PURE__ */ jsxs(CardFooter, { className: "mt-auto flex w-full min-w-0 flex-col items-stretch gap-3 overflow-hidden p-0", children: [
2019
- /* @__PURE__ */ jsxs("div", { className: "flex w-full items-center gap-x-3 text-sm", children: [
2122
+ /* @__PURE__ */ jsxs("div", { className: "flex w-full items-center gap-x-3 text-[15px]", children: [
2020
2123
  /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-x-3", children: [
2021
2124
  /* @__PURE__ */ jsxs("span", { className: "inline-flex items-center gap-1 text-foreground", title: "Documents", children: [
2022
- /* @__PURE__ */ jsx(FileText, { className: "size-3.5 text-muted-foreground" }),
2125
+ /* @__PURE__ */ jsx(FileText, { className: "size-4 text-muted-foreground" }),
2023
2126
  /* @__PURE__ */ jsx("span", { className: "font-medium tabular-nums", children: docCount.toLocaleString() })
2024
2127
  ] }),
2025
2128
  chatCount !== void 0 && /* @__PURE__ */ jsxs("span", { className: "inline-flex items-center gap-1 text-foreground", title: "Chats", children: [
2026
- /* @__PURE__ */ jsx(MessagesSquare, { className: "size-3.5 text-muted-foreground" }),
2129
+ /* @__PURE__ */ jsx(MessagesSquare, { className: "size-4 text-muted-foreground" }),
2027
2130
  /* @__PURE__ */ jsx("span", { className: "font-medium tabular-nums", children: chatCount.toLocaleString() })
2028
2131
  ] }),
2029
2132
  /* @__PURE__ */ jsxs("span", { className: "inline-flex items-center gap-1 text-foreground", title: "Members", children: [
2030
- /* @__PURE__ */ jsx(Users, { className: "size-3.5 text-muted-foreground" }),
2133
+ /* @__PURE__ */ jsx(Users, { className: "size-4 text-muted-foreground" }),
2031
2134
  /* @__PURE__ */ jsx(
2032
2135
  "span",
2033
2136
  {
@@ -5499,6 +5602,6 @@ function VerticalBuilder({
5499
5602
  ] });
5500
5603
  }
5501
5604
 
5502
- 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 };
5605
+ 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 };
5503
5606
  //# sourceMappingURL=index.js.map
5504
5607
  //# sourceMappingURL=index.js.map