@botiverse/raft-ui 0.16.0 → 0.18.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,42 @@
1
+ ## [0.18.0](https://github.com/botiverse/raft-design/compare/v0.17.0...v0.18.0) (2026-10-21)
2
+
3
+ ### Design System
4
+
5
+ - **Field frames**: a field's ink frame is 1.5px, the same weight as a button's. It applies to Input, Textarea, InputGroup, Select, Combobox, ComboboxSelect, SearchTrigger, the composer and an option card. Read-only fields keep their light, thin edge. ([#661](https://github.com/botiverse/raft-design/pull/661))
6
+ - Why: a field sits next to its send button, its submit button and the selected row, all 1.5px ink; at 1px it was the one thin control among them and read as a lighter style rather than the same system.
7
+ - Affects: `line-field` width 1px → 1.5px.
8
+ - Docs: https://raft-design.botiverse.build/foundations/shape/
9
+ - **Autofill**: a field the browser filled in looks like any other field, `layer-card` with ink text. ([#661](https://github.com/botiverse/raft-design/pull/661))
10
+ - Why: Chrome's pale blue and Safari's yellow made the filled field the one field on the page that matched nothing else, and the colour tells a person nothing.
11
+ - Docs: https://raft-design.botiverse.build/foundations/states/#autofill
12
+
13
+ ### Fixed
14
+
15
+ - **Input, Textarea, Select and every other field**: browser autofill no longer paints a field pale blue or yellow. raft-ui's `styles.css` handles every `input`, `textarea` and `select` on the page; a disabled autofilled field keeps the disabled ink. ([#661](https://github.com/botiverse/raft-design/pull/661))
16
+ - Why: see Autofill above.
17
+ - Docs: https://raft-design.botiverse.build/foundations/states/#autofill
18
+
19
+ ## [0.17.0](https://github.com/botiverse/raft-design/compare/v0.16.0...v0.17.0) (2026-10-21)
20
+
21
+ ### Design System
22
+
23
+ - **Dragging on a touch screen**: on an item that can be moved, holding still opens its menu and holding then moving drags it. The item arms after 500ms, the same moment raft-ui's long-press menu opens, and the drag starts on the first 10px of movement; moving earlier is a scroll, and a second finger cancels. The component that owns the item's menu closes it when the drag starts. ([#662](https://github.com/botiverse/raft-design/pull/662))
24
+ - Why: on a phone, a long press on a draggable item opened its context menu first, and a scroll that started on a tab, task card or attachment picked the item up instead.
25
+ - Affects: touch drag hold 0ms (tabs, cards and attachments picked up at once) → 500ms, then 10px; held items get `select-none`, `-webkit-touch-callout: none` and `touch-manipulation`. Mouse and pen still start a drag after 5–6px, with no hold.
26
+ - Docs: https://raft-design.botiverse.build/foundations/states/#dragging-on-a-touch-screen
27
+
28
+ ### Added
29
+
30
+ - **SortableTabsList** `onDragStart`: called when a tab drag starts, so an app that puts its own menu on a tab can close it. ([#662](https://github.com/botiverse/raft-design/pull/662))
31
+ - Why: the component that owns an item's menu closes it when the item's drag starts.
32
+ - Docs: https://raft-design.botiverse.build/components/tabs/
33
+
34
+ ### Fixed
35
+
36
+ - **SortableTabsList, task drag-and-drop and SortableComposerAttachments**: on a touch screen a finger no longer starts a drag at once; it has to hold still for 500ms and then move. Scrolling that starts on a card or an attachment scrolls again. ([#662](https://github.com/botiverse/raft-design/pull/662))
37
+ - Why: the pointer sensor took every touch before the touch sensor could, and `touch-none` stopped the page from scrolling.
38
+ - Docs: https://raft-design.botiverse.build/foundations/states/#dragging-on-a-touch-screen
39
+
1
40
  ## [0.16.0](https://github.com/botiverse/raft-design/compare/v0.15.0...v0.16.0) (2026-10-21)
2
41
 
3
42
  ### Breaking Changes
@@ -11,7 +11,7 @@
11
11
  align-items: center;
12
12
  gap: 0.5rem;
13
13
  padding: 0 6px 0 12px;
14
- border: 1px solid var(--line-field);
14
+ border: 1.5px solid var(--line-field);
15
15
  border-radius: 8px;
16
16
  outline: 0;
17
17
  background: var(--layer-card);
package/dist/index.d.mts CHANGED
@@ -3890,8 +3890,12 @@ export declare function TabsList({ className, children, variant, ref, ...props }
3890
3890
  type SortableTabsListProps<T extends string = string> = TabsListProps & {
3891
3891
  value: readonly T[];
3892
3892
  onReorder: (value: T[]) => void;
3893
+ /** A tab was picked up. On a touch screen the long press that armed it may
3894
+ * have opened a menu the caller owns: close it here (DS › States ›
3895
+ * Dragging on a touch screen). */
3896
+ onDragStart?: (value: T) => void;
3893
3897
  };
3894
- export declare function SortableTabsList<T extends string = string>({ value, onReorder, children, variant, ...props }: SortableTabsListProps<T>): import("react").JSX.Element;
3898
+ export declare function SortableTabsList<T extends string = string>({ value, onReorder, onDragStart, children, variant, ...props }: SortableTabsListProps<T>): import("react").JSX.Element;
3895
3899
  type TabsTabProps<T extends string = string> = StyledProps<Tabs$1.Tab.Props> & {
3896
3900
  value: T;
3897
3901
  };
package/dist/index.mjs CHANGED
@@ -1,5 +1,5 @@
1
1
  import { cn } from "./cn.mjs";
2
- import { $ as MessageReactionTooltipNameText, $n as controlIconInset, $t as DropdownMenuSeparator, A as MessageTextSelectionToolbarButton, An as DialogBody, At as MessageItem, B as MessageReferenceUnavailable, Bn as DialogTitle, Bt as DropdownMenuCheckboxItem, C as MessageQuotedPreviewUnavailable, Cn as Tooltip, Ct as MessageItemEdited, D as MessageEmbedHeader, Dn as TooltipTrigger, Dt as MessageItemAvatarSlot, E as MessageEmbedFooter, En as TooltipProvider, Et as MessageItemSearchMatch, F as MessageReferenceChip, Fn as DialogHeader, Ft as AvatarGroup, G as MessageReactionGlyph, Gn as defaultNativeButton, Gt as DropdownMenuItemCount, H as MessageReactionChip, Hn as Button, Ht as DropdownMenuContent, I as MessageReferenceIndicator, In as DialogNav, It as AvatarGroupCount, J as MessageReactionQuickButton, Jn as resolveThemeScopeProps, Jt as DropdownMenuPopup, K as MessageReactionPickerContent, Kn as useParentOverlayKind, Kt as DropdownMenuItemLabel, L as MessageReferenceLabel, Ln as DialogOverlay, Lt as AvatarImage, M as MessageMultiSelect, Mn as DialogContent, Mt as Avatar, N as MessageMultiSelectCheckbox, Nn as DialogDescription, Nt as AvatarBadge, O as messageEmbed, On as Badge, Ot as MessageItemContinuationTime, P as MessageMultiSelectToolbar, Pn as DialogFooter, Pt as AvatarFallback, Q as MessageReactionTooltipName, Qn as tv, Qt as DropdownMenuRadioItemIndicator, R as MessageReferencePending, Rn as DialogPortal, Rt as useOverflowTitle, S as MessageQuotedPreviewTimestamp, Sn as PRESENCE_COLOR, St as MessageItemContent, T as MessageEmbedContent, Tn as TooltipPortal, Tt as MessageItemFooter, U as MessageReactionCount, Un as buttonVariants, Ut as DropdownMenuFooter, V as MessageReactionAddButton, Vn as DialogTrigger, Vt as DropdownMenuCheckboxItemIndicator, W as MessageReactionErrorIndicator, Wn as Spinner, Wt as DropdownMenuItem, X as MessageReactionTooltipContent, Xn as useTheme, Xt as DropdownMenuRadioGroup, Y as MessageReactionQuickRow, Yn as useThemeScopeProps, Yt as DropdownMenuPortal, Z as MessageReactionTooltipMeta, Zn as ThemeStateContext, Zt as DropdownMenuRadioItem, _ as MessageQuotedPreviewContent, _n as ScrollAreaThumb, _t as MessageItemSenderButton, a as MessageListDateDivider, an as KbdGroup, at as MessageItemSavedIndicator, b as MessageQuotedPreviewText, bn as Checkbox, bt as MessageItemAttachments, c as MessageList, cn as PanelFooter, d as MessageQuotedPreviewAttachments, dn as PanelScrollViewport, en as DropdownMenuShortcut, er as headEdgePull, et as MessageReactionTooltipNames, f as MessageQuotedPreviewAuthor, fn as PanelSection, ft as MessageItemHeader, g as MessageQuotedPreviewChannel, gn as ScrollAreaScrollbar, gt as MessageItemSenderBadges, h as MessageQuotedPreviewAuthorName, hn as ScrollAreaCorner, ht as MessageItemSender, in as Kbd, it as MessageItemReadReceipt, j as MessageTextSelectionToolbarSeparator, jn as DialogClose, jt as searchHit, k as MessageTextSelectionToolbar, kn as Dialog, kt as MessageItemGutter, l as MessageQuotedPreview, ln as PanelHeaderRoot, m as MessageQuotedPreviewAuthorMeta, mn as ScrollAreaContent, mt as MessageItemMeta, nn as DropdownMenuSubmenuTrigger, nt as MessageItemBadge, o as MessageListHistoryLimited, on as Panel, ot as MessageItemToolbar, pn as ScrollArea, pt as MessageItemInlineStatus, q as MessageReactionPickerStatic, qn as withOverlayLayer, qt as DropdownMenuLabel, rn as DropdownMenuTrigger, rt as MessageItemBadgeSeparator, s as MessageListNotice, sn as PanelBody, st as MessageItemToolbarButton, tn as DropdownMenuSubmenu, tr as headEdges, tt as MessageReactionTooltipSeparator, u as MessageQuotedPreviewAttachment, un as PanelScrollContent, v as MessageQuotedPreviewHeader, vn as ScrollAreaViewport, vt as MessageItemSenderGroup, w as MessageEmbed, wn as TooltipContent, wt as MessageItemEmbedded, x as MessageQuotedPreviewThread, xn as CheckboxIndicator, xt as MessageItemBody, y as MessageQuotedPreviewLoading, yn as useMobileViewport, yt as MessageItemTime, z as MessageReferenceText, zn as DialogSurface, zt as DropdownMenu } from "./message-list-03unCFnE.mjs";
2
+ import { $ as MessageReactionTooltipMeta, $n as ThemeStateContext, $t as DropdownMenuRadioItem, A as messageEmbed, An as Badge, At as MessageItemContinuationTime, B as MessageReferencePending, Bn as DialogPortal, Bt as useOverflowTitle, C as MessageQuotedPreviewThread, Cn as CheckboxIndicator, Ct as MessageItemBody, D as MessageEmbedContent, Dn as TooltipPortal, Dt as MessageItemFooter, E as MessageEmbed, En as TooltipContent, Et as MessageItemEmbedded, F as MessageMultiSelectCheckbox, Fn as DialogDescription, Ft as AvatarBadge, G as MessageReactionCount, Gn as buttonVariants, Gt as DropdownMenuFooter, H as MessageReferenceUnavailable, Hn as DialogTitle, Ht as DropdownMenuCheckboxItem, I as MessageMultiSelectToolbar, In as DialogFooter, It as AvatarFallback, J as MessageReactionPickerContent, Jn as useParentOverlayKind, Jt as DropdownMenuItemLabel, K as MessageReactionErrorIndicator, Kn as Spinner, Kt as DropdownMenuItem, L as MessageReferenceChip, Ln as DialogHeader, Lt as AvatarGroup, M as MessageTextSelectionToolbarButton, Mn as DialogBody, Mt as MessageItem, N as MessageTextSelectionToolbarSeparator, Nn as DialogClose, Nt as searchHit, O as MessageEmbedFooter, On as TooltipProvider, Ot as MessageItemSearchMatch, P as MessageMultiSelect, Pn as DialogContent, Pt as Avatar, Q as MessageReactionTooltipContent, Qn as useTheme, Qt as DropdownMenuRadioGroup, R as MessageReferenceIndicator, Rn as DialogNav, Rt as AvatarGroupCount, S as MessageQuotedPreviewText, Sn as Checkbox, St as MessageItemAttachments, T as MessageQuotedPreviewUnavailable, Tn as Tooltip, Tt as MessageItemEdited, U as MessageReactionAddButton, Un as DialogTrigger, Ut as DropdownMenuCheckboxItemIndicator, V as MessageReferenceText, Vn as DialogSurface, Vt as DropdownMenu, W as MessageReactionChip, Wn as Button, Wt as DropdownMenuContent, X as MessageReactionQuickButton, Xn as resolveThemeScopeProps, Xt as DropdownMenuPopup, Y as MessageReactionPickerStatic, Yn as withOverlayLayer, Yt as DropdownMenuLabel, Z as MessageReactionQuickRow, Zn as useThemeScopeProps, Zt as DropdownMenuPortal, _ as MessageQuotedPreviewAuthorName, _n as ScrollAreaCorner, _t as MessageItemSender, an as DropdownMenuTrigger, at as MessageItemBadgeSeparator, b as MessageQuotedPreviewHeader, bn as ScrollAreaViewport, bt as MessageItemSenderGroup, c as MessageListHistoryLimited, cn as Panel, ct as MessageItemToolbar, d as MessageQuotedPreview, dn as PanelHeaderRoot, en as DropdownMenuRadioItemIndicator, er as tv, et as MessageReactionTooltipName, f as MessageQuotedPreviewAttachment, fn as PanelScrollContent, g as MessageQuotedPreviewAuthorMeta, gn as ScrollAreaContent, gt as MessageItemMeta, hn as ScrollArea, ht as MessageItemInlineStatus, in as DropdownMenuSubmenuTrigger, it as MessageItemBadge, j as MessageTextSelectionToolbar, jn as Dialog, jt as MessageItemGutter, k as MessageEmbedHeader, kn as TooltipTrigger, kt as MessageItemAvatarSlot, l as MessageListNotice, ln as PanelBody, lt as MessageItemToolbarButton, m as MessageQuotedPreviewAuthor, mn as PanelSection, mt as MessageItemHeader, n as useMouseOnlyPointerSensor, nn as DropdownMenuShortcut, nr as headEdgePull, nt as MessageReactionTooltipNames, on as Kbd, ot as MessageItemReadReceipt, p as MessageQuotedPreviewAttachments, pn as PanelScrollViewport, q as MessageReactionGlyph, qn as defaultNativeButton, qt as DropdownMenuItemCount, rn as DropdownMenuSubmenu, rr as headEdges, rt as MessageReactionTooltipSeparator, s as MessageListDateDivider, sn as KbdGroup, st as MessageItemSavedIndicator, t as useHoldThenMoveTouchSensor, tn as DropdownMenuSeparator, tr as controlIconInset, tt as MessageReactionTooltipNameText, u as MessageList, un as PanelFooter, v as MessageQuotedPreviewChannel, vn as ScrollAreaScrollbar, vt as MessageItemSenderBadges, w as MessageQuotedPreviewTimestamp, wn as PRESENCE_COLOR, wt as MessageItemContent, x as MessageQuotedPreviewLoading, xn as useMobileViewport, xt as MessageItemTime, y as MessageQuotedPreviewContent, yn as ScrollAreaThumb, yt as MessageItemSenderButton, z as MessageReferenceLabel, zn as DialogOverlay, zt as AvatarImage } from "./touch-drag-CbWqiMlZ.mjs";
3
3
  import { Dialog as Dialog$1 } from "@base-ui/react/dialog";
4
4
  import { AlertTriangle, Bell, Check, CheckCircle2, ChevronDown, ChevronLeft, ChevronRight, Copy, FileText, Image, Info, 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";
@@ -23,7 +23,7 @@ import { Switch as Switch$1 } from "@base-ui/react/switch";
23
23
  import { Toggle } from "@base-ui/react/toggle";
24
24
  import { ToggleGroup as ToggleGroup$1 } from "@base-ui/react/toggle-group";
25
25
  import { Progress as Progress$1 } from "@base-ui/react/progress";
26
- import { DndContext, DragOverlay, KeyboardCode, KeyboardSensor, PointerSensor, TouchSensor, closestCenter, closestCorners, getFirstCollision, pointerWithin, useDraggable, useDroppable, useSensor, useSensors } from "@dnd-kit/core";
26
+ import { DndContext, DragOverlay, KeyboardCode, KeyboardSensor, closestCenter, closestCorners, getFirstCollision, pointerWithin, useDraggable, useDroppable, useSensor, useSensors } from "@dnd-kit/core";
27
27
  import { SortableContext, arrayMove, defaultAnimateLayoutChanges, horizontalListSortingStrategy, sortableKeyboardCoordinates, useSortable, verticalListSortingStrategy } from "@dnd-kit/sortable";
28
28
  import { CSS } from "@dnd-kit/utilities";
29
29
  import { Toast } from "@base-ui/react/toast";
@@ -880,7 +880,7 @@ const card = tv({
880
880
  * in the control plane, and its title drops from the card-title scale
881
881
  * to the field scale so it cannot outrank the field label above it. */
882
882
  option: {
883
- root: ["rounded-control border border-line-field bg-layer-card", "shadow-none"],
883
+ root: ["rounded-control border-[1.5px] border-line-field bg-layer-card", "shadow-none"],
884
884
  header: ["gap-x-3 p-3"],
885
885
  content: ["px-3 pb-3"],
886
886
  title: ["font-sans text-callout font-semibold"],
@@ -3682,7 +3682,7 @@ const Label = Object.assign(LabelRoot, {
3682
3682
  //#region src/components/input/input.recipe.ts
3683
3683
  const input = tv({ slots: { root: [
3684
3684
  "h-control w-full px-3 py-0 font-heading text-field font-field outline-none",
3685
- "rounded-control border border-line-field bg-layer-card",
3685
+ "rounded-control border-[1.5px] border-line-field bg-layer-card",
3686
3686
  "text-foreground placeholder:text-foreground-hint",
3687
3687
  "shadow-none transition-shadow duration-90 ease-out focus-visible:shadow-focus",
3688
3688
  "data-invalid:border-danger-strong",
@@ -3806,7 +3806,7 @@ const inputGroup = tv({
3806
3806
  root: [
3807
3807
  "group/input-group relative flex w-full min-w-0 items-center",
3808
3808
  "has-data-[input-group-trim=inline-end]:[--ig-control-pr:0]",
3809
- "h-control overflow-hidden rounded-control border border-line-field bg-layer-card text-foreground",
3809
+ "h-control overflow-hidden rounded-control border-[1.5px] border-line-field bg-layer-card text-foreground",
3810
3810
  "shadow-none transition-shadow duration-90 ease-out has-focus-visible:shadow-focus",
3811
3811
  "has-[[data-slot=input-group-control][data-invalid]]:border-danger-strong",
3812
3812
  "has-[[data-slot=input-group-control]:disabled]:cursor-not-allowed has-[[data-slot=input-group-control]:disabled]:border-line-hairline has-[[data-slot=input-group-control]:disabled]:bg-fill-muted",
@@ -4002,7 +4002,7 @@ const combobox = tv({
4002
4002
  "[&_[data-slot='combobox-clear']]:size-5 [&_[data-slot='combobox-clear']]:min-w-5 **:data-[slot='combobox-clear']:shrink-0",
4003
4003
  "[&_[data-slot='combobox-trigger-indicator']]:size-4",
4004
4004
  "[&_[data-slot='combobox-trigger-indicator']>svg]:shrink-0",
4005
- "min-h-control rounded-control border border-line-field bg-layer-card px-3 py-0",
4005
+ "min-h-control rounded-control border-[1.5px] border-line-field bg-layer-card px-3 py-0",
4006
4006
  "font-sans text-body text-foreground",
4007
4007
  "transition-shadow duration-90 ease-out has-focus-visible:shadow-focus",
4008
4008
  "[&>svg]:text-foreground-hint [&>svg:not([class*='size-'])]:size-4.5",
@@ -4056,7 +4056,7 @@ const combobox = tv({
4056
4056
  groupLabel: ["py-2", "px-2.5 pt-2 pb-1 text-caption font-bold text-foreground-hint"],
4057
4057
  chips: [
4058
4058
  "flex flex-wrap items-center",
4059
- "min-h-control gap-1.5 rounded-control border border-line-field bg-layer-card py-1.5 pr-3 pl-1.5",
4059
+ "min-h-control gap-1.5 rounded-control border-[1.5px] border-line-field bg-layer-card py-1.5 pr-3 pl-1.5",
4060
4060
  "transition-shadow duration-90 ease-out has-focus-visible:shadow-focus"
4061
4061
  ],
4062
4062
  chip: [
@@ -4433,7 +4433,7 @@ const select = tv({
4433
4433
  "[&>span[data-slot='select-trigger-content']]:min-w-0 [&>span[data-slot='select-trigger-content']]:flex-1",
4434
4434
  "[&_[data-slot='select-trigger-content']_svg]:shrink-0",
4435
4435
  "h-control w-full gap-2 pr-3 pl-3.5",
4436
- "border border-line-field",
4436
+ "border-[1.5px] border-line-field",
4437
4437
  "text-subhead font-semibold text-foreground",
4438
4438
  "data-placeholder:font-medium data-placeholder:text-foreground-hint",
4439
4439
  "data-invalid:border-danger-strong data-invalid:hover:border-danger-strong",
@@ -5029,7 +5029,7 @@ const textarea = tv({ slots: { root: [
5029
5029
  "scroll-pb-(--ta-scroll-pb,0)",
5030
5030
  "font-heading text-field font-field outline-none",
5031
5031
  "py-2.5",
5032
- "rounded-control border border-line-field bg-layer-card",
5032
+ "rounded-control border-[1.5px] border-line-field bg-layer-card",
5033
5033
  "text-foreground placeholder:text-foreground-hint",
5034
5034
  "shadow-none transition-shadow duration-90 ease-out focus-visible:shadow-focus",
5035
5035
  "data-invalid:border-danger-strong",
@@ -8582,7 +8582,7 @@ function FileAction({ variant, size = "icon-sm", ...props }) {
8582
8582
  const composer = tv({ slots: {
8583
8583
  root: [
8584
8584
  "flex w-full flex-col gap-2 p-2",
8585
- "rounded-container border px-3 pt-3 pb-2",
8585
+ "rounded-container border-[1.5px] px-3 pt-3 pb-2",
8586
8586
  "border-line-field bg-layer-card text-foreground shadow-none",
8587
8587
  "has-focus-visible:shadow-focus"
8588
8588
  ],
@@ -9065,10 +9065,7 @@ function SortableComposerAttachmentsRoot({ items, onReorder, children, axis, str
9065
9065
  const [listMinHeight, setListMinHeight] = useState();
9066
9066
  const draftIdsRef = useRef([]);
9067
9067
  const lastReorderPointerRef = useRef(null);
9068
- const sensors = useSensors(useSensor(PointerSensor, { activationConstraint: { distance: 6 } }), useSensor(TouchSensor, { activationConstraint: {
9069
- delay: 350,
9070
- tolerance: 8
9071
- } }), useSensor(KeyboardSensor, { coordinateGetter: sortableKeyboardCoordinates }));
9068
+ const sensors = useSensors(useMouseOnlyPointerSensor(6), useHoldThenMoveTouchSensor(), useSensor(KeyboardSensor, { coordinateGetter: sortableKeyboardCoordinates }));
9072
9069
  const attachments = useMemo(() => attachmentsById(children), [children]);
9073
9070
  const itemIds = useMemo(() => items.map(String), [items]);
9074
9071
  const horizontal = axis === "x";
@@ -9189,7 +9186,7 @@ function SortableComposerAttachment({ id, label, children }) {
9189
9186
  return /* @__PURE__ */ jsx("div", {
9190
9187
  ref: setNodeRef,
9191
9188
  "aria-label": `Reorder ${label}`,
9192
- className: "w-max max-w-full shrink-0 cursor-grab touch-none active:cursor-grabbing",
9189
+ className: "w-max max-w-full shrink-0 cursor-grab touch-manipulation select-none [-webkit-touch-callout:none] active:cursor-grabbing",
9193
9190
  "data-dragging": isDragging ? "true" : void 0,
9194
9191
  "data-slot": "sortable-composer-attachment",
9195
9192
  style,
@@ -10735,7 +10732,7 @@ const tabs = tv({
10735
10732
  ],
10736
10733
  background: ["", "hidden"],
10737
10734
  tab: [
10738
- "relative z-10 flex shrink-0 cursor-pointer touch-manipulation items-center gap-1.5 whitespace-nowrap outline-none",
10735
+ "relative z-10 flex shrink-0 cursor-pointer touch-manipulation select-none [-webkit-touch-callout:none] items-center gap-1.5 whitespace-nowrap outline-none",
10739
10736
  "data-[reorderable=true]:cursor-pointer data-[dragging-source=true]:cursor-grabbing",
10740
10737
  "font-sans text-callout font-semibold text-foreground-muted",
10741
10738
  "transition-[background-color,box-shadow,color] duration-100 ease-out",
@@ -10949,14 +10946,11 @@ function TabsList({ className, children, variant = "default", ref, ...props }) {
10949
10946
  })
10950
10947
  });
10951
10948
  }
10952
- function SortableTabsList({ value, onReorder, children, variant = "default", ...props }) {
10949
+ function SortableTabsList({ value, onReorder, onDragStart, children, variant = "default", ...props }) {
10953
10950
  const [activeId, setActiveId] = useState(void 0);
10954
10951
  const placement = use(TabsPlacementContext);
10955
10952
  const dndContextId = useId();
10956
- const sensors = useSensors(useSensor(PointerSensor, { activationConstraint: { distance: 6 } }), useSensor(TouchSensor, { activationConstraint: {
10957
- delay: 350,
10958
- tolerance: 8
10959
- } }));
10953
+ const sensors = useSensors(useMouseOnlyPointerSensor(6), useHoldThenMoveTouchSensor());
10960
10954
  const tabIds = useMemo(() => value.map(String), [value]);
10961
10955
  const reorderContext = useMemo(() => ({
10962
10956
  enabled: true,
@@ -10964,7 +10958,8 @@ function SortableTabsList({ value, onReorder, children, variant = "default", ...
10964
10958
  }), [activeId]);
10965
10959
  const handleDragStart = useCallback(({ active }) => {
10966
10960
  setActiveId(String(active.id));
10967
- }, []);
10961
+ onDragStart?.(String(active.id));
10962
+ }, [onDragStart]);
10968
10963
  const handleDragCancel = useCallback(() => {
10969
10964
  setActiveId(void 0);
10970
10965
  }, []);
@@ -12505,7 +12500,7 @@ function TaskCardStatus({ busy = false, status, className, render, children, ...
12505
12500
  //#region src/components/task-dnd/task-dnd.recipe.ts
12506
12501
  const taskDnd = tv({ slots: {
12507
12502
  draggable: [
12508
- "group/task-draggable relative cursor-grab touch-none active:cursor-grabbing",
12503
+ "group/task-draggable relative cursor-grab touch-manipulation select-none [-webkit-touch-callout:none] active:cursor-grabbing",
12509
12504
  "outline-none",
12510
12505
  "data-[dragging=true]:z-20 data-[dragging=true]:will-change-transform",
12511
12506
  "data-[disabled=true]:cursor-default data-[disabled=true]:touch-auto",
@@ -12541,10 +12536,7 @@ function TaskDndProvider({ children, accessibility, disabled = false, isDropAllo
12541
12536
  const [activeId, setActiveId] = useState(null);
12542
12537
  const [activeHeight, setActiveHeight] = useState(null);
12543
12538
  const [overStore] = useState(createTaskDndOverStore);
12544
- const sensors = useSensors(useSensor(PointerSensor, { activationConstraint: { distance: 5 } }), useSensor(TouchSensor, { activationConstraint: {
12545
- delay: 200,
12546
- tolerance: 5
12547
- } }), useSensor(KeyboardSensor, { coordinateGetter: taskKeyboardCoordinates }));
12539
+ const sensors = useSensors(useMouseOnlyPointerSensor(5), useHoldThenMoveTouchSensor(), useSensor(KeyboardSensor, { coordinateGetter: taskKeyboardCoordinates }));
12548
12540
  const context = useMemo(() => ({
12549
12541
  activeId,
12550
12542
  activeHeight,
@@ -16809,7 +16801,7 @@ function SearchThreadResultMessages({ className, render, ...props }) {
16809
16801
  const searchTrigger = tv({ slots: {
16810
16802
  root: [
16811
16803
  "relative inline-flex h-9 w-[clamp(360px,32vw,520px)] max-w-full min-w-0 shrink-0 items-center gap-2 px-3",
16812
- "rounded-control border border-line-field bg-layer-card",
16804
+ "rounded-control border-[1.5px] border-line-field bg-layer-card",
16813
16805
  "text-left font-sans text-body font-normal text-foreground-hint",
16814
16806
  "select-none outline-none transition-colors duration-100",
16815
16807
  "hover:press-overlay active:press-overlay focus-visible:shadow-focus",
package/dist/style.css CHANGED
@@ -1062,7 +1062,7 @@
1062
1062
  box-sizing: border-box;
1063
1063
  min-width: 0;
1064
1064
  min-height: var(--control-height);
1065
- border: 1px solid var(--line-field);
1065
+ border: 1.5px solid var(--line-field);
1066
1066
  background: var(--layer-card);
1067
1067
  color: var(--foreground);
1068
1068
  font-size: var(--field-font-size);
package/dist/styles.css CHANGED
@@ -479,6 +479,30 @@ body {
479
479
  position: relative;
480
480
  }
481
481
 
482
+ /* Browser autofill paints its own fill over a field (Chrome's pale blue,
483
+ Safari's yellow), so a filled-in login form showed fields that matched no
484
+ other field (design/foundations/states.md#autofill). The browser sets that
485
+ fill !important, so it can't be overridden; delaying the transition into it
486
+ keeps the field on its own surface, and the text keeps the field's ink.
487
+ box-shadow keeps the fields' own transition (the focus ring). The delay
488
+ also holds the field's own background while it stays autofilled: switching
489
+ light and dark mode then keeps the old surface until the field is edited. */
490
+ input:-webkit-autofill,
491
+ textarea:-webkit-autofill,
492
+ select:-webkit-autofill {
493
+ -webkit-text-fill-color: var(--foreground);
494
+ caret-color: var(--foreground);
495
+ transition:
496
+ background-color 0s 600000s,
497
+ color 0s 600000s,
498
+ box-shadow 90ms cubic-bezier(0, 0, 0.2, 1);
499
+ }
500
+
501
+ input:-webkit-autofill:disabled,
502
+ textarea:-webkit-autofill:disabled {
503
+ -webkit-text-fill-color: var(--foreground-disabled);
504
+ }
505
+
482
506
  /* The passages comments are on, painted with the CSS Custom Highlight API so
483
507
  the document's DOM is never changed (setCommentHighlights registers the
484
508
  ranges; design/patterns/comments.md). Every commented passage gets the soft
package/dist/tokens.json CHANGED
@@ -1645,7 +1645,7 @@
1645
1645
  },
1646
1646
  "field": {
1647
1647
  "$value": "{line.strong}",
1648
- "$description": "The frame of a field and the composer: the ink of line-strong, drawn 1px.",
1648
+ "$description": "The frame of a field and the composer: the ink and width of line-strong, drawn 1.5px.",
1649
1649
  "$extensions": {
1650
1650
  "build.botiverse.raft": {
1651
1651
  "scope": "every-mode"
@@ -14,6 +14,7 @@ import { Avatar } from "@base-ui/react";
14
14
  import { Menu } from "@base-ui/react/menu";
15
15
  import { Toggle } from "@base-ui/react/toggle";
16
16
  import { Toolbar } from "@base-ui/react/toolbar";
17
+ import { PointerSensor, TouchSensor, useSensor } from "@dnd-kit/core";
17
18
  //#region src/lib/head-edges.ts
18
19
  /**
19
20
  * The ends of a header (design/foundations/alignment.md#the-ends-of-a-header).
@@ -3287,5 +3288,99 @@ function MessageListJumpPillDismiss({ className, children, render, nativeButton,
3287
3288
  })
3288
3289
  });
3289
3290
  }
3291
+ const holds = /* @__PURE__ */ new WeakMap();
3292
+ function touchPoint(event) {
3293
+ const touch = event.touches?.[0] ?? event.changedTouches?.[0];
3294
+ return touch ? {
3295
+ x: touch.clientX,
3296
+ y: touch.clientY
3297
+ } : null;
3298
+ }
3299
+ function farther(from, to, limit) {
3300
+ return Math.hypot(to.x - from.x, to.y - from.y) > limit;
3301
+ }
3302
+ var HoldThenMoveTouchSensorImpl = class extends TouchSensor {
3303
+ static activators = TouchSensor.activators;
3304
+ static setup() {
3305
+ return TouchSensor.setup();
3306
+ }
3307
+ attach() {
3308
+ super.attach();
3309
+ const self = this;
3310
+ const { holdMs = 500 } = self.props.options;
3311
+ const state = {
3312
+ heldAt: null,
3313
+ last: null,
3314
+ timer: setTimeout(() => {
3315
+ state.heldAt = state.last ?? self.initialCoordinates;
3316
+ }, holdMs)
3317
+ };
3318
+ holds.set(this, state);
3319
+ }
3320
+ handleMove(event) {
3321
+ const self = this;
3322
+ const state = holds.get(this);
3323
+ if (self.activated || !state) {
3324
+ super.handleMove(event);
3325
+ return;
3326
+ }
3327
+ if ((event.touches?.length ?? 1) > 1) {
3328
+ self.handleCancel();
3329
+ return;
3330
+ }
3331
+ const point = touchPoint(event);
3332
+ const start = self.initialCoordinates;
3333
+ if (!point || !start) return;
3334
+ state.last = point;
3335
+ const { distance = 10, tolerance = 10 } = self.props.options;
3336
+ if (!state.heldAt) {
3337
+ if (farther(start, point, tolerance)) self.handleCancel();
3338
+ return;
3339
+ }
3340
+ if (event.cancelable) event.preventDefault();
3341
+ if (farther(state.heldAt, point, distance)) self.handleStart();
3342
+ }
3343
+ detach() {
3344
+ const state = holds.get(this);
3345
+ if (state) clearTimeout(state.timer);
3346
+ holds.delete(this);
3347
+ super.detach();
3348
+ }
3349
+ };
3350
+ /** A TouchSensor that starts a drag on the first move after a still hold (see above). */
3351
+ const HoldThenMoveTouchSensor = HoldThenMoveTouchSensorImpl;
3352
+ /**
3353
+ * dnd-kit's PointerSensor for a mouse and a pen only: a finger's pointerdown is
3354
+ * left to `HoldThenMoveTouchSensor`.
3355
+ */
3356
+ var MouseOnlyPointerSensor = class extends PointerSensor {
3357
+ static activators = [{
3358
+ eventName: "onPointerDown",
3359
+ handler: (event, options) => event.nativeEvent.pointerType === "touch" ? false : PointerSensor.activators[0].handler(event, options)
3360
+ }];
3361
+ };
3362
+ /**
3363
+ * `useSensor(HoldThenMoveTouchSensor, …)` with the activation the sensor relies
3364
+ * on: no constraint dnd-kit would act on by itself, so only a move after the
3365
+ * hold starts the drag.
3366
+ */
3367
+ function useHoldThenMoveTouchSensor({ holdMs = 500, distance = 10, tolerance = 10 } = {}) {
3368
+ const options = useMemo(() => ({
3369
+ holdMs,
3370
+ distance,
3371
+ tolerance,
3372
+ activationConstraint: { distance: Number.POSITIVE_INFINITY }
3373
+ }), [
3374
+ holdMs,
3375
+ distance,
3376
+ tolerance
3377
+ ]);
3378
+ return useSensor(HoldThenMoveTouchSensor, options);
3379
+ }
3380
+ /** The mouse / pen sensor that goes with it: picks up after `distance` px. */
3381
+ function useMouseOnlyPointerSensor(distance) {
3382
+ const options = useMemo(() => ({ activationConstraint: { distance } }), [distance]);
3383
+ return useSensor(MouseOnlyPointerSensor, options);
3384
+ }
3290
3385
  //#endregion
3291
- export { MessageReactionTooltipNameText as $, controlIconInset as $n, DropdownMenuSeparator as $t, MessageTextSelectionToolbarButton as A, DialogBody as An, MessageItem as At, MessageReferenceUnavailable as B, DialogTitle as Bn, DropdownMenuCheckboxItem as Bt, MessageQuotedPreviewUnavailable as C, Tooltip$1 as Cn, MessageItemEdited as Ct, MessageEmbedHeader as D, TooltipTrigger as Dn, MessageItemAvatarSlot as Dt, MessageEmbedFooter as E, TooltipProvider as En, MessageItemSearchMatch as Et, MessageReferenceChip as F, DialogHeader as Fn, AvatarGroup as Ft, MessageReactionGlyph as G, defaultNativeButton as Gn, DropdownMenuItemCount as Gt, MessageReactionChip as H, Button$1 as Hn, DropdownMenuContent as Ht, MessageReferenceIndicator as I, DialogNav as In, AvatarGroupCount as It, MessageReactionQuickButton as J, resolveThemeScopeProps as Jn, DropdownMenuPopup as Jt, MessageReactionPickerContent as K, useParentOverlayKind as Kn, DropdownMenuItemLabel as Kt, MessageReferenceLabel as L, DialogOverlay as Ln, AvatarImage as Lt, MessageMultiSelect as M, DialogContent as Mn, Avatar$1 as Mt, MessageMultiSelectCheckbox as N, DialogDescription as Nn, AvatarBadge as Nt, messageEmbed as O, Badge as On, MessageItemContinuationTime as Ot, MessageMultiSelectToolbar as P, DialogFooter as Pn, AvatarFallback as Pt, MessageReactionTooltipName as Q, tv$1 as Qn, DropdownMenuRadioItemIndicator as Qt, MessageReferencePending as R, DialogPortal as Rn, useOverflowTitle as Rt, MessageQuotedPreviewTimestamp as S, PRESENCE_COLOR as Sn, MessageItemContent as St, MessageEmbedContent as T, TooltipPortal as Tn, MessageItemFooter as Tt, MessageReactionCount as U, buttonVariants as Un, DropdownMenuFooter as Ut, MessageReactionAddButton as V, DialogTrigger as Vn, DropdownMenuCheckboxItemIndicator as Vt, MessageReactionErrorIndicator as W, Spinner as Wn, DropdownMenuItem as Wt, MessageReactionTooltipContent as X, useTheme as Xn, DropdownMenuRadioGroup as Xt, MessageReactionQuickRow as Y, useThemeScopeProps as Yn, DropdownMenuPortal as Yt, MessageReactionTooltipMeta as Z, ThemeStateContext as Zn, DropdownMenuRadioItem as Zt, MessageQuotedPreviewContent as _, ScrollAreaThumb as _n, MessageItemSenderButton as _t, MessageListDateDivider as a, KbdGroup as an, MessageItemSavedIndicator as at, MessageQuotedPreviewText as b, Checkbox$1 as bn, MessageItemAttachments as bt, MessageList as c, PanelFooter as cn, MessageItemDelegatedAvatar as ct, MessageQuotedPreviewAttachments as d, PanelScrollViewport as dn, MessageItemDelegatedByName as dt, DropdownMenuShortcut as en, headEdgePull as er, MessageReactionTooltipNames as et, MessageQuotedPreviewAuthor as f, PanelSection as fn, MessageItemHeader as ft, MessageQuotedPreviewChannel as g, ScrollAreaScrollbar as gn, MessageItemSenderBadges as gt, MessageQuotedPreviewAuthorName as h, ScrollAreaCorner as hn, MessageItemSender as ht, MessageListJumpPillGroup as i, Kbd as in, MessageItemReadReceipt as it, MessageTextSelectionToolbarSeparator as j, DialogClose as jn, searchHit as jt, MessageTextSelectionToolbar as k, Dialog$1 as kn, MessageItemGutter as kt, MessageQuotedPreview as l, PanelHeaderRoot as ln, MessageItemDelegatedBy as lt, MessageQuotedPreviewAuthorMeta as m, ScrollAreaContent as mn, MessageItemMeta as mt, MessageListJumpPill as n, DropdownMenuSubmenuTrigger as nn, MessageItemBadge as nt, MessageListHistoryLimited as o, Panel as on, MessageItemToolbar as ot, MessageQuotedPreviewAuthorDelegatedBy as p, ScrollArea$1 as pn, MessageItemInlineStatus as pt, MessageReactionPickerStatic as q, withOverlayLayer as qn, DropdownMenuLabel as qt, MessageListJumpPillDismiss as r, DropdownMenuTrigger as rn, MessageItemBadgeSeparator as rt, MessageListNotice as s, PanelBody as sn, MessageItemToolbarButton as st, MessageListJumpControls as t, DropdownMenuSubmenu as tn, headEdges as tr, MessageReactionTooltipSeparator as tt, MessageQuotedPreviewAttachment as u, PanelScrollContent as un, MessageItemDelegatedByButton as ut, MessageQuotedPreviewHeader as v, ScrollAreaViewport as vn, MessageItemSenderGroup as vt, MessageEmbed as w, TooltipContent as wn, MessageItemEmbedded as wt, MessageQuotedPreviewThread as x, CheckboxIndicator as xn, MessageItemBody as xt, MessageQuotedPreviewLoading as y, useMobileViewport as yn, MessageItemTime as yt, MessageReferenceText as z, DialogSurface as zn, DropdownMenu as zt };
3386
+ export { MessageReactionTooltipMeta as $, ThemeStateContext as $n, DropdownMenuRadioItem as $t, messageEmbed as A, Badge as An, MessageItemContinuationTime as At, MessageReferencePending as B, DialogPortal as Bn, useOverflowTitle as Bt, MessageQuotedPreviewThread as C, CheckboxIndicator as Cn, MessageItemBody as Ct, MessageEmbedContent as D, TooltipPortal as Dn, MessageItemFooter as Dt, MessageEmbed as E, TooltipContent as En, MessageItemEmbedded as Et, MessageMultiSelectCheckbox as F, DialogDescription as Fn, AvatarBadge as Ft, MessageReactionCount as G, buttonVariants as Gn, DropdownMenuFooter as Gt, MessageReferenceUnavailable as H, DialogTitle as Hn, DropdownMenuCheckboxItem as Ht, MessageMultiSelectToolbar as I, DialogFooter as In, AvatarFallback as It, MessageReactionPickerContent as J, useParentOverlayKind as Jn, DropdownMenuItemLabel as Jt, MessageReactionErrorIndicator as K, Spinner as Kn, DropdownMenuItem as Kt, MessageReferenceChip as L, DialogHeader as Ln, AvatarGroup as Lt, MessageTextSelectionToolbarButton as M, DialogBody as Mn, MessageItem as Mt, MessageTextSelectionToolbarSeparator as N, DialogClose as Nn, searchHit as Nt, MessageEmbedFooter as O, TooltipProvider as On, MessageItemSearchMatch as Ot, MessageMultiSelect as P, DialogContent as Pn, Avatar$1 as Pt, MessageReactionTooltipContent as Q, useTheme as Qn, DropdownMenuRadioGroup as Qt, MessageReferenceIndicator as R, DialogNav as Rn, AvatarGroupCount as Rt, MessageQuotedPreviewText as S, Checkbox$1 as Sn, MessageItemAttachments as St, MessageQuotedPreviewUnavailable as T, Tooltip$1 as Tn, MessageItemEdited as Tt, MessageReactionAddButton as U, DialogTrigger as Un, DropdownMenuCheckboxItemIndicator as Ut, MessageReferenceText as V, DialogSurface as Vn, DropdownMenu as Vt, MessageReactionChip as W, Button$1 as Wn, DropdownMenuContent as Wt, MessageReactionQuickButton as X, resolveThemeScopeProps as Xn, DropdownMenuPopup as Xt, MessageReactionPickerStatic as Y, withOverlayLayer as Yn, DropdownMenuLabel as Yt, MessageReactionQuickRow as Z, useThemeScopeProps as Zn, DropdownMenuPortal as Zt, MessageQuotedPreviewAuthorName as _, ScrollAreaCorner as _n, MessageItemSender as _t, MessageListJumpPillDismiss as a, DropdownMenuTrigger as an, MessageItemBadgeSeparator as at, MessageQuotedPreviewHeader as b, ScrollAreaViewport as bn, MessageItemSenderGroup as bt, MessageListHistoryLimited as c, Panel as cn, MessageItemToolbar as ct, MessageQuotedPreview as d, PanelHeaderRoot as dn, MessageItemDelegatedBy as dt, DropdownMenuRadioItemIndicator as en, tv$1 as er, MessageReactionTooltipName as et, MessageQuotedPreviewAttachment as f, PanelScrollContent as fn, MessageItemDelegatedByButton as ft, MessageQuotedPreviewAuthorMeta as g, ScrollAreaContent as gn, MessageItemMeta as gt, MessageQuotedPreviewAuthorDelegatedBy as h, ScrollArea$1 as hn, MessageItemInlineStatus as ht, MessageListJumpPill as i, DropdownMenuSubmenuTrigger as in, MessageItemBadge as it, MessageTextSelectionToolbar as j, Dialog$1 as jn, MessageItemGutter as jt, MessageEmbedHeader as k, TooltipTrigger as kn, MessageItemAvatarSlot as kt, MessageListNotice as l, PanelBody as ln, MessageItemToolbarButton as lt, MessageQuotedPreviewAuthor as m, PanelSection as mn, MessageItemHeader as mt, useMouseOnlyPointerSensor as n, DropdownMenuShortcut as nn, headEdgePull as nr, MessageReactionTooltipNames as nt, MessageListJumpPillGroup as o, Kbd as on, MessageItemReadReceipt as ot, MessageQuotedPreviewAttachments as p, PanelScrollViewport as pn, MessageItemDelegatedByName as pt, MessageReactionGlyph as q, defaultNativeButton as qn, DropdownMenuItemCount as qt, MessageListJumpControls as r, DropdownMenuSubmenu as rn, headEdges as rr, MessageReactionTooltipSeparator as rt, MessageListDateDivider as s, KbdGroup as sn, MessageItemSavedIndicator as st, useHoldThenMoveTouchSensor as t, DropdownMenuSeparator as tn, controlIconInset as tr, MessageReactionTooltipNameText as tt, MessageList as u, PanelFooter as un, MessageItemDelegatedAvatar as ut, MessageQuotedPreviewChannel as v, ScrollAreaScrollbar as vn, MessageItemSenderBadges as vt, MessageQuotedPreviewTimestamp as w, PRESENCE_COLOR as wn, MessageItemContent as wt, MessageQuotedPreviewLoading as x, useMobileViewport as xn, MessageItemTime as xt, MessageQuotedPreviewContent as y, ScrollAreaThumb as yn, MessageItemSenderButton as yt, MessageReferenceLabel as z, DialogOverlay as zn, AvatarImage as zt };
package/dist/wip.d.mts CHANGED
@@ -1,8 +1,9 @@
1
1
  import { C as MessageQuotedPreviewAuthorDelegatedBy, Hi as DialogTitleProps, Ki as ButtonProps, Si as DialogClose, Ti as DialogContentProps, Ui as DialogTrigger, Xi as StyledProps, Yi as DataAttributes, a as MessageListJumpPillDismissProps, c as MessageListJumpPillProps, cn as MessageItemDelegatedAvatar, dn as MessageItemDelegatedByButton, fn as MessageItemDelegatedByButtonProps, hn as MessageItemDelegatedByProps, i as MessageListJumpPillDismiss, ln as MessageItemDelegatedAvatarProps, mn as MessageItemDelegatedByNameProps, n as MessageListJumpControlsProps, o as MessageListJumpPillGroup, pn as MessageItemDelegatedByName, r as MessageListJumpPill, s as MessageListJumpPillGroupProps, t as MessageListJumpControls, un as MessageItemDelegatedBy, w as MessageQuotedPreviewAuthorDelegatedByProps, yi as Dialog } from "./index-DsVVBZ5T.mjs";
2
- import { CSSProperties, ComponentPropsWithRef, ReactNode } from "react";
2
+ import { CSSProperties, ComponentPropsWithRef, PointerEvent, ReactNode } from "react";
3
3
  import { Button } from "@base-ui/react/button";
4
4
  import { useRender } from "@base-ui/react/use-render";
5
5
  import { Combobox } from "@base-ui/react/combobox";
6
+ import { PointerSensor, TouchSensor, TouchSensorOptions } from "@dnd-kit/core";
6
7
  //#region src/components/combobox-select/combobox-select.types.d.ts
7
8
  type ComboboxSelectValue = string | number;
8
9
  interface ComboboxSelectOption {
@@ -265,4 +266,20 @@ type UseCommentMarginFitsOptions = {
265
266
  */
266
267
  export declare function useCommentMarginFits(element: Element | null, { minWidth }?: UseCommentMarginFitsOptions): boolean;
267
268
  //#endregion
268
- export { Dialog as AnnouncementDialog, DialogClose as AnnouncementDialogClose, DialogTrigger as AnnouncementDialogTrigger, type ComboboxSelectGroup, type ComboboxSelectMessages, type ComboboxSelectOption, type ComboboxSelectProps, type ComboboxSelectSelection, type ComboboxSelectValue, type CommentCardMetaProps, type CommentCardProps, type CommentCardQuoteProps, type CommentCardTriggerProps, type CommentEntryAuthorProps, type CommentEntryBodyProps, type CommentEntryHeaderProps, type CommentEntryProps, type CommentEntryTimeProps, type CommentMarginItemProps, type CommentMarginLayout, type CommentMarginLayoutItem, type CommentMarginLayoutOptions, type CommentMarginProps, type CommentMarkerProps, MessageItemDelegatedAvatar, type MessageItemDelegatedAvatarProps, MessageItemDelegatedBy, MessageItemDelegatedByButton, type MessageItemDelegatedByButtonProps, MessageItemDelegatedByName, type MessageItemDelegatedByNameProps, type MessageItemDelegatedByProps, MessageListJumpControls, type MessageListJumpControlsProps, MessageListJumpPill, MessageListJumpPillDismiss, type MessageListJumpPillDismissProps, MessageListJumpPillGroup, type MessageListJumpPillGroupProps, type MessageListJumpPillProps, MessageQuotedPreviewAuthorDelegatedBy, type MessageQuotedPreviewAuthorDelegatedByProps, type UseCommentMarginFitsOptions };
269
+ //#region src/lib/touch-drag.d.ts
270
+ type HoldThenMoveOptions = {
271
+ /** How long the finger stays still before a move can start the drag. */
272
+ holdMs?: number;
273
+ /** How far the finger moves after the hold to start the drag. */
274
+ distance?: number;
275
+ /** How far the finger may drift during the hold before it counts as a scroll. */
276
+ tolerance?: number;
277
+ };
278
+ /**
279
+ * `useSensor(HoldThenMoveTouchSensor, …)` with the activation the sensor relies
280
+ * on: no constraint dnd-kit would act on by itself, so only a move after the
281
+ * hold starts the drag.
282
+ */
283
+ export declare function useHoldThenMoveTouchSensor({ holdMs, distance, tolerance }?: HoldThenMoveOptions): import("@dnd-kit/core").SensorDescriptor<TouchSensorOptions>;
284
+ //#endregion
285
+ export { Dialog as AnnouncementDialog, DialogClose as AnnouncementDialogClose, DialogTrigger as AnnouncementDialogTrigger, type ComboboxSelectGroup, type ComboboxSelectMessages, type ComboboxSelectOption, type ComboboxSelectProps, type ComboboxSelectSelection, type ComboboxSelectValue, type CommentCardMetaProps, type CommentCardProps, type CommentCardQuoteProps, type CommentCardTriggerProps, type CommentEntryAuthorProps, type CommentEntryBodyProps, type CommentEntryHeaderProps, type CommentEntryProps, type CommentEntryTimeProps, type CommentMarginItemProps, type CommentMarginLayout, type CommentMarginLayoutItem, type CommentMarginLayoutOptions, type CommentMarginProps, type CommentMarkerProps, type HoldThenMoveOptions, MessageItemDelegatedAvatar, type MessageItemDelegatedAvatarProps, MessageItemDelegatedBy, MessageItemDelegatedByButton, type MessageItemDelegatedByButtonProps, MessageItemDelegatedByName, type MessageItemDelegatedByNameProps, type MessageItemDelegatedByProps, MessageListJumpControls, type MessageListJumpControlsProps, MessageListJumpPill, MessageListJumpPillDismiss, type MessageListJumpPillDismissProps, MessageListJumpPillGroup, type MessageListJumpPillGroupProps, type MessageListJumpPillProps, MessageQuotedPreviewAuthorDelegatedBy, type MessageQuotedPreviewAuthorDelegatedByProps, type UseCommentMarginFitsOptions };
package/dist/wip.mjs CHANGED
@@ -1,4 +1,4 @@
1
- import { Bn as DialogTitle, Gn as defaultNativeButton, Hn as Button$1, Mn as DialogContent, Qn as tv, Rt as useOverflowTitle, Vn as DialogTrigger, Xn as useTheme, Yn as useThemeScopeProps, ct as MessageItemDelegatedAvatar, dt as MessageItemDelegatedByName, i as MessageListJumpPillGroup, jn as DialogClose, kn as Dialog, lt as MessageItemDelegatedBy, n as MessageListJumpPill, p as MessageQuotedPreviewAuthorDelegatedBy, r as MessageListJumpPillDismiss, t as MessageListJumpControls, ut as MessageItemDelegatedByButton } from "./message-list-03unCFnE.mjs";
1
+ import { Bt as useOverflowTitle, Hn as DialogTitle, Nn as DialogClose, Pn as DialogContent, Qn as useTheme, Un as DialogTrigger, Wn as Button$1, Zn as useThemeScopeProps, a as MessageListJumpPillDismiss, dt as MessageItemDelegatedBy, er as tv, ft as MessageItemDelegatedByButton, h as MessageQuotedPreviewAuthorDelegatedBy, i as MessageListJumpPill, jn as Dialog, o as MessageListJumpPillGroup, pt as MessageItemDelegatedByName, qn as defaultNativeButton, r as MessageListJumpControls, t as useHoldThenMoveTouchSensor, ut as MessageItemDelegatedAvatar } from "./touch-drag-CbWqiMlZ.mjs";
2
2
  import { Check, ChevronDown, LoaderCircle, Plus, X } from "lucide-react";
3
3
  import { createContext, use, useCallback, useEffect, useId, useLayoutEffect, useMemo, useRef, useState, useSyncExternalStore } from "react";
4
4
  import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
@@ -1123,4 +1123,4 @@ function useCommentMarginFits(element, { minWidth = 784 } = {}) {
1123
1123
  return desktop && element !== null && width >= minWidth;
1124
1124
  }
1125
1125
  //#endregion
1126
- export { Dialog as AnnouncementDialog, AnnouncementDialogAction, AnnouncementDialogBody, DialogClose as AnnouncementDialogClose, AnnouncementDialogContent, AnnouncementDialogFooter, AnnouncementDialogHeader, AnnouncementDialogLabel, AnnouncementDialogPicture, AnnouncementDialogSecondaryAction, AnnouncementDialogText, AnnouncementDialogTitle, DialogTrigger as AnnouncementDialogTrigger, COMMENT_HIGHLIGHT, COMMENT_HIGHLIGHT_ACTIVE, ComboboxSelect, CommentCard, CommentCardMeta, CommentCardQuote, CommentCardTrigger, CommentEntry, CommentEntryAuthor, CommentEntryBody, CommentEntryHeader, CommentEntryTime, CommentMargin, CommentMarginItem, CommentMarker, MessageItemDelegatedAvatar, MessageItemDelegatedBy, MessageItemDelegatedByButton, MessageItemDelegatedByName, MessageListJumpControls, MessageListJumpPill, MessageListJumpPillDismiss, MessageListJumpPillGroup, MessageQuotedPreviewAuthorDelegatedBy, resolveCommentMarginLayout, setCommentHighlights, useCommentMarginFits };
1126
+ export { Dialog as AnnouncementDialog, AnnouncementDialogAction, AnnouncementDialogBody, DialogClose as AnnouncementDialogClose, AnnouncementDialogContent, AnnouncementDialogFooter, AnnouncementDialogHeader, AnnouncementDialogLabel, AnnouncementDialogPicture, AnnouncementDialogSecondaryAction, AnnouncementDialogText, AnnouncementDialogTitle, DialogTrigger as AnnouncementDialogTrigger, COMMENT_HIGHLIGHT, COMMENT_HIGHLIGHT_ACTIVE, ComboboxSelect, CommentCard, CommentCardMeta, CommentCardQuote, CommentCardTrigger, CommentEntry, CommentEntryAuthor, CommentEntryBody, CommentEntryHeader, CommentEntryTime, CommentMargin, CommentMarginItem, CommentMarker, MessageItemDelegatedAvatar, MessageItemDelegatedBy, MessageItemDelegatedByButton, MessageItemDelegatedByName, MessageListJumpControls, MessageListJumpPill, MessageListJumpPillDismiss, MessageListJumpPillGroup, MessageQuotedPreviewAuthorDelegatedBy, resolveCommentMarginLayout, setCommentHighlights, useCommentMarginFits, useHoldThenMoveTouchSensor };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@botiverse/raft-ui",
3
- "version": "0.16.0",
3
+ "version": "0.18.0",
4
4
  "description": "React components and CSS foundations for the Raft Design System.",
5
5
  "keywords": [
6
6
  "agent-skills",