@omniviewdev/base-ui 0.2.2 → 0.4.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.ts CHANGED
@@ -623,10 +623,13 @@ export declare interface BuildSectionsOptions {
623
623
  value?: Date | null;
624
624
  }
625
625
 
626
- export declare const BUILT_IN_THEME_MODES: readonly BuiltInThemeMode[];
626
+ export declare const BUILT_IN_THEME_IDS: ReadonlySet<BuiltInThemeId>;
627
627
 
628
- /** The built-in modes that a custom theme can inherit from. */
629
- export declare type BuiltInThemeMode = 'dark' | 'light' | 'high-contrast-dark' | 'high-contrast-light' | 'obsidian' | 'carbon' | 'void';
628
+ export declare const BUILT_IN_THEME_MODES: readonly ["void", "dark", "light", "obsidian", "carbon", "solarized-dark", "solarized-light", "high-contrast-dark", "high-contrast-light"];
629
+
630
+ export declare const BUILT_IN_THEMES: readonly Readonly<ThemeSummary>[];
631
+
632
+ export declare type BuiltInThemeId = 'void' | 'dark' | 'light' | 'obsidian' | 'carbon' | 'solarized-dark' | 'solarized-light' | 'high-contrast-dark' | 'high-contrast-light';
630
633
 
631
634
  export declare const Button: ForwardRefExoticComponent<Omit<ButtonProps, "ref"> & RefAttributes<HTMLElement>>;
632
635
 
@@ -994,8 +997,6 @@ export declare interface CollapsibleTriggerProps extends HTMLAttributes<HTMLButt
994
997
  children: ReactNode;
995
998
  }
996
999
 
997
- declare type ColorTokenKey = 'color.accent.soft' | 'color.accent.strong' | 'color.ansi.black' | 'color.ansi.blue' | 'color.ansi.bright.black' | 'color.ansi.bright.blue' | 'color.ansi.bright.cyan' | 'color.ansi.bright.green' | 'color.ansi.bright.magenta' | 'color.ansi.bright.red' | 'color.ansi.bright.white' | 'color.ansi.bright.yellow' | 'color.ansi.cyan' | 'color.ansi.green' | 'color.ansi.magenta' | 'color.ansi.red' | 'color.ansi.white' | 'color.ansi.yellow' | 'color.bg.base' | 'color.bg.elevated' | 'color.bg.inset' | 'color.bg.surface' | 'color.bg.surface.overlay' | 'color.bg.surface.raised' | 'color.border.default' | 'color.border.focus' | 'color.border.muted' | 'color.border.strong' | 'color.brand.300' | 'color.brand.400' | 'color.brand.500' | 'color.danger' | 'color.danger.soft' | 'color.datepicker.cell.bg' | 'color.datepicker.cell.bg.hover' | 'color.datepicker.cell.bg.selected' | 'color.datepicker.cell.bg.today' | 'color.datepicker.cell.fg' | 'color.datepicker.cell.fg.disabled' | 'color.datepicker.cell.fg.other.month' | 'color.datepicker.cell.fg.selected' | 'color.datepicker.cell.fg.today' | 'color.datepicker.header.bg' | 'color.diff.insert.bg' | 'color.diff.remove.bg' | 'color.discovery' | 'color.discovery.soft' | 'color.drawer.handle' | 'color.drawer.handle.hover' | 'color.editor.bg' | 'color.editor.bracket.1' | 'color.editor.bracket.2' | 'color.editor.bracket.3' | 'color.editor.bracket.4' | 'color.editor.bracket.5' | 'color.editor.bracket.6' | 'color.editor.bracket.match.bg' | 'color.editor.bracket.match.border' | 'color.editor.cursor' | 'color.editor.fg' | 'color.editor.find.match.bg' | 'color.editor.find.match.border' | 'color.editor.find.range.bg' | 'color.editor.group.bg' | 'color.editor.group.border' | 'color.editor.group.drop.border' | 'color.editor.group.header.bg' | 'color.editor.indent.guide' | 'color.editor.indent.guide.active' | 'color.editor.line.highlight.bg' | 'color.editor.line.highlight.border' | 'color.editor.line.number' | 'color.editor.line.number.active' | 'color.editor.link' | 'color.editor.ruler' | 'color.editor.selection.bg' | 'color.editor.selection.inactive.bg' | 'color.editor.whitespace' | 'color.fg.default' | 'color.fg.disabled' | 'color.fg.inverse' | 'color.fg.muted' | 'color.fg.subtle' | 'color.gutter.added' | 'color.gutter.bg' | 'color.gutter.deleted' | 'color.gutter.modified' | 'color.info' | 'color.info.soft' | 'color.minimap.bg' | 'color.minimap.error' | 'color.minimap.find.match' | 'color.minimap.selection' | 'color.minimap.warning' | 'color.progress.fill' | 'color.progress.track' | 'color.scrollarea.thumb' | 'color.scrollarea.thumb.hover' | 'color.scrollarea.track' | 'color.secondary' | 'color.secondary.soft' | 'color.state.focus.ring' | 'color.state.hover' | 'color.state.pressed' | 'color.state.selected' | 'color.success' | 'color.success.soft' | 'color.tab.active.bg' | 'color.tab.active.border' | 'color.tab.active.fg' | 'color.tab.bg' | 'color.tab.border' | 'color.tab.fg' | 'color.tab.hover.bg' | 'color.tab.hover.fg' | 'color.tab.inactive.bg' | 'color.tab.inactive.fg' | 'color.tab.modified.border' | 'color.terminal.bg' | 'color.terminal.border' | 'color.terminal.cursor' | 'color.terminal.fg' | 'color.terminal.selection.bg' | 'color.terminal.selection.fg' | 'color.warning' | 'color.warning.soft';
998
-
999
1000
  export declare interface ColumnDef {
1000
1001
  /** Unique column identifier, used for Cell matching and sort callbacks */
1001
1002
  id: string;
@@ -1376,6 +1377,8 @@ export declare interface ContextMenuTriggerProps extends Omit<ComponentPropsWith
1376
1377
 
1377
1378
  export declare function createThemeRegistry(): ThemeRegistry;
1378
1379
 
1380
+ export declare function createThemeRootApplier(root: HTMLElement): ThemeRootApplier;
1381
+
1379
1382
  export declare const DataTable: DataTableCompound;
1380
1383
 
1381
1384
  declare const DataTableBody: ForwardRefExoticComponent<DataTableBodyProps & RefAttributes<HTMLTableSectionElement>>;
@@ -2346,6 +2349,8 @@ declare const InputRoot: ForwardRefExoticComponent<Omit<InputRootProps, "ref"> &
2346
2349
  export declare interface InputRootProps extends Field.Root.Props, StyledComponentProps {
2347
2350
  }
2348
2351
 
2352
+ export declare function isBuiltInThemeId(id: string): id is BuiltInThemeId;
2353
+
2349
2354
  /** True if the `year` is a leap year (Gregorian calendar). */
2350
2355
  export declare function isLeapYear(year: number): boolean;
2351
2356
 
@@ -2943,6 +2948,10 @@ export declare interface RadioRootProps extends Omit<ComponentPropsWithoutRef<ty
2943
2948
  value: string;
2944
2949
  }
2945
2950
 
2951
+ export declare interface RegisteredTheme extends ThemeSummary {
2952
+ definition: ThemeDefinition;
2953
+ }
2954
+
2946
2955
  export declare type ReorderMeta = {
2947
2956
  id: TabId;
2948
2957
  from: number;
@@ -3670,6 +3679,8 @@ export declare interface StyledComponentProps {
3670
3679
  size?: ComponentSize;
3671
3680
  }
3672
3681
 
3682
+ declare type SupportsColor = (value: string) => boolean;
3683
+
3673
3684
  export declare type SurfaceElevation = 0 | 1 | 2 | 3;
3674
3685
 
3675
3686
  export declare type SurfaceType = 'base' | 'default' | 'raised' | 'overlay' | 'inset' | 'elevated';
@@ -3717,8 +3728,6 @@ declare const SwitchThumb: ForwardRefExoticComponent<SwitchThumbProps & RefAttri
3717
3728
  export declare interface SwitchThumbProps extends Omit<ComponentPropsWithoutRef<typeof Switch_2.Thumb>, 'color'>, StyledComponentProps {
3718
3729
  }
3719
3730
 
3720
- declare type SyntaxTokenKey = 'syntax.class' | 'syntax.comment' | 'syntax.decorator' | 'syntax.function' | 'syntax.interface' | 'syntax.keyword' | 'syntax.keyword.control' | 'syntax.keyword.operator' | 'syntax.method' | 'syntax.namespace' | 'syntax.number' | 'syntax.operator' | 'syntax.parameter' | 'syntax.property' | 'syntax.punctuation' | 'syntax.regexp' | 'syntax.string' | 'syntax.string.escape' | 'syntax.style.comment' | 'syntax.style.function' | 'syntax.style.keyword' | 'syntax.style.type' | 'syntax.type' | 'syntax.variable';
3721
-
3722
3731
  export declare type TabDescriptor = {
3723
3732
  id: TabId;
3724
3733
  title: string;
@@ -3920,8 +3929,6 @@ export declare interface TagInputProps extends Omit<HTMLAttributes<HTMLDivElemen
3920
3929
  inputProps?: React.InputHTMLAttributes<HTMLInputElement>;
3921
3930
  }
3922
3931
 
3923
- declare type TerminalTokenKey = never;
3924
-
3925
3932
  declare const Text_2: TextComponent;
3926
3933
  export { Text_2 as Text }
3927
3934
 
@@ -4004,95 +4011,114 @@ declare interface TextOwnProps extends TypographyBaseProps, TruncationProps {
4004
4011
  export declare type TextProps<C extends TextElement = TextElement> = PolymorphicComponentProps<C, TextOwnProps>;
4005
4012
 
4006
4013
  export declare interface ThemeContextValue extends ThemeState {
4007
- setTheme: (theme: ThemeMode) => void;
4014
+ setTheme: (themeId: ThemeMode) => void;
4008
4015
  setDensity: (density: ThemeDensity) => void;
4009
4016
  setMotion: (motion: ThemeMotion) => void;
4010
4017
  }
4011
4018
 
4012
- export declare interface ThemeDefinition {
4013
- /** Stable identifier, used for persistence and activation. */
4019
+ export declare type ThemeDefinition = ThemeDefinitionV1;
4020
+
4021
+ export declare interface ThemeDefinitionV1 {
4022
+ schemaVersion: 1;
4014
4023
  id: string;
4015
- /** Human-readable display name. */
4016
4024
  name: string;
4017
- /** The built-in mode this theme inherits from. */
4018
- base: BuiltInThemeMode;
4019
- /** Optional author metadata. */
4025
+ base: BuiltInThemeId;
4020
4026
  author?: string;
4021
- /** Optional version string. */
4022
4027
  version?: string;
4023
- /** UI chrome color overrides, keyed by dotted token path. */
4024
- colors?: Partial<Record<ColorTokenKey, string>>;
4025
- /** Syntax highlighting overrides. */
4026
- syntax?: Partial<Record<SyntaxTokenKey, string>>;
4027
- /** Terminal ANSI palette overrides. */
4028
- terminal?: Partial<Record<TerminalTokenKey, string>>;
4028
+ description?: string;
4029
+ tokens: Partial<Record<ThemeTokenKey, string>>;
4029
4030
  }
4030
4031
 
4031
4032
  export declare type ThemeDensity = 'compact' | 'comfortable';
4032
4033
 
4033
- export declare interface ThemeInfo {
4034
- id: string;
4035
- name: string;
4036
- base: BuiltInThemeMode;
4037
- builtIn: boolean;
4038
- }
4039
-
4040
4034
  /**
4041
4035
  * A theme identifier. Built-in mode ids autocomplete; any registered custom
4042
4036
  * theme id is also accepted.
4043
4037
  */
4044
- export declare type ThemeMode = BuiltInThemeMode | (string & {});
4038
+ export declare type ThemeMode = BuiltInThemeId | (string & {});
4045
4039
 
4046
4040
  export declare type ThemeMotion = 'normal' | 'reduced';
4047
4041
 
4048
- export declare function ThemeProvider({ children, initialTheme, initialDensity, initialMotion, persist, }: ThemeProviderProps): JSX.Element;
4042
+ export declare type ThemeOwner = {
4043
+ kind: 'builtin';
4044
+ id: 'base-ui';
4045
+ } | {
4046
+ kind: 'plugin';
4047
+ id: string;
4048
+ } | {
4049
+ kind: 'user';
4050
+ id: string;
4051
+ };
4052
+
4053
+ export declare function ThemeProvider({ children, themeId, onThemeChange, fallbackThemeId, initialDensity, initialMotion, registry, root, }: ThemeProviderProps): JSX.Element;
4049
4054
 
4050
4055
  export declare interface ThemeProviderProps extends PropsWithChildren {
4051
- initialTheme?: ThemeMode;
4056
+ themeId: string;
4057
+ onThemeChange?: (themeId: string) => void;
4058
+ fallbackThemeId?: string;
4052
4059
  initialDensity?: ThemeDensity;
4053
4060
  initialMotion?: ThemeMotion;
4054
- persist?: boolean;
4061
+ registry?: ThemeRegistry;
4062
+ root?: HTMLElement | null;
4055
4063
  }
4056
4064
 
4057
4065
  export declare interface ThemeRegistry {
4058
- register(theme: ThemeDefinition): void;
4059
- unregister(id: string): void;
4060
- get(id: string): ThemeDefinition | undefined;
4061
- list(): ThemeInfo[];
4066
+ register(theme: ThemeDefinition, owner: ThemeOwner): () => void;
4067
+ unregister(id: string, owner: ThemeOwner): boolean;
4068
+ unregisterOwner(owner: ThemeOwner): number;
4069
+ get(id: string): Readonly<RegisteredTheme> | undefined;
4062
4070
  has(id: string): boolean;
4063
- apply(id: string): void;
4064
- active(): string | null;
4071
+ getSnapshot(): ThemeRegistrySnapshot;
4065
4072
  subscribe(listener: ThemeRegistryListener): () => void;
4066
4073
  }
4067
4074
 
4068
- /** Module-level singleton. */
4069
4075
  export declare const themeRegistry: ThemeRegistry;
4070
4076
 
4071
- export declare type ThemeRegistryEvent = {
4072
- type: 'registered';
4073
- id: string;
4074
- } | {
4075
- type: 'unregistered';
4076
- id: string;
4077
- } | {
4078
- type: 'applied';
4079
- id: string;
4080
- };
4077
+ export declare type ThemeRegistryListener = () => void;
4081
4078
 
4082
- export declare type ThemeRegistryListener = (event: ThemeRegistryEvent) => void;
4079
+ export declare interface ThemeRegistrySnapshot {
4080
+ readonly themes: readonly Readonly<ThemeSummary>[];
4081
+ }
4082
+
4083
+ export declare interface ThemeRootApplier {
4084
+ apply(theme: Readonly<RegisteredTheme>): void;
4085
+ cleanup(): void;
4086
+ }
4083
4087
 
4084
4088
  export declare interface ThemeState {
4085
- theme: ThemeMode;
4089
+ requestedThemeId: string;
4090
+ activeTheme: Readonly<ThemeSummary>;
4091
+ isFallback: boolean;
4086
4092
  density: ThemeDensity;
4087
4093
  motion: ThemeMotion;
4088
4094
  }
4089
4095
 
4096
+ export declare interface ThemeSummary {
4097
+ id: string;
4098
+ name: string;
4099
+ base: BuiltInThemeId;
4100
+ appearance: 'dark' | 'light';
4101
+ description?: string;
4102
+ builtIn: boolean;
4103
+ owner: ThemeOwner;
4104
+ }
4105
+
4090
4106
  export declare const ThemeSwitcher: NamedExoticComponent<ThemeSwitcherProps>;
4091
4107
 
4092
4108
  export declare interface ThemeSwitcherProps {
4093
4109
  className?: string;
4094
4110
  }
4095
4111
 
4112
+ declare type ThemeTokenKey = 'color.accent.soft' | 'color.accent.strong' | 'color.ansi.black' | 'color.ansi.blue' | 'color.ansi.bright.black' | 'color.ansi.bright.blue' | 'color.ansi.bright.cyan' | 'color.ansi.bright.green' | 'color.ansi.bright.magenta' | 'color.ansi.bright.red' | 'color.ansi.bright.white' | 'color.ansi.bright.yellow' | 'color.ansi.cyan' | 'color.ansi.green' | 'color.ansi.magenta' | 'color.ansi.red' | 'color.ansi.white' | 'color.ansi.yellow' | 'color.bg.base' | 'color.bg.elevated' | 'color.bg.inset' | 'color.bg.surface' | 'color.bg.surface.overlay' | 'color.bg.surface.raised' | 'color.border.default' | 'color.border.focus' | 'color.border.muted' | 'color.border.strong' | 'color.brand.300' | 'color.brand.400' | 'color.brand.500' | 'color.danger' | 'color.danger.soft' | 'color.datepicker.cell.bg' | 'color.datepicker.cell.bg.hover' | 'color.datepicker.cell.bg.selected' | 'color.datepicker.cell.bg.today' | 'color.datepicker.cell.fg' | 'color.datepicker.cell.fg.disabled' | 'color.datepicker.cell.fg.other.month' | 'color.datepicker.cell.fg.selected' | 'color.datepicker.cell.fg.today' | 'color.datepicker.header.bg' | 'color.diff.insert.bg' | 'color.diff.remove.bg' | 'color.discovery' | 'color.discovery.soft' | 'color.drawer.handle' | 'color.drawer.handle.hover' | 'color.editor.bg' | 'color.editor.bracket.1' | 'color.editor.bracket.2' | 'color.editor.bracket.3' | 'color.editor.bracket.4' | 'color.editor.bracket.5' | 'color.editor.bracket.6' | 'color.editor.bracket.match.bg' | 'color.editor.bracket.match.border' | 'color.editor.cursor' | 'color.editor.fg' | 'color.editor.find.match.bg' | 'color.editor.find.match.border' | 'color.editor.find.range.bg' | 'color.editor.group.bg' | 'color.editor.group.border' | 'color.editor.group.drop.border' | 'color.editor.group.header.bg' | 'color.editor.indent.guide' | 'color.editor.indent.guide.active' | 'color.editor.line.highlight.bg' | 'color.editor.line.highlight.border' | 'color.editor.line.number' | 'color.editor.line.number.active' | 'color.editor.link' | 'color.editor.ruler' | 'color.editor.selection.bg' | 'color.editor.selection.inactive.bg' | 'color.editor.whitespace' | 'color.fg.default' | 'color.fg.disabled' | 'color.fg.inverse' | 'color.fg.muted' | 'color.fg.subtle' | 'color.gutter.added' | 'color.gutter.bg' | 'color.gutter.deleted' | 'color.gutter.modified' | 'color.info' | 'color.info.soft' | 'color.minimap.bg' | 'color.minimap.error' | 'color.minimap.find.match' | 'color.minimap.selection' | 'color.minimap.warning' | 'color.progress.fill' | 'color.progress.track' | 'color.scrollarea.thumb' | 'color.scrollarea.thumb.hover' | 'color.scrollarea.track' | 'color.secondary' | 'color.secondary.soft' | 'color.state.focus.ring' | 'color.state.hover' | 'color.state.pressed' | 'color.state.selected' | 'color.success' | 'color.success.soft' | 'color.tab.active.bg' | 'color.tab.active.border' | 'color.tab.active.fg' | 'color.tab.bg' | 'color.tab.border' | 'color.tab.fg' | 'color.tab.hover.bg' | 'color.tab.hover.fg' | 'color.tab.inactive.bg' | 'color.tab.inactive.fg' | 'color.tab.modified.border' | 'color.terminal.bg' | 'color.terminal.border' | 'color.terminal.cursor' | 'color.terminal.fg' | 'color.terminal.selection.bg' | 'color.terminal.selection.fg' | 'color.warning' | 'color.warning.soft' | 'syntax.class' | 'syntax.comment' | 'syntax.decorator' | 'syntax.function' | 'syntax.interface' | 'syntax.keyword' | 'syntax.keyword.control' | 'syntax.keyword.operator' | 'syntax.method' | 'syntax.namespace' | 'syntax.number' | 'syntax.operator' | 'syntax.parameter' | 'syntax.property' | 'syntax.punctuation' | 'syntax.regexp' | 'syntax.string' | 'syntax.string.escape' | 'syntax.style.comment' | 'syntax.style.function' | 'syntax.style.keyword' | 'syntax.style.type' | 'syntax.type' | 'syntax.variable';
4113
+
4114
+ export declare class ThemeValidationError extends Error {
4115
+ readonly code: ThemeValidationErrorCode;
4116
+ readonly path: string;
4117
+ constructor(code: ThemeValidationErrorCode, path: string, message: string);
4118
+ }
4119
+
4120
+ export declare type ThemeValidationErrorCode = 'unsupported_schema' | 'invalid_id' | 'invalid_metadata' | 'unknown_base' | 'unknown_token' | 'invalid_value' | 'duplicate_id' | 'reserved_id' | 'owner_mismatch';
4121
+
4096
4122
  export declare function TimeColumns({ value, onChange, hourCycle, showSeconds, minuteStep, disabled, readOnly, className, }: TimeColumnsProps): JSX.Element;
4097
4123
 
4098
4124
  export declare interface TimeColumnsProps {
@@ -4326,9 +4352,11 @@ declare interface TreeConfigContextValue {
4326
4352
  loopFocus: boolean;
4327
4353
  virtualized: boolean;
4328
4354
  indentation: number;
4329
- showBranchConnectors: boolean;
4355
+ indentGuide: TreeIndentGuide;
4330
4356
  }
4331
4357
 
4358
+ export declare type TreeIndentGuide = 'none' | 'rail' | 'connectors';
4359
+
4332
4360
  export declare interface TreeItemState {
4333
4361
  isSelected: boolean;
4334
4362
  isActive: boolean;
@@ -4345,6 +4373,8 @@ declare type TreeListCompound = typeof TreeListRoot & {
4345
4373
  Root: typeof TreeListRoot;
4346
4374
  Viewport: typeof TreeListViewport;
4347
4375
  Item: typeof TreeListItem;
4376
+ ReorderableItem: typeof TreeListReorderableItem;
4377
+ ItemDragHandle: typeof TreeListItemDragHandle;
4348
4378
  ItemIndent: typeof TreeListItemIndent;
4349
4379
  ItemToggle: typeof TreeListItemToggle;
4350
4380
  ItemIcon: typeof TreeListItemIcon;
@@ -4375,6 +4405,18 @@ declare interface TreeListItemBadgeProps extends HTMLAttributes<HTMLSpanElement>
4375
4405
 
4376
4406
  declare const TreeListItemDescription: ForwardRefExoticComponent<HTMLAttributes<HTMLSpanElement> & RefAttributes<HTMLSpanElement>>;
4377
4407
 
4408
+ declare const TreeListItemDragHandle: ForwardRefExoticComponent<TreeListItemDragHandleProps & RefAttributes<HTMLButtonElement>>;
4409
+
4410
+ declare type TreeListItemDragHandleBaseProps = Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'aria-label' | 'aria-labelledby' | 'type'>;
4411
+
4412
+ export declare type TreeListItemDragHandleProps = TreeListItemDragHandleBaseProps & ({
4413
+ 'aria-label': string;
4414
+ 'aria-labelledby'?: string;
4415
+ } | {
4416
+ 'aria-label'?: string;
4417
+ 'aria-labelledby': string;
4418
+ });
4419
+
4378
4420
  declare const TreeListItemIcon: ForwardRefExoticComponent<HTMLAttributes<HTMLSpanElement> & RefAttributes<HTMLSpanElement>>;
4379
4421
 
4380
4422
  declare const TreeListItemIndent: ForwardRefExoticComponent<TreeListItemIndentProps & RefAttributes<HTMLSpanElement>>;
@@ -4392,6 +4434,7 @@ declare const TreeListItemMeta: ForwardRefExoticComponent<HTMLAttributes<HTMLSpa
4392
4434
  export declare interface TreeListItemProps extends Omit<HTMLAttributes<HTMLDivElement>, 'color'> {
4393
4435
  itemKey: Key_3;
4394
4436
  disabled?: boolean;
4437
+ selectable?: boolean;
4395
4438
  textValue?: string;
4396
4439
  children: ReactNode;
4397
4440
  }
@@ -4408,6 +4451,8 @@ declare interface TreeListLoadingProps extends HTMLAttributes<HTMLDivElement> {
4408
4451
  children?: ReactNode;
4409
4452
  }
4410
4453
 
4454
+ declare const TreeListReorderableItem: ForwardRefExoticComponent<TreeListItemProps & RefAttributes<HTMLDivElement>>;
4455
+
4411
4456
  declare const TreeListRoot: <TItem>(props: TreeListRootProps<TItem> & {
4412
4457
  ref?: Ref<HTMLDivElement>;
4413
4458
  }) => ReactNode;
@@ -4419,8 +4464,15 @@ export declare interface TreeListRootProps<TItem = unknown> extends Omit<HTMLAtt
4419
4464
  * An empty array `[]` means "loaded, no children" and will NOT trigger `loadChildren`. */
4420
4465
  getChildren: (item: TItem) => readonly TItem[] | undefined;
4421
4466
  isBranch?: (item: TItem) => boolean;
4467
+ /** Source-level selection eligibility, including never-mounted virtualized rows.
4468
+ * Returning false overrides Item selectable; Item selectable=false may further restrict it. */
4469
+ isItemSelectable?: (item: TItem) => boolean;
4422
4470
  getTextValue?: (item: TItem) => string;
4423
4471
  renderItem: (item: TItem, node: TreeNodeMeta) => ReactNode;
4472
+ reorderable?: boolean;
4473
+ order?: TreeOrder;
4474
+ defaultOrder?: TreeOrder;
4475
+ onOrderChange?: (order: TreeOrder, event: TreeReorderEvent) => void;
4424
4476
  expandedKeys?: ReadonlySet<Key_3>;
4425
4477
  defaultExpandedKeys?: Iterable<Key_3>;
4426
4478
  onExpandedKeysChange?: (keys: ReadonlySet<Key_3>) => void;
@@ -4448,7 +4500,8 @@ export declare interface TreeListRootProps<TItem = unknown> extends Omit<HTMLAtt
4448
4500
  onFilterTextChange?: (filterText: string) => void;
4449
4501
  filterFn?: (item: TItem, filterText: string) => boolean;
4450
4502
  indentation?: number;
4451
- showBranchConnectors?: boolean;
4503
+ /** Indentation only (default), icon-centered rails, or elbow connectors. */
4504
+ indentGuide?: TreeIndentGuide;
4452
4505
  loading?: boolean;
4453
4506
  error?: ReactNode;
4454
4507
  children?: ReactNode;
@@ -4469,6 +4522,19 @@ export declare interface TreeNodeMeta {
4469
4522
  ancestorIsLast: boolean[];
4470
4523
  }
4471
4524
 
4525
+ /** Sparse sibling presets; missing keys are ignored across the full entry.
4526
+ * Resolving a group costs O(source siblings + saved keys), without sorting.
4527
+ */
4528
+ export declare type TreeOrder = ReadonlyMap<Key_3 | null, readonly Key_3[]>;
4529
+
4530
+ export declare interface TreeReorderEvent {
4531
+ activeKey: Key_3;
4532
+ overKey: Key_3;
4533
+ parentKey: Key_3 | null;
4534
+ fromIndex: number;
4535
+ toIndex: number;
4536
+ }
4537
+
4472
4538
  declare interface TreeStore {
4473
4539
  subscribe: (listener: () => void) => () => void;
4474
4540
  getSnapshot: () => TreeStoreSnapshot;
@@ -4481,6 +4547,9 @@ declare interface TreeStore {
4481
4547
  setLoadingKey: (key: Key_3, loading: boolean, silent?: boolean) => void;
4482
4548
  setFlatNodes: (nodes: FlatNode[], silent?: boolean) => void;
4483
4549
  registerTextValue: (key: Key_3, textValue: string) => void;
4550
+ registerSelectable: (key: Key_3, selectable: boolean) => void;
4551
+ setSourceNonSelectableKeys: (keys: ReadonlySet<Key_3> | undefined) => void;
4552
+ isSelectable: (key: Key_3) => boolean;
4484
4553
  getTextValue: (key: Key_3) => string | undefined;
4485
4554
  getRegisteredKeys: () => Key_3[];
4486
4555
  /** Rebuild snapshot and notify listeners. Call from useEffect after silent updates. */
@@ -4750,12 +4819,7 @@ export declare function useTabDragBroker(): TabDragBrokerValue | null;
4750
4819
 
4751
4820
  export declare function useTheme(): ThemeContextValue;
4752
4821
 
4753
- /**
4754
- * React hook that returns the current list of registered themes (built-in +
4755
- * custom) and re-renders the calling component whenever a theme is
4756
- * registered or unregistered.
4757
- */
4758
- export declare function useThemeList(): readonly ThemeInfo[];
4822
+ export declare function useThemeList(registry?: ThemeRegistry): readonly Readonly<ThemeSummary>[];
4759
4823
 
4760
4824
  /** Returns the module-level theme registry singleton. */
4761
4825
  export declare function useThemeRegistry(): ThemeRegistry;
@@ -4774,7 +4838,7 @@ export declare function useTreeConfig(): TreeConfigContextValue;
4774
4838
  * Unlike useListItem, this does NOT self-register — keys come from
4775
4839
  * the flattener, not from DOM mount.
4776
4840
  */
4777
- export declare function useTreeItem(store: TreeStore, key: Key_3, textValue?: string): TreeItemState;
4841
+ export declare function useTreeItem(store: TreeStore, key: Key_3, textValue?: string, selectable?: boolean): TreeItemState;
4778
4842
 
4779
4843
  export declare function useTreeStoreContext(): TreeStore;
4780
4844
 
@@ -4796,6 +4860,8 @@ export declare interface ValidateSectionsResult {
4796
4860
  incomplete: boolean;
4797
4861
  }
4798
4862
 
4863
+ export declare function validateThemeDefinition(input: unknown, supportsColor?: SupportsColor): ThemeDefinition;
4864
+
4799
4865
  declare type WeekStart = 0 | 1 | 2 | 3 | 4 | 5 | 6;
4800
4866
 
4801
4867
  export { }