@sableui/react 0.15.0 → 0.16.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.
Files changed (134) hide show
  1. package/CHANGELOG.md +73 -0
  2. package/bin/sable-lint.mjs +5 -1
  3. package/dist/{_contract-CkqXDVww.d.ts → _contract-CDa9-NdB.d.ts} +47 -1
  4. package/dist/blocks/wallet-block.js +2 -2
  5. package/dist/components/app-shell/app-shell-frame.js +16 -0
  6. package/dist/components/app-shell/app-shell-main.js +12 -0
  7. package/dist/components/app-shell/app-shell.js +28 -4
  8. package/dist/components/app-shell/app-shell.meta.js +88 -4
  9. package/dist/components/area-chart/area-chart.meta.js +6 -1
  10. package/dist/components/attachment/attachment.meta.js +2 -1
  11. package/dist/components/attachment/attachment.variants.js +1 -1
  12. package/dist/components/badge/badge.meta.js +8 -1
  13. package/dist/components/badge/badge.variants.js +7 -7
  14. package/dist/components/banner/banner.meta.js +6 -1
  15. package/dist/components/banner/banner.variants.js +5 -5
  16. package/dist/components/bar-chart/bar-chart.meta.js +6 -1
  17. package/dist/components/caret-menu/caret-menu.js +5 -6
  18. package/dist/components/chat-composer/chat-composer.meta.js +2 -2
  19. package/dist/components/chat-composer/chat-composer.variants.js +1 -1
  20. package/dist/components/color-field/color-field.js +6 -8
  21. package/dist/components/combobox/combobox.js +27 -5
  22. package/dist/components/combobox/combobox.meta.js +10 -2
  23. package/dist/components/command-menu/command-menu.js +14 -3
  24. package/dist/components/command-menu/command-menu.meta.js +9 -1
  25. package/dist/components/date-picker/date-picker.meta.js +2 -2
  26. package/dist/components/feedback/feedback.js +1 -1
  27. package/dist/components/feedback/feedback.meta.js +2 -1
  28. package/dist/components/gradient-art/gradient-art.js +8 -5
  29. package/dist/components/gradient-art/gradient-art.meta.js +35 -2
  30. package/dist/components/input/input.meta.js +11 -3
  31. package/dist/components/input-group/input-group.js +1 -1
  32. package/dist/components/input-group/input-group.meta.js +1 -1
  33. package/dist/components/line-chart/line-chart.meta.js +6 -1
  34. package/dist/components/menu/menu.js +1 -1
  35. package/dist/components/meter/meter.js +53 -7
  36. package/dist/components/meter/meter.meta.js +51 -4
  37. package/dist/components/meter/meter.variants.js +43 -7
  38. package/dist/components/note/note.meta.js +5 -1
  39. package/dist/components/note/note.variants.js +4 -4
  40. package/dist/components/number-field/number-field.meta.js +2 -2
  41. package/dist/components/otp-field/otp-field.meta.js +2 -2
  42. package/dist/components/panel-group/panel-group.js +5 -8
  43. package/dist/components/pie-chart/pie-chart.meta.js +6 -1
  44. package/dist/components/radar-chart/radar-chart.meta.js +6 -1
  45. package/dist/components/radial-chart/radial-chart.meta.js +6 -1
  46. package/dist/components/search-input/search-input.meta.js +11 -3
  47. package/dist/components/segmented-bar/segmented-bar.meta.js +8 -1
  48. package/dist/components/segmented-bar/segmented-bar.variants.js +7 -7
  49. package/dist/components/select/select.js +1 -1
  50. package/dist/components/select/select.meta.js +2 -2
  51. package/dist/components/sheet/sheet.js +5 -4
  52. package/dist/components/sidebar/sidebar.js +16 -1
  53. package/dist/components/sidebar/sidebar.meta.js +7 -2
  54. package/dist/components/sparkline/sparkline.meta.js +8 -1
  55. package/dist/components/status-dot/status-dot.meta.js +8 -1
  56. package/dist/components/status-dot/status-dot.variants.js +7 -7
  57. package/dist/components/stepper/stepper.meta.js +2 -1
  58. package/dist/components/stepper/stepper.variants.js +1 -1
  59. package/dist/components/table/table.meta.js +4 -4
  60. package/dist/components/textarea/textarea.js +5 -0
  61. package/dist/components/textarea/textarea.meta.js +3 -3
  62. package/dist/file-hashes.json +91 -88
  63. package/dist/foundations/accessibility.js +5 -0
  64. package/dist/index.d.ts +132 -24
  65. package/dist/index.js +9 -1
  66. package/dist/lib/chart/types.js +8 -8
  67. package/dist/lib/chart/use-arrival.js +5 -4
  68. package/dist/lib/field-shell.js +1 -1
  69. package/dist/lib/highlight-glide.js +6 -6
  70. package/dist/lib/scrub-gesture.js +6 -6
  71. package/dist/lib/use-caret-trigger.js +11 -18
  72. package/dist/lib/use-match-highlight.js +69 -0
  73. package/dist/lib/use-smooth-wheel.js +10 -8
  74. package/dist/presets/index.d.ts +13 -2
  75. package/dist/presets/index.js +17 -1
  76. package/dist/styles.css +100 -0
  77. package/dist/{theme-provider-CdSicAad.d.ts → theme-provider-BydfM5Z0.d.ts} +1 -1
  78. package/dist/themes/_contract.js +14 -0
  79. package/dist/themes/atelier/atelier.css +18 -0
  80. package/dist/themes/atelier/index.d.ts +1 -1
  81. package/dist/themes/contrast.js +48 -1
  82. package/dist/themes/ember/ember.css +18 -0
  83. package/dist/themes/ember/index.d.ts +1 -1
  84. package/dist/themes/index.d.ts +2 -2
  85. package/dist/themes/meridian/index.d.ts +1 -1
  86. package/dist/themes/meridian/meridian.css +18 -0
  87. package/dist/themes/poppy/index.d.ts +1 -1
  88. package/dist/themes/poppy/poppy.css +18 -0
  89. package/dist/themes/prism/index.d.ts +1 -1
  90. package/dist/themes/prism/prism.css +18 -0
  91. package/dist/themes/sable/index.d.ts +1 -1
  92. package/dist/themes/sable/sable.css +18 -0
  93. package/dist/themes/verdant/index.d.ts +1 -1
  94. package/dist/themes/verdant/verdant.css +18 -0
  95. package/llms/blocks/wallet-block.md +5 -4
  96. package/llms/components/app-shell.md +72 -3
  97. package/llms/components/area-chart.md +1 -1
  98. package/llms/components/attachment.md +1 -1
  99. package/llms/components/badge.md +1 -1
  100. package/llms/components/banner.md +1 -1
  101. package/llms/components/bar-chart.md +1 -1
  102. package/llms/components/chat-composer.md +1 -1
  103. package/llms/components/combobox.md +2 -1
  104. package/llms/components/command-menu.md +3 -2
  105. package/llms/components/date-picker.md +1 -1
  106. package/llms/components/feedback.md +1 -1
  107. package/llms/components/gradient-art.md +28 -1
  108. package/llms/components/input-group.md +1 -1
  109. package/llms/components/input.md +4 -2
  110. package/llms/components/line-chart.md +1 -1
  111. package/llms/components/meter.md +33 -4
  112. package/llms/components/note.md +1 -1
  113. package/llms/components/number-field.md +1 -1
  114. package/llms/components/otp-field.md +1 -1
  115. package/llms/components/pie-chart.md +1 -1
  116. package/llms/components/radar-chart.md +1 -1
  117. package/llms/components/radial-chart.md +1 -1
  118. package/llms/components/search-input.md +20 -2
  119. package/llms/components/segmented-bar.md +1 -1
  120. package/llms/components/select.md +1 -1
  121. package/llms/components/sidebar.md +3 -2
  122. package/llms/components/sparkline.md +1 -1
  123. package/llms/components/status-dot.md +1 -1
  124. package/llms/components/stepper.md +1 -1
  125. package/llms/components/table.md +2 -2
  126. package/llms/components/textarea.md +2 -2
  127. package/llms/foundations/accessibility.md +1 -0
  128. package/llms/reference/token-intent.md +22 -2
  129. package/llms/reference/utilities.md +5 -2
  130. package/llms-full.txt +222 -49
  131. package/llms.txt +2 -2
  132. package/package.json +1 -1
  133. package/registry.json +396 -57
  134. package/scripts/lint-rules.mjs +6 -3
package/dist/index.d.ts CHANGED
@@ -1,10 +1,10 @@
1
1
  import { ClassValue } from 'clsx';
2
2
  import { C as ComponentMeta } from './meta-DX5r5wQL.js';
3
3
  export { A as AnatomyMeta, a as BestPracticeMeta, E as ExampleMeta, M as MotionMeta, b as MotionSlot, c as PropMeta, R as RelatedMeta, S as SubcomponentMeta, U as UsageMeta } from './meta-DX5r5wQL.js';
4
- import { T as ThemeManifest, a as ThemeMode$1 } from './_contract-CkqXDVww.js';
5
- export { A as ART_TOKENS, D as DENSITY_TOKENS, b as DensityToken, M as MOTION_TOKENS, c as MotionToken, P as PALETTE_TOKENS, R as RADIUS_TOKENS, d as RHYTHM_TOKENS, e as RadiusToken, f as RhythmToken, S as SEMANTIC_TOKENS, g as SemanticToken, h as TYPE_OVERLINE_TOKENS, i as TYPE_REFINEMENT_TOKENS, j as TYPE_SCALE_TOKENS, k as TYPE_UI_TOKENS, l as TypeOverlineToken, m as TypeRefinementToken, n as TypeScaleToken, o as TypeUiToken, W as WORKSPACE_SURFACE_TOKENS, p as WorkspaceSurfaceToken } from './_contract-CkqXDVww.js';
6
- import { T as ThemeId } from './theme-provider-CdSicAad.js';
7
- export { D as DEFAULT_THEME_ID, S as SABLE_COLOR_STORAGE_KEY, a as SABLE_THEME_ATTRIBUTE, b as SABLE_THEME_STORAGE_KEY, c as SableColorMode, d as SableThemeContextValue, e as SableThemePreference, f as SableThemeProvider, g as SableThemeProviderProps, h as applySableColorMode, i as applySableTheme, k as defaultThemeId, m as getThemeManifest, o as isThemeId, t as themeIds, p as themeManifestById, q as themeManifests, u as useSableTheme } from './theme-provider-CdSicAad.js';
4
+ import { T as ThemeManifest, a as ThemeMode$1 } from './_contract-CDa9-NdB.js';
5
+ export { A as APP_SHELL_TOKENS, b as ART_TOKENS, D as DENSITY_TOKENS, c as DensityToken, F as FIELD_TOKENS, M as MARK_TOKENS, d as MOTION_TOKENS, e as MotionToken, P as PALETTE_TOKENS, R as RADIUS_TOKENS, f as RHYTHM_TOKENS, g as RadiusToken, h as RhythmToken, S as SEMANTIC_TOKENS, i as SemanticToken, j as TYPE_OVERLINE_TOKENS, k as TYPE_REFINEMENT_TOKENS, l as TYPE_SCALE_TOKENS, m as TYPE_UI_TOKENS, n as TypeOverlineToken, o as TypeRefinementToken, p as TypeScaleToken, q as TypeUiToken, W as WORKSPACE_SURFACE_TOKENS, r as WorkspaceSurfaceToken } from './_contract-CDa9-NdB.js';
6
+ import { T as ThemeId } from './theme-provider-BydfM5Z0.js';
7
+ export { D as DEFAULT_THEME_ID, S as SABLE_COLOR_STORAGE_KEY, a as SABLE_THEME_ATTRIBUTE, b as SABLE_THEME_STORAGE_KEY, c as SableColorMode, d as SableThemeContextValue, e as SableThemePreference, f as SableThemeProvider, g as SableThemeProviderProps, h as applySableColorMode, i as applySableTheme, k as defaultThemeId, m as getThemeManifest, o as isThemeId, t as themeIds, p as themeManifestById, q as themeManifests, u as useSableTheme } from './theme-provider-BydfM5Z0.js';
8
8
  export { AspectBox, AspectBoxProps, Bleed, BleedProps, Breakpoint, Center, CenterProps, Col, ColProps, Columns, ColumnsProps, Grid, GridOverlay, GridOverlayProps, GridProps, Page, PageProps, Region, RegionMax, RegionProps, Responsive, Row, RowProps, SafeArea, SafeAreaProps, Spacer, SpacerProps, SplitPane, SplitPaneProps, Stack, StackProps } from './layout/index.js';
9
9
  export { Icon, IconContextValue, IconProps, IconProvider, IconProviderProps, composeIconSets, useIconSet } from './icon/index.js';
10
10
  export { a as IconRenderProps, I as IconSet, b as IconVariant } from './registry-CyL28OzJ.js';
@@ -580,7 +580,7 @@ declare namespace ViewTransitionName {
580
580
  }
581
581
 
582
582
  declare const buttonVariants: (props?: ({
583
- variant?: "link" | "primary" | "secondary" | "destructive" | "outline" | "ghost" | "floating" | "field" | "on-color" | "on-color-outline" | "on-color-ghost" | null | undefined;
583
+ variant?: "link" | "primary" | "secondary" | "destructive" | "field" | "outline" | "ghost" | "floating" | "on-color" | "on-color-outline" | "on-color-ghost" | null | undefined;
584
584
  size?: "icon" | "sm" | "md" | "xs" | "cta" | "icon-sm" | "icon-xs" | null | undefined;
585
585
  } & class_variance_authority_types.ClassProp) | undefined) => string;
586
586
 
@@ -1479,7 +1479,9 @@ interface InputProps$1 extends Omit<ComponentPropsWithRef<"input">, "size"> {
1479
1479
  }
1480
1480
  /**
1481
1481
  * Input — a styled native `<input>`. Soft-square (rounded-sm, 8px), never a pill.
1482
- * Sits on the card surface with a 1px input border; focus raises a 2px ring.
1482
+ * Wears the theme's field surface (`field` fill, 1px `field-border` outline — outlined
1483
+ * on the card by default, a filled well in a theme that fills its fields); focus
1484
+ * raises a 2px ring.
1483
1485
  * Set `aria-invalid` (Base UI form fields do this for you) to surface the
1484
1486
  * destructive error treatment on border + ring.
1485
1487
  *
@@ -1548,7 +1550,7 @@ interface TextareaProps extends ComponentPropsWithRef<"textarea"> {
1548
1550
  }
1549
1551
  /**
1550
1552
  * Textarea — a styled native multi-line text control. Soft-square (rounded-sm,
1551
- * like all inputs, never a pill). Sits on the card surface with a 1px input
1553
+ * like all inputs, never a pill). Sits on the field surface with a 1px field
1552
1554
  * border; the focus ring uses the --ring token. Set `aria-invalid` to surface
1553
1555
  * the destructive error treatment on border + ring (same as Input). Pass `autoResize` to grow with content.
1554
1556
  *
@@ -2625,6 +2627,12 @@ type RootProps$3 = Omit<ComponentProps<typeof Meter$1.Root>, "className"> & {
2625
2627
  strokeWidth?: number;
2626
2628
  /** Print the value in the ring's centre. */
2627
2629
  showValue?: boolean;
2630
+ /**
2631
+ * Draw the bar as this many separate ticks instead of a continuous fill —
2632
+ * a quota, score or spend limit read at a glance (▮▮▮▮▮▮▯▯▯▯). Any reading
2633
+ * above `min` fills at least one tick. Bar only: ignored for `shape="ring"`.
2634
+ */
2635
+ segments?: number;
2628
2636
  };
2629
2637
  /**
2630
2638
  * Meter — a static measurement within a known range, over Base UI's Meter.
@@ -2646,8 +2654,10 @@ type RootProps$3 = Omit<ComponentProps<typeof Meter$1.Root>, "className"> & {
2646
2654
  * </Meter>
2647
2655
  *
2648
2656
  * `shape="ring"` draws the same measurement as a circular gauge (it was Gauge).
2657
+ * `segments={20}` draws the bar as a row of ticks — a spend limit or a score
2658
+ * read at a glance (bar only).
2649
2659
  */
2650
- declare function Meter({ className, children, tone, shape, size, strokeWidth, showValue, ...props }: RootProps$3): react.JSX.Element;
2660
+ declare function Meter({ className, children, tone, shape, size, strokeWidth, showValue, segments, ...props }: RootProps$3): react.JSX.Element;
2651
2661
  declare namespace Meter {
2652
2662
  var displayName: string;
2653
2663
  }
@@ -2656,7 +2666,11 @@ type TrackProps$1 = Omit<ComponentProps<typeof Meter$1.Track>, "className"> & {
2656
2666
  /** Bar thickness. Inherits the Meter's `size` unless set here. @default "md" */
2657
2667
  size?: MeterSize;
2658
2668
  };
2659
- /** The rail. Renders a MeterIndicator child by default. */
2669
+ /**
2670
+ * The rail. Renders a MeterIndicator child by default — or, when the Meter has
2671
+ * `segments`, its row of ticks (children are not rendered then: there is no
2672
+ * single fill to put in it).
2673
+ */
2660
2674
  declare function MeterTrack({ className, children, size, ...props }: TrackProps$1): react.JSX.Element;
2661
2675
  declare namespace MeterTrack {
2662
2676
  var displayName: string;
@@ -2836,9 +2850,9 @@ declare const CHART_SERIES_COUNT = 8;
2836
2850
  declare function chartColor(index: number): string;
2837
2851
  /**
2838
2852
  * The CSS colour for a tone as a chart fill — for a series that names its role
2839
- * (`tone: "success"`), not for default series (see chartColor). Tones are
2840
- * tuned to be legible as TEXT (dark, restrained); a plotted mark keeps the hue
2841
- * but is lifted into the chart lightness band with a chroma floor, so a quiet
2853
+ * (`tone: "success"`), not for default series (see chartColor). Status and
2854
+ * decorative tones plot at graphic strength (their `-mark` tokens, which each
2855
+ * theme tunes), held in the chart lightness band with a chroma floor, so a quiet
2842
2856
  * tone (a slate "3") still reads as colour rather than grey.
2843
2857
  */
2844
2858
  declare function toneColor(tone: ChartTone): string;
@@ -4789,7 +4803,16 @@ interface ComboboxItemGroup<Item = unknown> {
4789
4803
  /** The rows under it. */
4790
4804
  items: readonly Item[];
4791
4805
  }
4792
- type ComboboxProps<Value, Multiple extends boolean | undefined = false> = ComboboxRootProps<Value, Multiple>;
4806
+ type ComboboxProps<Value, Multiple extends boolean | undefined = false> = ComboboxRootProps<Value, Multiple> & {
4807
+ /**
4808
+ * Paint the typed text wherever it appears in a row's label, on the
4809
+ * `highlight` token pair. Only typed text: a field that still holds the
4810
+ * selected item's label lists everything, and lighting that label in every
4811
+ * row would mark matches nobody searched for. See useMatchHighlight.
4812
+ * @default true
4813
+ */
4814
+ highlightMatches?: boolean;
4815
+ };
4793
4816
  /**
4794
4817
  * Root of the combobox. Owns selection, input value, filtering and open state —
4795
4818
  * all of it Base UI's, passed straight through.
@@ -4800,7 +4823,7 @@ type ComboboxProps<Value, Multiple extends boolean | undefined = false> = Combob
4800
4823
  * highlight is forwarded to the virtual list, which knows every row's offset
4801
4824
  * whether or not it exists. Your own `onItemHighlighted` still fires, first.
4802
4825
  */
4803
- declare function Combobox<Value, Multiple extends boolean | undefined = false>({ onItemHighlighted, ...props }: ComboboxProps<Value, Multiple>): react.JSX.Element;
4826
+ declare function Combobox<Value, Multiple extends boolean | undefined = false>({ onItemHighlighted, onInputValueChange, highlightMatches, ...props }: ComboboxProps<Value, Multiple>): react.JSX.Element;
4804
4827
  declare const ComboboxValue: typeof Combobox$1.Value;
4805
4828
  declare const ComboboxClear: react.ForwardRefExoticComponent<Omit<_base_ui_react.AutocompleteClearProps, "ref"> & react.RefAttributes<HTMLButtonElement>>;
4806
4829
  declare const ComboboxPortal: {
@@ -4879,7 +4902,7 @@ type ContentProps$2 = Omit<ComponentProps<typeof Combobox$1.Popup>, "className">
4879
4902
  * callers pass items/children directly. Defaults to the `bottom` side, `start`
4880
4903
  * aligned, 6px offset; matches the input width via `--anchor-width`.
4881
4904
  */
4882
- declare function ComboboxContent({ className, children, side, align, sideOffset, scroll, ...props }: ContentProps$2): react.JSX.Element;
4905
+ declare function ComboboxContent({ className, children, side, align, sideOffset, scroll, ref, ...props }: ContentProps$2): react.JSX.Element;
4883
4906
  type ItemProps$1 = Omit<ComponentProps<typeof Combobox$1.Item>, "className"> & {
4884
4907
  className?: string;
4885
4908
  };
@@ -6122,6 +6145,9 @@ declare function hueColor(h: number): string;
6122
6145
 
6123
6146
  declare const colorFieldMeta: ComponentMeta;
6124
6147
 
6148
+ /** How AppShell frames its main content on desktop. See `AppShellProps.frame`. */
6149
+ type AppShellFrame = "flush" | "inset";
6150
+
6125
6151
  interface AppShellProps extends Omit<ComponentProps<"div">, "title"> {
6126
6152
  /**
6127
6153
  * Full-width status banners pinned above the frame (offline / chain-down).
@@ -6154,6 +6180,23 @@ interface AppShellProps extends Omit<ComponentProps<"div">, "title"> {
6154
6180
  dock?: ReactNode;
6155
6181
  /** Floating overlays (a message launcher, FAB, modal mount points). */
6156
6182
  overlays?: ReactNode;
6183
+ /**
6184
+ * How the desktop frame (`lg` and up) holds the content. Below `lg` the two
6185
+ * are identical: mobile header, plain main, page scroll, bottom nav.
6186
+ * - `flush` (default) — main sits directly on the page beside the rail and
6187
+ * the document scrolls.
6188
+ * - `inset` — the shell's ground (`shell-ground`, one step off the rail's
6189
+ * surface) holds the rail and the gap, and main
6190
+ * is a raised, rounded, bordered panel inset from the window edges that
6191
+ * scrolls inside itself while the rail stays put. For dense, multi-pane
6192
+ * product apps. The Sidebar in the `sidebar` slot reads the frame (see
6193
+ * `app-shell-frame.tsx`), drops its right border — the gap is the divider
6194
+ * now — and fills the body row. Pair it with `surface="rail"`; with
6195
+ * `surface="page"` the ground turns page-coloured and the panel's border
6196
+ * alone lifts it.
6197
+ * @default "flush"
6198
+ */
6199
+ frame?: AppShellFrame;
6157
6200
  /** Main content. */
6158
6201
  children?: ReactNode;
6159
6202
  }
@@ -6165,7 +6208,9 @@ interface AppShellProps extends Omit<ComponentProps<"div">, "title"> {
6165
6208
  * It is layout-agnostic about the breakpoint switch: each slot component owns
6166
6209
  * its own `hidden`/`lg:*` visibility (Sidebar is `hidden lg:flex`, AppHeader and
6167
6210
  * BottomNav are `lg:hidden`), so the same shell drives mobile and desktop. The
6168
- * only coupling AppShell adds is reserving bottom space for a fixed `bottomNav`.
6211
+ * only couplings AppShell adds are reserving bottom space for a fixed
6212
+ * `bottomNav` and, with `frame="inset"`, telling the Sidebar in its slot to drop
6213
+ * its border and fill the row (`AppShellFrameProvider`, app-shell-frame.tsx).
6169
6214
  *
6170
6215
  * <AppShell
6171
6216
  * banners={<NetworkBanner />}
@@ -6176,7 +6221,7 @@ interface AppShellProps extends Omit<ComponentProps<"div">, "title"> {
6176
6221
  * <Region max="feed">…</Region>
6177
6222
  * </AppShell>
6178
6223
  */
6179
- declare function AppShell({ banners, header, sidebar, bottomNav, dock, overlays, className, children, ...rest }: AppShellProps): react.JSX.Element;
6224
+ declare function AppShell({ banners, header, sidebar, bottomNav, dock, overlays, frame, className, children, ...rest }: AppShellProps): react.JSX.Element;
6180
6225
  declare namespace AppShell {
6181
6226
  var displayName: string;
6182
6227
  }
@@ -6253,6 +6298,12 @@ interface SidebarProps extends ComponentPropsWithRef<"aside"> {
6253
6298
  * - `page` — the page's own surface and ink, no border. Use it when a
6254
6299
  * full-width header sits above the rail: a tinted column that starts
6255
6300
  * under a page-coloured bar reads as pasted on, not as chrome.
6301
+ *
6302
+ * Inside `<AppShell frame="inset">` the rail's surface is also the shell's
6303
+ * ground, so from `lg` the `rail` border is dropped (the gap around the main
6304
+ * panel divides them) and the rail fills the shell's body row rather than
6305
+ * sizing itself to the viewport. AppShell signals this through its
6306
+ * `sidebar` slot only (`useAppShellFrame`), so a rail elsewhere is unaffected.
6256
6307
  * @default "rail"
6257
6308
  */
6258
6309
  surface?: "rail" | "page";
@@ -6598,7 +6649,7 @@ interface SearchInputProps extends Omit<ComponentPropsWithRef<"input">, "onChang
6598
6649
  }
6599
6650
  /**
6600
6651
  * SearchInput — a styled search field with a leading magnifier and a clearable
6601
- * X. Soft-square (rounded-sm), card surface, 2px focus ring — same shell as
6652
+ * X. Soft-square (rounded-sm), field surface, 2px focus ring — same shell as
6602
6653
  * Input, padded to make room for the leading and trailing affordances. The
6603
6654
  * clear button only renders while the value is non-empty.
6604
6655
  *
@@ -7705,6 +7756,14 @@ interface CommandMenuProps extends Omit<ComponentPropsWithRef<"div">, "title"> {
7705
7756
  * self-filtering — if you own which rows exist, you own all of them.
7706
7757
  */
7707
7758
  filter?: CommandFilter;
7759
+ /**
7760
+ * Paint the query wherever it appears in a row's label, on the `highlight`
7761
+ * token pair. A literal, case-insensitive match — so under a fuzzy `filter`
7762
+ * a row that matched as a subsequence keeps an unpainted label, which is
7763
+ * honest: nothing in it reads as the query. See useMatchHighlight.
7764
+ * @default true
7765
+ */
7766
+ highlightMatches?: boolean;
7708
7767
  /**
7709
7768
  * Classes for the scrolling list, which is a `Scroller` — so `className`
7710
7769
  * (which lands on the dialog surface) cannot reach it, and the list's own
@@ -7793,7 +7852,7 @@ type CommandMenuPanelProps = Omit<CommandMenuProps, "open" | "onOpenChange" | "f
7793
7852
  * top-aligned Dialog with a combobox search header and a scrollable listbox of
7794
7853
  * command options.
7795
7854
  */
7796
- declare function CommandMenu({ open, onOpenChange, items, query: queryProp, onQueryChange, filter, listClassName, placeholder, emptyMessage, title, description, finalFocus, scope, inputProps, children, className, ...props }: CommandMenuProps): react.JSX.Element;
7855
+ declare function CommandMenu({ open, onOpenChange, items, query: queryProp, onQueryChange, filter, highlightMatches, listClassName, placeholder, emptyMessage, title, description, finalFocus, scope, inputProps, children, className, ...props }: CommandMenuProps): react.JSX.Element;
7797
7856
  /**
7798
7857
  * The same palette rendered in place: search header, filtered and grouped
7799
7858
  * listbox, the full keyboard model — on a card in the page instead of in a
@@ -7807,7 +7866,7 @@ declare function CommandMenu({ open, onOpenChange, items, query: queryProp, onQu
7807
7866
  * once the query is empty, so a Popover around the panel still closes on it.
7808
7867
  * Choosing a row runs its onSelect and leaves the panel as it was.
7809
7868
  */
7810
- declare function CommandMenuPanel({ items, query: queryProp, onQueryChange, filter, listClassName, placeholder, emptyMessage, title, scope, inputProps, children, className, ...props }: CommandMenuPanelProps): react.JSX.Element;
7869
+ declare function CommandMenuPanel({ items, query: queryProp, onQueryChange, filter, highlightMatches, listClassName, placeholder, emptyMessage, title, scope, inputProps, children, className, ...props }: CommandMenuPanelProps): react.JSX.Element;
7811
7870
  interface CommandMenuGroupProps extends Omit<ComponentPropsWithRef<"div">, "title"> {
7812
7871
  /** Group heading shown above the items. */
7813
7872
  label: string;
@@ -7887,7 +7946,7 @@ interface CommandMenuTriggerProps extends Omit<ComponentPropsWithRef<"button">,
7887
7946
  }
7888
7947
  /**
7889
7948
  * CommandMenuTrigger — the search field in a header that is really a button:
7890
- * it wears SearchInput's shell (border-input, card surface, leading magnifier,
7949
+ * it wears SearchInput's shell (the field fill and outline, leading magnifier,
7891
7950
  * muted placeholder) and opens a `CommandMenu` on click or on ⌘K / Ctrl+K.
7892
7951
  *
7893
7952
  * const [open, setOpen] = useState(false)
@@ -8497,6 +8556,8 @@ type ArtVariant = "mesh" | "grain";
8497
8556
 
8498
8557
  /** The decorative tones art can be painted from — the palette's `--tone-*` family. */
8499
8558
  type ArtTone = "info" | "3" | "2" | "1" | "warning";
8559
+ /** How strongly the art is painted: the preset's art as-is, or a pastel wash of it. */
8560
+ type ArtIntensity = "vivid" | "soft";
8500
8561
  interface GradientArtProps extends ComponentProps<"div"> {
8501
8562
  /**
8502
8563
  * `mesh` (default) — soft spots of colour pulled together by gentle waves
@@ -8515,6 +8576,14 @@ interface GradientArtProps extends ComponentProps<"div"> {
8515
8576
  * item keeps its own look across renders and reloads.
8516
8577
  */
8517
8578
  seed?: string | number;
8579
+ /**
8580
+ * `vivid` (default) paints the preset's art at full strength. `soft` turns
8581
+ * every colour and the ground into a light pastel of itself — a wash to
8582
+ * stage white chips, logo tiles or a card's header band on, in light and
8583
+ * dark alike. It is a light ground: put content on a card or chip over it,
8584
+ * not overlay-foreground text straight on it.
8585
+ */
8586
+ intensity?: ArtIntensity;
8518
8587
  }
8519
8588
  /**
8520
8589
  * GradientArt — placeholder artwork painted from the theme's art direction:
@@ -8531,7 +8600,7 @@ interface GradientArtProps extends ComponentProps<"div"> {
8531
8600
  *
8532
8601
  * Children render above the art: initials, a play glyph, a caption.
8533
8602
  */
8534
- declare function GradientArt({ variant, tones, seed, className, style, children, ...props }: GradientArtProps): react.JSX.Element;
8603
+ declare function GradientArt({ variant, tones, seed, intensity, className, style, children, ...props }: GradientArtProps): react.JSX.Element;
8535
8604
  declare namespace GradientArt {
8536
8605
  var displayName: string;
8537
8606
  }
@@ -9684,6 +9753,45 @@ declare function usePresentation(): Presentation;
9684
9753
  */
9685
9754
  declare function useScrollActivity(): (node: HTMLElement | null) => void;
9686
9755
 
9756
+ /**
9757
+ * useMatchHighlight — paint every occurrence of a query inside a region, without
9758
+ * touching the region's DOM.
9759
+ *
9760
+ * const results = useMatchHighlight<HTMLUListElement>(query)
9761
+ * <SearchInput value={query} onValueChange={setQuery} />
9762
+ * <ul ref={results}>{rows}</ul>
9763
+ *
9764
+ * The obvious way to mark a match is to split the label around it and wrap the
9765
+ * hit in a `<mark>`. That means every row renders its label as three nodes, the
9766
+ * component owning the row has to know the query, and the text a screen reader
9767
+ * walks is cut into fragments. The CSS Custom Highlight API marks a Range
9768
+ * instead: the text nodes stay exactly as React rendered them, and the paint is
9769
+ * `::highlight(sable-match)` in styles.css, on the `highlight` token pair —
9770
+ * whose stated intent is search hits.
9771
+ *
9772
+ * Returns a callback ref rather than taking a ref object, because the regions
9773
+ * this is for (a popup list, a results panel) usually mount after the component
9774
+ * holding the query does, and an effect keyed on the query never sees a ref
9775
+ * object fill in.
9776
+ *
9777
+ * Matching is case-insensitive and literal, within one text node: a match split
9778
+ * across elements (`<b>Re</b>port`) is not painted. That is the same text the
9779
+ * built-in filters compare, so whatever survives a substring filter is lit.
9780
+ * `selector` narrows the search to parts of the region — a row's label and not
9781
+ * its shortcut hint.
9782
+ *
9783
+ * Purely visual, and that is fine here: the query is already in the field, and
9784
+ * the row's accessible name is unchanged. Where the API is missing it does
9785
+ * nothing at all.
9786
+ */
9787
+ declare function useMatchHighlight<T extends Element = HTMLElement>(query: string, options?: UseMatchHighlightOptions): (element: T | null) => void;
9788
+ interface UseMatchHighlightOptions {
9789
+ /** Only search inside elements matching this, within the region. */
9790
+ selector?: string;
9791
+ /** Turn the paint off without unmounting anything. @default true */
9792
+ enabled?: boolean;
9793
+ }
9794
+
9687
9795
  interface UseCopyOptions {
9688
9796
  /** How long `copied` stays true after a successful copy, in ms. @default 1500 */
9689
9797
  timeout?: number;
@@ -9772,6 +9880,6 @@ interface SmoothWheelOptions {
9772
9880
  */
9773
9881
  declare function useSmoothWheel({ axis, mapVertical, smooth, }?: SmoothWheelOptions): (node: HTMLElement | null) => void;
9774
9882
 
9775
- declare const SABLE_UI_VERSION: "0.15.0";
9883
+ declare const SABLE_UI_VERSION: "0.16.0";
9776
9884
 
9777
- export { Accordion, AccordionItem, AccordionPanel, AccordionTrigger, AlertDialog, AlertDialogClose, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogOverlay, AlertDialogTitle, AlertDialogTrigger, AppHeader, type AppHeaderProps, AppShell, type AppShellProps, AreaChart, type AreaChartProps, type ArtTone, Attachment, type AttachmentProps, Avatar, AvatarFallback, AvatarGroup, AvatarGroupCount, type AvatarGroupCountProps, type AvatarGroupProps, AvatarImage, type AvatarProps, AvatarRoot, BADGE_APPEARANCES, BADGE_TONES, Badge, type BadgeAppearance, type BadgeProps, type BadgeTone, Banner, type BannerProps, BarChart, type BarChartProps, BottomNav, BottomNavItem, type BottomNavItemProps, BreadcrumbItem, type BreadcrumbItemProps, BreadcrumbLink, type BreadcrumbLinkProps, BreadcrumbPage, type BreadcrumbPageProps, BreadcrumbSeparator, type BreadcrumbSeparatorProps, Breadcrumbs, type BreadcrumbsProps, Browser, type BrowserProps, Bubble, type BubbleProps, BubbleReaction, BubbleReactionAdd, type BubbleReactionAddProps, type BubbleReactionProps, BubbleReactions, type BubbleReactionsProps, Burst, type BurstProps, Button, type ButtonBleed, ButtonGroup, type ButtonGroupProps, type ButtonProps, CHART_SERIES_COUNT, COMPONENT_GROUPS, COMPONENT_TAXONOMY, Calendar, type CalendarProps, Card, CardAction, CardContent, type CardContentProps, CardDescription, CardFooter, type CardFooterProps, CardHeader, CardList, type CardProps, CardTitle, type CardTitleProps, CaretMenu, CaretMenuItem, type CaretMenuItemProps, type CaretMenuProps, type CaretTrigger, type CaretTriggerField, type CaretTriggerMatch, Carousel, type CarouselProps, type CarouselSlidesToShow, type ChartCategories, type ChartCenterLabel, type ChartCurve, type ChartDatum, type ChartSeries, type ChartTone, type ChartTooltipIndicator, type ChartTooltipOptions, type ChartValueFormatter, ChatComposer, type ChatComposerProps, Checkbox, CheckboxCard, type CheckboxCardProps, type CheckboxCardTone, CheckboxGroup, type CheckboxGroupProps, Code, CodeBlock, type CodeBlockProps, CodeHighlightProvider, type CodeHighlighter, type CodeProps, Collapsible, CollapsibleIndicator, CollapsiblePanel, CollapsibleTrigger, ColorField, type ColorFieldProps, Combobox, ComboboxChips, ComboboxClear, ComboboxContent, ComboboxEmpty, ComboboxGroup, ComboboxGroupLabel, ComboboxInput, ComboboxItem, type ComboboxItemGroup, ComboboxItemIndicator, ComboboxList, ComboboxPortal, type ComboboxProps, ComboboxValue, ComboboxVirtualList, type ComboboxVirtualListProps, type CommandFilter, type CommandItem, CommandMenu, CommandMenuGroup, type CommandMenuGroupProps, CommandMenuItem, type CommandMenuItemProps, CommandMenuPanel, type CommandMenuPanelProps, type CommandMenuProps, CommandMenuTrigger, type CommandMenuTriggerProps, type ComponentGroup, type ComponentGuidance, ComponentMeta, type ComponentRegister, ConfirmButton, type ConfirmButtonProps, type ConstraintFlag, ContextCard, ContextCardArrow, ContextCardContent, ContextCardPortal, ContextCardTrigger, ContextMenu, ContextMenuContent, ContextMenuGroup, ContextMenuGroupLabel, ContextMenuItem, ContextMenuPortal, ContextMenuSeparator, ContextMenuTrigger, type CopySource, DEFAULT_REACTIONS, DataTable, type DataTableColumn, type DataTableProps, type DataTableRowKey, DatePicker, type DatePickerProps, DateTile, type DateTileProps, Density, DensityProvider, Density as DensityValue, DestructiveActionModal, type DestructiveActionModalProps, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, type DialogSize, DialogTitle, DialogTrigger, DisclosurePicker, DisclosurePickerEmpty, DisclosurePickerList, type DisclosurePickerListProps, DisclosurePickerOption, type DisclosurePickerOptionProps, DisclosurePickerPanel, type DisclosurePickerPanelProps, type DisclosurePickerProps, type DisclosurePickerSearch, DisclosurePickerTrigger, type DisclosurePickerTriggerProps, EmptyState, type EmptyStateProps, Entity, type EntityProps, Feedback, type FeedbackData, type FeedbackProps, type FeedbackRating, Field, type FieldProps, Fieldset, FieldsetContent, FieldsetDescription, FieldsetFooter, FieldsetLegend, type FieldsetVariant, FileDropzone, type FileDropzoneProps, type FileRejection, type FileRejectionCode, FontPicker, type FontPickerFont, type FontPickerOption, type FontPickerProps, Form, type FormProps, GlidingHighlight, type GlidingHighlightProps, GradientArt, type GradientArtProps, type Hsv, InlineStatus, type InlineStatusProps, type StatusTone as InlineTone, Input, InputGroup, type InputGroupProps, type InputProps$1 as InputProps, Kbd, KbdGroup, type KbdGroupProps, type KbdProps, Label, type LabelProps$2 as LabelProps, LikeButton, type LikeButtonProps, LineChart, type LineChartProps, Marker, type MarkerProps, Marquee, type MarqueeProps, MediaImage, type MediaImageProps, MediaTile, type MediaTileProps, Menu, MenuCheckboxItem, MenuContent, MenuGroup, MenuGroupLabel, MenuItem, MenuLinkItem, MenuPortal, MenuRadioGroup, MenuRadioItem, MenuReactions, type MenuReactionsProps, MenuSeparator, MenuSubmenu, MenuSubmenuTrigger, MenuTrigger, Menubar, type MenubarProps, MenubarTrigger, type MenubarTriggerProps, Message, type MessageProps, MessageScroller, type MessageScrollerHandle, type MessageScrollerProps, Meter, MeterIndicator, MeterLabel, type MeterSize, type MeterTone, MeterTrack, MeterValue, MiddleTruncate, type MiddleTruncateProps, type MotionLevel, type MotionPolicy, MotionProvider, type MotionProviderProps, MotionScope, type MotionScopeProps, NavigationMenu, NavigationMenuContent, NavigationMenuItem, NavigationMenuLink, NavigationMenuList, NavigationMenuTrigger, Note, type NoteAction, type NoteProps, NotificationBadge, type NotificationBadgeProps, NumberField, type NumberFieldProps, NumberTicker, type NumberTickerProps, type OrbMode, type OrbSize, OtpField, type OtpFieldProps, OverflowMenu, type OverflowMenuProps, PALETTE_COLORS, PALETTE_FAMILIES, PALETTE_SCALES, PALETTE_STEPS, PALETTE_TONES, PageHeader, type PageHeaderProps, PageLoader, type PageLoaderProps, Pagination, type PaginationProps, type PaletteColor, type PaletteFamily, type PaletteStep, Panel, PanelGroup, PanelResizer, type PanelResizerProps, PanelSection, type PanelWidthBounds, Phone, type PhoneProps, PieChart, type PieChartProps, Pill, type PillProps, Popover, PopoverArrow, PopoverClose, PopoverContent, PopoverDescription, PopoverPortal, PopoverTitle, PopoverTrigger, Presence, type PresenceProps, type Presentation, PresentationProvider, Progress, ProgressIndicator, ProgressLabel, type ProgressSize, ProgressTrack, ProgressValue, PropertyGroup, PropertyPair, PropertyRow, RadarChart, type RadarChartProps, RadialChart, type RadialChartProps, Radio, RadioCard, type RadioCardProps, type RadioCardTone, RadioGroup, type Reaction, ReactionPicker, type ReactionPickerProps, RelativeTime, type RelativeTimeProps, Reveal, type RevealProps, type Rgb, SABLE_UI_VERSION, SEGMENTED_BAR_TONES, STATUS_TONES, STATUS_TONE_ICON, type ScrollCommandOptions, Scroller, type ScrollerProps, ScrubField, type ScrubFieldProps, SearchInput, type SearchInputProps, SectionHeader, type SectionHeaderProps, SegmentedBar, type SegmentedBarProps, type SegmentedBarSegment, type SegmentedBarTone, Select, SelectContent, SelectGroup, SelectGroupLabel, SelectItem, SelectPortal, SelectSeparator, SelectTrigger, SelectValue, Separator, type SeparatorProps$2 as SeparatorProps, SettingsMenu, type SettingsMenuProps, SettingsRow, type SettingsRowProps, Sheet, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetList, SheetPortal, type SheetProps, type SheetSnapPoint, SheetTitle, SheetTrigger, ShowMore, type ShowMoreProps, SideNav, type SideNavActiveVariant, SideNavGroup, type SideNavGroupProps, SideNavItem, type SideNavItemProps, type SideNavProps, type SideNavSize, Sidebar, SidebarBrand, type SidebarBrandProps, SidebarFooter, SidebarHeader, SidebarItem, type SidebarItemProps, SidebarNav, type SidebarProps, SimpleTooltip, Skeleton, SkipLink, Slider, SliderControl, SliderIndicator, SliderRoot, SliderThumb, SliderTrack, SliderValue, type SmoothWheelOptions, Sparkline, type SparklineProps, Spinner, type SpinnerProps, StatusBar, StatusBarGroup, StatusBarSeparator, StatusDot, type StatusDotProps, type StatusTone, type StepStatus, Stepper, StepperItem, type StepperItemProps, type StepperOrientation, type StepperProps, StreamingText, type StreamingTextProps, Switch, TOOL_CALL_STATUS_LABELS, TRANSPARENT, Table, TableBody, TableCaption, TableCell, TableFooter, TableHead, TableHeader, TableRow, Tabs, TabsPanel as TabsContent, TabsList, TabsPanel, TabsTrigger, TextReveal, type TextRevealProps, Textarea, type TextareaProps, ThemeId, ThemeManifest, ThemeMode$1 as ThemeManifestMode, type ThemeMode, ThemePreview, type ThemePreviewProps, ThemeSelector, type ThemeSelectorProps, ThemeSwitcher, type ThemeSwitcherProps, ThinkingOrb, type ThinkingOrbProps, ToastAction, type ToastApi, ToastClose, ToastContent, ToastDescription, type ToastManagerApi, type ToastOptions, type ToastPosition, ToastProvider, type ToastProviderProps, ToastRoot, ToastTitle, type ToastType, ToastViewport, Toggle, ToggleGroup, type ToggleGroupAppearance, Toggle as ToggleGroupItem, ToolCall, type ToolCallProps, type ToolCallStatus, Toolbar, ToolbarButton, type ToolbarButtonProps, ToolbarGroup, type ToolbarGroupProps, ToolbarInput, type ToolbarInputProps, ToolbarLink, type ToolbarLinkProps, type ToolbarProps, ToolbarSeparator, type ToolbarSeparatorProps, Tooltip, TooltipArrow, TooltipContent, TooltipGroup, type TooltipGroupProps, TooltipPortal, TooltipProvider, TooltipTrigger, Tree, TreeAddRow, TreeEmpty, TreeRow, TreeSection, type UseCaretTriggerOptions, type UseCaretTriggerResult, type UseCopyOptions, type UseCopyResult, type UseInViewOptions, type UsePanelWidthOptions, Video, type VideoProps, ViewTransitionName, type ViewTransitionNameProps, Workspace, WorkspaceBar, WorkspaceCanvas, accordionMeta, appHeaderMeta, appShellMeta, areaChartMeta, attachmentMeta, avatarGroupVariants, avatarMeta, avatarVariants, badgeMeta, badgeVariants, bannerMeta, bannerVariants, barChartMeta, bottomNavMeta, breadcrumbsMeta, browserMeta, bubbleMeta, buttonGroupMeta, buttonMeta, buttonVariants, calendarMeta, cardMeta, caretMenuMeta, carouselMeta, chartColor, toneColor as chartToneColor, chatComposerMeta, checkboxCardMeta, checkboxMeta, cn, codeBlockMeta, codeMeta, collapsibleMeta, colorFieldMeta, comboboxMeta, commandMenuMeta, componentGuidance, componentLabel, componentSlug, componentsInGroup, confirmButtonMeta, contextCardMeta, contextMenuMeta, dataTableMeta, datePickerMeta, dateTileMeta, destructiveActionModalMeta, dialogMeta, disclosurePickerMeta, emptyStateMeta, entityMeta, feedbackMeta, fieldsetMeta, fileDropzoneMeta, fileDropzoneVariants, fontPickerMeta, formMeta, formatFileSize, formatHex, glidingHighlightMeta, gradientArtMeta, hsvToRgb, hueColor, inlineStatusMeta, inputGroupMeta, inputMeta, isPaletteColor, isTransparent, kbdMeta, labelMeta, likeButtonMeta, lineChartMeta, markerMeta, marqueeMeta, mediaImageMeta, mediaTileMeta, menuMeta, menubarMeta, messageMeta, messageScrollerMeta, meterIndicatorVariants, meterMeta, meterTrackVariants, middleTruncateMeta, motionAttribute, navigationMenuMeta, noteMeta, noteVariants, notificationBadgeMeta, notificationCountVariants, notificationDotVariants, numberFieldMeta, numberTickerMeta, otpFieldMeta, overflowMenuMeta, pageHeaderMeta, pageLoaderMeta, paginationMeta, panelGroupMeta, panelSectionMeta, parseHex, phoneMeta, pieChartMeta, pillMeta, pillVariants, popoverMeta, progressMeta, progressTrackVariants, radarChartMeta, radialChartMeta, radioCardMeta, radioMeta, reactionPickerMeta, relativeTimeMeta, rgbToHsv, scrollerMeta, scrubFieldMeta, searchInputMeta, sectionHeaderMeta, segmentedBarMeta, segmentedBarSegmentVariants, segmentedBarVariants, selectMeta, separatorMeta, settingsMenuMeta, sheetMeta, sheetVariants, showMoreMeta, sideNavMeta, sidebarMeta, skeletonMeta, sliderMeta, sparklineMeta, spinnerMeta, startViewTransition, statusBarMeta, statusDotMeta, statusDotVariants, stepperConnectorVariants, stepperIndicatorVariants, stepperMeta, streamingTextMeta, supportsViewTransitions, switchMeta, tableMeta, tabsMeta, textareaMeta, themeSelectorMeta, themeSwitcherMeta, thinkingOrbMeta, toast, toastMeta, toggleMeta, toolCallMeta, toolbarGroupVariants, toolbarMeta, toolbarSeparatorVariants, toolbarVariants, tooltipMeta, treeIndent, treeMeta, useAnchoredDensity, useAutoSize, useCaretTrigger, useComboboxFilteredItems, useCommandMenuShortcut, useCopy, useDensity, useDisclosurePicker, useInView, useMotion, useMotionLevel, usePanelWidth, usePresentation, useReducedMotion, useScrollActivity, useShake, useSidebar, useSmoothWheel, useToast, useToastManager, useTypeTier, videoMeta, workspaceMeta };
9885
+ export { Accordion, AccordionItem, AccordionPanel, AccordionTrigger, AlertDialog, AlertDialogClose, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogOverlay, AlertDialogTitle, AlertDialogTrigger, AppHeader, type AppHeaderProps, AppShell, type AppShellProps, AreaChart, type AreaChartProps, type ArtIntensity, type ArtTone, Attachment, type AttachmentProps, Avatar, AvatarFallback, AvatarGroup, AvatarGroupCount, type AvatarGroupCountProps, type AvatarGroupProps, AvatarImage, type AvatarProps, AvatarRoot, BADGE_APPEARANCES, BADGE_TONES, Badge, type BadgeAppearance, type BadgeProps, type BadgeTone, Banner, type BannerProps, BarChart, type BarChartProps, BottomNav, BottomNavItem, type BottomNavItemProps, BreadcrumbItem, type BreadcrumbItemProps, BreadcrumbLink, type BreadcrumbLinkProps, BreadcrumbPage, type BreadcrumbPageProps, BreadcrumbSeparator, type BreadcrumbSeparatorProps, Breadcrumbs, type BreadcrumbsProps, Browser, type BrowserProps, Bubble, type BubbleProps, BubbleReaction, BubbleReactionAdd, type BubbleReactionAddProps, type BubbleReactionProps, BubbleReactions, type BubbleReactionsProps, Burst, type BurstProps, Button, type ButtonBleed, ButtonGroup, type ButtonGroupProps, type ButtonProps, CHART_SERIES_COUNT, COMPONENT_GROUPS, COMPONENT_TAXONOMY, Calendar, type CalendarProps, Card, CardAction, CardContent, type CardContentProps, CardDescription, CardFooter, type CardFooterProps, CardHeader, CardList, type CardProps, CardTitle, type CardTitleProps, CaretMenu, CaretMenuItem, type CaretMenuItemProps, type CaretMenuProps, type CaretTrigger, type CaretTriggerField, type CaretTriggerMatch, Carousel, type CarouselProps, type CarouselSlidesToShow, type ChartCategories, type ChartCenterLabel, type ChartCurve, type ChartDatum, type ChartSeries, type ChartTone, type ChartTooltipIndicator, type ChartTooltipOptions, type ChartValueFormatter, ChatComposer, type ChatComposerProps, Checkbox, CheckboxCard, type CheckboxCardProps, type CheckboxCardTone, CheckboxGroup, type CheckboxGroupProps, Code, CodeBlock, type CodeBlockProps, CodeHighlightProvider, type CodeHighlighter, type CodeProps, Collapsible, CollapsibleIndicator, CollapsiblePanel, CollapsibleTrigger, ColorField, type ColorFieldProps, Combobox, ComboboxChips, ComboboxClear, ComboboxContent, ComboboxEmpty, ComboboxGroup, ComboboxGroupLabel, ComboboxInput, ComboboxItem, type ComboboxItemGroup, ComboboxItemIndicator, ComboboxList, ComboboxPortal, type ComboboxProps, ComboboxValue, ComboboxVirtualList, type ComboboxVirtualListProps, type CommandFilter, type CommandItem, CommandMenu, CommandMenuGroup, type CommandMenuGroupProps, CommandMenuItem, type CommandMenuItemProps, CommandMenuPanel, type CommandMenuPanelProps, type CommandMenuProps, CommandMenuTrigger, type CommandMenuTriggerProps, type ComponentGroup, type ComponentGuidance, ComponentMeta, type ComponentRegister, ConfirmButton, type ConfirmButtonProps, type ConstraintFlag, ContextCard, ContextCardArrow, ContextCardContent, ContextCardPortal, ContextCardTrigger, ContextMenu, ContextMenuContent, ContextMenuGroup, ContextMenuGroupLabel, ContextMenuItem, ContextMenuPortal, ContextMenuSeparator, ContextMenuTrigger, type CopySource, DEFAULT_REACTIONS, DataTable, type DataTableColumn, type DataTableProps, type DataTableRowKey, DatePicker, type DatePickerProps, DateTile, type DateTileProps, Density, DensityProvider, Density as DensityValue, DestructiveActionModal, type DestructiveActionModalProps, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, type DialogSize, DialogTitle, DialogTrigger, DisclosurePicker, DisclosurePickerEmpty, DisclosurePickerList, type DisclosurePickerListProps, DisclosurePickerOption, type DisclosurePickerOptionProps, DisclosurePickerPanel, type DisclosurePickerPanelProps, type DisclosurePickerProps, type DisclosurePickerSearch, DisclosurePickerTrigger, type DisclosurePickerTriggerProps, EmptyState, type EmptyStateProps, Entity, type EntityProps, Feedback, type FeedbackData, type FeedbackProps, type FeedbackRating, Field, type FieldProps, Fieldset, FieldsetContent, FieldsetDescription, FieldsetFooter, FieldsetLegend, type FieldsetVariant, FileDropzone, type FileDropzoneProps, type FileRejection, type FileRejectionCode, FontPicker, type FontPickerFont, type FontPickerOption, type FontPickerProps, Form, type FormProps, GlidingHighlight, type GlidingHighlightProps, GradientArt, type GradientArtProps, type Hsv, InlineStatus, type InlineStatusProps, type StatusTone as InlineTone, Input, InputGroup, type InputGroupProps, type InputProps$1 as InputProps, Kbd, KbdGroup, type KbdGroupProps, type KbdProps, Label, type LabelProps$2 as LabelProps, LikeButton, type LikeButtonProps, LineChart, type LineChartProps, Marker, type MarkerProps, Marquee, type MarqueeProps, MediaImage, type MediaImageProps, MediaTile, type MediaTileProps, Menu, MenuCheckboxItem, MenuContent, MenuGroup, MenuGroupLabel, MenuItem, MenuLinkItem, MenuPortal, MenuRadioGroup, MenuRadioItem, MenuReactions, type MenuReactionsProps, MenuSeparator, MenuSubmenu, MenuSubmenuTrigger, MenuTrigger, Menubar, type MenubarProps, MenubarTrigger, type MenubarTriggerProps, Message, type MessageProps, MessageScroller, type MessageScrollerHandle, type MessageScrollerProps, Meter, MeterIndicator, MeterLabel, type MeterSize, type MeterTone, MeterTrack, MeterValue, MiddleTruncate, type MiddleTruncateProps, type MotionLevel, type MotionPolicy, MotionProvider, type MotionProviderProps, MotionScope, type MotionScopeProps, NavigationMenu, NavigationMenuContent, NavigationMenuItem, NavigationMenuLink, NavigationMenuList, NavigationMenuTrigger, Note, type NoteAction, type NoteProps, NotificationBadge, type NotificationBadgeProps, NumberField, type NumberFieldProps, NumberTicker, type NumberTickerProps, type OrbMode, type OrbSize, OtpField, type OtpFieldProps, OverflowMenu, type OverflowMenuProps, PALETTE_COLORS, PALETTE_FAMILIES, PALETTE_SCALES, PALETTE_STEPS, PALETTE_TONES, PageHeader, type PageHeaderProps, PageLoader, type PageLoaderProps, Pagination, type PaginationProps, type PaletteColor, type PaletteFamily, type PaletteStep, Panel, PanelGroup, PanelResizer, type PanelResizerProps, PanelSection, type PanelWidthBounds, Phone, type PhoneProps, PieChart, type PieChartProps, Pill, type PillProps, Popover, PopoverArrow, PopoverClose, PopoverContent, PopoverDescription, PopoverPortal, PopoverTitle, PopoverTrigger, Presence, type PresenceProps, type Presentation, PresentationProvider, Progress, ProgressIndicator, ProgressLabel, type ProgressSize, ProgressTrack, ProgressValue, PropertyGroup, PropertyPair, PropertyRow, RadarChart, type RadarChartProps, RadialChart, type RadialChartProps, Radio, RadioCard, type RadioCardProps, type RadioCardTone, RadioGroup, type Reaction, ReactionPicker, type ReactionPickerProps, RelativeTime, type RelativeTimeProps, Reveal, type RevealProps, type Rgb, SABLE_UI_VERSION, SEGMENTED_BAR_TONES, STATUS_TONES, STATUS_TONE_ICON, type ScrollCommandOptions, Scroller, type ScrollerProps, ScrubField, type ScrubFieldProps, SearchInput, type SearchInputProps, SectionHeader, type SectionHeaderProps, SegmentedBar, type SegmentedBarProps, type SegmentedBarSegment, type SegmentedBarTone, Select, SelectContent, SelectGroup, SelectGroupLabel, SelectItem, SelectPortal, SelectSeparator, SelectTrigger, SelectValue, Separator, type SeparatorProps$2 as SeparatorProps, SettingsMenu, type SettingsMenuProps, SettingsRow, type SettingsRowProps, Sheet, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetList, SheetPortal, type SheetProps, type SheetSnapPoint, SheetTitle, SheetTrigger, ShowMore, type ShowMoreProps, SideNav, type SideNavActiveVariant, SideNavGroup, type SideNavGroupProps, SideNavItem, type SideNavItemProps, type SideNavProps, type SideNavSize, Sidebar, SidebarBrand, type SidebarBrandProps, SidebarFooter, SidebarHeader, SidebarItem, type SidebarItemProps, SidebarNav, type SidebarProps, SimpleTooltip, Skeleton, SkipLink, Slider, SliderControl, SliderIndicator, SliderRoot, SliderThumb, SliderTrack, SliderValue, type SmoothWheelOptions, Sparkline, type SparklineProps, Spinner, type SpinnerProps, StatusBar, StatusBarGroup, StatusBarSeparator, StatusDot, type StatusDotProps, type StatusTone, type StepStatus, Stepper, StepperItem, type StepperItemProps, type StepperOrientation, type StepperProps, StreamingText, type StreamingTextProps, Switch, TOOL_CALL_STATUS_LABELS, TRANSPARENT, Table, TableBody, TableCaption, TableCell, TableFooter, TableHead, TableHeader, TableRow, Tabs, TabsPanel as TabsContent, TabsList, TabsPanel, TabsTrigger, TextReveal, type TextRevealProps, Textarea, type TextareaProps, ThemeId, ThemeManifest, ThemeMode$1 as ThemeManifestMode, type ThemeMode, ThemePreview, type ThemePreviewProps, ThemeSelector, type ThemeSelectorProps, ThemeSwitcher, type ThemeSwitcherProps, ThinkingOrb, type ThinkingOrbProps, ToastAction, type ToastApi, ToastClose, ToastContent, ToastDescription, type ToastManagerApi, type ToastOptions, type ToastPosition, ToastProvider, type ToastProviderProps, ToastRoot, ToastTitle, type ToastType, ToastViewport, Toggle, ToggleGroup, type ToggleGroupAppearance, Toggle as ToggleGroupItem, ToolCall, type ToolCallProps, type ToolCallStatus, Toolbar, ToolbarButton, type ToolbarButtonProps, ToolbarGroup, type ToolbarGroupProps, ToolbarInput, type ToolbarInputProps, ToolbarLink, type ToolbarLinkProps, type ToolbarProps, ToolbarSeparator, type ToolbarSeparatorProps, Tooltip, TooltipArrow, TooltipContent, TooltipGroup, type TooltipGroupProps, TooltipPortal, TooltipProvider, TooltipTrigger, Tree, TreeAddRow, TreeEmpty, TreeRow, TreeSection, type UseCaretTriggerOptions, type UseCaretTriggerResult, type UseCopyOptions, type UseCopyResult, type UseInViewOptions, type UseMatchHighlightOptions, type UsePanelWidthOptions, Video, type VideoProps, ViewTransitionName, type ViewTransitionNameProps, Workspace, WorkspaceBar, WorkspaceCanvas, accordionMeta, appHeaderMeta, appShellMeta, areaChartMeta, attachmentMeta, avatarGroupVariants, avatarMeta, avatarVariants, badgeMeta, badgeVariants, bannerMeta, bannerVariants, barChartMeta, bottomNavMeta, breadcrumbsMeta, browserMeta, bubbleMeta, buttonGroupMeta, buttonMeta, buttonVariants, calendarMeta, cardMeta, caretMenuMeta, carouselMeta, chartColor, toneColor as chartToneColor, chatComposerMeta, checkboxCardMeta, checkboxMeta, cn, codeBlockMeta, codeMeta, collapsibleMeta, colorFieldMeta, comboboxMeta, commandMenuMeta, componentGuidance, componentLabel, componentSlug, componentsInGroup, confirmButtonMeta, contextCardMeta, contextMenuMeta, dataTableMeta, datePickerMeta, dateTileMeta, destructiveActionModalMeta, dialogMeta, disclosurePickerMeta, emptyStateMeta, entityMeta, feedbackMeta, fieldsetMeta, fileDropzoneMeta, fileDropzoneVariants, fontPickerMeta, formMeta, formatFileSize, formatHex, glidingHighlightMeta, gradientArtMeta, hsvToRgb, hueColor, inlineStatusMeta, inputGroupMeta, inputMeta, isPaletteColor, isTransparent, kbdMeta, labelMeta, likeButtonMeta, lineChartMeta, markerMeta, marqueeMeta, mediaImageMeta, mediaTileMeta, menuMeta, menubarMeta, messageMeta, messageScrollerMeta, meterIndicatorVariants, meterMeta, meterTrackVariants, middleTruncateMeta, motionAttribute, navigationMenuMeta, noteMeta, noteVariants, notificationBadgeMeta, notificationCountVariants, notificationDotVariants, numberFieldMeta, numberTickerMeta, otpFieldMeta, overflowMenuMeta, pageHeaderMeta, pageLoaderMeta, paginationMeta, panelGroupMeta, panelSectionMeta, parseHex, phoneMeta, pieChartMeta, pillMeta, pillVariants, popoverMeta, progressMeta, progressTrackVariants, radarChartMeta, radialChartMeta, radioCardMeta, radioMeta, reactionPickerMeta, relativeTimeMeta, rgbToHsv, scrollerMeta, scrubFieldMeta, searchInputMeta, sectionHeaderMeta, segmentedBarMeta, segmentedBarSegmentVariants, segmentedBarVariants, selectMeta, separatorMeta, settingsMenuMeta, sheetMeta, sheetVariants, showMoreMeta, sideNavMeta, sidebarMeta, skeletonMeta, sliderMeta, sparklineMeta, spinnerMeta, startViewTransition, statusBarMeta, statusDotMeta, statusDotVariants, stepperConnectorVariants, stepperIndicatorVariants, stepperMeta, streamingTextMeta, supportsViewTransitions, switchMeta, tableMeta, tabsMeta, textareaMeta, themeSelectorMeta, themeSwitcherMeta, thinkingOrbMeta, toast, toastMeta, toggleMeta, toolCallMeta, toolbarGroupVariants, toolbarMeta, toolbarSeparatorVariants, toolbarVariants, tooltipMeta, treeIndent, treeMeta, useAnchoredDensity, useAutoSize, useCaretTrigger, useComboboxFilteredItems, useCommandMenuShortcut, useCopy, useDensity, useDisclosurePicker, useInView, useMatchHighlight, useMotion, useMotionLevel, usePanelWidth, usePresentation, useReducedMotion, useScrollActivity, useShake, useSidebar, useSmoothWheel, useToast, useToastManager, useTypeTier, videoMeta, workspaceMeta };
package/dist/index.js CHANGED
@@ -18,6 +18,9 @@ import {
18
18
  DENSITY_TOKENS,
19
19
  RHYTHM_TOKENS,
20
20
  WORKSPACE_SURFACE_TOKENS,
21
+ FIELD_TOKENS,
22
+ APP_SHELL_TOKENS,
23
+ MARK_TOKENS,
21
24
  ART_TOKENS,
22
25
  PALETTE_TOKENS,
23
26
  TYPE_UI_TOKENS
@@ -170,6 +173,7 @@ export * from "./components/marker/index.js";
170
173
  import { Density, DensityProvider, useDensity, useAnchoredDensity, useTypeTier } from "./lib/density.js";
171
174
  import { PresentationProvider, usePresentation } from "./lib/presentation.js";
172
175
  import { useScrollActivity } from "./lib/use-scroll-activity.js";
176
+ import { useMatchHighlight } from "./lib/use-match-highlight.js";
173
177
  import { useCopy } from "./lib/use-copy.js";
174
178
  import { useSmoothWheel } from "./lib/use-smooth-wheel.js";
175
179
  import {
@@ -177,8 +181,9 @@ import {
177
181
  } from "./lib/use-caret-trigger.js";
178
182
  import { STATUS_TONES, STATUS_TONE_ICON } from "./lib/status-tone.js";
179
183
  import { PALETTE_COLORS, PALETTE_FAMILIES, PALETTE_SCALES, PALETTE_STEPS, PALETTE_TONES, isPaletteColor } from "./lib/palette.js";
180
- var SABLE_UI_VERSION = "0.15.0";
184
+ var SABLE_UI_VERSION = "0.16.0";
181
185
  export {
186
+ APP_SHELL_TOKENS,
182
187
  ART_TOKENS,
183
188
  CHART_SERIES_COUNT,
184
189
  COMPONENT_GROUPS,
@@ -187,6 +192,8 @@ export {
187
192
  DENSITY_TOKENS,
188
193
  Density,
189
194
  DensityProvider,
195
+ FIELD_TOKENS,
196
+ MARK_TOKENS,
190
197
  MOTION_TOKENS,
191
198
  PALETTE_COLORS,
192
199
  PALETTE_FAMILIES,
@@ -231,6 +238,7 @@ export {
231
238
  useCaretTrigger,
232
239
  useCopy,
233
240
  useDensity,
241
+ useMatchHighlight,
234
242
  usePresentation,
235
243
  useSableTheme,
236
244
  useScrollActivity,
@@ -4,18 +4,18 @@ function chartColor(index) {
4
4
  return `var(--chart-${index % CHART_SERIES_COUNT + 1})`;
5
5
  }
6
6
  var TONE_VAR = {
7
- "1": "var(--tone-1)",
8
- "2": "var(--tone-2)",
9
- "3": "var(--tone-3)",
10
- info: "var(--tone-info)",
11
- warning: "var(--tone-warning)",
7
+ "1": "var(--tone-1-mark)",
8
+ "2": "var(--tone-2-mark)",
9
+ "3": "var(--tone-3-mark)",
10
+ info: "var(--tone-info-mark)",
11
+ warning: "var(--tone-warning-mark)",
12
12
  primary: "var(--primary)",
13
13
  neutral: "var(--muted-foreground)",
14
- success: "var(--success)",
15
- destructive: "var(--destructive)"
14
+ success: "var(--success-mark)",
15
+ destructive: "var(--destructive-mark)"
16
16
  };
17
17
  function toneColor(tone) {
18
- return `oklch(from ${TONE_VAR[tone]} clamp(0.5, calc(l + 0.1), 0.72) max(calc(c * 1.1), 0.1) h)`;
18
+ return `oklch(from ${TONE_VAR[tone]} clamp(0.5, l, 0.78) max(c, 0.1) h)`;
19
19
  }
20
20
  function resolveSeries(series) {
21
21
  return series.map((s, i) => ({
@@ -25,13 +25,14 @@ function useArrival() {
25
25
  cancelAnimationFrame(frame);
26
26
  frame = requestAnimationFrame(() => onScreen() && setArrived(true));
27
27
  };
28
- window.addEventListener("scroll", check, { passive: true, capture: true });
29
- window.addEventListener("resize", check, { passive: true });
28
+ const listeners = new AbortController();
29
+ const { signal } = listeners;
30
+ window.addEventListener("scroll", check, { passive: true, capture: true, signal });
31
+ window.addEventListener("resize", check, { passive: true, signal });
30
32
  return () => {
31
33
  observer.disconnect();
32
34
  cancelAnimationFrame(frame);
33
- window.removeEventListener("scroll", check, { capture: true });
34
- window.removeEventListener("resize", check);
35
+ listeners.abort();
35
36
  };
36
37
  }, [el, arrived]);
37
38
  return [ref, arrived];
@@ -1,5 +1,5 @@
1
1
  // src/lib/field-shell.ts
2
- var FIELD_SHELL = "rounded-sm border border-input bg-card motion-interactive placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50";
2
+ var FIELD_SHELL = "rounded-sm border border-field-border bg-field motion-interactive placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50";
3
3
  var MOBILE_FIELD_TIER = "max-sm:text-body-lg";
4
4
  var FIELD_INVALID = "aria-[invalid=true]:border-destructive aria-[invalid=true]:ring-destructive/30";
5
5
  var FIELD_SHELL_XS = "rounded-[var(--panel-field-radius,var(--radius-xs))] border-transparent bg-panel-field hover:bg-panel-field-hover";
@@ -95,16 +95,16 @@ function HighlightGlide({
95
95
  mutations.observe(host, { attributes: true, attributeFilter: [follow], subtree: true, childList: true });
96
96
  const resize = new ResizeObserver(place);
97
97
  resize.observe(host);
98
- host.addEventListener("scroll", place, true);
99
- host.addEventListener("transitionend", place);
100
- host.addEventListener("animationend", place);
98
+ const listeners = new AbortController();
99
+ const { signal } = listeners;
100
+ host.addEventListener("scroll", place, { capture: true, signal });
101
+ host.addEventListener("transitionend", place, { signal });
102
+ host.addEventListener("animationend", place, { signal });
101
103
  return () => {
102
104
  cancelAnimationFrame(frame);
103
105
  mutations.disconnect();
104
106
  resize.disconnect();
105
- host.removeEventListener("scroll", place, true);
106
- host.removeEventListener("transitionend", place);
107
- host.removeEventListener("animationend", place);
107
+ listeners.abort();
108
108
  host.removeAttribute("data-glide");
109
109
  };
110
110
  }, [follow, timing]);
@@ -15,6 +15,8 @@ function beginScrub(e, {
15
15
  const startValue = value;
16
16
  const target = e.currentTarget;
17
17
  let moved = false;
18
+ const gesture = new AbortController();
19
+ const { signal } = gesture;
18
20
  function onMove(ev) {
19
21
  const dx = ev.clientX - startX;
20
22
  if (!moved) {
@@ -37,13 +39,11 @@ function beginScrub(e, {
37
39
  { capture: true, once: true }
38
40
  );
39
41
  }
40
- window.removeEventListener("pointermove", onMove);
41
- window.removeEventListener("pointerup", onUp);
42
- window.removeEventListener("pointercancel", onUp);
42
+ gesture.abort();
43
43
  }
44
- window.addEventListener("pointermove", onMove);
45
- window.addEventListener("pointerup", onUp);
46
- window.addEventListener("pointercancel", onUp);
44
+ window.addEventListener("pointermove", onMove, { signal });
45
+ window.addEventListener("pointerup", onUp, { signal });
46
+ window.addEventListener("pointercancel", onUp, { signal });
47
47
  }
48
48
  export {
49
49
  beginScrub
@@ -36,24 +36,17 @@ function useCaretTrigger({ triggers }) {
36
36
  const onInput = (event) => {
37
37
  if (event.target === field) evaluate();
38
38
  };
39
- doc.addEventListener("input", onInput);
40
- field.addEventListener("focus", evaluate);
41
- field.addEventListener("click", evaluate);
42
- field.addEventListener("keyup", evaluate);
43
- field.addEventListener("compositionstart", onCompositionStart);
44
- field.addEventListener("compositionend", onCompositionEnd);
45
- field.addEventListener("blur", onBlur);
46
- doc.addEventListener("selectionchange", onSelection);
47
- return () => {
48
- doc.removeEventListener("input", onInput);
49
- field.removeEventListener("focus", evaluate);
50
- field.removeEventListener("click", evaluate);
51
- field.removeEventListener("keyup", evaluate);
52
- field.removeEventListener("compositionstart", onCompositionStart);
53
- field.removeEventListener("compositionend", onCompositionEnd);
54
- field.removeEventListener("blur", onBlur);
55
- doc.removeEventListener("selectionchange", onSelection);
56
- };
39
+ const listeners = new AbortController();
40
+ const { signal } = listeners;
41
+ doc.addEventListener("input", onInput, { signal });
42
+ field.addEventListener("focus", evaluate, { signal });
43
+ field.addEventListener("click", evaluate, { signal });
44
+ field.addEventListener("keyup", evaluate, { signal });
45
+ field.addEventListener("compositionstart", onCompositionStart, { signal });
46
+ field.addEventListener("compositionend", onCompositionEnd, { signal });
47
+ field.addEventListener("blur", onBlur, { signal });
48
+ doc.addEventListener("selectionchange", onSelection, { signal });
49
+ return () => listeners.abort();
57
50
  }, [field, evaluate]);
58
51
  const dismiss = useCallback(() => {
59
52
  setMatch((current) => {