@photon-ai/pho-ui 0.1.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 (281) hide show
  1. package/README.md +49 -0
  2. package/dist/chunks/button-9pp4g7en.js +334 -0
  3. package/dist/chunks/button-9pp4g7en.js.map +1 -0
  4. package/dist/chunks/close-button-CbQNfpxU.js +30 -0
  5. package/dist/chunks/close-button-CbQNfpxU.js.map +1 -0
  6. package/dist/chunks/cn-D6jQqeRj.js +1762 -0
  7. package/dist/chunks/cn-D6jQqeRj.js.map +1 -0
  8. package/dist/chunks/dialog-BSBF1Wyq.js +63 -0
  9. package/dist/chunks/dialog-BSBF1Wyq.js.map +1 -0
  10. package/dist/chunks/input-aZqjjV_m.js +75 -0
  11. package/dist/chunks/input-aZqjjV_m.js.map +1 -0
  12. package/dist/chunks/link-provider-9TFNyDqO.js +28 -0
  13. package/dist/chunks/link-provider-9TFNyDqO.js.map +1 -0
  14. package/dist/chunks/menu-BkzDbNuX.js +101 -0
  15. package/dist/chunks/menu-BkzDbNuX.js.map +1 -0
  16. package/dist/chunks/resolve-variant-CcD8iG5l.js +9 -0
  17. package/dist/chunks/resolve-variant-CcD8iG5l.js.map +1 -0
  18. package/dist/chunks/rolldown-runtime-wKSmTnsc.js +22 -0
  19. package/dist/components/accordion.js +42 -0
  20. package/dist/components/accordion.js.map +1 -0
  21. package/dist/components/alert-dialog.js +59 -0
  22. package/dist/components/alert-dialog.js.map +1 -0
  23. package/dist/components/autocomplete.js +82 -0
  24. package/dist/components/autocomplete.js.map +1 -0
  25. package/dist/components/avatar.js +49 -0
  26. package/dist/components/avatar.js.map +1 -0
  27. package/dist/components/badge.js +59 -0
  28. package/dist/components/badge.js.map +1 -0
  29. package/dist/components/button.js +17 -0
  30. package/dist/components/checkbox.js +51 -0
  31. package/dist/components/checkbox.js.map +1 -0
  32. package/dist/components/collapsible.js +28 -0
  33. package/dist/components/collapsible.js.map +1 -0
  34. package/dist/components/combobox.js +117 -0
  35. package/dist/components/combobox.js.map +1 -0
  36. package/dist/components/context-menu.js +63 -0
  37. package/dist/components/context-menu.js.map +1 -0
  38. package/dist/components/dialog.js +5 -0
  39. package/dist/components/drawer.js +59 -0
  40. package/dist/components/drawer.js.map +1 -0
  41. package/dist/components/field.js +49 -0
  42. package/dist/components/field.js.map +1 -0
  43. package/dist/components/fieldset.js +26 -0
  44. package/dist/components/fieldset.js.map +1 -0
  45. package/dist/components/form.js +17 -0
  46. package/dist/components/form.js.map +1 -0
  47. package/dist/components/input.js +5 -0
  48. package/dist/components/kbd.js +18 -0
  49. package/dist/components/kbd.js.map +1 -0
  50. package/dist/components/menu.js +7 -0
  51. package/dist/components/menubar.js +17 -0
  52. package/dist/components/menubar.js.map +1 -0
  53. package/dist/components/meter.js +47 -0
  54. package/dist/components/meter.js.map +1 -0
  55. package/dist/components/navigation-menu.js +74 -0
  56. package/dist/components/navigation-menu.js.map +1 -0
  57. package/dist/components/notification.js +91 -0
  58. package/dist/components/notification.js.map +1 -0
  59. package/dist/components/number-field.js +56 -0
  60. package/dist/components/number-field.js.map +1 -0
  61. package/dist/components/otp-field.js +19 -0
  62. package/dist/components/otp-field.js.map +1 -0
  63. package/dist/components/popover.js +46 -0
  64. package/dist/components/popover.js.map +1 -0
  65. package/dist/components/preview-card.js +31 -0
  66. package/dist/components/preview-card.js.map +1 -0
  67. package/dist/components/progress.js +47 -0
  68. package/dist/components/progress.js.map +1 -0
  69. package/dist/components/radio-group.js +34 -0
  70. package/dist/components/radio-group.js.map +1 -0
  71. package/dist/components/scroll-area.js +43 -0
  72. package/dist/components/scroll-area.js.map +1 -0
  73. package/dist/components/select.js +69 -0
  74. package/dist/components/select.js.map +1 -0
  75. package/dist/components/separator.js +17 -0
  76. package/dist/components/separator.js.map +1 -0
  77. package/dist/components/slider.js +61 -0
  78. package/dist/components/slider.js.map +1 -0
  79. package/dist/components/switch.js +28 -0
  80. package/dist/components/switch.js.map +1 -0
  81. package/dist/components/tabs.js +42 -0
  82. package/dist/components/tabs.js.map +1 -0
  83. package/dist/components/toast.js +60 -0
  84. package/dist/components/toast.js.map +1 -0
  85. package/dist/components/toggle-group.js +17 -0
  86. package/dist/components/toggle-group.js.map +1 -0
  87. package/dist/components/toggle.js +33 -0
  88. package/dist/components/toggle.js.map +1 -0
  89. package/dist/components/toolbar.js +55 -0
  90. package/dist/components/toolbar.js.map +1 -0
  91. package/dist/components/tooltip.js +32 -0
  92. package/dist/components/tooltip.js.map +1 -0
  93. package/dist/icons.js +192 -0
  94. package/dist/icons.js.map +1 -0
  95. package/dist/index.js +30 -0
  96. package/dist/primitives/accordion.js +3 -0
  97. package/dist/primitives/alert-dialog.js +3 -0
  98. package/dist/primitives/autocomplete.js +3 -0
  99. package/dist/primitives/avatar.js +3 -0
  100. package/dist/primitives/button.js +3 -0
  101. package/dist/primitives/checkbox-group.js +3 -0
  102. package/dist/primitives/checkbox.js +3 -0
  103. package/dist/primitives/collapsible.js +3 -0
  104. package/dist/primitives/combobox.js +3 -0
  105. package/dist/primitives/context-menu.js +3 -0
  106. package/dist/primitives/csp-provider.js +3 -0
  107. package/dist/primitives/dialog.js +3 -0
  108. package/dist/primitives/direction-provider.js +3 -0
  109. package/dist/primitives/drawer.js +3 -0
  110. package/dist/primitives/field.js +3 -0
  111. package/dist/primitives/fieldset.js +3 -0
  112. package/dist/primitives/form.js +3 -0
  113. package/dist/primitives/input.js +3 -0
  114. package/dist/primitives/menu.js +3 -0
  115. package/dist/primitives/menubar.js +3 -0
  116. package/dist/primitives/meter.js +3 -0
  117. package/dist/primitives/navigation-menu.js +3 -0
  118. package/dist/primitives/number-field.js +3 -0
  119. package/dist/primitives/otp-field.js +3 -0
  120. package/dist/primitives/popover.js +3 -0
  121. package/dist/primitives/preview-card.js +3 -0
  122. package/dist/primitives/progress.js +3 -0
  123. package/dist/primitives/radio-group.js +3 -0
  124. package/dist/primitives/radio.js +3 -0
  125. package/dist/primitives/scroll-area.js +3 -0
  126. package/dist/primitives/select.js +3 -0
  127. package/dist/primitives/separator.js +3 -0
  128. package/dist/primitives/slider.js +3 -0
  129. package/dist/primitives/switch.js +3 -0
  130. package/dist/primitives/tabs.js +3 -0
  131. package/dist/primitives/toast.js +3 -0
  132. package/dist/primitives/toggle-group.js +3 -0
  133. package/dist/primitives/toggle.js +3 -0
  134. package/dist/primitives/toolbar.js +3 -0
  135. package/dist/primitives/tooltip.js +3 -0
  136. package/dist/primitives.js +84 -0
  137. package/dist/primitives.js.map +1 -0
  138. package/dist/src/components/accordion/accordion.d.ts +24 -0
  139. package/dist/src/components/accordion/index.d.ts +1 -0
  140. package/dist/src/components/alert-dialog/alert-dialog.d.ts +41 -0
  141. package/dist/src/components/alert-dialog/index.d.ts +1 -0
  142. package/dist/src/components/autocomplete/autocomplete.d.ts +38 -0
  143. package/dist/src/components/autocomplete/index.d.ts +1 -0
  144. package/dist/src/components/avatar/avatar.d.ts +40 -0
  145. package/dist/src/components/avatar/index.d.ts +1 -0
  146. package/dist/src/components/badge/badge.d.ts +63 -0
  147. package/dist/src/components/badge/index.d.ts +1 -0
  148. package/dist/src/components/button/button.d.ts +196 -0
  149. package/dist/src/components/button/close-button.d.ts +28 -0
  150. package/dist/src/components/button/index.d.ts +2 -0
  151. package/dist/src/components/checkbox/checkbox-group.d.ts +15 -0
  152. package/dist/src/components/checkbox/checkbox.d.ts +20 -0
  153. package/dist/src/components/checkbox/index.d.ts +2 -0
  154. package/dist/src/components/collapsible/collapsible.d.ts +20 -0
  155. package/dist/src/components/collapsible/index.d.ts +1 -0
  156. package/dist/src/components/combobox/combobox.d.ts +49 -0
  157. package/dist/src/components/combobox/index.d.ts +1 -0
  158. package/dist/src/components/context-menu/context-menu.d.ts +34 -0
  159. package/dist/src/components/context-menu/index.d.ts +1 -0
  160. package/dist/src/components/dialog/dialog.d.ts +41 -0
  161. package/dist/src/components/dialog/index.d.ts +1 -0
  162. package/dist/src/components/drawer/drawer.d.ts +32 -0
  163. package/dist/src/components/drawer/index.d.ts +1 -0
  164. package/dist/src/components/field/field.d.ts +27 -0
  165. package/dist/src/components/field/index.d.ts +1 -0
  166. package/dist/src/components/fieldset/fieldset.d.ts +18 -0
  167. package/dist/src/components/fieldset/index.d.ts +1 -0
  168. package/dist/src/components/form/form.d.ts +14 -0
  169. package/dist/src/components/form/index.d.ts +1 -0
  170. package/dist/src/components/input/index.d.ts +1 -0
  171. package/dist/src/components/input/input.d.ts +30 -0
  172. package/dist/src/components/kbd/index.d.ts +1 -0
  173. package/dist/src/components/kbd/kbd.d.ts +18 -0
  174. package/dist/src/components/menu/index.d.ts +1 -0
  175. package/dist/src/components/menu/menu.d.ts +47 -0
  176. package/dist/src/components/menubar/index.d.ts +1 -0
  177. package/dist/src/components/menubar/menubar.d.ts +14 -0
  178. package/dist/src/components/meter/index.d.ts +1 -0
  179. package/dist/src/components/meter/meter.d.ts +24 -0
  180. package/dist/src/components/navigation-menu/index.d.ts +1 -0
  181. package/dist/src/components/navigation-menu/navigation-menu.d.ts +35 -0
  182. package/dist/src/components/notification/index.d.ts +1 -0
  183. package/dist/src/components/notification/notification.d.ts +73 -0
  184. package/dist/src/components/number-field/index.d.ts +1 -0
  185. package/dist/src/components/number-field/number-field.d.ts +28 -0
  186. package/dist/src/components/otp-field/index.d.ts +1 -0
  187. package/dist/src/components/otp-field/otp-field.d.ts +17 -0
  188. package/dist/src/components/popover/index.d.ts +1 -0
  189. package/dist/src/components/popover/popover.d.ts +27 -0
  190. package/dist/src/components/preview-card/index.d.ts +1 -0
  191. package/dist/src/components/preview-card/preview-card.d.ts +22 -0
  192. package/dist/src/components/progress/index.d.ts +1 -0
  193. package/dist/src/components/progress/progress.d.ts +24 -0
  194. package/dist/src/components/radio-group/index.d.ts +1 -0
  195. package/dist/src/components/radio-group/radio-group.d.ts +28 -0
  196. package/dist/src/components/scroll-area/index.d.ts +1 -0
  197. package/dist/src/components/scroll-area/scroll-area.d.ts +25 -0
  198. package/dist/src/components/select/index.d.ts +1 -0
  199. package/dist/src/components/select/select.d.ts +36 -0
  200. package/dist/src/components/separator/index.d.ts +1 -0
  201. package/dist/src/components/separator/separator.d.ts +14 -0
  202. package/dist/src/components/slider/index.d.ts +1 -0
  203. package/dist/src/components/slider/slider.d.ts +30 -0
  204. package/dist/src/components/switch/index.d.ts +1 -0
  205. package/dist/src/components/switch/switch.d.ts +18 -0
  206. package/dist/src/components/tabs/index.d.ts +1 -0
  207. package/dist/src/components/tabs/tabs.d.ts +24 -0
  208. package/dist/src/components/toast/index.d.ts +1 -0
  209. package/dist/src/components/toast/toast.d.ts +34 -0
  210. package/dist/src/components/toggle/index.d.ts +1 -0
  211. package/dist/src/components/toggle/toggle.d.ts +33 -0
  212. package/dist/src/components/toggle-group/index.d.ts +1 -0
  213. package/dist/src/components/toggle-group/toggle-group.d.ts +15 -0
  214. package/dist/src/components/toolbar/index.d.ts +1 -0
  215. package/dist/src/components/toolbar/toolbar.d.ts +28 -0
  216. package/dist/src/components/tooltip/index.d.ts +1 -0
  217. package/dist/src/components/tooltip/tooltip.d.ts +23 -0
  218. package/dist/src/icons/discord.d.ts +3 -0
  219. package/dist/src/icons/github.d.ts +3 -0
  220. package/dist/src/icons/google.d.ts +3 -0
  221. package/dist/src/icons/imessage.d.ts +3 -0
  222. package/dist/src/icons/index.d.ts +18 -0
  223. package/dist/src/icons/photon-mark.d.ts +3 -0
  224. package/dist/src/icons/reddit.d.ts +3 -0
  225. package/dist/src/icons/slack.d.ts +3 -0
  226. package/dist/src/icons/telegram.d.ts +3 -0
  227. package/dist/src/icons/whatsapp.d.ts +3 -0
  228. package/dist/src/icons/x.d.ts +3 -0
  229. package/dist/src/icons/youtube.d.ts +3 -0
  230. package/dist/src/index.d.ts +11 -0
  231. package/dist/src/primitives/accordion.d.ts +5 -0
  232. package/dist/src/primitives/alert-dialog.d.ts +5 -0
  233. package/dist/src/primitives/autocomplete.d.ts +5 -0
  234. package/dist/src/primitives/avatar.d.ts +5 -0
  235. package/dist/src/primitives/button.d.ts +5 -0
  236. package/dist/src/primitives/checkbox-group.d.ts +5 -0
  237. package/dist/src/primitives/checkbox.d.ts +5 -0
  238. package/dist/src/primitives/collapsible.d.ts +5 -0
  239. package/dist/src/primitives/combobox.d.ts +5 -0
  240. package/dist/src/primitives/context-menu.d.ts +5 -0
  241. package/dist/src/primitives/csp-provider.d.ts +5 -0
  242. package/dist/src/primitives/dialog.d.ts +5 -0
  243. package/dist/src/primitives/direction-provider.d.ts +5 -0
  244. package/dist/src/primitives/drawer.d.ts +5 -0
  245. package/dist/src/primitives/field.d.ts +5 -0
  246. package/dist/src/primitives/fieldset.d.ts +5 -0
  247. package/dist/src/primitives/form.d.ts +5 -0
  248. package/dist/src/primitives/index.d.ts +44 -0
  249. package/dist/src/primitives/input.d.ts +5 -0
  250. package/dist/src/primitives/menu.d.ts +5 -0
  251. package/dist/src/primitives/menubar.d.ts +5 -0
  252. package/dist/src/primitives/meter.d.ts +5 -0
  253. package/dist/src/primitives/navigation-menu.d.ts +5 -0
  254. package/dist/src/primitives/number-field.d.ts +5 -0
  255. package/dist/src/primitives/otp-field.d.ts +5 -0
  256. package/dist/src/primitives/popover.d.ts +5 -0
  257. package/dist/src/primitives/preview-card.d.ts +5 -0
  258. package/dist/src/primitives/progress.d.ts +5 -0
  259. package/dist/src/primitives/radio-group.d.ts +5 -0
  260. package/dist/src/primitives/radio.d.ts +5 -0
  261. package/dist/src/primitives/scroll-area.d.ts +5 -0
  262. package/dist/src/primitives/select.d.ts +5 -0
  263. package/dist/src/primitives/separator.d.ts +5 -0
  264. package/dist/src/primitives/slider.d.ts +5 -0
  265. package/dist/src/primitives/switch.d.ts +5 -0
  266. package/dist/src/primitives/tabs.d.ts +5 -0
  267. package/dist/src/primitives/toast.d.ts +5 -0
  268. package/dist/src/primitives/toggle-group.d.ts +5 -0
  269. package/dist/src/primitives/toggle.d.ts +5 -0
  270. package/dist/src/primitives/toolbar.d.ts +5 -0
  271. package/dist/src/primitives/tooltip.d.ts +5 -0
  272. package/dist/src/utils/cn.d.ts +3 -0
  273. package/dist/src/utils/index.d.ts +4 -0
  274. package/dist/src/utils/is-react-component.d.ts +9 -0
  275. package/dist/src/utils/link-provider.d.ts +17 -0
  276. package/dist/src/utils/resolve-variant.d.ts +19 -0
  277. package/dist/utils.js +11 -0
  278. package/package.json +406 -0
  279. package/src/styles/fonts.css +20 -0
  280. package/src/styles/pho.css +50 -0
  281. package/src/styles/theme.css +289 -0
@@ -0,0 +1,28 @@
1
+ "use client";
2
+ import { t as r } from "../chunks/cn-D6jQqeRj.js";
3
+ import "react";
4
+ import { jsx as i } from "react/jsx-runtime";
5
+ import { Collapsible as o } from "@base-ui/react/collapsible";
6
+ var n = o.Root;
7
+ function a({ className: e, ...t }) {
8
+ return /* @__PURE__ */ i(o.Trigger, {
9
+ className: r("outline-pho-brand text-pho-secondary hover:text-pho-secondary-hover flex w-full cursor-pointer items-center justify-between gap-2 rounded-md text-sm font-medium transition focus-visible:outline-2 focus-visible:outline-offset-2", "[&>svg]:size-4 [&>svg]:transition-transform [&>svg]:duration-150 data-[panel-open]:[&>svg]:rotate-180", e),
10
+ ...t
11
+ });
12
+ }
13
+ function s({ className: e, ...t }) {
14
+ return /* @__PURE__ */ i(o.Panel, {
15
+ className: r("h-[var(--collapsible-panel-height)] overflow-hidden transition-[height] duration-150 ease-out", "data-[ending-style]:h-0 data-[starting-style]:h-0", e),
16
+ ...t
17
+ });
18
+ }
19
+ var f = {
20
+ Root: n,
21
+ Trigger: a,
22
+ Panel: s
23
+ };
24
+ export {
25
+ f as Collapsible
26
+ };
27
+
28
+ //# sourceMappingURL=collapsible.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"collapsible.js","names":[],"sources":["../../src/components/collapsible/collapsible.tsx"],"sourcesContent":["import { type ComponentProps, type ElementType } from \"react\";\nimport { Collapsible as BaseCollapsible } from \"@base-ui/react/collapsible\";\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 = BaseCollapsible.Root;\n\nfunction Trigger({\n className,\n ...props\n}: StyledProps<typeof BaseCollapsible.Trigger>) {\n return (\n <BaseCollapsible.Trigger\n className={cn(\n \"outline-pho-brand text-pho-secondary hover:text-pho-secondary-hover flex w-full cursor-pointer items-center justify-between gap-2 rounded-md text-sm font-medium transition focus-visible:outline-2 focus-visible:outline-offset-2\",\n \"[&>svg]:size-4 [&>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 BaseCollapsible.Panel>) {\n return (\n <BaseCollapsible.Panel\n className={cn(\n \"h-[var(--collapsible-panel-height)] overflow-hidden 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 * Show/hide a region of content, built on Base UI `Collapsible` with a smooth\n * height animation. Control with `open` / `onOpenChange` or leave uncontrolled\n * via `defaultOpen`. For several sections where one expands at a time, use\n * `Accordion`.\n */\nexport const Collapsible = { Root, Trigger, Panel };\n"],"mappings":";;;;;AAYA,IAAM,IAAO,EAAgB;AAE7B,SAAS,EAAQ,EACf,WAAA,GACA,GAAG,EAAA,GAC2C;AAC9C,SACE,gBAAA,EAAC,EAAgB,SAAjB;AAAA,IACE,WAAW,EACT,sOACA,yGACA,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,iGACA,qDACA,CACF;AAAA,IACA,GAAI;AAAA,EACL,CAAA;AAEL;AAQA,IAAa,IAAc;AAAA,EAAE,MAAA;AAAA,EAAM,SAAA;AAAA,EAAS,OAAA;AAAM"}
@@ -0,0 +1,117 @@
1
+ "use client";
2
+ import { t as o } from "../chunks/cn-D6jQqeRj.js";
3
+ import "react";
4
+ import { jsx as n } from "react/jsx-runtime";
5
+ import { Combobox as r } from "@base-ui/react/combobox";
6
+ var i = r.Root, s = r.Value, p = r.Portal, l = r.Group, u = r.Collection;
7
+ function c({ className: e, ...t }) {
8
+ return /* @__PURE__ */ n(r.InputGroup, {
9
+ className: o("relative flex items-center", e),
10
+ ...t
11
+ });
12
+ }
13
+ function m({ className: e, ...t }) {
14
+ return /* @__PURE__ */ n(r.Input, {
15
+ className: o("squircle bg-pho-primary shadow-pho-xs 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", e),
16
+ ...t
17
+ });
18
+ }
19
+ function h({ className: e, ...t }) {
20
+ return /* @__PURE__ */ n(r.Clear, {
21
+ className: o("combobox-clear text-fg-pho-quaternary hover:text-fg-pho-quaternary-hover absolute right-2.5 flex cursor-pointer items-center [&>svg]:size-4", e),
22
+ ...t
23
+ });
24
+ }
25
+ function g({ className: e, ...t }) {
26
+ return /* @__PURE__ */ n(r.Trigger, {
27
+ className: o("text-fg-pho-quaternary hover:text-fg-pho-quaternary-hover absolute right-2.5 flex cursor-pointer items-center [&>svg]:size-4", e),
28
+ ...t
29
+ });
30
+ }
31
+ function d({ className: e, sideOffset: t = 6, ...a }) {
32
+ return /* @__PURE__ */ n(r.Positioner, {
33
+ sideOffset: t,
34
+ className: o("z-50 outline-none", e),
35
+ ...a
36
+ });
37
+ }
38
+ function x({ className: e, ...t }) {
39
+ return /* @__PURE__ */ n(r.Popup, {
40
+ className: o("squircle bg-pho-primary text-pho-primary shadow-pho-lg ring-pho-interactive 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", e),
41
+ ...t
42
+ });
43
+ }
44
+ function f({ className: e, ...t }) {
45
+ return /* @__PURE__ */ n(r.List, {
46
+ className: o("max-h-[min(20rem,var(--available-height))] overflow-y-auto overscroll-contain", e),
47
+ ...t
48
+ });
49
+ }
50
+ function y({ className: e, ...t }) {
51
+ return /* @__PURE__ */ n(r.Empty, {
52
+ className: o("text-pho-tertiary px-2.5 py-6 text-center text-sm empty:m-0 empty:p-0", e),
53
+ ...t
54
+ });
55
+ }
56
+ function v({ className: e, ...t }) {
57
+ return /* @__PURE__ */ n(r.Item, {
58
+ className: o("text-pho-secondary grid cursor-pointer grid-cols-[1rem_1fr] items-center gap-2 rounded-lg py-1.5 pr-2.5 pl-2 text-sm outline-none select-none", "data-[highlighted]:bg-pho-secondary data-[highlighted]:text-pho-primary", e),
59
+ ...t
60
+ });
61
+ }
62
+ function b({ className: e, ...t }) {
63
+ return /* @__PURE__ */ n(r.ItemIndicator, {
64
+ className: o("text-pho-brand col-start-1 flex items-center [&>svg]:size-4", e),
65
+ ...t
66
+ });
67
+ }
68
+ function w({ className: e, ...t }) {
69
+ return /* @__PURE__ */ n(r.GroupLabel, {
70
+ className: o("text-pho-quaternary px-2.5 py-1.5 text-xs font-medium", e),
71
+ ...t
72
+ });
73
+ }
74
+ function N({ className: e, ...t }) {
75
+ return /* @__PURE__ */ n(r.Chips, {
76
+ className: o("squircle bg-pho-primary shadow-pho-xs ring-pho-primary focus-within:ring-pho-brand flex flex-wrap items-center gap-1.5 rounded-lg p-1.5 ring-1 ring-inset focus-within:ring-2", e),
77
+ ...t
78
+ });
79
+ }
80
+ function C({ className: e, ...t }) {
81
+ return /* @__PURE__ */ n(r.Chip, {
82
+ className: o("bg-pho-secondary text-pho-secondary data-[highlighted]:bg-pho-tertiary flex items-center gap-1 rounded-md py-0.5 pr-1 pl-2 text-sm", e),
83
+ ...t
84
+ });
85
+ }
86
+ function q({ className: e, ...t }) {
87
+ return /* @__PURE__ */ n(r.ChipRemove, {
88
+ className: o("text-fg-pho-quaternary hover:text-fg-pho-quaternary-hover flex cursor-pointer items-center rounded-sm [&>svg]:size-3.5", e),
89
+ ...t
90
+ });
91
+ }
92
+ var L = {
93
+ Root: i,
94
+ Value: s,
95
+ InputGroup: c,
96
+ Input: m,
97
+ Trigger: g,
98
+ Clear: h,
99
+ Portal: p,
100
+ Positioner: d,
101
+ Popup: x,
102
+ List: f,
103
+ Collection: u,
104
+ Empty: y,
105
+ Item: v,
106
+ ItemIndicator: b,
107
+ Group: l,
108
+ GroupLabel: w,
109
+ Chips: N,
110
+ Chip: C,
111
+ ChipRemove: q
112
+ };
113
+ export {
114
+ L as Combobox
115
+ };
116
+
117
+ //# sourceMappingURL=combobox.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"combobox.js","names":[],"sources":["../../src/components/combobox/combobox.tsx"],"sourcesContent":["import { type ComponentProps, type ElementType } from \"react\";\nimport { Combobox as BaseCombobox } from \"@base-ui/react/combobox\";\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 = BaseCombobox.Root;\nconst Value = BaseCombobox.Value;\nconst Portal = BaseCombobox.Portal;\nconst Group = BaseCombobox.Group;\nconst Collection = BaseCombobox.Collection;\n\nfunction InputGroup({\n className,\n ...props\n}: StyledProps<typeof BaseCombobox.InputGroup>) {\n return (\n <BaseCombobox.InputGroup\n className={cn(\"relative flex items-center\", className)}\n {...props}\n />\n );\n}\n\nfunction Input({\n className,\n ...props\n}: StyledProps<typeof BaseCombobox.Input>) {\n return (\n <BaseCombobox.Input\n className={cn(\n \"squircle bg-pho-primary shadow-pho-xs 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 BaseCombobox.Clear>) {\n return (\n <BaseCombobox.Clear\n className={cn(\n \"combobox-clear 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 Trigger({\n className,\n ...props\n}: StyledProps<typeof BaseCombobox.Trigger>) {\n return (\n <BaseCombobox.Trigger\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 BaseCombobox.Positioner>) {\n return (\n <BaseCombobox.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 BaseCombobox.Popup>) {\n return (\n <BaseCombobox.Popup\n className={cn(\n \"squircle bg-pho-primary text-pho-primary shadow-pho-lg ring-pho-interactive 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({ className, ...props }: StyledProps<typeof BaseCombobox.List>) {\n return (\n <BaseCombobox.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 BaseCombobox.Empty>) {\n return (\n <BaseCombobox.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({ className, ...props }: StyledProps<typeof BaseCombobox.Item>) {\n return (\n <BaseCombobox.Item\n className={cn(\n \"text-pho-secondary grid cursor-pointer grid-cols-[1rem_1fr] items-center gap-2 rounded-lg py-1.5 pr-2.5 pl-2 text-sm outline-none select-none\",\n \"data-[highlighted]:bg-pho-secondary data-[highlighted]:text-pho-primary\",\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction ItemIndicator({\n className,\n ...props\n}: StyledProps<typeof BaseCombobox.ItemIndicator>) {\n return (\n <BaseCombobox.ItemIndicator\n className={cn(\n \"text-pho-brand col-start-1 flex items-center [&>svg]:size-4\",\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction GroupLabel({\n className,\n ...props\n}: StyledProps<typeof BaseCombobox.GroupLabel>) {\n return (\n <BaseCombobox.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\nfunction Chips({\n className,\n ...props\n}: StyledProps<typeof BaseCombobox.Chips>) {\n return (\n <BaseCombobox.Chips\n className={cn(\n \"squircle bg-pho-primary shadow-pho-xs ring-pho-primary focus-within:ring-pho-brand flex flex-wrap items-center gap-1.5 rounded-lg p-1.5 ring-1 ring-inset focus-within:ring-2\",\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction Chip({ className, ...props }: StyledProps<typeof BaseCombobox.Chip>) {\n return (\n <BaseCombobox.Chip\n className={cn(\n \"bg-pho-secondary text-pho-secondary data-[highlighted]:bg-pho-tertiary flex items-center gap-1 rounded-md py-0.5 pr-1 pl-2 text-sm\",\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction ChipRemove({\n className,\n ...props\n}: StyledProps<typeof BaseCombobox.ChipRemove>) {\n return (\n <BaseCombobox.ChipRemove\n className={cn(\n \"text-fg-pho-quaternary hover:text-fg-pho-quaternary-hover flex cursor-pointer items-center rounded-sm [&>svg]:size-3.5\",\n className,\n )}\n {...props}\n />\n );\n}\n\n/**\n * Combobox built on Base UI `Combobox` — a text input that filters a list as\n * you type and commits to a value from it. Pass `items` to `Combobox.Root`;\n * `Combobox.List` takes a render function mapping each (filtered) item to a\n * `Combobox.Item`. Add `Combobox.Chips` for multi-select. For free-form text\n * with suggestions, use `Autocomplete`; for a small fixed set, use `Select`.\n */\nexport const Combobox = {\n Root,\n Value,\n InputGroup,\n Input,\n Trigger,\n Clear,\n Portal,\n Positioner,\n Popup,\n List,\n Collection,\n Empty,\n Item,\n ItemIndicator,\n Group,\n GroupLabel,\n Chips,\n Chip,\n ChipRemove,\n};\n"],"mappings":";;;;;AAYA,IAAM,IAAO,EAAa,MACpB,IAAQ,EAAa,OACrB,IAAS,EAAa,QACtB,IAAQ,EAAa,OACrB,IAAa,EAAa;AAEhC,SAAS,EAAW,EAClB,WAAA,GACA,GAAG,EAAA,GAC2C;AAC9C,SACE,gBAAA,EAAC,EAAa,YAAd;AAAA,IACE,WAAW,EAAG,8BAA8B,CAAS;AAAA,IACrD,GAAI;AAAA,EACL,CAAA;AAEL;AAEA,SAAS,EAAM,EACb,WAAA,GACA,GAAG,EAAA,GACsC;AACzC,SACE,gBAAA,EAAC,EAAa,OAAd;AAAA,IACE,WAAW,EACT,4TACA,CACF;AAAA,IACA,GAAI;AAAA,EACL,CAAA;AAEL;AAEA,SAAS,EAAM,EACb,WAAA,GACA,GAAG,EAAA,GACsC;AACzC,SACE,gBAAA,EAAC,EAAa,OAAd;AAAA,IACE,WAAW,EACT,+IACA,CACF;AAAA,IACA,GAAI;AAAA,EACL,CAAA;AAEL;AAEA,SAAS,EAAQ,EACf,WAAA,GACA,GAAG,EAAA,GACwC;AAC3C,SACE,gBAAA,EAAC,EAAa,SAAd;AAAA,IACE,WAAW,EACT,gIACA,CACF;AAAA,IACA,GAAI;AAAA,EACL,CAAA;AAEL;AAEA,SAAS,EAAW,EAClB,WAAA,GACA,YAAA,IAAa,GACb,GAAG,EAAA,GAC2C;AAC9C,SACE,gBAAA,EAAC,EAAa,YAAd;AAAA,IACc,YAAA;AAAA,IACZ,WAAW,EAAG,qBAAqB,CAAS;AAAA,IAC5C,GAAI;AAAA,EACL,CAAA;AAEL;AAEA,SAAS,EAAM,EACb,WAAA,GACA,GAAG,EAAA,GACsC;AACzC,SACE,gBAAA,EAAC,EAAa,OAAd;AAAA,IACE,WAAW,EACT,0QACA,kEACA,8DACA,CACF;AAAA,IACA,GAAI;AAAA,EACL,CAAA;AAEL;AAEA,SAAS,EAAK,EAAE,WAAA,GAAW,GAAG,EAAA,GAAgD;AAC5E,SACE,gBAAA,EAAC,EAAa,MAAd;AAAA,IACE,WAAW,EACT,iFACA,CACF;AAAA,IACA,GAAI;AAAA,EACL,CAAA;AAEL;AAEA,SAAS,EAAM,EACb,WAAA,GACA,GAAG,EAAA,GACsC;AACzC,SACE,gBAAA,EAAC,EAAa,OAAd;AAAA,IACE,WAAW,EACT,yEACA,CACF;AAAA,IACA,GAAI;AAAA,EACL,CAAA;AAEL;AAEA,SAAS,EAAK,EAAE,WAAA,GAAW,GAAG,EAAA,GAAgD;AAC5E,SACE,gBAAA,EAAC,EAAa,MAAd;AAAA,IACE,WAAW,EACT,iJACA,2EACA,CACF;AAAA,IACA,GAAI;AAAA,EACL,CAAA;AAEL;AAEA,SAAS,EAAc,EACrB,WAAA,GACA,GAAG,EAAA,GAC8C;AACjD,SACE,gBAAA,EAAC,EAAa,eAAd;AAAA,IACE,WAAW,EACT,+DACA,CACF;AAAA,IACA,GAAI;AAAA,EACL,CAAA;AAEL;AAEA,SAAS,EAAW,EAClB,WAAA,GACA,GAAG,EAAA,GAC2C;AAC9C,SACE,gBAAA,EAAC,EAAa,YAAd;AAAA,IACE,WAAW,EACT,yDACA,CACF;AAAA,IACA,GAAI;AAAA,EACL,CAAA;AAEL;AAEA,SAAS,EAAM,EACb,WAAA,GACA,GAAG,EAAA,GACsC;AACzC,SACE,gBAAA,EAAC,EAAa,OAAd;AAAA,IACE,WAAW,EACT,iLACA,CACF;AAAA,IACA,GAAI;AAAA,EACL,CAAA;AAEL;AAEA,SAAS,EAAK,EAAE,WAAA,GAAW,GAAG,EAAA,GAAgD;AAC5E,SACE,gBAAA,EAAC,EAAa,MAAd;AAAA,IACE,WAAW,EACT,sIACA,CACF;AAAA,IACA,GAAI;AAAA,EACL,CAAA;AAEL;AAEA,SAAS,EAAW,EAClB,WAAA,GACA,GAAG,EAAA,GAC2C;AAC9C,SACE,gBAAA,EAAC,EAAa,YAAd;AAAA,IACE,WAAW,EACT,0HACA,CACF;AAAA,IACA,GAAI;AAAA,EACL,CAAA;AAEL;AASA,IAAa,IAAW;AAAA,EACtB,MAAA;AAAA,EACA,OAAA;AAAA,EACA,YAAA;AAAA,EACA,OAAA;AAAA,EACA,SAAA;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,eAAA;AAAA,EACA,OAAA;AAAA,EACA,YAAA;AAAA,EACA,OAAA;AAAA,EACA,MAAA;AAAA,EACA,YAAA;AACF"}
@@ -0,0 +1,63 @@
1
+ "use client";
2
+ import { t as e } from "../chunks/cn-D6jQqeRj.js";
3
+ import { n as u, t as n } from "../chunks/menu-BkzDbNuX.js";
4
+ import "react";
5
+ import { jsx as a } from "react/jsx-runtime";
6
+ import { ContextMenu as t } from "@base-ui/react/context-menu";
7
+ import { Separator as p } from "@base-ui/react/separator";
8
+ var m = t.Root, i = t.Trigger, s = t.Portal, c = t.Group, f = t.RadioGroup, l = t.SubmenuRoot;
9
+ function x({ className: r, ...o }) {
10
+ return /* @__PURE__ */ a(t.Positioner, {
11
+ className: e("z-50", r),
12
+ ...o
13
+ });
14
+ }
15
+ function g({ className: r, ...o }) {
16
+ return /* @__PURE__ */ a(t.Popup, {
17
+ className: e(u, r),
18
+ ...o
19
+ });
20
+ }
21
+ function b({ className: r, ...o }) {
22
+ return /* @__PURE__ */ a(t.Item, {
23
+ className: e(n, r),
24
+ ...o
25
+ });
26
+ }
27
+ function P({ className: r, ...o }) {
28
+ return /* @__PURE__ */ a(t.GroupLabel, {
29
+ className: e("text-pho-quaternary px-2.5 py-1.5 text-xs font-medium", r),
30
+ ...o
31
+ });
32
+ }
33
+ function v({ className: r, ...o }) {
34
+ return /* @__PURE__ */ a(p, {
35
+ className: e("-mx-1 my-1 h-px bg-[var(--border-color-pho-secondary)]", r),
36
+ ...o
37
+ });
38
+ }
39
+ function N({ className: r, ...o }) {
40
+ return /* @__PURE__ */ a(t.SubmenuTrigger, {
41
+ className: e(n, "data-[popup-open]:bg-pho-secondary", r),
42
+ ...o
43
+ });
44
+ }
45
+ var T = {
46
+ Root: m,
47
+ Trigger: i,
48
+ Portal: s,
49
+ Positioner: x,
50
+ Popup: g,
51
+ Item: b,
52
+ Group: c,
53
+ GroupLabel: P,
54
+ Separator: v,
55
+ SubmenuRoot: l,
56
+ SubmenuTrigger: N,
57
+ RadioGroup: f
58
+ };
59
+ export {
60
+ T as ContextMenu
61
+ };
62
+
63
+ //# sourceMappingURL=context-menu.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context-menu.js","names":[],"sources":["../../src/components/context-menu/context-menu.tsx"],"sourcesContent":["import { type ComponentProps, type ElementType } from \"react\";\nimport { ContextMenu as BaseContextMenu } from \"@base-ui/react/context-menu\";\nimport { Separator as BaseSeparator } from \"@base-ui/react/separator\";\nimport { cn } from \"../../utils/cn\";\nimport { MENU_POPUP, MENU_ITEM } from \"../menu/menu\";\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 = BaseContextMenu.Root;\nconst Trigger = BaseContextMenu.Trigger;\nconst Portal = BaseContextMenu.Portal;\nconst Group = BaseContextMenu.Group;\nconst RadioGroup = BaseContextMenu.RadioGroup;\nconst SubmenuRoot = BaseContextMenu.SubmenuRoot;\n\nfunction Positioner({\n className,\n ...props\n}: StyledProps<typeof BaseContextMenu.Positioner>) {\n return (\n <BaseContextMenu.Positioner className={cn(\"z-50\", className)} {...props} />\n );\n}\n\nfunction Popup({\n className,\n ...props\n}: StyledProps<typeof BaseContextMenu.Popup>) {\n return (\n <BaseContextMenu.Popup className={cn(MENU_POPUP, className)} {...props} />\n );\n}\n\nfunction Item({\n className,\n ...props\n}: StyledProps<typeof BaseContextMenu.Item>) {\n return (\n <BaseContextMenu.Item className={cn(MENU_ITEM, className)} {...props} />\n );\n}\n\nfunction GroupLabel({\n className,\n ...props\n}: StyledProps<typeof BaseContextMenu.GroupLabel>) {\n return (\n <BaseContextMenu.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\nfunction Separator({ className, ...props }: StyledProps<typeof BaseSeparator>) {\n return (\n <BaseSeparator\n className={cn(\n \"-mx-1 my-1 h-px bg-[var(--border-color-pho-secondary)]\",\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction SubmenuTrigger({\n className,\n ...props\n}: StyledProps<typeof BaseContextMenu.SubmenuTrigger>) {\n return (\n <BaseContextMenu.SubmenuTrigger\n className={cn(MENU_ITEM, \"data-[popup-open]:bg-pho-secondary\", className)}\n {...props}\n />\n );\n}\n\n/**\n * Right-click (context) menu built on Base UI `ContextMenu`. `ContextMenu.Trigger`\n * wraps the area that opens the menu on right-click / long-press; the popup\n * shares its look with `Menu`. Always mirror these actions somewhere visible —\n * a context menu must not be the only way to reach them.\n */\nexport const ContextMenu = {\n Root,\n Trigger,\n Portal,\n Positioner,\n Popup,\n Item,\n Group,\n GroupLabel,\n Separator,\n SubmenuRoot,\n SubmenuTrigger,\n RadioGroup,\n};\n"],"mappings":";;;;;;;AAcA,IAAM,IAAO,EAAgB,MACvB,IAAU,EAAgB,SAC1B,IAAS,EAAgB,QACzB,IAAQ,EAAgB,OACxB,IAAa,EAAgB,YAC7B,IAAc,EAAgB;AAEpC,SAAS,EAAW,EAClB,WAAA,GACA,GAAG,EAAA,GAC8C;AACjD,SACE,gBAAA,EAAC,EAAgB,YAAjB;AAAA,IAA4B,WAAW,EAAG,QAAQ,CAAS;AAAA,IAAG,GAAI;AAAA,EAAQ,CAAA;AAE9E;AAEA,SAAS,EAAM,EACb,WAAA,GACA,GAAG,EAAA,GACyC;AAC5C,SACE,gBAAA,EAAC,EAAgB,OAAjB;AAAA,IAAuB,WAAW,EAAG,GAAY,CAAS;AAAA,IAAG,GAAI;AAAA,EAAQ,CAAA;AAE7E;AAEA,SAAS,EAAK,EACZ,WAAA,GACA,GAAG,EAAA,GACwC;AAC3C,SACE,gBAAA,EAAC,EAAgB,MAAjB;AAAA,IAAsB,WAAW,EAAG,GAAW,CAAS;AAAA,IAAG,GAAI;AAAA,EAAQ,CAAA;AAE3E;AAEA,SAAS,EAAW,EAClB,WAAA,GACA,GAAG,EAAA,GAC8C;AACjD,SACE,gBAAA,EAAC,EAAgB,YAAjB;AAAA,IACE,WAAW,EACT,yDACA,CACF;AAAA,IACA,GAAI;AAAA,EACL,CAAA;AAEL;AAEA,SAAS,EAAU,EAAE,WAAA,GAAW,GAAG,EAAA,GAA4C;AAC7E,SACE,gBAAA,EAAC,GAAD;AAAA,IACE,WAAW,EACT,0DACA,CACF;AAAA,IACA,GAAI;AAAA,EACL,CAAA;AAEL;AAEA,SAAS,EAAe,EACtB,WAAA,GACA,GAAG,EAAA,GACkD;AACrD,SACE,gBAAA,EAAC,EAAgB,gBAAjB;AAAA,IACE,WAAW,EAAG,GAAW,sCAAsC,CAAS;AAAA,IACxE,GAAI;AAAA,EACL,CAAA;AAEL;AAQA,IAAa,IAAc;AAAA,EACzB,MAAA;AAAA,EACA,SAAA;AAAA,EACA,QAAA;AAAA,EACA,YAAA;AAAA,EACA,OAAA;AAAA,EACA,MAAA;AAAA,EACA,OAAA;AAAA,EACA,YAAA;AAAA,EACA,WAAA;AAAA,EACA,aAAA;AAAA,EACA,gBAAA;AAAA,EACA,YAAA;AACF"}
@@ -0,0 +1,5 @@
1
+ "use client";
2
+ import { t } from "../chunks/dialog-BSBF1Wyq.js";
3
+ export {
4
+ t as Dialog
5
+ };
@@ -0,0 +1,59 @@
1
+ "use client";
2
+ import { t as a } from "../chunks/cn-D6jQqeRj.js";
3
+ import "react";
4
+ import { jsx as o } from "react/jsx-runtime";
5
+ import { Drawer as e } from "@base-ui/react/drawer";
6
+ var n = e.Root, i = e.Trigger, s = e.Portal, l = e.Close;
7
+ function p({ className: t, ...r }) {
8
+ return /* @__PURE__ */ o(e.Backdrop, {
9
+ className: a("bg-pho-overlay fixed inset-0 z-50 backdrop-blur-[2px] transition-opacity duration-300 ease-out", "data-[ending-style]:opacity-0 data-[starting-style]:opacity-0 data-[swiping]:duration-0", t),
10
+ ...r
11
+ });
12
+ }
13
+ function c({ className: t, ...r }) {
14
+ return /* @__PURE__ */ o(e.Viewport, {
15
+ className: a("fixed inset-0 z-50 flex items-stretch justify-end", t),
16
+ ...r
17
+ });
18
+ }
19
+ function u({ className: t, ...r }) {
20
+ return /* @__PURE__ */ o(e.Popup, {
21
+ className: a("squircle border-pho-interactive bg-pho-primary shadow-pho-xl h-full w-[22rem] max-w-[calc(100vw-3rem)] overflow-y-auto overscroll-contain border-l p-6 outline-none", "[transform:translateX(var(--drawer-swipe-movement-x,0px))] transition-transform duration-300 ease-out", "data-[ending-style]:translate-x-full data-[starting-style]:translate-x-full data-[swiping]:duration-0", t),
22
+ ...r
23
+ });
24
+ }
25
+ function m({ className: t, ...r }) {
26
+ return /* @__PURE__ */ o(e.Content, {
27
+ className: a("flex h-full flex-col", t),
28
+ ...r
29
+ });
30
+ }
31
+ function d({ className: t, ...r }) {
32
+ return /* @__PURE__ */ o(e.Title, {
33
+ className: a("text-pho-primary text-lg font-semibold", t),
34
+ ...r
35
+ });
36
+ }
37
+ function f({ className: t, ...r }) {
38
+ return /* @__PURE__ */ o(e.Description, {
39
+ className: a("text-pho-tertiary mt-1 text-sm", t),
40
+ ...r
41
+ });
42
+ }
43
+ var v = {
44
+ Root: n,
45
+ Trigger: i,
46
+ Portal: s,
47
+ Backdrop: p,
48
+ Viewport: c,
49
+ Popup: u,
50
+ Content: m,
51
+ Title: d,
52
+ Description: f,
53
+ Close: l
54
+ };
55
+ export {
56
+ v as Drawer
57
+ };
58
+
59
+ //# sourceMappingURL=drawer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"drawer.js","names":[],"sources":["../../src/components/drawer/drawer.tsx"],"sourcesContent":["import { type ComponentProps, type ElementType } from \"react\";\nimport { Drawer as BaseDrawer } from \"@base-ui/react/drawer\";\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 = BaseDrawer.Root;\nconst Trigger = BaseDrawer.Trigger;\nconst Portal = BaseDrawer.Portal;\nconst Close = BaseDrawer.Close;\n\nfunction Backdrop({\n className,\n ...props\n}: StyledProps<typeof BaseDrawer.Backdrop>) {\n return (\n <BaseDrawer.Backdrop\n className={cn(\n \"bg-pho-overlay fixed inset-0 z-50 backdrop-blur-[2px] transition-opacity duration-300 ease-out\",\n \"data-[ending-style]:opacity-0 data-[starting-style]:opacity-0 data-[swiping]:duration-0\",\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction Viewport({\n className,\n ...props\n}: StyledProps<typeof BaseDrawer.Viewport>) {\n return (\n <BaseDrawer.Viewport\n className={cn(\n \"fixed inset-0 z-50 flex items-stretch justify-end\",\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction Popup({ className, ...props }: StyledProps<typeof BaseDrawer.Popup>) {\n return (\n <BaseDrawer.Popup\n className={cn(\n \"squircle border-pho-interactive bg-pho-primary shadow-pho-xl h-full w-[22rem] max-w-[calc(100vw-3rem)] overflow-y-auto overscroll-contain border-l p-6 outline-none\",\n \"[transform:translateX(var(--drawer-swipe-movement-x,0px))] transition-transform duration-300 ease-out\",\n \"data-[ending-style]:translate-x-full data-[starting-style]:translate-x-full data-[swiping]:duration-0\",\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction Content({\n className,\n ...props\n}: StyledProps<typeof BaseDrawer.Content>) {\n return (\n <BaseDrawer.Content\n className={cn(\"flex h-full flex-col\", className)}\n {...props}\n />\n );\n}\n\nfunction Title({ className, ...props }: StyledProps<typeof BaseDrawer.Title>) {\n return (\n <BaseDrawer.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 BaseDrawer.Description>) {\n return (\n <BaseDrawer.Description\n className={cn(\"text-pho-tertiary mt-1 text-sm\", className)}\n {...props}\n />\n );\n}\n\n/**\n * Drawer built on Base UI `Drawer` — a panel that slides in from the edge\n * (here, the right) with swipe-to-dismiss. Use it for secondary tasks and\n * navigation that should keep page context; for a forced decision use\n * `AlertDialog`, and for a centered modal use `Dialog`. Compose `Drawer.Portal`\n * → `Backdrop` → `Viewport` → `Popup` → `Content`.\n */\nexport const Drawer = {\n Root,\n Trigger,\n Portal,\n Backdrop,\n Viewport,\n Popup,\n Content,\n Title,\n Description,\n Close,\n};\n"],"mappings":";;;;;AAYA,IAAM,IAAO,EAAW,MAClB,IAAU,EAAW,SACrB,IAAS,EAAW,QACpB,IAAQ,EAAW;AAEzB,SAAS,EAAS,EAChB,WAAA,GACA,GAAG,EAAA,GACuC;AAC1C,SACE,gBAAA,EAAC,EAAW,UAAZ;AAAA,IACE,WAAW,EACT,kGACA,2FACA,CACF;AAAA,IACA,GAAI;AAAA,EACL,CAAA;AAEL;AAEA,SAAS,EAAS,EAChB,WAAA,GACA,GAAG,EAAA,GACuC;AAC1C,SACE,gBAAA,EAAC,EAAW,UAAZ;AAAA,IACE,WAAW,EACT,qDACA,CACF;AAAA,IACA,GAAI;AAAA,EACL,CAAA;AAEL;AAEA,SAAS,EAAM,EAAE,WAAA,GAAW,GAAG,EAAA,GAA+C;AAC5E,SACE,gBAAA,EAAC,EAAW,OAAZ;AAAA,IACE,WAAW,EACT,uKACA,yGACA,yGACA,CACF;AAAA,IACA,GAAI;AAAA,EACL,CAAA;AAEL;AAEA,SAAS,EAAQ,EACf,WAAA,GACA,GAAG,EAAA,GACsC;AACzC,SACE,gBAAA,EAAC,EAAW,SAAZ;AAAA,IACE,WAAW,EAAG,wBAAwB,CAAS;AAAA,IAC/C,GAAI;AAAA,EACL,CAAA;AAEL;AAEA,SAAS,EAAM,EAAE,WAAA,GAAW,GAAG,EAAA,GAA+C;AAC5E,SACE,gBAAA,EAAC,EAAW,OAAZ;AAAA,IACE,WAAW,EAAG,0CAA0C,CAAS;AAAA,IACjE,GAAI;AAAA,EACL,CAAA;AAEL;AAEA,SAAS,EAAY,EACnB,WAAA,GACA,GAAG,EAAA,GAC0C;AAC7C,SACE,gBAAA,EAAC,EAAW,aAAZ;AAAA,IACE,WAAW,EAAG,kCAAkC,CAAS;AAAA,IACzD,GAAI;AAAA,EACL,CAAA;AAEL;AASA,IAAa,IAAS;AAAA,EACpB,MAAA;AAAA,EACA,SAAA;AAAA,EACA,QAAA;AAAA,EACA,UAAA;AAAA,EACA,UAAA;AAAA,EACA,OAAA;AAAA,EACA,SAAA;AAAA,EACA,OAAA;AAAA,EACA,aAAA;AAAA,EACA,OAAA;AACF"}
@@ -0,0 +1,49 @@
1
+ "use client";
2
+ import { t } from "../chunks/cn-D6jQqeRj.js";
3
+ import "react";
4
+ import { jsx as i } from "react/jsx-runtime";
5
+ import { Field as e } from "@base-ui/react/field";
6
+ function a({ className: r, ...o }) {
7
+ return /* @__PURE__ */ i(e.Root, {
8
+ className: t("group/field flex flex-col gap-1.5", r),
9
+ ...o
10
+ });
11
+ }
12
+ function n({ className: r, ...o }) {
13
+ return /* @__PURE__ */ i(e.Label, {
14
+ className: t("text-pho-secondary cursor-default text-sm font-medium", r),
15
+ ...o
16
+ });
17
+ }
18
+ function l({ className: r, ...o }) {
19
+ return /* @__PURE__ */ i(e.Control, {
20
+ className: t("bg-pho-primary shadow-pho-xs ring-pho-primary text-pho-primary placeholder:text-pho-placeholder text-md w-full rounded-lg px-3 py-2 ring-1 transition-shadow duration-100 ease-linear outline-none ring-inset", "focus-visible:ring-pho-brand focus-visible:ring-2", "data-[invalid]:ring-pho-error-subtle data-[invalid]:focus-visible:ring-pho-error", "disabled:cursor-not-allowed disabled:opacity-50", r),
21
+ ...o
22
+ });
23
+ }
24
+ function s({ className: r, ...o }) {
25
+ return /* @__PURE__ */ i(e.Description, {
26
+ className: t("text-pho-tertiary text-sm", r),
27
+ ...o
28
+ });
29
+ }
30
+ function p({ className: r, ...o }) {
31
+ return /* @__PURE__ */ i(e.Error, {
32
+ className: t("text-pho-error text-sm", r),
33
+ ...o
34
+ });
35
+ }
36
+ var f = {
37
+ Root: a,
38
+ Label: n,
39
+ Control: l,
40
+ Description: s,
41
+ Error: p,
42
+ Item: e.Item,
43
+ Validity: e.Validity
44
+ };
45
+ export {
46
+ f as Field
47
+ };
48
+
49
+ //# sourceMappingURL=field.js.map
@@ -0,0 +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-sm 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 \"bg-pho-primary shadow-pho-xs ring-pho-primary text-pho-primary placeholder:text-pho-placeholder text-md w-full rounded-lg 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 \"data-[invalid]:ring-pho-error-subtle data-[invalid]:focus-visible:ring-pho-error\",\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-tertiary text-sm\", 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-sm\", 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,yDACA,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,EACT,iNACA,qDACA,oFACA,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,6BAA6B,CAAS;AAAA,IACpD,GAAI;AAAA,EACL,CAAA;AAEL;AAEA,SAAS,EAAM,EAAE,WAAA,GAAW,GAAG,EAAA,GAA8C;AAC3E,SACE,gBAAA,EAAC,EAAU,OAAX;AAAA,IACE,WAAW,EAAG,0BAA0B,CAAS;AAAA,IACjD,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"}
@@ -0,0 +1,26 @@
1
+ "use client";
2
+ import { t as o } from "../chunks/cn-D6jQqeRj.js";
3
+ import "react";
4
+ import { jsx as r } from "react/jsx-runtime";
5
+ import { Fieldset as s } from "@base-ui/react/fieldset";
6
+ function i({ className: e, ...t }) {
7
+ return /* @__PURE__ */ r(s.Root, {
8
+ className: o("flex flex-col gap-4", e),
9
+ ...t
10
+ });
11
+ }
12
+ function m({ className: e, ...t }) {
13
+ return /* @__PURE__ */ r(s.Legend, {
14
+ className: o("text-pho-primary text-sm font-semibold", e),
15
+ ...t
16
+ });
17
+ }
18
+ var p = {
19
+ Root: i,
20
+ Legend: m
21
+ };
22
+ export {
23
+ p as Fieldset
24
+ };
25
+
26
+ //# sourceMappingURL=fieldset.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fieldset.js","names":[],"sources":["../../src/components/fieldset/fieldset.tsx"],"sourcesContent":["import { type ComponentProps, type ElementType } from \"react\";\nimport { Fieldset as BaseFieldset } from \"@base-ui/react/fieldset\";\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 BaseFieldset.Root>) {\n return (\n <BaseFieldset.Root\n className={cn(\"flex flex-col gap-4\", className)}\n {...props}\n />\n );\n}\n\nfunction Legend({\n className,\n ...props\n}: StyledProps<typeof BaseFieldset.Legend>) {\n return (\n <BaseFieldset.Legend\n className={cn(\"text-pho-primary text-sm font-semibold\", className)}\n {...props}\n />\n );\n}\n\n/**\n * Groups related fields under a shared legend, built on Base UI `Fieldset`.\n * Use it to title a cluster of inputs (e.g. \"Billing address\") so the grouping\n * is announced to assistive tech.\n */\nexport const Fieldset = { Root, Legend };\n"],"mappings":";;;;;AAYA,SAAS,EAAK,EAAE,WAAA,GAAW,GAAG,EAAA,GAAgD;AAC5E,SACE,gBAAA,EAAC,EAAa,MAAd;AAAA,IACE,WAAW,EAAG,uBAAuB,CAAS;AAAA,IAC9C,GAAI;AAAA,EACL,CAAA;AAEL;AAEA,SAAS,EAAO,EACd,WAAA,GACA,GAAG,EAAA,GACuC;AAC1C,SACE,gBAAA,EAAC,EAAa,QAAd;AAAA,IACE,WAAW,EAAG,0CAA0C,CAAS;AAAA,IACjE,GAAI;AAAA,EACL,CAAA;AAEL;AAOA,IAAa,IAAW;AAAA,EAAE,MAAA;AAAA,EAAM,QAAA;AAAO"}
@@ -0,0 +1,17 @@
1
+ "use client";
2
+ import { t as m } from "../chunks/cn-D6jQqeRj.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";
13
+ export {
14
+ a as Form
15
+ };
16
+
17
+ //# sourceMappingURL=form.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"form.js","names":[],"sources":["../../src/components/form/form.tsx"],"sourcesContent":["import { type ComponentProps } from \"react\";\nimport { Form as BaseForm } from \"@base-ui/react/form\";\nimport { cn } from \"../../utils/cn\";\n\nexport interface FormProps extends Omit<\n ComponentProps<typeof BaseForm>,\n \"className\"\n> {\n className?: string;\n}\n\n/**\n * Form wrapper built on Base UI `Form`. Coordinates the contained `Field`s —\n * pass server-side `errors` and they surface on the matching fields, and\n * `onClearErrors` clears them as the user edits.\n */\nexport function Form({ className, ...props }: FormProps) {\n return (\n <BaseForm className={cn(\"flex flex-col gap-5\", className)} {...props} />\n );\n}\n\nForm.displayName = \"Form\";\n"],"mappings":";;;;;AAgBA,SAAgB,EAAK,EAAE,WAAA,GAAW,GAAG,EAAA,GAAoB;AACvD,SACE,gBAAA,EAAC,GAAD;AAAA,IAAU,WAAW,EAAG,uBAAuB,CAAS;AAAA,IAAG,GAAI;AAAA,EAAQ,CAAA;AAE3E;AAEA,EAAK,cAAc"}
@@ -0,0 +1,5 @@
1
+ "use client";
2
+ import { t as e } from "../chunks/input-aZqjjV_m.js";
3
+ export {
4
+ e as Input
5
+ };
@@ -0,0 +1,18 @@
1
+ "use client";
2
+ import { t as i } from "../chunks/cn-D6jQqeRj.js";
3
+ import "react";
4
+ import { jsx as m } from "react/jsx-runtime";
5
+ var o = "inline-flex h-3.5 min-w-3.5 items-center justify-center rounded-[3px] px-1 text-2xs font-medium text-pho-quaternary ring-1 ring-pho-primary ring-inset select-none";
6
+ function s({ keys: e, className: n, children: r, ...t }) {
7
+ return /* @__PURE__ */ m("kbd", {
8
+ className: i(o, n),
9
+ ...t,
10
+ children: r ?? e
11
+ });
12
+ }
13
+ s.displayName = "Kbd";
14
+ export {
15
+ s as Kbd
16
+ };
17
+
18
+ //# sourceMappingURL=kbd.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kbd.js","names":[],"sources":["../../src/components/kbd/kbd.tsx"],"sourcesContent":["import { type ComponentProps } from \"react\";\nimport { cn } from \"../../utils/cn\";\n\n/** A single keycap surface — a tiny hairline-ringed pill in the quaternary ink. */\nconst KBD_CLASS =\n \"inline-flex h-3.5 min-w-3.5 items-center justify-center rounded-[3px] px-1 text-2xs font-medium text-pho-quaternary ring-1 ring-pho-primary ring-inset select-none\";\n\ninterface KbdBaseProps {\n /** Convenience string for the key(s) to show, e.g. \"⌘K\". Ignored when `children` are provided. */\n keys?: string;\n}\n\nexport interface KbdProps\n extends KbdBaseProps, Omit<ComponentProps<\"kbd\">, keyof KbdBaseProps> {}\n\n/**\n * Kbd — a keyboard keycap for documenting a shortcut (`⌘K`, `Esc`, `↵`). Supply\n * the key via `children` or the `keys` string; for a chord, place several in a\n * row (`Press ⌘ K`). It's purely presentational and carries no interaction — to\n * actually trigger a shortcut, wire a key handler on the target control.\n */\nexport function Kbd({ keys, className, children, ...props }: KbdProps) {\n return (\n <kbd className={cn(KBD_CLASS, className)} {...props}>\n {children ?? keys}\n </kbd>\n );\n}\n\nKbd.displayName = \"Kbd\";\n"],"mappings":";;;;AAIA,IAAM,IACJ;AAgBF,SAAgB,EAAI,EAAE,MAAA,GAAM,WAAA,GAAW,UAAA,GAAU,GAAG,EAAA,GAAmB;AACrE,SACE,gBAAA,EAAC,OAAD;AAAA,IAAK,WAAW,EAAG,GAAW,CAAS;AAAA,IAAG,GAAI;AAAA,cAC3C,KAAY;AAAA,EACV,CAAA;AAET;AAEA,EAAI,cAAc"}
@@ -0,0 +1,7 @@
1
+ "use client";
2
+ import { n as r, r as s, t } from "../chunks/menu-BkzDbNuX.js";
3
+ export {
4
+ t as MENU_ITEM,
5
+ r as MENU_POPUP,
6
+ s as Menu
7
+ };
@@ -0,0 +1,17 @@
1
+ "use client";
2
+ import { t as o } from "../chunks/cn-D6jQqeRj.js";
3
+ import "react";
4
+ import { jsx as a } from "react/jsx-runtime";
5
+ import { Menubar as n } from "@base-ui/react/menubar";
6
+ function i({ className: r, ...e }) {
7
+ return /* @__PURE__ */ a(n, {
8
+ className: o("squircle border-pho-secondary bg-pho-primary shadow-pho-xs inline-flex items-center gap-1 rounded-lg border p-1", r),
9
+ ...e
10
+ });
11
+ }
12
+ i.displayName = "Menubar";
13
+ export {
14
+ i as Menubar
15
+ };
16
+
17
+ //# sourceMappingURL=menubar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"menubar.js","names":[],"sources":["../../src/components/menubar/menubar.tsx"],"sourcesContent":["import { type ComponentProps } from \"react\";\nimport { Menubar as BaseMenubar } from \"@base-ui/react/menubar\";\nimport { cn } from \"../../utils/cn\";\n\nexport interface MenubarProps extends Omit<\n ComponentProps<typeof BaseMenubar>,\n \"className\"\n> {\n className?: string;\n}\n\n/**\n * Horizontal bar of top-level menus, built on Base UI `Menubar` — the classic\n * desktop-app menu strip (File / Edit / View). Place `Menu` components inside;\n * the menubar coordinates roving focus and lets open menus switch on hover.\n */\nexport function Menubar({ className, ...props }: MenubarProps) {\n return (\n <BaseMenubar\n className={cn(\n \"squircle border-pho-secondary bg-pho-primary shadow-pho-xs inline-flex items-center gap-1 rounded-lg border p-1\",\n className,\n )}\n {...props}\n />\n );\n}\n\nMenubar.displayName = \"Menubar\";\n"],"mappings":";;;;;AAgBA,SAAgB,EAAQ,EAAE,WAAA,GAAW,GAAG,EAAA,GAAuB;AAC7D,SACE,gBAAA,EAAC,GAAD;AAAA,IACE,WAAW,EACT,mHACA,CACF;AAAA,IACA,GAAI;AAAA,EACL,CAAA;AAEL;AAEA,EAAQ,cAAc"}
@@ -0,0 +1,47 @@
1
+ "use client";
2
+ import { t as r } from "../chunks/cn-D6jQqeRj.js";
3
+ import "react";
4
+ import { jsx as o } from "react/jsx-runtime";
5
+ import { Meter as a } from "@base-ui/react/meter";
6
+ function l({ className: t, ...e }) {
7
+ return /* @__PURE__ */ o(a.Root, {
8
+ className: r("flex w-full flex-col gap-2", t),
9
+ ...e
10
+ });
11
+ }
12
+ function n({ className: t, ...e }) {
13
+ return /* @__PURE__ */ o(a.Label, {
14
+ className: r("text-pho-secondary text-sm font-medium", t),
15
+ ...e
16
+ });
17
+ }
18
+ function u({ className: t, ...e }) {
19
+ return /* @__PURE__ */ o(a.Value, {
20
+ className: r("text-pho-tertiary text-sm tabular-nums", t),
21
+ ...e
22
+ });
23
+ }
24
+ function i({ className: t, ...e }) {
25
+ return /* @__PURE__ */ o(a.Track, {
26
+ className: r("bg-pho-tertiary relative h-2 w-full overflow-hidden rounded-full", t),
27
+ ...e
28
+ });
29
+ }
30
+ function s({ className: t, ...e }) {
31
+ return /* @__PURE__ */ o(a.Indicator, {
32
+ className: r("bg-pho-brand-solid h-full rounded-full transition-all duration-200 ease-out", t),
33
+ ...e
34
+ });
35
+ }
36
+ var p = {
37
+ Root: l,
38
+ Label: n,
39
+ Value: u,
40
+ Track: i,
41
+ Indicator: s
42
+ };
43
+ export {
44
+ p as Meter
45
+ };
46
+
47
+ //# sourceMappingURL=meter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"meter.js","names":[],"sources":["../../src/components/meter/meter.tsx"],"sourcesContent":["import { type ComponentProps, type ElementType } from \"react\";\nimport { Meter as BaseMeter } from \"@base-ui/react/meter\";\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 BaseMeter.Root>) {\n return (\n <BaseMeter.Root\n className={cn(\"flex w-full flex-col gap-2\", className)}\n {...props}\n />\n );\n}\n\nfunction Label({ className, ...props }: StyledProps<typeof BaseMeter.Label>) {\n return (\n <BaseMeter.Label\n className={cn(\"text-pho-secondary text-sm font-medium\", className)}\n {...props}\n />\n );\n}\n\nfunction Value({ className, ...props }: StyledProps<typeof BaseMeter.Value>) {\n return (\n <BaseMeter.Value\n className={cn(\"text-pho-tertiary text-sm tabular-nums\", className)}\n {...props}\n />\n );\n}\n\nfunction Track({ className, ...props }: StyledProps<typeof BaseMeter.Track>) {\n return (\n <BaseMeter.Track\n className={cn(\n \"bg-pho-tertiary relative h-2 w-full overflow-hidden rounded-full\",\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction Indicator({\n className,\n ...props\n}: StyledProps<typeof BaseMeter.Indicator>) {\n return (\n <BaseMeter.Indicator\n className={cn(\n \"bg-pho-brand-solid h-full rounded-full transition-all duration-200 ease-out\",\n className,\n )}\n {...props}\n />\n );\n}\n\n/**\n * Meter built on Base UI `Meter`. Unlike `Progress`, a meter shows a static\n * measurement within a known range (disk usage, score, capacity) rather than\n * task completion. Set `value` on `Meter.Root`.\n */\nexport const Meter = { Root, Label, Value, Track, Indicator };\n"],"mappings":";;;;;AAYA,SAAS,EAAK,EAAE,WAAA,GAAW,GAAG,EAAA,GAA6C;AACzE,SACE,gBAAA,EAAC,EAAU,MAAX;AAAA,IACE,WAAW,EAAG,8BAA8B,CAAS;AAAA,IACrD,GAAI;AAAA,EACL,CAAA;AAEL;AAEA,SAAS,EAAM,EAAE,WAAA,GAAW,GAAG,EAAA,GAA8C;AAC3E,SACE,gBAAA,EAAC,EAAU,OAAX;AAAA,IACE,WAAW,EAAG,0CAA0C,CAAS;AAAA,IACjE,GAAI;AAAA,EACL,CAAA;AAEL;AAEA,SAAS,EAAM,EAAE,WAAA,GAAW,GAAG,EAAA,GAA8C;AAC3E,SACE,gBAAA,EAAC,EAAU,OAAX;AAAA,IACE,WAAW,EAAG,0CAA0C,CAAS;AAAA,IACjE,GAAI;AAAA,EACL,CAAA;AAEL;AAEA,SAAS,EAAM,EAAE,WAAA,GAAW,GAAG,EAAA,GAA8C;AAC3E,SACE,gBAAA,EAAC,EAAU,OAAX;AAAA,IACE,WAAW,EACT,oEACA,CACF;AAAA,IACA,GAAI;AAAA,EACL,CAAA;AAEL;AAEA,SAAS,EAAU,EACjB,WAAA,GACA,GAAG,EAAA,GACuC;AAC1C,SACE,gBAAA,EAAC,EAAU,WAAX;AAAA,IACE,WAAW,EACT,+EACA,CACF;AAAA,IACA,GAAI;AAAA,EACL,CAAA;AAEL;AAOA,IAAa,IAAQ;AAAA,EAAE,MAAA;AAAA,EAAM,OAAA;AAAA,EAAO,OAAA;AAAA,EAAO,OAAA;AAAA,EAAO,WAAA;AAAU"}
@@ -0,0 +1,74 @@
1
+ "use client";
2
+ import { t as n } from "../chunks/cn-D6jQqeRj.js";
3
+ import "react";
4
+ import { jsx as i } from "react/jsx-runtime";
5
+ import { NavigationMenu as o } from "@base-ui/react/navigation-menu";
6
+ function a({ className: t, ...e }) {
7
+ return /* @__PURE__ */ i(o.Root, {
8
+ className: n("relative min-w-max", t),
9
+ ...e
10
+ });
11
+ }
12
+ function s({ className: t, ...e }) {
13
+ return /* @__PURE__ */ i(o.List, {
14
+ className: n("relative flex items-center gap-1", t),
15
+ ...e
16
+ });
17
+ }
18
+ var p = o.Item, u = o.Icon;
19
+ function l({ className: t, ...e }) {
20
+ return /* @__PURE__ */ i(o.Trigger, {
21
+ className: n("outline-pho-brand text-pho-secondary hover:bg-pho-secondary data-[popup-open]:bg-pho-secondary inline-flex cursor-pointer items-center gap-1 rounded-md px-3 py-2 text-sm font-medium transition focus-visible:outline-2 focus-visible:-outline-offset-1", "[&>svg]:size-4 [&>svg]:transition-transform [&>svg]:duration-150 data-[popup-open]:[&>svg]:rotate-180", t),
22
+ ...e
23
+ });
24
+ }
25
+ function c({ className: t, ...e }) {
26
+ return /* @__PURE__ */ i(o.Content, {
27
+ className: n("w-full p-2", t),
28
+ ...e
29
+ });
30
+ }
31
+ function m({ className: t, ...e }) {
32
+ return /* @__PURE__ */ i(o.Link, {
33
+ className: n("outline-pho-brand text-pho-secondary hover:bg-pho-secondary hover:text-pho-primary block rounded-lg px-3 py-2 text-sm transition focus-visible:outline-2 focus-visible:-outline-offset-1", t),
34
+ ...e
35
+ });
36
+ }
37
+ var d = o.Portal;
38
+ function g({ className: t, sideOffset: e = 8, ...r }) {
39
+ return /* @__PURE__ */ i(o.Positioner, {
40
+ sideOffset: e,
41
+ className: n("z-50", t),
42
+ ...r
43
+ });
44
+ }
45
+ function f({ className: t, ...e }) {
46
+ return /* @__PURE__ */ i(o.Popup, {
47
+ className: n("squircle bg-pho-primary text-pho-primary shadow-pho-lg ring-pho-interactive relative h-[var(--popup-height)] w-[var(--popup-width)] origin-[var(--transform-origin)] rounded-xl ring-1 transition-[opacity,transform,width,height] 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),
48
+ ...e
49
+ });
50
+ }
51
+ function v({ className: t, ...e }) {
52
+ return /* @__PURE__ */ i(o.Viewport, {
53
+ className: n("relative h-full w-full overflow-hidden", t),
54
+ ...e
55
+ });
56
+ }
57
+ var N = {
58
+ Root: a,
59
+ List: s,
60
+ Item: p,
61
+ Trigger: l,
62
+ Content: c,
63
+ Link: m,
64
+ Icon: u,
65
+ Portal: d,
66
+ Positioner: g,
67
+ Popup: f,
68
+ Viewport: v
69
+ };
70
+ export {
71
+ N as NavigationMenu
72
+ };
73
+
74
+ //# sourceMappingURL=navigation-menu.js.map