@botiverse/raft-ui 0.58.0 → 0.58.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,16 @@
|
|
|
1
|
+
## [0.58.1](https://github.com/botiverse/raft-design/compare/v0.58.0...v0.58.1) (2026-11-03)
|
|
2
|
+
|
|
3
|
+
### Fixed
|
|
4
|
+
|
|
5
|
+
- **Button**: a `loading` button keeps keyboard focus. It is `aria-disabled` and stays in the tab order instead of becoming natively `disabled`; click, Enter, Space and form submit are blocked while it runs. A `disabled` button stays natively disabled. ([#956](https://github.com/botiverse/raft-design/pull/956))
|
|
6
|
+
- Why: pressing a button that then turned busy dropped focus to the page, and it didn't come back when the request failed.
|
|
7
|
+
- Affects: every component that passes `loading` to Button (DialogCommit, AlertDialog, Dialog, Drawer, Banner, SidebarSectionControl and others). A busy button now receives pointer events: the wait cursor shows, and a wrapping Tooltip opens on hover. Its look is unchanged.
|
|
8
|
+
- Docs: https://raft-design.botiverse.build/components/button/
|
|
9
|
+
|
|
10
|
+
### Docs
|
|
11
|
+
|
|
12
|
+
- **Table**: a Sorting section on sorting rows from a column heading. ([#954](https://github.com/botiverse/raft-design/pull/954))
|
|
13
|
+
|
|
1
14
|
## [0.58.0](https://github.com/botiverse/raft-design/compare/v0.57.2...v0.58.0) (2026-11-03)
|
|
2
15
|
|
|
3
16
|
### Added
|
|
@@ -249,9 +249,16 @@ export type ButtonProps = StyledProps<Button.Props> & Omit<ButtonVariantProps, "
|
|
|
249
249
|
* `icon-md`, removed in raft-ui 1.0 (`codemods/button-sizes.mjs`).
|
|
250
250
|
*/
|
|
251
251
|
size?: "md" | "lg" | "xl" | "icon-md" | "icon-lg" | DeprecatedButtonSize;
|
|
252
|
+
/**
|
|
253
|
+
* Busy: shows the spinner and blocks activation (click, Enter, Space and
|
|
254
|
+
* form submission) while keeping the button focusable. A busy button is
|
|
255
|
+
* `aria-disabled`, not natively `disabled`, so the focus a press left on
|
|
256
|
+
* it stays there and is still there when the wait ends.
|
|
257
|
+
*/
|
|
252
258
|
loading?: boolean;
|
|
259
|
+
/** The spinner's accessible name while `loading`: say what is happening. */
|
|
253
260
|
loadingLabel?: string;
|
|
254
261
|
};
|
|
255
|
-
declare function Button$1({ variant, size, loading, loadingLabel, disabled, className, children, render, nativeButton, ...props }: ButtonProps): import("react").JSX.Element;
|
|
262
|
+
declare function Button$1({ variant, size, loading, loadingLabel, disabled, focusableWhenDisabled, className, children, render, nativeButton, ...props }: ButtonProps): import("react").JSX.Element;
|
|
256
263
|
//#endregion
|
|
257
264
|
export { Button$1 as Button };
|
|
@@ -146,7 +146,7 @@ const ICON_SIZES = /* @__PURE__ */ new Set([
|
|
|
146
146
|
"icon-md",
|
|
147
147
|
"icon-lg"
|
|
148
148
|
]);
|
|
149
|
-
function Button$1({ variant, size, loading = false, loadingLabel = "Loading", disabled, className, children, render, nativeButton, ...props }) {
|
|
149
|
+
function Button$1({ variant, size, loading = false, loadingLabel = "Loading", disabled, focusableWhenDisabled, className, children, render, nativeButton, ...props }) {
|
|
150
150
|
const { root, content, loadingIndicator } = buttonVariants({
|
|
151
151
|
variant,
|
|
152
152
|
size
|
|
@@ -160,6 +160,7 @@ function Button$1({ variant, size, loading = false, loadingLabel = "Loading", di
|
|
|
160
160
|
className: root({ className }),
|
|
161
161
|
"data-loading": loading ? "true" : void 0,
|
|
162
162
|
disabled: disabled || loading,
|
|
163
|
+
focusableWhenDisabled: loading && !disabled || focusableWhenDisabled,
|
|
163
164
|
...loading ? { "aria-disabled": true } : {},
|
|
164
165
|
children: [loading ? /* @__PURE__ */ jsx("span", {
|
|
165
166
|
"data-slot": "button-loading-indicator",
|