@flytedan/flytebot-design-system 0.65.0 → 0.67.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.cts CHANGED
@@ -1290,6 +1290,16 @@ interface FilterFieldSelect extends FilterFieldBase {
1290
1290
  type: "select";
1291
1291
  options: FilterFieldOption[];
1292
1292
  }
1293
+ /** A filter whose value is set from outside FilterBar, by a link or the host's own state (MP-312). Its
1294
+ * chip paints `valueLabel` and carries an x that removes it; the chip opens no picker, and the field
1295
+ * is never offered in the Filter menu, so a person can neither add nor edit it. The value in
1296
+ * `filters` is whatever the host set (any non-empty string); the label is the host's to provide, and
1297
+ * so are loading and error states (pass a placeholder label until the real one is known). */
1298
+ interface FilterFieldFixed extends FilterFieldBase {
1299
+ type: "fixed";
1300
+ /** What the chip paints for the value, e.g. a sheet's name. */
1301
+ valueLabel: string;
1302
+ }
1293
1303
  /** Include/exclude, shared by every field whose value is a set of options. */
1294
1304
  type FilterOperator = "in" | "notIn";
1295
1305
  interface FilterMultiSelectValue {
@@ -1396,11 +1406,11 @@ interface FilterFieldDate extends FilterFieldBase {
1396
1406
  * picker. text/select keep their original bare-string value shape unchanged, so an
1397
1407
  * existing consumer needs no migration; every other variant's value is a small typed
1398
1408
  * object of its own (see FilterValue). */
1399
- type FilterField = FilterFieldText | FilterFieldSelect | FilterFieldMultiSelect | FilterFieldRange | FilterFieldDate;
1409
+ type FilterField = FilterFieldText | FilterFieldSelect | FilterFieldFixed | FilterFieldMultiSelect | FilterFieldRange | FilterFieldDate;
1400
1410
  /** The value shape a given declared field reads/writes, so a consumer can type its own
1401
1411
  * `filters` record precisely instead of `Record<string, unknown>` — e.g.
1402
1412
  * `Record<"schools", FilterValue<typeof schoolsField>>`. */
1403
- type FilterValue<F extends FilterField> = F extends FilterFieldText ? string : F extends FilterFieldSelect ? string : F extends FilterFieldMultiSelect ? FilterMultiSelectValue : F extends FilterFieldRange ? FilterRangeValue : F extends FilterFieldDate ? FilterDateValue : never;
1413
+ type FilterValue<F extends FilterField> = F extends FilterFieldText ? string : F extends FilterFieldSelect | FilterFieldFixed ? string : F extends FilterFieldMultiSelect ? FilterMultiSelectValue : F extends FilterFieldRange ? FilterRangeValue : F extends FilterFieldDate ? FilterDateValue : never;
1404
1414
  interface FilterBarProps extends Omit<React.HTMLAttributes<HTMLSpanElement>, "onChange"> {
1405
1415
  /** Every filter a consumer can add. Order here is the order in the "add filter" list. */
1406
1416
  fields: FilterField[];
@@ -1462,6 +1472,7 @@ type FilterValidation = {
1462
1472
  * all call it on any candidate value:
1463
1473
  * - text: a string.
1464
1474
  * - select: one of the field's own option values.
1475
+ * - fixed: nothing; its value is the host's, so no edit is valid.
1465
1476
  * - multiSelect: `{ operator, values }` with at least one `{ value, label }` option, no
1466
1477
  * more than the field's `maxValues`, and an operator the field allows.
1467
1478
  * - date, withinDays: a whole number of days from 1 to the field's maxDays, which is
@@ -1521,8 +1532,9 @@ declare function StatGrid({ columns, className, children, ...rest }: StatGridPro
1521
1532
 
1522
1533
  /**
1523
1534
  * A flat figure tile — no shadow, no background color, never more than four in a row.
1535
+ * Given `onPress` it becomes a button that can filter a list (MP-311).
1524
1536
  */
1525
- interface StatTileProps extends React.HTMLAttributes<HTMLDivElement> {
1537
+ interface StatTileBaseProps {
1526
1538
  label: string;
1527
1539
  value?: React.ReactNode;
1528
1540
  sub?: React.ReactNode;
@@ -1541,7 +1553,24 @@ interface StatTileProps extends React.HTMLAttributes<HTMLDivElement> {
1541
1553
  compact?: boolean;
1542
1554
  className?: string;
1543
1555
  }
1544
- declare function StatTile({ label, value, sub, delta, invert, loading, compact, className, ...rest }: StatTileProps): React.JSX.Element;
1556
+ /** Display mode: a `div`, exactly as before. `pressed` and `disabled` mean nothing without `onPress`. */
1557
+ interface StatTileDisplayProps extends StatTileBaseProps, React.HTMLAttributes<HTMLDivElement> {
1558
+ onPress?: undefined;
1559
+ pressed?: never;
1560
+ disabled?: never;
1561
+ }
1562
+ /** Press mode: the tile is a real `<button>` with an `aria-pressed` state, so a dashboard's tiles
1563
+ * can filter the list below them. Enter and Space press it (native button behaviour); a pressed
1564
+ * tile wears the brand border and fill. */
1565
+ interface StatTilePressProps extends StatTileBaseProps, Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, "onClick" | "type" | "disabled" | "value"> {
1566
+ onPress: () => void;
1567
+ /** Whether the list is currently filtered by this tile. Give it (true or false) only for a tile that toggles a filter: it sets `aria-pressed`. Omit it for a tile that acts without a state (it jumps somewhere), which is then a plain button. */
1568
+ pressed?: boolean;
1569
+ /** Shown but cannot be pressed (nothing to go to). A `loading` tile is never pressable either. */
1570
+ disabled?: boolean;
1571
+ }
1572
+ type StatTileProps = StatTileDisplayProps | StatTilePressProps;
1573
+ declare function StatTile(props: StatTileProps): React.JSX.Element;
1545
1574
 
1546
1575
  declare function languageLabel(lang?: string): string;
1547
1576
  /** Tokenise source into [{t, c}] where c is a token class or null for plain text. */
@@ -5373,4 +5402,4 @@ declare function CornerStackPortal({ slot, children }: {
5373
5402
  children?: React.ReactNode;
5374
5403
  }): React.ReactPortal | null;
5375
5404
 
5376
- export { AccountMenu, type AccountMenuLink, type AccountMenuProps, AgentChatPanel, type AgentChatPanelProps, AnchoredPopover, type AnchoredPopoverProps, AnimNum, type AnimNumProps, ApiSpecBrowser, type ApiSpecBrowserProps, type AppEntry, AppShell, type AppShellProps, AppSwitcher, type AppSwitcherProps, AppearanceMenu, type AppearanceMenuProps, type AppearancePrefs, AppearanceProvider, type AppearanceProviderProps, type AppearanceStore, type AppearanceStoreOptions, type Attachment, Avatar, type AvatarProps, AvatarStack, type AvatarStackProps, Badge, type BadgeProps, Banner, type BannerProps, type BannerTone, BarList, type BarListProps, type BarListRow, BudgetReallocator, type BudgetReallocatorProps, Button, type ButtonProps, CHANNELS, CHANNEL_WEIGHTS, CHAT_UNAVAILABLE, COPIED_FEEDBACK_MS, CORNER_STACK_INSET_PROPERTY, Calendar, type CalendarProps, Card, CardGrid, type CardGridProps, type CardProps, CardRow, type CardRowProps, ChannelContribution, type ChannelContributionChannel, type ChannelContributionProps, ChannelMeta, type ChannelMetaRecord, ChannelTag, type ChannelTagProps, ChannelWeightOf, type ChatAdapter, ChatComposer, type ChatComposerProps, type ChatEngine, type ChatEngineOptions, ChatKit, type ChatMessage, type ChatRenderContext, ChatSessionBar, type ChatSessionBarProps, ChatTranscript, type ChatTranscriptProps, ChatTurn, type ChatTurnProps, Checkbox, type CheckboxProps, type Citation, Citations, type CitationsProps, Clamp, type ClampProps, ClockFace, type ClockFaceProps, CodeBlock, type CodeBlockProps, CodeEditor, type CodeEditorDiagnostic, type CodeEditorProps, Collapsible, type CollapsibleProps, ComingSoon, type ComingSoonProps, type ContextUsage, CornerStackPortal, type CornerStackSlot, type CreateVersionStoreOptions, CsiBadge, type CsiBadgeProps, CsiHero, type CsiHeroProps, CsiMeter, type CsiMeterProps, DEFAULT_PREFS, DEFAULT_STORAGE_KEY, DEFAULT_TOAST_DURATION_MS, DataTable, type DataTableColumn, type DataTablePhoneRole, type DataTableProps, DatePicker, type DatePickerProps, type DemoSessionControls, DemoSessionProvider, type DeviceSession, DiffBlock, type DiffBlockProps, DonutChart, type DonutChartProps, type DonutSegment, Drawer, type DrawerProps, Dropzone, DropzoneKit, type DropzoneProps, ENTITY_ROW_METRIC_WIDTH, type EditorTrigger, EmptyState, type EmptyStateProps, type EndpointSpec, EntityRow, type EntityRowAction, type EntityRowContent, type EntityRowMetric, EntityRowMetrics, type EntityRowMetricsProps, type EntityRowProps, FILE_VIEWER_CSV_ROW_LIMIT, FILE_VIEWER_TEXT_LIMIT, type Fact, FactList, type FactListProps, FeatureGate, type FeatureGateProps, type FeatureStatus, FileBrowser, type FileBrowserFile, type FileBrowserFolder, type FileBrowserPermissions, type FileBrowserProps, FileChip, type FileChipProps, FileGrid, type FileGridProps, FileKit, FilePickButton, type FilePickButtonProps, type FileRejection, FileStrip, type FileStripProps, FileTile, type FileTileProps, type FileUploadHandler, FileViewer, type FileViewerProps, FilterBar, type FilterBarProps, type FilterDateValue, type FilterField, type FilterFieldDate, type FilterFieldMultiSelect, type FilterFieldOption, type FilterFieldRange, type FilterFieldSelect, type FilterFieldText, type FilterMultiSelectValue, type FilterOperator, type FilterRangeValue, type FilterResolveMatch, type FilterResolveResult, type FilterValidation, type FilterValue, Flag$1 as Flag, type FlagExplanation, type FlagProps, FlytedeskBrand, type FlytedeskBrandProps, FlytedeskMark, type FlytedeskMarkProps, FormatEta, FunnelChart, type FunnelChartProps, type FunnelStep, Gate, GatePending, type GatePendingProps, type GateProps, IMPORTANCE_LEVELS, IconButton, type IconButtonProps, type ImportanceLevel, type ImportanceLevelId, ImportanceTag, type ImportanceTagProps, type ImportanceTokens, Input, type InputProps, type Job, type JobAction, type JobCardStatus, type JobStatus, JobTray, type JobTrayProps, Json, KeyHint, type KeyHintProps, type KeysetEnvelope, type KeysetServerTable, LAYER_STEP, type ListEnvelope, LoadingRegion, type LoadingRegionProps, Markdown, MarkdownEditor, type MarkdownEditorHandle, type MarkdownEditorProps, MarkdownInline, type MarkdownProps, type MentionSource, Menu, MenuButton, type MenuButtonProps, type MenuItem, type MenuProps, MessageBody, type MessageBodyProps, type MessageGroup, Meter, type MeterProps, type MeterSegment, type MeterSegmentInput, MixGap, type MixGapProps, type MixGapRow, MockJobKit, type MockJobStatus, Modal, type ModalProps, ModeSwitch, type ModeSwitchProps, type Model, ModelControls, type ModelControlsProps, NumberInput, type NumberInputProps, OVERLAY_CEILING, POPOVER_BODY_MIN, type Packet, PacketCard, type PacketCardProps, type PacketSchema, type Pager, Pagination, type PaginationProps, PermissionDenied, type PermissionDeniedProps, type PermissionGroup, PermissionHint, type PermissionItem, type Phase, type PhaseStatus, PhasedProgress, type PhasedProgressProps, type Placement, type PollOptions, Popover, type PopoverProps, type PreferenceCriterion, PreferenceMeter, type PreferenceMeterProps, type ProfileFieldDef, type ProfileFieldType, type ProfileNotificationDef, ProfilePage, type ProfilePageProps, ProgressBar, type ProgressBarProps, QueryKit, type QueryPaging, type QueryUrlAdapter, type QueryUrlOptions, type QueuedTurn, QuotaRow, type QuotaRowProps, ROOT_STEP, Radio, type RadioProps, RangeSlider, type RangeSliderProps, RelativeTime, type RelativeTimeProps, type RoadmapItem, type RoadmapResult, RoadmapTimeline, type RoadmapTimelineProps, type Role, RunActions, type RunActionsProps, type RunConfig, RuntimeKit, type RuntimeSummary, SaturationDistribution, type SaturationDistributionCampus, type SaturationDistributionProps, ScoreMeter, type ScoreMeterProps, ScreenHead, type ScreenHeadProps, SearchField, type SearchFieldProps, SegmentedControl, type SegmentedControlProps, SegmentedMeter, type SegmentedMeterProps, Select, type SelectOption, type SelectProps, type SendMessageResult, type ServerTable, type ServerTableBase, type Session, type SessionContextValue, type Flag as SessionFlag, SessionKit, SessionProvider, type SessionProviderProps, type SessionRole, SessionScreen, type SessionScreenKind, type SessionScreenProps, type SessionStats, type SessionUser, SidebarNav, type SidebarNavItem, type SidebarNavProps, Skeleton, type SkeletonProps, SkeletonText, type SkeletonTextProps, type SlashCommand, Slider, type SliderProps, type SortDirection, type SortEntry, SortMenu, type SortMenuField, type SortMenuProps, type SpecModule, Spinner, type SpinnerProps, type StackedLayer, type StackedLayerOptions, StackedLayerProvider, StatGrid, type StatGridProps, StatTile, type StatTileProps, type Step, StepList, type StepListProps, type StreamHandlers, type Suggestion, SurroundSound, type SurroundSoundProps, Switch, type SwitchProps, type TabItem, type TableQuery, Tabs, type TabsProps, Tag, type TagProps, TestModeBar, type TestModeBarProps, type TextScale, Textarea, type TextareaProps, type ThemeMode, ThinkingBlock, type ThinkingBlockProps, type ThreadSummary, TimePicker, type TimePickerProps, Toast, type ToastApi, type ToastOptions, type ToastProps, ToastProvider, Tooltip, type TooltipApi, type TooltipBinding, type TooltipPlacement, type TooltipProps, Topbar, type TopbarProps, TranscriptKit, TransferList, type TransferListProps, type TransferListSide, type TransferListSideProps, TrendChart, type TrendChartProps, type TrendSeries, USChoropleth, type USChoroplethProps, type StateFigure as USChoroplethState, type ChoroplethValue as USChoroplethValue, US_STATE_CODES, type UsageLimit, UseFeatureStatus, type UseKeysetTableOptions, type UseResponsiveRailOptions, type UseResponsiveRailResult, UseRuntimeMode, type UseServerTableOptions, type UseTooltipOptions, type User, VIRTUAL_LIST_BUFFER_ROWS, VIRTUAL_LIST_ROW_GAP, type VersionRecord, type VersionStore, VirtualList, type VirtualListProps, type VirtualLoadedBand, type VirtualWindow, type VoiceHandler, __resetLayerStackForTests, acceptMatches, anyOfFilter, applyAppearance, applyPrefs, channelWeightOf, computeNeedMore, computeVirtualWindow, copyToClipboard, createLocalStorageAppearanceStore, createVersionStore, eqFilter, extensionOf, extractClipboardFiles, filterFiles, formatAbsolute, formatBytes, formatClock, formatDocumentTitle, formatDuration, formatEta, formatRelative, formatShare, groupMessages, hasModifier, historyUrlAdapter, iconForMime, importanceLevel, importanceTokens, installFlytedeskFavicon, isImage, isSystemMessage, isUsStateCode, isWithinLayerTree, jobBucket, languageLabel, loadPrefs, markdownToText, meterFormats, modifierLabel, parseDelimited, pastedTextName, pluralizeUnit, preferenceScore, preferenceSegments, rangeFilter, readQueryFromUrl, resolveTheme, revokeAttachment, savePrefs, toAttachment, tokenize, useAppearancePrefs, useAppearanceStore, useChatEngine, useCopyToClipboard, useCornerStackSlot, useDocumentTitle, useFeatureStatus, useLayerZIndex, usePopoverPosition, useResponsiveRail, useRuntimeMode, useServerTable, useSessionContext, useStackedLayer, useStagedFiles, useToast, useTooltip, validateFilterValue, visibleMessages, watchAppearance, writeQueryToUrl };
5405
+ export { AccountMenu, type AccountMenuLink, type AccountMenuProps, AgentChatPanel, type AgentChatPanelProps, AnchoredPopover, type AnchoredPopoverProps, AnimNum, type AnimNumProps, ApiSpecBrowser, type ApiSpecBrowserProps, type AppEntry, AppShell, type AppShellProps, AppSwitcher, type AppSwitcherProps, AppearanceMenu, type AppearanceMenuProps, type AppearancePrefs, AppearanceProvider, type AppearanceProviderProps, type AppearanceStore, type AppearanceStoreOptions, type Attachment, Avatar, type AvatarProps, AvatarStack, type AvatarStackProps, Badge, type BadgeProps, Banner, type BannerProps, type BannerTone, BarList, type BarListProps, type BarListRow, BudgetReallocator, type BudgetReallocatorProps, Button, type ButtonProps, CHANNELS, CHANNEL_WEIGHTS, CHAT_UNAVAILABLE, COPIED_FEEDBACK_MS, CORNER_STACK_INSET_PROPERTY, Calendar, type CalendarProps, Card, CardGrid, type CardGridProps, type CardProps, CardRow, type CardRowProps, ChannelContribution, type ChannelContributionChannel, type ChannelContributionProps, ChannelMeta, type ChannelMetaRecord, ChannelTag, type ChannelTagProps, ChannelWeightOf, type ChatAdapter, ChatComposer, type ChatComposerProps, type ChatEngine, type ChatEngineOptions, ChatKit, type ChatMessage, type ChatRenderContext, ChatSessionBar, type ChatSessionBarProps, ChatTranscript, type ChatTranscriptProps, ChatTurn, type ChatTurnProps, Checkbox, type CheckboxProps, type Citation, Citations, type CitationsProps, Clamp, type ClampProps, ClockFace, type ClockFaceProps, CodeBlock, type CodeBlockProps, CodeEditor, type CodeEditorDiagnostic, type CodeEditorProps, Collapsible, type CollapsibleProps, ComingSoon, type ComingSoonProps, type ContextUsage, CornerStackPortal, type CornerStackSlot, type CreateVersionStoreOptions, CsiBadge, type CsiBadgeProps, CsiHero, type CsiHeroProps, CsiMeter, type CsiMeterProps, DEFAULT_PREFS, DEFAULT_STORAGE_KEY, DEFAULT_TOAST_DURATION_MS, DataTable, type DataTableColumn, type DataTablePhoneRole, type DataTableProps, DatePicker, type DatePickerProps, type DemoSessionControls, DemoSessionProvider, type DeviceSession, DiffBlock, type DiffBlockProps, DonutChart, type DonutChartProps, type DonutSegment, Drawer, type DrawerProps, Dropzone, DropzoneKit, type DropzoneProps, ENTITY_ROW_METRIC_WIDTH, type EditorTrigger, EmptyState, type EmptyStateProps, type EndpointSpec, EntityRow, type EntityRowAction, type EntityRowContent, type EntityRowMetric, EntityRowMetrics, type EntityRowMetricsProps, type EntityRowProps, FILE_VIEWER_CSV_ROW_LIMIT, FILE_VIEWER_TEXT_LIMIT, type Fact, FactList, type FactListProps, FeatureGate, type FeatureGateProps, type FeatureStatus, FileBrowser, type FileBrowserFile, type FileBrowserFolder, type FileBrowserPermissions, type FileBrowserProps, FileChip, type FileChipProps, FileGrid, type FileGridProps, FileKit, FilePickButton, type FilePickButtonProps, type FileRejection, FileStrip, type FileStripProps, FileTile, type FileTileProps, type FileUploadHandler, FileViewer, type FileViewerProps, FilterBar, type FilterBarProps, type FilterDateValue, type FilterField, type FilterFieldDate, type FilterFieldFixed, type FilterFieldMultiSelect, type FilterFieldOption, type FilterFieldRange, type FilterFieldSelect, type FilterFieldText, type FilterMultiSelectValue, type FilterOperator, type FilterRangeValue, type FilterResolveMatch, type FilterResolveResult, type FilterValidation, type FilterValue, Flag$1 as Flag, type FlagExplanation, type FlagProps, FlytedeskBrand, type FlytedeskBrandProps, FlytedeskMark, type FlytedeskMarkProps, FormatEta, FunnelChart, type FunnelChartProps, type FunnelStep, Gate, GatePending, type GatePendingProps, type GateProps, IMPORTANCE_LEVELS, IconButton, type IconButtonProps, type ImportanceLevel, type ImportanceLevelId, ImportanceTag, type ImportanceTagProps, type ImportanceTokens, Input, type InputProps, type Job, type JobAction, type JobCardStatus, type JobStatus, JobTray, type JobTrayProps, Json, KeyHint, type KeyHintProps, type KeysetEnvelope, type KeysetServerTable, LAYER_STEP, type ListEnvelope, LoadingRegion, type LoadingRegionProps, Markdown, MarkdownEditor, type MarkdownEditorHandle, type MarkdownEditorProps, MarkdownInline, type MarkdownProps, type MentionSource, Menu, MenuButton, type MenuButtonProps, type MenuItem, type MenuProps, MessageBody, type MessageBodyProps, type MessageGroup, Meter, type MeterProps, type MeterSegment, type MeterSegmentInput, MixGap, type MixGapProps, type MixGapRow, MockJobKit, type MockJobStatus, Modal, type ModalProps, ModeSwitch, type ModeSwitchProps, type Model, ModelControls, type ModelControlsProps, NumberInput, type NumberInputProps, OVERLAY_CEILING, POPOVER_BODY_MIN, type Packet, PacketCard, type PacketCardProps, type PacketSchema, type Pager, Pagination, type PaginationProps, PermissionDenied, type PermissionDeniedProps, type PermissionGroup, PermissionHint, type PermissionItem, type Phase, type PhaseStatus, PhasedProgress, type PhasedProgressProps, type Placement, type PollOptions, Popover, type PopoverProps, type PreferenceCriterion, PreferenceMeter, type PreferenceMeterProps, type ProfileFieldDef, type ProfileFieldType, type ProfileNotificationDef, ProfilePage, type ProfilePageProps, ProgressBar, type ProgressBarProps, QueryKit, type QueryPaging, type QueryUrlAdapter, type QueryUrlOptions, type QueuedTurn, QuotaRow, type QuotaRowProps, ROOT_STEP, Radio, type RadioProps, RangeSlider, type RangeSliderProps, RelativeTime, type RelativeTimeProps, type RoadmapItem, type RoadmapResult, RoadmapTimeline, type RoadmapTimelineProps, type Role, RunActions, type RunActionsProps, type RunConfig, RuntimeKit, type RuntimeSummary, SaturationDistribution, type SaturationDistributionCampus, type SaturationDistributionProps, ScoreMeter, type ScoreMeterProps, ScreenHead, type ScreenHeadProps, SearchField, type SearchFieldProps, SegmentedControl, type SegmentedControlProps, SegmentedMeter, type SegmentedMeterProps, Select, type SelectOption, type SelectProps, type SendMessageResult, type ServerTable, type ServerTableBase, type Session, type SessionContextValue, type Flag as SessionFlag, SessionKit, SessionProvider, type SessionProviderProps, type SessionRole, SessionScreen, type SessionScreenKind, type SessionScreenProps, type SessionStats, type SessionUser, SidebarNav, type SidebarNavItem, type SidebarNavProps, Skeleton, type SkeletonProps, SkeletonText, type SkeletonTextProps, type SlashCommand, Slider, type SliderProps, type SortDirection, type SortEntry, SortMenu, type SortMenuField, type SortMenuProps, type SpecModule, Spinner, type SpinnerProps, type StackedLayer, type StackedLayerOptions, StackedLayerProvider, StatGrid, type StatGridProps, StatTile, type StatTileProps, type Step, StepList, type StepListProps, type StreamHandlers, type Suggestion, SurroundSound, type SurroundSoundProps, Switch, type SwitchProps, type TabItem, type TableQuery, Tabs, type TabsProps, Tag, type TagProps, TestModeBar, type TestModeBarProps, type TextScale, Textarea, type TextareaProps, type ThemeMode, ThinkingBlock, type ThinkingBlockProps, type ThreadSummary, TimePicker, type TimePickerProps, Toast, type ToastApi, type ToastOptions, type ToastProps, ToastProvider, Tooltip, type TooltipApi, type TooltipBinding, type TooltipPlacement, type TooltipProps, Topbar, type TopbarProps, TranscriptKit, TransferList, type TransferListProps, type TransferListSide, type TransferListSideProps, TrendChart, type TrendChartProps, type TrendSeries, USChoropleth, type USChoroplethProps, type StateFigure as USChoroplethState, type ChoroplethValue as USChoroplethValue, US_STATE_CODES, type UsageLimit, UseFeatureStatus, type UseKeysetTableOptions, type UseResponsiveRailOptions, type UseResponsiveRailResult, UseRuntimeMode, type UseServerTableOptions, type UseTooltipOptions, type User, VIRTUAL_LIST_BUFFER_ROWS, VIRTUAL_LIST_ROW_GAP, type VersionRecord, type VersionStore, VirtualList, type VirtualListProps, type VirtualLoadedBand, type VirtualWindow, type VoiceHandler, __resetLayerStackForTests, acceptMatches, anyOfFilter, applyAppearance, applyPrefs, channelWeightOf, computeNeedMore, computeVirtualWindow, copyToClipboard, createLocalStorageAppearanceStore, createVersionStore, eqFilter, extensionOf, extractClipboardFiles, filterFiles, formatAbsolute, formatBytes, formatClock, formatDocumentTitle, formatDuration, formatEta, formatRelative, formatShare, groupMessages, hasModifier, historyUrlAdapter, iconForMime, importanceLevel, importanceTokens, installFlytedeskFavicon, isImage, isSystemMessage, isUsStateCode, isWithinLayerTree, jobBucket, languageLabel, loadPrefs, markdownToText, meterFormats, modifierLabel, parseDelimited, pastedTextName, pluralizeUnit, preferenceScore, preferenceSegments, rangeFilter, readQueryFromUrl, resolveTheme, revokeAttachment, savePrefs, toAttachment, tokenize, useAppearancePrefs, useAppearanceStore, useChatEngine, useCopyToClipboard, useCornerStackSlot, useDocumentTitle, useFeatureStatus, useLayerZIndex, usePopoverPosition, useResponsiveRail, useRuntimeMode, useServerTable, useSessionContext, useStackedLayer, useStagedFiles, useToast, useTooltip, validateFilterValue, visibleMessages, watchAppearance, writeQueryToUrl };
package/dist/index.d.ts CHANGED
@@ -1290,6 +1290,16 @@ interface FilterFieldSelect extends FilterFieldBase {
1290
1290
  type: "select";
1291
1291
  options: FilterFieldOption[];
1292
1292
  }
1293
+ /** A filter whose value is set from outside FilterBar, by a link or the host's own state (MP-312). Its
1294
+ * chip paints `valueLabel` and carries an x that removes it; the chip opens no picker, and the field
1295
+ * is never offered in the Filter menu, so a person can neither add nor edit it. The value in
1296
+ * `filters` is whatever the host set (any non-empty string); the label is the host's to provide, and
1297
+ * so are loading and error states (pass a placeholder label until the real one is known). */
1298
+ interface FilterFieldFixed extends FilterFieldBase {
1299
+ type: "fixed";
1300
+ /** What the chip paints for the value, e.g. a sheet's name. */
1301
+ valueLabel: string;
1302
+ }
1293
1303
  /** Include/exclude, shared by every field whose value is a set of options. */
1294
1304
  type FilterOperator = "in" | "notIn";
1295
1305
  interface FilterMultiSelectValue {
@@ -1396,11 +1406,11 @@ interface FilterFieldDate extends FilterFieldBase {
1396
1406
  * picker. text/select keep their original bare-string value shape unchanged, so an
1397
1407
  * existing consumer needs no migration; every other variant's value is a small typed
1398
1408
  * object of its own (see FilterValue). */
1399
- type FilterField = FilterFieldText | FilterFieldSelect | FilterFieldMultiSelect | FilterFieldRange | FilterFieldDate;
1409
+ type FilterField = FilterFieldText | FilterFieldSelect | FilterFieldFixed | FilterFieldMultiSelect | FilterFieldRange | FilterFieldDate;
1400
1410
  /** The value shape a given declared field reads/writes, so a consumer can type its own
1401
1411
  * `filters` record precisely instead of `Record<string, unknown>` — e.g.
1402
1412
  * `Record<"schools", FilterValue<typeof schoolsField>>`. */
1403
- type FilterValue<F extends FilterField> = F extends FilterFieldText ? string : F extends FilterFieldSelect ? string : F extends FilterFieldMultiSelect ? FilterMultiSelectValue : F extends FilterFieldRange ? FilterRangeValue : F extends FilterFieldDate ? FilterDateValue : never;
1413
+ type FilterValue<F extends FilterField> = F extends FilterFieldText ? string : F extends FilterFieldSelect | FilterFieldFixed ? string : F extends FilterFieldMultiSelect ? FilterMultiSelectValue : F extends FilterFieldRange ? FilterRangeValue : F extends FilterFieldDate ? FilterDateValue : never;
1404
1414
  interface FilterBarProps extends Omit<React.HTMLAttributes<HTMLSpanElement>, "onChange"> {
1405
1415
  /** Every filter a consumer can add. Order here is the order in the "add filter" list. */
1406
1416
  fields: FilterField[];
@@ -1462,6 +1472,7 @@ type FilterValidation = {
1462
1472
  * all call it on any candidate value:
1463
1473
  * - text: a string.
1464
1474
  * - select: one of the field's own option values.
1475
+ * - fixed: nothing; its value is the host's, so no edit is valid.
1465
1476
  * - multiSelect: `{ operator, values }` with at least one `{ value, label }` option, no
1466
1477
  * more than the field's `maxValues`, and an operator the field allows.
1467
1478
  * - date, withinDays: a whole number of days from 1 to the field's maxDays, which is
@@ -1521,8 +1532,9 @@ declare function StatGrid({ columns, className, children, ...rest }: StatGridPro
1521
1532
 
1522
1533
  /**
1523
1534
  * A flat figure tile — no shadow, no background color, never more than four in a row.
1535
+ * Given `onPress` it becomes a button that can filter a list (MP-311).
1524
1536
  */
1525
- interface StatTileProps extends React.HTMLAttributes<HTMLDivElement> {
1537
+ interface StatTileBaseProps {
1526
1538
  label: string;
1527
1539
  value?: React.ReactNode;
1528
1540
  sub?: React.ReactNode;
@@ -1541,7 +1553,24 @@ interface StatTileProps extends React.HTMLAttributes<HTMLDivElement> {
1541
1553
  compact?: boolean;
1542
1554
  className?: string;
1543
1555
  }
1544
- declare function StatTile({ label, value, sub, delta, invert, loading, compact, className, ...rest }: StatTileProps): React.JSX.Element;
1556
+ /** Display mode: a `div`, exactly as before. `pressed` and `disabled` mean nothing without `onPress`. */
1557
+ interface StatTileDisplayProps extends StatTileBaseProps, React.HTMLAttributes<HTMLDivElement> {
1558
+ onPress?: undefined;
1559
+ pressed?: never;
1560
+ disabled?: never;
1561
+ }
1562
+ /** Press mode: the tile is a real `<button>` with an `aria-pressed` state, so a dashboard's tiles
1563
+ * can filter the list below them. Enter and Space press it (native button behaviour); a pressed
1564
+ * tile wears the brand border and fill. */
1565
+ interface StatTilePressProps extends StatTileBaseProps, Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, "onClick" | "type" | "disabled" | "value"> {
1566
+ onPress: () => void;
1567
+ /** Whether the list is currently filtered by this tile. Give it (true or false) only for a tile that toggles a filter: it sets `aria-pressed`. Omit it for a tile that acts without a state (it jumps somewhere), which is then a plain button. */
1568
+ pressed?: boolean;
1569
+ /** Shown but cannot be pressed (nothing to go to). A `loading` tile is never pressable either. */
1570
+ disabled?: boolean;
1571
+ }
1572
+ type StatTileProps = StatTileDisplayProps | StatTilePressProps;
1573
+ declare function StatTile(props: StatTileProps): React.JSX.Element;
1545
1574
 
1546
1575
  declare function languageLabel(lang?: string): string;
1547
1576
  /** Tokenise source into [{t, c}] where c is a token class or null for plain text. */
@@ -5373,4 +5402,4 @@ declare function CornerStackPortal({ slot, children }: {
5373
5402
  children?: React.ReactNode;
5374
5403
  }): React.ReactPortal | null;
5375
5404
 
5376
- export { AccountMenu, type AccountMenuLink, type AccountMenuProps, AgentChatPanel, type AgentChatPanelProps, AnchoredPopover, type AnchoredPopoverProps, AnimNum, type AnimNumProps, ApiSpecBrowser, type ApiSpecBrowserProps, type AppEntry, AppShell, type AppShellProps, AppSwitcher, type AppSwitcherProps, AppearanceMenu, type AppearanceMenuProps, type AppearancePrefs, AppearanceProvider, type AppearanceProviderProps, type AppearanceStore, type AppearanceStoreOptions, type Attachment, Avatar, type AvatarProps, AvatarStack, type AvatarStackProps, Badge, type BadgeProps, Banner, type BannerProps, type BannerTone, BarList, type BarListProps, type BarListRow, BudgetReallocator, type BudgetReallocatorProps, Button, type ButtonProps, CHANNELS, CHANNEL_WEIGHTS, CHAT_UNAVAILABLE, COPIED_FEEDBACK_MS, CORNER_STACK_INSET_PROPERTY, Calendar, type CalendarProps, Card, CardGrid, type CardGridProps, type CardProps, CardRow, type CardRowProps, ChannelContribution, type ChannelContributionChannel, type ChannelContributionProps, ChannelMeta, type ChannelMetaRecord, ChannelTag, type ChannelTagProps, ChannelWeightOf, type ChatAdapter, ChatComposer, type ChatComposerProps, type ChatEngine, type ChatEngineOptions, ChatKit, type ChatMessage, type ChatRenderContext, ChatSessionBar, type ChatSessionBarProps, ChatTranscript, type ChatTranscriptProps, ChatTurn, type ChatTurnProps, Checkbox, type CheckboxProps, type Citation, Citations, type CitationsProps, Clamp, type ClampProps, ClockFace, type ClockFaceProps, CodeBlock, type CodeBlockProps, CodeEditor, type CodeEditorDiagnostic, type CodeEditorProps, Collapsible, type CollapsibleProps, ComingSoon, type ComingSoonProps, type ContextUsage, CornerStackPortal, type CornerStackSlot, type CreateVersionStoreOptions, CsiBadge, type CsiBadgeProps, CsiHero, type CsiHeroProps, CsiMeter, type CsiMeterProps, DEFAULT_PREFS, DEFAULT_STORAGE_KEY, DEFAULT_TOAST_DURATION_MS, DataTable, type DataTableColumn, type DataTablePhoneRole, type DataTableProps, DatePicker, type DatePickerProps, type DemoSessionControls, DemoSessionProvider, type DeviceSession, DiffBlock, type DiffBlockProps, DonutChart, type DonutChartProps, type DonutSegment, Drawer, type DrawerProps, Dropzone, DropzoneKit, type DropzoneProps, ENTITY_ROW_METRIC_WIDTH, type EditorTrigger, EmptyState, type EmptyStateProps, type EndpointSpec, EntityRow, type EntityRowAction, type EntityRowContent, type EntityRowMetric, EntityRowMetrics, type EntityRowMetricsProps, type EntityRowProps, FILE_VIEWER_CSV_ROW_LIMIT, FILE_VIEWER_TEXT_LIMIT, type Fact, FactList, type FactListProps, FeatureGate, type FeatureGateProps, type FeatureStatus, FileBrowser, type FileBrowserFile, type FileBrowserFolder, type FileBrowserPermissions, type FileBrowserProps, FileChip, type FileChipProps, FileGrid, type FileGridProps, FileKit, FilePickButton, type FilePickButtonProps, type FileRejection, FileStrip, type FileStripProps, FileTile, type FileTileProps, type FileUploadHandler, FileViewer, type FileViewerProps, FilterBar, type FilterBarProps, type FilterDateValue, type FilterField, type FilterFieldDate, type FilterFieldMultiSelect, type FilterFieldOption, type FilterFieldRange, type FilterFieldSelect, type FilterFieldText, type FilterMultiSelectValue, type FilterOperator, type FilterRangeValue, type FilterResolveMatch, type FilterResolveResult, type FilterValidation, type FilterValue, Flag$1 as Flag, type FlagExplanation, type FlagProps, FlytedeskBrand, type FlytedeskBrandProps, FlytedeskMark, type FlytedeskMarkProps, FormatEta, FunnelChart, type FunnelChartProps, type FunnelStep, Gate, GatePending, type GatePendingProps, type GateProps, IMPORTANCE_LEVELS, IconButton, type IconButtonProps, type ImportanceLevel, type ImportanceLevelId, ImportanceTag, type ImportanceTagProps, type ImportanceTokens, Input, type InputProps, type Job, type JobAction, type JobCardStatus, type JobStatus, JobTray, type JobTrayProps, Json, KeyHint, type KeyHintProps, type KeysetEnvelope, type KeysetServerTable, LAYER_STEP, type ListEnvelope, LoadingRegion, type LoadingRegionProps, Markdown, MarkdownEditor, type MarkdownEditorHandle, type MarkdownEditorProps, MarkdownInline, type MarkdownProps, type MentionSource, Menu, MenuButton, type MenuButtonProps, type MenuItem, type MenuProps, MessageBody, type MessageBodyProps, type MessageGroup, Meter, type MeterProps, type MeterSegment, type MeterSegmentInput, MixGap, type MixGapProps, type MixGapRow, MockJobKit, type MockJobStatus, Modal, type ModalProps, ModeSwitch, type ModeSwitchProps, type Model, ModelControls, type ModelControlsProps, NumberInput, type NumberInputProps, OVERLAY_CEILING, POPOVER_BODY_MIN, type Packet, PacketCard, type PacketCardProps, type PacketSchema, type Pager, Pagination, type PaginationProps, PermissionDenied, type PermissionDeniedProps, type PermissionGroup, PermissionHint, type PermissionItem, type Phase, type PhaseStatus, PhasedProgress, type PhasedProgressProps, type Placement, type PollOptions, Popover, type PopoverProps, type PreferenceCriterion, PreferenceMeter, type PreferenceMeterProps, type ProfileFieldDef, type ProfileFieldType, type ProfileNotificationDef, ProfilePage, type ProfilePageProps, ProgressBar, type ProgressBarProps, QueryKit, type QueryPaging, type QueryUrlAdapter, type QueryUrlOptions, type QueuedTurn, QuotaRow, type QuotaRowProps, ROOT_STEP, Radio, type RadioProps, RangeSlider, type RangeSliderProps, RelativeTime, type RelativeTimeProps, type RoadmapItem, type RoadmapResult, RoadmapTimeline, type RoadmapTimelineProps, type Role, RunActions, type RunActionsProps, type RunConfig, RuntimeKit, type RuntimeSummary, SaturationDistribution, type SaturationDistributionCampus, type SaturationDistributionProps, ScoreMeter, type ScoreMeterProps, ScreenHead, type ScreenHeadProps, SearchField, type SearchFieldProps, SegmentedControl, type SegmentedControlProps, SegmentedMeter, type SegmentedMeterProps, Select, type SelectOption, type SelectProps, type SendMessageResult, type ServerTable, type ServerTableBase, type Session, type SessionContextValue, type Flag as SessionFlag, SessionKit, SessionProvider, type SessionProviderProps, type SessionRole, SessionScreen, type SessionScreenKind, type SessionScreenProps, type SessionStats, type SessionUser, SidebarNav, type SidebarNavItem, type SidebarNavProps, Skeleton, type SkeletonProps, SkeletonText, type SkeletonTextProps, type SlashCommand, Slider, type SliderProps, type SortDirection, type SortEntry, SortMenu, type SortMenuField, type SortMenuProps, type SpecModule, Spinner, type SpinnerProps, type StackedLayer, type StackedLayerOptions, StackedLayerProvider, StatGrid, type StatGridProps, StatTile, type StatTileProps, type Step, StepList, type StepListProps, type StreamHandlers, type Suggestion, SurroundSound, type SurroundSoundProps, Switch, type SwitchProps, type TabItem, type TableQuery, Tabs, type TabsProps, Tag, type TagProps, TestModeBar, type TestModeBarProps, type TextScale, Textarea, type TextareaProps, type ThemeMode, ThinkingBlock, type ThinkingBlockProps, type ThreadSummary, TimePicker, type TimePickerProps, Toast, type ToastApi, type ToastOptions, type ToastProps, ToastProvider, Tooltip, type TooltipApi, type TooltipBinding, type TooltipPlacement, type TooltipProps, Topbar, type TopbarProps, TranscriptKit, TransferList, type TransferListProps, type TransferListSide, type TransferListSideProps, TrendChart, type TrendChartProps, type TrendSeries, USChoropleth, type USChoroplethProps, type StateFigure as USChoroplethState, type ChoroplethValue as USChoroplethValue, US_STATE_CODES, type UsageLimit, UseFeatureStatus, type UseKeysetTableOptions, type UseResponsiveRailOptions, type UseResponsiveRailResult, UseRuntimeMode, type UseServerTableOptions, type UseTooltipOptions, type User, VIRTUAL_LIST_BUFFER_ROWS, VIRTUAL_LIST_ROW_GAP, type VersionRecord, type VersionStore, VirtualList, type VirtualListProps, type VirtualLoadedBand, type VirtualWindow, type VoiceHandler, __resetLayerStackForTests, acceptMatches, anyOfFilter, applyAppearance, applyPrefs, channelWeightOf, computeNeedMore, computeVirtualWindow, copyToClipboard, createLocalStorageAppearanceStore, createVersionStore, eqFilter, extensionOf, extractClipboardFiles, filterFiles, formatAbsolute, formatBytes, formatClock, formatDocumentTitle, formatDuration, formatEta, formatRelative, formatShare, groupMessages, hasModifier, historyUrlAdapter, iconForMime, importanceLevel, importanceTokens, installFlytedeskFavicon, isImage, isSystemMessage, isUsStateCode, isWithinLayerTree, jobBucket, languageLabel, loadPrefs, markdownToText, meterFormats, modifierLabel, parseDelimited, pastedTextName, pluralizeUnit, preferenceScore, preferenceSegments, rangeFilter, readQueryFromUrl, resolveTheme, revokeAttachment, savePrefs, toAttachment, tokenize, useAppearancePrefs, useAppearanceStore, useChatEngine, useCopyToClipboard, useCornerStackSlot, useDocumentTitle, useFeatureStatus, useLayerZIndex, usePopoverPosition, useResponsiveRail, useRuntimeMode, useServerTable, useSessionContext, useStackedLayer, useStagedFiles, useToast, useTooltip, validateFilterValue, visibleMessages, watchAppearance, writeQueryToUrl };
5405
+ export { AccountMenu, type AccountMenuLink, type AccountMenuProps, AgentChatPanel, type AgentChatPanelProps, AnchoredPopover, type AnchoredPopoverProps, AnimNum, type AnimNumProps, ApiSpecBrowser, type ApiSpecBrowserProps, type AppEntry, AppShell, type AppShellProps, AppSwitcher, type AppSwitcherProps, AppearanceMenu, type AppearanceMenuProps, type AppearancePrefs, AppearanceProvider, type AppearanceProviderProps, type AppearanceStore, type AppearanceStoreOptions, type Attachment, Avatar, type AvatarProps, AvatarStack, type AvatarStackProps, Badge, type BadgeProps, Banner, type BannerProps, type BannerTone, BarList, type BarListProps, type BarListRow, BudgetReallocator, type BudgetReallocatorProps, Button, type ButtonProps, CHANNELS, CHANNEL_WEIGHTS, CHAT_UNAVAILABLE, COPIED_FEEDBACK_MS, CORNER_STACK_INSET_PROPERTY, Calendar, type CalendarProps, Card, CardGrid, type CardGridProps, type CardProps, CardRow, type CardRowProps, ChannelContribution, type ChannelContributionChannel, type ChannelContributionProps, ChannelMeta, type ChannelMetaRecord, ChannelTag, type ChannelTagProps, ChannelWeightOf, type ChatAdapter, ChatComposer, type ChatComposerProps, type ChatEngine, type ChatEngineOptions, ChatKit, type ChatMessage, type ChatRenderContext, ChatSessionBar, type ChatSessionBarProps, ChatTranscript, type ChatTranscriptProps, ChatTurn, type ChatTurnProps, Checkbox, type CheckboxProps, type Citation, Citations, type CitationsProps, Clamp, type ClampProps, ClockFace, type ClockFaceProps, CodeBlock, type CodeBlockProps, CodeEditor, type CodeEditorDiagnostic, type CodeEditorProps, Collapsible, type CollapsibleProps, ComingSoon, type ComingSoonProps, type ContextUsage, CornerStackPortal, type CornerStackSlot, type CreateVersionStoreOptions, CsiBadge, type CsiBadgeProps, CsiHero, type CsiHeroProps, CsiMeter, type CsiMeterProps, DEFAULT_PREFS, DEFAULT_STORAGE_KEY, DEFAULT_TOAST_DURATION_MS, DataTable, type DataTableColumn, type DataTablePhoneRole, type DataTableProps, DatePicker, type DatePickerProps, type DemoSessionControls, DemoSessionProvider, type DeviceSession, DiffBlock, type DiffBlockProps, DonutChart, type DonutChartProps, type DonutSegment, Drawer, type DrawerProps, Dropzone, DropzoneKit, type DropzoneProps, ENTITY_ROW_METRIC_WIDTH, type EditorTrigger, EmptyState, type EmptyStateProps, type EndpointSpec, EntityRow, type EntityRowAction, type EntityRowContent, type EntityRowMetric, EntityRowMetrics, type EntityRowMetricsProps, type EntityRowProps, FILE_VIEWER_CSV_ROW_LIMIT, FILE_VIEWER_TEXT_LIMIT, type Fact, FactList, type FactListProps, FeatureGate, type FeatureGateProps, type FeatureStatus, FileBrowser, type FileBrowserFile, type FileBrowserFolder, type FileBrowserPermissions, type FileBrowserProps, FileChip, type FileChipProps, FileGrid, type FileGridProps, FileKit, FilePickButton, type FilePickButtonProps, type FileRejection, FileStrip, type FileStripProps, FileTile, type FileTileProps, type FileUploadHandler, FileViewer, type FileViewerProps, FilterBar, type FilterBarProps, type FilterDateValue, type FilterField, type FilterFieldDate, type FilterFieldFixed, type FilterFieldMultiSelect, type FilterFieldOption, type FilterFieldRange, type FilterFieldSelect, type FilterFieldText, type FilterMultiSelectValue, type FilterOperator, type FilterRangeValue, type FilterResolveMatch, type FilterResolveResult, type FilterValidation, type FilterValue, Flag$1 as Flag, type FlagExplanation, type FlagProps, FlytedeskBrand, type FlytedeskBrandProps, FlytedeskMark, type FlytedeskMarkProps, FormatEta, FunnelChart, type FunnelChartProps, type FunnelStep, Gate, GatePending, type GatePendingProps, type GateProps, IMPORTANCE_LEVELS, IconButton, type IconButtonProps, type ImportanceLevel, type ImportanceLevelId, ImportanceTag, type ImportanceTagProps, type ImportanceTokens, Input, type InputProps, type Job, type JobAction, type JobCardStatus, type JobStatus, JobTray, type JobTrayProps, Json, KeyHint, type KeyHintProps, type KeysetEnvelope, type KeysetServerTable, LAYER_STEP, type ListEnvelope, LoadingRegion, type LoadingRegionProps, Markdown, MarkdownEditor, type MarkdownEditorHandle, type MarkdownEditorProps, MarkdownInline, type MarkdownProps, type MentionSource, Menu, MenuButton, type MenuButtonProps, type MenuItem, type MenuProps, MessageBody, type MessageBodyProps, type MessageGroup, Meter, type MeterProps, type MeterSegment, type MeterSegmentInput, MixGap, type MixGapProps, type MixGapRow, MockJobKit, type MockJobStatus, Modal, type ModalProps, ModeSwitch, type ModeSwitchProps, type Model, ModelControls, type ModelControlsProps, NumberInput, type NumberInputProps, OVERLAY_CEILING, POPOVER_BODY_MIN, type Packet, PacketCard, type PacketCardProps, type PacketSchema, type Pager, Pagination, type PaginationProps, PermissionDenied, type PermissionDeniedProps, type PermissionGroup, PermissionHint, type PermissionItem, type Phase, type PhaseStatus, PhasedProgress, type PhasedProgressProps, type Placement, type PollOptions, Popover, type PopoverProps, type PreferenceCriterion, PreferenceMeter, type PreferenceMeterProps, type ProfileFieldDef, type ProfileFieldType, type ProfileNotificationDef, ProfilePage, type ProfilePageProps, ProgressBar, type ProgressBarProps, QueryKit, type QueryPaging, type QueryUrlAdapter, type QueryUrlOptions, type QueuedTurn, QuotaRow, type QuotaRowProps, ROOT_STEP, Radio, type RadioProps, RangeSlider, type RangeSliderProps, RelativeTime, type RelativeTimeProps, type RoadmapItem, type RoadmapResult, RoadmapTimeline, type RoadmapTimelineProps, type Role, RunActions, type RunActionsProps, type RunConfig, RuntimeKit, type RuntimeSummary, SaturationDistribution, type SaturationDistributionCampus, type SaturationDistributionProps, ScoreMeter, type ScoreMeterProps, ScreenHead, type ScreenHeadProps, SearchField, type SearchFieldProps, SegmentedControl, type SegmentedControlProps, SegmentedMeter, type SegmentedMeterProps, Select, type SelectOption, type SelectProps, type SendMessageResult, type ServerTable, type ServerTableBase, type Session, type SessionContextValue, type Flag as SessionFlag, SessionKit, SessionProvider, type SessionProviderProps, type SessionRole, SessionScreen, type SessionScreenKind, type SessionScreenProps, type SessionStats, type SessionUser, SidebarNav, type SidebarNavItem, type SidebarNavProps, Skeleton, type SkeletonProps, SkeletonText, type SkeletonTextProps, type SlashCommand, Slider, type SliderProps, type SortDirection, type SortEntry, SortMenu, type SortMenuField, type SortMenuProps, type SpecModule, Spinner, type SpinnerProps, type StackedLayer, type StackedLayerOptions, StackedLayerProvider, StatGrid, type StatGridProps, StatTile, type StatTileProps, type Step, StepList, type StepListProps, type StreamHandlers, type Suggestion, SurroundSound, type SurroundSoundProps, Switch, type SwitchProps, type TabItem, type TableQuery, Tabs, type TabsProps, Tag, type TagProps, TestModeBar, type TestModeBarProps, type TextScale, Textarea, type TextareaProps, type ThemeMode, ThinkingBlock, type ThinkingBlockProps, type ThreadSummary, TimePicker, type TimePickerProps, Toast, type ToastApi, type ToastOptions, type ToastProps, ToastProvider, Tooltip, type TooltipApi, type TooltipBinding, type TooltipPlacement, type TooltipProps, Topbar, type TopbarProps, TranscriptKit, TransferList, type TransferListProps, type TransferListSide, type TransferListSideProps, TrendChart, type TrendChartProps, type TrendSeries, USChoropleth, type USChoroplethProps, type StateFigure as USChoroplethState, type ChoroplethValue as USChoroplethValue, US_STATE_CODES, type UsageLimit, UseFeatureStatus, type UseKeysetTableOptions, type UseResponsiveRailOptions, type UseResponsiveRailResult, UseRuntimeMode, type UseServerTableOptions, type UseTooltipOptions, type User, VIRTUAL_LIST_BUFFER_ROWS, VIRTUAL_LIST_ROW_GAP, type VersionRecord, type VersionStore, VirtualList, type VirtualListProps, type VirtualLoadedBand, type VirtualWindow, type VoiceHandler, __resetLayerStackForTests, acceptMatches, anyOfFilter, applyAppearance, applyPrefs, channelWeightOf, computeNeedMore, computeVirtualWindow, copyToClipboard, createLocalStorageAppearanceStore, createVersionStore, eqFilter, extensionOf, extractClipboardFiles, filterFiles, formatAbsolute, formatBytes, formatClock, formatDocumentTitle, formatDuration, formatEta, formatRelative, formatShare, groupMessages, hasModifier, historyUrlAdapter, iconForMime, importanceLevel, importanceTokens, installFlytedeskFavicon, isImage, isSystemMessage, isUsStateCode, isWithinLayerTree, jobBucket, languageLabel, loadPrefs, markdownToText, meterFormats, modifierLabel, parseDelimited, pastedTextName, pluralizeUnit, preferenceScore, preferenceSegments, rangeFilter, readQueryFromUrl, resolveTheme, revokeAttachment, savePrefs, toAttachment, tokenize, useAppearancePrefs, useAppearanceStore, useChatEngine, useCopyToClipboard, useCornerStackSlot, useDocumentTitle, useFeatureStatus, useLayerZIndex, usePopoverPosition, useResponsiveRail, useRuntimeMode, useServerTable, useSessionContext, useStackedLayer, useStagedFiles, useToast, useTooltip, validateFilterValue, visibleMessages, watchAppearance, writeQueryToUrl };
package/dist/index.js CHANGED
@@ -3857,6 +3857,7 @@ function isFieldSet(field, value) {
3857
3857
  switch (field.type) {
3858
3858
  case "text":
3859
3859
  case "select":
3860
+ case "fixed":
3860
3861
  return isSet(value);
3861
3862
  case "multiSelect": {
3862
3863
  const v = value;
@@ -3896,6 +3897,8 @@ function validateFilterValue(field, value) {
3896
3897
  switch (field.type) {
3897
3898
  case "text":
3898
3899
  return typeof value === "string" ? { ok: true } : { ok: false, reason: "Enter text" };
3900
+ case "fixed":
3901
+ return { ok: false, reason: "This filter is set from outside and cannot be edited" };
3899
3902
  case "select":
3900
3903
  return field.options.some((o) => o.value === value) ? { ok: true } : { ok: false, reason: "Pick one of the options" };
3901
3904
  case "multiSelect": {
@@ -3977,6 +3980,8 @@ function chipLabel(field, value) {
3977
3980
  switch (field.type) {
3978
3981
  case "text":
3979
3982
  return String(value ?? "");
3983
+ case "fixed":
3984
+ return field.valueLabel;
3980
3985
  case "select": {
3981
3986
  const chosen = field.options.find((o) => o.value === value);
3982
3987
  return chosen ? chosen.label : String(value ?? "");
@@ -4614,7 +4619,7 @@ function FilterBar({ fields = [], filters, onFilterChange, onFilterRemove, align
4614
4619
  target?.focus();
4615
4620
  }
4616
4621
  }, [panel]);
4617
- const addableFields = fields.filter((f) => !isFieldSet(f, filters[f.key]));
4622
+ const addableFields = fields.filter((f) => f.type !== "fixed" && !isFieldSet(f, filters[f.key]));
4618
4623
  const activeCount = activeFilterCount(fields, filters);
4619
4624
  const canAdd = addableFields.length > 0;
4620
4625
  const showCount = showActiveCount && activeCount > 0;
@@ -4708,6 +4713,14 @@ function FilterBar({ fields = [], filters, onFilterChange, onFilterRemove, align
4708
4713
  }
4709
4714
  const set = isFieldSet(field, value);
4710
4715
  if (!editing && !set) return null;
4716
+ if (field.type === "fixed") {
4717
+ const fixedText = field.label + ": " + field.valueLabel;
4718
+ return /* @__PURE__ */ jsx50("span", { className: "fd-filterbar-chip", children: /* @__PURE__ */ jsxs41("span", { className: "fd-tag fd-filterbar-fixed", role: "group", title: fixedText, "aria-label": fixedText, children: [
4719
+ field.icon ? /* @__PURE__ */ jsx50("i", { className: "ph ph-" + field.icon, "aria-hidden": "true" }) : null,
4720
+ /* @__PURE__ */ jsx50("span", { className: "fd-tag-label", children: /* @__PURE__ */ jsx50(MiddleEllipsis, { text: field.icon ? field.valueLabel : fixedText }) }),
4721
+ /* @__PURE__ */ jsx50("button", { type: "button", className: "fd-tag-remove", "aria-label": "Remove " + fixedText, onClick: () => removeField(field), children: /* @__PURE__ */ jsx50("i", { className: "ph ph-x", "aria-hidden": "true" }) })
4722
+ ] }) }, field.key);
4723
+ }
4711
4724
  const chipRef = editing ? editAnchorRef : void 0;
4712
4725
  const toggleOrClose = () => editing ? closeEditing() : startEditing(field.key);
4713
4726
  const remove = () => {
@@ -4815,18 +4828,19 @@ function StatGrid({ columns, className = "", children, ...rest }) {
4815
4828
  }
4816
4829
 
4817
4830
  // src/components/data/StatTile.tsx
4818
- import { jsx as jsx52, jsxs as jsxs42 } from "react/jsx-runtime";
4831
+ import { Fragment as Fragment8, jsx as jsx52, jsxs as jsxs42 } from "react/jsx-runtime";
4819
4832
  function isZeroDelta(delta) {
4820
4833
  if (!delta) return false;
4821
4834
  const match = delta.match(/[\d.]+/);
4822
4835
  return match !== null && parseFloat(match[0]) === 0;
4823
4836
  }
4824
- function StatTile({ label, value, sub, delta, invert = false, loading = false, compact: compact3 = false, className = "", ...rest }) {
4837
+ function StatTile(props) {
4838
+ const { label, value, sub, delta, invert = false, loading = false, compact: compact3 = false, className = "", ...rest } = props;
4825
4839
  const isDecrease = delta?.startsWith("-") ?? false;
4826
4840
  const isZero = isZeroDelta(delta);
4827
4841
  const isGood = invert ? isDecrease : !isDecrease;
4828
4842
  const deltaToneClass = isZero ? "fd-stat-delta-neutral" : isGood ? "fd-stat-delta-up" : "fd-stat-delta-down";
4829
- return /* @__PURE__ */ jsxs42("div", { className: ["fd-stat", compact3 ? "fd-stat-compact" : "", className].filter(Boolean).join(" "), ...rest, children: [
4843
+ const content = /* @__PURE__ */ jsxs42(Fragment8, { children: [
4830
4844
  loading ? /* @__PURE__ */ jsx52("span", { className: "fd-skel fd-skel-text", style: { display: "block", height: compact3 ? 20 : 28, width: "62%" } }) : /* @__PURE__ */ jsxs42("span", { className: "fd-stat-top", children: [
4831
4845
  /* @__PURE__ */ jsx52("span", { className: "fd-stat-figure", children: value }),
4832
4846
  delta ? /* @__PURE__ */ jsxs42("span", { className: "fd-stat-delta " + deltaToneClass, children: [
@@ -4838,6 +4852,12 @@ function StatTile({ label, value, sub, delta, invert = false, loading = false, c
4838
4852
  !loading && sub ? /* @__PURE__ */ jsx52("span", { className: "fd-stat-sub", children: sub }) : null,
4839
4853
  loading ? /* @__PURE__ */ jsx52("span", { className: "fd-skel fd-skel-text", style: { display: "block", height: 10, width: "40%", marginTop: 8 } }) : /* @__PURE__ */ jsx52("span", { className: "fd-stat-label", style: { display: "block" }, children: label })
4840
4854
  ] });
4855
+ const classes = (...extra) => ["fd-stat", ...extra, compact3 ? "fd-stat-compact" : "", className].filter(Boolean).join(" ");
4856
+ if (rest.onPress) {
4857
+ const { onPress, pressed, disabled = false, ...buttonRest } = rest;
4858
+ return /* @__PURE__ */ jsx52("button", { type: "button", className: classes("fd-stat-pressable"), "aria-pressed": pressed, disabled: disabled || loading, onClick: onPress, ...buttonRest, children: content });
4859
+ }
4860
+ return /* @__PURE__ */ jsx52("div", { className: classes(), ...rest, children: content });
4841
4861
  }
4842
4862
 
4843
4863
  // src/components/data/CodeBlock.tsx
@@ -4897,7 +4917,7 @@ function useCopyToClipboard() {
4897
4917
  }
4898
4918
 
4899
4919
  // src/components/data/CodeBlock.tsx
4900
- import { Fragment as Fragment8, jsx as jsx53, jsxs as jsxs43 } from "react/jsx-runtime";
4920
+ import { Fragment as Fragment9, jsx as jsx53, jsxs as jsxs43 } from "react/jsx-runtime";
4901
4921
  var JS_KW = /^(?:const|let|var|function|return|if|else|for|while|do|new|class|extends|import|from|export|default|await|async|try|catch|finally|throw|typeof|instanceof|of|in|switch|case|break|continue|delete|void|yield|static|get|set|this|super|interface|type|enum|implements|public|private|protected|readonly|abstract|as|satisfies|declare|namespace)$/;
4902
4922
  var RULES = {
4903
4923
  js: [
@@ -5053,7 +5073,7 @@ function tokenize(src, lang) {
5053
5073
  }
5054
5074
  function Highlighted({ code, lang }) {
5055
5075
  const toks = React34.useMemo(() => tokenize(code, lang), [code, lang]);
5056
- return /* @__PURE__ */ jsx53(Fragment8, { children: toks.map((tk, i) => tk.c ? /* @__PURE__ */ jsx53("span", { className: "tok-" + tk.c, children: tk.t }, i) : tk.t) });
5076
+ return /* @__PURE__ */ jsx53(Fragment9, { children: toks.map((tk, i) => tk.c ? /* @__PURE__ */ jsx53("span", { className: "tok-" + tk.c, children: tk.t }, i) : tk.t) });
5057
5077
  }
5058
5078
  function CodeBlock({
5059
5079
  code = "",
@@ -5389,7 +5409,7 @@ function Meter({ segments = [], unallocated = 0, height = 8, label, legend = fal
5389
5409
  }
5390
5410
 
5391
5411
  // src/components/data/Pagination.tsx
5392
- import { Fragment as Fragment10, jsx as jsx56, jsxs as jsxs46 } from "react/jsx-runtime";
5412
+ import { Fragment as Fragment11, jsx as jsx56, jsxs as jsxs46 } from "react/jsx-runtime";
5393
5413
  var unitPluralRules = new Intl.PluralRules("en-US");
5394
5414
  function pluralizeUnit(n, singular, irregularPlural) {
5395
5415
  return unitPluralRules.select(n) === "one" ? singular : irregularPlural ?? `${singular}s`;
@@ -5421,10 +5441,10 @@ function Pagination({
5421
5441
  else if (nums[nums.length - 1] !== "\u2026") nums.push("\u2026");
5422
5442
  }
5423
5443
  return /* @__PURE__ */ jsxs46("div", { className: ["fd-pag", className].filter(Boolean).join(" "), ...rest, children: [
5424
- /* @__PURE__ */ jsx56("span", { className: "fd-pag-count", children: loading ? /* @__PURE__ */ jsx56("span", { className: "fd-skel fd-skel-text", style: { display: "inline-block", height: 12, width: 108 } }) : total === 0 ? /* @__PURE__ */ jsxs46(Fragment10, { children: [
5444
+ /* @__PURE__ */ jsx56("span", { className: "fd-pag-count", children: loading ? /* @__PURE__ */ jsx56("span", { className: "fd-skel fd-skel-text", style: { display: "inline-block", height: 12, width: 108 } }) : total === 0 ? /* @__PURE__ */ jsxs46(Fragment11, { children: [
5425
5445
  "No ",
5426
5446
  unitLabel
5427
- ] }) : /* @__PURE__ */ jsxs46(Fragment10, { children: [
5447
+ ] }) : /* @__PURE__ */ jsxs46(Fragment11, { children: [
5428
5448
  /* @__PURE__ */ jsxs46("strong", { children: [
5429
5449
  from.toLocaleString(),
5430
5450
  "\u2013",
@@ -5619,7 +5639,7 @@ function InlinePanelSurface({ panel, align = "right", ...popover }) {
5619
5639
  }
5620
5640
 
5621
5641
  // src/components/data/SortMenu.tsx
5622
- import { Fragment as Fragment12, jsx as jsx59, jsxs as jsxs49 } from "react/jsx-runtime";
5642
+ import { Fragment as Fragment13, jsx as jsx59, jsxs as jsxs49 } from "react/jsx-runtime";
5623
5643
  var directionWord = (field, dir) => dir === "asc" ? field.numeric ? "lowest first" : "A to Z" : field.numeric ? "highest first" : "Z to A";
5624
5644
  function moved(sort, from, to) {
5625
5645
  const next = [...sort];
@@ -5692,7 +5712,7 @@ function SortMenu({
5692
5712
  ] }, f.key);
5693
5713
  });
5694
5714
  const unused = fields.filter((f) => !active.some((entry) => entry.key === f.key));
5695
- const multipleBody = /* @__PURE__ */ jsxs49(Fragment12, { children: [
5715
+ const multipleBody = /* @__PURE__ */ jsxs49(Fragment13, { children: [
5696
5716
  /* @__PURE__ */ jsx59("span", { className: "fd-overline fd-muted", style: { padding: "4px 8px 6px" }, children: "Sorted by" }),
5697
5717
  active.length === 0 ? /* @__PURE__ */ jsx59("span", { className: "fd-body-sm fd-muted", style: { padding: "4px 8px" }, children: "Unsorted" }) : /* @__PURE__ */ jsx59("ol", { className: "fd-stack", style: { gap: 2, margin: 0, padding: 0, listStyle: "none" }, "aria-label": "Sort order", children: active.map((entry, index) => {
5698
5718
  const f = fieldOf(entry.key);
@@ -5741,7 +5761,7 @@ function SortMenu({
5741
5761
  )
5742
5762
  ] }, entry.key);
5743
5763
  }) }),
5744
- unused.length > 0 ? /* @__PURE__ */ jsxs49(Fragment12, { children: [
5764
+ unused.length > 0 ? /* @__PURE__ */ jsxs49(Fragment13, { children: [
5745
5765
  /* @__PURE__ */ jsx59("span", { className: "fd-overline fd-muted", style: { padding: "10px 8px 6px" }, children: "Add a sort" }),
5746
5766
  unused.map((f) => /* @__PURE__ */ jsxs49("span", { className: "fd-row", style: rowStyle(false), children: [
5747
5767
  /* @__PURE__ */ jsx59("span", { className: "fd-body-sm", style: labelStyle(false), children: f.label }),
@@ -5765,7 +5785,7 @@ function SortMenu({
5765
5785
  ]
5766
5786
  }
5767
5787
  ),
5768
- /* @__PURE__ */ jsx59(InlinePanelSurface, { panel, align, offset: 6, width: multiple ? 340 : 280, label: "Sort by", children: /* @__PURE__ */ jsx59("span", { className: "fd-stack", style: { gap: 2, padding: 8 }, children: multiple ? multipleBody : /* @__PURE__ */ jsxs49(Fragment12, { children: [
5788
+ /* @__PURE__ */ jsx59(InlinePanelSurface, { panel, align, offset: 6, width: multiple ? 340 : 280, label: "Sort by", children: /* @__PURE__ */ jsx59("span", { className: "fd-stack", style: { gap: 2, padding: 8 }, children: multiple ? multipleBody : /* @__PURE__ */ jsxs49(Fragment13, { children: [
5769
5789
  /* @__PURE__ */ jsx59("span", { className: "fd-overline fd-muted", style: { padding: "4px 8px 6px" }, children: "Sort by" }),
5770
5790
  singleBody
5771
5791
  ] }) }) })
@@ -8233,7 +8253,7 @@ function useSessionContext() {
8233
8253
  }
8234
8254
 
8235
8255
  // src/components/platform/AccountMenu.tsx
8236
- import { Fragment as Fragment18, jsx as jsx79, jsxs as jsxs68 } from "react/jsx-runtime";
8256
+ import { Fragment as Fragment19, jsx as jsx79, jsxs as jsxs68 } from "react/jsx-runtime";
8237
8257
  var DEFAULT_LINKS = [];
8238
8258
  var DEFAULT_GROUPS = [];
8239
8259
  function Item({ item, onPick }) {
@@ -8295,7 +8315,7 @@ function AccountMenu({
8295
8315
  }
8296
8316
  };
8297
8317
  const showSwitcher = allowUserSwitch && !!demo;
8298
- return /* @__PURE__ */ jsxs68(Fragment18, { children: [
8318
+ return /* @__PURE__ */ jsxs68(Fragment19, { children: [
8299
8319
  /* @__PURE__ */ jsxs68(
8300
8320
  "button",
8301
8321
  {
@@ -9068,7 +9088,7 @@ function ProfilePage({
9068
9088
 
9069
9089
  // src/components/platform/SessionScreen.tsx
9070
9090
  import * as React61 from "react";
9071
- import { Fragment as Fragment21, jsx as jsx85, jsxs as jsxs73 } from "react/jsx-runtime";
9091
+ import { Fragment as Fragment22, jsx as jsx85, jsxs as jsxs73 } from "react/jsx-runtime";
9072
9092
  var COPY = {
9073
9093
  "signing-in": { busy: "Signing you in\u2026" },
9074
9094
  "session-expired": { busy: "Your session expired \u2014 signing you back in\u2026" },
@@ -9096,7 +9116,7 @@ function SessionScreen({ kind, error, onRetry, productName }) {
9096
9116
  /* @__PURE__ */ jsx85("div", { className: "fd-session-screen-stripe" }),
9097
9117
  /* @__PURE__ */ jsx85(Card, { children: /* @__PURE__ */ jsxs73("div", { className: "fd-session-screen-body", children: [
9098
9118
  /* @__PURE__ */ jsx85("h1", { ref: titleRef, tabIndex: -1, className: "fd-h3 fd-session-screen-title", children: productName }),
9099
- /* @__PURE__ */ jsx85("div", { role: "status", "aria-live": "polite", className: "fd-session-screen-status", children: busyMessage !== null ? /* @__PURE__ */ jsxs73(Fragment21, { children: [
9119
+ /* @__PURE__ */ jsx85("div", { role: "status", "aria-live": "polite", className: "fd-session-screen-status", children: busyMessage !== null ? /* @__PURE__ */ jsxs73(Fragment22, { children: [
9100
9120
  /* @__PURE__ */ jsx85("span", { className: "fd-spinner fd-spinner-lg fd-session-screen-spinner", "aria-hidden": "true" }),
9101
9121
  /* @__PURE__ */ jsx85("p", { className: "fd-body fd-session-screen-message", children: announced })
9102
9122
  ] }) : null }),
@@ -11123,7 +11143,7 @@ function RoadmapTimeline({ onOpenFlag, title = "Roadmap", lede }) {
11123
11143
  // src/components/platform/ComingSoon.tsx
11124
11144
  import * as React65 from "react";
11125
11145
  import { createPortal as createPortal6 } from "react-dom";
11126
- import { Fragment as Fragment23, jsx as jsx87, jsxs as jsxs75 } from "react/jsx-runtime";
11146
+ import { Fragment as Fragment24, jsx as jsx87, jsxs as jsxs75 } from "react/jsx-runtime";
11127
11147
  var BYPASS_STORE = "fd.soon.bypass.v1";
11128
11148
  function readBypassed() {
11129
11149
  try {
@@ -11153,7 +11173,7 @@ function useBypass(key) {
11153
11173
  return [on, set];
11154
11174
  }
11155
11175
  function SoonCard({ label, detail, backend, eta, effort, onRoadmap, allowed, onBypass }) {
11156
- return /* @__PURE__ */ jsxs75(Fragment23, { children: [
11176
+ return /* @__PURE__ */ jsxs75(Fragment24, { children: [
11157
11177
  /* @__PURE__ */ jsxs75("span", { className: "fd-soon-badge", children: [
11158
11178
  /* @__PURE__ */ jsx87("i", { className: "ph ph-traffic-cone", "aria-hidden": "true" }),
11159
11179
  label
@@ -11543,7 +11563,7 @@ function PermissionHint({ perm, children }) {
11543
11563
  }
11544
11564
 
11545
11565
  // src/components/platform/ModeSwitch.tsx
11546
- import { Fragment as Fragment24, jsx as jsx89, jsxs as jsxs77 } from "react/jsx-runtime";
11566
+ import { Fragment as Fragment25, jsx as jsx89, jsxs as jsxs77 } from "react/jsx-runtime";
11547
11567
  function ModeSwitch({ canToggle = false, requestCount = 0, onClearLog, renderLog, onOpenSpec, summary }) {
11548
11568
  const mode2 = useRuntimeMode();
11549
11569
  const panel = useInlinePanel();
@@ -11598,7 +11618,7 @@ function ModeSwitch({ canToggle = false, requestCount = 0, onClearLog, renderLog
11598
11618
  s.total,
11599
11619
  " features complete"
11600
11620
  ] }),
11601
- onOpenSpec ? /* @__PURE__ */ jsxs77(Fragment24, { children: [
11621
+ onOpenSpec ? /* @__PURE__ */ jsxs77(Fragment25, { children: [
11602
11622
  /* @__PURE__ */ jsx89("span", { style: { flex: 1 } }),
11603
11623
  /* @__PURE__ */ jsxs77("button", { type: "button", className: "fd-soon-link", onClick: () => {
11604
11624
  setOpen(false);
@@ -11790,7 +11810,7 @@ function SaturationDistribution({ campuses = [], floorBand, floorScore, onSelect
11790
11810
 
11791
11811
  // src/components/planner/MixGap.tsx
11792
11812
  import * as React66 from "react";
11793
- import { Fragment as Fragment25, jsx as jsx92, jsxs as jsxs80 } from "react/jsx-runtime";
11813
+ import { Fragment as Fragment26, jsx as jsx92, jsxs as jsxs80 } from "react/jsx-runtime";
11794
11814
  var MIX_GAP_LAYOUT = {
11795
11815
  trackHeight: 30,
11796
11816
  barHeight: 20,
@@ -11834,7 +11854,7 @@ function MixGap({ rows = [], loading = false, className = "" }) {
11834
11854
  onMouseLeave: () => setHover(null),
11835
11855
  children: [
11836
11856
  /* @__PURE__ */ jsx92("span", { style: { width: 128, flex: "none" }, children: /* @__PURE__ */ jsx92(ChannelTag, { channel: r.channel, size: "sm" }) }),
11837
- /* @__PURE__ */ jsx92("span", { style: { position: "relative", flex: 1, height: trackHeight, minWidth: 120 }, children: loading ? /* @__PURE__ */ jsx92("span", { className: "fd-skel", style: { position: "absolute", left: 0, right: 0, top: barTop, height: barHeight, borderRadius: 3 } }) : /* @__PURE__ */ jsxs80(Fragment25, { children: [
11857
+ /* @__PURE__ */ jsx92("span", { style: { position: "relative", flex: 1, height: trackHeight, minWidth: 120 }, children: loading ? /* @__PURE__ */ jsx92("span", { className: "fd-skel", style: { position: "absolute", left: 0, right: 0, top: barTop, height: barHeight, borderRadius: 3 } }) : /* @__PURE__ */ jsxs80(Fragment26, { children: [
11838
11858
  /* @__PURE__ */ jsx92("span", { "data-mixgap-bar": "", style: { position: "absolute", left: 0, top: barTop, height: barHeight, width: mixGapOffset(r.realized, max), background: TONE[tone], borderRadius: "2px 3px 3px 2px", transition: "width var(--dur-slow) var(--ease), background var(--dur-base) var(--ease)" } }),
11839
11859
  /* @__PURE__ */ jsx92("span", { "data-mixgap-target": "", style: { position: "absolute", left: `calc(${mixGapOffset(r.target, max)} - ${targetWidth / 2}px)`, top: 0, width: targetWidth, height: trackHeight, background: MIX_GAP_TARGET_STRIPE, borderRadius: 1 } }),
11840
11860
  /* @__PURE__ */ jsxs80("span", { "data-mixgap-label": "", className: "fd-num", style: { position: "absolute", left: labelLeft, top: "50%", transform: "translateY(-50%)", fontSize: 12, color: "var(--text-muted)", whiteSpace: "nowrap" }, children: [
@@ -11948,7 +11968,7 @@ function ChannelContribution({
11948
11968
 
11949
11969
  // src/components/planner/BudgetReallocator.tsx
11950
11970
  import * as React67 from "react";
11951
- import { Fragment as Fragment26, jsx as jsx94, jsxs as jsxs82 } from "react/jsx-runtime";
11971
+ import { Fragment as Fragment27, jsx as jsx94, jsxs as jsxs82 } from "react/jsx-runtime";
11952
11972
  var bandFor = (crp) => crp >= 200 ? "dominant" : crp >= 100 ? "strong" : crp >= 50 ? "adequate" : "weak";
11953
11973
  function BudgetReallocator({
11954
11974
  campus,
@@ -12012,7 +12032,7 @@ function BudgetReallocator({
12012
12032
  /* @__PURE__ */ jsxs82("div", { className: "fd-row", style: { gap: 12, flexWrap: "wrap" }, children: [
12013
12033
  /* @__PURE__ */ jsx94("span", { className: "fd-h4", style: { flex: 1, minWidth: 140 }, children: campus }),
12014
12034
  /* @__PURE__ */ jsx94(CsiBadge, { band: nowBand, crp, size: "medium" }),
12015
- dirty ? /* @__PURE__ */ jsxs82(Fragment26, { children: [
12035
+ dirty ? /* @__PURE__ */ jsxs82(Fragment27, { children: [
12016
12036
  /* @__PURE__ */ jsx94("i", { className: "ph ph-arrow-right fd-muted", "aria-hidden": "true" }),
12017
12037
  /* @__PURE__ */ jsx94(CsiBadge, { band: nextBand, crp: nextCrp, size: "medium", preview: true })
12018
12038
  ] }) : null
@@ -13951,7 +13971,7 @@ function FileViewer({ file, resolveUrl, sidePanel, sidePanelLabel = "Details", o
13951
13971
 
13952
13972
  // src/components/files/FileBrowser.tsx
13953
13973
  import * as React76 from "react";
13954
- import { Fragment as Fragment30, jsx as jsx104, jsxs as jsxs92 } from "react/jsx-runtime";
13974
+ import { Fragment as Fragment31, jsx as jsx104, jsxs as jsxs92 } from "react/jsx-runtime";
13955
13975
  function childrenOf(folders, parentId) {
13956
13976
  return folders.filter((f) => f.parentId === parentId).sort((a, b) => a.name.localeCompare(b.name));
13957
13977
  }
@@ -14250,7 +14270,7 @@ function FileBrowser({
14250
14270
  ] }),
14251
14271
  /* @__PURE__ */ jsxs92("span", { className: "fd-fb-actions", children: [
14252
14272
  canCreateFolder ? /* @__PURE__ */ jsx104(Button, { variant: "secondary", size: "sm", icon: "folder-simple-plus", onClick: openCreate, children: "New folder" }) : null,
14253
- canUpload ? /* @__PURE__ */ jsxs92(Fragment30, { children: [
14273
+ canUpload ? /* @__PURE__ */ jsxs92(Fragment31, { children: [
14254
14274
  /* @__PURE__ */ jsx104(Button, { variant: "secondary", size: "sm", icon: "upload-simple", onClick: () => uploadInputRef.current && uploadInputRef.current.click(), children: "Upload" }),
14255
14275
  /* @__PURE__ */ jsx104(
14256
14276
  "input",
@@ -14317,7 +14337,7 @@ function FileBrowser({
14317
14337
  draggableId: canMove ? { kind: "folder", id: f.id } : void 0,
14318
14338
  isDropTarget: canMove,
14319
14339
  onDropPayload: (p) => moveIntoFolder(p, f.id),
14320
- actions: /* @__PURE__ */ jsxs92(Fragment30, { children: [
14340
+ actions: /* @__PURE__ */ jsxs92(Fragment31, { children: [
14321
14341
  canRenameFolder ? /* @__PURE__ */ jsx104(IconButton, { icon: "pencil-simple", label: "Rename " + f.name, size: "sm", variant: "ghost", onClick: () => openRename(f) }) : null,
14322
14342
  canMove ? /* @__PURE__ */ jsx104(
14323
14343
  FolderPickerMenu,
@@ -14340,7 +14360,7 @@ function FileBrowser({
14340
14360
  meta: file.size ? formatBytes(file.size) : void 0,
14341
14361
  onOpen: onOpenFile ? () => onOpenFile(file) : void 0,
14342
14362
  draggableId: canMove ? { kind: "file", id: file.id } : void 0,
14343
- actions: /* @__PURE__ */ jsxs92(Fragment30, { children: [
14363
+ actions: /* @__PURE__ */ jsxs92(Fragment31, { children: [
14344
14364
  canMove ? /* @__PURE__ */ jsx104(
14345
14365
  FolderPickerMenu,
14346
14366
  {
@@ -14358,7 +14378,7 @@ function FileBrowser({
14358
14378
  }
14359
14379
  ) })
14360
14380
  ] }),
14361
- /* @__PURE__ */ jsx104(Modal, { open: createOpen, title: "New folder", onClose: () => setCreateOpen(false), footer: /* @__PURE__ */ jsxs92(Fragment30, { children: [
14381
+ /* @__PURE__ */ jsx104(Modal, { open: createOpen, title: "New folder", onClose: () => setCreateOpen(false), footer: /* @__PURE__ */ jsxs92(Fragment31, { children: [
14362
14382
  /* @__PURE__ */ jsx104(Button, { variant: "secondary", onClick: () => setCreateOpen(false), children: "Cancel" }),
14363
14383
  /* @__PURE__ */ jsx104(Button, { onClick: submitCreate, disabled: !createName.trim(), children: "Create" })
14364
14384
  ] }), children: /* @__PURE__ */ jsx104(
@@ -14375,7 +14395,7 @@ function FileBrowser({
14375
14395
  autoFocus: true
14376
14396
  }
14377
14397
  ) }),
14378
- /* @__PURE__ */ jsx104(Modal, { open: renameTarget != null, title: "Rename folder", onClose: () => setRenameTarget(null), footer: /* @__PURE__ */ jsxs92(Fragment30, { children: [
14398
+ /* @__PURE__ */ jsx104(Modal, { open: renameTarget != null, title: "Rename folder", onClose: () => setRenameTarget(null), footer: /* @__PURE__ */ jsxs92(Fragment31, { children: [
14379
14399
  /* @__PURE__ */ jsx104(Button, { variant: "secondary", onClick: () => setRenameTarget(null), children: "Cancel" }),
14380
14400
  /* @__PURE__ */ jsx104(Button, { onClick: submitRename, disabled: !renameValue.trim(), children: "Save" })
14381
14401
  ] }), children: /* @__PURE__ */ jsx104(
@@ -14399,7 +14419,7 @@ function FileBrowser({
14399
14419
  title: deleteTarget ? "Delete \u201C" + deleteTarget.name + "\u201D?" : "Delete folder?",
14400
14420
  description: "This can't be undone. The folder must be empty.",
14401
14421
  onClose: () => setDeleteTarget(null),
14402
- footer: /* @__PURE__ */ jsxs92(Fragment30, { children: [
14422
+ footer: /* @__PURE__ */ jsxs92(Fragment31, { children: [
14403
14423
  /* @__PURE__ */ jsx104(Button, { variant: "secondary", onClick: () => setDeleteTarget(null), children: "Cancel" }),
14404
14424
  /* @__PURE__ */ jsx104(Button, { variant: "danger", onClick: confirmDelete, children: "Delete" })
14405
14425
  ] })