@sableui/react 0.3.0 → 0.3.2

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 (37) hide show
  1. package/AGENTS.md +5 -1
  2. package/CHANGELOG.md +52 -0
  3. package/README.md +5 -1
  4. package/bin/sable.mjs +6 -2
  5. package/dist/{_contract-o3tUc8Ig.d.ts → _contract-BlKMR4eX.d.ts} +6 -1
  6. package/dist/blocks/index.js +2 -2
  7. package/dist/{chunk-CKNM7KSB.js → chunk-CCUDFLU3.js} +23 -6
  8. package/dist/{chunk-6LCIBMMG.js → chunk-D2ETQBHV.js} +1 -1
  9. package/dist/{chunk-K6LII3OE.js → chunk-FBSL2LZQ.js} +27 -23
  10. package/dist/{chunk-X276MF2W.js → chunk-OQACYT2D.js} +2 -0
  11. package/dist/index.d.ts +7 -7
  12. package/dist/index.js +8 -8
  13. package/dist/ios/styles.css +8 -0
  14. package/dist/patterns/index.js +2 -2
  15. package/dist/presets/index.d.ts +1 -1
  16. package/dist/presets/index.js +11 -2
  17. package/dist/styles.css +9 -0
  18. package/dist/{theme-provider-BE-KqUG-.d.ts → theme-provider-CuYYxF0o.d.ts} +1 -1
  19. package/dist/themes/atelier/index.d.ts +1 -1
  20. package/dist/themes/base/index.d.ts +1 -1
  21. package/dist/themes/ember/index.d.ts +1 -1
  22. package/dist/themes/index.d.ts +2 -2
  23. package/dist/themes/meridian/index.d.ts +1 -1
  24. package/dist/themes/poppy/index.d.ts +1 -1
  25. package/dist/themes/prism/index.d.ts +1 -1
  26. package/dist/themes/verdant/index.d.ts +1 -1
  27. package/llms/components/button.md +15 -3
  28. package/llms/components/input.md +1 -1
  29. package/llms/components/scrub-field.md +1 -1
  30. package/llms/components/select.md +1 -1
  31. package/llms/reference/token-intent.md +5 -1
  32. package/llms/tasks/getting-started.md +4 -0
  33. package/llms-full.txt +27 -7
  34. package/package.json +1 -1
  35. package/registry.json +2446 -8
  36. package/scripts/agent-setup.mjs +34 -7
  37. package/scripts/grade.mjs +33 -7
package/AGENTS.md CHANGED
@@ -61,7 +61,7 @@ The machine-readable version of this section is the `consume` block in `registry
61
61
 
62
62
  `styles.css` carries **Base only** — the default theme, and the layout floor every other theme inherits (`--page-inset`, `--region-*`, `--rhythm-unit` on a bare `:root`). The bundled **alternates are opt-in**, because they are `[data-sable-theme]`-scoped and an app that never sets the attribute ships CSS that can never match: 5.5 KB gzip of permanently-dead weight, which is exactly how a real app's build audit found this. Using one? `@import "@sableui/react/theme/prism.css";`. Offering the whole set through a `<ThemeSelector>`? `@import "@sableui/react/themes.css";`. **Symptom of forgetting:** `data-sable-theme` is set, nothing matches, and the page silently renders as Base — no error, just the wrong theme.
63
63
  4. **Fonts:** load Figtree (sans) + DM Mono (mono) — the theme declares the stacks, the host provides the files. Apply `antialiased` (`-webkit-font-smoothing: antialiased` / `-moz-osx-font-smoothing: grayscale`) **once on the app root**: Sable's type scale was drawn against smoothed text, and without it macOS renders every weight heavier than designed. The package deliberately doesn't set it — a library has no business styling the host's whole page — so it has to happen here.
64
- 5. **Providers (all optional):** components render with **Reicon** by default, so `<IconProvider set={…}>` is only needed to replace it with another icon package or extend it using `composeIconSets(appExtras, reiconIconSet)`; `<MotionProvider>` is optional too. Use `<SableThemeProvider>` + `useSableTheme()` when the app should expose user-selectable themes; pair `themeId` / `setThemeId` with `<ThemeSelector>` and `preference` / `setPreference` with `<ThemeSwitcher>`. The provider stores `light` / `dark` / `system`, toggles the `dark` class on `<html>`, stores the active design theme, and writes `data-sable-theme` for non-default themes. Apps with their own state layer can call `applySableColorMode()` / `applySableTheme()` instead. You only need a Tailwind `@custom-variant dark` if **your** app code uses `dark:` utilities (Sable ships none).
64
+ 5. **Providers (all optional):** components render with **Reicon** by default, so `<IconProvider set={…}>` is only needed to replace it with another icon package or extend it using `composeIconSets(appExtras, reiconIconSet)` (list the added names in `.sable/icons.json` as `{ "names": [...] }` so `sable grade` accepts them); `<MotionProvider>` is optional too. Use `<SableThemeProvider>` + `useSableTheme()` when the app should expose user-selectable themes; pair `themeId` / `setThemeId` with `<ThemeSelector>` and `preference` / `setPreference` with `<ThemeSwitcher>`. The provider stores `light` / `dark` / `system`, toggles the `dark` class on `<html>`, stores the active design theme, and writes `data-sable-theme` for non-default themes. Apps with their own state layer can call `applySableColorMode()` / `applySableTheme()` instead. You only need a Tailwind `@custom-variant dark` if **your** app code uses `dark:` utilities (Sable ships none).
65
65
  6. Import from the root barrel: `import { Button } from "@sableui/react"`. Page shells live on the `patterns` subpath (`import { SettingsPage } from "@sableui/react/patterns"`) — preview one, then copy its source from `registry.json → patterns` when the route needs to diverge. Blocks — section-sized compositions such as a sign-in card or a pricing card — live on the `blocks` subpath (`import { SignInBlock } from "@sableui/react/blocks"`) and ship the same way (`registry.json → blocks`); copy one and edit its content constants. A block's props are only `className`, `framed` and its primary action's callback, never content.
66
66
 
67
67
  7. **Check the wiring:** `npx sable doctor`. Every check it runs corresponds to a way Sable fails *silently* — a second React (blank page, "invalid hook call"), a missing `@source` (Tailwind emits none of the package's classes, everything renders unstyled), or `data-sable-theme` set with no theme CSS imported (every theme renders as Base and the switcher looks broken). Exits 1 on any failure; `--json` for the structured report.
@@ -144,6 +144,10 @@ Base UI wires `aria-invalid`/`aria-describedby` when you use `Field`; the behavi
144
144
  After installing Sable, run `pnpm exec sable setup --agent` in the target
145
145
  project. It installs discoverable entry files in `.agents/skills/sable` for
146
146
  Codex/Cursor and `.claude/skills/sable` for Claude Code; `--target` selects a host.
147
+ In a monorepo where Sable belongs to one workspace package, run setup in that
148
+ package with `--root` naming the repository root (for example
149
+ `pnpm --filter web exec sable setup --agent --root ../..`); the entries go
150
+ there and resolve Sable through the package.
147
151
  Each entry resolves `skills/sable/SKILL.md` from the installed package, so package
148
152
  upgrades also update the workflow. Other agents can read that file directly.
149
153
  Use `$sable build <idea>`, `inspire <references>`, `audit <target>`, or
package/CHANGELOG.md CHANGED
@@ -1,5 +1,57 @@
1
1
  # What's new
2
2
 
3
+ ## 0.3.2
4
+
5
+ ### Workspace panels
6
+
7
+ - **`panel-field` and `panel-field-hover` tokens.** The fill of a compact
8
+ control docked in a panel, and its hover step. They default to the canvas
9
+ tone and the raised panel step, so nothing changes visually. The `xs` field
10
+ rung (Input, SelectTrigger, Combobox, ScrubField) now wears them, and a panel
11
+ control of your own can too, without a lint exception.
12
+ - **`<Button variant="field">`.** A button that sits among `xs` fields in a
13
+ panel row, such as a font picker or an add action: the inset field fill and
14
+ the field's corner instead of a pill. Use it with `size="xs"` or `"icon-xs"`.
15
+
16
+ ### Agent tools
17
+
18
+ - `sable grade` checks props against each component's real type, so props a
19
+ component forwards to Base UI (`Toggle`'s `pressed`, `Combobox`'s `filter`)
20
+ are no longer reported as hallucinated. `registry.json` carries the result as
21
+ `propSurface`.
22
+ - `sable grade` reads the icon names your app adds with `composeIconSets` from
23
+ `.sable/icons.json` (`{ "names": [...] }`), or from `--icons <file>`, and stops
24
+ counting them as off-contract.
25
+ - `sable setup --agent --root <dir>` writes the skill entries in an ancestor
26
+ directory. In a monorepo, run it in the workspace package that depends on
27
+ Sable with `--root` at the repository root. The entries resolve Sable through
28
+ that package.
29
+
30
+ ## 0.3.1
31
+
32
+ ### Charts
33
+
34
+ - **Smoother hover.** The tooltip is anchored to the data instead of chasing
35
+ the pointer, and glides between positions; the cursor and the active dots
36
+ glide too. Moving within one data position no longer re-renders the chart.
37
+ Hover feedback has its own quick timing — dimming the other bars no longer
38
+ waits out the arrival stagger.
39
+ - Active dots on stacked areas draw above every series, so a later fill no
40
+ longer covers the dot below it.
41
+
42
+ ### Presets
43
+
44
+ - Presets may carry the chart palette (`chart-1` … `chart-8`). Optional — a
45
+ preset without them inherits Base's validated set. On sableui.com,
46
+ Customize now generates a chart palette from the brand and the Palette
47
+ setting, held to the same colour-blind and normal-vision separation checks.
48
+
49
+ ### iOS
50
+
51
+ - Layers portalled out of an iOS prototype (a toast stack, a menu) read the
52
+ prototype's safe-area geometry, so a toast placed under the status bar shows
53
+ there instead of below the screen.
54
+
3
55
  ## 0.3.0
4
56
 
5
57
  Blocks, charts, and the components they needed.
package/README.md CHANGED
@@ -107,7 +107,7 @@ function ThemeControls() {
107
107
  </IconProvider>
108
108
  ```
109
109
 
110
- Components render Reicon icons out of the box. To replace Reicon, mount `<IconProvider set={yourIconSet}>`; to add domain icons, use `composeIconSets(appExtras, reiconIconSet)`. Both helpers and the `IconSet` type are exported from Sable. A set returns `null` for names it does not handle. `fallbackIconSet` remains a deprecated alias of Reicon for compatibility. `SableThemeProvider` is the preferred route for user-facing theme switching: it stores the user's color preference (`light` / `dark` / `system`), toggles the **`.dark` class**, stores the active design theme, and writes **`data-sable-theme`** for non-default themes. If your app already owns this state, use `applySableColorMode()` / `applySableTheme()` or the exported `SABLE_THEME_ATTRIBUTE` constant directly. You do **not** need a Tailwind `@custom-variant dark` for Sable itself — add one (`@custom-variant dark (&:where(.dark, .dark *));`) only if **your own** app code uses `dark:` utilities (Sable ships none).
110
+ Components render Reicon icons out of the box. To replace Reicon, mount `<IconProvider set={yourIconSet}>`; to add domain icons, use `composeIconSets(appExtras, reiconIconSet)`. Both helpers and the `IconSet` type are exported from Sable. A set returns `null` for names it does not handle. List the names your extras add in `.sable/icons.json` (`{ "names": [...] }`) so `sable grade` counts them as icons the app supplies, not off-contract ones. `fallbackIconSet` remains a deprecated alias of Reicon for compatibility. `SableThemeProvider` is the preferred route for user-facing theme switching: it stores the user's color preference (`light` / `dark` / `system`), toggles the **`.dark` class**, stores the active design theme, and writes **`data-sable-theme`** for non-default themes. If your app already owns this state, use `applySableColorMode()` / `applySableTheme()` or the exported `SABLE_THEME_ATTRIBUTE` constant directly. You do **not** need a Tailwind `@custom-variant dark` for Sable itself — add one (`@custom-variant dark (&:where(.dark, .dark *));`) only if **your own** app code uses `dark:` utilities (Sable ships none).
111
111
 
112
112
  **6. Use it:**
113
113
 
@@ -181,6 +181,10 @@ pnpm --filter @sableui/react build # regenerates registry.json from the metas
181
181
  After installing Sable, run `pnpm exec sable setup --agent` in the target
182
182
  project. It installs discoverable entry files in `.agents/skills/sable` for
183
183
  Codex/Cursor and `.claude/skills/sable` for Claude Code; `--target` selects a host.
184
+ In a monorepo where Sable belongs to one workspace package, run setup in that
185
+ package with `--root` naming the repository root (for example
186
+ `pnpm --filter web exec sable setup --agent --root ../..`); the entries go
187
+ there and resolve Sable through the package.
184
188
  Each entry resolves `skills/sable/SKILL.md` from the installed package, so package
185
189
  upgrades also update the workflow. Other agents can read that file directly.
186
190
  Use `$sable build <idea>`, `inspire <references>`, `audit <target>`, or
package/bin/sable.mjs CHANGED
@@ -96,6 +96,7 @@ const COMMANDS = [
96
96
  flags: [
97
97
  { name: "--agent", value: null, describe: "Install skill entry files. Required." },
98
98
  { name: "--target", value: "all|codex|claude|cursor", describe: "Host discovery directories. Default all; Codex and Cursor share .agents." },
99
+ { name: "--root", value: "dir", describe: "Write the entries in this ancestor instead, e.g. the repository root when Sable belongs to one workspace package. Run setup in that package." },
99
100
  { name: "--update", value: null, describe: "Refresh unchanged managed entries after a package upgrade." },
100
101
  { name: "--dry-run", value: null, describe: "Check and report the destination without writing files." },
101
102
  ],
@@ -208,6 +209,7 @@ const COMMANDS = [
208
209
  { name: "--review", value: "review.json", describe: "Check captures, observations, iterations, and the source fingerprint." },
209
210
  { name: "--strict", value: null, describe: "Exit 1 for contract findings or missing/incomplete/unresolved review evidence." },
210
211
  { name: "--cli-log", value: "file.jsonl", describe: "Include retrieval usage from a SABLE_CLI_LOG file." },
212
+ { name: "--icons", value: "icons.json", describe: 'Icon names the app adds with composeIconSets, as { "names": [...] }. Default: .sable/icons.json when present.' },
211
213
  ],
212
214
  returns: ["grade.score", "grade.template"],
213
215
  },
@@ -1215,9 +1217,11 @@ const HANDLERS = {
1215
1217
  preset: () => cmdDesignTool("design-presets.mjs"),
1216
1218
  setup: () => {
1217
1219
  if (!flags.has("agent") || rest.length) fail("ERR_BAD_ARGUMENT", "Use sable setup --agent from your project root.", ["sable setup --agent --dry-run"])
1220
+ const root = flags.get("root")
1221
+ if (root === true) fail("ERR_BAD_ARGUMENT", "--root needs a directory.", ["pnpm --filter <package> exec sable setup --agent --root ../.."])
1218
1222
  try {
1219
- const data = installAgentSkill({ root: CWD, packageRoot: PKG_ROOT, target: flags.get("target") ?? "all", update: flags.has("update"), dryRun: flags.has("dry-run") })
1220
- ok("setup.agent", data, `${data.dryRun ? "Would install" : "Installed"} Sable skill entries at ${data.destinations.join(", ")}.\nNext: ${data.next}`)
1223
+ const data = installAgentSkill({ root: root ? resolve(CWD, root) : CWD, project: CWD, packageRoot: PKG_ROOT, target: flags.get("target") ?? "all", update: flags.has("update"), dryRun: flags.has("dry-run") })
1224
+ ok("setup.agent", data, `${data.dryRun ? "Would install" : "Installed"} Sable skill entries at ${data.destinations.map((d) => relative(CWD, join(data.root, d)).replaceAll("\\", "/")).join(", ")}.\nNext: ${data.next}`)
1221
1225
  } catch (error) { fail("ERR_AGENT_SETUP", error.message, ["sable setup --agent --dry-run"]) }
1222
1226
  },
1223
1227
  manifest: cmdManifest,
@@ -95,11 +95,16 @@ type DensityToken = (typeof DENSITY_TOKENS)[number];
95
95
  * COMPRESSED tonal band — Paper's whole ladder spans 249→242→238, about 3-7
96
96
  * RGB units, with a low-contrast hairline doing the structural work. `card` is
97
97
  * tuned for the opposite job (lifting content off a page).
98
+ * - `panel-field` / `panel-field-hover` are the inset fill of a compact control
99
+ * docked in a panel (the `size="xs"` field rung, a field-style button) and its
100
+ * hover step. They default to `canvas` / `panel-raised`, but name the role so
101
+ * a consumer's own panel control can wear it without borrowing the work
102
+ * surface's token or a fixed hover the surface-hover rule rightly rejects.
98
103
  * - `hairline` / `hairline-strong` are that structural edge. In this register
99
104
  * hairlines carry structure INSTEAD of tonal steps — a deliberate reversal of
100
105
  * the page register's "prefer a tonal step or space over a divider line".
101
106
  */
102
- declare const WORKSPACE_SURFACE_TOKENS: readonly ["canvas", "canvas-foreground", "panel", "panel-foreground", "panel-raised", "hairline", "hairline-strong"];
107
+ declare const WORKSPACE_SURFACE_TOKENS: readonly ["canvas", "canvas-foreground", "panel", "panel-foreground", "panel-raised", "panel-field", "panel-field-hover", "hairline", "hairline-strong"];
103
108
  type WorkspaceSurfaceToken = (typeof WORKSPACE_SURFACE_TOKENS)[number];
104
109
  /**
105
110
  * UI type tiers (mode-independent) — the chrome typography register.
@@ -1,5 +1,5 @@
1
- import { Kbd, CommandMenuPanel, ToggleGroup, Toggle, BarChart, DateTile, Accordion, AccordionItem, AccordionTrigger, AccordionPanel, RadialChart, Sparkline, Slider, Stepper, StepperItem, SegmentedBar, Checkbox, PieChart, AreaChart, OtpField } from '../chunk-K6LII3OE.js';
2
- import { Card, CardHeader, CardTitle, CardDescription, CardAction, Button, CardList, Entity, OverflowMenu, MenuItem, MenuSeparator, Code, CardContent, Message, Bubble, CardFooter, DestructiveActionModal, Badge, AvatarGroup, Avatar, Textarea, CodeBlock, Input, Table, TableHeader, TableRow, TableHead, TableBody, TableCell, StatusDot, Switch, Form, Field, Select, SelectTrigger, SelectContent, SelectItem, Separator, Label, Attachment } from '../chunk-CKNM7KSB.js';
1
+ import { Kbd, CommandMenuPanel, ToggleGroup, Toggle, BarChart, DateTile, Accordion, AccordionItem, AccordionTrigger, AccordionPanel, RadialChart, Sparkline, Slider, Stepper, StepperItem, SegmentedBar, Checkbox, PieChart, AreaChart, OtpField } from '../chunk-FBSL2LZQ.js';
2
+ import { Card, CardHeader, CardTitle, CardDescription, CardAction, Button, CardList, Entity, OverflowMenu, MenuItem, MenuSeparator, Code, CardContent, Message, Bubble, CardFooter, DestructiveActionModal, Badge, AvatarGroup, Avatar, Textarea, CodeBlock, Input, Table, TableHeader, TableRow, TableHead, TableBody, TableCell, StatusDot, Switch, Form, Field, Select, SelectTrigger, SelectContent, SelectItem, Separator, Label, Attachment } from '../chunk-CCUDFLU3.js';
3
3
  import { Region, Stack, Row, Grid } from '../chunk-3IWZYBGH.js';
4
4
  import { cn } from '../chunk-SRQWQUTW.js';
5
5
  import { Icon } from '../chunk-NGBDP3BM.js';
@@ -339,6 +339,15 @@ var buttonVariants = cva(
339
339
  * restyling secondary/ghost three different ways was the alternative.
340
340
  */
341
341
  floating: "border border-border-floating bg-popover/90 text-popover-foreground shadow-md backdrop-blur hover:bg-popover",
342
+ /*
343
+ * A button docked in a panel among compact fields — a picker that
344
+ * opens a popover, "Add fill", a swatch's trigger. It wears the xs
345
+ * field rung's shell (lib/field-shell → FIELD_SHELL_XS): the inset
346
+ * `panel-field` fill, no border, the field's corner rather than the
347
+ * button's pill, so it reads as one of the row's controls. Secondary
348
+ * or ghost there read as page buttons dropped into tool chrome.
349
+ */
350
+ field: "rounded-[var(--panel-field-radius,var(--radius-xs))] bg-panel-field text-panel-foreground hover:bg-panel-field-hover",
342
351
  /*
343
352
  * On-colour tiers — for a button sitting ON a coloured fill (a tone
344
353
  * band, a solid Banner, a brand panel, a dark section in a light
@@ -587,9 +596,9 @@ var buttonMeta = {
587
596
  props: [
588
597
  {
589
598
  name: "variant",
590
- type: '"primary" | "secondary" | "ghost" | "outline" | "destructive" | "link" | "floating" | "on-color" | "on-color-outline" | "on-color-ghost"',
599
+ type: '"primary" | "secondary" | "ghost" | "outline" | "destructive" | "link" | "floating" | "field" | "on-color" | "on-color-outline" | "on-color-ghost"',
591
600
  default: '"primary"',
592
- description: "Visual emphasis tier. One primary per screen. The on-color tiers are for buttons ON a coloured fill: they paint with the inherited text colour (the fill's ink) \u2014 on-color is solid (ink background, fill-coloured label via the optional --on-color-fill var, else black/white), on-color-outline and on-color-ghost are transparent with an ink label. Never use them on page or card surfaces. floating is for a control that sits OVER content (carousel arrows, a marquee pause, a jump-to-latest over a conversation): its own edge, lift and translucent popover fill, so it reads on arbitrary content beneath."
601
+ description: "Visual emphasis tier. One primary per screen. The on-color tiers are for buttons ON a coloured fill: they paint with the inherited text colour (the fill's ink) \u2014 on-color is solid (ink background, fill-coloured label via the optional --on-color-fill var, else black/white), on-color-outline and on-color-ghost are transparent with an ink label. Never use them on page or card surfaces. floating is for a control that sits OVER content (carousel arrows, a marquee pause, a jump-to-latest over a conversation): its own edge, lift and translucent popover fill, so it reads on arbitrary content beneath. field is for a button docked in a workspace panel among xs fields: the inset panel-field fill and the field's corner, so a picker trigger or an add action reads as one of the row's controls; pair it with size xs or icon-xs."
593
602
  },
594
603
  {
595
604
  name: "size",
@@ -638,6 +647,7 @@ var buttonMeta = {
638
647
  "destructive",
639
648
  "link",
640
649
  "floating",
650
+ "field",
641
651
  "on-color",
642
652
  "on-color-outline",
643
653
  "on-color-ghost"
@@ -654,7 +664,10 @@ var buttonMeta = {
654
664
  "input",
655
665
  "destructive",
656
666
  "destructive-foreground",
657
- "ring"
667
+ "ring",
668
+ "panel-field",
669
+ "panel-field-hover",
670
+ "panel-foreground"
658
671
  ],
659
672
  motion: [
660
673
  {
@@ -746,6 +759,10 @@ var buttonMeta = {
746
759
  label: "Icon button with an unread badge",
747
760
  code: '<Button size="icon" variant="ghost" aria-label="Notifications" badge={<NotificationBadge dot />}><Icon name="bell" /></Button>'
748
761
  },
762
+ {
763
+ label: "Field button in a panel row",
764
+ code: '<PanelSection title="Text">\n <PropertyRow label="Font">\n <Button variant="field" size="xs" className="w-full justify-between" iconEnd={<Icon name="chevron-down" />}>Figtree</Button>\n </PropertyRow>\n</PanelSection>'
765
+ },
749
766
  {
750
767
  label: "On a coloured band",
751
768
  code: '<div className="flex gap-3 bg-tone-info p-6 text-tone-info-foreground [--on-color-fill:var(--tone-info)]"><Button variant="on-color">Join the beta</Button><Button variant="on-color-outline">Read the notes</Button></div>'
@@ -2183,7 +2200,7 @@ var separatorMeta = {
2183
2200
  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";
2184
2201
  var MOBILE_FIELD_TIER = "max-sm:text-body-lg";
2185
2202
  var FIELD_INVALID = "aria-[invalid=true]:border-destructive aria-[invalid=true]:ring-destructive/30";
2186
- var FIELD_SHELL_XS = "rounded-[var(--panel-field-radius,var(--radius-xs))] border-transparent bg-canvas hover:bg-panel-raised";
2203
+ var FIELD_SHELL_XS = "rounded-[var(--panel-field-radius,var(--radius-xs))] border-transparent bg-panel-field hover:bg-panel-field-hover";
2187
2204
  function Input({ className, type, size = "md", ref, ...props }) {
2188
2205
  const tier = useTypeTier();
2189
2206
  const density = useDensity();
@@ -2289,7 +2306,7 @@ var inputMeta = {
2289
2306
  name: "size",
2290
2307
  type: '"md" | "xs"',
2291
2308
  default: '"md"',
2292
- description: "md is the form field. xs is the dense inset field of a tool panel (an inset canvas fill, no outline, tight padding) \u2014 the same ladder as Select and Combobox. Use it instead of overriding the height with className."
2309
+ description: "md is the form field. xs is the dense inset field of a tool panel (an inset panel-field fill, no outline, tight padding) \u2014 the same ladder as Select and Combobox. Use it instead of overriding the height with className."
2293
2310
  },
2294
2311
  {
2295
2312
  name: "type",
@@ -3969,7 +3986,7 @@ var selectMeta = {
3969
3986
  {
3970
3987
  name: "SelectTrigger",
3971
3988
  type: 'Base UI Trigger props + placeholder?: ReactNode + size?: "md" | "xs" + className',
3972
- description: 'The button. Composes Trigger + Value + a chevron Icon that flips on open (data-[popup-open]). `size="xs"` is the property-grid rung \u2014 height, padding, radius AND surface move together, which is why it is a prop and not a className: the xs trigger is an inset `bg-canvas` field with no border, matching ScrubField on the same row. A consumer overriding only the height gets an md-register 8px radius on a 24px box and a raised card sitting among inset fields; one inspector panel had eleven of those, and both tells are visible at a glance.'
3989
+ description: 'The button. Composes Trigger + Value + a chevron Icon that flips on open (data-[popup-open]). `size="xs"` is the property-grid rung \u2014 height, padding, radius AND surface move together, which is why it is a prop and not a className: the xs trigger is an inset `bg-panel-field` field with no border, matching ScrubField on the same row. A consumer overriding only the height gets an md-register 8px radius on a 24px box and a raised card sitting among inset fields; one inspector panel had eleven of those, and both tells are visible at a glance.'
3973
3990
  },
3974
3991
  {
3975
3992
  name: "SelectContent",
@@ -1,4 +1,4 @@
1
- import { useMotion, useIsomorphicLayoutEffect, mergeRefs, trimLabel, useTypeTier, buttonVariants, Input, Table, TableCaption, TableHeader, TableRow, TableHead, Button, TableBody, TableCell, Card, SimpleTooltip, useDensity, FIELD_SHELL, FIELD_INVALID, MOBILE_FIELD_TIER, Tooltip, TooltipTrigger, TooltipContent, useScrollActivity, setRef, Textarea, Menu, MenuTrigger, MenuContent, MenuSubmenu, MenuSubmenuTrigger, Separator } from './chunk-CKNM7KSB.js';
1
+ import { useMotion, useIsomorphicLayoutEffect, mergeRefs, trimLabel, useTypeTier, buttonVariants, Input, Table, TableCaption, TableHeader, TableRow, TableHead, Button, TableBody, TableCell, Card, SimpleTooltip, useDensity, FIELD_SHELL, FIELD_INVALID, MOBILE_FIELD_TIER, Tooltip, TooltipTrigger, TooltipContent, useScrollActivity, setRef, Textarea, Menu, MenuTrigger, MenuContent, MenuSubmenu, MenuSubmenuTrigger, Separator } from './chunk-CCUDFLU3.js';
2
2
  import { cn } from './chunk-SRQWQUTW.js';
3
3
  import { Icon } from './chunk-NGBDP3BM.js';
4
4
  import { createContext, useRef, useState, useEffect, isValidElement, cloneElement, useContext, useMemo, useCallback, useImperativeHandle } from 'react';
@@ -1,4 +1,4 @@
1
- import { FIELD_SHELL, FIELD_INVALID, useMotion, useTypeTier, useScrollActivity, setRef, useAnchoredDensity, Dialog, DialogContent, DialogTitle, DialogDescription, useIsomorphicLayoutEffect } from './chunk-CKNM7KSB.js';
1
+ import { FIELD_SHELL, FIELD_INVALID, useMotion, useTypeTier, useScrollActivity, setRef, useAnchoredDensity, Dialog, DialogContent, DialogTitle, DialogDescription, useIsomorphicLayoutEffect } from './chunk-CCUDFLU3.js';
2
2
  import { cn } from './chunk-SRQWQUTW.js';
3
3
  import { Icon } from './chunk-NGBDP3BM.js';
4
4
  import * as OtpParts from '@base-ui/react/otp-field';
@@ -705,7 +705,6 @@ function ChartFrame({
705
705
  const [size, setSize] = useState(null);
706
706
  const [shown, setShown] = useState(!animate);
707
707
  const [uncontrolled, setUncontrolled] = useState(defaultActiveIndex);
708
- const [pointer, setPointer] = useState(null);
709
708
  const [viaKeyboard, setViaKeyboard] = useState(false);
710
709
  const appeared = useRef(true);
711
710
  const tableId = useId();
@@ -753,8 +752,7 @@ function ChartFrame({
753
752
  const onPointer = (event) => {
754
753
  if (!interactive || !size || !hitTest) return;
755
754
  const p = local(event);
756
- setPointer(p);
757
- setViaKeyboard(false);
755
+ if (viaKeyboard) setViaKeyboard(false);
758
756
  setActive(hitTest(p.x, p.y, size));
759
757
  };
760
758
  const onKeyDown = (event) => {
@@ -767,11 +765,10 @@ function ChartFrame({
767
765
  else if (event.key === "Escape") next = null;
768
766
  if (next === void 0) return;
769
767
  event.preventDefault();
770
- setPointer(null);
771
768
  setViaKeyboard(true);
772
769
  setActive(next);
773
770
  };
774
- const placement = size && active != null && tooltip ? tooltip(active, size, pointer) : null;
771
+ const placement = size && active != null && tooltip ? tooltip(active, size) : null;
775
772
  const flip = placement && size ? placement.x > size.width / 2 : false;
776
773
  return /* @__PURE__ */ jsxs(
777
774
  "figure",
@@ -792,7 +789,6 @@ function ChartFrame({
792
789
  onPointerMove: onPointer,
793
790
  onPointerDown: onPointer,
794
791
  onPointerLeave: () => {
795
- setPointer(null);
796
792
  if (!viaKeyboard) setActive(null);
797
793
  },
798
794
  onKeyDown,
@@ -816,10 +812,11 @@ function ChartFrame({
816
812
  "aria-hidden": true,
817
813
  className: cn(
818
814
  "pointer-events-none absolute start-0 top-0 z-10",
815
+ // Glides between positions; appears in place the first time.
819
816
  !appeared.current && "transition-transform duration-(--motion-duration-fast) ease-standard"
820
817
  ),
821
818
  style: { transform: `translate(${Math.round(placement.x)}px, ${Math.round(placement.y)}px)` },
822
- children: /* @__PURE__ */ jsx("div", { className: cn("w-max -translate-y-1/2", flip ? "-translate-x-[calc(100%+0.75rem)]" : "translate-x-3"), children: placement.content })
819
+ children: /* @__PURE__ */ jsx("div", { className: cn("w-max -translate-y-1/2 transition-transform duration-(--motion-duration-fast) ease-standard", flip ? "-translate-x-[calc(100%+0.75rem)]" : "translate-x-3"), children: placement.content })
823
820
  }
824
821
  ) : null
825
822
  ]
@@ -1002,17 +999,22 @@ function strokeArcPath(cx, cy, r, a0, a1) {
1002
999
  var DRAW_DURATION = "calc(var(--motion-duration-slower) * 1.8)";
1003
1000
  var RISE = "var(--motion-duration-slower) var(--motion-ease-emphasized)";
1004
1001
  var MORPH = "var(--motion-duration-slow) var(--motion-ease-standard)";
1002
+ var HOVER = "var(--motion-duration-fast) var(--motion-ease-standard)";
1003
+ var GLIDE = `transform ${HOVER}, opacity ${HOVER}, cx ${HOVER}, cy ${HOVER}`;
1004
+ function barTransition(delay = "0ms") {
1005
+ return `scale ${RISE} ${delay}, opacity ${HOVER}, d ${MORPH}`;
1006
+ }
1005
1007
  function stagger(index, stepMs = 35) {
1006
1008
  return `calc(${Math.min(index, 24) * stepMs}ms * var(--motion-scale, 1))`;
1007
1009
  }
1008
1010
  function drawTransition(delay = "0ms") {
1009
- return `stroke-dashoffset ${DRAW_DURATION} var(--motion-ease-decelerate) ${delay}, d ${MORPH}`;
1011
+ return `stroke-dashoffset ${DRAW_DURATION} var(--motion-ease-decelerate) ${delay}, d ${MORPH}, opacity ${HOVER}`;
1010
1012
  }
1011
1013
  function riseTransition(delay = "0ms") {
1012
1014
  return `scale ${RISE} ${delay}, opacity ${RISE} ${delay}, d ${MORPH}`;
1013
1015
  }
1014
1016
  function morphTransition() {
1015
- return `d ${MORPH}, opacity ${MORPH}, cx ${MORPH}, cy ${MORPH}`;
1017
+ return `d ${MORPH}, opacity ${HOVER}, cx ${MORPH}, cy ${MORPH}`;
1016
1018
  }
1017
1019
  function pathStyle(d) {
1018
1020
  return { d: `path("${d}")` };
@@ -1186,7 +1188,7 @@ function CartesianChart(props) {
1186
1188
  return best;
1187
1189
  };
1188
1190
  const describe = (i) => `${categories[i]}: ${series.map((s, k) => `${s.label} ${fullValue(k, i)}`).join(", ")}`;
1189
- const tooltipFor = (i, size, pointer) => {
1191
+ const tooltipFor = (i, size) => {
1190
1192
  const L = layoutFor(size);
1191
1193
  const total = values.reduce((sum, s) => sum + s[i], 0);
1192
1194
  const content = /* @__PURE__ */ jsx(
@@ -1198,8 +1200,11 @@ function CartesianChart(props) {
1198
1200
  total: tooltipOptions.showTotal ? fmt.full(total) : void 0
1199
1201
  }
1200
1202
  );
1201
- if (horizontal) return { content, x: pointer?.x ?? (L.x0 + L.x1) / 2, y: L.center(i) };
1202
- return { content, x: L.center(i), y: pointer?.y ?? (L.y0 + L.y1) / 2 };
1203
+ if (horizontal) {
1204
+ const end = Math.max(0, ...series.map((_, k) => stacks ? stacks[k][i][1] : values[k][i]));
1205
+ return { content, x: Math.min(L.value(end), L.x1), y: L.center(i) };
1206
+ }
1207
+ return { content, x: L.center(i), y: (L.y0 + L.y1) / 2 };
1203
1208
  };
1204
1209
  const table = {
1205
1210
  headers: [index.charAt(0).toUpperCase() + index.slice(1), ...series.map((s) => s.label)],
@@ -1224,6 +1229,7 @@ function CartesianChart(props) {
1224
1229
  children: ({ size, activeIndex: active }) => {
1225
1230
  const L = layoutFor(size);
1226
1231
  const marks = [];
1232
+ const activeDots = [];
1227
1233
  const widths = categories.map((_, i) => approxTextWidth(tickText(i)));
1228
1234
  const slot = (horizontal ? L.y1 - L.y0 : L.x1 - L.x0) / Math.max(1, n) || 1;
1229
1235
  const every = Math.max(1, Math.ceil((horizontal ? 18 : Math.max(0, ...widths) + 12) / slot));
@@ -1247,15 +1253,13 @@ function CartesianChart(props) {
1247
1253
  });
1248
1254
  let cursor = null;
1249
1255
  if (active != null && active < n) {
1256
+ const c = L.center(active);
1257
+ const move = { transform: horizontal ? `translate(0px, ${c}px)` : `translate(${c}px, 0px)`, transition: GLIDE };
1250
1258
  if (L.band) {
1251
- const c = L.center(active);
1252
- const half = Math.min(L.band.step, Math.max(L.band.bandwidth, barWidth * 2)) / 2;
1253
- const a = Math.max(horizontal ? L.y0 : L.x0, c - half);
1254
- const b = Math.min(horizontal ? L.y1 : L.x1, c + half);
1255
- cursor = horizontal ? /* @__PURE__ */ jsx("rect", { x: L.x0, y: a, width: L.x1 - L.x0, height: b - a, rx: 6, className: "fill-foreground/5" }) : /* @__PURE__ */ jsx("rect", { x: a, y: L.y0, width: b - a, height: L.y1 - L.y0, rx: 6, className: "fill-foreground/5" });
1259
+ const w = L.band.bandwidth;
1260
+ cursor = /* @__PURE__ */ jsx("g", { style: move, children: horizontal ? /* @__PURE__ */ jsx("rect", { x: L.x0, y: -w / 2, width: L.x1 - L.x0, height: w, rx: 6, className: "fill-foreground/5" }) : /* @__PURE__ */ jsx("rect", { x: -w / 2, y: L.y0, width: w, height: L.y1 - L.y0, rx: 6, className: "fill-foreground/5" }) });
1256
1261
  } else {
1257
- const p = L.center(active);
1258
- cursor = /* @__PURE__ */ jsx("line", { x1: p, x2: p, y1: L.y0, y2: L.y1, className: "stroke-foreground/25" });
1262
+ cursor = /* @__PURE__ */ jsx("g", { style: move, children: /* @__PURE__ */ jsx("line", { x1: 0, x2: 0, y1: L.y0, y2: L.y1, className: "stroke-foreground/25" }) });
1259
1263
  }
1260
1264
  }
1261
1265
  if (kind === "bar" && L.band) {
@@ -1297,14 +1301,13 @@ function CartesianChart(props) {
1297
1301
  d,
1298
1302
  className: cn(
1299
1303
  horizontal ? "[[data-reveal=out]_&]:scale-x-0" : "[[data-reveal=out]_&]:scale-y-0",
1300
- "transition-opacity",
1301
1304
  dim && "opacity-40"
1302
1305
  ),
1303
1306
  style: {
1304
1307
  ...pathStyle(d),
1305
1308
  fill: colorAt(k, i),
1306
1309
  transformOrigin: origin,
1307
- transition: riseTransition(stagger(i))
1310
+ transition: barTransition(stagger(i))
1308
1311
  }
1309
1312
  },
1310
1313
  `b${k}-${i}`
@@ -1406,7 +1409,7 @@ function CartesianChart(props) {
1406
1409
  }
1407
1410
  if (active != null && active < n) {
1408
1411
  const [x, y] = top[active];
1409
- marks.push(/* @__PURE__ */ jsx("circle", { cx: x, cy: y, r: 5, strokeWidth: 2, className: SURFACE, style: { fill: s.colorValue } }, `ap${k}`));
1412
+ activeDots.push(/* @__PURE__ */ jsx("circle", { cx: x, cy: y, r: 5, strokeWidth: 2, className: SURFACE, style: { fill: s.colorValue, cx: x, cy: y, transition: GLIDE } }, `ap${k}`));
1410
1413
  }
1411
1414
  }
1412
1415
  }
@@ -1415,6 +1418,7 @@ function CartesianChart(props) {
1415
1418
  grid ? /* @__PURE__ */ jsx("g", { children: gridLines }) : null,
1416
1419
  cursor,
1417
1420
  /* @__PURE__ */ jsx("g", { children: marks }),
1421
+ /* @__PURE__ */ jsx("g", { children: activeDots }),
1418
1422
  zero ? horizontal ? /* @__PURE__ */ jsx("line", { x1: L.base, x2: L.base, y1: L.y0, y2: L.y1, className: "stroke-foreground/20" }) : /* @__PURE__ */ jsx("line", { x1: L.x0, x2: L.x1, y1: L.base, y2: L.base, className: "stroke-foreground/20" }) : null,
1419
1423
  (horizontal ? xAxis : yAxis) ? /* @__PURE__ */ jsx("g", { children: valueAxis }) : null,
1420
1424
  (horizontal ? yAxis : xAxis) ? /* @__PURE__ */ jsx("g", { children: categoryAxis }) : null
@@ -273,6 +273,8 @@ var WORKSPACE_SURFACE_TOKENS = [
273
273
  "panel",
274
274
  "panel-foreground",
275
275
  "panel-raised",
276
+ "panel-field",
277
+ "panel-field-hover",
276
278
  "hairline",
277
279
  "hairline-strong"
278
280
  ];
package/dist/index.d.ts CHANGED
@@ -1,10 +1,10 @@
1
1
  import { ClassValue } from 'clsx';
2
2
  import { C as ComponentMeta } from './meta-CcE_SeFu.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-CcE_SeFu.js';
4
- import { T as ThemeManifest, a as ThemeMode$1 } from './_contract-o3tUc8Ig.js';
5
- export { D as DENSITY_TOKENS, b as DensityToken, M as MOTION_TOKENS, c as MotionToken, R as RADIUS_TOKENS, d as RadiusToken, S as SEMANTIC_TOKENS, e as SemanticToken, f as TYPE_OVERLINE_TOKENS, g as TYPE_REFINEMENT_TOKENS, h as TYPE_SCALE_TOKENS, i as TYPE_UI_TOKENS, j as TypeOverlineToken, k as TypeRefinementToken, l as TypeScaleToken, m as TypeUiToken, W as WORKSPACE_SURFACE_TOKENS, n as WorkspaceSurfaceToken } from './_contract-o3tUc8Ig.js';
6
- import { T as ThemeId } from './theme-provider-BE-KqUG-.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-BE-KqUG-.js';
4
+ import { T as ThemeManifest, a as ThemeMode$1 } from './_contract-BlKMR4eX.js';
5
+ export { D as DENSITY_TOKENS, b as DensityToken, M as MOTION_TOKENS, c as MotionToken, R as RADIUS_TOKENS, d as RadiusToken, S as SEMANTIC_TOKENS, e as SemanticToken, f as TYPE_OVERLINE_TOKENS, g as TYPE_REFINEMENT_TOKENS, h as TYPE_SCALE_TOKENS, i as TYPE_UI_TOKENS, j as TypeOverlineToken, k as TypeRefinementToken, l as TypeScaleToken, m as TypeUiToken, W as WORKSPACE_SURFACE_TOKENS, n as WorkspaceSurfaceToken } from './_contract-BlKMR4eX.js';
6
+ import { T as ThemeId } from './theme-provider-CuYYxF0o.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-CuYYxF0o.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 { reiconIconSet as fallbackIconSet, reiconIconNames, reiconIconSet } from './icon-sets/reicon.js';
@@ -348,7 +348,7 @@ declare namespace ViewTransitionName {
348
348
  }
349
349
 
350
350
  declare const buttonVariants: (props?: ({
351
- variant?: "link" | "primary" | "secondary" | "destructive" | "outline" | "ghost" | "floating" | "on-color" | "on-color-outline" | "on-color-ghost" | null | undefined;
351
+ variant?: "link" | "primary" | "secondary" | "destructive" | "outline" | "ghost" | "floating" | "field" | "on-color" | "on-color-outline" | "on-color-ghost" | null | undefined;
352
352
  size?: "icon" | "sm" | "md" | "xs" | "cta" | "icon-sm" | "icon-xs" | null | undefined;
353
353
  } & class_variance_authority_types.ClassProp) | undefined) => string;
354
354
 
@@ -2485,7 +2485,7 @@ type TriggerProps$2 = Omit<ComponentProps<typeof Select$1.Trigger>, "className"
2485
2485
  * The surface is the part a `h-(--control-xs)` override could never reach,
2486
2486
  * and it is what the eye actually catches. A property grid's fields are
2487
2487
  * inset, not raised: `ScrubField` — the control immediately beside this one
2488
- * on the same rung — is `bg-canvas` with no border, and a bordered `bg-card`
2488
+ * on the same rung — is `bg-panel-field` with no border, and a bordered `bg-card`
2489
2489
  * select beside it reads as a different KIND of control rather than the same
2490
2490
  * control holding a word. Consumers that overrode the height got an
2491
2491
  * md-register 8px radius on a 24px box and a raised card among inset fields;
@@ -7499,6 +7499,6 @@ interface UseCopyResult {
7499
7499
  */
7500
7500
  declare function useCopy(text: string, { timeout }?: UseCopyOptions): UseCopyResult;
7501
7501
 
7502
- declare const SABLE_UI_VERSION: "0.3.0";
7502
+ declare const SABLE_UI_VERSION: "0.3.2";
7503
7503
 
7504
7504
  export { Accordion, AccordionItem, AccordionPanel, AccordionTrigger, AlertDialog, AlertDialogClose, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogOverlay, AlertDialogTitle, AlertDialogTrigger, AppHeader, type AppHeaderProps, AppShell, type AppShellProps, AreaChart, type AreaChartProps, 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, type BubbleReactionProps, BubbleReactions, type BubbleReactionsProps, Button, type ButtonProps, CHART_SERIES_COUNT, COMPONENT_GROUPS, COMPONENT_TAXONOMY, Calendar, type CalendarProps, Card, CardAction, CardContent, type CardContentProps, CardDescription, CardFooter, CardHeader, CardList, type CardProps, CardTitle, type CardTitleProps, 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, ContextCard, ContextCardArrow, ContextCardContent, ContextCardPortal, ContextCardTrigger, ContextMenu, ContextMenuContent, ContextMenuGroup, ContextMenuGroupLabel, ContextMenuItem, ContextMenuPortal, ContextMenuSeparator, ContextMenuTrigger, DataTable, type DataTableColumn, type DataTableProps, 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, EmptyState, type EmptyStateProps, Entity, type EntityProps, Feedback, type FeedbackData, type FeedbackProps, type FeedbackRating, Field, type FieldProps, Fieldset, FieldsetContent, FieldsetDescription, FieldsetFooter, FieldsetLegend, FileDropzone, type FileDropzoneProps, type FileRejection, type FileRejectionCode, Form, type FormProps, GlidingHighlight, type GlidingHighlightProps, type Hsv, InlineStatus, type InlineStatusProps, type StatusTone as InlineTone, Input, type InputProps$1 as InputProps, Kbd, KbdGroup, type KbdGroupProps, type KbdProps, Label, type LabelProps$2 as LabelProps, LineChart, type LineChartProps, Marker, type MarkerProps, Marquee, type MarqueeProps, Menu, MenuCheckboxItem, MenuContent, MenuGroup, MenuGroupLabel, MenuItem, MenuPortal, MenuRadioGroup, MenuRadioItem, MenuSeparator, MenuSubmenu, MenuSubmenuTrigger, MenuTrigger, Message, type MessageProps, MessageScroller, type MessageScrollerHandle, type MessageScrollerProps, Meter, MeterIndicator, MeterLabel, type MeterSize, type MeterTone, MeterTrack, MeterValue, MiddleTruncate, type MiddleTruncateProps, type MotionPolicy, MotionProvider, type MotionProviderProps, Note, type NoteAction, type NoteProps, NotificationBadge, type NotificationBadgeProps, NumberField, type NumberFieldProps, type OrbMode, type OrbSize, OtpField, type OtpFieldProps, OverflowMenu, type OverflowMenuProps, PageHeader, type PageHeaderProps, PageLoader, type PageLoaderProps, Pagination, type PaginationProps, 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, Progress, ProgressIndicator, ProgressLabel, type ProgressSize, ProgressTrack, ProgressValue, PropertyPair, PropertyRow, RadarChart, type RadarChartProps, RadialChart, type RadialChartProps, Radio, RadioCard, type RadioCardProps, type RadioCardTone, RadioGroup, 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, SegmentedBar, type SegmentedBarProps, type SegmentedBarSegment, type SegmentedBarTone, Select, SelectContent, SelectGroup, SelectGroupLabel, SelectItem, SelectPortal, SelectSeparator, SelectTrigger, SelectValue, Separator, type SeparatorProps$3 as SeparatorProps, SettingsMenu, type SettingsMenuProps, SettingsRow, type SettingsRowProps, Sheet, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetPortal, SheetTitle, SheetTrigger, ShowMore, type ShowMoreProps, SideNav, type SideNavActiveVariant, SideNavGroup, type SideNavGroupProps, SideNavItem, type SideNavItemProps, type SideNavProps, type SideNavSize, Sidebar, SidebarFooter, SidebarHeader, SidebarItem, type SidebarItemProps, SidebarNav, type SidebarProps, SimpleTooltip, Skeleton, Slider, SliderControl, SliderIndicator, SliderRoot, SliderThumb, SliderTrack, SliderValue, 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, 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, ThemeSelector, type ThemeSelectorProps, ThemeSwitcher, type ThemeSwitcherProps, ThinkingOrb, type ThinkingOrbProps, ToastAction, type ToastApi, ToastClose, ToastDescription, type ToastManagerApi, type ToastOptions, type ToastPosition, ToastProvider, type ToastProviderProps, ToastRoot, ToastTitle, type ToastType, ToastViewport, Toggle, ToggleGroup, type ToggleGroupAppearance, Toggle as ToggleGroupItem, Toolbar, ToolbarButton, type ToolbarButtonProps, ToolbarGroup, type ToolbarGroupProps, ToolbarInput, type ToolbarInputProps, ToolbarLink, type ToolbarLinkProps, type ToolbarProps, ToolbarSeparator, type ToolbarSeparatorProps, Tooltip, TooltipArrow, TooltipContent, TooltipPortal, TooltipProvider, TooltipTrigger, Tree, TreeAddRow, TreeEmpty, TreeRow, TreeSection, 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, buttonMeta, buttonVariants, calendarMeta, cardMeta, carouselMeta, chartColor, toneColor as chartToneColor, chatComposerMeta, checkboxCardMeta, checkboxMeta, cn, codeBlockMeta, codeMeta, collapsibleMeta, colorFieldMeta, comboboxMeta, commandMenuMeta, componentGuidance, componentLabel, componentSlug, componentsInGroup, contextCardMeta, contextMenuMeta, dataTableMeta, datePickerMeta, dateTileMeta, destructiveActionModalMeta, dialogMeta, emptyStateMeta, entityMeta, feedbackMeta, fieldsetMeta, fileDropzoneMeta, fileDropzoneVariants, formMeta, formatFileSize, formatHex, glidingHighlightMeta, hsvToRgb, hueColor, inlineStatusMeta, inputMeta, isTransparent, kbdMeta, labelMeta, lineChartMeta, markerMeta, marqueeMeta, menuMeta, messageMeta, messageScrollerMeta, meterIndicatorVariants, meterMeta, meterTrackVariants, middleTruncateMeta, noteMeta, noteVariants, notificationBadgeMeta, notificationCountVariants, notificationDotVariants, numberFieldMeta, otpFieldMeta, overflowMenuMeta, pageHeaderMeta, pageLoaderMeta, paginationMeta, panelGroupMeta, panelSectionMeta, parseHex, phoneMeta, pieChartMeta, pillMeta, pillVariants, popoverMeta, progressMeta, progressTrackVariants, radarChartMeta, radialChartMeta, radioCardMeta, radioMeta, relativeTimeMeta, rgbToHsv, scrollerMeta, scrubFieldMeta, searchInputMeta, 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, toolbarGroupVariants, toolbarMeta, toolbarSeparatorVariants, toolbarVariants, tooltipMeta, treeIndent, treeMeta, useAnchoredDensity, useComboboxFilteredItems, useCommandMenuShortcut, useCopy, useDensity, useInView, useMotion, usePanelWidth, useReducedMotion, useScrollActivity, useSidebar, useToast, useToastManager, useTypeTier, videoMeta, workspaceMeta };
package/dist/index.js CHANGED
@@ -1,11 +1,11 @@
1
- export { DENSITY_TOKENS, MOTION_TOKENS, RADIUS_TOKENS, SEMANTIC_TOKENS, TYPE_OVERLINE_TOKENS, TYPE_REFINEMENT_TOKENS, TYPE_SCALE_TOKENS, TYPE_UI_TOKENS, WORKSPACE_SURFACE_TOKENS } from './chunk-X276MF2W.js';
1
+ export { DENSITY_TOKENS, MOTION_TOKENS, RADIUS_TOKENS, SEMANTIC_TOKENS, TYPE_OVERLINE_TOKENS, TYPE_REFINEMENT_TOKENS, TYPE_SCALE_TOKENS, TYPE_UI_TOKENS, WORKSPACE_SURFACE_TOKENS } from './chunk-OQACYT2D.js';
2
2
  export { Phone, phoneMeta } from './chunk-KFZ43RKU.js';
3
3
  import './chunk-NEQNXI2G.js';
4
- export { AppHeader, AppShell, BottomNav, BottomNavItem, Browser, ChatComposer, DataTable, EmptyState, Marker, MessageScroller, Meter, MeterIndicator, MeterLabel, MeterTrack, MeterValue, NotificationBadge, PageHeader, Presence, RelativeTime, Reveal, SearchInput, SettingsMenu, SettingsRow, SideNav, SideNavGroup, SideNavItem, Sidebar, SidebarFooter, SidebarHeader, SidebarItem, SidebarNav, Skeleton, StreamingText, Tabs, TabsPanel as TabsContent, TabsList, TabsPanel, TabsTrigger, TextReveal, Toolbar, ToolbarButton, ToolbarGroup, ToolbarInput, ToolbarLink, ToolbarSeparator, ViewTransitionName, appHeaderMeta, appShellMeta, bottomNavMeta, browserMeta, chatComposerMeta, dataTableMeta, emptyStateMeta, markerMeta, messageScrollerMeta, meterIndicatorVariants, meterMeta, meterTrackVariants, notificationBadgeMeta, notificationCountVariants, notificationDotVariants, pageHeaderMeta, relativeTimeMeta, searchInputMeta, settingsMenuMeta, sideNavMeta, sidebarMeta, skeletonMeta, startViewTransition, streamingTextMeta, supportsViewTransitions, tabsMeta, toolbarGroupVariants, toolbarMeta, toolbarSeparatorVariants, toolbarVariants, useInView, useSidebar } from './chunk-6LCIBMMG.js';
5
- import { SELECTION_CARD_CHECKED, CartesianChart, resolveSeries, chartFormatters, categoryText, numberValue, niceTicks, ChartFrame, polar, riseTransition, stagger, pathStyle, morphTransition, ChartLegend, RADIO_DOT, RADIO_RING, SELECTION_CARD_TILE_HEAD, SELECTION_CARD_GLYPH, SELECTION_CARD_SHELL, SELECTION_CARD_LAYOUT, CheckboxMark, CHECK_BOX, SEGMENTED_STEP, SEGMENTED_ITEM, SEGMENTED_TRACK, ToggleGroup, Toggle, approxTextWidth, ChartTooltipContent } from './chunk-K6LII3OE.js';
6
- export { Accordion, AccordionItem, AccordionPanel, AccordionTrigger, AreaChart, BarChart, CHART_SERIES_COUNT, Checkbox, CommandMenu, CommandMenuGroup, CommandMenuItem, CommandMenuPanel, CommandMenuTrigger, DateTile, Kbd, KbdGroup, OtpField, PieChart, RadialChart, SEGMENTED_BAR_TONES, Scroller, SegmentedBar, Slider, SliderControl, SliderIndicator, SliderRoot, SliderThumb, SliderTrack, SliderValue, Sparkline, Stepper, StepperItem, Toggle, ToggleGroup, Toggle as ToggleGroupItem, accordionMeta, areaChartMeta, barChartMeta, chartColor, toneColor as chartToneColor, checkboxMeta, commandMenuMeta, dateTileMeta, kbdMeta, otpFieldMeta, pieChartMeta, radialChartMeta, segmentedBarMeta, segmentedBarSegmentVariants, segmentedBarVariants, sliderMeta, sparklineMeta, stepperConnectorVariants, stepperIndicatorVariants, stepperMeta, toggleMeta, useCommandMenuShortcut } from './chunk-K6LII3OE.js';
7
- import { withPortalThemeScope, FIELD_SHELL_XS, useTypeTier, useDensity, FIELD_SHELL, MOBILE_FIELD_TIER, useMotion, HighlightGlide, useAnchoredDensity, anchoredScroll, useIsomorphicLayoutEffect, mergeRefs, buttonVariants, FIELD_INVALID, Select, SelectTrigger, SelectContent, SelectItem, Button, Spinner, Badge, anchoredListScroll, useResizeObserver, MENU_ITEM_DESTRUCTIVE, DensityProvider, Input, Textarea, Progress } from './chunk-CKNM7KSB.js';
8
- export { AlertDialog, AlertDialogClose, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogOverlay, AlertDialogTitle, AlertDialogTrigger, Attachment, Avatar, AvatarFallback, AvatarGroup, AvatarGroupCount, AvatarImage, AvatarRoot, BADGE_APPEARANCES, BADGE_TONES, Badge, Bubble, BubbleReaction, BubbleReactions, Button, Card, CardAction, CardContent, CardDescription, CardFooter, CardHeader, CardList, CardTitle, Code, CodeBlock, CodeHighlightProvider, Density, DensityProvider, DestructiveActionModal, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, Entity, Field, Form, Input, Label, Menu, MenuCheckboxItem, MenuContent, MenuGroup, MenuGroupLabel, MenuItem, MenuPortal, MenuRadioGroup, MenuRadioItem, MenuSeparator, MenuSubmenu, MenuSubmenuTrigger, MenuTrigger, Message, MotionProvider, OverflowMenu, Pill, Progress, ProgressIndicator, ProgressLabel, ProgressTrack, ProgressValue, Select, SelectContent, SelectGroup, SelectGroupLabel, SelectItem, SelectPortal, SelectSeparator, SelectTrigger, SelectValue, Separator, SimpleTooltip, Spinner, StatusDot, Switch, Table, TableBody, TableCaption, TableCell, TableFooter, TableHead, TableHeader, TableRow, Textarea, Tooltip, TooltipArrow, TooltipContent, TooltipPortal, TooltipProvider, TooltipTrigger, attachmentMeta, avatarGroupVariants, avatarMeta, avatarVariants, badgeMeta, badgeVariants, bubbleMeta, buttonMeta, buttonVariants, cardMeta, codeBlockMeta, codeMeta, destructiveActionModalMeta, dialogMeta, entityMeta, formMeta, inputMeta, labelMeta, menuMeta, messageMeta, overflowMenuMeta, pillVariants, progressMeta, progressTrackVariants, selectMeta, separatorMeta, spinnerMeta, statusDotMeta, statusDotVariants, switchMeta, tableMeta, textareaMeta, tooltipMeta, useAnchoredDensity, useCopy, useDensity, useMotion, useReducedMotion, useScrollActivity, useTypeTier } from './chunk-CKNM7KSB.js';
4
+ export { AppHeader, AppShell, BottomNav, BottomNavItem, Browser, ChatComposer, DataTable, EmptyState, Marker, MessageScroller, Meter, MeterIndicator, MeterLabel, MeterTrack, MeterValue, NotificationBadge, PageHeader, Presence, RelativeTime, Reveal, SearchInput, SettingsMenu, SettingsRow, SideNav, SideNavGroup, SideNavItem, Sidebar, SidebarFooter, SidebarHeader, SidebarItem, SidebarNav, Skeleton, StreamingText, Tabs, TabsPanel as TabsContent, TabsList, TabsPanel, TabsTrigger, TextReveal, Toolbar, ToolbarButton, ToolbarGroup, ToolbarInput, ToolbarLink, ToolbarSeparator, ViewTransitionName, appHeaderMeta, appShellMeta, bottomNavMeta, browserMeta, chatComposerMeta, dataTableMeta, emptyStateMeta, markerMeta, messageScrollerMeta, meterIndicatorVariants, meterMeta, meterTrackVariants, notificationBadgeMeta, notificationCountVariants, notificationDotVariants, pageHeaderMeta, relativeTimeMeta, searchInputMeta, settingsMenuMeta, sideNavMeta, sidebarMeta, skeletonMeta, startViewTransition, streamingTextMeta, supportsViewTransitions, tabsMeta, toolbarGroupVariants, toolbarMeta, toolbarSeparatorVariants, toolbarVariants, useInView, useSidebar } from './chunk-D2ETQBHV.js';
5
+ import { SELECTION_CARD_CHECKED, CartesianChart, resolveSeries, chartFormatters, categoryText, numberValue, niceTicks, ChartFrame, polar, riseTransition, stagger, pathStyle, morphTransition, ChartLegend, RADIO_DOT, RADIO_RING, SELECTION_CARD_TILE_HEAD, SELECTION_CARD_GLYPH, SELECTION_CARD_SHELL, SELECTION_CARD_LAYOUT, CheckboxMark, CHECK_BOX, SEGMENTED_STEP, SEGMENTED_ITEM, SEGMENTED_TRACK, ToggleGroup, Toggle, approxTextWidth, ChartTooltipContent } from './chunk-FBSL2LZQ.js';
6
+ export { Accordion, AccordionItem, AccordionPanel, AccordionTrigger, AreaChart, BarChart, CHART_SERIES_COUNT, Checkbox, CommandMenu, CommandMenuGroup, CommandMenuItem, CommandMenuPanel, CommandMenuTrigger, DateTile, Kbd, KbdGroup, OtpField, PieChart, RadialChart, SEGMENTED_BAR_TONES, Scroller, SegmentedBar, Slider, SliderControl, SliderIndicator, SliderRoot, SliderThumb, SliderTrack, SliderValue, Sparkline, Stepper, StepperItem, Toggle, ToggleGroup, Toggle as ToggleGroupItem, accordionMeta, areaChartMeta, barChartMeta, chartColor, toneColor as chartToneColor, checkboxMeta, commandMenuMeta, dateTileMeta, kbdMeta, otpFieldMeta, pieChartMeta, radialChartMeta, segmentedBarMeta, segmentedBarSegmentVariants, segmentedBarVariants, sliderMeta, sparklineMeta, stepperConnectorVariants, stepperIndicatorVariants, stepperMeta, toggleMeta, useCommandMenuShortcut } from './chunk-FBSL2LZQ.js';
7
+ import { withPortalThemeScope, FIELD_SHELL_XS, useTypeTier, useDensity, FIELD_SHELL, MOBILE_FIELD_TIER, useMotion, HighlightGlide, useAnchoredDensity, anchoredScroll, useIsomorphicLayoutEffect, mergeRefs, buttonVariants, FIELD_INVALID, Select, SelectTrigger, SelectContent, SelectItem, Button, Spinner, Badge, anchoredListScroll, useResizeObserver, MENU_ITEM_DESTRUCTIVE, DensityProvider, Input, Textarea, Progress } from './chunk-CCUDFLU3.js';
8
+ export { AlertDialog, AlertDialogClose, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogOverlay, AlertDialogTitle, AlertDialogTrigger, Attachment, Avatar, AvatarFallback, AvatarGroup, AvatarGroupCount, AvatarImage, AvatarRoot, BADGE_APPEARANCES, BADGE_TONES, Badge, Bubble, BubbleReaction, BubbleReactions, Button, Card, CardAction, CardContent, CardDescription, CardFooter, CardHeader, CardList, CardTitle, Code, CodeBlock, CodeHighlightProvider, Density, DensityProvider, DestructiveActionModal, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, Entity, Field, Form, Input, Label, Menu, MenuCheckboxItem, MenuContent, MenuGroup, MenuGroupLabel, MenuItem, MenuPortal, MenuRadioGroup, MenuRadioItem, MenuSeparator, MenuSubmenu, MenuSubmenuTrigger, MenuTrigger, Message, MotionProvider, OverflowMenu, Pill, Progress, ProgressIndicator, ProgressLabel, ProgressTrack, ProgressValue, Select, SelectContent, SelectGroup, SelectGroupLabel, SelectItem, SelectPortal, SelectSeparator, SelectTrigger, SelectValue, Separator, SimpleTooltip, Spinner, StatusDot, Switch, Table, TableBody, TableCaption, TableCell, TableFooter, TableHead, TableHeader, TableRow, Textarea, Tooltip, TooltipArrow, TooltipContent, TooltipPortal, TooltipProvider, TooltipTrigger, attachmentMeta, avatarGroupVariants, avatarMeta, avatarVariants, badgeMeta, badgeVariants, bubbleMeta, buttonMeta, buttonVariants, cardMeta, codeBlockMeta, codeMeta, destructiveActionModalMeta, dialogMeta, entityMeta, formMeta, inputMeta, labelMeta, menuMeta, messageMeta, overflowMenuMeta, pillVariants, progressMeta, progressTrackVariants, selectMeta, separatorMeta, spinnerMeta, statusDotMeta, statusDotVariants, switchMeta, tableMeta, textareaMeta, tooltipMeta, useAnchoredDensity, useCopy, useDensity, useMotion, useReducedMotion, useScrollActivity, useTypeTier } from './chunk-CCUDFLU3.js';
9
9
  export { AspectBox, Bleed, Center, Col, Columns, Grid, GridOverlay, Page, Region, Row, SafeArea, Spacer, SplitPane, Stack } from './chunk-3IWZYBGH.js';
10
10
  import { cn } from './chunk-SRQWQUTW.js';
11
11
  export { cn } from './chunk-SRQWQUTW.js';
@@ -7003,7 +7003,7 @@ var scrubFieldMeta = {
7003
7003
  "Every scrub gesture is reachable from the keyboard: ArrowUp/ArrowDown step by `step`, Shift+Arrow by ten steps.",
7004
7004
  "Enter commits, Escape reverts to the last committed value, and blur commits \u2014 so a partial edit is never silently kept."
7005
7005
  ],
7006
- tokensUsed: ["foreground", "muted-foreground", "ring", "canvas", "panel-raised"],
7006
+ tokensUsed: ["foreground", "muted-foreground", "ring", "panel-field", "panel-field-hover"],
7007
7007
  examples: [
7008
7008
  {
7009
7009
  label: "Opacity with a glyph handle",
@@ -11260,6 +11260,6 @@ var carouselMeta = {
11260
11260
  };
11261
11261
 
11262
11262
  // src/index.ts
11263
- var SABLE_UI_VERSION = "0.3.0";
11263
+ var SABLE_UI_VERSION = "0.3.2";
11264
11264
 
11265
11265
  export { Banner, BreadcrumbItem, BreadcrumbLink, BreadcrumbPage, BreadcrumbSeparator, Breadcrumbs, COMPONENT_GROUPS, COMPONENT_TAXONOMY, Calendar, Carousel, CheckboxCard, CheckboxGroup, Collapsible, CollapsibleIndicator, CollapsiblePanel, CollapsibleTrigger, ColorField, Combobox, ComboboxChips, ComboboxClear, ComboboxContent, ComboboxEmpty, ComboboxGroup, ComboboxGroupLabel, ComboboxInput, ComboboxItem, ComboboxItemIndicator, ComboboxList, ComboboxPortal, ComboboxValue, ComboboxVirtualList, ContextCard, ContextCardArrow, ContextCardContent, ContextCardPortal, ContextCardTrigger, ContextMenu, ContextMenuContent, ContextMenuGroup, ContextMenuGroupLabel, ContextMenuItem, ContextMenuPortal, ContextMenuSeparator, ContextMenuTrigger, DatePicker, Feedback, Fieldset, FieldsetContent, FieldsetDescription, FieldsetFooter, FieldsetLegend, FileDropzone, GlidingHighlight, InlineStatus, LineChart, Marquee, MiddleTruncate, Note, NumberField, PageLoader, Pagination, Panel, PanelGroup, PanelResizer, PanelSection, Popover, PopoverArrow, PopoverClose, PopoverContent, PopoverDescription, PopoverPortal, PopoverTitle, PopoverTrigger, PropertyPair, PropertyRow, RadarChart, Radio, RadioCard, RadioGroup, SABLE_UI_VERSION, STATUS_TONES, STATUS_TONE_ICON, ScrubField, Sheet, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetPortal, SheetTitle, SheetTrigger, ShowMore, StatusBar, StatusBarGroup, StatusBarSeparator, TRANSPARENT, ThemeSelector, ThemeSwitcher, ThinkingOrb, ToastAction, ToastClose, ToastDescription, ToastProvider, ToastRoot, ToastTitle, ToastViewport, Tree, TreeAddRow, TreeEmpty, TreeRow, TreeSection, Video, Workspace, WorkspaceBar, WorkspaceCanvas, bannerMeta, bannerVariants, breadcrumbsMeta, calendarMeta, carouselMeta, checkboxCardMeta, collapsibleMeta, colorFieldMeta, comboboxMeta, componentGuidance, componentLabel, componentSlug, componentsInGroup, contextCardMeta, contextMenuMeta, datePickerMeta, feedbackMeta, fieldsetMeta, fileDropzoneMeta, fileDropzoneVariants, formatFileSize, formatHex, glidingHighlightMeta, hsvToRgb, hueColor, inlineStatusMeta, isTransparent, lineChartMeta, marqueeMeta, middleTruncateMeta, noteMeta, noteVariants, numberFieldMeta, pageLoaderMeta, paginationMeta, panelGroupMeta, panelSectionMeta, parseHex, pillMeta, popoverMeta, radarChartMeta, radioCardMeta, radioMeta, rgbToHsv, scrollerMeta, scrubFieldMeta, sheetMeta, sheetVariants, showMoreMeta, statusBarMeta, themeSelectorMeta, themeSwitcherMeta, thinkingOrbMeta, toast, toastMeta, treeIndent, treeMeta, useComboboxFilteredItems, usePanelWidth, useToast, useToastManager, videoMeta, workspaceMeta };
@@ -30,6 +30,14 @@
30
30
  --ios-safe-top: env(safe-area-inset-top, 0px); --ios-header-height: calc(92px + var(--ios-safe-top));
31
31
  --ios-tabbar-bottom: max(12px, env(safe-area-inset-bottom, 0px)); --ios-content-bottom: calc(82px + var(--ios-tabbar-bottom));
32
32
  }
33
+ /* Portalled layers — a toast stack, a menu — render at <body>, outside
34
+ .ios-prototype, so they could not see its geometry: a toast placed at
35
+ top: var(--ios-safe-top) fell back to top: auto and landed below the screen.
36
+ A prototype owns its whole document (the framed page, or a real phone's
37
+ screen), so the root carries the same values whenever one is present.
38
+ Keep these in step with the .ios-prototype rules above. */
39
+ :root:has(.ios-prototype) { --ios-inset: 16px; --ios-safe-top: 62px; --ios-tabbar-bottom: 28px; }
40
+ :root:has(.ios-prototype.ios-bare) { --ios-safe-top: env(safe-area-inset-top, 0px); --ios-tabbar-bottom: max(12px, env(safe-area-inset-bottom, 0px)); }
33
41
  .ios-prototype.dark {
34
42
  --ios-canvas: var(--background, #000); --ios-ink: var(--foreground, #f2f2f7); --ios-secondary: var(--muted-foreground, #aeaeb2);
35
43
  --ios-panel: var(--card, #1c1c1e); --ios-primary-ink: var(--primary-foreground, #fff);
@@ -1,5 +1,5 @@
1
- import { TextReveal, Reveal, MessageScroller, Marker, Toolbar, ToolbarButton, StreamingText, ChatComposer, SettingsMenu, SettingsRow, AppShell, PageHeader, DataTable, Meter, RelativeTime, Sidebar, SidebarHeader, SidebarNav, SidebarItem, NotificationBadge, SidebarFooter, BottomNav, BottomNavItem, AppHeader, Tabs, TabsList, TabsTrigger, TabsPanel, Skeleton, Browser, MeterLabel, MeterValue, MeterTrack, SearchInput, EmptyState, SideNav, SideNavItem } from '../chunk-6LCIBMMG.js';
2
- import { Form, Field, Input, Button, Separator, Card, CardContent, Badge, Entity, Avatar, StatusDot, CardHeader, CardTitle, CardDescription, CardAction, Message, Bubble, CodeBlock, SimpleTooltip, Attachment, CardFooter, MenuRadioGroup, MenuRadioItem, CardList, OverflowMenu, MenuItem, MenuSeparator, Textarea, Code, Select, SelectTrigger, SelectContent, SelectItem, DestructiveActionModal, Switch } from '../chunk-CKNM7KSB.js';
1
+ import { TextReveal, Reveal, MessageScroller, Marker, Toolbar, ToolbarButton, StreamingText, ChatComposer, SettingsMenu, SettingsRow, AppShell, PageHeader, DataTable, Meter, RelativeTime, Sidebar, SidebarHeader, SidebarNav, SidebarItem, NotificationBadge, SidebarFooter, BottomNav, BottomNavItem, AppHeader, Tabs, TabsList, TabsTrigger, TabsPanel, Skeleton, Browser, MeterLabel, MeterValue, MeterTrack, SearchInput, EmptyState, SideNav, SideNavItem } from '../chunk-D2ETQBHV.js';
2
+ import { Form, Field, Input, Button, Separator, Card, CardContent, Badge, Entity, Avatar, StatusDot, CardHeader, CardTitle, CardDescription, CardAction, Message, Bubble, CodeBlock, SimpleTooltip, Attachment, CardFooter, MenuRadioGroup, MenuRadioItem, CardList, OverflowMenu, MenuItem, MenuSeparator, Textarea, Code, Select, SelectTrigger, SelectContent, SelectItem, DestructiveActionModal, Switch } from '../chunk-CCUDFLU3.js';
3
3
  import { Region, Stack, Row, Grid, Page, Columns, Col, AspectBox } from '../chunk-3IWZYBGH.js';
4
4
  import '../chunk-SRQWQUTW.js';
5
5
  import { Icon } from '../chunk-NGBDP3BM.js';
@@ -1,4 +1,4 @@
1
- import { T as ThemeManifest } from '../_contract-o3tUc8Ig.js';
1
+ import { T as ThemeManifest } from '../_contract-BlKMR4eX.js';
2
2
 
3
3
  /** The public theme vocabulary. Presets never need component overrides. */
4
4
  declare const PRESET_TOKEN_NAMES: readonly string[];