@photon-ai/pho-ui 0.7.1 → 1.0.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 (121) hide show
  1. package/dist/chunks/avatar-CiAvJNNs.js +99 -0
  2. package/dist/chunks/avatar-CiAvJNNs.js.map +1 -0
  3. package/dist/chunks/close-button-8f-oRJXt.js +420 -0
  4. package/dist/chunks/close-button-8f-oRJXt.js.map +1 -0
  5. package/dist/chunks/{cn-7uGUzCOM.js → cn-DTiB6ek_.js} +4 -2
  6. package/dist/chunks/{cn-7uGUzCOM.js.map → cn-DTiB6ek_.js.map} +1 -1
  7. package/dist/chunks/dialog-Bgb2Z1_v.js +141 -0
  8. package/dist/chunks/dialog-Bgb2Z1_v.js.map +1 -0
  9. package/dist/chunks/{input-DbJpdu6v.js → input-BSJGBUbf.js} +36 -36
  10. package/dist/chunks/input-BSJGBUbf.js.map +1 -0
  11. package/dist/chunks/menu-COLB_liS.js +205 -0
  12. package/dist/chunks/menu-COLB_liS.js.map +1 -0
  13. package/dist/chunks/{sidebar-CivriTLb.js → sidebar-16Pfn7IC.js} +12 -12
  14. package/dist/chunks/sidebar-16Pfn7IC.js.map +1 -0
  15. package/dist/chunks/spinner-Cy8bkyJf.js +54 -0
  16. package/dist/chunks/spinner-Cy8bkyJf.js.map +1 -0
  17. package/dist/components/accordion.js +21 -21
  18. package/dist/components/accordion.js.map +1 -1
  19. package/dist/components/alert-dialog.js +26 -26
  20. package/dist/components/alert-dialog.js.map +1 -1
  21. package/dist/components/autocomplete.js +46 -46
  22. package/dist/components/autocomplete.js.map +1 -1
  23. package/dist/components/avatar.js +1 -1
  24. package/dist/components/badge.js +1 -1
  25. package/dist/components/button.js +11 -11
  26. package/dist/components/checkbox.js +3 -3
  27. package/dist/components/checkbox.js.map +1 -1
  28. package/dist/components/collapsible.js +8 -8
  29. package/dist/components/collapsible.js.map +1 -1
  30. package/dist/components/combobox.js +69 -69
  31. package/dist/components/combobox.js.map +1 -1
  32. package/dist/components/context-menu.js +57 -44
  33. package/dist/components/context-menu.js.map +1 -1
  34. package/dist/components/dialog.js +3 -2
  35. package/dist/components/drawer.js +15 -15
  36. package/dist/components/drawer.js.map +1 -1
  37. package/dist/components/field.js +18 -18
  38. package/dist/components/field.js.map +1 -1
  39. package/dist/components/fieldset.js +9 -9
  40. package/dist/components/fieldset.js.map +1 -1
  41. package/dist/components/form.js +1 -1
  42. package/dist/components/input.js +1 -1
  43. package/dist/components/kbd.js +6 -6
  44. package/dist/components/kbd.js.map +1 -1
  45. package/dist/components/menu.js +6 -4
  46. package/dist/components/menubar.js +5 -5
  47. package/dist/components/menubar.js.map +1 -1
  48. package/dist/components/meter.js +20 -20
  49. package/dist/components/meter.js.map +1 -1
  50. package/dist/components/navigation-menu.js +8 -8
  51. package/dist/components/navigation-menu.js.map +1 -1
  52. package/dist/components/notification.js +24 -24
  53. package/dist/components/notification.js.map +1 -1
  54. package/dist/components/number-field.js +32 -32
  55. package/dist/components/number-field.js.map +1 -1
  56. package/dist/components/otp-field.js +5 -5
  57. package/dist/components/otp-field.js.map +1 -1
  58. package/dist/components/popover.js +10 -10
  59. package/dist/components/popover.js.map +1 -1
  60. package/dist/components/preview-card.js +8 -8
  61. package/dist/components/preview-card.js.map +1 -1
  62. package/dist/components/progress.js +25 -25
  63. package/dist/components/progress.js.map +1 -1
  64. package/dist/components/radio-group.js +13 -13
  65. package/dist/components/radio-group.js.map +1 -1
  66. package/dist/components/scroll-area.js +1 -1
  67. package/dist/components/select.js +27 -27
  68. package/dist/components/select.js.map +1 -1
  69. package/dist/components/separator.js +1 -1
  70. package/dist/components/slider.js +17 -17
  71. package/dist/components/slider.js.map +1 -1
  72. package/dist/components/spinner.js +6 -0
  73. package/dist/components/switch.js +10 -10
  74. package/dist/components/switch.js.map +1 -1
  75. package/dist/components/tabs.js +16 -16
  76. package/dist/components/tabs.js.map +1 -1
  77. package/dist/components/theme-toggle.js +199 -0
  78. package/dist/components/theme-toggle.js.map +1 -0
  79. package/dist/components/toast.js +24 -24
  80. package/dist/components/toast.js.map +1 -1
  81. package/dist/components/toggle-group.js +1 -1
  82. package/dist/components/toggle.js +5 -5
  83. package/dist/components/toggle.js.map +1 -1
  84. package/dist/components/toolbar.js +8 -8
  85. package/dist/components/toolbar.js.map +1 -1
  86. package/dist/components/tooltip.js +10 -10
  87. package/dist/components/tooltip.js.map +1 -1
  88. package/dist/index.js +29 -28
  89. package/dist/sections/sidebar.js +1 -1
  90. package/dist/src/components/avatar/avatar.d.ts +24 -2
  91. package/dist/src/components/avatar/index.d.ts +1 -1
  92. package/dist/src/components/button/button.d.ts +58 -44
  93. package/dist/src/components/button/index.d.ts +1 -1
  94. package/dist/src/components/dialog/dialog.d.ts +50 -7
  95. package/dist/src/components/dialog/index.d.ts +1 -1
  96. package/dist/src/components/menu/index.d.ts +1 -1
  97. package/dist/src/components/menu/menu-pending.d.ts +43 -0
  98. package/dist/src/components/spinner/index.d.ts +1 -0
  99. package/dist/src/components/spinner/spinner.d.ts +32 -0
  100. package/dist/src/components/theme-toggle/index.d.ts +1 -0
  101. package/dist/src/components/theme-toggle/theme-toggle.d.ts +77 -0
  102. package/dist/src/sections/sidebar/sidebar.d.ts +5 -6
  103. package/dist/utils.js +1 -1
  104. package/package.json +9 -1
  105. package/src/styles/fonts.css +14 -18
  106. package/src/styles/pho.css +11 -0
  107. package/src/styles/theme.css +182 -146
  108. package/dist/chunks/avatar-Bb4RZQIa.js +0 -53
  109. package/dist/chunks/avatar-Bb4RZQIa.js.map +0 -1
  110. package/dist/chunks/button-CQ4cZvkC.js +0 -365
  111. package/dist/chunks/button-CQ4cZvkC.js.map +0 -1
  112. package/dist/chunks/close-button-CNhn8z0w.js +0 -29
  113. package/dist/chunks/close-button-CNhn8z0w.js.map +0 -1
  114. package/dist/chunks/dialog-7oOe-eaO.js +0 -63
  115. package/dist/chunks/dialog-7oOe-eaO.js.map +0 -1
  116. package/dist/chunks/input-DbJpdu6v.js.map +0 -1
  117. package/dist/chunks/menu-BfaNHnOp.js +0 -101
  118. package/dist/chunks/menu-BfaNHnOp.js.map +0 -1
  119. package/dist/chunks/sidebar-CivriTLb.js.map +0 -1
  120. package/dist/src/components/context-menu/context-menu.d.ts +0 -34
  121. package/dist/src/components/menu/menu.d.ts +0 -47
@@ -1,11 +1,11 @@
1
1
  "use client";
2
- import { t as o } from "./cn-7uGUzCOM.js";
2
+ import { t as o } from "./cn-DTiB6ek_.js";
3
3
  import { n as g, r as v } from "./link-provider-9TFNyDqO.js";
4
- import { l as x } from "./button-CQ4cZvkC.js";
4
+ import { d as x } from "./close-button-8f-oRJXt.js";
5
5
  import { t as h } from "./createReactComponent-BqCmnqfX.js";
6
- import { n as l } from "./avatar-Bb4RZQIa.js";
7
- import { isValidElement as y } from "react";
8
- import { Fragment as b, jsx as t, jsxs as a } from "react/jsx-runtime";
6
+ import { n as l } from "./avatar-CiAvJNNs.js";
7
+ import { isValidElement as b } from "react";
8
+ import { Fragment as y, jsx as t, jsxs as a } from "react/jsx-runtime";
9
9
  var N = [["path", {
10
10
  d: "M17 7l-10 10",
11
11
  key: "svg-0"
@@ -25,7 +25,7 @@ var N = [["path", {
25
25
  d: "M18 12a1 1 0 1 0 2 0a1 1 0 1 0 -2 0",
26
26
  key: "svg-2"
27
27
  }]
28
- ], w = h("outline", "dots", "Dots", k), R = "border-pho-secondary bg-pho-page sticky top-0 flex h-dvh w-64 shrink-0 flex-col border-r px-4 py-5", _ = "outline-pho-brand flex w-full cursor-pointer items-center gap-2 rounded-md px-2 py-1.5 text-left text-sm transition-colors focus-visible:outline-2 focus-visible:-outline-offset-1", A = "bg-pho-primary text-pho-primary ring-pho-secondary font-medium ring-1 ring-inset *:data-icon:text-fg-pho-primary", E = o("text-pho-secondary *:data-icon:text-fg-pho-secondary", "hover:bg-pho-ghost-hover hover:text-pho-primary hover:*:data-icon:text-fg-pho-primary");
28
+ ], w = h("outline", "dots", "Dots", k), R = "border-pho-secondary bg-pho-page sticky top-0 flex h-dvh w-64 shrink-0 flex-col border-r px-4 py-5", _ = "outline-pho-brand flex w-full cursor-pointer items-center gap-2 rounded-sm px-2 py-1.5 text-left text-base transition-colors focus-visible:outline-2 focus-visible:-outline-offset-1", A = "bg-pho-primary text-pho-primary ring-pho-secondary font-medium ring-1 ring-inset *:data-icon:text-pho-primary", E = o("text-pho-secondary *:data-icon:text-pho-secondary", "hover:bg-pho-ghost-hover hover:text-pho-primary hover:*:data-icon:text-pho-primary");
29
29
  function C({ className: r, ...e }) {
30
30
  return /* @__PURE__ */ t("aside", {
31
31
  className: o(R, r),
@@ -52,7 +52,7 @@ function D({ className: r, ...e }) {
52
52
  }
53
53
  function B({ className: r, ...e }) {
54
54
  return /* @__PURE__ */ t("div", {
55
- className: o("text-pho-secondary mb-2 px-2 text-xs font-medium", r),
55
+ className: o("text-pho-description mb-2 px-2 text-xs font-normal", r),
56
56
  ...e
57
57
  });
58
58
  }
@@ -71,7 +71,7 @@ function F({ className: r, ...e }) {
71
71
  function p(r) {
72
72
  if (r == null || r === !1) return null;
73
73
  let e = null;
74
- return v(r) ? e = /* @__PURE__ */ t(r, {}) : y(r) && (e = r), e == null ? null : /* @__PURE__ */ t("span", {
74
+ return v(r) ? e = /* @__PURE__ */ t(r, {}) : b(r) && (e = r), e == null ? null : /* @__PURE__ */ t("span", {
75
75
  "data-icon": !0,
76
76
  className: "pointer-events-none inline-flex shrink-0 items-center [&>svg]:size-4 [&>svg]:shrink-0",
77
77
  children: e
@@ -94,7 +94,7 @@ function L({ icon: r, active: e, className: n, children: i, href: s, external: c
94
94
  children: [
95
95
  p(r),
96
96
  m,
97
- c && /* @__PURE__ */ a(b, { children: [p(/* @__PURE__ */ t(I, { "aria-hidden": !0 })), /* @__PURE__ */ t("span", {
97
+ c && /* @__PURE__ */ a(y, { children: [p(/* @__PURE__ */ t(I, { "aria-hidden": !0 })), /* @__PURE__ */ t("span", {
98
98
  className: "sr-only",
99
99
  children: "(opens in a new tab)"
100
100
  })] })
@@ -107,7 +107,7 @@ function L({ icon: r, active: e, className: n, children: i, href: s, external: c
107
107
  children: [p(r), m]
108
108
  }) });
109
109
  }
110
- var O = "group outline-pho-brand flex w-full cursor-pointer items-center gap-2 rounded-lg p-2 text-left focus-visible:outline-2 focus-visible:outline-offset-2";
110
+ var O = "group outline-pho-brand flex w-full cursor-pointer items-center gap-2 rounded-base p-2 text-left focus-visible:outline-2 focus-visible:outline-offset-2";
111
111
  function S(r) {
112
112
  const e = r.split(/\s+/).filter(Boolean);
113
113
  return ((e[0]?.[0] ?? r[0] ?? "?") + (e.length >= 2 ? e[e.length - 1]?.[0] ?? "" : "")).toUpperCase();
@@ -132,7 +132,7 @@ function U({ name: r, avatarSrc: e, initials: n, className: i, ...s }) {
132
132
  /* @__PURE__ */ t("span", {
133
133
  "aria-hidden": !0,
134
134
  className: x({
135
- variant: "secondary",
135
+ variant: "outlined",
136
136
  size: "sm",
137
137
  shape: "circle",
138
138
  className: "group-hover:bg-pho-primary-hover group-hover:text-pho-secondary-hover group-data-[popup-open]:bg-pho-primary-hover group-data-[popup-open]:text-pho-secondary-hover p-1 group-data-[pressed]:scale-[0.97]"
@@ -161,4 +161,4 @@ export {
161
161
  _ as t
162
162
  };
163
163
 
164
- //# sourceMappingURL=sidebar-CivriTLb.js.map
164
+ //# sourceMappingURL=sidebar-16Pfn7IC.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sidebar-16Pfn7IC.js","names":["__iconNode"],"sources":["../../../../node_modules/.pnpm/@tabler+icons-react@3.44.0_react@19.2.7/node_modules/@tabler/icons-react/dist/esm/icons/IconArrowUpRight.mjs","../../../../node_modules/.pnpm/@tabler+icons-react@3.44.0_react@19.2.7/node_modules/@tabler/icons-react/dist/esm/icons/IconDots.mjs","../../src/sections/sidebar/sidebar.tsx"],"sourcesContent":["/**\n * @license @tabler/icons-react v3.44.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createReactComponent from '../createReactComponent.mjs';\n\nconst __iconNode = [[\"path\", { \"d\": \"M17 7l-10 10\", \"key\": \"svg-0\" }], [\"path\", { \"d\": \"M8 7l9 0l0 9\", \"key\": \"svg-1\" }]];\nconst IconArrowUpRight = createReactComponent(\"outline\", \"arrow-up-right\", \"ArrowUpRight\", __iconNode);\n\nexport { __iconNode, IconArrowUpRight as default };\n//# sourceMappingURL=IconArrowUpRight.mjs.map\n","/**\n * @license @tabler/icons-react v3.44.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createReactComponent from '../createReactComponent.mjs';\n\nconst __iconNode = [[\"path\", { \"d\": \"M4 12a1 1 0 1 0 2 0a1 1 0 1 0 -2 0\", \"key\": \"svg-0\" }], [\"path\", { \"d\": \"M11 12a1 1 0 1 0 2 0a1 1 0 1 0 -2 0\", \"key\": \"svg-1\" }], [\"path\", { \"d\": \"M18 12a1 1 0 1 0 2 0a1 1 0 1 0 -2 0\", \"key\": \"svg-2\" }]];\nconst IconDots = createReactComponent(\"outline\", \"dots\", \"Dots\", __iconNode);\n\nexport { __iconNode, IconDots as default };\n//# sourceMappingURL=IconDots.mjs.map\n","import {\n isValidElement,\n type AnchorHTMLAttributes,\n type ButtonHTMLAttributes,\n type ComponentProps,\n type FC,\n type ReactNode,\n type Ref,\n} from \"react\";\nimport { IconArrowUpRight, IconDots } from \"@tabler/icons-react\";\nimport { cn } from \"../../utils/cn\";\nimport { isReactComponent } from \"../../utils/is-react-component\";\nimport { useLinkComponent } from \"../../utils/link-provider\";\nimport { Avatar } from \"../../components/avatar\";\nimport { buttonVariants } from \"../../components/button\";\n\n/**\n * Sidebar — Pho's first SECTION: a composed app rail, not a micro component.\n * It encodes the navigation rail used across Photon surfaces (the Pho docs\n * site, the dashboard): a sticky full-height column with a brand header, a\n * scrollable stack of titled nav groups, and a pinned footer that usually\n * carries the account row.\n *\n * Sections stay presentational — no router, no data fetching, no theme\n * plumbing. Links render through the host's `LinkProvider` (same contract as\n * `ButtonLink`), state arrives via props (`active`), and interactive footers\n * compose with other Pho parts (e.g. wrap `Sidebar.AccountRow` in a\n * `Menu.Trigger render={...}` to open an account menu).\n */\n\n/* ------------------------------- class map ------------------------------- */\n\n/** The rail itself — sticky, full-height, hairline right edge. */\nexport const SIDEBAR_ROOT =\n \"border-pho-secondary bg-pho-page sticky top-0 flex h-dvh w-64 shrink-0 flex-col border-r px-4 py-5\";\n\n/** A nav row at rest and on hover. Active/inactive inks split below. */\nexport const SIDEBAR_ITEM =\n \"outline-pho-brand flex w-full cursor-pointer items-center gap-2 rounded-sm px-2 py-1.5 text-left text-base transition-colors focus-visible:outline-2 focus-visible:-outline-offset-1\";\n\n/**\n * Selected row — lifted onto the primary surface with the site hairline.\n * The icon carries the same ink as the label so the pair reads as one unit.\n */\nexport const SIDEBAR_ITEM_ACTIVE =\n \"bg-pho-primary text-pho-primary ring-pho-secondary font-medium ring-1 ring-inset *:data-icon:text-pho-primary\";\n\n/**\n * Resting row — secondary ink (75%), ghost wash on hover. Icon tracks the\n * label's ink at every state.\n */\nexport const SIDEBAR_ITEM_INACTIVE = cn(\n \"text-pho-secondary *:data-icon:text-pho-secondary\",\n \"hover:bg-pho-ghost-hover hover:text-pho-primary hover:*:data-icon:text-pho-primary\",\n);\n\n/* --------------------------------- frame --------------------------------- */\n\ninterface RootProps extends ComponentProps<\"aside\"> {\n ref?: Ref<HTMLElement>;\n}\n\n/** The rail — a sticky, full-height `<aside>` with the hairline right edge. */\nfunction Root({ className, ...props }: RootProps) {\n return <aside className={cn(SIDEBAR_ROOT, className)} {...props} />;\n}\n\n/** Brand slot at the top of the rail — logo, wordmark, workspace switcher. */\nfunction Header({ className, ...props }: ComponentProps<\"div\">) {\n return (\n <div\n className={cn(\"mb-6 flex items-center gap-2.5 px-2\", className)}\n {...props}\n />\n );\n}\n\n/** The scrollable middle — a stack of `Sidebar.Group`s. */\nfunction Nav({ className, ...props }: ComponentProps<\"nav\">) {\n return (\n <nav\n className={cn(\"flex flex-1 flex-col gap-6 overflow-y-auto\", className)}\n {...props}\n />\n );\n}\n\n/** One titled cluster of nav rows: a `GroupLabel` followed by a `List`. */\nfunction Group({ className, ...props }: ComponentProps<\"div\">) {\n return <div className={className} {...props} />;\n}\n\n/** The cluster's caption — description ink, regular weight. */\nfunction GroupLabel({ className, ...props }: ComponentProps<\"div\">) {\n return (\n <div\n className={cn(\n \"text-pho-description mb-2 px-2 text-xs font-normal\",\n className,\n )}\n {...props}\n />\n );\n}\n\ninterface ListProps extends ComponentProps<\"ul\"> {\n /** Lay the rows out in two columns — for long, flat registries. */\n columns?: boolean;\n}\n\n/** The rows of a group. `columns` switches to a two-column grid. */\nfunction List({ className, columns, ...props }: ListProps) {\n return (\n <ul\n className={cn(\n // list-none/m-0/p-0 shield the rail from host prose styles.\n \"m-0 list-none p-0 *:m-0\",\n columns\n ? \"grid grid-cols-2 gap-x-2 gap-y-0.5\"\n : \"flex flex-col gap-0.5\",\n className,\n )}\n {...props}\n />\n );\n}\n\n/** Pinned bottom cluster — docs link, account row, theme toggle. */\nfunction Footer({ className, ...props }: ComponentProps<\"div\">) {\n return (\n <div className={cn(\"mt-4 flex flex-col gap-0.5\", className)} {...props} />\n );\n}\n\n/* --------------------------------- item ---------------------------------- */\n\n/** An icon slot — a component (`IconBook`) or element (`<IconBook />`). */\ntype Slottable = ReactNode | FC<{ className?: string }>;\n\nfunction renderIcon(icon: Slottable): ReactNode {\n if (icon == null || icon === false) return null;\n let content: ReactNode = null;\n if (isReactComponent(icon)) {\n const Icon = icon;\n content = <Icon />;\n } else if (isValidElement(icon)) {\n content = icon;\n }\n if (content == null) return null;\n return (\n <span\n data-icon\n className=\"pointer-events-none inline-flex shrink-0 items-center [&>svg]:size-4 [&>svg]:shrink-0\"\n >\n {content}\n </span>\n );\n}\n\ninterface ItemBaseProps {\n /** Slot before the label — a component (`IconBook`) or element. */\n icon?: Slottable;\n /** Marks the row as the current destination (adds `aria-current=\"page\"`). */\n active?: boolean;\n children?: ReactNode;\n className?: string;\n}\n\nexport interface SidebarItemLinkProps\n extends\n ItemBaseProps,\n Omit<AnchorHTMLAttributes<HTMLAnchorElement>, keyof ItemBaseProps> {\n /** Destination — rendered through the host's `LinkProvider`. */\n href: string;\n /** Leaves the app: opens in a new tab and renders a ↗ cue. */\n external?: boolean;\n}\n\nexport interface SidebarItemButtonProps\n extends\n ItemBaseProps,\n Omit<ButtonHTMLAttributes<HTMLButtonElement>, keyof ItemBaseProps> {\n href?: undefined;\n external?: undefined;\n}\n\nexport type SidebarItemProps = SidebarItemLinkProps | SidebarItemButtonProps;\n\n/**\n * A nav row — a link when `href` is given (rendered through the host's\n * `LinkProvider`), otherwise a button. `active` lifts the row onto the\n * primary surface; `external` opens a new tab and appends a ↗ cue.\n */\nfunction Item({\n icon,\n active,\n className,\n children,\n href,\n external,\n ...rest\n}: SidebarItemProps) {\n const Link = useLinkComponent();\n const rowClass = cn(\n SIDEBAR_ITEM,\n active ? SIDEBAR_ITEM_ACTIVE : SIDEBAR_ITEM_INACTIVE,\n className,\n );\n const label = <span className=\"min-w-0 flex-1 truncate\">{children}</span>;\n\n if (href !== undefined) {\n return (\n <li>\n <Link\n href={href}\n aria-current={active ? \"page\" : undefined}\n {...(external && { target: \"_blank\", rel: \"noopener noreferrer\" })}\n {...(rest as AnchorHTMLAttributes<HTMLAnchorElement>)}\n className={rowClass}\n >\n {renderIcon(icon)}\n {label}\n {external && (\n <>\n {renderIcon(<IconArrowUpRight aria-hidden />)}\n <span className=\"sr-only\">(opens in a new tab)</span>\n </>\n )}\n </Link>\n </li>\n );\n }\n\n return (\n <li>\n <button\n type=\"button\"\n aria-current={active ? \"page\" : undefined}\n {...(rest as ButtonHTMLAttributes<HTMLButtonElement>)}\n className={rowClass}\n >\n {renderIcon(icon)}\n {label}\n </button>\n </li>\n );\n}\n\n/* ------------------------------ account row ------------------------------ */\n\n/**\n * Whole-row account trigger. The row itself stays visually quiet — it only\n * carries the `group` state (hover/press/popup-open) and the focus ring;\n * all visual feedback renders on the ⋯ circle via `group-*` classes.\n */\nconst ACCOUNT_ROW =\n \"group outline-pho-brand flex w-full cursor-pointer items-center gap-2 rounded-base p-2 text-left focus-visible:outline-2 focus-visible:outline-offset-2\";\n\n/** Avatar initials: first + last word initial, else the first character. */\nfunction initialsFrom(name: string): string {\n const words = name.split(/\\s+/).filter(Boolean);\n const first = words[0]?.[0] ?? name[0] ?? \"?\";\n const last = words.length >= 2 ? (words[words.length - 1]?.[0] ?? \"\") : \"\";\n return (first + last).toUpperCase();\n}\n\nexport interface SidebarAccountRowProps extends Omit<\n ButtonHTMLAttributes<HTMLButtonElement>,\n \"children\"\n> {\n /** Display name — also the source for fallback initials. */\n name: string;\n /** Avatar image URL; falls back to initials while loading or on error. */\n avatarSrc?: string;\n /** Override the derived initials. */\n initials?: string;\n ref?: Ref<HTMLButtonElement>;\n}\n\n/**\n * The account chip pinned to the rail's footer — an xs avatar, the name, and\n * a decorative ⋯ circle. The WHOLE row is one button, but the row is only the\n * control — the circle is the indicator: hover, press, and menu-open feedback\n * all render on the ⋯ (a span wearing the stock secondary-circle button\n * classes), driven by the row's `group` state, so it reads as a button\n * without nesting one.\n *\n * It renders a plain `<button>` and forwards every prop, so it slots straight\n * into a menu: `<Menu.Trigger render={<Sidebar.AccountRow name=\"…\" />} />` —\n * Base UI's `data-popup-open` / `data-pressed` states light up the circle.\n */\nfunction AccountRow({\n name,\n avatarSrc,\n initials,\n className,\n ...props\n}: SidebarAccountRowProps) {\n return (\n <button type=\"button\" className={cn(ACCOUNT_ROW, className)} {...props}>\n <Avatar.Root size=\"xs\">\n {avatarSrc && <Avatar.Image src={avatarSrc} alt=\"\" />}\n <Avatar.Fallback>{initials ?? initialsFrom(name)}</Avatar.Fallback>\n </Avatar.Root>\n <span className=\"text-pho-primary min-w-0 flex-1 truncate text-xs\">\n {name}\n </span>\n <span\n aria-hidden\n className={buttonVariants({\n variant: \"outlined\",\n size: \"sm\",\n shape: \"circle\",\n className:\n \"group-hover:bg-pho-primary-hover group-hover:text-pho-secondary-hover group-data-[popup-open]:bg-pho-primary-hover group-data-[popup-open]:text-pho-secondary-hover p-1 group-data-[pressed]:scale-[0.97]\",\n })}\n >\n <IconDots className=\"size-4\" />\n </span>\n </button>\n );\n}\n\n/* -------------------------------- assembly ------------------------------- */\n\n/**\n * The composed sidebar rail. Assemble the frame parts and fill them with\n * rows; wire interactivity by composing other Pho parts around them:\n *\n * ```tsx\n * <Sidebar.Root>\n * <Sidebar.Header>…brand…</Sidebar.Header>\n * <Sidebar.Nav>\n * <Sidebar.Group>\n * <Sidebar.GroupLabel>Pages</Sidebar.GroupLabel>\n * <Sidebar.List>\n * <Sidebar.Item href=\"/\" icon={IconHome} active>\n * Overview\n * </Sidebar.Item>\n * </Sidebar.List>\n * </Sidebar.Group>\n * </Sidebar.Nav>\n * <Sidebar.Footer>\n * <Menu.Root>\n * <Menu.Trigger render={<Sidebar.AccountRow name=\"Ada Lovelace\" />} />\n * …\n * </Menu.Root>\n * </Sidebar.Footer>\n * </Sidebar.Root>\n * ```\n */\nexport const Sidebar = {\n Root,\n Header,\n Nav,\n Group,\n GroupLabel,\n List,\n Item,\n Footer,\n AccountRow,\n};\n"],"x_google_ignoreList":[0,1],"mappings":"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"}
@@ -0,0 +1,54 @@
1
+ "use client";
2
+ import { t } from "./cn-DTiB6ek_.js";
3
+ import { t as c } from "./resolve-variant-CcD8iG5l.js";
4
+ import "react";
5
+ import { jsx as o, jsxs as l } from "react/jsx-runtime";
6
+ var m = {
7
+ sm: {
8
+ classes: "size-3.5",
9
+ description: "Small — dense rows and compact chrome"
10
+ },
11
+ md: {
12
+ classes: "size-4",
13
+ description: "Medium — the default (menu rows, button icons)"
14
+ },
15
+ lg: {
16
+ classes: "size-5",
17
+ description: "Large — standalone or roomy surfaces"
18
+ }
19
+ };
20
+ function d({ size: i = "md", className: a, "aria-label": e, "aria-hidden": s, ...n }) {
21
+ const r = e != null && e !== "";
22
+ return /* @__PURE__ */ l("svg", {
23
+ fill: "none",
24
+ stroke: "currentColor",
25
+ viewBox: "0 0 20 20",
26
+ role: r ? "status" : void 0,
27
+ "aria-label": e,
28
+ "aria-hidden": r ? s : s ?? !0,
29
+ className: t("shrink-0", c(m, i), a),
30
+ ...n,
31
+ children: [/* @__PURE__ */ o("circle", {
32
+ className: "opacity-30",
33
+ cx: "10",
34
+ cy: "10",
35
+ r: "8",
36
+ strokeWidth: "2"
37
+ }), /* @__PURE__ */ o("circle", {
38
+ className: "animate-pho-spinner origin-center",
39
+ cx: "10",
40
+ cy: "10",
41
+ r: "8",
42
+ strokeWidth: "2",
43
+ strokeDasharray: "12.5 50",
44
+ strokeLinecap: "round"
45
+ })]
46
+ });
47
+ }
48
+ d.displayName = "Spinner";
49
+ export {
50
+ d as n,
51
+ m as t
52
+ };
53
+
54
+ //# sourceMappingURL=spinner-Cy8bkyJf.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spinner-Cy8bkyJf.js","names":[],"sources":["../../src/components/spinner/spinner.tsx"],"sourcesContent":["import { type ComponentProps } from \"react\";\nimport { cn } from \"../../utils/cn\";\nimport { resolveVariant, type VariantMap } from \"../../utils/resolve-variant\";\n\n/** Size axis — the ring scales with the surrounding control. */\nexport const SPINNER_SIZES = {\n sm: {\n classes: \"size-3.5\",\n description: \"Small — dense rows and compact chrome\",\n },\n md: {\n classes: \"size-4\",\n description: \"Medium — the default (menu rows, button icons)\",\n },\n lg: {\n classes: \"size-5\",\n description: \"Large — standalone or roomy surfaces\",\n },\n} satisfies VariantMap;\n\nexport type SpinnerSize = keyof typeof SPINNER_SIZES;\n\nexport interface SpinnerProps extends Omit<ComponentProps<\"svg\">, \"children\"> {\n /** Size variant. @default \"md\" */\n size?: SpinnerSize;\n}\n\n/**\n * Indeterminate loading ring — a hairline track with a quarter-circle arc\n * rotating over it. The continuous 2px round-cap stroke matches Pho's\n * hairline rings and Tabler icon language. Uses `currentColor`, so ink\n * follows the parent (`text-pho-*`, white on overlays). Decorative by default\n * (`aria-hidden`); pass `aria-label` when the spinner is the only loading cue.\n */\nexport function Spinner({\n size = \"md\",\n className,\n \"aria-label\": ariaLabel,\n \"aria-hidden\": ariaHidden,\n ...props\n}: SpinnerProps) {\n const labeled = ariaLabel != null && ariaLabel !== \"\";\n return (\n <svg\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 20 20\"\n role={labeled ? \"status\" : undefined}\n aria-label={ariaLabel}\n aria-hidden={labeled ? ariaHidden : (ariaHidden ?? true)}\n className={cn(\"shrink-0\", resolveVariant(SPINNER_SIZES, size), className)}\n {...props}\n >\n <circle className=\"opacity-30\" cx=\"10\" cy=\"10\" r=\"8\" strokeWidth=\"2\" />\n {/* Quarter arc (2π·8 ≈ 50.3 → dash 12.5) rotating at 800ms/rev. */}\n <circle\n className=\"animate-pho-spinner origin-center\"\n cx=\"10\"\n cy=\"10\"\n r=\"8\"\n strokeWidth=\"2\"\n strokeDasharray=\"12.5 50\"\n strokeLinecap=\"round\"\n />\n </svg>\n );\n}\n\nSpinner.displayName = \"Spinner\";\n"],"mappings":";;;;;AAKA,IAAa,IAAgB;AAAA,EAC3B,IAAI;AAAA,IACF,SAAS;AAAA,IACT,aAAa;AAAA,EACf;AAAA,EACA,IAAI;AAAA,IACF,SAAS;AAAA,IACT,aAAa;AAAA,EACf;AAAA,EACA,IAAI;AAAA,IACF,SAAS;AAAA,IACT,aAAa;AAAA,EACf;AACF;AAgBA,SAAgB,EAAQ,EACtB,MAAA,IAAO,MACP,WAAA,GACA,cAAc,GACd,eAAe,GACf,GAAG,EAAA,GACY;AACf,QAAM,IAAU,KAAa,QAAQ,MAAc;AACnD,SACE,gBAAA,EAAC,OAAD;AAAA,IACE,MAAK;AAAA,IACL,QAAO;AAAA,IACP,SAAQ;AAAA,IACR,MAAM,IAAU,WAAW;AAAA,IAC3B,cAAY;AAAA,IACZ,eAAa,IAAU,IAAc,KAAc;AAAA,IACnD,WAAW,EAAG,YAAY,EAAe,GAAe,CAAI,GAAG,CAAS;AAAA,IACxE,GAAI;AAAA,cARN,CAUE,gBAAA,EAAC,UAAD;AAAA,MAAQ,WAAU;AAAA,MAAa,IAAG;AAAA,MAAK,IAAG;AAAA,MAAK,GAAE;AAAA,MAAI,aAAY;AAAA,IAAK,CAAA,GAEtE,gBAAA,EAAC,UAAD;AAAA,MACE,WAAU;AAAA,MACV,IAAG;AAAA,MACH,IAAG;AAAA,MACH,GAAE;AAAA,MACF,aAAY;AAAA,MACZ,iBAAgB;AAAA,MAChB,eAAc;AAAA,IACf,CAAA,CACE;AAAA;AAET;AAEA,EAAQ,cAAc"}
@@ -1,36 +1,36 @@
1
1
  "use client";
2
- import { t as o } from "../chunks/cn-7uGUzCOM.js";
2
+ import { t as r } from "../chunks/cn-DTiB6ek_.js";
3
3
  import "react";
4
4
  import { jsx as n } from "react/jsx-runtime";
5
- import { Accordion as r } from "@base-ui/react/accordion";
6
- function a({ className: e, ...t }) {
7
- return /* @__PURE__ */ n(r.Root, {
8
- className: o("w-full divide-y divide-[var(--border-color-pho-secondary)] border-y border-[var(--border-color-pho-secondary)]", e),
9
- ...t
5
+ import { Accordion as t } from "@base-ui/react/accordion";
6
+ function i({ className: e, ...o }) {
7
+ return /* @__PURE__ */ n(t.Root, {
8
+ className: r("w-full divide-y divide-[var(--border-color-pho-secondary)] border-y border-[var(--border-color-pho-secondary)]", e),
9
+ ...o
10
10
  });
11
11
  }
12
- var i = r.Item;
13
- function s({ className: e, ...t }) {
14
- return /* @__PURE__ */ n(r.Header, {
15
- className: o("flex", e),
16
- ...t
12
+ var a = t.Item;
13
+ function s({ className: e, ...o }) {
14
+ return /* @__PURE__ */ n(t.Header, {
15
+ className: r("flex", e),
16
+ ...o
17
17
  });
18
18
  }
19
- function c({ className: e, ...t }) {
20
- return /* @__PURE__ */ n(r.Trigger, {
21
- className: o("outline-pho-brand text-pho-secondary hover:text-pho-secondary-hover flex flex-1 cursor-pointer items-center justify-between gap-3 py-4 text-left text-sm font-medium transition focus-visible:outline-2 focus-visible:-outline-offset-2", "[&>svg]:text-fg-pho-quaternary [&>svg]:size-4 [&>svg]:shrink-0 [&>svg]:transition-transform [&>svg]:duration-150 data-[panel-open]:[&>svg]:rotate-180", e),
22
- ...t
19
+ function c({ className: e, ...o }) {
20
+ return /* @__PURE__ */ n(t.Trigger, {
21
+ className: r("outline-pho-brand text-pho-secondary hover:text-pho-secondary-hover flex flex-1 cursor-pointer items-center justify-between gap-3 py-4 text-left text-base font-medium transition focus-visible:outline-2 focus-visible:-outline-offset-2", "[&>svg]:text-pho-secondary [&>svg]:size-4 [&>svg]:shrink-0 [&>svg]:transition-transform [&>svg]:duration-150 data-[panel-open]:[&>svg]:rotate-180", e),
22
+ ...o
23
23
  });
24
24
  }
25
- function d({ className: e, ...t }) {
26
- return /* @__PURE__ */ n(r.Panel, {
27
- className: o("text-pho-tertiary h-[var(--accordion-panel-height)] overflow-hidden text-sm transition-[height] duration-150 ease-out", "data-[ending-style]:h-0 data-[starting-style]:h-0", e),
28
- ...t
25
+ function d({ className: e, ...o }) {
26
+ return /* @__PURE__ */ n(t.Panel, {
27
+ className: r("text-pho-description h-[var(--accordion-panel-height)] overflow-hidden text-base transition-[height] duration-150 ease-out", "data-[ending-style]:h-0 data-[starting-style]:h-0", e),
28
+ ...o
29
29
  });
30
30
  }
31
31
  var h = {
32
- Root: a,
33
- Item: i,
32
+ Root: i,
33
+ Item: a,
34
34
  Header: s,
35
35
  Trigger: c,
36
36
  Panel: d
@@ -1 +1 @@
1
- {"version":3,"file":"accordion.js","names":[],"sources":["../../src/components/accordion/accordion.tsx"],"sourcesContent":["import { type ComponentProps, type ElementType } from \"react\";\nimport { Accordion as BaseAccordion } from \"@base-ui/react/accordion\";\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 BaseAccordion.Root>) {\n return (\n <BaseAccordion.Root\n className={cn(\n \"w-full divide-y divide-[var(--border-color-pho-secondary)] border-y border-[var(--border-color-pho-secondary)]\",\n className,\n )}\n {...props}\n />\n );\n}\n\nconst Item = BaseAccordion.Item;\n\nfunction Header({\n className,\n ...props\n}: StyledProps<typeof BaseAccordion.Header>) {\n return <BaseAccordion.Header className={cn(\"flex\", className)} {...props} />;\n}\n\nfunction Trigger({\n className,\n ...props\n}: StyledProps<typeof BaseAccordion.Trigger>) {\n return (\n <BaseAccordion.Trigger\n className={cn(\n \"outline-pho-brand text-pho-secondary hover:text-pho-secondary-hover flex flex-1 cursor-pointer items-center justify-between gap-3 py-4 text-left text-sm font-medium transition focus-visible:outline-2 focus-visible:-outline-offset-2\",\n \"[&>svg]:text-fg-pho-quaternary [&>svg]:size-4 [&>svg]:shrink-0 [&>svg]:transition-transform [&>svg]:duration-150 data-[panel-open]:[&>svg]:rotate-180\",\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction Panel({\n className,\n ...props\n}: StyledProps<typeof BaseAccordion.Panel>) {\n return (\n <BaseAccordion.Panel\n className={cn(\n \"text-pho-tertiary h-[var(--accordion-panel-height)] overflow-hidden text-sm transition-[height] duration-150 ease-out\",\n \"data-[ending-style]:h-0 data-[starting-style]:h-0\",\n className,\n )}\n {...props}\n />\n );\n}\n\n/**\n * Stacked, individually-collapsible sections built on Base UI `Accordion`.\n * Single-open by default; set `openMultiple` to allow several at once. Each\n * `Accordion.Item` needs a `value`; control the open set with `value` /\n * `onValueChange` or `defaultValue`.\n */\nexport const Accordion = { Root, Item, Header, Trigger, Panel };\n"],"mappings":";;;;;AAYA,SAAS,EAAK,EAAE,WAAA,GAAW,GAAG,EAAA,GAAiD;AAC7E,SACE,gBAAA,EAAC,EAAc,MAAf;AAAA,IACE,WAAW,EACT,kHACA,CACF;AAAA,IACA,GAAI;AAAA,EACL,CAAA;AAEL;AAEA,IAAM,IAAO,EAAc;AAE3B,SAAS,EAAO,EACd,WAAA,GACA,GAAG,EAAA,GACwC;AAC3C,SAAO,gBAAA,EAAC,EAAc,QAAf;AAAA,IAAsB,WAAW,EAAG,QAAQ,CAAS;AAAA,IAAG,GAAI;AAAA,EAAQ,CAAA;AAC7E;AAEA,SAAS,EAAQ,EACf,WAAA,GACA,GAAG,EAAA,GACyC;AAC5C,SACE,gBAAA,EAAC,EAAc,SAAf;AAAA,IACE,WAAW,EACT,2OACA,yJACA,CACF;AAAA,IACA,GAAI;AAAA,EACL,CAAA;AAEL;AAEA,SAAS,EAAM,EACb,WAAA,GACA,GAAG,EAAA,GACuC;AAC1C,SACE,gBAAA,EAAC,EAAc,OAAf;AAAA,IACE,WAAW,EACT,yHACA,qDACA,CACF;AAAA,IACA,GAAI;AAAA,EACL,CAAA;AAEL;AAQA,IAAa,IAAY;AAAA,EAAE,MAAA;AAAA,EAAM,MAAA;AAAA,EAAM,QAAA;AAAA,EAAQ,SAAA;AAAA,EAAS,OAAA;AAAM"}
1
+ {"version":3,"file":"accordion.js","names":[],"sources":["../../src/components/accordion/accordion.tsx"],"sourcesContent":["import { type ComponentProps, type ElementType } from \"react\";\nimport { Accordion as BaseAccordion } from \"@base-ui/react/accordion\";\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 BaseAccordion.Root>) {\n return (\n <BaseAccordion.Root\n className={cn(\n \"w-full divide-y divide-[var(--border-color-pho-secondary)] border-y border-[var(--border-color-pho-secondary)]\",\n className,\n )}\n {...props}\n />\n );\n}\n\nconst Item = BaseAccordion.Item;\n\nfunction Header({\n className,\n ...props\n}: StyledProps<typeof BaseAccordion.Header>) {\n return <BaseAccordion.Header className={cn(\"flex\", className)} {...props} />;\n}\n\nfunction Trigger({\n className,\n ...props\n}: StyledProps<typeof BaseAccordion.Trigger>) {\n return (\n <BaseAccordion.Trigger\n className={cn(\n \"outline-pho-brand text-pho-secondary hover:text-pho-secondary-hover flex flex-1 cursor-pointer items-center justify-between gap-3 py-4 text-left text-base font-medium transition focus-visible:outline-2 focus-visible:-outline-offset-2\",\n \"[&>svg]:text-pho-secondary [&>svg]:size-4 [&>svg]:shrink-0 [&>svg]:transition-transform [&>svg]:duration-150 data-[panel-open]:[&>svg]:rotate-180\",\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction Panel({\n className,\n ...props\n}: StyledProps<typeof BaseAccordion.Panel>) {\n return (\n <BaseAccordion.Panel\n className={cn(\n \"text-pho-description h-[var(--accordion-panel-height)] overflow-hidden text-base transition-[height] duration-150 ease-out\",\n \"data-[ending-style]:h-0 data-[starting-style]:h-0\",\n className,\n )}\n {...props}\n />\n );\n}\n\n/**\n * Stacked, individually-collapsible sections built on Base UI `Accordion`.\n * Single-open by default; set `openMultiple` to allow several at once. Each\n * `Accordion.Item` needs a `value`; control the open set with `value` /\n * `onValueChange` or `defaultValue`.\n */\nexport const Accordion = { Root, Item, Header, Trigger, Panel };\n"],"mappings":";;;;;AAYA,SAAS,EAAK,EAAE,WAAA,GAAW,GAAG,EAAA,GAAiD;AAC7E,SACE,gBAAA,EAAC,EAAc,MAAf;AAAA,IACE,WAAW,EACT,kHACA,CACF;AAAA,IACA,GAAI;AAAA,EACL,CAAA;AAEL;AAEA,IAAM,IAAO,EAAc;AAE3B,SAAS,EAAO,EACd,WAAA,GACA,GAAG,EAAA,GACwC;AAC3C,SAAO,gBAAA,EAAC,EAAc,QAAf;AAAA,IAAsB,WAAW,EAAG,QAAQ,CAAS;AAAA,IAAG,GAAI;AAAA,EAAQ,CAAA;AAC7E;AAEA,SAAS,EAAQ,EACf,WAAA,GACA,GAAG,EAAA,GACyC;AAC5C,SACE,gBAAA,EAAC,EAAc,SAAf;AAAA,IACE,WAAW,EACT,6OACA,qJACA,CACF;AAAA,IACA,GAAI;AAAA,EACL,CAAA;AAEL;AAEA,SAAS,EAAM,EACb,WAAA,GACA,GAAG,EAAA,GACuC;AAC1C,SACE,gBAAA,EAAC,EAAc,OAAf;AAAA,IACE,WAAW,EACT,8HACA,qDACA,CACF;AAAA,IACA,GAAI;AAAA,EACL,CAAA;AAEL;AAQA,IAAa,IAAY;AAAA,EAAE,MAAA;AAAA,EAAM,MAAA;AAAA,EAAM,QAAA;AAAA,EAAQ,SAAA;AAAA,EAAS,OAAA;AAAM"}
@@ -1,55 +1,55 @@
1
1
  "use client";
2
- import { t as o } from "../chunks/cn-7uGUzCOM.js";
2
+ import { t as r } from "../chunks/cn-DTiB6ek_.js";
3
3
  import "react";
4
- import { jsx as e, jsxs as i } from "react/jsx-runtime";
5
- import { AlertDialog as r } from "@base-ui/react/alert-dialog";
6
- var x = r.Root, y = r.Trigger, n = r.Portal, g = r.Close;
4
+ import { jsx as e, jsxs as n } from "react/jsx-runtime";
5
+ import { AlertDialog as o } from "@base-ui/react/alert-dialog";
6
+ var u = o.Root, g = o.Trigger, i = o.Portal, x = o.Close;
7
7
  function l({ className: t, ...a }) {
8
- return /* @__PURE__ */ e(r.Backdrop, {
9
- className: o("bg-pho-overlay fixed inset-0 z-50 backdrop-blur-[2px] transition-opacity duration-200 ease-out", "data-[ending-style]:opacity-0 data-[starting-style]:opacity-0", t),
8
+ return /* @__PURE__ */ e(o.Backdrop, {
9
+ className: r("bg-pho-overlay fixed inset-0 z-50 transition-opacity duration-200 ease-out", "data-[ending-style]:opacity-0 data-[ending-style]:duration-150 data-[starting-style]:opacity-0", t),
10
10
  ...a
11
11
  });
12
12
  }
13
13
  function s({ className: t, ...a }) {
14
- return /* @__PURE__ */ e(r.Popup, {
15
- className: o("squircle border-pho-secondary bg-pho-primary shadow-pho-xl fixed top-1/2 left-1/2 z-50 w-[calc(100%-2rem)] max-w-md -translate-x-1/2 -translate-y-1/2 overflow-hidden rounded-2xl border outline-none", "transition-all duration-200 ease-out", "data-[starting-style]:scale-95 data-[starting-style]:opacity-0", "data-[ending-style]:scale-95 data-[ending-style]:opacity-0", t),
14
+ return /* @__PURE__ */ e(o.Popup, {
15
+ className: r("border-pho-secondary bg-pho-primary shadow-pho-xl fixed top-1/2 left-1/2 z-50 w-[calc(100%-2rem)] max-w-md -translate-x-1/2 -translate-y-1/2 overflow-hidden rounded-lg border outline-none", "transition-[opacity,scale] duration-200 ease-out", "data-[starting-style]:scale-95 data-[starting-style]:opacity-0", "data-[ending-style]:scale-95 data-[ending-style]:opacity-0 data-[ending-style]:duration-150", t),
16
16
  ...a
17
17
  });
18
18
  }
19
- function c({ className: t, ...a }) {
20
- return /* @__PURE__ */ e(r.Title, {
21
- className: o("text-pho-primary text-lg font-semibold", t),
19
+ function d({ className: t, ...a }) {
20
+ return /* @__PURE__ */ e(o.Title, {
21
+ className: r("text-pho-primary font-display text-display-sm font-medium text-balance", t),
22
22
  ...a
23
23
  });
24
24
  }
25
- function p({ className: t, ...a }) {
26
- return /* @__PURE__ */ e(r.Description, {
27
- className: o("text-pho-tertiary mt-1 text-sm", t),
25
+ function c({ className: t, ...a }) {
26
+ return /* @__PURE__ */ e(o.Description, {
27
+ className: r("text-pho-description text-display-xs mt-1 font-normal", t),
28
28
  ...a
29
29
  });
30
30
  }
31
- function f({ title: t, description: a, children: d, className: m, ...u }) {
32
- return /* @__PURE__ */ i(n, { children: [/* @__PURE__ */ e(l, {}), /* @__PURE__ */ i(s, {
31
+ function f({ title: t, description: a, children: p, className: m, ...y }) {
32
+ return /* @__PURE__ */ n(i, { children: [/* @__PURE__ */ e(l, {}), /* @__PURE__ */ n(s, {
33
33
  className: m,
34
- ...u,
35
- children: [(t || a) && /* @__PURE__ */ i("div", {
34
+ ...y,
35
+ children: [(t || a) && /* @__PURE__ */ n("div", {
36
36
  className: "flex flex-col gap-1 px-6 pt-5",
37
- children: [t && /* @__PURE__ */ e(c, { children: t }), a && /* @__PURE__ */ e(p, { children: a })]
37
+ children: [t && /* @__PURE__ */ e(d, { children: t }), a && /* @__PURE__ */ e(c, { children: a })]
38
38
  }), /* @__PURE__ */ e("div", {
39
39
  className: "px-6 py-5",
40
- children: d
40
+ children: p
41
41
  })]
42
42
  })] });
43
43
  }
44
44
  var D = {
45
- Root: x,
46
- Trigger: y,
47
- Portal: n,
45
+ Root: u,
46
+ Trigger: g,
47
+ Portal: i,
48
48
  Backdrop: l,
49
49
  Popup: s,
50
- Title: c,
51
- Description: p,
52
- Close: g,
50
+ Title: d,
51
+ Description: c,
52
+ Close: x,
53
53
  Content: f
54
54
  };
55
55
  export {
@@ -1 +1 @@
1
- {"version":3,"file":"alert-dialog.js","names":[],"sources":["../../src/components/alert-dialog/alert-dialog.tsx"],"sourcesContent":["import { type ComponentProps, type ElementType, type ReactNode } from \"react\";\nimport { AlertDialog as BaseAlertDialog } from \"@base-ui/react/alert-dialog\";\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\nconst Root = BaseAlertDialog.Root;\nconst Trigger = BaseAlertDialog.Trigger;\nconst Portal = BaseAlertDialog.Portal;\nconst Close = BaseAlertDialog.Close;\n\nfunction Backdrop({\n className,\n ...props\n}: StyledProps<typeof BaseAlertDialog.Backdrop>) {\n return (\n <BaseAlertDialog.Backdrop\n className={cn(\n \"bg-pho-overlay fixed inset-0 z-50 backdrop-blur-[2px] transition-opacity duration-200 ease-out\",\n \"data-[ending-style]:opacity-0 data-[starting-style]:opacity-0\",\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction Popup({\n className,\n ...props\n}: StyledProps<typeof BaseAlertDialog.Popup>) {\n return (\n <BaseAlertDialog.Popup\n className={cn(\n \"squircle border-pho-secondary bg-pho-primary shadow-pho-xl fixed top-1/2 left-1/2 z-50 w-[calc(100%-2rem)] max-w-md -translate-x-1/2 -translate-y-1/2 overflow-hidden rounded-2xl border outline-none\",\n \"transition-all duration-200 ease-out\",\n \"data-[starting-style]:scale-95 data-[starting-style]:opacity-0\",\n \"data-[ending-style]:scale-95 data-[ending-style]:opacity-0\",\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction Title({\n className,\n ...props\n}: StyledProps<typeof BaseAlertDialog.Title>) {\n return (\n <BaseAlertDialog.Title\n className={cn(\"text-pho-primary text-lg font-semibold\", className)}\n {...props}\n />\n );\n}\n\nfunction Description({\n className,\n ...props\n}: StyledProps<typeof BaseAlertDialog.Description>) {\n return (\n <BaseAlertDialog.Description\n className={cn(\"text-pho-tertiary mt-1 text-sm\", className)}\n {...props}\n />\n );\n}\n\ninterface ContentProps extends Omit<\n StyledProps<typeof BaseAlertDialog.Popup>,\n \"title\"\n> {\n /** Heading rendered in the panel header. */\n title?: ReactNode;\n /** Supporting text under the title. */\n description?: ReactNode;\n children?: ReactNode;\n}\n\n/**\n * Convenience panel: portal + backdrop + styled popup with a title/description\n * header. The action buttons are your responsibility — an alert dialog requires\n * an explicit choice and must not be dismissed by clicking away.\n */\nfunction Content({\n title,\n description,\n children,\n className,\n ...props\n}: ContentProps) {\n return (\n <Portal>\n <Backdrop />\n <Popup className={className} {...props}>\n {(title || description) && (\n <div className=\"flex flex-col gap-1 px-6 pt-5\">\n {title && <Title>{title}</Title>}\n {description && <Description>{description}</Description>}\n </div>\n )}\n <div className=\"px-6 py-5\">{children}</div>\n </Popup>\n </Portal>\n );\n}\n\n/**\n * Alert dialog built on Base UI `AlertDialog` — a modal that interrupts to\n * confirm a consequential or destructive action. Unlike `Dialog`, it does not\n * close on outside press or Escape: the user must pick an action. Reach for\n * `Dialog` for anything that isn't a forced decision.\n */\nexport const AlertDialog = {\n Root,\n Trigger,\n Portal,\n Backdrop,\n Popup,\n Title,\n Description,\n Close,\n Content,\n};\n"],"mappings":";;;;;AAYA,IAAM,IAAO,EAAgB,MACvB,IAAU,EAAgB,SAC1B,IAAS,EAAgB,QACzB,IAAQ,EAAgB;AAE9B,SAAS,EAAS,EAChB,WAAA,GACA,GAAG,EAAA,GAC4C;AAC/C,SACE,gBAAA,EAAC,EAAgB,UAAjB;AAAA,IACE,WAAW,EACT,kGACA,iEACA,CACF;AAAA,IACA,GAAI;AAAA,EACL,CAAA;AAEL;AAEA,SAAS,EAAM,EACb,WAAA,GACA,GAAG,EAAA,GACyC;AAC5C,SACE,gBAAA,EAAC,EAAgB,OAAjB;AAAA,IACE,WAAW,EACT,yMACA,wCACA,kEACA,8DACA,CACF;AAAA,IACA,GAAI;AAAA,EACL,CAAA;AAEL;AAEA,SAAS,EAAM,EACb,WAAA,GACA,GAAG,EAAA,GACyC;AAC5C,SACE,gBAAA,EAAC,EAAgB,OAAjB;AAAA,IACE,WAAW,EAAG,0CAA0C,CAAS;AAAA,IACjE,GAAI;AAAA,EACL,CAAA;AAEL;AAEA,SAAS,EAAY,EACnB,WAAA,GACA,GAAG,EAAA,GAC+C;AAClD,SACE,gBAAA,EAAC,EAAgB,aAAjB;AAAA,IACE,WAAW,EAAG,kCAAkC,CAAS;AAAA,IACzD,GAAI;AAAA,EACL,CAAA;AAEL;AAkBA,SAAS,EAAQ,EACf,OAAA,GACA,aAAA,GACA,UAAA,GACA,WAAA,GACA,GAAG,EAAA,GACY;AACf,SACE,gBAAA,EAAC,GAAD,EAAA,UAAA,CACE,gBAAA,EAAC,GAAD,CAAW,CAAA,GACX,gBAAA,EAAC,GAAD;AAAA,IAAkB,WAAA;AAAA,IAAW,GAAI;AAAA,cAAjC,EACI,KAAS,MACT,gBAAA,EAAC,OAAD;AAAA,MAAK,WAAU;AAAA,gBAAf,CACG,KAAS,gBAAA,EAAC,GAAD,EAAA,UAAQ,EAAa,CAAA,GAC9B,KAAe,gBAAA,EAAC,GAAD,EAAA,UAAc,EAAyB,CAAA,CACpD;AAAA,QAEP,gBAAA,EAAC,OAAD;AAAA,MAAK,WAAU;AAAA,MAAa,UAAA;AAAA,IAAc,CAAA,CACrC;AAAA,IACD,EAAA,CAAA;AAEZ;AAQA,IAAa,IAAc;AAAA,EACzB,MAAA;AAAA,EACA,SAAA;AAAA,EACA,QAAA;AAAA,EACA,UAAA;AAAA,EACA,OAAA;AAAA,EACA,OAAA;AAAA,EACA,aAAA;AAAA,EACA,OAAA;AAAA,EACA,SAAA;AACF"}
1
+ {"version":3,"file":"alert-dialog.js","names":[],"sources":["../../src/components/alert-dialog/alert-dialog.tsx"],"sourcesContent":["import { type ComponentProps, type ElementType, type ReactNode } from \"react\";\nimport { AlertDialog as BaseAlertDialog } from \"@base-ui/react/alert-dialog\";\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\nconst Root = BaseAlertDialog.Root;\nconst Trigger = BaseAlertDialog.Trigger;\nconst Portal = BaseAlertDialog.Portal;\nconst Close = BaseAlertDialog.Close;\n\nfunction Backdrop({\n className,\n ...props\n}: StyledProps<typeof BaseAlertDialog.Backdrop>) {\n return (\n <BaseAlertDialog.Backdrop\n className={cn(\n \"bg-pho-overlay fixed inset-0 z-50 transition-opacity duration-200 ease-out\",\n \"data-[ending-style]:opacity-0 data-[ending-style]:duration-150 data-[starting-style]:opacity-0\",\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction Popup({\n className,\n ...props\n}: StyledProps<typeof BaseAlertDialog.Popup>) {\n return (\n <BaseAlertDialog.Popup\n className={cn(\n \"border-pho-secondary bg-pho-primary shadow-pho-xl fixed top-1/2 left-1/2 z-50 w-[calc(100%-2rem)] max-w-md -translate-x-1/2 -translate-y-1/2 overflow-hidden rounded-lg border outline-none\",\n // Opacity + scale only — leave translate centering alone (no transition-all).\n \"transition-[opacity,scale] duration-200 ease-out\",\n \"data-[starting-style]:scale-95 data-[starting-style]:opacity-0\",\n \"data-[ending-style]:scale-95 data-[ending-style]:opacity-0 data-[ending-style]:duration-150\",\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction Title({\n className,\n ...props\n}: StyledProps<typeof BaseAlertDialog.Title>) {\n return (\n <BaseAlertDialog.Title\n className={cn(\n \"text-pho-primary font-display text-display-sm font-medium text-balance\",\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction Description({\n className,\n ...props\n}: StyledProps<typeof BaseAlertDialog.Description>) {\n return (\n <BaseAlertDialog.Description\n className={cn(\n \"text-pho-description text-display-xs mt-1 font-normal\",\n className,\n )}\n {...props}\n />\n );\n}\n\ninterface ContentProps extends Omit<\n StyledProps<typeof BaseAlertDialog.Popup>,\n \"title\"\n> {\n /** Heading rendered in the panel header. */\n title?: ReactNode;\n /** Supporting text under the title. */\n description?: ReactNode;\n children?: ReactNode;\n}\n\n/**\n * Convenience panel: portal + backdrop + styled popup with a title/description\n * header. The action buttons are your responsibility — an alert dialog requires\n * an explicit choice and must not be dismissed by clicking away.\n */\nfunction Content({\n title,\n description,\n children,\n className,\n ...props\n}: ContentProps) {\n return (\n <Portal>\n <Backdrop />\n <Popup className={className} {...props}>\n {(title || description) && (\n <div className=\"flex flex-col gap-1 px-6 pt-5\">\n {title && <Title>{title}</Title>}\n {description && <Description>{description}</Description>}\n </div>\n )}\n <div className=\"px-6 py-5\">{children}</div>\n </Popup>\n </Portal>\n );\n}\n\n/**\n * Alert dialog built on Base UI `AlertDialog` — a modal that interrupts to\n * confirm a consequential or destructive action. Unlike `Dialog`, it does not\n * close on outside press or Escape: the user must pick an action. Reach for\n * `Dialog` for anything that isn't a forced decision.\n */\nexport const AlertDialog = {\n Root,\n Trigger,\n Portal,\n Backdrop,\n Popup,\n Title,\n Description,\n Close,\n Content,\n};\n"],"mappings":";;;;;AAYA,IAAM,IAAO,EAAgB,MACvB,IAAU,EAAgB,SAC1B,IAAS,EAAgB,QACzB,IAAQ,EAAgB;AAE9B,SAAS,EAAS,EAChB,WAAA,GACA,GAAG,EAAA,GAC4C;AAC/C,SACE,gBAAA,EAAC,EAAgB,UAAjB;AAAA,IACE,WAAW,EACT,8EACA,kGACA,CACF;AAAA,IACA,GAAI;AAAA,EACL,CAAA;AAEL;AAEA,SAAS,EAAM,EACb,WAAA,GACA,GAAG,EAAA,GACyC;AAC5C,SACE,gBAAA,EAAC,EAAgB,OAAjB;AAAA,IACE,WAAW,EACT,+LAEA,oDACA,kEACA,+FACA,CACF;AAAA,IACA,GAAI;AAAA,EACL,CAAA;AAEL;AAEA,SAAS,EAAM,EACb,WAAA,GACA,GAAG,EAAA,GACyC;AAC5C,SACE,gBAAA,EAAC,EAAgB,OAAjB;AAAA,IACE,WAAW,EACT,0EACA,CACF;AAAA,IACA,GAAI;AAAA,EACL,CAAA;AAEL;AAEA,SAAS,EAAY,EACnB,WAAA,GACA,GAAG,EAAA,GAC+C;AAClD,SACE,gBAAA,EAAC,EAAgB,aAAjB;AAAA,IACE,WAAW,EACT,yDACA,CACF;AAAA,IACA,GAAI;AAAA,EACL,CAAA;AAEL;AAkBA,SAAS,EAAQ,EACf,OAAA,GACA,aAAA,GACA,UAAA,GACA,WAAA,GACA,GAAG,EAAA,GACY;AACf,SACE,gBAAA,EAAC,GAAD,EAAA,UAAA,CACE,gBAAA,EAAC,GAAD,CAAW,CAAA,GACX,gBAAA,EAAC,GAAD;AAAA,IAAkB,WAAA;AAAA,IAAW,GAAI;AAAA,cAAjC,EACI,KAAS,MACT,gBAAA,EAAC,OAAD;AAAA,MAAK,WAAU;AAAA,gBAAf,CACG,KAAS,gBAAA,EAAC,GAAD,EAAA,UAAQ,EAAa,CAAA,GAC9B,KAAe,gBAAA,EAAC,GAAD,EAAA,UAAc,EAAyB,CAAA,CACpD;AAAA,QAEP,gBAAA,EAAC,OAAD;AAAA,MAAK,WAAU;AAAA,MAAa,UAAA;AAAA,IAAc,CAAA,CACrC;AAAA,IACD,EAAA,CAAA;AAEZ;AAQA,IAAa,IAAc;AAAA,EACzB,MAAA;AAAA,EACA,SAAA;AAAA,EACA,QAAA;AAAA,EACA,UAAA;AAAA,EACA,OAAA;AAAA,EACA,OAAA;AAAA,EACA,aAAA;AAAA,EACA,OAAA;AAAA,EACA,SAAA;AACF"}
@@ -1,78 +1,78 @@
1
1
  "use client";
2
- import { t as o } from "../chunks/cn-7uGUzCOM.js";
2
+ import { t as r } from "../chunks/cn-DTiB6ek_.js";
3
3
  import "react";
4
4
  import { jsx as a } from "react/jsx-runtime";
5
- import { Autocomplete as r } from "@base-ui/react/autocomplete";
6
- var i = r.Root, l = r.Value, s = r.Portal, p = r.Group, u = r.Collection;
7
- function c({ className: t, ...e }) {
8
- return /* @__PURE__ */ a(r.InputGroup, {
9
- className: o("relative flex items-center", t),
10
- ...e
5
+ import { Autocomplete as o } from "@base-ui/react/autocomplete";
6
+ var i = o.Root, s = o.Value, p = o.Portal, l = o.Group, u = o.Collection;
7
+ function c({ className: e, ...t }) {
8
+ return /* @__PURE__ */ a(o.InputGroup, {
9
+ className: r("relative flex items-center", e),
10
+ ...t
11
11
  });
12
12
  }
13
- function m({ className: t, ...e }) {
14
- return /* @__PURE__ */ a(r.Input, {
15
- className: o("squircle bg-pho-primary ring-pho-primary text-pho-primary placeholder:text-pho-placeholder focus-visible:ring-pho-brand w-full rounded-lg px-3 py-2 text-sm ring-1 transition-shadow duration-100 ease-linear outline-none ring-inset focus-visible:ring-2 disabled:cursor-not-allowed disabled:opacity-50", t),
16
- ...e
13
+ function m({ className: e, ...t }) {
14
+ return /* @__PURE__ */ a(o.Input, {
15
+ className: r("bg-pho-primary ring-pho-primary text-pho-primary placeholder:text-pho-placeholder focus-visible:ring-pho-brand text-md rounded-base w-full px-3 py-2 ring-1 transition-shadow duration-100 ease-linear outline-none ring-inset focus-visible:ring-2 disabled:cursor-not-allowed disabled:opacity-50 md:text-base", e),
16
+ ...t
17
17
  });
18
18
  }
19
- function h({ className: t, ...e }) {
20
- return /* @__PURE__ */ a(r.Clear, {
21
- className: o("text-fg-pho-quaternary hover:text-fg-pho-quaternary-hover absolute right-2.5 flex cursor-pointer items-center [&>svg]:size-4", t),
22
- ...e
19
+ function d({ className: e, ...t }) {
20
+ return /* @__PURE__ */ a(o.Clear, {
21
+ className: r("text-pho-secondary hover:text-pho-secondary-hover absolute right-2.5 flex cursor-pointer items-center [&>svg]:size-4", e),
22
+ ...t
23
23
  });
24
24
  }
25
- function d({ className: t, sideOffset: e = 6, ...n }) {
26
- return /* @__PURE__ */ a(r.Positioner, {
27
- sideOffset: e,
28
- className: o("z-50 outline-none", t),
25
+ function h({ className: e, sideOffset: t = 6, ...n }) {
26
+ return /* @__PURE__ */ a(o.Positioner, {
27
+ sideOffset: t,
28
+ className: r("z-50 outline-none", e),
29
29
  ...n
30
30
  });
31
31
  }
32
- function g({ className: t, ...e }) {
33
- return /* @__PURE__ */ a(r.Popup, {
34
- className: o("squircle bg-pho-primary text-pho-primary shadow-pho-lg ring-pho-secondary w-[var(--anchor-width)] max-w-[var(--available-width)] origin-[var(--transform-origin)] rounded-xl p-1 ring-1 transition-[transform,opacity] duration-150 ease-out outline-none ring-inset", "data-[starting-style]:scale-95 data-[starting-style]:opacity-0", "data-[ending-style]:scale-95 data-[ending-style]:opacity-0", t),
35
- ...e
32
+ function y({ className: e, ...t }) {
33
+ return /* @__PURE__ */ a(o.Popup, {
34
+ className: r("bg-pho-primary text-pho-primary shadow-pho-lg ring-pho-secondary rounded-base w-[var(--anchor-width)] max-w-[var(--available-width)] origin-[var(--transform-origin)] p-1 ring-1 transition-[transform,opacity] duration-150 ease-out outline-none ring-inset", "data-[starting-style]:scale-95 data-[starting-style]:opacity-0", "data-[ending-style]:scale-95 data-[ending-style]:opacity-0", e),
35
+ ...t
36
36
  });
37
37
  }
38
- function y({ className: t, ...e }) {
39
- return /* @__PURE__ */ a(r.List, {
40
- className: o("max-h-[min(20rem,var(--available-height))] overflow-y-auto overscroll-contain", t),
41
- ...e
38
+ function g({ className: e, ...t }) {
39
+ return /* @__PURE__ */ a(o.List, {
40
+ className: r("max-h-[min(20rem,var(--available-height))] overflow-y-auto overscroll-contain", e),
41
+ ...t
42
42
  });
43
43
  }
44
- function x({ className: t, ...e }) {
45
- return /* @__PURE__ */ a(r.Empty, {
46
- className: o("text-pho-tertiary px-2.5 py-6 text-center text-sm empty:m-0 empty:p-0", t),
47
- ...e
44
+ function x({ className: e, ...t }) {
45
+ return /* @__PURE__ */ a(o.Empty, {
46
+ className: r("text-pho-description px-2.5 py-6 text-center text-base empty:m-0 empty:p-0", e),
47
+ ...t
48
48
  });
49
49
  }
50
- function f({ className: t, ...e }) {
51
- return /* @__PURE__ */ a(r.Item, {
52
- className: o("text-pho-secondary flex cursor-pointer items-center gap-2 rounded-lg py-1.5 pr-2.5 pl-2 text-sm outline-none select-none", "data-[highlighted]:bg-pho-ghost-hover data-[highlighted]:text-pho-primary", t),
53
- ...e
50
+ function f({ className: e, ...t }) {
51
+ return /* @__PURE__ */ a(o.Item, {
52
+ className: r("text-pho-secondary rounded-base flex cursor-pointer items-center gap-2 py-1.5 pr-2.5 pl-2 text-base outline-none select-none", "data-[highlighted]:bg-pho-ghost-hover data-[highlighted]:text-pho-primary", e),
53
+ ...t
54
54
  });
55
55
  }
56
- function v({ className: t, ...e }) {
57
- return /* @__PURE__ */ a(r.GroupLabel, {
58
- className: o("text-pho-quaternary px-2.5 py-1.5 text-xs font-medium", t),
59
- ...e
56
+ function v({ className: e, ...t }) {
57
+ return /* @__PURE__ */ a(o.GroupLabel, {
58
+ className: r("text-pho-secondary px-2.5 py-1.5 text-xs font-medium", e),
59
+ ...t
60
60
  });
61
61
  }
62
62
  var I = {
63
63
  Root: i,
64
- Value: l,
64
+ Value: s,
65
65
  InputGroup: c,
66
66
  Input: m,
67
- Clear: h,
68
- Portal: s,
69
- Positioner: d,
70
- Popup: g,
71
- List: y,
67
+ Clear: d,
68
+ Portal: p,
69
+ Positioner: h,
70
+ Popup: y,
71
+ List: g,
72
72
  Collection: u,
73
73
  Empty: x,
74
74
  Item: f,
75
- Group: p,
75
+ Group: l,
76
76
  GroupLabel: v
77
77
  };
78
78
  export {
@@ -1 +1 @@
1
- {"version":3,"file":"autocomplete.js","names":[],"sources":["../../src/components/autocomplete/autocomplete.tsx"],"sourcesContent":["import { type ComponentProps, type ElementType } from \"react\";\nimport { Autocomplete as BaseAutocomplete } from \"@base-ui/react/autocomplete\";\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\nconst Root = BaseAutocomplete.Root;\nconst Value = BaseAutocomplete.Value;\nconst Portal = BaseAutocomplete.Portal;\nconst Group = BaseAutocomplete.Group;\nconst Collection = BaseAutocomplete.Collection;\n\nfunction InputGroup({\n className,\n ...props\n}: StyledProps<typeof BaseAutocomplete.InputGroup>) {\n return (\n <BaseAutocomplete.InputGroup\n className={cn(\"relative flex items-center\", className)}\n {...props}\n />\n );\n}\n\nfunction Input({\n className,\n ...props\n}: StyledProps<typeof BaseAutocomplete.Input>) {\n return (\n <BaseAutocomplete.Input\n className={cn(\n // Flat field surface — the 15% hairline ring carries the edge; shadows\n // are reserved for floating layers.\n \"squircle bg-pho-primary ring-pho-primary text-pho-primary placeholder:text-pho-placeholder focus-visible:ring-pho-brand w-full rounded-lg px-3 py-2 text-sm ring-1 transition-shadow duration-100 ease-linear outline-none ring-inset focus-visible:ring-2 disabled:cursor-not-allowed disabled:opacity-50\",\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction Clear({\n className,\n ...props\n}: StyledProps<typeof BaseAutocomplete.Clear>) {\n return (\n <BaseAutocomplete.Clear\n className={cn(\n \"text-fg-pho-quaternary hover:text-fg-pho-quaternary-hover absolute right-2.5 flex cursor-pointer items-center [&>svg]:size-4\",\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction Positioner({\n className,\n sideOffset = 6,\n ...props\n}: StyledProps<typeof BaseAutocomplete.Positioner>) {\n return (\n <BaseAutocomplete.Positioner\n sideOffset={sideOffset}\n className={cn(\"z-50 outline-none\", className)}\n {...props}\n />\n );\n}\n\nfunction Popup({\n className,\n ...props\n}: StyledProps<typeof BaseAutocomplete.Popup>) {\n return (\n <BaseAutocomplete.Popup\n className={cn(\n // Floating layer: keeps its elevation shadow, edged with the site\n // hairline (ring-pho-secondary).\n \"squircle bg-pho-primary text-pho-primary shadow-pho-lg ring-pho-secondary w-[var(--anchor-width)] max-w-[var(--available-width)] origin-[var(--transform-origin)] rounded-xl p-1 ring-1 transition-[transform,opacity] duration-150 ease-out outline-none ring-inset\",\n \"data-[starting-style]:scale-95 data-[starting-style]:opacity-0\",\n \"data-[ending-style]:scale-95 data-[ending-style]:opacity-0\",\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction List({\n className,\n ...props\n}: StyledProps<typeof BaseAutocomplete.List>) {\n return (\n <BaseAutocomplete.List\n className={cn(\n \"max-h-[min(20rem,var(--available-height))] overflow-y-auto overscroll-contain\",\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction Empty({\n className,\n ...props\n}: StyledProps<typeof BaseAutocomplete.Empty>) {\n return (\n <BaseAutocomplete.Empty\n className={cn(\n \"text-pho-tertiary px-2.5 py-6 text-center text-sm empty:m-0 empty:p-0\",\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction Item({\n className,\n ...props\n}: StyledProps<typeof BaseAutocomplete.Item>) {\n return (\n <BaseAutocomplete.Item\n className={cn(\n \"text-pho-secondary flex cursor-pointer items-center gap-2 rounded-lg py-1.5 pr-2.5 pl-2 text-sm outline-none select-none\",\n // Ghost-hover wash (Font/5%) stays visible on the popup surface in both\n // modes — bg-pho-secondary (#0b0b0b dark) vanishes against the #101010\n // popup.\n \"data-[highlighted]:bg-pho-ghost-hover data-[highlighted]:text-pho-primary\",\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction GroupLabel({\n className,\n ...props\n}: StyledProps<typeof BaseAutocomplete.GroupLabel>) {\n return (\n <BaseAutocomplete.GroupLabel\n className={cn(\n \"text-pho-quaternary px-2.5 py-1.5 text-xs font-medium\",\n className,\n )}\n {...props}\n />\n );\n}\n\n/**\n * Autocomplete built on Base UI `Autocomplete` — a free-text input that offers\n * matching suggestions as you type. Unlike `Combobox`, the value isn't\n * constrained to the list: the user can submit text that matches no suggestion.\n * Pass `items` to `Autocomplete.Root` and render an `Item` per suggestion.\n */\nexport const Autocomplete = {\n Root,\n Value,\n InputGroup,\n Input,\n Clear,\n Portal,\n Positioner,\n Popup,\n List,\n Collection,\n Empty,\n Item,\n Group,\n GroupLabel,\n};\n"],"mappings":";;;;;AAYA,IAAM,IAAO,EAAiB,MACxB,IAAQ,EAAiB,OACzB,IAAS,EAAiB,QAC1B,IAAQ,EAAiB,OACzB,IAAa,EAAiB;AAEpC,SAAS,EAAW,EAClB,WAAA,GACA,GAAG,EAAA,GAC+C;AAClD,SACE,gBAAA,EAAC,EAAiB,YAAlB;AAAA,IACE,WAAW,EAAG,8BAA8B,CAAS;AAAA,IACrD,GAAI;AAAA,EACL,CAAA;AAEL;AAEA,SAAS,EAAM,EACb,WAAA,GACA,GAAG,EAAA,GAC0C;AAC7C,SACE,gBAAA,EAAC,EAAiB,OAAlB;AAAA,IACE,WAAW,EAGT,8SACA,CACF;AAAA,IACA,GAAI;AAAA,EACL,CAAA;AAEL;AAEA,SAAS,EAAM,EACb,WAAA,GACA,GAAG,EAAA,GAC0C;AAC7C,SACE,gBAAA,EAAC,EAAiB,OAAlB;AAAA,IACE,WAAW,EACT,gIACA,CACF;AAAA,IACA,GAAI;AAAA,EACL,CAAA;AAEL;AAEA,SAAS,EAAW,EAClB,WAAA,GACA,YAAA,IAAa,GACb,GAAG,EAAA,GAC+C;AAClD,SACE,gBAAA,EAAC,EAAiB,YAAlB;AAAA,IACc,YAAA;AAAA,IACZ,WAAW,EAAG,qBAAqB,CAAS;AAAA,IAC5C,GAAI;AAAA,EACL,CAAA;AAEL;AAEA,SAAS,EAAM,EACb,WAAA,GACA,GAAG,EAAA,GAC0C;AAC7C,SACE,gBAAA,EAAC,EAAiB,OAAlB;AAAA,IACE,WAAW,EAGT,wQACA,kEACA,8DACA,CACF;AAAA,IACA,GAAI;AAAA,EACL,CAAA;AAEL;AAEA,SAAS,EAAK,EACZ,WAAA,GACA,GAAG,EAAA,GACyC;AAC5C,SACE,gBAAA,EAAC,EAAiB,MAAlB;AAAA,IACE,WAAW,EACT,iFACA,CACF;AAAA,IACA,GAAI;AAAA,EACL,CAAA;AAEL;AAEA,SAAS,EAAM,EACb,WAAA,GACA,GAAG,EAAA,GAC0C;AAC7C,SACE,gBAAA,EAAC,EAAiB,OAAlB;AAAA,IACE,WAAW,EACT,yEACA,CACF;AAAA,IACA,GAAI;AAAA,EACL,CAAA;AAEL;AAEA,SAAS,EAAK,EACZ,WAAA,GACA,GAAG,EAAA,GACyC;AAC5C,SACE,gBAAA,EAAC,EAAiB,MAAlB;AAAA,IACE,WAAW,EACT,4HAIA,6EACA,CACF;AAAA,IACA,GAAI;AAAA,EACL,CAAA;AAEL;AAEA,SAAS,EAAW,EAClB,WAAA,GACA,GAAG,EAAA,GAC+C;AAClD,SACE,gBAAA,EAAC,EAAiB,YAAlB;AAAA,IACE,WAAW,EACT,yDACA,CACF;AAAA,IACA,GAAI;AAAA,EACL,CAAA;AAEL;AAQA,IAAa,IAAe;AAAA,EAC1B,MAAA;AAAA,EACA,OAAA;AAAA,EACA,YAAA;AAAA,EACA,OAAA;AAAA,EACA,OAAA;AAAA,EACA,QAAA;AAAA,EACA,YAAA;AAAA,EACA,OAAA;AAAA,EACA,MAAA;AAAA,EACA,YAAA;AAAA,EACA,OAAA;AAAA,EACA,MAAA;AAAA,EACA,OAAA;AAAA,EACA,YAAA;AACF"}
1
+ {"version":3,"file":"autocomplete.js","names":[],"sources":["../../src/components/autocomplete/autocomplete.tsx"],"sourcesContent":["import { type ComponentProps, type ElementType } from \"react\";\nimport { Autocomplete as BaseAutocomplete } from \"@base-ui/react/autocomplete\";\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\nconst Root = BaseAutocomplete.Root;\nconst Value = BaseAutocomplete.Value;\nconst Portal = BaseAutocomplete.Portal;\nconst Group = BaseAutocomplete.Group;\nconst Collection = BaseAutocomplete.Collection;\n\nfunction InputGroup({\n className,\n ...props\n}: StyledProps<typeof BaseAutocomplete.InputGroup>) {\n return (\n <BaseAutocomplete.InputGroup\n className={cn(\"relative flex items-center\", className)}\n {...props}\n />\n );\n}\n\nfunction Input({\n className,\n ...props\n}: StyledProps<typeof BaseAutocomplete.Input>) {\n return (\n <BaseAutocomplete.Input\n className={cn(\n // Flat field surface — the 15% hairline ring carries the edge; shadows\n // are reserved for floating layers.\n // text-md on small viewports — iOS zooms into fields under 16px.\n \"bg-pho-primary ring-pho-primary text-pho-primary placeholder:text-pho-placeholder focus-visible:ring-pho-brand text-md rounded-base w-full px-3 py-2 ring-1 transition-shadow duration-100 ease-linear outline-none ring-inset focus-visible:ring-2 disabled:cursor-not-allowed disabled:opacity-50 md:text-base\",\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction Clear({\n className,\n ...props\n}: StyledProps<typeof BaseAutocomplete.Clear>) {\n return (\n <BaseAutocomplete.Clear\n className={cn(\n \"text-pho-secondary hover:text-pho-secondary-hover absolute right-2.5 flex cursor-pointer items-center [&>svg]:size-4\",\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction Positioner({\n className,\n sideOffset = 6,\n ...props\n}: StyledProps<typeof BaseAutocomplete.Positioner>) {\n return (\n <BaseAutocomplete.Positioner\n sideOffset={sideOffset}\n className={cn(\"z-50 outline-none\", className)}\n {...props}\n />\n );\n}\n\nfunction Popup({\n className,\n ...props\n}: StyledProps<typeof BaseAutocomplete.Popup>) {\n return (\n <BaseAutocomplete.Popup\n className={cn(\n // Floating layer: keeps its elevation shadow, edged with the site\n // hairline (ring-pho-secondary).\n \"bg-pho-primary text-pho-primary shadow-pho-lg ring-pho-secondary rounded-base w-[var(--anchor-width)] max-w-[var(--available-width)] origin-[var(--transform-origin)] p-1 ring-1 transition-[transform,opacity] duration-150 ease-out outline-none ring-inset\",\n \"data-[starting-style]:scale-95 data-[starting-style]:opacity-0\",\n \"data-[ending-style]:scale-95 data-[ending-style]:opacity-0\",\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction List({\n className,\n ...props\n}: StyledProps<typeof BaseAutocomplete.List>) {\n return (\n <BaseAutocomplete.List\n className={cn(\n \"max-h-[min(20rem,var(--available-height))] overflow-y-auto overscroll-contain\",\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction Empty({\n className,\n ...props\n}: StyledProps<typeof BaseAutocomplete.Empty>) {\n return (\n <BaseAutocomplete.Empty\n className={cn(\n \"text-pho-description px-2.5 py-6 text-center text-base empty:m-0 empty:p-0\",\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction Item({\n className,\n ...props\n}: StyledProps<typeof BaseAutocomplete.Item>) {\n return (\n <BaseAutocomplete.Item\n className={cn(\n \"text-pho-secondary rounded-base flex cursor-pointer items-center gap-2 py-1.5 pr-2.5 pl-2 text-base outline-none select-none\",\n // Secondary at rest; highlight lifts to primary + ghost wash (Menu idiom).\n \"data-[highlighted]:bg-pho-ghost-hover data-[highlighted]:text-pho-primary\",\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction GroupLabel({\n className,\n ...props\n}: StyledProps<typeof BaseAutocomplete.GroupLabel>) {\n return (\n <BaseAutocomplete.GroupLabel\n className={cn(\n \"text-pho-secondary px-2.5 py-1.5 text-xs font-medium\",\n className,\n )}\n {...props}\n />\n );\n}\n\n/**\n * Autocomplete built on Base UI `Autocomplete` — a free-text input that offers\n * matching suggestions as you type. Unlike `Combobox`, the value isn't\n * constrained to the list: the user can submit text that matches no suggestion.\n * Pass `items` to `Autocomplete.Root` and render an `Item` per suggestion.\n */\nexport const Autocomplete = {\n Root,\n Value,\n InputGroup,\n Input,\n Clear,\n Portal,\n Positioner,\n Popup,\n List,\n Collection,\n Empty,\n Item,\n Group,\n GroupLabel,\n};\n"],"mappings":";;;;;AAYA,IAAM,IAAO,EAAiB,MACxB,IAAQ,EAAiB,OACzB,IAAS,EAAiB,QAC1B,IAAQ,EAAiB,OACzB,IAAa,EAAiB;AAEpC,SAAS,EAAW,EAClB,WAAA,GACA,GAAG,EAAA,GAC+C;AAClD,SACE,gBAAA,EAAC,EAAiB,YAAlB;AAAA,IACE,WAAW,EAAG,8BAA8B,CAAS;AAAA,IACrD,GAAI;AAAA,EACL,CAAA;AAEL;AAEA,SAAS,EAAM,EACb,WAAA,GACA,GAAG,EAAA,GAC0C;AAC7C,SACE,gBAAA,EAAC,EAAiB,OAAlB;AAAA,IACE,WAAW,EAIT,oTACA,CACF;AAAA,IACA,GAAI;AAAA,EACL,CAAA;AAEL;AAEA,SAAS,EAAM,EACb,WAAA,GACA,GAAG,EAAA,GAC0C;AAC7C,SACE,gBAAA,EAAC,EAAiB,OAAlB;AAAA,IACE,WAAW,EACT,wHACA,CACF;AAAA,IACA,GAAI;AAAA,EACL,CAAA;AAEL;AAEA,SAAS,EAAW,EAClB,WAAA,GACA,YAAA,IAAa,GACb,GAAG,EAAA,GAC+C;AAClD,SACE,gBAAA,EAAC,EAAiB,YAAlB;AAAA,IACc,YAAA;AAAA,IACZ,WAAW,EAAG,qBAAqB,CAAS;AAAA,IAC5C,GAAI;AAAA,EACL,CAAA;AAEL;AAEA,SAAS,EAAM,EACb,WAAA,GACA,GAAG,EAAA,GAC0C;AAC7C,SACE,gBAAA,EAAC,EAAiB,OAAlB;AAAA,IACE,WAAW,EAGT,iQACA,kEACA,8DACA,CACF;AAAA,IACA,GAAI;AAAA,EACL,CAAA;AAEL;AAEA,SAAS,EAAK,EACZ,WAAA,GACA,GAAG,EAAA,GACyC;AAC5C,SACE,gBAAA,EAAC,EAAiB,MAAlB;AAAA,IACE,WAAW,EACT,iFACA,CACF;AAAA,IACA,GAAI;AAAA,EACL,CAAA;AAEL;AAEA,SAAS,EAAM,EACb,WAAA,GACA,GAAG,EAAA,GAC0C;AAC7C,SACE,gBAAA,EAAC,EAAiB,OAAlB;AAAA,IACE,WAAW,EACT,8EACA,CACF;AAAA,IACA,GAAI;AAAA,EACL,CAAA;AAEL;AAEA,SAAS,EAAK,EACZ,WAAA,GACA,GAAG,EAAA,GACyC;AAC5C,SACE,gBAAA,EAAC,EAAiB,MAAlB;AAAA,IACE,WAAW,EACT,gIAEA,6EACA,CACF;AAAA,IACA,GAAI;AAAA,EACL,CAAA;AAEL;AAEA,SAAS,EAAW,EAClB,WAAA,GACA,GAAG,EAAA,GAC+C;AAClD,SACE,gBAAA,EAAC,EAAiB,YAAlB;AAAA,IACE,WAAW,EACT,wDACA,CACF;AAAA,IACA,GAAI;AAAA,EACL,CAAA;AAEL;AAQA,IAAa,IAAe;AAAA,EAC1B,MAAA;AAAA,EACA,OAAA;AAAA,EACA,YAAA;AAAA,EACA,OAAA;AAAA,EACA,OAAA;AAAA,EACA,QAAA;AAAA,EACA,YAAA;AAAA,EACA,OAAA;AAAA,EACA,MAAA;AAAA,EACA,YAAA;AAAA,EACA,OAAA;AAAA,EACA,MAAA;AAAA,EACA,OAAA;AAAA,EACA,YAAA;AACF"}
@@ -1,5 +1,5 @@
1
1
  "use client";
2
- import { n as a, t as r } from "../chunks/avatar-Bb4RZQIa.js";
2
+ import { n as a, t as r } from "../chunks/avatar-CiAvJNNs.js";
3
3
  export {
4
4
  r as AVATAR_SIZES,
5
5
  a as Avatar
@@ -1,5 +1,5 @@
1
1
  "use client";
2
- import { t as a } from "../chunks/cn-7uGUzCOM.js";
2
+ import { t as a } from "../chunks/cn-DTiB6ek_.js";
3
3
  import { t as i } from "../chunks/resolve-variant-CcD8iG5l.js";
4
4
  import "react";
5
5
  import { jsx as o } from "react/jsx-runtime";
@@ -1,16 +1,16 @@
1
1
  "use client";
2
- import { a, c as s, i as o, l as n, n as B, o as T, r as u, s as e, t as f, u as i } from "../chunks/button-CQ4cZvkC.js";
3
- import { t as E } from "../chunks/close-button-CNhn8z0w.js";
2
+ import { a, c as s, d as n, f as o, i as T, l as B, n as u, o as e, r as f, s as S, t as i, u as E } from "../chunks/close-button-8f-oRJXt.js";
4
3
  export {
4
+ u as BUTTON_COLORS,
5
5
  f as BUTTON_SHAPES,
6
- B as BUTTON_SIZES,
7
- u as BUTTON_VARIANTS,
8
- o as Button,
9
- a as ButtonLink,
10
- E as CloseButton,
11
- T as EFFECT_BUTTON_SIZES,
12
- e as EffectButton,
13
- s as EffectButtonLink,
6
+ T as BUTTON_SIZES,
7
+ a as BUTTON_VARIANTS,
8
+ e as Button,
9
+ S as ButtonLink,
10
+ i as CloseButton,
11
+ s as EFFECT_BUTTON_SIZES,
12
+ B as EffectButton,
13
+ E as EffectButtonLink,
14
14
  n as buttonVariants,
15
- i as effectButtonVariants
15
+ o as effectButtonVariants
16
16
  };
@@ -1,5 +1,5 @@
1
1
  "use client";
2
- import { t as a } from "../chunks/cn-7uGUzCOM.js";
2
+ import { t as a } from "../chunks/cn-DTiB6ek_.js";
3
3
  import { t as d } from "../chunks/createReactComponent-BqCmnqfX.js";
4
4
  import "react";
5
5
  import { jsx as e, jsxs as i } from "react/jsx-runtime";
@@ -20,7 +20,7 @@ var p = [["path", {
20
20
  };
21
21
  function f({ className: o, label: r, size: t = "md", ...l }) {
22
22
  const n = /* @__PURE__ */ e(s.Root, {
23
- className: a("group/cb squircle outline-pho-brand bg-pho-primary ring-pho-primary text-pho-on-brand flex shrink-0 cursor-pointer items-center justify-center rounded-md ring-1 transition duration-100 ease-linear ring-inset focus-visible:outline-2 focus-visible:outline-offset-2", "data-[checked]:bg-pho-brand-solid data-[checked]:ring-transparent", "data-[indeterminate]:bg-pho-brand-solid data-[indeterminate]:ring-transparent", "data-[disabled]:cursor-not-allowed data-[disabled]:opacity-50", x[t], o),
23
+ className: a("group/cb outline-pho-brand bg-pho-primary ring-pho-primary text-pho-on-brand flex shrink-0 cursor-pointer items-center justify-center rounded-sm ring-1 transition duration-100 ease-linear ring-inset focus-visible:outline-2 focus-visible:outline-offset-2", "data-[checked]:bg-pho-brand-solid data-[checked]:ring-transparent", "data-[indeterminate]:bg-pho-brand-solid data-[indeterminate]:ring-transparent", "data-[disabled]:cursor-not-allowed data-[disabled]:opacity-50", x[t], o),
24
24
  ...l,
25
25
  children: /* @__PURE__ */ i(s.Indicator, {
26
26
  className: "flex items-center justify-center",
@@ -30,7 +30,7 @@ function f({ className: o, label: r, size: t = "md", ...l }) {
30
30
  return r ? /* @__PURE__ */ i("label", {
31
31
  className: "flex cursor-pointer items-center gap-2 select-none",
32
32
  children: [n, /* @__PURE__ */ e("span", {
33
- className: "text-pho-secondary text-sm",
33
+ className: "text-pho-secondary text-base",
34
34
  children: r
35
35
  })]
36
36
  }) : n;