@arbidocs/blocks 0.3.177 → 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: [
@@ -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
@@ -1333,7 +1335,7 @@ function IdentityFieldRow({ field, canEdit }) {
1333
1335
  }
1334
1336
  }
1335
1337
  };
1336
- 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: [
1337
1339
  /* @__PURE__ */ jsxs(
1338
1340
  "dt",
1339
1341
  {
@@ -1603,18 +1605,18 @@ function RecentActivityCard({
1603
1605
  onClick: row.onClick,
1604
1606
  title: row.title,
1605
1607
  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",
1608
+ "flex min-w-0 flex-1 items-start gap-3 py-1.5 pl-4 pr-2 text-left focus-visible:outline-none",
1607
1609
  row.onClick && "cursor-pointer"
1608
1610
  ),
1609
1611
  "data-testid": testId && `${testId}-row`,
1610
1612
  children: [
1611
1613
  row.leading,
1612
1614
  /* @__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 }),
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 }),
1616
1617
  !row.trailing && row.meta && /* @__PURE__ */ jsx("span", { className: "shrink-0 text-[11px] text-muted-foreground", children: row.meta })
1617
- ] })
1618
+ ] }),
1619
+ /* @__PURE__ */ jsx("p", { className: "mt-0.5 truncate text-xs text-muted-foreground", children: row.subtitle })
1618
1620
  ] })
1619
1621
  ]
1620
1622
  }
@@ -1758,6 +1760,74 @@ function ResumeStrip({
1758
1760
  )) })
1759
1761
  ] });
1760
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
+ }
1761
1831
  function SectionStrip({
1762
1832
  icon: Icon,
1763
1833
  title,
@@ -2049,18 +2119,18 @@ function WorkspaceCard({
2049
2119
  )
2050
2120
  ] }),
2051
2121
  /* @__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: [
2122
+ /* @__PURE__ */ jsxs("div", { className: "flex w-full items-center gap-x-3 text-[15px]", children: [
2053
2123
  /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-x-3", children: [
2054
2124
  /* @__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" }),
2125
+ /* @__PURE__ */ jsx(FileText, { className: "size-4 text-muted-foreground" }),
2056
2126
  /* @__PURE__ */ jsx("span", { className: "font-medium tabular-nums", children: docCount.toLocaleString() })
2057
2127
  ] }),
2058
2128
  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" }),
2129
+ /* @__PURE__ */ jsx(MessagesSquare, { className: "size-4 text-muted-foreground" }),
2060
2130
  /* @__PURE__ */ jsx("span", { className: "font-medium tabular-nums", children: chatCount.toLocaleString() })
2061
2131
  ] }),
2062
2132
  /* @__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" }),
2133
+ /* @__PURE__ */ jsx(Users, { className: "size-4 text-muted-foreground" }),
2064
2134
  /* @__PURE__ */ jsx(
2065
2135
  "span",
2066
2136
  {
@@ -5532,6 +5602,6 @@ function VerticalBuilder({
5532
5602
  ] });
5533
5603
  }
5534
5604
 
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 };
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 };
5536
5606
  //# sourceMappingURL=index.js.map
5537
5607
  //# sourceMappingURL=index.js.map