@botiverse/raft-ui 0.36.1 → 0.37.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/CHANGELOG.md CHANGED
@@ -1,3 +1,29 @@
1
+ ## [0.37.0](https://github.com/botiverse/raft-design/compare/v0.36.1...v0.37.0) (2026-10-26)
2
+
3
+ ### Design System
4
+
5
+ - **Edges fade:** content that goes on past an edge fades with a mask, not a colour gradient, so the fade works on any surface (a hovered, selected or located row, a card). Two lengths: 24px at the edge of a scrolling strip, 48px over cut-off content. `MessageListEndFade` is the one exception. ([#816](https://github.com/botiverse/raft-design/pull/816))
6
+ - Docs: https://raft-design.botiverse.build/foundations/spacing/
7
+ - **Dimmed:** deleted, offline and pending items are `opacity-dimmed` (60%); a drag origin stays 40%. Media hover is an `ink-8` overlay, not a brightness filter. ([#816](https://github.com/botiverse/raft-design/pull/816))
8
+ - Docs: https://raft-design.botiverse.build/foundations/states/
9
+ - **Tooltip:** a disabled control's reason under its name is a second line in `foreground-on-hud-muted`, 4px below. ([#813](https://github.com/botiverse/raft-design/pull/813))
10
+ - **Drag and drop:** a panel grip's hit area stays clear of a neighbouring resize seam, with its bar inside it. ([#814](https://github.com/botiverse/raft-design/pull/814))
11
+ - **Raft Chat:** the history paywall where a plan cuts a conversation's history. ([#757](https://github.com/botiverse/raft-design/pull/757))
12
+
13
+ ### Added
14
+
15
+ - Utilities `mask-fade-t`, `mask-fade-b` (48px), `mask-fade-t-edge`, `mask-fade-b-edge` (24px) and `mask-fade-x` (24px on the side named by `data-overflow="start|end|both"`); tokens `fade-edge`, `fade-content`. ([#816](https://github.com/botiverse/raft-design/pull/816))
16
+ - Token `layer-veil` (the page at 80%) for busy and loading covers, `bg-layer-veil`; `opacity-dimmed` (0.6). Both registered with `cn`'s tailwind-merge. ([#816](https://github.com/botiverse/raft-design/pull/816))
17
+
18
+ ### Changed
19
+
20
+ - **Tabs**: the overflow fade is `mask-fade-x`, 24px (was 32px). ([#816](https://github.com/botiverse/raft-design/pull/816))
21
+ - **MessageForwardedBundle**: the fold fades with `mask-fade-b` (48px, was a 40px card-colour gradient; a tight fold 24px, was 20px). ([#816](https://github.com/botiverse/raft-design/pull/816))
22
+ - Affects: overrides that targeted the fold's `::after` must drop it.
23
+ - **Composer** upload and failed covers, and the pending **MessageImageGallery** image, use `layer-veil` (were `layer-card/80`, `layer-card/90` and `opacity-70`); the pending spinner uses its default colour. ([#816](https://github.com/botiverse/raft-design/pull/816))
24
+ - **Lightbox** thumbnails dim with `layer-backdrop-nested` (40%, was `black/45`); hover 28% unchanged. ([#816](https://github.com/botiverse/raft-design/pull/816))
25
+ - Task chip and task-card busy states, and the deleted delegated avatar, use `opacity-dimmed` (same 60%). ([#816](https://github.com/botiverse/raft-design/pull/816))
26
+
1
27
  ## [0.36.1](https://github.com/botiverse/raft-design/compare/v0.36.0...v0.36.1) (2026-10-26)
2
28
 
3
29
  ### Design System
package/dist/cn.mjs CHANGED
@@ -60,6 +60,14 @@ const twMerge = extendTailwindMerge({ extend: {
60
60
  "control"
61
61
  ] }],
62
62
  "font-weight": [{ font: ["field", "card-title"] }],
63
+ "mask-image": [{ "mask-fade": [
64
+ "t",
65
+ "t-edge",
66
+ "b",
67
+ "b-edge",
68
+ "x"
69
+ ] }],
70
+ opacity: [{ opacity: ["dimmed"] }],
63
71
  "bg-image": [
64
72
  { overlay: [
65
73
  "subtle",
@@ -27,8 +27,9 @@
27
27
  selected sticker, with their own value so no theme grays them.
28
28
  Washes: ink-{alpha%} (2..40) — neutral overlays, hairlines, hover fills.
29
29
  Opacity rule: layer tokens are opaque in every theme, except the two
30
- backdrops (overlays by contract); among fills only the hover tiers
31
- (fill-subtle, fill-medium, fill-frame-medium) are translucent.
30
+ backdrops and the veil (overlays by contract: a scrim under a modal
31
+ surface, a cover over something busy in place); among fills only the
32
+ hover tiers (fill-subtle, fill-medium, fill-frame-medium) are translucent.
32
33
  Interaction fills: transparent resting → ink-N directly; solid family fill →
33
34
  the family's -hover/-active pair; neutral or tinted surface → step up its ladder.
34
35
  Escape hatches: ink ramp for one-off washes; inline oklch() literals for
@@ -36,7 +37,8 @@
36
37
 
37
38
  /* Raw brand ramps (the website palette) — variables only, no utility registration. Consumed by the
38
39
  Tailwind aliases in styles.css, the brand ramps, and state families below. Then the
39
- mode-independent motion values (design/foundations/motion.md). */
40
+ mode-independent values: the fade lengths (design/foundations/spacing.md), the dimmed
41
+ opacity (design/foundations/states.md) and motion (design/foundations/motion.md). */
40
42
  :where(:root) {
41
43
  --palette-yellow-50: oklch(0.984 0.017 84.56);
42
44
  --palette-yellow-100: oklch(0.975 0.027 85.64);
@@ -137,6 +139,9 @@
137
139
  --palette-cream-800: oklch(0.396 0.082 95);
138
140
  --palette-cream-900: oklch(0.276 0.057 95.1);
139
141
  --palette-cream-950: oklch(0.19 0.039 94.7);
142
+ --fade-edge: 24px;
143
+ --fade-content: 48px;
144
+ --opacity-dimmed: 0.6;
140
145
  --motion-drag-settle-duration: 160ms;
141
146
  --motion-drag-settle-easing: cubic-bezier(0.25, 1, 0.5, 1);
142
147
  }
@@ -168,6 +173,11 @@
168
173
  --layer-popover: oklch(1 0 0);
169
174
  --layer-backdrop: oklch(0 0 0 / 0.651);
170
175
  --layer-backdrop-nested: oklch(0 0 0 / 0.4);
176
+ /* The cover over something busy or loading in place: an image uploading or
177
+ that failed, a preview being prepared. The page at 80%, so what is under it
178
+ shows through, dimmed, and a default-colour Spinner on it reads in both
179
+ modes. Translucent by contract, like the two backdrops. */
180
+ --layer-veil: oklch(1 0 0 / 0.8);
171
181
  --layer-card: oklch(1 0 0);
172
182
  --layer-hud: oklch(0.2634 0.0093 294.92);
173
183
  --layer-frame: oklch(0.8829 0.1623 91.9);
@@ -381,6 +391,7 @@
381
391
  --layer-popover: oklch(0.2802 0.0036 106.63);
382
392
  --layer-backdrop: oklch(0 0 0 / 0.6);
383
393
  --layer-backdrop-nested: oklch(0 0 0 / 0.4);
394
+ --layer-veil: oklch(0.2213 0.0038 106.71 / 0.8);
384
395
  --layer-card: oklch(0.2596 0.0037 106.65);
385
396
  --layer-hud: oklch(0.2802 0.0036 106.63);
386
397
  --layer-frame: oklch(0.1582 0.0041 106.86);
@@ -465,6 +476,7 @@
465
476
  --layer-popover: oklch(0.2802 0.0036 106.63);
466
477
  --layer-backdrop: oklch(0 0 0 / 0.6);
467
478
  --layer-backdrop-nested: oklch(0 0 0 / 0.4);
479
+ --layer-veil: oklch(0.2213 0.0038 106.71 / 0.8);
468
480
  --layer-card: oklch(0.2596 0.0037 106.65);
469
481
  --layer-hud: oklch(0.2802 0.0036 106.63);
470
482
  --layer-frame: oklch(0.1582 0.0041 106.86);
@@ -4245,7 +4245,7 @@ const messageItem = tv$1({
4245
4245
  "size-[19px] group-data-[size=md]/avatar:size-[19px]",
4246
4246
  "rounded-sticker outline-none",
4247
4247
  "bg-layer-canvas bg-[linear-gradient(var(--mi-row-fill,transparent),var(--mi-row-fill,transparent))]",
4248
- "data-deleted:*:data-[slot=avatar]:grayscale data-deleted:*:data-[slot=avatar]:opacity-60",
4248
+ "data-deleted:*:data-[slot=avatar]:grayscale data-deleted:*:data-[slot=avatar]:opacity-dimmed",
4249
4249
  "shadow-[0_0_0_1.5px_var(--mi-row-fill,transparent),0_0_0_1.5px_var(--layer-canvas)]",
4250
4250
  "dark:shadow-[0_0_0_3px_var(--mi-row-fill,transparent),0_0_0_3px_var(--layer-canvas)]"
4251
4251
  ],
package/dist/index.mjs CHANGED
@@ -1,5 +1,5 @@
1
1
  import { cn } from "./cn.mjs";
2
- import { $ as MessageListDateDivider, $i as DialogContent, $n as PreviewCardContent, $r as DropdownMenuItemLabel, $t as MessageReactionTooltipNameText, Aa as controlIconInset, Ai as ListRow, An as MessageItem, Ar as PopoverPopup, At as MessageMultiSelectToolbarActions, B as useDragSiblingTransition, Bi as ListRowValue, Bn as RadioGroupItem, Bt as inlineChip, C as DropPlaceholder, Ca as withOverlayLayer, Ci as ScrollAreaCorner, Cn as MessageItemEdited, Cr as PopoverArrow, Ct as messageEmbed, Da as tv, Di as Checkbox, Dn as MessageItemAvatarSlot, Dr as PopoverContent, Dt as MessageMultiSelect, Ea as ThemeStateContext, Ei as ScrollAreaViewport, En as MessageItemSearchMatch, Er as PopoverClose, Et as MessageTextSelectionToolbarSeparator, Fi as ListRowGroup, Fn as AvatarGroup, Fr as PopoverViewport, Ft as MessageReferencePending, G as SILENT_DRAG_ANNOUNCEMENTS, Gi as TooltipTrigger, Gr as MobileNavRoot, Gt as MessageReactionGlyph, Hi as TooltipContent, Hn as InputGroupAddon, Ht as MessageReactionChip, I as DragLift, Ii as ListRowIcon, In as AvatarGroupCount, It as MessageReferenceReadMark, Jr as DropdownMenuCheckboxItemIndicator, Jt as MessageReactionQuickButton, K as createDragAnnouncements, Ki as Badge, Kr as DropdownMenu, Kt as MessageReactionPickerContent, Li as ListRowMeta, Ln as AvatarImage, Lt as MessageReferenceSuffix, Ma as headEdges, Mi as ListRowBottom, Mn as Avatar, Mr as PopoverSeparator, Na as decisionWidth, Ni as ListRowChevron, Nn as AvatarBadge, Nr as PopoverTitle, Nt as MessageReferenceIndicator, Oa as stackedActions, Oi as CheckboxIndicator, On as MessageItemContinuationTime, Or as PopoverDescription, Ot as MessageMultiSelectCheckbox, Pi as ListRowDescription, Pn as AvatarFallback, Pr as PopoverTrigger, Pt as MessageReferenceLabel, Qi as DialogClose, Qr as DropdownMenuItemCount, Qt as MessageReactionTooltipName, Ri as ListRowTitle, Rn as RadioGroup, Rt as MessageReferenceText, Sa as useParentOverlayKind, Si as ScrollAreaContent, Sn as MessageItemContent, St as MessageEmbedHeader, Ta as useTheme, Ti as ScrollAreaThumb, Tn as MessageItemFooter, Tt as MessageTextSelectionToolbarButton, U as drag, Ui as TooltipPortal, Un as InputGroupInput, Ur as MobileNavItem, Ut as MessageReactionCount, V as useLiftContainer, Vi as Tooltip, Vn as InputGroup, Vt as MessageReactionAddButton, Wi as TooltipProvider, Wn as useOverflowTitle, Wr as MobileNavLabel, Wt as MessageReactionErrorIndicator, Xi as Dialog, Xr as DropdownMenuFooter, Xt as MessageReactionTooltipContent, Yi as useMobileViewport, Yn as PreviewCard, Yr as DropdownMenuContent, Yt as MessageReactionQuickRow, Zi as DialogBody, Zn as PreviewCardArrow, Zr as DropdownMenuItem, Zt as MessageReactionTooltipMeta, _ as InboxItemTrailing, _a as Button, _i as PanelHeaderRoot, _n as MessageItemSenderButton, _t as MessageQuotedPreviewTimestamp, a as InboxItemContext, aa as DialogOverlay, ai as DropdownMenuRadioItem, an as MessageItemSavedIndicator, ar as PreviewCardPopup, at as MessageQuotedPreviewAttachment, b as useLatestRef, ba as defaultNativeButton, bi as PanelSection, bn as MessageItemAttachments, bt as MessageEmbedContent, c as InboxItemLeading, ca as DialogSurface, ci as DropdownMenuShortcut, cr as PreviewCardTitle, d as InboxItemMetadata, da as PanelAction, di as DropdownMenuTrigger, dt as MessageQuotedPreviewChannel, ea as DialogDescription, ei as DropdownMenuLabel, en as MessageReactionTooltipNames, er as PreviewCardDescription, et as MessageListEndFade, f as InboxItemSelection, fa as panelToggleAction, fi as Kbd, fn as MessageItemHeader, ft as MessageQuotedPreviewContent, g as InboxItemTitle, ga as DialogSheetReset, gi as PanelFooter, gn as MessageItemSenderBadges, gt as MessageQuotedPreviewThread, h as InboxItemTimestamp, ha as textLinkVariants, hi as PanelBody, hn as MessageItemSender, ht as MessageQuotedPreviewText, i as InboxItemContent, ia as DialogNav, ii as DropdownMenuRadioGroup, in as MessageItemReadReceipt, it as MessageQuotedPreview, ja as headEdgePull, ji as ListRowBody, jn as searchHit, jr as PopoverPortal, jt as MessageReferenceChip, k as useDragSensors, ka as useStackedActions, ki as PRESENCE_COLOR, kn as MessageItemGutter, kr as PopoverHeader, kt as MessageMultiSelectToolbar, l as InboxItemMarks, la as DialogTitle, li as DropdownMenuSubmenu, lr as PreviewCardTrigger, lt as MessageQuotedPreviewAuthorMeta, m as InboxItemSubtitle, ma as TextLinkExternalIcon, mi as Panel, mn as MessageItemMeta, mt as MessageQuotedPreviewLoading, n as InboxItemActions, ni as DropdownMenuPopup, nn as MessageItemBadge, nt as MessageListNotice, o as InboxItemHeading, oa as DialogPortal, oi as DropdownMenuRadioItemIndicator, on as MessageItemToolbar, or as PreviewCardPortal, ot as MessageQuotedPreviewAttachments, p as InboxItemSender, pa as TextLink, pi as KbdGroup, pn as MessageItemInlineStatus, pt as MessageQuotedPreviewHeader, q as dragInstructions, qr as DropdownMenuCheckboxItem, qt as MessageReactionPickerStatic, r as InboxItemBody, ra as DialogHeader, ri as DropdownMenuPortal, rn as MessageItemBadgeSeparator, rr as PreviewCardHeader, rt as MessageList, s as InboxItemHoverTarget, si as DropdownMenuSeparator, sn as MessageItemToolbarButton, sr as PreviewCardSeparator, st as MessageQuotedPreviewAuthor, t as InboxItem, ta as DialogFooter, tn as MessageReactionTooltipSeparator, tt as MessageListHistoryLimited, u as InboxItemMessage, ua as DialogTrigger, ui as DropdownMenuSubmenuTrigger, ut as MessageQuotedPreviewAuthorName, v as InboxItemTrigger, va as buttonVariants, vi as PanelScrollContent, vn as MessageItemSenderGroup, vt as MessageQuotedPreviewUnavailable, wa as useThemeScopeProps, wi as ScrollAreaScrollbar, wn as MessageItemEmbedded, wr as PopoverBackdrop, wt as MessageTextSelectionToolbar, x as Skeleton, xi as ScrollArea, xn as MessageItemBody, xr as Popover, xt as MessageEmbedFooter, ya as Spinner, yi as PanelScrollViewport, yn as MessageItemTime, yt as MessageEmbed, zi as ListRowTop, zn as RadioGroupIndicator, zt as MessageReferenceUnavailable } from "./inbox-item-BB6vO4PO.mjs";
2
+ import { $ as MessageListDateDivider, $i as DialogContent, $n as PreviewCardContent, $r as DropdownMenuItemLabel, $t as MessageReactionTooltipNameText, Aa as controlIconInset, Ai as ListRow, An as MessageItem, Ar as PopoverPopup, At as MessageMultiSelectToolbarActions, B as useDragSiblingTransition, Bi as ListRowValue, Bn as RadioGroupItem, Bt as inlineChip, C as DropPlaceholder, Ca as withOverlayLayer, Ci as ScrollAreaCorner, Cn as MessageItemEdited, Cr as PopoverArrow, Ct as messageEmbed, Da as tv, Di as Checkbox, Dn as MessageItemAvatarSlot, Dr as PopoverContent, Dt as MessageMultiSelect, Ea as ThemeStateContext, Ei as ScrollAreaViewport, En as MessageItemSearchMatch, Er as PopoverClose, Et as MessageTextSelectionToolbarSeparator, Fi as ListRowGroup, Fn as AvatarGroup, Fr as PopoverViewport, Ft as MessageReferencePending, G as SILENT_DRAG_ANNOUNCEMENTS, Gi as TooltipTrigger, Gr as MobileNavRoot, Gt as MessageReactionGlyph, Hi as TooltipContent, Hn as InputGroupAddon, Ht as MessageReactionChip, I as DragLift, Ii as ListRowIcon, In as AvatarGroupCount, It as MessageReferenceReadMark, Jr as DropdownMenuCheckboxItemIndicator, Jt as MessageReactionQuickButton, K as createDragAnnouncements, Ki as Badge, Kr as DropdownMenu, Kt as MessageReactionPickerContent, Li as ListRowMeta, Ln as AvatarImage, Lt as MessageReferenceSuffix, Ma as headEdges, Mi as ListRowBottom, Mn as Avatar, Mr as PopoverSeparator, Na as decisionWidth, Ni as ListRowChevron, Nn as AvatarBadge, Nr as PopoverTitle, Nt as MessageReferenceIndicator, Oa as stackedActions, Oi as CheckboxIndicator, On as MessageItemContinuationTime, Or as PopoverDescription, Ot as MessageMultiSelectCheckbox, Pi as ListRowDescription, Pn as AvatarFallback, Pr as PopoverTrigger, Pt as MessageReferenceLabel, Qi as DialogClose, Qr as DropdownMenuItemCount, Qt as MessageReactionTooltipName, Ri as ListRowTitle, Rn as RadioGroup, Rt as MessageReferenceText, Sa as useParentOverlayKind, Si as ScrollAreaContent, Sn as MessageItemContent, St as MessageEmbedHeader, Ta as useTheme, Ti as ScrollAreaThumb, Tn as MessageItemFooter, Tt as MessageTextSelectionToolbarButton, U as drag, Ui as TooltipPortal, Un as InputGroupInput, Ur as MobileNavItem, Ut as MessageReactionCount, V as useLiftContainer, Vi as Tooltip, Vn as InputGroup, Vt as MessageReactionAddButton, Wi as TooltipProvider, Wn as useOverflowTitle, Wr as MobileNavLabel, Wt as MessageReactionErrorIndicator, Xi as Dialog, Xr as DropdownMenuFooter, Xt as MessageReactionTooltipContent, Yi as useMobileViewport, Yn as PreviewCard, Yr as DropdownMenuContent, Yt as MessageReactionQuickRow, Zi as DialogBody, Zn as PreviewCardArrow, Zr as DropdownMenuItem, Zt as MessageReactionTooltipMeta, _ as InboxItemTrailing, _a as Button, _i as PanelHeaderRoot, _n as MessageItemSenderButton, _t as MessageQuotedPreviewTimestamp, a as InboxItemContext, aa as DialogOverlay, ai as DropdownMenuRadioItem, an as MessageItemSavedIndicator, ar as PreviewCardPopup, at as MessageQuotedPreviewAttachment, b as useLatestRef, ba as defaultNativeButton, bi as PanelSection, bn as MessageItemAttachments, bt as MessageEmbedContent, c as InboxItemLeading, ca as DialogSurface, ci as DropdownMenuShortcut, cr as PreviewCardTitle, d as InboxItemMetadata, da as PanelAction, di as DropdownMenuTrigger, dt as MessageQuotedPreviewChannel, ea as DialogDescription, ei as DropdownMenuLabel, en as MessageReactionTooltipNames, er as PreviewCardDescription, et as MessageListEndFade, f as InboxItemSelection, fa as panelToggleAction, fi as Kbd, fn as MessageItemHeader, ft as MessageQuotedPreviewContent, g as InboxItemTitle, ga as DialogSheetReset, gi as PanelFooter, gn as MessageItemSenderBadges, gt as MessageQuotedPreviewThread, h as InboxItemTimestamp, ha as textLinkVariants, hi as PanelBody, hn as MessageItemSender, ht as MessageQuotedPreviewText, i as InboxItemContent, ia as DialogNav, ii as DropdownMenuRadioGroup, in as MessageItemReadReceipt, it as MessageQuotedPreview, ja as headEdgePull, ji as ListRowBody, jn as searchHit, jr as PopoverPortal, jt as MessageReferenceChip, k as useDragSensors, ka as useStackedActions, ki as PRESENCE_COLOR, kn as MessageItemGutter, kr as PopoverHeader, kt as MessageMultiSelectToolbar, l as InboxItemMarks, la as DialogTitle, li as DropdownMenuSubmenu, lr as PreviewCardTrigger, lt as MessageQuotedPreviewAuthorMeta, m as InboxItemSubtitle, ma as TextLinkExternalIcon, mi as Panel, mn as MessageItemMeta, mt as MessageQuotedPreviewLoading, n as InboxItemActions, ni as DropdownMenuPopup, nn as MessageItemBadge, nt as MessageListNotice, o as InboxItemHeading, oa as DialogPortal, oi as DropdownMenuRadioItemIndicator, on as MessageItemToolbar, or as PreviewCardPortal, ot as MessageQuotedPreviewAttachments, p as InboxItemSender, pa as TextLink, pi as KbdGroup, pn as MessageItemInlineStatus, pt as MessageQuotedPreviewHeader, q as dragInstructions, qr as DropdownMenuCheckboxItem, qt as MessageReactionPickerStatic, r as InboxItemBody, ra as DialogHeader, ri as DropdownMenuPortal, rn as MessageItemBadgeSeparator, rr as PreviewCardHeader, rt as MessageList, s as InboxItemHoverTarget, si as DropdownMenuSeparator, sn as MessageItemToolbarButton, sr as PreviewCardSeparator, st as MessageQuotedPreviewAuthor, t as InboxItem, ta as DialogFooter, tn as MessageReactionTooltipSeparator, tt as MessageListHistoryLimited, u as InboxItemMessage, ua as DialogTrigger, ui as DropdownMenuSubmenuTrigger, ut as MessageQuotedPreviewAuthorName, v as InboxItemTrigger, va as buttonVariants, vi as PanelScrollContent, vn as MessageItemSenderGroup, vt as MessageQuotedPreviewUnavailable, wa as useThemeScopeProps, wi as ScrollAreaScrollbar, wn as MessageItemEmbedded, wr as PopoverBackdrop, wt as MessageTextSelectionToolbar, x as Skeleton, xi as ScrollArea, xn as MessageItemBody, xr as Popover, xt as MessageEmbedFooter, ya as Spinner, yi as PanelScrollViewport, yn as MessageItemTime, yt as MessageEmbed, zi as ListRowTop, zn as RadioGroupIndicator, zt as MessageReferenceUnavailable } from "./inbox-item-D7xLTDjD.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";
@@ -2703,7 +2703,7 @@ const lightbox = tv({ slots: {
2703
2703
  ],
2704
2704
  thumbnailOverlay: [
2705
2705
  "pointer-events-none absolute inset-0 block transition-colors duration-150",
2706
- "bg-black/45 group-hover/lightbox-thumb:bg-black/28",
2706
+ "bg-layer-backdrop-nested group-hover/lightbox-thumb:bg-layer-backdrop-nested/70",
2707
2707
  "group-data-active/lightbox-thumb:bg-transparent"
2708
2708
  ],
2709
2709
  close: ["pointer-events-auto"]
@@ -5964,14 +5964,14 @@ const messageImageGallery = tv({
5964
5964
  slots: {
5965
5965
  root: ["@container/gallery w-full max-w-[min(360px,100%)] stack-y-1"],
5966
5966
  row: ["grid", "gap-1"],
5967
- item: [
5968
- "group/img relative overflow-hidden text-left",
5969
- "rounded-control border border-line-hairline bg-fill-muted",
5970
- "has-data-[slot=message-image-gallery-overlay]:opacity-70"
5971
- ],
5967
+ item: ["group/img relative overflow-hidden text-left", "rounded-control border border-line-hairline bg-fill-muted"],
5972
5968
  media: "block size-full ",
5973
- overlay: "absolute inset-0 flex items-center justify-center",
5974
- preview: ["absolute inset-0", "outline-none focus-visible:keyboard:inset-ring-2 focus-visible:keyboard:inset-ring-foreground"],
5969
+ overlay: "absolute inset-0 flex items-center justify-center bg-layer-veil",
5970
+ preview: [
5971
+ "absolute inset-0",
5972
+ "transition-colors duration-75 hover:bg-ink-8",
5973
+ "outline-none focus-visible:keyboard:inset-ring-2 focus-visible:keyboard:inset-ring-foreground"
5974
+ ],
5975
5975
  action: [
5976
5976
  "absolute z-10 hidden items-center justify-center",
5977
5977
  "focus:flex",
@@ -6317,12 +6317,7 @@ const messageForwardedBundle = tv({
6317
6317
  },
6318
6318
  variants: {
6319
6319
  fullWidth: { true: { root: "w-full max-w-none" } },
6320
- collapsed: { true: { items: [
6321
- "max-h-40 overflow-clip",
6322
- "after:pointer-events-none after:absolute after:inset-x-0 after:bottom-0 after:h-10 after:bg-linear-to-t",
6323
- "data-[tight-fold]:after:h-5",
6324
- "after:from-layer-card after:via-layer-card/80 after:to-layer-card/0"
6325
- ] } }
6320
+ collapsed: { true: { items: ["max-h-40 overflow-clip", "mask-fade-b data-tight-fold:mask-fade-b-edge"] } }
6326
6321
  }
6327
6322
  });
6328
6323
  const messageForwardedBundleItem = tv({
@@ -8267,7 +8262,7 @@ const composerAttachment = tv({
8267
8262
  attachmentUploadingOverlay: [
8268
8263
  "absolute inset-0 z-10 flex flex-col items-center justify-center px-1",
8269
8264
  "text-center",
8270
- "rounded-control bg-layer-card/80",
8265
+ "rounded-control bg-layer-veil",
8271
8266
  "font-mono text-mono-meta font-bold text-foreground"
8272
8267
  ],
8273
8268
  attachmentUploadProgressBar: [
@@ -8280,7 +8275,7 @@ const composerAttachment = tv({
8280
8275
  "absolute inset-0 z-10 flex flex-col items-center justify-center px-1",
8281
8276
  "[border-width:var(--ca-overlay-border,2px)]",
8282
8277
  "text-center",
8283
- "rounded-control border-danger-strong bg-layer-card/90",
8278
+ "rounded-control border-danger-strong bg-layer-veil",
8284
8279
  "font-sans text-caption font-semibold text-danger-strong"
8285
8280
  ],
8286
8281
  attachmentRemove: [
@@ -10431,9 +10426,7 @@ const tabs = tv({
10431
10426
  "relative isolate flex w-max max-w-full",
10432
10427
  "overscroll-contain whitespace-nowrap",
10433
10428
  "scrollbar-none [&::-webkit-scrollbar]:hidden",
10434
- "data-[overflow=end]:mask-[linear-gradient(to_right,black_calc(100%-32px),transparent)]",
10435
- "data-[overflow=start]:mask-[linear-gradient(to_right,transparent,black_32px)]",
10436
- "data-[overflow=both]:mask-[linear-gradient(to_right,transparent,black_32px,black_calc(100%-32px),transparent)]"
10429
+ "mask-fade-x"
10437
10430
  ],
10438
10431
  background: ["", "hidden"],
10439
10432
  tab: [
@@ -12116,7 +12109,7 @@ const taskStatusStrong = tv({ variants: { status: {
12116
12109
  const taskCardStatus = tv({ base: [
12117
12110
  "inline-flex min-w-0 shrink-0 touch-manipulation items-center",
12118
12111
  "transition-[filter,opacity] duration-100 outline-none",
12119
- "data-[busy=true]:pointer-events-none data-[busy=true]:cursor-wait data-[busy=true]:opacity-60 data-[busy=true]:disabled:opacity-100",
12112
+ "data-[busy=true]:pointer-events-none data-[busy=true]:cursor-wait data-[busy=true]:opacity-dimmed data-[busy=true]:disabled:opacity-100",
12120
12113
  "h-[22px] gap-1.5 rounded-chip border-0 px-[7px] py-0",
12121
12114
  "font-sans text-[12px] leading-4 font-semibold text-foreground",
12122
12115
  "[&:not(:has([data-slot=task-card-status-label]))]:hidden",
@@ -15298,7 +15291,7 @@ function TaskChip({ status, loading = false, variant = "default", size = "defaul
15298
15291
  "data-slot": "task-chip",
15299
15292
  "data-inline-reference": "",
15300
15293
  "data-loading": loading ? "true" : void 0,
15301
- className: cn(root({ className }), loading && "pointer-events-none opacity-60"),
15294
+ className: cn(root({ className }), loading && "pointer-events-none opacity-dimmed"),
15302
15295
  children
15303
15296
  };
15304
15297
  return useRender({
package/dist/styles.css CHANGED
@@ -191,6 +191,7 @@
191
191
  --color-layer-popover: var(--layer-popover);
192
192
  --color-layer-backdrop: var(--layer-backdrop);
193
193
  --color-layer-backdrop-nested: var(--layer-backdrop-nested);
194
+ --color-layer-veil: var(--layer-veil);
194
195
  --color-layer-card: var(--layer-card);
195
196
  --color-layer-hud: var(--layer-hud);
196
197
  --color-foreground-on-hud: var(--foreground-on-hud);
@@ -663,6 +664,56 @@ textarea:-webkit-autofill:disabled {
663
664
  }
664
665
  }
665
666
 
667
+ /* Dimmed: something present but not active, deleted, offline or still
668
+ pending, at 60% (design/foundations/states.md#dimmed). Lighter than the 40%
669
+ of a drag origin, which says "it was here", not "it is here, inactive". */
670
+ @utility opacity-dimmed {
671
+ opacity: var(--opacity-dimmed);
672
+ }
673
+
674
+ /* Content fades (design/foundations/spacing.md#edges-fade): a mask, never a
675
+ colour gradient, so whatever is behind the content (a row's hover or
676
+ located fill, a card, a tint) shows through the fade unchanged.
677
+ mask-fade-t / mask-fade-b fade the top or bottom edge over fade-content
678
+ (48px), where content is cut: a fold, a glimpse. mask-fade-x fades the
679
+ sides of a strip that scrolls sideways over fade-edge (24px), on the side
680
+ its data-overflow names (start, end or both) and nowhere without it.
681
+ mask-fade-t-edge / mask-fade-b-edge take the edge length instead, for a
682
+ fold too short to give 48px to the fade. */
683
+ @utility mask-fade-t {
684
+ mask-image: linear-gradient(to bottom, transparent, oklch(0 0 0) var(--fade-content));
685
+ }
686
+
687
+ @utility mask-fade-t-edge {
688
+ mask-image: linear-gradient(to bottom, transparent, oklch(0 0 0) var(--fade-edge));
689
+ }
690
+
691
+ @utility mask-fade-b {
692
+ mask-image: linear-gradient(to top, transparent, oklch(0 0 0) var(--fade-content));
693
+ }
694
+
695
+ @utility mask-fade-b-edge {
696
+ mask-image: linear-gradient(to top, transparent, oklch(0 0 0) var(--fade-edge));
697
+ }
698
+
699
+ @utility mask-fade-x {
700
+ &[data-overflow="start"] {
701
+ mask-image: linear-gradient(to right, transparent, oklch(0 0 0) var(--fade-edge));
702
+ }
703
+ &[data-overflow="end"] {
704
+ mask-image: linear-gradient(to left, transparent, oklch(0 0 0) var(--fade-edge));
705
+ }
706
+ &[data-overflow="both"] {
707
+ mask-image: linear-gradient(
708
+ to right,
709
+ transparent,
710
+ oklch(0 0 0) var(--fade-edge),
711
+ oklch(0 0 0) calc(100% - var(--fade-edge)),
712
+ transparent
713
+ );
714
+ }
715
+ }
716
+
666
717
  /* Drag and drop (design/patterns/drag-and-drop.md). While something is
667
718
  lifted, DragLift sets data-dragging on the root, and DragRefusalHint sets
668
719
  data-drag-refused while the place under the hand refuses it: the cursor
package/dist/tokens.json CHANGED
@@ -1377,6 +1377,25 @@
1377
1377
  }
1378
1378
  }
1379
1379
  },
1380
+ "veil": {
1381
+ "$value": {
1382
+ "colorSpace": "oklch",
1383
+ "components": [1, 0, 0],
1384
+ "alpha": 0.8
1385
+ },
1386
+ "$description": "The cover over something busy or loading in place: an image uploading or that failed, a preview being prepared. The page at 80%, so what is under it shows through, dimmed, and a default-colour Spinner on it reads in both modes. Translucent by contract, like the two backdrops.",
1387
+ "$extensions": {
1388
+ "build.botiverse.raft": {
1389
+ "modes": {
1390
+ "dark": {
1391
+ "colorSpace": "oklch",
1392
+ "components": [0.2213, 0.0038, 106.71],
1393
+ "alpha": 0.8
1394
+ }
1395
+ }
1396
+ }
1397
+ }
1398
+ },
1380
1399
  "card": {
1381
1400
  "$value": {
1382
1401
  "colorSpace": "oklch",
@@ -2530,6 +2549,27 @@
2530
2549
  }
2531
2550
  }
2532
2551
  },
2552
+ "fade": {
2553
+ "$type": "dimension",
2554
+ "edge": {
2555
+ "$value": { "value": 24, "unit": "px" },
2556
+ "$description": "The fade at the edge of a strip that scrolls sideways (mask-fade-x): long enough to say more is there, short enough to leave the item under it readable.",
2557
+ "$extensions": { "build.botiverse.raft": { "scope": "root" } }
2558
+ },
2559
+ "content": {
2560
+ "$value": { "value": 48, "unit": "px" },
2561
+ "$description": "The fade where content is cut (mask-fade-t, mask-fade-b): a long message folded, a glimpse of hidden history. About two lines, so the cut reads as a fold, not a clipped line.",
2562
+ "$extensions": { "build.botiverse.raft": { "scope": "root" } }
2563
+ }
2564
+ },
2565
+ "opacity": {
2566
+ "$type": "number",
2567
+ "dimmed": {
2568
+ "$value": 0.6,
2569
+ "$description": "Something present but not active: deleted, offline or still pending (opacity-dimmed). The place a dragged item came from keeps its own 0.4 (data-drag-origin).",
2570
+ "$extensions": { "build.botiverse.raft": { "scope": "root" } }
2571
+ }
2572
+ },
2533
2573
  "motion": {
2534
2574
  "drag-settle-duration": {
2535
2575
  "$type": "duration",
package/dist/wip.mjs CHANGED
@@ -1,5 +1,5 @@
1
1
  import { cn } from "./cn.mjs";
2
- import { $i as DialogContent, A as DRAG_AUTO_SCROLL_ZONE_PX, Ai as ListRow, B as useDragSiblingTransition, Bn as RadioGroupItem, Br as TOUCH_DRAG_TOLERANCE_PX, C as DropPlaceholder, D as listKeyboardCoordinates, Da as tv, Di as Checkbox, E as MOUSE_DRAG_DISTANCE_PX, F as DROP_GLIDE, G as SILENT_DRAG_ANNOUNCEMENTS, Gi as TooltipTrigger, Gn as measureContent, H as LIFT_CLASS, Hi as TooltipContent, Hn as InputGroupAddon, Hr as useMouseOnlyPointerSensor, I as DragLift, Ir as HoldThenMoveTouchSensor, It as MessageReferenceReadMark, J as dragMessages, Ji as DialogSheetContent, Jn as readNow, K as createDragAnnouncements, Kn as measureElement, L as ORIGIN_OPACITY, Li as ListRowMeta, Lr as MouseOnlyPointerSensor, M as DRAG_LIFT_Z_INDEX, Mi as ListRowBottom, Mt as MessageReferenceIcon, N as DRAG_SETTLE, O as useDragAcrossLists, P as DRAG_SIBLING_TRANSITION, Pi as ListRowDescription, Q as MessageListJumpPillGroup, Qi as DialogClose, Qn as PreviewCardBody, R as cancelDrag, Ri as ListRowTitle, Rn as RadioGroup, Rr as TOUCH_DRAG_DISTANCE_PX, S as DragRefusalHint, Sa as useParentOverlayKind, Sr as PopoverActions, T as DragRemeasure, Ta as useTheme, Tr as PopoverBody, Un as InputGroupInput, Vi as Tooltip, Vn as InputGroup, Vr as useHoldThenMoveTouchSensor, W as DEFAULT_DRAG_MESSAGES, Wn as useOverflowTitle, X as MessageListJumpPill, Xi as Dialog, Xn as PreviewCardActions, Y as MessageListJumpControls, Z as MessageListJumpPillDismiss, _ as InboxItemTrailing, _a as Button$1, _r as MobileNavServerPopoverRow, a as InboxItemContext, b as useLatestRef, ba as defaultNativeButton, br as MobileNavServerPopoverRowLabel, c as InboxItemLeading, cn as MessageItemDelegatedAvatar, ct as MessageQuotedPreviewAuthorDelegatedBy, dn as MessageItemDelegatedByName, dr as MobileNavServerPopover, fr as MobileNavServerPopoverContent, g as InboxItemTitle, gr as MobileNavServerPopoverList, h as InboxItemTimestamp, hr as MobileNavServerPopoverGroup, i as InboxItemContent, ir as PreviewCardMeta, j as DRAG_KEYBOARD_OFFSET_PX, ji as ListRowBody, k as useDragSensors, la as DialogTitle, ln as MessageItemDelegatedBy, mr as MobileNavServerPopoverDestinations, na as DialogFooterNote, nr as PreviewCardFooter, o as InboxItemHeading, pa as TextLink, pr as MobileNavServerPopoverDestination, q as dragInstructions, qi as DialogCommit, qn as observeTruncation, r as InboxItemBody, sa as DialogSheetBack, t as InboxItem, ti as DropdownMenuLinkItem, tr as PreviewCardEyebrow, ua as DialogTrigger, un as MessageItemDelegatedByButton, ur as MobileNavServerItem, vr as MobileNavServerPopoverRowBody, w as DRAG_KEYBOARD_CODES, wa as useThemeScopeProps, x as Skeleton, xa as OverlayLayerProvider, y as inboxItem, ya as Spinner, yr as MobileNavServerPopoverRowDescription, z as keepGrabInside, zi as ListRowTop, zr as TOUCH_DRAG_HOLD_MS } from "./inbox-item-BB6vO4PO.mjs";
2
+ import { $i as DialogContent, A as DRAG_AUTO_SCROLL_ZONE_PX, Ai as ListRow, B as useDragSiblingTransition, Bn as RadioGroupItem, Br as TOUCH_DRAG_TOLERANCE_PX, C as DropPlaceholder, D as listKeyboardCoordinates, Da as tv, Di as Checkbox, E as MOUSE_DRAG_DISTANCE_PX, F as DROP_GLIDE, G as SILENT_DRAG_ANNOUNCEMENTS, Gi as TooltipTrigger, Gn as measureContent, H as LIFT_CLASS, Hi as TooltipContent, Hn as InputGroupAddon, Hr as useMouseOnlyPointerSensor, I as DragLift, Ir as HoldThenMoveTouchSensor, It as MessageReferenceReadMark, J as dragMessages, Ji as DialogSheetContent, Jn as readNow, K as createDragAnnouncements, Kn as measureElement, L as ORIGIN_OPACITY, Li as ListRowMeta, Lr as MouseOnlyPointerSensor, M as DRAG_LIFT_Z_INDEX, Mi as ListRowBottom, Mt as MessageReferenceIcon, N as DRAG_SETTLE, O as useDragAcrossLists, P as DRAG_SIBLING_TRANSITION, Pi as ListRowDescription, Q as MessageListJumpPillGroup, Qi as DialogClose, Qn as PreviewCardBody, R as cancelDrag, Ri as ListRowTitle, Rn as RadioGroup, Rr as TOUCH_DRAG_DISTANCE_PX, S as DragRefusalHint, Sa as useParentOverlayKind, Sr as PopoverActions, T as DragRemeasure, Ta as useTheme, Tr as PopoverBody, Un as InputGroupInput, Vi as Tooltip, Vn as InputGroup, Vr as useHoldThenMoveTouchSensor, W as DEFAULT_DRAG_MESSAGES, Wn as useOverflowTitle, X as MessageListJumpPill, Xi as Dialog, Xn as PreviewCardActions, Y as MessageListJumpControls, Z as MessageListJumpPillDismiss, _ as InboxItemTrailing, _a as Button$1, _r as MobileNavServerPopoverRow, a as InboxItemContext, b as useLatestRef, ba as defaultNativeButton, br as MobileNavServerPopoverRowLabel, c as InboxItemLeading, cn as MessageItemDelegatedAvatar, ct as MessageQuotedPreviewAuthorDelegatedBy, dn as MessageItemDelegatedByName, dr as MobileNavServerPopover, fr as MobileNavServerPopoverContent, g as InboxItemTitle, gr as MobileNavServerPopoverList, h as InboxItemTimestamp, hr as MobileNavServerPopoverGroup, i as InboxItemContent, ir as PreviewCardMeta, j as DRAG_KEYBOARD_OFFSET_PX, ji as ListRowBody, k as useDragSensors, la as DialogTitle, ln as MessageItemDelegatedBy, mr as MobileNavServerPopoverDestinations, na as DialogFooterNote, nr as PreviewCardFooter, o as InboxItemHeading, pa as TextLink, pr as MobileNavServerPopoverDestination, q as dragInstructions, qi as DialogCommit, qn as observeTruncation, r as InboxItemBody, sa as DialogSheetBack, t as InboxItem, ti as DropdownMenuLinkItem, tr as PreviewCardEyebrow, ua as DialogTrigger, un as MessageItemDelegatedByButton, ur as MobileNavServerItem, vr as MobileNavServerPopoverRowBody, w as DRAG_KEYBOARD_CODES, wa as useThemeScopeProps, x as Skeleton, xa as OverlayLayerProvider, y as inboxItem, ya as Spinner, yr as MobileNavServerPopoverRowDescription, z as keepGrabInside, zi as ListRowTop, zr as TOUCH_DRAG_HOLD_MS } from "./inbox-item-D7xLTDjD.mjs";
3
3
  import { Check, ChevronDown, LoaderCircle, Plus, Search, X } from "lucide-react";
4
4
  import { createContext, use, useCallback, useContext, useEffect, useId, useLayoutEffect, useMemo, useRef, useState, useSyncExternalStore } from "react";
5
5
  import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@botiverse/raft-ui",
3
- "version": "0.36.1",
3
+ "version": "0.37.0",
4
4
  "description": "React components and CSS foundations for the Raft Design System.",
5
5
  "keywords": [
6
6
  "agent-skills",