@tekton-ui/ui 0.2.0

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