@botiverse/raft-ui 0.54.0 → 0.55.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,20 @@
1
+ ## [0.55.0](https://github.com/botiverse/raft-design/compare/v0.54.0...v0.55.0) (2026-10-31)
2
+
3
+ ### Added
4
+
5
+ - **MessageEmbed `interactive`:** a card that opens something as a whole (an Artifact card whose title link covers it) hovers with the subtle tier and presses with the medium tier, like a file card. Off by default, so action cards, forwarded bundles and quoted previews built on `MessageEmbed` don't change. ([#915](https://github.com/botiverse/raft-design/pull/915))
6
+
7
+ ### Fixed
8
+
9
+ - **Sidebar section controls are 24px with a 14px icon again** (they had grown to 28px with an 18px icon on 2026-10-18), and reach a 44px hit area on a touch screen through a transparent `::after`. ([#916](https://github.com/botiverse/raft-design/pull/916))
10
+ - **SaveStatus** draws its tick as `circle-check` at 12px, the success icon and size the icon rules give. ([#914](https://github.com/botiverse/raft-design/pull/914))
11
+
12
+ ### Design System
13
+
14
+ - **Expand-type actions (Expand, Focus Mode, Open in New Page) are their own header buttons, left of ⋯, never in it** (stdrc, 2026-10-31). ([#917](https://github.com/botiverse/raft-design/pull/917), [#918](https://github.com/botiverse/raft-design/pull/918))
15
+ - Docs: https://raft-design.botiverse.build/components/panel/
16
+ - **Raft Chat:** Drafts after Saved in the sidebar and on phone Home ([#904](https://github.com/botiverse/raft-design/pull/904)); Mark Thread as Unread in the thread's menus ([#853](https://github.com/botiverse/raft-design/pull/853)); English fixes and their zh sync ([#910](https://github.com/botiverse/raft-design/pull/910), [#912](https://github.com/botiverse/raft-design/pull/912)).
17
+
1
18
  ## [0.54.0](https://github.com/botiverse/raft-design/compare/v0.53.0...v0.54.0) (2026-10-30)
2
19
 
3
20
  ### Added
@@ -1,11 +1,19 @@
1
1
  import { useRender } from "@base-ui/react/use-render";
2
2
  //#region src/components/message-embed/message-embed.d.ts
3
3
  type DivProps = useRender.ComponentProps<"div">;
4
- export declare function MessageEmbed({ className, render, ...props }: DivProps): import("react").ReactElement<unknown, string | import("react").JSXElementConstructor<any>>;
4
+ export declare function MessageEmbed({ interactive, className, render, ...props }: MessageEmbedProps): import("react").ReactElement<unknown, string | import("react").JSXElementConstructor<any>>;
5
5
  export declare function MessageEmbedHeader({ className, render, ...props }: DivProps): import("react").ReactElement<unknown, string | import("react").JSXElementConstructor<any>>;
6
6
  export declare function MessageEmbedContent({ className, render, ...props }: DivProps): import("react").ReactElement<unknown, string | import("react").JSXElementConstructor<any>>;
7
7
  export declare function MessageEmbedFooter({ className, render, ...props }: DivProps): import("react").ReactElement<unknown, string | import("react").JSXElementConstructor<any>>;
8
- export type MessageEmbedProps = DivProps;
8
+ export type MessageEmbedProps = DivProps & {
9
+ /**
10
+ * The whole card opens something (a link or a button in it covers the card):
11
+ * it hovers with the subtle tier and presses with the medium tier, like a
12
+ * file card. Off for a card that only shows content.
13
+ * @default false
14
+ */
15
+ interactive?: boolean;
16
+ };
9
17
  export type MessageEmbedHeaderProps = DivProps;
10
18
  export type MessageEmbedContentProps = DivProps;
11
19
  export type MessageEmbedFooterProps = DivProps;
@@ -2,12 +2,16 @@ import { messageEmbed } from "./message-embed.recipe.mjs";
2
2
  import { mergeProps } from "@base-ui/react/merge-props";
3
3
  import { useRender } from "@base-ui/react/use-render";
4
4
  //#region src/components/message-embed/message-embed.tsx
5
- function MessageEmbed({ className, render, ...props }) {
5
+ function MessageEmbed({ interactive = false, className, render, ...props }) {
6
6
  const { root } = messageEmbed();
7
+ const defaultProps = {
8
+ "data-interactive": interactive ? "true" : void 0,
9
+ className: root({ className })
10
+ };
7
11
  return useRender({
8
12
  defaultTagName: "div",
9
13
  render,
10
- props: mergeProps({ className: root({ className }) }, props),
14
+ props: mergeProps(defaultProps, props),
11
15
  state: { slot: "message-embed" }
12
16
  });
13
17
  }
@@ -4,7 +4,8 @@ const messageEmbed = tv({ slots: {
4
4
  root: [
5
5
  "group block min-w-0 text-left",
6
6
  "rounded-container border border-line-hairline bg-layer-card",
7
- "outline-none focus-visible:shadow-focus"
7
+ "outline-none focus-visible:shadow-focus",
8
+ "data-[interactive=true]:hover:overlay-subtle data-[interactive=true]:active:overlay-medium"
8
9
  ],
9
10
  header: ["min-w-0", "px-3 py-2"],
10
11
  content: ["min-w-0"],
@@ -1,5 +1,5 @@
1
1
  import { tv } from "../../lib/tv.mjs";
2
- import { Check } from "lucide-react";
2
+ import { CircleCheck } from "lucide-react";
3
3
  import { jsx, jsxs } from "react/jsx-runtime";
4
4
  //#region src/components/save-status/save-status.tsx
5
5
  const saveStatus = tv({ slots: {
@@ -11,7 +11,7 @@ const saveStatus = tv({ slots: {
11
11
  saved: [
12
12
  "flex min-w-0 items-center gap-1",
13
13
  "text-foreground-muted",
14
- "[&>svg]:size-3.5 [&>svg]:shrink-0"
14
+ "[&>svg]:size-3 [&>svg]:shrink-0"
15
15
  ],
16
16
  error: ["block wrap-anywhere", "text-danger-strong"]
17
17
  } });
@@ -42,7 +42,7 @@ function SaveStatusSaved({ className, children, ...props }) {
42
42
  "aria-live": "polite",
43
43
  className: saved({ className }),
44
44
  ...props,
45
- children: [hasContent ? /* @__PURE__ */ jsx(Check, {
45
+ children: [hasContent ? /* @__PURE__ */ jsx(CircleCheck, {
46
46
  "aria-hidden": "true",
47
47
  "data-slot": "save-status-icon"
48
48
  }) : null, children]
@@ -11,7 +11,8 @@ const sidebarSectionRecipe = tv({ slots: {
11
11
  sidebarSectionHeader: [
12
12
  "flex items-center justify-between",
13
13
  "group/section-header",
14
- "my-0 h-auto gap-2 px-5 pt-4 pb-0"
14
+ "my-0 h-auto gap-2 px-5 pt-4 pb-0",
15
+ "not-pointer-fine:pb-1.5"
15
16
  ],
16
17
  sidebarSectionDisclosure: [
17
18
  "flex min-w-0 flex-1 items-center",
@@ -32,14 +33,18 @@ const sidebarSectionRecipe = tv({ slots: {
32
33
  ],
33
34
  sidebarSectionTrailing: ["relative flex min-w-4.5 shrink-0 items-center justify-end"],
34
35
  sidebarSectionControls: [
35
- "flex shrink-0 items-center gap-1",
36
+ "flex shrink-0 items-center gap-1 not-pointer-fine:gap-5",
36
37
  "pointer-events-none absolute top-1/2 right-0 -translate-y-1/2 opacity-0",
37
38
  "not-pointer-fine:static not-pointer-fine:pointer-events-auto not-pointer-fine:translate-y-0 not-pointer-fine:opacity-100",
38
39
  "pointer-fine:group-hover/section-header:pointer-events-auto pointer-fine:group-hover/section-header:opacity-100",
39
40
  "pointer-fine:focus-within:pointer-events-auto pointer-fine:focus-within:opacity-100",
40
41
  "pointer-fine:has-data-popup-open:pointer-events-auto pointer-fine:has-data-popup-open:opacity-100"
41
42
  ],
42
- 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"]
43
+ sidebarSectionControl: [
44
+ "relative flex h-6 w-auto min-w-6 shrink-0 items-center justify-center p-0 -my-1",
45
+ "[&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-3.5",
46
+ "not-pointer-fine:after:absolute not-pointer-fine:after:inset-[-11px] not-pointer-fine:after:content-['']"
47
+ ]
43
48
  } });
44
49
  //#endregion
45
50
  export { sidebarSectionRecipe };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@botiverse/raft-ui",
3
- "version": "0.54.0",
3
+ "version": "0.55.0",
4
4
  "description": "React components and CSS foundations for the Raft Design System.",
5
5
  "keywords": [
6
6
  "agent-skills",