@botiverse/raft-ui 0.76.0 → 0.76.1

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,12 @@
1
+ ## [0.76.1](https://github.com/botiverse/raft-design/compare/v0.76.0...v0.76.1) (2026-11-08)
2
+
3
+ ### Fixed
4
+
5
+ - **Select and Combobox lists never scroll sideways**: a Select list reaches into the popup's 4px inset and pads it back, so a `SelectSeparator` meets the popup's edge and stays inside the list, and Select and Combobox lists set `overflow-x-hidden`. ([#1070](https://github.com/botiverse/raft-design/pull/1070))
6
+ - Why: the separator reached 4px past each side of the list, which is the scroller, so the list scrolled sideways by 8px, and a classic scrollbar (Windows) drew a horizontal bar under the runtimes list (Artea, #proj-raft-ui:20a421bd). The list also clipped the line 4px short of the popup's edge.
7
+ - Affects: every Select with a separator, such as the runtime picker's Show installed only row: no sideways scroll, and the line now runs to the popup's border. Options keep their inset. A list action keeps its highlight after it adds items above it, as before.
8
+ - Docs: https://raft-design.botiverse.build/components/scroll-area/
9
+
1
10
  ## [0.76.0](https://github.com/botiverse/raft-design/compare/v0.75.0...v0.76.0) (2026-11-08)
2
11
 
3
12
  ### Changed
@@ -67,7 +67,7 @@ const combobox = tv({
67
67
  ],
68
68
  header: ["flex items-center justify-between px-3", "gap-2 py-1.5 pr-1.5 pl-4"],
69
69
  separator: ["h-px shrink-0 border-0", "bg-line-hairline"],
70
- list: ["max-h-64 overflow-y-auto overscroll-contain", "flex flex-col p-1 scroll-py-1"],
70
+ list: ["max-h-64 overflow-x-hidden overflow-y-auto overscroll-contain", "flex flex-col p-1 scroll-py-1"],
71
71
  item: [
72
72
  "flex w-full shrink-0 cursor-default select-none items-center justify-between overflow-hidden",
73
73
  "text-left outline-none transition-colors",
@@ -44,7 +44,7 @@ const select = tv({
44
44
  "rounded-container bg-layer-popover p-1 text-foreground",
45
45
  "shadow-float ring-1 ring-line-seam"
46
46
  ],
47
- list: ["max-h-64 overflow-y-auto overscroll-contain scroll-py-6", "flex flex-col"],
47
+ list: ["max-h-64 overflow-x-hidden overflow-y-auto overscroll-contain scroll-py-6", "-mx-1 flex flex-col px-1"],
48
48
  item: [
49
49
  "flex w-full shrink-0 cursor-default select-none items-center justify-between overflow-hidden",
50
50
  "text-left outline-none transition-colors",
@@ -151,7 +151,9 @@ function findActionValue(value) {
151
151
  * row, the same position then holds another item while focus stays on the row,
152
152
  * and the next arrow key starts from the wrong place. Once the list has
153
153
  * re-rendered, focus the list and then the row again: the row's focus handler
154
- * re-reads its position and moves the highlight back to it.
154
+ * re-reads its position and moves the highlight back to it. The list takes
155
+ * focus only for this: it has no tabindex of its own, and Chrome focuses a
156
+ * scroller without one only while its content overflows it.
155
157
  */
156
158
  function keepActionHighlighted(event) {
157
159
  const target = event.target;
@@ -160,8 +162,12 @@ function keepActionHighlighted(event) {
160
162
  if (!row) return;
161
163
  requestAnimationFrame(() => {
162
164
  if (!row.isConnected || row.hasAttribute("data-highlighted")) return;
163
- row.closest("[role=\"listbox\"]")?.focus({ preventScroll: true });
165
+ const list = row.closest("[role=\"listbox\"]");
166
+ const lent = list !== null && !list.hasAttribute("tabindex");
167
+ if (lent) list.tabIndex = -1;
168
+ list?.focus({ preventScroll: true });
164
169
  row.focus({ preventScroll: true });
170
+ if (lent) list.removeAttribute("tabindex");
165
171
  });
166
172
  }
167
173
  function Select$1({ chrome = "default", onValueChange, onOpenChange, isItemEqualToValue, itemToStringLabel, itemToStringValue, ...props }) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@botiverse/raft-ui",
3
- "version": "0.76.0",
3
+ "version": "0.76.1",
4
4
  "description": "React components and CSS foundations for the Raft Design System.",
5
5
  "keywords": [
6
6
  "agent-skills",