@jonmilner/ui 0.1.0 → 0.1.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.
@@ -1,10 +1,8 @@
1
1
  import { Sprinkles } from "../styles/atoms.css.mjs";
2
- import { OmitEach } from "../types.mjs";
3
- import { ComponentPropsWithRef, ElementType } from "react";
2
+ import { PolymorphicProps } from "../types.mjs";
3
+ import { ElementType } from "react";
4
4
  //#region src/Box/index.d.ts
5
5
  export type StyleProps = { [K in keyof Sprinkles]?: Sprinkles[K] | null | false; };
6
- export type BoxProps<T extends ElementType = "div"> = {
7
- as?: T;
8
- } & StyleProps & OmitEach<ComponentPropsWithRef<T>, "as" | keyof StyleProps>;
6
+ export type BoxProps<T extends ElementType = "div"> = PolymorphicProps<T, StyleProps>;
9
7
  export declare function Box<T extends ElementType = "div">({ as, className, ...props }: BoxProps<T>): import("react").JSX.Element;
10
8
  //#endregion
@@ -1,8 +1,8 @@
1
- import { OmitEach } from "../types.mjs";
1
+ import { PolymorphicProps } from "../types.mjs";
2
2
  import { StyleProps } from "../Box/index.mjs";
3
3
  import { ClickableOwnProps } from "../Clickable/index.mjs";
4
4
  import { IconProps } from "../Icon/index.mjs";
5
- import { ComponentPropsWithRef, ComponentType, ElementType } from "react";
5
+ import { ComponentType, ElementType } from "react";
6
6
  //#region src/Button/index.d.ts
7
7
  export type ButtonOwnProps = {
8
8
  iconEnd?: ComponentType<IconProps>;
@@ -11,9 +11,7 @@ export type ButtonOwnProps = {
11
11
  size?: "sm" | "med" | "lg";
12
12
  variant?: "primary" | "secondary" | "danger";
13
13
  };
14
- export type ButtonProps<T extends ElementType = "button"> = {
15
- as?: T;
16
- } & StyleProps & ButtonOwnProps & Omit<ClickableOwnProps, "busy"> & OmitEach<ComponentPropsWithRef<T>, "as" | keyof StyleProps | keyof ClickableOwnProps | keyof ButtonOwnProps | "aria-disabled" | "aria-busy">;
14
+ export type ButtonProps<T extends ElementType = "button"> = PolymorphicProps<T, StyleProps & ButtonOwnProps & Omit<ClickableOwnProps, "busy">, "busy" | "aria-disabled" | "aria-busy">;
17
15
  export declare function Button<T extends ElementType = "button">({ variant, size, loading: loadingProp, iconStart: IconStart, iconEnd: IconEnd, minBlockSize, paddingBlock, paddingInline, gap, borderRadius, backgroundColor, color, className, children, "aria-busy": ariaBusy, ...props }: ButtonProps<T> & {
18
16
  "aria-busy"?: boolean | "true" | "false";
19
17
  }): import("react").JSX.Element;
@@ -1,13 +1,11 @@
1
- import { OmitEach } from "../types.mjs";
1
+ import { PolymorphicProps } from "../types.mjs";
2
2
  import { StyleProps } from "../Box/index.mjs";
3
- import { ComponentPropsWithRef, ElementType } from "react";
3
+ import { ElementType } from "react";
4
4
  //#region src/Clickable/index.d.ts
5
5
  export type ClickableOwnProps = {
6
6
  busy?: boolean;
7
7
  disabled?: boolean;
8
8
  };
9
- export type ClickableProps<T extends ElementType = "button"> = {
10
- as?: T;
11
- } & StyleProps & ClickableOwnProps & OmitEach<ComponentPropsWithRef<T>, "as" | keyof StyleProps | keyof ClickableOwnProps | "aria-disabled" | "aria-busy">;
9
+ export type ClickableProps<T extends ElementType = "button"> = PolymorphicProps<T, StyleProps & ClickableOwnProps, "aria-disabled" | "aria-busy">;
12
10
  export declare function Clickable<T extends ElementType = "button">({ as, disabled, busy, display, alignItems, justifyContent, minInlineSize, minBlockSize, className, ...props }: ClickableProps<T>): import("react").JSX.Element;
13
11
  //#endregion
@@ -22,6 +22,7 @@ function g({ title: a, description: o, size: c = "med", position: h = "fixed", m
22
22
  position: "fixed",
23
23
  zIndex: "modal"
24
24
  }) }), /* @__PURE__ */ p(m.Popup, {
25
+ "aria-modal": !0,
25
26
  ...j,
26
27
  render: /* @__PURE__ */ f(n, {
27
28
  zIndex: "modal",
@@ -1,8 +1,8 @@
1
- import { OmitEach } from "../types.mjs";
1
+ import { PolymorphicProps } from "../types.mjs";
2
2
  import { StyleProps } from "../Box/index.mjs";
3
3
  import { ClickableOwnProps } from "../Clickable/index.mjs";
4
4
  import { IconProps } from "../Icon/index.mjs";
5
- import { ComponentPropsWithRef, ComponentType, ElementType } from "react";
5
+ import { ComponentType, ElementType } from "react";
6
6
  //#region src/IconButton/index.d.ts
7
7
  export type IconButtonOwnProps = {
8
8
  icon: ComponentType<IconProps>;
@@ -10,8 +10,6 @@ export type IconButtonOwnProps = {
10
10
  size?: "sm" | "med" | "lg";
11
11
  variant?: "primary" | "secondary";
12
12
  };
13
- export type IconButtonProps<T extends ElementType = "button"> = {
14
- as?: T;
15
- } & StyleProps & IconButtonOwnProps & Omit<ClickableOwnProps, "busy"> & OmitEach<ComponentPropsWithRef<T>, "as" | keyof StyleProps | keyof ClickableOwnProps | keyof IconButtonOwnProps | "aria-disabled" | "aria-busy" | "aria-label" | "aria-labelledby" | "children">;
13
+ export type IconButtonProps<T extends ElementType = "button"> = PolymorphicProps<T, StyleProps & IconButtonOwnProps & Omit<ClickableOwnProps, "busy">, "busy" | "aria-disabled" | "aria-busy" | "aria-label" | "aria-labelledby" | "children">;
16
14
  export declare function IconButton<T extends ElementType = "button">({ label, icon: IconComponent, variant, size, minInlineSize, minBlockSize, borderRadius, backgroundColor, color, className, ...props }: IconButtonProps<T>): import("react").JSX.Element;
17
15
  //#endregion
@@ -1,15 +1,14 @@
1
- import { OmitEach } from "../types.mjs";
1
+ import { PolymorphicProps } from "../types.mjs";
2
2
  import { StyleProps } from "../Box/index.mjs";
3
- import { ComponentPropsWithRef, ElementType } from "react";
3
+ import { ElementType } from "react";
4
4
  //#region src/Inline/index.d.ts
5
5
  type Gap = StyleProps["gap"];
6
6
  type Token = Extract<Gap, string>;
7
- export type InlineProps<T extends ElementType = "div"> = {
8
- as?: T;
7
+ export type InlineProps<T extends ElementType = "div"> = PolymorphicProps<T, {
9
8
  gap: Token | (Extract<Gap, object> & {
10
9
  base: Token;
11
10
  });
12
- } & Omit<StyleProps, "gap"> & OmitEach<ComponentPropsWithRef<T>, "as" | keyof StyleProps>;
11
+ } & Omit<StyleProps, "gap">>;
13
12
  export declare function Inline<T extends ElementType = "div">({ display, flexDirection, flexWrap, alignItems, className, ...props }: InlineProps<T>): import("react").JSX.Element;
14
13
  //#endregion
15
14
  export {};
@@ -0,0 +1,5 @@
1
+ import "./index.mjs";
2
+ import { AriaAttributes, ComponentPropsWithRef } from "react";
3
+ //#region src/SearchField/client.d.ts
4
+ export type SearchFieldInputProps = Pick<ComponentPropsWithRef<"input">, "ref" | "id" | "autoFocus" | "autoComplete" | "spellCheck" | "enterKeyHint" | "maxLength" | "onKeyDown" | Exclude<keyof AriaAttributes, "aria-label" | "aria-labelledby" | "aria-invalid" | "aria-describedby" | "aria-errormessage" | "aria-disabled" | "aria-required" | "aria-readonly" | "aria-hidden">>;
5
+ //#endregion
@@ -23,46 +23,49 @@ var f = {
23
23
  square: "med"
24
24
  }
25
25
  };
26
- function p({ value: p, defaultValue: m, onValueChange: h, placeholder: g, size: _, disabled: v, required: y, name: b, clearLabel: x }) {
27
- let S = l(null), [C, w] = u(m), T = p ?? C, E = (e) => {
28
- p === void 0 && w(e), h?.(e);
29
- }, D = T !== "" && (p === void 0 || h !== void 0), O = (e) => {
26
+ function p({ value: p, defaultValue: m, onValueChange: h, placeholder: g, size: _, disabled: v, required: y, name: b, clearLabel: x, inputProps: { ref: S, onKeyDown: C, ...w } = {} }) {
27
+ let T = l(null), [E, D] = u(m), O = p ?? E, k = (e) => {
28
+ p === void 0 && D(e), h?.(e);
29
+ }, A = O !== "" && (p === void 0 || h !== void 0), j = (e) => {
30
+ if (C?.(e), e.defaultPrevented) return;
30
31
  let t = e.nativeEvent.isComposing || e.keyCode === 229;
31
- e.key === "Escape" && D && !t && (e.preventDefault(), e.stopPropagation(), E(""));
32
- }, k = f[_];
32
+ e.key === "Escape" && A && !t && (e.preventDefault(), e.stopPropagation(), k(""));
33
+ }, M = f[_];
33
34
  return /* @__PURE__ */ c(e, {
34
35
  alignItems: "center",
35
36
  display: "grid",
36
37
  children: [
37
38
  /* @__PURE__ */ s(d, {
39
+ ...w,
38
40
  name: b,
39
- onKeyDown: O,
40
- onValueChange: E,
41
+ onKeyDown: j,
42
+ onValueChange: k,
41
43
  placeholder: g,
42
44
  ref: S,
43
45
  render: /* @__PURE__ */ s(t, {
44
46
  as: "input",
45
47
  className: o({ size: _ }),
48
+ ref: T,
46
49
  size: _
47
50
  }),
48
51
  required: y,
49
52
  type: "search",
50
- value: T
53
+ value: O
51
54
  }),
52
55
  /* @__PURE__ */ s(r, {
53
56
  className: a({ size: _ }),
54
57
  size: _
55
58
  }),
56
- T !== "" && !v && /* @__PURE__ */ s(n, {
59
+ O !== "" && !v && /* @__PURE__ */ s(n, {
57
60
  className: "_1cj8r6g9",
58
61
  icon: i,
59
62
  label: x,
60
- minBlockSize: k.square,
61
- minInlineSize: k.square,
63
+ minBlockSize: M.square,
64
+ minInlineSize: M.square,
62
65
  onClick: () => {
63
- E(""), S.current?.focus();
66
+ k(""), T.current?.focus();
64
67
  },
65
- size: k.size
68
+ size: M.size
66
69
  })
67
70
  ]
68
71
  });
@@ -1,4 +1,5 @@
1
1
  import { StyleProps } from "../Box/index.mjs";
2
+ import { SearchFieldInputProps } from "./client.mjs";
2
3
  import { CSSProperties, ReactNode } from "react";
3
4
  //#region src/SearchField/index.d.ts
4
5
  export type SearchFieldProps = StyleProps & {
@@ -9,6 +10,7 @@ export type SearchFieldProps = StyleProps & {
9
10
  disabled?: boolean;
10
11
  error?: ReactNode;
11
12
  hideLabel?: boolean;
13
+ inputProps?: SearchFieldInputProps;
12
14
  label: ReactNode;
13
15
  name?: string;
14
16
  onValueChange?: (value: string) => void;
@@ -18,5 +20,6 @@ export type SearchFieldProps = StyleProps & {
18
20
  style?: CSSProperties;
19
21
  value?: string;
20
22
  };
21
- export declare function SearchField({ label, hideLabel, value, defaultValue, onValueChange, placeholder, description, error, size, disabled, required, name, clearLabel, className, style, ...atoms }: SearchFieldProps): import("react").JSX.Element;
22
- //#endregion
23
+ export declare function SearchField({ label, hideLabel, value, defaultValue, onValueChange, placeholder, description, error, size, disabled, required, name, clearLabel, inputProps, className, style, ...atoms }: SearchFieldProps): import("react").JSX.Element;
24
+ //#endregion
25
+ export type { SearchFieldInputProps };
@@ -3,13 +3,13 @@ import { hiddenLabel as t } from "./SearchField.css.mjs";
3
3
  import { SearchFieldControl as n } from "./client.mjs";
4
4
  import { jsx as r, jsxs as i } from "react/jsx-runtime";
5
5
  //#region src/SearchField/index.tsx
6
- function a({ label: a, hideLabel: o = !1, value: s, defaultValue: c = "", onValueChange: l, placeholder: u, description: d, error: f, size: p = "med", disabled: m = !1, required: h = !1, name: g, clearLabel: _ = "Clear search", className: v, style: y, ...b }) {
6
+ function a({ label: a, hideLabel: o = !1, value: s, defaultValue: c = "", onValueChange: l, placeholder: u, description: d, error: f, size: p = "med", disabled: m = !1, required: h = !1, name: g, clearLabel: _ = "Clear search", inputProps: v, className: y, style: b, ...x }) {
7
7
  return /* @__PURE__ */ i(e, {
8
- ...b,
9
- className: v,
8
+ ...x,
9
+ className: y,
10
10
  disabled: m,
11
11
  invalid: f != null && f !== !1 && f !== "",
12
- style: y,
12
+ style: b,
13
13
  children: [
14
14
  /* @__PURE__ */ r(e.Label, {
15
15
  className: o ? t : void 0,
@@ -19,6 +19,7 @@ function a({ label: a, hideLabel: o = !1, value: s, defaultValue: c = "", onValu
19
19
  clearLabel: _,
20
20
  defaultValue: c,
21
21
  disabled: m,
22
+ inputProps: v,
22
23
  name: g,
23
24
  onValueChange: l,
24
25
  placeholder: u,
@@ -1,15 +1,14 @@
1
- import { OmitEach } from "../types.mjs";
1
+ import { PolymorphicProps } from "../types.mjs";
2
2
  import { StyleProps } from "../Box/index.mjs";
3
- import { ComponentPropsWithRef, ElementType } from "react";
3
+ import { ElementType } from "react";
4
4
  //#region src/Stack/index.d.ts
5
5
  type Gap = StyleProps["gap"];
6
6
  type Token = Extract<Gap, string>;
7
- export type StackProps<T extends ElementType = "div"> = {
8
- as?: T;
7
+ export type StackProps<T extends ElementType = "div"> = PolymorphicProps<T, {
9
8
  gap: Token | (Extract<Gap, object> & {
10
9
  base: Token;
11
10
  });
12
- } & Omit<StyleProps, "gap"> & OmitEach<ComponentPropsWithRef<T>, "as" | keyof StyleProps>;
11
+ } & Omit<StyleProps, "gap">>;
13
12
  export declare function Stack<T extends ElementType = "div">({ display, flexDirection, className, ...props }: StackProps<T>): import("react").JSX.Element;
14
13
  //#endregion
15
14
  export {};
package/dist/Tag/Tag.css CHANGED
@@ -1,2 +1,2 @@
1
1
  @layer tokens, reset, atoms, components.box, components.checkbox, components.clickable, components.icon, components.icon-button, components.inline, components.stack, components.text, components.badge, components.button, components.chip, components.field, components.heading, components.dialog, components.alert-dialog, components.menu, components.multiselect, components.search-field, components.tabs, components.tag, components.toast;
2
- @layer components.tag{._1jsyd8s0{border-width:var(--space-1);border-style:solid;border-color:#0000}._1jsyd8s1{overflow-wrap:anywhere}._1jsyd8s0:hover ._1jsyd8s1,._1jsyd8s0:focus-within ._1jsyd8s1{white-space:normal;text-overflow:clip}._1jsyd8s2{text-decoration:underline}._1jsyd8s3:hover{background-color:var(--color-bg)}@media (forced-colors:active){._1jsyd8s0{color:canvastext;background-color:canvas;border-color:canvastext}}}
2
+ @layer components.tag{._1jsyd8s0{border-width:var(--space-1);border-style:solid;border-color:#0000}._1jsyd8s1{overflow-wrap:anywhere}._1jsyd8s0:hover ._1jsyd8s1,._1jsyd8s0:focus-within ._1jsyd8s1{white-space:normal;text-overflow:clip;padding-block:var(--space-4);margin-block:0}._1jsyd8s2{text-decoration:underline}._1jsyd8s3:hover{background-color:var(--color-bg)}@media (forced-colors:active){._1jsyd8s0{color:canvastext;background-color:canvas;border-color:canvastext}}}
@@ -34,7 +34,7 @@ var g = {
34
34
  paddingInlineEnd: "8"
35
35
  }
36
36
  };
37
- function _({ size: a = "med", href: p, onRemove: m, removeLabel: _, display: v = "inline-flex", alignItems: y = "center", gap: b = "2", minBlockSize: x = "xs", paddingInlineStart: S = g[a].paddingInlineStart, paddingInlineEnd: C = m ? "2" : g[a].paddingInlineEnd, borderRadius: w = "full", backgroundColor: T = "bgMuted", color: E = "fg", maxInlineSize: D, className: O, style: k, children: A, ...j }) {
37
+ function _({ size: a = "med", href: p, onRemove: m, removeLabel: _, display: v = "inline-flex", alignItems: y = "center", gap: b = "2", minBlockSize: x = "xs", paddingInlineStart: S = g[a].paddingInlineStart, paddingInlineEnd: C = m ? "2" : g[a].paddingInlineEnd, borderRadius: w = "lg", backgroundColor: T = "bgMuted", color: E = "fg", maxInlineSize: D, className: O, style: k, children: A, ...j }) {
38
38
  if (A == null || typeof A == "boolean" || A === "" || f(A) === "") return null;
39
39
  let M = h(D, k), N = /* @__PURE__ */ u(r, {
40
40
  as: "span",
@@ -1,8 +1,8 @@
1
- import { OmitEach } from "../types.mjs";
1
+ import { PolymorphicProps } from "../types.mjs";
2
2
  import { StyleProps } from "../Box/index.mjs";
3
3
  import { tokens } from "../tokens/scales.mjs";
4
4
  import { FontRole } from "../tokens/roles.mjs";
5
- import { ComponentPropsWithRef, ElementType } from "react";
5
+ import { ElementType } from "react";
6
6
  //#region src/Text/index.d.ts
7
7
  export type TextOwnProps = {
8
8
  font?: FontRole;
@@ -11,8 +11,6 @@ export type TextOwnProps = {
11
11
  truncate?: boolean;
12
12
  weight?: keyof typeof tokens.fontWeight;
13
13
  };
14
- export type TextProps<T extends ElementType = "p"> = {
15
- as?: T;
16
- } & StyleProps & TextOwnProps & OmitEach<ComponentPropsWithRef<T>, "as" | keyof StyleProps | keyof TextOwnProps>;
14
+ export type TextProps<T extends ElementType = "p"> = PolymorphicProps<T, StyleProps & TextOwnProps>;
17
15
  export declare function Text<T extends ElementType = "p">({ as, size, font, weight, leading, truncate, display, overflow, className, ...props }: TextProps<T>): import("react").JSX.Element;
18
16
  //#endregion
@@ -1,2 +1,2 @@
1
1
  @layer tokens, reset, atoms, components.box, components.checkbox, components.clickable, components.icon, components.icon-button, components.inline, components.stack, components.text, components.badge, components.button, components.chip, components.field, components.heading, components.dialog, components.alert-dialog, components.menu, components.multiselect, components.search-field, components.tabs, components.tag, components.toast;
2
- @layer components.toast{.hcnvsc1{inline-size:min(100% - 2 * var(--space-16), 6 * var(--space-64));inset-block-end:var(--space-16);inset-inline-end:var(--space-16);container:hcnvsc0/inline-size}.hcnvsc1:focus-visible{outline:var(--space-2) solid var(--color-focus);outline-offset:var(--space-2)}.hcnvsc2{gap:var(--space-8);margin:calc(-1 * var(--space-16));padding:var(--space-16);overscroll-behavior:contain;flex-direction:column;max-block-size:100dvh;margin-inline-start:calc(-1 * var(--space-24));padding-inline-start:var(--space-24);display:flex;overflow:hidden auto}.hcnvsc2:empty{padding:0}.hcnvsc3{border:var(--space-1) solid var(--color-border);transform:translate(var(--toast-swipe-movement-x,0), var(--toast-swipe-movement-y,0));transition:opacity var(--duration-med) var(--easing-standard), translate var(--duration-med) var(--easing-enter), transform var(--duration-med) var(--easing-enter)}.hcnvsc3:focus-visible{outline:var(--space-2) solid var(--color-focus);outline-offset:var(--space-2)}.hcnvsc3[data-starting-style],.hcnvsc3[data-ending-style]{opacity:0;translate:0 var(--distance-med)}.hcnvsc3[data-swiping]{transition:none}.hcnvsc3[data-limited]{display:none}.hcnvsc4{overflow-wrap:anywhere}.hcnvsca{clip-path:inset(50%);white-space:nowrap;border:0;block-size:1px;inline-size:1px;margin:0;padding:0;position:absolute;inset-block-start:0;inset-inline-start:0;overflow:hidden}@container hcnvsc0 (inline-size<16rem){.hcnvsc3{flex-wrap:wrap}.hcnvsc4{flex-basis:100%;order:1}.hcnvsc5{margin-inline-start:auto}}}
2
+ @layer components.toast{.hcnvsc1{inline-size:min(100% - 2 * var(--space-16), 6 * var(--space-64));inset-block-end:var(--space-16);inset-inline-end:var(--space-16);container:hcnvsc0/inline-size}.hcnvsc1:focus-visible{outline:var(--space-2) solid var(--color-focus);outline-offset:var(--space-2)}.hcnvsc2{gap:var(--space-8);margin:calc(-1 * var(--space-16));padding:var(--space-16);overscroll-behavior:contain;flex-direction:column;max-block-size:100dvh;margin-inline-start:calc(-1 * var(--space-24));padding-inline-start:var(--space-24);display:flex;overflow:hidden auto}.hcnvsc2:empty{padding:0}.hcnvsc2:has([data-swiping],[data-swipe-direction=down]){overflow-y:hidden}.hcnvsc3{border:var(--space-1) solid var(--color-border);transform:translate(var(--toast-swipe-movement-x,0), var(--toast-swipe-movement-y,0));transition:opacity var(--duration-med) var(--easing-standard), translate var(--duration-med) var(--easing-enter), transform var(--duration-med) var(--easing-enter)}.hcnvsc3:focus-visible{outline:var(--space-2) solid var(--color-focus);outline-offset:var(--space-2)}.hcnvsc3[data-starting-style],.hcnvsc3[data-ending-style]{opacity:0;translate:0 var(--distance-med)}.hcnvsc3[data-swiping]{transition:none}.hcnvsc3[data-limited]{display:none}.hcnvsc4{overflow-wrap:anywhere}.hcnvsca{clip-path:inset(50%);white-space:nowrap;border:0;block-size:1px;inline-size:1px;margin:0;padding:0;position:absolute;inset-block-start:0;inset-inline-start:0;overflow:hidden}@container hcnvsc0 (inline-size<16rem){.hcnvsc3{flex-wrap:wrap}.hcnvsc4{flex-basis:100%;order:1}.hcnvsc5{margin-inline-start:auto}}}
package/dist/base.css CHANGED
@@ -1,5 +1,5 @@
1
1
  @layer tokens, reset, atoms, components.box, components.checkbox, components.clickable, components.icon, components.icon-button, components.inline, components.stack, components.text, components.badge, components.button, components.chip, components.field, components.heading, components.dialog, components.alert-dialog, components.menu, components.multiselect, components.search-field, components.tabs, components.tag, components.toast;
2
- @layer tokens{:root{--space-0:0rem;--space-1:.0625rem;--space-2:.125rem;--space-4:.25rem;--space-6:.375rem;--space-8:.5rem;--space-12:.75rem;--space-16:1rem;--space-20:1.25rem;--space-24:1.5rem;--space-32:2rem;--space-40:2.5rem;--space-48:3rem;--space-64:4rem;--space-80:5rem;--space-96:6rem;--size-xs:1.5rem;--size-sm:2rem;--size-med:2.5rem;--size-lg:3rem;--size-xl:3.5rem;--radius-none:0;--radius-sm:.25rem;--radius-med:.5rem;--radius-lg:.75rem;--radius-xl:1rem;--radius-full:9999px;--font-size-xs:.75rem;--font-size-sm:.875rem;--font-size-med:1rem;--font-size-lg:1.125rem;--font-size-xl:1.25rem;--font-size-2xl:1.5rem;--font-size-3xl:1.875rem;--font-size-4xl:2.25rem;--font-weight-regular:400;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--line-height-sm:1.25;--line-height-med:1.5;--line-height-lg:1.75;--z-index-base:0;--z-index-raised:1;--z-index-dropdown:1000;--z-index-sticky:1100;--z-index-overlay:1200;--z-index-modal:1300;--z-index-popover:1400;--z-index-toast:1500;--z-index-tooltip:1600;--duration-fast:.12s;--duration-med:.2s;--duration-slow:.32s;--easing-standard:cubic-bezier(.2, 0, 0, 1);--easing-enter:cubic-bezier(0, 0, 0, 1);--easing-exit:cubic-bezier(.3, 0, 1, 1);--distance-sm:.25rem;--distance-med:.5rem;--distance-lg:1rem;--scale-sm:.02;--scale-med:.05;--scale-lg:.1}[data-brand]{--shadow-sm:0 1px 2px color-mix(in srgb, var(--color-shadow) 12%, transparent);--shadow-med:0 2px 8px color-mix(in srgb, var(--color-shadow) 14%, transparent), 0 1px 2px color-mix(in srgb, var(--color-shadow) 8%, transparent);--shadow-lg:0 8px 24px color-mix(in srgb, var(--color-shadow) 16%, transparent), 0 2px 6px color-mix(in srgb, var(--color-shadow) 8%, transparent)}[data-brand][data-mode=light]{color-scheme:light}[data-brand][data-mode=dark]{--shadow-sm:0 0 0 1px color-mix(in srgb, var(--color-fg) 10%, transparent), 0 1px 2px color-mix(in srgb, var(--color-shadow) 40%, transparent);--shadow-med:0 0 0 1px color-mix(in srgb, var(--color-fg) 10%, transparent), 0 2px 8px color-mix(in srgb, var(--color-shadow) 48%, transparent), 0 1px 2px color-mix(in srgb, var(--color-shadow) 32%, transparent);--shadow-lg:0 0 0 1px color-mix(in srgb, var(--color-fg) 10%, transparent), 0 8px 24px color-mix(in srgb, var(--color-shadow) 56%, transparent), 0 2px 6px color-mix(in srgb, var(--color-shadow) 32%, transparent);color-scheme:dark}[data-brand][data-mode=system]{color-scheme:light dark}:dir(ltr){--dir:1}:dir(rtl){--dir:-1}@media (prefers-color-scheme:dark){[data-brand][data-mode=system]{--shadow-sm:0 0 0 1px color-mix(in srgb, var(--color-fg) 10%, transparent), 0 1px 2px color-mix(in srgb, var(--color-shadow) 40%, transparent);--shadow-med:0 0 0 1px color-mix(in srgb, var(--color-fg) 10%, transparent), 0 2px 8px color-mix(in srgb, var(--color-shadow) 48%, transparent), 0 1px 2px color-mix(in srgb, var(--color-shadow) 32%, transparent);--shadow-lg:0 0 0 1px color-mix(in srgb, var(--color-fg) 10%, transparent), 0 8px 24px color-mix(in srgb, var(--color-shadow) 56%, transparent), 0 2px 6px color-mix(in srgb, var(--color-shadow) 32%, transparent)}}@media (prefers-reduced-motion:reduce){:root{--distance-sm:0rem;--distance-med:0rem;--distance-lg:0rem;--scale-sm:0;--scale-med:0;--scale-lg:0;--duration-fast:.12s;--duration-med:.12s;--duration-slow:.12s}}}
2
+ @layer tokens{:root{--space-0:0rem;--space-1:.0625rem;--space-2:.125rem;--space-4:.25rem;--space-6:.375rem;--space-8:.5rem;--space-12:.75rem;--space-16:1rem;--space-20:1.25rem;--space-24:1.5rem;--space-32:2rem;--space-40:2.5rem;--space-48:3rem;--space-64:4rem;--space-80:5rem;--space-96:6rem;--size-xs:1.5rem;--size-sm:2rem;--size-med:2.5rem;--size-lg:3rem;--size-xl:3.5rem;--container-prose:40rem;--container-page:64rem;--container-wide:80rem;--radius-none:0;--radius-sm:.25rem;--radius-med:.5rem;--radius-lg:.75rem;--radius-xl:1rem;--radius-full:9999px;--font-size-xs:.75rem;--font-size-sm:.875rem;--font-size-med:1rem;--font-size-lg:1.125rem;--font-size-xl:1.25rem;--font-size-2xl:1.5rem;--font-size-3xl:1.875rem;--font-size-4xl:2.25rem;--font-weight-regular:400;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--line-height-sm:1.25;--line-height-med:1.5;--line-height-lg:1.75;--z-index-base:0;--z-index-raised:1;--z-index-dropdown:1000;--z-index-sticky:1100;--z-index-overlay:1200;--z-index-modal:1300;--z-index-popover:1400;--z-index-toast:1500;--z-index-tooltip:1600;--duration-fast:.12s;--duration-med:.2s;--duration-slow:.32s;--easing-standard:cubic-bezier(.2, 0, 0, 1);--easing-enter:cubic-bezier(0, 0, 0, 1);--easing-exit:cubic-bezier(.3, 0, 1, 1);--distance-sm:.25rem;--distance-med:.5rem;--distance-lg:1rem;--scale-sm:.02;--scale-med:.05;--scale-lg:.1}[data-brand]{--shadow-sm:0 1px 2px color-mix(in srgb, var(--color-shadow) 12%, transparent);--shadow-med:0 2px 8px color-mix(in srgb, var(--color-shadow) 14%, transparent), 0 1px 2px color-mix(in srgb, var(--color-shadow) 8%, transparent);--shadow-lg:0 8px 24px color-mix(in srgb, var(--color-shadow) 16%, transparent), 0 2px 6px color-mix(in srgb, var(--color-shadow) 8%, transparent)}[data-brand][data-mode=light]{color-scheme:light}[data-brand][data-mode=dark]{--shadow-sm:0 0 0 1px color-mix(in srgb, var(--color-fg) 10%, transparent), 0 1px 2px color-mix(in srgb, var(--color-shadow) 40%, transparent);--shadow-med:0 0 0 1px color-mix(in srgb, var(--color-fg) 10%, transparent), 0 2px 8px color-mix(in srgb, var(--color-shadow) 48%, transparent), 0 1px 2px color-mix(in srgb, var(--color-shadow) 32%, transparent);--shadow-lg:0 0 0 1px color-mix(in srgb, var(--color-fg) 10%, transparent), 0 8px 24px color-mix(in srgb, var(--color-shadow) 56%, transparent), 0 2px 6px color-mix(in srgb, var(--color-shadow) 32%, transparent);color-scheme:dark}[data-brand][data-mode=system]{color-scheme:light dark}:dir(ltr){--dir:1}:dir(rtl){--dir:-1}@media (prefers-color-scheme:dark){[data-brand][data-mode=system]{--shadow-sm:0 0 0 1px color-mix(in srgb, var(--color-fg) 10%, transparent), 0 1px 2px color-mix(in srgb, var(--color-shadow) 40%, transparent);--shadow-med:0 0 0 1px color-mix(in srgb, var(--color-fg) 10%, transparent), 0 2px 8px color-mix(in srgb, var(--color-shadow) 48%, transparent), 0 1px 2px color-mix(in srgb, var(--color-shadow) 32%, transparent);--shadow-lg:0 0 0 1px color-mix(in srgb, var(--color-fg) 10%, transparent), 0 8px 24px color-mix(in srgb, var(--color-shadow) 56%, transparent), 0 2px 6px color-mix(in srgb, var(--color-shadow) 32%, transparent)}}@media (prefers-reduced-motion:reduce){:root{--distance-sm:0rem;--distance-med:0rem;--distance-lg:0rem;--scale-sm:0;--scale-med:0;--scale-lg:0;--duration-fast:.12s;--duration-med:.12s;--duration-slow:.12s}}}
3
3
 
4
4
  @font-face{src:local(Arial),local(ArialMT);size-adjust:101.568%;ascent-override:95.3892%;descent-override:23.7511%;line-gap-override:0%;font-family:Inter Fallback}@font-face{src:local(Courier New),local(CourierNewPSMT);size-adjust:127.781%;ascent-override:79.8319%;descent-override:23.48%;line-gap-override:0%;font-family:JetBrains Mono Fallback}@layer tokens{[data-brand=default]{--color-bg:light-dark(oklch(100% 0 0),oklch(14.5% .006 265));--color-bg-muted:light-dark(oklch(96.8% .004 265),oklch(27% .01 265));--color-bg-raised:light-dark(oklch(100% 0 0),oklch(20.5% .008 265));--color-fg:light-dark(oklch(14.5% .006 265),oklch(98.5% .002 265));--color-fg-muted:light-dark(oklch(44.5% .014 265),oklch(71% .012 265));--color-border:light-dark(oklch(92.5% .006 265),oklch(27% .01 265));--color-border-strong:oklch(55.5% .014 265);--color-accent:light-dark(oklch(54.6% .19 258),oklch(70.7% .14 258));--color-accent-fg:light-dark(oklch(100% 0 0),oklch(14.5% .006 265));--color-danger:light-dark(oklch(56% .2 25),oklch(70.4% .17 25));--color-danger-fg:light-dark(oklch(100% 0 0),oklch(14.5% .006 265));--color-focus:light-dark(oklch(54.6% .19 258),oklch(70.7% .14 258));--color-shadow:light-dark(oklch(14.5% .006 265),oklch(0% 0 0));--font-body:"Inter", "Inter Fallback", sans-serif;--font-heading:"Inter", "Inter Fallback", sans-serif;--font-display:"Inter", "Inter Fallback", sans-serif;--font-label:"Inter", "Inter Fallback", sans-serif;--font-mono:"JetBrains Mono", "JetBrains Mono Fallback", monospace;--font-trim-body-cap:.36377;--font-trim-body-baseline:.36377;--font-trim-heading-cap:.36377;--font-trim-heading-baseline:.36377;--font-trim-display-cap:.36377;--font-trim-display-baseline:.36377;--font-trim-label-cap:.36377;--font-trim-label-baseline:.36377;--font-trim-mono-cap:.37;--font-trim-mono-baseline:.36}@media (forced-colors:active){[data-brand][data-brand]{--color-bg:Canvas;--color-bg-muted:Canvas;--color-bg-raised:Canvas;--color-fg:CanvasText;--color-fg-muted:CanvasText;--color-border:CanvasText;--color-border-strong:CanvasText;--color-accent:LinkText;--color-accent-fg:Canvas;--color-danger:CanvasText;--color-danger-fg:Canvas;--color-focus:Highlight;--color-shadow:CanvasText}}}
5
5
 
@@ -73,7 +73,7 @@ const [open, setOpen] = useState(false);
73
73
 
74
74
  ## Accessibility
75
75
 
76
- - The trigger has `aria-haspopup="dialog"` and `aria-expanded`. The popup is `role="alertdialog"`, labelled by the title and described by the description.
76
+ - The trigger has `aria-haspopup="dialog"` and `aria-expanded`. The popup is `role="alertdialog"` with `aria-modal`, labelled by the title and described by the description.
77
77
  - Opening moves focus to Cancel; Tab and Shift+Tab cycle between the two buttons, and the page behind is inert. Esc or Cancel closes it, and focus returns to the trigger. A click outside does nothing.
78
78
  - The danger confirm button is told apart by its label as well as its color.
79
79
  - Under reduced motion the panel only fades.
package/dist/docs/Box.md CHANGED
@@ -20,6 +20,7 @@ The base element every component builds on: one element, chosen with `as`, style
20
20
 
21
21
  - Style props take token keys only. Spacing keys are px values (`"16"`); the middle step is `med`, never `md`.
22
22
  - Properties are logical: `paddingInline`, `marginBlockStart`, `inlineSize`. There is no `paddingLeft` or `width`.
23
+ - Sizing keys `xs`, `sm`, `med`, `lg` and `xl` are control heights, 24 to 56px: `maxInlineSize="lg"` is 48px wide. For a page or panel width use a container width, on `inlineSize`, `minInlineSize` and `maxInlineSize` only: `prose` (40rem, a reading column), `page` (64rem) or `wide` (80rem). `full`, `fit`, `min`, `max` and `auto` work on every sizing prop.
23
24
  - Only layout props are responsive: `{ base: "none", med: "flex" }` with breakpoints `sm`, `med`, `lg`, `xl`. Color and the rest take one value.
24
25
  - There are no hover, focus or active props; states belong in component CSS.
25
26
  - `null` and `false` leave a prop unset, so `paddingInline={dense && "8"}` works.
@@ -38,6 +39,13 @@ The base element every component builds on: one element, chosen with `as`, style
38
39
  <Box backgroundColor="bgRaised" borderRadius="med" boxShadow="sm" padding="16" />
39
40
  ```
40
41
 
42
+ ```tsx
43
+ // A centered page: full width on small screens, at most 64rem on wide ones.
44
+ <Box as="main" maxInlineSize="page" marginInline="auto" padding={{ base: "16", med: "32" }}>
45
+ …
46
+ </Box>
47
+ ```
48
+
41
49
  ## Don't
42
50
 
43
51
  ```tsx
@@ -45,6 +53,11 @@ The base element every component builds on: one element, chosen with `as`, style
45
53
  <Box paddingLeft="16" gap="md" />
46
54
  ```
47
55
 
56
+ ```tsx
57
+ // `lg` is a control height: this page is 48px wide.
58
+ <Box as="main" maxInlineSize="lg" marginInline="auto" />
59
+ ```
60
+
48
61
  ```tsx
49
62
  // `style` is not checked: raw values here bypass the tokens.
50
63
  <Box style={{ color: "#333" }} />
@@ -25,8 +25,11 @@ A form field for a search query: an `<input type="search">` (role `searchbox`) w
25
25
  - `disabled` uses the native `disabled`: the input leaves the tab order and does not submit, with a dashed border. `required` sets the native `required`.
26
26
  - `name` submits the query with its form. An uncontrolled field does not follow a native form reset; control it if the form resets.
27
27
  - Style props, `className` and `style` go to the `Field` around the label, input and messages, not to the input.
28
+ - `inputProps` reach the input: `ref`, `id`, `autoFocus`, `autoComplete`, `spellCheck`, `enterKeyHint`, `maxLength`, `onKeyDown` and `aria-*` such as `aria-controls` (ADR 0093). `label` owns the name, Field owns `aria-invalid`, `aria-describedby` and `aria-errormessage`, and `disabled` and `required` own their state, so those, `aria-readonly` and `aria-hidden` are not among them.
29
+ - A consumer `onKeyDown` runs before the field's own. Escape still clears unless that handler called `event.preventDefault()`. A prevented Escape also propagates, so a surrounding Dialog closes on it.
30
+ - A consumer `ref` gets the input, and the clear button still returns focus to it. A consumer `id` takes over from Field's generated one at hydration, and the label follows it.
28
31
  - Wrapping the field in a search landmark (`<search>` or `role="search"`, with the form around it) is the page's job, not the field's.
29
- - The module has no hooks, so a server component can render it; `onValueChange` must come from a client component.
32
+ - The module has no hooks, so a server component can render it; `onValueChange`, and an `inputProps` `ref` or `onKeyDown`, must come from a client component.
30
33
 
31
34
  ## Do
32
35
 
@@ -51,8 +54,25 @@ A form field for a search query: an `<input type="search">` (role `searchbox`) w
51
54
  </search>
52
55
  ```
53
56
 
57
+ ```tsx
58
+ // A "/" shortcut focuses the field; the results list is the input's `aria-controls`.
59
+ const ref = useRef<HTMLInputElement>(null);
60
+ <SearchField
61
+ label="Search issues"
62
+ hideLabel
63
+ value={query}
64
+ onValueChange={setQuery}
65
+ inputProps={{ ref, autoComplete: "off", "aria-controls": "issue-results" }}
66
+ />;
67
+ ```
68
+
54
69
  ## Don't
55
70
 
71
+ ```tsx
72
+ // Another name for the input: `label` names it, visible or not.
73
+ <SearchField label="Search issues" inputProps={{ "aria-label": "Find" }} />
74
+ ```
75
+
56
76
  ```tsx
57
77
  // The placeholder is not a name: it disappears on the first keystroke.
58
78
  <SearchField label="" placeholder="Search" />
@@ -94,6 +114,7 @@ Generated from the TypeScript types.
94
114
  | `disabled` | `boolean` | no | |
95
115
  | `error` | `ReactNode` | no | |
96
116
  | `hideLabel` | `boolean` | no | |
117
+ | `inputProps` | `SearchFieldInputProps` | no | |
97
118
  | `label` | `ReactNode` | yes | |
98
119
  | `name` | `string` | no | |
99
120
  | `onValueChange` | `((value: string) => void)` | no | |
package/dist/docs/Tag.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  ## Purpose
4
4
 
5
- A label that puts content in a category: a topic, a label, a user-made category. A `span` with a `bgMuted` fill and a full radius around a `Text` in the `label` font. It can be read-only, a link, or removable.
5
+ A label that puts content in a category: a topic, a label, a user-made category. A `span` with a `bgMuted` fill and an `lg` radius (half a one-line tag's height, so one line reads as a pill and wrapped lines stay inside the fill) around a `Text` in the `label` font. It can be read-only, a link, or removable.
6
6
 
7
7
  ## When to use
8
8
 
@@ -22,8 +22,8 @@ A label that puts content in a category: a topic, a label, a user-made category.
22
22
  - `size`: `sm` or `med` (default), the label's `fontSize` step. There are no color variants yet: a Tag is neutral (`fg` on `bgMuted`, a `contrastPairs` pair).
23
23
  - Read-only is the default. `href` makes the label a link (a `Clickable` `<a>` around the text, underlined). The tag itself stays a `span`, so a remove button never nests in the link.
24
24
  - `onRemove` adds a native `<button>` after the label with an `x` icon. Its name is "Remove <label>" from a string or number label; set `removeLabel` for any other label. Enter and Space activate it; the click calls `onRemove`. Tag handles no keys, so Backspace and Delete do nothing (ADR 0003, 0055).
25
- - Wrapping: an uncapped label wraps to the width it has, so a tag never overflows a narrow container or a 320px viewport at large text sizes.
26
- - Truncation: set `maxInlineSize` on the Tag, as the style prop or in `style` (the style prop's steps stop at 56px, so most caps are `style={{ maxInlineSize: "min(10rem, 100%)" }}`; the `100%` keeps a rem cap inside a narrow container at large text sizes). `style.maxWidth` counts too, and `style` wins over the prop, as inline styles do. A responsive prop truncates only with a `base` step and a size step (or `full`) at every breakpoint: `{ med: "xl" }` and `{ base: "xl", med: "fit" }` wrap. The prop's `fit`, `min`, `max` and `auto`, and `style` values `none`, `auto` and `*-content`, follow the content and wrap. A cap set only through `className` wraps instead. The label becomes one line with an ellipsis. While the pointer is over the tag, or focus is inside it, the label shows its whole text, wrapped within the same width. There is no tooltip and no `title`; the DOM always holds the full text, so screen readers read all of it and so does the remove button's name. The tag grows in height when it reveals, so leave room for it in a tight row. A read-only tag takes no focus, so a keyboard user cannot reveal it: cap read-only tags only where the full text is also elsewhere, or make them links.
25
+ - Wrapping: an uncapped label wraps to the width it has, so a tag never overflows a narrow container or a 320px viewport at large text sizes. Every line stays inside the fill and its rounded corners, and inside the outline under forced colors.
26
+ - Truncation: set `maxInlineSize` on the Tag, as the style prop or in `style` (the style prop's steps stop at 56px, so most caps are `style={{ maxInlineSize: "min(10rem, 100%)" }}`; the `100%` keeps a rem cap inside a narrow container at large text sizes). `style.maxWidth` counts too, and `style` wins over the prop, as inline styles do. A responsive prop truncates only with a `base` step and a size step (or `full`) at every breakpoint: `{ med: "xl" }` and `{ base: "xl", med: "fit" }` wrap. The prop's `fit`, `min`, `max` and `auto`, and `style` values `none`, `auto` and `*-content`, follow the content and wrap. A cap set only through `className` wraps instead. The label becomes one line with an ellipsis. While the pointer is over the tag, or focus is inside it, the label shows its whole text, wrapped within the same width and laid out as an uncapped label, so no line's descenders or link underline are cut off. There is no tooltip and no `title`; the DOM always holds the full text, so screen readers read all of it and so does the remove button's name. The tag grows in height when it reveals, so leave room for it in a tight row. A read-only tag takes no focus, so a keyboard user cannot reveal it: cap read-only tags only where the full text is also elsewhere, or make them links.
27
27
  - With no children it renders nothing. Display, fill, text color, padding, radius and `minBlockSize` (the remove button's 24px target) are default style props; a consumer's win. `className`, `style` and `ref` go to the root, `className` last.
28
28
  - The module has no hooks, so a server component can render it.
29
29
 
@@ -22,7 +22,7 @@
22
22
  - [SearchField](SearchField.md): A form field for a search query: an `<input type="search">` (role `searchbox`) with a search icon at its inline start and, while it holds a value, a clear button at its inline end. Escape empties a field that has a value, and the clear button empties it and puts focus back in the input, so a keyboard user never loses their place (ADR 0087). Built on Base UI's `Input` (ADR 0003); it composes `Field` for its label, description and error (ADR 0026). Three sizes at Button's heights (`sm`, `med`, `lg`: 32, 40 and 48 px).
23
23
  - [Stack](Stack.md): A vertical column of children with even space between them. `Stack` is a `Box` with `display="flex"` and `flexDirection="column"` as default style props, spaced by a required `gap`. Children render as they are: no wrapper per child.
24
24
  - [Tabs](Tabs.md): Switches between views that share one place on the page. The parts are `Tabs` (the root, a flex column; a row when vertical), `Tabs.List` (the `tablist`), `Tabs.Tab` (a `tab` button on `Clickable`) and `Tabs.Panel` (the `tabpanel`). Built on Base UI `Tabs` (ADR 0003, 0046): it owns the selection, one tab stop with arrow-key roving, `aria-selected`, and the ids that tie each tab to its panel. The selected tab shows an accent bar that fades and grows in (ADR 0049).
25
- - [Tag](Tag.md): A label that puts content in a category: a topic, a label, a user-made category. A `span` with a `bgMuted` fill and a full radius around a `Text` in the `label` font. It can be read-only, a link, or removable.
25
+ - [Tag](Tag.md): A label that puts content in a category: a topic, a label, a user-made category. A `span` with a `bgMuted` fill and an `lg` radius (half a one-line tag's height, so one line reads as a pill and wrapped lines stay inside the fill) around a `Text` in the `label` font. It can be read-only, a link, or removable.
26
26
  - [Text](Text.md): The base of all visible text, and the primitive every text component builds on. Capsize trims the box to the cap height and the baseline, so the gap around text is the visible space. It takes every Box style prop (`color`, `textAlign`, margins), plus `size`, `font`, `weight`, `leading` and `truncate`.
27
27
  - [Toast](Toast.md): Tells the user briefly about the result of an action without interrupting them: "Changes saved", "Message sent", "Couldn't upload the file". Material calls it a snackbar and Atlassian a flag. Built on Base UI's Toast, which owns the queue, the timers and swipe-to-dismiss. The parts add the look: a raised card in a stack at the bottom end corner, an icon per variant, a close button, and a slide-up-and-fade that is a plain fade under reduced motion. A toast never takes focus and moves nothing on the page.
28
28
 
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "./manifest.schema.json",
3
3
  "package": "@jonmilner/ui",
4
- "version": "0.1.0",
4
+ "version": "0.1.2",
5
5
  "components": [
6
6
  {
7
7
  "name": "AlertDialog",
@@ -1446,6 +1446,11 @@
1446
1446
  "type": "boolean",
1447
1447
  "required": false
1448
1448
  },
1449
+ {
1450
+ "name": "inputProps",
1451
+ "type": "SearchFieldInputProps",
1452
+ "required": false
1453
+ },
1449
1454
  {
1450
1455
  "name": "label",
1451
1456
  "type": "ReactNode",
@@ -2015,7 +2020,7 @@
2015
2020
  },
2016
2021
  {
2017
2022
  "name": "inlineSize",
2018
- "type": "\"auto\" | \"fit\" | \"full\" | \"lg\" | \"max\" | \"med\" | \"min\" | \"sm\" | \"xl\" | \"xs\"",
2023
+ "type": "\"auto\" | \"fit\" | \"full\" | \"lg\" | \"max\" | \"med\" | \"min\" | \"page\" | \"prose\" | \"sm\" | \"wide\" | \"xl\" | \"xs\"",
2019
2024
  "required": false,
2020
2025
  "values": [
2021
2026
  "auto",
@@ -2025,7 +2030,10 @@
2025
2030
  "max",
2026
2031
  "med",
2027
2032
  "min",
2033
+ "page",
2034
+ "prose",
2028
2035
  "sm",
2036
+ "wide",
2029
2037
  "xl",
2030
2038
  "xs"
2031
2039
  ],
@@ -2240,7 +2248,7 @@
2240
2248
  },
2241
2249
  {
2242
2250
  "name": "maxInlineSize",
2243
- "type": "\"auto\" | \"fit\" | \"full\" | \"lg\" | \"max\" | \"med\" | \"min\" | \"sm\" | \"xl\" | \"xs\"",
2251
+ "type": "\"auto\" | \"fit\" | \"full\" | \"lg\" | \"max\" | \"med\" | \"min\" | \"page\" | \"prose\" | \"sm\" | \"wide\" | \"xl\" | \"xs\"",
2244
2252
  "required": false,
2245
2253
  "values": [
2246
2254
  "auto",
@@ -2250,7 +2258,10 @@
2250
2258
  "max",
2251
2259
  "med",
2252
2260
  "min",
2261
+ "page",
2262
+ "prose",
2253
2263
  "sm",
2264
+ "wide",
2254
2265
  "xl",
2255
2266
  "xs"
2256
2267
  ],
@@ -2276,7 +2287,7 @@
2276
2287
  },
2277
2288
  {
2278
2289
  "name": "minInlineSize",
2279
- "type": "\"auto\" | \"fit\" | \"full\" | \"lg\" | \"max\" | \"med\" | \"min\" | \"sm\" | \"xl\" | \"xs\"",
2290
+ "type": "\"auto\" | \"fit\" | \"full\" | \"lg\" | \"max\" | \"med\" | \"min\" | \"page\" | \"prose\" | \"sm\" | \"wide\" | \"xl\" | \"xs\"",
2280
2291
  "required": false,
2281
2292
  "values": [
2282
2293
  "auto",
@@ -2286,7 +2297,10 @@
2286
2297
  "max",
2287
2298
  "med",
2288
2299
  "min",
2300
+ "page",
2301
+ "prose",
2289
2302
  "sm",
2303
+ "wide",
2290
2304
  "xl",
2291
2305
  "xs"
2292
2306
  ],
@@ -2554,6 +2568,9 @@
2554
2568
  "size.med": "var(--size-med)",
2555
2569
  "size.lg": "var(--size-lg)",
2556
2570
  "size.xl": "var(--size-xl)",
2571
+ "container.prose": "var(--container-prose)",
2572
+ "container.page": "var(--container-page)",
2573
+ "container.wide": "var(--container-wide)",
2557
2574
  "radius.none": "var(--radius-none)",
2558
2575
  "radius.sm": "var(--radius-sm)",
2559
2576
  "radius.med": "var(--radius-med)",
package/dist/index.d.mts CHANGED
@@ -16,6 +16,7 @@ import { Inline, InlineProps } from "./Inline/index.mjs";
16
16
  import { MenuTriggerProps } from "./Menu/client.mjs";
17
17
  import { Menu, MenuGroupProps, MenuItemProps, MenuPopupProps, MenuProps, MenuSeparatorProps } from "./Menu/index.mjs";
18
18
  import { MultiSelect, MultiSelectOption, MultiSelectProps } from "./MultiSelect/index.mjs";
19
+ import { SearchFieldInputProps } from "./SearchField/client.mjs";
19
20
  import { SearchField, SearchFieldProps } from "./SearchField/index.mjs";
20
21
  import { Stack, StackProps } from "./Stack/index.mjs";
21
22
  import { Tabs, TabsListProps, TabsPanelProps, TabsProps, TabsTabProps } from "./Tabs/index.mjs";
@@ -24,4 +25,4 @@ import { ToastOptions, ToastProviderProps, ToastVariant, useToast } from "./Toas
24
25
  import { Toast } from "./Toast/index.mjs";
25
26
  import { Theme, defineTheme } from "./theme/define-theme.mjs";
26
27
  import { ThemeProvider, ThemeProviderProps } from "./theme/ThemeProvider.mjs";
27
- export { AlertDialog, type AlertDialogProps, type AlertDialogTriggerProps, Badge, type BadgeProps, Box, type BoxProps, Button, type ButtonProps, Checkbox, type CheckboxProps, Chip, ChipGroup, type ChipGroupProps, type ChipProps, Clickable, type ClickableProps, Dialog, type DialogActionsProps, type DialogBodyProps, type DialogCloseProps, type DialogPopupProps, type DialogProps, type DialogTriggerProps, Field, type FieldDescriptionProps, type FieldErrorProps, type FieldLabelProps, type FieldProps, Heading, type HeadingLevel, type HeadingProps, type HeadingSize, Icon, IconButton, type IconButtonProps, type IconProps, Inline, type InlineProps, Menu, type MenuGroupProps, type MenuItemProps, type MenuPopupProps, type MenuProps, type MenuSeparatorProps, type MenuTriggerProps, MultiSelect, type MultiSelectOption, type MultiSelectProps, SearchField, type SearchFieldProps, Stack, type StackProps, type StyleProps, Tabs, type TabsListProps, type TabsPanelProps, type TabsProps, type TabsTabProps, Tag, type TagProps, Text, type TextProps, type Theme, ThemeProvider, type ThemeProviderProps, Toast, type ToastOptions, type ToastProviderProps, type ToastVariant, defineTheme, useToast };
28
+ export { AlertDialog, type AlertDialogProps, type AlertDialogTriggerProps, Badge, type BadgeProps, Box, type BoxProps, Button, type ButtonProps, Checkbox, type CheckboxProps, Chip, ChipGroup, type ChipGroupProps, type ChipProps, Clickable, type ClickableProps, Dialog, type DialogActionsProps, type DialogBodyProps, type DialogCloseProps, type DialogPopupProps, type DialogProps, type DialogTriggerProps, Field, type FieldDescriptionProps, type FieldErrorProps, type FieldLabelProps, type FieldProps, Heading, type HeadingLevel, type HeadingProps, type HeadingSize, Icon, IconButton, type IconButtonProps, type IconProps, Inline, type InlineProps, Menu, type MenuGroupProps, type MenuItemProps, type MenuPopupProps, type MenuProps, type MenuSeparatorProps, type MenuTriggerProps, MultiSelect, type MultiSelectOption, type MultiSelectProps, SearchField, type SearchFieldInputProps, type SearchFieldProps, Stack, type StackProps, type StyleProps, Tabs, type TabsListProps, type TabsPanelProps, type TabsProps, type TabsTabProps, Tag, type TagProps, Text, type TextProps, type Theme, ThemeProvider, type ThemeProviderProps, Toast, type ToastOptions, type ToastProviderProps, type ToastVariant, defineTheme, useToast };