@qeetrix/react 0.0.0-stage → 0.0.2
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 +181 -0
- package/README.md +167 -2
- package/dist/accordion/accordion.d.ts +42 -0
- package/dist/accordion/accordion.js +72 -0
- package/dist/accordion/index.d.ts +2 -0
- package/dist/accordion/index.js +1 -0
- package/dist/avatar/avatar.d.ts +21 -0
- package/dist/avatar/avatar.js +43 -0
- package/dist/avatar/index.d.ts +2 -0
- package/dist/avatar/index.js +1 -0
- package/dist/badge/badge.d.ts +14 -0
- package/dist/badge/badge.js +25 -0
- package/dist/badge/index.d.ts +2 -0
- package/dist/badge/index.js +1 -0
- package/dist/box/box.d.ts +27 -0
- package/dist/box/box.js +21 -0
- package/dist/box/index.d.ts +2 -0
- package/dist/box/index.js +1 -0
- package/dist/button/button.d.ts +46 -0
- package/dist/button/button.js +74 -0
- package/dist/button/index.d.ts +2 -0
- package/dist/button/index.js +1 -0
- package/dist/card/card.d.ts +30 -0
- package/dist/card/card.js +56 -0
- package/dist/card/index.d.ts +2 -0
- package/dist/card/index.js +1 -0
- package/dist/checkbox/checkbox.d.ts +33 -0
- package/dist/checkbox/checkbox.js +61 -0
- package/dist/checkbox/index.d.ts +2 -0
- package/dist/checkbox/index.js +1 -0
- package/dist/css/accordion.css +73 -0
- package/dist/css/avatar.css +44 -0
- package/dist/css/badge.css +53 -0
- package/dist/css/base.css +5 -0
- package/dist/css/box.css +163 -0
- package/dist/css/button.css +168 -0
- package/dist/css/card.css +75 -0
- package/dist/css/checkbox.css +58 -0
- package/dist/css/dialog.css +121 -0
- package/dist/css/drawer.css +123 -0
- package/dist/css/field.css +121 -0
- package/dist/css/fieldset.css +37 -0
- package/dist/css/grid.css +86 -0
- package/dist/css/heading.css +93 -0
- package/dist/css/inline.css +85 -0
- package/dist/css/input.css +98 -0
- package/dist/css/link.css +45 -0
- package/dist/css/menu.css +149 -0
- package/dist/css/popover.css +72 -0
- package/dist/css/progress.css +88 -0
- package/dist/css/radio.css +54 -0
- package/dist/css/scroll-area.css +63 -0
- package/dist/css/select.css +173 -0
- package/dist/css/separator.css +28 -0
- package/dist/css/skeleton.css +33 -0
- package/dist/css/skip-link.css +33 -0
- package/dist/css/slider.css +86 -0
- package/dist/css/spinner.css +55 -0
- package/dist/css/stack.css +76 -0
- package/dist/css/switch.css +79 -0
- package/dist/css/table.css +68 -0
- package/dist/css/tabs.css +112 -0
- package/dist/css/text-field.css +4 -0
- package/dist/css/text.css +106 -0
- package/dist/css/toast.css +108 -0
- package/dist/css/toggle.css +112 -0
- package/dist/css/tooltip.css +41 -0
- package/dist/css/visually-hidden.css +15 -0
- package/dist/dialog/dialog.d.ts +51 -0
- package/dist/dialog/dialog.js +120 -0
- package/dist/dialog/index.d.ts +2 -0
- package/dist/dialog/index.js +1 -0
- package/dist/drawer/drawer.d.ts +46 -0
- package/dist/drawer/drawer.js +101 -0
- package/dist/drawer/index.d.ts +2 -0
- package/dist/drawer/index.js +1 -0
- package/dist/field/choice.d.ts +21 -0
- package/dist/field/choice.js +67 -0
- package/dist/field/field.d.ts +28 -0
- package/dist/field/field.js +77 -0
- package/dist/field/index.d.ts +3 -0
- package/dist/field/index.js +1 -0
- package/dist/fieldset/fieldset.d.ts +19 -0
- package/dist/fieldset/fieldset.js +29 -0
- package/dist/fieldset/index.d.ts +2 -0
- package/dist/fieldset/index.js +1 -0
- package/dist/grid/grid.d.ts +30 -0
- package/dist/grid/grid.js +36 -0
- package/dist/grid/index.d.ts +2 -0
- package/dist/grid/index.js +1 -0
- package/dist/heading/heading.d.ts +23 -0
- package/dist/heading/heading.js +30 -0
- package/dist/heading/index.d.ts +2 -0
- package/dist/heading/index.js +1 -0
- package/dist/index.d.ts +80 -0
- package/dist/index.js +38 -0
- package/dist/inline/index.d.ts +2 -0
- package/dist/inline/index.js +1 -0
- package/dist/inline/inline.d.ts +19 -0
- package/dist/inline/inline.js +16 -0
- package/dist/input/index.d.ts +2 -0
- package/dist/input/index.js +1 -0
- package/dist/input/input.d.ts +37 -0
- package/dist/input/input.js +63 -0
- package/dist/internal/control.d.ts +9 -0
- package/dist/internal/control.js +4 -0
- package/dist/internal/cx.js +7 -0
- package/dist/internal/messages.js +22 -0
- package/dist/internal/refs.js +23 -0
- package/dist/internal/render.d.ts +6 -0
- package/dist/internal/render.js +22 -0
- package/dist/internal/space.d.ts +9 -0
- package/dist/internal/text.d.ts +5 -0
- package/dist/internal/text.js +18 -0
- package/dist/link/index.d.ts +2 -0
- package/dist/link/index.js +1 -0
- package/dist/link/link.d.ts +13 -0
- package/dist/link/link.js +31 -0
- package/dist/menu/index.d.ts +2 -0
- package/dist/menu/index.js +1 -0
- package/dist/menu/menu.d.ts +76 -0
- package/dist/menu/menu.js +172 -0
- package/dist/popover/index.d.ts +2 -0
- package/dist/popover/index.js +1 -0
- package/dist/popover/popover.d.ts +33 -0
- package/dist/popover/popover.js +48 -0
- package/dist/progress/index.d.ts +2 -0
- package/dist/progress/index.js +1 -0
- package/dist/progress/progress.d.ts +26 -0
- package/dist/progress/progress.js +57 -0
- package/dist/radio/index.d.ts +2 -0
- package/dist/radio/index.js +1 -0
- package/dist/radio/radio.d.ts +31 -0
- package/dist/radio/radio.js +47 -0
- package/dist/scroll-area/index.d.ts +2 -0
- package/dist/scroll-area/index.js +1 -0
- package/dist/scroll-area/scroll-area.d.ts +18 -0
- package/dist/scroll-area/scroll-area.js +39 -0
- package/dist/select/index.d.ts +2 -0
- package/dist/select/index.js +1 -0
- package/dist/select/select.d.ts +36 -0
- package/dist/select/select.js +82 -0
- package/dist/separator/index.d.ts +2 -0
- package/dist/separator/index.js +1 -0
- package/dist/separator/separator.d.ts +16 -0
- package/dist/separator/separator.js +16 -0
- package/dist/skeleton/index.d.ts +2 -0
- package/dist/skeleton/index.js +1 -0
- package/dist/skeleton/skeleton.d.ts +12 -0
- package/dist/skeleton/skeleton.js +18 -0
- package/dist/skip-link/index.d.ts +2 -0
- package/dist/skip-link/index.js +1 -0
- package/dist/skip-link/skip-link.d.ts +13 -0
- package/dist/skip-link/skip-link.js +18 -0
- package/dist/slider/index.d.ts +2 -0
- package/dist/slider/index.js +1 -0
- package/dist/slider/slider.d.ts +17 -0
- package/dist/slider/slider.js +51 -0
- package/dist/spinner/index.d.ts +2 -0
- package/dist/spinner/index.js +1 -0
- package/dist/spinner/spinner.d.ts +15 -0
- package/dist/spinner/spinner.js +19 -0
- package/dist/stack/index.d.ts +2 -0
- package/dist/stack/index.js +1 -0
- package/dist/stack/stack.d.ts +17 -0
- package/dist/stack/stack.js +15 -0
- package/dist/styles.css +2960 -0
- package/dist/switch/index.d.ts +2 -0
- package/dist/switch/index.js +1 -0
- package/dist/switch/switch.d.ts +18 -0
- package/dist/switch/switch.js +31 -0
- package/dist/table/index.d.ts +2 -0
- package/dist/table/index.js +1 -0
- package/dist/table/table.d.ts +36 -0
- package/dist/table/table.js +69 -0
- package/dist/tabs/index.d.ts +2 -0
- package/dist/tabs/index.js +1 -0
- package/dist/tabs/tabs.d.ts +43 -0
- package/dist/tabs/tabs.js +66 -0
- package/dist/text/index.d.ts +3 -0
- package/dist/text/index.js +1 -0
- package/dist/text/text.d.ts +24 -0
- package/dist/text/text.js +24 -0
- package/dist/text-field/index.d.ts +2 -0
- package/dist/text-field/index.js +1 -0
- package/dist/text-field/text-field.d.ts +15 -0
- package/dist/text-field/text-field.js +41 -0
- package/dist/toast/index.d.ts +2 -0
- package/dist/toast/index.js +1 -0
- package/dist/toast/toast.d.ts +54 -0
- package/dist/toast/toast.js +123 -0
- package/dist/toggle/index.d.ts +2 -0
- package/dist/toggle/index.js +1 -0
- package/dist/toggle/toggle.d.ts +48 -0
- package/dist/toggle/toggle.js +54 -0
- package/dist/tooltip/index.d.ts +2 -0
- package/dist/tooltip/index.js +1 -0
- package/dist/tooltip/tooltip.d.ts +26 -0
- package/dist/tooltip/tooltip.js +39 -0
- package/dist/visually-hidden/index.d.ts +2 -0
- package/dist/visually-hidden/index.js +1 -0
- package/dist/visually-hidden/visually-hidden.d.ts +8 -0
- package/dist/visually-hidden/visually-hidden.js +12 -0
- package/package.json +219 -4
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { cx } from "../internal/cx.js";
|
|
2
|
+
import { renderElement } from "../internal/render.js";
|
|
3
|
+
// src/separator/separator.tsx
|
|
4
|
+
/** A 1px line between groups of content. */
|
|
5
|
+
function Separator({ orientation = "horizontal", tone, decorative, render, className, ...props }) {
|
|
6
|
+
return renderElement("div", render, {
|
|
7
|
+
role: decorative ? "none" : "separator",
|
|
8
|
+
"aria-orientation": decorative || orientation === "horizontal" ? void 0 : orientation,
|
|
9
|
+
...props,
|
|
10
|
+
className: cx("qx-separator", className),
|
|
11
|
+
"data-slot": "separator",
|
|
12
|
+
"data-orientation": orientation,
|
|
13
|
+
"data-tone": tone
|
|
14
|
+
});
|
|
15
|
+
}
|
|
16
|
+
export { Separator };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { Skeleton } from "./skeleton.js";
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { ComponentProps, ReactElement } from "react";
|
|
2
|
+
export type SkeletonVariant = "text" | "block" | "circle";
|
|
3
|
+
export interface SkeletonProps extends ComponentProps<"span"> {
|
|
4
|
+
/** `text` (one line), `block` (a card or image) or `circle` (an avatar). Default `text`. */
|
|
5
|
+
variant?: SkeletonVariant;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* A placeholder shaped like the content that is loading (06-component-specs.md, increment 6). Size
|
|
9
|
+
* it with `style` or `className`. It is hidden from assistive technology: set `aria-busy` on the
|
|
10
|
+
* loading region and announce the wait with a Spinner or text. Server-safe.
|
|
11
|
+
*/
|
|
12
|
+
export declare function Skeleton({ variant, className, ...props }: SkeletonProps): ReactElement;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { cx } from "../internal/cx.js";
|
|
2
|
+
import { jsx } from "react/jsx-runtime";
|
|
3
|
+
// src/skeleton/skeleton.tsx
|
|
4
|
+
/**
|
|
5
|
+
* A placeholder shaped like the content that is loading (06-component-specs.md, increment 6). Size
|
|
6
|
+
* it with `style` or `className`. It is hidden from assistive technology: set `aria-busy` on the
|
|
7
|
+
* loading region and announce the wait with a Spinner or text. Server-safe.
|
|
8
|
+
*/
|
|
9
|
+
function Skeleton({ variant = "text", className, ...props }) {
|
|
10
|
+
return /* @__PURE__ */ jsx("span", {
|
|
11
|
+
...props,
|
|
12
|
+
"aria-hidden": true,
|
|
13
|
+
className: cx("qx-skeleton", className),
|
|
14
|
+
"data-slot": "skeleton",
|
|
15
|
+
"data-variant": variant
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
export { Skeleton };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { SkipLink } from "./skip-link.js";
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { RenderProp } from "../internal/render.js";
|
|
2
|
+
import { ComponentProps, ReactElement } from "react";
|
|
3
|
+
export interface SkipLinkProps extends ComponentProps<"a"> {
|
|
4
|
+
/** Where the link jumps to. Default `#main`. */
|
|
5
|
+
href?: string;
|
|
6
|
+
/** Render a different element, e.g. a router link. */
|
|
7
|
+
render?: RenderProp;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* The first focusable element on a page: it jumps past the navigation to the main content
|
|
11
|
+
* (WCAG 2.4.1 Bypass Blocks). Hidden until focused.
|
|
12
|
+
*/
|
|
13
|
+
export declare function SkipLink({ href, children, render, className, ...props }: SkipLinkProps): ReactElement;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { cx } from "../internal/cx.js";
|
|
2
|
+
import { renderElement } from "../internal/render.js";
|
|
3
|
+
import { messages } from "../internal/messages.js";
|
|
4
|
+
// src/skip-link/skip-link.tsx
|
|
5
|
+
/**
|
|
6
|
+
* The first focusable element on a page: it jumps past the navigation to the main content
|
|
7
|
+
* (WCAG 2.4.1 Bypass Blocks). Hidden until focused.
|
|
8
|
+
*/
|
|
9
|
+
function SkipLink({ href = "#main", children = messages.skipLink.label, render, className, ...props }) {
|
|
10
|
+
return renderElement("a", render, {
|
|
11
|
+
...props,
|
|
12
|
+
href,
|
|
13
|
+
children,
|
|
14
|
+
className: cx("qx-skip-link", className),
|
|
15
|
+
"data-slot": "skip-link"
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
export { SkipLink };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { Slider } from "./slider.js";
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { CSSProperties, ReactElement, ReactNode } from "react";
|
|
2
|
+
import { Slider } from "@base-ui/react/slider";
|
|
3
|
+
export interface SliderProps<Value extends number | readonly number[] = number> extends Omit<Slider.Root.Props<Value>, "className" | "style" | "children"> {
|
|
4
|
+
/** The visible label. Without one, give the slider an `aria-label`. */
|
|
5
|
+
label?: ReactNode;
|
|
6
|
+
/** Show the formatted value at the end of the header. */
|
|
7
|
+
showValue?: boolean;
|
|
8
|
+
/** Placement only. */
|
|
9
|
+
className?: string;
|
|
10
|
+
style?: CSSProperties;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* A number, or a range, on a continuous scale (06-component-specs.md, increment 5). An array value
|
|
14
|
+
* renders one thumb per value. Arrow keys step, Page Up and Down take `largeStep`, Home and End jump.
|
|
15
|
+
*/
|
|
16
|
+
declare function Slider$1<Value extends number | readonly number[] = number>({ label, showValue, className, value, defaultValue, ...props }: SliderProps<Value>): ReactElement;
|
|
17
|
+
export { Slider$1 as Slider };
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { cx } from "../internal/cx.js";
|
|
3
|
+
import { messages } from "../internal/messages.js";
|
|
4
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
5
|
+
import { Slider } from "@base-ui/react/slider";
|
|
6
|
+
// src/slider/slider.tsx
|
|
7
|
+
/**
|
|
8
|
+
* A number, or a range, on a continuous scale (06-component-specs.md, increment 5). An array value
|
|
9
|
+
* renders one thumb per value. Arrow keys step, Page Up and Down take `largeStep`, Home and End jump.
|
|
10
|
+
*/
|
|
11
|
+
function Slider$1({ label, showValue, className, value, defaultValue, ...props }) {
|
|
12
|
+
const initial = value ?? defaultValue;
|
|
13
|
+
const thumbs = Array.isArray(initial) ? initial.length : 1;
|
|
14
|
+
const range = thumbs > 1;
|
|
15
|
+
return /* @__PURE__ */ jsxs(Slider.Root, {
|
|
16
|
+
...props,
|
|
17
|
+
value,
|
|
18
|
+
defaultValue,
|
|
19
|
+
className: cx("qx-slider", className),
|
|
20
|
+
"data-slot": "slider",
|
|
21
|
+
children: [(label != null || showValue) && /* @__PURE__ */ jsxs("div", {
|
|
22
|
+
className: "qx-slider-header",
|
|
23
|
+
"data-slot": "slider-header",
|
|
24
|
+
children: [label != null && /* @__PURE__ */ jsx(Slider.Label, {
|
|
25
|
+
className: "qx-slider-label",
|
|
26
|
+
"data-slot": "slider-label",
|
|
27
|
+
children: label
|
|
28
|
+
}), showValue && /* @__PURE__ */ jsx(Slider.Value, {
|
|
29
|
+
className: "qx-slider-value",
|
|
30
|
+
"data-slot": "slider-value"
|
|
31
|
+
})]
|
|
32
|
+
}), /* @__PURE__ */ jsx(Slider.Control, {
|
|
33
|
+
className: "qx-slider-control",
|
|
34
|
+
"data-slot": "slider-control",
|
|
35
|
+
children: /* @__PURE__ */ jsxs(Slider.Track, {
|
|
36
|
+
className: "qx-slider-track",
|
|
37
|
+
"data-slot": "slider-track",
|
|
38
|
+
children: [/* @__PURE__ */ jsx(Slider.Indicator, {
|
|
39
|
+
className: "qx-slider-indicator",
|
|
40
|
+
"data-slot": "slider-indicator"
|
|
41
|
+
}), Array.from({ length: thumbs }, (_, index) => /* @__PURE__ */ jsx(Slider.Thumb, {
|
|
42
|
+
index,
|
|
43
|
+
getAriaLabel: range ? (i) => i === 0 ? messages.slider.minimum : messages.slider.maximum : null,
|
|
44
|
+
className: "qx-slider-thumb",
|
|
45
|
+
"data-slot": "slider-thumb"
|
|
46
|
+
}, index))]
|
|
47
|
+
})
|
|
48
|
+
})]
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
export { Slider$1 as Slider };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { Spinner } from "./spinner.js";
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { ComponentProps, ReactElement } from "react";
|
|
2
|
+
export type SpinnerSize = "sm" | "md" | "lg" | "xl";
|
|
3
|
+
export type SpinnerTone = "default" | "brand";
|
|
4
|
+
export interface SpinnerProps extends Omit<ComponentProps<"span">, "children"> {
|
|
5
|
+
/** `sm` 14px, `md` 16px (default), `lg` 20px, `xl` 24px. */
|
|
6
|
+
size?: SpinnerSize;
|
|
7
|
+
/** `default` follows the text colour; `brand` is Ember. */
|
|
8
|
+
tone?: SpinnerTone;
|
|
9
|
+
/** The accessible name. Default "Loading". */
|
|
10
|
+
label?: string;
|
|
11
|
+
/** Hidden from assistive technology, when something else announces the wait (a busy Button). */
|
|
12
|
+
decorative?: boolean;
|
|
13
|
+
}
|
|
14
|
+
/** An indeterminate wait: a 2px ring that turns, or fades under reduced motion. */
|
|
15
|
+
export declare function Spinner({ size, tone, label, decorative, className, ...props }: SpinnerProps): ReactElement;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { cx } from "../internal/cx.js";
|
|
2
|
+
import { messages } from "../internal/messages.js";
|
|
3
|
+
import { jsx } from "react/jsx-runtime";
|
|
4
|
+
// src/spinner/spinner.tsx
|
|
5
|
+
/** An indeterminate wait: a 2px ring that turns, or fades under reduced motion. */
|
|
6
|
+
function Spinner({ size, tone, label = messages.spinner.label, decorative, className, ...props }) {
|
|
7
|
+
return /* @__PURE__ */ jsx("span", {
|
|
8
|
+
...decorative ? { "aria-hidden": true } : {
|
|
9
|
+
role: "status",
|
|
10
|
+
"aria-label": label
|
|
11
|
+
},
|
|
12
|
+
...props,
|
|
13
|
+
className: cx("qx-spinner", className),
|
|
14
|
+
"data-slot": "spinner",
|
|
15
|
+
"data-size": size,
|
|
16
|
+
"data-tone": tone
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
export { Spinner };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { Stack } from "./stack.js";
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { RenderProp } from "../internal/render.js";
|
|
2
|
+
import { Space } from "../internal/space.js";
|
|
3
|
+
import { ComponentProps, ReactElement } from "react";
|
|
4
|
+
export type StackAlign = "start" | "center" | "end" | "stretch";
|
|
5
|
+
export type FlowJustify = "start" | "center" | "end" | "between";
|
|
6
|
+
export interface StackProps extends ComponentProps<"div"> {
|
|
7
|
+
/** Space between children, from the space scale. Default `md` (12px). */
|
|
8
|
+
gap?: Space;
|
|
9
|
+
/** Cross-axis alignment. Default `stretch`. */
|
|
10
|
+
align?: StackAlign;
|
|
11
|
+
/** Main-axis distribution. */
|
|
12
|
+
justify?: FlowJustify;
|
|
13
|
+
/** Render a different element, e.g. `<ul />`. */
|
|
14
|
+
render?: RenderProp;
|
|
15
|
+
}
|
|
16
|
+
/** A vertical flow with token gaps. */
|
|
17
|
+
export declare function Stack({ gap, align, justify, render, className, ...props }: StackProps): ReactElement;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { cx } from "../internal/cx.js";
|
|
2
|
+
import { renderElement } from "../internal/render.js";
|
|
3
|
+
// src/stack/stack.tsx
|
|
4
|
+
/** A vertical flow with token gaps. */
|
|
5
|
+
function Stack({ gap = "md", align, justify, render, className, ...props }) {
|
|
6
|
+
return renderElement("div", render, {
|
|
7
|
+
...props,
|
|
8
|
+
className: cx("qx-stack", className),
|
|
9
|
+
"data-slot": "stack",
|
|
10
|
+
"data-gap": gap,
|
|
11
|
+
"data-align": align,
|
|
12
|
+
"data-justify": justify
|
|
13
|
+
});
|
|
14
|
+
}
|
|
15
|
+
export { Stack };
|