@botiverse/raft-ui 0.22.0 → 0.23.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.mjs CHANGED
@@ -1,5 +1,5 @@
1
1
  import { cn } from "./cn.mjs";
2
- import { $ as MessageReactionPickerStatic, $n as DropdownMenuRadioGroup, $r as DialogSheetReset, $t as PreviewCardContent, A as messageEmbed, An as PopoverPopup, Ar as Badge, At as MessageItemEmbedded, B as MessageReferenceIndicator, Bn as MobileNavRoot, Bt as AvatarFallback, C as MessageQuotedPreviewThread, Cn as PopoverArrow, Cr as CheckboxIndicator, Ct as MessageItemSenderButton, D as MessageEmbedContent, Dn as PopoverContent, Dr as TooltipPortal, Dt as MessageItemBody, E as MessageEmbed, En as PopoverClose, Er as TooltipContent, Et as MessageItemAttachments, F as MessageMultiSelectCheckbox, Fn as PopoverViewport, Fr as DialogBody, Ft as MessageItemGutter, G as MessageReferenceUnavailable, Gn as DropdownMenuFooter, H as MessageReferencePending, Hn as DropdownMenuCheckboxItem, Hr as DialogNav, Ht as AvatarGroupCount, I as MessageMultiSelectToolbar, In as useHoldThenMoveTouchSensor, Ir as DialogClose, It as MessageItem, J as MessageReactionChip, Jn as DropdownMenuItemLabel, Jr as DialogTrigger, K as inlineChip, Kn as DropdownMenuItem, Kr as DialogSurface, L as MessageMultiSelectToolbarActions, Ln as useMouseOnlyPointerSensor, Lr as DialogContent, Lt as searchHit, M as MessageTextSelectionToolbarButton, Mn as PopoverSeparator, Mt as MessageItemSearchMatch, N as MessageTextSelectionToolbarSeparator, Nn as PopoverTitle, Nr as useMobileViewport, Nt as MessageItemAvatarSlot, O as MessageEmbedFooter, On as PopoverDescription, Or as TooltipProvider, Ot as MessageItemContent, P as MessageMultiSelect, Pn as PopoverTrigger, Pr as Dialog, Pt as MessageItemContinuationTime, Q as MessageReactionPickerContent, Qn as DropdownMenuPortal, Qr as textLinkVariants, R as MessageReferenceChip, Rn as MobileNavItem, Rr as DialogDescription, Rt as Avatar, S as MessageQuotedPreviewText, Sr as Checkbox, St as MessageItemSenderBadges, T as MessageQuotedPreviewUnavailable, Tr as Tooltip, Tt as MessageItemTime, U as MessageReferenceSuffix, Un as DropdownMenuCheckboxItemIndicator, Ur as DialogOverlay, Ut as AvatarImage, V as MessageReferenceLabel, Vn as DropdownMenu, Vr as DialogHeader, Vt as AvatarGroup, W as MessageReferenceText, Wn as DropdownMenuContent, Wr as DialogPortal, Wt as useOverflowTitle, X as MessageReactionErrorIndicator, Xr as panelToggleAction, Y as MessageReactionCount, Yn as DropdownMenuLabel, Yr as PanelAction, Yt as PreviewCard, Z as MessageReactionGlyph, Zn as DropdownMenuPopup, Zr as TextLink, Zt as PreviewCardArrow, _ as MessageQuotedPreviewAuthorName, _r as ScrollAreaContent, ai as useParentOverlayKind, an as PreviewCardPopup, ar as DropdownMenuSubmenuTrigger, at as MessageReactionTooltipNameText, b as MessageQuotedPreviewHeader, br as ScrollAreaThumb, bt as MessageItemMeta, c as MessageListHistoryLimited, ci as useTheme, cn as PreviewCardTitle, cr as KbdGroup, ct as MessageItemBadge, d as MessageQuotedPreview, di as stackedActions, dr as PanelFooter, dt as MessageItemSavedIndicator, ei as Button, en as PreviewCardDescription, er as DropdownMenuRadioItem, et as MessageReactionQuickButton, f as MessageQuotedPreviewAttachment, fi as useStackedActions, fr as PanelHeaderRoot, ft as MessageItemToolbar, g as MessageQuotedPreviewAuthorMeta, gi as decisionWidth, gr as ScrollArea, hi as headEdges, hr as PanelSection, ir as DropdownMenuSubmenu, it as MessageReactionTooltipName, j as MessageTextSelectionToolbar, jn as PopoverPortal, jt as MessageItemFooter, k as MessageEmbedHeader, kn as PopoverHeader, kr as TooltipTrigger, kt as MessageItemEdited, l as MessageListNotice, li as ThemeStateContext, ln as PreviewCardTrigger, lr as Panel, lt as MessageItemBadgeSeparator, m as MessageQuotedPreviewAuthor, mi as headEdgePull, mr as PanelScrollViewport, ni as Spinner, nr as DropdownMenuSeparator, nt as MessageReactionTooltipContent, o as MessageListDateDivider, oi as withOverlayLayer, on as PreviewCardPortal, or as DropdownMenuTrigger, ot as MessageReactionTooltipNames, p as MessageQuotedPreviewAttachments, pi as controlIconInset, pr as PanelScrollContent, pt as MessageItemToolbarButton, q as MessageReactionAddButton, qn as DropdownMenuItemCount, qr as DialogTitle, ri as defaultNativeButton, rn as PreviewCardHeader, rr as DropdownMenuShortcut, rt as MessageReactionTooltipMeta, s as MessageListEndFade, si as useThemeScopeProps, sn as PreviewCardSeparator, sr as Kbd, st as MessageReactionTooltipSeparator, t as inboxItem, ti as buttonVariants, tr as DropdownMenuRadioItemIndicator, tt as MessageReactionQuickRow, u as MessageList, ui as tv, ur as PanelBody, ut as MessageItemReadReceipt, v as MessageQuotedPreviewChannel, vr as ScrollAreaCorner, vt as MessageItemHeader, w as MessageQuotedPreviewTimestamp, wn as PopoverBackdrop, wr as PRESENCE_COLOR, wt as MessageItemSenderGroup, x as MessageQuotedPreviewLoading, xn as Popover, xr as ScrollAreaViewport, xt as MessageItemSender, y as MessageQuotedPreviewContent, yr as ScrollAreaScrollbar, yt as MessageItemInlineStatus, zn as MobileNavLabel, zr as DialogFooter, zt as AvatarBadge } from "./inbox-item.recipe-3j4DHKZ2.mjs";
2
+ import { $ as MessageMultiSelect, $n as PopoverTitle, $r as ListRowTitle, $t as MessageItemAvatarSlot, A as MessageQuotedPreview, Ai as DialogSheetReset, Ar as PanelBody, At as MessageItemReadReceipt, B as MessageQuotedPreviewLoading, Bi as ThemeStateContext, Br as ScrollAreaThumb, Bt as MessageItemMeta, Ci as DialogSurface, Cn as PreviewCardHeader, Cr as DropdownMenuShortcut, Ct as MessageReactionTooltipMeta, D as MessageListHistoryLimited, Di as panelToggleAction, Dn as PreviewCardSeparator, Dr as Kbd, Dt as MessageReactionTooltipSeparator, E as MessageListEndFade, Ei as PanelAction, En as PreviewCardPortal, Er as DropdownMenuTrigger, Et as MessageReactionTooltipNames, F as MessageQuotedPreviewAuthorMeta, Fr as PanelSection, G as MessageEmbed, Gi as headEdgePull, Gr as ListRow, Gt as MessageItemTime, H as MessageQuotedPreviewThread, Hi as stackedActions, Hr as Checkbox, Ht as MessageItemSenderBadges, I as MessageQuotedPreviewAuthorName, Ii as useParentOverlayKind, Ir as ScrollArea, J as MessageEmbedHeader, Jn as PopoverDescription, Jr as ListRowChevron, Jt as MessageItemContent, K as MessageEmbedContent, Ki as headEdges, Kn as PopoverClose, Kr as ListRowBody, Kt as MessageItemAttachments, L as MessageQuotedPreviewChannel, Li as withOverlayLayer, Lr as ScrollAreaContent, M as MessageQuotedPreviewAttachments, Mi as buttonVariants, Mr as PanelHeaderRoot, Mt as MessageItemToolbar, N as MessageQuotedPreviewAuthor, Ni as Spinner, Nr as PanelScrollContent, Nt as MessageItemToolbarButton, O as MessageListNotice, Oi as TextLink, On as PreviewCardTitle, Or as KbdGroup, Ot as MessageItemBadge, Pi as defaultNativeButton, Pr as PanelScrollViewport, Q as MessageTextSelectionToolbarSeparator, Qn as PopoverSeparator, Qr as ListRowMeta, Qt as MessageItemSearchMatch, R as MessageQuotedPreviewContent, Ri as useThemeScopeProps, Rr as ScrollAreaCorner, Rt as MessageItemHeader, Sr as DropdownMenuSeparator, St as MessageReactionTooltipContent, T as MessageListDateDivider, Ti as DialogTrigger, Tn as PreviewCardPopup, Tr as DropdownMenuSubmenuTrigger, Tt as MessageReactionTooltipNameText, U as MessageQuotedPreviewTimestamp, Ui as useStackedActions, Un as PopoverArrow, Ur as CheckboxIndicator, Ut as MessageItemSenderButton, V as MessageQuotedPreviewText, Vi as tv, Vn as Popover, Vr as ScrollAreaViewport, Vt as MessageItemSender, W as MessageQuotedPreviewUnavailable, Wi as controlIconInset, Wn as PopoverBackdrop, Wr as PRESENCE_COLOR, Wt as MessageItemSenderGroup, X as MessageTextSelectionToolbar, Xn as PopoverPopup, Xr as ListRowGroup, Xt as MessageItemEmbedded, Y as messageEmbed, Yn as PopoverHeader, Yr as ListRowDescription, Yt as MessageItemEdited, Z as MessageTextSelectionToolbarButton, Zn as PopoverPortal, Zr as ListRowIcon, Zt as MessageItemFooter, _ as InboxItemTrailing, _n as PreviewCardArrow, _r as DropdownMenuPopup, _t as MessageReactionGlyph, a as InboxItemContext, ai as TooltipProvider, an as AvatarBadge, ar as MobileNavLabel, at as MessageReferenceIndicator, b as Skeleton, bi as DialogOverlay, bn as PreviewCardDescription, br as DropdownMenuRadioItem, bt as MessageReactionQuickButton, c as InboxItemLeading, cn as AvatarGroupCount, cr as DropdownMenuCheckboxItem, d as InboxItemMetadata, di as Dialog, dr as DropdownMenuFooter, dt as MessageReferenceUnavailable, ei as ListRowTop, en as MessageItemContinuationTime, er as PopoverTrigger, et as MessageMultiSelectCheckbox, f as InboxItemSelection, fi as DialogBody, fr as DropdownMenuItem, ft as inlineChip, g as InboxItemTitle, gi as DialogFooter, gt as MessageReactionErrorIndicator, h as InboxItemTimestamp, hi as DialogDescription, hn as PreviewCard, hr as DropdownMenuLabel, ht as MessageReactionCount, i as InboxItemContent, ii as TooltipPortal, in as Avatar, ir as MobileNavItem, j as MessageQuotedPreviewAttachment, ji as Button, jr as PanelFooter, jt as MessageItemSavedIndicator, k as MessageList, ki as textLinkVariants, kn as PreviewCardTrigger, kr as Panel, kt as MessageItemBadgeSeparator, l as InboxItemMarks, ln as AvatarImage, lr as DropdownMenuCheckboxItemIndicator, lt as MessageReferenceSuffix, m as InboxItemSubtitle, mi as DialogContent, mr as DropdownMenuItemLabel, mt as MessageReactionChip, n as InboxItemActions, ni as Tooltip, nn as MessageItem, nr as useHoldThenMoveTouchSensor, nt as MessageMultiSelectToolbarActions, o as InboxItemHeading, oi as TooltipTrigger, on as AvatarFallback, or as MobileNavRoot, ot as MessageReferenceLabel, p as InboxItemSender, pi as DialogClose, pr as DropdownMenuItemCount, pt as MessageReactionAddButton, q as MessageEmbedFooter, qi as decisionWidth, qn as PopoverContent, qr as ListRowBottom, qt as MessageItemBody, r as InboxItemBody, ri as TooltipContent, rn as searchHit, rr as useMouseOnlyPointerSensor, rt as MessageReferenceChip, s as InboxItemHoverTarget, si as Badge, sn as AvatarGroup, sr as DropdownMenu, st as MessageReferencePending, t as InboxItem, ti as ListRowValue, tn as MessageItemGutter, tr as PopoverViewport, tt as MessageMultiSelectToolbar, u as InboxItemMessage, ui as useMobileViewport, un as useOverflowTitle, ur as DropdownMenuContent, ut as MessageReferenceText, v as InboxItemTrigger, vi as DialogHeader, vr as DropdownMenuPortal, vt as MessageReactionPickerContent, wi as DialogTitle, wr as DropdownMenuSubmenu, wt as MessageReactionTooltipName, xi as DialogPortal, xr as DropdownMenuRadioItemIndicator, xt as MessageReactionQuickRow, yi as DialogNav, yn as PreviewCardContent, yr as DropdownMenuRadioGroup, yt as MessageReactionPickerStatic, z as MessageQuotedPreviewHeader, zi as useTheme, zr as ScrollAreaScrollbar, zt as MessageItemInlineStatus } from "./inbox-item-B-y7PxZ_.mjs";
3
3
  import { Dialog as Dialog$1 } from "@base-ui/react/dialog";
4
4
  import { AlertTriangle, Bell, Check, CheckCircle2, ChevronDown, ChevronLeft, ChevronRight, CircleCheck, Copy, FileText, Image, Info, TriangleAlert, Upload, X, Zap } from "lucide-react";
5
5
  import { Children, cloneElement, createContext, createElement, isValidElement, use, useCallback, useContext, useEffect, useId, useImperativeHandle, useLayoutEffect, useMemo, useRef, useState, useSyncExternalStore } from "react";
@@ -587,6 +587,7 @@ function DrawerActions({ className, render, children, ...props }) {
587
587
  const { actions } = drawer({ axis: swipeAxis });
588
588
  const defaultProps = {
589
589
  className: actions({ className }),
590
+ "data-stacked": swipeAxis === "x" ? void 0 : "",
590
591
  children
591
592
  };
592
593
  return useRender({
@@ -982,231 +983,6 @@ function CardFooter({ className, render, ...props }) {
982
983
  });
983
984
  }
984
985
  //#endregion
985
- //#region src/components/list-row/list-row.recipe.ts
986
- const hairline = [
987
- "before:pointer-events-none before:absolute before:top-0 before:right-0 before:hidden",
988
- "before:left-(--list-row-rule-start) before:border-t before:border-line-hairline",
989
- "[[data-slot=list-row]+&]:before:block [li+li>&]:before:block"
990
- ];
991
- const listRow = tv({
992
- slots: {
993
- group: ["flex min-w-0 flex-col overflow-hidden", "rounded-container border border-line-hairline bg-layer-card text-foreground"],
994
- root: [
995
- "group/list-row relative flex w-full min-w-0 items-center gap-3 px-4 py-3 text-left",
996
- "font-sans no-underline",
997
- "transition-colors duration-100",
998
- "outline-none focus-visible:keyboard:inset-ring-2 focus-visible:keyboard:inset-ring-foreground",
999
- "data-selected:bg-info-soft",
1000
- "[--list-row-ink:var(--foreground)] [--list-row-ink-2:var(--foreground-muted)] [--list-row-ink-3:var(--foreground-hint)]",
1001
- "text-(--list-row-ink)",
1002
- "not-disabled:not-aria-disabled:data-[tone=unread]:[--list-row-ink-2:var(--foreground)]",
1003
- "not-disabled:not-aria-disabled:data-[tone=muted]:[--list-row-ink:var(--foreground-muted)]",
1004
- "not-disabled:not-aria-disabled:data-[tone=away]:[--list-row-ink:var(--foreground-hint)]",
1005
- "not-disabled:not-aria-disabled:data-[tone=away]:[--list-row-ink-2:var(--foreground-hint)]",
1006
- "disabled:cursor-not-allowed disabled:[--list-row-ink:var(--foreground-disabled)]",
1007
- "disabled:[--list-row-ink-2:var(--foreground-disabled)] disabled:[--list-row-ink-3:var(--foreground-disabled)]",
1008
- "aria-disabled:cursor-not-allowed aria-disabled:[--list-row-ink:var(--foreground-disabled)]",
1009
- "aria-disabled:[--list-row-ink-2:var(--foreground-disabled)] aria-disabled:[--list-row-ink-3:var(--foreground-disabled)]"
1010
- ],
1011
- icon: ["flex shrink-0 items-center justify-center", "text-(--list-row-ink-3) [&>svg]:size-5 [&>svg]:shrink-0"],
1012
- body: ["flex min-w-0 flex-1 flex-col gap-0.5"],
1013
- line: ["flex min-w-0 items-center gap-2"],
1014
- title: [
1015
- "min-w-0 flex-1 truncate",
1016
- "text-body font-semibold",
1017
- "group-data-[tone=unread]/list-row:font-bold"
1018
- ],
1019
- description: ["min-w-0 flex-1 truncate", "text-callout text-(--list-row-ink-2)"],
1020
- meta: ["shrink-0", "font-mono text-mono-meta font-normal tabular-nums text-(--list-row-ink-3)"],
1021
- value: ["max-w-[45%] shrink-0 truncate", "text-subhead text-(--list-row-ink-3)"],
1022
- chevron: ["flex shrink-0 items-center justify-center", "text-(--list-row-ink-3) [&>svg]:size-5 [&>svg]:shrink-0"]
1023
- },
1024
- variants: {
1025
- variant: {
1026
- default: { root: ["min-h-16 [--list-row-rule-start:63px]", hairline] },
1027
- plain: { root: ["[--list-row-rule-start:16px]", hairline] },
1028
- entry: { root: "" }
1029
- },
1030
- interactive: {
1031
- true: { root: [
1032
- "not-disabled:not-aria-disabled:not-data-selected:hover:overlay-subtle",
1033
- "not-disabled:not-aria-disabled:not-data-selected:active:overlay-medium",
1034
- "not-data-selected:data-popup-open:overlay-subtle"
1035
- ] },
1036
- false: {}
1037
- },
1038
- wrap: {
1039
- true: { description: "whitespace-normal text-pretty" },
1040
- false: {}
1041
- }
1042
- },
1043
- defaultVariants: {
1044
- variant: "default",
1045
- interactive: true,
1046
- wrap: false
1047
- }
1048
- });
1049
- //#endregion
1050
- //#region src/components/list-row/list-row.tsx
1051
- /** An inset group: rows wrapped in a card (surface, hairline, radius-lg). */
1052
- function ListRowGroup({ className, render, ...props }) {
1053
- const { group } = listRow();
1054
- const defaultProps = {
1055
- "data-slot": "list-row-group",
1056
- className: group({ className })
1057
- };
1058
- return useRender({
1059
- defaultTagName: "div",
1060
- render,
1061
- props: mergeProps(defaultProps, props)
1062
- });
1063
- }
1064
- /**
1065
- * One row of a list. It renders a `button` by default; pass `render={<a />}`
1066
- * (or a router link) for a row that goes somewhere. Children are the leading
1067
- * block (an avatar, a channel or icon tile, `ListRowIcon`), `ListRowBody`, and
1068
- * anything trailing (a value, a badge, a switch, `ListRowChevron`).
1069
- */
1070
- function ListRow({ variant = "default", tone = "default", selected = false, interactive = true, className, render, ...props }) {
1071
- const { root } = listRow({
1072
- variant,
1073
- interactive
1074
- });
1075
- const defaultProps = {
1076
- "data-slot": "list-row",
1077
- "data-variant": variant,
1078
- "data-tone": tone === "default" ? void 0 : tone,
1079
- "data-selected": selected ? "" : void 0,
1080
- className: root({ className }),
1081
- ...interactive && !render ? { type: "button" } : {}
1082
- };
1083
- return useRender({
1084
- defaultTagName: interactive ? "button" : "div",
1085
- render,
1086
- props: mergeProps(defaultProps, props)
1087
- });
1088
- }
1089
- /** A 20px leading icon in ink-3: entry rows and settings. */
1090
- function ListRowIcon({ className, render, ...props }) {
1091
- const { icon } = listRow();
1092
- const defaultProps = {
1093
- "data-slot": "list-row-icon",
1094
- "aria-hidden": true,
1095
- className: icon({ className })
1096
- };
1097
- return useRender({
1098
- defaultTagName: "span",
1099
- render,
1100
- props: mergeProps(defaultProps, props)
1101
- });
1102
- }
1103
- /** The text column: the title and the preview, or a `ListRowTop` and a `ListRowBottom`. */
1104
- function ListRowBody({ className, render, ...props }) {
1105
- const { body } = listRow();
1106
- const defaultProps = {
1107
- "data-slot": "list-row-body",
1108
- className: body({ className })
1109
- };
1110
- return useRender({
1111
- defaultTagName: "span",
1112
- render,
1113
- props: mergeProps(defaultProps, props)
1114
- });
1115
- }
1116
- /** The first line: the title, then the time. */
1117
- function ListRowTop({ className, render, ...props }) {
1118
- const { line } = listRow();
1119
- const defaultProps = {
1120
- "data-slot": "list-row-top",
1121
- className: line({ className })
1122
- };
1123
- return useRender({
1124
- defaultTagName: "span",
1125
- render,
1126
- props: mergeProps(defaultProps, props)
1127
- });
1128
- }
1129
- /** The second line: the preview, then at most one badge. */
1130
- function ListRowBottom({ className, render, ...props }) {
1131
- const { line } = listRow();
1132
- const defaultProps = {
1133
- "data-slot": "list-row-bottom",
1134
- className: line({ className })
1135
- };
1136
- return useRender({
1137
- defaultTagName: "span",
1138
- render,
1139
- props: mergeProps(defaultProps, props)
1140
- });
1141
- }
1142
- /** 16/24 600 on one line; the row's tone sets its weight and ink. */
1143
- function ListRowTitle({ className, render, ...props }) {
1144
- const { title } = listRow();
1145
- const defaultProps = {
1146
- "data-slot": "list-row-title",
1147
- className: title({ className })
1148
- };
1149
- return useRender({
1150
- defaultTagName: "span",
1151
- render,
1152
- props: mergeProps(defaultProps, props)
1153
- });
1154
- }
1155
- /** The preview (who spoke first: "Wug: …") or a setting's consequence, 14/20 ink-2. */
1156
- function ListRowDescription({ className, render, wrap = false, ...props }) {
1157
- const { description } = listRow({ wrap });
1158
- const defaultProps = {
1159
- "data-slot": "list-row-description",
1160
- className: description({ className })
1161
- };
1162
- return useRender({
1163
- defaultTagName: "span",
1164
- render,
1165
- props: mergeProps(defaultProps, props)
1166
- });
1167
- }
1168
- /** Machine-written facts in Space Mono 12, ink-3: the time, a gray count. */
1169
- function ListRowMeta({ className, render, ...props }) {
1170
- const { meta } = listRow();
1171
- const defaultProps = {
1172
- "data-slot": "list-row-meta",
1173
- className: meta({ className })
1174
- };
1175
- return useRender({
1176
- defaultTagName: "span",
1177
- render,
1178
- props: mergeProps(defaultProps, props)
1179
- });
1180
- }
1181
- /** A setting's current value on the right, 15/20 ink-3, at most 45% of the row. */
1182
- function ListRowValue({ className, render, ...props }) {
1183
- const { value } = listRow();
1184
- const defaultProps = {
1185
- "data-slot": "list-row-value",
1186
- className: value({ className })
1187
- };
1188
- return useRender({
1189
- defaultTagName: "span",
1190
- render,
1191
- props: mergeProps(defaultProps, props)
1192
- });
1193
- }
1194
- /** The ink-3 arrow of a row that opens another page. */
1195
- function ListRowChevron({ className, render, ...props }) {
1196
- const { chevron } = listRow();
1197
- const defaultProps = {
1198
- "data-slot": "list-row-chevron",
1199
- "aria-hidden": true,
1200
- className: chevron({ className }),
1201
- children: /* @__PURE__ */ jsx(ChevronRight, {})
1202
- };
1203
- return useRender({
1204
- defaultTagName: "span",
1205
- render,
1206
- props: mergeProps(defaultProps, props)
1207
- });
1208
- }
1209
- //#endregion
1210
986
  //#region src/components/status/status.tsx
1211
987
  const status = tv({
1212
988
  slots: { root: [
@@ -1228,7 +1004,7 @@ const status = tv({
1228
1004
  size: {
1229
1005
  xs: { root: "size-1.5 rounded-[1px] border" },
1230
1006
  sm: { root: "size-2" },
1231
- md: { root: "size-[9px]" },
1007
+ md: { root: "size-2.5" },
1232
1008
  lg: { root: "size-[11px]" }
1233
1009
  }
1234
1010
  },
@@ -2308,10 +2084,10 @@ const sidebarSectionRecipe = tv({ slots: {
2308
2084
  sidebarSectionControls: [
2309
2085
  "flex shrink-0 items-center gap-1",
2310
2086
  "pointer-events-none absolute top-1/2 right-0 -translate-y-1/2 opacity-0",
2311
- "max-md:static max-md:pointer-events-auto max-md:translate-y-0 max-md:opacity-100",
2312
- "md:group-hover/section-header:pointer-events-auto md:group-hover/section-header:opacity-100",
2313
- "md:focus-within:pointer-events-auto md:focus-within:opacity-100",
2314
- "md:has-[[data-popup-open]]:pointer-events-auto md:has-[[data-popup-open]]:opacity-100"
2087
+ "not-pointer-fine:static not-pointer-fine:pointer-events-auto not-pointer-fine:translate-y-0 not-pointer-fine:opacity-100",
2088
+ "pointer-fine:group-hover/section-header:pointer-events-auto pointer-fine:group-hover/section-header:opacity-100",
2089
+ "pointer-fine:focus-within:pointer-events-auto pointer-fine:focus-within:opacity-100",
2090
+ "pointer-fine:has-data-popup-open:pointer-events-auto pointer-fine:has-data-popup-open:opacity-100"
2315
2091
  ],
2316
2092
  sidebarSectionControl: ["flex h-7 w-auto min-w-7 shrink-0 items-center justify-center p-0 -my-1.5", "[&>svg]:shrink-0 [&>svg:not([class*='size-'])]:size-4"]
2317
2093
  } });
@@ -4541,10 +4317,72 @@ function SwitchThumb({ className, ...props }) {
4541
4317
  });
4542
4318
  }
4543
4319
  //#endregion
4320
+ //#region src/lib/use-merged-ref.ts
4321
+ /**
4322
+ * Merges refs into one setter. Returns `[setRef, getRef]`: `setRef(el)` stores `el` and passes it to
4323
+ * every ref; `getRef()` reads the stored element. When a ref changes between renders (checked while
4324
+ * rendering), the old one is cleared and the new one gets the stored element at once. The setter
4325
+ * calls ref callbacks itself, so what they return is ignored.
4326
+ */
4327
+ function useMergedRef(...refs) {
4328
+ const entries = useMemo(() => [], []);
4329
+ const elementRef = useRef(null);
4330
+ const getRef = useCallback(() => elementRef.current, []);
4331
+ const clearEntry = useCallback((entry) => {
4332
+ if (entry != null) {
4333
+ if (entry.type === "RefCallback") entry.ref(null);
4334
+ else entry.ref.current = null;
4335
+ }
4336
+ }, []);
4337
+ const applyStoredElement = useCallback((ref) => {
4338
+ if (typeof ref == "function") ref(getRef());
4339
+ else ref.current = getRef();
4340
+ }, [getRef]);
4341
+ const setRef = useCallback((el) => {
4342
+ elementRef.current = el;
4343
+ for (const entry of entries) if (entry == null) continue;
4344
+ else if (entry.type === "RefObject") entry.ref.current = el;
4345
+ else entry.ref(el);
4346
+ }, [entries]);
4347
+ for (let i = 0; i < refs.length; i++) {
4348
+ const ref = refs[i];
4349
+ const entry = entries[i];
4350
+ if (ref == null) {
4351
+ clearEntry(entry);
4352
+ entries[i] = null;
4353
+ } else {
4354
+ if (entry && entry.ref === ref) continue;
4355
+ if (typeof ref == "function") {
4356
+ if (entry != null) clearEntry(entry);
4357
+ entries[i] = {
4358
+ type: "RefCallback",
4359
+ ref
4360
+ };
4361
+ } else {
4362
+ if (entry != null) clearEntry(entry);
4363
+ entries[i] = {
4364
+ type: "RefObject",
4365
+ ref
4366
+ };
4367
+ }
4368
+ applyStoredElement(ref);
4369
+ }
4370
+ }
4371
+ for (let i = refs.length; i < entries.length; i++) {
4372
+ clearEntry(entries[i]);
4373
+ entries[i] = null;
4374
+ }
4375
+ return [setRef, getRef];
4376
+ }
4377
+ //#endregion
4544
4378
  //#region src/components/segmented-control/segmented-control.tsx
4545
4379
  const segmentedControl = tv({
4546
4380
  slots: {
4547
- root: ["inline-flex shrink-0 items-center", "w-fit flex-nowrap gap-[3px] rounded-[11px] bg-fill-muted p-[3px]"],
4381
+ root: [
4382
+ "inline-flex min-w-0 items-center",
4383
+ "w-fit max-w-full flex-nowrap gap-[3px] rounded-[11px] bg-fill-muted p-[3px]",
4384
+ "data-overflowing:overflow-x-auto data-overflowing:overscroll-x-contain data-overflowing:scrollbar-none"
4385
+ ],
4548
4386
  item: [
4549
4387
  "inline-flex min-w-0 shrink-0 items-center gap-1.5",
4550
4388
  "outline-none disabled:pointer-events-none",
@@ -4579,20 +4417,204 @@ const segmentedControl = tv({
4579
4417
  lg: { root: ["@max-lg:**:data-[slot=segmented-control-item]:relative @max-lg:**:data-[slot=segmented-control-item]:w-8 @max-lg:**:data-[slot=segmented-control-item]:px-0", "@max-lg:**:data-[slot=segmented-control-label]:sr-only @max-lg:**:data-[slot=segmented-control-count]:sr-only"] },
4580
4418
  xl: { root: ["@max-xl:**:data-[slot=segmented-control-item]:relative @max-xl:**:data-[slot=segmented-control-item]:w-8 @max-xl:**:data-[slot=segmented-control-item]:px-0", "@max-xl:**:data-[slot=segmented-control-label]:sr-only @max-xl:**:data-[slot=segmented-control-count]:sr-only"] },
4581
4419
  "2xl": { root: ["@max-2xl:**:data-[slot=segmented-control-item]:relative @max-2xl:**:data-[slot=segmented-control-item]:w-8 @max-2xl:**:data-[slot=segmented-control-item]:px-0", "@max-2xl:**:data-[slot=segmented-control-label]:sr-only @max-2xl:**:data-[slot=segmented-control-count]:sr-only"] }
4582
- }
4420
+ },
4421
+ iconsOnlyMeasured: { true: { root: ["data-icons-only:**:data-[slot=segmented-control-item]:relative data-icons-only:**:data-[slot=segmented-control-item]:w-8 data-icons-only:**:data-[slot=segmented-control-item]:px-0", "data-icons-only:**:data-[slot=segmented-control-label]:sr-only data-icons-only:**:data-[slot=segmented-control-count]:sr-only"] } }
4583
4422
  }
4584
4423
  });
4424
+ const ICONS_ONLY_PRESETS = /* @__PURE__ */ new Set([
4425
+ "xs",
4426
+ "sm",
4427
+ "md",
4428
+ "lg",
4429
+ "xl",
4430
+ "2xl"
4431
+ ]);
4432
+ function isIconsOnlyPreset(value) {
4433
+ return value !== void 0 && ICONS_ONLY_PRESETS.has(value);
4434
+ }
4585
4435
  const SegmentedControlIconsOnlyContext = createContext(false);
4586
- function SegmentedControl({ disabled = false, iconsOnlyBelow, variant = "default", className, ...props }) {
4436
+ /**
4437
+ * A length threshold in CSS pixels, or `undefined` for a value that isn't a
4438
+ * `px`, `rem` or `em` length. `em` is the container's font size, as in a
4439
+ * container query.
4440
+ */
4441
+ function lengthToPx(value, container) {
4442
+ const match = /^(\d*\.?\d+)(px|rem|em)$/.exec(value.trim());
4443
+ if (!match) return void 0;
4444
+ const amount = Number(match[1]);
4445
+ if (match[2] === "px") return amount;
4446
+ const fontOf = match[2] === "rem" ? document.documentElement : container;
4447
+ return amount * parseFloat(getComputedStyle(fontOf).fontSize);
4448
+ }
4449
+ /** The nearest size container above the track, as a container query finds it; else its parent. */
4450
+ function queryContainerOf(track) {
4451
+ for (let el = track.parentElement; el; el = el.parentElement) if (getComputedStyle(el).containerType !== "normal") return el;
4452
+ return track.parentElement;
4453
+ }
4454
+ function contentInlineSize(el) {
4455
+ const style = getComputedStyle(el);
4456
+ return el.clientWidth - parseFloat(style.paddingLeft) - parseFloat(style.paddingRight);
4457
+ }
4458
+ /**
4459
+ * Whether the labelled segments fit the track's box: the segments, first to
4460
+ * last, and the track's padding take no more than its `clientWidth` (half a
4461
+ * pixel of rounding aside; `scrollWidth` would let the last segment eat into
4462
+ * the end padding first, and Base UI's visually hidden radio inputs must not
4463
+ * count), and no label is truncated (a track stretched with `*:flex-1`
4464
+ * shrinks its labels instead). Measured in the labelled layout
4465
+ * whatever the control shows now: the attribute comes off for the read and
4466
+ * goes back before anything paints. The track is `w-fit max-w-full min-w-0`,
4467
+ * so its box is the width it is given, a shrinking flex item's included,
4468
+ * never more than its labels need: the answer depends only on the room
4469
+ * around it, not on what it shows, and so can't flap at the boundary.
4470
+ */
4471
+ function labelsFit(track) {
4472
+ const iconsOnly = track.hasAttribute("data-icons-only");
4473
+ if (iconsOnly) track.removeAttribute("data-icons-only");
4474
+ const segments = Array.from(track.querySelectorAll(":scope > [data-slot=segmented-control-item]"));
4475
+ let fits = true;
4476
+ if (segments.length > 0) {
4477
+ const style = getComputedStyle(track);
4478
+ fits = segments[segments.length - 1].getBoundingClientRect().right - segments[0].getBoundingClientRect().left + parseFloat(style.paddingLeft) + parseFloat(style.paddingRight) - track.clientWidth <= .5;
4479
+ }
4480
+ if (fits) {
4481
+ for (const label of Array.from(track.querySelectorAll("[data-slot=segmented-control-label]"))) if (label.scrollWidth - label.clientWidth > 1) {
4482
+ fits = false;
4483
+ break;
4484
+ }
4485
+ }
4486
+ if (iconsOnly) track.setAttribute("data-icons-only", "");
4487
+ return fits;
4488
+ }
4489
+ /**
4490
+ * Lays the track out and reports whether its segments run past its box. The
4491
+ * track comes from a callback ref, so a swapped element is measured too.
4492
+ *
4493
+ * With `iconsOnlyBelow="auto"` or a length, it decides here whether the
4494
+ * segments show only their icons, and sets `data-icons-only` on the track
4495
+ * (the presets are container queries in CSS and need nothing here). The
4496
+ * decision is taken synchronously, in the layout effect and in the observers'
4497
+ * callbacks, so the first frame and every resize paint the right layout.
4498
+ * Taken again when the track, a segment, the element it is measured against
4499
+ * (the parent for `auto`, the container for a length) or one of that
4500
+ * element's children resizes or comes and goes, a label, a count or the
4501
+ * selection changes, or a web font arrives.
4502
+ *
4503
+ * The overflow is the track's own `scrollWidth` against its `clientWidth`
4504
+ * after that decision, measured in the next frame.
4505
+ */
4506
+ function useTrackFit(track, iconsOnlyBelow) {
4507
+ const [overflowing, setOverflowing] = useState(false);
4508
+ const measured = iconsOnlyBelow !== void 0 && !isIconsOnlyPreset(iconsOnlyBelow);
4509
+ useLayoutEffect(() => {
4510
+ if (!track || typeof ResizeObserver === "undefined") return void 0;
4511
+ const reference = !measured ? null : iconsOnlyBelow === "auto" ? track.parentElement : queryContainerOf(track);
4512
+ if (measured && iconsOnlyBelow !== "auto" && reference && lengthToPx(iconsOnlyBelow, reference) === void 0 && process.env.NODE_ENV !== "production") console.warn(`raft-ui: SegmentedControl iconsOnlyBelow="${iconsOnlyBelow}" is not a preset, "auto" or a px, rem or em length; the segments keep their labels.`);
4513
+ const fitIcons = () => {
4514
+ if (!measured) return;
4515
+ let iconsOnly = false;
4516
+ if (iconsOnlyBelow === "auto") iconsOnly = !labelsFit(track);
4517
+ else if (reference) {
4518
+ const threshold = lengthToPx(iconsOnlyBelow, reference);
4519
+ iconsOnly = threshold !== void 0 && contentInlineSize(reference) < threshold;
4520
+ }
4521
+ if (iconsOnly !== track.hasAttribute("data-icons-only")) track.toggleAttribute("data-icons-only", iconsOnly);
4522
+ };
4523
+ let frame = 0;
4524
+ const measure = () => {
4525
+ frame = 0;
4526
+ setOverflowing(track.scrollWidth - track.clientWidth > 1);
4527
+ };
4528
+ const schedule = () => {
4529
+ if (frame === 0) frame = requestAnimationFrame(measure);
4530
+ };
4531
+ const update = () => {
4532
+ fitIcons();
4533
+ schedule();
4534
+ };
4535
+ const resize = new ResizeObserver(update);
4536
+ const observeAll = () => {
4537
+ resize.disconnect();
4538
+ resize.observe(track);
4539
+ for (const child of Array.from(track.children)) resize.observe(child);
4540
+ if (reference) {
4541
+ resize.observe(reference);
4542
+ for (const child of Array.from(reference.children)) resize.observe(child);
4543
+ }
4544
+ };
4545
+ observeAll();
4546
+ const mutation = new MutationObserver(() => {
4547
+ observeAll();
4548
+ update();
4549
+ });
4550
+ mutation.observe(track, {
4551
+ childList: true,
4552
+ subtree: true,
4553
+ characterData: true,
4554
+ attributeFilter: ["data-checked"]
4555
+ });
4556
+ if (reference) mutation.observe(reference, { childList: true });
4557
+ const fonts = typeof document === "undefined" ? void 0 : document.fonts;
4558
+ fonts?.addEventListener("loadingdone", update);
4559
+ fitIcons();
4560
+ measure();
4561
+ return () => {
4562
+ if (frame !== 0) cancelAnimationFrame(frame);
4563
+ resize.disconnect();
4564
+ mutation.disconnect();
4565
+ fonts?.removeEventListener("loadingdone", update);
4566
+ track.removeAttribute("data-icons-only");
4567
+ };
4568
+ }, [
4569
+ track,
4570
+ measured,
4571
+ iconsOnlyBelow
4572
+ ]);
4573
+ return overflowing;
4574
+ }
4575
+ /** In development, warns when segments that may show only their icons have none. */
4576
+ function useIconsOnlyWarning(ref, iconsOnlyBelow) {
4577
+ useLayoutEffect(() => {
4578
+ if (process.env.NODE_ENV === "production" || iconsOnlyBelow === void 0) return;
4579
+ const items = ref.current?.querySelectorAll("[data-slot=segmented-control-item]") ?? [];
4580
+ for (const item of Array.from(items)) if (!item.querySelector("svg, img")) {
4581
+ console.warn("raft-ui: a SegmentedControl with iconsOnlyBelow has a segment with no icon; it would be left empty when the segments show only their icons. Give every segment an icon.");
4582
+ return;
4583
+ }
4584
+ }, [ref, iconsOnlyBelow]);
4585
+ }
4586
+ function SegmentedControl({ disabled = false, iconsOnlyBelow, variant = "default", className, ref, ...props }) {
4587
+ const preset = isIconsOnlyPreset(iconsOnlyBelow);
4587
4588
  const { root } = segmentedControl({
4588
- iconsOnlyBelow,
4589
+ iconsOnlyBelow: preset ? iconsOnlyBelow : void 0,
4590
+ iconsOnlyMeasured: iconsOnlyBelow !== void 0 && !preset ? true : void 0,
4589
4591
  variant
4590
4592
  });
4593
+ const rootRef = useRef(null);
4594
+ const [track, setTrack] = useState(null);
4595
+ const [setRef] = useMergedRef(rootRef, setTrack, ref);
4596
+ const overflowing = useTrackFit(track, iconsOnlyBelow);
4597
+ useIconsOnlyWarning(rootRef, iconsOnlyBelow);
4598
+ const value = props.value;
4599
+ useLayoutEffect(() => {
4600
+ const track = rootRef.current;
4601
+ if (!overflowing || !track) return;
4602
+ const checked = track.querySelector("[data-checked]");
4603
+ if (!checked) return;
4604
+ const trackLeft = track.getBoundingClientRect().left;
4605
+ const box = checked.getBoundingClientRect();
4606
+ const start = box.left - trackLeft + track.scrollLeft;
4607
+ const end = start + box.width;
4608
+ if (start < track.scrollLeft) track.scrollLeft = start;
4609
+ else if (end > track.scrollLeft + track.clientWidth) track.scrollLeft = end - track.clientWidth;
4610
+ }, [overflowing, value]);
4591
4611
  return /* @__PURE__ */ jsx(SegmentedControlIconsOnlyContext, {
4592
4612
  value: iconsOnlyBelow !== void 0,
4593
4613
  children: /* @__PURE__ */ jsx(RadioGroup$1, {
4614
+ ref: setRef,
4594
4615
  disabled,
4595
4616
  "data-slot": "segmented-control",
4617
+ "data-overflowing": overflowing ? "" : void 0,
4596
4618
  className: root({ className }),
4597
4619
  ...props
4598
4620
  })
@@ -4779,8 +4801,10 @@ const descriptionList = tv({
4779
4801
  variants: { direction: {
4780
4802
  vertical: {},
4781
4803
  horizontal: { root: [
4782
- "grid items-baseline",
4783
- "max-sm:grid-cols-1 max-sm:gap-y-0.5",
4804
+ "@container/description-list w-full grid items-baseline",
4805
+ "[&>[data-slot=description-item]>*]:@max-sm/description-list:col-span-full",
4806
+ "[&>[data-slot=description-item]>[data-slot=description-details]]:@max-sm/description-list:min-h-0",
4807
+ "[&>[data-slot=description-item]+[data-slot=description-item]>[data-slot=description-term]]:@max-sm/description-list:mt-2",
4784
4808
  "*:data-[slot=description-item]:contents",
4785
4809
  "[&>[data-slot=description-item]>[data-slot=description-term]]:mb-0",
4786
4810
  "[&>[data-slot=description-item]>[data-slot=description-term]]:max-w-40",
@@ -4999,16 +5023,33 @@ function CodeBlockBody({ children, className, render, ...props }) {
4999
5023
  * its own. Code that fits adds no Tab stop.
5000
5024
  */
5001
5025
  function CodeBlockPre({ render, ref, "aria-label": ariaLabel = "Code", ...props }) {
5002
- const preRef = useRef(null);
5026
+ const [pre, setPre] = useState(null);
5027
+ const preRef = useCallback((element) => setPre(element), []);
5003
5028
  const [overflowing, setOverflowing] = useState(false);
5004
- useEffect(() => {
5005
- const pre = preRef.current;
5029
+ useLayoutEffect(() => {
5006
5030
  if (!pre) return;
5007
- const observer = new ResizeObserver(() => setOverflowing(pre.scrollWidth > pre.clientWidth));
5008
- observer.observe(pre);
5009
- for (const child of pre.children) observer.observe(child);
5010
- return () => observer.disconnect();
5011
- }, []);
5031
+ const measure = () => setOverflowing(pre.scrollWidth > pre.clientWidth);
5032
+ const resize = new ResizeObserver(measure);
5033
+ const observe = () => {
5034
+ resize.disconnect();
5035
+ resize.observe(pre);
5036
+ for (const child of pre.children) resize.observe(child);
5037
+ };
5038
+ observe();
5039
+ const mutation = new MutationObserver(() => {
5040
+ observe();
5041
+ measure();
5042
+ });
5043
+ mutation.observe(pre, {
5044
+ childList: true,
5045
+ subtree: true,
5046
+ characterData: true
5047
+ });
5048
+ return () => {
5049
+ resize.disconnect();
5050
+ mutation.disconnect();
5051
+ };
5052
+ }, [pre]);
5012
5053
  return useRender({
5013
5054
  defaultTagName: "pre",
5014
5055
  render,
@@ -5630,7 +5671,7 @@ const messageActionCard = tv({
5630
5671
  status: [
5631
5672
  "inline-flex h-auto items-center gap-1.5 rounded-none border-0 bg-transparent p-0 shadow-none",
5632
5673
  "text-caption font-semibold text-foreground-muted",
5633
- "before:size-[9px] before:shrink-0 before:rounded-[2px] before:border-[1.5px] before:border-sticker-ink before:content-['']"
5674
+ "before:size-2.5 before:shrink-0 before:rounded-[2px] before:border-[1.5px] before:border-sticker-ink before:content-['']"
5634
5675
  ],
5635
5676
  collapseTrigger: [
5636
5677
  "flex shrink-0 cursor-pointer items-center justify-center",
@@ -5656,7 +5697,7 @@ const messageActionCard = tv({
5656
5697
  //#endregion
5657
5698
  //#region src/components/message-action-card/message-action-card-content.recipe.ts
5658
5699
  const messageActionCardContent = tv({ slots: {
5659
- root: ["p-3", "flex flex-col gap-2 px-3 pt-0 pb-3"],
5700
+ root: ["p-3", "@container/action-card flex flex-col gap-2 px-3 pt-0 pb-3"],
5660
5701
  panel: [
5661
5702
  "h-(--collapsible-panel-height) overflow-hidden",
5662
5703
  "transition-[height] duration-200 ease-out motion-reduce:transition-none",
@@ -5664,12 +5705,20 @@ const messageActionCardContent = tv({ slots: {
5664
5705
  ],
5665
5706
  properties: [
5666
5707
  "m-0 grid",
5667
- "max-sm:grid-cols-1 max-sm:gap-y-0.5",
5708
+ "@max-sm/action-card:grid-cols-1",
5668
5709
  "grid-cols-[minmax(88px,max-content)_minmax(0,1fr)] items-baseline gap-x-4 gap-y-0.5"
5669
5710
  ],
5670
5711
  property: ["contents"],
5671
- propertyLabel: ["max-w-40 min-w-0 wrap-break-word", "text-footnote font-medium text-foreground-hint"],
5672
- propertyValue: ["m-0 min-w-0 wrap-break-word", "min-h-8 py-1.5 text-callout text-foreground"],
5712
+ propertyLabel: [
5713
+ "max-w-40 min-w-0 wrap-break-word",
5714
+ "text-footnote font-medium text-foreground-hint",
5715
+ "[[data-slot=message-action-card-property]+[data-slot=message-action-card-property]>&]:@max-sm/action-card:mt-2"
5716
+ ],
5717
+ propertyValue: [
5718
+ "m-0 min-w-0 wrap-break-word",
5719
+ "min-h-8 py-1.5 text-callout text-foreground",
5720
+ "@max-sm/action-card:min-h-0 @max-sm/action-card:py-0"
5721
+ ],
5673
5722
  scopeList: ["mt-0 stack-y-1.5"],
5674
5723
  scopeListViewport: ["overflow-y-auto overscroll-contain", "max-h-[164px] stack-y-1.5 pr-1"],
5675
5724
  scopeListLabel: ["text-footnote font-medium text-foreground-hint"],
@@ -6141,7 +6190,7 @@ function MessageAttachmentAction({ className, render, ...props }) {
6141
6190
  //#region src/components/message-attachment/message-image-gallery.recipe.ts
6142
6191
  const messageImageGallery = tv({
6143
6192
  slots: {
6144
- root: ["max-w-[min(360px,calc(100vw-112px))] stack-y-1 md:max-w-[360px]"],
6193
+ root: ["@container/gallery w-full max-w-[min(360px,100%)] stack-y-1"],
6145
6194
  row: ["grid", "gap-1"],
6146
6195
  item: [
6147
6196
  "group/img relative overflow-hidden text-left",
@@ -6166,28 +6215,24 @@ const messageImageGallery = tv({
6166
6215
  {
6167
6216
  count: 1,
6168
6217
  single: false,
6169
- class: { row: "auto-rows-[8rem] sm:auto-rows-[9rem]" }
6218
+ class: { row: "auto-rows-[8rem] @min-[360px]/gallery:auto-rows-[9rem]" }
6170
6219
  },
6171
6220
  {
6172
6221
  count: 2,
6173
6222
  single: false,
6174
- class: { row: "auto-rows-[8rem] sm:auto-rows-[9rem]" }
6223
+ class: { row: "auto-rows-[8rem] @min-[360px]/gallery:auto-rows-[9rem]" }
6175
6224
  },
6176
6225
  {
6177
6226
  count: 3,
6178
6227
  single: false,
6179
- class: { row: "auto-rows-[7rem] sm:auto-rows-[8rem]" }
6180
- },
6181
- {
6182
- count: 3,
6183
- class: { row: "md:grid-cols-2" }
6228
+ class: { row: "auto-rows-[7rem] @min-[360px]/gallery:auto-rows-[8rem]" }
6184
6229
  }
6185
6230
  ],
6186
6231
  variants: {
6187
6232
  count: {
6188
6233
  1: { row: "grid-cols-1" },
6189
6234
  2: { row: "grid-cols-2" },
6190
- 3: { row: "grid-cols-2 md:grid-cols-3" }
6235
+ 3: { row: "grid-cols-2" }
6191
6236
  },
6192
6237
  /** A single-image gallery keeps the image's proportions instead of a row height. */
6193
6238
  single: { true: { item: ["inline-block w-fit max-w-[26rem] justify-self-start", "rounded-container"] } },
@@ -6361,7 +6406,7 @@ const messageVideoPreview = tv({ slots: {
6361
6406
  root: [
6362
6407
  "group/video relative aspect-video w-full overflow-hidden",
6363
6408
  "bg-black text-left",
6364
- "max-w-[min(360px,calc(100vw-112px))] rounded-container border border-line-hairline bg-clip-padding"
6409
+ "max-w-[min(360px,100%)] rounded-container border border-line-hairline bg-clip-padding"
6365
6410
  ],
6366
6411
  media: "block size-full bg-black object-contain",
6367
6412
  fallback: "flex size-full items-center justify-center bg-black text-white",
@@ -6548,14 +6593,14 @@ action: {
6548
6593
  */
6549
6594
  const messageForwardedBundleGallery = tv({
6550
6595
  slots: {
6551
- root: ["min-w-0"],
6596
+ root: ["@container/bundle w-full min-w-0"],
6552
6597
  row: ["grid gap-2"],
6553
6598
  tile: ["[&_img]:block [&_img]:size-full [&_img]:object-cover"]
6554
6599
  },
6555
6600
  variants: { count: {
6556
- 1: { row: "grid-cols-1 auto-rows-[8rem] sm:auto-rows-[9rem]" },
6557
- 2: { row: "grid-cols-2 auto-rows-[8rem] sm:auto-rows-[9rem]" },
6558
- 3: { row: "grid-cols-2 auto-rows-[7rem] sm:auto-rows-[8rem] md:grid-cols-3" }
6601
+ 1: { row: "grid-cols-1 auto-rows-[8rem] @min-[360px]/bundle:auto-rows-[9rem]" },
6602
+ 2: { row: "grid-cols-2 auto-rows-[8rem] @min-[360px]/bundle:auto-rows-[9rem]" },
6603
+ 3: { row: "grid-cols-2 auto-rows-[7rem] @min-[360px]/bundle:auto-rows-[8rem] @min-[360px]/bundle:grid-cols-3" }
6559
6604
  } }
6560
6605
  });
6561
6606
  //#endregion
@@ -9384,32 +9429,6 @@ function useComposerSuggestions({ value, onValueChange, detectTrigger, getItems,
9384
9429
  };
9385
9430
  }
9386
9431
  //#endregion
9387
- //#region src/components/skeleton/skeleton.tsx
9388
- const skeleton = tv({
9389
- slots: { root: [
9390
- "animate-pulse motion-reduce:animate-none",
9391
- "pointer-events-none",
9392
- "data-[variant=line]:rounded-sticker data-[variant=line]:bg-fill-muted",
9393
- "data-[variant=block]:rounded-sticker data-[variant=block]:bg-fill-muted"
9394
- ] },
9395
- variants: { variant: {
9396
- line: { root: "h-3" },
9397
- block: { root: "" },
9398
- circle: { root: ["rounded-sticker bg-fill-muted"] }
9399
- } },
9400
- defaultVariants: { variant: "block" }
9401
- });
9402
- function Skeleton({ variant = "block", className, ...props }) {
9403
- const { root } = skeleton({ variant });
9404
- return /* @__PURE__ */ jsx("div", {
9405
- "aria-hidden": "true",
9406
- "data-slot": "skeleton",
9407
- "data-variant": variant,
9408
- className: root({ className }),
9409
- ...props
9410
- });
9411
- }
9412
- //#endregion
9413
9432
  //#region src/components/banner/banner.tsx
9414
9433
  const banner = tv({
9415
9434
  slots: {
@@ -9791,7 +9810,7 @@ const notificationCenter = tv({
9791
9810
  true: { item: ["opacity-100"] },
9792
9811
  false: { item: [
9793
9812
  "pr-[37px]",
9794
- "after:pointer-events-none after:absolute after:top-[17.5px] after:right-4 after:size-[9px]",
9813
+ "after:pointer-events-none after:absolute after:top-[calc(--spacing(3)+(var(--text-subhead--line-height)-10px)/2)] after:right-4 after:size-2.5",
9795
9814
  "after:rounded-[2px] after:border-[1.5px] after:border-sticker-ink after:bg-attention-400"
9796
9815
  ] }
9797
9816
  },
@@ -11850,8 +11869,9 @@ function LiveAgentActivityBarText({ className, render, ...props }) {
11850
11869
  }
11851
11870
  //#endregion
11852
11871
  //#region src/components/tasks/task-status-icon.tsx
11853
- /** Raft draws every status as its pixel: a 9px square in the status colour
11854
- * with a 1.5px sticker-ink edge (2px outer radius). The square keeps its size
11872
+ /** Raft draws every status as its pixel: a 10px square in the status colour
11873
+ * with a 1.5px sticker-ink edge (2px outer radius), the size of every status
11874
+ * light beside text (status.md#sizes). The square keeps its size
11855
11875
  * and sits centred in whatever box the context gives the icon, so an icon
11856
11876
  * slot sized for a glyph still shows the same pixel. */
11857
11877
  const TASK_STATUS_PIXEL_STYLE = {
@@ -11881,19 +11901,19 @@ function TaskStatusPixel({ status, className, ...props }) {
11881
11901
  "aria-hidden": true,
11882
11902
  "data-slot": "task-status-icon",
11883
11903
  "data-status": status,
11884
- width: "9",
11885
- height: "9",
11904
+ width: "10",
11905
+ height: "10",
11886
11906
  overflow: "visible",
11887
11907
  className,
11888
11908
  ...props,
11889
11909
  children: /* @__PURE__ */ jsx("rect", {
11890
11910
  x: "50%",
11891
11911
  y: "50%",
11892
- width: "7.5",
11893
- height: "7.5",
11912
+ width: "8.5",
11913
+ height: "8.5",
11894
11914
  rx: "1.25",
11895
11915
  strokeWidth: "1.5",
11896
- transform: "translate(-3.75 -3.75)",
11916
+ transform: "translate(-4.25 -4.25)",
11897
11917
  style: TASK_STATUS_PIXEL_STYLE[status]
11898
11918
  })
11899
11919
  });
@@ -12167,7 +12187,7 @@ const taskCardStatus = tv({ base: [
12167
12187
  "font-sans text-[12px] leading-4 font-semibold text-foreground",
12168
12188
  "[&:not(:has([data-slot=task-card-status-label]))]:hidden",
12169
12189
  "**:data-[slot=task-card-status-label]:inline-flex **:data-[slot=task-card-status-label]:items-center [&_[data-slot=task-card-status-label]]:gap-1.5",
12170
- "[&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg]:size-3 [&_svg:not([data-slot=task-status-icon])]:-mx-0.5 [&_svg[data-slot=task-status-icon]]:size-[9px]",
12190
+ "[&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg]:size-3 [&_svg:not([data-slot=task-status-icon])]:-mx-0.5 [&_svg[data-slot=task-status-icon]]:size-2.5",
12171
12191
  "[button&]:cursor-pointer [button&]:enabled:hover:overlay-medium [button&]:enabled:active:overlay-medium",
12172
12192
  "disabled:cursor-default disabled:opacity-100",
12173
12193
  "focus-visible:shadow-focus"
@@ -12991,64 +13011,6 @@ function useMemoWithPrevious(fn, deps) {
12991
13011
  });
12992
13012
  }
12993
13013
  //#endregion
12994
- //#region src/components/virtual-list/hooks/use-merged-ref.ts
12995
- /**
12996
- * Merges refs into one setter. Returns `[setRef, getRef]`: `setRef(el)` stores `el` and passes it to
12997
- * every ref; `getRef()` reads the stored element. When a ref changes between renders (checked while
12998
- * rendering), the old one is cleared and the new one gets the stored element at once. The setter
12999
- * calls ref callbacks itself, so what they return is ignored.
13000
- */
13001
- function useMergedRef(...refs) {
13002
- const entries = useMemo(() => [], []);
13003
- const elementRef = useRef(null);
13004
- const getRef = useCallback(() => elementRef.current, []);
13005
- const clearEntry = useCallback((entry) => {
13006
- if (entry != null) {
13007
- if (entry.type === "RefCallback") entry.ref(null);
13008
- else entry.ref.current = null;
13009
- }
13010
- }, []);
13011
- const applyStoredElement = useCallback((ref) => {
13012
- if (typeof ref == "function") ref(getRef());
13013
- else ref.current = getRef();
13014
- }, [getRef]);
13015
- const setRef = useCallback((el) => {
13016
- elementRef.current = el;
13017
- for (const entry of entries) if (entry == null) continue;
13018
- else if (entry.type === "RefObject") entry.ref.current = el;
13019
- else entry.ref(el);
13020
- }, [entries]);
13021
- for (let i = 0; i < refs.length; i++) {
13022
- const ref = refs[i];
13023
- const entry = entries[i];
13024
- if (ref == null) {
13025
- clearEntry(entry);
13026
- entries[i] = null;
13027
- } else {
13028
- if (entry && entry.ref === ref) continue;
13029
- if (typeof ref == "function") {
13030
- if (entry != null) clearEntry(entry);
13031
- entries[i] = {
13032
- type: "RefCallback",
13033
- ref
13034
- };
13035
- } else {
13036
- if (entry != null) clearEntry(entry);
13037
- entries[i] = {
13038
- type: "RefObject",
13039
- ref
13040
- };
13041
- }
13042
- applyStoredElement(ref);
13043
- }
13044
- }
13045
- for (let i = refs.length; i < entries.length; i++) {
13046
- clearEntry(entries[i]);
13047
- entries[i] = null;
13048
- }
13049
- return [setRef, getRef];
13050
- }
13051
- //#endregion
13052
13014
  //#region src/components/virtual-list/hooks/use-non-passive-wheel.ts
13053
13015
  /**
13054
13016
  * Adds a non-passive `wheel` listener (so it may call `preventDefault`) to the element `getTarget`
@@ -15118,19 +15080,19 @@ function VirtualList(props) {
15118
15080
  //#endregion
15119
15081
  //#region src/components/tasks/tasks-panel.recipe.ts
15120
15082
  const tasksPanel = tv({ slots: {
15121
- root: ["flex min-h-0 min-w-0 flex-1 flex-col", "bg-layer-canvas text-foreground"],
15083
+ root: ["@container/tasks flex min-h-0 min-w-0 flex-1 flex-col", "bg-layer-canvas text-foreground"],
15122
15084
  toolbar: [
15123
15085
  "grid shrink-0 grid-cols-[minmax(0,1fr)_auto] items-center gap-2",
15124
- "md:flex md:flex-wrap md:items-center md:justify-between",
15086
+ "@min-md/tasks:flex @min-md/tasks:flex-wrap @min-md/tasks:items-center @min-md/tasks:justify-between",
15125
15087
  "min-h-14 border-b border-line-seam bg-layer-canvas px-5 py-3",
15126
- "max-md:px-4"
15088
+ "@max-md/tasks:px-4"
15127
15089
  ],
15128
15090
  toolbarGroup: ["flex flex-wrap items-center gap-2"],
15129
15091
  toolbarNewTask: ["col-start-1 row-start-1 justify-self-start", "flex flex-wrap items-center gap-2"],
15130
15092
  toolbarFilters: [
15131
15093
  "col-span-2 row-start-2 min-w-0",
15132
15094
  "only:col-auto only:row-auto",
15133
- "md:mr-auto",
15095
+ "@min-md/tasks:mr-auto",
15134
15096
  "flex flex-wrap items-center gap-2"
15135
15097
  ],
15136
15098
  toolbarView: ["col-start-2 row-start-1 justify-self-end", "flex flex-wrap items-center gap-2"],
@@ -15145,7 +15107,7 @@ const tasksPanel = tv({ slots: {
15145
15107
  "min-h-0 flex-1 overflow-auto overscroll-contain p-4",
15146
15108
  "pb-[calc(1rem+env(safe-area-inset-bottom,0px))]",
15147
15109
  "bg-layer-canvas px-5",
15148
- "max-md:px-4"
15110
+ "@max-md/tasks:px-4"
15149
15111
  ],
15150
15112
  empty: ["flex h-full flex-col items-center justify-center"]
15151
15113
  } });
@@ -15304,7 +15266,7 @@ const taskChip = tv({
15304
15266
  "focus-visible:keyboard:outline-2 focus-visible:keyboard:outline-offset-2 focus-visible:keyboard:outline-line-strong",
15305
15267
  "border-0",
15306
15268
  "font-sans font-semibold text-foreground",
15307
- "[&>svg:not([data-slot=task-status-icon])]:-mx-0.5 [&>svg[data-slot=task-status-icon]]:size-[9px]",
15269
+ "[&>svg:not([data-slot=task-status-icon])]:-mx-0.5 [&>svg[data-slot=task-status-icon]]:size-2.5",
15308
15270
  "[a,button]:cursor-pointer [a,button]:hover:overlay-medium [a,button]:active:overlay-medium",
15309
15271
  "focus-visible:outline-none focus-visible:shadow-focus"
15310
15272
  ] },
@@ -15317,7 +15279,7 @@ const taskChip = tv({
15317
15279
  closed: { root: ["bg-task-status-closed-soft"] }
15318
15280
  },
15319
15281
  variant: {
15320
- default: { root: ["h-[22px] gap-1.5 rounded-chip px-[7px] py-0", "text-[12px] leading-4"] },
15282
+ default: { root: ["h-[22px] items-baseline gap-1.5 rounded-chip px-[7px] py-[3px] [&>svg]:self-center", "text-[12px] leading-4"] },
15321
15283
  inline: {}
15322
15284
  },
15323
15285
  size: {
@@ -15338,7 +15300,7 @@ const taskChip = tv({
15338
15300
  }, {
15339
15301
  variant: "default",
15340
15302
  size: "sm",
15341
- class: { root: ["h-5 gap-1 px-[5px]"] }
15303
+ class: { root: ["h-5 gap-1 px-[5px] py-0.5"] }
15342
15304
  }],
15343
15305
  defaultVariants: {
15344
15306
  variant: "default",
@@ -15721,9 +15683,7 @@ function ActivityInboxSidebar({ className, children, ...props }) {
15721
15683
  const activityInboxToolbar = tv({ slots: {
15722
15684
  controls: ["flex shrink-0 flex-nowrap items-center gap-2", "bg-layer-canvas px-4 py-3"],
15723
15685
  selectionToolbar: [
15724
- "flex min-h-11 shrink-0 items-center gap-2",
15725
- "max-md:flex-wrap max-md:py-2",
15726
- "md:h-11 md:flex-nowrap md:py-0",
15686
+ "flex min-h-11 shrink-0 flex-wrap items-center gap-2 pt-1.5 pb-[5px]",
15727
15687
  "border-b border-line-hairline bg-layer-canvas px-4",
15728
15688
  "**:data-[activity-inbox-action=sort]:text-foreground-muted",
15729
15689
  "**:data-[activity-inbox-action=sort]:hover:text-foreground"
@@ -15757,276 +15717,6 @@ function ActivityInboxSelectionCount({ className, ...props }) {
15757
15717
  });
15758
15718
  }
15759
15719
  //#endregion
15760
- //#region src/components/inbox-item/inbox-item.tsx
15761
- const InboxItemDisabledContext = createContext(false);
15762
- const InboxItemDensityContext = createContext(void 0);
15763
- function InboxItem({ active = false, className, density, disabled = false, render, ...props }) {
15764
- const { item } = inboxItem({ density });
15765
- const defaultProps = {
15766
- "aria-disabled": disabled || void 0,
15767
- "data-active": active ? "true" : void 0,
15768
- "data-density": density,
15769
- "data-disabled": disabled ? "true" : void 0,
15770
- "data-slot": "inbox-item",
15771
- className: item({ className: `group/inbox-item ${className ?? ""}`.trim() })
15772
- };
15773
- const element = useRender({
15774
- defaultTagName: "div",
15775
- render,
15776
- props: mergeProps(defaultProps, props)
15777
- });
15778
- return /* @__PURE__ */ jsx(InboxItemDisabledContext.Provider, {
15779
- value: disabled,
15780
- children: /* @__PURE__ */ jsx(InboxItemDensityContext.Provider, {
15781
- value: density,
15782
- children: element
15783
- })
15784
- });
15785
- }
15786
- function InboxItemTrigger({ className, onClick, render, ...props }) {
15787
- const disabled = useContext(InboxItemDisabledContext);
15788
- const { itemTrigger } = inboxItem();
15789
- const defaultProps = {
15790
- type: render ? void 0 : "button",
15791
- "aria-disabled": disabled || void 0,
15792
- "data-disabled": disabled ? "true" : void 0,
15793
- "data-slot": "inbox-item-open",
15794
- disabled: render ? void 0 : disabled,
15795
- tabIndex: disabled && render ? -1 : void 0,
15796
- className: itemTrigger({ className }),
15797
- onClick: (event) => {
15798
- if (disabled) {
15799
- event.preventDefault();
15800
- event.stopPropagation();
15801
- return;
15802
- }
15803
- onClick?.(event);
15804
- }
15805
- };
15806
- return useRender({
15807
- defaultTagName: "button",
15808
- render,
15809
- props: mergeProps(defaultProps, props)
15810
- });
15811
- }
15812
- function InboxItemLeading({ className, render, ...props }) {
15813
- const { itemLeading } = inboxItem();
15814
- const defaultProps = {
15815
- "data-slot": "inbox-item-leading",
15816
- className: itemLeading({ className })
15817
- };
15818
- return useRender({
15819
- defaultTagName: "div",
15820
- render,
15821
- props: mergeProps(defaultProps, props)
15822
- });
15823
- }
15824
- function InboxItemSelection({ className, render, ...props }) {
15825
- const { itemSelection } = inboxItem();
15826
- const defaultProps = {
15827
- "data-slot": "inbox-item-selection",
15828
- className: itemSelection({ className })
15829
- };
15830
- return useRender({
15831
- defaultTagName: "div",
15832
- render,
15833
- props: mergeProps(defaultProps, props)
15834
- });
15835
- }
15836
- function InboxItemContent({ className, render, ...props }) {
15837
- const { itemContent } = inboxItem();
15838
- const defaultProps = {
15839
- "data-slot": "inbox-item-content",
15840
- className: itemContent({ className })
15841
- };
15842
- return useRender({
15843
- defaultTagName: "div",
15844
- render,
15845
- props: mergeProps(defaultProps, props)
15846
- });
15847
- }
15848
- function InboxItemContext({ className, render, ...props }) {
15849
- const { itemContext } = inboxItem();
15850
- const defaultProps = {
15851
- "data-slot": "inbox-item-context",
15852
- className: itemContext({ className })
15853
- };
15854
- return useRender({
15855
- defaultTagName: "div",
15856
- render,
15857
- props: mergeProps(defaultProps, props)
15858
- });
15859
- }
15860
- function InboxItemSubtitle({ className, render, ...props }) {
15861
- const { itemSubtitle } = inboxItem();
15862
- const defaultProps = {
15863
- "data-slot": "inbox-item-subtitle",
15864
- className: itemSubtitle({ className })
15865
- };
15866
- return useRender({
15867
- defaultTagName: "div",
15868
- render,
15869
- props: mergeProps(defaultProps, props)
15870
- });
15871
- }
15872
- function InboxItemHeading({ className, render, ...props }) {
15873
- const { itemHeading } = inboxItem();
15874
- const defaultProps = {
15875
- "data-slot": "inbox-item-heading",
15876
- className: itemHeading({ className })
15877
- };
15878
- return useRender({
15879
- defaultTagName: "div",
15880
- render,
15881
- props: mergeProps(defaultProps, props)
15882
- });
15883
- }
15884
- function InboxItemTitle({ className, render, ...props }) {
15885
- const density = useContext(InboxItemDensityContext);
15886
- const { itemTitle } = inboxItem({ density });
15887
- const defaultProps = {
15888
- "data-slot": "inbox-item-title",
15889
- className: itemTitle({ className })
15890
- };
15891
- return useRender({
15892
- defaultTagName: "div",
15893
- render,
15894
- props: mergeProps(defaultProps, props)
15895
- });
15896
- }
15897
- function InboxItemTrailing({ className, render, ...props }) {
15898
- const density = useContext(InboxItemDensityContext);
15899
- const { itemTrailing } = inboxItem({ density });
15900
- const defaultProps = {
15901
- "data-slot": "inbox-item-trailing",
15902
- className: itemTrailing({ className })
15903
- };
15904
- return useRender({
15905
- defaultTagName: "div",
15906
- render,
15907
- props: mergeProps(defaultProps, props)
15908
- });
15909
- }
15910
- function InboxItemTimestamp({ className, render, ...props }) {
15911
- const density = useContext(InboxItemDensityContext);
15912
- const { itemTimestamp } = inboxItem({ density });
15913
- const defaultProps = {
15914
- "data-slot": "inbox-item-timestamp",
15915
- className: itemTimestamp({ className })
15916
- };
15917
- return useRender({
15918
- defaultTagName: "span",
15919
- render,
15920
- props: mergeProps(defaultProps, props)
15921
- });
15922
- }
15923
- function InboxItemMarks({ className, render, ...props }) {
15924
- const { itemMarks } = inboxItem();
15925
- const defaultProps = {
15926
- "data-slot": "inbox-item-marks",
15927
- className: itemMarks({ className })
15928
- };
15929
- return useRender({
15930
- defaultTagName: "div",
15931
- render,
15932
- props: mergeProps(defaultProps, props)
15933
- });
15934
- }
15935
- function InboxItemHoverTarget({ className, onClick, render, ...props }) {
15936
- const { itemHoverTarget } = inboxItem();
15937
- const defaultProps = {
15938
- "data-slot": "inbox-item-hover-target",
15939
- className: itemHoverTarget({ className }),
15940
- onClick: (event) => {
15941
- onClick?.(event);
15942
- if (event.defaultPrevented) return;
15943
- const trigger = event.currentTarget.closest("[data-slot=inbox-item]")?.querySelector("[data-slot=inbox-item-open]");
15944
- if (!trigger) return;
15945
- trigger.dispatchEvent(new MouseEvent("click", {
15946
- bubbles: true,
15947
- cancelable: true,
15948
- detail: event.detail,
15949
- altKey: event.altKey,
15950
- ctrlKey: event.ctrlKey,
15951
- metaKey: event.metaKey,
15952
- shiftKey: event.shiftKey
15953
- }));
15954
- }
15955
- };
15956
- return useRender({
15957
- defaultTagName: "span",
15958
- render,
15959
- props: mergeProps(defaultProps, props)
15960
- });
15961
- }
15962
- function InboxItemBody({ className, render, ...props }) {
15963
- const density = useContext(InboxItemDensityContext);
15964
- const { itemBody } = inboxItem({ density });
15965
- const defaultProps = {
15966
- "data-slot": "inbox-item-body",
15967
- className: itemBody({ className })
15968
- };
15969
- return useRender({
15970
- defaultTagName: "p",
15971
- render,
15972
- props: mergeProps(defaultProps, props)
15973
- });
15974
- }
15975
- function InboxItemMessage({ className, render, ...props }) {
15976
- const density = useContext(InboxItemDensityContext);
15977
- const { itemMessage } = inboxItem({ density });
15978
- const defaultProps = {
15979
- "data-slot": "inbox-item-message",
15980
- className: itemMessage({ className })
15981
- };
15982
- return useRender({
15983
- defaultTagName: "p",
15984
- render,
15985
- props: mergeProps(defaultProps, props)
15986
- });
15987
- }
15988
- function InboxItemSender({ className, render, ...props }) {
15989
- const { itemSender } = inboxItem();
15990
- const defaultProps = {
15991
- "data-slot": "inbox-item-sender",
15992
- className: itemSender({ className })
15993
- };
15994
- return useRender({
15995
- defaultTagName: "span",
15996
- render,
15997
- props: mergeProps(defaultProps, props)
15998
- });
15999
- }
16000
- function InboxItemMetadata({ className, render, ...props }) {
16001
- const { itemMetadata } = inboxItem();
16002
- const defaultProps = {
16003
- "data-slot": "inbox-item-metadata",
16004
- className: itemMetadata({ className })
16005
- };
16006
- return useRender({
16007
- defaultTagName: "div",
16008
- render,
16009
- props: mergeProps(defaultProps, props)
16010
- });
16011
- }
16012
- function InboxItemActions({ className, render, reveal, ...props }) {
16013
- const density = useContext(InboxItemDensityContext);
16014
- const { itemActions } = inboxItem({
16015
- density,
16016
- reveal
16017
- });
16018
- const defaultProps = {
16019
- "data-reveal": reveal,
16020
- "data-slot": "inbox-item-actions",
16021
- className: itemActions({ className })
16022
- };
16023
- return useRender({
16024
- defaultTagName: "div",
16025
- render,
16026
- props: mergeProps(defaultProps, props)
16027
- });
16028
- }
16029
- //#endregion
16030
15720
  //#region src/components/search/search.recipe.ts
16031
15721
  const search = tv({ slots: {
16032
15722
  frame: ["flex h-full min-h-0 flex-1 flex-col", "bg-layer-canvas text-foreground"],
@@ -16122,7 +15812,7 @@ const searchEntity = tv({ slots: {
16122
15812
  entity: [
16123
15813
  "flex min-w-0 w-full items-center gap-3 p-3 text-left transition-colors",
16124
15814
  "relative rounded-none border-0 bg-transparent px-4 py-3 text-foreground shadow-none",
16125
- "max-md:min-h-16",
15815
+ "pointer-coarse:min-h-16",
16126
15816
  "not-first:before:absolute not-first:before:top-0 not-first:before:right-0 not-first:before:left-[55px] not-first:before:border-t not-first:before:border-line-hairline",
16127
15817
  "hover:bg-fill-subtle active:bg-fill-medium",
16128
15818
  "not-data-[selected=true]:data-popup-open:bg-fill-subtle",
@@ -16543,6 +16233,32 @@ function SearchTriggerShortcut({ className, ...props }) {
16543
16233
  });
16544
16234
  }
16545
16235
  //#endregion
16236
+ //#region src/lib/located.ts
16237
+ /**
16238
+ * How long the located highlight lasts: `info-soft` at once, held 1.2s, faded
16239
+ * out by 2s (design/foundations/states.md#located). styles.css runs the
16240
+ * animation; useLocated drops `data-located` after this long.
16241
+ */
16242
+ const LOCATED_MS = 2e3;
16243
+ function useLocated(request) {
16244
+ const [on, setOn] = useState(null);
16245
+ useEffect(() => {
16246
+ if (request == null) return;
16247
+ let timer;
16248
+ let frame = requestAnimationFrame(() => {
16249
+ frame = requestAnimationFrame(() => {
16250
+ setOn(() => request);
16251
+ timer = setTimeout(() => setOn(null), LOCATED_MS);
16252
+ });
16253
+ });
16254
+ return () => {
16255
+ cancelAnimationFrame(frame);
16256
+ if (timer !== void 0) clearTimeout(timer);
16257
+ };
16258
+ }, [request]);
16259
+ return request != null && on === request;
16260
+ }
16261
+ //#endregion
16546
16262
  //#region src/lib/input-modality.ts
16547
16263
  const INPUT_MODALITY_ATTRIBUTE = "data-input-modality";
16548
16264
  /** Keys that move focus wherever focus is. */
@@ -16783,4 +16499,4 @@ function ThemeProvider({ mode, defaultMode = "light", onModeChange, storageKey,
16783
16499
  });
16784
16500
  }
16785
16501
  //#endregion
16786
- export { ActivityInboxControls, ActivityInboxLoadingMore, ActivityInboxPanel, ActivityInboxSelectionCount, ActivityInboxSelectionToolbar, ActivityInboxSidebar, ActivityInboxViewport, AlertDialog, AlertDialogAction, AlertDialogBody, AlertDialogCancel, AlertDialogClose, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogOverlay, AlertDialogPortal, AlertDialogTitle, AlertDialogTrigger, AppRailFooter, AppRailHeader, AppRailItem, AppRailItemAttention, AppRailItemBadge, AppRailItemIcon, AppRailItemIndicator, AppRailItemLabel, AppRailNav, AppRailRoot, AppShellMainSlot, AppShellOverlaySlot, AppShellPanelSlot, AppShellRailSlot, AppShellRoot, AppShellSidebarSlot, AppShellSidebarTrigger, Avatar, AvatarBadge, AvatarFallback, AvatarGroup, AvatarGroupCount, AvatarImage, Badge, Banner, BannerAction, BannerClose, BannerDescription, BannerTitle, Button, Card, CardContent, CardDescription, CardFooter, CardHeader, CardLeading, CardTitle, CardTrailing, ChatIcon, Checkbox, CheckboxIndicator, CodeBlock, CodeBlockAction, CodeBlockActions, CodeBlockBody, CodeBlockHeader, CodeBlockPre, CodeBlockTitle, Combobox, ComboboxChip, ComboboxChipRemove, ComboboxChips, ComboboxClear, ComboboxCollection, ComboboxContent, ComboboxControl, ComboboxEmpty, ComboboxGroup, ComboboxGroupLabel, ComboboxHeader, ComboboxInput, ComboboxInputGroup, ComboboxItem, ComboboxItemIndicator, ComboboxLabel, ComboboxList, ComboboxPopup, ComboboxPortal, ComboboxRow, ComboboxSeparator, ComboboxTrigger, ComboboxTriggerCount, ComboboxTriggerIndicator, ComboboxValue, Composer, ComposerActions, ComposerAttachment, ComposerAttachmentBody, ComposerAttachmentFailedOverlay, ComposerAttachmentFile, ComposerAttachmentImage, ComposerAttachmentMeta, ComposerAttachmentRemove, ComposerAttachmentTitle, ComposerAttachmentUploadProgressBar, ComposerAttachmentUploadingOverlay, ComposerAttachments, ComposerAttachmentsScrollArea, ComposerDropOverlay, ComposerDropOverlayLabel, ComposerDropOverlayPrompt, ComposerIconButton, ComposerInput, ComposerMeta, ComposerRoot, ComposerSubmit, ComposerSuggestionAside, ComposerSuggestionContent, ComposerSuggestionGroup, ComposerSuggestionGroupLabel, ComposerSuggestionIcon, ComposerSuggestionList, ComposerSuggestionMeta, ComposerSuggestionOption, ComposerSuggestionTitle, ComposerToolbar, ComposerToolbarLabel, ContextMenu, ContextMenuCheckboxItem, ContextMenuCheckboxItemIndicator, ContextMenuContent, ContextMenuFooter, ContextMenuItem, ContextMenuItemLabel, ContextMenuLabel, ContextMenuPopup, ContextMenuPortal, ContextMenuRadioGroup, ContextMenuRadioItem, ContextMenuRadioItemIndicator, ContextMenuSeparator, ContextMenuShortcut, ContextMenuSubmenu, ContextMenuSubmenuTrigger, ContextMenuTrigger, ConversationPanelBody, ConversationPanelContent, ConversationPanelEmptyState, ConversationPanelEmptyStateBrand, ConversationPanelEmptyStateBrandMark, ConversationPanelFooter, ConversationPanelRoot, ConversationPanelTabs, CopyableCode, CopyableCodeAction, CopyableCodeRoot, DescriptionDetails, DescriptionItem, DescriptionList, DescriptionTerm, Dialog, DialogBody, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogNav, DialogOverlay, DialogPortal, DialogSurface, DialogTitle, DialogTrigger, DirectMessageIcon, Drawer, DrawerActions, DrawerBody, DrawerClose, DrawerContent, DrawerDescription, DrawerFooter, DrawerHeader, DrawerOverlay, DrawerPortal, DrawerTitle, DrawerTrigger, DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuCheckboxItemIndicator, DropdownMenuContent, DropdownMenuFooter, DropdownMenuItem, DropdownMenuItemCount, DropdownMenuItemLabel, DropdownMenuLabel, DropdownMenuPopup, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuRadioItemIndicator, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSubmenu, DropdownMenuSubmenuTrigger, DropdownMenuTrigger, EmptyState, EmptyStateActions, EmptyStateContent, EmptyStateDescription, EmptyStateIcon, EmptyStateTitle, Field, FieldControl, FieldDescription, FieldError, FieldItem, FieldLabel, FieldValidity, FileAction, FileActions, FileContent, FileImage, FileMeta, FileMetaItem, FileName, FilePreview, FilePreviewBadge, FilePreviewCode, FilePreviewDocument, FilePreviewFile, FilePreviewMedia, FileRow, FileRowOpen, FileThumbnail, FilesList, FilesPanel, FilesViewport, FloatButton, FloatButtonGroup, FormSection, IconTile, InboxItem, InboxItemActions, InboxItemBody, InboxItemContent, InboxItemContext, InboxItemHeading, InboxItemHoverTarget, InboxItemLeading, InboxItemMarks, InboxItemMessage, InboxItemMetadata, InboxItemSelection, InboxItemSender, InboxItemSubtitle, InboxItemTimestamp, InboxItemTitle, InboxItemTrailing, InboxItemTrigger, InlineCode, Input, InputGroup, InputGroupAddon, InputGroupInput, Kbd, KbdGroup, Label, LabelAsterisk, LabelOptional, LabelSub, LegacyTaskPanelActions, LegacyTaskPanelBody, LegacyTaskPanelField, LegacyTaskPanelFieldLabel, LegacyTaskPanelFieldText, LegacyTaskPanelFieldTitle, LegacyTaskPanelHeader, LegacyTaskPanelIcon, LegacyTaskPanelMeta, LegacyTaskPanelMetaLabel, LegacyTaskPanelMetaRow, LegacyTaskPanelMetaValue, LegacyTaskPanelRoot, LegacyTaskPanelSection, LegacyTaskPanelStatus, LegacyTaskPanelTitle, LegacyTaskPanelTitleMeta, Lightbox, LightboxActions, LightboxClose, LightboxContent, LightboxHeader, LightboxHeaderLabel, LightboxHeaderMeta, LightboxInfoActions, LightboxInfoBar, LightboxInfoDock, LightboxInfoTitle, LightboxMedia, LightboxNavigationButton, LightboxPortal, LightboxStage, LightboxThumbnail, LightboxThumbnailStrip, LightboxTitle, LightboxToolbar, LightboxTrigger, ListRow, ListRowBody, ListRowBottom, ListRowChevron, ListRowDescription, ListRowGroup, ListRowIcon, ListRowMeta, ListRowTitle, ListRowTop, ListRowValue, LiveAgentActivityBar, LiveAgentActivityBarAvatar, LiveAgentActivityBarContent, LiveAgentActivityBarRow, LiveAgentActivityBarStatus, LiveAgentActivityBarText, MarkdownBlockquote, MarkdownCell, MarkdownCheckbox, MarkdownHeaderCell, MarkdownHeading, MarkdownImage, MarkdownInlineCode, MarkdownLink, MarkdownList, MarkdownListItem, MarkdownMark, MarkdownOrderedList, MarkdownParagraph, MarkdownRule, MarkdownTable, MarkdownTableRow, MarkdownTableScroll, MessageActionCard, MessageActionCardActions, MessageActionCardActionsNote, MessageActionCardCollapseTrigger, MessageActionCardCompletion, MessageActionCardContent, MessageActionCardHeader, MessageActionCardHeaderDescription, MessageActionCardHeaderIcon, MessageActionCardHeaderStatus, MessageActionCardHeaderTitle, MessageActionCardHint, MessageActionCardHintLabel, MessageActionCardNotice, MessageActionCardProperties, MessageActionCardProperty, MessageActionCardPropertyLabel, MessageActionCardPropertyValue, MessageActionCardScope, MessageActionCardScopeDescription, MessageActionCardScopeList, MessageActionCardScopeListLabel, MessageActionCardScopeListViewport, MessageActionCardScopeName, MessageActionCardStatus, MessageAttachmentAction, MessageAttachmentCard, MessageAttachmentCommentSummary, MessageAttachmentDiffAddition, MessageAttachmentDiffDeletion, MessageAttachmentDiffSummary, MessageAttachmentGroup, MessageAttachmentMeta, MessageAttachmentMetaEnd, MessageAttachmentMetaStart, MessageAttachmentSummary, MessageAttachmentTitle, MessageEmbed, MessageEmbedContent, MessageEmbedFooter, MessageEmbedHeader, MessageForwardedBundle, MessageForwardedBundleAttachment, MessageForwardedBundleAttachmentMeta, MessageForwardedBundleAttachmentName, MessageForwardedBundleAttachments, MessageForwardedBundleFooter, MessageForwardedBundleFooterAction, MessageForwardedBundleGallery, MessageForwardedBundleGalleryTile, MessageForwardedBundleHeader, MessageForwardedBundleHeaderContent, MessageForwardedBundleHeaderCount, MessageForwardedBundleHeaderLabel, MessageForwardedBundleItem, MessageForwardedBundleItemAuthor, MessageForwardedBundleItemContent, MessageForwardedBundleItemMeta, MessageForwardedBundleItems, MessageForwardedBundleSource, MessageForwardedBundleSourceLabel, MessageIcon, MessageImageGallery, MessageImageGalleryAction, MessageImageGalleryItem, MessageImageGalleryMedia, MessageImageGalleryOverlay, MessageImageGalleryPreview, MessageImageGalleryRow, MessageItem, MessageItemAttachments, MessageItemAvatarSlot, MessageItemBadge, MessageItemBadgeSeparator, MessageItemBody, MessageItemContent, MessageItemContinuationTime, MessageItemEdited, MessageItemEmbedded, MessageItemFooter, MessageItemGutter, MessageItemHeader, MessageItemInlineStatus, MessageItemMeta, MessageItemReadReceipt, MessageItemSavedIndicator, MessageItemSearchMatch, MessageItemSender, MessageItemSenderBadges, MessageItemSenderButton, MessageItemSenderGroup, MessageItemTime, MessageItemToolbar, MessageItemToolbarButton, MessageItemTranslationAction, MessageItemTranslationFailedStatus, MessageItemTranslationOriginal, MessageItemTranslationOriginalLabel, MessageItemTranslationProgressTrack, MessageItemTranslationRetryAction, MessageItemTranslationStatus, MessageList, MessageListDateDivider, MessageListEndFade, MessageListHistoryLimited, MessageListNotice, MessageMultiSelect, MessageMultiSelectCheckbox, MessageMultiSelectToolbar, MessageMultiSelectToolbarActions, MessageQuotedPreview, MessageQuotedPreviewAttachment, MessageQuotedPreviewAttachments, MessageQuotedPreviewAuthor, MessageQuotedPreviewAuthorMeta, MessageQuotedPreviewAuthorName, MessageQuotedPreviewChannel, MessageQuotedPreviewContent, MessageQuotedPreviewHeader, MessageQuotedPreviewLoading, MessageQuotedPreviewText, MessageQuotedPreviewThread, MessageQuotedPreviewTimestamp, MessageQuotedPreviewUnavailable, MessageReactionAddButton, MessageReactionChip, MessageReactionCount, MessageReactionErrorIndicator, MessageReactionGlyph, MessageReactionPickerContent, MessageReactionPickerStatic, MessageReactionQuickButton, MessageReactionQuickRow, MessageReactionTooltipContent, MessageReactionTooltipMeta, MessageReactionTooltipName, MessageReactionTooltipNameText, MessageReactionTooltipNames, MessageReactionTooltipSeparator, MessageReferenceChip, MessageReferenceIndicator, MessageReferenceLabel, MessageReferencePending, MessageReferenceSuffix, MessageReferenceText, MessageReferenceUnavailable, MessageReplies, MessageRepliesItem, MessageRepliesItemContent, MessageRepliesItemSender, MessageRepliesItemTime, MessageRepliesSummary, MessageRepliesSummaryItem, MessageTextSelectionToolbar, MessageTextSelectionToolbarButton, MessageTextSelectionToolbarSeparator, MessageVideoPreview, MessageVideoPreviewAction, MessageVideoPreviewFailureAction, MessageVideoPreviewFailureContent, MessageVideoPreviewFailureIcon, MessageVideoPreviewFailureTitle, MessageVideoPreviewFallback, MessageVideoPreviewMedia, MobileNavItem, MobileNavLabel, MobileNavRoot, NotificationCenter, NotificationCenterActionButton, NotificationCenterCount, NotificationCenterEmptyState, NotificationCenterHeader, NotificationCenterItem, NotificationCenterItemActions, NotificationCenterItemBody, NotificationCenterItemContent, NotificationCenterItemIcon, NotificationCenterItemRow, NotificationCenterItemTitle, NotificationCenterList, NotificationCenterPopup, NotificationCenterScroller, NotificationCenterTitle, NotificationCenterTrigger, OtterIndicator, Panel, PanelAction, PanelActions, PanelActivity, PanelBody, PanelFooter, PanelHeader, PanelHeaderContent, PanelHeaderIcon, PanelHeaderRoot, PanelHeading, PanelMeta, PanelNotice, PanelNoticeActions, PanelNoticeContent, PanelScrollContent, PanelScrollViewport, PanelSection, PanelSectionHeader, PanelStatus, PanelTitle, PanelToggleAction, PickerTriggerButton, Popover, PopoverArrow, PopoverBackdrop, PopoverClose, PopoverContent, PopoverDescription, PopoverHeader, PopoverPopup, PopoverPortal, PopoverSeparator, PopoverTitle, PopoverTrigger, PopoverViewport, PreviewCard, PreviewCardArrow, PreviewCardContent, PreviewCardDescription, PreviewCardHeader, PreviewCardPopup, PreviewCardPortal, PreviewCardSeparator, PreviewCardTitle, PreviewCardTrigger, ProfilePanel, ProfilePanelBody, ProfilePanelHeader, ProfilePanelHeaderContent, ProfilePanelSection, Progress, ProgressHeader, ProgressIndicator, ProgressLabel, ProgressTrack, ProgressValue, RadioGroup, RadioGroupIndicator, RadioGroupItem, RaftLogo, RaftLogoLockup, RaftWordmark, ResizableGroup, ResizableHandle, ResizablePanel, SINGLE_IMAGE_MAX_HEIGHT, SINGLE_IMAGE_MAX_WIDTH, ScrollArea, ScrollAreaContent, ScrollAreaCorner, ScrollAreaScrollbar, ScrollAreaThumb, ScrollAreaViewport, SearchEntityResult, SearchEntityResultActivity, SearchEntityResultContent, SearchEntityResultDescription, SearchEntityResultHeader, SearchEntityResultIcon, SearchEntityResultLeading, SearchEntityResultTitle, SearchMessageResult, SearchMessageResultBody, SearchMessageResultHeader, SearchMessageResultMatch, SearchMessageResultMeta, SearchMessageResultSender, SearchMessageResultThreadMeta, SearchMessageResultTimestamp, SearchResultsList, SearchResultsSection, SearchResultsSectionHeading, SearchResultsSummary, SearchShellFilters, SearchShellRoot, SearchShellViewport, SearchThreadMessageResult, SearchThreadResult, SearchThreadResultHeader, SearchThreadResultMessages, SearchThreadResultMeta, SearchThreadResultTimestamp, SearchThreadResultTitle, SearchTrigger, SearchTriggerLabel, SearchTriggerShortcut, SegmentedControl, SegmentedControlCount, SegmentedControlItem, SegmentedControlLabel, Select, SelectArrow, SelectContent, SelectGroup, SelectGroupLabel, SelectIcon, SelectItem, SelectItemDescription, SelectItemIndicator, SelectItemLeading, SelectItemText, SelectLabel, SelectList, SelectPopup, SelectPortal, SelectScrollDownArrow, SelectScrollUpArrow, SelectSeparator, SelectTrigger, SelectValue, Separator, SidebarBody, SidebarContent, SidebarControl, SidebarGroupLabel, SidebarHeader, SidebarHeaderTitle, SidebarItem, SidebarItemAside, SidebarItemChannelIcon, SidebarItemContent, SidebarItemCount, SidebarItemCountSeparator, SidebarItemIcon, SidebarItemIndicator, SidebarItemMeta, SidebarItemMetaIcon, SidebarItemStatus, SidebarItemSubtitle, SidebarItemThreadCount, SidebarItemTitle, SidebarList, SidebarLiveActivity, SidebarMenu, SidebarMenuAside, SidebarMenuCount, SidebarMenuIcon, SidebarMenuTitle, SidebarRoot, SidebarSection, SidebarSectionAttention, SidebarSectionChevron, SidebarSectionControl, SidebarSectionControls, SidebarSectionCount, SidebarSectionDisclosure, SidebarSectionEmpty, SidebarSectionHeader, SidebarSectionTitle, SidebarSectionTrailing, Skeleton, SortableComposerAttachment, SortableComposerAttachments, SortableComposerAttachmentsScroll, SortableTabsList, SortableTabsTab, Spinner, Status, Step, Steps, Switch, SwitchThumb, SystemMessage, SystemMessageContent, SystemMessageGroup, SystemMessageGroupChevron, SystemMessageGroupDisclosure, SystemMessageGroupHeader, SystemMessageGroupPanel, SystemMessageGroupSummary, SystemMessageTime, TASK_STATUS_IDS, Table, TableBody, TableCaption, TableCell, TableColgroup, TableColumn, TableHead, TableHeader, TableRow, Tabs, TabsLabel, TabsList, TabsPanel, TabsTab, TaskBoardColumn, TaskBoardColumnBadge, TaskBoardColumnChevron, TaskBoardColumnCount, TaskBoardColumnEmpty, TaskBoardColumnEmptyAllowed, TaskBoardColumnEmptyBlocked, TaskBoardColumnEmptyIdle, TaskBoardColumnHeading, TaskBoardColumnItems, TaskBoardColumnPanel, TaskBoardColumnTrigger, TaskBoardRoot, TaskCard, TaskCardBody, TaskCardChannel, TaskCardDescription, TaskCardLegacy, TaskCardMeta, TaskCardNumber, TaskCardRow, TaskCardStatus, TaskCardTitle, TaskChip, TaskClosedIcon, TaskDndProvider, TaskDoneIcon, TaskDragOverlay, TaskDraggable, TaskDropPlaceholder, TaskDropZone, TaskInProgressIcon, TaskInReviewIcon, TaskListRoot, TaskLoadingList, TaskLoadingRow, TaskSection, TaskSectionBadge, TaskSectionChevron, TaskSectionCount, TaskSectionEmpty, TaskSectionHeading, TaskSectionItems, TaskSectionPanel, TaskSectionTrigger, TaskStatusBadge, TaskStatusIcon, TaskTodoIcon, TasksPanelEmpty, TasksPanelRoot, TasksPanelToolbar, TasksPanelToolbarFilters, TasksPanelToolbarGroup, TasksPanelToolbarLabel, TasksPanelToolbarNewTask, TasksPanelToolbarView, TasksPanelViewport, Text, TextHeading, TextLink, TextMono, TextSans, Textarea, TextareaCounter, TextareaGroup, ThemeProvider, ThreadIcon, ThreadPanelActions, ThreadPanelBody, ThreadPanelContent, ThreadPanelFooter, ThreadPanelHeader, ThreadPanelOriginalMessage, ThreadPanelReplyCount, ThreadPanelReplySummary, ThreadPanelRoot, ThreadPanelSearch, ThreadPanelSearchCount, ThreadPanelSearchTrailing, ThreadPanelTitle, ThreadPanelTitleMeta, Timeline, TimelineContent, TimelineItem, TimelineTime, TimelineTitle, ToastAction, ToastActions, ToastArrow, ToastBody, ToastClose, ToastContent, ToastDescription, ToastIcon, ToastPortal, ToastPositioner, ToastProgress, ToastProvider, ToastRoot, ToastTitle, ToastViewport, ToggleGroup, ToggleGroupItem, ToggleGroupLabel, Tooltip, TooltipContent, TooltipPortal, TooltipProvider, TooltipTrigger, VirtualList, WorkspaceButton, WorkspaceButtonName, buildMessageImageGalleryRows, buttonVariants, classifyMessageImageAspect, cn, createMessageTextSelectionAnchor, createToastManager, getTextSelectionFocusRect, installInputModality, taskStatusSoft, taskStatusStrong, textLinkVariants, toast, useComposerSuggestions, useOrderedTabs, useTheme, useToastManager };
16502
+ export { ActivityInboxControls, ActivityInboxLoadingMore, ActivityInboxPanel, ActivityInboxSelectionCount, ActivityInboxSelectionToolbar, ActivityInboxSidebar, ActivityInboxViewport, AlertDialog, AlertDialogAction, AlertDialogBody, AlertDialogCancel, AlertDialogClose, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogOverlay, AlertDialogPortal, AlertDialogTitle, AlertDialogTrigger, AppRailFooter, AppRailHeader, AppRailItem, AppRailItemAttention, AppRailItemBadge, AppRailItemIcon, AppRailItemIndicator, AppRailItemLabel, AppRailNav, AppRailRoot, AppShellMainSlot, AppShellOverlaySlot, AppShellPanelSlot, AppShellRailSlot, AppShellRoot, AppShellSidebarSlot, AppShellSidebarTrigger, Avatar, AvatarBadge, AvatarFallback, AvatarGroup, AvatarGroupCount, AvatarImage, Badge, Banner, BannerAction, BannerClose, BannerDescription, BannerTitle, Button, Card, CardContent, CardDescription, CardFooter, CardHeader, CardLeading, CardTitle, CardTrailing, ChatIcon, Checkbox, CheckboxIndicator, CodeBlock, CodeBlockAction, CodeBlockActions, CodeBlockBody, CodeBlockHeader, CodeBlockPre, CodeBlockTitle, Combobox, ComboboxChip, ComboboxChipRemove, ComboboxChips, ComboboxClear, ComboboxCollection, ComboboxContent, ComboboxControl, ComboboxEmpty, ComboboxGroup, ComboboxGroupLabel, ComboboxHeader, ComboboxInput, ComboboxInputGroup, ComboboxItem, ComboboxItemIndicator, ComboboxLabel, ComboboxList, ComboboxPopup, ComboboxPortal, ComboboxRow, ComboboxSeparator, ComboboxTrigger, ComboboxTriggerCount, ComboboxTriggerIndicator, ComboboxValue, Composer, ComposerActions, ComposerAttachment, ComposerAttachmentBody, ComposerAttachmentFailedOverlay, ComposerAttachmentFile, ComposerAttachmentImage, ComposerAttachmentMeta, ComposerAttachmentRemove, ComposerAttachmentTitle, ComposerAttachmentUploadProgressBar, ComposerAttachmentUploadingOverlay, ComposerAttachments, ComposerAttachmentsScrollArea, ComposerDropOverlay, ComposerDropOverlayLabel, ComposerDropOverlayPrompt, ComposerIconButton, ComposerInput, ComposerMeta, ComposerRoot, ComposerSubmit, ComposerSuggestionAside, ComposerSuggestionContent, ComposerSuggestionGroup, ComposerSuggestionGroupLabel, ComposerSuggestionIcon, ComposerSuggestionList, ComposerSuggestionMeta, ComposerSuggestionOption, ComposerSuggestionTitle, ComposerToolbar, ComposerToolbarLabel, ContextMenu, ContextMenuCheckboxItem, ContextMenuCheckboxItemIndicator, ContextMenuContent, ContextMenuFooter, ContextMenuItem, ContextMenuItemLabel, ContextMenuLabel, ContextMenuPopup, ContextMenuPortal, ContextMenuRadioGroup, ContextMenuRadioItem, ContextMenuRadioItemIndicator, ContextMenuSeparator, ContextMenuShortcut, ContextMenuSubmenu, ContextMenuSubmenuTrigger, ContextMenuTrigger, ConversationPanelBody, ConversationPanelContent, ConversationPanelEmptyState, ConversationPanelEmptyStateBrand, ConversationPanelEmptyStateBrandMark, ConversationPanelFooter, ConversationPanelRoot, ConversationPanelTabs, CopyableCode, CopyableCodeAction, CopyableCodeRoot, DescriptionDetails, DescriptionItem, DescriptionList, DescriptionTerm, Dialog, DialogBody, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogNav, DialogOverlay, DialogPortal, DialogSurface, DialogTitle, DialogTrigger, DirectMessageIcon, Drawer, DrawerActions, DrawerBody, DrawerClose, DrawerContent, DrawerDescription, DrawerFooter, DrawerHeader, DrawerOverlay, DrawerPortal, DrawerTitle, DrawerTrigger, DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuCheckboxItemIndicator, DropdownMenuContent, DropdownMenuFooter, DropdownMenuItem, DropdownMenuItemCount, DropdownMenuItemLabel, DropdownMenuLabel, DropdownMenuPopup, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuRadioItemIndicator, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSubmenu, DropdownMenuSubmenuTrigger, DropdownMenuTrigger, EmptyState, EmptyStateActions, EmptyStateContent, EmptyStateDescription, EmptyStateIcon, EmptyStateTitle, Field, FieldControl, FieldDescription, FieldError, FieldItem, FieldLabel, FieldValidity, FileAction, FileActions, FileContent, FileImage, FileMeta, FileMetaItem, FileName, FilePreview, FilePreviewBadge, FilePreviewCode, FilePreviewDocument, FilePreviewFile, FilePreviewMedia, FileRow, FileRowOpen, FileThumbnail, FilesList, FilesPanel, FilesViewport, FloatButton, FloatButtonGroup, FormSection, IconTile, InboxItem, InboxItemActions, InboxItemBody, InboxItemContent, InboxItemContext, InboxItemHeading, InboxItemHoverTarget, InboxItemLeading, InboxItemMarks, InboxItemMessage, InboxItemMetadata, InboxItemSelection, InboxItemSender, InboxItemSubtitle, InboxItemTimestamp, InboxItemTitle, InboxItemTrailing, InboxItemTrigger, InlineCode, Input, InputGroup, InputGroupAddon, InputGroupInput, Kbd, KbdGroup, LOCATED_MS, Label, LabelAsterisk, LabelOptional, LabelSub, LegacyTaskPanelActions, LegacyTaskPanelBody, LegacyTaskPanelField, LegacyTaskPanelFieldLabel, LegacyTaskPanelFieldText, LegacyTaskPanelFieldTitle, LegacyTaskPanelHeader, LegacyTaskPanelIcon, LegacyTaskPanelMeta, LegacyTaskPanelMetaLabel, LegacyTaskPanelMetaRow, LegacyTaskPanelMetaValue, LegacyTaskPanelRoot, LegacyTaskPanelSection, LegacyTaskPanelStatus, LegacyTaskPanelTitle, LegacyTaskPanelTitleMeta, Lightbox, LightboxActions, LightboxClose, LightboxContent, LightboxHeader, LightboxHeaderLabel, LightboxHeaderMeta, LightboxInfoActions, LightboxInfoBar, LightboxInfoDock, LightboxInfoTitle, LightboxMedia, LightboxNavigationButton, LightboxPortal, LightboxStage, LightboxThumbnail, LightboxThumbnailStrip, LightboxTitle, LightboxToolbar, LightboxTrigger, ListRow, ListRowBody, ListRowBottom, ListRowChevron, ListRowDescription, ListRowGroup, ListRowIcon, ListRowMeta, ListRowTitle, ListRowTop, ListRowValue, LiveAgentActivityBar, LiveAgentActivityBarAvatar, LiveAgentActivityBarContent, LiveAgentActivityBarRow, LiveAgentActivityBarStatus, LiveAgentActivityBarText, MarkdownBlockquote, MarkdownCell, MarkdownCheckbox, MarkdownHeaderCell, MarkdownHeading, MarkdownImage, MarkdownInlineCode, MarkdownLink, MarkdownList, MarkdownListItem, MarkdownMark, MarkdownOrderedList, MarkdownParagraph, MarkdownRule, MarkdownTable, MarkdownTableRow, MarkdownTableScroll, MessageActionCard, MessageActionCardActions, MessageActionCardActionsNote, MessageActionCardCollapseTrigger, MessageActionCardCompletion, MessageActionCardContent, MessageActionCardHeader, MessageActionCardHeaderDescription, MessageActionCardHeaderIcon, MessageActionCardHeaderStatus, MessageActionCardHeaderTitle, MessageActionCardHint, MessageActionCardHintLabel, MessageActionCardNotice, MessageActionCardProperties, MessageActionCardProperty, MessageActionCardPropertyLabel, MessageActionCardPropertyValue, MessageActionCardScope, MessageActionCardScopeDescription, MessageActionCardScopeList, MessageActionCardScopeListLabel, MessageActionCardScopeListViewport, MessageActionCardScopeName, MessageActionCardStatus, MessageAttachmentAction, MessageAttachmentCard, MessageAttachmentCommentSummary, MessageAttachmentDiffAddition, MessageAttachmentDiffDeletion, MessageAttachmentDiffSummary, MessageAttachmentGroup, MessageAttachmentMeta, MessageAttachmentMetaEnd, MessageAttachmentMetaStart, MessageAttachmentSummary, MessageAttachmentTitle, MessageEmbed, MessageEmbedContent, MessageEmbedFooter, MessageEmbedHeader, MessageForwardedBundle, MessageForwardedBundleAttachment, MessageForwardedBundleAttachmentMeta, MessageForwardedBundleAttachmentName, MessageForwardedBundleAttachments, MessageForwardedBundleFooter, MessageForwardedBundleFooterAction, MessageForwardedBundleGallery, MessageForwardedBundleGalleryTile, MessageForwardedBundleHeader, MessageForwardedBundleHeaderContent, MessageForwardedBundleHeaderCount, MessageForwardedBundleHeaderLabel, MessageForwardedBundleItem, MessageForwardedBundleItemAuthor, MessageForwardedBundleItemContent, MessageForwardedBundleItemMeta, MessageForwardedBundleItems, MessageForwardedBundleSource, MessageForwardedBundleSourceLabel, MessageIcon, MessageImageGallery, MessageImageGalleryAction, MessageImageGalleryItem, MessageImageGalleryMedia, MessageImageGalleryOverlay, MessageImageGalleryPreview, MessageImageGalleryRow, MessageItem, MessageItemAttachments, MessageItemAvatarSlot, MessageItemBadge, MessageItemBadgeSeparator, MessageItemBody, MessageItemContent, MessageItemContinuationTime, MessageItemEdited, MessageItemEmbedded, MessageItemFooter, MessageItemGutter, MessageItemHeader, MessageItemInlineStatus, MessageItemMeta, MessageItemReadReceipt, MessageItemSavedIndicator, MessageItemSearchMatch, MessageItemSender, MessageItemSenderBadges, MessageItemSenderButton, MessageItemSenderGroup, MessageItemTime, MessageItemToolbar, MessageItemToolbarButton, MessageItemTranslationAction, MessageItemTranslationFailedStatus, MessageItemTranslationOriginal, MessageItemTranslationOriginalLabel, MessageItemTranslationProgressTrack, MessageItemTranslationRetryAction, MessageItemTranslationStatus, MessageList, MessageListDateDivider, MessageListEndFade, MessageListHistoryLimited, MessageListNotice, MessageMultiSelect, MessageMultiSelectCheckbox, MessageMultiSelectToolbar, MessageMultiSelectToolbarActions, MessageQuotedPreview, MessageQuotedPreviewAttachment, MessageQuotedPreviewAttachments, MessageQuotedPreviewAuthor, MessageQuotedPreviewAuthorMeta, MessageQuotedPreviewAuthorName, MessageQuotedPreviewChannel, MessageQuotedPreviewContent, MessageQuotedPreviewHeader, MessageQuotedPreviewLoading, MessageQuotedPreviewText, MessageQuotedPreviewThread, MessageQuotedPreviewTimestamp, MessageQuotedPreviewUnavailable, MessageReactionAddButton, MessageReactionChip, MessageReactionCount, MessageReactionErrorIndicator, MessageReactionGlyph, MessageReactionPickerContent, MessageReactionPickerStatic, MessageReactionQuickButton, MessageReactionQuickRow, MessageReactionTooltipContent, MessageReactionTooltipMeta, MessageReactionTooltipName, MessageReactionTooltipNameText, MessageReactionTooltipNames, MessageReactionTooltipSeparator, MessageReferenceChip, MessageReferenceIndicator, MessageReferenceLabel, MessageReferencePending, MessageReferenceSuffix, MessageReferenceText, MessageReferenceUnavailable, MessageReplies, MessageRepliesItem, MessageRepliesItemContent, MessageRepliesItemSender, MessageRepliesItemTime, MessageRepliesSummary, MessageRepliesSummaryItem, MessageTextSelectionToolbar, MessageTextSelectionToolbarButton, MessageTextSelectionToolbarSeparator, MessageVideoPreview, MessageVideoPreviewAction, MessageVideoPreviewFailureAction, MessageVideoPreviewFailureContent, MessageVideoPreviewFailureIcon, MessageVideoPreviewFailureTitle, MessageVideoPreviewFallback, MessageVideoPreviewMedia, MobileNavItem, MobileNavLabel, MobileNavRoot, NotificationCenter, NotificationCenterActionButton, NotificationCenterCount, NotificationCenterEmptyState, NotificationCenterHeader, NotificationCenterItem, NotificationCenterItemActions, NotificationCenterItemBody, NotificationCenterItemContent, NotificationCenterItemIcon, NotificationCenterItemRow, NotificationCenterItemTitle, NotificationCenterList, NotificationCenterPopup, NotificationCenterScroller, NotificationCenterTitle, NotificationCenterTrigger, OtterIndicator, Panel, PanelAction, PanelActions, PanelActivity, PanelBody, PanelFooter, PanelHeader, PanelHeaderContent, PanelHeaderIcon, PanelHeaderRoot, PanelHeading, PanelMeta, PanelNotice, PanelNoticeActions, PanelNoticeContent, PanelScrollContent, PanelScrollViewport, PanelSection, PanelSectionHeader, PanelStatus, PanelTitle, PanelToggleAction, PickerTriggerButton, Popover, PopoverArrow, PopoverBackdrop, PopoverClose, PopoverContent, PopoverDescription, PopoverHeader, PopoverPopup, PopoverPortal, PopoverSeparator, PopoverTitle, PopoverTrigger, PopoverViewport, PreviewCard, PreviewCardArrow, PreviewCardContent, PreviewCardDescription, PreviewCardHeader, PreviewCardPopup, PreviewCardPortal, PreviewCardSeparator, PreviewCardTitle, PreviewCardTrigger, ProfilePanel, ProfilePanelBody, ProfilePanelHeader, ProfilePanelHeaderContent, ProfilePanelSection, Progress, ProgressHeader, ProgressIndicator, ProgressLabel, ProgressTrack, ProgressValue, RadioGroup, RadioGroupIndicator, RadioGroupItem, RaftLogo, RaftLogoLockup, RaftWordmark, ResizableGroup, ResizableHandle, ResizablePanel, SINGLE_IMAGE_MAX_HEIGHT, SINGLE_IMAGE_MAX_WIDTH, ScrollArea, ScrollAreaContent, ScrollAreaCorner, ScrollAreaScrollbar, ScrollAreaThumb, ScrollAreaViewport, SearchEntityResult, SearchEntityResultActivity, SearchEntityResultContent, SearchEntityResultDescription, SearchEntityResultHeader, SearchEntityResultIcon, SearchEntityResultLeading, SearchEntityResultTitle, SearchMessageResult, SearchMessageResultBody, SearchMessageResultHeader, SearchMessageResultMatch, SearchMessageResultMeta, SearchMessageResultSender, SearchMessageResultThreadMeta, SearchMessageResultTimestamp, SearchResultsList, SearchResultsSection, SearchResultsSectionHeading, SearchResultsSummary, SearchShellFilters, SearchShellRoot, SearchShellViewport, SearchThreadMessageResult, SearchThreadResult, SearchThreadResultHeader, SearchThreadResultMessages, SearchThreadResultMeta, SearchThreadResultTimestamp, SearchThreadResultTitle, SearchTrigger, SearchTriggerLabel, SearchTriggerShortcut, SegmentedControl, SegmentedControlCount, SegmentedControlItem, SegmentedControlLabel, Select, SelectArrow, SelectContent, SelectGroup, SelectGroupLabel, SelectIcon, SelectItem, SelectItemDescription, SelectItemIndicator, SelectItemLeading, SelectItemText, SelectLabel, SelectList, SelectPopup, SelectPortal, SelectScrollDownArrow, SelectScrollUpArrow, SelectSeparator, SelectTrigger, SelectValue, Separator, SidebarBody, SidebarContent, SidebarControl, SidebarGroupLabel, SidebarHeader, SidebarHeaderTitle, SidebarItem, SidebarItemAside, SidebarItemChannelIcon, SidebarItemContent, SidebarItemCount, SidebarItemCountSeparator, SidebarItemIcon, SidebarItemIndicator, SidebarItemMeta, SidebarItemMetaIcon, SidebarItemStatus, SidebarItemSubtitle, SidebarItemThreadCount, SidebarItemTitle, SidebarList, SidebarLiveActivity, SidebarMenu, SidebarMenuAside, SidebarMenuCount, SidebarMenuIcon, SidebarMenuTitle, SidebarRoot, SidebarSection, SidebarSectionAttention, SidebarSectionChevron, SidebarSectionControl, SidebarSectionControls, SidebarSectionCount, SidebarSectionDisclosure, SidebarSectionEmpty, SidebarSectionHeader, SidebarSectionTitle, SidebarSectionTrailing, Skeleton, SortableComposerAttachment, SortableComposerAttachments, SortableComposerAttachmentsScroll, SortableTabsList, SortableTabsTab, Spinner, Status, Step, Steps, Switch, SwitchThumb, SystemMessage, SystemMessageContent, SystemMessageGroup, SystemMessageGroupChevron, SystemMessageGroupDisclosure, SystemMessageGroupHeader, SystemMessageGroupPanel, SystemMessageGroupSummary, SystemMessageTime, TASK_STATUS_IDS, Table, TableBody, TableCaption, TableCell, TableColgroup, TableColumn, TableHead, TableHeader, TableRow, Tabs, TabsLabel, TabsList, TabsPanel, TabsTab, TaskBoardColumn, TaskBoardColumnBadge, TaskBoardColumnChevron, TaskBoardColumnCount, TaskBoardColumnEmpty, TaskBoardColumnEmptyAllowed, TaskBoardColumnEmptyBlocked, TaskBoardColumnEmptyIdle, TaskBoardColumnHeading, TaskBoardColumnItems, TaskBoardColumnPanel, TaskBoardColumnTrigger, TaskBoardRoot, TaskCard, TaskCardBody, TaskCardChannel, TaskCardDescription, TaskCardLegacy, TaskCardMeta, TaskCardNumber, TaskCardRow, TaskCardStatus, TaskCardTitle, TaskChip, TaskClosedIcon, TaskDndProvider, TaskDoneIcon, TaskDragOverlay, TaskDraggable, TaskDropPlaceholder, TaskDropZone, TaskInProgressIcon, TaskInReviewIcon, TaskListRoot, TaskLoadingList, TaskLoadingRow, TaskSection, TaskSectionBadge, TaskSectionChevron, TaskSectionCount, TaskSectionEmpty, TaskSectionHeading, TaskSectionItems, TaskSectionPanel, TaskSectionTrigger, TaskStatusBadge, TaskStatusIcon, TaskTodoIcon, TasksPanelEmpty, TasksPanelRoot, TasksPanelToolbar, TasksPanelToolbarFilters, TasksPanelToolbarGroup, TasksPanelToolbarLabel, TasksPanelToolbarNewTask, TasksPanelToolbarView, TasksPanelViewport, Text, TextHeading, TextLink, TextMono, TextSans, Textarea, TextareaCounter, TextareaGroup, ThemeProvider, ThreadIcon, ThreadPanelActions, ThreadPanelBody, ThreadPanelContent, ThreadPanelFooter, ThreadPanelHeader, ThreadPanelOriginalMessage, ThreadPanelReplyCount, ThreadPanelReplySummary, ThreadPanelRoot, ThreadPanelSearch, ThreadPanelSearchCount, ThreadPanelSearchTrailing, ThreadPanelTitle, ThreadPanelTitleMeta, Timeline, TimelineContent, TimelineItem, TimelineTime, TimelineTitle, ToastAction, ToastActions, ToastArrow, ToastBody, ToastClose, ToastContent, ToastDescription, ToastIcon, ToastPortal, ToastPositioner, ToastProgress, ToastProvider, ToastRoot, ToastTitle, ToastViewport, ToggleGroup, ToggleGroupItem, ToggleGroupLabel, Tooltip, TooltipContent, TooltipPortal, TooltipProvider, TooltipTrigger, VirtualList, WorkspaceButton, WorkspaceButtonName, buildMessageImageGalleryRows, buttonVariants, classifyMessageImageAspect, cn, createMessageTextSelectionAnchor, createToastManager, getTextSelectionFocusRect, installInputModality, taskStatusSoft, taskStatusStrong, textLinkVariants, toast, useComposerSuggestions, useLocated, useOrderedTabs, useTheme, useToastManager };