@ciridae/ui 0.2.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 (339) hide show
  1. package/README.md +31 -0
  2. package/dist/components/agentic/agent-card.d.ts +28 -0
  3. package/dist/components/agentic/agent-card.js +27 -0
  4. package/dist/components/agentic/agent-composer.d.ts +44 -0
  5. package/dist/components/agentic/agent-composer.js +104 -0
  6. package/dist/components/agentic/agent-context.d.ts +28 -0
  7. package/dist/components/agentic/agent-context.js +102 -0
  8. package/dist/components/agentic/agent-plan.d.ts +27 -0
  9. package/dist/components/agentic/agent-plan.js +43 -0
  10. package/dist/components/agentic/agent-queue.d.ts +46 -0
  11. package/dist/components/agentic/agent-queue.js +53 -0
  12. package/dist/components/agentic/agent-task.d.ts +16 -0
  13. package/dist/components/agentic/agent-task.js +20 -0
  14. package/dist/components/agentic/approval-request.d.ts +24 -0
  15. package/dist/components/agentic/approval-request.js +57 -0
  16. package/dist/components/agentic/artifact.d.ts +24 -0
  17. package/dist/components/agentic/artifact.js +72 -0
  18. package/dist/components/agentic/attachments.d.ts +124 -0
  19. package/dist/components/agentic/attachments.js +595 -0
  20. package/dist/components/agentic/audio-player.d.ts +16 -0
  21. package/dist/components/agentic/audio-player.js +21 -0
  22. package/dist/components/agentic/canvas.d.ts +10 -0
  23. package/dist/components/agentic/canvas.js +22 -0
  24. package/dist/components/agentic/clipboard.d.ts +2 -0
  25. package/dist/components/agentic/clipboard.js +12 -0
  26. package/dist/components/agentic/code-block.d.ts +43 -0
  27. package/dist/components/agentic/code-block.js +92 -0
  28. package/dist/components/agentic/commit.d.ts +57 -0
  29. package/dist/components/agentic/commit.js +85 -0
  30. package/dist/components/agentic/connection.d.ts +3 -0
  31. package/dist/components/agentic/connection.js +8 -0
  32. package/dist/components/agentic/controls.d.ts +6 -0
  33. package/dist/components/agentic/controls.js +7 -0
  34. package/dist/components/agentic/conversation.d.ts +25 -0
  35. package/dist/components/agentic/conversation.js +56 -0
  36. package/dist/components/agentic/edge.d.ts +8 -0
  37. package/dist/components/agentic/edge.js +65 -0
  38. package/dist/components/agentic/effort-selector.d.ts +43 -0
  39. package/dist/components/agentic/effort-selector.js +47 -0
  40. package/dist/components/agentic/environment-variables.d.ts +32 -0
  41. package/dist/components/agentic/environment-variables.js +66 -0
  42. package/dist/components/agentic/file-tree.d.ts +24 -0
  43. package/dist/components/agentic/file-tree.js +56 -0
  44. package/dist/components/agentic/image.d.ts +9 -0
  45. package/dist/components/agentic/image.js +11 -0
  46. package/dist/components/agentic/inline-citation.d.ts +40 -0
  47. package/dist/components/agentic/inline-citation.js +111 -0
  48. package/dist/components/agentic/jsx-preview.d.ts +19 -0
  49. package/dist/components/agentic/jsx-preview.js +34 -0
  50. package/dist/components/agentic/message-branch.d.ts +20 -0
  51. package/dist/components/agentic/message-branch.js +83 -0
  52. package/dist/components/agentic/message-response.css +265 -0
  53. package/dist/components/agentic/message-response.css.d.ts +2 -0
  54. package/dist/components/agentic/message.d.ts +27 -0
  55. package/dist/components/agentic/message.js +57 -0
  56. package/dist/components/agentic/mic-selector.d.ts +58 -0
  57. package/dist/components/agentic/mic-selector.js +173 -0
  58. package/dist/components/agentic/model-selector.d.ts +39 -0
  59. package/dist/components/agentic/model-selector.js +47 -0
  60. package/dist/components/agentic/node.d.ts +26 -0
  61. package/dist/components/agentic/node.js +29 -0
  62. package/dist/components/agentic/open-in-chat.d.ts +9 -0
  63. package/dist/components/agentic/open-in-chat.js +8 -0
  64. package/dist/components/agentic/package-info.d.ts +30 -0
  65. package/dist/components/agentic/package-info.js +44 -0
  66. package/dist/components/agentic/panel.d.ts +6 -0
  67. package/dist/components/agentic/panel.js +7 -0
  68. package/dist/components/agentic/persona.d.ts +16 -0
  69. package/dist/components/agentic/persona.js +116 -0
  70. package/dist/components/agentic/prompt-input-action-menu.d.ts +16 -0
  71. package/dist/components/agentic/prompt-input-action-menu.js +22 -0
  72. package/dist/components/agentic/prompt-input-command.d.ts +18 -0
  73. package/dist/components/agentic/prompt-input-command.js +25 -0
  74. package/dist/components/agentic/prompt-input-hover-card.d.ts +10 -0
  75. package/dist/components/agentic/prompt-input-hover-card.js +13 -0
  76. package/dist/components/agentic/prompt-input-select.d.ts +14 -0
  77. package/dist/components/agentic/prompt-input-select.js +19 -0
  78. package/dist/components/agentic/prompt-input-tabs.d.ts +17 -0
  79. package/dist/components/agentic/prompt-input-tabs.js +45 -0
  80. package/dist/components/agentic/prompt-input.d.ts +79 -0
  81. package/dist/components/agentic/prompt-input.js +206 -0
  82. package/dist/components/agentic/reasoning.d.ts +21 -0
  83. package/dist/components/agentic/reasoning.js +106 -0
  84. package/dist/components/agentic/run-checkpoint.d.ts +13 -0
  85. package/dist/components/agentic/run-checkpoint.js +19 -0
  86. package/dist/components/agentic/run-trace.d.ts +30 -0
  87. package/dist/components/agentic/run-trace.js +56 -0
  88. package/dist/components/agentic/sandbox.d.ts +24 -0
  89. package/dist/components/agentic/sandbox.js +33 -0
  90. package/dist/components/agentic/schema-display.d.ts +39 -0
  91. package/dist/components/agentic/schema-display.js +56 -0
  92. package/dist/components/agentic/shimmer.d.ts +11 -0
  93. package/dist/components/agentic/shimmer.js +16 -0
  94. package/dist/components/agentic/snippet.d.ts +18 -0
  95. package/dist/components/agentic/snippet.js +35 -0
  96. package/dist/components/agentic/sources.d.ts +16 -0
  97. package/dist/components/agentic/sources.js +17 -0
  98. package/dist/components/agentic/speech-input.d.ts +24 -0
  99. package/dist/components/agentic/speech-input.js +30 -0
  100. package/dist/components/agentic/stack-trace.d.ts +27 -0
  101. package/dist/components/agentic/stack-trace.js +76 -0
  102. package/dist/components/agentic/suggestion.d.ts +12 -0
  103. package/dist/components/agentic/suggestion.js +15 -0
  104. package/dist/components/agentic/terminal.d.ts +24 -0
  105. package/dist/components/agentic/terminal.js +47 -0
  106. package/dist/components/agentic/test-results.d.ts +51 -0
  107. package/dist/components/agentic/test-results.js +83 -0
  108. package/dist/components/agentic/theme.d.ts +5 -0
  109. package/dist/components/agentic/theme.js +31 -0
  110. package/dist/components/agentic/tool.d.ts +25 -0
  111. package/dist/components/agentic/tool.js +73 -0
  112. package/dist/components/agentic/toolbar.d.ts +6 -0
  113. package/dist/components/agentic/toolbar.js +7 -0
  114. package/dist/components/agentic/transcription.d.ts +20 -0
  115. package/dist/components/agentic/transcription.js +32 -0
  116. package/dist/components/agentic/types.d.ts +172 -0
  117. package/dist/components/agentic/types.js +1 -0
  118. package/dist/components/agentic/use-controllable-state.d.ts +6 -0
  119. package/dist/components/agentic/use-controllable-state.js +13 -0
  120. package/dist/components/agentic/voice-selector.d.ts +69 -0
  121. package/dist/components/agentic/voice-selector.js +122 -0
  122. package/dist/components/agentic/web-preview.d.ts +25 -0
  123. package/dist/components/agentic/web-preview.js +33 -0
  124. package/dist/components/ui/accordion.d.ts +7 -0
  125. package/dist/components/ui/accordion.js +17 -0
  126. package/dist/components/ui/alert-dialog.d.ts +22 -0
  127. package/dist/components/ui/alert-dialog.js +51 -0
  128. package/dist/components/ui/alert.d.ts +9 -0
  129. package/dist/components/ui/alert.js +24 -0
  130. package/dist/components/ui/aspect-ratio.d.ts +3 -0
  131. package/dist/components/ui/aspect-ratio.js +7 -0
  132. package/dist/components/ui/avatar.d.ts +11 -0
  133. package/dist/components/ui/avatar.js +22 -0
  134. package/dist/components/ui/badge-variants.d.ts +100 -0
  135. package/dist/components/ui/badge-variants.js +140 -0
  136. package/dist/components/ui/badge.d.ts +6 -0
  137. package/dist/components/ui/badge.js +9 -0
  138. package/dist/components/ui/breadcrumb.d.ts +11 -0
  139. package/dist/components/ui/breadcrumb.js +27 -0
  140. package/dist/components/ui/button-group-variants.d.ts +6 -0
  141. package/dist/components/ui/button-group-variants.js +13 -0
  142. package/dist/components/ui/button-group.d.ts +8 -0
  143. package/dist/components/ui/button-group.js +16 -0
  144. package/dist/components/ui/button-variants.d.ts +133 -0
  145. package/dist/components/ui/button-variants.js +170 -0
  146. package/dist/components/ui/button.d.ts +8 -0
  147. package/dist/components/ui/button.js +67 -0
  148. package/dist/components/ui/calendar.d.ts +9 -0
  149. package/dist/components/ui/calendar.js +99 -0
  150. package/dist/components/ui/card.d.ts +14 -0
  151. package/dist/components/ui/card.js +28 -0
  152. package/dist/components/ui/carousel.d.ts +19 -0
  153. package/dist/components/ui/carousel.js +104 -0
  154. package/dist/components/ui/chart-context.d.ts +33 -0
  155. package/dist/components/ui/chart-context.js +36 -0
  156. package/dist/components/ui/chart-panel.d.ts +11 -0
  157. package/dist/components/ui/chart-panel.js +6 -0
  158. package/dist/components/ui/chart-tooltip.d.ts +13 -0
  159. package/dist/components/ui/chart-tooltip.js +84 -0
  160. package/dist/components/ui/chart.d.ts +23 -0
  161. package/dist/components/ui/chart.js +52 -0
  162. package/dist/components/ui/checkbox.d.ts +4 -0
  163. package/dist/components/ui/checkbox.js +9 -0
  164. package/dist/components/ui/collapsible.d.ts +5 -0
  165. package/dist/components/ui/collapsible.js +12 -0
  166. package/dist/components/ui/combobox-anchor.d.ts +3 -0
  167. package/dist/components/ui/combobox-anchor.js +5 -0
  168. package/dist/components/ui/combobox.d.ts +23 -0
  169. package/dist/components/ui/combobox.js +54 -0
  170. package/dist/components/ui/command.d.ts +19 -0
  171. package/dist/components/ui/command.js +38 -0
  172. package/dist/components/ui/context-menu.d.ts +30 -0
  173. package/dist/components/ui/context-menu.js +63 -0
  174. package/dist/components/ui/data-table.d.ts +17 -0
  175. package/dist/components/ui/data-table.js +26 -0
  176. package/dist/components/ui/dialog.d.ts +22 -0
  177. package/dist/components/ui/dialog.js +48 -0
  178. package/dist/components/ui/direction-context.d.ts +3 -0
  179. package/dist/components/ui/direction-context.js +3 -0
  180. package/dist/components/ui/direction.d.ts +6 -0
  181. package/dist/components/ui/direction.js +7 -0
  182. package/dist/components/ui/drawer.d.ts +18 -0
  183. package/dist/components/ui/drawer.js +47 -0
  184. package/dist/components/ui/dropdown-menu.d.ts +30 -0
  185. package/dist/components/ui/dropdown-menu.js +63 -0
  186. package/dist/components/ui/empty.d.ts +11 -0
  187. package/dist/components/ui/empty.js +33 -0
  188. package/dist/components/ui/expandable-data-table.d.ts +24 -0
  189. package/dist/components/ui/expandable-data-table.js +62 -0
  190. package/dist/components/ui/field.d.ts +26 -0
  191. package/dist/components/ui/field.js +74 -0
  192. package/dist/components/ui/file-upload-field-parts.d.ts +21 -0
  193. package/dist/components/ui/file-upload-field-parts.js +55 -0
  194. package/dist/components/ui/file-upload-field.d.ts +15 -0
  195. package/dist/components/ui/file-upload-field.js +85 -0
  196. package/dist/components/ui/form-context.d.ts +23 -0
  197. package/dist/components/ui/form-context.js +35 -0
  198. package/dist/components/ui/form.d.ts +12 -0
  199. package/dist/components/ui/form.js +38 -0
  200. package/dist/components/ui/hover-card.d.ts +10 -0
  201. package/dist/components/ui/hover-card.js +22 -0
  202. package/dist/components/ui/input-group.d.ts +16 -0
  203. package/dist/components/ui/input-group.js +62 -0
  204. package/dist/components/ui/input-otp.d.ts +11 -0
  205. package/dist/components/ui/input-otp.js +21 -0
  206. package/dist/components/ui/input.d.ts +3 -0
  207. package/dist/components/ui/input.js +6 -0
  208. package/dist/components/ui/item.d.ts +23 -0
  209. package/dist/components/ui/item.js +66 -0
  210. package/dist/components/ui/kbd.d.ts +3 -0
  211. package/dist/components/ui/kbd.js +9 -0
  212. package/dist/components/ui/label.d.ts +4 -0
  213. package/dist/components/ui/label.js +7 -0
  214. package/dist/components/ui/loading-state.d.ts +27 -0
  215. package/dist/components/ui/loading-state.js +44 -0
  216. package/dist/components/ui/menubar.d.ts +30 -0
  217. package/dist/components/ui/menubar.js +63 -0
  218. package/dist/components/ui/metrics-strip.d.ts +7 -0
  219. package/dist/components/ui/metrics-strip.js +18 -0
  220. package/dist/components/ui/native-select.d.ts +7 -0
  221. package/dist/components/ui/native-select.js +13 -0
  222. package/dist/components/ui/navigation-menu-variants.d.ts +2 -0
  223. package/dist/components/ui/navigation-menu-variants.js +3 -0
  224. package/dist/components/ui/navigation-menu.d.ts +13 -0
  225. package/dist/components/ui/navigation-menu.js +30 -0
  226. package/dist/components/ui/page-header.d.ts +19 -0
  227. package/dist/components/ui/page-header.js +36 -0
  228. package/dist/components/ui/pagination.d.ts +13 -0
  229. package/dist/components/ui/pagination.js +29 -0
  230. package/dist/components/ui/popover.d.ts +14 -0
  231. package/dist/components/ui/popover.js +34 -0
  232. package/dist/components/ui/progress.d.ts +4 -0
  233. package/dist/components/ui/progress.js +8 -0
  234. package/dist/components/ui/property-list.d.ts +6 -0
  235. package/dist/components/ui/property-list.js +15 -0
  236. package/dist/components/ui/radio-group.d.ts +5 -0
  237. package/dist/components/ui/radio-group.js +11 -0
  238. package/dist/components/ui/registry-docs-api.d.ts +11 -0
  239. package/dist/components/ui/registry-docs-api.js +9 -0
  240. package/dist/components/ui/registry-docs-code.d.ts +19 -0
  241. package/dist/components/ui/registry-docs-code.js +78 -0
  242. package/dist/components/ui/registry-docs-showcase.d.ts +11 -0
  243. package/dist/components/ui/registry-docs-showcase.js +27 -0
  244. package/dist/components/ui/registry-docs.d.ts +27 -0
  245. package/dist/components/ui/registry-docs.js +32 -0
  246. package/dist/components/ui/resizable.d.ts +7 -0
  247. package/dist/components/ui/resizable.js +15 -0
  248. package/dist/components/ui/scroll-area.d.ts +7 -0
  249. package/dist/components/ui/scroll-area.js +10 -0
  250. package/dist/components/ui/select.d.ts +15 -0
  251. package/dist/components/ui/select.js +38 -0
  252. package/dist/components/ui/separator.d.ts +4 -0
  253. package/dist/components/ui/separator.js +7 -0
  254. package/dist/components/ui/sheet.d.ts +21 -0
  255. package/dist/components/ui/sheet.js +62 -0
  256. package/dist/components/ui/sidebar/context.d.ts +21 -0
  257. package/dist/components/ui/sidebar/context.js +15 -0
  258. package/dist/components/ui/sidebar/group.d.ts +10 -0
  259. package/dist/components/ui/sidebar/group.js +18 -0
  260. package/dist/components/ui/sidebar/layout.d.ts +17 -0
  261. package/dist/components/ui/sidebar/layout.js +73 -0
  262. package/dist/components/ui/sidebar/menu.d.ts +30 -0
  263. package/dist/components/ui/sidebar/menu.js +64 -0
  264. package/dist/components/ui/sidebar/provider.d.ts +7 -0
  265. package/dist/components/ui/sidebar/provider.js +53 -0
  266. package/dist/components/ui/sidebar/rail.d.ts +3 -0
  267. package/dist/components/ui/sidebar/rail.js +12 -0
  268. package/dist/components/ui/sidebar/trigger.d.ts +4 -0
  269. package/dist/components/ui/sidebar/trigger.js +16 -0
  270. package/dist/components/ui/sidebar-account-menu-theme.d.ts +7 -0
  271. package/dist/components/ui/sidebar-account-menu-theme.js +32 -0
  272. package/dist/components/ui/sidebar-account-menu.d.ts +14 -0
  273. package/dist/components/ui/sidebar-account-menu.js +51 -0
  274. package/dist/components/ui/sidebar.d.ts +7 -0
  275. package/dist/components/ui/sidebar.js +7 -0
  276. package/dist/components/ui/skeleton.d.ts +2 -0
  277. package/dist/components/ui/skeleton.js +15 -0
  278. package/dist/components/ui/slider.d.ts +4 -0
  279. package/dist/components/ui/slider.js +9 -0
  280. package/dist/components/ui/sonner.d.ts +3 -0
  281. package/dist/components/ui/sonner.js +33 -0
  282. package/dist/components/ui/spinner.d.ts +2 -0
  283. package/dist/components/ui/spinner.js +16 -0
  284. package/dist/components/ui/switch.d.ts +6 -0
  285. package/dist/components/ui/switch.js +7 -0
  286. package/dist/components/ui/table.d.ts +10 -0
  287. package/dist/components/ui/table.js +28 -0
  288. package/dist/components/ui/tabs-variants.d.ts +6 -0
  289. package/dist/components/ui/tabs-variants.js +13 -0
  290. package/dist/components/ui/tabs.d.ts +8 -0
  291. package/dist/components/ui/tabs.js +17 -0
  292. package/dist/components/ui/textarea.d.ts +3 -0
  293. package/dist/components/ui/textarea.js +6 -0
  294. package/dist/components/ui/toggle-group.d.ts +9 -0
  295. package/dist/components/ui/toggle-group.js +24 -0
  296. package/dist/components/ui/toggle-variants.d.ts +7 -0
  297. package/dist/components/ui/toggle-variants.js +19 -0
  298. package/dist/components/ui/toggle.d.ts +5 -0
  299. package/dist/components/ui/toggle.js +9 -0
  300. package/dist/components/ui/tooltip.d.ts +11 -0
  301. package/dist/components/ui/tooltip.js +25 -0
  302. package/dist/components/ui/workflow-timeline.d.ts +20 -0
  303. package/dist/components/ui/workflow-timeline.js +92 -0
  304. package/dist/hooks/use-mobile.d.ts +1 -0
  305. package/dist/hooks/use-mobile.js +15 -0
  306. package/dist/lib/utils.d.ts +5 -0
  307. package/dist/lib/utils.js +8 -0
  308. package/dist/styled-system/css/conditions.mjs +36 -0
  309. package/dist/styled-system/css/css.mjs +45 -0
  310. package/dist/styled-system/css/cva.mjs +87 -0
  311. package/dist/styled-system/css/cx.mjs +15 -0
  312. package/dist/styled-system/css/index.mjs +4 -0
  313. package/dist/styled-system/css/sva.mjs +46 -0
  314. package/dist/styled-system/helpers.mjs +316 -0
  315. package/dist/styled-system/patterns/aspect-ratio.mjs +38 -0
  316. package/dist/styled-system/patterns/bleed.mjs +24 -0
  317. package/dist/styled-system/patterns/box.mjs +15 -0
  318. package/dist/styled-system/patterns/center.mjs +21 -0
  319. package/dist/styled-system/patterns/circle.mjs +25 -0
  320. package/dist/styled-system/patterns/container.mjs +21 -0
  321. package/dist/styled-system/patterns/cq.mjs +21 -0
  322. package/dist/styled-system/patterns/divider.mjs +25 -0
  323. package/dist/styled-system/patterns/flex.mjs +26 -0
  324. package/dist/styled-system/patterns/float.mjs +52 -0
  325. package/dist/styled-system/patterns/grid-item.mjs +25 -0
  326. package/dist/styled-system/patterns/grid.mjs +27 -0
  327. package/dist/styled-system/patterns/hstack.mjs +24 -0
  328. package/dist/styled-system/patterns/index.mjs +20 -0
  329. package/dist/styled-system/patterns/link-overlay.mjs +24 -0
  330. package/dist/styled-system/patterns/spacer.mjs +25 -0
  331. package/dist/styled-system/patterns/square.mjs +24 -0
  332. package/dist/styled-system/patterns/stack.mjs +24 -0
  333. package/dist/styled-system/patterns/visually-hidden.mjs +18 -0
  334. package/dist/styled-system/patterns/vstack.mjs +24 -0
  335. package/dist/styled-system/patterns/wrap.mjs +25 -0
  336. package/dist/styled-system/styles.css +1089 -0
  337. package/dist/styled-system/styles.css.d.ts +2 -0
  338. package/dist/styled-system/tokens/index.mjs +2304 -0
  339. package/package.json +688 -0
@@ -0,0 +1,8 @@
1
+ import * as React from "react";
2
+ import { Tabs as TabsPrimitive } from "radix-ui";
3
+ import { type TabsListVariantProps } from "@ciridae/ui/tabs-variants";
4
+ declare function Tabs({ className, orientation, ...props }: React.ComponentProps<typeof TabsPrimitive.Root>): import("react/jsx-runtime").JSX.Element;
5
+ declare function TabsList({ className, variant, ...props }: React.ComponentProps<typeof TabsPrimitive.List> & TabsListVariantProps): import("react/jsx-runtime").JSX.Element;
6
+ declare function TabsTrigger({ className, ...props }: React.ComponentProps<typeof TabsPrimitive.Trigger>): import("react/jsx-runtime").JSX.Element;
7
+ declare function TabsContent({ className, ...props }: React.ComponentProps<typeof TabsPrimitive.Content>): import("react/jsx-runtime").JSX.Element;
8
+ export { Tabs, TabsList, TabsTrigger, TabsContent };
@@ -0,0 +1,17 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { Tabs as TabsPrimitive } from "radix-ui";
3
+ import { cn } from "@ciridae/ui/utils";
4
+ import { tabsListVariants } from "@ciridae/ui/tabs-variants";
5
+ function Tabs({ className, orientation = "horizontal", ...props }) {
6
+ return (_jsx(TabsPrimitive.Root, { "data-slot": "tabs", "data-orientation": orientation, orientation: orientation, className: cn("group/tabs flex gap-2 data-[orientation=horizontal]:flex-col", className), ...props }));
7
+ }
8
+ function TabsList({ className, variant = "default", ...props }) {
9
+ return (_jsx(TabsPrimitive.List, { "data-slot": "tabs-list", "data-variant": variant, className: cn(tabsListVariants({ variant }), className), ...props }));
10
+ }
11
+ function TabsTrigger({ className, ...props }) {
12
+ return (_jsx(TabsPrimitive.Trigger, { "data-slot": "tabs-trigger", className: cn("relative inline-flex h-[calc(100%-1px)] flex-1 items-center justify-center gap-(--control-gap) rounded-md border border-transparent px-(--menu-item-padding-x) py-1 text-sm font-medium whitespace-nowrap text-foreground/60 transition-all group-data-[orientation=vertical]/tabs:w-full group-data-[orientation=vertical]/tabs:justify-start hover:text-foreground focus-visible:border-ring focus-visible:ring-[var(--focus-ring-width)] focus-visible:ring-ring/50 focus-visible:outline-1 focus-visible:outline-ring disabled:pointer-events-none disabled:opacity-50 group-data-[variant=default]/tabs-list:data-[state=active]:shadow-sm group-data-[variant=line]/tabs-list:data-[state=active]:shadow-none dark:text-muted-foreground dark:hover:text-foreground [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4", "group-data-[variant=line]/tabs-list:bg-transparent group-data-[variant=line]/tabs-list:data-[state=active]:bg-transparent dark:group-data-[variant=line]/tabs-list:data-[state=active]:border-transparent dark:group-data-[variant=line]/tabs-list:data-[state=active]:bg-transparent", "data-[state=active]:bg-background data-[state=active]:text-foreground dark:data-[state=active]:border-input dark:data-[state=active]:bg-input/30 dark:data-[state=active]:text-foreground", "after:absolute after:bg-foreground after:opacity-0 after:transition-opacity group-data-[orientation=horizontal]/tabs:after:inset-x-0 group-data-[orientation=horizontal]/tabs:after:bottom-[-5px] group-data-[orientation=horizontal]/tabs:after:h-0.5 group-data-[orientation=vertical]/tabs:after:inset-y-0 group-data-[orientation=vertical]/tabs:after:-right-1 group-data-[orientation=vertical]/tabs:after:w-0.5 group-data-[variant=line]/tabs-list:data-[state=active]:after:opacity-100", className), ...props }));
13
+ }
14
+ function TabsContent({ className, ...props }) {
15
+ return (_jsx(TabsPrimitive.Content, { "data-slot": "tabs-content", className: cn("flex-1 outline-none", className), ...props }));
16
+ }
17
+ export { Tabs, TabsList, TabsTrigger, TabsContent };
@@ -0,0 +1,3 @@
1
+ import * as React from "react";
2
+ declare function Textarea({ className, ...props }: React.ComponentProps<"textarea">): import("react/jsx-runtime").JSX.Element;
3
+ export { Textarea };
@@ -0,0 +1,6 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { cn } from "@ciridae/ui/utils";
3
+ function Textarea({ className, ...props }) {
4
+ return (_jsx("textarea", { "data-slot": "textarea", className: cn("flex field-sizing-content min-h-16 w-full rounded-md border border-input bg-transparent px-(--control-padding-x) py-2 text-base shadow-xs transition-[color,box-shadow] outline-none placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-[var(--focus-ring-width)] focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 md:text-sm dark:bg-input/30 dark:aria-invalid:ring-destructive/40", className), ...props }));
5
+ }
6
+ export { Textarea };
@@ -0,0 +1,9 @@
1
+ import * as React from "react";
2
+ import { type VariantProps } from "class-variance-authority";
3
+ import { ToggleGroup as ToggleGroupPrimitive } from "radix-ui";
4
+ import { toggleVariants } from "@ciridae/ui/toggle-variants";
5
+ declare function ToggleGroup({ className, variant, size, spacing, children, ...props }: React.ComponentProps<typeof ToggleGroupPrimitive.Root> & VariantProps<typeof toggleVariants> & {
6
+ spacing?: number;
7
+ }): import("react/jsx-runtime").JSX.Element;
8
+ declare function ToggleGroupItem({ className, children, variant, size, ...props }: React.ComponentProps<typeof ToggleGroupPrimitive.Item> & VariantProps<typeof toggleVariants>): import("react/jsx-runtime").JSX.Element;
9
+ export { ToggleGroup, ToggleGroupItem };
@@ -0,0 +1,24 @@
1
+ "use client";
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ import * as React from "react";
4
+ import { ToggleGroup as ToggleGroupPrimitive } from "radix-ui";
5
+ import { cn } from "@ciridae/ui/utils";
6
+ import { toggleVariants } from "@ciridae/ui/toggle-variants";
7
+ const ToggleGroupContext = React.createContext({
8
+ size: "default",
9
+ variant: "default",
10
+ spacing: 0,
11
+ });
12
+ function ToggleGroup({ className, variant, size, spacing = 0, children, ...props }) {
13
+ const style = React.useMemo(() => ({ "--gap": spacing }), [spacing]);
14
+ const contextValue = React.useMemo(() => ({ variant, size, spacing }), [size, spacing, variant]);
15
+ return (_jsx(ToggleGroupPrimitive.Root, { "data-slot": "toggle-group", "data-variant": variant, "data-size": size, "data-spacing": spacing, style: style, className: cn("group/toggle-group flex w-fit items-center gap-[--spacing(var(--gap))] rounded-md data-[spacing=default]:data-[variant=outline]:shadow-xs", className), ...props, children: _jsx(ToggleGroupContext.Provider, { value: contextValue, children: children }) }));
16
+ }
17
+ function ToggleGroupItem({ className, children, variant, size, ...props }) {
18
+ const context = React.useContext(ToggleGroupContext);
19
+ return (_jsx(ToggleGroupPrimitive.Item, { "data-slot": "toggle-group-item", "data-variant": context.variant || variant, "data-size": context.size || size, "data-spacing": context.spacing, className: cn(toggleVariants({
20
+ variant: context.variant || variant,
21
+ size: context.size || size,
22
+ }), "w-auto min-w-0 shrink-0 px-3 focus:z-10 focus-visible:z-10", "data-[spacing=0]:rounded-none data-[spacing=0]:shadow-none data-[spacing=0]:first:rounded-l-md data-[spacing=0]:last:rounded-r-md data-[spacing=0]:data-[variant=outline]:border-l-0 data-[spacing=0]:data-[variant=outline]:first:border-l", className), ...props, children: children }));
23
+ }
24
+ export { ToggleGroup, ToggleGroupItem };
@@ -0,0 +1,7 @@
1
+ import { type VariantProps } from "class-variance-authority";
2
+ declare const toggleVariants: (props?: ({
3
+ variant?: "default" | "outline" | null | undefined;
4
+ size?: "sm" | "lg" | "default" | null | undefined;
5
+ } & import("class-variance-authority/types").ClassProp) | undefined) => string;
6
+ type ToggleVariantProps = VariantProps<typeof toggleVariants>;
7
+ export { toggleVariants, type ToggleVariantProps };
@@ -0,0 +1,19 @@
1
+ import { cva } from "class-variance-authority";
2
+ const toggleVariants = cva("inline-flex items-center justify-center gap-(--control-gap) rounded-md text-sm font-medium whitespace-nowrap transition-[color,box-shadow] outline-none hover:bg-muted hover:text-muted-foreground focus-visible:border-ring focus-visible:ring-[var(--focus-ring-width)] focus-visible:ring-ring/50 disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 data-[state=on]:bg-accent data-[state=on]:text-accent-foreground dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4", {
3
+ variants: {
4
+ variant: {
5
+ default: "bg-transparent",
6
+ outline: "border border-input bg-transparent shadow-xs hover:bg-accent hover:text-accent-foreground",
7
+ },
8
+ size: {
9
+ default: "h-(--control-height) min-w-(--control-height) px-2",
10
+ sm: "h-(--control-height-sm) min-w-(--control-height-sm) px-1.5",
11
+ lg: "h-[calc(var(--control-height)+0.25rem)] min-w-[calc(var(--control-height)+0.25rem)] px-2.5",
12
+ },
13
+ },
14
+ defaultVariants: {
15
+ variant: "default",
16
+ size: "default",
17
+ },
18
+ });
19
+ export { toggleVariants };
@@ -0,0 +1,5 @@
1
+ import * as React from "react";
2
+ import { Toggle as TogglePrimitive } from "radix-ui";
3
+ import { type ToggleVariantProps } from "@ciridae/ui/toggle-variants";
4
+ declare function Toggle({ className, variant, size, ...props }: React.ComponentProps<typeof TogglePrimitive.Root> & ToggleVariantProps): import("react/jsx-runtime").JSX.Element;
5
+ export { Toggle };
@@ -0,0 +1,9 @@
1
+ "use client";
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ import { Toggle as TogglePrimitive } from "radix-ui";
4
+ import { cn } from "@ciridae/ui/utils";
5
+ import { toggleVariants } from "@ciridae/ui/toggle-variants";
6
+ function Toggle({ className, variant, size, ...props }) {
7
+ return (_jsx(TogglePrimitive.Root, { "data-slot": "toggle", className: cn(toggleVariants({ variant, size, className })), ...props }));
8
+ }
9
+ export { Toggle };
@@ -0,0 +1,11 @@
1
+ import * as React from "react";
2
+ import { Tooltip as TooltipPrimitive } from "radix-ui";
3
+ declare function TooltipPortalContainerProvider({ children, container, }: {
4
+ children: React.ReactNode;
5
+ container: HTMLElement | null;
6
+ }): import("react/jsx-runtime").JSX.Element;
7
+ declare function TooltipProvider({ delayDuration, ...props }: React.ComponentProps<typeof TooltipPrimitive.Provider>): import("react/jsx-runtime").JSX.Element;
8
+ declare function Tooltip({ ...props }: React.ComponentProps<typeof TooltipPrimitive.Root>): import("react/jsx-runtime").JSX.Element;
9
+ declare function TooltipTrigger({ ...props }: React.ComponentProps<typeof TooltipPrimitive.Trigger>): import("react/jsx-runtime").JSX.Element;
10
+ declare function TooltipContent({ className, sideOffset, children, ...props }: React.ComponentProps<typeof TooltipPrimitive.Content>): import("react/jsx-runtime").JSX.Element;
11
+ export { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider, TooltipPortalContainerProvider };
@@ -0,0 +1,25 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import * as React from "react";
3
+ import { Tooltip as TooltipPrimitive } from "radix-ui";
4
+ import { cn } from "@ciridae/ui/utils";
5
+ const TooltipPortalContainerContext = React.createContext({
6
+ container: null,
7
+ });
8
+ function TooltipPortalContainerProvider({ children, container, }) {
9
+ const value = React.useMemo(() => ({ container }), [container]);
10
+ return (_jsx(TooltipPortalContainerContext.Provider, { value: value, children: children }));
11
+ }
12
+ function TooltipProvider({ delayDuration = 0, ...props }) {
13
+ return (_jsx(TooltipPrimitive.Provider, { "data-slot": "tooltip-provider", delayDuration: delayDuration, ...props }));
14
+ }
15
+ function Tooltip({ ...props }) {
16
+ return _jsx(TooltipPrimitive.Root, { "data-slot": "tooltip", ...props });
17
+ }
18
+ function TooltipTrigger({ ...props }) {
19
+ return _jsx(TooltipPrimitive.Trigger, { "data-slot": "tooltip-trigger", ...props });
20
+ }
21
+ function TooltipContent({ className, sideOffset = 0, children, ...props }) {
22
+ const { container } = React.useContext(TooltipPortalContainerContext);
23
+ return (_jsx(TooltipPrimitive.Portal, { container: container ?? undefined, children: _jsxs(TooltipPrimitive.Content, { "data-slot": "tooltip-content", sideOffset: sideOffset, className: cn("z-50 w-fit origin-(--radix-tooltip-content-transform-origin) animate-in rounded-md bg-foreground px-3 py-1.5 text-xs text-balance text-background fade-in-0 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-[state=closed]:animate-out data-[state=closed]:fade-out-0", className), ...props, children: [children, _jsx(TooltipPrimitive.Arrow, { className: "z-50 size-2.5 translate-y-[calc(-50%_-_2px)] rotate-45 rounded-[2px] bg-foreground fill-foreground" })] }) }));
24
+ }
25
+ export { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider, TooltipPortalContainerProvider };
@@ -0,0 +1,20 @@
1
+ import * as React from "react";
2
+ type WorkflowTimelineStepState = "complete" | "current" | "actionable" | "waiting" | "blocked" | "upcoming";
3
+ type WorkflowTimelineStepAction = {
4
+ label: string;
5
+ onClick: () => void;
6
+ };
7
+ type WorkflowTimelineStep = {
8
+ id: string;
9
+ label: string;
10
+ state: WorkflowTimelineStepState;
11
+ description?: string;
12
+ meta?: string;
13
+ action?: WorkflowTimelineStepAction;
14
+ };
15
+ type WorkflowTimelineProps = React.ComponentProps<"section"> & {
16
+ steps: WorkflowTimelineStep[];
17
+ };
18
+ declare function WorkflowTimeline({ className, steps, ...props }: WorkflowTimelineProps): import("react/jsx-runtime").JSX.Element | null;
19
+ export { WorkflowTimeline };
20
+ export type { WorkflowTimelineProps, WorkflowTimelineStep, WorkflowTimelineStepState };
@@ -0,0 +1,92 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import { AlertCircleIcon, CheckIcon, ChevronRightIcon, CircleIcon, ClockIcon } from "lucide-react";
3
+ import { cn } from "@ciridae/ui/utils";
4
+ function WorkflowTimeline({ className, steps, ...props }) {
5
+ const expandedStepId = getExpandedStepId(steps);
6
+ if (!steps.length) {
7
+ return null;
8
+ }
9
+ return (_jsx("section", { "data-slot": "workflow-timeline", className: cn("bg-background", className), ...props, children: _jsx("ol", { className: "flex w-full min-w-max items-stretch overflow-x-auto px-4 py-3 md:px-6 lg:px-8", children: steps.map((step, index) => (_jsx(WorkflowTimelineStepItem, { expanded: step.id === expandedStepId, showConnector: index > 0, step: step, previousStep: steps[index - 1] }, step.id))) }) }));
10
+ }
11
+ function WorkflowTimelineStepItem({ expanded, previousStep, showConnector, step, }) {
12
+ return (_jsxs("li", { className: cn("flex min-w-0 items-stretch", expanded && "flex-1"), children: [showConnector ? (_jsx(WorkflowTimelineConnector, { complete: previousStep?.state === "complete" })) : null, expanded ? _jsx(ExpandedWorkflowStep, { step: step }) : _jsx(CompactWorkflowStep, { step: step })] }));
13
+ }
14
+ function WorkflowTimelineConnector({ complete }) {
15
+ return (_jsx("div", { className: "flex w-8 shrink-0 items-center px-2", "aria-hidden": "true", children: _jsx("div", { className: cn("h-px w-full", complete ? "bg-success" : "bg-border") }) }));
16
+ }
17
+ function CompactWorkflowStep({ step }) {
18
+ return (_jsxs("div", { className: "flex shrink-0 items-center gap-2 py-2", children: [_jsx(WorkflowTimelineMarker, { state: step.state }), _jsx("span", { className: cn("text-xs whitespace-nowrap", getCompactLabelClassName(step.state)), children: step.label })] }));
19
+ }
20
+ function ExpandedWorkflowStep({ step }) {
21
+ const stateClassName = getExpandedStateClassName(step.state);
22
+ const className = cn("flex min-w-72 flex-1 items-center gap-3 rounded-md border px-3 py-2 text-left", stateClassName, step.action &&
23
+ "cursor-pointer transition-colors hover:bg-accent hover:text-accent-foreground focus-visible:ring-[var(--focus-ring-width)] focus-visible:ring-ring focus-visible:outline-hidden dark:hover:bg-input/50");
24
+ if (step.action) {
25
+ return (_jsxs("button", { "aria-label": `${step.action.label}: ${step.label}`, className: className, "data-state": step.state, onClick: step.action.onClick, type: "button", children: [_jsx(WorkflowTimelineMarker, { state: step.state }), _jsx(WorkflowTimelineStepContent, { step: step }), _jsx(WorkflowTimelineAction, { label: step.action.label })] }));
26
+ }
27
+ return (_jsxs("div", { className: className, "data-state": step.state, children: [_jsx(WorkflowTimelineMarker, { state: step.state }), _jsx(WorkflowTimelineStepContent, { step: step })] }));
28
+ }
29
+ function WorkflowTimelineAction({ label }) {
30
+ return (_jsxs("span", { className: "ml-auto inline-flex h-(--control-height-xs) shrink-0 items-center gap-1 rounded-[var(--radius-sm)] px-2 text-xs font-medium", children: [label, _jsx(ChevronRightIcon, { className: "size-3.5", "aria-hidden": "true" })] }));
31
+ }
32
+ function WorkflowTimelineStepContent({ step }) {
33
+ return (_jsxs("div", { className: "min-w-0 flex-1", children: [_jsx("div", { className: cn("text-xs font-medium", getExpandedLabelClassName(step.state)), children: step.action ? (_jsxs(_Fragment, { children: [_jsx("span", { children: "Next step:" }), " ", step.label] })) : (step.label) }), step.description ? (_jsx("div", { className: "truncate text-xs text-muted-foreground", children: step.description })) : null, step.meta ? (_jsx("div", { className: "font-mono text-xs text-muted-foreground", children: step.meta })) : null] }));
34
+ }
35
+ function WorkflowTimelineMarker({ state }) {
36
+ return (_jsx("span", { className: cn("flex size-5 shrink-0 items-center justify-center rounded-full border", getMarkerClassName(state)), "aria-hidden": "true", children: _jsx(WorkflowTimelineMarkerIcon, { state: state }) }));
37
+ }
38
+ function WorkflowTimelineMarkerIcon({ state }) {
39
+ if (state === "complete") {
40
+ return _jsx(CheckIcon, { className: "size-3" });
41
+ }
42
+ if (state === "waiting") {
43
+ return _jsx(ClockIcon, { className: "size-3" });
44
+ }
45
+ if (state === "blocked") {
46
+ return _jsx(AlertCircleIcon, { className: "size-3" });
47
+ }
48
+ return _jsx(CircleIcon, { className: "size-3" });
49
+ }
50
+ function getExpandedStepId(steps) {
51
+ return steps.find((step) => isExpandedState(step.state))?.id;
52
+ }
53
+ function isExpandedState(state) {
54
+ return state === "current" || state === "actionable" || state === "waiting" || state === "blocked";
55
+ }
56
+ function getMarkerClassName(state) {
57
+ const classNames = {
58
+ actionable: "border-current bg-transparent text-current",
59
+ blocked: "border-destructive bg-destructive/10 text-destructive",
60
+ complete: "border-success bg-success text-success-foreground",
61
+ current: "border-foreground bg-background text-foreground",
62
+ upcoming: "border-border bg-muted text-muted-foreground",
63
+ waiting: "border-warning bg-warning/10 text-warning",
64
+ };
65
+ return classNames[state];
66
+ }
67
+ function getCompactLabelClassName(state) {
68
+ if (state === "complete")
69
+ return "text-success";
70
+ if (state === "upcoming")
71
+ return "text-muted-foreground";
72
+ return "text-foreground";
73
+ }
74
+ function getExpandedLabelClassName(state) {
75
+ if (state === "blocked")
76
+ return "text-destructive";
77
+ if (state === "waiting")
78
+ return "text-warning";
79
+ return "text-foreground";
80
+ }
81
+ function getExpandedStateClassName(state) {
82
+ const classNames = {
83
+ actionable: "bg-background shadow-xs dark:border-input dark:bg-input/30",
84
+ blocked: "border-destructive/35 bg-destructive/10",
85
+ complete: "border-success/35 bg-success-muted",
86
+ current: "border-border bg-card",
87
+ upcoming: "border-border bg-muted/35",
88
+ waiting: "border-warning/35 bg-warning-muted",
89
+ };
90
+ return classNames[state];
91
+ }
92
+ export { WorkflowTimeline };
@@ -0,0 +1 @@
1
+ export declare function useIsMobile(): boolean;
@@ -0,0 +1,15 @@
1
+ import * as React from "react";
2
+ const MOBILE_BREAKPOINT = 768;
3
+ export function useIsMobile() {
4
+ const [isMobile, setIsMobile] = React.useState(undefined);
5
+ React.useEffect(() => {
6
+ const mql = window.matchMedia(`(max-width: ${MOBILE_BREAKPOINT - 1}px)`);
7
+ const onChange = () => {
8
+ setIsMobile(window.innerWidth < MOBILE_BREAKPOINT);
9
+ };
10
+ mql.addEventListener("change", onChange);
11
+ setIsMobile(window.innerWidth < MOBILE_BREAKPOINT);
12
+ return () => mql.removeEventListener("change", onChange);
13
+ }, []);
14
+ return !!isMobile;
15
+ }
@@ -0,0 +1,5 @@
1
+ import { type ClassValue } from "clsx";
2
+ export declare function cn(...inputs: ClassValue[]): string;
3
+ export declare const glassSurface = "border-border/38 bg-background/36 shadow-[0_18px_60px_color-mix(in_oklch,var(--foreground)_9%,transparent)] backdrop-blur-xl backdrop-saturate-150 supports-[backdrop-filter]:bg-background/24 dark:border-border/32 dark:bg-background/34 dark:shadow-[0_18px_60px_color-mix(in_oklch,var(--foreground)_20%,transparent)] dark:supports-[backdrop-filter]:bg-background/22";
4
+ export declare const glassSurfaceFocus = "focus-within:border-ring focus-within:bg-background/46 focus-within:ring-[var(--focus-ring-width)] focus-within:ring-ring/35 focus-within:shadow-[0_20px_70px_color-mix(in_oklch,var(--foreground)_12%,transparent)] supports-[backdrop-filter]:focus-within:bg-background/32 dark:focus-within:border-ring dark:focus-within:bg-background/42 dark:focus-within:ring-ring/55 dark:supports-[backdrop-filter]:focus-within:bg-background/30";
5
+ export declare const sidebarGlassSurface = "border-sidebar-border/60 bg-sidebar/48 shadow-none backdrop-blur-xl backdrop-saturate-150 supports-[backdrop-filter]:bg-sidebar/34 dark:border-sidebar-border/60 dark:bg-sidebar/44 dark:supports-[backdrop-filter]:bg-sidebar/30";
@@ -0,0 +1,8 @@
1
+ import { clsx } from "clsx";
2
+ import { cx } from "@ciridae/ui/styled-system/css";
3
+ export function cn(...inputs) {
4
+ return cx(clsx(inputs));
5
+ }
6
+ export const glassSurface = "border-border/38 bg-background/36 shadow-[0_18px_60px_color-mix(in_oklch,var(--foreground)_9%,transparent)] backdrop-blur-xl backdrop-saturate-150 supports-[backdrop-filter]:bg-background/24 dark:border-border/32 dark:bg-background/34 dark:shadow-[0_18px_60px_color-mix(in_oklch,var(--foreground)_20%,transparent)] dark:supports-[backdrop-filter]:bg-background/22";
7
+ export const glassSurfaceFocus = "focus-within:border-ring focus-within:bg-background/46 focus-within:ring-[var(--focus-ring-width)] focus-within:ring-ring/35 focus-within:shadow-[0_20px_70px_color-mix(in_oklch,var(--foreground)_12%,transparent)] supports-[backdrop-filter]:focus-within:bg-background/32 dark:focus-within:border-ring dark:focus-within:bg-background/42 dark:focus-within:ring-ring/55 dark:supports-[backdrop-filter]:focus-within:bg-background/30";
8
+ export const sidebarGlassSurface = "border-sidebar-border/60 bg-sidebar/48 shadow-none backdrop-blur-xl backdrop-saturate-150 supports-[backdrop-filter]:bg-sidebar/34 dark:border-sidebar-border/60 dark:bg-sidebar/44 dark:supports-[backdrop-filter]:bg-sidebar/30";
@@ -0,0 +1,36 @@
1
+ import { withoutSpace } from '../helpers.mjs';
2
+
3
+ const conditionsStr = "_hover,_focus,_focusWithin,_focusVisible,_disabled,_active,_visited,_target,_readOnly,_readWrite,_empty,_checked,_enabled,_expanded,_highlighted,_complete,_incomplete,_dragging,_before,_after,_firstLetter,_firstLine,_marker,_selection,_file,_backdrop,_first,_last,_only,_even,_odd,_firstOfType,_lastOfType,_onlyOfType,_peerFocus,_peerHover,_peerActive,_peerFocusWithin,_peerFocusVisible,_peerDisabled,_peerChecked,_peerInvalid,_peerExpanded,_peerPlaceholderShown,_groupFocus,_groupHover,_groupActive,_groupFocusWithin,_groupFocusVisible,_groupDisabled,_groupChecked,_groupExpanded,_groupInvalid,_indeterminate,_required,_valid,_invalid,_autofill,_inRange,_outOfRange,_placeholder,_placeholderShown,_pressed,_selected,_grabbed,_underValue,_overValue,_atValue,_default,_optional,_open,_closed,_fullscreen,_loading,_hidden,_current,_currentPage,_currentStep,_today,_unavailable,_rangeStart,_rangeEnd,_now,_topmost,_motionReduce,_motionSafe,_print,_landscape,_portrait,_dark,_light,_osDark,_osLight,_highContrast,_lessContrast,_moreContrast,_ltr,_rtl,_scrollbar,_scrollbarThumb,_scrollbarTrack,_horizontal,_vertical,_icon,_starting,_noscript,_invertedColors,sm,smOnly,smDown,md,mdOnly,mdDown,lg,lgOnly,lgDown,xl,xlOnly,xlDown,2xl,2xlOnly,2xlDown,smToMd,smToLg,smToXl,smTo2xl,mdToLg,mdToXl,mdTo2xl,lgToXl,lgTo2xl,xlTo2xl,@/xs,@/sm,@/md,@/lg,@/xl,@/2xl,@/3xl,@/4xl,@/5xl,@/6xl,@/7xl,@/8xl,base"
4
+ const conditions = new Set(conditionsStr.split(','))
5
+
6
+ const conditionRegex = /^@|&|&$/
7
+
8
+ export function isCondition(value){
9
+ return conditions.has(value) || conditionRegex.test(value)
10
+ }
11
+
12
+ const underscoreRegex = /^_/
13
+ const conditionsSelectorRegex = /&|@/
14
+
15
+ export function finalizeConditions(paths){
16
+ return paths.map((path) => {
17
+ if (conditions.has(path)){
18
+ return path.replace(underscoreRegex, '')
19
+ }
20
+
21
+ if (conditionsSelectorRegex.test(path)){
22
+ return `[${withoutSpace(path.trim())}]`
23
+ }
24
+
25
+ return path
26
+ })}
27
+
28
+ export function sortConditions(paths){
29
+ return paths.sort((a, b) => {
30
+ const aa = isCondition(a)
31
+ const bb = isCondition(b)
32
+ if (aa && !bb) return 1
33
+ if (!aa && bb) return -1
34
+ return 0
35
+ })
36
+ }
@@ -0,0 +1,45 @@
1
+ import { createCss, createMergeCss, hypenateProperty, withoutSpace } from '../helpers.mjs';
2
+ import { sortConditions, finalizeConditions } from './conditions.mjs';
3
+
4
+ const utilities = "aspectRatio:asp,boxDecorationBreak:bx-db,zIndex:z,boxSizing:bx-s,objectPosition:obj-p,objectFit:obj-f,overscrollBehavior:ovs-b,overscrollBehaviorX:ovs-bx,overscrollBehaviorY:ovs-by,position:pos/1,top:top,left:left,inset:inset,insetInline:inset-x/insetX,insetBlock:inset-y/insetY,insetBlockEnd:inset-be,insetBlockStart:inset-bs,insetInlineEnd:inset-e/insetEnd/end,insetInlineStart:inset-s/insetStart/start,right:right,bottom:bottom,float:float,visibility:vis,display:d,hideFrom:hide,hideBelow:show,flexBasis:flex-b,flex:flex,flexDirection:flex-d/flexDir,flexGrow:flex-g,flexShrink:flex-sh,gridTemplateColumns:grid-tc,gridTemplateRows:grid-tr,gridColumn:grid-c,gridRow:grid-r,gridColumnStart:grid-cs,gridColumnEnd:grid-ce,gridAutoFlow:grid-af,gridAutoColumns:grid-ac,gridAutoRows:grid-ar,gap:gap,gridGap:grid-g,gridRowGap:grid-rg,gridColumnGap:grid-cg,rowGap:rg,columnGap:cg,justifyContent:jc,alignContent:ac,alignItems:ai,alignSelf:as,padding:p/1,paddingLeft:pl/1,paddingRight:pr/1,paddingTop:pt/1,paddingBottom:pb/1,paddingBlock:py/1/paddingY,paddingBlockEnd:pbe,paddingBlockStart:pbs,paddingInline:px/paddingX/1,paddingInlineEnd:pe/1/paddingEnd,paddingInlineStart:ps/1/paddingStart,marginLeft:ml/1,marginRight:mr/1,marginTop:mt/1,marginBottom:mb/1,margin:m/1,marginBlock:my/1/marginY,marginBlockEnd:mbe,marginBlockStart:mbs,marginInline:mx/1/marginX,marginInlineEnd:me/1/marginEnd,marginInlineStart:ms/1/marginStart,spaceX:sx,spaceY:sy,outlineWidth:ring-w/ringWidth,outlineColor:ring-c/ringColor,outline:ring/1,outlineOffset:ring-o/ringOffset,focusRing:focus-ring,focusVisibleRing:focus-v-ring,focusRingColor:focus-ring-c,focusRingOffset:focus-ring-o,focusRingWidth:focus-ring-w,focusRingStyle:focus-ring-s,divideX:dvd-x,divideY:dvd-y,divideColor:dvd-c,divideStyle:dvd-s,width:w/1,inlineSize:w-is,minWidth:min-w/minW,minInlineSize:min-w-is,maxWidth:max-w/maxW,maxInlineSize:max-w-is,height:h/1,blockSize:h-bs,minHeight:min-h/minH,minBlockSize:min-h-bs,maxHeight:max-h/maxH,maxBlockSize:max-b,boxSize:size,color:c,fontFamily:ff,fontSize:fs,fontSizeAdjust:fs-a,fontPalette:fp,fontKerning:fk,fontFeatureSettings:ff-s,fontWeight:fw,fontSmoothing:fsmt,fontVariant:fv,fontVariantAlternates:fv-alt,fontVariantCaps:fv-caps,fontVariationSettings:fv-s,fontVariantNumeric:fv-num,letterSpacing:ls,lineHeight:lh,textAlign:ta,textDecoration:td,textDecorationColor:td-c,textEmphasisColor:te-c,textDecorationStyle:td-s,textDecorationThickness:td-t,textUnderlineOffset:tu-o,textTransform:tt,textIndent:ti,textShadow:tsh,textShadowColor:tsh-c/textShadowColor,WebkitTextFillColor:wktf-c,textOverflow:tov,verticalAlign:va,wordBreak:wb,textWrap:tw,truncate:trunc,lineClamp:lc,listStyleType:li-t,listStylePosition:li-pos,listStyleImage:li-img,listStyle:li-s,backgroundPosition:bg-p/bgPosition,backgroundPositionX:bg-p-x/bgPositionX,backgroundPositionY:bg-p-y/bgPositionY,backgroundAttachment:bg-a/bgAttachment,backgroundClip:bg-cp/bgClip,background:bg/1,backgroundColor:bg-c/bgColor,backgroundOrigin:bg-o/bgOrigin,backgroundImage:bg-i/bgImage,backgroundRepeat:bg-r/bgRepeat,backgroundBlendMode:bg-bm/bgBlendMode,backgroundSize:bg-s/bgSize,backgroundGradient:bg-grad/bgGradient,backgroundLinear:bg-linear/bgLinear,backgroundRadial:bg-radial/bgRadial,backgroundConic:bg-conic/bgConic,textGradient:txt-grad,gradientFromPosition:grad-from-pos,gradientToPosition:grad-to-pos,gradientFrom:grad-from,gradientTo:grad-to,gradientVia:grad-via,gradientViaPosition:grad-via-pos,borderRadius:bdr/rounded,borderTopLeftRadius:bdr-tl/roundedTopLeft,borderTopRightRadius:bdr-tr/roundedTopRight,borderBottomRightRadius:bdr-br/roundedBottomRight,borderBottomLeftRadius:bdr-bl/roundedBottomLeft,borderTopRadius:bdr-t/roundedTop,borderRightRadius:bdr-r/roundedRight,borderBottomRadius:bdr-b/roundedBottom,borderLeftRadius:bdr-l/roundedLeft,borderStartStartRadius:bdr-ss/roundedStartStart,borderStartEndRadius:bdr-se/roundedStartEnd,borderStartRadius:bdr-s/roundedStart,borderEndStartRadius:bdr-es/roundedEndStart,borderEndEndRadius:bdr-ee/roundedEndEnd,borderEndRadius:bdr-e/roundedEnd,border:bd,borderWidth:bd-w,borderTopWidth:bd-t-w,borderLeftWidth:bd-l-w,borderRightWidth:bd-r-w,borderBottomWidth:bd-b-w,borderBlockStartWidth:bd-bs-w,borderBlockEndWidth:bd-be-w,borderColor:bd-c,borderInline:bd-x/borderX,borderInlineWidth:bd-x-w/borderXWidth,borderInlineColor:bd-x-c/borderXColor,borderBlock:bd-y/borderY,borderBlockWidth:bd-y-w/borderYWidth,borderBlockColor:bd-y-c/borderYColor,borderLeft:bd-l,borderLeftColor:bd-l-c,borderInlineStart:bd-s/borderStart,borderInlineStartWidth:bd-s-w/borderStartWidth,borderInlineStartColor:bd-s-c/borderStartColor,borderRight:bd-r,borderRightColor:bd-r-c,borderInlineEnd:bd-e/borderEnd,borderInlineEndWidth:bd-e-w/borderEndWidth,borderInlineEndColor:bd-e-c/borderEndColor,borderTop:bd-t,borderTopColor:bd-t-c,borderBottom:bd-b,borderBottomColor:bd-b-c,borderBlockEnd:bd-be,borderBlockEndColor:bd-be-c,borderBlockStart:bd-bs,borderBlockStartColor:bd-bs-c,opacity:op,boxShadow:bx-sh/shadow,boxShadowColor:bx-sh-c/shadowColor,mixBlendMode:mix-bm,filter:filter,brightness:brightness,contrast:contrast,grayscale:grayscale,hueRotate:hue-rotate,invert:invert,saturate:saturate,sepia:sepia,dropShadow:drop-shadow,blur:blur,backdropFilter:bkdp,backdropBlur:bkdp-blur,backdropBrightness:bkdp-brightness,backdropContrast:bkdp-contrast,backdropGrayscale:bkdp-grayscale,backdropHueRotate:bkdp-hue-rotate,backdropInvert:bkdp-invert,backdropOpacity:bkdp-opacity,backdropSaturate:bkdp-saturate,backdropSepia:bkdp-sepia,borderCollapse:bd-cl,borderSpacing:bd-sp,borderSpacingX:bd-sx,borderSpacingY:bd-sy,tableLayout:tbl,transitionTimingFunction:trs-tmf,transitionDelay:trs-dly,transitionDuration:trs-dur,transitionProperty:trs-prop,transition:trs,animation:anim,animationName:anim-n,animationTimingFunction:anim-tmf,animationDuration:anim-dur,animationDelay:anim-dly,animationPlayState:anim-ps,animationComposition:anim-comp,animationFillMode:anim-fm,animationDirection:anim-dir,animationIterationCount:anim-ic,animationRange:anim-r,animationState:anim-s,animationRangeStart:anim-rs,animationRangeEnd:anim-re,animationTimeline:anim-tl,transformOrigin:trf-o,transformBox:trf-b,transformStyle:trf-s,transform:trf,rotate:rotate,rotateX:rotate-x,rotateY:rotate-y,rotateZ:rotate-z,scale:scale,scaleX:scale-x,scaleY:scale-y,translate:translate,translateX:translate-x/x,translateY:translate-y/y,translateZ:translate-z/z,accentColor:ac-c,caretColor:ca-c,scrollBehavior:scr-bhv,scrollbar:scr-bar,scrollbarColor:scr-bar-c,scrollbarGutter:scr-bar-g,scrollbarWidth:scr-bar-w,scrollMargin:scr-m,scrollMarginLeft:scr-ml,scrollMarginRight:scr-mr,scrollMarginTop:scr-mt,scrollMarginBottom:scr-mb,scrollMarginBlock:scr-my/scrollMarginY,scrollMarginBlockEnd:scr-mbe,scrollMarginBlockStart:scr-mbt,scrollMarginInline:scr-mx/scrollMarginX,scrollMarginInlineEnd:scr-me,scrollMarginInlineStart:scr-ms,scrollPadding:scr-p,scrollPaddingBlock:scr-py/scrollPaddingY,scrollPaddingBlockStart:scr-pbs,scrollPaddingBlockEnd:scr-pbe,scrollPaddingInline:scr-px/scrollPaddingX,scrollPaddingInlineEnd:scr-pe,scrollPaddingInlineStart:scr-ps,scrollPaddingLeft:scr-pl,scrollPaddingRight:scr-pr,scrollPaddingTop:scr-pt,scrollPaddingBottom:scr-pb,scrollSnapAlign:scr-sa,scrollSnapStop:scrs-s,scrollSnapType:scrs-t,scrollSnapStrictness:scrs-strt,scrollSnapMargin:scrs-m,scrollSnapMarginTop:scrs-mt,scrollSnapMarginBottom:scrs-mb,scrollSnapMarginLeft:scrs-ml,scrollSnapMarginRight:scrs-mr,scrollSnapCoordinate:scrs-c,scrollSnapDestination:scrs-d,scrollSnapPointsX:scrs-px,scrollSnapPointsY:scrs-py,scrollSnapTypeX:scrs-tx,scrollSnapTypeY:scrs-ty,scrollTimeline:scrtl,scrollTimelineAxis:scrtl-a,scrollTimelineName:scrtl-n,touchAction:tch-a,userSelect:us,overflow:ov,overflowWrap:ov-wrap,overflowX:ov-x,overflowY:ov-y,overflowAnchor:ov-a,overflowBlock:ov-b,overflowInline:ov-i,overflowClipBox:ovcp-bx,overflowClipMargin:ovcp-m,overscrollBehaviorBlock:ovs-bb,overscrollBehaviorInline:ovs-bi,fill:fill,stroke:stk,strokeWidth:stk-w,strokeDasharray:stk-dsh,strokeDashoffset:stk-do,strokeLinecap:stk-lc,strokeLinejoin:stk-lj,strokeMiterlimit:stk-ml,strokeOpacity:stk-op,srOnly:sr,debug:debug,appearance:ap,backfaceVisibility:bfv,clipPath:cp-path,hyphens:hy,mask:msk,maskImage:msk-i,maskSize:msk-s,textSizeAdjust:txt-adj,container:cq,containerName:cq-n,containerType:cq-t,cursor:cursor,textStyle:textStyle"
5
+
6
+ const classNameByProp = new Map()
7
+ const shorthands = new Map()
8
+ utilities.split(',').forEach((utility) => {
9
+ const [prop, meta] = utility.split(':')
10
+ const [className, ...shorthandList] = meta.split('/')
11
+ classNameByProp.set(prop, className)
12
+ if (shorthandList.length) {
13
+ shorthandList.forEach((shorthand) => {
14
+ shorthands.set(shorthand === '1' ? className : shorthand, prop)
15
+ })
16
+ }
17
+ })
18
+
19
+ const resolveShorthand = (prop) => shorthands.get(prop) || prop
20
+
21
+ const context = {
22
+
23
+ conditions: {
24
+ shift: sortConditions,
25
+ finalize: finalizeConditions,
26
+ breakpoints: { keys: ["base","sm","md","lg","xl","2xl"] }
27
+ },
28
+ utility: {
29
+
30
+ transform: (prop, value) => {
31
+ const key = resolveShorthand(prop)
32
+ const propKey = classNameByProp.get(key) || hypenateProperty(key)
33
+ return { className: `${propKey}_${withoutSpace(value)}` }
34
+ },
35
+ hasShorthand: true,
36
+ toHash: (path, hashFn) => hashFn(path.join(":")),
37
+ resolveShorthand: resolveShorthand,
38
+ }
39
+ }
40
+
41
+ const cssFn = createCss(context)
42
+ export const css = (...styles) => cssFn(mergeCss(...styles))
43
+ css.raw = (...styles) => mergeCss(...styles)
44
+
45
+ export const { mergeCss, assignCss } = createMergeCss(context)
@@ -0,0 +1,87 @@
1
+ import { compact, mergeProps, memo, splitProps, uniq } from '../helpers.mjs';
2
+ import { css, mergeCss } from './css.mjs';
3
+
4
+ const defaults = (conf) => ({
5
+ base: {},
6
+ variants: {},
7
+ defaultVariants: {},
8
+ compoundVariants: [],
9
+ ...conf,
10
+ })
11
+
12
+ export function cva(config) {
13
+ const { base, variants, defaultVariants, compoundVariants } = defaults(config)
14
+ const getVariantProps = (variants) => ({ ...defaultVariants, ...compact(variants) })
15
+
16
+ function resolve(props = {}) {
17
+ const computedVariants = getVariantProps(props)
18
+ let variantCss = { ...base }
19
+ for (const [key, value] of Object.entries(computedVariants)) {
20
+ if (variants[key]?.[value]) {
21
+ variantCss = mergeCss(variantCss, variants[key][value])
22
+ }
23
+ }
24
+ const compoundVariantCss = getCompoundVariantCss(compoundVariants, computedVariants)
25
+ return mergeCss(variantCss, compoundVariantCss)
26
+ }
27
+
28
+ function merge(__cva) {
29
+ const override = defaults(__cva.config)
30
+ const variantKeys = uniq(__cva.variantKeys, Object.keys(variants))
31
+ return cva({
32
+ base: mergeCss(base, override.base),
33
+ variants: Object.fromEntries(
34
+ variantKeys.map((key) => [key, mergeCss(variants[key], override.variants[key])]),
35
+ ),
36
+ defaultVariants: mergeProps(defaultVariants, override.defaultVariants),
37
+ compoundVariants: [...compoundVariants, ...override.compoundVariants],
38
+ })
39
+ }
40
+
41
+ function cvaFn(props) {
42
+ return css(resolve(props))
43
+ }
44
+
45
+ const variantKeys = Object.keys(variants)
46
+
47
+ function splitVariantProps(props) {
48
+ return splitProps(props, variantKeys)
49
+ }
50
+
51
+ const variantMap = Object.fromEntries(Object.entries(variants).map(([key, value]) => [key, Object.keys(value)]))
52
+
53
+ return Object.assign(memo(cvaFn), {
54
+ __cva__: true,
55
+ variantMap,
56
+ variantKeys,
57
+ raw: resolve,
58
+ config,
59
+ merge,
60
+ splitVariantProps,
61
+ getVariantProps
62
+ })
63
+ }
64
+
65
+ export function getCompoundVariantCss(compoundVariants, variantMap) {
66
+ let result = {}
67
+ compoundVariants.forEach((compoundVariant) => {
68
+ const isMatching = Object.entries(compoundVariant).every(([key, value]) => {
69
+ if (key === 'css') return true
70
+
71
+ const values = Array.isArray(value) ? value : [value]
72
+ return values.some((value) => variantMap[key] === value)
73
+ })
74
+
75
+ if (isMatching) {
76
+ result = mergeCss(result, compoundVariant.css)
77
+ }
78
+ })
79
+
80
+ return result
81
+ }
82
+
83
+ export function assertCompoundVariant(name, compoundVariants, variants, prop) {
84
+ if (compoundVariants.length > 0 && typeof variants?.[prop] === 'object') {
85
+ throw new Error(`[recipe:${name}:${prop}] Conditions are not supported when using compound variants.`)
86
+ }
87
+ }
@@ -0,0 +1,15 @@
1
+ function cx() {
2
+ let str = '',
3
+ i = 0,
4
+ arg
5
+
6
+ for (; i < arguments.length; ) {
7
+ if ((arg = arguments[i++]) && typeof arg === 'string') {
8
+ str && (str += ' ')
9
+ str += arg
10
+ }
11
+ }
12
+ return str
13
+ }
14
+
15
+ export { cx }
@@ -0,0 +1,4 @@
1
+ export * from './css.mjs';
2
+ export * from './cx.mjs';
3
+ export * from './cva.mjs';
4
+ export * from './sva.mjs';
@@ -0,0 +1,46 @@
1
+ import { compact, getSlotRecipes, memo, splitProps } from '../helpers.mjs';
2
+ import { cva } from './cva.mjs';
3
+ import { cx } from './cx.mjs';
4
+
5
+ export function sva(config) {
6
+ const slots = Object.entries(getSlotRecipes(config)).map(([slot, slotCva]) => [slot, cva(slotCva)])
7
+ const defaultVariants = config.defaultVariants ?? {}
8
+
9
+ const classNameMap = slots.reduce((acc, [slot, cvaFn]) => {
10
+ if (config.className) acc[slot] = cvaFn.config.className
11
+ return acc
12
+ }, {})
13
+
14
+ function svaFn(props) {
15
+ const result = slots.map(([slot, cvaFn]) => [slot, cx(cvaFn(props), classNameMap[slot])])
16
+ return Object.fromEntries(result)
17
+ }
18
+
19
+ function raw(props) {
20
+ const result = slots.map(([slot, cvaFn]) => [slot, cvaFn.raw(props)])
21
+ return Object.fromEntries(result)
22
+ }
23
+
24
+ const variants = config.variants ?? {};
25
+ const variantKeys = Object.keys(variants);
26
+
27
+ function splitVariantProps(props) {
28
+ return splitProps(props, variantKeys);
29
+ }
30
+ const getVariantProps = (variants) => ({ ...defaultVariants, ...compact(variants) })
31
+
32
+ const variantMap = Object.fromEntries(
33
+ Object.entries(variants).map(([key, value]) => [key, Object.keys(value)])
34
+ );
35
+
36
+ return Object.assign(memo(svaFn), {
37
+ __cva__: false,
38
+ raw,
39
+ config,
40
+ variantMap,
41
+ variantKeys,
42
+ classNameMap,
43
+ splitVariantProps,
44
+ getVariantProps,
45
+ })
46
+ }