@framingui/ui 0.6.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 (383) hide show
  1. package/README.md +1132 -0
  2. package/dist/index.d.mts +719 -0
  3. package/dist/index.mjs +3509 -0
  4. package/dist/src/components/alert-dialog.d.ts +21 -0
  5. package/dist/src/components/alert-dialog.d.ts.map +1 -0
  6. package/dist/src/components/alert-dialog.js +26 -0
  7. package/dist/src/components/alert-dialog.js.map +1 -0
  8. package/dist/src/components/alert-dialog.stories.d.ts +22 -0
  9. package/dist/src/components/alert-dialog.stories.d.ts.map +1 -0
  10. package/dist/src/components/alert-dialog.stories.js +22 -0
  11. package/dist/src/components/alert-dialog.stories.js.map +1 -0
  12. package/dist/src/components/avatar.d.ts +7 -0
  13. package/dist/src/components/avatar.d.ts.map +1 -0
  14. package/dist/src/components/avatar.js +12 -0
  15. package/dist/src/components/avatar.js.map +1 -0
  16. package/dist/src/components/avatar.stories.d.ts +38 -0
  17. package/dist/src/components/avatar.stories.d.ts.map +1 -0
  18. package/dist/src/components/avatar.stories.js +33 -0
  19. package/dist/src/components/avatar.stories.js.map +1 -0
  20. package/dist/src/components/badge.d.ts +10 -0
  21. package/dist/src/components/badge.d.ts.map +1 -0
  22. package/dist/src/components/badge.js +21 -0
  23. package/dist/src/components/badge.js.map +1 -0
  24. package/dist/src/components/badge.stories.d.ts +73 -0
  25. package/dist/src/components/badge.stories.d.ts.map +1 -0
  26. package/dist/src/components/badge.stories.js +60 -0
  27. package/dist/src/components/badge.stories.js.map +1 -0
  28. package/dist/src/components/breadcrumb.d.ts +27 -0
  29. package/dist/src/components/breadcrumb.d.ts.map +1 -0
  30. package/dist/src/components/breadcrumb.js +60 -0
  31. package/dist/src/components/breadcrumb.js.map +1 -0
  32. package/dist/src/components/breadcrumb.stories.d.ts +49 -0
  33. package/dist/src/components/breadcrumb.stories.d.ts.map +1 -0
  34. package/dist/src/components/breadcrumb.stories.js +43 -0
  35. package/dist/src/components/breadcrumb.stories.js.map +1 -0
  36. package/dist/src/components/button.d.ts +12 -0
  37. package/dist/src/components/button.d.ts.map +1 -0
  38. package/dist/src/components/button.js +34 -0
  39. package/dist/src/components/button.js.map +1 -0
  40. package/dist/src/components/button.stories.d.ts +134 -0
  41. package/dist/src/components/button.stories.d.ts.map +1 -0
  42. package/dist/src/components/button.stories.js +101 -0
  43. package/dist/src/components/button.stories.js.map +1 -0
  44. package/dist/src/components/calendar.d.ts +8 -0
  45. package/dist/src/components/calendar.d.ts.map +1 -0
  46. package/dist/src/components/calendar.js +39 -0
  47. package/dist/src/components/calendar.js.map +1 -0
  48. package/dist/src/components/calendar.stories.d.ts +46 -0
  49. package/dist/src/components/calendar.stories.d.ts.map +1 -0
  50. package/dist/src/components/calendar.stories.js +88 -0
  51. package/dist/src/components/calendar.stories.js.map +1 -0
  52. package/dist/src/components/card.d.ts +9 -0
  53. package/dist/src/components/card.d.ts.map +1 -0
  54. package/dist/src/components/card.js +17 -0
  55. package/dist/src/components/card.js.map +1 -0
  56. package/dist/src/components/card.stories.d.ts +46 -0
  57. package/dist/src/components/card.stories.d.ts.map +1 -0
  58. package/dist/src/components/card.stories.js +40 -0
  59. package/dist/src/components/card.stories.js.map +1 -0
  60. package/dist/src/components/checkbox.d.ts +5 -0
  61. package/dist/src/components/checkbox.d.ts.map +1 -0
  62. package/dist/src/components/checkbox.js +9 -0
  63. package/dist/src/components/checkbox.js.map +1 -0
  64. package/dist/src/components/checkbox.stories.d.ts +50 -0
  65. package/dist/src/components/checkbox.stories.d.ts.map +1 -0
  66. package/dist/src/components/checkbox.stories.js +48 -0
  67. package/dist/src/components/checkbox.stories.js.map +1 -0
  68. package/dist/src/components/command.d.ts +81 -0
  69. package/dist/src/components/command.d.ts.map +1 -0
  70. package/dist/src/components/command.js +27 -0
  71. package/dist/src/components/command.js.map +1 -0
  72. package/dist/src/components/command.stories.d.ts +34 -0
  73. package/dist/src/components/command.stories.d.ts.map +1 -0
  74. package/dist/src/components/command.stories.js +44 -0
  75. package/dist/src/components/command.stories.js.map +1 -0
  76. package/dist/src/components/dialog.d.ts +20 -0
  77. package/dist/src/components/dialog.d.ts.map +1 -0
  78. package/dist/src/components/dialog.js +23 -0
  79. package/dist/src/components/dialog.js.map +1 -0
  80. package/dist/src/components/dialog.stories.d.ts +38 -0
  81. package/dist/src/components/dialog.stories.d.ts.map +1 -0
  82. package/dist/src/components/dialog.stories.js +36 -0
  83. package/dist/src/components/dialog.stories.js.map +1 -0
  84. package/dist/src/components/dropdown-menu.d.ts +28 -0
  85. package/dist/src/components/dropdown-menu.d.ts.map +1 -0
  86. package/dist/src/components/dropdown-menu.js +33 -0
  87. package/dist/src/components/dropdown-menu.js.map +1 -0
  88. package/dist/src/components/dropdown-menu.stories.d.ts +30 -0
  89. package/dist/src/components/dropdown-menu.stories.d.ts.map +1 -0
  90. package/dist/src/components/dropdown-menu.stories.js +37 -0
  91. package/dist/src/components/dropdown-menu.stories.js.map +1 -0
  92. package/dist/src/components/form.d.ts +24 -0
  93. package/dist/src/components/form.d.ts.map +1 -0
  94. package/dist/src/components/form.js +62 -0
  95. package/dist/src/components/form.js.map +1 -0
  96. package/dist/src/components/form.stories.d.ts +34 -0
  97. package/dist/src/components/form.stories.d.ts.map +1 -0
  98. package/dist/src/components/form.stories.js +132 -0
  99. package/dist/src/components/form.stories.js.map +1 -0
  100. package/dist/src/components/input.d.ts +5 -0
  101. package/dist/src/components/input.d.ts.map +1 -0
  102. package/dist/src/components/input.js +9 -0
  103. package/dist/src/components/input.js.map +1 -0
  104. package/dist/src/components/input.stories.d.ts +101 -0
  105. package/dist/src/components/input.stories.d.ts.map +1 -0
  106. package/dist/src/components/input.stories.js +79 -0
  107. package/dist/src/components/input.stories.js.map +1 -0
  108. package/dist/src/components/label.d.ts +6 -0
  109. package/dist/src/components/label.d.ts.map +1 -0
  110. package/dist/src/components/label.js +10 -0
  111. package/dist/src/components/label.js.map +1 -0
  112. package/dist/src/components/label.stories.d.ts +34 -0
  113. package/dist/src/components/label.stories.d.ts.map +1 -0
  114. package/dist/src/components/label.stories.js +32 -0
  115. package/dist/src/components/label.stories.js.map +1 -0
  116. package/dist/src/components/navigation-menu.d.ts +13 -0
  117. package/dist/src/components/navigation-menu.d.ts.map +1 -0
  118. package/dist/src/components/navigation-menu.js +22 -0
  119. package/dist/src/components/navigation-menu.js.map +1 -0
  120. package/dist/src/components/navigation-menu.stories.d.ts +26 -0
  121. package/dist/src/components/navigation-menu.stories.d.ts.map +1 -0
  122. package/dist/src/components/navigation-menu.stories.js +30 -0
  123. package/dist/src/components/navigation-menu.stories.js.map +1 -0
  124. package/dist/src/components/popover.d.ts +7 -0
  125. package/dist/src/components/popover.d.ts.map +1 -0
  126. package/dist/src/components/popover.js +10 -0
  127. package/dist/src/components/popover.js.map +1 -0
  128. package/dist/src/components/popover.stories.d.ts +22 -0
  129. package/dist/src/components/popover.stories.d.ts.map +1 -0
  130. package/dist/src/components/popover.stories.js +24 -0
  131. package/dist/src/components/popover.stories.js.map +1 -0
  132. package/dist/src/components/progress.d.ts +5 -0
  133. package/dist/src/components/progress.d.ts.map +1 -0
  134. package/dist/src/components/progress.js +8 -0
  135. package/dist/src/components/progress.js.map +1 -0
  136. package/dist/src/components/progress.stories.d.ts +44 -0
  137. package/dist/src/components/progress.stories.d.ts.map +1 -0
  138. package/dist/src/components/progress.stories.js +63 -0
  139. package/dist/src/components/progress.stories.js.map +1 -0
  140. package/dist/src/components/radio-group.d.ts +6 -0
  141. package/dist/src/components/radio-group.d.ts.map +1 -0
  142. package/dist/src/components/radio-group.js +15 -0
  143. package/dist/src/components/radio-group.js.map +1 -0
  144. package/dist/src/components/radio-group.stories.d.ts +34 -0
  145. package/dist/src/components/radio-group.stories.d.ts.map +1 -0
  146. package/dist/src/components/radio-group.stories.js +31 -0
  147. package/dist/src/components/radio-group.stories.js.map +1 -0
  148. package/dist/src/components/scroll-area.d.ts +6 -0
  149. package/dist/src/components/scroll-area.d.ts.map +1 -0
  150. package/dist/src/components/scroll-area.js +10 -0
  151. package/dist/src/components/scroll-area.js.map +1 -0
  152. package/dist/src/components/scroll-area.stories.d.ts +46 -0
  153. package/dist/src/components/scroll-area.stories.d.ts.map +1 -0
  154. package/dist/src/components/scroll-area.stories.js +44 -0
  155. package/dist/src/components/scroll-area.stories.js.map +1 -0
  156. package/dist/src/components/select.d.ts +14 -0
  157. package/dist/src/components/select.d.ts.map +1 -0
  158. package/dist/src/components/select.js +26 -0
  159. package/dist/src/components/select.js.map +1 -0
  160. package/dist/src/components/select.stories.d.ts +42 -0
  161. package/dist/src/components/select.stories.d.ts.map +1 -0
  162. package/dist/src/components/select.stories.js +37 -0
  163. package/dist/src/components/select.stories.js.map +1 -0
  164. package/dist/src/components/separator.d.ts +5 -0
  165. package/dist/src/components/separator.d.ts.map +1 -0
  166. package/dist/src/components/separator.js +8 -0
  167. package/dist/src/components/separator.js.map +1 -0
  168. package/dist/src/components/separator.stories.d.ts +47 -0
  169. package/dist/src/components/separator.stories.d.ts.map +1 -0
  170. package/dist/src/components/separator.stories.js +41 -0
  171. package/dist/src/components/separator.stories.js.map +1 -0
  172. package/dist/src/components/sheet.d.ts +26 -0
  173. package/dist/src/components/sheet.d.ts.map +1 -0
  174. package/dist/src/components/sheet.js +37 -0
  175. package/dist/src/components/sheet.js.map +1 -0
  176. package/dist/src/components/sheet.stories.d.ts +18 -0
  177. package/dist/src/components/sheet.stories.d.ts.map +1 -0
  178. package/dist/src/components/sheet.stories.js +21 -0
  179. package/dist/src/components/sheet.stories.js.map +1 -0
  180. package/dist/src/components/sidebar.d.ts +40 -0
  181. package/dist/src/components/sidebar.d.ts.map +1 -0
  182. package/dist/src/components/sidebar.js +101 -0
  183. package/dist/src/components/sidebar.js.map +1 -0
  184. package/dist/src/components/sidebar.stories.d.ts +55 -0
  185. package/dist/src/components/sidebar.stories.d.ts.map +1 -0
  186. package/dist/src/components/sidebar.stories.js +51 -0
  187. package/dist/src/components/sidebar.stories.js.map +1 -0
  188. package/dist/src/components/skeleton.d.ts +3 -0
  189. package/dist/src/components/skeleton.d.ts.map +1 -0
  190. package/dist/src/components/skeleton.js +7 -0
  191. package/dist/src/components/skeleton.js.map +1 -0
  192. package/dist/src/components/skeleton.stories.d.ts +50 -0
  193. package/dist/src/components/skeleton.stories.d.ts.map +1 -0
  194. package/dist/src/components/skeleton.stories.js +42 -0
  195. package/dist/src/components/skeleton.stories.js.map +1 -0
  196. package/dist/src/components/switch.d.ts +5 -0
  197. package/dist/src/components/switch.d.ts.map +1 -0
  198. package/dist/src/components/switch.js +8 -0
  199. package/dist/src/components/switch.js.map +1 -0
  200. package/dist/src/components/switch.stories.d.ts +50 -0
  201. package/dist/src/components/switch.stories.d.ts.map +1 -0
  202. package/dist/src/components/switch.stories.js +48 -0
  203. package/dist/src/components/switch.stories.js.map +1 -0
  204. package/dist/src/components/table.d.ts +11 -0
  205. package/dist/src/components/table.d.ts.map +1 -0
  206. package/dist/src/components/table.js +21 -0
  207. package/dist/src/components/table.js.map +1 -0
  208. package/dist/src/components/table.stories.d.ts +26 -0
  209. package/dist/src/components/table.stories.d.ts.map +1 -0
  210. package/dist/src/components/table.stories.js +26 -0
  211. package/dist/src/components/table.stories.js.map +1 -0
  212. package/dist/src/components/tabs.d.ts +8 -0
  213. package/dist/src/components/tabs.d.ts.map +1 -0
  214. package/dist/src/components/tabs.js +13 -0
  215. package/dist/src/components/tabs.js.map +1 -0
  216. package/dist/src/components/tabs.stories.d.ts +22 -0
  217. package/dist/src/components/tabs.stories.d.ts.map +1 -0
  218. package/dist/src/components/tabs.stories.js +25 -0
  219. package/dist/src/components/tabs.stories.js.map +1 -0
  220. package/dist/src/components/textarea.d.ts +5 -0
  221. package/dist/src/components/textarea.d.ts.map +1 -0
  222. package/dist/src/components/textarea.js +9 -0
  223. package/dist/src/components/textarea.js.map +1 -0
  224. package/dist/src/components/textarea.stories.d.ts +64 -0
  225. package/dist/src/components/textarea.stories.d.ts.map +1 -0
  226. package/dist/src/components/textarea.stories.js +60 -0
  227. package/dist/src/components/textarea.stories.js.map +1 -0
  228. package/dist/src/components/toast.d.ts +16 -0
  229. package/dist/src/components/toast.d.ts.map +1 -0
  230. package/dist/src/components/toast.js +34 -0
  231. package/dist/src/components/toast.js.map +1 -0
  232. package/dist/src/components/toast.stories.d.ts +22 -0
  233. package/dist/src/components/toast.stories.d.ts.map +1 -0
  234. package/dist/src/components/toast.stories.js +32 -0
  235. package/dist/src/components/toast.stories.js.map +1 -0
  236. package/dist/src/components/tooltip.d.ts +8 -0
  237. package/dist/src/components/tooltip.d.ts.map +1 -0
  238. package/dist/src/components/tooltip.js +11 -0
  239. package/dist/src/components/tooltip.js.map +1 -0
  240. package/dist/src/components/tooltip.stories.d.ts +26 -0
  241. package/dist/src/components/tooltip.stories.d.ts.map +1 -0
  242. package/dist/src/components/tooltip.stories.js +25 -0
  243. package/dist/src/components/tooltip.stories.js.map +1 -0
  244. package/dist/src/index.d.ts +44 -0
  245. package/dist/src/index.d.ts.map +1 -0
  246. package/dist/src/index.js +35 -0
  247. package/dist/src/index.js.map +1 -0
  248. package/dist/src/lib/motion.d.ts +99 -0
  249. package/dist/src/lib/motion.d.ts.map +1 -0
  250. package/dist/src/lib/motion.js +88 -0
  251. package/dist/src/lib/motion.js.map +1 -0
  252. package/dist/src/lib/theme-loader.d.ts +69 -0
  253. package/dist/src/lib/theme-loader.d.ts.map +1 -0
  254. package/dist/src/lib/theme-loader.js +113 -0
  255. package/dist/src/lib/theme-loader.js.map +1 -0
  256. package/dist/src/lib/tokens.d.ts +50 -0
  257. package/dist/src/lib/tokens.d.ts.map +1 -0
  258. package/dist/src/lib/tokens.js +53 -0
  259. package/dist/src/lib/tokens.js.map +1 -0
  260. package/dist/src/lib/utils.d.ts +3 -0
  261. package/dist/src/lib/utils.d.ts.map +1 -0
  262. package/dist/src/lib/utils.js +6 -0
  263. package/dist/src/lib/utils.js.map +1 -0
  264. package/dist/src/templates/auth/forgot-password.d.ts +4 -0
  265. package/dist/src/templates/auth/forgot-password.d.ts.map +1 -0
  266. package/dist/src/templates/auth/forgot-password.js +47 -0
  267. package/dist/src/templates/auth/forgot-password.js.map +1 -0
  268. package/dist/src/templates/auth/forgot-password.stories.d.ts +14 -0
  269. package/dist/src/templates/auth/forgot-password.stories.d.ts.map +1 -0
  270. package/dist/src/templates/auth/forgot-password.stories.js +14 -0
  271. package/dist/src/templates/auth/forgot-password.stories.js.map +1 -0
  272. package/dist/src/templates/auth/login.d.ts +4 -0
  273. package/dist/src/templates/auth/login.d.ts.map +1 -0
  274. package/dist/src/templates/auth/login.js +50 -0
  275. package/dist/src/templates/auth/login.js.map +1 -0
  276. package/dist/src/templates/auth/login.stories.d.ts +95 -0
  277. package/dist/src/templates/auth/login.stories.d.ts.map +1 -0
  278. package/dist/src/templates/auth/login.stories.js +77 -0
  279. package/dist/src/templates/auth/login.stories.js.map +1 -0
  280. package/dist/src/templates/auth/signup.d.ts +4 -0
  281. package/dist/src/templates/auth/signup.d.ts.map +1 -0
  282. package/dist/src/templates/auth/signup.js +49 -0
  283. package/dist/src/templates/auth/signup.js.map +1 -0
  284. package/dist/src/templates/auth/signup.stories.d.ts +18 -0
  285. package/dist/src/templates/auth/signup.stories.d.ts.map +1 -0
  286. package/dist/src/templates/auth/signup.stories.js +21 -0
  287. package/dist/src/templates/auth/signup.stories.js.map +1 -0
  288. package/dist/src/templates/auth/verification.d.ts +4 -0
  289. package/dist/src/templates/auth/verification.d.ts.map +1 -0
  290. package/dist/src/templates/auth/verification.js +47 -0
  291. package/dist/src/templates/auth/verification.js.map +1 -0
  292. package/dist/src/templates/auth/verification.stories.d.ts +19 -0
  293. package/dist/src/templates/auth/verification.stories.d.ts.map +1 -0
  294. package/dist/src/templates/auth/verification.stories.js +19 -0
  295. package/dist/src/templates/auth/verification.stories.js.map +1 -0
  296. package/dist/src/templates/core/landing.d.ts +4 -0
  297. package/dist/src/templates/core/landing.d.ts.map +1 -0
  298. package/dist/src/templates/core/landing.js +44 -0
  299. package/dist/src/templates/core/landing.js.map +1 -0
  300. package/dist/src/templates/core/landing.stories.d.ts +14 -0
  301. package/dist/src/templates/core/landing.stories.d.ts.map +1 -0
  302. package/dist/src/templates/core/landing.stories.js +14 -0
  303. package/dist/src/templates/core/landing.stories.js.map +1 -0
  304. package/dist/src/templates/core/preferences.d.ts +4 -0
  305. package/dist/src/templates/core/preferences.d.ts.map +1 -0
  306. package/dist/src/templates/core/preferences.js +51 -0
  307. package/dist/src/templates/core/preferences.js.map +1 -0
  308. package/dist/src/templates/core/preferences.stories.d.ts +14 -0
  309. package/dist/src/templates/core/preferences.stories.d.ts.map +1 -0
  310. package/dist/src/templates/core/preferences.stories.js +14 -0
  311. package/dist/src/templates/core/preferences.stories.js.map +1 -0
  312. package/dist/src/templates/core/profile.d.ts +4 -0
  313. package/dist/src/templates/core/profile.d.ts.map +1 -0
  314. package/dist/src/templates/core/profile.js +49 -0
  315. package/dist/src/templates/core/profile.js.map +1 -0
  316. package/dist/src/templates/core/profile.stories.d.ts +19 -0
  317. package/dist/src/templates/core/profile.stories.d.ts.map +1 -0
  318. package/dist/src/templates/core/profile.stories.js +19 -0
  319. package/dist/src/templates/core/profile.stories.js.map +1 -0
  320. package/dist/src/templates/dashboard/overview.d.ts +4 -0
  321. package/dist/src/templates/dashboard/overview.d.ts.map +1 -0
  322. package/dist/src/templates/dashboard/overview.js +65 -0
  323. package/dist/src/templates/dashboard/overview.js.map +1 -0
  324. package/dist/src/templates/dashboard/overview.stories.d.ts +55 -0
  325. package/dist/src/templates/dashboard/overview.stories.d.ts.map +1 -0
  326. package/dist/src/templates/dashboard/overview.stories.js +51 -0
  327. package/dist/src/templates/dashboard/overview.stories.js.map +1 -0
  328. package/dist/src/templates/feedback/confirmation.d.ts +4 -0
  329. package/dist/src/templates/feedback/confirmation.d.ts.map +1 -0
  330. package/dist/src/templates/feedback/confirmation.js +47 -0
  331. package/dist/src/templates/feedback/confirmation.js.map +1 -0
  332. package/dist/src/templates/feedback/confirmation.stories.d.ts +14 -0
  333. package/dist/src/templates/feedback/confirmation.stories.d.ts.map +1 -0
  334. package/dist/src/templates/feedback/confirmation.stories.js +14 -0
  335. package/dist/src/templates/feedback/confirmation.stories.js.map +1 -0
  336. package/dist/src/templates/feedback/empty.d.ts +4 -0
  337. package/dist/src/templates/feedback/empty.d.ts.map +1 -0
  338. package/dist/src/templates/feedback/empty.js +45 -0
  339. package/dist/src/templates/feedback/empty.js.map +1 -0
  340. package/dist/src/templates/feedback/empty.stories.d.ts +14 -0
  341. package/dist/src/templates/feedback/empty.stories.d.ts.map +1 -0
  342. package/dist/src/templates/feedback/empty.stories.js +14 -0
  343. package/dist/src/templates/feedback/empty.stories.js.map +1 -0
  344. package/dist/src/templates/feedback/error.d.ts +4 -0
  345. package/dist/src/templates/feedback/error.d.ts.map +1 -0
  346. package/dist/src/templates/feedback/error.js +45 -0
  347. package/dist/src/templates/feedback/error.js.map +1 -0
  348. package/dist/src/templates/feedback/error.stories.d.ts +14 -0
  349. package/dist/src/templates/feedback/error.stories.d.ts.map +1 -0
  350. package/dist/src/templates/feedback/error.stories.js +14 -0
  351. package/dist/src/templates/feedback/error.stories.js.map +1 -0
  352. package/dist/src/templates/feedback/loading.d.ts +4 -0
  353. package/dist/src/templates/feedback/loading.d.ts.map +1 -0
  354. package/dist/src/templates/feedback/loading.js +42 -0
  355. package/dist/src/templates/feedback/loading.js.map +1 -0
  356. package/dist/src/templates/feedback/loading.stories.d.ts +14 -0
  357. package/dist/src/templates/feedback/loading.stories.d.ts.map +1 -0
  358. package/dist/src/templates/feedback/loading.stories.js +14 -0
  359. package/dist/src/templates/feedback/loading.stories.js.map +1 -0
  360. package/dist/src/templates/feedback/success.d.ts +4 -0
  361. package/dist/src/templates/feedback/success.d.ts.map +1 -0
  362. package/dist/src/templates/feedback/success.js +45 -0
  363. package/dist/src/templates/feedback/success.js.map +1 -0
  364. package/dist/src/templates/feedback/success.stories.d.ts +14 -0
  365. package/dist/src/templates/feedback/success.stories.d.ts.map +1 -0
  366. package/dist/src/templates/feedback/success.stories.js +14 -0
  367. package/dist/src/templates/feedback/success.stories.js.map +1 -0
  368. package/dist/src/templates/index.d.ts +16 -0
  369. package/dist/src/templates/index.d.ts.map +1 -0
  370. package/dist/src/templates/index.js +45 -0
  371. package/dist/src/templates/index.js.map +1 -0
  372. package/dist/src/templates/registry.d.ts +23 -0
  373. package/dist/src/templates/registry.d.ts.map +1 -0
  374. package/dist/src/templates/registry.js +90 -0
  375. package/dist/src/templates/registry.js.map +1 -0
  376. package/dist/src/templates/types.d.ts +78 -0
  377. package/dist/src/templates/types.d.ts.map +1 -0
  378. package/dist/src/templates/types.js +23 -0
  379. package/dist/src/templates/types.js.map +1 -0
  380. package/dist/tsconfig.tsbuildinfo +1 -0
  381. package/package.json +148 -0
  382. package/styles/globals.css +191 -0
  383. package/styles/tokens.css +303 -0
package/dist/index.mjs ADDED
@@ -0,0 +1,3509 @@
1
+ 'use client';
2
+
3
+ // src/lib/utils.ts
4
+ import { clsx } from "clsx";
5
+ import { twMerge } from "tailwind-merge";
6
+ function cn(...inputs) {
7
+ return twMerge(clsx(inputs));
8
+ }
9
+
10
+ // src/lib/tokens.ts
11
+ var tokenVars = {
12
+ // ========================================
13
+ // Background Tokens
14
+ // ========================================
15
+ bg: {
16
+ background: "var(--tekton-bg-background)",
17
+ foreground: "var(--tekton-bg-foreground)",
18
+ card: "var(--tekton-bg-card)",
19
+ cardForeground: "var(--tekton-bg-card-foreground)",
20
+ popover: "var(--tekton-bg-popover)",
21
+ popoverForeground: "var(--tekton-bg-popover-foreground)",
22
+ primary: "var(--tekton-bg-primary)",
23
+ primaryForeground: "var(--tekton-bg-primary-foreground)",
24
+ secondary: "var(--tekton-bg-secondary)",
25
+ secondaryForeground: "var(--tekton-bg-secondary-foreground)",
26
+ muted: "var(--tekton-bg-muted)",
27
+ mutedForeground: "var(--tekton-bg-muted-foreground)",
28
+ accent: "var(--tekton-bg-accent)",
29
+ accentForeground: "var(--tekton-bg-accent-foreground)",
30
+ destructive: "var(--tekton-bg-destructive)",
31
+ destructiveForeground: "var(--tekton-bg-destructive-foreground)"
32
+ },
33
+ // ========================================
34
+ // Border Tokens
35
+ // ========================================
36
+ border: {
37
+ default: "var(--tekton-border-default)",
38
+ input: "var(--tekton-border-input)",
39
+ ring: "var(--tekton-border-ring)"
40
+ },
41
+ // ========================================
42
+ // Radius Tokens
43
+ // ========================================
44
+ radius: {
45
+ sm: "var(--tekton-radius-sm)",
46
+ md: "var(--tekton-radius-md)",
47
+ lg: "var(--tekton-radius-lg)",
48
+ xl: "var(--tekton-radius-xl)",
49
+ full: "var(--tekton-radius-full)"
50
+ },
51
+ // ========================================
52
+ // Spacing Tokens (4px base)
53
+ // ========================================
54
+ spacing: {
55
+ 0: "var(--tekton-spacing-0)",
56
+ 1: "var(--tekton-spacing-1)",
57
+ 2: "var(--tekton-spacing-2)",
58
+ 3: "var(--tekton-spacing-3)",
59
+ 4: "var(--tekton-spacing-4)",
60
+ 5: "var(--tekton-spacing-5)",
61
+ 6: "var(--tekton-spacing-6)",
62
+ 8: "var(--tekton-spacing-8)",
63
+ 10: "var(--tekton-spacing-10)",
64
+ 12: "var(--tekton-spacing-12)",
65
+ 16: "var(--tekton-spacing-16)"
66
+ }
67
+ };
68
+ function isTokenReference(value) {
69
+ return value.startsWith("var(--tekton-") && value.endsWith(")");
70
+ }
71
+ function extractTokenName(token) {
72
+ const match = token.match(/var\(--tekton-(.*)\)/);
73
+ return match ? match[1] : "";
74
+ }
75
+
76
+ // src/lib/theme-loader.ts
77
+ function oklchToCSS(color) {
78
+ return `oklch(${color.l} ${color.c} ${color.h})`;
79
+ }
80
+ function resolveSemanticToken(reference, theme) {
81
+ const parts = reference.split(".");
82
+ if (parts[0] !== "atomic") {
83
+ return reference;
84
+ }
85
+ let current = theme.tokens;
86
+ for (const part of parts) {
87
+ if (current && typeof current === "object") {
88
+ current = current[part];
89
+ } else {
90
+ return reference;
91
+ }
92
+ }
93
+ return current;
94
+ }
95
+ function getWhiteColor(theme) {
96
+ const { color } = theme.tokens.atomic;
97
+ if (color.neutral && "white" in color.neutral) {
98
+ return color.neutral.white;
99
+ }
100
+ if (color.white) {
101
+ return color.white;
102
+ }
103
+ return { l: 1, c: 0, h: 0 };
104
+ }
105
+ function themeToCSS(theme) {
106
+ const { tokens } = theme;
107
+ const white = getWhiteColor(theme);
108
+ const resolveColor = (ref) => {
109
+ const resolved = resolveSemanticToken(ref, theme);
110
+ if (typeof resolved === "object" && "l" in resolved) {
111
+ return oklchToCSS(resolved);
112
+ }
113
+ return String(resolved);
114
+ };
115
+ const textPrimary = tokens.semantic.text ? resolveColor(tokens.semantic.text.primary) : tokens.atomic.color.neutral?.[900] ? oklchToCSS(tokens.atomic.color.neutral[900]) : oklchToCSS({ l: 0.12, c: 0.01, h: 0 });
116
+ const textSecondary = tokens.semantic.text ? resolveColor(tokens.semantic.text.secondary) : tokens.atomic.color.neutral?.[500] ? oklchToCSS(tokens.atomic.color.neutral[500]) : oklchToCSS({ l: 0.58, c: 0.02, h: 0 });
117
+ const textTertiary = tokens.semantic.text?.muted ? resolveColor(tokens.semantic.text.muted) : tokens.atomic.color.neutral?.[400] ? oklchToCSS(tokens.atomic.color.neutral[400]) : oklchToCSS({ l: 0.72, c: 0.02, h: 0 });
118
+ const css = `
119
+ :root, [data-theme="${theme.id}"] {
120
+ /* ========================================
121
+ Component Tokens (@framingui/ui \uCEF4\uD3EC\uB10C\uD2B8\uC6A9)
122
+ ======================================== */
123
+ --tekton-bg-background: ${resolveColor(tokens.semantic.background.canvas)};
124
+ --tekton-bg-foreground: ${textPrimary};
125
+
126
+ --tekton-bg-card: ${resolveColor(tokens.semantic.background.surface.default)};
127
+ --tekton-bg-card-foreground: ${textPrimary};
128
+
129
+ --tekton-bg-popover: ${resolveColor(tokens.semantic.background.surface.default)};
130
+ --tekton-bg-popover-foreground: ${textPrimary};
131
+
132
+ --tekton-bg-primary: ${resolveColor(tokens.semantic.background.brand.default)};
133
+ --tekton-bg-primary-foreground: ${oklchToCSS(white)};
134
+
135
+ --tekton-bg-secondary: ${resolveColor(tokens.semantic.background.surface.emphasis)};
136
+ --tekton-bg-secondary-foreground: ${textPrimary};
137
+
138
+ --tekton-bg-muted: ${resolveColor(tokens.semantic.background.surface.subtle)};
139
+ --tekton-bg-muted-foreground: ${textSecondary};
140
+
141
+ --tekton-bg-accent: ${resolveColor(tokens.semantic.background.surface.emphasis)};
142
+ --tekton-bg-accent-foreground: ${textPrimary};
143
+
144
+ --tekton-bg-destructive: ${oklchToCSS({ l: 0.5, c: 0.2, h: 30 })}; /* Default red */
145
+ --tekton-bg-destructive-foreground: ${oklchToCSS(white)};
146
+
147
+ /* ========================================
148
+ Border Tokens
149
+ ======================================== */
150
+ --tekton-border-default: ${resolveColor(tokens.semantic.border.default.default)};
151
+ --tekton-border-input: ${resolveColor(tokens.semantic.border.default.subtle)};
152
+ --tekton-border-ring: ${resolveColor(tokens.semantic.background.brand.default)};
153
+
154
+ /* ========================================
155
+ Page Semantic Tokens (\uD398\uC774\uC9C0 \uD15C\uD50C\uB9BF \uC778\uB77C\uC778 \uC2A4\uD0C0\uC77C\uC6A9)
156
+ ======================================== */
157
+ --tekton-bg-canvas: ${resolveColor(tokens.semantic.background.canvas)};
158
+ --tekton-bg-surface: ${resolveColor(tokens.semantic.background.surface.default)};
159
+ --tekton-text-primary: ${textPrimary};
160
+ --tekton-text-secondary: ${textSecondary};
161
+ --tekton-text-tertiary: ${textTertiary};
162
+ --tekton-action-primary: ${textPrimary};
163
+ --tekton-action-primary-text: ${oklchToCSS(white)};
164
+ --tekton-border-emphasis: ${resolveColor(tokens.semantic.border.default.emphasis)};
165
+
166
+ /* ========================================
167
+ Radius Tokens
168
+ ======================================== */
169
+ ${Object.entries(tokens.atomic.radius).map(([key, val]) => `--tekton-radius-${key}: ${val};`).join("\n ")}
170
+
171
+ /* ========================================
172
+ Spacing Tokens
173
+ ======================================== */
174
+ ${Object.entries(tokens.atomic.spacing).map(([key, val]) => `--tekton-spacing-${key}: ${val};`).join("\n ")}
175
+ }
176
+ `;
177
+ return css.trim();
178
+ }
179
+ function injectThemeCSS(theme) {
180
+ if (typeof document === "undefined") {
181
+ return;
182
+ }
183
+ const css = themeToCSS(theme);
184
+ const existingStyle = document.getElementById("tekton-theme");
185
+ if (existingStyle) {
186
+ existingStyle.remove();
187
+ }
188
+ const style = document.createElement("style");
189
+ style.id = "tekton-theme";
190
+ style.textContent = css;
191
+ document.head.appendChild(style);
192
+ }
193
+ function getCurrentThemeId() {
194
+ if (typeof document === "undefined") {
195
+ return null;
196
+ }
197
+ const root = document.documentElement;
198
+ return root.getAttribute("data-theme");
199
+ }
200
+ function setThemeId(themeId) {
201
+ if (typeof document === "undefined") {
202
+ return;
203
+ }
204
+ document.documentElement.setAttribute("data-theme", themeId);
205
+ }
206
+
207
+ // src/lib/motion.ts
208
+ import { useEffect, useState } from "react";
209
+ var motionTokens = {
210
+ duration: {
211
+ instant: 0,
212
+ fast: 100,
213
+ moderate: 200,
214
+ slow: 300,
215
+ complex: 500
216
+ },
217
+ easing: {
218
+ linear: [0, 0, 1, 1],
219
+ standard: [0, 0, 0.2, 1],
220
+ // ease-out
221
+ emphasized: [0.2, 0, 0, 1],
222
+ // emphasized
223
+ decelerate: [0, 0, 0.2, 1],
224
+ accelerate: [0.4, 0, 1, 1]
225
+ }
226
+ };
227
+ var transitions = {
228
+ fast: {
229
+ duration: motionTokens.duration.fast / 1e3,
230
+ ease: motionTokens.easing.standard
231
+ },
232
+ moderate: {
233
+ duration: motionTokens.duration.moderate / 1e3,
234
+ ease: motionTokens.easing.standard
235
+ },
236
+ slow: {
237
+ duration: motionTokens.duration.slow / 1e3,
238
+ ease: motionTokens.easing.emphasized
239
+ },
240
+ spring: {
241
+ type: "spring",
242
+ stiffness: 300,
243
+ damping: 30
244
+ }
245
+ };
246
+ var fadeVariants = {
247
+ hidden: { opacity: 0 },
248
+ visible: { opacity: 1 },
249
+ exit: { opacity: 0 }
250
+ };
251
+ var slideVariants = {
252
+ fromLeft: {
253
+ hidden: { x: -20, opacity: 0 },
254
+ visible: { x: 0, opacity: 1 },
255
+ exit: { x: -20, opacity: 0 }
256
+ },
257
+ fromRight: {
258
+ hidden: { x: 20, opacity: 0 },
259
+ visible: { x: 0, opacity: 1 },
260
+ exit: { x: 20, opacity: 0 }
261
+ },
262
+ fromTop: {
263
+ hidden: { y: -20, opacity: 0 },
264
+ visible: { y: 0, opacity: 1 },
265
+ exit: { y: -20, opacity: 0 }
266
+ },
267
+ fromBottom: {
268
+ hidden: { y: 20, opacity: 0 },
269
+ visible: { y: 0, opacity: 1 },
270
+ exit: { y: 20, opacity: 0 }
271
+ }
272
+ };
273
+ var scaleVariants = {
274
+ hidden: { scale: 0.95, opacity: 0 },
275
+ visible: { scale: 1, opacity: 1 },
276
+ exit: { scale: 0.95, opacity: 0 }
277
+ };
278
+ function useMotionSafe() {
279
+ const [motionSafe, setMotionSafe] = useState(true);
280
+ useEffect(() => {
281
+ const mediaQuery = window.matchMedia("(prefers-reduced-motion: reduce)");
282
+ setMotionSafe(!mediaQuery.matches);
283
+ const handleChange = (e) => {
284
+ setMotionSafe(!e.matches);
285
+ };
286
+ mediaQuery.addEventListener("change", handleChange);
287
+ return () => mediaQuery.removeEventListener("change", handleChange);
288
+ }, []);
289
+ return motionSafe;
290
+ }
291
+ function getMotionTransition(transition, motionSafe) {
292
+ if (!motionSafe) {
293
+ return { duration: 0.01 };
294
+ }
295
+ return transition;
296
+ }
297
+
298
+ // src/components/button.tsx
299
+ import * as React from "react";
300
+ import { Slot } from "@radix-ui/react-slot";
301
+ import { cva } from "class-variance-authority";
302
+ import { jsx } from "react/jsx-runtime";
303
+ var buttonVariants = cva(
304
+ "inline-flex items-center justify-center whitespace-nowrap rounded-[var(--tekton-radius-xl)] text-sm font-medium ring-offset-[var(--tekton-bg-background)] transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--tekton-border-ring)] focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50",
305
+ {
306
+ variants: {
307
+ variant: {
308
+ default: "bg-[var(--tekton-bg-primary)] text-[var(--tekton-bg-primary-foreground)] hover:bg-[var(--tekton-bg-primary)]/90",
309
+ destructive: "bg-[var(--tekton-bg-destructive)] text-[var(--tekton-bg-destructive-foreground)] hover:bg-[var(--tekton-bg-destructive)]/90",
310
+ outline: "border border-[var(--tekton-border-input)] bg-[var(--tekton-bg-background)] hover:bg-[var(--tekton-bg-accent)] hover:text-[var(--tekton-bg-accent-foreground)]",
311
+ secondary: "bg-[var(--tekton-bg-secondary)] text-[var(--tekton-bg-secondary-foreground)] hover:bg-[var(--tekton-bg-secondary)]/80",
312
+ ghost: "hover:bg-[var(--tekton-bg-accent)] hover:text-[var(--tekton-bg-accent-foreground)]",
313
+ link: "text-[var(--tekton-bg-primary)] underline-offset-4 hover:underline"
314
+ },
315
+ size: {
316
+ default: "h-10 px-[var(--tekton-spacing-4)] py-[var(--tekton-spacing-2)]",
317
+ sm: "h-9 rounded-[var(--tekton-radius-xl)] px-[var(--tekton-spacing-3)]",
318
+ lg: "h-11 rounded-[var(--tekton-radius-xl)] px-[var(--tekton-spacing-8)]",
319
+ icon: "h-10 w-10"
320
+ }
321
+ },
322
+ defaultVariants: {
323
+ variant: "default",
324
+ size: "default"
325
+ }
326
+ }
327
+ );
328
+ var Button = React.forwardRef(
329
+ ({ className, variant, size, asChild = false, ...props }, ref) => {
330
+ const Comp = asChild ? Slot : "button";
331
+ return /* @__PURE__ */ jsx(Comp, { className: cn(buttonVariants({ variant, size, className })), ref, ...props });
332
+ }
333
+ );
334
+ Button.displayName = "Button";
335
+
336
+ // src/components/input.tsx
337
+ import * as React2 from "react";
338
+ import { jsx as jsx2 } from "react/jsx-runtime";
339
+ var Input = React2.forwardRef(
340
+ ({ className, type, ...props }, ref) => {
341
+ return /* @__PURE__ */ jsx2(
342
+ "input",
343
+ {
344
+ type,
345
+ className: cn(
346
+ "flex h-10 w-full rounded-[var(--tekton-radius-md)] border border-[var(--tekton-border-input)] bg-[var(--tekton-bg-background)] px-[var(--tekton-spacing-3)] py-[var(--tekton-spacing-2)] text-sm ring-offset-[var(--tekton-bg-background)] file:border-0 file:bg-transparent file:text-sm file:font-medium placeholder:text-[var(--tekton-bg-muted-foreground)] focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--tekton-border-ring)] focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50",
347
+ className
348
+ ),
349
+ ref,
350
+ ...props
351
+ }
352
+ );
353
+ }
354
+ );
355
+ Input.displayName = "Input";
356
+
357
+ // src/components/label.tsx
358
+ import * as React3 from "react";
359
+ import * as LabelPrimitive from "@radix-ui/react-label";
360
+ import { cva as cva2 } from "class-variance-authority";
361
+ import { jsx as jsx3 } from "react/jsx-runtime";
362
+ var labelVariants = cva2(
363
+ "text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70"
364
+ );
365
+ var Label = React3.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx3(LabelPrimitive.Root, { ref, className: cn(labelVariants(), className), ...props }));
366
+ Label.displayName = LabelPrimitive.Root.displayName;
367
+
368
+ // src/components/card.tsx
369
+ import * as React4 from "react";
370
+ import { jsx as jsx4 } from "react/jsx-runtime";
371
+ var Card = React4.forwardRef(
372
+ ({ className, ...props }, ref) => /* @__PURE__ */ jsx4(
373
+ "div",
374
+ {
375
+ ref,
376
+ className: cn(
377
+ "rounded-[var(--tekton-radius-lg)] border border-[var(--tekton-border-default)] bg-[var(--tekton-bg-card)] text-[var(--tekton-bg-card-foreground)] shadow-sm",
378
+ className
379
+ ),
380
+ ...props
381
+ }
382
+ )
383
+ );
384
+ Card.displayName = "Card";
385
+ var CardHeader = React4.forwardRef(
386
+ ({ className, ...props }, ref) => /* @__PURE__ */ jsx4(
387
+ "div",
388
+ {
389
+ ref,
390
+ className: cn(
391
+ "flex flex-col space-y-[var(--tekton-spacing-2)] p-[var(--tekton-spacing-6)]",
392
+ className
393
+ ),
394
+ ...props
395
+ }
396
+ )
397
+ );
398
+ CardHeader.displayName = "CardHeader";
399
+ var CardTitle = React4.forwardRef(
400
+ ({ className, ...props }, ref) => /* @__PURE__ */ jsx4(
401
+ "h3",
402
+ {
403
+ ref,
404
+ className: cn("text-2xl font-semibold leading-none tracking-tight", className),
405
+ ...props
406
+ }
407
+ )
408
+ );
409
+ CardTitle.displayName = "CardTitle";
410
+ var CardDescription = React4.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx4(
411
+ "p",
412
+ {
413
+ ref,
414
+ className: cn("text-sm text-[var(--tekton-bg-muted-foreground)]", className),
415
+ ...props
416
+ }
417
+ ));
418
+ CardDescription.displayName = "CardDescription";
419
+ var CardContent = React4.forwardRef(
420
+ ({ className, ...props }, ref) => /* @__PURE__ */ jsx4("div", { ref, className: cn("p-[var(--tekton-spacing-6)] pt-0", className), ...props })
421
+ );
422
+ CardContent.displayName = "CardContent";
423
+ var CardFooter = React4.forwardRef(
424
+ ({ className, ...props }, ref) => /* @__PURE__ */ jsx4(
425
+ "div",
426
+ {
427
+ ref,
428
+ className: cn("flex items-center p-[var(--tekton-spacing-6)] pt-0", className),
429
+ ...props
430
+ }
431
+ )
432
+ );
433
+ CardFooter.displayName = "CardFooter";
434
+
435
+ // src/components/badge.tsx
436
+ import { cva as cva3 } from "class-variance-authority";
437
+ import { jsx as jsx5 } from "react/jsx-runtime";
438
+ var badgeVariants = cva3(
439
+ "inline-flex items-center rounded-[var(--tekton-radius-full)] border px-[var(--tekton-spacing-3)] py-[var(--tekton-spacing-1)] text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-[var(--tekton-border-ring)] focus:ring-offset-2",
440
+ {
441
+ variants: {
442
+ variant: {
443
+ default: "border-transparent bg-[var(--tekton-bg-primary)] text-[var(--tekton-bg-primary-foreground)] hover:bg-[var(--tekton-bg-primary)]/80",
444
+ secondary: "border-transparent bg-[var(--tekton-bg-secondary)] text-[var(--tekton-bg-secondary-foreground)] hover:bg-[var(--tekton-bg-secondary)]/80",
445
+ destructive: "border-transparent bg-[var(--tekton-bg-destructive)] text-[var(--tekton-bg-destructive-foreground)] hover:bg-[var(--tekton-bg-destructive)]/80",
446
+ outline: "text-[var(--tekton-bg-foreground)]"
447
+ }
448
+ },
449
+ defaultVariants: {
450
+ variant: "default"
451
+ }
452
+ }
453
+ );
454
+ function Badge({ className, variant, ...props }) {
455
+ return /* @__PURE__ */ jsx5("div", { className: cn(badgeVariants({ variant }), className), ...props });
456
+ }
457
+
458
+ // src/components/avatar.tsx
459
+ import * as React5 from "react";
460
+ import * as AvatarPrimitive from "@radix-ui/react-avatar";
461
+ import { jsx as jsx6 } from "react/jsx-runtime";
462
+ var Avatar = React5.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsx6(
463
+ AvatarPrimitive.Root,
464
+ {
465
+ ref,
466
+ className: cn(
467
+ "relative flex h-10 w-10 shrink-0 overflow-hidden rounded-[var(--tekton-radius-full)]",
468
+ className
469
+ ),
470
+ ...props,
471
+ children
472
+ }
473
+ ));
474
+ Avatar.displayName = AvatarPrimitive.Root.displayName;
475
+ var AvatarImage = React5.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx6(
476
+ AvatarPrimitive.Image,
477
+ {
478
+ ref,
479
+ className: cn("aspect-square h-full w-full", className),
480
+ ...props
481
+ }
482
+ ));
483
+ AvatarImage.displayName = AvatarPrimitive.Image.displayName;
484
+ var AvatarFallback = React5.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx6(
485
+ AvatarPrimitive.Fallback,
486
+ {
487
+ ref,
488
+ className: cn(
489
+ "flex h-full w-full items-center justify-center rounded-[var(--tekton-radius-full)] bg-[var(--tekton-bg-muted)]",
490
+ className
491
+ ),
492
+ ...props
493
+ }
494
+ ));
495
+ AvatarFallback.displayName = AvatarPrimitive.Fallback.displayName;
496
+
497
+ // src/components/separator.tsx
498
+ import * as React6 from "react";
499
+ import * as SeparatorPrimitive from "@radix-ui/react-separator";
500
+ import { jsx as jsx7 } from "react/jsx-runtime";
501
+ var Separator = React6.forwardRef(({ className, orientation = "horizontal", decorative = true, ...props }, ref) => /* @__PURE__ */ jsx7(
502
+ SeparatorPrimitive.Root,
503
+ {
504
+ ref,
505
+ decorative,
506
+ orientation,
507
+ className: cn(
508
+ "shrink-0 bg-[var(--tekton-border-default)]",
509
+ orientation === "horizontal" ? "h-[1px] w-full" : "h-full w-[1px]",
510
+ className
511
+ ),
512
+ ...props
513
+ }
514
+ ));
515
+ Separator.displayName = SeparatorPrimitive.Root.displayName;
516
+
517
+ // src/components/checkbox.tsx
518
+ import * as React7 from "react";
519
+ import * as CheckboxPrimitive from "@radix-ui/react-checkbox";
520
+ import { Check } from "lucide-react";
521
+ import { jsx as jsx8 } from "react/jsx-runtime";
522
+ var Checkbox = React7.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx8(
523
+ CheckboxPrimitive.Root,
524
+ {
525
+ ref,
526
+ className: cn(
527
+ "peer h-4 w-4 shrink-0 rounded-[var(--tekton-radius-sm)] border border-[var(--tekton-border-input)] ring-offset-[var(--tekton-bg-background)] focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--tekton-border-ring)] focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-[var(--tekton-bg-primary)] data-[state=checked]:text-[var(--tekton-bg-primary-foreground)]",
528
+ className
529
+ ),
530
+ ...props,
531
+ children: /* @__PURE__ */ jsx8(CheckboxPrimitive.Indicator, { className: cn("flex items-center justify-center text-current"), children: /* @__PURE__ */ jsx8(Check, { className: "h-4 w-4" }) })
532
+ }
533
+ ));
534
+ Checkbox.displayName = CheckboxPrimitive.Root.displayName;
535
+
536
+ // src/components/radio-group.tsx
537
+ import * as React8 from "react";
538
+ import * as RadioGroupPrimitive from "@radix-ui/react-radio-group";
539
+ import { Circle } from "lucide-react";
540
+ import { jsx as jsx9 } from "react/jsx-runtime";
541
+ var RadioGroup = React8.forwardRef(({ className, ...props }, ref) => {
542
+ return /* @__PURE__ */ jsx9(
543
+ RadioGroupPrimitive.Root,
544
+ {
545
+ className: cn("grid gap-[var(--tekton-spacing-2)]", className),
546
+ ...props,
547
+ ref
548
+ }
549
+ );
550
+ });
551
+ RadioGroup.displayName = RadioGroupPrimitive.Root.displayName;
552
+ var RadioGroupItem = React8.forwardRef(({ className, ...props }, ref) => {
553
+ return /* @__PURE__ */ jsx9(
554
+ RadioGroupPrimitive.Item,
555
+ {
556
+ ref,
557
+ className: cn(
558
+ "aspect-square h-4 w-4 rounded-[var(--tekton-radius-full)] border border-[var(--tekton-border-input)] text-[var(--tekton-bg-primary)] ring-offset-[var(--tekton-bg-background)] focus:outline-none focus-visible:ring-2 focus-visible:ring-[var(--tekton-border-ring)] focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50",
559
+ className
560
+ ),
561
+ ...props,
562
+ children: /* @__PURE__ */ jsx9(RadioGroupPrimitive.Indicator, { className: "flex items-center justify-center", children: /* @__PURE__ */ jsx9(Circle, { className: "h-2.5 w-2.5 fill-current text-current" }) })
563
+ }
564
+ );
565
+ });
566
+ RadioGroupItem.displayName = RadioGroupPrimitive.Item.displayName;
567
+
568
+ // src/components/switch.tsx
569
+ import * as React9 from "react";
570
+ import * as SwitchPrimitives from "@radix-ui/react-switch";
571
+ import { jsx as jsx10 } from "react/jsx-runtime";
572
+ var Switch = React9.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx10(
573
+ SwitchPrimitives.Root,
574
+ {
575
+ className: cn(
576
+ "peer inline-flex h-6 w-11 shrink-0 cursor-pointer items-center rounded-[var(--tekton-radius-full)] p-1 transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--tekton-border-ring)] focus-visible:ring-offset-2 focus-visible:ring-offset-[var(--tekton-bg-background)] disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-[var(--tekton-bg-primary)] data-[state=unchecked]:bg-[var(--tekton-bg-muted)]",
577
+ className
578
+ ),
579
+ ...props,
580
+ ref,
581
+ children: /* @__PURE__ */ jsx10(
582
+ SwitchPrimitives.Thumb,
583
+ {
584
+ className: cn(
585
+ "pointer-events-none block h-4 w-4 rounded-[var(--tekton-radius-full)] bg-[var(--tekton-bg-background)] shadow-sm ring-0 transition-transform data-[state=checked]:translate-x-5 data-[state=unchecked]:translate-x-0"
586
+ )
587
+ }
588
+ )
589
+ }
590
+ ));
591
+ Switch.displayName = SwitchPrimitives.Root.displayName;
592
+
593
+ // src/components/textarea.tsx
594
+ import * as React10 from "react";
595
+ import { jsx as jsx11 } from "react/jsx-runtime";
596
+ var Textarea = React10.forwardRef(
597
+ ({ className, ...props }, ref) => {
598
+ return /* @__PURE__ */ jsx11(
599
+ "textarea",
600
+ {
601
+ className: cn(
602
+ "flex min-h-[80px] w-full rounded-[var(--tekton-radius-md)] border border-[var(--tekton-border-input)] bg-[var(--tekton-bg-background)] px-[var(--tekton-spacing-3)] py-[var(--tekton-spacing-2)] text-sm ring-offset-[var(--tekton-bg-background)] placeholder:text-[var(--tekton-bg-muted-foreground)] focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--tekton-border-ring)] focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50",
603
+ className
604
+ ),
605
+ ref,
606
+ ...props
607
+ }
608
+ );
609
+ }
610
+ );
611
+ Textarea.displayName = "Textarea";
612
+
613
+ // src/components/skeleton.tsx
614
+ import { jsx as jsx12 } from "react/jsx-runtime";
615
+ function Skeleton({ className, ...props }) {
616
+ return /* @__PURE__ */ jsx12(
617
+ "div",
618
+ {
619
+ className: cn(
620
+ "animate-pulse rounded-[var(--tekton-radius-md)] bg-[var(--tekton-bg-muted)]",
621
+ className
622
+ ),
623
+ ...props
624
+ }
625
+ );
626
+ }
627
+
628
+ // src/components/scroll-area.tsx
629
+ import * as React11 from "react";
630
+ import * as ScrollAreaPrimitive from "@radix-ui/react-scroll-area";
631
+ import { jsx as jsx13, jsxs } from "react/jsx-runtime";
632
+ var ScrollArea = React11.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxs(
633
+ ScrollAreaPrimitive.Root,
634
+ {
635
+ ref,
636
+ className: cn("relative overflow-hidden", className),
637
+ ...props,
638
+ children: [
639
+ /* @__PURE__ */ jsx13(ScrollAreaPrimitive.Viewport, { className: "h-full w-full rounded-[inherit]", children }),
640
+ /* @__PURE__ */ jsx13(ScrollBar, {}),
641
+ /* @__PURE__ */ jsx13(ScrollAreaPrimitive.Corner, {})
642
+ ]
643
+ }
644
+ ));
645
+ ScrollArea.displayName = ScrollAreaPrimitive.Root.displayName;
646
+ var ScrollBar = React11.forwardRef(({ className, orientation = "vertical", ...props }, ref) => /* @__PURE__ */ jsx13(
647
+ ScrollAreaPrimitive.ScrollAreaScrollbar,
648
+ {
649
+ ref,
650
+ orientation,
651
+ className: cn(
652
+ "flex touch-none select-none transition-colors",
653
+ orientation === "vertical" && "h-full w-2.5 border-l border-l-transparent p-[1px]",
654
+ orientation === "horizontal" && "h-2.5 flex-col border-t border-t-transparent p-[1px]",
655
+ className
656
+ ),
657
+ ...props,
658
+ children: /* @__PURE__ */ jsx13(ScrollAreaPrimitive.ScrollAreaThumb, { className: "relative flex-1 rounded-[var(--tekton-radius-full)] bg-[var(--tekton-border-default)]" })
659
+ }
660
+ ));
661
+ ScrollBar.displayName = ScrollAreaPrimitive.ScrollAreaScrollbar.displayName;
662
+
663
+ // src/components/select.tsx
664
+ import * as React12 from "react";
665
+ import * as SelectPrimitive from "@radix-ui/react-select";
666
+ import { Check as Check2, ChevronDown, ChevronUp } from "lucide-react";
667
+ import { jsx as jsx14, jsxs as jsxs2 } from "react/jsx-runtime";
668
+ var Select = SelectPrimitive.Root;
669
+ var SelectGroup = SelectPrimitive.Group;
670
+ var SelectValue = SelectPrimitive.Value;
671
+ var SelectTrigger = React12.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxs2(
672
+ SelectPrimitive.Trigger,
673
+ {
674
+ ref,
675
+ className: cn(
676
+ "flex h-10 w-full items-center justify-between rounded-[var(--tekton-radius-md)] border border-[var(--tekton-border-input)] bg-[var(--tekton-bg-background)] px-[var(--tekton-spacing-3)] py-[var(--tekton-spacing-2)] text-sm ring-offset-[var(--tekton-bg-background)] placeholder:text-[var(--tekton-bg-muted-foreground)] focus:outline-none focus:ring-2 focus:ring-[var(--tekton-border-ring)] focus:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 [&>span]:line-clamp-1",
677
+ className
678
+ ),
679
+ ...props,
680
+ children: [
681
+ children,
682
+ /* @__PURE__ */ jsx14(SelectPrimitive.Icon, { asChild: true, children: /* @__PURE__ */ jsx14(ChevronDown, { className: "h-4 w-4 opacity-50" }) })
683
+ ]
684
+ }
685
+ ));
686
+ SelectTrigger.displayName = SelectPrimitive.Trigger.displayName;
687
+ var SelectScrollUpButton = React12.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx14(
688
+ SelectPrimitive.ScrollUpButton,
689
+ {
690
+ ref,
691
+ className: cn("flex cursor-default items-center justify-center py-1", className),
692
+ ...props,
693
+ children: /* @__PURE__ */ jsx14(ChevronUp, { className: "h-4 w-4" })
694
+ }
695
+ ));
696
+ SelectScrollUpButton.displayName = SelectPrimitive.ScrollUpButton.displayName;
697
+ var SelectScrollDownButton = React12.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx14(
698
+ SelectPrimitive.ScrollDownButton,
699
+ {
700
+ ref,
701
+ className: cn("flex cursor-default items-center justify-center py-1", className),
702
+ ...props,
703
+ children: /* @__PURE__ */ jsx14(ChevronDown, { className: "h-4 w-4" })
704
+ }
705
+ ));
706
+ SelectScrollDownButton.displayName = SelectPrimitive.ScrollDownButton.displayName;
707
+ var SelectContent = React12.forwardRef(({ className, children, position = "popper", ...props }, ref) => /* @__PURE__ */ jsx14(SelectPrimitive.Portal, { children: /* @__PURE__ */ jsxs2(
708
+ SelectPrimitive.Content,
709
+ {
710
+ ref,
711
+ className: cn(
712
+ "relative z-50 max-h-96 min-w-[8rem] overflow-hidden rounded-[var(--tekton-radius-md)] border border-[var(--tekton-border-default)] bg-[var(--tekton-bg-popover)] text-[var(--tekton-bg-popover-foreground)] shadow-md data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 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",
713
+ position === "popper" && "data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1",
714
+ className
715
+ ),
716
+ position,
717
+ ...props,
718
+ children: [
719
+ /* @__PURE__ */ jsx14(SelectScrollUpButton, {}),
720
+ /* @__PURE__ */ jsx14(
721
+ SelectPrimitive.Viewport,
722
+ {
723
+ className: cn(
724
+ "p-1",
725
+ position === "popper" && "h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)]"
726
+ ),
727
+ children
728
+ }
729
+ ),
730
+ /* @__PURE__ */ jsx14(SelectScrollDownButton, {})
731
+ ]
732
+ }
733
+ ) }));
734
+ SelectContent.displayName = SelectPrimitive.Content.displayName;
735
+ var SelectLabel = React12.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx14(
736
+ SelectPrimitive.Label,
737
+ {
738
+ ref,
739
+ className: cn(
740
+ "py-[var(--tekton-spacing-2)] pl-8 pr-[var(--tekton-spacing-2)] text-sm font-semibold",
741
+ className
742
+ ),
743
+ ...props
744
+ }
745
+ ));
746
+ SelectLabel.displayName = SelectPrimitive.Label.displayName;
747
+ var SelectItem = React12.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxs2(
748
+ SelectPrimitive.Item,
749
+ {
750
+ ref,
751
+ className: cn(
752
+ "relative flex w-full cursor-default select-none items-center rounded-[var(--tekton-radius-sm)] py-[var(--tekton-spacing-2)] pl-8 pr-[var(--tekton-spacing-2)] text-sm outline-none focus:bg-[var(--tekton-bg-accent)] focus:text-[var(--tekton-bg-accent-foreground)] data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
753
+ className
754
+ ),
755
+ ...props,
756
+ children: [
757
+ /* @__PURE__ */ jsx14("span", { className: "absolute left-2 flex h-3.5 w-3.5 items-center justify-center", children: /* @__PURE__ */ jsx14(SelectPrimitive.ItemIndicator, { children: /* @__PURE__ */ jsx14(Check2, { className: "h-4 w-4" }) }) }),
758
+ /* @__PURE__ */ jsx14(SelectPrimitive.ItemText, { children })
759
+ ]
760
+ }
761
+ ));
762
+ SelectItem.displayName = SelectPrimitive.Item.displayName;
763
+ var SelectSeparator = React12.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx14(
764
+ SelectPrimitive.Separator,
765
+ {
766
+ ref,
767
+ className: cn("-mx-1 my-1 h-px bg-[var(--tekton-bg-muted)]", className),
768
+ ...props
769
+ }
770
+ ));
771
+ SelectSeparator.displayName = SelectPrimitive.Separator.displayName;
772
+
773
+ // src/components/dialog.tsx
774
+ import * as React13 from "react";
775
+ import * as DialogPrimitive from "@radix-ui/react-dialog";
776
+ import { X } from "lucide-react";
777
+ import { jsx as jsx15, jsxs as jsxs3 } from "react/jsx-runtime";
778
+ var Dialog = DialogPrimitive.Root;
779
+ var DialogTrigger = DialogPrimitive.Trigger;
780
+ var DialogPortal = DialogPrimitive.Portal;
781
+ var DialogClose = DialogPrimitive.Close;
782
+ var DialogOverlay = React13.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx15(
783
+ DialogPrimitive.Overlay,
784
+ {
785
+ ref,
786
+ className: cn(
787
+ "fixed inset-0 z-50 bg-black/80 backdrop-blur-sm data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0",
788
+ className
789
+ ),
790
+ ...props
791
+ }
792
+ ));
793
+ DialogOverlay.displayName = DialogPrimitive.Overlay.displayName;
794
+ var DialogContent = React13.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxs3(DialogPortal, { children: [
795
+ /* @__PURE__ */ jsx15(DialogOverlay, {}),
796
+ /* @__PURE__ */ jsxs3(
797
+ DialogPrimitive.Content,
798
+ {
799
+ ref,
800
+ className: cn(
801
+ "fixed left-[50%] top-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border border-neutral-200 bg-white p-6 shadow-lg duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%] sm:rounded-lg",
802
+ className
803
+ ),
804
+ ...props,
805
+ children: [
806
+ children,
807
+ /* @__PURE__ */ jsxs3(DialogPrimitive.Close, { className: "absolute right-4 top-4 rounded-sm opacity-70 ring-offset-white transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-neutral-400 focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-neutral-100 data-[state=open]:text-neutral-500", children: [
808
+ /* @__PURE__ */ jsx15(X, { className: "h-4 w-4" }),
809
+ /* @__PURE__ */ jsx15("span", { className: "sr-only", children: "Close" })
810
+ ] })
811
+ ]
812
+ }
813
+ )
814
+ ] }));
815
+ DialogContent.displayName = DialogPrimitive.Content.displayName;
816
+ var DialogHeader = ({ className, ...props }) => /* @__PURE__ */ jsx15("div", { className: cn("flex flex-col space-y-2 text-center sm:text-left", className), ...props });
817
+ DialogHeader.displayName = "DialogHeader";
818
+ var DialogFooter = ({ className, ...props }) => /* @__PURE__ */ jsx15(
819
+ "div",
820
+ {
821
+ className: cn("flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2", className),
822
+ ...props
823
+ }
824
+ );
825
+ DialogFooter.displayName = "DialogFooter";
826
+ var DialogTitle = React13.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx15(
827
+ DialogPrimitive.Title,
828
+ {
829
+ ref,
830
+ className: cn("text-lg font-semibold leading-none tracking-tight", className),
831
+ ...props
832
+ }
833
+ ));
834
+ DialogTitle.displayName = DialogPrimitive.Title.displayName;
835
+ var DialogDescription = React13.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx15(
836
+ DialogPrimitive.Description,
837
+ {
838
+ ref,
839
+ className: cn("text-sm text-neutral-500", className),
840
+ ...props
841
+ }
842
+ ));
843
+ DialogDescription.displayName = DialogPrimitive.Description.displayName;
844
+
845
+ // src/components/dropdown-menu.tsx
846
+ import * as React14 from "react";
847
+ import * as DropdownMenuPrimitive from "@radix-ui/react-dropdown-menu";
848
+ import { Check as Check3, ChevronRight, Circle as Circle2 } from "lucide-react";
849
+ import { jsx as jsx16, jsxs as jsxs4 } from "react/jsx-runtime";
850
+ var DropdownMenu = DropdownMenuPrimitive.Root;
851
+ var DropdownMenuTrigger = DropdownMenuPrimitive.Trigger;
852
+ var DropdownMenuGroup = DropdownMenuPrimitive.Group;
853
+ var DropdownMenuPortal = DropdownMenuPrimitive.Portal;
854
+ var DropdownMenuSub = DropdownMenuPrimitive.Sub;
855
+ var DropdownMenuRadioGroup = DropdownMenuPrimitive.RadioGroup;
856
+ var DropdownMenuSubTrigger = React14.forwardRef(({ className, inset, children, ...props }, ref) => /* @__PURE__ */ jsxs4(
857
+ DropdownMenuPrimitive.SubTrigger,
858
+ {
859
+ ref,
860
+ className: cn(
861
+ "flex cursor-default select-none items-center rounded-[var(--tekton-radius-sm)] px-[var(--tekton-spacing-2)] py-[var(--tekton-spacing-2)] text-sm outline-none focus:bg-[var(--tekton-bg-accent)] data-[state=open]:bg-[var(--tekton-bg-accent)]",
862
+ inset && "pl-8",
863
+ className
864
+ ),
865
+ ...props,
866
+ children: [
867
+ children,
868
+ /* @__PURE__ */ jsx16(ChevronRight, { className: "ml-auto h-4 w-4" })
869
+ ]
870
+ }
871
+ ));
872
+ DropdownMenuSubTrigger.displayName = DropdownMenuPrimitive.SubTrigger.displayName;
873
+ var DropdownMenuSubContent = React14.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx16(
874
+ DropdownMenuPrimitive.SubContent,
875
+ {
876
+ ref,
877
+ className: cn(
878
+ "z-50 min-w-[8rem] overflow-hidden rounded-[var(--tekton-radius-md)] border border-[var(--tekton-border-default)] bg-[var(--tekton-bg-popover)] p-1 text-[var(--tekton-bg-popover-foreground)] shadow-lg data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 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",
879
+ className
880
+ ),
881
+ ...props
882
+ }
883
+ ));
884
+ DropdownMenuSubContent.displayName = DropdownMenuPrimitive.SubContent.displayName;
885
+ var DropdownMenuContent = React14.forwardRef(({ className, sideOffset = 4, ...props }, ref) => /* @__PURE__ */ jsx16(DropdownMenuPrimitive.Portal, { children: /* @__PURE__ */ jsx16(
886
+ DropdownMenuPrimitive.Content,
887
+ {
888
+ ref,
889
+ sideOffset,
890
+ className: cn(
891
+ "z-50 min-w-[8rem] overflow-hidden rounded-[var(--tekton-radius-md)] border border-[var(--tekton-border-default)] bg-[var(--tekton-bg-popover)] p-1 text-[var(--tekton-bg-popover-foreground)] shadow-md data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 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",
892
+ className
893
+ ),
894
+ ...props
895
+ }
896
+ ) }));
897
+ DropdownMenuContent.displayName = DropdownMenuPrimitive.Content.displayName;
898
+ var DropdownMenuItem = React14.forwardRef(({ className, inset, ...props }, ref) => /* @__PURE__ */ jsx16(
899
+ DropdownMenuPrimitive.Item,
900
+ {
901
+ ref,
902
+ className: cn(
903
+ "relative flex cursor-default select-none items-center rounded-[var(--tekton-radius-sm)] px-[var(--tekton-spacing-2)] py-[var(--tekton-spacing-2)] text-sm outline-none transition-colors focus:bg-[var(--tekton-bg-accent)] focus:text-[var(--tekton-bg-accent-foreground)] data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
904
+ inset && "pl-8",
905
+ className
906
+ ),
907
+ ...props
908
+ }
909
+ ));
910
+ DropdownMenuItem.displayName = DropdownMenuPrimitive.Item.displayName;
911
+ var DropdownMenuCheckboxItem = React14.forwardRef(({ className, children, checked, ...props }, ref) => /* @__PURE__ */ jsxs4(
912
+ DropdownMenuPrimitive.CheckboxItem,
913
+ {
914
+ ref,
915
+ className: cn(
916
+ "relative flex cursor-default select-none items-center rounded-[var(--tekton-radius-sm)] py-[var(--tekton-spacing-2)] pl-8 pr-[var(--tekton-spacing-2)] text-sm outline-none transition-colors focus:bg-[var(--tekton-bg-accent)] focus:text-[var(--tekton-bg-accent-foreground)] data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
917
+ className
918
+ ),
919
+ checked,
920
+ ...props,
921
+ children: [
922
+ /* @__PURE__ */ jsx16("span", { className: "absolute left-2 flex h-3.5 w-3.5 items-center justify-center", children: /* @__PURE__ */ jsx16(DropdownMenuPrimitive.ItemIndicator, { children: /* @__PURE__ */ jsx16(Check3, { className: "h-4 w-4" }) }) }),
923
+ children
924
+ ]
925
+ }
926
+ ));
927
+ DropdownMenuCheckboxItem.displayName = DropdownMenuPrimitive.CheckboxItem.displayName;
928
+ var DropdownMenuRadioItem = React14.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxs4(
929
+ DropdownMenuPrimitive.RadioItem,
930
+ {
931
+ ref,
932
+ className: cn(
933
+ "relative flex cursor-default select-none items-center rounded-[var(--tekton-radius-sm)] py-[var(--tekton-spacing-2)] pl-8 pr-[var(--tekton-spacing-2)] text-sm outline-none transition-colors focus:bg-[var(--tekton-bg-accent)] focus:text-[var(--tekton-bg-accent-foreground)] data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
934
+ className
935
+ ),
936
+ ...props,
937
+ children: [
938
+ /* @__PURE__ */ jsx16("span", { className: "absolute left-2 flex h-3.5 w-3.5 items-center justify-center", children: /* @__PURE__ */ jsx16(DropdownMenuPrimitive.ItemIndicator, { children: /* @__PURE__ */ jsx16(Circle2, { className: "h-2 w-2 fill-current" }) }) }),
939
+ children
940
+ ]
941
+ }
942
+ ));
943
+ DropdownMenuRadioItem.displayName = DropdownMenuPrimitive.RadioItem.displayName;
944
+ var DropdownMenuLabel = React14.forwardRef(({ className, inset, ...props }, ref) => /* @__PURE__ */ jsx16(
945
+ DropdownMenuPrimitive.Label,
946
+ {
947
+ ref,
948
+ className: cn(
949
+ "px-[var(--tekton-spacing-2)] py-[var(--tekton-spacing-2)] text-sm font-semibold",
950
+ inset && "pl-8",
951
+ className
952
+ ),
953
+ ...props
954
+ }
955
+ ));
956
+ DropdownMenuLabel.displayName = DropdownMenuPrimitive.Label.displayName;
957
+ var DropdownMenuSeparator = React14.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx16(
958
+ DropdownMenuPrimitive.Separator,
959
+ {
960
+ ref,
961
+ className: cn("-mx-1 my-1 h-px bg-[var(--tekton-bg-muted)]", className),
962
+ ...props
963
+ }
964
+ ));
965
+ DropdownMenuSeparator.displayName = DropdownMenuPrimitive.Separator.displayName;
966
+ var DropdownMenuShortcut = ({ className, ...props }) => {
967
+ return /* @__PURE__ */ jsx16("span", { className: cn("ml-auto text-xs tracking-widest opacity-60", className), ...props });
968
+ };
969
+ DropdownMenuShortcut.displayName = "DropdownMenuShortcut";
970
+
971
+ // src/components/table.tsx
972
+ import * as React15 from "react";
973
+ import { jsx as jsx17 } from "react/jsx-runtime";
974
+ var Table = React15.forwardRef(
975
+ ({ className, ...props }, ref) => /* @__PURE__ */ jsx17("div", { className: "relative w-full overflow-auto", children: /* @__PURE__ */ jsx17("table", { ref, className: cn("w-full caption-bottom text-sm", className), ...props }) })
976
+ );
977
+ Table.displayName = "Table";
978
+ var TableHeader = React15.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx17("thead", { ref, className: cn("[&_tr]:border-b", className), ...props }));
979
+ TableHeader.displayName = "TableHeader";
980
+ var TableBody = React15.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx17("tbody", { ref, className: cn("[&_tr:last-child]:border-0", className), ...props }));
981
+ TableBody.displayName = "TableBody";
982
+ var TableFooter = React15.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx17(
983
+ "tfoot",
984
+ {
985
+ ref,
986
+ className: cn(
987
+ "border-t bg-[var(--tekton-bg-muted)]/50 font-medium [&>tr]:last:border-b-0",
988
+ className
989
+ ),
990
+ ...props
991
+ }
992
+ ));
993
+ TableFooter.displayName = "TableFooter";
994
+ var TableRow = React15.forwardRef(
995
+ ({ className, ...props }, ref) => /* @__PURE__ */ jsx17(
996
+ "tr",
997
+ {
998
+ ref,
999
+ className: cn(
1000
+ "border-b border-[var(--tekton-border-default)] transition-colors hover:bg-[var(--tekton-bg-muted)]/50 data-[state=selected]:bg-[var(--tekton-bg-muted)]",
1001
+ className
1002
+ ),
1003
+ ...props
1004
+ }
1005
+ )
1006
+ );
1007
+ TableRow.displayName = "TableRow";
1008
+ var TableHead = React15.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx17(
1009
+ "th",
1010
+ {
1011
+ ref,
1012
+ className: cn(
1013
+ "h-12 px-[var(--tekton-spacing-4)] text-left align-middle font-medium text-[var(--tekton-bg-muted-foreground)] [&:has([role=checkbox])]:pr-0",
1014
+ className
1015
+ ),
1016
+ ...props
1017
+ }
1018
+ ));
1019
+ TableHead.displayName = "TableHead";
1020
+ var TableCell = React15.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx17(
1021
+ "td",
1022
+ {
1023
+ ref,
1024
+ className: cn(
1025
+ "p-[var(--tekton-spacing-4)] align-middle [&:has([role=checkbox])]:pr-0",
1026
+ className
1027
+ ),
1028
+ ...props
1029
+ }
1030
+ ));
1031
+ TableCell.displayName = "TableCell";
1032
+ var TableCaption = React15.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx17(
1033
+ "caption",
1034
+ {
1035
+ ref,
1036
+ className: cn(
1037
+ "mt-[var(--tekton-spacing-4)] text-sm text-[var(--tekton-bg-muted-foreground)]",
1038
+ className
1039
+ ),
1040
+ ...props
1041
+ }
1042
+ ));
1043
+ TableCaption.displayName = "TableCaption";
1044
+
1045
+ // src/components/tabs.tsx
1046
+ import * as React16 from "react";
1047
+ import * as TabsPrimitive from "@radix-ui/react-tabs";
1048
+ import { jsx as jsx18 } from "react/jsx-runtime";
1049
+ var Tabs = TabsPrimitive.Root;
1050
+ var TabsList = React16.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx18(
1051
+ TabsPrimitive.List,
1052
+ {
1053
+ ref,
1054
+ className: cn(
1055
+ "inline-flex h-10 items-center justify-center rounded-[var(--tekton-radius-xl)] bg-[var(--tekton-bg-muted)] p-1 text-[var(--tekton-bg-muted-foreground)]",
1056
+ className
1057
+ ),
1058
+ ...props
1059
+ }
1060
+ ));
1061
+ TabsList.displayName = TabsPrimitive.List.displayName;
1062
+ var TabsTrigger = React16.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx18(
1063
+ TabsPrimitive.Trigger,
1064
+ {
1065
+ ref,
1066
+ className: cn(
1067
+ "inline-flex items-center justify-center whitespace-nowrap rounded-[var(--tekton-radius-xl)] px-[var(--tekton-spacing-3)] py-1.5 text-sm font-medium ring-offset-[var(--tekton-bg-background)] transition-all focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--tekton-border-ring)] focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 data-[state=active]:bg-[var(--tekton-bg-background)] data-[state=active]:text-[var(--tekton-bg-foreground)] data-[state=active]:shadow-sm",
1068
+ className
1069
+ ),
1070
+ ...props
1071
+ }
1072
+ ));
1073
+ TabsTrigger.displayName = TabsPrimitive.Trigger.displayName;
1074
+ var TabsContent = React16.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx18(
1075
+ TabsPrimitive.Content,
1076
+ {
1077
+ ref,
1078
+ className: cn(
1079
+ "mt-[var(--tekton-spacing-2)] ring-offset-[var(--tekton-bg-background)] focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--tekton-border-ring)] focus-visible:ring-offset-2",
1080
+ className
1081
+ ),
1082
+ ...props
1083
+ }
1084
+ ));
1085
+ TabsContent.displayName = TabsPrimitive.Content.displayName;
1086
+
1087
+ // src/components/toast.tsx
1088
+ import * as React17 from "react";
1089
+ import * as ToastPrimitives from "@radix-ui/react-toast";
1090
+ import { cva as cva4 } from "class-variance-authority";
1091
+ import { X as X2 } from "lucide-react";
1092
+ import { jsx as jsx19 } from "react/jsx-runtime";
1093
+ var ToastProvider = ToastPrimitives.Provider;
1094
+ var ToastViewport = React17.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx19(
1095
+ ToastPrimitives.Viewport,
1096
+ {
1097
+ ref,
1098
+ className: cn(
1099
+ "fixed top-0 z-[100] flex max-h-screen w-full flex-col-reverse p-[var(--tekton-spacing-4)] sm:bottom-0 sm:right-0 sm:top-auto sm:flex-col md:max-w-[420px]",
1100
+ className
1101
+ ),
1102
+ ...props
1103
+ }
1104
+ ));
1105
+ ToastViewport.displayName = ToastPrimitives.Viewport.displayName;
1106
+ var toastVariants = cva4(
1107
+ "group pointer-events-auto relative flex w-full items-center justify-between space-x-[var(--tekton-spacing-4)] overflow-hidden rounded-[var(--tekton-radius-md)] border border-[var(--tekton-border-default)] p-[var(--tekton-spacing-6)] pr-8 shadow-lg transition-all data-[swipe=cancel]:translate-x-0 data-[swipe=end]:translate-x-[var(--radix-toast-swipe-end-x)] data-[swipe=move]:translate-x-[var(--radix-toast-swipe-move-x)] data-[swipe=move]:transition-none data-[state=open]:animate-in data-[state=closed]:animate-out data-[swipe=end]:animate-out data-[state=closed]:fade-out-80 data-[state=closed]:slide-out-to-right-full data-[state=open]:slide-in-from-top-full data-[state=open]:sm:slide-in-from-bottom-full",
1108
+ {
1109
+ variants: {
1110
+ variant: {
1111
+ default: "border bg-[var(--tekton-bg-background)] text-[var(--tekton-bg-foreground)]",
1112
+ destructive: "destructive group border-[var(--tekton-bg-destructive)] bg-[var(--tekton-bg-destructive)] text-[var(--tekton-bg-destructive-foreground)]"
1113
+ }
1114
+ },
1115
+ defaultVariants: {
1116
+ variant: "default"
1117
+ }
1118
+ }
1119
+ );
1120
+ var Toast = React17.forwardRef(({ className, variant, ...props }, ref) => {
1121
+ return /* @__PURE__ */ jsx19(
1122
+ ToastPrimitives.Root,
1123
+ {
1124
+ ref,
1125
+ className: cn(toastVariants({ variant }), className),
1126
+ ...props
1127
+ }
1128
+ );
1129
+ });
1130
+ Toast.displayName = ToastPrimitives.Root.displayName;
1131
+ var ToastAction = React17.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx19(
1132
+ ToastPrimitives.Action,
1133
+ {
1134
+ ref,
1135
+ className: cn(
1136
+ "inline-flex h-8 shrink-0 items-center justify-center rounded-[var(--tekton-radius-md)] border border-[var(--tekton-bg-muted)] bg-transparent px-[var(--tekton-spacing-3)] text-sm font-medium ring-offset-[var(--tekton-bg-background)] transition-colors hover:bg-[var(--tekton-bg-secondary)] focus:outline-none focus:ring-2 focus:ring-[var(--tekton-border-ring)] focus:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 group-[.destructive]:border-[var(--tekton-bg-muted)]/40 group-[.destructive]:hover:border-[var(--tekton-bg-destructive)]/30 group-[.destructive]:hover:bg-[var(--tekton-bg-destructive)] group-[.destructive]:hover:text-[var(--tekton-bg-destructive-foreground)] group-[.destructive]:focus:ring-[var(--tekton-bg-destructive)]",
1137
+ className
1138
+ ),
1139
+ ...props
1140
+ }
1141
+ ));
1142
+ ToastAction.displayName = ToastPrimitives.Action.displayName;
1143
+ var ToastClose = React17.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx19(
1144
+ ToastPrimitives.Close,
1145
+ {
1146
+ ref,
1147
+ className: cn(
1148
+ "absolute right-2 top-2 rounded-[var(--tekton-radius-md)] p-1 text-[var(--tekton-bg-foreground)]/50 opacity-0 transition-opacity hover:text-[var(--tekton-bg-foreground)] focus:opacity-100 focus:outline-none focus:ring-2 group-hover:opacity-100 group-[.destructive]:text-red-300 group-[.destructive]:hover:text-red-50 group-[.destructive]:focus:ring-red-400 group-[.destructive]:focus:ring-offset-red-600",
1149
+ className
1150
+ ),
1151
+ "toast-close": "",
1152
+ ...props,
1153
+ children: /* @__PURE__ */ jsx19(X2, { className: "h-4 w-4" })
1154
+ }
1155
+ ));
1156
+ ToastClose.displayName = ToastPrimitives.Close.displayName;
1157
+ var ToastTitle = React17.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx19(ToastPrimitives.Title, { ref, className: cn("text-sm font-semibold", className), ...props }));
1158
+ ToastTitle.displayName = ToastPrimitives.Title.displayName;
1159
+ var ToastDescription = React17.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx19(
1160
+ ToastPrimitives.Description,
1161
+ {
1162
+ ref,
1163
+ className: cn("text-sm opacity-90", className),
1164
+ ...props
1165
+ }
1166
+ ));
1167
+ ToastDescription.displayName = ToastPrimitives.Description.displayName;
1168
+
1169
+ // src/components/tooltip.tsx
1170
+ import * as React18 from "react";
1171
+ import * as TooltipPrimitive from "@radix-ui/react-tooltip";
1172
+ import { jsx as jsx20 } from "react/jsx-runtime";
1173
+ var TooltipProvider = TooltipPrimitive.Provider;
1174
+ var Tooltip = TooltipPrimitive.Root;
1175
+ var TooltipTrigger = TooltipPrimitive.Trigger;
1176
+ var TooltipContent = React18.forwardRef(({ className, sideOffset = 4, ...props }, ref) => /* @__PURE__ */ jsx20(
1177
+ TooltipPrimitive.Content,
1178
+ {
1179
+ ref,
1180
+ sideOffset,
1181
+ className: cn(
1182
+ "z-50 overflow-hidden rounded-[var(--tekton-radius-md)] border border-[var(--tekton-border-default)] bg-[var(--tekton-bg-popover)] px-[var(--tekton-spacing-3)] py-[var(--tekton-spacing-2)] text-sm text-[var(--tekton-bg-popover-foreground)] shadow-md animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 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",
1183
+ className
1184
+ ),
1185
+ ...props
1186
+ }
1187
+ ));
1188
+ TooltipContent.displayName = TooltipPrimitive.Content.displayName;
1189
+
1190
+ // src/components/popover.tsx
1191
+ import * as React19 from "react";
1192
+ import * as PopoverPrimitive from "@radix-ui/react-popover";
1193
+ import { jsx as jsx21 } from "react/jsx-runtime";
1194
+ var Popover = PopoverPrimitive.Root;
1195
+ var PopoverTrigger = PopoverPrimitive.Trigger;
1196
+ var PopoverContent = React19.forwardRef(({ className, align = "center", sideOffset = 4, ...props }, ref) => /* @__PURE__ */ jsx21(PopoverPrimitive.Portal, { children: /* @__PURE__ */ jsx21(
1197
+ PopoverPrimitive.Content,
1198
+ {
1199
+ ref,
1200
+ align,
1201
+ sideOffset,
1202
+ className: cn(
1203
+ "z-50 w-72 rounded-[var(--tekton-radius-md)] border border-[var(--tekton-border-default)] bg-[var(--tekton-bg-popover)] p-[var(--tekton-spacing-4)] text-[var(--tekton-bg-popover-foreground)] shadow-md outline-none data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 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",
1204
+ className
1205
+ ),
1206
+ ...props
1207
+ }
1208
+ ) }));
1209
+ PopoverContent.displayName = PopoverPrimitive.Content.displayName;
1210
+
1211
+ // src/components/sheet.tsx
1212
+ import * as React20 from "react";
1213
+ import * as SheetPrimitive from "@radix-ui/react-dialog";
1214
+ import { cva as cva5 } from "class-variance-authority";
1215
+ import { X as X3 } from "lucide-react";
1216
+ import { jsx as jsx22, jsxs as jsxs5 } from "react/jsx-runtime";
1217
+ var Sheet = SheetPrimitive.Root;
1218
+ var SheetTrigger = SheetPrimitive.Trigger;
1219
+ var SheetClose = SheetPrimitive.Close;
1220
+ var SheetPortal = SheetPrimitive.Portal;
1221
+ var SheetOverlay = React20.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx22(
1222
+ SheetPrimitive.Overlay,
1223
+ {
1224
+ className: cn(
1225
+ "fixed inset-0 z-50 bg-[var(--tekton-bg-background)]/80 backdrop-blur-sm data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0",
1226
+ className
1227
+ ),
1228
+ ...props,
1229
+ ref
1230
+ }
1231
+ ));
1232
+ SheetOverlay.displayName = SheetPrimitive.Overlay.displayName;
1233
+ var sheetVariants = cva5(
1234
+ "fixed z-50 gap-[var(--tekton-spacing-4)] bg-[var(--tekton-bg-background)] p-[var(--tekton-spacing-6)] shadow-lg transition ease-in-out data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:duration-300 data-[state=open]:duration-500",
1235
+ {
1236
+ variants: {
1237
+ side: {
1238
+ top: "inset-x-0 top-0 border-b border-[var(--tekton-border-default)] data-[state=closed]:slide-out-to-top data-[state=open]:slide-in-from-top",
1239
+ bottom: "inset-x-0 bottom-0 border-t border-[var(--tekton-border-default)] data-[state=closed]:slide-out-to-bottom data-[state=open]:slide-in-from-bottom",
1240
+ left: "inset-y-0 left-0 h-full w-3/4 border-r border-[var(--tekton-border-default)] data-[state=closed]:slide-out-to-left data-[state=open]:slide-in-from-left sm:max-w-sm",
1241
+ right: "inset-y-0 right-0 h-full w-3/4 border-l border-[var(--tekton-border-default)] data-[state=closed]:slide-out-to-right data-[state=open]:slide-in-from-right sm:max-w-sm"
1242
+ }
1243
+ },
1244
+ defaultVariants: {
1245
+ side: "right"
1246
+ }
1247
+ }
1248
+ );
1249
+ var SheetContent = React20.forwardRef(({ side = "right", className, children, ...props }, ref) => /* @__PURE__ */ jsxs5(SheetPortal, { children: [
1250
+ /* @__PURE__ */ jsx22(SheetOverlay, {}),
1251
+ /* @__PURE__ */ jsxs5(SheetPrimitive.Content, { ref, className: cn(sheetVariants({ side }), className), ...props, children: [
1252
+ children,
1253
+ /* @__PURE__ */ jsxs5(SheetPrimitive.Close, { className: "absolute right-4 top-4 rounded-[var(--tekton-radius-sm)] opacity-70 ring-offset-[var(--tekton-bg-background)] transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-[var(--tekton-border-ring)] focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-[var(--tekton-bg-secondary)]", children: [
1254
+ /* @__PURE__ */ jsx22(X3, { className: "h-4 w-4" }),
1255
+ /* @__PURE__ */ jsx22("span", { className: "sr-only", children: "Close" })
1256
+ ] })
1257
+ ] })
1258
+ ] }));
1259
+ SheetContent.displayName = SheetPrimitive.Content.displayName;
1260
+ var SheetHeader = ({ className, ...props }) => /* @__PURE__ */ jsx22(
1261
+ "div",
1262
+ {
1263
+ className: cn(
1264
+ "flex flex-col space-y-[var(--tekton-spacing-2)] text-center sm:text-left",
1265
+ className
1266
+ ),
1267
+ ...props
1268
+ }
1269
+ );
1270
+ SheetHeader.displayName = "SheetHeader";
1271
+ var SheetFooter = ({ className, ...props }) => /* @__PURE__ */ jsx22(
1272
+ "div",
1273
+ {
1274
+ className: cn(
1275
+ "flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-[var(--tekton-spacing-2)]",
1276
+ className
1277
+ ),
1278
+ ...props
1279
+ }
1280
+ );
1281
+ SheetFooter.displayName = "SheetFooter";
1282
+ var SheetTitle = React20.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx22(
1283
+ SheetPrimitive.Title,
1284
+ {
1285
+ ref,
1286
+ className: cn("text-lg font-semibold text-[var(--tekton-bg-foreground)]", className),
1287
+ ...props
1288
+ }
1289
+ ));
1290
+ SheetTitle.displayName = SheetPrimitive.Title.displayName;
1291
+ var SheetDescription = React20.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx22(
1292
+ SheetPrimitive.Description,
1293
+ {
1294
+ ref,
1295
+ className: cn("text-sm text-[var(--tekton-bg-muted-foreground)]", className),
1296
+ ...props
1297
+ }
1298
+ ));
1299
+ SheetDescription.displayName = SheetPrimitive.Description.displayName;
1300
+
1301
+ // src/components/alert-dialog.tsx
1302
+ import * as React21 from "react";
1303
+ import * as AlertDialogPrimitive from "@radix-ui/react-alert-dialog";
1304
+ import { jsx as jsx23, jsxs as jsxs6 } from "react/jsx-runtime";
1305
+ var AlertDialog = AlertDialogPrimitive.Root;
1306
+ var AlertDialogTrigger = AlertDialogPrimitive.Trigger;
1307
+ var AlertDialogPortal = AlertDialogPrimitive.Portal;
1308
+ var AlertDialogOverlay = React21.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx23(
1309
+ AlertDialogPrimitive.Overlay,
1310
+ {
1311
+ className: cn(
1312
+ "fixed inset-0 z-50 bg-black/80 backdrop-blur-sm data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0",
1313
+ className
1314
+ ),
1315
+ ...props,
1316
+ ref
1317
+ }
1318
+ ));
1319
+ AlertDialogOverlay.displayName = AlertDialogPrimitive.Overlay.displayName;
1320
+ var AlertDialogContent = React21.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxs6(AlertDialogPortal, { children: [
1321
+ /* @__PURE__ */ jsx23(AlertDialogOverlay, {}),
1322
+ /* @__PURE__ */ jsx23(
1323
+ AlertDialogPrimitive.Content,
1324
+ {
1325
+ ref,
1326
+ className: cn(
1327
+ "fixed left-[50%] top-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border border-neutral-200 bg-white p-6 shadow-lg duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%] sm:rounded-lg",
1328
+ className
1329
+ ),
1330
+ ...props
1331
+ }
1332
+ )
1333
+ ] }));
1334
+ AlertDialogContent.displayName = AlertDialogPrimitive.Content.displayName;
1335
+ var AlertDialogHeader = ({ className, ...props }) => /* @__PURE__ */ jsx23("div", { className: cn("flex flex-col space-y-2 text-center sm:text-left", className), ...props });
1336
+ AlertDialogHeader.displayName = "AlertDialogHeader";
1337
+ var AlertDialogFooter = ({ className, ...props }) => /* @__PURE__ */ jsx23(
1338
+ "div",
1339
+ {
1340
+ className: cn("flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2", className),
1341
+ ...props
1342
+ }
1343
+ );
1344
+ AlertDialogFooter.displayName = "AlertDialogFooter";
1345
+ var AlertDialogTitle = React21.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx23(
1346
+ AlertDialogPrimitive.Title,
1347
+ {
1348
+ ref,
1349
+ className: cn("text-lg font-semibold", className),
1350
+ ...props
1351
+ }
1352
+ ));
1353
+ AlertDialogTitle.displayName = AlertDialogPrimitive.Title.displayName;
1354
+ var AlertDialogDescription = React21.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx23(
1355
+ AlertDialogPrimitive.Description,
1356
+ {
1357
+ ref,
1358
+ className: cn("text-sm text-neutral-500", className),
1359
+ ...props
1360
+ }
1361
+ ));
1362
+ AlertDialogDescription.displayName = AlertDialogPrimitive.Description.displayName;
1363
+ var AlertDialogAction = React21.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx23(AlertDialogPrimitive.Action, { ref, className: cn(buttonVariants(), className), ...props }));
1364
+ AlertDialogAction.displayName = AlertDialogPrimitive.Action.displayName;
1365
+ var AlertDialogCancel = React21.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx23(
1366
+ AlertDialogPrimitive.Cancel,
1367
+ {
1368
+ ref,
1369
+ className: cn(buttonVariants({ variant: "outline" }), "mt-2 sm:mt-0", className),
1370
+ ...props
1371
+ }
1372
+ ));
1373
+ AlertDialogCancel.displayName = AlertDialogPrimitive.Cancel.displayName;
1374
+
1375
+ // src/components/progress.tsx
1376
+ import * as React22 from "react";
1377
+ import * as ProgressPrimitive from "@radix-ui/react-progress";
1378
+ import { jsx as jsx24 } from "react/jsx-runtime";
1379
+ var Progress = React22.forwardRef(({ className, value, ...props }, ref) => /* @__PURE__ */ jsx24(
1380
+ ProgressPrimitive.Root,
1381
+ {
1382
+ ref,
1383
+ value,
1384
+ "aria-valuenow": value ?? void 0,
1385
+ "aria-valuemin": 0,
1386
+ "aria-valuemax": 100,
1387
+ className: cn(
1388
+ "relative h-4 w-full overflow-hidden rounded-[var(--tekton-radius-full)] bg-[var(--tekton-bg-secondary)]",
1389
+ className
1390
+ ),
1391
+ ...props,
1392
+ children: /* @__PURE__ */ jsx24(
1393
+ ProgressPrimitive.Indicator,
1394
+ {
1395
+ className: "h-full w-full flex-1 bg-[var(--tekton-bg-primary)] transition-all",
1396
+ style: { transform: `translateX(-${100 - (value || 0)}%)` }
1397
+ }
1398
+ )
1399
+ }
1400
+ ));
1401
+ Progress.displayName = ProgressPrimitive.Root.displayName;
1402
+
1403
+ // src/components/sidebar.tsx
1404
+ import * as React23 from "react";
1405
+ import { cva as cva6 } from "class-variance-authority";
1406
+ import { jsx as jsx25, jsxs as jsxs7 } from "react/jsx-runtime";
1407
+ var sidebarVariants = cva6(
1408
+ "flex flex-col border-r border-[var(--tekton-border-default)] bg-[var(--tekton-bg-background)] transition-all duration-300",
1409
+ {
1410
+ variants: {
1411
+ variant: {
1412
+ default: "shadow-sm",
1413
+ compact: "shadow-none"
1414
+ },
1415
+ size: {
1416
+ default: "w-64",
1417
+ compact: "w-16",
1418
+ expanded: "w-80"
1419
+ }
1420
+ },
1421
+ defaultVariants: {
1422
+ variant: "default",
1423
+ size: "default"
1424
+ }
1425
+ }
1426
+ );
1427
+ var sidebarHeaderVariants = cva6(
1428
+ "flex items-center gap-[var(--tekton-spacing-2)] border-b border-[var(--tekton-border-default)] bg-[var(--tekton-bg-card)] p-[var(--tekton-spacing-4)]",
1429
+ {
1430
+ variants: {
1431
+ size: {
1432
+ default: "h-16",
1433
+ compact: "h-16 justify-center",
1434
+ expanded: "h-20"
1435
+ }
1436
+ },
1437
+ defaultVariants: {
1438
+ size: "default"
1439
+ }
1440
+ }
1441
+ );
1442
+ var sidebarContentVariants = cva6("flex-1 overflow-y-auto p-[var(--tekton-spacing-4)]", {
1443
+ variants: {
1444
+ spacing: {
1445
+ default: "space-y-[var(--tekton-spacing-2)]",
1446
+ compact: "space-y-[var(--tekton-spacing-1)]",
1447
+ relaxed: "space-y-[var(--tekton-spacing-4)]"
1448
+ }
1449
+ },
1450
+ defaultVariants: {
1451
+ spacing: "default"
1452
+ }
1453
+ });
1454
+ var sidebarItemVariants = cva6(
1455
+ "flex w-full items-center gap-[var(--tekton-spacing-3)] rounded-[var(--tekton-radius-md)] px-[var(--tekton-spacing-3)] py-[var(--tekton-spacing-2)] text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--tekton-border-ring)] focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50",
1456
+ {
1457
+ variants: {
1458
+ variant: {
1459
+ default: "text-[var(--tekton-bg-foreground)] hover:bg-[var(--tekton-bg-accent)] hover:text-[var(--tekton-bg-accent-foreground)]",
1460
+ active: "bg-[var(--tekton-bg-primary)] text-[var(--tekton-bg-primary-foreground)] hover:bg-[var(--tekton-bg-primary)]/90"
1461
+ }
1462
+ },
1463
+ defaultVariants: {
1464
+ variant: "default"
1465
+ }
1466
+ }
1467
+ );
1468
+ var sidebarSectionVariants = cva6("space-y-[var(--tekton-spacing-1)]", {
1469
+ variants: {}
1470
+ });
1471
+ var sidebarSectionTitleVariants = cva6(
1472
+ "px-[var(--tekton-spacing-3)] py-[var(--tekton-spacing-2)] text-xs font-semibold uppercase tracking-wider text-[var(--tekton-text-muted-foreground)]",
1473
+ {
1474
+ variants: {}
1475
+ }
1476
+ );
1477
+ var sidebarFooterVariants = cva6(
1478
+ "border-t border-[var(--tekton-border-default)] p-[var(--tekton-spacing-4)]",
1479
+ {
1480
+ variants: {}
1481
+ }
1482
+ );
1483
+ var Sidebar = React23.forwardRef(
1484
+ ({ className, variant, size, collapsed, ...props }, ref) => {
1485
+ return /* @__PURE__ */ jsx25(
1486
+ "div",
1487
+ {
1488
+ ref,
1489
+ className: cn(sidebarVariants({ variant, size: collapsed ? "compact" : size, className })),
1490
+ role: "navigation",
1491
+ "aria-label": "Main sidebar navigation",
1492
+ ...props
1493
+ }
1494
+ );
1495
+ }
1496
+ );
1497
+ Sidebar.displayName = "Sidebar";
1498
+ var SidebarHeader = React23.forwardRef(
1499
+ ({ className, size, ...props }, ref) => {
1500
+ return /* @__PURE__ */ jsx25("div", { ref, className: cn(sidebarHeaderVariants({ size, className })), ...props });
1501
+ }
1502
+ );
1503
+ SidebarHeader.displayName = "SidebarHeader";
1504
+ var SidebarContent = React23.forwardRef(
1505
+ ({ className, spacing, ...props }, ref) => {
1506
+ return /* @__PURE__ */ jsx25("div", { ref, className: cn(sidebarContentVariants({ spacing, className })), ...props });
1507
+ }
1508
+ );
1509
+ SidebarContent.displayName = "SidebarContent";
1510
+ var SidebarItem = React23.forwardRef(
1511
+ ({ className, variant, icon, badge, children, active, ...props }, ref) => {
1512
+ return /* @__PURE__ */ jsxs7(
1513
+ "button",
1514
+ {
1515
+ ref,
1516
+ className: cn(sidebarItemVariants({ variant: active ? "active" : variant, className })),
1517
+ ...props,
1518
+ children: [
1519
+ icon && /* @__PURE__ */ jsx25("span", { className: "flex-shrink-0", children: icon }),
1520
+ /* @__PURE__ */ jsx25("span", { className: "flex-1 truncate text-left", children }),
1521
+ badge && /* @__PURE__ */ jsx25("span", { className: "flex-shrink-0", children: badge })
1522
+ ]
1523
+ }
1524
+ );
1525
+ }
1526
+ );
1527
+ SidebarItem.displayName = "SidebarItem";
1528
+ var SidebarSection = React23.forwardRef(
1529
+ ({ className, title, collapsed, children, ...props }, ref) => {
1530
+ const [isCollapsed, setIsCollapsed] = React23.useState(collapsed ?? false);
1531
+ React23.useEffect(() => {
1532
+ if (collapsed !== void 0) {
1533
+ setIsCollapsed(collapsed);
1534
+ }
1535
+ }, [collapsed]);
1536
+ return /* @__PURE__ */ jsxs7("div", { ref, className: cn(sidebarSectionVariants({ className })), ...props, children: [
1537
+ title && /* @__PURE__ */ jsx25(
1538
+ "button",
1539
+ {
1540
+ className: cn(
1541
+ sidebarSectionTitleVariants(),
1542
+ "w-full text-left hover:text-[var(--tekton-bg-foreground)] transition-colors"
1543
+ ),
1544
+ onClick: () => setIsCollapsed(!isCollapsed),
1545
+ "aria-expanded": !isCollapsed,
1546
+ children: /* @__PURE__ */ jsxs7("span", { className: "flex items-center justify-between", children: [
1547
+ title,
1548
+ /* @__PURE__ */ jsx25(
1549
+ "span",
1550
+ {
1551
+ className: cn("transition-transform", isCollapsed ? "rotate-0" : "rotate-90"),
1552
+ "aria-hidden": "true",
1553
+ children: "\u203A"
1554
+ }
1555
+ )
1556
+ ] })
1557
+ }
1558
+ ),
1559
+ !isCollapsed && /* @__PURE__ */ jsx25("div", { className: "space-y-[var(--tekton-spacing-1)]", children })
1560
+ ] });
1561
+ }
1562
+ );
1563
+ SidebarSection.displayName = "SidebarSection";
1564
+ var SidebarSectionTitle = React23.forwardRef(
1565
+ ({ className, ...props }, ref) => {
1566
+ return /* @__PURE__ */ jsx25("div", { ref, className: cn(sidebarSectionTitleVariants({ className })), ...props });
1567
+ }
1568
+ );
1569
+ SidebarSectionTitle.displayName = "SidebarSectionTitle";
1570
+ var SidebarFooter = React23.forwardRef(
1571
+ ({ className, ...props }, ref) => {
1572
+ return /* @__PURE__ */ jsx25("div", { ref, className: cn(sidebarFooterVariants({ className })), ...props });
1573
+ }
1574
+ );
1575
+ SidebarFooter.displayName = "SidebarFooter";
1576
+
1577
+ // src/components/navigation-menu.tsx
1578
+ import * as React24 from "react";
1579
+ import * as NavigationMenuPrimitive from "@radix-ui/react-navigation-menu";
1580
+ import { cva as cva7 } from "class-variance-authority";
1581
+ import { jsx as jsx26, jsxs as jsxs8 } from "react/jsx-runtime";
1582
+ var NavigationMenu = React24.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxs8(
1583
+ NavigationMenuPrimitive.Root,
1584
+ {
1585
+ ref,
1586
+ className: cn("relative z-10 flex max-w-max flex-1 items-center justify-center", className),
1587
+ ...props,
1588
+ children: [
1589
+ children,
1590
+ /* @__PURE__ */ jsx26(NavigationMenuViewport, {})
1591
+ ]
1592
+ }
1593
+ ));
1594
+ NavigationMenu.displayName = NavigationMenuPrimitive.Root.displayName;
1595
+ var NavigationMenuList = React24.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx26(
1596
+ NavigationMenuPrimitive.List,
1597
+ {
1598
+ ref,
1599
+ className: cn(
1600
+ "group flex flex-1 list-none items-center justify-center gap-[var(--tekton-spacing-1)]",
1601
+ className
1602
+ ),
1603
+ ...props
1604
+ }
1605
+ ));
1606
+ NavigationMenuList.displayName = NavigationMenuPrimitive.List.displayName;
1607
+ var NavigationMenuItem = NavigationMenuPrimitive.Item;
1608
+ var navigationMenuTriggerStyle = cva7(
1609
+ "group inline-flex h-10 w-max items-center justify-center rounded-[var(--tekton-radius-md)] bg-[var(--tekton-bg-background)] px-[var(--tekton-spacing-4)] py-[var(--tekton-spacing-2)] text-sm font-medium transition-colors hover:bg-[var(--tekton-bg-accent)] hover:text-[var(--tekton-bg-accent-foreground)] focus:bg-[var(--tekton-bg-accent)] focus:text-[var(--tekton-bg-accent-foreground)] focus:outline-none disabled:pointer-events-none disabled:opacity-50 data-[active]:bg-[var(--tekton-bg-accent)]/50 data-[state=open]:bg-[var(--tekton-bg-accent)]/50"
1610
+ );
1611
+ var NavigationMenuTrigger = React24.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxs8(
1612
+ NavigationMenuPrimitive.Trigger,
1613
+ {
1614
+ ref,
1615
+ className: cn(navigationMenuTriggerStyle(), "group", className),
1616
+ ...props,
1617
+ children: [
1618
+ children,
1619
+ " ",
1620
+ /* @__PURE__ */ jsx26(
1621
+ "svg",
1622
+ {
1623
+ width: "12",
1624
+ height: "12",
1625
+ viewBox: "0 0 12 12",
1626
+ fill: "none",
1627
+ xmlns: "http://www.w3.org/2000/svg",
1628
+ className: "relative top-[1px] ml-1 h-3 w-3 transition duration-200 group-data-[state=open]:rotate-180",
1629
+ "aria-hidden": "true",
1630
+ children: /* @__PURE__ */ jsx26(
1631
+ "path",
1632
+ {
1633
+ d: "M2.5 4.5L6 8L9.5 4.5",
1634
+ stroke: "currentColor",
1635
+ strokeWidth: "1.5",
1636
+ strokeLinecap: "round",
1637
+ strokeLinejoin: "round"
1638
+ }
1639
+ )
1640
+ }
1641
+ )
1642
+ ]
1643
+ }
1644
+ ));
1645
+ NavigationMenuTrigger.displayName = NavigationMenuPrimitive.Trigger.displayName;
1646
+ var NavigationMenuContent = React24.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx26(
1647
+ NavigationMenuPrimitive.Content,
1648
+ {
1649
+ ref,
1650
+ className: cn(
1651
+ "left-0 top-0 w-full data-[motion^=from-]:animate-in data-[motion^=to-]:animate-out data-[motion^=from-]:fade-in data-[motion^=to-]:fade-out data-[motion=from-end]:slide-in-from-right-52 data-[motion=from-start]:slide-in-from-left-52 data-[motion=to-end]:slide-out-to-right-52 data-[motion=to-start]:slide-out-to-left-52 md:absolute md:w-auto",
1652
+ className
1653
+ ),
1654
+ ...props
1655
+ }
1656
+ ));
1657
+ NavigationMenuContent.displayName = NavigationMenuPrimitive.Content.displayName;
1658
+ var NavigationMenuLink = NavigationMenuPrimitive.Link;
1659
+ var NavigationMenuViewport = React24.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx26("div", { className: cn("absolute left-0 top-full flex justify-center"), children: /* @__PURE__ */ jsx26(
1660
+ NavigationMenuPrimitive.Viewport,
1661
+ {
1662
+ className: cn(
1663
+ "origin-top-center relative mt-1.5 h-[var(--radix-navigation-menu-viewport-height)] w-full overflow-hidden rounded-[var(--tekton-radius-md)] border border-[var(--tekton-border-default)] bg-[var(--tekton-bg-popover)] text-[var(--tekton-text-popover-foreground)] shadow-lg data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-90 md:w-[var(--radix-navigation-menu-viewport-width)]",
1664
+ className
1665
+ ),
1666
+ ref,
1667
+ ...props
1668
+ }
1669
+ ) }));
1670
+ NavigationMenuViewport.displayName = NavigationMenuPrimitive.Viewport.displayName;
1671
+ var NavigationMenuIndicator = React24.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx26(
1672
+ NavigationMenuPrimitive.Indicator,
1673
+ {
1674
+ ref,
1675
+ className: cn(
1676
+ "top-full z-[1] flex h-1.5 items-end justify-center overflow-hidden data-[state=visible]:animate-in data-[state=hidden]:animate-out data-[state=hidden]:fade-out data-[state=visible]:fade-in",
1677
+ className
1678
+ ),
1679
+ ...props,
1680
+ children: /* @__PURE__ */ jsx26("div", { className: "relative top-[60%] h-2 w-2 rotate-45 rounded-tl-sm bg-[var(--tekton-border-default)] shadow-md" })
1681
+ }
1682
+ ));
1683
+ NavigationMenuIndicator.displayName = NavigationMenuPrimitive.Indicator.displayName;
1684
+
1685
+ // src/components/breadcrumb.tsx
1686
+ import * as React25 from "react";
1687
+ import { cva as cva8 } from "class-variance-authority";
1688
+ import { jsx as jsx27, jsxs as jsxs9 } from "react/jsx-runtime";
1689
+ var breadcrumbVariants = cva8("flex items-center gap-[var(--tekton-spacing-2)]", {
1690
+ variants: {
1691
+ size: {
1692
+ sm: "text-xs",
1693
+ default: "text-sm",
1694
+ lg: "text-base"
1695
+ }
1696
+ },
1697
+ defaultVariants: {
1698
+ size: "default"
1699
+ }
1700
+ });
1701
+ var breadcrumbListVariants = cva8("flex flex-wrap items-center gap-1.5 break-words", {
1702
+ variants: {}
1703
+ });
1704
+ var breadcrumbItemVariants = cva8("inline-flex items-center gap-1.5", {
1705
+ variants: {}
1706
+ });
1707
+ var breadcrumbLinkVariants = cva8(
1708
+ "transition-colors hover:text-[var(--tekton-bg-foreground)] focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--tekton-border-ring)] focus-visible:ring-offset-2 rounded-[var(--tekton-radius-sm)]",
1709
+ {
1710
+ variants: {
1711
+ active: {
1712
+ true: "text-[var(--tekton-bg-foreground)] font-medium pointer-events-none",
1713
+ false: "text-[var(--tekton-text-muted-foreground)] underline-offset-4 hover:underline"
1714
+ }
1715
+ },
1716
+ defaultVariants: {
1717
+ active: false
1718
+ }
1719
+ }
1720
+ );
1721
+ var breadcrumbSeparatorVariants = cva8("text-[var(--tekton-text-muted-foreground)] select-none", {
1722
+ variants: {}
1723
+ });
1724
+ var breadcrumbEllipsisVariants = cva8(
1725
+ "inline-flex h-9 w-9 items-center justify-center text-[var(--tekton-text-muted-foreground)]",
1726
+ {
1727
+ variants: {}
1728
+ }
1729
+ );
1730
+ var Breadcrumb = React25.forwardRef(
1731
+ ({ className, size, separator: _separator = "/", ...props }, ref) => {
1732
+ return /* @__PURE__ */ jsx27(
1733
+ "nav",
1734
+ {
1735
+ ref,
1736
+ "aria-label": "breadcrumb",
1737
+ className: cn(breadcrumbVariants({ size, className })),
1738
+ ...props
1739
+ }
1740
+ );
1741
+ }
1742
+ );
1743
+ Breadcrumb.displayName = "Breadcrumb";
1744
+ var BreadcrumbList = React25.forwardRef(
1745
+ ({ className, ...props }, ref) => /* @__PURE__ */ jsx27("ol", { ref, className: cn(breadcrumbListVariants({ className })), ...props })
1746
+ );
1747
+ BreadcrumbList.displayName = "BreadcrumbList";
1748
+ var BreadcrumbItem = React25.forwardRef(
1749
+ ({ className, ...props }, ref) => /* @__PURE__ */ jsx27("li", { ref, className: cn(breadcrumbItemVariants({ className })), ...props })
1750
+ );
1751
+ BreadcrumbItem.displayName = "BreadcrumbItem";
1752
+ var BreadcrumbLink = React25.forwardRef(
1753
+ ({ className, active, asChild = false, ...props }, ref) => {
1754
+ const Comp = asChild ? React25.Fragment : "a";
1755
+ return /* @__PURE__ */ jsx27(
1756
+ Comp,
1757
+ {
1758
+ ref: asChild ? void 0 : ref,
1759
+ className: cn(breadcrumbLinkVariants({ active, className })),
1760
+ "aria-current": active ? "page" : void 0,
1761
+ ...asChild ? {} : props,
1762
+ children: asChild ? props.children : props.children
1763
+ }
1764
+ );
1765
+ }
1766
+ );
1767
+ BreadcrumbLink.displayName = "BreadcrumbLink";
1768
+ var BreadcrumbPage = React25.forwardRef(
1769
+ ({ className, ...props }, ref) => /* @__PURE__ */ jsx27(
1770
+ "span",
1771
+ {
1772
+ ref,
1773
+ role: "link",
1774
+ "aria-disabled": "true",
1775
+ "aria-current": "page",
1776
+ className: cn(
1777
+ breadcrumbLinkVariants({ active: true }),
1778
+ "text-[var(--tekton-bg-foreground)]",
1779
+ className
1780
+ ),
1781
+ ...props
1782
+ }
1783
+ )
1784
+ );
1785
+ BreadcrumbPage.displayName = "BreadcrumbPage";
1786
+ var BreadcrumbSeparator = React25.forwardRef(
1787
+ ({ children, className, ...props }, ref) => /* @__PURE__ */ jsx27(
1788
+ "li",
1789
+ {
1790
+ ref,
1791
+ role: "presentation",
1792
+ "aria-hidden": "true",
1793
+ className: cn(breadcrumbSeparatorVariants({ className })),
1794
+ ...props,
1795
+ children: children ?? "/"
1796
+ }
1797
+ )
1798
+ );
1799
+ BreadcrumbSeparator.displayName = "BreadcrumbSeparator";
1800
+ var BreadcrumbEllipsis = React25.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxs9(
1801
+ "span",
1802
+ {
1803
+ ref,
1804
+ role: "presentation",
1805
+ "aria-hidden": "true",
1806
+ className: cn(breadcrumbEllipsisVariants({ className })),
1807
+ ...props,
1808
+ children: [
1809
+ /* @__PURE__ */ jsx27(
1810
+ "svg",
1811
+ {
1812
+ width: "15",
1813
+ height: "15",
1814
+ viewBox: "0 0 15 15",
1815
+ fill: "none",
1816
+ xmlns: "http://www.w3.org/2000/svg",
1817
+ "aria-hidden": "true",
1818
+ children: /* @__PURE__ */ jsx27(
1819
+ "path",
1820
+ {
1821
+ d: "M3.625 7.5C3.625 8.12132 3.12132 8.625 2.5 8.625C1.87868 8.625 1.375 8.12132 1.375 7.5C1.375 6.87868 1.87868 6.375 2.5 6.375C3.12132 6.375 3.625 6.87868 3.625 7.5ZM8.625 7.5C8.625 8.12132 8.12132 8.625 7.5 8.625C6.87868 8.625 6.375 8.12132 6.375 7.5C6.375 6.87868 6.87868 6.375 7.5 6.375C8.12132 6.375 8.625 6.87868 8.625 7.5ZM12.5 8.625C13.1213 8.625 13.625 8.12132 13.625 7.5C13.625 6.87868 13.1213 6.375 12.5 6.375C11.8787 6.375 11.375 6.87868 11.375 7.5C11.375 8.12132 11.8787 8.625 12.5 8.625Z",
1822
+ fill: "currentColor",
1823
+ fillRule: "evenodd",
1824
+ clipRule: "evenodd"
1825
+ }
1826
+ )
1827
+ }
1828
+ ),
1829
+ /* @__PURE__ */ jsx27("span", { className: "sr-only", children: "More" })
1830
+ ]
1831
+ }
1832
+ ));
1833
+ BreadcrumbEllipsis.displayName = "BreadcrumbEllipsis";
1834
+
1835
+ // src/components/command.tsx
1836
+ import * as React26 from "react";
1837
+ import { Command as CommandPrimitive } from "cmdk";
1838
+ import { jsx as jsx28, jsxs as jsxs10 } from "react/jsx-runtime";
1839
+ var Command = React26.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx28(
1840
+ CommandPrimitive,
1841
+ {
1842
+ ref,
1843
+ className: cn(
1844
+ "flex h-full w-full flex-col overflow-hidden rounded-[var(--tekton-radius-md)] bg-[var(--tekton-bg-popover)] text-[var(--tekton-text-popover-foreground)]",
1845
+ className
1846
+ ),
1847
+ ...props
1848
+ }
1849
+ ));
1850
+ Command.displayName = CommandPrimitive.displayName;
1851
+ var CommandDialog = ({
1852
+ children,
1853
+ ...props
1854
+ }) => {
1855
+ return /* @__PURE__ */ jsx28(
1856
+ CommandPrimitive.Dialog,
1857
+ {
1858
+ ...props,
1859
+ className: cn(
1860
+ "fixed inset-0 z-50 bg-[var(--tekton-bg-background)]/80 backdrop-blur-sm data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0"
1861
+ ),
1862
+ children: /* @__PURE__ */ jsx28("div", { className: "fixed left-[50%] top-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border border-[var(--tekton-border-default)] bg-[var(--tekton-bg-background)] p-6 shadow-lg duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%] sm:rounded-lg", children: /* @__PURE__ */ jsx28(Command, { className: "[&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:font-medium [&_[cmdk-group-heading]]:text-[var(--tekton-text-muted-foreground)] [&_[cmdk-group]:not([hidden])_~[cmdk-group]]:pt-0 [&_[cmdk-group]]:px-2 [&_[cmdk-input-wrapper]_svg]:h-5 [&_[cmdk-input-wrapper]_svg]:w-5 [&_[cmdk-input]]:h-12 [&_[cmdk-item]]:px-2 [&_[cmdk-item]]:py-3 [&_[cmdk-item]_svg]:h-5 [&_[cmdk-item]_svg]:w-5", children }) })
1863
+ }
1864
+ );
1865
+ };
1866
+ var CommandInput = React26.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxs10(
1867
+ "div",
1868
+ {
1869
+ className: "flex items-center border-b border-[var(--tekton-border-default)] px-3",
1870
+ "cmdk-input-wrapper": "",
1871
+ children: [
1872
+ /* @__PURE__ */ jsx28(
1873
+ "svg",
1874
+ {
1875
+ width: "15",
1876
+ height: "15",
1877
+ viewBox: "0 0 15 15",
1878
+ fill: "none",
1879
+ xmlns: "http://www.w3.org/2000/svg",
1880
+ className: "mr-2 h-4 w-4 shrink-0 opacity-50",
1881
+ children: /* @__PURE__ */ jsx28(
1882
+ "path",
1883
+ {
1884
+ d: "M10 6.5C10 8.433 8.433 10 6.5 10C4.567 10 3 8.433 3 6.5C3 4.567 4.567 3 6.5 3C8.433 3 10 4.567 10 6.5ZM9.30884 10.0159C8.53901 10.6318 7.56251 11 6.5 11C4.01472 11 2 8.98528 2 6.5C2 4.01472 4.01472 2 6.5 2C8.98528 2 11 4.01472 11 6.5C11 7.56251 10.6318 8.53901 10.0159 9.30884L12.8536 12.1464C13.0488 12.3417 13.0488 12.6583 12.8536 12.8536C12.6583 13.0488 12.3417 13.0488 12.1464 12.8536L9.30884 10.0159Z",
1885
+ fill: "currentColor",
1886
+ fillRule: "evenodd",
1887
+ clipRule: "evenodd"
1888
+ }
1889
+ )
1890
+ }
1891
+ ),
1892
+ /* @__PURE__ */ jsx28(
1893
+ CommandPrimitive.Input,
1894
+ {
1895
+ ref,
1896
+ className: cn(
1897
+ "flex h-11 w-full rounded-[var(--tekton-radius-md)] bg-transparent py-3 text-sm outline-none placeholder:text-[var(--tekton-text-muted-foreground)] disabled:cursor-not-allowed disabled:opacity-50",
1898
+ className
1899
+ ),
1900
+ ...props
1901
+ }
1902
+ )
1903
+ ]
1904
+ }
1905
+ ));
1906
+ CommandInput.displayName = CommandPrimitive.Input.displayName;
1907
+ var CommandList = React26.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx28(
1908
+ CommandPrimitive.List,
1909
+ {
1910
+ ref,
1911
+ className: cn("max-h-[300px] overflow-y-auto overflow-x-hidden", className),
1912
+ ...props
1913
+ }
1914
+ ));
1915
+ CommandList.displayName = CommandPrimitive.List.displayName;
1916
+ var CommandEmpty = React26.forwardRef((props, ref) => /* @__PURE__ */ jsx28(
1917
+ CommandPrimitive.Empty,
1918
+ {
1919
+ ref,
1920
+ className: "py-6 text-center text-sm text-[var(--tekton-text-muted-foreground)]",
1921
+ ...props
1922
+ }
1923
+ ));
1924
+ CommandEmpty.displayName = CommandPrimitive.Empty.displayName;
1925
+ var CommandGroup = React26.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx28(
1926
+ CommandPrimitive.Group,
1927
+ {
1928
+ ref,
1929
+ className: cn(
1930
+ "overflow-hidden p-1 text-[var(--tekton-bg-foreground)] [&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:py-1.5 [&_[cmdk-group-heading]]:text-xs [&_[cmdk-group-heading]]:font-medium [&_[cmdk-group-heading]]:text-[var(--tekton-text-muted-foreground)]",
1931
+ className
1932
+ ),
1933
+ ...props
1934
+ }
1935
+ ));
1936
+ CommandGroup.displayName = CommandPrimitive.Group.displayName;
1937
+ var CommandSeparator = React26.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx28(
1938
+ CommandPrimitive.Separator,
1939
+ {
1940
+ ref,
1941
+ className: cn("-mx-1 h-px bg-[var(--tekton-border-default)]", className),
1942
+ ...props
1943
+ }
1944
+ ));
1945
+ CommandSeparator.displayName = CommandPrimitive.Separator.displayName;
1946
+ var CommandItem = React26.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx28(
1947
+ CommandPrimitive.Item,
1948
+ {
1949
+ ref,
1950
+ className: cn(
1951
+ "relative flex cursor-default select-none items-center rounded-[var(--tekton-radius-sm)] px-2 py-1.5 text-sm outline-none aria-selected:bg-[var(--tekton-bg-accent)] aria-selected:text-[var(--tekton-bg-accent-foreground)] data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
1952
+ className
1953
+ ),
1954
+ ...props
1955
+ }
1956
+ ));
1957
+ CommandItem.displayName = CommandPrimitive.Item.displayName;
1958
+ var CommandShortcut = ({ className, ...props }) => {
1959
+ return /* @__PURE__ */ jsx28(
1960
+ "span",
1961
+ {
1962
+ className: cn(
1963
+ "ml-auto text-xs tracking-widest text-[var(--tekton-text-muted-foreground)]",
1964
+ className
1965
+ ),
1966
+ ...props
1967
+ }
1968
+ );
1969
+ };
1970
+ CommandShortcut.displayName = "CommandShortcut";
1971
+
1972
+ // src/components/calendar.tsx
1973
+ import { DayPicker } from "react-day-picker";
1974
+ import { jsx as jsx29 } from "react/jsx-runtime";
1975
+ function Calendar({ className, classNames, showOutsideDays = true, ...props }) {
1976
+ return /* @__PURE__ */ jsx29(
1977
+ DayPicker,
1978
+ {
1979
+ showOutsideDays,
1980
+ className: cn("p-3", className),
1981
+ classNames: {
1982
+ months: "relative flex flex-col sm:flex-row space-y-4 sm:space-x-4 sm:space-y-0",
1983
+ month: "space-y-4",
1984
+ month_caption: "flex justify-center items-center h-7",
1985
+ caption_label: "text-sm font-medium text-[var(--tekton-bg-foreground)]",
1986
+ nav: "absolute top-0 inset-x-0 flex items-center justify-between h-7 z-10",
1987
+ button_previous: cn(
1988
+ "inline-flex items-center justify-center whitespace-nowrap rounded-[var(--tekton-radius-md)] text-sm font-medium ring-offset-[var(--tekton-bg-background)] transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--tekton-border-ring)] focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50",
1989
+ "hover:bg-[var(--tekton-bg-accent)] hover:text-[var(--tekton-bg-accent-foreground)]",
1990
+ "h-7 w-7 bg-transparent p-0 opacity-50 hover:opacity-100"
1991
+ ),
1992
+ button_next: cn(
1993
+ "inline-flex items-center justify-center whitespace-nowrap rounded-[var(--tekton-radius-md)] text-sm font-medium ring-offset-[var(--tekton-bg-background)] transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--tekton-border-ring)] focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50",
1994
+ "hover:bg-[var(--tekton-bg-accent)] hover:text-[var(--tekton-bg-accent-foreground)]",
1995
+ "h-7 w-7 bg-transparent p-0 opacity-50 hover:opacity-100"
1996
+ ),
1997
+ month_grid: "w-full border-collapse space-y-1",
1998
+ weekdays: "flex",
1999
+ weekday: "text-[var(--tekton-bg-muted-foreground)] rounded-[var(--tekton-radius-md)] w-9 font-normal text-[0.8rem]",
2000
+ week: "flex w-full mt-2",
2001
+ day: "h-9 w-9 text-center text-sm p-0 relative [&:has([aria-selected].day-range-end)]:rounded-r-[var(--tekton-radius-md)] [&:has([aria-selected].day-outside)]:bg-[var(--tekton-bg-accent)]/50 [&:has([aria-selected])]:bg-[var(--tekton-bg-accent)] first:[&:has([aria-selected])]:rounded-l-[var(--tekton-radius-md)] last:[&:has([aria-selected])]:rounded-r-[var(--tekton-radius-md)] focus-within:relative focus-within:z-20",
2002
+ day_button: cn(
2003
+ "inline-flex items-center justify-center whitespace-nowrap rounded-[var(--tekton-radius-md)] text-sm font-medium ring-offset-[var(--tekton-bg-background)] transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--tekton-border-ring)] focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50",
2004
+ "hover:bg-[var(--tekton-bg-accent)] hover:text-[var(--tekton-bg-accent-foreground)]",
2005
+ "h-9 w-9 p-0 font-normal aria-selected:opacity-100"
2006
+ ),
2007
+ range_end: "day-range-end",
2008
+ selected: "rounded-[var(--tekton-radius-md)] bg-[var(--tekton-bg-primary)] text-[var(--tekton-bg-primary-foreground)] hover:bg-[var(--tekton-bg-primary)] hover:text-[var(--tekton-bg-primary-foreground)] focus:bg-[var(--tekton-bg-primary)] focus:text-[var(--tekton-bg-primary-foreground)]",
2009
+ today: "rounded-[var(--tekton-radius-md)] bg-[var(--tekton-bg-accent)] text-[var(--tekton-bg-accent-foreground)]",
2010
+ outside: "day-outside text-[var(--tekton-bg-muted-foreground)] opacity-50 aria-selected:bg-[var(--tekton-bg-accent)]/50 aria-selected:text-[var(--tekton-bg-muted-foreground)] aria-selected:opacity-30",
2011
+ disabled: "text-[var(--tekton-bg-muted-foreground)] opacity-50",
2012
+ range_middle: "aria-selected:bg-[var(--tekton-bg-accent)] aria-selected:text-[var(--tekton-bg-accent-foreground)]",
2013
+ hidden: "invisible",
2014
+ ...classNames
2015
+ },
2016
+ components: {
2017
+ Chevron: ({ orientation }) => {
2018
+ if (orientation === "left") {
2019
+ return /* @__PURE__ */ jsx29(
2020
+ "svg",
2021
+ {
2022
+ width: "15",
2023
+ height: "15",
2024
+ viewBox: "0 0 15 15",
2025
+ fill: "none",
2026
+ xmlns: "http://www.w3.org/2000/svg",
2027
+ className: "h-4 w-4",
2028
+ children: /* @__PURE__ */ jsx29(
2029
+ "path",
2030
+ {
2031
+ d: "M8.84182 3.13514C9.04327 3.32401 9.05348 3.64042 8.86462 3.84188L5.43521 7.49991L8.86462 11.1579C9.05348 11.3594 9.04327 11.6758 8.84182 11.8647C8.64036 12.0535 8.32394 12.0433 8.13508 11.8419L4.38508 7.84188C4.20477 7.64955 4.20477 7.35027 4.38508 7.15794L8.13508 3.15794C8.32394 2.95648 8.64036 2.94628 8.84182 3.13514Z",
2032
+ fill: "currentColor",
2033
+ fillRule: "evenodd",
2034
+ clipRule: "evenodd"
2035
+ }
2036
+ )
2037
+ }
2038
+ );
2039
+ }
2040
+ return /* @__PURE__ */ jsx29(
2041
+ "svg",
2042
+ {
2043
+ width: "15",
2044
+ height: "15",
2045
+ viewBox: "0 0 15 15",
2046
+ fill: "none",
2047
+ xmlns: "http://www.w3.org/2000/svg",
2048
+ className: "h-4 w-4",
2049
+ children: /* @__PURE__ */ jsx29(
2050
+ "path",
2051
+ {
2052
+ d: "M6.1584 3.13508C6.35985 2.94621 6.67627 2.95642 6.86514 3.15788L10.6151 7.15788C10.7954 7.3502 10.7954 7.64949 10.6151 7.84182L6.86514 11.8418C6.67627 12.0433 6.35985 12.0535 6.1584 11.8646C5.95694 11.6757 5.94673 11.3593 6.1356 11.1579L9.565 7.49985L6.1356 3.84182C5.94673 3.64036 5.95694 3.32394 6.1584 3.13508Z",
2053
+ fill: "currentColor",
2054
+ fillRule: "evenodd",
2055
+ clipRule: "evenodd"
2056
+ }
2057
+ )
2058
+ }
2059
+ );
2060
+ }
2061
+ },
2062
+ ...props
2063
+ }
2064
+ );
2065
+ }
2066
+ Calendar.displayName = "Calendar";
2067
+
2068
+ // src/templates/types.ts
2069
+ var DEFAULT_RESPONSIVE_LAYOUT = {
2070
+ mobile: {
2071
+ padding: "var(--tekton-layout-padding-mobile)",
2072
+ // 16px
2073
+ gap: "var(--tekton-layout-gap-mobile)",
2074
+ // 16px
2075
+ columns: 4
2076
+ },
2077
+ tablet: {
2078
+ padding: "var(--tekton-layout-padding-tablet)",
2079
+ // 32px
2080
+ gap: "var(--tekton-layout-gap-tablet)",
2081
+ // 24px
2082
+ columns: 8
2083
+ },
2084
+ desktop: {
2085
+ padding: "var(--tekton-layout-padding-desktop)",
2086
+ // 64px
2087
+ gap: "var(--tekton-layout-gap-desktop)",
2088
+ // 32px
2089
+ columns: 12
2090
+ }
2091
+ };
2092
+ var DEFAULT_BREAKPOINTS = {
2093
+ mobile: 768,
2094
+ tablet: 1024,
2095
+ desktop: 1024
2096
+ };
2097
+
2098
+ // src/templates/registry.ts
2099
+ var TemplateRegistry = class _TemplateRegistry {
2100
+ static instance;
2101
+ templates;
2102
+ constructor() {
2103
+ this.templates = /* @__PURE__ */ new Map();
2104
+ }
2105
+ /**
2106
+ * Get singleton instance
2107
+ */
2108
+ static getInstance() {
2109
+ if (!_TemplateRegistry.instance) {
2110
+ _TemplateRegistry.instance = new _TemplateRegistry();
2111
+ }
2112
+ return _TemplateRegistry.instance;
2113
+ }
2114
+ /**
2115
+ * Register a template
2116
+ */
2117
+ register(template) {
2118
+ if (this.templates.has(template.id)) {
2119
+ console.warn(`Template "${template.id}" is already registered. Overwriting.`);
2120
+ }
2121
+ this.templates.set(template.id, {
2122
+ template,
2123
+ metadata: {
2124
+ usageCount: 0
2125
+ }
2126
+ });
2127
+ }
2128
+ /**
2129
+ * Register multiple templates
2130
+ */
2131
+ registerMany(templates) {
2132
+ templates.forEach((template) => this.register(template));
2133
+ }
2134
+ /**
2135
+ * Get template by ID
2136
+ */
2137
+ get(id) {
2138
+ const entry = this.templates.get(id);
2139
+ if (entry) {
2140
+ entry.metadata.usageCount++;
2141
+ entry.metadata.lastUsed = (/* @__PURE__ */ new Date()).toISOString();
2142
+ return entry.template;
2143
+ }
2144
+ return void 0;
2145
+ }
2146
+ /**
2147
+ * Get all templates
2148
+ */
2149
+ getAll() {
2150
+ return Array.from(this.templates.values()).map((entry) => entry.template);
2151
+ }
2152
+ /**
2153
+ * Get templates by category
2154
+ */
2155
+ getByCategory(category) {
2156
+ return this.getAll().filter((template) => template.category === category);
2157
+ }
2158
+ /**
2159
+ * Find templates by required components
2160
+ * Returns templates that include ALL specified components
2161
+ */
2162
+ findByRequiredComponents(components) {
2163
+ return this.getAll().filter((template) => {
2164
+ return components.every((component) => template.requiredComponents.includes(component));
2165
+ });
2166
+ }
2167
+ /**
2168
+ * Search templates by keyword
2169
+ * Searches in: id, name, description, tags
2170
+ */
2171
+ search(keyword) {
2172
+ const lowerKeyword = keyword.toLowerCase();
2173
+ return this.getAll().filter((template) => {
2174
+ return template.id.toLowerCase().includes(lowerKeyword) || template.name.toLowerCase().includes(lowerKeyword) || template.description.toLowerCase().includes(lowerKeyword) || template.tags?.some((tag) => tag.toLowerCase().includes(lowerKeyword));
2175
+ });
2176
+ }
2177
+ /**
2178
+ * Get template metadata
2179
+ */
2180
+ getMetadata(id) {
2181
+ return this.templates.get(id)?.metadata;
2182
+ }
2183
+ /**
2184
+ * Get most used templates
2185
+ */
2186
+ getMostUsed(limit = 10) {
2187
+ return Array.from(this.templates.values()).sort((a, b) => b.metadata.usageCount - a.metadata.usageCount).slice(0, limit).map((entry) => entry.template);
2188
+ }
2189
+ /**
2190
+ * Get recently used templates
2191
+ */
2192
+ getRecentlyUsed(limit = 10) {
2193
+ return Array.from(this.templates.values()).filter((entry) => entry.metadata.lastUsed).sort((a, b) => {
2194
+ const dateA = new Date(a.metadata.lastUsed).getTime();
2195
+ const dateB = new Date(b.metadata.lastUsed).getTime();
2196
+ return dateB - dateA;
2197
+ }).slice(0, limit).map((entry) => entry.template);
2198
+ }
2199
+ /**
2200
+ * Clear all templates
2201
+ */
2202
+ clear() {
2203
+ this.templates.clear();
2204
+ }
2205
+ /**
2206
+ * Get template count
2207
+ */
2208
+ count() {
2209
+ return this.templates.size;
2210
+ }
2211
+ /**
2212
+ * Check if template exists
2213
+ */
2214
+ has(id) {
2215
+ return this.templates.has(id);
2216
+ }
2217
+ /**
2218
+ * Remove template
2219
+ */
2220
+ remove(id) {
2221
+ return this.templates.delete(id);
2222
+ }
2223
+ };
2224
+ var templateRegistry = TemplateRegistry.getInstance();
2225
+
2226
+ // src/templates/auth/login.tsx
2227
+ import { Fragment as Fragment2, jsx as jsx30, jsxs as jsxs11 } from "react/jsx-runtime";
2228
+ function LoginTemplateComponent({
2229
+ children,
2230
+ className = "",
2231
+ slots = {},
2232
+ texts = {},
2233
+ options = {}
2234
+ }) {
2235
+ const title = texts.title || "Welcome Back";
2236
+ const subtitle = texts.subtitle || "Sign in to your account";
2237
+ const buttonLabel = texts.button_label || "Sign In";
2238
+ const showSocialLogin = options.social_login ?? false;
2239
+ const showRememberMe = options.remember_me ?? false;
2240
+ return /* @__PURE__ */ jsxs11(
2241
+ "div",
2242
+ {
2243
+ className: `min-h-screen flex items-center justify-center p-[var(--tekton-spacing-4)] ${className}`,
2244
+ children: [
2245
+ /* @__PURE__ */ jsxs11(Card, { className: "w-full max-w-md", children: [
2246
+ /* @__PURE__ */ jsxs11(CardHeader, { children: [
2247
+ slots.logo && /* @__PURE__ */ jsx30("div", { className: "mb-[var(--tekton-spacing-4)]", children: slots.logo }),
2248
+ /* @__PURE__ */ jsx30(CardTitle, { children: title }),
2249
+ /* @__PURE__ */ jsx30(CardDescription, { children: subtitle })
2250
+ ] }),
2251
+ /* @__PURE__ */ jsxs11(CardContent, { className: "space-y-[var(--tekton-spacing-4)]", children: [
2252
+ /* @__PURE__ */ jsxs11("div", { className: "space-y-[var(--tekton-spacing-2)]", children: [
2253
+ /* @__PURE__ */ jsx30(Label, { htmlFor: "email", children: "Email" }),
2254
+ /* @__PURE__ */ jsx30(Input, { id: "email", type: "email", placeholder: "Enter your email" })
2255
+ ] }),
2256
+ /* @__PURE__ */ jsxs11("div", { className: "space-y-[var(--tekton-spacing-2)]", children: [
2257
+ /* @__PURE__ */ jsxs11("div", { className: "flex items-center justify-between", children: [
2258
+ /* @__PURE__ */ jsx30(Label, { htmlFor: "password", children: "Password" }),
2259
+ slots.forgotPassword && /* @__PURE__ */ jsx30("div", { children: slots.forgotPassword })
2260
+ ] }),
2261
+ /* @__PURE__ */ jsx30(Input, { id: "password", type: "password", placeholder: "Enter your password" })
2262
+ ] }),
2263
+ showRememberMe && slots.rememberMe && /* @__PURE__ */ jsx30("div", { className: "flex items-center space-x-[var(--tekton-spacing-2)]", children: slots.rememberMe }),
2264
+ /* @__PURE__ */ jsx30(Button, { className: "w-full", children: buttonLabel }),
2265
+ showSocialLogin && slots.socialLogin && /* @__PURE__ */ jsxs11(Fragment2, { children: [
2266
+ /* @__PURE__ */ jsxs11("div", { className: "relative", children: [
2267
+ /* @__PURE__ */ jsx30("div", { className: "absolute inset-0 flex items-center", children: /* @__PURE__ */ jsx30(Separator, {}) }),
2268
+ /* @__PURE__ */ jsx30("div", { className: "relative flex justify-center text-xs uppercase", children: /* @__PURE__ */ jsx30("span", { className: "bg-[var(--tekton-bg-background)] px-[var(--tekton-spacing-2)] text-[var(--tekton-text-muted-foreground)]", children: "Or continue with" }) })
2269
+ ] }),
2270
+ /* @__PURE__ */ jsx30("div", { className: "grid grid-cols-2 gap-[var(--tekton-spacing-4)]", children: slots.socialLogin })
2271
+ ] })
2272
+ ] }),
2273
+ /* @__PURE__ */ jsx30(CardFooter, { children: slots.footer || /* @__PURE__ */ jsxs11("p", { className: "text-sm text-center w-full text-[var(--tekton-text-muted-foreground)]", children: [
2274
+ "Don't have an account?",
2275
+ " ",
2276
+ /* @__PURE__ */ jsx30("a", { href: "#", className: "text-[var(--tekton-text-primary)] hover:underline", children: "Sign up" })
2277
+ ] }) })
2278
+ ] }),
2279
+ children
2280
+ ]
2281
+ }
2282
+ );
2283
+ }
2284
+ var LoginTemplate = {
2285
+ id: "auth.login",
2286
+ name: "Login",
2287
+ category: "auth",
2288
+ description: "Standard login screen with email and password",
2289
+ skeleton: {
2290
+ shell: "centered-card",
2291
+ page: "auth-page",
2292
+ sections: [
2293
+ {
2294
+ id: "login-form",
2295
+ name: "Login Form",
2296
+ slot: "main",
2297
+ required: true,
2298
+ Component: LoginTemplateComponent
2299
+ }
2300
+ ]
2301
+ },
2302
+ layout: {
2303
+ type: "centered",
2304
+ responsive: DEFAULT_RESPONSIVE_LAYOUT
2305
+ },
2306
+ customizable: {
2307
+ texts: ["title", "subtitle", "button_label"],
2308
+ optional: ["social_login", "remember_me"],
2309
+ slots: ["logo", "forgotPassword", "rememberMe", "socialLogin", "footer"]
2310
+ },
2311
+ requiredComponents: ["Button", "Input", "Form", "Card", "Label"],
2312
+ Component: LoginTemplateComponent,
2313
+ version: "1.0.0",
2314
+ created: "2026-01-31",
2315
+ updated: "2026-01-31",
2316
+ tags: ["auth", "login", "form"]
2317
+ };
2318
+
2319
+ // src/templates/auth/signup.tsx
2320
+ import { Fragment as Fragment3, jsx as jsx31, jsxs as jsxs12 } from "react/jsx-runtime";
2321
+ function SignupTemplateComponent({
2322
+ children,
2323
+ className = "",
2324
+ slots = {},
2325
+ texts = {},
2326
+ options = {}
2327
+ }) {
2328
+ const title = texts.title || "Create Account";
2329
+ const subtitle = texts.subtitle || "Sign up to get started";
2330
+ const buttonLabel = texts.button_label || "Sign Up";
2331
+ const showSocialSignup = options.social_signup ?? false;
2332
+ return /* @__PURE__ */ jsxs12(
2333
+ "div",
2334
+ {
2335
+ className: `min-h-screen flex items-center justify-center p-[var(--tekton-spacing-4)] ${className}`,
2336
+ children: [
2337
+ /* @__PURE__ */ jsxs12(Card, { className: "w-full max-w-md", children: [
2338
+ /* @__PURE__ */ jsxs12(CardHeader, { children: [
2339
+ slots.logo && /* @__PURE__ */ jsx31("div", { className: "mb-[var(--tekton-spacing-4)]", children: slots.logo }),
2340
+ /* @__PURE__ */ jsx31(CardTitle, { children: title }),
2341
+ /* @__PURE__ */ jsx31(CardDescription, { children: subtitle })
2342
+ ] }),
2343
+ /* @__PURE__ */ jsxs12(CardContent, { className: "space-y-[var(--tekton-spacing-4)]", children: [
2344
+ /* @__PURE__ */ jsxs12("div", { className: "space-y-[var(--tekton-spacing-2)]", children: [
2345
+ /* @__PURE__ */ jsx31(Label, { htmlFor: "name", children: "Name" }),
2346
+ /* @__PURE__ */ jsx31(Input, { id: "name", type: "text", placeholder: "Enter your name" })
2347
+ ] }),
2348
+ /* @__PURE__ */ jsxs12("div", { className: "space-y-[var(--tekton-spacing-2)]", children: [
2349
+ /* @__PURE__ */ jsx31(Label, { htmlFor: "email", children: "Email" }),
2350
+ /* @__PURE__ */ jsx31(Input, { id: "email", type: "email", placeholder: "Enter your email" })
2351
+ ] }),
2352
+ /* @__PURE__ */ jsxs12("div", { className: "space-y-[var(--tekton-spacing-2)]", children: [
2353
+ /* @__PURE__ */ jsx31(Label, { htmlFor: "password", children: "Password" }),
2354
+ /* @__PURE__ */ jsx31(Input, { id: "password", type: "password", placeholder: "Enter your password" })
2355
+ ] }),
2356
+ /* @__PURE__ */ jsxs12("div", { className: "space-y-[var(--tekton-spacing-2)]", children: [
2357
+ /* @__PURE__ */ jsx31(Label, { htmlFor: "password-confirm", children: "Confirm Password" }),
2358
+ /* @__PURE__ */ jsx31(Input, { id: "password-confirm", type: "password", placeholder: "Confirm your password" })
2359
+ ] }),
2360
+ slots.termsCheckbox && /* @__PURE__ */ jsx31("div", { className: "flex items-start space-x-[var(--tekton-spacing-2)]", children: slots.termsCheckbox }),
2361
+ /* @__PURE__ */ jsx31(Button, { className: "w-full", children: buttonLabel }),
2362
+ showSocialSignup && slots.socialSignup && /* @__PURE__ */ jsxs12(Fragment3, { children: [
2363
+ /* @__PURE__ */ jsxs12("div", { className: "relative", children: [
2364
+ /* @__PURE__ */ jsx31("div", { className: "absolute inset-0 flex items-center", children: /* @__PURE__ */ jsx31(Separator, {}) }),
2365
+ /* @__PURE__ */ jsx31("div", { className: "relative flex justify-center text-xs uppercase", children: /* @__PURE__ */ jsx31("span", { className: "bg-[var(--tekton-bg-background)] px-[var(--tekton-spacing-2)] text-[var(--tekton-text-muted-foreground)]", children: "Or sign up with" }) })
2366
+ ] }),
2367
+ /* @__PURE__ */ jsx31("div", { className: "grid grid-cols-2 gap-[var(--tekton-spacing-4)]", children: slots.socialSignup })
2368
+ ] })
2369
+ ] }),
2370
+ /* @__PURE__ */ jsx31(CardFooter, { children: slots.footer || /* @__PURE__ */ jsxs12("p", { className: "text-sm text-center w-full text-[var(--tekton-text-muted-foreground)]", children: [
2371
+ "Already have an account?",
2372
+ " ",
2373
+ /* @__PURE__ */ jsx31("a", { href: "#", className: "text-[var(--tekton-text-primary)] hover:underline", children: "Sign in" })
2374
+ ] }) })
2375
+ ] }),
2376
+ children
2377
+ ]
2378
+ }
2379
+ );
2380
+ }
2381
+ var SignupTemplate = {
2382
+ id: "auth.signup",
2383
+ name: "Signup",
2384
+ category: "auth",
2385
+ description: "Standard signup screen with name, email, and password",
2386
+ skeleton: {
2387
+ shell: "centered-card",
2388
+ page: "auth-page",
2389
+ sections: [
2390
+ {
2391
+ id: "signup-form",
2392
+ name: "Signup Form",
2393
+ slot: "main",
2394
+ required: true,
2395
+ Component: SignupTemplateComponent
2396
+ }
2397
+ ]
2398
+ },
2399
+ layout: {
2400
+ type: "centered",
2401
+ responsive: DEFAULT_RESPONSIVE_LAYOUT
2402
+ },
2403
+ customizable: {
2404
+ texts: ["title", "subtitle", "button_label"],
2405
+ optional: ["social_signup"],
2406
+ slots: ["logo", "termsCheckbox", "socialSignup", "footer"]
2407
+ },
2408
+ requiredComponents: ["Button", "Input", "Form", "Card", "Label", "Checkbox"],
2409
+ Component: SignupTemplateComponent,
2410
+ version: "1.0.0",
2411
+ created: "2026-02-01",
2412
+ updated: "2026-02-01",
2413
+ tags: ["auth", "signup", "registration", "form"]
2414
+ };
2415
+
2416
+ // src/templates/auth/forgot-password.tsx
2417
+ import { jsx as jsx32, jsxs as jsxs13 } from "react/jsx-runtime";
2418
+ function ForgotPasswordTemplateComponent({
2419
+ children,
2420
+ className = "",
2421
+ slots = {},
2422
+ texts = {}
2423
+ }) {
2424
+ const title = texts.title || "Forgot Password?";
2425
+ const subtitle = texts.subtitle || "Enter your email address and we'll send you a reset link";
2426
+ const buttonLabel = texts.button_label || "Send Reset Link";
2427
+ return /* @__PURE__ */ jsxs13(
2428
+ "div",
2429
+ {
2430
+ className: `min-h-screen flex items-center justify-center p-[var(--tekton-spacing-4)] ${className}`,
2431
+ children: [
2432
+ /* @__PURE__ */ jsxs13(Card, { className: "w-full max-w-md", children: [
2433
+ /* @__PURE__ */ jsxs13(CardHeader, { children: [
2434
+ slots.logo && /* @__PURE__ */ jsx32("div", { className: "mb-[var(--tekton-spacing-4)]", children: slots.logo }),
2435
+ /* @__PURE__ */ jsx32(CardTitle, { children: title }),
2436
+ /* @__PURE__ */ jsx32(CardDescription, { children: subtitle })
2437
+ ] }),
2438
+ /* @__PURE__ */ jsxs13(CardContent, { className: "space-y-[var(--tekton-spacing-4)]", children: [
2439
+ /* @__PURE__ */ jsxs13("div", { className: "space-y-[var(--tekton-spacing-2)]", children: [
2440
+ /* @__PURE__ */ jsx32(Label, { htmlFor: "email", children: "Email" }),
2441
+ /* @__PURE__ */ jsx32(Input, { id: "email", type: "email", placeholder: "Enter your email" })
2442
+ ] }),
2443
+ /* @__PURE__ */ jsx32(Button, { className: "w-full", children: buttonLabel })
2444
+ ] }),
2445
+ /* @__PURE__ */ jsx32(CardFooter, { children: slots.footer || /* @__PURE__ */ jsxs13("p", { className: "text-sm text-center w-full text-[var(--tekton-text-muted-foreground)]", children: [
2446
+ "Remember your password?",
2447
+ " ",
2448
+ /* @__PURE__ */ jsx32("a", { href: "#", className: "text-[var(--tekton-text-primary)] hover:underline", children: "Back to login" })
2449
+ ] }) })
2450
+ ] }),
2451
+ children
2452
+ ]
2453
+ }
2454
+ );
2455
+ }
2456
+ var ForgotPasswordTemplate = {
2457
+ id: "auth.forgot-password",
2458
+ name: "Forgot Password",
2459
+ category: "auth",
2460
+ description: "Password reset screen with email input",
2461
+ skeleton: {
2462
+ shell: "centered-card",
2463
+ page: "auth-page",
2464
+ sections: [
2465
+ {
2466
+ id: "forgot-password-form",
2467
+ name: "Forgot Password Form",
2468
+ slot: "main",
2469
+ required: true,
2470
+ Component: ForgotPasswordTemplateComponent
2471
+ }
2472
+ ]
2473
+ },
2474
+ layout: {
2475
+ type: "centered",
2476
+ responsive: DEFAULT_RESPONSIVE_LAYOUT
2477
+ },
2478
+ customizable: {
2479
+ texts: ["title", "subtitle", "button_label"],
2480
+ optional: [],
2481
+ slots: ["logo", "footer"]
2482
+ },
2483
+ requiredComponents: ["Button", "Input", "Form", "Card", "Label"],
2484
+ Component: ForgotPasswordTemplateComponent,
2485
+ version: "1.0.0",
2486
+ created: "2026-02-01",
2487
+ updated: "2026-02-01",
2488
+ tags: ["auth", "password", "reset", "forgot"]
2489
+ };
2490
+
2491
+ // src/templates/auth/verification.tsx
2492
+ import { jsx as jsx33, jsxs as jsxs14 } from "react/jsx-runtime";
2493
+ function VerificationTemplateComponent({
2494
+ children,
2495
+ className = "",
2496
+ slots = {},
2497
+ texts = {},
2498
+ options = {}
2499
+ }) {
2500
+ const title = texts.title || "Verify Your Email";
2501
+ const subtitle = texts.subtitle || "We've sent a verification link to your email address";
2502
+ const buttonLabel = texts.button_label || "Continue";
2503
+ const showResend = options.show_resend ?? true;
2504
+ const userEmail = options.user_email || "user@example.com";
2505
+ return /* @__PURE__ */ jsxs14(
2506
+ "div",
2507
+ {
2508
+ className: `min-h-screen flex items-center justify-center p-[var(--tekton-spacing-4)] ${className}`,
2509
+ children: [
2510
+ /* @__PURE__ */ jsxs14(Card, { className: "w-full max-w-md", children: [
2511
+ /* @__PURE__ */ jsxs14(CardHeader, { children: [
2512
+ slots.icon && /* @__PURE__ */ jsx33("div", { className: "mb-[var(--tekton-spacing-4)]", children: slots.icon }),
2513
+ /* @__PURE__ */ jsx33(CardTitle, { children: title }),
2514
+ /* @__PURE__ */ jsx33(CardDescription, { children: subtitle })
2515
+ ] }),
2516
+ /* @__PURE__ */ jsxs14(CardContent, { className: "space-y-[var(--tekton-spacing-4)]", children: [
2517
+ /* @__PURE__ */ jsx33("div", { className: "bg-[var(--tekton-bg-muted)] p-[var(--tekton-spacing-3)] rounded-[var(--tekton-radius-md)] text-center", children: /* @__PURE__ */ jsx33("p", { className: "text-sm font-medium", children: userEmail }) }),
2518
+ /* @__PURE__ */ jsx33(Button, { className: "w-full", children: buttonLabel }),
2519
+ showResend && /* @__PURE__ */ jsx33("div", { className: "text-center", children: /* @__PURE__ */ jsxs14("p", { className: "text-sm text-[var(--tekton-text-muted-foreground)]", children: [
2520
+ "Didn't receive the email?",
2521
+ " ",
2522
+ /* @__PURE__ */ jsx33("button", { className: "text-[var(--tekton-text-primary)] hover:underline", children: "Resend" })
2523
+ ] }) })
2524
+ ] }),
2525
+ /* @__PURE__ */ jsx33(CardFooter, { children: slots.footer || /* @__PURE__ */ jsxs14("p", { className: "text-sm text-center w-full text-[var(--tekton-text-muted-foreground)]", children: [
2526
+ "Wrong email?",
2527
+ " ",
2528
+ /* @__PURE__ */ jsx33("a", { href: "#", className: "text-[var(--tekton-text-primary)] hover:underline", children: "Change email address" })
2529
+ ] }) })
2530
+ ] }),
2531
+ children
2532
+ ]
2533
+ }
2534
+ );
2535
+ }
2536
+ var VerificationTemplate = {
2537
+ id: "auth.verification",
2538
+ name: "Email Verification",
2539
+ category: "auth",
2540
+ description: "Email verification screen with resend option",
2541
+ skeleton: {
2542
+ shell: "centered-card",
2543
+ page: "auth-page",
2544
+ sections: [
2545
+ {
2546
+ id: "verification-message",
2547
+ name: "Verification Message",
2548
+ slot: "main",
2549
+ required: true,
2550
+ Component: VerificationTemplateComponent
2551
+ }
2552
+ ]
2553
+ },
2554
+ layout: {
2555
+ type: "centered",
2556
+ responsive: DEFAULT_RESPONSIVE_LAYOUT
2557
+ },
2558
+ customizable: {
2559
+ texts: ["title", "subtitle", "button_label"],
2560
+ optional: ["show_resend", "user_email"],
2561
+ slots: ["icon", "footer"]
2562
+ },
2563
+ requiredComponents: ["Button", "Card"],
2564
+ Component: VerificationTemplateComponent,
2565
+ version: "1.0.0",
2566
+ created: "2026-02-01",
2567
+ updated: "2026-02-01",
2568
+ tags: ["auth", "verification", "email", "confirm"]
2569
+ };
2570
+
2571
+ // src/templates/core/landing.tsx
2572
+ import { jsx as jsx34, jsxs as jsxs15 } from "react/jsx-runtime";
2573
+ function LandingTemplateComponent({
2574
+ children,
2575
+ className = "",
2576
+ slots = {},
2577
+ texts = {}
2578
+ }) {
2579
+ const title = texts.title || "Welcome Back";
2580
+ const subtitle = texts.subtitle || "Start a new conversation or continue where you left off";
2581
+ const ctaLabel = texts.cta_label || "New Conversation";
2582
+ return /* @__PURE__ */ jsxs15("div", { className: `min-h-screen flex ${className}`, children: [
2583
+ slots.sidebar && /* @__PURE__ */ jsx34("aside", { className: "w-64 border-r border-[var(--tekton-border-default)] bg-[var(--tekton-bg-muted)]", children: slots.sidebar }),
2584
+ /* @__PURE__ */ jsxs15("main", { className: "flex-1 flex flex-col", children: [
2585
+ slots.header && /* @__PURE__ */ jsx34("header", { className: "border-b border-[var(--tekton-border-default)] p-[var(--tekton-spacing-4)]", children: slots.header }),
2586
+ /* @__PURE__ */ jsx34("div", { className: "flex-1 flex flex-col items-center justify-center p-[var(--tekton-spacing-8)]", children: /* @__PURE__ */ jsxs15("div", { className: "max-w-2xl w-full text-center space-y-[var(--tekton-spacing-6)]", children: [
2587
+ /* @__PURE__ */ jsxs15("div", { className: "space-y-[var(--tekton-spacing-2)]", children: [
2588
+ /* @__PURE__ */ jsx34("h1", { className: "text-3xl font-bold", children: title }),
2589
+ /* @__PURE__ */ jsx34("p", { className: "text-[var(--tekton-text-muted-foreground)]", children: subtitle })
2590
+ ] }),
2591
+ /* @__PURE__ */ jsx34("div", { children: /* @__PURE__ */ jsx34(Button, { size: "lg", children: ctaLabel }) }),
2592
+ slots.recentActivity && /* @__PURE__ */ jsx34("div", { className: "mt-[var(--tekton-spacing-8)]", children: slots.recentActivity }),
2593
+ slots.suggestions && /* @__PURE__ */ jsx34("div", { className: "mt-[var(--tekton-spacing-6)]", children: slots.suggestions })
2594
+ ] }) })
2595
+ ] }),
2596
+ children
2597
+ ] });
2598
+ }
2599
+ var LandingTemplate = {
2600
+ id: "core.landing",
2601
+ name: "Landing",
2602
+ category: "marketing",
2603
+ description: "Main dashboard landing page with sidebar and CTA",
2604
+ skeleton: {
2605
+ shell: "sidebar-layout",
2606
+ page: "main-page",
2607
+ sections: [
2608
+ {
2609
+ id: "landing-content",
2610
+ name: "Landing Content",
2611
+ slot: "main",
2612
+ required: true,
2613
+ Component: LandingTemplateComponent
2614
+ }
2615
+ ]
2616
+ },
2617
+ layout: {
2618
+ type: "sidebar",
2619
+ responsive: DEFAULT_RESPONSIVE_LAYOUT
2620
+ },
2621
+ customizable: {
2622
+ texts: ["title", "subtitle", "cta_label"],
2623
+ optional: [],
2624
+ slots: ["sidebar", "header", "recentActivity", "suggestions"]
2625
+ },
2626
+ requiredComponents: ["Button"],
2627
+ Component: LandingTemplateComponent,
2628
+ version: "1.0.0",
2629
+ created: "2026-02-01",
2630
+ updated: "2026-02-01",
2631
+ tags: ["core", "landing", "dashboard", "home"]
2632
+ };
2633
+
2634
+ // src/templates/core/preferences.tsx
2635
+ import { jsx as jsx35, jsxs as jsxs16 } from "react/jsx-runtime";
2636
+ function PreferencesTemplateComponent({
2637
+ children,
2638
+ className = "",
2639
+ slots = {},
2640
+ texts = {}
2641
+ }) {
2642
+ const title = texts.title || "Preferences";
2643
+ const subtitle = texts.subtitle || "Manage your account settings and preferences";
2644
+ const saveLabel = texts.save_label || "Save Changes";
2645
+ return /* @__PURE__ */ jsxs16("div", { className: `min-h-screen flex ${className}`, children: [
2646
+ slots.settingsNav && /* @__PURE__ */ jsx35("aside", { className: "w-64 border-r border-[var(--tekton-border-default)] p-[var(--tekton-spacing-4)] bg-[var(--tekton-bg-muted)]", children: slots.settingsNav }),
2647
+ /* @__PURE__ */ jsx35("main", { className: "flex-1 p-[var(--tekton-spacing-8)]", children: /* @__PURE__ */ jsxs16("div", { className: "max-w-3xl", children: [
2648
+ /* @__PURE__ */ jsxs16("div", { className: "mb-[var(--tekton-spacing-8)]", children: [
2649
+ /* @__PURE__ */ jsx35("h1", { className: "text-3xl font-bold mb-[var(--tekton-spacing-2)]", children: title }),
2650
+ /* @__PURE__ */ jsx35("p", { className: "text-[var(--tekton-text-muted-foreground)]", children: subtitle })
2651
+ ] }),
2652
+ /* @__PURE__ */ jsxs16("div", { className: "space-y-[var(--tekton-spacing-6)]", children: [
2653
+ slots.generalSettings && /* @__PURE__ */ jsxs16(Card, { children: [
2654
+ /* @__PURE__ */ jsxs16(CardHeader, { children: [
2655
+ /* @__PURE__ */ jsx35(CardTitle, { children: "General" }),
2656
+ /* @__PURE__ */ jsx35(CardDescription, { children: "Manage your general preferences" })
2657
+ ] }),
2658
+ /* @__PURE__ */ jsx35(CardContent, { children: slots.generalSettings })
2659
+ ] }),
2660
+ slots.appearanceSettings && /* @__PURE__ */ jsxs16(Card, { children: [
2661
+ /* @__PURE__ */ jsxs16(CardHeader, { children: [
2662
+ /* @__PURE__ */ jsx35(CardTitle, { children: "Appearance" }),
2663
+ /* @__PURE__ */ jsx35(CardDescription, { children: "Customize the look and feel" })
2664
+ ] }),
2665
+ /* @__PURE__ */ jsx35(CardContent, { children: slots.appearanceSettings })
2666
+ ] }),
2667
+ slots.notificationsSettings && /* @__PURE__ */ jsxs16(Card, { children: [
2668
+ /* @__PURE__ */ jsxs16(CardHeader, { children: [
2669
+ /* @__PURE__ */ jsx35(CardTitle, { children: "Notifications" }),
2670
+ /* @__PURE__ */ jsx35(CardDescription, { children: "Manage notification preferences" })
2671
+ ] }),
2672
+ /* @__PURE__ */ jsx35(CardContent, { children: slots.notificationsSettings })
2673
+ ] }),
2674
+ slots.additionalSettings && slots.additionalSettings
2675
+ ] }),
2676
+ /* @__PURE__ */ jsxs16("div", { className: "mt-[var(--tekton-spacing-8)] flex justify-end gap-[var(--tekton-spacing-4)]", children: [
2677
+ /* @__PURE__ */ jsx35(Button, { variant: "outline", children: "Cancel" }),
2678
+ /* @__PURE__ */ jsx35(Button, { children: saveLabel })
2679
+ ] })
2680
+ ] }) }),
2681
+ children
2682
+ ] });
2683
+ }
2684
+ var PreferencesTemplate = {
2685
+ id: "core.preferences",
2686
+ name: "Preferences",
2687
+ category: "form",
2688
+ description: "Settings and preferences page with categorized options",
2689
+ skeleton: {
2690
+ shell: "sidebar-layout",
2691
+ page: "settings-page",
2692
+ sections: [
2693
+ {
2694
+ id: "preferences-content",
2695
+ name: "Preferences Content",
2696
+ slot: "main",
2697
+ required: true,
2698
+ Component: PreferencesTemplateComponent
2699
+ }
2700
+ ]
2701
+ },
2702
+ layout: {
2703
+ type: "sidebar",
2704
+ responsive: DEFAULT_RESPONSIVE_LAYOUT
2705
+ },
2706
+ customizable: {
2707
+ texts: ["title", "subtitle", "save_label"],
2708
+ optional: [],
2709
+ slots: [
2710
+ "settingsNav",
2711
+ "generalSettings",
2712
+ "appearanceSettings",
2713
+ "notificationsSettings",
2714
+ "additionalSettings"
2715
+ ]
2716
+ },
2717
+ requiredComponents: ["Button", "Card", "Switch", "Select"],
2718
+ Component: PreferencesTemplateComponent,
2719
+ version: "1.0.0",
2720
+ created: "2026-02-01",
2721
+ updated: "2026-02-01",
2722
+ tags: ["core", "settings", "preferences", "configuration"]
2723
+ };
2724
+
2725
+ // src/templates/core/profile.tsx
2726
+ import { jsx as jsx36, jsxs as jsxs17 } from "react/jsx-runtime";
2727
+ function ProfileTemplateComponent({
2728
+ children,
2729
+ className = "",
2730
+ slots = {},
2731
+ texts = {},
2732
+ options = {}
2733
+ }) {
2734
+ const title = texts.title || "Profile";
2735
+ const subtitle = texts.subtitle || "Manage your profile information";
2736
+ const saveLabel = texts.save_label || "Save Changes";
2737
+ const userName = String(options.user_name || "John Doe");
2738
+ const userEmail = String(options.user_email || "john@example.com");
2739
+ return /* @__PURE__ */ jsxs17("div", { className: `min-h-screen p-[var(--tekton-spacing-8)] ${className}`, children: [
2740
+ /* @__PURE__ */ jsxs17("div", { className: "max-w-3xl mx-auto", children: [
2741
+ /* @__PURE__ */ jsxs17("div", { className: "mb-[var(--tekton-spacing-8)]", children: [
2742
+ /* @__PURE__ */ jsx36("h1", { className: "text-3xl font-bold mb-[var(--tekton-spacing-2)]", children: title }),
2743
+ /* @__PURE__ */ jsx36("p", { className: "text-[var(--tekton-text-muted-foreground)]", children: subtitle })
2744
+ ] }),
2745
+ /* @__PURE__ */ jsxs17(Card, { children: [
2746
+ /* @__PURE__ */ jsxs17(CardHeader, { children: [
2747
+ /* @__PURE__ */ jsx36(CardTitle, { children: "Personal Information" }),
2748
+ /* @__PURE__ */ jsx36(CardDescription, { children: "Update your profile details" })
2749
+ ] }),
2750
+ /* @__PURE__ */ jsxs17(CardContent, { className: "space-y-[var(--tekton-spacing-6)]", children: [
2751
+ slots.avatar && /* @__PURE__ */ jsxs17("div", { className: "flex items-center gap-[var(--tekton-spacing-4)]", children: [
2752
+ /* @__PURE__ */ jsx36("div", { children: slots.avatar }),
2753
+ /* @__PURE__ */ jsxs17("div", { children: [
2754
+ /* @__PURE__ */ jsx36(Button, { variant: "outline", size: "sm", children: "Change Photo" }),
2755
+ /* @__PURE__ */ jsx36("p", { className: "text-xs text-[var(--tekton-text-muted-foreground)] mt-[var(--tekton-spacing-2)]", children: "JPG, PNG. Max 2MB" })
2756
+ ] })
2757
+ ] }),
2758
+ /* @__PURE__ */ jsxs17("div", { className: "space-y-[var(--tekton-spacing-2)]", children: [
2759
+ /* @__PURE__ */ jsx36(Label, { htmlFor: "name", children: "Name" }),
2760
+ /* @__PURE__ */ jsx36(Input, { id: "name", type: "text", defaultValue: userName })
2761
+ ] }),
2762
+ /* @__PURE__ */ jsxs17("div", { className: "space-y-[var(--tekton-spacing-2)]", children: [
2763
+ /* @__PURE__ */ jsx36(Label, { htmlFor: "email", children: "Email" }),
2764
+ /* @__PURE__ */ jsx36(Input, { id: "email", type: "email", defaultValue: userEmail, disabled: true }),
2765
+ /* @__PURE__ */ jsx36("p", { className: "text-xs text-[var(--tekton-text-muted-foreground)]", children: "Contact support to change your email address" })
2766
+ ] }),
2767
+ slots.bioField && /* @__PURE__ */ jsx36("div", { className: "space-y-[var(--tekton-spacing-2)]", children: slots.bioField }),
2768
+ slots.additionalFields && slots.additionalFields
2769
+ ] })
2770
+ ] }),
2771
+ slots.additionalSections && /* @__PURE__ */ jsx36("div", { className: "mt-[var(--tekton-spacing-6)]", children: slots.additionalSections }),
2772
+ /* @__PURE__ */ jsxs17("div", { className: "mt-[var(--tekton-spacing-8)] flex justify-end gap-[var(--tekton-spacing-4)]", children: [
2773
+ /* @__PURE__ */ jsx36(Button, { variant: "outline", children: "Cancel" }),
2774
+ /* @__PURE__ */ jsx36(Button, { children: saveLabel })
2775
+ ] })
2776
+ ] }),
2777
+ children
2778
+ ] });
2779
+ }
2780
+ var ProfileTemplate = {
2781
+ id: "core.profile",
2782
+ name: "Profile",
2783
+ category: "form",
2784
+ description: "User profile page with editable information",
2785
+ skeleton: {
2786
+ shell: "centered-layout",
2787
+ page: "profile-page",
2788
+ sections: [
2789
+ {
2790
+ id: "profile-content",
2791
+ name: "Profile Content",
2792
+ slot: "main",
2793
+ required: true,
2794
+ Component: ProfileTemplateComponent
2795
+ }
2796
+ ]
2797
+ },
2798
+ layout: {
2799
+ type: "centered",
2800
+ responsive: DEFAULT_RESPONSIVE_LAYOUT
2801
+ },
2802
+ customizable: {
2803
+ texts: ["title", "subtitle", "save_label"],
2804
+ optional: ["user_name", "user_email"],
2805
+ slots: ["avatar", "bioField", "additionalFields", "additionalSections"]
2806
+ },
2807
+ requiredComponents: ["Button", "Input", "Form", "Card", "Label", "Avatar"],
2808
+ Component: ProfileTemplateComponent,
2809
+ version: "1.0.0",
2810
+ created: "2026-02-01",
2811
+ updated: "2026-02-01",
2812
+ tags: ["core", "profile", "account", "user"]
2813
+ };
2814
+
2815
+ // src/templates/feedback/loading.tsx
2816
+ import { jsx as jsx37, jsxs as jsxs18 } from "react/jsx-runtime";
2817
+ function LoadingTemplateComponent({
2818
+ children,
2819
+ className = "",
2820
+ slots = {},
2821
+ texts = {},
2822
+ options = {}
2823
+ }) {
2824
+ const message = texts.message || "Loading...";
2825
+ const showMessage = options.show_message ?? true;
2826
+ return /* @__PURE__ */ jsxs18(
2827
+ "div",
2828
+ {
2829
+ className: `min-h-screen flex items-center justify-center p-[var(--tekton-spacing-4)] ${className}`,
2830
+ children: [
2831
+ /* @__PURE__ */ jsxs18("div", { className: "flex flex-col items-center gap-[var(--tekton-spacing-4)]", children: [
2832
+ slots.spinner || /* @__PURE__ */ jsx37("div", { className: "animate-spin rounded-full h-12 w-12 border-b-2 border-[var(--tekton-border-primary)]" }),
2833
+ showMessage && /* @__PURE__ */ jsx37("p", { className: "text-sm text-[var(--tekton-text-muted-foreground)]", children: message })
2834
+ ] }),
2835
+ children
2836
+ ]
2837
+ }
2838
+ );
2839
+ }
2840
+ var LoadingTemplate = {
2841
+ id: "feedback.loading",
2842
+ name: "Loading",
2843
+ category: "feedback",
2844
+ description: "Loading state screen with spinner and optional message",
2845
+ skeleton: {
2846
+ shell: "centered",
2847
+ page: "feedback-page",
2848
+ sections: [
2849
+ {
2850
+ id: "loading-indicator",
2851
+ name: "Loading Indicator",
2852
+ slot: "main",
2853
+ required: true,
2854
+ Component: LoadingTemplateComponent
2855
+ }
2856
+ ]
2857
+ },
2858
+ layout: {
2859
+ type: "centered",
2860
+ responsive: DEFAULT_RESPONSIVE_LAYOUT
2861
+ },
2862
+ customizable: {
2863
+ texts: ["message"],
2864
+ optional: ["show_message"],
2865
+ slots: ["spinner"]
2866
+ },
2867
+ requiredComponents: [],
2868
+ Component: LoadingTemplateComponent,
2869
+ version: "1.0.0",
2870
+ created: "2026-02-01",
2871
+ updated: "2026-02-01",
2872
+ tags: ["feedback", "loading", "spinner", "state"]
2873
+ };
2874
+
2875
+ // src/templates/feedback/error.tsx
2876
+ import { jsx as jsx38, jsxs as jsxs19 } from "react/jsx-runtime";
2877
+ function ErrorTemplateComponent({
2878
+ children,
2879
+ className = "",
2880
+ slots = {},
2881
+ texts = {},
2882
+ options = {}
2883
+ }) {
2884
+ const title = texts.title || "Something Went Wrong";
2885
+ const message = texts.message || "An error occurred. Please try again.";
2886
+ const retryLabel = texts.retry_label || "Try Again";
2887
+ const showRetry = options.show_retry ?? true;
2888
+ return /* @__PURE__ */ jsxs19(
2889
+ "div",
2890
+ {
2891
+ className: `min-h-screen flex items-center justify-center p-[var(--tekton-spacing-4)] ${className}`,
2892
+ children: [
2893
+ /* @__PURE__ */ jsxs19("div", { className: "max-w-md text-center space-y-[var(--tekton-spacing-6)]", children: [
2894
+ slots.icon || /* @__PURE__ */ jsx38("div", { className: "flex justify-center", children: /* @__PURE__ */ jsx38("div", { className: "rounded-full bg-[var(--tekton-bg-destructive)] bg-opacity-10 p-[var(--tekton-spacing-4)]", children: /* @__PURE__ */ jsx38(
2895
+ "svg",
2896
+ {
2897
+ xmlns: "http://www.w3.org/2000/svg",
2898
+ className: "h-12 w-12 text-[var(--tekton-text-destructive)]",
2899
+ fill: "none",
2900
+ viewBox: "0 0 24 24",
2901
+ stroke: "currentColor",
2902
+ children: /* @__PURE__ */ jsx38(
2903
+ "path",
2904
+ {
2905
+ strokeLinecap: "round",
2906
+ strokeLinejoin: "round",
2907
+ strokeWidth: 2,
2908
+ d: "M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-3L13.732 4c-.77-1.333-2.694-1.333-3.464 0L3.34 16c-.77 1.333.192 3 1.732 3z"
2909
+ }
2910
+ )
2911
+ }
2912
+ ) }) }),
2913
+ /* @__PURE__ */ jsxs19("div", { className: "space-y-[var(--tekton-spacing-2)]", children: [
2914
+ /* @__PURE__ */ jsx38("h2", { className: "text-2xl font-bold", children: title }),
2915
+ /* @__PURE__ */ jsx38("p", { className: "text-[var(--tekton-text-muted-foreground)]", children: message })
2916
+ ] }),
2917
+ slots.errorDetails && /* @__PURE__ */ jsx38("div", { className: "text-left bg-[var(--tekton-bg-muted)] p-[var(--tekton-spacing-4)] rounded-[var(--tekton-radius-md)] text-sm", children: slots.errorDetails }),
2918
+ /* @__PURE__ */ jsxs19("div", { className: "flex flex-col gap-[var(--tekton-spacing-3)]", children: [
2919
+ showRetry && /* @__PURE__ */ jsx38(Button, { className: "w-full", children: retryLabel }),
2920
+ slots.additionalActions && slots.additionalActions
2921
+ ] })
2922
+ ] }),
2923
+ children
2924
+ ]
2925
+ }
2926
+ );
2927
+ }
2928
+ var ErrorTemplate = {
2929
+ id: "feedback.error",
2930
+ name: "Error",
2931
+ category: "feedback",
2932
+ description: "Error state screen with message and retry option",
2933
+ skeleton: {
2934
+ shell: "centered",
2935
+ page: "feedback-page",
2936
+ sections: [
2937
+ {
2938
+ id: "error-message",
2939
+ name: "Error Message",
2940
+ slot: "main",
2941
+ required: true,
2942
+ Component: ErrorTemplateComponent
2943
+ }
2944
+ ]
2945
+ },
2946
+ layout: {
2947
+ type: "centered",
2948
+ responsive: DEFAULT_RESPONSIVE_LAYOUT
2949
+ },
2950
+ customizable: {
2951
+ texts: ["title", "message", "retry_label"],
2952
+ optional: ["show_retry"],
2953
+ slots: ["icon", "errorDetails", "additionalActions"]
2954
+ },
2955
+ requiredComponents: ["Button"],
2956
+ Component: ErrorTemplateComponent,
2957
+ version: "1.0.0",
2958
+ created: "2026-02-01",
2959
+ updated: "2026-02-01",
2960
+ tags: ["feedback", "error", "failure", "state"]
2961
+ };
2962
+
2963
+ // src/templates/feedback/empty.tsx
2964
+ import { jsx as jsx39, jsxs as jsxs20 } from "react/jsx-runtime";
2965
+ function EmptyTemplateComponent({
2966
+ children,
2967
+ className = "",
2968
+ slots = {},
2969
+ texts = {},
2970
+ options = {}
2971
+ }) {
2972
+ const title = texts.title || "No Items Found";
2973
+ const message = texts.message || "Get started by creating your first item";
2974
+ const ctaLabel = texts.cta_label || "Create New";
2975
+ const showCta = options.show_cta ?? true;
2976
+ return /* @__PURE__ */ jsxs20(
2977
+ "div",
2978
+ {
2979
+ className: `min-h-screen flex items-center justify-center p-[var(--tekton-spacing-4)] ${className}`,
2980
+ children: [
2981
+ /* @__PURE__ */ jsxs20("div", { className: "max-w-md text-center space-y-[var(--tekton-spacing-6)]", children: [
2982
+ slots.illustration || /* @__PURE__ */ jsx39("div", { className: "flex justify-center", children: /* @__PURE__ */ jsx39("div", { className: "rounded-full bg-[var(--tekton-bg-muted)] p-[var(--tekton-spacing-8)]", children: /* @__PURE__ */ jsx39(
2983
+ "svg",
2984
+ {
2985
+ xmlns: "http://www.w3.org/2000/svg",
2986
+ className: "h-16 w-16 text-[var(--tekton-text-muted-foreground)]",
2987
+ fill: "none",
2988
+ viewBox: "0 0 24 24",
2989
+ stroke: "currentColor",
2990
+ children: /* @__PURE__ */ jsx39(
2991
+ "path",
2992
+ {
2993
+ strokeLinecap: "round",
2994
+ strokeLinejoin: "round",
2995
+ strokeWidth: 2,
2996
+ d: "M20 13V6a2 2 0 00-2-2H6a2 2 0 00-2 2v7m16 0v5a2 2 0 01-2 2H6a2 2 0 01-2-2v-5m16 0h-2.586a1 1 0 00-.707.293l-2.414 2.414a1 1 0 01-.707.293h-3.172a1 1 0 01-.707-.293l-2.414-2.414A1 1 0 006.586 13H4"
2997
+ }
2998
+ )
2999
+ }
3000
+ ) }) }),
3001
+ /* @__PURE__ */ jsxs20("div", { className: "space-y-[var(--tekton-spacing-2)]", children: [
3002
+ /* @__PURE__ */ jsx39("h2", { className: "text-2xl font-bold", children: title }),
3003
+ /* @__PURE__ */ jsx39("p", { className: "text-[var(--tekton-text-muted-foreground)]", children: message })
3004
+ ] }),
3005
+ showCta && /* @__PURE__ */ jsx39("div", { children: /* @__PURE__ */ jsx39(Button, { size: "lg", children: ctaLabel }) }),
3006
+ slots.helpText && /* @__PURE__ */ jsx39("div", { className: "text-sm text-[var(--tekton-text-muted-foreground)]", children: slots.helpText })
3007
+ ] }),
3008
+ children
3009
+ ]
3010
+ }
3011
+ );
3012
+ }
3013
+ var EmptyTemplate = {
3014
+ id: "feedback.empty",
3015
+ name: "Empty",
3016
+ category: "feedback",
3017
+ description: "Empty state screen with call-to-action",
3018
+ skeleton: {
3019
+ shell: "centered",
3020
+ page: "feedback-page",
3021
+ sections: [
3022
+ {
3023
+ id: "empty-state",
3024
+ name: "Empty State",
3025
+ slot: "main",
3026
+ required: true,
3027
+ Component: EmptyTemplateComponent
3028
+ }
3029
+ ]
3030
+ },
3031
+ layout: {
3032
+ type: "centered",
3033
+ responsive: DEFAULT_RESPONSIVE_LAYOUT
3034
+ },
3035
+ customizable: {
3036
+ texts: ["title", "message", "cta_label"],
3037
+ optional: ["show_cta"],
3038
+ slots: ["illustration", "helpText"]
3039
+ },
3040
+ requiredComponents: ["Button"],
3041
+ Component: EmptyTemplateComponent,
3042
+ version: "1.0.0",
3043
+ created: "2026-02-01",
3044
+ updated: "2026-02-01",
3045
+ tags: ["feedback", "empty", "state", "no-data"]
3046
+ };
3047
+
3048
+ // src/templates/feedback/confirmation.tsx
3049
+ import { jsx as jsx40, jsxs as jsxs21 } from "react/jsx-runtime";
3050
+ function ConfirmationTemplateComponent({
3051
+ children,
3052
+ className = "",
3053
+ slots = {},
3054
+ texts = {},
3055
+ options = {}
3056
+ }) {
3057
+ const title = texts.title || "Are You Sure?";
3058
+ const message = texts.message || "This action cannot be undone.";
3059
+ const confirmLabel = texts.confirm_label || "Confirm";
3060
+ const cancelLabel = texts.cancel_label || "Cancel";
3061
+ const isDestructive = options.is_destructive ?? false;
3062
+ return /* @__PURE__ */ jsxs21(
3063
+ "div",
3064
+ {
3065
+ className: `min-h-screen flex items-center justify-center p-[var(--tekton-spacing-4)] ${className}`,
3066
+ children: [
3067
+ /* @__PURE__ */ jsxs21(Card, { className: "w-full max-w-md", children: [
3068
+ /* @__PURE__ */ jsxs21(CardHeader, { children: [
3069
+ isDestructive && slots.warningIcon && /* @__PURE__ */ jsx40("div", { className: "mb-[var(--tekton-spacing-2)]", children: slots.warningIcon }),
3070
+ /* @__PURE__ */ jsx40(CardTitle, { children: title }),
3071
+ /* @__PURE__ */ jsx40(CardDescription, { children: message })
3072
+ ] }),
3073
+ /* @__PURE__ */ jsx40(CardContent, { children: slots.details && /* @__PURE__ */ jsx40("div", { className: "bg-[var(--tekton-bg-muted)] p-[var(--tekton-spacing-4)] rounded-[var(--tekton-radius-md)] text-sm", children: slots.details }) }),
3074
+ /* @__PURE__ */ jsxs21(CardFooter, { className: "flex justify-end gap-[var(--tekton-spacing-3)]", children: [
3075
+ /* @__PURE__ */ jsx40(Button, { variant: "outline", children: cancelLabel }),
3076
+ /* @__PURE__ */ jsx40(Button, { variant: isDestructive ? "destructive" : "default", children: confirmLabel })
3077
+ ] })
3078
+ ] }),
3079
+ children
3080
+ ]
3081
+ }
3082
+ );
3083
+ }
3084
+ var ConfirmationTemplate = {
3085
+ id: "feedback.confirmation",
3086
+ name: "Confirmation",
3087
+ category: "feedback",
3088
+ description: "Confirmation dialog for important actions",
3089
+ skeleton: {
3090
+ shell: "centered-card",
3091
+ page: "feedback-page",
3092
+ sections: [
3093
+ {
3094
+ id: "confirmation-dialog",
3095
+ name: "Confirmation Dialog",
3096
+ slot: "main",
3097
+ required: true,
3098
+ Component: ConfirmationTemplateComponent
3099
+ }
3100
+ ]
3101
+ },
3102
+ layout: {
3103
+ type: "centered",
3104
+ responsive: DEFAULT_RESPONSIVE_LAYOUT
3105
+ },
3106
+ customizable: {
3107
+ texts: ["title", "message", "confirm_label", "cancel_label"],
3108
+ optional: ["is_destructive"],
3109
+ slots: ["warningIcon", "details"]
3110
+ },
3111
+ requiredComponents: ["Button", "Card"],
3112
+ Component: ConfirmationTemplateComponent,
3113
+ version: "1.0.0",
3114
+ created: "2026-02-01",
3115
+ updated: "2026-02-01",
3116
+ tags: ["feedback", "confirmation", "dialog", "warning"]
3117
+ };
3118
+
3119
+ // src/templates/feedback/success.tsx
3120
+ import { jsx as jsx41, jsxs as jsxs22 } from "react/jsx-runtime";
3121
+ function SuccessTemplateComponent({
3122
+ children,
3123
+ className = "",
3124
+ slots = {},
3125
+ texts = {},
3126
+ options = {}
3127
+ }) {
3128
+ const title = texts.title || "Success!";
3129
+ const message = texts.message || "Your action was completed successfully";
3130
+ const ctaLabel = texts.cta_label || "Continue";
3131
+ const showCta = options.show_cta ?? true;
3132
+ return /* @__PURE__ */ jsxs22(
3133
+ "div",
3134
+ {
3135
+ className: `min-h-screen flex items-center justify-center p-[var(--tekton-spacing-4)] ${className}`,
3136
+ children: [
3137
+ /* @__PURE__ */ jsxs22("div", { className: "max-w-md text-center space-y-[var(--tekton-spacing-6)]", children: [
3138
+ slots.icon || /* @__PURE__ */ jsx41("div", { className: "flex justify-center", children: /* @__PURE__ */ jsx41("div", { className: "rounded-full bg-[var(--tekton-bg-success)] bg-opacity-10 p-[var(--tekton-spacing-4)]", children: /* @__PURE__ */ jsx41(
3139
+ "svg",
3140
+ {
3141
+ xmlns: "http://www.w3.org/2000/svg",
3142
+ className: "h-12 w-12 text-[var(--tekton-text-success)]",
3143
+ fill: "none",
3144
+ viewBox: "0 0 24 24",
3145
+ stroke: "currentColor",
3146
+ children: /* @__PURE__ */ jsx41(
3147
+ "path",
3148
+ {
3149
+ strokeLinecap: "round",
3150
+ strokeLinejoin: "round",
3151
+ strokeWidth: 2,
3152
+ d: "M9 12l2 2 4-4m6 2a9 9 0 11-18 0 9 9 0 0118 0z"
3153
+ }
3154
+ )
3155
+ }
3156
+ ) }) }),
3157
+ /* @__PURE__ */ jsxs22("div", { className: "space-y-[var(--tekton-spacing-2)]", children: [
3158
+ /* @__PURE__ */ jsx41("h2", { className: "text-2xl font-bold", children: title }),
3159
+ /* @__PURE__ */ jsx41("p", { className: "text-[var(--tekton-text-muted-foreground)]", children: message })
3160
+ ] }),
3161
+ slots.details && /* @__PURE__ */ jsx41("div", { className: "text-left bg-[var(--tekton-bg-muted)] p-[var(--tekton-spacing-4)] rounded-[var(--tekton-radius-md)] text-sm", children: slots.details }),
3162
+ showCta && /* @__PURE__ */ jsx41("div", { children: /* @__PURE__ */ jsx41(Button, { className: "w-full", size: "lg", children: ctaLabel }) }),
3163
+ slots.additionalActions && /* @__PURE__ */ jsx41("div", { className: "flex flex-col gap-[var(--tekton-spacing-3)]", children: slots.additionalActions })
3164
+ ] }),
3165
+ children
3166
+ ]
3167
+ }
3168
+ );
3169
+ }
3170
+ var SuccessTemplate = {
3171
+ id: "feedback.success",
3172
+ name: "Success",
3173
+ category: "feedback",
3174
+ description: "Success state screen with confirmation message",
3175
+ skeleton: {
3176
+ shell: "centered",
3177
+ page: "feedback-page",
3178
+ sections: [
3179
+ {
3180
+ id: "success-message",
3181
+ name: "Success Message",
3182
+ slot: "main",
3183
+ required: true,
3184
+ Component: SuccessTemplateComponent
3185
+ }
3186
+ ]
3187
+ },
3188
+ layout: {
3189
+ type: "centered",
3190
+ responsive: DEFAULT_RESPONSIVE_LAYOUT
3191
+ },
3192
+ customizable: {
3193
+ texts: ["title", "message", "cta_label"],
3194
+ optional: ["show_cta"],
3195
+ slots: ["icon", "details", "additionalActions"]
3196
+ },
3197
+ requiredComponents: ["Button"],
3198
+ Component: SuccessTemplateComponent,
3199
+ version: "1.0.0",
3200
+ created: "2026-02-01",
3201
+ updated: "2026-02-01",
3202
+ tags: ["feedback", "success", "confirmation", "state"]
3203
+ };
3204
+
3205
+ // src/templates/dashboard/overview.tsx
3206
+ import { jsx as jsx42, jsxs as jsxs23 } from "react/jsx-runtime";
3207
+ function DashboardTemplateComponent({
3208
+ children,
3209
+ className = "",
3210
+ slots = {},
3211
+ texts = {}
3212
+ }) {
3213
+ const title = texts.title || "Dashboard";
3214
+ const subtitle = texts.subtitle || "Welcome to your dashboard";
3215
+ return /* @__PURE__ */ jsxs23("div", { className: `min-h-screen flex ${className}`, children: [
3216
+ slots.sidebar && /* @__PURE__ */ jsx42("aside", { className: "w-64 border-r border-[var(--tekton-border-default)] bg-[var(--tekton-bg-card)] hidden lg:block", children: slots.sidebar }),
3217
+ /* @__PURE__ */ jsxs23("main", { className: "flex-1 overflow-auto bg-[var(--tekton-bg-background)]", children: [
3218
+ /* @__PURE__ */ jsx42("header", { className: "sticky top-0 z-10 border-b border-[var(--tekton-border-default)] bg-[var(--tekton-bg-background)]/80 backdrop-blur-md p-[var(--tekton-spacing-4)]", children: /* @__PURE__ */ jsxs23("div", { className: "flex items-center justify-between", children: [
3219
+ /* @__PURE__ */ jsxs23("div", { children: [
3220
+ /* @__PURE__ */ jsx42("h1", { className: "text-2xl font-bold text-[var(--tekton-text-foreground)]", children: title }),
3221
+ /* @__PURE__ */ jsx42("p", { className: "text-sm text-[var(--tekton-text-muted-foreground)]", children: subtitle })
3222
+ ] }),
3223
+ slots.headerActions && /* @__PURE__ */ jsx42("div", { children: slots.headerActions })
3224
+ ] }) }),
3225
+ /* @__PURE__ */ jsxs23("div", { className: "py-[var(--tekton-layout-section-py,var(--tekton-spacing-6))] px-[var(--tekton-layout-container-px,var(--tekton-spacing-6))] space-y-[var(--tekton-layout-stack-gap,var(--tekton-spacing-6))] max-w-[var(--tekton-layout-container-xl)] mx-auto", children: [
3226
+ slots.metrics && /* @__PURE__ */ jsx42("div", { className: "grid gap-[var(--tekton-spacing-4)] grid-cols-2 lg:grid-cols-4", children: slots.metrics }),
3227
+ /* @__PURE__ */ jsx42(Separator, {}),
3228
+ /* @__PURE__ */ jsxs23("div", { className: "grid gap-x-[var(--tekton-layout-grid-gap-x,var(--tekton-spacing-6))] gap-y-[var(--tekton-layout-grid-gap-y,var(--tekton-spacing-6))] lg:grid-cols-12", children: [
3229
+ slots.primaryContent && /* @__PURE__ */ jsx42("div", { className: "lg:col-span-8 space-y-[var(--tekton-layout-stack-gap,var(--tekton-spacing-6))]", children: slots.primaryContent }),
3230
+ slots.secondaryContent && /* @__PURE__ */ jsx42("div", { className: "lg:col-span-4 space-y-[var(--tekton-layout-stack-gap,var(--tekton-spacing-6))]", children: /* @__PURE__ */ jsxs23(Card, { className: "h-full", children: [
3231
+ /* @__PURE__ */ jsxs23(CardHeader, { children: [
3232
+ /* @__PURE__ */ jsx42(CardTitle, { children: texts.secondary_title || "Activity" }),
3233
+ /* @__PURE__ */ jsx42(CardDescription, { children: texts.secondary_description || "Recent updates" })
3234
+ ] }),
3235
+ /* @__PURE__ */ jsx42(CardContent, { className: "p-0", children: slots.secondaryContent })
3236
+ ] }) })
3237
+ ] }),
3238
+ slots.additionalSections && /* @__PURE__ */ jsx42("div", { children: slots.additionalSections })
3239
+ ] })
3240
+ ] }),
3241
+ children
3242
+ ] });
3243
+ }
3244
+ var DashboardTemplate = {
3245
+ id: "dashboard.overview",
3246
+ name: "Dashboard Overview",
3247
+ category: "dashboard",
3248
+ description: "Standard dashboard layout with sidebar, metrics, and content areas (12-column grid)",
3249
+ skeleton: {
3250
+ shell: "sidebar-layout",
3251
+ page: "dashboard-page",
3252
+ sections: [
3253
+ {
3254
+ id: "dashboard-sidebar",
3255
+ name: "Sidebar Navigation",
3256
+ slot: "sidebar",
3257
+ required: false,
3258
+ Component: () => null
3259
+ },
3260
+ {
3261
+ id: "dashboard-main",
3262
+ name: "Main Content",
3263
+ slot: "primaryContent",
3264
+ required: true,
3265
+ Component: () => null
3266
+ },
3267
+ {
3268
+ id: "dashboard-side",
3269
+ name: "Side Panel",
3270
+ slot: "secondaryContent",
3271
+ required: false,
3272
+ Component: () => null
3273
+ }
3274
+ ]
3275
+ },
3276
+ layout: {
3277
+ type: "sidebar",
3278
+ responsive: DEFAULT_RESPONSIVE_LAYOUT
3279
+ },
3280
+ customizable: {
3281
+ texts: ["title", "subtitle", "texts.secondary_title", "texts.secondary_description"],
3282
+ optional: ["metrics", "additionalSections"],
3283
+ slots: [
3284
+ "sidebar",
3285
+ "headerActions",
3286
+ "metrics",
3287
+ "primaryContent",
3288
+ "secondaryContent",
3289
+ "additionalSections"
3290
+ ]
3291
+ },
3292
+ requiredComponents: ["Card", "Separator"],
3293
+ Component: DashboardTemplateComponent,
3294
+ version: "1.1.0",
3295
+ created: "2026-01-31",
3296
+ updated: "2026-02-01",
3297
+ tags: ["dashboard", "overview", "analytics"]
3298
+ };
3299
+
3300
+ // src/templates/index.ts
3301
+ templateRegistry.registerMany([
3302
+ // Auth
3303
+ LoginTemplate,
3304
+ SignupTemplate,
3305
+ ForgotPasswordTemplate,
3306
+ VerificationTemplate,
3307
+ // Core
3308
+ LandingTemplate,
3309
+ PreferencesTemplate,
3310
+ ProfileTemplate,
3311
+ // Feedback
3312
+ LoadingTemplate,
3313
+ ErrorTemplate,
3314
+ EmptyTemplate,
3315
+ ConfirmationTemplate,
3316
+ SuccessTemplate,
3317
+ // Dashboard
3318
+ DashboardTemplate
3319
+ ]);
3320
+ export {
3321
+ AlertDialog,
3322
+ AlertDialogAction,
3323
+ AlertDialogCancel,
3324
+ AlertDialogContent,
3325
+ AlertDialogDescription,
3326
+ AlertDialogFooter,
3327
+ AlertDialogHeader,
3328
+ AlertDialogOverlay,
3329
+ AlertDialogPortal,
3330
+ AlertDialogTitle,
3331
+ AlertDialogTrigger,
3332
+ Avatar,
3333
+ AvatarFallback,
3334
+ AvatarImage,
3335
+ Badge,
3336
+ Breadcrumb,
3337
+ BreadcrumbEllipsis,
3338
+ BreadcrumbItem,
3339
+ BreadcrumbLink,
3340
+ BreadcrumbList,
3341
+ BreadcrumbPage,
3342
+ BreadcrumbSeparator,
3343
+ Button,
3344
+ Calendar,
3345
+ Card,
3346
+ CardContent,
3347
+ CardDescription,
3348
+ CardFooter,
3349
+ CardHeader,
3350
+ CardTitle,
3351
+ Checkbox,
3352
+ Command,
3353
+ CommandDialog,
3354
+ CommandEmpty,
3355
+ CommandGroup,
3356
+ CommandInput,
3357
+ CommandItem,
3358
+ CommandList,
3359
+ CommandSeparator,
3360
+ CommandShortcut,
3361
+ ConfirmationTemplate,
3362
+ ConfirmationTemplateComponent,
3363
+ DEFAULT_BREAKPOINTS,
3364
+ DEFAULT_RESPONSIVE_LAYOUT,
3365
+ DashboardTemplate,
3366
+ DashboardTemplateComponent,
3367
+ Dialog,
3368
+ DialogClose,
3369
+ DialogContent,
3370
+ DialogDescription,
3371
+ DialogFooter,
3372
+ DialogHeader,
3373
+ DialogOverlay,
3374
+ DialogPortal,
3375
+ DialogTitle,
3376
+ DialogTrigger,
3377
+ DropdownMenu,
3378
+ DropdownMenuCheckboxItem,
3379
+ DropdownMenuContent,
3380
+ DropdownMenuGroup,
3381
+ DropdownMenuItem,
3382
+ DropdownMenuLabel,
3383
+ DropdownMenuPortal,
3384
+ DropdownMenuRadioGroup,
3385
+ DropdownMenuRadioItem,
3386
+ DropdownMenuSeparator,
3387
+ DropdownMenuShortcut,
3388
+ DropdownMenuSub,
3389
+ DropdownMenuSubContent,
3390
+ DropdownMenuSubTrigger,
3391
+ DropdownMenuTrigger,
3392
+ EmptyTemplate,
3393
+ EmptyTemplateComponent,
3394
+ ErrorTemplate,
3395
+ ErrorTemplateComponent,
3396
+ ForgotPasswordTemplate,
3397
+ ForgotPasswordTemplateComponent,
3398
+ Input,
3399
+ Label,
3400
+ LandingTemplate,
3401
+ LandingTemplateComponent,
3402
+ LoadingTemplate,
3403
+ LoadingTemplateComponent,
3404
+ LoginTemplate,
3405
+ LoginTemplateComponent,
3406
+ NavigationMenu,
3407
+ NavigationMenuContent,
3408
+ NavigationMenuIndicator,
3409
+ NavigationMenuItem,
3410
+ NavigationMenuLink,
3411
+ NavigationMenuList,
3412
+ NavigationMenuTrigger,
3413
+ NavigationMenuViewport,
3414
+ Popover,
3415
+ PopoverContent,
3416
+ PopoverTrigger,
3417
+ PreferencesTemplate,
3418
+ PreferencesTemplateComponent,
3419
+ ProfileTemplate,
3420
+ ProfileTemplateComponent,
3421
+ Progress,
3422
+ RadioGroup,
3423
+ RadioGroupItem,
3424
+ ScrollArea,
3425
+ ScrollBar,
3426
+ Select,
3427
+ SelectContent,
3428
+ SelectGroup,
3429
+ SelectItem,
3430
+ SelectLabel,
3431
+ SelectScrollDownButton,
3432
+ SelectScrollUpButton,
3433
+ SelectSeparator,
3434
+ SelectTrigger,
3435
+ SelectValue,
3436
+ Separator,
3437
+ Sheet,
3438
+ SheetClose,
3439
+ SheetContent,
3440
+ SheetDescription,
3441
+ SheetFooter,
3442
+ SheetHeader,
3443
+ SheetOverlay,
3444
+ SheetPortal,
3445
+ SheetTitle,
3446
+ SheetTrigger,
3447
+ Sidebar,
3448
+ SidebarContent,
3449
+ SidebarFooter,
3450
+ SidebarHeader,
3451
+ SidebarItem,
3452
+ SidebarSection,
3453
+ SidebarSectionTitle,
3454
+ SignupTemplate,
3455
+ SignupTemplateComponent,
3456
+ Skeleton,
3457
+ SuccessTemplate,
3458
+ SuccessTemplateComponent,
3459
+ Switch,
3460
+ Table,
3461
+ TableBody,
3462
+ TableCaption,
3463
+ TableCell,
3464
+ TableFooter,
3465
+ TableHead,
3466
+ TableHeader,
3467
+ TableRow,
3468
+ Tabs,
3469
+ TabsContent,
3470
+ TabsList,
3471
+ TabsTrigger,
3472
+ TemplateRegistry,
3473
+ Textarea,
3474
+ Toast,
3475
+ ToastAction,
3476
+ ToastClose,
3477
+ ToastDescription,
3478
+ ToastProvider,
3479
+ ToastTitle,
3480
+ ToastViewport,
3481
+ Tooltip,
3482
+ TooltipContent,
3483
+ TooltipProvider,
3484
+ TooltipTrigger,
3485
+ VerificationTemplate,
3486
+ VerificationTemplateComponent,
3487
+ badgeVariants,
3488
+ buttonVariants,
3489
+ cn,
3490
+ extractTokenName,
3491
+ fadeVariants,
3492
+ getCurrentThemeId,
3493
+ getMotionTransition,
3494
+ injectThemeCSS,
3495
+ isTokenReference,
3496
+ motionTokens,
3497
+ navigationMenuTriggerStyle,
3498
+ oklchToCSS,
3499
+ resolveSemanticToken,
3500
+ scaleVariants,
3501
+ setThemeId,
3502
+ sidebarVariants,
3503
+ slideVariants,
3504
+ templateRegistry,
3505
+ themeToCSS,
3506
+ tokenVars,
3507
+ transitions,
3508
+ useMotionSafe
3509
+ };