@photon-ai/pho-ui 2.2.0 → 2.4.0

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 (69) hide show
  1. package/dist/chunks/basic-page-c_7Ii5Fr.js +1117 -0
  2. package/dist/chunks/basic-page-c_7Ii5Fr.js.map +1 -0
  3. package/dist/chunks/{button-BmhyLgy5.js → button-DNNs5RsT.js} +6 -6
  4. package/dist/chunks/{button-BmhyLgy5.js.map → button-DNNs5RsT.js.map} +1 -1
  5. package/dist/chunks/{dialog-DtFO7oy0.js → dialog-8SRNi_rv.js} +3 -3
  6. package/dist/chunks/{dialog-DtFO7oy0.js.map → dialog-8SRNi_rv.js.map} +1 -1
  7. package/dist/chunks/{error-Da7P5WZi.js → error-Crs-wqMC.js} +14 -14
  8. package/dist/chunks/{error-Da7P5WZi.js.map → error-Crs-wqMC.js.map} +1 -1
  9. package/dist/chunks/form-AiHbbw4m.js +17 -0
  10. package/dist/chunks/form-AiHbbw4m.js.map +1 -0
  11. package/dist/chunks/{input-QSAUO30c.js → input-DjvZoF8v.js} +48 -43
  12. package/dist/chunks/input-DjvZoF8v.js.map +1 -0
  13. package/dist/chunks/{input-group-5AtpIhC_.js → input-group-fc9_jD4d.js} +44 -38
  14. package/dist/chunks/input-group-fc9_jD4d.js.map +1 -0
  15. package/dist/chunks/kbd-DNI10uy7.js +18 -0
  16. package/dist/chunks/kbd-DNI10uy7.js.map +1 -0
  17. package/dist/chunks/{menu-Cgj3lq9z.js → menu-BQeprfxB.js} +5 -5
  18. package/dist/chunks/{menu-Cgj3lq9z.js.map → menu-BQeprfxB.js.map} +1 -1
  19. package/dist/chunks/scroll-area-Bu7egArU.js +166 -0
  20. package/dist/chunks/scroll-area-Bu7egArU.js.map +1 -0
  21. package/dist/chunks/sidebar-DvB-G0BP.js +231 -0
  22. package/dist/chunks/sidebar-DvB-G0BP.js.map +1 -0
  23. package/dist/chunks/toast-DoXaRPIZ.js +167 -0
  24. package/dist/chunks/toast-DoXaRPIZ.js.map +1 -0
  25. package/dist/components/button.js +1 -1
  26. package/dist/components/command.js +125 -172
  27. package/dist/components/command.js.map +1 -1
  28. package/dist/components/context-menu.js +23 -23
  29. package/dist/components/dialog.js +1 -1
  30. package/dist/components/error.js +1 -1
  31. package/dist/components/field.js +12 -5
  32. package/dist/components/field.js.map +1 -1
  33. package/dist/components/form.js +2 -14
  34. package/dist/components/input-group.js +1 -1
  35. package/dist/components/input.js +1 -1
  36. package/dist/components/kbd.js +2 -15
  37. package/dist/components/menu.js +1 -1
  38. package/dist/components/phone-input.js +1 -1
  39. package/dist/components/scroll-area.js +3 -2
  40. package/dist/components/toast.js +3 -57
  41. package/dist/index.js +65 -58
  42. package/dist/primitives.js +3 -3
  43. package/dist/sections/basic-page.js +15 -8
  44. package/dist/sections/sidebar.js +1 -1
  45. package/dist/src/components/command/command.d.ts +5 -4
  46. package/dist/src/components/field/field.d.ts +9 -0
  47. package/dist/src/components/input/input.d.ts +10 -1
  48. package/dist/src/components/input-group/input-group.d.ts +9 -2
  49. package/dist/src/components/scroll-area/index.d.ts +1 -0
  50. package/dist/src/components/scroll-area/scroll-area-edges.d.ts +11 -1
  51. package/dist/src/components/scroll-area/scroll-area.d.ts +15 -2
  52. package/dist/src/components/toast/index.d.ts +1 -1
  53. package/dist/src/components/toast/toast.d.ts +22 -7
  54. package/dist/src/sections/basic-page/basic-page.d.ts +210 -30
  55. package/dist/src/sections/basic-page/index.d.ts +1 -1
  56. package/dist/src/sections/sidebar/sidebar.d.ts +33 -3
  57. package/package.json +1 -1
  58. package/src/styles/pho.css +19 -0
  59. package/dist/chunks/basic-page-CB36yrpL.js +0 -643
  60. package/dist/chunks/basic-page-CB36yrpL.js.map +0 -1
  61. package/dist/chunks/input-QSAUO30c.js.map +0 -1
  62. package/dist/chunks/input-group-5AtpIhC_.js.map +0 -1
  63. package/dist/chunks/scroll-area-Cw4JFqNG.js +0 -152
  64. package/dist/chunks/scroll-area-Cw4JFqNG.js.map +0 -1
  65. package/dist/chunks/sidebar-BETMObNj.js +0 -186
  66. package/dist/chunks/sidebar-BETMObNj.js.map +0 -1
  67. package/dist/components/form.js.map +0 -1
  68. package/dist/components/kbd.js.map +0 -1
  69. package/dist/components/toast.js.map +0 -1
@@ -22,28 +22,35 @@ function l({ className: r, ...e }) {
22
22
  });
23
23
  }
24
24
  function s({ className: r, ...e }) {
25
+ return /* @__PURE__ */ t("div", {
26
+ className: o("flex min-w-0 flex-col gap-3", r),
27
+ ...e
28
+ });
29
+ }
30
+ function d({ className: r, ...e }) {
25
31
  return /* @__PURE__ */ t(i.Description, {
26
32
  className: o("text-pho-description text-base", r),
27
33
  ...e
28
34
  });
29
35
  }
30
- function d({ className: r, ...e }) {
36
+ function p({ className: r, ...e }) {
31
37
  return /* @__PURE__ */ t(i.Error, {
32
38
  className: o("text-pho-error text-base", r),
33
39
  ...e
34
40
  });
35
41
  }
36
- var f = {
42
+ var x = {
37
43
  Root: a,
38
44
  Label: n,
39
45
  Control: l,
40
- Description: s,
41
- Error: d,
46
+ Controls: s,
47
+ Description: d,
48
+ Error: p,
42
49
  Item: i.Item,
43
50
  Validity: i.Validity
44
51
  };
45
52
  export {
46
- f as Field
53
+ x as Field
47
54
  };
48
55
 
49
56
  //# sourceMappingURL=field.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"field.js","names":[],"sources":["../../src/components/field/field.tsx"],"sourcesContent":["import { type ComponentProps, type ElementType } from \"react\";\nimport { Field as BaseField } from \"@base-ui/react/field\";\nimport { cn } from \"../../utils/cn\";\n\n/** Override Base UI's `string | (state) => string` className with plain string. */\ntype StyledProps<T extends ElementType> = Omit<\n ComponentProps<T>,\n \"className\"\n> & {\n className?: string;\n};\n\nfunction Root({ className, ...props }: StyledProps<typeof BaseField.Root>) {\n return (\n <BaseField.Root\n className={cn(\"group/field flex flex-col gap-1.5\", className)}\n {...props}\n />\n );\n}\n\nfunction Label({ className, ...props }: StyledProps<typeof BaseField.Label>) {\n return (\n <BaseField.Label\n className={cn(\n \"text-pho-secondary cursor-default text-base font-medium\",\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction Control({\n className,\n ...props\n}: StyledProps<typeof BaseField.Control>) {\n return (\n <BaseField.Control\n className={cn(\n // Flat field surface — hairline ring carries the edge (site has no\n // resting shadows outside floating layers).\n \"bg-pho-primary ring-pho-primary text-pho-primary placeholder:text-pho-placeholder text-md rounded-base w-full px-3 py-2 ring-1 transition-shadow duration-100 ease-linear outline-none ring-inset\",\n \"focus-visible:ring-pho-brand focus-visible:ring-2\",\n // Invalid is mid-weight: thicker than the 1px rest hairline, thinner\n // than the 2px focus ring. Rest uses the subtle error ink; focus\n // steps up to the solid error.\n \"data-[invalid]:ring-pho-error-subtle data-[invalid]:focus-visible:ring-pho-error data-[invalid]:ring-[1.5px] data-[invalid]:focus-visible:ring-2\",\n \"disabled:cursor-not-allowed disabled:opacity-50\",\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction Description({\n className,\n ...props\n}: StyledProps<typeof BaseField.Description>) {\n return (\n <BaseField.Description\n className={cn(\"text-pho-description text-base\", className)}\n {...props}\n />\n );\n}\n\nfunction Error({ className, ...props }: StyledProps<typeof BaseField.Error>) {\n return (\n <BaseField.Error\n className={cn(\"text-pho-error text-base\", className)}\n {...props}\n />\n );\n}\n\n/**\n * Form field built on Base UI `Field`. Wires a label, description, and\n * validation error to a control for you — compose it around `Field.Control`\n * (or any control via `render`). `Field.Error` shows when the control is\n * invalid; `Field.Validity` exposes raw validity for custom messages.\n */\nexport const Field = {\n Root,\n Label,\n Control,\n Description,\n Error,\n Item: BaseField.Item,\n Validity: BaseField.Validity,\n};\n"],"mappings":";;;;;AAYA,SAAS,EAAK,EAAE,WAAA,GAAW,GAAG,EAAA,GAA6C;AACzE,SACE,gBAAA,EAAC,EAAU,MAAX;AAAA,IACE,WAAW,EAAG,qCAAqC,CAAS;AAAA,IAC5D,GAAI;AAAA,EACL,CAAA;AAEL;AAEA,SAAS,EAAM,EAAE,WAAA,GAAW,GAAG,EAAA,GAA8C;AAC3E,SACE,gBAAA,EAAC,EAAU,OAAX;AAAA,IACE,WAAW,EACT,2DACA,CACF;AAAA,IACA,GAAI;AAAA,EACL,CAAA;AAEL;AAEA,SAAS,EAAQ,EACf,WAAA,GACA,GAAG,EAAA,GACqC;AACxC,SACE,gBAAA,EAAC,EAAU,SAAX;AAAA,IACE,WAAW,EAGT,qMACA,qDAIA,oJACA,mDACA,CACF;AAAA,IACA,GAAI;AAAA,EACL,CAAA;AAEL;AAEA,SAAS,EAAY,EACnB,WAAA,GACA,GAAG,EAAA,GACyC;AAC5C,SACE,gBAAA,EAAC,EAAU,aAAX;AAAA,IACE,WAAW,EAAG,kCAAkC,CAAS;AAAA,IACzD,GAAI;AAAA,EACL,CAAA;AAEL;AAEA,SAAS,EAAM,EAAE,WAAA,GAAW,GAAG,EAAA,GAA8C;AAC3E,SACE,gBAAA,EAAC,EAAU,OAAX;AAAA,IACE,WAAW,EAAG,4BAA4B,CAAS;AAAA,IACnD,GAAI;AAAA,EACL,CAAA;AAEL;AAQA,IAAa,IAAQ;AAAA,EACnB,MAAA;AAAA,EACA,OAAA;AAAA,EACA,SAAA;AAAA,EACA,aAAA;AAAA,EACA,OAAA;AAAA,EACA,MAAM,EAAU;AAAA,EAChB,UAAU,EAAU;AACtB"}
1
+ {"version":3,"file":"field.js","names":[],"sources":["../../src/components/field/field.tsx"],"sourcesContent":["import { type ComponentProps, type ElementType } from \"react\";\nimport { Field as BaseField } from \"@base-ui/react/field\";\nimport { cn } from \"../../utils/cn\";\n\n/** Override Base UI's `string | (state) => string` className with plain string. */\ntype StyledProps<T extends ElementType> = Omit<\n ComponentProps<T>,\n \"className\"\n> & {\n className?: string;\n};\n\nfunction Root({ className, ...props }: StyledProps<typeof BaseField.Root>) {\n return (\n <BaseField.Root\n className={cn(\"group/field flex flex-col gap-1.5\", className)}\n {...props}\n />\n );\n}\n\nfunction Label({ className, ...props }: StyledProps<typeof BaseField.Label>) {\n return (\n <BaseField.Label\n className={cn(\n \"text-pho-secondary cursor-default text-base font-medium\",\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction Control({\n className,\n ...props\n}: StyledProps<typeof BaseField.Control>) {\n return (\n <BaseField.Control\n className={cn(\n // Flat field surface — hairline ring carries the edge (site has no\n // resting shadows outside floating layers).\n \"bg-pho-primary ring-pho-primary text-pho-primary placeholder:text-pho-placeholder text-md rounded-base w-full px-3 py-2 ring-1 transition-shadow duration-100 ease-linear outline-none ring-inset\",\n \"focus-visible:ring-pho-brand focus-visible:ring-2\",\n // Invalid is mid-weight: thicker than the 1px rest hairline, thinner\n // than the 2px focus ring. Rest uses the subtle error ink; focus\n // steps up to the solid error.\n \"data-[invalid]:ring-pho-error-subtle data-[invalid]:focus-visible:ring-pho-error data-[invalid]:ring-[1.5px] data-[invalid]:focus-visible:ring-2\",\n \"disabled:cursor-not-allowed disabled:opacity-50\",\n className,\n )}\n {...props}\n />\n );\n}\n\n/**\n * Several controls under one label: the lines of an address, first and\n * last name, the parts of a date. Stacks them at the gap the system uses\n * between the parts of one thing (12px), so the field's own 6px stays for\n * label and description. Put an `Inline` inside for a side-by-side row.\n */\nfunction Controls({ className, ...props }: ComponentProps<\"div\">) {\n return (\n <div className={cn(\"flex min-w-0 flex-col gap-3\", className)} {...props} />\n );\n}\n\nfunction Description({\n className,\n ...props\n}: StyledProps<typeof BaseField.Description>) {\n return (\n <BaseField.Description\n className={cn(\"text-pho-description text-base\", className)}\n {...props}\n />\n );\n}\n\nfunction Error({ className, ...props }: StyledProps<typeof BaseField.Error>) {\n return (\n <BaseField.Error\n className={cn(\"text-pho-error text-base\", className)}\n {...props}\n />\n );\n}\n\n/**\n * Form field built on Base UI `Field`. Wires a label, description, and\n * validation error to a control for you — compose it around `Field.Control`\n * (or any control via `render`). `Field.Error` shows when the control is\n * invalid; `Field.Validity` exposes raw validity for custom messages.\n * `Field.Controls` stacks several controls under one label.\n */\nexport const Field = {\n Root,\n Label,\n Control,\n Controls,\n Description,\n Error,\n Item: BaseField.Item,\n Validity: BaseField.Validity,\n};\n"],"mappings":";;;;;AAYA,SAAS,EAAK,EAAE,WAAA,GAAW,GAAG,EAAA,GAA6C;AACzE,SACE,gBAAA,EAAC,EAAU,MAAX;AAAA,IACE,WAAW,EAAG,qCAAqC,CAAS;AAAA,IAC5D,GAAI;AAAA,EACL,CAAA;AAEL;AAEA,SAAS,EAAM,EAAE,WAAA,GAAW,GAAG,EAAA,GAA8C;AAC3E,SACE,gBAAA,EAAC,EAAU,OAAX;AAAA,IACE,WAAW,EACT,2DACA,CACF;AAAA,IACA,GAAI;AAAA,EACL,CAAA;AAEL;AAEA,SAAS,EAAQ,EACf,WAAA,GACA,GAAG,EAAA,GACqC;AACxC,SACE,gBAAA,EAAC,EAAU,SAAX;AAAA,IACE,WAAW,EAGT,qMACA,qDAIA,oJACA,mDACA,CACF;AAAA,IACA,GAAI;AAAA,EACL,CAAA;AAEL;AAQA,SAAS,EAAS,EAAE,WAAA,GAAW,GAAG,EAAA,GAAgC;AAChE,SACE,gBAAA,EAAC,OAAD;AAAA,IAAK,WAAW,EAAG,+BAA+B,CAAS;AAAA,IAAG,GAAI;AAAA,EAAQ,CAAA;AAE9E;AAEA,SAAS,EAAY,EACnB,WAAA,GACA,GAAG,EAAA,GACyC;AAC5C,SACE,gBAAA,EAAC,EAAU,aAAX;AAAA,IACE,WAAW,EAAG,kCAAkC,CAAS;AAAA,IACzD,GAAI;AAAA,EACL,CAAA;AAEL;AAEA,SAAS,EAAM,EAAE,WAAA,GAAW,GAAG,EAAA,GAA8C;AAC3E,SACE,gBAAA,EAAC,EAAU,OAAX;AAAA,IACE,WAAW,EAAG,4BAA4B,CAAS;AAAA,IACnD,GAAI;AAAA,EACL,CAAA;AAEL;AASA,IAAa,IAAQ;AAAA,EACnB,MAAA;AAAA,EACA,OAAA;AAAA,EACA,SAAA;AAAA,EACA,UAAA;AAAA,EACA,aAAA;AAAA,EACA,OAAA;AAAA,EACA,MAAM,EAAU;AAAA,EAChB,UAAU,EAAU;AACtB"}
@@ -1,17 +1,5 @@
1
1
  "use client";
2
- import { t as m } from "../chunks/cn-ChIgwEl3.js";
3
- import "react";
4
- import { jsx as t } from "react/jsx-runtime";
5
- import { Form as e } from "@base-ui/react/form";
6
- function a({ className: o, ...r }) {
7
- return /* @__PURE__ */ t(e, {
8
- className: m("flex flex-col gap-5", o),
9
- ...r
10
- });
11
- }
12
- a.displayName = "Form";
2
+ import { t as r } from "../chunks/form-AiHbbw4m.js";
13
3
  export {
14
- a as Form
4
+ r as Form
15
5
  };
16
-
17
- //# sourceMappingURL=form.js.map
@@ -1,5 +1,5 @@
1
1
  "use client";
2
- import { t as o } from "../chunks/input-group-5AtpIhC_.js";
2
+ import { t as o } from "../chunks/input-group-fc9_jD4d.js";
3
3
  export {
4
4
  o as InputGroup
5
5
  };
@@ -1,5 +1,5 @@
1
1
  "use client";
2
- import { t as e } from "../chunks/input-QSAUO30c.js";
2
+ import { t as e } from "../chunks/input-DjvZoF8v.js";
3
3
  export {
4
4
  e as Input
5
5
  };
@@ -1,18 +1,5 @@
1
1
  "use client";
2
- import { t as i } from "../chunks/cn-ChIgwEl3.js";
3
- import "react";
4
- import { jsx as o } from "react/jsx-runtime";
5
- var s = "inline-flex h-4 min-w-4 items-center justify-center rounded-[3px] px-1 font-mono text-xs font-medium text-pho-secondary ring-1 ring-pho-secondary ring-inset select-none";
6
- function m({ keys: e, className: n, children: t, ...r }) {
7
- return /* @__PURE__ */ o("kbd", {
8
- className: i(s, n),
9
- ...r,
10
- children: t ?? e
11
- });
12
- }
13
- m.displayName = "Kbd";
2
+ import { t as e } from "../chunks/kbd-DNI10uy7.js";
14
3
  export {
15
- m as Kbd
4
+ e as Kbd
16
5
  };
17
-
18
- //# sourceMappingURL=kbd.js.map
@@ -1,5 +1,5 @@
1
1
  "use client";
2
- import { i as e, n as M, r as n, s as a, t as E } from "../chunks/menu-Cgj3lq9z.js";
2
+ import { i as e, n as M, r as n, s as a, t as E } from "../chunks/menu-BQeprfxB.js";
3
3
  export {
4
4
  E as MENU_ITEM,
5
5
  M as MENU_ITEM_COLORS,
@@ -4,7 +4,7 @@ import { t as S1 } from "../chunks/cn-ChIgwEl3.js";
4
4
  import { r as $4 } from "../chunks/use-press-pulse-8iorQPsh.js";
5
5
  import { t as E4 } from "../chunks/createReactComponent-BqCmnqfX.js";
6
6
  import { t as p4 } from "../chunks/IconCheck-D2WuculQ.js";
7
- import { t as U } from "../chunks/input-group-5AtpIhC_.js";
7
+ import { t as U } from "../chunks/input-group-fc9_jD4d.js";
8
8
  import { t as b } from "../chunks/combobox-Dj5m_dDd.js";
9
9
  import e, { useEffect as g4, useId as z4, useLayoutEffect as w4, useMemo as le, useRef as H1, useState as re } from "react";
10
10
  import { jsx as p, jsxs as M } from "react/jsx-runtime";
@@ -1,5 +1,6 @@
1
1
  "use client";
2
- import { t as e } from "../chunks/scroll-area-Cw4JFqNG.js";
2
+ import { n as e, t as o } from "../chunks/scroll-area-Bu7egArU.js";
3
3
  export {
4
- e as ScrollArea
4
+ e as BLUR_MAX_PX,
5
+ o as ScrollArea
5
6
  };
@@ -1,60 +1,6 @@
1
1
  "use client";
2
- import { t as r } from "../chunks/cn-ChIgwEl3.js";
3
- import "react";
4
- import { jsx as a } from "react/jsx-runtime";
5
- import { Toast as o } from "@base-ui/react/toast";
6
- var n = o.Provider, s = o.Portal, i = o.Action, l = o.useToastManager, c = o.createToastManager;
7
- function p({ className: t, ...e }) {
8
- return /* @__PURE__ */ a(o.Viewport, {
9
- className: r("fixed right-4 bottom-4 z-50 flex w-[22rem] max-w-[calc(100vw-2rem)] flex-col gap-2 outline-none", t),
10
- ...e
11
- });
12
- }
13
- function u({ className: t, ...e }) {
14
- return /* @__PURE__ */ a(o.Root, {
15
- className: r("bg-pho-primary text-pho-primary shadow-pho-lg ring-pho-secondary rounded-base relative w-full ring-1 select-none ring-inset", "[transform:translateX(var(--toast-swipe-movement-x,0px))] transition-[transform,opacity] duration-300 ease-out", "data-[starting-style]:translate-x-full data-[starting-style]:opacity-0", "data-[ending-style]:translate-x-full data-[ending-style]:opacity-0", "data-[swiping]:duration-0", t),
16
- ...e
17
- });
18
- }
19
- function m({ className: t, ...e }) {
20
- return /* @__PURE__ */ a(o.Content, {
21
- className: r("flex flex-col gap-1 p-4 pr-10", t),
22
- ...e
23
- });
24
- }
25
- function d({ className: t, ...e }) {
26
- return /* @__PURE__ */ a(o.Title, {
27
- className: r("text-pho-primary text-base font-medium", t),
28
- ...e
29
- });
30
- }
31
- function f({ className: t, ...e }) {
32
- return /* @__PURE__ */ a(o.Description, {
33
- className: r("text-pho-description text-base", t),
34
- ...e
35
- });
36
- }
37
- function g({ className: t, ...e }) {
38
- return /* @__PURE__ */ a(o.Close, {
39
- className: r("text-pho-secondary hover:text-pho-secondary-hover hover:bg-pho-ghost-hover outline-pho-brand absolute top-2.5 right-2.5 flex size-6 cursor-pointer items-center justify-center rounded-sm transition focus-visible:outline-2 [&>svg]:size-4", t),
40
- ...e
41
- });
42
- }
43
- var b = {
44
- Provider: n,
45
- Portal: s,
46
- Viewport: p,
47
- Root: u,
48
- Content: m,
49
- Title: d,
50
- Description: f,
51
- Close: g,
52
- Action: i,
53
- useToastManager: l,
54
- createToastManager: c
55
- };
2
+ import { n as o, t as s } from "../chunks/toast-DoXaRPIZ.js";
56
3
  export {
57
- b as Toast
4
+ s as Toast,
5
+ o as Toasty
58
6
  };
59
-
60
- //# sourceMappingURL=toast.js.map
package/dist/index.js CHANGED
@@ -1,73 +1,80 @@
1
1
  "use client";
2
- import { t as s } from "./chunks/cn-ChIgwEl3.js";
3
- import { n as r, r as o, t as E } from "./chunks/link-provider-9TFNyDqO.js";
4
- import { t as i } from "./chunks/resolve-variant-CcD8iG5l.js";
5
- import { n as I, r as n, t as A } from "./chunks/use-press-pulse-8iorQPsh.js";
2
+ import { t as a } from "./chunks/cn-ChIgwEl3.js";
3
+ import { n as r, r as E, t as o } from "./chunks/link-provider-9TFNyDqO.js";
4
+ import { t as S } from "./chunks/resolve-variant-CcD8iG5l.js";
5
+ import { n as A, r as T, t as I } from "./chunks/use-press-pulse-8iorQPsh.js";
6
6
  import "./utils.js";
7
- import { a as e, c as R, d as p, i as B, l as C, n as O, o as P, r as f, s as u, t as D, u as N } from "./chunks/button-BmhyLgy5.js";
8
- import { a as c, c as l, i as V, l as U, n as G, o as d, r as M, s as b, t as g } from "./chunks/error-Da7P5WZi.js";
9
- import { a as F, i as W, n as h, o as Z, r as v, s as w, t as x } from "./chunks/basic-page-CB36yrpL.js";
10
- import { a as z, c as Y, i as j, n as q, o as y, r as J, s as K, t as Q } from "./chunks/sidebar-BETMObNj.js";
11
- import { t as $ } from "./chunks/input-QSAUO30c.js";
12
- import { t as sa } from "./chunks/close-button-GvqWbLl0.js";
13
- import { t as ra } from "./chunks/input-group-5AtpIhC_.js";
14
- import { n as Ea, t as _a } from "./chunks/card-DSW3Uhag.js";
15
- import { n as Sa, t as Ia } from "./chunks/dialog-DtFO7oy0.js";
16
- import { i as Aa, n as Ta, r as ma, t as ea } from "./chunks/status-view-C8tabjDu.js";
7
+ import { a as m, c as R, d as B, i as p, l as C, n as O, o as f, r as u, s as N, t as P, u as D } from "./chunks/button-DNNs5RsT.js";
8
+ import { a as V, c, i as l, l as U, n as G, o as d, r as M, s as b, t as g } from "./chunks/error-Crs-wqMC.js";
9
+ import { a as F, c as W, d as h, f as v, i as Z, l as w, m as x, n as H, o as Y, p as z, r as X, s as j, t as q, u as y } from "./chunks/basic-page-c_7Ii5Fr.js";
10
+ import { a as K, c as Q, i as $, n as ss, o as as, r as ts, s as rs, t as Es } from "./chunks/sidebar-DvB-G0BP.js";
11
+ import { t as _s } from "./chunks/input-DjvZoF8v.js";
12
+ import { t as is } from "./chunks/close-button-GvqWbLl0.js";
13
+ import { t as Ts } from "./chunks/input-group-fc9_jD4d.js";
14
+ import { n as ns, t as es } from "./chunks/card-DSW3Uhag.js";
15
+ import { n as Rs, t as Bs } from "./chunks/dialog-8SRNi_rv.js";
16
+ import { i as Cs, n as Os, r as fs, t as us } from "./chunks/status-view-C8tabjDu.js";
17
17
  import "./components/status-view.js";
18
18
  export {
19
- x as BASIC_PAGE_CALLOUT,
20
- h as BASIC_PAGE_CARD,
21
- v as BASIC_PAGE_ITEM,
22
- W as BASIC_PAGE_ITEM_PANEL,
23
- F as BASIC_PAGE_ITEM_PANEL_DIVIDED,
24
- Z as BASIC_PAGE_ROW,
25
- D as BUTTON_COLORS,
19
+ q as AUTO_SAVE_DELAY_MS,
20
+ H as BASIC_PAGE_CALLOUT,
21
+ X as BASIC_PAGE_CARD,
22
+ Z as BASIC_PAGE_ITEM,
23
+ F as BASIC_PAGE_ITEM_PANEL,
24
+ Y as BASIC_PAGE_ITEM_PANEL_DIVIDED,
25
+ j as BASIC_PAGE_ROW,
26
+ P as BUTTON_COLORS,
26
27
  O as BUTTON_SHAPES,
27
- f as BUTTON_SIZES,
28
- B as BUTTON_VARIANTS,
29
- w as BasicPage,
30
- e as Button,
31
- P as ButtonLink,
32
- _a as CARD_SURFACE,
33
- A as CONTROL_PRESS_SCALE,
34
- I as CONTROL_PRESS_SPRING,
35
- Ea as Card,
36
- sa as CloseButton,
37
- Ia as Dialog,
38
- u as EFFECT_BUTTON_SIZES,
28
+ u as BUTTON_SIZES,
29
+ p as BUTTON_VARIANTS,
30
+ W as BasicPage,
31
+ m as Button,
32
+ f as ButtonLink,
33
+ es as CARD_SURFACE,
34
+ w as CONDENSE_BAR_ENTER,
35
+ y as CONDENSE_BAR_RISE_PX,
36
+ h as CONDENSE_BAR_TRAVEL,
37
+ I as CONTROL_PRESS_SCALE,
38
+ A as CONTROL_PRESS_SPRING,
39
+ ns as Card,
40
+ is as CloseButton,
41
+ Bs as Dialog,
42
+ N as EFFECT_BUTTON_SIZES,
39
43
  R as EffectButton,
40
44
  C as EffectButtonLink,
41
45
  g as Error,
42
46
  G as ErrorView,
43
47
  M as GENERIC_ERROR_TITLE,
44
- $ as Input,
45
- ra as InputGroup,
46
- E as LinkProvider,
47
- Q as SIDEBAR_HEADER_INSET,
48
- q as SIDEBAR_ITEM,
49
- J as SIDEBAR_ITEM_ACTIVE,
50
- j as SIDEBAR_ITEM_INACTIVE,
51
- z as SIDEBAR_ROOT,
52
- y as SIDEBAR_ROOT_BASE,
53
- K as SIDEBAR_ROOT_INSET,
54
- ea as STATUS_VIEW,
55
- Ta as STATUS_VIEW_COPY,
56
- ma as STATUS_VIEW_SIZES,
57
- Y as Sidebar,
58
- Aa as StatusView,
59
- N as buttonVariants,
60
- V as capitalizeFirst,
61
- s as cn,
62
- c as describeError,
63
- p as effectButtonVariants,
48
+ _s as Input,
49
+ Ts as InputGroup,
50
+ o as LinkProvider,
51
+ Es as SIDEBAR_HEADER_INSET,
52
+ ss as SIDEBAR_ITEM,
53
+ ts as SIDEBAR_ITEM_ACTIVE,
54
+ $ as SIDEBAR_ITEM_INACTIVE,
55
+ K as SIDEBAR_ROOT,
56
+ as as SIDEBAR_ROOT_BASE,
57
+ rs as SIDEBAR_ROOT_INSET,
58
+ us as STATUS_VIEW,
59
+ Os as STATUS_VIEW_COPY,
60
+ fs as STATUS_VIEW_SIZES,
61
+ Q as Sidebar,
62
+ Cs as StatusView,
63
+ D as buttonVariants,
64
+ l as capitalizeFirst,
65
+ a as cn,
66
+ V as describeError,
67
+ B as effectButtonVariants,
68
+ v as formToasts,
64
69
  d as httpReasonPhrase,
65
70
  b as httpStatusExplanation,
66
- l as isProblem,
67
- o as isReactComponent,
71
+ c as isProblem,
72
+ E as isReactComponent,
68
73
  U as parseProblem,
69
- i as resolveVariant,
70
- Sa as useDialogPending,
74
+ S as resolveVariant,
75
+ z as useAutoSave,
76
+ x as useCondense,
77
+ Rs as useDialogPending,
71
78
  r as useLinkComponent,
72
- n as usePressPulse
79
+ T as usePressPulse
73
80
  };
@@ -46,6 +46,9 @@ export * from "@base-ui/react/dialog";
46
46
  export * from "@base-ui/react/scroll-area";
47
47
  export * from "@base-ui/react/popover";
48
48
  export * from "@base-ui/react/avatar";
49
+ export * from "@base-ui/react/form";
50
+ export * from "@base-ui/react/menu";
51
+ export * from "@base-ui/react/toast";
49
52
  export * from "@base-ui/react/accordion";
50
53
  export * from "@base-ui/react/alert-dialog";
51
54
  export * from "@base-ui/react/autocomplete";
@@ -59,9 +62,7 @@ export * from "@base-ui/react/csp-provider";
59
62
  export * from "@base-ui/react/direction-provider";
60
63
  export * from "@base-ui/react/drawer";
61
64
  export * from "@base-ui/react/fieldset";
62
- export * from "@base-ui/react/form";
63
65
  export * from "@base-ui/react/input";
64
- export * from "@base-ui/react/menu";
65
66
  export * from "@base-ui/react/menubar";
66
67
  export * from "@base-ui/react/meter";
67
68
  export * from "@base-ui/react/navigation-menu";
@@ -75,7 +76,6 @@ export * from "@base-ui/react/select";
75
76
  export * from "@base-ui/react/slider";
76
77
  export * from "@base-ui/react/switch";
77
78
  export * from "@base-ui/react/tabs";
78
- export * from "@base-ui/react/toast";
79
79
  export * from "@base-ui/react/toggle";
80
80
  export * from "@base-ui/react/toggle-group";
81
81
  export * from "@base-ui/react/toolbar";
@@ -1,11 +1,18 @@
1
1
  "use client";
2
- import { a as _, i as E, n as I, o as a, r as s, s as P, t as C } from "../chunks/basic-page-CB36yrpL.js";
2
+ import { a as A, c as E, d as s, f as a, i as S, l as C, m as I, n as B, o as P, p as e, r as N, s as o, t as D, u as R } from "../chunks/basic-page-c_7Ii5Fr.js";
3
3
  export {
4
- C as BASIC_PAGE_CALLOUT,
5
- I as BASIC_PAGE_CARD,
6
- s as BASIC_PAGE_ITEM,
7
- E as BASIC_PAGE_ITEM_PANEL,
8
- _ as BASIC_PAGE_ITEM_PANEL_DIVIDED,
9
- a as BASIC_PAGE_ROW,
10
- P as BasicPage
4
+ D as AUTO_SAVE_DELAY_MS,
5
+ B as BASIC_PAGE_CALLOUT,
6
+ N as BASIC_PAGE_CARD,
7
+ S as BASIC_PAGE_ITEM,
8
+ A as BASIC_PAGE_ITEM_PANEL,
9
+ P as BASIC_PAGE_ITEM_PANEL_DIVIDED,
10
+ o as BASIC_PAGE_ROW,
11
+ E as BasicPage,
12
+ C as CONDENSE_BAR_ENTER,
13
+ R as CONDENSE_BAR_RISE_PX,
14
+ s as CONDENSE_BAR_TRAVEL,
15
+ a as formToasts,
16
+ e as useAutoSave,
17
+ I as useCondense
11
18
  };
@@ -1,5 +1,5 @@
1
1
  "use client";
2
- import { a as I, c as _, i as A, n as R, o as S, r as a, s, t as T } from "../chunks/sidebar-BETMObNj.js";
2
+ import { a as I, c as _, i as A, n as R, o as S, r as a, s, t as T } from "../chunks/sidebar-DvB-G0BP.js";
3
3
  export {
4
4
  T as SIDEBAR_HEADER_INSET,
5
5
  R as SIDEBAR_ITEM,
@@ -1,7 +1,7 @@
1
1
  import { ComponentProps, ReactNode } from 'react';
2
2
  import { Command as CommandPrimitive, useCommandState } from 'cmdk';
3
3
  import { Dialog as PhoDialog } from '../dialog';
4
- declare function Root({ className, children, ...props }: ComponentProps<typeof CommandPrimitive>): import("react").JSX.Element;
4
+ declare function Root({ shouldFilter, className, children, ...props }: ComponentProps<typeof CommandPrimitive>): import("react").JSX.Element;
5
5
  /**
6
6
  * The input row — a bottom hairline separates it from the list. Position
7
7
  * leading icons absolutely and pad the input (`pl-9`), mirroring
@@ -89,9 +89,10 @@ declare function Dialog({ open, onOpenChange, label, className, children, ...pro
89
89
  /**
90
90
  * Command menu built on `cmdk` — a filterable list of actions driven from a
91
91
  * single input, keyboard-first. Compose inline (`Command.Root`) or as a
92
- * ⌘K-style modal palette (`Command.Dialog`, which owns the overlay). By
93
- * default cmdk filters and ranks items for you; pass `shouldFilter={false}`
94
- * to render your own result set (e.g. hierarchy-preserving navigation).
92
+ * ⌘K-style modal palette (`Command.Dialog`, which owns the overlay).
93
+ * Filtering is yours by default — filter in render so the rows' diff can
94
+ * glide; pass `shouldFilter` to hand matching and ranking to cmdk (its
95
+ * imperative reorder skips the animation).
95
96
  *
96
97
  * Rows share one layout via `Command.Item` `level` — idle
97
98
  * `item` → `subitem` → `subsubitem`, or flat `result` while searching.
@@ -7,6 +7,13 @@ type StyledProps<T extends ElementType> = Omit<ComponentProps<T>, "className"> &
7
7
  declare function Root({ className, ...props }: StyledProps<typeof BaseField.Root>): import("react").JSX.Element;
8
8
  declare function Label({ className, ...props }: StyledProps<typeof BaseField.Label>): import("react").JSX.Element;
9
9
  declare function Control({ className, ...props }: StyledProps<typeof BaseField.Control>): import("react").JSX.Element;
10
+ /**
11
+ * Several controls under one label: the lines of an address, first and
12
+ * last name, the parts of a date. Stacks them at the gap the system uses
13
+ * between the parts of one thing (12px), so the field's own 6px stays for
14
+ * label and description. Put an `Inline` inside for a side-by-side row.
15
+ */
16
+ declare function Controls({ className, ...props }: ComponentProps<"div">): import("react").JSX.Element;
10
17
  declare function Description({ className, ...props }: StyledProps<typeof BaseField.Description>): import("react").JSX.Element;
11
18
  declare function Error({ className, ...props }: StyledProps<typeof BaseField.Error>): import("react").JSX.Element;
12
19
  /**
@@ -14,11 +21,13 @@ declare function Error({ className, ...props }: StyledProps<typeof BaseField.Err
14
21
  * validation error to a control for you — compose it around `Field.Control`
15
22
  * (or any control via `render`). `Field.Error` shows when the control is
16
23
  * invalid; `Field.Validity` exposes raw validity for custom messages.
24
+ * `Field.Controls` stacks several controls under one label.
17
25
  */
18
26
  export declare const Field: {
19
27
  Root: typeof Root;
20
28
  Label: typeof Label;
21
29
  Control: typeof Control;
30
+ Controls: typeof Controls;
22
31
  Description: typeof Description;
23
32
  Error: typeof Error;
24
33
  Item: import('react').ForwardRefExoticComponent<Omit<import('@base-ui/react').FieldItemProps, "ref"> & import('react').RefAttributes<HTMLDivElement>>;
@@ -15,6 +15,15 @@ export interface InputProps extends Omit<InputHTMLAttributes<HTMLInputElement>,
15
15
  }>;
16
16
  /** Node rendered at the right edge of the label row (e.g. "Forgot?"). */
17
17
  labelTrailing?: ReactNode;
18
+ /**
19
+ * Quiet word or glyph inside the field at its trailing edge (an
20
+ * auto-save's `Saved`, a live character count). Non-interactive overlay:
21
+ * it never takes the pointer, the invalid icon takes the corner over
22
+ * it, and the input reserves nothing — content that shows only
23
+ * sometimes brings its own surface wash (as `Saved` does) so long text
24
+ * fades beneath it instead of colliding.
25
+ */
26
+ trailing?: ReactNode;
18
27
  /** Class applied to the input wrapper. */
19
28
  wrapperClassName?: string;
20
29
  ref?: Ref<HTMLInputElement>;
@@ -24,7 +33,7 @@ export interface InputProps extends Omit<InputHTMLAttributes<HTMLInputElement>,
24
33
  * Pho's bordered surface, leading icon, invalid state, and a built-in password
25
34
  * reveal toggle.
26
35
  */
27
- export declare function Input({ label, hint, size, invalid, icon: Icon, labelTrailing, disabled, required, type, className, wrapperClassName, id, ref, ...props }: InputProps): import("react").JSX.Element;
36
+ export declare function Input({ label, hint, size, invalid, icon: Icon, labelTrailing, trailing, disabled, required, type, className, wrapperClassName, id, ref, ...props }: InputProps): import("react").JSX.Element;
28
37
  export declare namespace Input {
29
38
  var displayName: string;
30
39
  }
@@ -1,4 +1,4 @@
1
- import { ComponentProps, ElementType, HTMLAttributes, InputHTMLAttributes, Ref } from 'react';
1
+ import { ComponentProps, ElementType, HTMLAttributes, InputHTMLAttributes, Ref, ReactNode } from 'react';
2
2
  import { Separator as BaseSeparator } from '@base-ui/react/separator';
3
3
  /** Override Base UI's `string | (state) => string` className with plain string. */
4
4
  type StyledProps<T extends ElementType> = Omit<ComponentProps<T>, "className"> & {
@@ -20,6 +20,13 @@ export interface InputGroupRootProps extends HTMLAttributes<HTMLDivElement> {
20
20
  */
21
21
  declare function Root({ size, invalid, className, onPointerDown, ref, ...props }: InputGroupRootProps): import("react").JSX.Element;
22
22
  export interface InputGroupInputProps extends Omit<InputHTMLAttributes<HTMLInputElement>, "size"> {
23
+ /**
24
+ * Quiet word or glyph over the control's trailing edge, before the
25
+ * addons (an auto-save's `Saved`). Non-interactive overlay; content
26
+ * that shows only sometimes brings its own surface wash so long text
27
+ * fades beneath it. Reserves nothing.
28
+ */
29
+ trailing?: ReactNode;
23
30
  ref?: Ref<HTMLInputElement>;
24
31
  }
25
32
  /**
@@ -27,7 +34,7 @@ export interface InputGroupInputProps extends Omit<InputHTMLAttributes<HTMLInput
27
34
  * `Field.Root` it picks up the label and description wiring automatically;
28
35
  * standalone it behaves as a plain `<input>` (pass `aria-label` then).
29
36
  */
30
- declare function GroupInput({ className, ref, ...props }: InputGroupInputProps): import("react").JSX.Element;
37
+ declare function GroupInput({ className, trailing, ref, ...props }: InputGroupInputProps): import("react").JSX.Element;
31
38
  /**
32
39
  * Inline content beside the control — prefix/suffix text, an icon, a `Kbd`
33
40
  * hint, or a small button. Text and icons render in the secondary tone so the
@@ -1 +1,2 @@
1
1
  export { ScrollArea } from './scroll-area';
2
+ export { BLUR_MAX_PX } from './scroll-area-edges';
@@ -2,8 +2,18 @@ import { Ref } from 'react';
2
2
  /** Overlay strip height — a short ramp, not a banner. `h-8` = 32px. */
3
3
  export declare const EDGE_CLASS = "pointer-events-none absolute inset-x-0 z-10 h-8";
4
4
  export declare const EDGE_REVEAL_PX = 32;
5
+ /**
6
+ * The system's one blur strength. The edge fade peaks here, and a motion
7
+ * that softens (a scope swap, a bar title) borrows the same value, so
8
+ * every soft focus in the product is the same soft focus.
9
+ */
10
+ export declare const BLUR_MAX_PX = 1;
5
11
  export declare function paintEdge(node: HTMLDivElement | null, progress: number): void;
6
- export declare function Edge({ edge, edgeRef, }: {
12
+ export declare function Edge({ edge, edgeRef, surface, className, }: {
7
13
  edge: "top" | "bottom";
8
14
  edgeRef: Ref<HTMLDivElement>;
15
+ /** The surface the wash fades into — the card by default, or a page. */
16
+ surface?: string;
17
+ /** Position override — the strip sits at the named edge unless placed. */
18
+ className?: string;
9
19
  }): import("react").JSX.Element;
@@ -1,9 +1,22 @@
1
- import { ComponentProps, ElementType } from 'react';
1
+ import { ComponentProps, ElementType, Ref } from 'react';
2
2
  import { ScrollArea as BaseScrollArea } from '@base-ui/react/scroll-area';
3
3
  /** Override Base UI's `string | (state) => string` className with plain string. */
4
4
  type StyledProps<T extends ElementType> = Omit<ComponentProps<T>, "className"> & {
5
5
  className?: string;
6
6
  };
7
+ /**
8
+ * The scrolled content. `inset` is a resting inset in the scroll axis —
9
+ * like a scroll view's safe-area padding: the content stands clear of the
10
+ * edges at rest but scrolls past them to the true edge, and the scrollbar
11
+ * and edge fade stay on `Root`'s edges. `insetTop` / `insetBottom` set the
12
+ * ends separately (they win over `inset`).
13
+ */
14
+ declare function Content({ inset, insetTop, insetBottom, style, ref, ...props }: ComponentProps<typeof BaseScrollArea.Content> & {
15
+ inset?: number | string;
16
+ insetTop?: number | string;
17
+ insetBottom?: number | string;
18
+ ref?: Ref<HTMLDivElement>;
19
+ }): import("react").JSX.Element;
7
20
  declare function Root({ className, children, ...props }: StyledProps<typeof BaseScrollArea.Root>): import("react").JSX.Element;
8
21
  declare function Viewport({ className, ref, ...props }: StyledProps<typeof BaseScrollArea.Viewport>): import("react").JSX.Element;
9
22
  declare function Scrollbar({ className, ...props }: StyledProps<typeof BaseScrollArea.Scrollbar>): import("react").JSX.Element;
@@ -18,7 +31,7 @@ declare function Thumb({ className, ...props }: StyledProps<typeof BaseScrollAre
18
31
  export declare const ScrollArea: {
19
32
  Root: typeof Root;
20
33
  Viewport: typeof Viewport;
21
- Content: import('react').ForwardRefExoticComponent<Omit<import('@base-ui/react').ScrollAreaContentProps, "ref"> & import('react').RefAttributes<HTMLDivElement>>;
34
+ Content: typeof Content;
22
35
  Scrollbar: typeof Scrollbar;
23
36
  Thumb: typeof Thumb;
24
37
  Corner: import('react').ForwardRefExoticComponent<Omit<import('@base-ui/react').ScrollAreaCornerProps, "ref"> & import('react').RefAttributes<HTMLDivElement>>;
@@ -1 +1 @@
1
- export { Toast } from './toast';
1
+ export { Toast, Toasty } from './toast';
@@ -1,4 +1,4 @@
1
- import { ComponentProps, ElementType } from 'react';
1
+ import { ComponentProps, ElementType, ReactNode } from 'react';
2
2
  import { Toast as BaseToast } from '@base-ui/react/toast';
3
3
  /** Override Base UI's `string | (state) => string` className with plain string. */
4
4
  type StyledProps<T extends ElementType> = Omit<ComponentProps<T>, "className"> & {
@@ -11,12 +11,27 @@ declare function Title({ className, ...props }: StyledProps<typeof BaseToast.Tit
11
11
  declare function Description({ className, ...props }: StyledProps<typeof BaseToast.Description>): import("react").JSX.Element;
12
12
  declare function Close({ className, ...props }: StyledProps<typeof BaseToast.Close>): import("react").JSX.Element;
13
13
  /**
14
- * Toast built on Base UI `Toast` — a transient, non-blocking notification.
15
- * Wrap your app in `Toast.Provider`, render a `Toast.Portal` → `Viewport` that
16
- * maps `useToastManager().toasts` to `Toast.Root`s, then call
17
- * `useToastManager().add({ title, description })` to show one. Use a toast for
18
- * confirmation of a background action; for a choice the user must make, use
19
- * `Dialog`.
14
+ * Toasty — the whole toast system in one wrapper, Kumo-shaped: provider,
15
+ * portal, viewport, and the stacked card list with status variants. Wrap
16
+ * the app once and call `Toast.useToastManager().add({ title, type })`
17
+ * from any child; pass a `toastManager` from `createToastManager()` so
18
+ * code outside the tree (a form's auto-save, a query cache) can speak
19
+ * through the same lane. `manager.promise` shows loading → success/error
20
+ * with the matching glyphs.
21
+ */
22
+ export declare function Toasty({ children, toastManager, }: {
23
+ children?: ReactNode;
24
+ toastManager?: ComponentProps<typeof BaseToast.Provider>["toastManager"];
25
+ }): import("react").JSX.Element;
26
+ /**
27
+ * Toast built on Base UI `Toast` — transient, non-blocking notifications
28
+ * in a sonner-style stack, styled after Cloudflare's Kumo: at rest the
29
+ * cards collapse into a peek (12px rise and −10% scale per depth, words
30
+ * hidden behind the front card), expand into a true list with a 12px gap
31
+ * on hover or focus, swipe to dismiss, three visible at most. `type`
32
+ * (`success` / `error` / `warning` / `info` / `loading`) tints hairline,
33
+ * glyph, and title together. Reach for `Toasty` unless you need to
34
+ * compose the parts yourself.
20
35
  */
21
36
  export declare const Toast: {
22
37
  Provider: import('react').FC<import('@base-ui/react').ToastProviderProps>;