@sableui/react 0.14.0 → 0.15.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 (42) hide show
  1. package/CHANGELOG.md +58 -0
  2. package/DESIGN.md +3 -1
  3. package/dist/blocks/index.d.ts +12 -1
  4. package/dist/blocks/index.js +4 -0
  5. package/dist/blocks/message-reactions-block.js +87 -0
  6. package/dist/blocks/message-reactions-block.meta.js +23 -0
  7. package/dist/components/bubble/bubble.js +105 -5
  8. package/dist/components/bubble/bubble.meta.js +42 -6
  9. package/dist/components/bubble/bubble.variants.js +1 -1
  10. package/dist/components/bubble/index.js +2 -0
  11. package/dist/components/feedback/feedback.js +8 -1
  12. package/dist/components/feedback/feedback.meta.js +6 -0
  13. package/dist/components/like-button/index.js +7 -0
  14. package/dist/components/like-button/like-button.js +89 -0
  15. package/dist/components/like-button/like-button.meta.js +132 -0
  16. package/dist/components/reaction-picker/index.js +13 -0
  17. package/dist/components/reaction-picker/reaction-picker.js +104 -0
  18. package/dist/components/reaction-picker/reaction-picker.meta.js +156 -0
  19. package/dist/components/toast/toast.js +25 -13
  20. package/dist/components/toast/toast.meta.js +7 -1
  21. package/dist/file-hashes.json +26 -17
  22. package/dist/foundations/motion.js +21 -1
  23. package/dist/icon-sets/reicon.js +11 -1
  24. package/dist/index.d.ts +295 -62
  25. package/dist/index.js +3 -1
  26. package/dist/lib/taxonomy.js +2 -0
  27. package/dist/motion/Burst.js +79 -0
  28. package/dist/motion/index.js +2 -0
  29. package/dist/styles.css +141 -0
  30. package/llms/blocks/message-reactions-block.md +116 -0
  31. package/llms/components/bubble.md +17 -7
  32. package/llms/components/feedback.md +1 -0
  33. package/llms/components/like-button.md +91 -0
  34. package/llms/components/reaction-picker.md +115 -0
  35. package/llms/components/toast.md +2 -1
  36. package/llms/foundations/motion.md +18 -2
  37. package/llms/reference/utilities.md +4 -1
  38. package/llms-full.txt +374 -12
  39. package/llms.txt +9 -6
  40. package/package.json +1 -1
  41. package/registry.json +573 -12
  42. package/targets/ios.json +18 -0
@@ -31,6 +31,8 @@ var motion = {
31
31
  { name: "motion-appear", value: "fast fade + base scale", use: "A small control mounting in place: a clear button, a send arrow, a badge. @starting-style, no JS." },
32
32
  { name: "motion-arrive", value: "base \xB7 decelerate \xB7 staggered \xB7 expressive", use: "Items a user action brings into a list: a folder's children on expand, a row just added. Never on every render." },
33
33
  { name: "motion-size", value: "base \xB7 emphasized \xB7 expressive", use: "An element easing between intrinsic sizes when its label changes: a two-step confirm, Copy \u2192 Copied." },
34
+ { name: "motion-bloom", value: "slower \xB7 0 \u2192 1.2 \u2192 1 \xB7 expressive", use: "A small glyph landing in its on state: a liked heart, a picked rating, a toast's status icon. Remount it (key) to replay; never on the resting state." },
35
+ { name: "<Burst>", value: "slower ring + thrown dots \xB7 expressive", use: "The follow-through behind a bloom, in the theme's palette families. Only on a choice a person made: a like, a star, a finished task." },
34
36
  { name: "motion-draw", value: "slower \xB7 decelerate", use: 'SVG line art drawing on when a <Reveal> scrolls in. The path needs pathLength="1"; stagger siblings with --motion-draw-delay.' },
35
37
  { name: "motion-spin \xB7 pulse \xB7 shimmer \xB7 dot-bounce \xB7 ping", value: "loops", use: "Activity. Scale-aware, so reduced motion freezes them." }
36
38
  ]
@@ -50,7 +52,7 @@ var motion = {
50
52
  note: "Essential motion answers the user; expressive motion narrates continuity. Expressive durations are also multiplied by --motion-expressive, which `subtle` sets to 0. Each level can only turn motion down from what surrounds it.",
51
53
  terms: [
52
54
  { name: "essential", value: "always, unless off", use: "Colour and focus feedback, press, overlay arrival, disclosure height, loaders, chart hover." },
53
- { name: "expressive", value: "full only", use: "Glides, rolling numbers (NumberTicker), drawn ticks, shakes, staggers, chart arrival and morph, scroll reveals, spring overshoot." },
55
+ { name: "expressive", value: "full only", use: "Glides, rolling numbers (NumberTicker), drawn ticks, blooms and bursts, shakes, staggers, chart arrival and morph, scroll reveals, spring overshoot." },
54
56
  { name: "full", value: "default", use: "Both levels play. The crafted default." },
55
57
  { name: "subtle", value: 'data-motion="subtle"', use: "Essential only; nothing overshoots. For dense tools, embedded widgets, readers who want calm without stillness." },
56
58
  { name: "off", value: 'data-motion="off" \xB7 reduce-motion', use: "Nothing moves; every state still changes." },
@@ -112,6 +114,18 @@ var motion = {
112
114
  rule: "A state change finishes its story: refused shakes and says why, success confirms in place, armed asks again.",
113
115
  why: "Motion that starts a change and leaves the outcome to a snap reads as unfinished. ConfirmButton, OtpField's invalid shake and the copy-to-check swap are the reference cases."
114
116
  },
117
+ {
118
+ rule: "Amplitude scales with smallness. A 16px glyph that turns on grows from nothing past its size; a surface travels from 0.96 and a press settles to 0.97.",
119
+ why: "The same 4% that is right for a dialog is invisible on an icon, which is why a state change on a small control used to read as a colour swap with no life in it. A dialog that overshot 20% would lurch. Size, not importance, sets how far a thing moves."
120
+ },
121
+ {
122
+ rule: "Stage a moment: the main object lands first, the follow-through after it.",
123
+ why: "A ring that opens, a glyph that blooms 90ms later, dots thrown 60ms after that read as one event with a cause and an effect. Everything starting on the same frame reads as a flash. LikeButton and the toast's status glyph are the reference cases."
124
+ },
125
+ {
126
+ rule: "Celebrate only what a person chose, and only at full motion.",
127
+ why: "A burst is a reply. On a like it is delight; on a system event, on load, or on every row of a list it is a notification wearing confetti. Under subtle the fill alone answers."
128
+ },
115
129
  {
116
130
  rule: "Component motion props and MotionScope only turn motion down.",
117
131
  why: "`full` on a component means inherit. Nothing below the provider can switch motion back on for a reader who asked for it off."
@@ -166,6 +180,12 @@ var motion = {
166
180
  after: '<NumberTicker value={total} format={{ style: "currency", currency: "USD" }} />',
167
181
  why: "The digits that changed roll; the ones that did not stay still, so the eye goes straight to the difference."
168
182
  },
183
+ {
184
+ title: "A glyph that lands",
185
+ before: '<Icon name="heart" variant={liked ? "solid" : "regular"} />',
186
+ after: "<LikeButton count={likes} defaultPressed={liked} />",
187
+ why: "The heart used to swap fill in one frame. Now it blooms past its size and settles while a ring and dots burst from it, and the count rolls: the same state, told as an event."
188
+ },
169
189
  {
170
190
  title: "Faster exits",
171
191
  before: "transition: opacity 200ms ease-in-out; /* in and out */",
@@ -72,6 +72,9 @@ import { Pause } from "reicon-react/icons/Pause";
72
72
  import { Play } from "reicon-react/icons/Play";
73
73
  import { Previous } from "reicon-react/icons/Previous";
74
74
  import { Refresh } from "reicon-react/icons/Refresh";
75
+ import { Restart } from "reicon-react/icons/Restart";
76
+ import { EmojiHappy } from "reicon-react/icons/EmojiHappy";
77
+ import { PlaybackSpeed } from "reicon-react/icons/PlaybackSpeed";
75
78
  import { Send } from "reicon-react/icons/Send";
76
79
  import { Star } from "reicon-react/icons/Star";
77
80
  import { Trash } from "reicon-react/icons/Trash";
@@ -181,7 +184,14 @@ var ICONS = {
181
184
  paperclip: Paperclip,
182
185
  chart: ChartBar,
183
186
  flag: Flag,
184
- "at-sign": AtSign
187
+ "at-sign": AtSign,
188
+ // Added when the docs' preview controls borrowed `sparkles` (which reads
189
+ // as AI) for a motion level and `refresh` (which reads as fetching again)
190
+ // for watching an animation from its first frame.
191
+ replay: Restart,
192
+ motion: PlaybackSpeed,
193
+ // Added for the add-reaction pill under a chat bubble.
194
+ emoji: EmojiHappy
185
195
  };
186
196
  var WEIGHTS = {
187
197
  regular: "Outline",
package/dist/index.d.ts CHANGED
@@ -440,6 +440,118 @@ declare namespace Presence {
440
440
  var displayName: string;
441
441
  }
442
442
 
443
+ /**
444
+ * The palette: nine colour families and a scale under every tone, generated
445
+ * for whatever theme is painting. `scripts/build-palette.mjs` writes this into
446
+ * `src/palette.css`; `palette.test.ts` holds every built-in theme to it.
447
+ *
448
+ * The contract is roles, and roles are not enough for a product. Tags, avatars,
449
+ * labels and illustration need more colours than three tones, and raw Tailwind
450
+ * steps ignore the theme, so they were banned outright. These follow it:
451
+ *
452
+ * - A **family** (red, orange, yellow, green, teal, blue, purple, pink) keeps
453
+ * its own hue and leans toward the brand by half the gap, at most 15°, and
454
+ * only as far as the brand has colour to lean toward (an ink-black primary
455
+ * pulls nothing). Material 3's harmonize, the same lean the customizer gives
456
+ * status colours. Lightness and chroma are fixed per step, fitted inside sRGB
457
+ * across the whole lean, so no brand can push a step out of gamut.
458
+ * - **neutral** is the theme's own page and ink mixed in steps, so it carries
459
+ * whatever tint the theme's surfaces do.
460
+ * - Every **tone** (tone-1…3, info, warning, success, destructive) gets a scale
461
+ * on one shared ladder of depths, and the tone lands exactly on the step
462
+ * nearest its own lightness: a light status colour in dark mode is 800, a
463
+ * mid one is 500. The steps either side stretch to keep the ladder's ends,
464
+ * so a tone near one end does not crush five steps into the little room
465
+ * left past it, and tone-1-100 and success-100 are the same depth.
466
+ *
467
+ * Steps follow the mode rather than literal lightness: a low step is always
468
+ * near the page and a high step always far from it, so 800 text on a 100
469
+ * wash reads in both modes with no `dark:` (Sable has none).
470
+ */
471
+ declare const PALETTE_STEPS: readonly [50, 100, 200, 300, 400, 500, 600, 700, 800, 900, 950];
472
+ type PaletteStep = (typeof PALETTE_STEPS)[number];
473
+ interface PaletteFamily {
474
+ name: string;
475
+ /** The family's own hue, before the lean. */
476
+ hue: number;
477
+ /** Step 500, per mode: lightness and the chroma the family is aiming for. */
478
+ light: {
479
+ l: number;
480
+ c: number;
481
+ };
482
+ dark: {
483
+ l: number;
484
+ c: number;
485
+ };
486
+ }
487
+ declare const PALETTE_FAMILIES: readonly PaletteFamily[];
488
+ /** The hue families by name — the values Badge, Pill and StatusDot take on `tone`. */
489
+ declare const PALETTE_COLORS: readonly ["red", "orange", "yellow", "green", "teal", "blue", "purple", "pink"];
490
+ type PaletteColor = (typeof PALETTE_COLORS)[number];
491
+ declare const isPaletteColor: (value: unknown) => value is PaletteColor;
492
+ /** Tokens that get a scale of their own, `--<token>-50` … `--<token>-950`. */
493
+ declare const PALETTE_TONES: readonly ["tone-1", "tone-2", "tone-3", "tone-info", "tone-warning", "success", "destructive"];
494
+ /** Everything the palette names: neutral, the families, then the tone scales. */
495
+ declare const PALETTE_SCALES: readonly ["neutral", ...string[], "tone-1", "tone-2", "tone-3", "tone-info", "tone-warning", "success", "destructive"];
496
+
497
+ interface BurstProps {
498
+ /**
499
+ * Plays the burst each time this value changes. Nothing plays on mount, so
500
+ * a page that loads with a post already liked stays still. A counter that
501
+ * goes up on each "on" is the usual trigger; leave it alone on "off" so
502
+ * un-liking is quiet.
503
+ */
504
+ trigger: unknown;
505
+ /**
506
+ * The palette families the dots take in turn. The ring blooms in the host's
507
+ * `currentColor` and fades into the first. Families, not colours: the
508
+ * palette is generated from the active theme, so the confetti re-themes
509
+ * with everything else. @default ["pink", "purple", "blue", "orange"]
510
+ */
511
+ palette?: readonly PaletteColor[];
512
+ /** How many places dots fly from; each throws a pair. @default 7 */
513
+ count?: number;
514
+ /**
515
+ * Throw this instead of dots: copies of the glyph being celebrated (an
516
+ * emoji reaction), larger than a dot and with no ring, the way a reaction
517
+ * sprays its own emoji. Text only — it is repeated once per piece.
518
+ */
519
+ particle?: ReactNode;
520
+ /**
521
+ * Also play once when it mounts. For a glyph that arrives BECAUSE of the
522
+ * action — a reaction pill that did not exist until the reader chose it —
523
+ * where mounting is the change. Never for a page that loads.
524
+ * @default false
525
+ */
526
+ playOnMount?: boolean;
527
+ /** Sizing (`[--burst-size:…]`) or placement. */
528
+ className?: string;
529
+ /**
530
+ * How much motion this component uses. A burst is pure flourish, so it
531
+ * renders only at `full`: `subtle` and `off` render nothing.
532
+ */
533
+ motion?: MotionLevel;
534
+ }
535
+ /**
536
+ * Burst — the follow-through after a small celebratory toggle: a disc that
537
+ * hollows into a ring, then dots thrown outward that shrink as they go. Place
538
+ * it inside a `relative` wrapper around the glyph it celebrates, beside a
539
+ * `motion-bloom` on the glyph itself:
540
+ *
541
+ * <span className="relative inline-flex">
542
+ * <span key={likes} className={liked ? "motion-bloom" : undefined}><Icon name="heart" /></span>
543
+ * <Burst trigger={likes} />
544
+ * </span>
545
+ *
546
+ * It sizes from `--burst-size` (the ring's diameter, default 2.25em — about
547
+ * twice the glyph) and colours from the themed palette families. Decorative and
548
+ * `aria-hidden`; it draws outside its box and never takes pointer events.
549
+ * Use it for a moment of delight on an action a person chose — a like, a
550
+ * star, a finished task — never on something the system did, and never on
551
+ * every row of a list at once.
552
+ */
553
+ declare function Burst({ trigger, palette, count, particle, playOnMount, className, motion, }: BurstProps): react.JSX.Element | null;
554
+
443
555
  /** Is the cross-document/SPA View Transitions API available? */
444
556
  declare function supportsViewTransitions(): boolean;
445
557
  /**
@@ -643,6 +755,67 @@ declare namespace ConfirmButton {
643
755
 
644
756
  declare const confirmButtonMeta: ComponentMeta;
645
757
 
758
+ type LabelledSize = "xs" | "sm" | "md";
759
+ interface LikeButtonProps extends Omit<ButtonProps, "children" | "variant" | "size" | "iconStart" | "iconEnd" | "badge" | "loading" | "loadingLabel" | "render" | "type"> {
760
+ /** Pressed (liked), controlled. */
761
+ pressed?: boolean;
762
+ /** Pressed (liked) at first, uncontrolled. @default false */
763
+ defaultPressed?: boolean;
764
+ /** Called when a press turns it on or off, with the new state. */
765
+ onPressedChange?: (pressed: boolean, event: MouseEvent<HTMLButtonElement>) => void;
766
+ /**
767
+ * The total, shown beside the glyph and rolled when it changes. Pressing
768
+ * adds or removes the viewer's like at once, before your handler has saved
769
+ * it, and the button goes back to showing `count` exactly whenever `count`
770
+ * changes — so pass the server's total and update it when the save lands.
771
+ * Omit it for a bare glyph.
772
+ */
773
+ count?: number;
774
+ /** How to write the count — `{ notation: "compact" }` for 1.2K. Passed to `Intl.NumberFormat`. */
775
+ format?: Intl.NumberFormatOptions;
776
+ /** The glyph, by icon name. Its `solid` variant is shown while pressed. @default "heart" */
777
+ icon?: string;
778
+ /**
779
+ * The palette family the glyph fills with while pressed; the burst blooms
780
+ * from it. A family, not a colour, so it follows the theme. @default "red"
781
+ */
782
+ tone?: PaletteColor;
783
+ /** The accessible name, read before the count. @default "Like" */
784
+ label?: string;
785
+ /** @default "ghost" */
786
+ variant?: "ghost" | "outline" | "secondary";
787
+ /** @default "sm" */
788
+ size?: LabelledSize;
789
+ /**
790
+ * How much motion this component uses: `full` (default) inherits the app's
791
+ * policy, `subtle` keeps feedback and drops the flourish, `off` stills it.
792
+ * It can only turn motion down — it never overrides a reader's reduce-motion
793
+ * setting. The bloom and burst are the flourish; the fill and the count
794
+ * changing stay.
795
+ */
796
+ motion?: MotionLevel;
797
+ }
798
+ /**
799
+ * LikeButton — a pressed-or-not toggle for a like, a star, a save. Pressing
800
+ * it on fills the glyph, which blooms past its size and settles while a ring
801
+ * and a spray of dots burst from it, and the count rolls up a digit. Pressing
802
+ * it off is quiet: the glyph empties and the count rolls back.
803
+ *
804
+ * <LikeButton count={post.likes} defaultPressed={post.liked} onPressedChange={(on) => save(on)} />
805
+ * <LikeButton icon="star" tone="yellow" label="Star" count={repo.stars} />
806
+ *
807
+ * A Sable Button carrying `aria-pressed`, with Toggle's controlled/uncontrolled
808
+ * contract (`pressed` / `defaultPressed` / `onPressedChange`). It composes
809
+ * Button rather than Toggle: Toggle's pressed fill is the one thing a like
810
+ * must not show — its state is the glyph.
811
+ */
812
+ declare function LikeButton({ className, count, format, icon, tone, label, variant, size, motion, pressed: pressedProp, defaultPressed, onPressedChange, onClick, ...props }: LikeButtonProps): react.JSX.Element;
813
+ declare namespace LikeButton {
814
+ var displayName: string;
815
+ }
816
+
817
+ declare const likeButtonMeta: ComponentMeta;
818
+
646
819
  interface CardProps extends ComponentPropsWithRef<"div"> {
647
820
  /** "default" = raised surface (bg-card + edge + soft shadow). "flat" = transparent. */
648
821
  variant?: "default" | "flat";
@@ -4177,7 +4350,7 @@ declare const datePickerMeta: ComponentMeta;
4177
4350
  * binds it via Base UI's `toastManager` prop.
4178
4351
  */
4179
4352
  declare const toastManager: _base_ui_react.ToastManager<any>;
4180
- /** Visual/semantic type of a toast — drives the accent and (for loading) a spinner. */
4353
+ /** Visual/semantic type of a toast — drives the status glyph and (for loading) a spinner. */
4181
4354
  type ToastType = "success" | "error" | "warning" | "info" | "loading";
4182
4355
  /** Screen anchor for the toast stack. */
4183
4356
  type ToastPosition = "top-left" | "top-center" | "top-right" | "bottom-left" | "bottom-center" | "bottom-right";
@@ -8937,6 +9110,68 @@ declare namespace Message {
8937
9110
 
8938
9111
  declare const messageMeta: ComponentMeta;
8939
9112
 
9113
+ /** One choice in a reaction picker: the emoji and the name a screen reader says for it. */
9114
+ interface Reaction {
9115
+ emoji: string;
9116
+ /** The accessible name, e.g. "Heart". An emoji's own spoken name varies by platform. */
9117
+ label: string;
9118
+ }
9119
+ /** The quick set a picker offers when you pass none — the reactions most chats lead with. */
9120
+ declare const DEFAULT_REACTIONS: readonly Reaction[];
9121
+ interface ReactionChoiceProps {
9122
+ /** The choices, in order. @default DEFAULT_REACTIONS */
9123
+ reactions?: readonly Reaction[];
9124
+ /** The emoji the reader has already reacted with: shown pressed, and choosing one again removes it. */
9125
+ selected?: readonly string[];
9126
+ /** Called with the emoji the reader chose. Toggle it in or out of `selected`. */
9127
+ onSelect?: (emoji: string) => void;
9128
+ /**
9129
+ * How much motion this component uses: `full` (default) inherits the app's
9130
+ * policy, `subtle` keeps the press and drops the wave of emoji blooming in,
9131
+ * `off` stills it. It can only turn motion down.
9132
+ */
9133
+ motion?: MotionLevel;
9134
+ }
9135
+ interface ReactionPickerProps extends ReactionChoiceProps, Omit<ToolbarProps, "children" | "onSelect"> {
9136
+ /** Trailing controls after the emoji — a "more" button that opens a full picker. */
9137
+ children?: ReactNode;
9138
+ }
9139
+ /**
9140
+ * ReactionPicker — the quick row of emoji you react to a message with. A
9141
+ * toolbar: one stop in the tab order, the arrow keys move along it, and each
9142
+ * emoji is a toggle reporting `aria-pressed`. Opening it plays a short wave as
9143
+ * the emoji bloom in one after another, and the one under the pointer
9144
+ * magnifies. Put it in a Popover from an add-reaction control — or use
9145
+ * `BubbleReactionAdd`, which is exactly that — and use `MenuReactions` for the
9146
+ * same row inside a right-click menu.
9147
+ *
9148
+ * <ReactionPicker selected={mine} onSelect={(emoji) => toggle(message.id, emoji)} />
9149
+ */
9150
+ declare function ReactionPicker({ reactions, selected, onSelect, motion, className, children, "aria-label": ariaLabel, ...props }: ReactionPickerProps): react.JSX.Element;
9151
+ declare namespace ReactionPicker {
9152
+ var displayName: string;
9153
+ }
9154
+ interface MenuReactionsProps extends ReactionChoiceProps, Omit<ComponentProps<typeof Menu$1.Group>, "className" | "children" | "onSelect"> {
9155
+ className?: string;
9156
+ }
9157
+ /**
9158
+ * The same quick row as the first group of a menu — the reactions above Reply
9159
+ * and Copy when a message is right-clicked or long-pressed. Each emoji is a
9160
+ * checkbox menu item (checked when the reader has reacted with it), so the
9161
+ * arrow keys and typeahead reach it like any other row, and choosing one
9162
+ * closes the menu. Works in `MenuContent` and `ContextMenuContent` alike.
9163
+ *
9164
+ * <ContextMenuContent>
9165
+ * <MenuReactions selected={mine} onSelect={toggle} />
9166
+ * <ContextMenuSeparator />
9167
+ * <ContextMenuItem>Reply</ContextMenuItem>
9168
+ * </ContextMenuContent>
9169
+ */
9170
+ declare function MenuReactions({ reactions, selected, onSelect, motion, className, "aria-label": ariaLabel, ...props }: MenuReactionsProps): react.JSX.Element;
9171
+ declare namespace MenuReactions {
9172
+ var displayName: string;
9173
+ }
9174
+
8940
9175
  interface BubbleProps extends ComponentPropsWithRef<"div"> {
8941
9176
  /**
8942
9177
  * Surface treatment. `muted` for the other party, `primary` for the reader's
@@ -8971,8 +9206,9 @@ interface BubbleProps extends ComponentPropsWithRef<"div"> {
8971
9206
  * <Message>
8972
9207
  * <Bubble>Shipping it now.</Bubble>
8973
9208
  * <BubbleReactions>
8974
- * <BubbleReaction emoji="🎉" count={3} active onClick={() => toggle("🎉")} />
8975
- * <BubbleReaction emoji="👀" count={1} onClick={() => toggle("👀")} />
9209
+ * <BubbleReaction emoji="🎉" label="Party" count={3} active onClick={() => toggle("🎉")} />
9210
+ * <BubbleReaction emoji="👀" label="Eyes" count={1} onClick={() => toggle("👀")} />
9211
+ * <BubbleReactionAdd selected={mine} onSelect={toggle} />
8976
9212
  * </BubbleReactions>
8977
9213
  * </Message>
8978
9214
  *
@@ -8989,31 +9225,82 @@ interface BubbleReactionsProps extends ComponentPropsWithRef<"div"> {
8989
9225
  /** Match the enclosing `<Bubble align>` so the row hangs off the right edge. @default "start" */
8990
9226
  align?: "start" | "end";
8991
9227
  }
8992
- /** The row of reaction pills belonging to one bubble. */
8993
- declare function BubbleReactions({ align, className, ...props }: BubbleReactionsProps): react.JSX.Element;
9228
+ /**
9229
+ * The row of reaction pills belonging to one bubble. Render it for every
9230
+ * message, even one with no reactions yet: it hides itself while empty, and
9231
+ * staying mounted is how it knows the first reaction someone adds is new
9232
+ * (and so celebrates) rather than one the page loaded with.
9233
+ */
9234
+ declare function BubbleReactions({ align, className, children, ...props }: BubbleReactionsProps): react.JSX.Element;
8994
9235
  declare namespace BubbleReactions {
8995
9236
  var displayName: string;
8996
9237
  }
8997
9238
  interface BubbleReactionProps extends Omit<ComponentPropsWithRef<"button">, "children"> {
8998
9239
  /** The reaction glyph. Rendered as text, so any emoji works with no icon mapping. */
8999
9240
  emoji: ReactNode;
9241
+ /**
9242
+ * What the emoji means, for the accessible name ("Party, 3"). An emoji's own
9243
+ * spoken name varies by platform; without a label the pill is named by its
9244
+ * count alone.
9245
+ */
9246
+ label?: string;
9000
9247
  /** How many people reacted this way. Hidden at 1 — the pill already says "one". */
9001
9248
  count?: number;
9002
9249
  /** The reader reacted this way. Drives `aria-pressed`, not just the styling. */
9003
9250
  active?: boolean;
9251
+ /**
9252
+ * How much motion this component uses: `full` (default) inherits the app's
9253
+ * policy, `subtle` keeps the tint and the count changing and drops the
9254
+ * bloom and the spray of emoji, `off` stills it. It can only turn motion down.
9255
+ */
9256
+ motion?: MotionLevel;
9004
9257
  }
9005
9258
  /**
9006
9259
  * One reaction pill — a toggle, not a label. It reports `aria-pressed` because
9007
9260
  * "did I react to this" is state a screen-reader user needs before deciding
9008
9261
  * whether pressing it adds or removes their reaction.
9262
+ *
9263
+ * When it becomes the reader's own — pressed on, or added from a picker — the
9264
+ * emoji blooms and a spray of copies of it bursts out, the way a chat app
9265
+ * answers a reaction, and the count rolls. Pressing it off is quiet. A pill
9266
+ * the page loads with never plays.
9009
9267
  */
9010
- declare function BubbleReaction({ emoji, count, active, className, ...props }: BubbleReactionProps): react.JSX.Element;
9268
+ declare function BubbleReaction({ emoji, label, count, active, motion, className, ...props }: BubbleReactionProps): react.JSX.Element;
9011
9269
  declare namespace BubbleReaction {
9012
9270
  var displayName: string;
9013
9271
  }
9272
+ interface BubbleReactionAddProps extends Omit<ComponentPropsWithRef<"button">, "children" | "onSelect"> {
9273
+ /** The choices the picker offers. @default DEFAULT_REACTIONS */
9274
+ reactions?: readonly Reaction[];
9275
+ /** The emoji the reader has already reacted with, shown pressed in the picker. */
9276
+ selected?: readonly string[];
9277
+ /** Called with the emoji the reader chose; the picker closes. Toggle it in or out of `selected`. */
9278
+ onSelect?: (emoji: string) => void;
9279
+ /** The accessible name. @default "Add reaction" */
9280
+ label?: string;
9281
+ /** Passed to the picker: how much motion it uses. */
9282
+ motion?: MotionLevel;
9283
+ }
9284
+ /**
9285
+ * The add-reaction pill at the end of a reaction row: a smiley that opens a
9286
+ * ReactionPicker above it. Choosing an emoji closes the picker and hands the
9287
+ * emoji to `onSelect`; add it to the row and the new pill celebrates as it
9288
+ * arrives.
9289
+ *
9290
+ * <BubbleReactions>
9291
+ * {pills}
9292
+ * <BubbleReactionAdd selected={mine} onSelect={toggle} />
9293
+ * </BubbleReactions>
9294
+ */
9295
+ declare function BubbleReactionAdd({ reactions, selected, onSelect, label, motion, className, ...props }: BubbleReactionAddProps): react.JSX.Element;
9296
+ declare namespace BubbleReactionAdd {
9297
+ var displayName: string;
9298
+ }
9014
9299
 
9015
9300
  declare const bubbleMeta: ComponentMeta;
9016
9301
 
9302
+ declare const reactionPickerMeta: ComponentMeta;
9303
+
9017
9304
  interface AttachmentProps extends Omit<ComponentPropsWithRef<"div">, "onClick"> {
9018
9305
  /**
9019
9306
  * File name. When it runs out of room the stem truncates and the extension
@@ -9485,60 +9772,6 @@ interface SmoothWheelOptions {
9485
9772
  */
9486
9773
  declare function useSmoothWheel({ axis, mapVertical, smooth, }?: SmoothWheelOptions): (node: HTMLElement | null) => void;
9487
9774
 
9488
- /**
9489
- * The palette: nine colour families and a scale under every tone, generated
9490
- * for whatever theme is painting. `scripts/build-palette.mjs` writes this into
9491
- * `src/palette.css`; `palette.test.ts` holds every built-in theme to it.
9492
- *
9493
- * The contract is roles, and roles are not enough for a product. Tags, avatars,
9494
- * labels and illustration need more colours than three tones, and raw Tailwind
9495
- * steps ignore the theme, so they were banned outright. These follow it:
9496
- *
9497
- * - A **family** (red, orange, yellow, green, teal, blue, purple, pink) keeps
9498
- * its own hue and leans toward the brand by half the gap, at most 15°, and
9499
- * only as far as the brand has colour to lean toward (an ink-black primary
9500
- * pulls nothing). Material 3's harmonize, the same lean the customizer gives
9501
- * status colours. Lightness and chroma are fixed per step, fitted inside sRGB
9502
- * across the whole lean, so no brand can push a step out of gamut.
9503
- * - **neutral** is the theme's own page and ink mixed in steps, so it carries
9504
- * whatever tint the theme's surfaces do.
9505
- * - Every **tone** (tone-1…3, info, warning, success, destructive) gets a scale
9506
- * on one shared ladder of depths, and the tone lands exactly on the step
9507
- * nearest its own lightness: a light status colour in dark mode is 800, a
9508
- * mid one is 500. The steps either side stretch to keep the ladder's ends,
9509
- * so a tone near one end does not crush five steps into the little room
9510
- * left past it, and tone-1-100 and success-100 are the same depth.
9511
- *
9512
- * Steps follow the mode rather than literal lightness: a low step is always
9513
- * near the page and a high step always far from it, so 800 text on a 100
9514
- * wash reads in both modes with no `dark:` (Sable has none).
9515
- */
9516
- declare const PALETTE_STEPS: readonly [50, 100, 200, 300, 400, 500, 600, 700, 800, 900, 950];
9517
- type PaletteStep = (typeof PALETTE_STEPS)[number];
9518
- interface PaletteFamily {
9519
- name: string;
9520
- /** The family's own hue, before the lean. */
9521
- hue: number;
9522
- /** Step 500, per mode: lightness and the chroma the family is aiming for. */
9523
- light: {
9524
- l: number;
9525
- c: number;
9526
- };
9527
- dark: {
9528
- l: number;
9529
- c: number;
9530
- };
9531
- }
9532
- declare const PALETTE_FAMILIES: readonly PaletteFamily[];
9533
- /** The hue families by name — the values Badge, Pill and StatusDot take on `tone`. */
9534
- declare const PALETTE_COLORS: readonly ["red", "orange", "yellow", "green", "teal", "blue", "purple", "pink"];
9535
- type PaletteColor = (typeof PALETTE_COLORS)[number];
9536
- declare const isPaletteColor: (value: unknown) => value is PaletteColor;
9537
- /** Tokens that get a scale of their own, `--<token>-50` … `--<token>-950`. */
9538
- declare const PALETTE_TONES: readonly ["tone-1", "tone-2", "tone-3", "tone-info", "tone-warning", "success", "destructive"];
9539
- /** Everything the palette names: neutral, the families, then the tone scales. */
9540
- declare const PALETTE_SCALES: readonly ["neutral", ...string[], "tone-1", "tone-2", "tone-3", "tone-info", "tone-warning", "success", "destructive"];
9541
-
9542
- declare const SABLE_UI_VERSION: "0.14.0";
9775
+ declare const SABLE_UI_VERSION: "0.15.0";
9543
9776
 
9544
- 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, type BubbleReactionProps, BubbleReactions, type BubbleReactionsProps, 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, 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, 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, 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, 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, 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, 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 };
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 };
package/dist/index.js CHANGED
@@ -44,6 +44,7 @@ export * from "./motion/index.js";
44
44
  export * from "./components/button/index.js";
45
45
  export * from "./components/button-group/index.js";
46
46
  export * from "./components/confirm-button/index.js";
47
+ export * from "./components/like-button/index.js";
47
48
  export * from "./components/card/index.js";
48
49
  export * from "./components/caret-menu/index.js";
49
50
  export * from "./components/badge/index.js";
@@ -163,6 +164,7 @@ export * from "./components/chat-composer/index.js";
163
164
  export * from "./components/settings-menu/index.js";
164
165
  export * from "./components/message/index.js";
165
166
  export * from "./components/bubble/index.js";
167
+ export * from "./components/reaction-picker/index.js";
166
168
  export * from "./components/attachment/index.js";
167
169
  export * from "./components/marker/index.js";
168
170
  import { Density, DensityProvider, useDensity, useAnchoredDensity, useTypeTier } from "./lib/density.js";
@@ -175,7 +177,7 @@ import {
175
177
  } from "./lib/use-caret-trigger.js";
176
178
  import { STATUS_TONES, STATUS_TONE_ICON } from "./lib/status-tone.js";
177
179
  import { PALETTE_COLORS, PALETTE_FAMILIES, PALETTE_SCALES, PALETTE_STEPS, PALETTE_TONES, isPaletteColor } from "./lib/palette.js";
178
- var SABLE_UI_VERSION = "0.14.0";
180
+ var SABLE_UI_VERSION = "0.15.0";
179
181
  export {
180
182
  ART_TOKENS,
181
183
  CHART_SERIES_COUNT,
@@ -26,8 +26,10 @@ var COMPONENT_TAXONOMY = {
26
26
  Button: ["Actions", "either"],
27
27
  ButtonGroup: ["Actions", "either"],
28
28
  ConfirmButton: ["Actions", "either"],
29
+ LikeButton: ["Actions", "either"],
29
30
  Menubar: ["Actions", "either"],
30
31
  OverflowMenu: ["Actions", "either"],
32
+ ReactionPicker: ["Actions", "either"],
31
33
  Toolbar: ["Actions", "either"],
32
34
  /* ── Forms ────────────────────────────────────────────────────────────────
33
35
  Typing or entering a value, and the structure a form is built from.