@automa8e/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 (451) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +2 -0
  3. package/dist/_virtual/index.js +6 -0
  4. package/dist/_virtual/index.js.map +1 -0
  5. package/dist/_virtual/index2.js +5 -0
  6. package/dist/_virtual/index2.js.map +1 -0
  7. package/dist/_virtual/use-sync-external-store-shim.development.js +5 -0
  8. package/dist/_virtual/use-sync-external-store-shim.development.js.map +1 -0
  9. package/dist/_virtual/use-sync-external-store-shim.production.js +5 -0
  10. package/dist/_virtual/use-sync-external-store-shim.production.js.map +1 -0
  11. package/dist/automa8e-ui.css +226 -0
  12. package/dist/components/automation/metric-card.d.ts +19 -0
  13. package/dist/components/automation/metric-card.d.ts.map +1 -0
  14. package/dist/components/automation/metric-card.js +59 -0
  15. package/dist/components/automation/metric-card.js.map +1 -0
  16. package/dist/components/automation/status-badge.d.ts +27 -0
  17. package/dist/components/automation/status-badge.d.ts.map +1 -0
  18. package/dist/components/automation/status-badge.js +112 -0
  19. package/dist/components/automation/status-badge.js.map +1 -0
  20. package/dist/components/automation/task-card.d.ts +14 -0
  21. package/dist/components/automation/task-card.d.ts.map +1 -0
  22. package/dist/components/automation/task-card.js +114 -0
  23. package/dist/components/automation/task-card.js.map +1 -0
  24. package/dist/components/automation/workflow-node.d.ts +20 -0
  25. package/dist/components/automation/workflow-node.d.ts.map +1 -0
  26. package/dist/components/automation/workflow-node.js +132 -0
  27. package/dist/components/automation/workflow-node.js.map +1 -0
  28. package/dist/components/layout/app-shell.d.ts +21 -0
  29. package/dist/components/layout/app-shell.d.ts.map +1 -0
  30. package/dist/components/layout/app-shell.js +35 -0
  31. package/dist/components/layout/app-shell.js.map +1 -0
  32. package/dist/components/layout/header.d.ts +16 -0
  33. package/dist/components/layout/header.d.ts.map +1 -0
  34. package/dist/components/layout/header.js +30 -0
  35. package/dist/components/layout/header.js.map +1 -0
  36. package/dist/components/layout/page-header.d.ts +16 -0
  37. package/dist/components/layout/page-header.d.ts.map +1 -0
  38. package/dist/components/layout/page-header.js +29 -0
  39. package/dist/components/layout/page-header.js.map +1 -0
  40. package/dist/components/layout/sidebar.d.ts +35 -0
  41. package/dist/components/layout/sidebar.d.ts.map +1 -0
  42. package/dist/components/layout/sidebar.js +103 -0
  43. package/dist/components/layout/sidebar.js.map +1 -0
  44. package/dist/components/ui/accordion.d.ts +8 -0
  45. package/dist/components/ui/accordion.d.ts.map +1 -0
  46. package/dist/components/ui/accordion.js +51 -0
  47. package/dist/components/ui/accordion.js.map +1 -0
  48. package/dist/components/ui/alert.d.ts +18 -0
  49. package/dist/components/ui/alert.d.ts.map +1 -0
  50. package/dist/components/ui/alert.js +89 -0
  51. package/dist/components/ui/alert.js.map +1 -0
  52. package/dist/components/ui/avatar.d.ts +20 -0
  53. package/dist/components/ui/avatar.d.ts.map +1 -0
  54. package/dist/components/ui/avatar.js +72 -0
  55. package/dist/components/ui/avatar.js.map +1 -0
  56. package/dist/components/ui/badge.d.ts +13 -0
  57. package/dist/components/ui/badge.d.ts.map +1 -0
  58. package/dist/components/ui/badge.js +54 -0
  59. package/dist/components/ui/badge.js.map +1 -0
  60. package/dist/components/ui/button.d.ts +15 -0
  61. package/dist/components/ui/button.d.ts.map +1 -0
  62. package/dist/components/ui/button.js +96 -0
  63. package/dist/components/ui/button.js.map +1 -0
  64. package/dist/components/ui/card.d.ts +16 -0
  65. package/dist/components/ui/card.d.ts.map +1 -0
  66. package/dist/components/ui/card.js +96 -0
  67. package/dist/components/ui/card.js.map +1 -0
  68. package/dist/components/ui/checkbox.d.ts +9 -0
  69. package/dist/components/ui/checkbox.d.ts.map +1 -0
  70. package/dist/components/ui/checkbox.js +29 -0
  71. package/dist/components/ui/checkbox.js.map +1 -0
  72. package/dist/components/ui/dialog.d.ts +28 -0
  73. package/dist/components/ui/dialog.d.ts.map +1 -0
  74. package/dist/components/ui/dialog.js +105 -0
  75. package/dist/components/ui/dialog.js.map +1 -0
  76. package/dist/components/ui/dropdown-menu.d.ts +29 -0
  77. package/dist/components/ui/dropdown-menu.d.ts.map +1 -0
  78. package/dist/components/ui/dropdown-menu.js +160 -0
  79. package/dist/components/ui/dropdown-menu.js.map +1 -0
  80. package/dist/components/ui/input.d.ts +14 -0
  81. package/dist/components/ui/input.d.ts.map +1 -0
  82. package/dist/components/ui/input.js +60 -0
  83. package/dist/components/ui/input.js.map +1 -0
  84. package/dist/components/ui/label.d.ts +13 -0
  85. package/dist/components/ui/label.d.ts.map +1 -0
  86. package/dist/components/ui/label.js +26 -0
  87. package/dist/components/ui/label.js.map +1 -0
  88. package/dist/components/ui/popover.d.ts +8 -0
  89. package/dist/components/ui/popover.d.ts.map +1 -0
  90. package/dist/components/ui/popover.js +29 -0
  91. package/dist/components/ui/popover.js.map +1 -0
  92. package/dist/components/ui/progress.d.ts +17 -0
  93. package/dist/components/ui/progress.d.ts.map +1 -0
  94. package/dist/components/ui/progress.js +80 -0
  95. package/dist/components/ui/progress.js.map +1 -0
  96. package/dist/components/ui/scroll-area.d.ts +6 -0
  97. package/dist/components/ui/scroll-area.d.ts.map +1 -0
  98. package/dist/components/ui/scroll-area.js +39 -0
  99. package/dist/components/ui/scroll-area.js.map +1 -0
  100. package/dist/components/ui/select.d.ts +16 -0
  101. package/dist/components/ui/select.d.ts.map +1 -0
  102. package/dist/components/ui/select.js +131 -0
  103. package/dist/components/ui/select.js.map +1 -0
  104. package/dist/components/ui/separator.d.ts +9 -0
  105. package/dist/components/ui/separator.d.ts.map +1 -0
  106. package/dist/components/ui/separator.js +50 -0
  107. package/dist/components/ui/separator.js.map +1 -0
  108. package/dist/components/ui/skeleton.d.ts +10 -0
  109. package/dist/components/ui/skeleton.d.ts.map +1 -0
  110. package/dist/components/ui/skeleton.js +30 -0
  111. package/dist/components/ui/skeleton.js.map +1 -0
  112. package/dist/components/ui/spinner.d.ts +14 -0
  113. package/dist/components/ui/spinner.d.ts.map +1 -0
  114. package/dist/components/ui/spinner.js +44 -0
  115. package/dist/components/ui/spinner.js.map +1 -0
  116. package/dist/components/ui/switch.d.ts +8 -0
  117. package/dist/components/ui/switch.d.ts.map +1 -0
  118. package/dist/components/ui/switch.js +43 -0
  119. package/dist/components/ui/switch.js.map +1 -0
  120. package/dist/components/ui/table.d.ts +11 -0
  121. package/dist/components/ui/table.d.ts.map +1 -0
  122. package/dist/components/ui/table.js +95 -0
  123. package/dist/components/ui/table.js.map +1 -0
  124. package/dist/components/ui/tabs.d.ts +20 -0
  125. package/dist/components/ui/tabs.d.ts.map +1 -0
  126. package/dist/components/ui/tabs.js +92 -0
  127. package/dist/components/ui/tabs.js.map +1 -0
  128. package/dist/components/ui/textarea.d.ts +12 -0
  129. package/dist/components/ui/textarea.d.ts.map +1 -0
  130. package/dist/components/ui/textarea.js +41 -0
  131. package/dist/components/ui/textarea.js.map +1 -0
  132. package/dist/components/ui/toast.d.ts +16 -0
  133. package/dist/components/ui/toast.d.ts.map +1 -0
  134. package/dist/components/ui/toast.js +113 -0
  135. package/dist/components/ui/toast.js.map +1 -0
  136. package/dist/components/ui/tooltip.d.ts +8 -0
  137. package/dist/components/ui/tooltip.d.ts.map +1 -0
  138. package/dist/components/ui/tooltip.js +28 -0
  139. package/dist/components/ui/tooltip.js.map +1 -0
  140. package/dist/hooks/use-debounce.d.ts +15 -0
  141. package/dist/hooks/use-debounce.d.ts.map +1 -0
  142. package/dist/hooks/use-debounce.js +15 -0
  143. package/dist/hooks/use-debounce.js.map +1 -0
  144. package/dist/hooks/use-local-storage.d.ts +9 -0
  145. package/dist/hooks/use-local-storage.d.ts.map +1 -0
  146. package/dist/hooks/use-local-storage.js +49 -0
  147. package/dist/hooks/use-local-storage.js.map +1 -0
  148. package/dist/hooks/use-media-query.d.ts +9 -0
  149. package/dist/hooks/use-media-query.d.ts.map +1 -0
  150. package/dist/hooks/use-media-query.js +20 -0
  151. package/dist/hooks/use-media-query.js.map +1 -0
  152. package/dist/index.d.ts +66 -0
  153. package/dist/index.d.ts.map +1 -0
  154. package/dist/index.js +153 -0
  155. package/dist/index.js.map +1 -0
  156. package/dist/lib/colors.d.ts +73 -0
  157. package/dist/lib/colors.d.ts.map +1 -0
  158. package/dist/lib/colors.js +64 -0
  159. package/dist/lib/colors.js.map +1 -0
  160. package/dist/lib/utils.d.ts +7 -0
  161. package/dist/lib/utils.d.ts.map +1 -0
  162. package/dist/lib/utils.js +9 -0
  163. package/dist/lib/utils.js.map +1 -0
  164. package/dist/node_modules/@floating-ui/core/dist/floating-ui.core.js +729 -0
  165. package/dist/node_modules/@floating-ui/core/dist/floating-ui.core.js.map +1 -0
  166. package/dist/node_modules/@floating-ui/dom/dist/floating-ui.dom.js +630 -0
  167. package/dist/node_modules/@floating-ui/dom/dist/floating-ui.dom.js.map +1 -0
  168. package/dist/node_modules/@floating-ui/react-dom/dist/floating-ui.react-dom.js +325 -0
  169. package/dist/node_modules/@floating-ui/react-dom/dist/floating-ui.react-dom.js.map +1 -0
  170. package/dist/node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.js +177 -0
  171. package/dist/node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.js.map +1 -0
  172. package/dist/node_modules/@floating-ui/utils/dist/floating-ui.utils.js +152 -0
  173. package/dist/node_modules/@floating-ui/utils/dist/floating-ui.utils.js.map +1 -0
  174. package/dist/node_modules/@radix-ui/number/dist/index.js +7 -0
  175. package/dist/node_modules/@radix-ui/number/dist/index.js.map +1 -0
  176. package/dist/node_modules/@radix-ui/primitive/dist/index.js +12 -0
  177. package/dist/node_modules/@radix-ui/primitive/dist/index.js.map +1 -0
  178. package/dist/node_modules/@radix-ui/react-accordion/dist/index.js +319 -0
  179. package/dist/node_modules/@radix-ui/react-accordion/dist/index.js.map +1 -0
  180. package/dist/node_modules/@radix-ui/react-arrow/dist/index.js +26 -0
  181. package/dist/node_modules/@radix-ui/react-arrow/dist/index.js.map +1 -0
  182. package/dist/node_modules/@radix-ui/react-avatar/dist/index.js +124 -0
  183. package/dist/node_modules/@radix-ui/react-avatar/dist/index.js.map +1 -0
  184. package/dist/node_modules/@radix-ui/react-avatar/node_modules/@radix-ui/react-context/dist/index.js +66 -0
  185. package/dist/node_modules/@radix-ui/react-avatar/node_modules/@radix-ui/react-context/dist/index.js.map +1 -0
  186. package/dist/node_modules/@radix-ui/react-avatar/node_modules/@radix-ui/react-primitive/dist/index.js +40 -0
  187. package/dist/node_modules/@radix-ui/react-avatar/node_modules/@radix-ui/react-primitive/dist/index.js.map +1 -0
  188. package/dist/node_modules/@radix-ui/react-checkbox/dist/index.js +280 -0
  189. package/dist/node_modules/@radix-ui/react-checkbox/dist/index.js.map +1 -0
  190. package/dist/node_modules/@radix-ui/react-collapsible/dist/index.js +152 -0
  191. package/dist/node_modules/@radix-ui/react-collapsible/dist/index.js.map +1 -0
  192. package/dist/node_modules/@radix-ui/react-collection/dist/index.js +71 -0
  193. package/dist/node_modules/@radix-ui/react-collection/dist/index.js.map +1 -0
  194. package/dist/node_modules/@radix-ui/react-collection/node_modules/@radix-ui/react-slot/dist/index.js +90 -0
  195. package/dist/node_modules/@radix-ui/react-collection/node_modules/@radix-ui/react-slot/dist/index.js.map +1 -0
  196. package/dist/node_modules/@radix-ui/react-compose-refs/dist/index.js +40 -0
  197. package/dist/node_modules/@radix-ui/react-compose-refs/dist/index.js.map +1 -0
  198. package/dist/node_modules/@radix-ui/react-context/dist/index.js +82 -0
  199. package/dist/node_modules/@radix-ui/react-context/dist/index.js.map +1 -0
  200. package/dist/node_modules/@radix-ui/react-dialog/dist/index.js +342 -0
  201. package/dist/node_modules/@radix-ui/react-dialog/dist/index.js.map +1 -0
  202. package/dist/node_modules/@radix-ui/react-dialog/node_modules/@radix-ui/react-slot/dist/index.js +90 -0
  203. package/dist/node_modules/@radix-ui/react-dialog/node_modules/@radix-ui/react-slot/dist/index.js.map +1 -0
  204. package/dist/node_modules/@radix-ui/react-direction/dist/index.js +11 -0
  205. package/dist/node_modules/@radix-ui/react-direction/dist/index.js.map +1 -0
  206. package/dist/node_modules/@radix-ui/react-dismissable-layer/dist/index.js +217 -0
  207. package/dist/node_modules/@radix-ui/react-dismissable-layer/dist/index.js.map +1 -0
  208. package/dist/node_modules/@radix-ui/react-dropdown-menu/dist/index.js +299 -0
  209. package/dist/node_modules/@radix-ui/react-dropdown-menu/dist/index.js.map +1 -0
  210. package/dist/node_modules/@radix-ui/react-focus-guards/dist/index.js +30 -0
  211. package/dist/node_modules/@radix-ui/react-focus-guards/dist/index.js.map +1 -0
  212. package/dist/node_modules/@radix-ui/react-focus-scope/dist/index.js +209 -0
  213. package/dist/node_modules/@radix-ui/react-focus-scope/dist/index.js.map +1 -0
  214. package/dist/node_modules/@radix-ui/react-id/dist/index.js +15 -0
  215. package/dist/node_modules/@radix-ui/react-id/dist/index.js.map +1 -0
  216. package/dist/node_modules/@radix-ui/react-label/dist/index.js +27 -0
  217. package/dist/node_modules/@radix-ui/react-label/dist/index.js.map +1 -0
  218. package/dist/node_modules/@radix-ui/react-label/node_modules/@radix-ui/react-primitive/dist/index.js +40 -0
  219. package/dist/node_modules/@radix-ui/react-label/node_modules/@radix-ui/react-primitive/dist/index.js.map +1 -0
  220. package/dist/node_modules/@radix-ui/react-menu/dist/index.js +881 -0
  221. package/dist/node_modules/@radix-ui/react-menu/dist/index.js.map +1 -0
  222. package/dist/node_modules/@radix-ui/react-menu/node_modules/@radix-ui/react-slot/dist/index.js +90 -0
  223. package/dist/node_modules/@radix-ui/react-menu/node_modules/@radix-ui/react-slot/dist/index.js.map +1 -0
  224. package/dist/node_modules/@radix-ui/react-popover/dist/index.js +314 -0
  225. package/dist/node_modules/@radix-ui/react-popover/dist/index.js.map +1 -0
  226. package/dist/node_modules/@radix-ui/react-popover/node_modules/@radix-ui/react-slot/dist/index.js +90 -0
  227. package/dist/node_modules/@radix-ui/react-popover/node_modules/@radix-ui/react-slot/dist/index.js.map +1 -0
  228. package/dist/node_modules/@radix-ui/react-popper/dist/index.js +294 -0
  229. package/dist/node_modules/@radix-ui/react-popper/dist/index.js.map +1 -0
  230. package/dist/node_modules/@radix-ui/react-portal/dist/index.js +19 -0
  231. package/dist/node_modules/@radix-ui/react-portal/dist/index.js.map +1 -0
  232. package/dist/node_modules/@radix-ui/react-presence/dist/index.js +130 -0
  233. package/dist/node_modules/@radix-ui/react-presence/dist/index.js.map +1 -0
  234. package/dist/node_modules/@radix-ui/react-primitive/dist/index.js +44 -0
  235. package/dist/node_modules/@radix-ui/react-primitive/dist/index.js.map +1 -0
  236. package/dist/node_modules/@radix-ui/react-primitive/node_modules/@radix-ui/react-slot/dist/index.js +90 -0
  237. package/dist/node_modules/@radix-ui/react-primitive/node_modules/@radix-ui/react-slot/dist/index.js.map +1 -0
  238. package/dist/node_modules/@radix-ui/react-progress/dist/index.js +97 -0
  239. package/dist/node_modules/@radix-ui/react-progress/dist/index.js.map +1 -0
  240. package/dist/node_modules/@radix-ui/react-progress/node_modules/@radix-ui/react-context/dist/index.js +66 -0
  241. package/dist/node_modules/@radix-ui/react-progress/node_modules/@radix-ui/react-context/dist/index.js.map +1 -0
  242. package/dist/node_modules/@radix-ui/react-progress/node_modules/@radix-ui/react-primitive/dist/index.js +40 -0
  243. package/dist/node_modules/@radix-ui/react-progress/node_modules/@radix-ui/react-primitive/dist/index.js.map +1 -0
  244. package/dist/node_modules/@radix-ui/react-roving-focus/dist/index.js +228 -0
  245. package/dist/node_modules/@radix-ui/react-roving-focus/dist/index.js.map +1 -0
  246. package/dist/node_modules/@radix-ui/react-scroll-area/dist/index.js +728 -0
  247. package/dist/node_modules/@radix-ui/react-scroll-area/dist/index.js.map +1 -0
  248. package/dist/node_modules/@radix-ui/react-select/dist/index.js +1200 -0
  249. package/dist/node_modules/@radix-ui/react-select/dist/index.js.map +1 -0
  250. package/dist/node_modules/@radix-ui/react-select/node_modules/@radix-ui/react-slot/dist/index.js +90 -0
  251. package/dist/node_modules/@radix-ui/react-select/node_modules/@radix-ui/react-slot/dist/index.js.map +1 -0
  252. package/dist/node_modules/@radix-ui/react-separator/dist/index.js +31 -0
  253. package/dist/node_modules/@radix-ui/react-separator/dist/index.js.map +1 -0
  254. package/dist/node_modules/@radix-ui/react-separator/node_modules/@radix-ui/react-primitive/dist/index.js +40 -0
  255. package/dist/node_modules/@radix-ui/react-separator/node_modules/@radix-ui/react-primitive/dist/index.js.map +1 -0
  256. package/dist/node_modules/@radix-ui/react-slot/dist/index.js +107 -0
  257. package/dist/node_modules/@radix-ui/react-slot/dist/index.js.map +1 -0
  258. package/dist/node_modules/@radix-ui/react-switch/dist/index.js +156 -0
  259. package/dist/node_modules/@radix-ui/react-switch/dist/index.js.map +1 -0
  260. package/dist/node_modules/@radix-ui/react-tabs/dist/index.js +195 -0
  261. package/dist/node_modules/@radix-ui/react-tabs/dist/index.js.map +1 -0
  262. package/dist/node_modules/@radix-ui/react-toast/dist/index.js +645 -0
  263. package/dist/node_modules/@radix-ui/react-toast/dist/index.js.map +1 -0
  264. package/dist/node_modules/@radix-ui/react-tooltip/dist/index.js +501 -0
  265. package/dist/node_modules/@radix-ui/react-tooltip/dist/index.js.map +1 -0
  266. package/dist/node_modules/@radix-ui/react-tooltip/node_modules/@radix-ui/react-slot/dist/index.js +16 -0
  267. package/dist/node_modules/@radix-ui/react-tooltip/node_modules/@radix-ui/react-slot/dist/index.js.map +1 -0
  268. package/dist/node_modules/@radix-ui/react-use-callback-ref/dist/index.js +15 -0
  269. package/dist/node_modules/@radix-ui/react-use-callback-ref/dist/index.js.map +1 -0
  270. package/dist/node_modules/@radix-ui/react-use-controllable-state/dist/index.js +72 -0
  271. package/dist/node_modules/@radix-ui/react-use-controllable-state/dist/index.js.map +1 -0
  272. package/dist/node_modules/@radix-ui/react-use-escape-keydown/dist/index.js +18 -0
  273. package/dist/node_modules/@radix-ui/react-use-escape-keydown/dist/index.js.map +1 -0
  274. package/dist/node_modules/@radix-ui/react-use-is-hydrated/dist/index.js +16 -0
  275. package/dist/node_modules/@radix-ui/react-use-is-hydrated/dist/index.js.map +1 -0
  276. package/dist/node_modules/@radix-ui/react-use-layout-effect/dist/index.js +7 -0
  277. package/dist/node_modules/@radix-ui/react-use-layout-effect/dist/index.js.map +1 -0
  278. package/dist/node_modules/@radix-ui/react-use-previous/dist/index.js +15 -0
  279. package/dist/node_modules/@radix-ui/react-use-previous/dist/index.js.map +1 -0
  280. package/dist/node_modules/@radix-ui/react-use-size/dist/index.js +40 -0
  281. package/dist/node_modules/@radix-ui/react-use-size/dist/index.js.map +1 -0
  282. package/dist/node_modules/@radix-ui/react-visually-hidden/dist/index.js +37 -0
  283. package/dist/node_modules/@radix-ui/react-visually-hidden/dist/index.js.map +1 -0
  284. package/dist/node_modules/aria-hidden/dist/es2015/index.js +123 -0
  285. package/dist/node_modules/aria-hidden/dist/es2015/index.js.map +1 -0
  286. package/dist/node_modules/class-variance-authority/dist/index.js +46 -0
  287. package/dist/node_modules/class-variance-authority/dist/index.js.map +1 -0
  288. package/dist/node_modules/clsx/dist/clsx.js +17 -0
  289. package/dist/node_modules/clsx/dist/clsx.js.map +1 -0
  290. package/dist/node_modules/get-nonce/dist/es2015/index.js +10 -0
  291. package/dist/node_modules/get-nonce/dist/es2015/index.js.map +1 -0
  292. package/dist/node_modules/lucide-react/dist/esm/Icon.js +43 -0
  293. package/dist/node_modules/lucide-react/dist/esm/Icon.js.map +1 -0
  294. package/dist/node_modules/lucide-react/dist/esm/createLucideIcon.js +25 -0
  295. package/dist/node_modules/lucide-react/dist/esm/createLucideIcon.js.map +1 -0
  296. package/dist/node_modules/lucide-react/dist/esm/defaultAttributes.js +21 -0
  297. package/dist/node_modules/lucide-react/dist/esm/defaultAttributes.js.map +1 -0
  298. package/dist/node_modules/lucide-react/dist/esm/icons/ban.js +15 -0
  299. package/dist/node_modules/lucide-react/dist/esm/icons/ban.js.map +1 -0
  300. package/dist/node_modules/lucide-react/dist/esm/icons/calendar.js +17 -0
  301. package/dist/node_modules/lucide-react/dist/esm/icons/calendar.js.map +1 -0
  302. package/dist/node_modules/lucide-react/dist/esm/icons/check.js +12 -0
  303. package/dist/node_modules/lucide-react/dist/esm/icons/check.js.map +1 -0
  304. package/dist/node_modules/lucide-react/dist/esm/icons/chevron-down.js +14 -0
  305. package/dist/node_modules/lucide-react/dist/esm/icons/chevron-down.js.map +1 -0
  306. package/dist/node_modules/lucide-react/dist/esm/icons/chevron-left.js +14 -0
  307. package/dist/node_modules/lucide-react/dist/esm/icons/chevron-left.js.map +1 -0
  308. package/dist/node_modules/lucide-react/dist/esm/icons/chevron-right.js +14 -0
  309. package/dist/node_modules/lucide-react/dist/esm/icons/chevron-right.js.map +1 -0
  310. package/dist/node_modules/lucide-react/dist/esm/icons/chevron-up.js +12 -0
  311. package/dist/node_modules/lucide-react/dist/esm/icons/chevron-up.js.map +1 -0
  312. package/dist/node_modules/lucide-react/dist/esm/icons/circle-alert.js +16 -0
  313. package/dist/node_modules/lucide-react/dist/esm/icons/circle-alert.js.map +1 -0
  314. package/dist/node_modules/lucide-react/dist/esm/icons/circle-check.js +15 -0
  315. package/dist/node_modules/lucide-react/dist/esm/icons/circle-check.js.map +1 -0
  316. package/dist/node_modules/lucide-react/dist/esm/icons/circle-minus.js +15 -0
  317. package/dist/node_modules/lucide-react/dist/esm/icons/circle-minus.js.map +1 -0
  318. package/dist/node_modules/lucide-react/dist/esm/icons/circle-x.js +16 -0
  319. package/dist/node_modules/lucide-react/dist/esm/icons/circle-x.js.map +1 -0
  320. package/dist/node_modules/lucide-react/dist/esm/icons/circle.js +14 -0
  321. package/dist/node_modules/lucide-react/dist/esm/icons/circle.js.map +1 -0
  322. package/dist/node_modules/lucide-react/dist/esm/icons/clock.js +15 -0
  323. package/dist/node_modules/lucide-react/dist/esm/icons/clock.js.map +1 -0
  324. package/dist/node_modules/lucide-react/dist/esm/icons/flag.js +15 -0
  325. package/dist/node_modules/lucide-react/dist/esm/icons/flag.js.map +1 -0
  326. package/dist/node_modules/lucide-react/dist/esm/icons/git-branch.js +17 -0
  327. package/dist/node_modules/lucide-react/dist/esm/icons/git-branch.js.map +1 -0
  328. package/dist/node_modules/lucide-react/dist/esm/icons/info.js +16 -0
  329. package/dist/node_modules/lucide-react/dist/esm/icons/info.js.map +1 -0
  330. package/dist/node_modules/lucide-react/dist/esm/icons/loader-circle.js +14 -0
  331. package/dist/node_modules/lucide-react/dist/esm/icons/loader-circle.js.map +1 -0
  332. package/dist/node_modules/lucide-react/dist/esm/icons/minus.js +12 -0
  333. package/dist/node_modules/lucide-react/dist/esm/icons/minus.js.map +1 -0
  334. package/dist/node_modules/lucide-react/dist/esm/icons/pause.js +15 -0
  335. package/dist/node_modules/lucide-react/dist/esm/icons/pause.js.map +1 -0
  336. package/dist/node_modules/lucide-react/dist/esm/icons/play.js +14 -0
  337. package/dist/node_modules/lucide-react/dist/esm/icons/play.js.map +1 -0
  338. package/dist/node_modules/lucide-react/dist/esm/icons/send.js +21 -0
  339. package/dist/node_modules/lucide-react/dist/esm/icons/send.js.map +1 -0
  340. package/dist/node_modules/lucide-react/dist/esm/icons/tag.js +21 -0
  341. package/dist/node_modules/lucide-react/dist/esm/icons/tag.js.map +1 -0
  342. package/dist/node_modules/lucide-react/dist/esm/icons/timer.js +16 -0
  343. package/dist/node_modules/lucide-react/dist/esm/icons/timer.js.map +1 -0
  344. package/dist/node_modules/lucide-react/dist/esm/icons/trending-down.js +15 -0
  345. package/dist/node_modules/lucide-react/dist/esm/icons/trending-down.js.map +1 -0
  346. package/dist/node_modules/lucide-react/dist/esm/icons/trending-up.js +15 -0
  347. package/dist/node_modules/lucide-react/dist/esm/icons/trending-up.js.map +1 -0
  348. package/dist/node_modules/lucide-react/dist/esm/icons/triangle-alert.js +22 -0
  349. package/dist/node_modules/lucide-react/dist/esm/icons/triangle-alert.js.map +1 -0
  350. package/dist/node_modules/lucide-react/dist/esm/icons/x.js +15 -0
  351. package/dist/node_modules/lucide-react/dist/esm/icons/x.js.map +1 -0
  352. package/dist/node_modules/lucide-react/dist/esm/icons/zap.js +20 -0
  353. package/dist/node_modules/lucide-react/dist/esm/icons/zap.js.map +1 -0
  354. package/dist/node_modules/lucide-react/dist/esm/shared/src/utils.js +15 -0
  355. package/dist/node_modules/lucide-react/dist/esm/shared/src/utils.js.map +1 -0
  356. package/dist/node_modules/react-remove-scroll/dist/es2015/Combination.js +12 -0
  357. package/dist/node_modules/react-remove-scroll/dist/es2015/Combination.js.map +1 -0
  358. package/dist/node_modules/react-remove-scroll/dist/es2015/SideEffect.js +181 -0
  359. package/dist/node_modules/react-remove-scroll/dist/es2015/SideEffect.js.map +1 -0
  360. package/dist/node_modules/react-remove-scroll/dist/es2015/UI.js +39 -0
  361. package/dist/node_modules/react-remove-scroll/dist/es2015/UI.js.map +1 -0
  362. package/dist/node_modules/react-remove-scroll/dist/es2015/aggresiveCapture.js +20 -0
  363. package/dist/node_modules/react-remove-scroll/dist/es2015/aggresiveCapture.js.map +1 -0
  364. package/dist/node_modules/react-remove-scroll/dist/es2015/handleScroll.js +103 -0
  365. package/dist/node_modules/react-remove-scroll/dist/es2015/handleScroll.js.map +1 -0
  366. package/dist/node_modules/react-remove-scroll/dist/es2015/medium.js +6 -0
  367. package/dist/node_modules/react-remove-scroll/dist/es2015/medium.js.map +1 -0
  368. package/dist/node_modules/react-remove-scroll/dist/es2015/sidecar.js +8 -0
  369. package/dist/node_modules/react-remove-scroll/dist/es2015/sidecar.js.map +1 -0
  370. package/dist/node_modules/react-remove-scroll-bar/dist/es2015/component.js +48 -0
  371. package/dist/node_modules/react-remove-scroll-bar/dist/es2015/component.js.map +1 -0
  372. package/dist/node_modules/react-remove-scroll-bar/dist/es2015/constants.js +11 -0
  373. package/dist/node_modules/react-remove-scroll-bar/dist/es2015/constants.js.map +1 -0
  374. package/dist/node_modules/react-remove-scroll-bar/dist/es2015/utils.js +38 -0
  375. package/dist/node_modules/react-remove-scroll-bar/dist/es2015/utils.js.map +1 -0
  376. package/dist/node_modules/react-style-singleton/dist/es2015/component.js +14 -0
  377. package/dist/node_modules/react-style-singleton/dist/es2015/component.js.map +1 -0
  378. package/dist/node_modules/react-style-singleton/dist/es2015/hook.js +17 -0
  379. package/dist/node_modules/react-style-singleton/dist/es2015/hook.js.map +1 -0
  380. package/dist/node_modules/react-style-singleton/dist/es2015/singleton.js +49 -0
  381. package/dist/node_modules/react-style-singleton/dist/es2015/singleton.js.map +1 -0
  382. package/dist/node_modules/tailwind-merge/dist/bundle-mjs.js +2467 -0
  383. package/dist/node_modules/tailwind-merge/dist/bundle-mjs.js.map +1 -0
  384. package/dist/node_modules/tslib/tslib.es6.js +40 -0
  385. package/dist/node_modules/tslib/tslib.es6.js.map +1 -0
  386. package/dist/node_modules/use-callback-ref/dist/es2015/assignRef.js +12 -0
  387. package/dist/node_modules/use-callback-ref/dist/es2015/assignRef.js.map +1 -0
  388. package/dist/node_modules/use-callback-ref/dist/es2015/useMergeRef.js +36 -0
  389. package/dist/node_modules/use-callback-ref/dist/es2015/useMergeRef.js.map +1 -0
  390. package/dist/node_modules/use-callback-ref/dist/es2015/useRef.js +30 -0
  391. package/dist/node_modules/use-callback-ref/dist/es2015/useRef.js.map +1 -0
  392. package/dist/node_modules/use-sidecar/dist/es2015/exports.js +22 -0
  393. package/dist/node_modules/use-sidecar/dist/es2015/exports.js.map +1 -0
  394. package/dist/node_modules/use-sidecar/dist/es2015/medium.js +89 -0
  395. package/dist/node_modules/use-sidecar/dist/es2015/medium.js.map +1 -0
  396. package/dist/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.development.js +78 -0
  397. package/dist/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.development.js.map +1 -0
  398. package/dist/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.production.js +63 -0
  399. package/dist/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.production.js.map +1 -0
  400. package/dist/node_modules/use-sync-external-store/shim/index.js +18 -0
  401. package/dist/node_modules/use-sync-external-store/shim/index.js.map +1 -0
  402. package/dist/types/automation.d.ts +59 -0
  403. package/dist/types/automation.d.ts.map +1 -0
  404. package/dist/types/common.d.ts +38 -0
  405. package/dist/types/common.d.ts.map +1 -0
  406. package/package.json +119 -0
  407. package/registry/registry.json +218 -0
  408. package/src/components/automation/metric-card.tsx +113 -0
  409. package/src/components/automation/status-badge.tsx +136 -0
  410. package/src/components/automation/task-card.tsx +164 -0
  411. package/src/components/automation/workflow-node.tsx +186 -0
  412. package/src/components/layout/app-shell.tsx +58 -0
  413. package/src/components/layout/header.tsx +39 -0
  414. package/src/components/layout/page-header.tsx +42 -0
  415. package/src/components/layout/sidebar.tsx +190 -0
  416. package/src/components/ui/accordion.tsx +57 -0
  417. package/src/components/ui/alert.tsx +93 -0
  418. package/src/components/ui/avatar.tsx +94 -0
  419. package/src/components/ui/badge.tsx +69 -0
  420. package/src/components/ui/button.tsx +106 -0
  421. package/src/components/ui/card.tsx +96 -0
  422. package/src/components/ui/checkbox.tsx +40 -0
  423. package/src/components/ui/dialog.tsx +129 -0
  424. package/src/components/ui/dropdown-menu.tsx +194 -0
  425. package/src/components/ui/input.tsx +80 -0
  426. package/src/components/ui/label.tsx +37 -0
  427. package/src/components/ui/popover.tsx +29 -0
  428. package/src/components/ui/progress.tsx +92 -0
  429. package/src/components/ui/scroll-area.tsx +43 -0
  430. package/src/components/ui/select.tsx +157 -0
  431. package/src/components/ui/separator.tsx +56 -0
  432. package/src/components/ui/skeleton.tsx +41 -0
  433. package/src/components/ui/spinner.tsx +50 -0
  434. package/src/components/ui/switch.tsx +46 -0
  435. package/src/components/ui/table.tsx +117 -0
  436. package/src/components/ui/tabs.tsx +107 -0
  437. package/src/components/ui/textarea.tsx +50 -0
  438. package/src/components/ui/toast.tsx +139 -0
  439. package/src/components/ui/tooltip.tsx +28 -0
  440. package/src/hooks/use-debounce.ts +28 -0
  441. package/src/hooks/use-local-storage.ts +63 -0
  442. package/src/hooks/use-media-query.ts +29 -0
  443. package/src/index.ts +197 -0
  444. package/src/lib/colors.ts +102 -0
  445. package/src/lib/utils.ts +10 -0
  446. package/src/styles/globals.css +230 -0
  447. package/src/types/automation.ts +74 -0
  448. package/src/types/common.ts +48 -0
  449. package/tailwind/preset.cjs +98 -0
  450. package/tailwind/preset.css +5 -0
  451. package/tailwind/preset.ts +159 -0
@@ -0,0 +1,194 @@
1
+ import * as React from 'react'
2
+ import * as DropdownMenuPrimitive from '@radix-ui/react-dropdown-menu'
3
+ import { Check, ChevronRight, Circle } from 'lucide-react'
4
+ import { cn } from '@/lib/utils'
5
+
6
+ const DropdownMenu = DropdownMenuPrimitive.Root
7
+ const DropdownMenuTrigger = DropdownMenuPrimitive.Trigger
8
+ const DropdownMenuGroup = DropdownMenuPrimitive.Group
9
+ const DropdownMenuPortal = DropdownMenuPrimitive.Portal
10
+ const DropdownMenuSub = DropdownMenuPrimitive.Sub
11
+ const DropdownMenuRadioGroup = DropdownMenuPrimitive.RadioGroup
12
+
13
+ const DropdownMenuSubTrigger = React.forwardRef<
14
+ React.ElementRef<typeof DropdownMenuPrimitive.SubTrigger>,
15
+ React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.SubTrigger> & {
16
+ inset?: boolean
17
+ }
18
+ >(({ className, inset, children, ...props }, ref) => (
19
+ <DropdownMenuPrimitive.SubTrigger
20
+ ref={ref}
21
+ className={cn(
22
+ 'flex cursor-default select-none items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-none',
23
+ 'focus:bg-accent data-[state=open]:bg-accent',
24
+ '[&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0',
25
+ inset && 'pl-8',
26
+ className
27
+ )}
28
+ {...props}
29
+ >
30
+ {children}
31
+ <ChevronRight className="ml-auto" />
32
+ </DropdownMenuPrimitive.SubTrigger>
33
+ ))
34
+ DropdownMenuSubTrigger.displayName = DropdownMenuPrimitive.SubTrigger.displayName
35
+
36
+ const DropdownMenuSubContent = React.forwardRef<
37
+ React.ElementRef<typeof DropdownMenuPrimitive.SubContent>,
38
+ React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.SubContent>
39
+ >(({ className, ...props }, ref) => (
40
+ <DropdownMenuPrimitive.SubContent
41
+ ref={ref}
42
+ className={cn(
43
+ 'z-50 min-w-[8rem] overflow-hidden rounded-md border border-border bg-popover p-1 text-popover-foreground shadow-lg',
44
+ 'data-[state=open]:animate-fade-in data-[state=closed]:animate-fade-in',
45
+ className
46
+ )}
47
+ {...props}
48
+ />
49
+ ))
50
+ DropdownMenuSubContent.displayName = DropdownMenuPrimitive.SubContent.displayName
51
+
52
+ const DropdownMenuContent = React.forwardRef<
53
+ React.ElementRef<typeof DropdownMenuPrimitive.Content>,
54
+ React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Content>
55
+ >(({ className, sideOffset = 4, ...props }, ref) => (
56
+ <DropdownMenuPrimitive.Portal>
57
+ <DropdownMenuPrimitive.Content
58
+ ref={ref}
59
+ sideOffset={sideOffset}
60
+ className={cn(
61
+ 'z-50 min-w-[8rem] overflow-hidden rounded-md border border-border bg-popover p-1 text-popover-foreground shadow-md',
62
+ 'data-[state=open]:animate-fade-in',
63
+ className
64
+ )}
65
+ {...props}
66
+ />
67
+ </DropdownMenuPrimitive.Portal>
68
+ ))
69
+ DropdownMenuContent.displayName = DropdownMenuPrimitive.Content.displayName
70
+
71
+ const DropdownMenuItem = React.forwardRef<
72
+ React.ElementRef<typeof DropdownMenuPrimitive.Item>,
73
+ React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Item> & {
74
+ inset?: boolean
75
+ destructive?: boolean
76
+ }
77
+ >(({ className, inset, destructive, ...props }, ref) => (
78
+ <DropdownMenuPrimitive.Item
79
+ ref={ref}
80
+ className={cn(
81
+ 'relative flex cursor-default select-none items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-none',
82
+ 'transition-colors duration-100',
83
+ 'focus:bg-accent focus:text-accent-foreground',
84
+ 'data-[disabled]:pointer-events-none data-[disabled]:opacity-50',
85
+ '[&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0',
86
+ inset && 'pl-8',
87
+ destructive && 'text-destructive focus:bg-destructive/10 focus:text-destructive',
88
+ className
89
+ )}
90
+ {...props}
91
+ />
92
+ ))
93
+ DropdownMenuItem.displayName = DropdownMenuPrimitive.Item.displayName
94
+
95
+ const DropdownMenuCheckboxItem = React.forwardRef<
96
+ React.ElementRef<typeof DropdownMenuPrimitive.CheckboxItem>,
97
+ React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.CheckboxItem>
98
+ >(({ className, children, checked, ...props }, ref) => (
99
+ <DropdownMenuPrimitive.CheckboxItem
100
+ ref={ref}
101
+ className={cn(
102
+ 'relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none',
103
+ 'transition-colors duration-100',
104
+ 'focus:bg-accent focus:text-accent-foreground',
105
+ 'data-[disabled]:pointer-events-none data-[disabled]:opacity-50',
106
+ className
107
+ )}
108
+ checked={checked}
109
+ {...props}
110
+ >
111
+ <span className="absolute left-2 flex h-3.5 w-3.5 items-center justify-center">
112
+ <DropdownMenuPrimitive.ItemIndicator>
113
+ <Check className="h-4 w-4 text-primary" />
114
+ </DropdownMenuPrimitive.ItemIndicator>
115
+ </span>
116
+ {children}
117
+ </DropdownMenuPrimitive.CheckboxItem>
118
+ ))
119
+ DropdownMenuCheckboxItem.displayName = DropdownMenuPrimitive.CheckboxItem.displayName
120
+
121
+ const DropdownMenuRadioItem = React.forwardRef<
122
+ React.ElementRef<typeof DropdownMenuPrimitive.RadioItem>,
123
+ React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.RadioItem>
124
+ >(({ className, children, ...props }, ref) => (
125
+ <DropdownMenuPrimitive.RadioItem
126
+ ref={ref}
127
+ className={cn(
128
+ 'relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none',
129
+ 'transition-colors duration-100',
130
+ 'focus:bg-accent focus:text-accent-foreground',
131
+ 'data-[disabled]:pointer-events-none data-[disabled]:opacity-50',
132
+ className
133
+ )}
134
+ {...props}
135
+ >
136
+ <span className="absolute left-2 flex h-3.5 w-3.5 items-center justify-center">
137
+ <DropdownMenuPrimitive.ItemIndicator>
138
+ <Circle className="h-2 w-2 fill-primary text-primary" />
139
+ </DropdownMenuPrimitive.ItemIndicator>
140
+ </span>
141
+ {children}
142
+ </DropdownMenuPrimitive.RadioItem>
143
+ ))
144
+ DropdownMenuRadioItem.displayName = DropdownMenuPrimitive.RadioItem.displayName
145
+
146
+ const DropdownMenuLabel = React.forwardRef<
147
+ React.ElementRef<typeof DropdownMenuPrimitive.Label>,
148
+ React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Label> & { inset?: boolean }
149
+ >(({ className, inset, ...props }, ref) => (
150
+ <DropdownMenuPrimitive.Label
151
+ ref={ref}
152
+ className={cn('px-2 py-1.5 text-xs font-semibold text-muted-foreground', inset && 'pl-8', className)}
153
+ {...props}
154
+ />
155
+ ))
156
+ DropdownMenuLabel.displayName = DropdownMenuPrimitive.Label.displayName
157
+
158
+ const DropdownMenuSeparator = React.forwardRef<
159
+ React.ElementRef<typeof DropdownMenuPrimitive.Separator>,
160
+ React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Separator>
161
+ >(({ className, ...props }, ref) => (
162
+ <DropdownMenuPrimitive.Separator
163
+ ref={ref}
164
+ className={cn('-mx-1 my-1 h-px bg-border', className)}
165
+ {...props}
166
+ />
167
+ ))
168
+ DropdownMenuSeparator.displayName = DropdownMenuPrimitive.Separator.displayName
169
+
170
+ const DropdownMenuShortcut = ({ className, ...props }: React.HTMLAttributes<HTMLSpanElement>) => (
171
+ <span
172
+ className={cn('ml-auto text-xs tracking-widest text-muted-foreground font-mono', className)}
173
+ {...props}
174
+ />
175
+ )
176
+ DropdownMenuShortcut.displayName = 'DropdownMenuShortcut'
177
+
178
+ export {
179
+ DropdownMenu,
180
+ DropdownMenuTrigger,
181
+ DropdownMenuContent,
182
+ DropdownMenuItem,
183
+ DropdownMenuCheckboxItem,
184
+ DropdownMenuRadioItem,
185
+ DropdownMenuLabel,
186
+ DropdownMenuSeparator,
187
+ DropdownMenuShortcut,
188
+ DropdownMenuGroup,
189
+ DropdownMenuPortal,
190
+ DropdownMenuSub,
191
+ DropdownMenuSubContent,
192
+ DropdownMenuSubTrigger,
193
+ DropdownMenuRadioGroup,
194
+ }
@@ -0,0 +1,80 @@
1
+ import * as React from 'react'
2
+ import { cn } from '@/lib/utils'
3
+
4
+ export interface InputProps extends React.InputHTMLAttributes<HTMLInputElement> {
5
+ /** Icon to render on the left side of the input */
6
+ startIcon?: React.ReactNode
7
+ /** Icon or element to render on the right side of the input */
8
+ endIcon?: React.ReactNode
9
+ /** Error state — applies red ring */
10
+ error?: boolean
11
+ /** Error message shown below the input */
12
+ errorMessage?: string
13
+ }
14
+
15
+ const Input = React.forwardRef<HTMLInputElement, InputProps>(
16
+ ({ className, type, startIcon, endIcon, error, errorMessage, ...props }, ref) => {
17
+ if (startIcon || endIcon) {
18
+ return (
19
+ <div className="relative flex items-center w-full">
20
+ {startIcon && (
21
+ <div className="pointer-events-none absolute left-3 flex items-center text-muted-foreground [&_svg]:size-4">
22
+ {startIcon}
23
+ </div>
24
+ )}
25
+ <input
26
+ type={type}
27
+ className={cn(
28
+ 'flex h-9 w-full rounded-md border border-input bg-transparent px-3 py-1 text-sm shadow-sm',
29
+ 'file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground',
30
+ 'placeholder:text-muted-foreground',
31
+ 'transition-colors duration-150',
32
+ 'focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring',
33
+ 'disabled:cursor-not-allowed disabled:opacity-50',
34
+ error && 'border-destructive focus-visible:ring-destructive',
35
+ startIcon && 'pl-9',
36
+ endIcon && 'pr-9',
37
+ className
38
+ )}
39
+ ref={ref}
40
+ {...props}
41
+ />
42
+ {endIcon && (
43
+ <div className="pointer-events-none absolute right-3 flex items-center text-muted-foreground [&_svg]:size-4">
44
+ {endIcon}
45
+ </div>
46
+ )}
47
+ {errorMessage && (
48
+ <p className="mt-1 text-xs text-destructive absolute -bottom-5 left-0">{errorMessage}</p>
49
+ )}
50
+ </div>
51
+ )
52
+ }
53
+
54
+ return (
55
+ <div className="w-full">
56
+ <input
57
+ type={type}
58
+ className={cn(
59
+ 'flex h-9 w-full rounded-md border border-input bg-transparent px-3 py-1 text-sm shadow-sm',
60
+ 'file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground',
61
+ 'placeholder:text-muted-foreground',
62
+ 'transition-colors duration-150',
63
+ 'focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring',
64
+ 'disabled:cursor-not-allowed disabled:opacity-50',
65
+ error && 'border-destructive focus-visible:ring-destructive',
66
+ className
67
+ )}
68
+ ref={ref}
69
+ {...props}
70
+ />
71
+ {errorMessage && (
72
+ <p className="mt-1 text-xs text-destructive">{errorMessage}</p>
73
+ )}
74
+ </div>
75
+ )
76
+ }
77
+ )
78
+ Input.displayName = 'Input'
79
+
80
+ export { Input }
@@ -0,0 +1,37 @@
1
+ import * as React from 'react'
2
+ import * as LabelPrimitive from '@radix-ui/react-label'
3
+ import { cva, type VariantProps } from 'class-variance-authority'
4
+ import { cn } from '@/lib/utils'
5
+
6
+ const labelVariants = cva(
7
+ 'text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70'
8
+ )
9
+
10
+ export interface LabelProps
11
+ extends React.ComponentPropsWithoutRef<typeof LabelPrimitive.Root>,
12
+ VariantProps<typeof labelVariants> {
13
+ /** Shows a red asterisk to indicate required */
14
+ required?: boolean
15
+ /** Shows an optional badge */
16
+ optional?: boolean
17
+ }
18
+
19
+ const Label = React.forwardRef<
20
+ React.ElementRef<typeof LabelPrimitive.Root>,
21
+ LabelProps
22
+ >(({ className, required, optional, children, ...props }, ref) => (
23
+ <LabelPrimitive.Root
24
+ ref={ref}
25
+ className={cn(labelVariants(), className)}
26
+ {...props}
27
+ >
28
+ {children}
29
+ {required && <span className="ml-1 text-destructive" aria-hidden="true">*</span>}
30
+ {optional && (
31
+ <span className="ml-1.5 text-xs text-muted-foreground font-normal">(optional)</span>
32
+ )}
33
+ </LabelPrimitive.Root>
34
+ ))
35
+ Label.displayName = LabelPrimitive.Root.displayName
36
+
37
+ export { Label }
@@ -0,0 +1,29 @@
1
+ import * as React from 'react'
2
+ import * as PopoverPrimitive from '@radix-ui/react-popover'
3
+ import { cn } from '@/lib/utils'
4
+
5
+ const Popover = PopoverPrimitive.Root
6
+ const PopoverTrigger = PopoverPrimitive.Trigger
7
+ const PopoverAnchor = PopoverPrimitive.Anchor
8
+
9
+ const PopoverContent = React.forwardRef<
10
+ React.ElementRef<typeof PopoverPrimitive.Content>,
11
+ React.ComponentPropsWithoutRef<typeof PopoverPrimitive.Content>
12
+ >(({ className, align = 'center', sideOffset = 4, ...props }, ref) => (
13
+ <PopoverPrimitive.Portal>
14
+ <PopoverPrimitive.Content
15
+ ref={ref}
16
+ align={align}
17
+ sideOffset={sideOffset}
18
+ className={cn(
19
+ 'z-50 w-72 rounded-md border border-border bg-popover p-4 text-popover-foreground shadow-md outline-none',
20
+ 'data-[state=open]:animate-fade-in',
21
+ className
22
+ )}
23
+ {...props}
24
+ />
25
+ </PopoverPrimitive.Portal>
26
+ ))
27
+ PopoverContent.displayName = PopoverPrimitive.Content.displayName
28
+
29
+ export { Popover, PopoverTrigger, PopoverContent, PopoverAnchor }
@@ -0,0 +1,92 @@
1
+ import * as React from 'react'
2
+ import * as ProgressPrimitive from '@radix-ui/react-progress'
3
+ import { cva, type VariantProps } from 'class-variance-authority'
4
+ import { cn } from '@/lib/utils'
5
+
6
+ const progressVariants = cva(
7
+ 'relative overflow-hidden rounded-full bg-muted',
8
+ {
9
+ variants: {
10
+ size: {
11
+ xs: 'h-1',
12
+ sm: 'h-1.5',
13
+ md: 'h-2',
14
+ lg: 'h-3',
15
+ xl: 'h-4',
16
+ },
17
+ },
18
+ defaultVariants: {
19
+ size: 'md',
20
+ },
21
+ }
22
+ )
23
+
24
+ export interface ProgressProps
25
+ extends React.ComponentPropsWithoutRef<typeof ProgressPrimitive.Root>,
26
+ VariantProps<typeof progressVariants> {
27
+ /** Color variant for the progress indicator */
28
+ color?: 'primary' | 'success' | 'warning' | 'destructive' | 'info'
29
+ /** Show percentage label */
30
+ showLabel?: boolean
31
+ /** Label position */
32
+ labelPosition?: 'inside' | 'right' | 'top'
33
+ }
34
+
35
+ const Progress = React.forwardRef<
36
+ React.ElementRef<typeof ProgressPrimitive.Root>,
37
+ ProgressProps
38
+ >(({ className, value, size, color = 'primary', showLabel = false, labelPosition = 'right', ...props }, ref) => {
39
+ const indicatorColor = {
40
+ primary: 'bg-primary',
41
+ success: 'bg-success',
42
+ warning: 'bg-warning',
43
+ destructive: 'bg-destructive',
44
+ info: 'bg-info',
45
+ }[color]
46
+
47
+ const label = showLabel ? `${Math.round(value ?? 0)}%` : null
48
+
49
+ if (showLabel && labelPosition === 'top') {
50
+ return (
51
+ <div className="w-full space-y-1.5">
52
+ <div className="flex justify-between text-xs text-muted-foreground">
53
+ <span>Progress</span>
54
+ <span className="font-medium text-foreground">{label}</span>
55
+ </div>
56
+ <ProgressPrimitive.Root
57
+ ref={ref}
58
+ className={cn(progressVariants({ size }), className)}
59
+ {...props}
60
+ value={value}
61
+ >
62
+ <ProgressPrimitive.Indicator
63
+ className={cn('h-full w-full flex-1 transition-all duration-500 ease-out', indicatorColor)}
64
+ style={{ transform: `translateX(-${100 - (value ?? 0)}%)` }}
65
+ />
66
+ </ProgressPrimitive.Root>
67
+ </div>
68
+ )
69
+ }
70
+
71
+ return (
72
+ <div className={cn('flex items-center gap-2', showLabel && labelPosition === 'right' ? 'w-full' : '')}>
73
+ <ProgressPrimitive.Root
74
+ ref={ref}
75
+ className={cn(progressVariants({ size }), 'flex-1', className)}
76
+ {...props}
77
+ value={value}
78
+ >
79
+ <ProgressPrimitive.Indicator
80
+ className={cn('h-full w-full flex-1 transition-all duration-500 ease-out', indicatorColor)}
81
+ style={{ transform: `translateX(-${100 - (value ?? 0)}%)` }}
82
+ />
83
+ </ProgressPrimitive.Root>
84
+ {showLabel && labelPosition === 'right' && (
85
+ <span className="text-xs font-medium text-muted-foreground w-8 text-right">{label}</span>
86
+ )}
87
+ </div>
88
+ )
89
+ })
90
+ Progress.displayName = ProgressPrimitive.Root.displayName
91
+
92
+ export { Progress }
@@ -0,0 +1,43 @@
1
+ import * as React from 'react'
2
+ import * as ScrollAreaPrimitive from '@radix-ui/react-scroll-area'
3
+ import { cn } from '@/lib/utils'
4
+
5
+ const ScrollArea = React.forwardRef<
6
+ React.ElementRef<typeof ScrollAreaPrimitive.Root>,
7
+ React.ComponentPropsWithoutRef<typeof ScrollAreaPrimitive.Root>
8
+ >(({ className, children, ...props }, ref) => (
9
+ <ScrollAreaPrimitive.Root
10
+ ref={ref}
11
+ className={cn('relative overflow-hidden', className)}
12
+ {...props}
13
+ >
14
+ <ScrollAreaPrimitive.Viewport className="h-full w-full rounded-[inherit]">
15
+ {children}
16
+ </ScrollAreaPrimitive.Viewport>
17
+ <ScrollBar />
18
+ <ScrollAreaPrimitive.Corner />
19
+ </ScrollAreaPrimitive.Root>
20
+ ))
21
+ ScrollArea.displayName = ScrollAreaPrimitive.Root.displayName
22
+
23
+ const ScrollBar = React.forwardRef<
24
+ React.ElementRef<typeof ScrollAreaPrimitive.ScrollAreaScrollbar>,
25
+ React.ComponentPropsWithoutRef<typeof ScrollAreaPrimitive.ScrollAreaScrollbar>
26
+ >(({ className, orientation = 'vertical', ...props }, ref) => (
27
+ <ScrollAreaPrimitive.ScrollAreaScrollbar
28
+ ref={ref}
29
+ orientation={orientation}
30
+ className={cn(
31
+ 'flex touch-none select-none transition-colors',
32
+ orientation === 'vertical' && 'h-full w-2.5 border-l border-l-transparent p-[1px]',
33
+ orientation === 'horizontal' && 'h-2.5 flex-col border-t border-t-transparent p-[1px]',
34
+ className
35
+ )}
36
+ {...props}
37
+ >
38
+ <ScrollAreaPrimitive.ScrollAreaThumb className="relative flex-1 rounded-full bg-border" />
39
+ </ScrollAreaPrimitive.ScrollAreaScrollbar>
40
+ ))
41
+ ScrollBar.displayName = ScrollAreaPrimitive.ScrollAreaScrollbar.displayName
42
+
43
+ export { ScrollArea, ScrollBar }
@@ -0,0 +1,157 @@
1
+ import * as React from 'react'
2
+ import * as SelectPrimitive from '@radix-ui/react-select'
3
+ import { Check, ChevronDown, ChevronUp } from 'lucide-react'
4
+ import { cn } from '@/lib/utils'
5
+
6
+ const Select = SelectPrimitive.Root
7
+ const SelectGroup = SelectPrimitive.Group
8
+ const SelectValue = SelectPrimitive.Value
9
+
10
+ const SelectTrigger = React.forwardRef<
11
+ React.ElementRef<typeof SelectPrimitive.Trigger>,
12
+ React.ComponentPropsWithoutRef<typeof SelectPrimitive.Trigger> & { error?: boolean }
13
+ >(({ className, children, error, ...props }, ref) => (
14
+ <SelectPrimitive.Trigger
15
+ ref={ref}
16
+ className={cn(
17
+ 'flex h-9 w-full items-center justify-between whitespace-nowrap rounded-md border border-input bg-transparent px-3 py-2 text-sm shadow-sm',
18
+ 'ring-offset-background',
19
+ 'placeholder:text-muted-foreground',
20
+ 'focus:outline-none focus:ring-1 focus:ring-ring',
21
+ 'disabled:cursor-not-allowed disabled:opacity-50',
22
+ '[&>span]:line-clamp-1',
23
+ 'transition-colors duration-150',
24
+ error && 'border-destructive focus:ring-destructive',
25
+ className
26
+ )}
27
+ {...props}
28
+ >
29
+ {children}
30
+ <SelectPrimitive.Icon asChild>
31
+ <ChevronDown className="h-4 w-4 opacity-50 shrink-0" />
32
+ </SelectPrimitive.Icon>
33
+ </SelectPrimitive.Trigger>
34
+ ))
35
+ SelectTrigger.displayName = SelectPrimitive.Trigger.displayName
36
+
37
+ const SelectScrollUpButton = React.forwardRef<
38
+ React.ElementRef<typeof SelectPrimitive.ScrollUpButton>,
39
+ React.ComponentPropsWithoutRef<typeof SelectPrimitive.ScrollUpButton>
40
+ >(({ className, ...props }, ref) => (
41
+ <SelectPrimitive.ScrollUpButton
42
+ ref={ref}
43
+ className={cn('flex cursor-default items-center justify-center py-1', className)}
44
+ {...props}
45
+ >
46
+ <ChevronUp className="h-4 w-4" />
47
+ </SelectPrimitive.ScrollUpButton>
48
+ ))
49
+ SelectScrollUpButton.displayName = SelectPrimitive.ScrollUpButton.displayName
50
+
51
+ const SelectScrollDownButton = React.forwardRef<
52
+ React.ElementRef<typeof SelectPrimitive.ScrollDownButton>,
53
+ React.ComponentPropsWithoutRef<typeof SelectPrimitive.ScrollDownButton>
54
+ >(({ className, ...props }, ref) => (
55
+ <SelectPrimitive.ScrollDownButton
56
+ ref={ref}
57
+ className={cn('flex cursor-default items-center justify-center py-1', className)}
58
+ {...props}
59
+ >
60
+ <ChevronDown className="h-4 w-4" />
61
+ </SelectPrimitive.ScrollDownButton>
62
+ ))
63
+ SelectScrollDownButton.displayName = SelectPrimitive.ScrollDownButton.displayName
64
+
65
+ const SelectContent = React.forwardRef<
66
+ React.ElementRef<typeof SelectPrimitive.Content>,
67
+ React.ComponentPropsWithoutRef<typeof SelectPrimitive.Content>
68
+ >(({ className, children, position = 'popper', ...props }, ref) => (
69
+ <SelectPrimitive.Portal>
70
+ <SelectPrimitive.Content
71
+ ref={ref}
72
+ className={cn(
73
+ 'relative z-50 max-h-96 min-w-[8rem] overflow-hidden rounded-md border border-border bg-popover text-popover-foreground shadow-md',
74
+ 'data-[state=open]:animate-fade-in data-[state=closed]:animate-fade-in',
75
+ position === 'popper' &&
76
+ 'data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1',
77
+ className
78
+ )}
79
+ position={position}
80
+ {...props}
81
+ >
82
+ <SelectScrollUpButton />
83
+ <SelectPrimitive.Viewport
84
+ className={cn(
85
+ 'p-1',
86
+ position === 'popper' &&
87
+ 'h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)]'
88
+ )}
89
+ >
90
+ {children}
91
+ </SelectPrimitive.Viewport>
92
+ <SelectScrollDownButton />
93
+ </SelectPrimitive.Content>
94
+ </SelectPrimitive.Portal>
95
+ ))
96
+ SelectContent.displayName = SelectPrimitive.Content.displayName
97
+
98
+ const SelectLabel = React.forwardRef<
99
+ React.ElementRef<typeof SelectPrimitive.Label>,
100
+ React.ComponentPropsWithoutRef<typeof SelectPrimitive.Label>
101
+ >(({ className, ...props }, ref) => (
102
+ <SelectPrimitive.Label
103
+ ref={ref}
104
+ className={cn('px-2 py-1.5 text-xs font-semibold text-muted-foreground', className)}
105
+ {...props}
106
+ />
107
+ ))
108
+ SelectLabel.displayName = SelectPrimitive.Label.displayName
109
+
110
+ const SelectItem = React.forwardRef<
111
+ React.ElementRef<typeof SelectPrimitive.Item>,
112
+ React.ComponentPropsWithoutRef<typeof SelectPrimitive.Item>
113
+ >(({ className, children, ...props }, ref) => (
114
+ <SelectPrimitive.Item
115
+ ref={ref}
116
+ className={cn(
117
+ 'relative flex w-full cursor-default select-none items-center rounded-sm py-1.5 pl-2 pr-8 text-sm outline-none',
118
+ 'focus:bg-accent focus:text-accent-foreground',
119
+ 'data-[disabled]:pointer-events-none data-[disabled]:opacity-50',
120
+ className
121
+ )}
122
+ {...props}
123
+ >
124
+ <span className="absolute right-2 flex h-3.5 w-3.5 items-center justify-center">
125
+ <SelectPrimitive.ItemIndicator>
126
+ <Check className="h-4 w-4 text-primary" />
127
+ </SelectPrimitive.ItemIndicator>
128
+ </span>
129
+ <SelectPrimitive.ItemText>{children}</SelectPrimitive.ItemText>
130
+ </SelectPrimitive.Item>
131
+ ))
132
+ SelectItem.displayName = SelectPrimitive.Item.displayName
133
+
134
+ const SelectSeparator = React.forwardRef<
135
+ React.ElementRef<typeof SelectPrimitive.Separator>,
136
+ React.ComponentPropsWithoutRef<typeof SelectPrimitive.Separator>
137
+ >(({ className, ...props }, ref) => (
138
+ <SelectPrimitive.Separator
139
+ ref={ref}
140
+ className={cn('-mx-1 my-1 h-px bg-border', className)}
141
+ {...props}
142
+ />
143
+ ))
144
+ SelectSeparator.displayName = SelectPrimitive.Separator.displayName
145
+
146
+ export {
147
+ Select,
148
+ SelectGroup,
149
+ SelectValue,
150
+ SelectTrigger,
151
+ SelectContent,
152
+ SelectLabel,
153
+ SelectItem,
154
+ SelectSeparator,
155
+ SelectScrollUpButton,
156
+ SelectScrollDownButton,
157
+ }
@@ -0,0 +1,56 @@
1
+ import * as React from 'react'
2
+ import * as SeparatorPrimitive from '@radix-ui/react-separator'
3
+ import { cn } from '@/lib/utils'
4
+
5
+ export interface SeparatorProps
6
+ extends React.ComponentPropsWithoutRef<typeof SeparatorPrimitive.Root> {
7
+ /** Optional label displayed in the center of the separator */
8
+ label?: React.ReactNode
9
+ }
10
+
11
+ const Separator = React.forwardRef<
12
+ React.ElementRef<typeof SeparatorPrimitive.Root>,
13
+ SeparatorProps
14
+ >(
15
+ (
16
+ { className, orientation = 'horizontal', decorative = true, label, ...props },
17
+ ref
18
+ ) => {
19
+ if (label && orientation === 'horizontal') {
20
+ return (
21
+ <div className={cn('flex items-center gap-3', className)}>
22
+ <SeparatorPrimitive.Root
23
+ ref={ref}
24
+ decorative={decorative}
25
+ orientation={orientation}
26
+ className="flex-1 shrink-0 bg-border h-[1px]"
27
+ {...props}
28
+ />
29
+ <span className="text-xs text-muted-foreground whitespace-nowrap">{label}</span>
30
+ <SeparatorPrimitive.Root
31
+ decorative={decorative}
32
+ orientation={orientation}
33
+ className="flex-1 shrink-0 bg-border h-[1px]"
34
+ />
35
+ </div>
36
+ )
37
+ }
38
+
39
+ return (
40
+ <SeparatorPrimitive.Root
41
+ ref={ref}
42
+ decorative={decorative}
43
+ orientation={orientation}
44
+ className={cn(
45
+ 'shrink-0 bg-border',
46
+ orientation === 'horizontal' ? 'h-[1px] w-full' : 'h-full w-[1px]',
47
+ className
48
+ )}
49
+ {...props}
50
+ />
51
+ )
52
+ }
53
+ )
54
+ Separator.displayName = SeparatorPrimitive.Root.displayName
55
+
56
+ export { Separator }