From aca92bd94faf85de299458f91093a8d7cda09ae9 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 7 Aug 2026 15:28:23 +0000 Subject: [PATCH] chore: release --- .changeset/add-color-picker.md | 7 --- .changeset/board-selection-and-group-move.md | 55 ----------------- .changeset/fix-collection-item-types.md | 5 -- CHANGELOG.md | 64 ++++++++++++++++++++ package.json | 2 +- 5 files changed, 65 insertions(+), 68 deletions(-) delete mode 100644 .changeset/add-color-picker.md delete mode 100644 .changeset/board-selection-and-group-move.md delete mode 100644 .changeset/fix-collection-item-types.md diff --git a/.changeset/add-color-picker.md b/.changeset/add-color-picker.md deleted file mode 100644 index bcffa4bd7..000000000 --- a/.changeset/add-color-picker.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -'@cube-dev/ui-kit': minor ---- - -Add `ColorPicker` — a form-attachable color input. The field shows the current color as a swatch, accepts hex, `rgb()`, `hsl()`, `okhsl()`, `okhst()` and `oklch()` text, and opens a popover where the color can be tuned on three axes: HST (OKHST hue/saturation/tone), LCH (OKLCH lightness/chroma/hue) or RGB. Every conversion runs through Glaze, so the value is always a real, in-gamut color. - -`formatMode` controls how the text relates to the value: `forced` (default) rewrites the text in `format`, `derive` keeps the notation the user typed but normalizes the value, and `free` passes the text through verbatim after verifying it parses. Also adds a `PipetteIcon`. diff --git a/.changeset/board-selection-and-group-move.md b/.changeset/board-selection-and-group-move.md deleted file mode 100644 index 816abd9e2..000000000 --- a/.changeset/board-selection-and-group-move.md +++ /dev/null @@ -1,55 +0,0 @@ ---- -'@cube-dev/ui-kit': minor ---- - -Add widget selection and rigid group movement to `Board`. - -Set `selectionMode="single" | "multiple"` and read the selection with -`selectedKeys` / `defaultSelectedKeys` / `onSelectionChange` (keys are layout item -ids, always returned in layout order). - -Pressing a widget selects it on pointer-down and arms a drag of the selection — -selecting and grabbing are one gesture, so move the pointer and it drags, stay -still and it was only a selection. Shift (or Cmd/ -Ctrl) toggles membership, dragging from empty canvas lassos -(`allowMarqueeSelection`), Space toggles the focused widget, and -Escape clears. - -Selection behaves like focus: it tracks what the user is working with and moves on -as soon as they touch something else — pressing another widget makes that the -selection, and pressing an interactive control inside a widget or moving focus off -the board drops it entirely. - -With `"multiple"`, dragging any selected widget moves the whole selection as a -rigid block that reflows by the board's own rules — the same compaction a single -widget gets, so a group can never be parked in empty space on a `vertical` board -and the widgets around it close the gap in the same frame. Every widget travels by the same delta, the group clamps against the -grid edge as a unit instead of collapsing into it, a frame that cannot be placed -is rejected outright rather than partially applied, and the move commits through a -single `onLayoutChange`. Arrow keys move the group too. `BoardInteractionInfo` -gains `items`, `oldItems` and `placeholders` describing the whole gesture; the -existing `item` / `oldItem` / `placeholder` fields are unchanged, and a board with -no selection behaves exactly as before. - -The `selectionCancel` selector (board- or widget-level, defaulting to the exported -`BOARD_SELECTION_CANCEL`) marks interactive descendants; `[data-no-select]` opts -out a custom control. On a selectable board it also gates dragging, which fixes a -long-standing trap: `useMove`'s pointer-down calls `preventDefault()`, so without -a `dragCancel` an `input` inside a widget could not be focused or typed into. -Selected widgets are drawn with a `#primary-border` border and a `#primary` ring — -an edge treatment rather than a fill, since selection reads as a focus-like state; -`outline` stays reserved for the real focus ring. Widgets get a `selected` -modifier you can restyle through `widgetProps.styles`. - -`onWidgetsDelete` reports a Delete/Backspace press with a -non-empty selection. Board never mutates the layout itself, so removal stays -yours to implement and to make undoable. - -Accessibility: widget hosts are now `role="group"` with an accessible name from -the new `Board.Widget` `aria-label` prop (falling back to `qa`, then the layout -id). `aria-roledescription` is now localized rather than hardcoded English — it -was previously also invalid, sitting on a role-less element. Selected widgets are -described as "Selected", and selection changes are announced through a polite live -region. - -Widget hosts also expose `data-board-widget-id` and `data-selected`. diff --git a/.changeset/fix-collection-item-types.md b/.changeset/fix-collection-item-types.md deleted file mode 100644 index 8327105d5..000000000 --- a/.changeset/fix-collection-item-types.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@cube-dev/ui-kit': patch ---- - -Fix the types of `FilterListBox.Item` and `CommandMenu.Item`. Both were declared as React Stately's bare `Item`, so `Item` props such as `icon`, `rightIcon`, `description`, `hotkeys` and `actions` were rejected by TypeScript even though they worked at runtime. They now use `CollectionItem`, matching `ListBox.Item`, `Menu.Item` and the other collection components. diff --git a/CHANGELOG.md b/CHANGELOG.md index 2022eb8e4..a3da17d5f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,69 @@ # @cube-dev/ui-kit +## 0.156.0 + +### Minor Changes + +- [#1287](https://github.com/cube-js/cube-ui-kit/pull/1287) [`946f6b85`](https://github.com/cube-js/cube-ui-kit/commit/946f6b8570acd63d97d9e9ba8ebf91459e315e48) Thanks [@tenphi](https://github.com/tenphi)! - Add `ColorPicker` — a form-attachable color input. The field shows the current color as a swatch, accepts hex, `rgb()`, `hsl()`, `okhsl()`, `okhst()` and `oklch()` text, and opens a popover where the color can be tuned on three axes: HST (OKHST hue/saturation/tone), LCH (OKLCH lightness/chroma/hue) or RGB. Every conversion runs through Glaze, so the value is always a real, in-gamut color. + + `formatMode` controls how the text relates to the value: `forced` (default) rewrites the text in `format`, `derive` keeps the notation the user typed but normalizes the value, and `free` passes the text through verbatim after verifying it parses. Also adds a `PipetteIcon`. + +- [#1286](https://github.com/cube-js/cube-ui-kit/pull/1286) [`272a9e9b`](https://github.com/cube-js/cube-ui-kit/commit/272a9e9bc424b8b09be268640ff81be016540c9a) Thanks [@tenphi](https://github.com/tenphi)! - Add widget selection and rigid group movement to `Board`. + + Set `selectionMode="single" | "multiple"` and read the selection with + `selectedKeys` / `defaultSelectedKeys` / `onSelectionChange` (keys are layout item + ids, always returned in layout order). + + Pressing a widget selects it on pointer-down and arms a drag of the selection — + selecting and grabbing are one gesture, so move the pointer and it drags, stay + still and it was only a selection. Shift (or Cmd/ + Ctrl) toggles membership, dragging from empty canvas lassos + (`allowMarqueeSelection`), Space toggles the focused widget, and + Escape clears. + + Selection behaves like focus: it tracks what the user is working with and moves on + as soon as they touch something else — pressing another widget makes that the + selection, and pressing an interactive control inside a widget or moving focus off + the board drops it entirely. + + With `"multiple"`, dragging any selected widget moves the whole selection as a + rigid block that reflows by the board's own rules — the same compaction a single + widget gets, so a group can never be parked in empty space on a `vertical` board + and the widgets around it close the gap in the same frame. Every widget travels by the same delta, the group clamps against the + grid edge as a unit instead of collapsing into it, a frame that cannot be placed + is rejected outright rather than partially applied, and the move commits through a + single `onLayoutChange`. Arrow keys move the group too. `BoardInteractionInfo` + gains `items`, `oldItems` and `placeholders` describing the whole gesture; the + existing `item` / `oldItem` / `placeholder` fields are unchanged, and a board with + no selection behaves exactly as before. + + The `selectionCancel` selector (board- or widget-level, defaulting to the exported + `BOARD_SELECTION_CANCEL`) marks interactive descendants; `[data-no-select]` opts + out a custom control. On a selectable board it also gates dragging, which fixes a + long-standing trap: `useMove`'s pointer-down calls `preventDefault()`, so without + a `dragCancel` an `input` inside a widget could not be focused or typed into. + Selected widgets are drawn with a `#primary-border` border and a `#primary` ring — + an edge treatment rather than a fill, since selection reads as a focus-like state; + `outline` stays reserved for the real focus ring. Widgets get a `selected` + modifier you can restyle through `widgetProps.styles`. + + `onWidgetsDelete` reports a Delete/Backspace press with a + non-empty selection. Board never mutates the layout itself, so removal stays + yours to implement and to make undoable. + + Accessibility: widget hosts are now `role="group"` with an accessible name from + the new `Board.Widget` `aria-label` prop (falling back to `qa`, then the layout + id). `aria-roledescription` is now localized rather than hardcoded English — it + was previously also invalid, sitting on a role-less element. Selected widgets are + described as "Selected", and selection changes are announced through a polite live + region. + + Widget hosts also expose `data-board-widget-id` and `data-selected`. + +### Patch Changes + +- [#1284](https://github.com/cube-js/cube-ui-kit/pull/1284) [`fc517477`](https://github.com/cube-js/cube-ui-kit/commit/fc5174777e4d330d5d4be98cf5547daa038dc9f0) Thanks [@tenphi](https://github.com/tenphi)! - Fix the types of `FilterListBox.Item` and `CommandMenu.Item`. Both were declared as React Stately's bare `Item`, so `Item` props such as `icon`, `rightIcon`, `description`, `hotkeys` and `actions` were rejected by TypeScript even though they worked at runtime. They now use `CollectionItem`, matching `ListBox.Item`, `Menu.Item` and the other collection components. + ## 0.155.0 ### Minor Changes diff --git a/package.json b/package.json index 084df103c..e38406c6b 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@cube-dev/ui-kit", - "version": "0.155.0", + "version": "0.156.0", "type": "module", "description": "UIKit for Cube Projects", "repository": {