gridsmith-ui 0.6.5 → 0.6.7

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 (65) hide show
  1. package/dist/charts.js +2 -2
  2. package/dist/chat.d.ts +12 -0
  3. package/dist/chat.js +94 -0
  4. package/dist/chat.js.map +1 -0
  5. package/dist/{chunk-TTZSZNJ6.js → chunk-4KVFH5KC.js} +7 -3
  6. package/dist/chunk-4KVFH5KC.js.map +1 -0
  7. package/dist/{chunk-KXNJJKIV.js → chunk-ADTPGMOD.js} +13 -13
  8. package/dist/chunk-ADTPGMOD.js.map +1 -0
  9. package/dist/{chunk-DDKCQVKO.js → chunk-LTV5X3S7.js} +48 -20
  10. package/dist/chunk-LTV5X3S7.js.map +1 -0
  11. package/dist/{chunk-QGBG72OB.js → chunk-M3AARGLI.js} +3 -3
  12. package/dist/{chunk-QGBG72OB.js.map → chunk-M3AARGLI.js.map} +1 -1
  13. package/dist/{chunk-GX6O72IV.js → chunk-NM3BFWHH.js} +19 -26
  14. package/dist/chunk-NM3BFWHH.js.map +1 -0
  15. package/dist/{chunk-GYVBRUO2.js → chunk-NRHIYS5W.js} +14 -3
  16. package/dist/chunk-NRHIYS5W.js.map +1 -0
  17. package/dist/chunk-R2HNSJJG.js +156 -0
  18. package/dist/chunk-R2HNSJJG.js.map +1 -0
  19. package/dist/chunk-RLUK575N.js +136 -0
  20. package/dist/chunk-RLUK575N.js.map +1 -0
  21. package/dist/chunk-WH2FUFAC.js +14 -0
  22. package/dist/chunk-WH2FUFAC.js.map +1 -0
  23. package/dist/data-grid.js +4 -3
  24. package/dist/data-grid.js.map +1 -1
  25. package/dist/editor.js +17 -13
  26. package/dist/editor.js.map +1 -1
  27. package/dist/feather-B65FI6CY.js +76 -0
  28. package/dist/feather-B65FI6CY.js.map +1 -0
  29. package/dist/heroicons-DIR7PXCR.js +76 -0
  30. package/dist/heroicons-DIR7PXCR.js.map +1 -0
  31. package/dist/icons.d.ts +1 -1
  32. package/dist/icons.js +1 -1
  33. package/dist/index.d.ts +352 -17
  34. package/dist/index.js +4612 -3484
  35. package/dist/index.js.map +1 -1
  36. package/dist/kanban.js +5 -4
  37. package/dist/kanban.js.map +1 -1
  38. package/dist/lucide-JH2R3TFV.js +76 -0
  39. package/dist/lucide-JH2R3TFV.js.map +1 -0
  40. package/dist/phosphor-HCVUMVT5.js +76 -0
  41. package/dist/phosphor-HCVUMVT5.js.map +1 -0
  42. package/dist/resizable.js +2 -2
  43. package/dist/roots.css +104 -17
  44. package/dist/tabler-HHIXSM73.js +76 -0
  45. package/dist/tabler-HHIXSM73.js.map +1 -0
  46. package/dist/tokens.css +15 -7
  47. package/dist/utils.js +1 -1
  48. package/dist/virtualized.js +1 -1
  49. package/dist-static/tokens.css +15 -7
  50. package/package.json +14 -2
  51. package/dist/chunk-DDKCQVKO.js.map +0 -1
  52. package/dist/chunk-GX6O72IV.js.map +0 -1
  53. package/dist/chunk-GYVBRUO2.js.map +0 -1
  54. package/dist/chunk-KXNJJKIV.js.map +0 -1
  55. package/dist/chunk-TTZSZNJ6.js.map +0 -1
  56. package/dist/feather-U45EQTAU.js +0 -72
  57. package/dist/feather-U45EQTAU.js.map +0 -1
  58. package/dist/heroicons-D3G7QU45.js +0 -72
  59. package/dist/heroicons-D3G7QU45.js.map +0 -1
  60. package/dist/lucide-OGUV44TQ.js +0 -72
  61. package/dist/lucide-OGUV44TQ.js.map +0 -1
  62. package/dist/phosphor-QG2ZMEMZ.js +0 -72
  63. package/dist/phosphor-QG2ZMEMZ.js.map +0 -1
  64. package/dist/tabler-MW2HN55L.js +0 -72
  65. package/dist/tabler-MW2HN55L.js.map +0 -1
package/dist/index.d.ts CHANGED
@@ -1,12 +1,12 @@
1
1
  import * as react from 'react';
2
- import { ButtonHTMLAttributes, ReactNode, InputHTMLAttributes, LabelHTMLAttributes, TextareaHTMLAttributes, Ref, ReactElement, HTMLAttributes, AnchorHTMLAttributes, ComponentType } from 'react';
2
+ import { ButtonHTMLAttributes, ReactNode, InputHTMLAttributes, LabelHTMLAttributes, TextareaHTMLAttributes, Ref, CSSProperties, ReactElement, HTMLAttributes, AnchorHTMLAttributes, ComponentType } from 'react';
3
3
  import * as react_jsx_runtime from 'react/jsx-runtime';
4
4
  import { IconName } from './icons.js';
5
5
  import { B as BreakpointKey } from './use-breakpoint-BfKzmkxx.js';
6
6
  export { a as BreakpointWidthProvider, u as useBreakpoint } from './use-breakpoint-BfKzmkxx.js';
7
7
 
8
8
  type ButtonVariant = "default" | "secondary" | "tertiary" | "outline" | "ghost" | "destructive" | "success" | "warning" | "link";
9
- type ButtonSize = "sm" | "md" | "lg" | "icon-sm" | "icon" | "icon-lg";
9
+ type ButtonSize = "xs" | "sm" | "md" | "lg" | "icon-xs" | "icon-sm" | "icon" | "icon-lg";
10
10
  declare const ButtonSizeContext: react.Context<ButtonSize | null>;
11
11
  interface ButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {
12
12
  variant?: ButtonVariant;
@@ -65,18 +65,21 @@ declare function Input({ className, size, error, prefix, suffix, ...props }: Omi
65
65
  interface TextareaProps extends TextareaHTMLAttributes<HTMLTextAreaElement> {
66
66
  autoResize?: boolean;
67
67
  maxRows?: number;
68
+ error?: boolean;
68
69
  ref?: Ref<HTMLTextAreaElement>;
69
70
  }
70
- declare function Textarea({ className, autoResize, maxRows, ref, ...props }: TextareaProps): react_jsx_runtime.JSX.Element;
71
+ declare function Textarea({ className, autoResize, maxRows, error, ref, ...props }: TextareaProps): react_jsx_runtime.JSX.Element;
71
72
  declare function Label({ className, children, ...props }: LabelHTMLAttributes<HTMLLabelElement>): react_jsx_runtime.JSX.Element;
72
73
  type ToggleLayout = "full" | "compact";
73
- declare function Toggle({ checked, onChange, label, disabled, error, layout, "aria-labelledby": ariaLabelledBy, ...rest }: {
74
+ type ToggleSize = "sm" | "md";
75
+ declare function Toggle({ checked, onChange, label, disabled, error, layout, size, "aria-labelledby": ariaLabelledBy, ...rest }: {
74
76
  checked: boolean;
75
77
  onChange: (v: boolean) => void;
76
78
  label?: string;
77
79
  disabled?: boolean;
78
80
  error?: boolean;
79
81
  layout?: ToggleLayout;
82
+ size?: ToggleSize;
80
83
  "aria-labelledby"?: string;
81
84
  } & Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, "onChange">): react_jsx_runtime.JSX.Element;
82
85
 
@@ -124,16 +127,18 @@ interface ComboboxProps {
124
127
  }
125
128
  declare function Combobox({ value, onChange, options, placeholder, disabled, loading, className, ref, container, error }: ComboboxProps): react_jsx_runtime.JSX.Element;
126
129
 
130
+ type CheckboxSize = "sm" | "md";
127
131
  interface CheckboxProps {
128
132
  checked: boolean;
129
133
  onChange: (checked: boolean) => void;
130
134
  label?: string;
135
+ size?: CheckboxSize;
131
136
  disabled?: boolean;
132
137
  indeterminate?: boolean;
133
138
  className?: string;
134
139
  ref?: Ref<HTMLInputElement>;
135
140
  }
136
- declare function Checkbox({ checked, onChange, label, disabled, indeterminate, className, ref }: CheckboxProps): react_jsx_runtime.JSX.Element;
141
+ declare function Checkbox({ checked, onChange, label, size, disabled, indeterminate, className, ref }: CheckboxProps): react_jsx_runtime.JSX.Element;
137
142
  interface CheckboxGroupProps {
138
143
  value: string[];
139
144
  onChange: (value: string[]) => void;
@@ -257,8 +262,13 @@ interface SliderRangeProps {
257
262
  className?: string;
258
263
  ref?: Ref<HTMLDivElement>;
259
264
  error?: boolean;
265
+ /**
266
+ * Paint the track yourself (e.g. a hue spectrum for a colour slider). The
267
+ * accent fill is hidden so the custom track stays fully visible.
268
+ */
269
+ trackStyle?: CSSProperties;
260
270
  }
261
- declare function SliderRange({ value, onChange, min, max, step, disabled, showValue, className, ref, error, label }: SliderRangeProps): react_jsx_runtime.JSX.Element;
271
+ declare function SliderRange({ value, onChange, min, max, step, disabled, showValue, className, ref, error, label, trackStyle }: SliderRangeProps): react_jsx_runtime.JSX.Element;
262
272
 
263
273
  interface TimePickerProps {
264
274
  value: string;
@@ -700,13 +710,21 @@ declare function AvatarGroup({ items, max, size, ring, onOverflowClick, classNam
700
710
 
701
711
  interface EmptyStateProps {
702
712
  icon?: ReactNode;
713
+ /** How the icon is framed: the neutral circle (default), or none when the icon element brings its own frame. */
714
+ iconFrame?: "circle" | "none";
703
715
  title: string;
704
716
  description?: string;
705
717
  action?: ReactNode;
706
718
  variant?: "empty" | "filtered" | "error" | "no-permission";
719
+ /**
720
+ * Draw a subtle solid border around the state. Off by default: the icon,
721
+ * centred title and padding already read as "nothing here", and a dashed
722
+ * frame (the old default) is what FileUpload uses to mean "drop here".
723
+ */
724
+ bordered?: boolean;
707
725
  className?: string;
708
726
  }
709
- declare function EmptyState({ icon, title, description, action, variant, className }: EmptyStateProps): react_jsx_runtime.JSX.Element;
727
+ declare function EmptyState({ icon, iconFrame, title, description, action, variant, bordered, className }: EmptyStateProps): react_jsx_runtime.JSX.Element;
710
728
 
711
729
  interface TimelineItem {
712
730
  title: string;
@@ -805,38 +823,221 @@ interface CarouselProps {
805
823
  }
806
824
  declare function Carousel({ children, autoPlay, autoPlayInterval, loop, showIndicators, showArrows, className, ref, }: CarouselProps): react_jsx_runtime.JSX.Element;
807
825
 
826
+ interface ChatMessageSender {
827
+ name: string;
828
+ avatar?: string;
829
+ /** Glyph for a sender with no photo — an assistant or system sender. */
830
+ icon?: IconName;
831
+ }
832
+ /** bubble: a speech bubble (people talking). block: full width, no bubble — assistant replies that carry Cards, charts, code and links. */
833
+ type ChatMessageLayout = "bubble" | "block";
834
+ /** streaming: still arriving (caret, aria-busy, Stop in the composer). error: delivery failed. */
835
+ type ChatMessageStatus = "sent" | "streaming" | "error";
836
+ type ChatMessageAction = "copy" | "regenerate" | "thumbs-up" | "thumbs-down" | "retry" | {
837
+ id: string;
838
+ label: string;
839
+ icon: IconName;
840
+ };
841
+ interface ChatMessageSource {
842
+ label: string;
843
+ href: string;
844
+ }
808
845
  interface ChatMessage {
809
846
  id: string;
810
- sender: {
811
- name: string;
812
- avatar?: string;
813
- };
847
+ sender: ChatMessageSender;
814
848
  content: string | ReactNode;
815
849
  timestamp: Date;
816
850
  isOwn?: boolean;
851
+ /** Overrides the list's defaultLayout for this message. */
852
+ layout?: ChatMessageLayout;
853
+ status?: ChatMessageStatus;
854
+ /** Citation row rendered under the content. */
855
+ sources?: ChatMessageSource[];
856
+ /** Controls under the content — revealed on hover or keyboard focus, always in the DOM. */
857
+ actions?: ChatMessageAction[];
817
858
  }
818
859
  interface ChatMessageListProps {
819
860
  messages: ChatMessage[];
820
861
  typingUser?: string;
821
862
  showInput?: boolean;
822
863
  onSend?: (text: string) => void;
864
+ /** A built-in action id ("copy", "regenerate", …) or a custom action's id. */
865
+ onAction?: (messageId: string, action: string) => void;
866
+ /** While a reply is arriving: send is disabled and a Stop control appears (calls onStop). */
867
+ busy?: boolean;
868
+ onStop?: () => void;
869
+ /** The attachment and voice controls render only when a handler is given. */
870
+ onAttach?: () => void;
871
+ onVoice?: () => void;
872
+ placeholder?: string;
873
+ /** Starter prompts; clicking one sends it. Part of the empty state, and optionally shown after every reply. */
874
+ suggestions?: string[];
875
+ /** Default "empty-only". */
876
+ suggestionsMode?: "empty-only" | "always";
877
+ /** Replaces the default empty state (an EmptyState with the suggestions). */
878
+ emptyState?: ReactNode;
879
+ /** Layout for messages that do not set their own. Default "bubble". */
880
+ defaultLayout?: ChatMessageLayout;
881
+ /** Hook for markdown or custom rendering of a message's content. */
882
+ renderContent?: (message: ChatMessage) => ReactNode;
883
+ /** Keep the newest message in view while the reader is at the bottom; otherwise offer "Jump to latest". Default true. */
884
+ autoScroll?: boolean;
885
+ className?: string;
886
+ }
887
+ declare function ChatMessageList({ messages, typingUser, showInput, onSend, onAction, busy, onStop, onAttach, onVoice, placeholder, suggestions, suggestionsMode, emptyState, defaultLayout, renderContent, autoScroll, className, }: ChatMessageListProps): react_jsx_runtime.JSX.Element;
888
+
889
+ type ChatPanelStatusTone = "success" | "warning" | "error" | "neutral";
890
+ interface ChatPanelProps {
891
+ /** Heading text, rendered as an h2 whose id is `${id}-title` — pass that id to the surface's labelledBy. */
892
+ title: string;
893
+ /** Short line under the title: the model, the team, "Support". */
894
+ description?: string;
895
+ /** Presence or health beside the title, rendered with StatusDot. */
896
+ status?: {
897
+ label: string;
898
+ tone?: ChatPanelStatusTone;
899
+ };
900
+ /** Leading visual: a curated icon name or an element such as an Avatar. Default "sparkles". */
901
+ icon?: IconName | ReactNode;
902
+ /** Extra header controls, rendered before the built-in ones. */
903
+ actions?: ReactNode;
904
+ onClose: () => void;
905
+ /** Shows a "New conversation" control when given. */
906
+ onNewConversation?: () => void;
907
+ /** Shows an expand / collapse control when given (CornerPanel and full-page layouts use it). */
908
+ onExpandedChange?: (expanded: boolean) => void;
909
+ expanded?: boolean;
910
+ /** The conversation — usually ChatMessageList. Laid out as a column that fills the panel. */
911
+ children: ReactNode;
912
+ /** Small muted footer, e.g. an AI disclaimer. */
913
+ footer?: ReactNode;
914
+ id?: string;
915
+ className?: string;
916
+ }
917
+ /**
918
+ * The chrome around a conversation: header (icon, title, status, description,
919
+ * controls), a body that fills the remaining height, and an optional footer.
920
+ * Surface-agnostic — it never positions itself. Put it inside a non-modal
921
+ * Drawer, a CornerPanel, or a page column, and give ChatMessageList as children.
922
+ */
923
+ declare function ChatPanel({ title, description, status, icon, actions, onClose, onNewConversation, onExpandedChange, expanded, children, footer, id, className, }: ChatPanelProps): react_jsx_runtime.JSX.Element;
924
+
925
+ /**
926
+ * Where the window anchors. bottom-right / bottom-left: above a bubble or pill Launcher
927
+ * (anchorInset keeps the launcher clear). top-right / top-left: hanging under the top bar,
928
+ * for an assistant opened from a Navbar button — pass offset.y as the bar's height plus a gap.
929
+ * right / left: beside a ribbon Launcher on that edge, inset by the ribbon's width; `align`
930
+ * places it near the end of the edge or mid-edge, like the ribbon.
931
+ */
932
+ type CornerPanelEdge = "bottom-right" | "bottom-left" | "top-right" | "top-left" | "right" | "left";
933
+ interface CornerPanelProps {
934
+ open: boolean;
935
+ onClose: () => void;
936
+ /** Where to anchor — match the Launcher's edge (see CornerPanelEdge). Default "bottom-right". */
937
+ edge?: CornerPanelEdge;
938
+ /** Side edges (right / left) only: near the end of the edge (default) or mid-edge — match the ribbon's align. */
939
+ align?: "end" | "center";
940
+ /** Default "380px". */
941
+ width?: string;
942
+ /** Default "600px"; never taller than the viewport minus the offsets. */
943
+ height?: string;
944
+ /** Distance from the viewport edges — match the Launcher's offset. Default var(--ds-space-4) on both axes. */
945
+ offset?: {
946
+ x?: string;
947
+ y?: string;
948
+ };
949
+ /** Space reserved below the window for the launcher: its height plus a gap. Default the lg launcher (48px) + one step; pass "0px" when no launcher sits in the corner. */
950
+ anchorInset?: string;
951
+ /** Fills the viewport, inset by offset. Controlled — ChatPanel's expand control drives it. */
952
+ expanded?: boolean;
953
+ onExpandedChange?: (expanded: boolean) => void;
954
+ /** id applied to the dialog element, for the Launcher's aria-controls. */
955
+ id?: string;
956
+ /** id of the element that names the dialog — ChatPanel's heading. */
957
+ labelledBy: string;
958
+ /** Keep the window mounted while closed (hidden, out of the tab order) so drafts and scroll survive. Default true — this surface exists for persistent assistants. */
959
+ keepMounted?: boolean;
960
+ /** Render inside this element (absolute) instead of document.body (fixed) — preview frames. */
961
+ container?: Element | DocumentFragment;
962
+ children: ReactNode;
963
+ className?: string;
964
+ }
965
+ /**
966
+ * A compact non-modal window anchored above a bubble or pill Launcher — the
967
+ * Intercom shape. Same contract as Drawer with modal={false}: the page stays
968
+ * operable, nothing traps focus, Escape closes only while focus is inside,
969
+ * focus returns to the opener, an outside click does nothing. Toasts move above
970
+ * it while it is open. At phone width it is the modal Sheet.
971
+ */
972
+ declare function CornerPanel({ open, onClose, edge, align, width, height, offset, anchorInset, expanded, id, labelledBy, keepMounted, container, children, className, }: CornerPanelProps): react_jsx_runtime.JSX.Element;
973
+
974
+ type AsidePanelSide = "right" | "left";
975
+ type AsidePanelPosition = "flush" | "floating";
976
+ interface AsidePanelProps {
977
+ open: boolean;
978
+ onClose: () => void;
979
+ /** Which side of the content column. Default "right". Pass the same value as AppShell's asideSide. */
980
+ side?: AsidePanelSide;
981
+ /** Column width while open. Default "420px" — the same as the side panel. */
982
+ width?: string;
983
+ /**
984
+ * flush (default, edge-to-edge with one border) or floating (inset by the shell gutter, rounded, glass —
985
+ * the same card as a floating Sidebar). Give it the Sidebar's position: the column is the sidebar's mirror.
986
+ */
987
+ position?: AsidePanelPosition;
988
+ /** Whether the navbar above is floating — its bottom gutter is then the gap, so the floating column drops its top inset (as Sidebar does). */
989
+ navbarFloating?: boolean;
990
+ /** Whether the sidebar is floating — a left-docked floating column then drops its outer gutter, because the sidebar's own gutter is the gap (as PageHeader does). */
991
+ sidebarFloating?: boolean;
992
+ /** Below this breakpoint the page is too narrow to share: the panel renders as a non-modal Drawer instead (and as the modal Sheet at or below sm, as Drawer does). Default "lg". */
993
+ collapseBelow?: BreakpointKey;
994
+ /** Keep the content mounted while closed (hidden) so drafts and scroll survive. Default true — the column exists for persistent assistants. */
995
+ keepMounted?: boolean;
996
+ /** Let the user drag the page-side edge to widen the column, between width and maxWidth. Default true. */
997
+ resizable?: boolean;
998
+ /** Upper bound for resizing. Default 60% of the viewport (or of the container). */
999
+ maxWidth?: string;
1000
+ /** Accessible name of the landmark — ChatPanel's heading id. */
1001
+ labelledBy: string;
1002
+ id?: string;
1003
+ children: ReactNode;
823
1004
  className?: string;
824
1005
  }
825
- declare function ChatMessageList({ messages, typingUser, showInput, onSend, className, }: ChatMessageListProps): react_jsx_runtime.JSX.Element;
1006
+ /**
1007
+ * A docked column beside the page content: the page narrows to make room
1008
+ * instead of being covered (the Copilot / Sidekick layout). In-flow, so it is
1009
+ * a landmark (`role="complementary"`), not a dialog. Same non-modal contract as
1010
+ * Drawer modal={false}: no focus trap, Escape closes only from inside, focus
1011
+ * returns to the opener, an outside click does nothing, drafts survive closing.
1012
+ * Below `collapseBelow` it becomes the overlay Drawer; on phones the Sheet.
1013
+ */
1014
+ declare function AsidePanel({ open, onClose, side, width, position, navbarFloating, sidebarFloating, collapseBelow, keepMounted, resizable, maxWidth, labelledBy, id, children, className, }: AsidePanelProps): react_jsx_runtime.JSX.Element;
826
1015
 
827
1016
  interface StackedListItem {
828
1017
  id: string | number;
829
1018
  leading?: ReactNode;
830
1019
  title: string;
831
1020
  subtitle?: string;
1021
+ /** Third line under the subtitle (a message preview, a summary). Rows with one align their leading element to the top. */
1022
+ description?: string;
832
1023
  meta?: ReactNode;
833
1024
  actions?: ReactNode;
1025
+ /**
1026
+ * Read/unread emphasis for inbox-style lists: unread rows take a bold title
1027
+ * and an accent dot before the meta; read rows drop the title to secondary
1028
+ * text. Leave undefined for lists without that distinction.
1029
+ */
1030
+ unread?: boolean;
1031
+ /** Marks this row as the current one (aria-current). `selectedId` on the list is the usual way to set it. */
1032
+ selected?: boolean;
834
1033
  onClick?: () => void;
835
1034
  }
836
1035
  interface StackedListProps {
837
1036
  items: StackedListItem[];
838
1037
  divided?: boolean;
839
1038
  flush?: boolean;
1039
+ /** The current row in a master-detail list. Its treatment follows the theme's in-page vertical active style (rail, tint or pill), like Tabs. */
1040
+ selectedId?: string | number;
840
1041
  className?: string;
841
1042
  }
842
1043
  declare const StackedList: react.ForwardRefExoticComponent<StackedListProps & react.RefAttributes<HTMLUListElement>>;
@@ -873,6 +1074,47 @@ interface LinkProps extends AnchorHTMLAttributes<HTMLAnchorElement> {
873
1074
  */
874
1075
  declare const Link: react.ForwardRefExoticComponent<LinkProps & react.RefAttributes<HTMLAnchorElement>>;
875
1076
 
1077
+ type LauncherVariant = "bubble" | "pill" | "ribbon";
1078
+ type LauncherEdge = "bottom-right" | "bottom-left" | "right" | "left" | "bottom";
1079
+ type LauncherWhenOpen = "close" | "hide" | "keep";
1080
+ type LauncherTone = "neutral" | "neutral-accent" | "subtle" | "accent";
1081
+ type LauncherSize = "md" | "lg";
1082
+ interface LauncherProps {
1083
+ /** Visual form. bubble: a square the height of a Button, icon only. pill: icon + label at Button proportions. ribbon: flush to an edge — sideways label on a side edge, horizontal on the bottom edge. Default "bubble". */
1084
+ variant?: LauncherVariant;
1085
+ /** Height, matching Button's md (40px) and lg (48px) steps; the bubble is that size square. Default "lg". Ribbons are unaffected. */
1086
+ size?: LauncherSize;
1087
+ /** Colour weight. neutral (default): surface background, border, primary text — present without competing with the page's primary action. neutral-accent: the same surface with only the icon in the accent (gradient included). subtle: accent tint. accent: the primary fill (gradient included), for products that want the assistant prominent. */
1088
+ tone?: LauncherTone;
1089
+ /** bubble and pill accept the two bottom corners; ribbon accepts right, left and bottom. Default "bottom-right" (or "right" for ribbon). */
1090
+ edge?: LauncherEdge;
1091
+ /** ribbon only: where along the edge. "end" (default) sits near the bottom of a side edge or near the right of the bottom edge; "center" is mid-edge. */
1092
+ align?: "center" | "end";
1093
+ /** Accessible name for every variant; visible text for pill and ribbon. */
1094
+ label: string;
1095
+ /** bubble and pill default to "sparkles" (curated; the Feather pack substitutes a star). A ribbon shows only its label unless an icon is given. */
1096
+ icon?: IconName | ReactNode;
1097
+ /** Unread count (number) or a dot (true). */
1098
+ badge?: number | boolean;
1099
+ open: boolean;
1100
+ onOpenChange: (open: boolean) => void;
1101
+ /** id of the panel this launcher controls — emitted as aria-controls while open (the panel may not be in the DOM while closed). */
1102
+ panelId?: string;
1103
+ /** While the panel is open: close morphs the launcher into a close button (default); hide keeps it mounted but invisible and out of the tab order; keep leaves it unchanged. */
1104
+ whenOpen?: LauncherWhenOpen;
1105
+ /** Distance from the edges. Default var(--ds-space-4) on both axes; safe-area insets are added on top. */
1106
+ offset?: {
1107
+ x?: string;
1108
+ y?: string;
1109
+ };
1110
+ /** Keyboard shortcut such as "mod+." (mod is ⌘ on macOS, Ctrl elsewhere; avoid keys the browser owns, like Ctrl+J). Toggles when closed; with the panel open it moves focus into the panel, or closes when focus is already inside. Shown in the bubble's tooltip. */
1111
+ shortcut?: string;
1112
+ /** Render inside this element (absolute) instead of document.body (fixed) — preview frames and the BuilderShell. */
1113
+ container?: Element | DocumentFragment;
1114
+ className?: string;
1115
+ }
1116
+ declare function Launcher({ variant, size, tone, edge, align, label, icon, badge, open, onOpenChange, panelId, whenOpen, offset, shortcut, container, className, }: LauncherProps): react.ReactPortal | null;
1117
+
876
1118
  type TabsOverflow = "scroll" | "hidden" | "truncate";
877
1119
  interface Tab {
878
1120
  id: string;
@@ -993,6 +1235,10 @@ interface SidebarContextValue {
993
1235
  onCollapsedChange: (collapsed: boolean) => void;
994
1236
  portalContainer: Element | null;
995
1237
  type: SidebarType;
1238
+ /** flush or floating — with a floating navbar, a minimal flush sidebar drops its top inset; floating keeps it inside the card. */
1239
+ position: SidebarPosition;
1240
+ /** Whether the adjacent navbar is floating (the floating navbar carries its own inset below it). */
1241
+ navbarFloating: boolean;
996
1242
  navSize?: "sm" | "md";
997
1243
  }
998
1244
  declare function useSidebar(): SidebarContextValue | null;
@@ -1001,7 +1247,13 @@ interface SidebarProps {
1001
1247
  header?: ReactNode;
1002
1248
  footer?: ReactNode;
1003
1249
  children: ReactNode;
1250
+ /** Controlled collapse state. */
1004
1251
  collapsed?: boolean;
1252
+ /**
1253
+ * Initial collapse state for a locally-owned Sidebar. Passing this opts out of
1254
+ * the AppShell's responsive collapse (auto-rail between md and lg) in favour of
1255
+ * plain local state.
1256
+ */
1005
1257
  defaultCollapsed?: boolean;
1006
1258
  onCollapsedChange?: (collapsed: boolean) => void;
1007
1259
  variant?: SidebarVariant;
@@ -1061,15 +1313,24 @@ interface SegmentedControlOption {
1061
1313
  label: string;
1062
1314
  disabled?: boolean;
1063
1315
  }
1316
+ type SegmentedControlSize = "xs" | "sm" | "md" | "lg";
1064
1317
  interface SegmentedControlProps {
1065
1318
  value: string;
1066
1319
  onChange: (value: string) => void;
1067
1320
  options: SegmentedControlOption[];
1068
- size?: "sm" | "md" | "lg";
1321
+ /** xs is for dense tool chrome (toolbars, inspectors): 24px tall. */
1322
+ size?: SegmentedControlSize;
1069
1323
  variant?: "default" | "ghost";
1324
+ /** Stretch to the container and share the width equally between options. */
1325
+ fullWidth?: boolean;
1326
+ /**
1327
+ * Called with an option's value while the pointer is over it and with null
1328
+ * when it leaves, so a picker can preview a choice before committing it.
1329
+ */
1330
+ onHoverChange?: (value: string | null) => void;
1070
1331
  className?: string;
1071
1332
  }
1072
- declare function SegmentedControl({ value, onChange, options, size, variant, className, }: SegmentedControlProps): react_jsx_runtime.JSX.Element;
1333
+ declare function SegmentedControl({ value, onChange, options, size, variant, fullWidth, onHoverChange, className, }: SegmentedControlProps): react_jsx_runtime.JSX.Element;
1073
1334
 
1074
1335
  interface BottomNavItem {
1075
1336
  label: string;
@@ -1257,7 +1518,15 @@ interface DialogProps {
1257
1518
  size?: DialogSize;
1258
1519
  alert?: boolean;
1259
1520
  container?: Element | DocumentFragment;
1260
- /** Called when Enter is pressed in the dialog (e.g. form submit). Primary footer button should use type="submit". */
1521
+ /**
1522
+ * Primary action for Enter. Dialog owns the form's default button, so Enter in
1523
+ * any single-line field runs this regardless of how the footer is typed, and a
1524
+ * footer button without an explicit `type` never submits when clicked. Ignored
1525
+ * for `variant="destructive"`: Enter in a field must not perform a destructive
1526
+ * action (Apple HIG: Cancel is the default; APG: focus the least destructive
1527
+ * action). If the footer has a `type="submit"` button and it is disabled, Enter
1528
+ * does nothing, mirroring native implicit submission.
1529
+ */
1261
1530
  onSubmit?: () => void;
1262
1531
  }
1263
1532
  declare function Dialog({ open, onClose, title, description, children, footer, variant, size, alert, container, onSubmit }: DialogProps): react.ReactPortal | null;
@@ -1286,6 +1555,30 @@ interface DrawerProps {
1286
1555
  mobile?: "sheet" | "panel";
1287
1556
  /** Snap points for the phone-width Sheet, as fractions of the viewport. Default [0.5, 0.92]. */
1288
1557
  snapPoints?: number[];
1558
+ /**
1559
+ * Default true. false makes the drawer a persistent, non-modal panel the user works alongside
1560
+ * (an assistant, help): no backdrop, no scroll lock, no focus trap — the page stays operable.
1561
+ * It closes only on Escape while focus is inside it, its close control, or onClose from the
1562
+ * consumer; an outside click does nothing. At phone width the Sheet is always modal.
1563
+ */
1564
+ modal?: boolean;
1565
+ /**
1566
+ * Keep the panel in the DOM while closed (hidden and out of the tab order) so a half-typed
1567
+ * message, the scroll position and any in-progress rendering survive close and reopen.
1568
+ * Default false — the panel unmounts after its close transition, as it always has.
1569
+ */
1570
+ keepMounted?: boolean;
1571
+ /** id applied to the dialog element, for an opener's aria-controls. */
1572
+ id?: string;
1573
+ /** id of the element that names the dialog when no title is rendered — e.g. ChatPanel's heading. */
1574
+ labelledBy?: string;
1575
+ /**
1576
+ * Let the user drag the page-side edge to widen a non-modal side drawer,
1577
+ * between `width` and maxWidth (default 60% of the viewport). Default false —
1578
+ * ordinary drawers keep the one shared width. Ignored when modal or at phone width.
1579
+ */
1580
+ resizable?: boolean;
1581
+ maxWidth?: string;
1289
1582
  }
1290
1583
  declare function Drawer(props: DrawerProps): react_jsx_runtime.JSX.Element;
1291
1584
 
@@ -1375,8 +1668,14 @@ interface SheetProps {
1375
1668
  container?: Element | DocumentFragment;
1376
1669
  /** Remove default content padding — use when the child handles its own spacing. */
1377
1670
  flush?: boolean;
1671
+ /** Keep the sheet in the DOM while closed (hidden, out of the tab order) so its content's state survives close and reopen. Default false. */
1672
+ keepMounted?: boolean;
1673
+ /** id applied to the dialog element, for an opener's aria-controls. */
1674
+ id?: string;
1675
+ /** id of the element that names the dialog when no title is rendered. */
1676
+ labelledBy?: string;
1378
1677
  }
1379
- declare function Sheet({ open, onClose, title, children, footer, snapPoints, container, flush }: SheetProps): react.ReactPortal | null;
1678
+ declare function Sheet({ open, onClose, title, children, footer, snapPoints, container, flush, keepMounted, id, labelledBy }: SheetProps): react.ReactPortal | null;
1380
1679
 
1381
1680
  interface Notification {
1382
1681
  id: string;
@@ -1569,6 +1868,32 @@ interface AppShellContextValue {
1569
1868
  isMobile: boolean;
1570
1869
  /** True only for tablet-sized viewports (between sm and md breakpoints). Drawer shows here, not on small mobile. */
1571
1870
  isTablet: boolean;
1871
+ /**
1872
+ * Effective sidebar collapse for a traditional Sidebar rendered in the shell.
1873
+ * The user's explicit choice wins; otherwise the auto tier applies — collapsed
1874
+ * to a rail at or below the `lg` breakpoint, expanded above it. Lives here rather
1875
+ * than in Sidebar so it survives the sidebar unmounting in the drawer range.
1876
+ */
1877
+ sidebarCollapsed: boolean;
1878
+ /** Records an explicit user choice. Overrides the auto tier in both directions for the session. */
1879
+ setSidebarCollapsed: (collapsed: boolean) => void;
1880
+ /** True while a docked AsidePanel in the aside slot is open beside the content. Pages may hide non-essential chrome on it. */
1881
+ asideOpen: boolean;
1882
+ /** Set by AsidePanel; not for pages to call. */
1883
+ setAsideOpen: (open: boolean) => void;
1884
+ /** Which side the aside slot is on (AppShell's asideSide). */
1885
+ asideSide: "right" | "left";
1886
+ /** True while the docked AsidePanel is floating — a floating PageHeader drops its gutter on that side, as it does beside a floating Sidebar. */
1887
+ asideFloating: boolean;
1888
+ /** Set by AsidePanel; not for pages to call. */
1889
+ setAsideFloating: (floating: boolean) => void;
1890
+ /**
1891
+ * The shell's root element, for previews that need to render overlays inside their frame
1892
+ * (the dashboard builder passes it to Launcher, CornerPanel and Drawer as `container`).
1893
+ * Components never read it themselves: a container moves the toast-inset claim onto that
1894
+ * element, where a body-level ToastProvider cannot see it.
1895
+ */
1896
+ container: HTMLElement | null;
1572
1897
  }
1573
1898
  declare function useAppShell(): AppShellContextValue | null;
1574
1899
  type AppShellLayout = "sidebar" | "stacked" | "sidebar-header" | "multi-column";
@@ -1585,6 +1910,16 @@ interface AppShellProps {
1585
1910
  mobileMenuFlush?: boolean;
1586
1911
  navbar?: ReactNode;
1587
1912
  mobileNav?: ReactNode;
1913
+ /** A docked AsidePanel rendered beside the content column: the page narrows to make room. Rendered at every width — the panel decides its own fallbacks. */
1914
+ aside?: ReactNode;
1915
+ /** Which side of the content the aside sits on. Default "right". Pass the same value to the AsidePanel. */
1916
+ asideSide?: "right" | "left";
1917
+ /**
1918
+ * A Launcher for the assistant. Rendered only above the sm breakpoint — a conditional render,
1919
+ * because the Launcher portals out of any wrapper — so on phones the Navbar button is the entry point
1920
+ * and it never collides with BottomNav.
1921
+ */
1922
+ launcher?: ReactNode;
1588
1923
  children: ReactNode;
1589
1924
  className?: string;
1590
1925
  /** When false, main area won't scroll — use for full-height layouts like ResizablePanelGroup. Default true. */
@@ -1678,4 +2013,4 @@ interface UseTextOverflowResult {
1678
2013
  */
1679
2014
  declare function useTextOverflow(options?: UseTextOverflowOptions): UseTextOverflowResult;
1680
2015
 
1681
- export { Accordion, ActionPanel, ActionPanelGroup, Alert, type AlertPlacement, AppShell, type AppShellContextValue, Avatar, AvatarGroup, type AvatarGroupItem, type AvatarGroupProps, type AvatarStatus, Badge, type BadgePaletteColor, type BadgeSize, type BadgeVariant, BottomNav, type BottomNavItem, type BreadcrumbItem$1 as BreadcrumbItem, Breadcrumbs, type BreadcrumbsSeparator, type BreadcrumbsSize, type BreadcrumbsVariant, BreakpointKey, BulkActionBar, Button, ButtonSizeContext, Calendar, Card, CardContent, CardDescription, CardFooter, CardHeader, type CardSelectType, CardTitle, type CardVariant, Carousel, ChatMessageList, Checkbox, CheckboxGroup, CheckboxGroupItem, CodeBlock, Collapsible, ColorPicker, type Column, Combobox, CommandPalette, ContextMenu, DEFAULT_DATE_RANGE_PRESETS, DataList, DatePicker, type DateRange, DateRangePicker, type DateRangePickerProps, type DateRangePreset, type DescriptionItem, DescriptionList, type DescriptionListOrientation, type DescriptionListSize, Dialog, Divider, Dock, Drawer, Dropdown, DropdownMenu, type DropdownMenuDivider, type DropdownMenuEntry, type DropdownMenuItem, EmptyState, Field, type FieldControlProps, type FieldProps, FileUpload, FormWrapper, HoverCard, InlineFieldError, Input, Kbd, Label, Link, type LinkProps, MentionInput, MobileHeaderMenu, type MobileHeaderMenuItemData, type MobileHeaderMenuType, NavItem, type NavItemProps, type NavItemType, NavMenu, type NavMenuItem, Navbar, type NavbarSize, type NavbarType, type NavbarVariant, NotificationCenter, NumberInput, PageContainer, type PageContainerWidth, PageHeader, type PageHeaderBehavior, type PageHeaderIntensity, type PageHeaderProps, type PageHeaderVariant, Pagination, PinInput, Popover, Progress, type PromiseToastMessages, RadioGroup, Rating, ScrollArea, SectionHeading, SegmentedControl, Sheet, Sidebar, type SidebarContextValue, type SidebarItem, SidebarNav, type SidebarNavSize, type SidebarPosition, type SidebarSection, type SidebarType, Skeleton, SliderRange, Spinner, StackedList, StatsCard, StatusDot, type StatusDotVariant, Stepper, type Tab, Table, type TableDensity, type TableProps, Tabs, Tag, TagInput, type TagPaletteColor, type TagVariant, TextOverflow, type TextOverflowProps, Textarea, TimePicker, Timeline, Toast, type ToastAction, type ToastApi, type ToastOptions, type ToastPosition, ToastProvider, type ToastVariant, Toggle, Tooltip, Tour, TransferList, TreeView, type UseTextOverflowOptions, type UseTextOverflowResult, useAppShell, useFormContext, useSidebar, useTextOverflow, useToast };
2016
+ export { Accordion, ActionPanel, ActionPanelGroup, Alert, type AlertPlacement, AppShell, type AppShellContextValue, AsidePanel, type AsidePanelProps, type AsidePanelSide, Avatar, AvatarGroup, type AvatarGroupItem, type AvatarGroupProps, type AvatarStatus, Badge, type BadgePaletteColor, type BadgeSize, type BadgeVariant, BottomNav, type BottomNavItem, type BreadcrumbItem$1 as BreadcrumbItem, Breadcrumbs, type BreadcrumbsSeparator, type BreadcrumbsSize, type BreadcrumbsVariant, BreakpointKey, BulkActionBar, Button, ButtonSizeContext, Calendar, Card, CardContent, CardDescription, CardFooter, CardHeader, type CardSelectType, CardTitle, type CardVariant, Carousel, type ChatMessage, type ChatMessageAction, type ChatMessageLayout, ChatMessageList, type ChatMessageSender, type ChatMessageSource, type ChatMessageStatus, ChatPanel, type ChatPanelProps, type ChatPanelStatusTone, Checkbox, CheckboxGroup, CheckboxGroupItem, CodeBlock, Collapsible, ColorPicker, type Column, Combobox, CommandPalette, ContextMenu, CornerPanel, type CornerPanelEdge, type CornerPanelProps, DEFAULT_DATE_RANGE_PRESETS, DataList, DatePicker, type DateRange, DateRangePicker, type DateRangePickerProps, type DateRangePreset, type DescriptionItem, DescriptionList, type DescriptionListOrientation, type DescriptionListSize, Dialog, Divider, Dock, Drawer, Dropdown, DropdownMenu, type DropdownMenuDivider, type DropdownMenuEntry, type DropdownMenuItem, EmptyState, Field, type FieldControlProps, type FieldProps, FileUpload, FormWrapper, HoverCard, InlineFieldError, Input, Kbd, Label, Launcher, type LauncherEdge, type LauncherProps, type LauncherVariant, type LauncherWhenOpen, Link, type LinkProps, MentionInput, MobileHeaderMenu, type MobileHeaderMenuItemData, type MobileHeaderMenuType, NavItem, type NavItemProps, type NavItemType, NavMenu, type NavMenuItem, Navbar, type NavbarSize, type NavbarType, type NavbarVariant, NotificationCenter, NumberInput, PageContainer, type PageContainerWidth, PageHeader, type PageHeaderBehavior, type PageHeaderIntensity, type PageHeaderProps, type PageHeaderVariant, Pagination, PinInput, Popover, Progress, type PromiseToastMessages, RadioGroup, Rating, ScrollArea, SectionHeading, SegmentedControl, Sheet, Sidebar, type SidebarContextValue, type SidebarItem, SidebarNav, type SidebarNavSize, type SidebarPosition, type SidebarSection, type SidebarType, Skeleton, SliderRange, Spinner, StackedList, StatsCard, StatusDot, type StatusDotVariant, Stepper, type Tab, Table, type TableDensity, type TableProps, Tabs, Tag, TagInput, type TagPaletteColor, type TagVariant, TextOverflow, type TextOverflowProps, Textarea, TimePicker, Timeline, Toast, type ToastAction, type ToastApi, type ToastOptions, type ToastPosition, ToastProvider, type ToastVariant, Toggle, Tooltip, Tour, TransferList, TreeView, type UseTextOverflowOptions, type UseTextOverflowResult, useAppShell, useFormContext, useSidebar, useTextOverflow, useToast };