@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.
Files changed (204) hide show
  1. package/CHANGELOG.md +181 -0
  2. package/README.md +167 -2
  3. package/dist/accordion/accordion.d.ts +42 -0
  4. package/dist/accordion/accordion.js +72 -0
  5. package/dist/accordion/index.d.ts +2 -0
  6. package/dist/accordion/index.js +1 -0
  7. package/dist/avatar/avatar.d.ts +21 -0
  8. package/dist/avatar/avatar.js +43 -0
  9. package/dist/avatar/index.d.ts +2 -0
  10. package/dist/avatar/index.js +1 -0
  11. package/dist/badge/badge.d.ts +14 -0
  12. package/dist/badge/badge.js +25 -0
  13. package/dist/badge/index.d.ts +2 -0
  14. package/dist/badge/index.js +1 -0
  15. package/dist/box/box.d.ts +27 -0
  16. package/dist/box/box.js +21 -0
  17. package/dist/box/index.d.ts +2 -0
  18. package/dist/box/index.js +1 -0
  19. package/dist/button/button.d.ts +46 -0
  20. package/dist/button/button.js +74 -0
  21. package/dist/button/index.d.ts +2 -0
  22. package/dist/button/index.js +1 -0
  23. package/dist/card/card.d.ts +30 -0
  24. package/dist/card/card.js +56 -0
  25. package/dist/card/index.d.ts +2 -0
  26. package/dist/card/index.js +1 -0
  27. package/dist/checkbox/checkbox.d.ts +33 -0
  28. package/dist/checkbox/checkbox.js +61 -0
  29. package/dist/checkbox/index.d.ts +2 -0
  30. package/dist/checkbox/index.js +1 -0
  31. package/dist/css/accordion.css +73 -0
  32. package/dist/css/avatar.css +44 -0
  33. package/dist/css/badge.css +53 -0
  34. package/dist/css/base.css +5 -0
  35. package/dist/css/box.css +163 -0
  36. package/dist/css/button.css +168 -0
  37. package/dist/css/card.css +75 -0
  38. package/dist/css/checkbox.css +58 -0
  39. package/dist/css/dialog.css +121 -0
  40. package/dist/css/drawer.css +123 -0
  41. package/dist/css/field.css +121 -0
  42. package/dist/css/fieldset.css +37 -0
  43. package/dist/css/grid.css +86 -0
  44. package/dist/css/heading.css +93 -0
  45. package/dist/css/inline.css +85 -0
  46. package/dist/css/input.css +98 -0
  47. package/dist/css/link.css +45 -0
  48. package/dist/css/menu.css +149 -0
  49. package/dist/css/popover.css +72 -0
  50. package/dist/css/progress.css +88 -0
  51. package/dist/css/radio.css +54 -0
  52. package/dist/css/scroll-area.css +63 -0
  53. package/dist/css/select.css +173 -0
  54. package/dist/css/separator.css +28 -0
  55. package/dist/css/skeleton.css +33 -0
  56. package/dist/css/skip-link.css +33 -0
  57. package/dist/css/slider.css +86 -0
  58. package/dist/css/spinner.css +55 -0
  59. package/dist/css/stack.css +76 -0
  60. package/dist/css/switch.css +79 -0
  61. package/dist/css/table.css +68 -0
  62. package/dist/css/tabs.css +112 -0
  63. package/dist/css/text-field.css +4 -0
  64. package/dist/css/text.css +106 -0
  65. package/dist/css/toast.css +108 -0
  66. package/dist/css/toggle.css +112 -0
  67. package/dist/css/tooltip.css +41 -0
  68. package/dist/css/visually-hidden.css +15 -0
  69. package/dist/dialog/dialog.d.ts +51 -0
  70. package/dist/dialog/dialog.js +120 -0
  71. package/dist/dialog/index.d.ts +2 -0
  72. package/dist/dialog/index.js +1 -0
  73. package/dist/drawer/drawer.d.ts +46 -0
  74. package/dist/drawer/drawer.js +101 -0
  75. package/dist/drawer/index.d.ts +2 -0
  76. package/dist/drawer/index.js +1 -0
  77. package/dist/field/choice.d.ts +21 -0
  78. package/dist/field/choice.js +67 -0
  79. package/dist/field/field.d.ts +28 -0
  80. package/dist/field/field.js +77 -0
  81. package/dist/field/index.d.ts +3 -0
  82. package/dist/field/index.js +1 -0
  83. package/dist/fieldset/fieldset.d.ts +19 -0
  84. package/dist/fieldset/fieldset.js +29 -0
  85. package/dist/fieldset/index.d.ts +2 -0
  86. package/dist/fieldset/index.js +1 -0
  87. package/dist/grid/grid.d.ts +30 -0
  88. package/dist/grid/grid.js +36 -0
  89. package/dist/grid/index.d.ts +2 -0
  90. package/dist/grid/index.js +1 -0
  91. package/dist/heading/heading.d.ts +23 -0
  92. package/dist/heading/heading.js +30 -0
  93. package/dist/heading/index.d.ts +2 -0
  94. package/dist/heading/index.js +1 -0
  95. package/dist/index.d.ts +80 -0
  96. package/dist/index.js +38 -0
  97. package/dist/inline/index.d.ts +2 -0
  98. package/dist/inline/index.js +1 -0
  99. package/dist/inline/inline.d.ts +19 -0
  100. package/dist/inline/inline.js +16 -0
  101. package/dist/input/index.d.ts +2 -0
  102. package/dist/input/index.js +1 -0
  103. package/dist/input/input.d.ts +37 -0
  104. package/dist/input/input.js +63 -0
  105. package/dist/internal/control.d.ts +9 -0
  106. package/dist/internal/control.js +4 -0
  107. package/dist/internal/cx.js +7 -0
  108. package/dist/internal/messages.js +22 -0
  109. package/dist/internal/refs.js +23 -0
  110. package/dist/internal/render.d.ts +6 -0
  111. package/dist/internal/render.js +22 -0
  112. package/dist/internal/space.d.ts +9 -0
  113. package/dist/internal/text.d.ts +5 -0
  114. package/dist/internal/text.js +18 -0
  115. package/dist/link/index.d.ts +2 -0
  116. package/dist/link/index.js +1 -0
  117. package/dist/link/link.d.ts +13 -0
  118. package/dist/link/link.js +31 -0
  119. package/dist/menu/index.d.ts +2 -0
  120. package/dist/menu/index.js +1 -0
  121. package/dist/menu/menu.d.ts +76 -0
  122. package/dist/menu/menu.js +172 -0
  123. package/dist/popover/index.d.ts +2 -0
  124. package/dist/popover/index.js +1 -0
  125. package/dist/popover/popover.d.ts +33 -0
  126. package/dist/popover/popover.js +48 -0
  127. package/dist/progress/index.d.ts +2 -0
  128. package/dist/progress/index.js +1 -0
  129. package/dist/progress/progress.d.ts +26 -0
  130. package/dist/progress/progress.js +57 -0
  131. package/dist/radio/index.d.ts +2 -0
  132. package/dist/radio/index.js +1 -0
  133. package/dist/radio/radio.d.ts +31 -0
  134. package/dist/radio/radio.js +47 -0
  135. package/dist/scroll-area/index.d.ts +2 -0
  136. package/dist/scroll-area/index.js +1 -0
  137. package/dist/scroll-area/scroll-area.d.ts +18 -0
  138. package/dist/scroll-area/scroll-area.js +39 -0
  139. package/dist/select/index.d.ts +2 -0
  140. package/dist/select/index.js +1 -0
  141. package/dist/select/select.d.ts +36 -0
  142. package/dist/select/select.js +82 -0
  143. package/dist/separator/index.d.ts +2 -0
  144. package/dist/separator/index.js +1 -0
  145. package/dist/separator/separator.d.ts +16 -0
  146. package/dist/separator/separator.js +16 -0
  147. package/dist/skeleton/index.d.ts +2 -0
  148. package/dist/skeleton/index.js +1 -0
  149. package/dist/skeleton/skeleton.d.ts +12 -0
  150. package/dist/skeleton/skeleton.js +18 -0
  151. package/dist/skip-link/index.d.ts +2 -0
  152. package/dist/skip-link/index.js +1 -0
  153. package/dist/skip-link/skip-link.d.ts +13 -0
  154. package/dist/skip-link/skip-link.js +18 -0
  155. package/dist/slider/index.d.ts +2 -0
  156. package/dist/slider/index.js +1 -0
  157. package/dist/slider/slider.d.ts +17 -0
  158. package/dist/slider/slider.js +51 -0
  159. package/dist/spinner/index.d.ts +2 -0
  160. package/dist/spinner/index.js +1 -0
  161. package/dist/spinner/spinner.d.ts +15 -0
  162. package/dist/spinner/spinner.js +19 -0
  163. package/dist/stack/index.d.ts +2 -0
  164. package/dist/stack/index.js +1 -0
  165. package/dist/stack/stack.d.ts +17 -0
  166. package/dist/stack/stack.js +15 -0
  167. package/dist/styles.css +2960 -0
  168. package/dist/switch/index.d.ts +2 -0
  169. package/dist/switch/index.js +1 -0
  170. package/dist/switch/switch.d.ts +18 -0
  171. package/dist/switch/switch.js +31 -0
  172. package/dist/table/index.d.ts +2 -0
  173. package/dist/table/index.js +1 -0
  174. package/dist/table/table.d.ts +36 -0
  175. package/dist/table/table.js +69 -0
  176. package/dist/tabs/index.d.ts +2 -0
  177. package/dist/tabs/index.js +1 -0
  178. package/dist/tabs/tabs.d.ts +43 -0
  179. package/dist/tabs/tabs.js +66 -0
  180. package/dist/text/index.d.ts +3 -0
  181. package/dist/text/index.js +1 -0
  182. package/dist/text/text.d.ts +24 -0
  183. package/dist/text/text.js +24 -0
  184. package/dist/text-field/index.d.ts +2 -0
  185. package/dist/text-field/index.js +1 -0
  186. package/dist/text-field/text-field.d.ts +15 -0
  187. package/dist/text-field/text-field.js +41 -0
  188. package/dist/toast/index.d.ts +2 -0
  189. package/dist/toast/index.js +1 -0
  190. package/dist/toast/toast.d.ts +54 -0
  191. package/dist/toast/toast.js +123 -0
  192. package/dist/toggle/index.d.ts +2 -0
  193. package/dist/toggle/index.js +1 -0
  194. package/dist/toggle/toggle.d.ts +48 -0
  195. package/dist/toggle/toggle.js +54 -0
  196. package/dist/tooltip/index.d.ts +2 -0
  197. package/dist/tooltip/index.js +1 -0
  198. package/dist/tooltip/tooltip.d.ts +26 -0
  199. package/dist/tooltip/tooltip.js +39 -0
  200. package/dist/visually-hidden/index.d.ts +2 -0
  201. package/dist/visually-hidden/index.js +1 -0
  202. package/dist/visually-hidden/visually-hidden.d.ts +8 -0
  203. package/dist/visually-hidden/visually-hidden.js +12 -0
  204. 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,2 @@
1
+ import { Skeleton, SkeletonProps, SkeletonVariant } from "./skeleton.js";
2
+ export { Skeleton, type SkeletonProps, type SkeletonVariant };
@@ -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,2 @@
1
+ import { SkipLink, SkipLinkProps } from "./skip-link.js";
2
+ export { SkipLink, type SkipLinkProps };
@@ -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,2 @@
1
+ import { Slider, SliderProps } from "./slider.js";
2
+ export { Slider, type SliderProps };
@@ -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,2 @@
1
+ import { Spinner, SpinnerProps, SpinnerSize, SpinnerTone } from "./spinner.js";
2
+ export { Spinner, type SpinnerProps, type SpinnerSize, type SpinnerTone };
@@ -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,2 @@
1
+ import { FlowJustify, Stack, StackAlign, StackProps } from "./stack.js";
2
+ export { type FlowJustify, Stack, type StackAlign, type StackProps };
@@ -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 };