@dynamic-labs-sdk/droplet 0.0.0 → 0.27.2

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 (469) hide show
  1. package/README.md +292 -0
  2. package/dist/components/ask-ai-sheet/ask-ai-sheet.d.ts +11 -0
  3. package/dist/components/ask-ai-sheet/ask-ai-sheet.d.ts.map +1 -0
  4. package/dist/components/ask-ai-sheet/index.d.ts +2 -0
  5. package/dist/components/ask-ai-sheet/index.d.ts.map +1 -0
  6. package/dist/components/asset-icon/asset-icon.d.ts +7 -0
  7. package/dist/components/asset-icon/asset-icon.d.ts.map +1 -0
  8. package/dist/components/asset-icon/index.d.ts +2 -0
  9. package/dist/components/asset-icon/index.d.ts.map +1 -0
  10. package/dist/components/code-block/code-block.d.ts +24 -0
  11. package/dist/components/code-block/code-block.d.ts.map +1 -0
  12. package/dist/components/code-block/code-block.stories.d.ts +38 -0
  13. package/dist/components/code-block/code-block.stories.d.ts.map +1 -0
  14. package/dist/components/code-block/index.d.ts +3 -0
  15. package/dist/components/code-block/index.d.ts.map +1 -0
  16. package/dist/components/copy-button/copy-button.d.ts +9 -0
  17. package/dist/components/copy-button/copy-button.d.ts.map +1 -0
  18. package/dist/components/copy-button/copy-button.stories.d.ts +33 -0
  19. package/dist/components/copy-button/copy-button.stories.d.ts.map +1 -0
  20. package/dist/components/copy-button/index.d.ts +2 -0
  21. package/dist/components/copy-button/index.d.ts.map +1 -0
  22. package/dist/components/danger-zone/danger-zone.d.ts +11 -0
  23. package/dist/components/danger-zone/danger-zone.d.ts.map +1 -0
  24. package/dist/components/danger-zone/danger-zone.stories.d.ts +20 -0
  25. package/dist/components/danger-zone/danger-zone.stories.d.ts.map +1 -0
  26. package/dist/components/danger-zone/index.d.ts +2 -0
  27. package/dist/components/danger-zone/index.d.ts.map +1 -0
  28. package/dist/components/domain-list/domain-list.d.ts +10 -0
  29. package/dist/components/domain-list/domain-list.d.ts.map +1 -0
  30. package/dist/components/domain-list/domain-list.stories.d.ts +14 -0
  31. package/dist/components/domain-list/domain-list.stories.d.ts.map +1 -0
  32. package/dist/components/domain-list/index.d.ts +2 -0
  33. package/dist/components/domain-list/index.d.ts.map +1 -0
  34. package/dist/components/empty-state/empty-state.d.ts +13 -0
  35. package/dist/components/empty-state/empty-state.d.ts.map +1 -0
  36. package/dist/components/empty-state/empty-state.stories.d.ts +15 -0
  37. package/dist/components/empty-state/empty-state.stories.d.ts.map +1 -0
  38. package/dist/components/empty-state/index.d.ts +2 -0
  39. package/dist/components/empty-state/index.d.ts.map +1 -0
  40. package/dist/components/icon-config/icon-config.d.ts +11 -0
  41. package/dist/components/icon-config/icon-config.d.ts.map +1 -0
  42. package/dist/components/icon-config/index.d.ts +2 -0
  43. package/dist/components/icon-config/index.d.ts.map +1 -0
  44. package/dist/components/icons/animated-icon/animated-icon.d.ts +26 -0
  45. package/dist/components/icons/animated-icon/animated-icon.d.ts.map +1 -0
  46. package/dist/components/icons/animated-icon/index.d.ts +3 -0
  47. package/dist/components/icons/animated-icon/index.d.ts.map +1 -0
  48. package/dist/components/icons/arrow-up-right/arrow-up-right.d.ts +6 -0
  49. package/dist/components/icons/arrow-up-right/arrow-up-right.d.ts.map +1 -0
  50. package/dist/components/icons/arrow-up-right/index.d.ts +3 -0
  51. package/dist/components/icons/arrow-up-right/index.d.ts.map +1 -0
  52. package/dist/components/icons/chart-bar-increasing/chart-bar-increasing.d.ts +11 -0
  53. package/dist/components/icons/chart-bar-increasing/chart-bar-increasing.d.ts.map +1 -0
  54. package/dist/components/icons/chart-bar-increasing/index.d.ts +3 -0
  55. package/dist/components/icons/chart-bar-increasing/index.d.ts.map +1 -0
  56. package/dist/components/icons/chevron-down/chevron-down.d.ts +6 -0
  57. package/dist/components/icons/chevron-down/chevron-down.d.ts.map +1 -0
  58. package/dist/components/icons/chevron-down/index.d.ts +3 -0
  59. package/dist/components/icons/chevron-down/index.d.ts.map +1 -0
  60. package/dist/components/icons/chevron-right/chevron-right.d.ts +6 -0
  61. package/dist/components/icons/chevron-right/chevron-right.d.ts.map +1 -0
  62. package/dist/components/icons/chevron-right/index.d.ts +3 -0
  63. package/dist/components/icons/chevron-right/index.d.ts.map +1 -0
  64. package/dist/components/icons/copy/copy.d.ts +6 -0
  65. package/dist/components/icons/copy/copy.d.ts.map +1 -0
  66. package/dist/components/icons/copy/index.d.ts +3 -0
  67. package/dist/components/icons/copy/index.d.ts.map +1 -0
  68. package/dist/components/icons/copy-check/copy-check.d.ts +12 -0
  69. package/dist/components/icons/copy-check/copy-check.d.ts.map +1 -0
  70. package/dist/components/icons/copy-check/index.d.ts +3 -0
  71. package/dist/components/icons/copy-check/index.d.ts.map +1 -0
  72. package/dist/components/icons/dollar-sign/dollar-sign.d.ts +6 -0
  73. package/dist/components/icons/dollar-sign/dollar-sign.d.ts.map +1 -0
  74. package/dist/components/icons/dollar-sign/index.d.ts +3 -0
  75. package/dist/components/icons/dollar-sign/index.d.ts.map +1 -0
  76. package/dist/components/icons/download/download.d.ts +6 -0
  77. package/dist/components/icons/download/download.d.ts.map +1 -0
  78. package/dist/components/icons/download/index.d.ts +3 -0
  79. package/dist/components/icons/download/index.d.ts.map +1 -0
  80. package/dist/components/icons/fingerprint/fingerprint.d.ts +6 -0
  81. package/dist/components/icons/fingerprint/fingerprint.d.ts.map +1 -0
  82. package/dist/components/icons/fingerprint/index.d.ts +3 -0
  83. package/dist/components/icons/fingerprint/index.d.ts.map +1 -0
  84. package/dist/components/icons/home/home.d.ts +6 -0
  85. package/dist/components/icons/home/home.d.ts.map +1 -0
  86. package/dist/components/icons/home/index.d.ts +3 -0
  87. package/dist/components/icons/home/index.d.ts.map +1 -0
  88. package/dist/components/icons/key/index.d.ts +3 -0
  89. package/dist/components/icons/key/index.d.ts.map +1 -0
  90. package/dist/components/icons/key/key.d.ts +6 -0
  91. package/dist/components/icons/key/key.d.ts.map +1 -0
  92. package/dist/components/icons/layout-panel-top/index.d.ts +3 -0
  93. package/dist/components/icons/layout-panel-top/index.d.ts.map +1 -0
  94. package/dist/components/icons/layout-panel-top/layout-panel-top.d.ts +6 -0
  95. package/dist/components/icons/layout-panel-top/layout-panel-top.d.ts.map +1 -0
  96. package/dist/components/icons/link/index.d.ts +3 -0
  97. package/dist/components/icons/link/index.d.ts.map +1 -0
  98. package/dist/components/icons/link/link.d.ts +6 -0
  99. package/dist/components/icons/link/link.d.ts.map +1 -0
  100. package/dist/components/icons/mcp-tools/index.d.ts +2 -0
  101. package/dist/components/icons/mcp-tools/index.d.ts.map +1 -0
  102. package/dist/components/icons/mcp-tools/mcp-tools.d.ts +11 -0
  103. package/dist/components/icons/mcp-tools/mcp-tools.d.ts.map +1 -0
  104. package/dist/components/icons/moon/index.d.ts +3 -0
  105. package/dist/components/icons/moon/index.d.ts.map +1 -0
  106. package/dist/components/icons/moon/moon.d.ts +6 -0
  107. package/dist/components/icons/moon/moon.d.ts.map +1 -0
  108. package/dist/components/icons/panel-left-close/index.d.ts +3 -0
  109. package/dist/components/icons/panel-left-close/index.d.ts.map +1 -0
  110. package/dist/components/icons/panel-left-close/panel-left-close.d.ts +6 -0
  111. package/dist/components/icons/panel-left-close/panel-left-close.d.ts.map +1 -0
  112. package/dist/components/icons/panel-left-open/index.d.ts +3 -0
  113. package/dist/components/icons/panel-left-open/index.d.ts.map +1 -0
  114. package/dist/components/icons/panel-left-open/panel-left-open.d.ts +6 -0
  115. package/dist/components/icons/panel-left-open/panel-left-open.d.ts.map +1 -0
  116. package/dist/components/icons/plus/index.d.ts +3 -0
  117. package/dist/components/icons/plus/index.d.ts.map +1 -0
  118. package/dist/components/icons/plus/plus.d.ts +6 -0
  119. package/dist/components/icons/plus/plus.d.ts.map +1 -0
  120. package/dist/components/icons/refresh-cw/index.d.ts +3 -0
  121. package/dist/components/icons/refresh-cw/index.d.ts.map +1 -0
  122. package/dist/components/icons/refresh-cw/refresh-cw.d.ts +6 -0
  123. package/dist/components/icons/refresh-cw/refresh-cw.d.ts.map +1 -0
  124. package/dist/components/icons/search/index.d.ts +3 -0
  125. package/dist/components/icons/search/index.d.ts.map +1 -0
  126. package/dist/components/icons/search/search.d.ts +6 -0
  127. package/dist/components/icons/search/search.d.ts.map +1 -0
  128. package/dist/components/icons/settings/index.d.ts +3 -0
  129. package/dist/components/icons/settings/index.d.ts.map +1 -0
  130. package/dist/components/icons/settings/settings.d.ts +6 -0
  131. package/dist/components/icons/settings/settings.d.ts.map +1 -0
  132. package/dist/components/icons/shield-check/index.d.ts +3 -0
  133. package/dist/components/icons/shield-check/index.d.ts.map +1 -0
  134. package/dist/components/icons/shield-check/shield-check.d.ts +6 -0
  135. package/dist/components/icons/shield-check/shield-check.d.ts.map +1 -0
  136. package/dist/components/icons/sun/index.d.ts +3 -0
  137. package/dist/components/icons/sun/index.d.ts.map +1 -0
  138. package/dist/components/icons/sun/sun.d.ts +6 -0
  139. package/dist/components/icons/sun/sun.d.ts.map +1 -0
  140. package/dist/components/icons/terminal/index.d.ts +3 -0
  141. package/dist/components/icons/terminal/index.d.ts.map +1 -0
  142. package/dist/components/icons/terminal/terminal.d.ts +6 -0
  143. package/dist/components/icons/terminal/terminal.d.ts.map +1 -0
  144. package/dist/components/icons/users/index.d.ts +3 -0
  145. package/dist/components/icons/users/index.d.ts.map +1 -0
  146. package/dist/components/icons/users/users.d.ts +6 -0
  147. package/dist/components/icons/users/users.d.ts.map +1 -0
  148. package/dist/components/info-banner/index.d.ts +2 -0
  149. package/dist/components/info-banner/index.d.ts.map +1 -0
  150. package/dist/components/info-banner/info-banner.d.ts +9 -0
  151. package/dist/components/info-banner/info-banner.d.ts.map +1 -0
  152. package/dist/components/info-banner/info-banner.stories.d.ts +23 -0
  153. package/dist/components/info-banner/info-banner.stories.d.ts.map +1 -0
  154. package/dist/components/loading-skeleton/index.d.ts +2 -0
  155. package/dist/components/loading-skeleton/index.d.ts.map +1 -0
  156. package/dist/components/loading-skeleton/loading-skeleton.d.ts +19 -0
  157. package/dist/components/loading-skeleton/loading-skeleton.d.ts.map +1 -0
  158. package/dist/components/metric-card/index.d.ts +2 -0
  159. package/dist/components/metric-card/index.d.ts.map +1 -0
  160. package/dist/components/metric-card/metric-card.d.ts +31 -0
  161. package/dist/components/metric-card/metric-card.d.ts.map +1 -0
  162. package/dist/components/metric-card/metric-card.stories.d.ts +16 -0
  163. package/dist/components/metric-card/metric-card.stories.d.ts.map +1 -0
  164. package/dist/components/migration/banner/banner.d.ts +24 -0
  165. package/dist/components/migration/banner/banner.d.ts.map +1 -0
  166. package/dist/components/migration/banner/banner.stories.d.ts +39 -0
  167. package/dist/components/migration/banner/banner.stories.d.ts.map +1 -0
  168. package/dist/components/migration/banner/index.d.ts +2 -0
  169. package/dist/components/migration/banner/index.d.ts.map +1 -0
  170. package/dist/components/migration/double-section/double-section.d.ts +29 -0
  171. package/dist/components/migration/double-section/double-section.d.ts.map +1 -0
  172. package/dist/components/migration/double-section/double-section.stories.d.ts +32 -0
  173. package/dist/components/migration/double-section/double-section.stories.d.ts.map +1 -0
  174. package/dist/components/migration/double-section/index.d.ts +2 -0
  175. package/dist/components/migration/double-section/index.d.ts.map +1 -0
  176. package/dist/components/migration/field/field.d.ts +19 -0
  177. package/dist/components/migration/field/field.d.ts.map +1 -0
  178. package/dist/components/migration/field/field.stories.d.ts +43 -0
  179. package/dist/components/migration/field/field.stories.d.ts.map +1 -0
  180. package/dist/components/migration/field/index.d.ts +2 -0
  181. package/dist/components/migration/field/index.d.ts.map +1 -0
  182. package/dist/components/migration/index.d.ts +16 -0
  183. package/dist/components/migration/index.d.ts.map +1 -0
  184. package/dist/components/migration/settings-section-v2/index.d.ts +2 -0
  185. package/dist/components/migration/settings-section-v2/index.d.ts.map +1 -0
  186. package/dist/components/migration/settings-section-v2/settings-section-v2.d.ts +45 -0
  187. package/dist/components/migration/settings-section-v2/settings-section-v2.d.ts.map +1 -0
  188. package/dist/components/migration/settings-section-v2/settings-section-v2.stories.d.ts +40 -0
  189. package/dist/components/migration/settings-section-v2/settings-section-v2.stories.d.ts.map +1 -0
  190. package/dist/components/migration/sub-section/index.d.ts +2 -0
  191. package/dist/components/migration/sub-section/index.d.ts.map +1 -0
  192. package/dist/components/migration/sub-section/sub-section.d.ts +26 -0
  193. package/dist/components/migration/sub-section/sub-section.d.ts.map +1 -0
  194. package/dist/components/migration/sub-section/sub-section.stories.d.ts +33 -0
  195. package/dist/components/migration/sub-section/sub-section.stories.d.ts.map +1 -0
  196. package/dist/components/migration/toggle-group/index.d.ts +2 -0
  197. package/dist/components/migration/toggle-group/index.d.ts.map +1 -0
  198. package/dist/components/migration/toggle-group/toggle-group.d.ts +22 -0
  199. package/dist/components/migration/toggle-group/toggle-group.d.ts.map +1 -0
  200. package/dist/components/migration/toggle-group/toggle-group.stories.d.ts +21 -0
  201. package/dist/components/migration/toggle-group/toggle-group.stories.d.ts.map +1 -0
  202. package/dist/components/page-actions/index.d.ts +2 -0
  203. package/dist/components/page-actions/index.d.ts.map +1 -0
  204. package/dist/components/page-actions/page-actions.d.ts +5 -0
  205. package/dist/components/page-actions/page-actions.d.ts.map +1 -0
  206. package/dist/components/patterns/config-tab-with-pill/config-tab-with-pill.stories.d.ts +17 -0
  207. package/dist/components/patterns/config-tab-with-pill/config-tab-with-pill.stories.d.ts.map +1 -0
  208. package/dist/components/patterns/cors-list/cors-list.stories.d.ts +17 -0
  209. package/dist/components/patterns/cors-list/cors-list.stories.d.ts.map +1 -0
  210. package/dist/components/patterns/rounded-row-list/rounded-row-list.stories.d.ts +17 -0
  211. package/dist/components/patterns/rounded-row-list/rounded-row-list.stories.d.ts.map +1 -0
  212. package/dist/components/patterns/save-in-modal/save-in-modal.stories.d.ts +18 -0
  213. package/dist/components/patterns/save-in-modal/save-in-modal.stories.d.ts.map +1 -0
  214. package/dist/components/patterns/stat-card-grid/stat-card-grid.stories.d.ts +17 -0
  215. package/dist/components/patterns/stat-card-grid/stat-card-grid.stories.d.ts.map +1 -0
  216. package/dist/components/product-page-layout/index.d.ts +2 -0
  217. package/dist/components/product-page-layout/index.d.ts.map +1 -0
  218. package/dist/components/product-page-layout/product-page-layout.d.ts +20 -0
  219. package/dist/components/product-page-layout/product-page-layout.d.ts.map +1 -0
  220. package/dist/components/product-page-layout/product-page-layout.stories.d.ts +14 -0
  221. package/dist/components/product-page-layout/product-page-layout.stories.d.ts.map +1 -0
  222. package/dist/components/settings-section/index.d.ts +2 -0
  223. package/dist/components/settings-section/index.d.ts.map +1 -0
  224. package/dist/components/settings-section/settings-section.d.ts +10 -0
  225. package/dist/components/settings-section/settings-section.d.ts.map +1 -0
  226. package/dist/components/settings-section/settings-section.stories.d.ts +26 -0
  227. package/dist/components/settings-section/settings-section.stories.d.ts.map +1 -0
  228. package/dist/components/status-badge/index.d.ts +2 -0
  229. package/dist/components/status-badge/index.d.ts.map +1 -0
  230. package/dist/components/status-badge/status-badge.d.ts +9 -0
  231. package/dist/components/status-badge/status-badge.d.ts.map +1 -0
  232. package/dist/components/status-badge/status-badge.stories.d.ts +24 -0
  233. package/dist/components/status-badge/status-badge.stories.d.ts.map +1 -0
  234. package/dist/components/toggle-card/index.d.ts +2 -0
  235. package/dist/components/toggle-card/index.d.ts.map +1 -0
  236. package/dist/components/toggle-card/toggle-card.d.ts +113 -0
  237. package/dist/components/toggle-card/toggle-card.d.ts.map +1 -0
  238. package/dist/components/toggle-card/toggle-card.stories.d.ts +45 -0
  239. package/dist/components/toggle-card/toggle-card.stories.d.ts.map +1 -0
  240. package/dist/components/toggle-row/index.d.ts +2 -0
  241. package/dist/components/toggle-row/index.d.ts.map +1 -0
  242. package/dist/components/toggle-row/toggle-row.d.ts +16 -0
  243. package/dist/components/toggle-row/toggle-row.d.ts.map +1 -0
  244. package/dist/components/toggle-row/toggle-row.stories.d.ts +33 -0
  245. package/dist/components/toggle-row/toggle-row.stories.d.ts.map +1 -0
  246. package/dist/components/tokens/colors/colors.stories.d.ts +22 -0
  247. package/dist/components/tokens/colors/colors.stories.d.ts.map +1 -0
  248. package/dist/components/tokens/radius/radius.stories.d.ts +18 -0
  249. package/dist/components/tokens/radius/radius.stories.d.ts.map +1 -0
  250. package/dist/components/tokens/shadows/shadows.stories.d.ts +18 -0
  251. package/dist/components/tokens/shadows/shadows.stories.d.ts.map +1 -0
  252. package/dist/components/tokens/spacing/spacing.stories.d.ts +17 -0
  253. package/dist/components/tokens/spacing/spacing.stories.d.ts.map +1 -0
  254. package/dist/components/tokens/typography/typography.stories.d.ts +17 -0
  255. package/dist/components/tokens/typography/typography.stories.d.ts.map +1 -0
  256. package/dist/components/ui/accordion/accordion.d.ts +8 -0
  257. package/dist/components/ui/accordion/accordion.d.ts.map +1 -0
  258. package/dist/components/ui/accordion/index.d.ts +2 -0
  259. package/dist/components/ui/accordion/index.d.ts.map +1 -0
  260. package/dist/components/ui/alert-dialog/alert-dialog.d.ts +19 -0
  261. package/dist/components/ui/alert-dialog/alert-dialog.d.ts.map +1 -0
  262. package/dist/components/ui/alert-dialog/alert-dialog.stories.d.ts +13 -0
  263. package/dist/components/ui/alert-dialog/alert-dialog.stories.d.ts.map +1 -0
  264. package/dist/components/ui/alert-dialog/index.d.ts +2 -0
  265. package/dist/components/ui/alert-dialog/index.d.ts.map +1 -0
  266. package/dist/components/ui/avatar/avatar.d.ts +12 -0
  267. package/dist/components/ui/avatar/avatar.d.ts.map +1 -0
  268. package/dist/components/ui/avatar/avatar.stories.d.ts +17 -0
  269. package/dist/components/ui/avatar/avatar.stories.d.ts.map +1 -0
  270. package/dist/components/ui/avatar/index.d.ts +2 -0
  271. package/dist/components/ui/avatar/index.d.ts.map +1 -0
  272. package/dist/components/ui/badge/badge.d.ts +10 -0
  273. package/dist/components/ui/badge/badge.d.ts.map +1 -0
  274. package/dist/components/ui/badge/badge.stories.d.ts +29 -0
  275. package/dist/components/ui/badge/badge.stories.d.ts.map +1 -0
  276. package/dist/components/ui/badge/index.d.ts +2 -0
  277. package/dist/components/ui/badge/index.d.ts.map +1 -0
  278. package/dist/components/ui/button/button.d.ts +11 -0
  279. package/dist/components/ui/button/button.d.ts.map +1 -0
  280. package/dist/components/ui/button/button.stories.d.ts +42 -0
  281. package/dist/components/ui/button/button.stories.d.ts.map +1 -0
  282. package/dist/components/ui/button/index.d.ts +2 -0
  283. package/dist/components/ui/button/index.d.ts.map +1 -0
  284. package/dist/components/ui/card/card.d.ts +10 -0
  285. package/dist/components/ui/card/card.d.ts.map +1 -0
  286. package/dist/components/ui/card/card.stories.d.ts +14 -0
  287. package/dist/components/ui/card/card.stories.d.ts.map +1 -0
  288. package/dist/components/ui/card/index.d.ts +2 -0
  289. package/dist/components/ui/card/index.d.ts.map +1 -0
  290. package/dist/components/ui/check-icon/check-icon.d.ts +7 -0
  291. package/dist/components/ui/check-icon/check-icon.d.ts.map +1 -0
  292. package/dist/components/ui/check-icon/index.d.ts +2 -0
  293. package/dist/components/ui/check-icon/index.d.ts.map +1 -0
  294. package/dist/components/ui/checkbox/checkbox.d.ts +5 -0
  295. package/dist/components/ui/checkbox/checkbox.d.ts.map +1 -0
  296. package/dist/components/ui/checkbox/checkbox.stories.d.ts +18 -0
  297. package/dist/components/ui/checkbox/checkbox.stories.d.ts.map +1 -0
  298. package/dist/components/ui/checkbox/index.d.ts +2 -0
  299. package/dist/components/ui/checkbox/index.d.ts.map +1 -0
  300. package/dist/components/ui/collapsible/collapsible.d.ts +7 -0
  301. package/dist/components/ui/collapsible/collapsible.d.ts.map +1 -0
  302. package/dist/components/ui/collapsible/collapsible.stories.d.ts +14 -0
  303. package/dist/components/ui/collapsible/collapsible.stories.d.ts.map +1 -0
  304. package/dist/components/ui/collapsible/index.d.ts +2 -0
  305. package/dist/components/ui/collapsible/index.d.ts.map +1 -0
  306. package/dist/components/ui/command/command.d.ts +18 -0
  307. package/dist/components/ui/command/command.d.ts.map +1 -0
  308. package/dist/components/ui/command/index.d.ts +2 -0
  309. package/dist/components/ui/command/index.d.ts.map +1 -0
  310. package/dist/components/ui/dialog/dialog.d.ts +19 -0
  311. package/dist/components/ui/dialog/dialog.d.ts.map +1 -0
  312. package/dist/components/ui/dialog/dialog.stories.d.ts +15 -0
  313. package/dist/components/ui/dialog/dialog.stories.d.ts.map +1 -0
  314. package/dist/components/ui/dialog/index.d.ts +2 -0
  315. package/dist/components/ui/dialog/index.d.ts.map +1 -0
  316. package/dist/components/ui/dropdown-menu/dropdown-menu.d.ts +26 -0
  317. package/dist/components/ui/dropdown-menu/dropdown-menu.d.ts.map +1 -0
  318. package/dist/components/ui/dropdown-menu/dropdown-menu.stories.d.ts +14 -0
  319. package/dist/components/ui/dropdown-menu/dropdown-menu.stories.d.ts.map +1 -0
  320. package/dist/components/ui/dropdown-menu/index.d.ts +2 -0
  321. package/dist/components/ui/dropdown-menu/index.d.ts.map +1 -0
  322. package/dist/components/ui/flush-card-detach/flush-card-detach.stories.d.ts +17 -0
  323. package/dist/components/ui/flush-card-detach/flush-card-detach.stories.d.ts.map +1 -0
  324. package/dist/components/ui/icon/icon.d.ts +4 -0
  325. package/dist/components/ui/icon/icon.d.ts.map +1 -0
  326. package/dist/components/ui/icon/index.d.ts +2 -0
  327. package/dist/components/ui/icon/index.d.ts.map +1 -0
  328. package/dist/components/ui/input/index.d.ts +2 -0
  329. package/dist/components/ui/input/index.d.ts.map +1 -0
  330. package/dist/components/ui/input/input.d.ts +24 -0
  331. package/dist/components/ui/input/input.d.ts.map +1 -0
  332. package/dist/components/ui/input/input.stories.d.ts +36 -0
  333. package/dist/components/ui/input/input.stories.d.ts.map +1 -0
  334. package/dist/components/ui/kbd/index.d.ts +2 -0
  335. package/dist/components/ui/kbd/index.d.ts.map +1 -0
  336. package/dist/components/ui/kbd/kbd.d.ts +5 -0
  337. package/dist/components/ui/kbd/kbd.d.ts.map +1 -0
  338. package/dist/components/ui/label/index.d.ts +2 -0
  339. package/dist/components/ui/label/index.d.ts.map +1 -0
  340. package/dist/components/ui/label/label.d.ts +4 -0
  341. package/dist/components/ui/label/label.d.ts.map +1 -0
  342. package/dist/components/ui/label/label.stories.d.ts +14 -0
  343. package/dist/components/ui/label/label.stories.d.ts.map +1 -0
  344. package/dist/components/ui/popover/index.d.ts +2 -0
  345. package/dist/components/ui/popover/index.d.ts.map +1 -0
  346. package/dist/components/ui/popover/popover.d.ts +11 -0
  347. package/dist/components/ui/popover/popover.d.ts.map +1 -0
  348. package/dist/components/ui/popover/popover.stories.d.ts +13 -0
  349. package/dist/components/ui/popover/popover.stories.d.ts.map +1 -0
  350. package/dist/components/ui/progress/index.d.ts +2 -0
  351. package/dist/components/ui/progress/index.d.ts.map +1 -0
  352. package/dist/components/ui/progress/progress.d.ts +12 -0
  353. package/dist/components/ui/progress/progress.d.ts.map +1 -0
  354. package/dist/components/ui/progress/progress.stories.d.ts +17 -0
  355. package/dist/components/ui/progress/progress.stories.d.ts.map +1 -0
  356. package/dist/components/ui/radio-group/index.d.ts +2 -0
  357. package/dist/components/ui/radio-group/index.d.ts.map +1 -0
  358. package/dist/components/ui/radio-group/radio-group.d.ts +6 -0
  359. package/dist/components/ui/radio-group/radio-group.d.ts.map +1 -0
  360. package/dist/components/ui/radio-group/radio-group.stories.d.ts +14 -0
  361. package/dist/components/ui/radio-group/radio-group.stories.d.ts.map +1 -0
  362. package/dist/components/ui/scroll-area/index.d.ts +2 -0
  363. package/dist/components/ui/scroll-area/index.d.ts.map +1 -0
  364. package/dist/components/ui/scroll-area/scroll-area.d.ts +6 -0
  365. package/dist/components/ui/scroll-area/scroll-area.d.ts.map +1 -0
  366. package/dist/components/ui/search-input/index.d.ts +2 -0
  367. package/dist/components/ui/search-input/index.d.ts.map +1 -0
  368. package/dist/components/ui/search-input/search-input.d.ts +7 -0
  369. package/dist/components/ui/search-input/search-input.d.ts.map +1 -0
  370. package/dist/components/ui/select/index.d.ts +2 -0
  371. package/dist/components/ui/select/index.d.ts.map +1 -0
  372. package/dist/components/ui/select/select.d.ts +16 -0
  373. package/dist/components/ui/select/select.d.ts.map +1 -0
  374. package/dist/components/ui/select/select.stories.d.ts +16 -0
  375. package/dist/components/ui/select/select.stories.d.ts.map +1 -0
  376. package/dist/components/ui/selectable-card/index.d.ts +2 -0
  377. package/dist/components/ui/selectable-card/index.d.ts.map +1 -0
  378. package/dist/components/ui/selectable-card/selectable-card.d.ts +14 -0
  379. package/dist/components/ui/selectable-card/selectable-card.d.ts.map +1 -0
  380. package/dist/components/ui/selectable-card/selectable-card.stories.d.ts +20 -0
  381. package/dist/components/ui/selectable-card/selectable-card.stories.d.ts.map +1 -0
  382. package/dist/components/ui/separator/index.d.ts +2 -0
  383. package/dist/components/ui/separator/index.d.ts.map +1 -0
  384. package/dist/components/ui/separator/separator.d.ts +3 -0
  385. package/dist/components/ui/separator/separator.d.ts.map +1 -0
  386. package/dist/components/ui/separator/separator.stories.d.ts +14 -0
  387. package/dist/components/ui/separator/separator.stories.d.ts.map +1 -0
  388. package/dist/components/ui/sheet/index.d.ts +2 -0
  389. package/dist/components/ui/sheet/index.d.ts.map +1 -0
  390. package/dist/components/ui/sheet/sheet.d.ts +16 -0
  391. package/dist/components/ui/sheet/sheet.d.ts.map +1 -0
  392. package/dist/components/ui/sheet/sheet.stories.d.ts +14 -0
  393. package/dist/components/ui/sheet/sheet.stories.d.ts.map +1 -0
  394. package/dist/components/ui/skeleton/index.d.ts +2 -0
  395. package/dist/components/ui/skeleton/index.d.ts.map +1 -0
  396. package/dist/components/ui/skeleton/skeleton.d.ts +4 -0
  397. package/dist/components/ui/skeleton/skeleton.d.ts.map +1 -0
  398. package/dist/components/ui/skeleton/skeleton.stories.d.ts +15 -0
  399. package/dist/components/ui/skeleton/skeleton.stories.d.ts.map +1 -0
  400. package/dist/components/ui/sonner/index.d.ts +2 -0
  401. package/dist/components/ui/sonner/index.d.ts.map +1 -0
  402. package/dist/components/ui/sonner/sonner.d.ts +4 -0
  403. package/dist/components/ui/sonner/sonner.d.ts.map +1 -0
  404. package/dist/components/ui/spinner/index.d.ts +2 -0
  405. package/dist/components/ui/spinner/index.d.ts.map +1 -0
  406. package/dist/components/ui/spinner/spinner.d.ts +5 -0
  407. package/dist/components/ui/spinner/spinner.d.ts.map +1 -0
  408. package/dist/components/ui/spinner/spinner.stories.d.ts +17 -0
  409. package/dist/components/ui/spinner/spinner.stories.d.ts.map +1 -0
  410. package/dist/components/ui/switch/index.d.ts +2 -0
  411. package/dist/components/ui/switch/index.d.ts.map +1 -0
  412. package/dist/components/ui/switch/switch.d.ts +5 -0
  413. package/dist/components/ui/switch/switch.d.ts.map +1 -0
  414. package/dist/components/ui/switch/switch.stories.d.ts +29 -0
  415. package/dist/components/ui/switch/switch.stories.d.ts.map +1 -0
  416. package/dist/components/ui/table/index.d.ts +2 -0
  417. package/dist/components/ui/table/index.d.ts.map +1 -0
  418. package/dist/components/ui/table/table.d.ts +11 -0
  419. package/dist/components/ui/table/table.d.ts.map +1 -0
  420. package/dist/components/ui/table/table.stories.d.ts +13 -0
  421. package/dist/components/ui/table/table.stories.d.ts.map +1 -0
  422. package/dist/components/ui/tabs/index.d.ts +2 -0
  423. package/dist/components/ui/tabs/index.d.ts.map +1 -0
  424. package/dist/components/ui/tabs/tabs.d.ts +12 -0
  425. package/dist/components/ui/tabs/tabs.d.ts.map +1 -0
  426. package/dist/components/ui/tabs/tabs.stories.d.ts +13 -0
  427. package/dist/components/ui/tabs/tabs.stories.d.ts.map +1 -0
  428. package/dist/components/ui/textarea/index.d.ts +2 -0
  429. package/dist/components/ui/textarea/index.d.ts.map +1 -0
  430. package/dist/components/ui/textarea/textarea.d.ts +4 -0
  431. package/dist/components/ui/textarea/textarea.d.ts.map +1 -0
  432. package/dist/components/ui/textarea/textarea.stories.d.ts +14 -0
  433. package/dist/components/ui/textarea/textarea.stories.d.ts.map +1 -0
  434. package/dist/components/ui/tooltip/index.d.ts +2 -0
  435. package/dist/components/ui/tooltip/index.d.ts.map +1 -0
  436. package/dist/components/ui/tooltip/tooltip.d.ts +6 -0
  437. package/dist/components/ui/tooltip/tooltip.d.ts.map +1 -0
  438. package/dist/components/ui/tooltip/tooltip.stories.d.ts +14 -0
  439. package/dist/components/ui/tooltip/tooltip.stories.d.ts.map +1 -0
  440. package/dist/components/ui/well/index.d.ts +2 -0
  441. package/dist/components/ui/well/index.d.ts.map +1 -0
  442. package/dist/components/ui/well/well.d.ts +15 -0
  443. package/dist/components/ui/well/well.d.ts.map +1 -0
  444. package/dist/components/ui/well/well.stories.d.ts +39 -0
  445. package/dist/components/ui/well/well.stories.d.ts.map +1 -0
  446. package/dist/components/unsaved-changes-bar/index.d.ts +2 -0
  447. package/dist/components/unsaved-changes-bar/index.d.ts.map +1 -0
  448. package/dist/components/unsaved-changes-bar/unsaved-changes-bar.d.ts +22 -0
  449. package/dist/components/unsaved-changes-bar/unsaved-changes-bar.d.ts.map +1 -0
  450. package/dist/components/unsaved-changes-bar/unsaved-changes-bar.stories.d.ts +15 -0
  451. package/dist/components/unsaved-changes-bar/unsaved-changes-bar.stories.d.ts.map +1 -0
  452. package/dist/index.cjs +4064 -0
  453. package/dist/index.cjs.map +1 -0
  454. package/dist/index.d.ts +80 -0
  455. package/dist/index.d.ts.map +1 -0
  456. package/dist/index.esm.js +3851 -0
  457. package/dist/index.esm.js.map +1 -0
  458. package/dist/lib/utils.d.ts +3 -0
  459. package/dist/lib/utils.d.ts.map +1 -0
  460. package/dist/migration.cjs +328 -0
  461. package/dist/migration.cjs.map +1 -0
  462. package/dist/migration.esm.js +322 -0
  463. package/dist/migration.esm.js.map +1 -0
  464. package/dist/toggle-row-7lfPUutt.cjs +320 -0
  465. package/dist/toggle-row-7lfPUutt.cjs.map +1 -0
  466. package/dist/toggle-row-B5iXNWCJ.esm.js +278 -0
  467. package/dist/toggle-row-B5iXNWCJ.esm.js.map +1 -0
  468. package/package.json +91 -1
  469. package/src/styles/globals.css +615 -0
@@ -0,0 +1,3851 @@
1
+ import { a as Button, i as Input, n as Switch, o as buttonVariants, r as Label, s as cn, t as ToggleRow } from "./toggle-row-B5iXNWCJ.esm.js";
2
+ import { createContext, forwardRef, useCallback, useContext, useEffect, useId, useImperativeHandle, useMemo, useRef, useState } from "react";
3
+ import { AnimatePresence, motion, useAnimation, useReducedMotion } from "motion/react";
4
+ import { HugeiconsIcon } from "@hugeicons/react";
5
+ import { Add01Icon, Alert01Icon, ArrowDown01Icon, ArrowRight01Icon, ArrowUp01Icon, Cancel01Icon, CheckmarkCircle02Icon, Copy01Icon, InformationCircleIcon, Search01Icon, Tick01Icon, WebhookIcon } from "@hugeicons/core-free-icons";
6
+ import { cva } from "class-variance-authority";
7
+ import { Slot } from "@radix-ui/react-slot";
8
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
9
+ import * as AccordionPrimitive from "@radix-ui/react-accordion";
10
+ import { Content, Header, Item, Root, Trigger } from "@radix-ui/react-accordion";
11
+ import { Action, Cancel, Content as Content$1, Description, Overlay, Portal, Root as Root$1, Title, Trigger as Trigger$1 } from "@radix-ui/react-alert-dialog";
12
+ import * as AvatarPrimitive from "@radix-ui/react-avatar";
13
+ import * as CheckboxPrimitive from "@radix-ui/react-checkbox";
14
+ import * as CollapsiblePrimitive from "@radix-ui/react-collapsible";
15
+ import { Command as Command$1 } from "cmdk";
16
+ import * as SheetPrimitive from "@radix-ui/react-dialog";
17
+ import { Close, Content as Content$2, Description as Description$1, Overlay as Overlay$1, Portal as Portal$1, Root as Root$2, Title as Title$1, Trigger as Trigger$2 } from "@radix-ui/react-dialog";
18
+ import { CheckboxItem, Content as Content$3, Group, Item as Item$1, ItemIndicator, Label as Label$1, Portal as Portal$2, RadioGroup as RadioGroup$1, RadioItem, Root as Root$3, Separator as Separator$1, Sub, SubContent, SubTrigger, Trigger as Trigger$3 } from "@radix-ui/react-dropdown-menu";
19
+ import { CheckIcon as CheckIcon$1, ChevronRightIcon as ChevronRightIcon$1, CircleIcon } from "lucide-react";
20
+ import * as PopoverPrimitive from "@radix-ui/react-popover";
21
+ import * as RadioGroupPrimitive from "@radix-ui/react-radio-group";
22
+ import * as ScrollAreaPrimitive from "@radix-ui/react-scroll-area";
23
+ import { Content as Content$4, Group as Group$1, Icon as Icon$1, Item as Item$2, ItemIndicator as ItemIndicator$1, ItemText, Label as Label$2, Portal as Portal$3, Root as Root$4, ScrollDownButton, ScrollUpButton, Separator as Separator$2, Trigger as Trigger$4, Value, Viewport } from "@radix-ui/react-select";
24
+ import { Root as Root$5 } from "@radix-ui/react-separator";
25
+ import { useTheme } from "next-themes";
26
+ import { Toaster as Toaster$1 } from "sonner";
27
+ import * as TabsPrimitive from "@radix-ui/react-tabs";
28
+ import { Content as Content$5, Portal as Portal$4, Provider, Root as Root$6, Trigger as Trigger$5 } from "@radix-ui/react-tooltip";
29
+ import Link from "next/link";
30
+
31
+ //#region src/components/unsaved-changes-bar/unsaved-changes-bar.tsx
32
+ const spring$3 = {
33
+ bounce: 0,
34
+ duration: .35,
35
+ type: "spring"
36
+ };
37
+ const BLUR_STEPS = 6;
38
+ const BLUR_STRENGTH = 32;
39
+ const BLUR_STEP_IDS = Array.from({ length: BLUR_STEPS }, () => crypto.randomUUID());
40
+ const ProgressiveBlur = () => {
41
+ const factor = .5;
42
+ const base = Math.pow(BLUR_STRENGTH / factor, 1 / (BLUR_STEPS - 1));
43
+ const getBlur = (i) => factor * Math.pow(base, BLUR_STEPS - i - 1);
44
+ return /* @__PURE__ */ jsxs("div", {
45
+ className: "fixed -bottom-10 left-1/2 -translate-x-1/2 pointer-events-none z-40",
46
+ style: {
47
+ height: "160px",
48
+ width: "900px"
49
+ },
50
+ children: [BLUR_STEP_IDS.map((id, i) => {
51
+ const blur = getBlur(i);
52
+ const spread = 20 + (BLUR_STEPS - i) / BLUR_STEPS * 30;
53
+ const mask = `radial-gradient(ellipse ${spread}% ${spread}% at 50% 60%, rgba(0,0,0,1), rgba(0,0,0,0))`;
54
+ return /* @__PURE__ */ jsx("div", {
55
+ className: "absolute inset-0",
56
+ style: {
57
+ backdropFilter: `blur(${blur}px)`,
58
+ mask,
59
+ WebkitBackdropFilter: `blur(${blur}px)`,
60
+ WebkitMask: mask
61
+ }
62
+ }, id);
63
+ }), /* @__PURE__ */ jsx("div", {
64
+ className: "absolute inset-0",
65
+ style: { background: "radial-gradient(ellipse 40% 50% at 50% 60%, var(--background), transparent)" }
66
+ })]
67
+ });
68
+ };
69
+ const popTransition = {
70
+ ...spring$3,
71
+ duration: .25
72
+ };
73
+ const StatusIcon = ({ state }) => {
74
+ return /* @__PURE__ */ jsx("div", {
75
+ className: "relative size-[18px] shrink-0",
76
+ children: /* @__PURE__ */ jsx(AnimatePresence, {
77
+ mode: "popLayout",
78
+ initial: false,
79
+ children: /* @__PURE__ */ jsxs(motion.div, {
80
+ initial: {
81
+ filter: "blur(4px)",
82
+ opacity: 0,
83
+ scale: .25
84
+ },
85
+ animate: {
86
+ filter: "blur(0px)",
87
+ opacity: 1,
88
+ scale: 1
89
+ },
90
+ exit: {
91
+ filter: "blur(4px)",
92
+ opacity: 0,
93
+ scale: .25
94
+ },
95
+ transition: popTransition,
96
+ className: "absolute inset-0 will-change-[opacity,transform,filter]",
97
+ children: [state === "unsaved" && /* @__PURE__ */ jsx("span", {
98
+ className: "text-zinc-400 dark:text-zinc-400",
99
+ children: /* @__PURE__ */ jsx(HugeiconsIcon, {
100
+ icon: InformationCircleIcon,
101
+ size: 18
102
+ })
103
+ }), state === "saved" && /* @__PURE__ */ jsx("span", {
104
+ className: "text-emerald-400 dark:text-emerald-600",
105
+ children: /* @__PURE__ */ jsx(HugeiconsIcon, {
106
+ icon: CheckmarkCircle02Icon,
107
+ size: 18
108
+ })
109
+ })]
110
+ }, state)
111
+ })
112
+ });
113
+ };
114
+ const StatusText = ({ state }) => {
115
+ const text = state === "unsaved" ? "Unsaved changes" : "Changes saved";
116
+ return /* @__PURE__ */ jsx(AnimatePresence, {
117
+ mode: "popLayout",
118
+ initial: false,
119
+ children: /* @__PURE__ */ jsx(motion.span, {
120
+ initial: {
121
+ filter: "blur(4px)",
122
+ opacity: 0,
123
+ scale: .95
124
+ },
125
+ animate: {
126
+ filter: "blur(0px)",
127
+ opacity: 1,
128
+ scale: 1
129
+ },
130
+ exit: {
131
+ filter: "blur(4px)",
132
+ opacity: 0,
133
+ scale: .95
134
+ },
135
+ transition: popTransition,
136
+ className: "text-[13px] font-medium text-white dark:text-zinc-800 whitespace-nowrap will-change-[opacity,transform,filter]",
137
+ children: text
138
+ }, text)
139
+ });
140
+ };
141
+ const UnsavedChangesBar = ({ hasChanges, onSave, onReset, suppressed = false }) => {
142
+ const prefersReduced = useReducedMotion();
143
+ const [barState, setBarState] = useState("unsaved");
144
+ const [visible, setVisible] = useState(false);
145
+ const shouldRender = visible && !suppressed;
146
+ const dismissTimer = useRef(null);
147
+ const handleSave = () => {
148
+ onSave();
149
+ setBarState("saved");
150
+ dismissTimer.current = setTimeout(() => {
151
+ setVisible(false);
152
+ setBarState("unsaved");
153
+ }, 1800);
154
+ };
155
+ useEffect(() => {
156
+ if (hasChanges) {
157
+ if (dismissTimer.current) {
158
+ clearTimeout(dismissTimer.current);
159
+ dismissTimer.current = null;
160
+ }
161
+ setVisible(true);
162
+ setBarState("unsaved");
163
+ } else if (!dismissTimer.current) setVisible(false);
164
+ }, [hasChanges]);
165
+ return /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx(AnimatePresence, { children: shouldRender && /* @__PURE__ */ jsx(motion.div, {
166
+ initial: { opacity: 0 },
167
+ animate: { opacity: 1 },
168
+ exit: { opacity: 0 },
169
+ transition: spring$3,
170
+ children: /* @__PURE__ */ jsx(ProgressiveBlur, {})
171
+ }, "blur") }), /* @__PURE__ */ jsx("div", {
172
+ className: "fixed bottom-10 left-1/2 -translate-x-1/2 z-50",
173
+ children: /* @__PURE__ */ jsx(AnimatePresence, { children: shouldRender && /* @__PURE__ */ jsxs(motion.div, {
174
+ initial: prefersReduced ? { opacity: 0 } : {
175
+ opacity: 0,
176
+ scale: .95,
177
+ y: 20
178
+ },
179
+ animate: prefersReduced ? { opacity: 1 } : {
180
+ opacity: 1,
181
+ scale: 1,
182
+ y: 0
183
+ },
184
+ exit: prefersReduced ? { opacity: 0 } : {
185
+ opacity: 0,
186
+ scale: .95,
187
+ y: 20
188
+ },
189
+ transition: spring$3,
190
+ style: { willChange: "opacity, transform" },
191
+ className: "flex items-center gap-1.5 rounded-xl bg-zinc-900 dark:bg-[oklch(0.940_0.008_231)] shadow-[0_0_0_1px_rgba(0,0,0,0.08),0_8px_24px_-4px_rgba(0,0,0,0.25),0_20px_50px_-8px_rgba(0,0,0,0.20)] dark:shadow-[0_0_0_1px_rgba(0,0,0,0.08),0_8px_20px_-4px_rgba(0,0,0,0.10),0_20px_50px_-8px_rgba(0,0,0,0.08)] pl-3 pr-1.5 py-1.5",
192
+ children: [
193
+ /* @__PURE__ */ jsx(StatusIcon, { state: barState }),
194
+ /* @__PURE__ */ jsx(StatusText, { state: barState }),
195
+ /* @__PURE__ */ jsxs(motion.div, {
196
+ animate: { opacity: barState === "unsaved" ? 1 : 0 },
197
+ transition: popTransition,
198
+ className: "flex items-center gap-1.5 ml-0.5",
199
+ style: { pointerEvents: barState === "unsaved" ? "auto" : "none" },
200
+ children: [/* @__PURE__ */ jsx(Button, {
201
+ variant: "ghost",
202
+ size: "sm",
203
+ className: "rounded-md text-zinc-400 hover:text-white hover:bg-white/10 dark:text-zinc-500 dark:hover:text-zinc-800 dark:hover:bg-black/[0.06] shrink-0 touch-manipulation",
204
+ onClick: onReset,
205
+ children: "Reset"
206
+ }), /* @__PURE__ */ jsx(Button, {
207
+ size: "sm",
208
+ className: "rounded-md shrink-0 touch-manipulation",
209
+ onClick: handleSave,
210
+ children: "Save changes"
211
+ })]
212
+ })
213
+ ]
214
+ }) })
215
+ })] });
216
+ };
217
+ const sessionStore = {
218
+ get(key) {
219
+ if (globalThis.window === void 0) return void 0;
220
+ try {
221
+ const stored = localStorage.getItem(`dashboard-${key}`);
222
+ return stored ? JSON.parse(stored) : void 0;
223
+ } catch {
224
+ return;
225
+ }
226
+ },
227
+ set(key, value) {
228
+ if (globalThis.window === void 0) return;
229
+ try {
230
+ localStorage.setItem(`dashboard-${key}`, JSON.stringify(value));
231
+ } catch {}
232
+ }
233
+ };
234
+ const useUnsavedChanges = (initialValues, storeKey) => {
235
+ const cached = storeKey ? sessionStore.get(storeKey) : void 0;
236
+ const [values, setValues] = useState(cached?.values ?? initialValues);
237
+ const [savedValues, setSavedValues] = useState(cached?.savedValues ?? initialValues);
238
+ useEffect(() => {
239
+ if (storeKey) sessionStore.set(storeKey, {
240
+ savedValues,
241
+ values
242
+ });
243
+ }, [
244
+ storeKey,
245
+ values,
246
+ savedValues
247
+ ]);
248
+ const hasChanges = useMemo(() => {
249
+ return JSON.stringify(values) !== JSON.stringify(savedValues);
250
+ }, [values, savedValues]);
251
+ const updateValue = (key, value) => {
252
+ setValues((prev) => ({
253
+ ...prev,
254
+ [key]: value
255
+ }));
256
+ };
257
+ const save = () => {
258
+ setSavedValues(values);
259
+ };
260
+ const reset = () => {
261
+ setValues(savedValues);
262
+ };
263
+ const commit = (partial) => {
264
+ const next = partial ? {
265
+ ...values,
266
+ ...partial
267
+ } : values;
268
+ setValues(next);
269
+ setSavedValues(next);
270
+ return next;
271
+ };
272
+ return {
273
+ commit,
274
+ hasChanges,
275
+ reset,
276
+ save,
277
+ setValues,
278
+ updateValue,
279
+ values
280
+ };
281
+ };
282
+
283
+ //#endregion
284
+ //#region src/components/ui/accordion/accordion.tsx
285
+ const Accordion = ({ ...props }) => /* @__PURE__ */ jsx(AccordionPrimitive.Root, {
286
+ "data-slot": "accordion",
287
+ ...props
288
+ });
289
+ const AccordionItem = ({ className, ...props }) => {
290
+ return /* @__PURE__ */ jsx(AccordionPrimitive.Item, {
291
+ "data-slot": "accordion-item",
292
+ className: cn("border-b border-[var(--border-divider)] last:border-b-0", className),
293
+ ...props
294
+ });
295
+ };
296
+ const AccordionTrigger = ({ className, children, ...props }) => {
297
+ return /* @__PURE__ */ jsx(AccordionPrimitive.Header, {
298
+ className: "flex",
299
+ children: /* @__PURE__ */ jsxs(AccordionPrimitive.Trigger, {
300
+ "data-slot": "accordion-trigger",
301
+ className: cn("focus-visible:ring-ring/50 flex flex-1 items-center justify-between gap-4 rounded-md px-1 py-4 text-left text-sm font-medium touch-manipulation transition-[color,background-color,opacity] duration-150 ease-out outline-none focus-visible:ring-[3px] disabled:pointer-events-none disabled:opacity-50 cursor-pointer", className),
302
+ ...props,
303
+ children: [children, /* @__PURE__ */ jsx(HugeiconsIcon, {
304
+ icon: ArrowRight01Icon,
305
+ size: 16,
306
+ className: "text-muted-foreground/60 pointer-events-none shrink-0 transition-transform duration-200 [*[data-state=open]>&]:rotate-90"
307
+ })]
308
+ })
309
+ });
310
+ };
311
+ const AccordionContent = ({ className, children, ...props }) => {
312
+ return /* @__PURE__ */ jsx(AccordionPrimitive.Content, {
313
+ "data-slot": "accordion-content",
314
+ className: "data-[state=closed]:animate-accordion-up data-[state=open]:animate-accordion-down motion-reduce:animate-none overflow-hidden text-sm",
315
+ ...props,
316
+ children: /* @__PURE__ */ jsx("div", {
317
+ className: cn("px-1 pt-0 pb-4", className),
318
+ children
319
+ })
320
+ });
321
+ };
322
+
323
+ //#endregion
324
+ //#region src/components/ui/alert-dialog/alert-dialog.tsx
325
+ const AlertDialog = Root$1;
326
+ const AlertDialogTrigger = Trigger$1;
327
+ const AlertDialogPortal = Portal;
328
+ const AlertDialogOverlay = ({ className, ...props }) => /* @__PURE__ */ jsx(Overlay, {
329
+ "data-slot": "alert-dialog-overlay",
330
+ className: cn("data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-[var(--overlay-md)] backdrop-blur-[2px] will-change-[opacity] duration-200 motion-reduce:animate-none", className),
331
+ ...props
332
+ });
333
+ const AlertDialogContent = ({ className, size = "default", ...props }) => /* @__PURE__ */ jsxs(AlertDialogPortal, { children: [/* @__PURE__ */ jsx(AlertDialogOverlay, {}), /* @__PURE__ */ jsx(Content$1, {
334
+ "data-slot": "alert-dialog-content",
335
+ "data-size": size,
336
+ className: cn("bg-muted overflow-hidden 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-98 data-[state=open]:zoom-in-95 group/alert-dialog-content fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] rounded-[16px] border-0 shadow-none duration-200 data-[size=sm]:max-w-xs data-[size=default]:sm:max-w-md will-change-[opacity,transform] motion-reduce:animate-none", className),
337
+ ...props
338
+ })] });
339
+ const AlertDialogHeader = ({ className, ...props }) => /* @__PURE__ */ jsx("div", {
340
+ "data-slot": "alert-dialog-header",
341
+ className: cn("grid grid-rows-[auto_1fr] place-items-center gap-1.5 px-5 py-4 border-b bg-card text-center has-data-[slot=alert-dialog-media]:grid-rows-[auto_auto_1fr] has-data-[slot=alert-dialog-media]:gap-x-6 sm:group-data-[size=default]/alert-dialog-content:place-items-start sm:group-data-[size=default]/alert-dialog-content:text-left sm:group-data-[size=default]/alert-dialog-content:has-data-[slot=alert-dialog-media]:grid-rows-[auto_1fr]", className),
342
+ ...props
343
+ });
344
+ const AlertDialogFooter = ({ className, ...props }) => /* @__PURE__ */ jsx("div", {
345
+ "data-slot": "alert-dialog-footer",
346
+ className: cn("grid grid-cols-2 gap-2 px-5 py-4 bg-muted", className),
347
+ ...props
348
+ });
349
+ const AlertDialogTitle = ({ className, ...props }) => /* @__PURE__ */ jsx(Title, {
350
+ "data-slot": "alert-dialog-title",
351
+ className: cn("text-lg font-semibold text-balance sm:group-data-[size=default]/alert-dialog-content:group-has-data-[slot=alert-dialog-media]/alert-dialog-content:col-start-2", className),
352
+ ...props
353
+ });
354
+ const AlertDialogDescription = ({ className, ...props }) => /* @__PURE__ */ jsx(Description, {
355
+ "data-slot": "alert-dialog-description",
356
+ className: cn("text-muted-foreground text-sm text-pretty", className),
357
+ ...props
358
+ });
359
+ const AlertDialogAction = ({ className, variant = "default", size = "default", ...props }) => /* @__PURE__ */ jsx(Button, {
360
+ variant,
361
+ size,
362
+ asChild: true,
363
+ children: /* @__PURE__ */ jsx(Action, {
364
+ "data-slot": "alert-dialog-action",
365
+ className: cn(className),
366
+ ...props
367
+ })
368
+ });
369
+ const AlertDialogCancel = ({ className, variant = "outline", size = "default", ...props }) => /* @__PURE__ */ jsx(Button, {
370
+ variant,
371
+ size,
372
+ asChild: true,
373
+ children: /* @__PURE__ */ jsx(Cancel, {
374
+ "data-slot": "alert-dialog-cancel",
375
+ className: cn(className),
376
+ ...props
377
+ })
378
+ });
379
+
380
+ //#endregion
381
+ //#region src/components/ui/avatar/avatar.tsx
382
+ const Avatar = ({ className, size = "default", ...props }) => {
383
+ return /* @__PURE__ */ jsx(AvatarPrimitive.Root, {
384
+ "data-slot": "avatar",
385
+ "data-size": size,
386
+ className: cn("group/avatar relative flex size-8 shrink-0 overflow-hidden rounded-full select-none data-[size=lg]:size-10 data-[size=sm]:size-6", className),
387
+ ...props
388
+ });
389
+ };
390
+ const AvatarImage = ({ className, ...props }) => {
391
+ return /* @__PURE__ */ jsx(AvatarPrimitive.Image, {
392
+ "data-slot": "avatar-image",
393
+ className: cn("aspect-square size-full outline-1 -outline-offset-1 outline-black/10", className),
394
+ ...props
395
+ });
396
+ };
397
+ const AvatarFallback = ({ className, ...props }) => {
398
+ return /* @__PURE__ */ jsx(AvatarPrimitive.Fallback, {
399
+ "data-slot": "avatar-fallback",
400
+ className: cn("bg-muted text-muted-foreground flex size-full items-center justify-center rounded-full text-sm group-data-[size=sm]/avatar:text-xs", className),
401
+ ...props
402
+ });
403
+ };
404
+
405
+ //#endregion
406
+ //#region src/components/ui/badge/badge.tsx
407
+ const badgeVariants = cva("inline-flex items-center justify-center rounded-[5px] border border-transparent px-1.5 py-0.5 text-xs font-medium tabular-nums w-fit whitespace-nowrap shrink-0 [&>svg]:size-3 [&>svg]:[stroke-width:2.5] gap-1 [&>svg]:pointer-events-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive transition-[color,box-shadow,background-color] duration-150 overflow-hidden", {
408
+ defaultVariants: { variant: "default" },
409
+ variants: { variant: {
410
+ brand: "bg-[var(--brand-light)] text-[var(--brand-accented)] dark:text-[oklch(0.650_0.085_256)] border-[var(--brand-default)]/20 dark:border-[oklch(0.450_0.070_256)]/30 [a&]:hover:bg-[var(--brand-light)]/80",
411
+ danger: "bg-[var(--danger-light)] text-[var(--text-danger)] border-[var(--border-danger)]/20 [a&]:hover:bg-[var(--danger-light)]/80",
412
+ dashed: "border-dashed border-[var(--border-default)] text-muted-foreground bg-transparent",
413
+ "dashed-brand": "border-dashed border-[var(--brand-default)] text-[var(--brand-accented)] bg-transparent",
414
+ default: "bg-primary text-primary-foreground [a&]:hover:bg-primary/90",
415
+ destructive: "bg-destructive text-white [a&]:hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60",
416
+ ghost: "[a&]:hover:bg-accent [a&]:hover:text-accent-foreground",
417
+ "gradient-brand": "bg-gradient-to-r from-[var(--brand-default)] to-[var(--process-default)] text-white border-transparent",
418
+ "gradient-premium": "bg-gradient-to-r from-amber-500 to-orange-400 text-white border-transparent",
419
+ inactive: "bg-[var(--inactive-light)] text-muted-foreground border-[var(--border-inactive)]/40 [a&]:hover:bg-[var(--inactive-light)]/80",
420
+ link: "text-primary underline-offset-4 [a&]:hover:underline",
421
+ outline: "border-border text-foreground [a&]:hover:bg-accent [a&]:hover:text-accent-foreground",
422
+ process: "bg-[var(--process-light)] text-[var(--text-process)] border-[var(--border-process)]/20 [a&]:hover:bg-[var(--process-light)]/80",
423
+ secondary: "bg-secondary text-secondary-foreground [a&]:hover:bg-secondary/90",
424
+ success: "bg-[var(--success-light)] text-[var(--text-success)] border-[var(--border-success)]/20 [a&]:hover:bg-[var(--success-light)]/80",
425
+ warning: "bg-[var(--warning-light)] text-[var(--text-warning)] border-[var(--border-warning)]/20 [a&]:hover:bg-[var(--warning-light)]/80"
426
+ } }
427
+ });
428
+ const Badge = ({ className, variant = "default", asChild = false, ...props }) => {
429
+ return /* @__PURE__ */ jsx(asChild ? Slot : "span", {
430
+ "data-slot": "badge",
431
+ "data-variant": variant,
432
+ className: cn(badgeVariants({ variant }), className),
433
+ ...props
434
+ });
435
+ };
436
+
437
+ //#endregion
438
+ //#region src/components/ui/card/card.tsx
439
+ const Card = ({ className, ...props }) => /* @__PURE__ */ jsx("div", {
440
+ "data-slot": "card",
441
+ className: cn("bg-card text-card-foreground flex flex-col rounded-[16px] border-0 shadow-[var(--shadow-card)] overflow-hidden has-data-[slot=card-footer]:bg-muted/50", className),
442
+ ...props
443
+ });
444
+ const CardHeader = ({ className, ...props }) => /* @__PURE__ */ jsx("div", {
445
+ "data-slot": "card-header",
446
+ className: cn("@container/card-header grid auto-rows-min grid-rows-[auto_auto] items-start gap-1.5 px-5 py-4 border-b bg-card has-data-[slot=card-action]:grid-cols-[1fr_auto]", className),
447
+ ...props
448
+ });
449
+ const CardTitle = ({ className, ...props }) => /* @__PURE__ */ jsx("div", {
450
+ "data-slot": "card-title",
451
+ className: cn("text-sm leading-none font-semibold text-balance", className),
452
+ ...props
453
+ });
454
+ const CardDescription = ({ className, ...props }) => /* @__PURE__ */ jsx("div", {
455
+ "data-slot": "card-description",
456
+ className: cn("text-muted-foreground text-[13px] text-pretty", className),
457
+ ...props
458
+ });
459
+ const CardContent = ({ className, ...props }) => /* @__PURE__ */ jsx("div", {
460
+ "data-slot": "card-content",
461
+ className: cn("px-5 py-3.5 bg-card", className),
462
+ ...props
463
+ });
464
+ const CardFooter = ({ className, ...props }) => /* @__PURE__ */ jsx("div", {
465
+ "data-slot": "card-footer",
466
+ className: cn("flex items-center px-5 py-4 bg-muted/50", className),
467
+ ...props
468
+ });
469
+
470
+ //#endregion
471
+ //#region src/components/ui/check-icon/check-icon.tsx
472
+ const CheckIcon = ({ size = 14, strokeWidth = 3, className, ...props }) => /* @__PURE__ */ jsx("svg", {
473
+ "aria-hidden": "true",
474
+ viewBox: "0 0 24 24",
475
+ fill: "none",
476
+ stroke: "currentColor",
477
+ strokeLinecap: "round",
478
+ strokeLinejoin: "round",
479
+ style: {
480
+ height: size,
481
+ width: size
482
+ },
483
+ className,
484
+ ...props,
485
+ children: /* @__PURE__ */ jsx("path", {
486
+ d: "M4 12L9 17L20 6",
487
+ pathLength: 1,
488
+ strokeWidth
489
+ })
490
+ });
491
+
492
+ //#endregion
493
+ //#region src/components/ui/checkbox/checkbox.tsx
494
+ const Checkbox = ({ className, ...props }) => {
495
+ return /* @__PURE__ */ jsx(CheckboxPrimitive.Root, {
496
+ "data-slot": "checkbox",
497
+ className: cn("group peer dark:bg-input/30 data-[state=checked]:bg-[var(--action)] data-[state=checked]:text-white dark:data-[state=checked]:bg-[var(--action)] data-[state=indeterminate]:bg-[var(--action)] data-[state=indeterminate]:text-white relative size-4 shrink-0 touch-manipulation rounded-[4px] border-0 shadow-[0_0_0_1px_rgba(31,41,55,0.20),0_1px_2px_0_rgba(0,0,0,0.06),0_0_1px_0_rgba(0,0,0,0.02)] dark:shadow-[0_0_0_1px_rgba(255,255,255,0.15),0_1px_2px_0_rgba(0,0,0,0.20),0_0_1px_0_rgba(0,0,0,0.06)] data-[state=checked]:shadow-[0_0_0_1px_var(--action),0px_1px_1px_0px_rgba(255,255,255,0.15)_inset,0px_2px_3px_0px_rgba(31,41,55,0.30),0px_1px_1px_0px_rgba(0,0,0,0.28)] dark:data-[state=checked]:shadow-[0px_1px_1px_0px_rgba(255,255,255,0.10)_inset,0px_2px_3px_0px_rgba(0,0,0,0.50),0px_1px_1px_0px_rgba(0,0,0,0.30)] data-[state=indeterminate]:shadow-[0_0_0_1px_var(--action),0px_1px_1px_0px_rgba(255,255,255,0.15)_inset,0px_2px_3px_0px_rgba(31,41,55,0.30),0px_1px_1px_0px_rgba(0,0,0,0.28)] dark:data-[state=indeterminate]:shadow-[0px_1px_1px_0px_rgba(255,255,255,0.10)_inset,0px_2px_3px_0px_rgba(0,0,0,0.50),0px_1px_1px_0px_rgba(0,0,0,0.30)] transition-[color,box-shadow,background-color] duration-200 ease outline-none focus-visible:ring-[3px] focus-visible:ring-ring/50 aria-invalid:shadow-[0_0_0_1px_var(--destructive)] disabled:cursor-not-allowed disabled:opacity-50 cursor-pointer before:absolute before:-inset-[12px] before:content-['']", className),
498
+ ...props,
499
+ children: /* @__PURE__ */ jsxs(CheckboxPrimitive.Indicator, {
500
+ "data-slot": "checkbox-indicator",
501
+ className: "relative grid place-content-center text-current size-full",
502
+ forceMount: true,
503
+ children: [/* @__PURE__ */ jsx("svg", {
504
+ className: "size-3.5 absolute inset-0 m-auto transition-[opacity,transform,filter] duration-200 opacity-0 scale-[0.25] blur-[4px] group-data-[state=indeterminate]:opacity-100 group-data-[state=indeterminate]:scale-100 group-data-[state=indeterminate]:blur-none",
505
+ viewBox: "0 0 24 24",
506
+ fill: "none",
507
+ stroke: "currentColor",
508
+ strokeLinecap: "round",
509
+ strokeLinejoin: "round",
510
+ children: /* @__PURE__ */ jsx("path", {
511
+ d: "M5 12L19 12",
512
+ pathLength: 1,
513
+ strokeWidth: 3
514
+ })
515
+ }), /* @__PURE__ */ jsx("svg", {
516
+ className: "size-3.5 absolute inset-0 m-auto transition-[opacity,transform,filter] duration-200 opacity-0 scale-[0.25] blur-[4px] group-data-[state=checked]:opacity-100 group-data-[state=checked]:scale-100 group-data-[state=checked]:blur-none",
517
+ viewBox: "0 0 24 24",
518
+ fill: "none",
519
+ stroke: "currentColor",
520
+ strokeLinecap: "round",
521
+ strokeLinejoin: "round",
522
+ children: /* @__PURE__ */ jsx("path", {
523
+ d: "M4 12L9 17L20 6",
524
+ pathLength: 1,
525
+ strokeWidth: 3
526
+ })
527
+ })]
528
+ })
529
+ });
530
+ };
531
+
532
+ //#endregion
533
+ //#region src/components/ui/collapsible/collapsible.tsx
534
+ const Collapsible = ({ ...props }) => /* @__PURE__ */ jsx(CollapsiblePrimitive.Root, {
535
+ "data-slot": "collapsible",
536
+ ...props
537
+ });
538
+ const CollapsibleTrigger = ({ className, ...props }) => {
539
+ return /* @__PURE__ */ jsx(CollapsiblePrimitive.CollapsibleTrigger, {
540
+ "data-slot": "collapsible-trigger",
541
+ className: cn("touch-manipulation", className),
542
+ ...props
543
+ });
544
+ };
545
+ const CollapsibleContent = ({ ...props }) => /* @__PURE__ */ jsx(CollapsiblePrimitive.CollapsibleContent, {
546
+ "data-slot": "collapsible-content",
547
+ ...props
548
+ });
549
+
550
+ //#endregion
551
+ //#region src/components/ui/dialog/dialog.tsx
552
+ const Dialog = Root$2;
553
+ const DialogTrigger = Trigger$2;
554
+ const DialogPortal = Portal$1;
555
+ const DialogClose = Close;
556
+ const DialogOverlay = ({ className, ...props }) => /* @__PURE__ */ jsx(Overlay$1, {
557
+ "data-slot": "dialog-overlay",
558
+ className: cn("data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-[var(--overlay-md)] backdrop-blur-[2px] will-change-[opacity] duration-200 data-[state=open]:ease-out data-[state=closed]:ease-in motion-reduce:animate-none", className),
559
+ ...props
560
+ });
561
+ const DialogContent = ({ className, children, ...props }) => /* @__PURE__ */ jsxs(DialogPortal, {
562
+ "data-slot": "dialog-portal",
563
+ children: [/* @__PURE__ */ jsx(DialogOverlay, {}), /* @__PURE__ */ jsx(Content$2, {
564
+ "data-slot": "dialog-content",
565
+ className: cn("bg-card overflow-hidden 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-98 data-[state=open]:zoom-in-95 fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] rounded-[16px] border-0 shadow-none duration-200 data-[state=open]:ease-out data-[state=closed]:ease-in outline-none sm:max-w-md will-change-[opacity,transform] motion-reduce:animate-none", className),
566
+ ...props,
567
+ children
568
+ })]
569
+ });
570
+ const DialogHeader = ({ className, showCloseButton = true, children, ...props }) => /* @__PURE__ */ jsxs("div", {
571
+ "data-slot": "dialog-header",
572
+ className: cn("relative flex flex-col gap-1.5 px-5 pt-4 pb-4 border-b bg-card sm:text-left", className),
573
+ ...props,
574
+ children: [children, showCloseButton && /* @__PURE__ */ jsxs(Close, {
575
+ "data-slot": "dialog-close",
576
+ className: "absolute top-3 right-3 inline-flex h-7 w-7 items-center justify-center rounded-md text-muted-foreground opacity-70 transition-[opacity,background-color] duration-150 ease hover:opacity-100 hover:bg-accent focus-visible:ring-2 focus-visible:ring-ring/50 focus:outline-hidden cursor-pointer touch-manipulation before:absolute before:-inset-[6px] before:content-[\"\"]",
577
+ children: [/* @__PURE__ */ jsx(HugeiconsIcon, {
578
+ icon: Cancel01Icon,
579
+ size: 14
580
+ }), /* @__PURE__ */ jsx("span", {
581
+ className: "sr-only",
582
+ children: "Close"
583
+ })]
584
+ })]
585
+ });
586
+ const DialogBody = ({ className, ...props }) => /* @__PURE__ */ jsx("div", {
587
+ "data-slot": "dialog-body",
588
+ className: cn("px-5 py-5 bg-card", className),
589
+ ...props
590
+ });
591
+ const DialogFooter = ({ className, showCloseButton = false, children, ...props }) => /* @__PURE__ */ jsxs("div", {
592
+ "data-slot": "dialog-footer",
593
+ className: cn("grid grid-cols-2 gap-2 px-5 py-4 bg-muted", className),
594
+ ...props,
595
+ children: [children, showCloseButton && /* @__PURE__ */ jsx(Close, {
596
+ asChild: true,
597
+ children: /* @__PURE__ */ jsx(Button, {
598
+ variant: "outline",
599
+ children: "Close"
600
+ })
601
+ })]
602
+ });
603
+ const DialogTitle = ({ className, ...props }) => /* @__PURE__ */ jsx(Title$1, {
604
+ "data-slot": "dialog-title",
605
+ className: cn("text-lg leading-none font-semibold text-balance", className),
606
+ ...props
607
+ });
608
+ const DialogDescription = ({ className, ...props }) => /* @__PURE__ */ jsx(Description$1, {
609
+ "data-slot": "dialog-description",
610
+ className: cn("text-muted-foreground text-sm text-pretty", className),
611
+ ...props
612
+ });
613
+
614
+ //#endregion
615
+ //#region src/components/icons/animated-icon/animated-icon.tsx
616
+ const AnimatedIcon = forwardRef(({ children, className, onMouseEnter, onMouseLeave, size = 28, ...props }, ref) => {
617
+ const controls = useAnimation();
618
+ const isControlledRef = useRef(false);
619
+ useImperativeHandle(ref, () => {
620
+ isControlledRef.current = true;
621
+ return {
622
+ startAnimation: () => controls.start("animate"),
623
+ stopAnimation: () => controls.start("normal")
624
+ };
625
+ });
626
+ const handleMouseEnter = useCallback((e) => {
627
+ if (isControlledRef.current) onMouseEnter?.(e);
628
+ else controls.start("animate").catch(() => void 0);
629
+ }, [controls, onMouseEnter]);
630
+ const handleMouseLeave = useCallback((e) => {
631
+ if (isControlledRef.current) onMouseLeave?.(e);
632
+ else controls.start("normal").catch(() => void 0);
633
+ }, [controls, onMouseLeave]);
634
+ return /* @__PURE__ */ jsx("div", {
635
+ "aria-hidden": "true",
636
+ className: cn("inline-flex items-center justify-center", className),
637
+ onMouseEnter: handleMouseEnter,
638
+ onMouseLeave: handleMouseLeave,
639
+ ...props,
640
+ children: children(controls, size)
641
+ });
642
+ });
643
+ AnimatedIcon.displayName = "AnimatedIcon";
644
+
645
+ //#endregion
646
+ //#region src/components/icons/search/search.tsx
647
+ const SearchIcon = forwardRef((props, ref) => /* @__PURE__ */ jsx(AnimatedIcon, {
648
+ ref,
649
+ ...props,
650
+ children: (controls, size) => /* @__PURE__ */ jsxs(motion.svg, {
651
+ animate: controls,
652
+ fill: "none",
653
+ height: size,
654
+ stroke: "currentColor",
655
+ strokeLinecap: "round",
656
+ strokeLinejoin: "round",
657
+ strokeWidth: "2",
658
+ transition: {
659
+ bounce: .3,
660
+ duration: 1
661
+ },
662
+ variants: {
663
+ animate: {
664
+ x: [
665
+ 0,
666
+ 0,
667
+ -3,
668
+ 0
669
+ ],
670
+ y: [
671
+ 0,
672
+ -4,
673
+ 0,
674
+ 0
675
+ ]
676
+ },
677
+ normal: {
678
+ x: 0,
679
+ y: 0
680
+ }
681
+ },
682
+ viewBox: "0 0 24 24",
683
+ width: size,
684
+ xmlns: "http://www.w3.org/2000/svg",
685
+ children: [/* @__PURE__ */ jsx("circle", {
686
+ cx: "11",
687
+ cy: "11",
688
+ r: "8"
689
+ }), /* @__PURE__ */ jsx("path", { d: "m21 21-4.3-4.3" })]
690
+ })
691
+ }));
692
+ SearchIcon.displayName = "SearchIcon";
693
+
694
+ //#endregion
695
+ //#region src/components/ui/command/command.tsx
696
+ const Command = ({ className, ...props }) => /* @__PURE__ */ jsx(Command$1, {
697
+ "data-slot": "command",
698
+ className: cn("bg-popover text-popover-foreground flex h-full w-full flex-col overflow-hidden rounded-md", className),
699
+ ...props
700
+ });
701
+ const CommandDialog = ({ title = "Command Palette", description = "Search for a command to run...", children, className, ...props }) => /* @__PURE__ */ jsxs(Dialog, {
702
+ ...props,
703
+ children: [/* @__PURE__ */ jsxs(DialogHeader, {
704
+ className: "sr-only",
705
+ children: [/* @__PURE__ */ jsx(DialogTitle, { children: title }), /* @__PURE__ */ jsx(DialogDescription, { children: description })]
706
+ }), /* @__PURE__ */ jsx(DialogContent, {
707
+ className: cn("overflow-hidden p-0", className),
708
+ children: /* @__PURE__ */ jsx(Command, {
709
+ className: "[&_[cmdk-group-heading]]:text-muted-foreground **:data-[slot=command-input-wrapper]:h-12 [&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:font-medium [&_[cmdk-group]]:px-2 [&_[cmdk-group]:not([hidden])_~[cmdk-group]]:pt-0 [&_[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",
710
+ children
711
+ })
712
+ })]
713
+ });
714
+ const CommandInput = ({ className, ...props }) => /* @__PURE__ */ jsxs("div", {
715
+ "data-slot": "command-input-wrapper",
716
+ className: "flex h-9 items-center gap-2 border-b px-3",
717
+ children: [/* @__PURE__ */ jsx(SearchIcon, { className: "size-4 shrink-0 opacity-50" }), /* @__PURE__ */ jsx(Command$1.Input, {
718
+ "data-slot": "command-input",
719
+ className: cn("placeholder:text-muted-foreground flex h-10 w-full rounded-md bg-transparent py-3 text-sm outline-hidden disabled:cursor-not-allowed disabled:opacity-50", className),
720
+ ...props
721
+ })]
722
+ });
723
+ const CommandList = ({ className, ...props }) => /* @__PURE__ */ jsx(Command$1.List, {
724
+ "data-slot": "command-list",
725
+ className: cn("max-h-[300px] scroll-py-1 overflow-x-hidden overflow-y-auto", className),
726
+ ...props
727
+ });
728
+ const CommandEmpty = ({ ...props }) => /* @__PURE__ */ jsx(Command$1.Empty, {
729
+ "data-slot": "command-empty",
730
+ className: "py-6 text-center text-sm",
731
+ ...props
732
+ });
733
+ const CommandGroup = ({ className, ...props }) => /* @__PURE__ */ jsx(Command$1.Group, {
734
+ "data-slot": "command-group",
735
+ className: cn("text-foreground [&_[cmdk-group-heading]]:text-muted-foreground overflow-hidden p-1 [&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:py-1.5 [&_[cmdk-group-heading]]:text-xs [&_[cmdk-group-heading]]:font-medium", className),
736
+ ...props
737
+ });
738
+ const CommandSeparator = ({ className, ...props }) => /* @__PURE__ */ jsx(Command$1.Separator, {
739
+ "data-slot": "command-separator",
740
+ className: cn("bg-border -mx-1 h-px", className),
741
+ ...props
742
+ });
743
+ const CommandItem = ({ className, ...props }) => /* @__PURE__ */ jsx(Command$1.Item, {
744
+ "data-slot": "command-item",
745
+ className: cn("data-[selected=true]:bg-accent data-[selected=true]:text-accent-foreground [&_svg:not([class*='text-'])]:text-muted-foreground relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-[disabled=true]:pointer-events-none data-[disabled=true]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4", className),
746
+ ...props
747
+ });
748
+ const CommandShortcut = ({ className, ...props }) => /* @__PURE__ */ jsx("span", {
749
+ "data-slot": "command-shortcut",
750
+ className: cn("text-muted-foreground ml-auto text-xs tracking-widest", className),
751
+ ...props
752
+ });
753
+
754
+ //#endregion
755
+ //#region src/components/ui/dropdown-menu/dropdown-menu.tsx
756
+ const DropdownMenu = Root$3;
757
+ const DropdownMenuTrigger = Trigger$3;
758
+ const DropdownMenuGroup = Group;
759
+ const DropdownMenuSub = Sub;
760
+ const DropdownMenuContent = forwardRef(({ className, sideOffset = 4, ...props }, ref) => /* @__PURE__ */ jsx(Portal$2, { children: /* @__PURE__ */ jsx(Content$3, {
761
+ ref,
762
+ sideOffset,
763
+ className: cn("z-50 min-w-32 overflow-hidden rounded-md bg-popover p-1 text-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", className),
764
+ ...props
765
+ }) }));
766
+ DropdownMenuContent.displayName = Content$3.displayName;
767
+ const DropdownMenuItem = forwardRef(({ className, inset, ...props }, ref) => /* @__PURE__ */ jsx(Item$1, {
768
+ ref,
769
+ className: cn("relative flex cursor-default select-none items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*=\"size-\"])]:size-4", inset && "pl-8", className),
770
+ ...props
771
+ }));
772
+ DropdownMenuItem.displayName = Item$1.displayName;
773
+ const DropdownMenuCheckboxItem = forwardRef(({ className, children, checked, ...props }, ref) => /* @__PURE__ */ jsxs(CheckboxItem, {
774
+ ref,
775
+ className: cn("relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-disabled:pointer-events-none data-disabled:opacity-50", className),
776
+ checked,
777
+ ...props,
778
+ children: [/* @__PURE__ */ jsx("span", {
779
+ className: "absolute left-2 flex size-3.5 items-center justify-center",
780
+ children: /* @__PURE__ */ jsx(ItemIndicator, { children: /* @__PURE__ */ jsx(CheckIcon$1, { className: "size-4" }) })
781
+ }), children]
782
+ }));
783
+ DropdownMenuCheckboxItem.displayName = CheckboxItem.displayName;
784
+ const DropdownMenuRadioGroup = RadioGroup$1;
785
+ const DropdownMenuRadioItem = forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxs(RadioItem, {
786
+ ref,
787
+ className: cn("relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-disabled:pointer-events-none data-disabled:opacity-50", className),
788
+ ...props,
789
+ children: [/* @__PURE__ */ jsx("span", {
790
+ className: "absolute left-2 flex size-3.5 items-center justify-center",
791
+ children: /* @__PURE__ */ jsx(ItemIndicator, { children: /* @__PURE__ */ jsx(CircleIcon, { className: "size-2 fill-current" }) })
792
+ }), children]
793
+ }));
794
+ DropdownMenuRadioItem.displayName = RadioItem.displayName;
795
+ const DropdownMenuLabel = forwardRef(({ className, inset, ...props }, ref) => /* @__PURE__ */ jsx(Label$1, {
796
+ ref,
797
+ className: cn("px-2 py-1.5 text-sm font-medium", inset && "pl-8", className),
798
+ ...props
799
+ }));
800
+ DropdownMenuLabel.displayName = Label$1.displayName;
801
+ const DropdownMenuSeparator = forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(Separator$1, {
802
+ ref,
803
+ className: cn("-mx-1 my-1 h-px bg-border", className),
804
+ ...props
805
+ }));
806
+ DropdownMenuSeparator.displayName = Separator$1.displayName;
807
+ const DropdownMenuShortcut = ({ className, ...props }) => /* @__PURE__ */ jsx("span", {
808
+ className: cn("ml-auto text-xs tracking-widest text-muted-foreground", className),
809
+ ...props
810
+ });
811
+ DropdownMenuShortcut.displayName = "DropdownMenuShortcut";
812
+ const DropdownMenuSubTrigger = forwardRef(({ className, inset, children, ...props }, ref) => /* @__PURE__ */ jsxs(SubTrigger, {
813
+ ref,
814
+ className: cn("flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none focus:bg-accent data-[state=open]:bg-accent", inset && "pl-8", className),
815
+ ...props,
816
+ children: [children, /* @__PURE__ */ jsx(ChevronRightIcon$1, { className: "ml-auto size-4" })]
817
+ }));
818
+ DropdownMenuSubTrigger.displayName = SubTrigger.displayName;
819
+ const DropdownMenuSubContent = forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(SubContent, {
820
+ ref,
821
+ className: cn("z-50 min-w-32 overflow-hidden rounded-md bg-popover p-1 text-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", className),
822
+ ...props
823
+ }));
824
+ DropdownMenuSubContent.displayName = SubContent.displayName;
825
+
826
+ //#endregion
827
+ //#region src/components/icon-config/icon-config.tsx
828
+ const IconConfigContext = createContext({
829
+ setStrokeWidth: () => {},
830
+ strokeWidth: void 0
831
+ });
832
+ const IconConfigProvider = ({ children }) => {
833
+ const [strokeWidth, setStrokeWidth] = useState(() => {
834
+ if (globalThis.window === void 0) return void 0;
835
+ const stored = localStorage.getItem("icon-stroke-width");
836
+ if (stored === "default") return void 0;
837
+ const n = Number.parseFloat(stored ?? "");
838
+ return Number.isNaN(n) ? void 0 : n;
839
+ });
840
+ useEffect(() => {
841
+ document.documentElement.style.setProperty("--icon-stroke-width", String(strokeWidth ?? 1.75));
842
+ }, [strokeWidth]);
843
+ const applyStrokeWidth = useCallback((v) => {
844
+ setStrokeWidth(v);
845
+ localStorage.setItem("icon-stroke-width", v === void 0 ? "default" : String(v));
846
+ }, []);
847
+ const value = useMemo(() => ({
848
+ setStrokeWidth: applyStrokeWidth,
849
+ strokeWidth
850
+ }), [applyStrokeWidth, strokeWidth]);
851
+ return /* @__PURE__ */ jsx(IconConfigContext.Provider, {
852
+ value,
853
+ children
854
+ });
855
+ };
856
+ const useIconConfig = () => useContext(IconConfigContext);
857
+
858
+ //#endregion
859
+ //#region src/components/ui/icon/icon.tsx
860
+ /** Drop-in replacement for HugeiconsIcon — reads global strokeWidth from IconConfigContext */
861
+ const Icon = (props) => {
862
+ const { strokeWidth } = useIconConfig();
863
+ return /* @__PURE__ */ jsx(HugeiconsIcon, {
864
+ strokeWidth: strokeWidth ?? 1.75,
865
+ ...props
866
+ });
867
+ };
868
+
869
+ //#endregion
870
+ //#region src/components/ui/kbd/kbd.tsx
871
+ const Kbd = ({ className, ...props }) => {
872
+ return /* @__PURE__ */ jsx("kbd", {
873
+ "data-slot": "kbd",
874
+ className: cn("bg-muted text-muted-foreground pointer-events-none inline-flex h-5 w-fit min-w-5 items-center justify-center gap-1 rounded-sm px-1 font-sans text-xs font-medium select-none", "[&_svg:not([class*='size-'])]:size-3", "[[data-slot=tooltip-content]_&]:bg-background/20 [[data-slot=tooltip-content]_&]:text-background dark:[[data-slot=tooltip-content]_&]:bg-background/10", className),
875
+ ...props
876
+ });
877
+ };
878
+
879
+ //#endregion
880
+ //#region src/components/ui/popover/popover.tsx
881
+ const Popover = ({ ...props }) => /* @__PURE__ */ jsx(PopoverPrimitive.Root, {
882
+ "data-slot": "popover",
883
+ ...props
884
+ });
885
+ const PopoverTrigger = ({ ...props }) => /* @__PURE__ */ jsx(PopoverPrimitive.Trigger, {
886
+ "data-slot": "popover-trigger",
887
+ ...props
888
+ });
889
+ const PopoverContent = ({ className, align = "center", sideOffset = 4, ...props }) => {
890
+ return /* @__PURE__ */ jsx(PopoverPrimitive.Portal, { children: /* @__PURE__ */ jsx(PopoverPrimitive.Content, {
891
+ "data-slot": "popover-content",
892
+ align,
893
+ sideOffset,
894
+ className: cn("bg-popover text-popover-foreground 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-98 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 z-50 w-72 origin-(--radix-popover-content-transform-origin) rounded-xl border-0 p-4 shadow-[var(--shadow-elevated)] outline-hidden will-change-[opacity,transform] motion-reduce:animate-none", className),
895
+ ...props
896
+ }) });
897
+ };
898
+ const PopoverAnchor = ({ ...props }) => /* @__PURE__ */ jsx(PopoverPrimitive.Anchor, {
899
+ "data-slot": "popover-anchor",
900
+ ...props
901
+ });
902
+
903
+ //#endregion
904
+ //#region src/components/ui/progress/progress.tsx
905
+ const progressVariants = cva("h-full w-full flex-1 transition-transform duration-500 ease-out motion-reduce:transition-none", {
906
+ defaultVariants: { variant: "default" },
907
+ variants: { variant: {
908
+ brand: "bg-[var(--brand-default)]",
909
+ danger: "bg-[var(--danger-default)]",
910
+ default: "bg-primary",
911
+ process: "bg-[var(--process-default)]",
912
+ success: "bg-[var(--success-default)]",
913
+ warning: "bg-[var(--warning-default)]"
914
+ } }
915
+ });
916
+ const Progress = ({ className, indeterminate = false, value, variant, ...props }) => /* @__PURE__ */ jsxs("div", {
917
+ "data-slot": "progress",
918
+ className: cn("bg-primary/20 relative h-2 w-full overflow-hidden rounded-full", className),
919
+ ...props,
920
+ children: [/* @__PURE__ */ jsx("progress", {
921
+ "aria-label": "Progress",
922
+ className: "sr-only",
923
+ max: 100,
924
+ value: indeterminate ? void 0 : value ?? 0
925
+ }), /* @__PURE__ */ jsx("div", {
926
+ "data-slot": "progress-indicator",
927
+ className: cn(progressVariants({ variant }), indeterminate && "animate-progress-indeterminate motion-reduce:animate-none"),
928
+ style: indeterminate ? void 0 : { transform: `translateX(-${100 - (value ?? 0)}%)` }
929
+ })]
930
+ });
931
+
932
+ //#endregion
933
+ //#region src/components/ui/radio-group/radio-group.tsx
934
+ const RadioGroup = ({ className, ...props }) => {
935
+ return /* @__PURE__ */ jsx(RadioGroupPrimitive.Root, {
936
+ "data-slot": "radio-group",
937
+ className: cn("grid gap-3", className),
938
+ ...props
939
+ });
940
+ };
941
+ const RadioGroupItem = ({ className, ...props }) => {
942
+ return /* @__PURE__ */ jsx(RadioGroupPrimitive.Item, {
943
+ "data-slot": "radio-group-item",
944
+ className: cn("text-[var(--action)] dark:bg-input/30 relative aspect-square size-4 shrink-0 touch-manipulation rounded-full border border-[rgba(31,41,55,0.30)] dark:border-[rgba(255,255,255,0.20)] data-[state=checked]:border-[var(--action)] shadow-[0_1px_2px_rgba(0,0,0,0.06),0_0_1px_rgba(31,41,55,0.08)] dark:shadow-[0_1px_2px_rgba(0,0,0,0.20),0_0_1px_rgba(0,0,0,0.15)] transition-[color,box-shadow,border-color] duration-100 ease-out outline-none focus-visible:ring-[3px] focus-visible:ring-ring/50 aria-invalid:border-[var(--destructive)] disabled:cursor-not-allowed disabled:opacity-50 cursor-pointer before:absolute before:-inset-[12px] before:content-['']", className),
945
+ ...props,
946
+ children: /* @__PURE__ */ jsx(RadioGroupPrimitive.Indicator, {
947
+ "data-slot": "radio-group-indicator",
948
+ className: "group/indicator relative flex items-center justify-center",
949
+ forceMount: true,
950
+ children: /* @__PURE__ */ jsx("span", { className: "bg-[var(--action)] absolute top-1/2 left-1/2 size-2 rounded-full -translate-x-1/2 -translate-y-1/2 transition-[opacity,transform] duration-150 ease-out group-data-[state=unchecked]/indicator:scale-0 group-data-[state=unchecked]/indicator:opacity-0" })
951
+ })
952
+ });
953
+ };
954
+
955
+ //#endregion
956
+ //#region src/components/ui/scroll-area/scroll-area.tsx
957
+ const ScrollArea = ({ className, children, ...props }) => {
958
+ return /* @__PURE__ */ jsxs(ScrollAreaPrimitive.Root, {
959
+ "data-slot": "scroll-area",
960
+ className: cn("relative", className),
961
+ ...props,
962
+ children: [
963
+ /* @__PURE__ */ jsx(ScrollAreaPrimitive.Viewport, {
964
+ "data-slot": "scroll-area-viewport",
965
+ className: "focus-visible:ring-ring/50 size-full rounded-[inherit] transition-[color,box-shadow] outline-none focus-visible:ring-[3px] focus-visible:outline-1",
966
+ children
967
+ }),
968
+ /* @__PURE__ */ jsx(ScrollBar, {}),
969
+ /* @__PURE__ */ jsx(ScrollAreaPrimitive.Corner, {})
970
+ ]
971
+ });
972
+ };
973
+ const ScrollBar = ({ className, orientation = "vertical", ...props }) => {
974
+ return /* @__PURE__ */ jsx(ScrollAreaPrimitive.ScrollAreaScrollbar, {
975
+ "data-slot": "scroll-area-scrollbar",
976
+ orientation,
977
+ className: cn("flex touch-none touch-manipulation p-px transition-[background-color] select-none", orientation === "vertical" && "h-full w-2.5 border-l border-l-transparent", orientation === "horizontal" && "h-2.5 flex-col border-t border-t-transparent", className),
978
+ ...props,
979
+ children: /* @__PURE__ */ jsx(ScrollAreaPrimitive.ScrollAreaThumb, {
980
+ "data-slot": "scroll-area-thumb",
981
+ className: "bg-border relative flex-1 rounded-full"
982
+ })
983
+ });
984
+ };
985
+
986
+ //#endregion
987
+ //#region src/components/ui/search-input/search-input.tsx
988
+ const SearchInput = ({ className, placeholder = "Search...", shortcut = "⌘K", onClick, ...props }) => {
989
+ return /* @__PURE__ */ jsxs("button", {
990
+ type: "button",
991
+ "data-slot": "search-input",
992
+ className: cn("h-8 min-h-11 w-full touch-manipulation rounded-md border border-border bg-background dark:bg-input/30 md:min-h-0", "hover:border-foreground/20", "transition-[color,box-shadow,border-color] duration-100 ease-out", "outline-none focus-visible:ring-[3px] focus-visible:ring-ring/50", "flex items-center gap-2 px-3", "text-sm text-muted-foreground/60 cursor-pointer", className),
993
+ onClick,
994
+ ...props,
995
+ children: [
996
+ /* @__PURE__ */ jsx(HugeiconsIcon, {
997
+ icon: Search01Icon,
998
+ size: 14,
999
+ className: "shrink-0 text-muted-foreground"
1000
+ }),
1001
+ /* @__PURE__ */ jsx("span", {
1002
+ className: "flex-1 text-left",
1003
+ children: placeholder
1004
+ }),
1005
+ shortcut && /* @__PURE__ */ jsx(Kbd, { children: shortcut })
1006
+ ]
1007
+ });
1008
+ };
1009
+
1010
+ //#endregion
1011
+ //#region src/components/ui/select/select.tsx
1012
+ const Select = ({ ...props }) => /* @__PURE__ */ jsx(Root$4, {
1013
+ "data-slot": "select",
1014
+ ...props
1015
+ });
1016
+ const SelectGroup = ({ ...props }) => /* @__PURE__ */ jsx(Group$1, {
1017
+ "data-slot": "select-group",
1018
+ ...props
1019
+ });
1020
+ const SelectValue = ({ ...props }) => /* @__PURE__ */ jsx(Value, {
1021
+ "data-slot": "select-value",
1022
+ ...props
1023
+ });
1024
+ const SelectTrigger = ({ className, size = "default", children, ...props }) => /* @__PURE__ */ jsxs(Trigger$4, {
1025
+ "data-slot": "select-trigger",
1026
+ "data-size": size,
1027
+ className: cn("data-[placeholder]:text-muted-foreground/60 [&_svg:not([class*='text-'])]:text-muted-foreground dark:bg-input/30 dark:hover:bg-input/50 flex w-fit touch-manipulation items-center justify-between gap-1.5 rounded-md border-0 bg-transparent px-3 py-2 text-[13px] whitespace-nowrap shadow-[var(--shadow-input)] hover:shadow-[var(--shadow-input-hover)] transition-[color,box-shadow] duration-100 ease-out outline-none focus-visible:shadow-[0_0_0_1px_var(--ring),0_0_0_4px_rgba(0,114,239,0.15)] aria-invalid:shadow-[0_0_0_1px_var(--destructive)] disabled:cursor-not-allowed disabled:opacity-50 data-[size=default]:h-8 data-[size=sm]:h-7 data-[size=sm]:text-[13px] data-[size=sm]:px-2.5 *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-2 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4", className),
1028
+ ...props,
1029
+ children: [children, /* @__PURE__ */ jsx(Icon$1, {
1030
+ asChild: true,
1031
+ children: /* @__PURE__ */ jsx(HugeiconsIcon, {
1032
+ icon: ArrowDown01Icon,
1033
+ size: 16,
1034
+ className: "opacity-50"
1035
+ })
1036
+ })]
1037
+ });
1038
+ const SelectContent = ({ className, children, position = "popper", align = "start", ...props }) => /* @__PURE__ */ jsx(Portal$3, { children: /* @__PURE__ */ jsxs(Content$4, {
1039
+ "data-slot": "select-content",
1040
+ className: cn("bg-popover text-popover-foreground will-change-[opacity,transform] 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 relative z-50 max-h-(--radix-select-content-available-height) min-w-[8rem] origin-(--radix-select-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-xl border-0 shadow-[var(--shadow-elevated)]", 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", className),
1041
+ position,
1042
+ align,
1043
+ ...props,
1044
+ children: [
1045
+ /* @__PURE__ */ jsx(SelectScrollUpButton, {}),
1046
+ /* @__PURE__ */ jsx(Viewport, {
1047
+ className: cn("p-1", position === "popper" && "h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)] scroll-my-1"),
1048
+ children
1049
+ }),
1050
+ /* @__PURE__ */ jsx(SelectScrollDownButton, {})
1051
+ ]
1052
+ }) });
1053
+ const SelectLabel = ({ className, ...props }) => /* @__PURE__ */ jsx(Label$2, {
1054
+ "data-slot": "select-label",
1055
+ className: cn("text-muted-foreground px-2 py-1.5 text-xs", className),
1056
+ ...props
1057
+ });
1058
+ const SelectItem = ({ className, children, ...props }) => /* @__PURE__ */ jsxs(Item$2, {
1059
+ "data-slot": "select-item",
1060
+ className: cn("focus:bg-accent focus:text-accent-foreground [&_svg:not([class*='text-'])]:text-muted-foreground relative flex w-full cursor-default items-center gap-2 rounded-sm py-1.5 pr-8 pl-2 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2", className),
1061
+ ...props,
1062
+ children: [/* @__PURE__ */ jsx("span", {
1063
+ "data-slot": "select-item-indicator",
1064
+ className: "absolute right-2 flex size-3.5 items-center justify-center",
1065
+ children: /* @__PURE__ */ jsx(ItemIndicator$1, { children: /* @__PURE__ */ jsx(HugeiconsIcon, {
1066
+ icon: Tick01Icon,
1067
+ size: 16
1068
+ }) })
1069
+ }), /* @__PURE__ */ jsx(ItemText, { children })]
1070
+ });
1071
+ const SelectSeparator = ({ className, ...props }) => /* @__PURE__ */ jsx(Separator$2, {
1072
+ "data-slot": "select-separator",
1073
+ className: cn("bg-border pointer-events-none -mx-1 my-1 h-px", className),
1074
+ ...props
1075
+ });
1076
+ const SelectScrollUpButton = ({ className, ...props }) => /* @__PURE__ */ jsx(ScrollUpButton, {
1077
+ "data-slot": "select-scroll-up-button",
1078
+ className: cn("flex cursor-default items-center justify-center py-1", className),
1079
+ ...props,
1080
+ children: /* @__PURE__ */ jsx(HugeiconsIcon, {
1081
+ icon: ArrowUp01Icon,
1082
+ size: 16
1083
+ })
1084
+ });
1085
+ const SelectScrollDownButton = ({ className, ...props }) => /* @__PURE__ */ jsx(ScrollDownButton, {
1086
+ "data-slot": "select-scroll-down-button",
1087
+ className: cn("flex cursor-default items-center justify-center py-1", className),
1088
+ ...props,
1089
+ children: /* @__PURE__ */ jsx(HugeiconsIcon, {
1090
+ icon: ArrowDown01Icon,
1091
+ size: 16
1092
+ })
1093
+ });
1094
+
1095
+ //#endregion
1096
+ //#region src/components/ui/selectable-card/selectable-card.tsx
1097
+ const SelectableCard = ({ badge, className, description, icon, iconSize = 20, label, selected, ...props }) => /* @__PURE__ */ jsxs("button", {
1098
+ "data-slot": "selectable-card",
1099
+ "data-selected": selected,
1100
+ className: cn("group/card relative flex flex-col items-start gap-2.5 p-4 rounded-xl text-left transition-[box-shadow,background-color,scale] duration-150 touch-manipulation active:scale-[0.96] cursor-pointer w-full outline-none focus-visible:shadow-[0_0_0_1.5px_var(--action),0_0_0_4px_oklch(from_var(--action)_l_c_h_/_0.25)]", selected ? "bg-[var(--action)]/5 shadow-[0_0_0_1.5px_var(--action)]" : "shadow-[0_0_0_1px_oklch(0.278_0.03_256.85_/_0.12)] hover:shadow-[0_0_0_1px_oklch(0.278_0.03_256.85_/_0.20)]", className),
1101
+ ...props,
1102
+ children: [
1103
+ icon && /* @__PURE__ */ jsx(HugeiconsIcon, {
1104
+ icon,
1105
+ size: iconSize,
1106
+ className: "text-[var(--action)]"
1107
+ }),
1108
+ /* @__PURE__ */ jsxs("div", {
1109
+ className: "w-full pr-7",
1110
+ children: [/* @__PURE__ */ jsxs("div", {
1111
+ className: "flex items-center gap-2",
1112
+ children: [/* @__PURE__ */ jsx("p", {
1113
+ className: "text-sm font-medium text-balance",
1114
+ children: label
1115
+ }), badge && /* @__PURE__ */ jsx("span", {
1116
+ className: "shrink-0",
1117
+ children: badge
1118
+ })]
1119
+ }), /* @__PURE__ */ jsx("p", {
1120
+ className: "text-xs text-muted-foreground mt-0.5 text-pretty",
1121
+ children: description
1122
+ })]
1123
+ }),
1124
+ /* @__PURE__ */ jsx("div", {
1125
+ className: "absolute top-4 right-4",
1126
+ children: /* @__PURE__ */ jsx("div", {
1127
+ className: cn("relative size-4 shrink-0 rounded-[4px] transition-[color,box-shadow,background-color] duration-200 ease", selected ? "bg-[var(--action)] text-white shadow-[0_0_0_1px_var(--action),0px_1px_1px_0px_oklch(1_0_0_/_0.07)_inset,0px_2px_3px_0px_oklch(0.278_0.03_256.85_/_0.20),0px_1px_1px_0px_oklch(0_0_0_/_0.24)]" : "shadow-[0_0_0_1px_oklch(0.278_0.03_256.85_/_0.20),0_1px_2px_0_oklch(0_0_0_/_0.06),0_0_1px_0_oklch(0_0_0_/_0.02)] group-hover/card:shadow-[0_0_0_1px_oklch(0.278_0.03_256.85_/_0.30),0_1px_2px_0_oklch(0_0_0_/_0.06),0_0_1px_0_oklch(0_0_0_/_0.02)]"),
1128
+ children: /* @__PURE__ */ jsx(CheckIcon, {
1129
+ size: 14,
1130
+ className: cn("absolute inset-0 m-auto text-current transition-[opacity,transform,filter] duration-200", selected ? "opacity-100 scale-100 blur-none" : "opacity-0 scale-[0.25] blur-[4px]")
1131
+ })
1132
+ })
1133
+ })
1134
+ ]
1135
+ });
1136
+
1137
+ //#endregion
1138
+ //#region src/components/ui/separator/separator.tsx
1139
+ const Separator = forwardRef(({ className, orientation = "horizontal", decorative = true, ...props }, ref) => /* @__PURE__ */ jsx(Root$5, {
1140
+ ref,
1141
+ decorative,
1142
+ orientation,
1143
+ className: cn("bg-border shrink-0 data-[orientation=horizontal]:h-px data-[orientation=horizontal]:w-full data-[orientation=vertical]:h-full data-[orientation=vertical]:w-px", className),
1144
+ ...props
1145
+ }));
1146
+ Separator.displayName = Root$5.displayName;
1147
+
1148
+ //#endregion
1149
+ //#region src/components/ui/sheet/sheet.tsx
1150
+ const Sheet = ({ ...props }) => /* @__PURE__ */ jsx(SheetPrimitive.Root, {
1151
+ "data-slot": "sheet",
1152
+ ...props
1153
+ });
1154
+ const SheetTrigger = ({ ...props }) => /* @__PURE__ */ jsx(SheetPrimitive.Trigger, {
1155
+ "data-slot": "sheet-trigger",
1156
+ ...props
1157
+ });
1158
+ const SheetClose = ({ ...props }) => /* @__PURE__ */ jsx(SheetPrimitive.Close, {
1159
+ "data-slot": "sheet-close",
1160
+ ...props
1161
+ });
1162
+ const SheetPortal = ({ ...props }) => /* @__PURE__ */ jsx(SheetPrimitive.Portal, {
1163
+ "data-slot": "sheet-portal",
1164
+ ...props
1165
+ });
1166
+ const SheetOverlay = ({ className, ...props }) => {
1167
+ return /* @__PURE__ */ jsx(SheetPrimitive.Overlay, {
1168
+ "data-slot": "sheet-overlay",
1169
+ className: cn("data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-[var(--overlay-md)] will-change-[opacity] data-[state=closed]:duration-100 data-[state=open]:duration-150 [animation-timing-function:cubic-bezier(0.16,1,0.3,1)] motion-reduce:animate-none", className),
1170
+ ...props
1171
+ });
1172
+ };
1173
+ const SheetContent = ({ className, children, side = "right", showCloseButton = true, overlayClassName, ...props }) => {
1174
+ return /* @__PURE__ */ jsxs(SheetPortal, { children: [/* @__PURE__ */ jsx(SheetOverlay, { className: overlayClassName }), /* @__PURE__ */ jsxs(SheetPrimitive.Content, {
1175
+ "data-slot": "sheet-content",
1176
+ className: cn("bg-background data-[state=open]:animate-in data-[state=closed]:animate-out fixed z-50 flex flex-col gap-4 border-0 shadow-[var(--shadow-elevated)] [animation-timing-function:cubic-bezier(0.32,0.72,0,1)] data-[state=closed]:duration-150 data-[state=open]:duration-200 will-change-[opacity,transform] motion-reduce:animate-none", side === "right" && "data-[state=closed]:slide-out-to-right data-[state=open]:slide-in-from-right inset-y-0 right-0 h-full w-3/4 sm:max-w-sm rounded-l-xl rounded-r-md", side === "left" && "data-[state=closed]:slide-out-to-left data-[state=open]:slide-in-from-left inset-y-0 left-0 h-full w-3/4 sm:max-w-sm rounded-r-xl rounded-l-md", side === "top" && "data-[state=closed]:slide-out-to-top data-[state=open]:slide-in-from-top inset-x-0 top-0 h-auto rounded-b-md", side === "bottom" && "data-[state=closed]:slide-out-to-bottom data-[state=open]:slide-in-from-bottom inset-x-0 bottom-0 h-auto rounded-t-md", className),
1177
+ ...props,
1178
+ children: [children, showCloseButton && /* @__PURE__ */ jsxs(SheetPrimitive.Close, {
1179
+ className: "absolute top-3 right-3 inline-flex h-7 w-7 items-center justify-center rounded-md text-muted-foreground opacity-70 transition-[opacity,background-color] duration-150 ease hover:opacity-100 hover:bg-accent focus-visible:ring-2 focus-visible:ring-ring/50 focus:outline-hidden disabled:pointer-events-none cursor-pointer touch-manipulation before:absolute before:-inset-[6px] before:content-['']",
1180
+ children: [/* @__PURE__ */ jsx(HugeiconsIcon, {
1181
+ icon: Cancel01Icon,
1182
+ size: 14
1183
+ }), /* @__PURE__ */ jsx("span", {
1184
+ className: "sr-only",
1185
+ children: "Close"
1186
+ })]
1187
+ })]
1188
+ })] });
1189
+ };
1190
+ const SheetHeader = ({ className, ...props }) => {
1191
+ return /* @__PURE__ */ jsx("div", {
1192
+ "data-slot": "sheet-header",
1193
+ className: cn("flex flex-col gap-1.5 p-4", className),
1194
+ ...props
1195
+ });
1196
+ };
1197
+ const SheetFooter = ({ className, ...props }) => {
1198
+ return /* @__PURE__ */ jsx("div", {
1199
+ "data-slot": "sheet-footer",
1200
+ className: cn("mt-auto flex flex-col gap-2 p-4", className),
1201
+ ...props
1202
+ });
1203
+ };
1204
+ const SheetTitle = ({ className, ...props }) => {
1205
+ return /* @__PURE__ */ jsx(SheetPrimitive.Title, {
1206
+ "data-slot": "sheet-title",
1207
+ className: cn("text-foreground font-semibold", className),
1208
+ ...props
1209
+ });
1210
+ };
1211
+ const SheetDescription = ({ className, ...props }) => {
1212
+ return /* @__PURE__ */ jsx(SheetPrimitive.Description, {
1213
+ "data-slot": "sheet-description",
1214
+ className: cn("text-muted-foreground text-sm", className),
1215
+ ...props
1216
+ });
1217
+ };
1218
+
1219
+ //#endregion
1220
+ //#region src/components/ui/skeleton/skeleton.tsx
1221
+ const Skeleton = ({ className, ...props }) => {
1222
+ return /* @__PURE__ */ jsx("div", {
1223
+ "data-slot": "skeleton",
1224
+ className: cn("bg-accent animate-shimmer motion-reduce:animate-none rounded-md bg-[length:200%_100%] bg-gradient-to-r from-accent via-accent/50 to-accent", className),
1225
+ ...props
1226
+ });
1227
+ };
1228
+
1229
+ //#endregion
1230
+ //#region src/components/ui/sonner/sonner.tsx
1231
+ const Toaster = ({ ...props }) => {
1232
+ const { theme = "system" } = useTheme();
1233
+ return /* @__PURE__ */ jsx(Toaster$1, {
1234
+ theme,
1235
+ className: "toaster group",
1236
+ icons: {
1237
+ error: /* @__PURE__ */ jsx(HugeiconsIcon, {
1238
+ icon: Cancel01Icon,
1239
+ size: 16
1240
+ }),
1241
+ info: /* @__PURE__ */ jsx(HugeiconsIcon, {
1242
+ icon: InformationCircleIcon,
1243
+ size: 16
1244
+ }),
1245
+ loading: /* @__PURE__ */ jsxs("svg", {
1246
+ className: "size-4 animate-spin",
1247
+ viewBox: "0 0 24 24",
1248
+ fill: "none",
1249
+ children: [/* @__PURE__ */ jsx("circle", {
1250
+ className: "opacity-25",
1251
+ cx: "12",
1252
+ cy: "12",
1253
+ r: "10",
1254
+ stroke: "currentColor",
1255
+ strokeWidth: "4"
1256
+ }), /* @__PURE__ */ jsx("path", {
1257
+ className: "opacity-75",
1258
+ fill: "currentColor",
1259
+ d: "M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4z"
1260
+ })]
1261
+ }),
1262
+ success: /* @__PURE__ */ jsx(HugeiconsIcon, {
1263
+ icon: CheckmarkCircle02Icon,
1264
+ size: 16
1265
+ }),
1266
+ warning: /* @__PURE__ */ jsx(HugeiconsIcon, {
1267
+ icon: Alert01Icon,
1268
+ size: 16
1269
+ })
1270
+ },
1271
+ style: {
1272
+ "--border-radius": "var(--radius)",
1273
+ "--normal-bg": "var(--popover)",
1274
+ "--normal-border": "var(--border)",
1275
+ "--normal-text": "var(--popover-foreground)"
1276
+ },
1277
+ ...props
1278
+ });
1279
+ };
1280
+
1281
+ //#endregion
1282
+ //#region src/components/ui/spinner/spinner.tsx
1283
+ const Spinner = ({ className }) => /* @__PURE__ */ jsx("output", {
1284
+ "aria-label": "Loading",
1285
+ className: "inline-flex",
1286
+ children: /* @__PURE__ */ jsxs("svg", {
1287
+ viewBox: "0 0 24 24",
1288
+ fill: "none",
1289
+ xmlns: "http://www.w3.org/2000/svg",
1290
+ className: cn("size-4 animate-spin motion-reduce:animate-none", className),
1291
+ children: [/* @__PURE__ */ jsx("circle", {
1292
+ className: "opacity-25",
1293
+ cx: "12",
1294
+ cy: "12",
1295
+ r: "10",
1296
+ stroke: "currentColor",
1297
+ strokeWidth: "4"
1298
+ }), /* @__PURE__ */ jsx("path", {
1299
+ className: "opacity-75",
1300
+ fill: "currentColor",
1301
+ d: "M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4z"
1302
+ })]
1303
+ })
1304
+ });
1305
+
1306
+ //#endregion
1307
+ //#region src/components/ui/table/table.tsx
1308
+ const Table = ({ className, ...props }) => {
1309
+ return /* @__PURE__ */ jsx("div", {
1310
+ "data-slot": "table-container",
1311
+ className: "relative w-full overflow-x-auto",
1312
+ children: /* @__PURE__ */ jsx("table", {
1313
+ "data-slot": "table",
1314
+ className: cn("w-full caption-bottom text-sm", className),
1315
+ ...props
1316
+ })
1317
+ });
1318
+ };
1319
+ const TableHeader = ({ className, ...props }) => {
1320
+ return /* @__PURE__ */ jsx("thead", {
1321
+ "data-slot": "table-header",
1322
+ className: cn("[&_tr]:border-b [&_tr]:border-[var(--border-divider)] [&_tr]:hover:bg-transparent bg-[var(--bg-accented)]/50 sticky top-0 z-10", className),
1323
+ ...props
1324
+ });
1325
+ };
1326
+ const TableBody = ({ className, ...props }) => {
1327
+ return /* @__PURE__ */ jsx("tbody", {
1328
+ "data-slot": "table-body",
1329
+ className: cn("[&_tr:last-child]:border-0", className),
1330
+ ...props
1331
+ });
1332
+ };
1333
+ const TableFooter = ({ className, ...props }) => {
1334
+ return /* @__PURE__ */ jsx("tfoot", {
1335
+ "data-slot": "table-footer",
1336
+ className: cn("bg-muted/50 border-t font-medium [&>tr]:last:border-b-0", className),
1337
+ ...props
1338
+ });
1339
+ };
1340
+ const TableRow = ({ className, ...props }) => {
1341
+ return /* @__PURE__ */ jsx("tr", {
1342
+ "data-slot": "table-row",
1343
+ className: cn("hover:bg-[var(--overlay-hover)] data-[state=selected]:bg-[var(--overlay-selected)] border-b border-[var(--border-divider)] transition-[background-color] duration-100", className),
1344
+ ...props
1345
+ });
1346
+ };
1347
+ const TableHead = ({ className, ...props }) => {
1348
+ return /* @__PURE__ */ jsx("th", {
1349
+ "data-slot": "table-head",
1350
+ className: cn("text-muted-foreground h-10 px-3 text-left align-middle text-xs font-medium whitespace-nowrap [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]", className),
1351
+ ...props
1352
+ });
1353
+ };
1354
+ const TableCell = ({ className, ...props }) => {
1355
+ return /* @__PURE__ */ jsx("td", {
1356
+ "data-slot": "table-cell",
1357
+ className: cn("px-3 py-2.5 align-middle whitespace-nowrap tabular-nums [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]", className),
1358
+ ...props
1359
+ });
1360
+ };
1361
+ const TableCaption = ({ className, ...props }) => {
1362
+ return /* @__PURE__ */ jsx("caption", {
1363
+ "data-slot": "table-caption",
1364
+ className: cn("text-muted-foreground mt-4 text-sm", className),
1365
+ ...props
1366
+ });
1367
+ };
1368
+
1369
+ //#endregion
1370
+ //#region src/components/ui/tabs/tabs.tsx
1371
+ const Tabs = ({ className, orientation = "horizontal", ...props }) => {
1372
+ return /* @__PURE__ */ jsx(TabsPrimitive.Root, {
1373
+ "data-slot": "tabs",
1374
+ "data-orientation": orientation,
1375
+ orientation,
1376
+ className: cn("group/tabs flex gap-2 data-[orientation=horizontal]:flex-col", className),
1377
+ ...props
1378
+ });
1379
+ };
1380
+ const tabsListVariants = cva("rounded-lg p-[3px] group-data-[orientation=horizontal]/tabs:h-9 data-[variant=line]:rounded-none group/tabs-list text-muted-foreground inline-flex w-fit items-center justify-center group-data-[orientation=vertical]/tabs:h-fit group-data-[orientation=vertical]/tabs:flex-col", {
1381
+ defaultVariants: { variant: "default" },
1382
+ variants: { variant: {
1383
+ default: "bg-muted",
1384
+ line: "gap-1 bg-transparent"
1385
+ } }
1386
+ });
1387
+ const TabsList = ({ className, variant = "default", ...props }) => {
1388
+ return /* @__PURE__ */ jsx(TabsPrimitive.List, {
1389
+ "data-slot": "tabs-list",
1390
+ "data-variant": variant,
1391
+ className: cn(tabsListVariants({ variant }), className),
1392
+ ...props
1393
+ });
1394
+ };
1395
+ const TabsTrigger = ({ className, ...props }) => {
1396
+ return /* @__PURE__ */ jsx(TabsPrimitive.Trigger, {
1397
+ "data-slot": "tabs-trigger",
1398
+ className: cn("focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:outline-ring text-foreground/60 hover:text-foreground dark:text-muted-foreground dark:hover:text-foreground relative inline-flex h-[calc(100%-1px)] flex-1 items-center justify-center gap-1.5 rounded-md border border-transparent px-2 py-1 text-sm font-medium whitespace-nowrap touch-manipulation transition-[color,background-color,border-color,box-shadow,opacity] duration-150 group-data-[orientation=vertical]/tabs:w-full group-data-[orientation=vertical]/tabs:justify-start focus-visible:ring-[3px] focus-visible:outline-1 disabled:pointer-events-none disabled:opacity-50 group-data-[variant=default]/tabs-list:data-[state=active]:shadow-sm group-data-[variant=line]/tabs-list:data-[state=active]:shadow-none [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4", "group-data-[variant=line]/tabs-list:bg-transparent group-data-[variant=line]/tabs-list:data-[state=active]:bg-transparent dark:group-data-[variant=line]/tabs-list:data-[state=active]:border-transparent dark:group-data-[variant=line]/tabs-list:data-[state=active]:bg-transparent", "data-[state=active]:bg-background dark:data-[state=active]:text-foreground dark:data-[state=active]:border-input dark:data-[state=active]:bg-input/30 data-[state=active]:text-foreground", "after:bg-foreground after:absolute after:opacity-0 after:transition-[opacity] group-data-[orientation=horizontal]/tabs:after:inset-x-0 group-data-[orientation=horizontal]/tabs:after:bottom-[-5px] group-data-[orientation=horizontal]/tabs:after:h-0.5 group-data-[orientation=vertical]/tabs:after:inset-y-0 group-data-[orientation=vertical]/tabs:after:-right-1 group-data-[orientation=vertical]/tabs:after:w-0.5 group-data-[variant=line]/tabs-list:data-[state=active]:after:opacity-100", className),
1399
+ ...props
1400
+ });
1401
+ };
1402
+ const TabsContent = ({ className, ...props }) => {
1403
+ return /* @__PURE__ */ jsx(TabsPrimitive.Content, {
1404
+ "data-slot": "tabs-content",
1405
+ className: cn("flex-1 outline-none", className),
1406
+ ...props
1407
+ });
1408
+ };
1409
+
1410
+ //#endregion
1411
+ //#region src/components/ui/textarea/textarea.tsx
1412
+ const Textarea = ({ className, ...props }) => {
1413
+ return /* @__PURE__ */ jsx("textarea", {
1414
+ "data-slot": "textarea",
1415
+ className: cn("placeholder:text-muted-foreground/60 dark:bg-input/30 flex field-sizing-content min-h-16 w-full touch-manipulation rounded-md border-0 bg-background px-3 py-2 text-base shadow-[var(--shadow-input)] transition-[color,box-shadow] duration-100 ease-out outline-none disabled:cursor-not-allowed disabled:opacity-50 md:text-sm", "hover:shadow-[var(--shadow-input-hover)]", "focus-visible:shadow-[0_0_0_1px_var(--ring),0_0_0_4px_rgba(0,114,239,0.15)]", "aria-invalid:shadow-[0_0_0_1px_var(--destructive),0_0_1px_0_var(--destructive)]", className),
1416
+ ...props
1417
+ });
1418
+ };
1419
+
1420
+ //#endregion
1421
+ //#region src/components/ui/tooltip/tooltip.tsx
1422
+ const TooltipProvider = Provider;
1423
+ const Tooltip = Root$6;
1424
+ const TooltipTrigger = Trigger$5;
1425
+ const TooltipContent = forwardRef(({ className, sideOffset = 4, ...props }, ref) => /* @__PURE__ */ jsx(Portal$4, { children: /* @__PURE__ */ jsx(Content$5, {
1426
+ ref,
1427
+ sideOffset,
1428
+ className: cn("z-50 overflow-hidden rounded-md bg-primary px-3 py-1.5 text-xs text-primary-foreground 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", className),
1429
+ ...props
1430
+ }) }));
1431
+ TooltipContent.displayName = Content$5.displayName;
1432
+
1433
+ //#endregion
1434
+ //#region src/components/ui/well/well.tsx
1435
+ const wellVariants = cva("rounded-2xl", {
1436
+ defaultVariants: {
1437
+ gap: "sm",
1438
+ spacing: "default",
1439
+ variant: "inset"
1440
+ },
1441
+ variants: {
1442
+ gap: {
1443
+ default: "space-y-4",
1444
+ lg: "space-y-5",
1445
+ none: "",
1446
+ sm: "space-y-3"
1447
+ },
1448
+ spacing: {
1449
+ default: "p-4",
1450
+ lg: "p-5",
1451
+ none: "p-0",
1452
+ sm: "p-3"
1453
+ },
1454
+ variant: {
1455
+ default: "bg-muted/50",
1456
+ inset: "bg-muted/50 border border-border",
1457
+ outline: "border border-border"
1458
+ }
1459
+ }
1460
+ });
1461
+ const Well = ({ className, gap, spacing, variant, ...props }) => /* @__PURE__ */ jsx("div", {
1462
+ "data-slot": "well",
1463
+ "data-spacing": spacing ?? "default",
1464
+ className: cn(wellVariants({
1465
+ gap,
1466
+ spacing,
1467
+ variant
1468
+ }), className),
1469
+ ...props
1470
+ });
1471
+ const WellReveal = ({ children, className, open }) => /* @__PURE__ */ jsx("div", {
1472
+ className: "grid transition-[grid-template-rows] duration-[220ms] ease-[cubic-bezier(0.22,1,0.36,1)] motion-reduce:transition-none",
1473
+ style: { gridTemplateRows: open ? "1fr" : "0fr" },
1474
+ "aria-hidden": !open,
1475
+ children: /* @__PURE__ */ jsx("div", {
1476
+ className: "overflow-hidden",
1477
+ children: /* @__PURE__ */ jsx("div", {
1478
+ className: cn("px-0.5 pb-0.5 [&>[data-slot=well]:not([data-spacing=none])]:p-[22px]", className),
1479
+ children
1480
+ })
1481
+ })
1482
+ });
1483
+
1484
+ //#endregion
1485
+ //#region src/components/asset-icon/asset-icon.tsx
1486
+ const aliases = {
1487
+ arbitrum: "arb",
1488
+ "arbitrum-one": "arb",
1489
+ "arbitrum-sepolia": "arb",
1490
+ avalanche: "avax",
1491
+ "base-sepolia": "base",
1492
+ "binance-smart-chain": "bnb",
1493
+ bitcoin: "btc",
1494
+ "bitcoin-mainnet": "btc",
1495
+ "bitcoin-testnet": "btc",
1496
+ bsc: "bnb",
1497
+ cosmos: "atom",
1498
+ "cosmos-hub": "atom",
1499
+ "cosmos-testnet": "atom",
1500
+ ethereum: "eth",
1501
+ fantom: "ftm",
1502
+ gnosis: "gnosis",
1503
+ linea: "linea",
1504
+ mantle: "mantle",
1505
+ optimism: "optimism",
1506
+ osmosis: "osmo",
1507
+ polygon: "matic",
1508
+ "polygon-amoy": "matic",
1509
+ scroll: "scroll",
1510
+ sei: "sei",
1511
+ "sei-network": "sei",
1512
+ sepolia: "eth",
1513
+ solana: "sol",
1514
+ "solana-devnet": "sol",
1515
+ "solana-mainnet": "sol",
1516
+ starknet: "generic",
1517
+ sui: "sui",
1518
+ zksync: "zkevm"
1519
+ };
1520
+ const AssetIcon = ({ symbol, size = 32, className }) => {
1521
+ return /* @__PURE__ */ jsx("img", {
1522
+ src: `/assets/${aliases[symbol.toLowerCase()] ?? symbol.toLowerCase()}.svg`,
1523
+ alt: symbol,
1524
+ width: size,
1525
+ height: size,
1526
+ className: cn("object-contain", className),
1527
+ onError: (e) => {
1528
+ const target = e.currentTarget;
1529
+ if (!target.src.endsWith("/assets/generic.svg")) target.src = "/assets/generic.svg";
1530
+ }
1531
+ });
1532
+ };
1533
+
1534
+ //#endregion
1535
+ //#region src/components/copy-button/copy-button.tsx
1536
+ const spring$2 = {
1537
+ bounce: 0,
1538
+ duration: .35,
1539
+ type: "spring"
1540
+ };
1541
+ const CopyButton = ({ value, label, variant = "outline", size = "icon-xs", className }) => {
1542
+ const [copied, setCopied] = useState(false);
1543
+ const timeoutRef = useRef(null);
1544
+ const shouldReduceMotion = useReducedMotion();
1545
+ useEffect(() => {
1546
+ return () => {
1547
+ if (timeoutRef.current) clearTimeout(timeoutRef.current);
1548
+ };
1549
+ }, []);
1550
+ const handleCopy = async () => {
1551
+ await navigator.clipboard.writeText(value);
1552
+ setCopied(true);
1553
+ if (timeoutRef.current) clearTimeout(timeoutRef.current);
1554
+ timeoutRef.current = setTimeout(() => setCopied(false), 2e3);
1555
+ };
1556
+ let ariaLabel;
1557
+ if (!label) ariaLabel = copied ? "Copied" : "Copy to clipboard";
1558
+ return /* @__PURE__ */ jsx(Button, {
1559
+ variant,
1560
+ size,
1561
+ onClick: handleCopy,
1562
+ "aria-label": ariaLabel,
1563
+ className: cn("transition-[color,background-color,box-shadow] duration-150", copied && "text-[var(--text-success)]", className),
1564
+ children: /* @__PURE__ */ jsx(AnimatePresence, {
1565
+ mode: "wait",
1566
+ initial: false,
1567
+ children: copied ? /* @__PURE__ */ jsxs(motion.span, {
1568
+ initial: shouldReduceMotion ? false : {
1569
+ opacity: 0,
1570
+ scale: .25
1571
+ },
1572
+ animate: {
1573
+ opacity: 1,
1574
+ scale: 1
1575
+ },
1576
+ exit: shouldReduceMotion ? void 0 : {
1577
+ opacity: 0,
1578
+ scale: .25
1579
+ },
1580
+ transition: spring$2,
1581
+ className: "flex items-center gap-1.5",
1582
+ children: [/* @__PURE__ */ jsx(HugeiconsIcon, {
1583
+ icon: Tick01Icon,
1584
+ size: 14
1585
+ }), label && /* @__PURE__ */ jsx("span", { children: "Copied" })]
1586
+ }, "check") : /* @__PURE__ */ jsxs(motion.span, {
1587
+ initial: shouldReduceMotion ? false : {
1588
+ opacity: 0,
1589
+ scale: .25
1590
+ },
1591
+ animate: {
1592
+ opacity: 1,
1593
+ scale: 1
1594
+ },
1595
+ exit: shouldReduceMotion ? void 0 : {
1596
+ opacity: 0,
1597
+ scale: .25
1598
+ },
1599
+ transition: spring$2,
1600
+ className: "flex items-center gap-1.5",
1601
+ children: [/* @__PURE__ */ jsx(HugeiconsIcon, {
1602
+ icon: Copy01Icon,
1603
+ size: 14
1604
+ }), label && /* @__PURE__ */ jsx("span", { children: label })]
1605
+ }, "copy")
1606
+ })
1607
+ });
1608
+ };
1609
+
1610
+ //#endregion
1611
+ //#region src/components/code-block/code-block.tsx
1612
+ const variantStyles = {
1613
+ dark: {
1614
+ chromeDot: "bg-[var(--border-hover)]",
1615
+ code: "text-[var(--foreground)]",
1616
+ copyBtn: "text-[var(--text-disabled)] hover:text-[var(--foreground)] hover:bg-white/[0.06]",
1617
+ header: "border-white/[0.05] bg-[var(--bg-default)]",
1618
+ headerText: "text-[var(--muted-foreground)]",
1619
+ lineNumber: "text-[var(--text-disabled)]",
1620
+ prompt: "text-[var(--muted-foreground)]",
1621
+ tabActive: "bg-white/[0.08] text-[var(--foreground)]",
1622
+ tabInactive: "text-[var(--text-disabled)] hover:text-[var(--foreground)]",
1623
+ wrapper: "bg-[var(--card)] text-[var(--foreground)] shadow-[0_0_0_1px_var(--border)]"
1624
+ },
1625
+ light: {
1626
+ chromeDot: "bg-muted-foreground/15",
1627
+ code: "text-foreground",
1628
+ copyBtn: "text-muted-foreground/60 hover:text-foreground hover:bg-black/[0.04]",
1629
+ header: "border-border/60 bg-[var(--muted)]/40",
1630
+ headerText: "text-muted-foreground",
1631
+ lineNumber: "text-muted-foreground/30",
1632
+ prompt: "text-muted-foreground/40",
1633
+ tabActive: "bg-background text-foreground shadow-[0_1px_2px_rgba(0,0,0,0.05)]",
1634
+ tabInactive: "text-muted-foreground hover:text-foreground",
1635
+ wrapper: "bg-white text-foreground shadow-[var(--shadow-card)]"
1636
+ }
1637
+ };
1638
+ const CodeBlock = forwardRef(({ code, title, language: _language, showLineNumbers = false, showTerminalPrompt = false, variant = "dark", showWindowChrome = false, className }, ref) => {
1639
+ const lines = code.split("\n");
1640
+ const s = variantStyles[variant];
1641
+ return /* @__PURE__ */ jsxs("div", {
1642
+ ref,
1643
+ className: cn("rounded-xl overflow-hidden", s.wrapper, className),
1644
+ children: [(title || showWindowChrome) && /* @__PURE__ */ jsxs("div", {
1645
+ className: cn("flex items-center justify-between border-b px-4 py-2.5", s.header),
1646
+ children: [/* @__PURE__ */ jsxs("div", {
1647
+ className: "flex items-center gap-3",
1648
+ children: [showWindowChrome && /* @__PURE__ */ jsxs("div", {
1649
+ className: "flex gap-[6px]",
1650
+ "aria-hidden": "true",
1651
+ children: [
1652
+ /* @__PURE__ */ jsx("div", { className: cn("size-[9px] rounded-full", s.chromeDot) }),
1653
+ /* @__PURE__ */ jsx("div", { className: cn("size-[9px] rounded-full", s.chromeDot) }),
1654
+ /* @__PURE__ */ jsx("div", { className: cn("size-[9px] rounded-full", s.chromeDot) })
1655
+ ]
1656
+ }), title && /* @__PURE__ */ jsx("span", {
1657
+ className: cn("text-[13px] font-medium", s.headerText),
1658
+ children: title
1659
+ })]
1660
+ }), /* @__PURE__ */ jsx(CopyButton, {
1661
+ value: code,
1662
+ variant: "ghost",
1663
+ size: "icon-xs",
1664
+ className: s.copyBtn
1665
+ })]
1666
+ }), /* @__PURE__ */ jsxs("div", {
1667
+ className: "relative group",
1668
+ children: [!title && !showWindowChrome && /* @__PURE__ */ jsx("div", {
1669
+ className: "absolute top-2.5 right-2.5 opacity-0 group-hover:opacity-100 transition-[opacity] duration-150",
1670
+ children: /* @__PURE__ */ jsx(CopyButton, {
1671
+ value: code,
1672
+ variant: "ghost",
1673
+ size: "icon-xs",
1674
+ className: s.copyBtn
1675
+ })
1676
+ }), /* @__PURE__ */ jsx("pre", {
1677
+ className: cn("overflow-x-auto px-4 py-3.5 text-[13px] font-mono leading-relaxed", !title && !showWindowChrome && "pr-10", variant === "dark" && "bg-[var(--background)]"),
1678
+ children: /* @__PURE__ */ jsx("code", { children: showLineNumbers ? lines.map((line, i) => /* @__PURE__ */ jsxs("span", {
1679
+ className: "table-row",
1680
+ children: [
1681
+ /* @__PURE__ */ jsx("span", {
1682
+ className: cn("table-cell pr-4 text-right select-none tabular-nums w-[2ch]", s.lineNumber),
1683
+ children: i + 1
1684
+ }),
1685
+ /* @__PURE__ */ jsxs("span", {
1686
+ className: "table-cell",
1687
+ children: [showTerminalPrompt && i === 0 && /* @__PURE__ */ jsx("span", {
1688
+ className: cn("select-none mr-2", s.prompt),
1689
+ children: "$"
1690
+ }), line]
1691
+ }),
1692
+ i < lines.length - 1 && "\n"
1693
+ ]
1694
+ }, `L${i}:${line}`)) : /* @__PURE__ */ jsxs(Fragment, { children: [showTerminalPrompt && /* @__PURE__ */ jsx("span", {
1695
+ className: cn("select-none mr-2", s.prompt),
1696
+ children: "$"
1697
+ }), code] }) })
1698
+ })]
1699
+ })]
1700
+ });
1701
+ });
1702
+ CodeBlock.displayName = "CodeBlock";
1703
+
1704
+ //#endregion
1705
+ //#region src/components/danger-zone/danger-zone.tsx
1706
+ const DangerZone = ({ title, description, actionLabel, confirmTitle, confirmDescription, onConfirm, className }) => {
1707
+ return /* @__PURE__ */ jsx("div", {
1708
+ className: cn("rounded-xl border border-[var(--border-danger)]/30 p-6 shadow-[var(--shadow-card)] bg-card", className),
1709
+ children: /* @__PURE__ */ jsxs("div", {
1710
+ className: "flex items-start gap-3",
1711
+ children: [/* @__PURE__ */ jsx("div", {
1712
+ className: "flex size-8 shrink-0 items-center justify-center rounded-lg bg-[var(--danger-light)]",
1713
+ children: /* @__PURE__ */ jsx(HugeiconsIcon, {
1714
+ icon: Alert01Icon,
1715
+ size: 16,
1716
+ className: "text-[var(--text-danger)]"
1717
+ })
1718
+ }), /* @__PURE__ */ jsxs("div", {
1719
+ className: "flex-1 min-w-0",
1720
+ children: [
1721
+ /* @__PURE__ */ jsx("h3", {
1722
+ className: "text-sm font-semibold text-[var(--text-danger)] text-balance",
1723
+ children: title
1724
+ }),
1725
+ /* @__PURE__ */ jsx("p", {
1726
+ className: "text-sm text-muted-foreground mt-1 text-pretty",
1727
+ children: description
1728
+ }),
1729
+ /* @__PURE__ */ jsx("div", {
1730
+ className: "mt-4",
1731
+ children: /* @__PURE__ */ jsxs(AlertDialog, { children: [/* @__PURE__ */ jsx(AlertDialogTrigger, {
1732
+ asChild: true,
1733
+ children: /* @__PURE__ */ jsx(Button, {
1734
+ variant: "destructive",
1735
+ children: actionLabel
1736
+ })
1737
+ }), /* @__PURE__ */ jsxs(AlertDialogContent, { children: [/* @__PURE__ */ jsxs(AlertDialogHeader, { children: [/* @__PURE__ */ jsx(AlertDialogTitle, { children: confirmTitle || title }), /* @__PURE__ */ jsx(AlertDialogDescription, { children: confirmDescription || description })] }), /* @__PURE__ */ jsxs(AlertDialogFooter, { children: [/* @__PURE__ */ jsx(AlertDialogCancel, { children: "Cancel" }), /* @__PURE__ */ jsx(AlertDialogAction, {
1738
+ onClick: onConfirm,
1739
+ className: "bg-destructive text-white hover:bg-destructive/90",
1740
+ children: actionLabel
1741
+ })] })] })] })
1742
+ })
1743
+ ]
1744
+ })]
1745
+ })
1746
+ });
1747
+ };
1748
+
1749
+ //#endregion
1750
+ //#region src/components/domain-list/domain-list.tsx
1751
+ const DomainList = ({ className, domains, onChange, placeholder = "https://example.com", validate }) => {
1752
+ const [inputValue, setInputValue] = useState("");
1753
+ const [error, setError] = useState(null);
1754
+ const handleAdd = () => {
1755
+ const trimmed = inputValue.trim();
1756
+ if (!trimmed) return;
1757
+ if (validate) {
1758
+ const validationError = validate(trimmed);
1759
+ if (validationError) {
1760
+ setError(validationError);
1761
+ return;
1762
+ }
1763
+ }
1764
+ if (domains.includes(trimmed)) {
1765
+ setError("Already added");
1766
+ return;
1767
+ }
1768
+ onChange([...domains, trimmed]);
1769
+ setInputValue("");
1770
+ setError(null);
1771
+ };
1772
+ const handleRemove = (domain) => {
1773
+ onChange(domains.filter((d) => d !== domain));
1774
+ };
1775
+ const handleKeyDown = (e) => {
1776
+ if (e.key === "Enter") {
1777
+ e.preventDefault();
1778
+ handleAdd();
1779
+ }
1780
+ };
1781
+ return /* @__PURE__ */ jsxs("div", {
1782
+ className: cn("space-y-3", className),
1783
+ children: [/* @__PURE__ */ jsxs("div", {
1784
+ className: "flex gap-2",
1785
+ children: [/* @__PURE__ */ jsxs("div", {
1786
+ className: "flex-1",
1787
+ children: [/* @__PURE__ */ jsx(Input, {
1788
+ value: inputValue,
1789
+ onChange: (e) => {
1790
+ setInputValue(e.target.value);
1791
+ setError(null);
1792
+ },
1793
+ onKeyDown: handleKeyDown,
1794
+ placeholder,
1795
+ "aria-invalid": !!error
1796
+ }), error && /* @__PURE__ */ jsx("p", {
1797
+ className: "text-xs text-[var(--text-danger)] mt-1",
1798
+ children: error
1799
+ })]
1800
+ }), /* @__PURE__ */ jsxs(Button, {
1801
+ variant: "outline",
1802
+ size: "default",
1803
+ onClick: handleAdd,
1804
+ disabled: !inputValue.trim(),
1805
+ type: "button",
1806
+ children: [/* @__PURE__ */ jsx(HugeiconsIcon, {
1807
+ icon: Add01Icon,
1808
+ size: 16
1809
+ }), "Add"]
1810
+ })]
1811
+ }), domains.length > 0 && /* @__PURE__ */ jsx("ul", {
1812
+ className: "space-y-1.5",
1813
+ children: domains.map((domain) => /* @__PURE__ */ jsxs("li", {
1814
+ className: "flex items-center justify-between gap-2 rounded-md border bg-[var(--bg-bottom)] px-3 py-2 text-sm",
1815
+ children: [/* @__PURE__ */ jsx("span", {
1816
+ className: "font-mono text-sm truncate",
1817
+ children: domain
1818
+ }), /* @__PURE__ */ jsx("button", {
1819
+ type: "button",
1820
+ onClick: () => handleRemove(domain),
1821
+ className: "shrink-0 rounded-sm p-0.5 text-muted-foreground hover:text-[var(--text-danger)] transition-[color] duration-150 relative before:absolute before:-inset-[11px] before:content-['']",
1822
+ children: /* @__PURE__ */ jsx(HugeiconsIcon, {
1823
+ icon: Cancel01Icon,
1824
+ size: 14
1825
+ })
1826
+ })]
1827
+ }, domain))
1828
+ })]
1829
+ });
1830
+ };
1831
+
1832
+ //#endregion
1833
+ //#region src/components/empty-state/empty-state.tsx
1834
+ const EmptyState = ({ icon: Icon$2, title, description, action, className }) => {
1835
+ return /* @__PURE__ */ jsxs("div", {
1836
+ className: cn("flex flex-col items-center justify-center py-16 px-8 text-center", className),
1837
+ children: [
1838
+ /* @__PURE__ */ jsx("div", {
1839
+ className: "flex size-12 items-center justify-center rounded-xl bg-muted mb-4",
1840
+ children: /* @__PURE__ */ jsx(Icon$2, { className: "size-6 text-muted-foreground" })
1841
+ }),
1842
+ /* @__PURE__ */ jsx("h3", {
1843
+ className: "text-sm font-semibold",
1844
+ children: title
1845
+ }),
1846
+ /* @__PURE__ */ jsx("p", {
1847
+ className: "text-sm text-muted-foreground mt-1 max-w-sm",
1848
+ children: description
1849
+ }),
1850
+ action && /* @__PURE__ */ jsx("div", {
1851
+ className: "mt-4",
1852
+ children: action
1853
+ })
1854
+ ]
1855
+ });
1856
+ };
1857
+
1858
+ //#endregion
1859
+ //#region src/components/info-banner/info-banner.tsx
1860
+ const spring$1 = {
1861
+ bounce: 0,
1862
+ duration: .35,
1863
+ type: "spring"
1864
+ };
1865
+ const InfoBanner = ({ children, dismissible = false, onDismiss, className }) => {
1866
+ const [dismissed, setDismissed] = useState(false);
1867
+ const shouldReduceMotion = useReducedMotion();
1868
+ if (dismissed) return null;
1869
+ return /* @__PURE__ */ jsxs("div", {
1870
+ className: cn("flex items-center gap-2 rounded-lg border border-border bg-muted/50 px-3 py-2 text-sm text-muted-foreground", className),
1871
+ children: [
1872
+ /* @__PURE__ */ jsx("span", {
1873
+ className: "text-muted-foreground shrink-0",
1874
+ children: /* @__PURE__ */ jsx(HugeiconsIcon, {
1875
+ icon: InformationCircleIcon,
1876
+ size: 16
1877
+ })
1878
+ }),
1879
+ /* @__PURE__ */ jsx("div", {
1880
+ className: "flex-1 min-w-0 text-pretty",
1881
+ children
1882
+ }),
1883
+ dismissible && /* @__PURE__ */ jsx(motion.button, {
1884
+ whileTap: shouldReduceMotion ? void 0 : { scale: .96 },
1885
+ transition: spring$1,
1886
+ onClick: () => {
1887
+ setDismissed(true);
1888
+ onDismiss?.();
1889
+ },
1890
+ className: "relative before:absolute before:-inset-[13px] before:content-[''] shrink-0 rounded-sm p-0.5 opacity-70 hover:opacity-100 transition-[opacity] touch-manipulation cursor-pointer",
1891
+ children: /* @__PURE__ */ jsx(HugeiconsIcon, {
1892
+ icon: Cancel01Icon,
1893
+ size: 14
1894
+ })
1895
+ })
1896
+ ]
1897
+ });
1898
+ };
1899
+
1900
+ //#endregion
1901
+ //#region src/components/loading-skeleton/loading-skeleton.tsx
1902
+ const buildIdList = (length) => Array.from({ length }, () => crypto.randomUUID());
1903
+ /** Full-page skeleton with header and content area */
1904
+ const PageSkeleton = ({ className }) => {
1905
+ return /* @__PURE__ */ jsxs("div", {
1906
+ className: cn("space-y-6 p-6", className),
1907
+ children: [
1908
+ /* @__PURE__ */ jsxs("div", {
1909
+ className: "space-y-2",
1910
+ children: [/* @__PURE__ */ jsx(Skeleton, { className: "h-8 w-48" }), /* @__PURE__ */ jsx(Skeleton, { className: "h-4 w-96" })]
1911
+ }),
1912
+ /* @__PURE__ */ jsxs("div", {
1913
+ className: "grid grid-cols-1 md:grid-cols-3 gap-4",
1914
+ children: [
1915
+ /* @__PURE__ */ jsx(StatCardSkeleton, {}),
1916
+ /* @__PURE__ */ jsx(StatCardSkeleton, {}),
1917
+ /* @__PURE__ */ jsx(StatCardSkeleton, {})
1918
+ ]
1919
+ }),
1920
+ /* @__PURE__ */ jsx(TableSkeleton, { rows: 5 })
1921
+ ]
1922
+ });
1923
+ };
1924
+ /** Stat/metric card skeleton */
1925
+ const StatCardSkeleton = ({ className }) => {
1926
+ return /* @__PURE__ */ jsxs("div", {
1927
+ className: cn("rounded-xl p-5 shadow-[var(--shadow-card)] bg-card", className),
1928
+ children: [
1929
+ /* @__PURE__ */ jsxs("div", {
1930
+ className: "flex items-center justify-between mb-3",
1931
+ children: [/* @__PURE__ */ jsx(Skeleton, { className: "h-4 w-24" }), /* @__PURE__ */ jsx(Skeleton, { className: "size-8 rounded-lg" })]
1932
+ }),
1933
+ /* @__PURE__ */ jsx(Skeleton, { className: "h-8 w-20 mb-1" }),
1934
+ /* @__PURE__ */ jsx(Skeleton, { className: "h-4 w-16" })
1935
+ ]
1936
+ });
1937
+ };
1938
+ /** Table skeleton with configurable rows */
1939
+ const TableSkeleton = ({ rows = 5, columns = 4, className }) => {
1940
+ const headerIds = useMemo(() => buildIdList(columns), [columns]);
1941
+ const rowIds = useMemo(() => buildIdList(rows), [rows]);
1942
+ const colIds = useMemo(() => buildIdList(columns), [columns]);
1943
+ return /* @__PURE__ */ jsxs("div", {
1944
+ className: cn("rounded-xl border shadow-[var(--shadow-card)] bg-card overflow-hidden", className),
1945
+ children: [/* @__PURE__ */ jsx("div", {
1946
+ className: "flex items-center gap-4 px-4 py-3 border-b",
1947
+ children: headerIds.map((id) => /* @__PURE__ */ jsx(Skeleton, { className: "h-4 flex-1" }, id))
1948
+ }), rowIds.map((rowId) => /* @__PURE__ */ jsx("div", {
1949
+ className: "flex items-center gap-4 px-4 py-3 border-b last:border-b-0",
1950
+ children: colIds.map((colId, colIdx) => /* @__PURE__ */ jsx(Skeleton, { className: cn("h-4 flex-1", colIdx === 0 && "max-w-32", colIdx === columns - 1 && "max-w-16") }, `${rowId}-${colId}`))
1951
+ }, rowId))]
1952
+ });
1953
+ };
1954
+
1955
+ //#endregion
1956
+ //#region src/components/metric-card/metric-card.tsx
1957
+ const trendColor = {
1958
+ down: "text-[var(--text-danger)]",
1959
+ neutral: "text-muted-foreground",
1960
+ up: "text-[var(--text-success)]"
1961
+ };
1962
+ const MetricCard = (props) => {
1963
+ const { label, icon: Icon$2, loading = false, className } = props;
1964
+ if (loading) return /* @__PURE__ */ jsxs("div", {
1965
+ className: cn("rounded-[16px] bg-card shadow-[var(--shadow-card)] px-5 py-4", className),
1966
+ children: [/* @__PURE__ */ jsx(Skeleton, { className: "h-3.5 w-20 mb-2.5" }), /* @__PURE__ */ jsx(Skeleton, { className: "h-7 w-24" })]
1967
+ });
1968
+ if (props.inactive) return /* @__PURE__ */ jsxs("div", {
1969
+ className: cn("rounded-[16px] bg-card shadow-[var(--shadow-card)] px-5 py-4", className),
1970
+ children: [/* @__PURE__ */ jsxs("div", {
1971
+ className: "flex items-center gap-1.5",
1972
+ children: [Icon$2 && /* @__PURE__ */ jsx(Icon$2, { className: "size-3.5 text-muted-foreground" }), /* @__PURE__ */ jsx("span", {
1973
+ className: "text-[13px] text-muted-foreground font-medium",
1974
+ children: label
1975
+ })]
1976
+ }), /* @__PURE__ */ jsx("div", {
1977
+ className: "text-2xl font-semibold tracking-tight text-muted-foreground/30 tabular-nums mt-1.5",
1978
+ children: "0"
1979
+ })]
1980
+ });
1981
+ return /* @__PURE__ */ jsxs("div", {
1982
+ className: cn("rounded-[16px] bg-card shadow-[var(--shadow-card)] px-5 py-4", className),
1983
+ children: [/* @__PURE__ */ jsxs("div", {
1984
+ className: "flex items-center gap-1.5",
1985
+ children: [Icon$2 && /* @__PURE__ */ jsx(Icon$2, { className: "size-3.5 text-muted-foreground" }), /* @__PURE__ */ jsx("span", {
1986
+ className: "text-[13px] text-muted-foreground font-medium",
1987
+ children: label
1988
+ })]
1989
+ }), /* @__PURE__ */ jsxs("div", {
1990
+ className: "flex items-baseline gap-2 mt-1.5",
1991
+ children: [/* @__PURE__ */ jsx("span", {
1992
+ className: "text-2xl font-semibold tracking-tight tabular-nums",
1993
+ children: props.value
1994
+ }), props.trend && props.trendValue && /* @__PURE__ */ jsx("span", {
1995
+ className: cn("text-xs font-medium tabular-nums", trendColor[props.trend]),
1996
+ children: props.trendValue
1997
+ })]
1998
+ })]
1999
+ });
2000
+ };
2001
+
2002
+ //#endregion
2003
+ //#region src/components/ask-ai-sheet/ask-ai-sheet.tsx
2004
+ /**
2005
+ * Placeholder stub for the docs-AI sheet.
2006
+ *
2007
+ * Renders nothing in droplet — the real sheet lives in the consumer app and
2008
+ * subscribes to the `docsPath` to surface contextual AI help. Kept here so
2009
+ * `PageActions` can mount it unconditionally without each consumer wiring it.
2010
+ */
2011
+ const AskAISheet = ({ docsPath: _docsPath }) => {
2012
+ return null;
2013
+ };
2014
+
2015
+ //#endregion
2016
+ //#region src/components/page-actions/page-actions.tsx
2017
+ const AskAIAction = ({ docsPath }) => {
2018
+ return /* @__PURE__ */ jsx(AskAISheet, { docsPath });
2019
+ };
2020
+ const WebhooksAction = () => {
2021
+ return /* @__PURE__ */ jsx(Button, {
2022
+ variant: "outline",
2023
+ size: "sm",
2024
+ asChild: true,
2025
+ children: /* @__PURE__ */ jsxs(Link, {
2026
+ href: "/dashboard/developers?tab=webhooks",
2027
+ children: [/* @__PURE__ */ jsx(HugeiconsIcon, {
2028
+ icon: WebhookIcon,
2029
+ size: 14
2030
+ }), "Webhooks"]
2031
+ })
2032
+ });
2033
+ };
2034
+
2035
+ //#endregion
2036
+ //#region src/components/product-page-layout/product-page-layout.tsx
2037
+ const spring = {
2038
+ bounce: 0,
2039
+ duration: .35,
2040
+ type: "spring"
2041
+ };
2042
+ const ProductPageLayout = ({ title, tabs, activeTab, onTabChange, children, headerActions, headerContent, sidebarFooter }) => {
2043
+ const activeTabConfig = tabs.find((t) => t.id === activeTab);
2044
+ const shouldReduceMotion = useReducedMotion();
2045
+ return /* @__PURE__ */ jsxs("div", {
2046
+ className: "flex h-full",
2047
+ children: [/* @__PURE__ */ jsxs("nav", {
2048
+ className: "w-52 shrink-0 bg-background overflow-y-auto py-4 px-3 flex flex-col",
2049
+ children: [
2050
+ /* @__PURE__ */ jsx("h2", {
2051
+ className: "px-3 mb-3 text-sm font-semibold text-balance",
2052
+ children: title
2053
+ }),
2054
+ /* @__PURE__ */ jsx("div", {
2055
+ className: "flex flex-col gap-0.5",
2056
+ children: tabs.map((tab) => /* @__PURE__ */ jsx(motion.button, {
2057
+ whileTap: shouldReduceMotion ? void 0 : { scale: .96 },
2058
+ transition: spring,
2059
+ onClick: () => onTabChange(tab.id),
2060
+ className: cn("flex items-center rounded-md px-3 py-1.5 text-[13px] font-medium transition-[color,background-color] text-left touch-manipulation", activeTab === tab.id ? "bg-muted text-foreground" : "text-muted-foreground hover:bg-muted/50 hover:text-foreground"),
2061
+ children: tab.label
2062
+ }, tab.id))
2063
+ }),
2064
+ sidebarFooter && /* @__PURE__ */ jsx("div", {
2065
+ className: "mt-auto pt-4",
2066
+ children: sidebarFooter
2067
+ })
2068
+ ]
2069
+ }), /* @__PURE__ */ jsx("div", {
2070
+ className: "flex-1 overflow-auto",
2071
+ children: /* @__PURE__ */ jsxs("div", {
2072
+ className: "px-10 py-8 space-y-8",
2073
+ children: [headerContent ?? /* @__PURE__ */ jsxs("div", {
2074
+ className: "flex items-start justify-between gap-4",
2075
+ children: [/* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsx("h1", {
2076
+ className: "text-2xl font-semibold text-balance",
2077
+ children: activeTabConfig?.heading ?? activeTabConfig?.label ?? activeTab
2078
+ }), activeTabConfig?.description && /* @__PURE__ */ jsx("p", {
2079
+ className: "text-sm text-muted-foreground mt-1 text-pretty",
2080
+ children: activeTabConfig.description
2081
+ })] }), headerActions && /* @__PURE__ */ jsx("div", {
2082
+ className: "flex items-center gap-2 shrink-0",
2083
+ children: headerActions
2084
+ })]
2085
+ }), children]
2086
+ })
2087
+ })]
2088
+ });
2089
+ };
2090
+
2091
+ //#endregion
2092
+ //#region src/components/settings-section/settings-section.tsx
2093
+ const SettingsSection = ({ title, description, children, variant = "default", className }) => {
2094
+ return /* @__PURE__ */ jsxs("div", {
2095
+ className: cn("rounded-xl border p-6 shadow-[var(--shadow-card)] bg-card", variant === "danger" && "border-[var(--border-danger)]/30", className),
2096
+ children: [/* @__PURE__ */ jsxs("div", {
2097
+ className: "mb-4",
2098
+ children: [/* @__PURE__ */ jsx("h3", {
2099
+ className: cn("text-sm font-semibold text-balance", variant === "danger" && "text-[var(--text-danger)]"),
2100
+ children: title
2101
+ }), description && /* @__PURE__ */ jsx("p", {
2102
+ className: "text-sm text-muted-foreground mt-1 text-pretty",
2103
+ children: description
2104
+ })]
2105
+ }), /* @__PURE__ */ jsx("div", {
2106
+ className: "space-y-4",
2107
+ children
2108
+ })]
2109
+ });
2110
+ };
2111
+
2112
+ //#endregion
2113
+ //#region src/components/status-badge/status-badge.tsx
2114
+ const statusConfig = {
2115
+ active: {
2116
+ dot: true,
2117
+ label: "Active",
2118
+ variant: "success"
2119
+ },
2120
+ blocked: {
2121
+ dot: true,
2122
+ label: "Blocked",
2123
+ variant: "danger"
2124
+ },
2125
+ inactive: {
2126
+ dot: true,
2127
+ label: "Inactive",
2128
+ variant: "inactive"
2129
+ },
2130
+ live: {
2131
+ dot: true,
2132
+ label: "Live",
2133
+ variant: "success"
2134
+ },
2135
+ pending: {
2136
+ dot: true,
2137
+ label: "Pending",
2138
+ variant: "warning"
2139
+ },
2140
+ processing: {
2141
+ dot: true,
2142
+ label: "Processing",
2143
+ variant: "process"
2144
+ },
2145
+ sandbox: {
2146
+ dot: true,
2147
+ label: "Sandbox",
2148
+ variant: "warning"
2149
+ }
2150
+ };
2151
+ const StatusBadge = ({ status, label, className }) => {
2152
+ const config = statusConfig[status];
2153
+ return /* @__PURE__ */ jsxs(Badge, {
2154
+ variant: config.variant,
2155
+ className: cn("gap-1.5", className),
2156
+ children: [config.dot && /* @__PURE__ */ jsx("span", { className: "size-1.5 rounded-full bg-current opacity-70" }), label || config.label]
2157
+ });
2158
+ };
2159
+
2160
+ //#endregion
2161
+ //#region src/components/toggle-card/toggle-card.tsx
2162
+ /**
2163
+ * ToggleCard — droplet's rich toggle composite.
2164
+ *
2165
+ * Rebuilt from Northstar's SingleToggleCard to support the redcoast dashboard
2166
+ * migration. ToggleRow (sibling primitive) remains the minimal/canonical
2167
+ * single-line toggle; ToggleCard is the multi-feature card variant with:
2168
+ * - Accordion expand/collapse for nested children
2169
+ * - Pluggable input type: switch (default), radio, or checkbox
2170
+ * - Optional left icon
2171
+ * - Tags row above the title and a RightSideTags slot on the right
2172
+ * - Optional notification dot in the trigger
2173
+ * - Optional `actionLink` rendered below content
2174
+ * - Optional `customActionIcon` rendered alongside the trigger affordance
2175
+ * - Whole-card click handler
2176
+ *
2177
+ * The API mirrors Northstar SingleToggleCard so a redcoast migration can be a
2178
+ * mechanical rename. Where the Northstar API surfaced layout-tuning props
2179
+ * (`disableHover`, `dontSeparateContentFromHeader`, `descriptionModificators`,
2180
+ * `titleModificators`) the equivalent expression here is via Tailwind classes
2181
+ * on `className` or `triggerClassName`.
2182
+ *
2183
+ * Authored in droplet so a single canonical card is available across teams.
2184
+ * Backed by Card + Switch/Checkbox/RadioGroup + Radix Accordion.
2185
+ */
2186
+ const inputCommon = "shrink-0 touch-manipulation cursor-pointer disabled:cursor-not-allowed disabled:opacity-50";
2187
+ const renderInput = (input, id) => {
2188
+ if (!input || input.hidden) return null;
2189
+ if (input.isLocked) return /* @__PURE__ */ jsx("div", {
2190
+ "aria-label": "Locked",
2191
+ title: "Locked",
2192
+ className: "shrink-0 inline-flex items-center justify-center size-5 rounded-full bg-muted text-muted-foreground mt-0.5",
2193
+ children: /* @__PURE__ */ jsxs("svg", {
2194
+ className: "size-3",
2195
+ viewBox: "0 0 24 24",
2196
+ fill: "none",
2197
+ stroke: "currentColor",
2198
+ strokeWidth: "2",
2199
+ strokeLinecap: "round",
2200
+ strokeLinejoin: "round",
2201
+ "aria-hidden": true,
2202
+ children: [/* @__PURE__ */ jsx("rect", {
2203
+ x: "3",
2204
+ y: "11",
2205
+ width: "18",
2206
+ height: "11",
2207
+ rx: "2",
2208
+ ry: "2"
2209
+ }), /* @__PURE__ */ jsx("path", { d: "M7 11V7a5 5 0 0110 0v4" })]
2210
+ })
2211
+ });
2212
+ const type = input.type ?? "toggle";
2213
+ const handleChange = (next) => {
2214
+ if (!input.onChange) return;
2215
+ input.onChange({ target: {
2216
+ checked: next,
2217
+ name: input.name ?? ""
2218
+ } });
2219
+ };
2220
+ if (type === "toggle") return /* @__PURE__ */ jsx(Switch, {
2221
+ id: input.id ?? id,
2222
+ checked: Boolean(input.checked),
2223
+ disabled: input.disabled,
2224
+ onCheckedChange: handleChange,
2225
+ className: cn(inputCommon, "mt-0.5")
2226
+ });
2227
+ if (type === "checkbox") return /* @__PURE__ */ jsx(Checkbox, {
2228
+ id: input.id ?? id,
2229
+ checked: Boolean(input.checked),
2230
+ disabled: input.disabled,
2231
+ onCheckedChange: (state) => handleChange(state === true),
2232
+ className: cn(inputCommon, "mt-1")
2233
+ });
2234
+ return /* @__PURE__ */ jsx(RadioGroup, {
2235
+ value: input.checked ? input.id ?? id : "",
2236
+ onValueChange: (v) => handleChange(v === (input.id ?? id)),
2237
+ disabled: input.disabled,
2238
+ className: "shrink-0 mt-0.5",
2239
+ children: /* @__PURE__ */ jsx(RadioGroupItem, {
2240
+ id: input.id ?? id,
2241
+ value: input.id ?? id,
2242
+ className: inputCommon
2243
+ })
2244
+ });
2245
+ };
2246
+ const ToggleCard = ({ accordionKey, title, description, inputProps, allowExpand = true, defaultExpanded, value, onValueChange, collapsible = true, Tags, RightSideTags, notification, actionLink, customActionIcon, onCardClick: _onCardClick, children, disabled, triggerTestId, className, triggerClassName }) => {
2247
+ const generatedId = useId();
2248
+ const inputId = inputProps?.id ?? generatedId;
2249
+ const isParentMode = !allowExpand && Boolean(children);
2250
+ const renderContent = () => {
2251
+ const actionLinkButton = actionLink ? /* @__PURE__ */ jsx("button", {
2252
+ type: "button",
2253
+ onClick: actionLink.onClick,
2254
+ className: "mt-3 text-sm font-medium text-(--action) hover:underline underline-offset-4 cursor-pointer",
2255
+ children: actionLink.text
2256
+ }) : null;
2257
+ if (allowExpand) return /* @__PURE__ */ jsxs(Content, {
2258
+ className: "border-t border-border-divider px-5 py-4",
2259
+ children: [children, actionLinkButton]
2260
+ });
2261
+ if (!children && !actionLink) return null;
2262
+ return /* @__PURE__ */ jsxs("div", {
2263
+ className: "border-t border-border-divider bg-card px-5 py-3 space-y-2",
2264
+ children: [children, actionLinkButton]
2265
+ });
2266
+ };
2267
+ return /* @__PURE__ */ jsx(Root, {
2268
+ type: "single",
2269
+ collapsible,
2270
+ defaultValue: defaultExpanded ? accordionKey : void 0,
2271
+ value,
2272
+ onValueChange,
2273
+ "data-slot": "toggle-card",
2274
+ className: cn("rounded-xl bg-card shadow-card overflow-hidden", disabled && "opacity-60", className),
2275
+ children: /* @__PURE__ */ jsxs(Item, {
2276
+ value: accordionKey,
2277
+ className: "border-0",
2278
+ children: [/* @__PURE__ */ jsx(Header, {
2279
+ className: "m-0",
2280
+ children: /* @__PURE__ */ jsxs("div", {
2281
+ className: cn("group flex items-start gap-3 px-5 py-4", isParentMode && "bg-bg-bottom", triggerClassName),
2282
+ children: [
2283
+ renderInput(inputProps, inputId),
2284
+ /* @__PURE__ */ jsxs("div", {
2285
+ className: "flex-1 min-w-0",
2286
+ children: [
2287
+ title && /* @__PURE__ */ jsxs("div", {
2288
+ className: "flex items-baseline gap-1.5 flex-wrap leading-5",
2289
+ children: [/* @__PURE__ */ jsxs("label", {
2290
+ htmlFor: inputId,
2291
+ className: cn("text-sm font-medium select-none leading-5", disabled && "text-muted-foreground"),
2292
+ children: [title, notification && /* @__PURE__ */ jsx("span", {
2293
+ "aria-hidden": true,
2294
+ className: "inline-block ml-1.5 size-1.5 rounded-full bg-destructive align-middle"
2295
+ })]
2296
+ }), Tags && Tags.length > 0 && /* @__PURE__ */ jsx(Fragment, { children: Tags.map((t) => /* @__PURE__ */ jsx("span", {
2297
+ className: "leading-5",
2298
+ children: t.Tag
2299
+ }, t.id)) })]
2300
+ }),
2301
+ !title && Tags && Tags.length > 0 && /* @__PURE__ */ jsx("div", {
2302
+ className: "flex items-baseline gap-1.5 mb-1 leading-5",
2303
+ children: Tags.map((t) => /* @__PURE__ */ jsx("span", {
2304
+ className: "leading-5",
2305
+ children: t.Tag
2306
+ }, t.id))
2307
+ }),
2308
+ description && /* @__PURE__ */ jsx("p", {
2309
+ className: "text-sm text-muted-foreground mt-0.5 text-pretty",
2310
+ children: description
2311
+ })
2312
+ ]
2313
+ }),
2314
+ /* @__PURE__ */ jsxs("div", {
2315
+ className: "flex items-center gap-2 shrink-0 self-start",
2316
+ children: [RightSideTags && RightSideTags.length > 0 && /* @__PURE__ */ jsx("div", {
2317
+ className: "flex items-center gap-1.5",
2318
+ children: RightSideTags.map((t) => /* @__PURE__ */ jsx("span", { children: t.Tag }, t.id))
2319
+ }), allowExpand && /* @__PURE__ */ jsx(Trigger, {
2320
+ "data-testid": triggerTestId,
2321
+ className: cn("shrink-0 inline-flex size-7 items-center justify-center rounded-md text-muted-foreground transition-[transform,background-color] duration-150 hover:bg-overlay-hover [&[data-state=open]>svg]:rotate-180", customActionIcon?.className),
2322
+ disabled: !allowExpand,
2323
+ children: customActionIcon ? customActionIcon.Icon : /* @__PURE__ */ jsx("svg", {
2324
+ className: "size-4",
2325
+ viewBox: "0 0 24 24",
2326
+ fill: "none",
2327
+ stroke: "currentColor",
2328
+ strokeWidth: "2",
2329
+ strokeLinecap: "round",
2330
+ strokeLinejoin: "round",
2331
+ "aria-hidden": true,
2332
+ children: /* @__PURE__ */ jsx("polyline", { points: "6 9 12 15 18 9" })
2333
+ })
2334
+ })]
2335
+ })
2336
+ ]
2337
+ })
2338
+ }), renderContent()]
2339
+ })
2340
+ });
2341
+ };
2342
+
2343
+ //#endregion
2344
+ //#region src/components/icons/arrow-up-right/arrow-up-right.tsx
2345
+ const ArrowUpRightIcon = forwardRef((props, ref) => /* @__PURE__ */ jsx(AnimatedIcon, {
2346
+ ref,
2347
+ ...props,
2348
+ children: (controls, size) => /* @__PURE__ */ jsxs("svg", {
2349
+ fill: "none",
2350
+ height: size,
2351
+ stroke: "currentColor",
2352
+ strokeLinecap: "round",
2353
+ strokeLinejoin: "round",
2354
+ strokeWidth: "2",
2355
+ viewBox: "0 0 24 24",
2356
+ width: size,
2357
+ xmlns: "http://www.w3.org/2000/svg",
2358
+ children: [/* @__PURE__ */ jsx(motion.path, {
2359
+ animate: controls,
2360
+ d: "M7 17 17 7",
2361
+ transition: {
2362
+ duration: .3,
2363
+ times: [
2364
+ 0,
2365
+ .4,
2366
+ 1
2367
+ ]
2368
+ },
2369
+ variants: {
2370
+ animate: {
2371
+ x: [
2372
+ 0,
2373
+ 2,
2374
+ 0
2375
+ ],
2376
+ y: [
2377
+ 0,
2378
+ -2,
2379
+ 0
2380
+ ]
2381
+ },
2382
+ normal: {
2383
+ x: 0,
2384
+ y: 0
2385
+ }
2386
+ }
2387
+ }), /* @__PURE__ */ jsx(motion.path, {
2388
+ animate: controls,
2389
+ d: "M7 7h10v10",
2390
+ transition: {
2391
+ duration: .3,
2392
+ times: [
2393
+ 0,
2394
+ .4,
2395
+ 1
2396
+ ]
2397
+ },
2398
+ variants: {
2399
+ animate: {
2400
+ x: [
2401
+ 0,
2402
+ 2,
2403
+ 0
2404
+ ],
2405
+ y: [
2406
+ 0,
2407
+ -2,
2408
+ 0
2409
+ ]
2410
+ },
2411
+ normal: {
2412
+ x: 0,
2413
+ y: 0
2414
+ }
2415
+ }
2416
+ })]
2417
+ })
2418
+ }));
2419
+ ArrowUpRightIcon.displayName = "ArrowUpRightIcon";
2420
+
2421
+ //#endregion
2422
+ //#region src/components/icons/chart-bar-increasing/chart-bar-increasing.tsx
2423
+ const LINE_VARIANTS$1 = {
2424
+ hidden: {
2425
+ opacity: 0,
2426
+ pathLength: 0
2427
+ },
2428
+ visible: {
2429
+ opacity: 1,
2430
+ pathLength: 1
2431
+ }
2432
+ };
2433
+ const transitionFor = (i) => ({
2434
+ delay: i * .1,
2435
+ duration: .3
2436
+ });
2437
+ const ChartBarIncreasingIcon = forwardRef(({ onMouseEnter, onMouseLeave, className, size = 28, ...props }, ref) => {
2438
+ const controls = useAnimation();
2439
+ const isControlledRef = useRef(false);
2440
+ useImperativeHandle(ref, () => {
2441
+ isControlledRef.current = true;
2442
+ return {
2443
+ startAnimation: async () => {
2444
+ await controls.start((i) => ({
2445
+ opacity: 0,
2446
+ pathLength: 0,
2447
+ transition: transitionFor(i)
2448
+ }));
2449
+ await controls.start((i) => ({
2450
+ opacity: 1,
2451
+ pathLength: 1,
2452
+ transition: transitionFor(i)
2453
+ }));
2454
+ },
2455
+ stopAnimation: () => controls.start("visible")
2456
+ };
2457
+ });
2458
+ const handleMouseEnter = useCallback(async (e) => {
2459
+ if (isControlledRef.current) onMouseEnter?.(e);
2460
+ else {
2461
+ await controls.start((i) => ({
2462
+ opacity: 0,
2463
+ pathLength: 0,
2464
+ transition: transitionFor(i)
2465
+ }));
2466
+ await controls.start((i) => ({
2467
+ opacity: 1,
2468
+ pathLength: 1,
2469
+ transition: transitionFor(i)
2470
+ }));
2471
+ }
2472
+ }, [controls, onMouseEnter]);
2473
+ const handleMouseLeave = useCallback((e) => {
2474
+ if (isControlledRef.current) onMouseLeave?.(e);
2475
+ else controls.start("visible").catch(() => void 0);
2476
+ }, [controls, onMouseLeave]);
2477
+ return /* @__PURE__ */ jsx("div", {
2478
+ "aria-hidden": "true",
2479
+ className: cn("inline-flex items-center justify-center", className),
2480
+ onMouseEnter: handleMouseEnter,
2481
+ onMouseLeave: handleMouseLeave,
2482
+ ...props,
2483
+ children: /* @__PURE__ */ jsxs("svg", {
2484
+ fill: "none",
2485
+ height: size,
2486
+ stroke: "currentColor",
2487
+ strokeLinecap: "round",
2488
+ strokeLinejoin: "round",
2489
+ strokeWidth: "2",
2490
+ viewBox: "0 0 24 24",
2491
+ width: size,
2492
+ xmlns: "http://www.w3.org/2000/svg",
2493
+ children: [
2494
+ /* @__PURE__ */ jsx("path", { d: "M3 3v16a2 2 0 0 0 2 2h16" }),
2495
+ /* @__PURE__ */ jsx(motion.path, {
2496
+ animate: controls,
2497
+ custom: 1,
2498
+ d: "M7 11h8",
2499
+ initial: "visible",
2500
+ variants: LINE_VARIANTS$1
2501
+ }),
2502
+ /* @__PURE__ */ jsx(motion.path, {
2503
+ animate: controls,
2504
+ custom: 2,
2505
+ d: "M7 16h12",
2506
+ initial: "visible",
2507
+ variants: LINE_VARIANTS$1
2508
+ }),
2509
+ /* @__PURE__ */ jsx(motion.path, {
2510
+ animate: controls,
2511
+ custom: 0,
2512
+ d: "M7 6h3",
2513
+ initial: "visible",
2514
+ variants: LINE_VARIANTS$1
2515
+ })
2516
+ ]
2517
+ })
2518
+ });
2519
+ });
2520
+ ChartBarIncreasingIcon.displayName = "ChartBarIncreasingIcon";
2521
+
2522
+ //#endregion
2523
+ //#region src/components/icons/chevron-down/chevron-down.tsx
2524
+ const DEFAULT_TRANSITION$3 = {
2525
+ duration: .5,
2526
+ times: [
2527
+ 0,
2528
+ .4,
2529
+ 1
2530
+ ]
2531
+ };
2532
+ const ChevronDownIcon = forwardRef((props, ref) => /* @__PURE__ */ jsx(AnimatedIcon, {
2533
+ ref,
2534
+ ...props,
2535
+ children: (controls, size) => /* @__PURE__ */ jsx("svg", {
2536
+ fill: "none",
2537
+ height: size,
2538
+ stroke: "currentColor",
2539
+ strokeLinecap: "round",
2540
+ strokeLinejoin: "round",
2541
+ strokeWidth: "2",
2542
+ viewBox: "0 0 24 24",
2543
+ width: size,
2544
+ xmlns: "http://www.w3.org/2000/svg",
2545
+ children: /* @__PURE__ */ jsx(motion.path, {
2546
+ animate: controls,
2547
+ d: "m6 9 6 6 6-6",
2548
+ transition: DEFAULT_TRANSITION$3,
2549
+ variants: {
2550
+ animate: { y: [
2551
+ 0,
2552
+ 2,
2553
+ 0
2554
+ ] },
2555
+ normal: { y: 0 }
2556
+ }
2557
+ })
2558
+ })
2559
+ }));
2560
+ ChevronDownIcon.displayName = "ChevronDownIcon";
2561
+
2562
+ //#endregion
2563
+ //#region src/components/icons/chevron-right/chevron-right.tsx
2564
+ const ChevronRightIcon = forwardRef((props, ref) => /* @__PURE__ */ jsx(AnimatedIcon, {
2565
+ ref,
2566
+ ...props,
2567
+ children: (controls, size) => /* @__PURE__ */ jsx("svg", {
2568
+ fill: "none",
2569
+ height: size,
2570
+ stroke: "currentColor",
2571
+ strokeLinecap: "round",
2572
+ strokeLinejoin: "round",
2573
+ strokeWidth: "2",
2574
+ viewBox: "0 0 24 24",
2575
+ width: size,
2576
+ xmlns: "http://www.w3.org/2000/svg",
2577
+ children: /* @__PURE__ */ jsx(motion.path, {
2578
+ animate: controls,
2579
+ d: "m9 18 6-6-6-6",
2580
+ transition: {
2581
+ duration: .5,
2582
+ times: [
2583
+ 0,
2584
+ .4,
2585
+ 1
2586
+ ]
2587
+ },
2588
+ variants: {
2589
+ animate: { x: [
2590
+ 0,
2591
+ 2,
2592
+ 0
2593
+ ] },
2594
+ normal: { x: 0 }
2595
+ }
2596
+ })
2597
+ })
2598
+ }));
2599
+ ChevronRightIcon.displayName = "ChevronRightIcon";
2600
+
2601
+ //#endregion
2602
+ //#region src/components/icons/copy/copy.tsx
2603
+ const springTransition = {
2604
+ damping: 17,
2605
+ mass: 1,
2606
+ stiffness: 160,
2607
+ type: "spring"
2608
+ };
2609
+ const CopyIcon = forwardRef((props, ref) => /* @__PURE__ */ jsx(AnimatedIcon, {
2610
+ ref,
2611
+ ...props,
2612
+ children: (controls, size) => /* @__PURE__ */ jsxs("svg", {
2613
+ fill: "none",
2614
+ height: size,
2615
+ stroke: "currentColor",
2616
+ strokeLinecap: "round",
2617
+ strokeLinejoin: "round",
2618
+ strokeWidth: "2",
2619
+ viewBox: "0 0 24 24",
2620
+ width: size,
2621
+ xmlns: "http://www.w3.org/2000/svg",
2622
+ children: [/* @__PURE__ */ jsx(motion.rect, {
2623
+ animate: controls,
2624
+ height: "14",
2625
+ rx: "2",
2626
+ ry: "2",
2627
+ transition: springTransition,
2628
+ variants: {
2629
+ animate: {
2630
+ translateX: -3,
2631
+ translateY: -3
2632
+ },
2633
+ normal: {
2634
+ translateX: 0,
2635
+ translateY: 0
2636
+ }
2637
+ },
2638
+ width: "14",
2639
+ x: "8",
2640
+ y: "8"
2641
+ }), /* @__PURE__ */ jsx(motion.path, {
2642
+ animate: controls,
2643
+ d: "M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2",
2644
+ transition: springTransition,
2645
+ variants: {
2646
+ animate: {
2647
+ x: 3,
2648
+ y: 3
2649
+ },
2650
+ normal: {
2651
+ x: 0,
2652
+ y: 0
2653
+ }
2654
+ }
2655
+ })]
2656
+ })
2657
+ }));
2658
+ CopyIcon.displayName = "CopyIcon";
2659
+
2660
+ //#endregion
2661
+ //#region src/components/icons/copy-check/copy-check.tsx
2662
+ const SPRING_TRANSITION = {
2663
+ damping: 17,
2664
+ mass: 1,
2665
+ stiffness: 160,
2666
+ type: "spring"
2667
+ };
2668
+ const CopyCheckIcon = forwardRef(({ onMouseEnter, onMouseLeave, className, size = 28, ...props }, ref) => {
2669
+ const controls = useAnimation();
2670
+ const isControlledRef = useRef(false);
2671
+ const [copied, setCopied] = useState(false);
2672
+ const timerRef = useRef(null);
2673
+ const triggerCopied = useCallback(() => {
2674
+ setCopied(true);
2675
+ if (timerRef.current) clearTimeout(timerRef.current);
2676
+ timerRef.current = setTimeout(() => setCopied(false), 1500);
2677
+ }, []);
2678
+ useImperativeHandle(ref, () => {
2679
+ isControlledRef.current = true;
2680
+ return {
2681
+ startAnimation: () => controls.start("animate"),
2682
+ stopAnimation: () => controls.start("normal"),
2683
+ triggerCopied
2684
+ };
2685
+ });
2686
+ const handleMouseEnter = useCallback((e) => {
2687
+ if (!copied) if (isControlledRef.current) onMouseEnter?.(e);
2688
+ else controls.start("animate").catch(() => void 0);
2689
+ }, [
2690
+ controls,
2691
+ onMouseEnter,
2692
+ copied
2693
+ ]);
2694
+ const handleMouseLeave = useCallback((e) => {
2695
+ if (!copied) if (isControlledRef.current) onMouseLeave?.(e);
2696
+ else controls.start("normal").catch(() => void 0);
2697
+ }, [
2698
+ controls,
2699
+ onMouseLeave,
2700
+ copied
2701
+ ]);
2702
+ return /* @__PURE__ */ jsx("div", {
2703
+ "aria-hidden": "true",
2704
+ className: cn("relative inline-flex items-center justify-center", className),
2705
+ onMouseEnter: handleMouseEnter,
2706
+ onMouseLeave: handleMouseLeave,
2707
+ ...props,
2708
+ children: /* @__PURE__ */ jsx(AnimatePresence, {
2709
+ mode: "wait",
2710
+ children: copied ? /* @__PURE__ */ jsx(motion.svg, {
2711
+ initial: {
2712
+ opacity: 0,
2713
+ scale: .5
2714
+ },
2715
+ animate: {
2716
+ opacity: 1,
2717
+ scale: 1
2718
+ },
2719
+ exit: {
2720
+ opacity: 0,
2721
+ scale: .5
2722
+ },
2723
+ transition: { duration: .15 },
2724
+ fill: "none",
2725
+ height: size,
2726
+ stroke: "currentColor",
2727
+ strokeLinecap: "round",
2728
+ strokeLinejoin: "round",
2729
+ strokeWidth: "2",
2730
+ viewBox: "0 0 24 24",
2731
+ width: size,
2732
+ xmlns: "http://www.w3.org/2000/svg",
2733
+ className: "text-green-500",
2734
+ children: /* @__PURE__ */ jsx(motion.path, {
2735
+ d: "M20 6 9 17l-5-5",
2736
+ initial: { pathLength: 0 },
2737
+ animate: { pathLength: 1 },
2738
+ transition: {
2739
+ delay: .1,
2740
+ duration: .3
2741
+ }
2742
+ })
2743
+ }, "check") : /* @__PURE__ */ jsx(motion.div, {
2744
+ initial: {
2745
+ opacity: 0,
2746
+ scale: .5
2747
+ },
2748
+ animate: {
2749
+ opacity: 1,
2750
+ scale: 1
2751
+ },
2752
+ exit: {
2753
+ opacity: 0,
2754
+ scale: .5
2755
+ },
2756
+ transition: { duration: .15 },
2757
+ children: /* @__PURE__ */ jsxs("svg", {
2758
+ fill: "none",
2759
+ height: size,
2760
+ stroke: "currentColor",
2761
+ strokeLinecap: "round",
2762
+ strokeLinejoin: "round",
2763
+ strokeWidth: "2",
2764
+ viewBox: "0 0 24 24",
2765
+ width: size,
2766
+ xmlns: "http://www.w3.org/2000/svg",
2767
+ children: [/* @__PURE__ */ jsx(motion.rect, {
2768
+ animate: controls,
2769
+ height: "14",
2770
+ rx: "2",
2771
+ ry: "2",
2772
+ transition: SPRING_TRANSITION,
2773
+ variants: {
2774
+ animate: {
2775
+ translateX: -3,
2776
+ translateY: -3
2777
+ },
2778
+ normal: {
2779
+ translateX: 0,
2780
+ translateY: 0
2781
+ }
2782
+ },
2783
+ width: "14",
2784
+ x: "8",
2785
+ y: "8"
2786
+ }), /* @__PURE__ */ jsx(motion.path, {
2787
+ animate: controls,
2788
+ d: "M8 4V2H6a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.75a2 2 0 0 0-2-2H16a2 2 0 0 0-2-2h-2z",
2789
+ transition: SPRING_TRANSITION,
2790
+ variants: {
2791
+ animate: {
2792
+ x: 3,
2793
+ y: 3
2794
+ },
2795
+ normal: {
2796
+ x: 0,
2797
+ y: 0
2798
+ }
2799
+ }
2800
+ })]
2801
+ })
2802
+ }, "copy")
2803
+ })
2804
+ });
2805
+ });
2806
+ CopyCheckIcon.displayName = "CopyCheckIcon";
2807
+
2808
+ //#endregion
2809
+ //#region src/components/icons/dollar-sign/dollar-sign.tsx
2810
+ const DOLLAR_MAIN_VARIANTS = {
2811
+ animate: {
2812
+ opacity: [0, 1],
2813
+ pathLength: [0, 1],
2814
+ transition: {
2815
+ duration: .6,
2816
+ opacity: { duration: .1 }
2817
+ }
2818
+ },
2819
+ normal: {
2820
+ opacity: 1,
2821
+ pathLength: 1,
2822
+ transition: {
2823
+ duration: .4,
2824
+ opacity: { duration: .1 }
2825
+ }
2826
+ }
2827
+ };
2828
+ const DOLLAR_SECONDARY_VARIANTS = {
2829
+ animate: {
2830
+ opacity: [0, 1],
2831
+ pathLength: [0, 1],
2832
+ pathOffset: [1, 0],
2833
+ transition: {
2834
+ delay: .5,
2835
+ duration: .4,
2836
+ opacity: {
2837
+ delay: .5,
2838
+ duration: .1
2839
+ }
2840
+ }
2841
+ },
2842
+ normal: {
2843
+ opacity: 1,
2844
+ pathLength: 1,
2845
+ pathOffset: 0,
2846
+ transition: {
2847
+ delay: .3,
2848
+ duration: .3,
2849
+ opacity: {
2850
+ delay: .3,
2851
+ duration: .1
2852
+ }
2853
+ }
2854
+ }
2855
+ };
2856
+ const DollarSignIcon = forwardRef((props, ref) => /* @__PURE__ */ jsx(AnimatedIcon, {
2857
+ ref,
2858
+ ...props,
2859
+ children: (controls, size) => /* @__PURE__ */ jsxs("svg", {
2860
+ fill: "none",
2861
+ height: size,
2862
+ stroke: "currentColor",
2863
+ strokeLinecap: "round",
2864
+ strokeLinejoin: "round",
2865
+ strokeWidth: "2",
2866
+ viewBox: "0 0 24 24",
2867
+ width: size,
2868
+ xmlns: "http://www.w3.org/2000/svg",
2869
+ children: [/* @__PURE__ */ jsx(motion.path, {
2870
+ animate: controls,
2871
+ d: "M17 5H9.5a3.5 3.5 0 0 0 0 7h5a3.5 3.5 0 0 1 0 7H6",
2872
+ initial: "normal",
2873
+ variants: DOLLAR_MAIN_VARIANTS
2874
+ }), /* @__PURE__ */ jsx(motion.path, {
2875
+ animate: controls,
2876
+ d: "M12 22 L12 2",
2877
+ initial: "normal",
2878
+ variants: DOLLAR_SECONDARY_VARIANTS
2879
+ })]
2880
+ })
2881
+ }));
2882
+ DollarSignIcon.displayName = "DollarSignIcon";
2883
+
2884
+ //#endregion
2885
+ //#region src/components/icons/download/download.tsx
2886
+ const DownloadIcon = forwardRef((props, ref) => /* @__PURE__ */ jsx(AnimatedIcon, {
2887
+ ref,
2888
+ ...props,
2889
+ children: (controls, size) => /* @__PURE__ */ jsxs("svg", {
2890
+ fill: "none",
2891
+ height: size,
2892
+ stroke: "currentColor",
2893
+ strokeLinecap: "round",
2894
+ strokeLinejoin: "round",
2895
+ strokeWidth: "2",
2896
+ viewBox: "0 0 24 24",
2897
+ width: size,
2898
+ xmlns: "http://www.w3.org/2000/svg",
2899
+ children: [
2900
+ /* @__PURE__ */ jsx(motion.path, {
2901
+ animate: controls,
2902
+ d: "M12 15V3",
2903
+ transition: {
2904
+ duration: .3,
2905
+ times: [
2906
+ 0,
2907
+ .4,
2908
+ 1
2909
+ ]
2910
+ },
2911
+ variants: {
2912
+ animate: { y: [
2913
+ 0,
2914
+ 2,
2915
+ 0
2916
+ ] },
2917
+ normal: { y: 0 }
2918
+ }
2919
+ }),
2920
+ /* @__PURE__ */ jsx(motion.path, {
2921
+ animate: controls,
2922
+ d: "m8 11 4 4 4-4",
2923
+ transition: {
2924
+ duration: .3,
2925
+ times: [
2926
+ 0,
2927
+ .4,
2928
+ 1
2929
+ ]
2930
+ },
2931
+ variants: {
2932
+ animate: { y: [
2933
+ 0,
2934
+ 2,
2935
+ 0
2936
+ ] },
2937
+ normal: { y: 0 }
2938
+ }
2939
+ }),
2940
+ /* @__PURE__ */ jsx("path", { d: "M20 21H4" })
2941
+ ]
2942
+ })
2943
+ }));
2944
+ DownloadIcon.displayName = "DownloadIcon";
2945
+
2946
+ //#endregion
2947
+ //#region src/components/icons/fingerprint/fingerprint.tsx
2948
+ const PATH_VARIANTS$7 = {
2949
+ animate: {
2950
+ opacity: [
2951
+ 0,
2952
+ 0,
2953
+ 1,
2954
+ 1,
2955
+ 1
2956
+ ],
2957
+ pathLength: [
2958
+ .1,
2959
+ .3,
2960
+ .5,
2961
+ .7,
2962
+ .9,
2963
+ 1
2964
+ ],
2965
+ transition: {
2966
+ opacity: { duration: .5 },
2967
+ pathLength: { duration: 2 }
2968
+ }
2969
+ },
2970
+ normal: {
2971
+ opacity: 1,
2972
+ pathLength: 1
2973
+ }
2974
+ };
2975
+ const FINGERPRINT_PATHS = [
2976
+ { d: "M12 10a2 2 0 0 0-2 2c0 1.02-.1 2.51-.26 4" },
2977
+ { d: "M14 13.12c0 2.38 0 6.38-1 8.88" },
2978
+ { d: "M17.29 21.02c.12-.6.43-2.3.5-3.02" },
2979
+ { d: "M2 12a10 10 0 0 1 18-6" },
2980
+ { d: "M2 16h.01" },
2981
+ { d: "M21.8 16c.2-2 .131-5.354 0-6" },
2982
+ { d: "M5 19.5C5.5 18 6 15 6 12a6 6 0 0 1 .34-2" },
2983
+ { d: "M8.65 22c.21-.66.45-1.32.57-2" },
2984
+ { d: "M9 6.8a6 6 0 0 1 9 5.2v2" }
2985
+ ];
2986
+ const FingerprintIcon = forwardRef((props, ref) => /* @__PURE__ */ jsx(AnimatedIcon, {
2987
+ ref,
2988
+ ...props,
2989
+ children: (controls, size) => /* @__PURE__ */ jsxs("svg", {
2990
+ fill: "none",
2991
+ height: size,
2992
+ stroke: "currentColor",
2993
+ strokeLinecap: "round",
2994
+ strokeLinejoin: "round",
2995
+ strokeWidth: "2",
2996
+ viewBox: "0 0 24 24",
2997
+ width: size,
2998
+ xmlns: "http://www.w3.org/2000/svg",
2999
+ children: [FINGERPRINT_PATHS.map(({ d }) => /* @__PURE__ */ jsx("path", {
3000
+ d,
3001
+ strokeOpacity: .4
3002
+ }, d)), FINGERPRINT_PATHS.map(({ d }) => /* @__PURE__ */ jsx(motion.path, {
3003
+ animate: controls,
3004
+ d,
3005
+ variants: PATH_VARIANTS$7
3006
+ }, `motion-${d}`))]
3007
+ })
3008
+ }));
3009
+ FingerprintIcon.displayName = "FingerprintIcon";
3010
+
3011
+ //#endregion
3012
+ //#region src/components/icons/home/home.tsx
3013
+ const DEFAULT_TRANSITION$2 = {
3014
+ duration: .6,
3015
+ opacity: { duration: .2 }
3016
+ };
3017
+ const PATH_VARIANTS$6 = {
3018
+ animate: {
3019
+ opacity: [0, 1],
3020
+ pathLength: [0, 1]
3021
+ },
3022
+ normal: {
3023
+ opacity: 1,
3024
+ pathLength: 1
3025
+ }
3026
+ };
3027
+ const HomeIcon = forwardRef((props, ref) => /* @__PURE__ */ jsx(AnimatedIcon, {
3028
+ ref,
3029
+ ...props,
3030
+ children: (controls, size) => /* @__PURE__ */ jsxs("svg", {
3031
+ fill: "none",
3032
+ height: size,
3033
+ stroke: "currentColor",
3034
+ strokeLinecap: "round",
3035
+ strokeLinejoin: "round",
3036
+ strokeWidth: "2",
3037
+ viewBox: "0 0 24 24",
3038
+ width: size,
3039
+ xmlns: "http://www.w3.org/2000/svg",
3040
+ children: [/* @__PURE__ */ jsx("path", { d: "M3 10a2 2 0 0 1 .709-1.528l7-5.999a2 2 0 0 1 2.582 0l7 5.999A2 2 0 0 1 21 10v9a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z" }), /* @__PURE__ */ jsx(motion.path, {
3041
+ animate: controls,
3042
+ d: "M15 21v-8a1 1 0 0 0-1-1h-4a1 1 0 0 0-1 1v8",
3043
+ transition: DEFAULT_TRANSITION$2,
3044
+ variants: PATH_VARIANTS$6
3045
+ })]
3046
+ })
3047
+ }));
3048
+ HomeIcon.displayName = "HomeIcon";
3049
+
3050
+ //#endregion
3051
+ //#region src/components/icons/key/key.tsx
3052
+ const KeyIcon = forwardRef((props, ref) => /* @__PURE__ */ jsx(AnimatedIcon, {
3053
+ ref,
3054
+ ...props,
3055
+ children: (controls, size) => /* @__PURE__ */ jsxs(motion.svg, {
3056
+ animate: controls,
3057
+ fill: "none",
3058
+ height: size,
3059
+ initial: "normal",
3060
+ stroke: "currentColor",
3061
+ strokeLinecap: "round",
3062
+ strokeLinejoin: "round",
3063
+ strokeWidth: "2",
3064
+ style: {
3065
+ originX: .3,
3066
+ originY: .7
3067
+ },
3068
+ variants: {
3069
+ animate: {
3070
+ rotate: [
3071
+ -3,
3072
+ -33,
3073
+ -25,
3074
+ -28
3075
+ ],
3076
+ transition: {
3077
+ duration: .6,
3078
+ ease: "easeInOut",
3079
+ times: [
3080
+ 0,
3081
+ .6,
3082
+ .8,
3083
+ 1
3084
+ ]
3085
+ }
3086
+ },
3087
+ normal: {
3088
+ rotate: 0,
3089
+ transition: {
3090
+ damping: 14,
3091
+ duration: .8,
3092
+ stiffness: 120,
3093
+ type: "spring"
3094
+ }
3095
+ }
3096
+ },
3097
+ viewBox: "0 0 24 24",
3098
+ width: size,
3099
+ xmlns: "http://www.w3.org/2000/svg",
3100
+ children: [
3101
+ /* @__PURE__ */ jsx("path", { d: "m15.5 7.5 2.3 2.3a1 1 0 0 0 1.4 0l2.1-2.1a1 1 0 0 0 0-1.4L19 4" }),
3102
+ /* @__PURE__ */ jsx("path", { d: "m21 2-9.6 9.6" }),
3103
+ /* @__PURE__ */ jsx("circle", {
3104
+ cx: "7.5",
3105
+ cy: "15.5",
3106
+ r: "5.5"
3107
+ })
3108
+ ]
3109
+ })
3110
+ }));
3111
+ KeyIcon.displayName = "KeyIcon";
3112
+
3113
+ //#endregion
3114
+ //#region src/components/icons/layout-panel-top/layout-panel-top.tsx
3115
+ const LayoutPanelTopIcon = forwardRef((props, ref) => /* @__PURE__ */ jsx(AnimatedIcon, {
3116
+ ref,
3117
+ ...props,
3118
+ children: (controls, size) => /* @__PURE__ */ jsxs("svg", {
3119
+ fill: "none",
3120
+ height: size,
3121
+ stroke: "currentColor",
3122
+ strokeLinecap: "round",
3123
+ strokeLinejoin: "round",
3124
+ strokeWidth: "2",
3125
+ viewBox: "0 0 24 24",
3126
+ width: size,
3127
+ xmlns: "http://www.w3.org/2000/svg",
3128
+ children: [
3129
+ /* @__PURE__ */ jsx(motion.rect, {
3130
+ animate: controls,
3131
+ height: "7",
3132
+ initial: "normal",
3133
+ rx: "1",
3134
+ variants: {
3135
+ animate: {
3136
+ opacity: [0, 1],
3137
+ transition: {
3138
+ duration: .5,
3139
+ opacity: {
3140
+ duration: .5,
3141
+ times: [.2, 1]
3142
+ }
3143
+ },
3144
+ translateY: [-5, 0]
3145
+ },
3146
+ normal: {
3147
+ opacity: 1,
3148
+ translateY: 0
3149
+ }
3150
+ },
3151
+ width: "18",
3152
+ x: "3",
3153
+ y: "3"
3154
+ }),
3155
+ /* @__PURE__ */ jsx(motion.rect, {
3156
+ animate: controls,
3157
+ height: "7",
3158
+ initial: "normal",
3159
+ rx: "1",
3160
+ variants: {
3161
+ animate: {
3162
+ opacity: [0, 1],
3163
+ transition: {
3164
+ duration: .5,
3165
+ opacity: {
3166
+ duration: .7,
3167
+ times: [.5, 1]
3168
+ },
3169
+ translateX: { delay: .3 }
3170
+ },
3171
+ translateX: [-10, 0]
3172
+ },
3173
+ normal: {
3174
+ opacity: 1,
3175
+ translateX: 0
3176
+ }
3177
+ },
3178
+ width: "7",
3179
+ x: "3",
3180
+ y: "14"
3181
+ }),
3182
+ /* @__PURE__ */ jsx(motion.rect, {
3183
+ animate: controls,
3184
+ height: "7",
3185
+ initial: "normal",
3186
+ rx: "1",
3187
+ variants: {
3188
+ animate: {
3189
+ opacity: [0, 1],
3190
+ transition: {
3191
+ duration: .5,
3192
+ opacity: {
3193
+ duration: .8,
3194
+ times: [.5, 1]
3195
+ },
3196
+ translateX: { delay: .4 }
3197
+ },
3198
+ translateX: [10, 0]
3199
+ },
3200
+ normal: {
3201
+ opacity: 1,
3202
+ translateX: 0
3203
+ }
3204
+ },
3205
+ width: "7",
3206
+ x: "14",
3207
+ y: "14"
3208
+ })
3209
+ ]
3210
+ })
3211
+ }));
3212
+ LayoutPanelTopIcon.displayName = "LayoutPanelTopIcon";
3213
+
3214
+ //#endregion
3215
+ //#region src/components/icons/link/link.tsx
3216
+ const PATH_VARIANTS$5 = {
3217
+ animate: {
3218
+ pathLength: [
3219
+ 1,
3220
+ .97,
3221
+ 1,
3222
+ .97,
3223
+ 1
3224
+ ],
3225
+ pathOffset: [
3226
+ 0,
3227
+ .05,
3228
+ 0,
3229
+ .05,
3230
+ 0
3231
+ ],
3232
+ rotate: [
3233
+ 0,
3234
+ -5,
3235
+ 0
3236
+ ],
3237
+ transition: {
3238
+ duration: 1,
3239
+ ease: "easeInOut",
3240
+ rotate: { duration: .5 },
3241
+ times: [
3242
+ 0,
3243
+ .2,
3244
+ .4,
3245
+ .6,
3246
+ 1
3247
+ ]
3248
+ }
3249
+ },
3250
+ normal: {
3251
+ pathLength: 1,
3252
+ pathOffset: 0,
3253
+ rotate: 0
3254
+ }
3255
+ };
3256
+ const LinkIcon = forwardRef((props, ref) => /* @__PURE__ */ jsx(AnimatedIcon, {
3257
+ ref,
3258
+ ...props,
3259
+ children: (controls, size) => /* @__PURE__ */ jsxs("svg", {
3260
+ fill: "none",
3261
+ height: size,
3262
+ stroke: "currentColor",
3263
+ strokeLinecap: "round",
3264
+ strokeLinejoin: "round",
3265
+ strokeWidth: "2",
3266
+ viewBox: "0 0 24 24",
3267
+ width: size,
3268
+ xmlns: "http://www.w3.org/2000/svg",
3269
+ children: [/* @__PURE__ */ jsx(motion.path, {
3270
+ animate: controls,
3271
+ d: "M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71",
3272
+ variants: PATH_VARIANTS$5
3273
+ }), /* @__PURE__ */ jsx(motion.path, {
3274
+ animate: controls,
3275
+ d: "M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71",
3276
+ variants: PATH_VARIANTS$5
3277
+ })]
3278
+ })
3279
+ }));
3280
+ LinkIcon.displayName = "LinkIcon";
3281
+
3282
+ //#endregion
3283
+ //#region src/components/icons/mcp-tools/mcp-tools.tsx
3284
+ const ClaudeLogo = ({ size = 32, ...props }) => /* @__PURE__ */ jsx("svg", {
3285
+ width: size,
3286
+ height: size,
3287
+ viewBox: "0 0 24 24",
3288
+ fill: "none",
3289
+ xmlns: "http://www.w3.org/2000/svg",
3290
+ ...props,
3291
+ children: /* @__PURE__ */ jsx("path", {
3292
+ d: "M4.709 15.955l4.72-2.647.08-.23-.08-.128H9.2l-.79-.048-2.698-.073-2.339-.097-2.266-.122-.571-.121L0 11.784l.055-.352.48-.321.686.06 1.52.103 2.278.158 1.652.097 2.449.255h.389l.055-.157-.134-.098-.103-.097-2.358-1.596-2.552-1.688-1.336-.972-.724-.491-.364-.462-.158-1.008.656-.722.881.06.225.061.893.686 1.908 1.476 2.491 1.833.365.304.145-.103.019-.073-.164-.274-1.355-2.446-1.446-2.49-.644-1.032-.17-.619a2.97 2.97 0 01-.104-.729L6.283.134 6.696 0l.996.134.42.364.62 1.414 1.002 2.229 1.555 3.03.456.898.243.832.091.255h.158V9.01l.128-1.706.237-2.095.23-2.695.08-.76.376-.91.747-.492.584.28.48.685-.067.444-.286 1.851-.559 2.903-.364 1.942h.212l.243-.242.985-1.306 1.652-2.064.73-.82.85-.904.547-.431h1.033l.76 1.129-.34 1.166-1.064 1.347-.881 1.142-1.264 1.7-.79 1.36.073.11.188-.02 2.856-.606 1.543-.28 1.841-.315.833.388.091.395-.328.807-1.969.486-2.309.462-3.439.813-.042.03.049.061 1.549.146.662.036h1.622l3.02.225.79.522.474.638-.079.485-1.215.62-1.64-.389-3.829-.91-1.312-.329h-.182v.11l1.093 1.068 2.006 1.81 2.509 2.33.127.578-.322.455-.34-.049-2.205-1.657-.851-.747-1.926-1.62h-.128v.17l.444.649 2.345 3.521.122 1.08-.17.353-.608.213-.668-.122-1.374-1.925-1.415-2.167-1.143-1.943-.14.08-.674 7.254-.316.37-.729.28-.607-.461-.322-.747.322-1.476.389-1.924.315-1.53.286-1.9.17-.632-.012-.042-.14.018-1.434 1.967-2.18 2.945-1.726 1.845-.414.164-.717-.37.067-.662.401-.589 2.388-3.036 1.44-1.882.93-1.086-.006-.158h-.055L4.132 18.56l-1.13.146-.487-.456.061-.746.231-.243 1.908-1.312-.006.006z",
3293
+ fill: "#D97757",
3294
+ fillRule: "nonzero"
3295
+ })
3296
+ });
3297
+ const CursorLogo = ({ size = 32, ...props }) => /* @__PURE__ */ jsxs("svg", {
3298
+ width: size,
3299
+ height: size,
3300
+ viewBox: "0 0 24 24",
3301
+ fill: "none",
3302
+ xmlns: "http://www.w3.org/2000/svg",
3303
+ ...props,
3304
+ children: [
3305
+ /* @__PURE__ */ jsx("rect", {
3306
+ width: "24",
3307
+ height: "24",
3308
+ rx: "5",
3309
+ fill: "#F5F5F5"
3310
+ }),
3311
+ /* @__PURE__ */ jsx("path", {
3312
+ d: "M12 4L5 8v8l7 4 7-4V8l-7-4z",
3313
+ fill: "#E5E5E5"
3314
+ }),
3315
+ /* @__PURE__ */ jsx("path", {
3316
+ d: "M12 4L5 8l7 4 7-4-7-4z",
3317
+ fill: "#808080"
3318
+ }),
3319
+ /* @__PURE__ */ jsx("path", {
3320
+ d: "M12 12l7-4v8l-7 4v-8z",
3321
+ fill: "#666"
3322
+ }),
3323
+ /* @__PURE__ */ jsx("path", {
3324
+ d: "M12 12L5 8v8l7 4v-8z",
3325
+ fill: "#999"
3326
+ })
3327
+ ]
3328
+ });
3329
+ const VSCodeLogo = ({ size = 32, ...props }) => /* @__PURE__ */ jsxs("svg", {
3330
+ width: size,
3331
+ height: size,
3332
+ viewBox: "0 0 100 100",
3333
+ fill: "none",
3334
+ xmlns: "http://www.w3.org/2000/svg",
3335
+ ...props,
3336
+ children: [/* @__PURE__ */ jsx("mask", {
3337
+ id: "vsc-mask",
3338
+ maskUnits: "userSpaceOnUse",
3339
+ x: "0",
3340
+ y: "0",
3341
+ width: "100",
3342
+ height: "100",
3343
+ children: /* @__PURE__ */ jsx("path", {
3344
+ fillRule: "evenodd",
3345
+ clipRule: "evenodd",
3346
+ d: "M70.912 99.317C72.487 99.931 74.283 99.891 75.873 99.126L96.461 89.22C98.624 88.179 100 85.989 100 83.587V16.413C100 14.011 98.624 11.822 96.461 10.781L75.873 0.874C73.786 -0.13 71.345 0.116 69.513 1.447C69.252 1.637 69.003 1.849 68.769 2.083L29.355 38.041L12.187 25.01C10.589 23.797 8.354 23.896 6.869 25.246L1.363 30.255C-0.453 31.906 -0.455 34.763 1.359 36.417L16.247 50L1.359 63.583C-0.455 65.237 -0.453 68.094 1.363 69.745L6.869 74.754C8.354 76.104 10.589 76.204 12.187 74.99L29.355 61.959L68.769 97.917C69.392 98.541 70.125 99.01 70.912 99.317ZM75.015 27.299L45.109 50L75.015 72.701V27.299Z",
3347
+ fill: "#fff"
3348
+ })
3349
+ }), /* @__PURE__ */ jsxs("g", {
3350
+ mask: "url(#vsc-mask)",
3351
+ children: [
3352
+ /* @__PURE__ */ jsx("path", {
3353
+ d: "M96.461 10.796L75.857 0.876C73.472 -0.273 70.622 0.212 68.75 2.083L1.299 63.583C-0.516 65.237 -0.514 68.094 1.303 69.745L6.813 74.754C8.298 76.104 10.535 76.204 12.134 74.99L93.361 13.37C96.086 11.303 100 13.246 100 16.667V16.427C100 14.027 98.625 11.838 96.461 10.796Z",
3354
+ fill: "#0065A9"
3355
+ }),
3356
+ /* @__PURE__ */ jsx("path", {
3357
+ d: "M96.461 89.204L75.857 99.124C73.472 100.273 70.622 99.788 68.75 97.917L1.299 36.417C-0.516 34.763 -0.514 31.906 1.303 30.255L6.813 25.246C8.298 23.896 10.535 23.796 12.134 25.009L93.361 86.63C96.086 88.697 100 86.754 100 83.333V83.573C100 85.974 98.625 88.162 96.461 89.204Z",
3358
+ fill: "#007ACC"
3359
+ }),
3360
+ /* @__PURE__ */ jsx("path", {
3361
+ d: "M75.858 99.126C73.472 100.274 70.622 99.788 68.75 97.917C71.056 100.223 75 98.59 75 95.328V4.672C75 1.41 71.056 -0.223 68.75 2.083C70.622 0.211 73.472 -0.274 75.858 0.874L96.459 10.781C98.623 11.822 100 14.011 100 16.413V83.587C100 85.989 98.623 88.179 96.459 89.22L75.858 99.126Z",
3362
+ fill: "#1F9CF0"
3363
+ })
3364
+ ]
3365
+ })]
3366
+ });
3367
+ const OpenAILogo = ({ size = 32, ...props }) => /* @__PURE__ */ jsxs("svg", {
3368
+ width: size,
3369
+ height: size,
3370
+ viewBox: "0 0 24 24",
3371
+ fill: "none",
3372
+ xmlns: "http://www.w3.org/2000/svg",
3373
+ ...props,
3374
+ children: [
3375
+ /* @__PURE__ */ jsx("defs", { children: /* @__PURE__ */ jsxs("linearGradient", {
3376
+ gradientUnits: "userSpaceOnUse",
3377
+ id: "codex-grad",
3378
+ x1: "12",
3379
+ x2: "12",
3380
+ y1: "3",
3381
+ y2: "21",
3382
+ children: [
3383
+ /* @__PURE__ */ jsx("stop", { stopColor: "#B1A7FF" }),
3384
+ /* @__PURE__ */ jsx("stop", {
3385
+ offset: ".5",
3386
+ stopColor: "#7A9DFF"
3387
+ }),
3388
+ /* @__PURE__ */ jsx("stop", {
3389
+ offset: "1",
3390
+ stopColor: "#3941FF"
3391
+ })
3392
+ ]
3393
+ }) }),
3394
+ /* @__PURE__ */ jsx("path", {
3395
+ d: "M19.503 0H4.496A4.496 4.496 0 000 4.496v15.007A4.496 4.496 0 004.496 24h15.007A4.496 4.496 0 0024 19.503V4.496A4.496 4.496 0 0019.503 0z",
3396
+ fill: "#F0F6FF"
3397
+ }),
3398
+ /* @__PURE__ */ jsx("path", {
3399
+ d: "M9.064 3.344a4.578 4.578 0 012.285-.312c1 .115 1.891.54 2.673 1.275.01.01.024.017.037.021a.09.09 0 00.043 0 4.55 4.55 0 013.046.275l.047.022.116.057a4.581 4.581 0 012.188 2.399c.209.51.313 1.041.315 1.595a4.24 4.24 0 01-.134 1.223.123.123 0 00.03.115c.594.607.988 1.33 1.183 2.17.289 1.425-.007 2.71-.887 3.854l-.136.166a4.548 4.548 0 01-2.201 1.388.123.123 0 00-.081.076c-.191.551-.383 1.023-.74 1.494-.9 1.187-2.222 1.846-3.711 1.838-1.187-.006-2.239-.44-3.157-1.302a.107.107 0 00-.105-.024c-.388.125-.78.143-1.204.138a4.441 4.441 0 01-1.945-.466 4.544 4.544 0 01-1.61-1.335c-.152-.202-.303-.392-.414-.617a5.81 5.81 0 01-.37-.961 4.582 4.582 0 01-.014-2.298.124.124 0 00.006-.056.085.085 0 00-.027-.048 4.467 4.467 0 01-1.034-1.651 3.896 3.896 0 01-.251-1.192 5.189 5.189 0 01.141-1.6c.337-1.112.982-1.985 1.933-2.618.212-.141.413-.251.601-.33.215-.089.43-.164.646-.227a.098.098 0 00.065-.066 4.51 4.51 0 01.829-1.615 4.535 4.535 0 011.837-1.388zm3.482 10.565a.637.637 0 000 1.272h3.636a.637.637 0 100-1.272h-3.636zM8.462 9.23a.637.637 0 00-1.106.631l1.272 2.224-1.266 2.136a.636.636 0 101.095.649l1.454-2.455a.636.636 0 00.005-.64L8.462 9.23z",
3400
+ fill: "url(#codex-grad)"
3401
+ })
3402
+ ]
3403
+ });
3404
+ const WindsurfLogo = ({ size = 32, ...props }) => /* @__PURE__ */ jsx("svg", {
3405
+ width: size,
3406
+ height: size,
3407
+ viewBox: "0 0 1024 1024",
3408
+ fill: "none",
3409
+ xmlns: "http://www.w3.org/2000/svg",
3410
+ ...props,
3411
+ children: /* @__PURE__ */ jsx("path", {
3412
+ d: "M897.246 286.869H889.819C850.735 286.808 819.017 318.46 819.017 357.539V515.589C819.017 547.15 792.93 572.716 761.882 572.716C743.436 572.716 725.02 563.433 714.093 547.85L552.673 317.304C539.28 298.16 517.486 286.747 493.895 286.747C457.094 286.747 423.976 318.034 423.976 356.657V515.619C423.976 547.181 398.103 572.746 366.842 572.746C348.335 572.746 329.949 563.463 319.021 547.881L138.395 289.882C134.316 284.038 125.154 286.93 125.154 294.052V431.892C125.154 438.862 127.285 445.619 131.272 451.34L309.037 705.2C319.539 720.204 335.033 731.344 352.9 735.392C397.616 745.557 438.77 711.135 438.77 667.278V508.406C438.77 476.845 464.339 451.279 495.904 451.279H495.995C515.02 451.279 532.857 460.562 543.785 476.145L705.235 706.661C718.659 725.835 739.327 737.218 763.983 737.218C801.606 737.218 833.841 705.9 833.841 667.308V508.376C833.841 476.815 859.41 451.249 890.975 451.249H897.276C901.233 451.249 904.43 448.053 904.43 444.097V294.021C904.43 290.065 901.233 286.869 897.276 286.869H897.246Z",
3413
+ fill: "#0B100F"
3414
+ })
3415
+ });
3416
+
3417
+ //#endregion
3418
+ //#region src/components/icons/moon/moon.tsx
3419
+ const SVG_VARIANTS = {
3420
+ animate: { rotate: [
3421
+ 0,
3422
+ -10,
3423
+ 10,
3424
+ -5,
3425
+ 5,
3426
+ 0
3427
+ ] },
3428
+ normal: { rotate: 0 }
3429
+ };
3430
+ const SVG_TRANSITION = {
3431
+ duration: 1.2,
3432
+ ease: "easeInOut"
3433
+ };
3434
+ const MoonIcon = forwardRef((props, ref) => /* @__PURE__ */ jsx(AnimatedIcon, {
3435
+ ref,
3436
+ ...props,
3437
+ children: (controls, size) => /* @__PURE__ */ jsx(motion.svg, {
3438
+ animate: controls,
3439
+ fill: "none",
3440
+ height: size,
3441
+ stroke: "currentColor",
3442
+ strokeLinecap: "round",
3443
+ strokeLinejoin: "round",
3444
+ strokeWidth: "2",
3445
+ transition: SVG_TRANSITION,
3446
+ variants: SVG_VARIANTS,
3447
+ viewBox: "0 0 24 24",
3448
+ width: size,
3449
+ xmlns: "http://www.w3.org/2000/svg",
3450
+ children: /* @__PURE__ */ jsx("path", { d: "M12 3a6 6 0 0 0 9 9 9 9 0 1 1-9-9Z" })
3451
+ })
3452
+ }));
3453
+ MoonIcon.displayName = "MoonIcon";
3454
+
3455
+ //#endregion
3456
+ //#region src/components/icons/panel-left-close/panel-left-close.tsx
3457
+ const DEFAULT_TRANSITION$1 = {
3458
+ duration: .5,
3459
+ times: [
3460
+ 0,
3461
+ .4,
3462
+ 1
3463
+ ]
3464
+ };
3465
+ const PATH_VARIANTS$4 = {
3466
+ animate: { x: [
3467
+ 0,
3468
+ -1.5,
3469
+ 0
3470
+ ] },
3471
+ normal: { x: 0 }
3472
+ };
3473
+ const PanelLeftCloseIcon = forwardRef((props, ref) => /* @__PURE__ */ jsx(AnimatedIcon, {
3474
+ ref,
3475
+ ...props,
3476
+ children: (controls, size) => /* @__PURE__ */ jsxs("svg", {
3477
+ fill: "none",
3478
+ height: size,
3479
+ stroke: "currentColor",
3480
+ strokeLinecap: "round",
3481
+ strokeLinejoin: "round",
3482
+ strokeWidth: "2",
3483
+ viewBox: "0 0 24 24",
3484
+ width: size,
3485
+ xmlns: "http://www.w3.org/2000/svg",
3486
+ children: [
3487
+ /* @__PURE__ */ jsx("rect", {
3488
+ height: "18",
3489
+ rx: "2",
3490
+ width: "18",
3491
+ x: "3",
3492
+ y: "3"
3493
+ }),
3494
+ /* @__PURE__ */ jsx("path", { d: "M9 3v18" }),
3495
+ /* @__PURE__ */ jsx(motion.path, {
3496
+ animate: controls,
3497
+ d: "m16 15-3-3 3-3",
3498
+ transition: DEFAULT_TRANSITION$1,
3499
+ variants: PATH_VARIANTS$4
3500
+ })
3501
+ ]
3502
+ })
3503
+ }));
3504
+ PanelLeftCloseIcon.displayName = "PanelLeftCloseIcon";
3505
+
3506
+ //#endregion
3507
+ //#region src/components/icons/panel-left-open/panel-left-open.tsx
3508
+ const DEFAULT_TRANSITION = {
3509
+ duration: .5,
3510
+ times: [
3511
+ 0,
3512
+ .4,
3513
+ 1
3514
+ ]
3515
+ };
3516
+ const PATH_VARIANTS$3 = {
3517
+ animate: { x: [
3518
+ 0,
3519
+ 1.5,
3520
+ 0
3521
+ ] },
3522
+ normal: { x: 0 }
3523
+ };
3524
+ const PanelLeftOpenIcon = forwardRef((props, ref) => /* @__PURE__ */ jsx(AnimatedIcon, {
3525
+ ref,
3526
+ ...props,
3527
+ children: (controls, size) => /* @__PURE__ */ jsxs("svg", {
3528
+ fill: "none",
3529
+ height: size,
3530
+ stroke: "currentColor",
3531
+ strokeLinecap: "round",
3532
+ strokeLinejoin: "round",
3533
+ strokeWidth: "2",
3534
+ viewBox: "0 0 24 24",
3535
+ width: size,
3536
+ xmlns: "http://www.w3.org/2000/svg",
3537
+ children: [
3538
+ /* @__PURE__ */ jsx("rect", {
3539
+ height: "18",
3540
+ rx: "2",
3541
+ width: "18",
3542
+ x: "3",
3543
+ y: "3"
3544
+ }),
3545
+ /* @__PURE__ */ jsx("path", { d: "M9 3v18" }),
3546
+ /* @__PURE__ */ jsx(motion.path, {
3547
+ animate: controls,
3548
+ d: "m14 9 3 3-3 3",
3549
+ transition: DEFAULT_TRANSITION,
3550
+ variants: PATH_VARIANTS$3
3551
+ })
3552
+ ]
3553
+ })
3554
+ }));
3555
+ PanelLeftOpenIcon.displayName = "PanelLeftOpenIcon";
3556
+
3557
+ //#endregion
3558
+ //#region src/components/icons/plus/plus.tsx
3559
+ const PlusIcon = forwardRef((props, ref) => /* @__PURE__ */ jsx(AnimatedIcon, {
3560
+ ref,
3561
+ ...props,
3562
+ children: (controls, size) => /* @__PURE__ */ jsxs(motion.svg, {
3563
+ animate: controls,
3564
+ fill: "none",
3565
+ height: size,
3566
+ stroke: "currentColor",
3567
+ strokeLinecap: "round",
3568
+ strokeLinejoin: "round",
3569
+ strokeWidth: "2",
3570
+ transition: {
3571
+ damping: 15,
3572
+ stiffness: 100,
3573
+ type: "spring"
3574
+ },
3575
+ variants: {
3576
+ animate: { rotate: 180 },
3577
+ normal: { rotate: 0 }
3578
+ },
3579
+ viewBox: "0 0 24 24",
3580
+ width: size,
3581
+ xmlns: "http://www.w3.org/2000/svg",
3582
+ children: [/* @__PURE__ */ jsx("path", { d: "M5 12h14" }), /* @__PURE__ */ jsx("path", { d: "M12 5v14" })]
3583
+ })
3584
+ }));
3585
+ PlusIcon.displayName = "PlusIcon";
3586
+
3587
+ //#endregion
3588
+ //#region src/components/icons/refresh-cw/refresh-cw.tsx
3589
+ const RefreshCWIcon = forwardRef((props, ref) => /* @__PURE__ */ jsx(AnimatedIcon, {
3590
+ ref,
3591
+ ...props,
3592
+ children: (controls, size) => /* @__PURE__ */ jsxs(motion.svg, {
3593
+ animate: controls,
3594
+ fill: "none",
3595
+ height: size,
3596
+ stroke: "currentColor",
3597
+ strokeLinecap: "round",
3598
+ strokeLinejoin: "round",
3599
+ strokeWidth: "2",
3600
+ transition: {
3601
+ damping: 25,
3602
+ stiffness: 250,
3603
+ type: "spring"
3604
+ },
3605
+ variants: {
3606
+ animate: { rotate: "50deg" },
3607
+ normal: { rotate: "0deg" }
3608
+ },
3609
+ viewBox: "0 0 24 24",
3610
+ width: size,
3611
+ xmlns: "http://www.w3.org/2000/svg",
3612
+ children: [
3613
+ /* @__PURE__ */ jsx("path", { d: "M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8" }),
3614
+ /* @__PURE__ */ jsx("path", { d: "M21 3v5h-5" }),
3615
+ /* @__PURE__ */ jsx("path", { d: "M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16" }),
3616
+ /* @__PURE__ */ jsx("path", { d: "M8 16H3v5" })
3617
+ ]
3618
+ })
3619
+ }));
3620
+ RefreshCWIcon.displayName = "RefreshCWIcon";
3621
+
3622
+ //#endregion
3623
+ //#region src/components/icons/settings/settings.tsx
3624
+ const SettingsIcon = forwardRef((props, ref) => /* @__PURE__ */ jsx(AnimatedIcon, {
3625
+ ref,
3626
+ ...props,
3627
+ children: (controls, size) => /* @__PURE__ */ jsxs(motion.svg, {
3628
+ animate: controls,
3629
+ fill: "none",
3630
+ height: size,
3631
+ stroke: "currentColor",
3632
+ strokeLinecap: "round",
3633
+ strokeLinejoin: "round",
3634
+ strokeWidth: "2",
3635
+ transition: {
3636
+ damping: 10,
3637
+ stiffness: 50,
3638
+ type: "spring"
3639
+ },
3640
+ variants: {
3641
+ animate: { rotate: 180 },
3642
+ normal: { rotate: 0 }
3643
+ },
3644
+ viewBox: "0 0 24 24",
3645
+ width: size,
3646
+ xmlns: "http://www.w3.org/2000/svg",
3647
+ children: [/* @__PURE__ */ jsx("path", { d: "M12.22 2h-.44a2 2 0 0 0-2 2v.18a2 2 0 0 1-1 1.73l-.43.25a2 2 0 0 1-2 0l-.15-.08a2 2 0 0 0-2.73.73l-.22.38a2 2 0 0 0 .73 2.73l.15.1a2 2 0 0 1 1 1.72v.51a2 2 0 0 1-1 1.74l-.15.09a2 2 0 0 0-.73 2.73l.22.38a2 2 0 0 0 2.73.73l.15-.08a2 2 0 0 1 2 0l.43.25a2 2 0 0 1 1 1.73V20a2 2 0 0 0 2 2h.44a2 2 0 0 0 2-2v-.18a2 2 0 0 1 1-1.73l.43-.25a2 2 0 0 1 2 0l.15.08a2 2 0 0 0 2.73-.73l.22-.39a2 2 0 0 0-.73-2.73l-.15-.08a2 2 0 0 1-1-1.74v-.5a2 2 0 0 1 1-1.74l.15-.09a2 2 0 0 0 .73-2.73l-.22-.38a2 2 0 0 0-2.73-.73l-.15.08a2 2 0 0 1-2 0l-.43-.25a2 2 0 0 1-1-1.73V4a2 2 0 0 0-2-2z" }), /* @__PURE__ */ jsx("circle", {
3648
+ cx: "12",
3649
+ cy: "12",
3650
+ r: "3"
3651
+ })]
3652
+ })
3653
+ }));
3654
+ SettingsIcon.displayName = "SettingsIcon";
3655
+
3656
+ //#endregion
3657
+ //#region src/components/icons/shield-check/shield-check.tsx
3658
+ const PATH_VARIANTS$2 = {
3659
+ animate: {
3660
+ opacity: [0, 1],
3661
+ pathLength: [0, 1],
3662
+ scale: [.5, 1],
3663
+ transition: {
3664
+ duration: .4,
3665
+ opacity: { duration: .1 }
3666
+ }
3667
+ },
3668
+ normal: {
3669
+ opacity: 1,
3670
+ pathLength: 1,
3671
+ scale: 1,
3672
+ transition: {
3673
+ duration: .3,
3674
+ opacity: { duration: .1 }
3675
+ }
3676
+ }
3677
+ };
3678
+ const ShieldCheckIcon = forwardRef((props, ref) => /* @__PURE__ */ jsx(AnimatedIcon, {
3679
+ ref,
3680
+ ...props,
3681
+ children: (controls, size) => /* @__PURE__ */ jsxs("svg", {
3682
+ fill: "none",
3683
+ height: size,
3684
+ stroke: "currentColor",
3685
+ strokeLinecap: "round",
3686
+ strokeLinejoin: "round",
3687
+ strokeWidth: "2",
3688
+ viewBox: "0 0 24 24",
3689
+ width: size,
3690
+ xmlns: "http://www.w3.org/2000/svg",
3691
+ children: [/* @__PURE__ */ jsx("path", { d: "M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z" }), /* @__PURE__ */ jsx(motion.path, {
3692
+ animate: controls,
3693
+ d: "m9 12 2 2 4-4",
3694
+ initial: "normal",
3695
+ variants: PATH_VARIANTS$2
3696
+ })]
3697
+ })
3698
+ }));
3699
+ ShieldCheckIcon.displayName = "ShieldCheckIcon";
3700
+
3701
+ //#endregion
3702
+ //#region src/components/icons/sun/sun.tsx
3703
+ const PATH_VARIANTS$1 = {
3704
+ animate: (i) => ({
3705
+ opacity: [0, 1],
3706
+ transition: {
3707
+ delay: i * .1,
3708
+ duration: .3
3709
+ }
3710
+ }),
3711
+ normal: { opacity: 1 }
3712
+ };
3713
+ const SUN_PATHS = [
3714
+ "M12 2v2",
3715
+ "m19.07 4.93-1.41 1.41",
3716
+ "M20 12h2",
3717
+ "m17.66 17.66 1.41 1.41",
3718
+ "M12 20v2",
3719
+ "m6.34 17.66-1.41 1.41",
3720
+ "M2 12h2",
3721
+ "m4.93 4.93 1.41 1.41"
3722
+ ];
3723
+ const SunIcon = forwardRef((props, ref) => /* @__PURE__ */ jsx(AnimatedIcon, {
3724
+ ref,
3725
+ ...props,
3726
+ children: (controls, size) => /* @__PURE__ */ jsxs("svg", {
3727
+ fill: "none",
3728
+ height: size,
3729
+ stroke: "currentColor",
3730
+ strokeLinecap: "round",
3731
+ strokeLinejoin: "round",
3732
+ strokeWidth: "2",
3733
+ viewBox: "0 0 24 24",
3734
+ width: size,
3735
+ xmlns: "http://www.w3.org/2000/svg",
3736
+ children: [/* @__PURE__ */ jsx("circle", {
3737
+ cx: "12",
3738
+ cy: "12",
3739
+ r: "4"
3740
+ }), SUN_PATHS.map((d, index) => /* @__PURE__ */ jsx(motion.path, {
3741
+ animate: controls,
3742
+ custom: index + 1,
3743
+ d,
3744
+ variants: PATH_VARIANTS$1
3745
+ }, d))]
3746
+ })
3747
+ }));
3748
+ SunIcon.displayName = "SunIcon";
3749
+
3750
+ //#endregion
3751
+ //#region src/components/icons/terminal/terminal.tsx
3752
+ const LINE_VARIANTS = {
3753
+ animate: {
3754
+ opacity: [
3755
+ 1,
3756
+ 0,
3757
+ 1
3758
+ ],
3759
+ transition: {
3760
+ duration: .8,
3761
+ ease: "linear",
3762
+ repeat: Infinity
3763
+ }
3764
+ },
3765
+ normal: { opacity: 1 }
3766
+ };
3767
+ const TerminalIcon = forwardRef((props, ref) => /* @__PURE__ */ jsx(AnimatedIcon, {
3768
+ ref,
3769
+ ...props,
3770
+ children: (controls, size) => /* @__PURE__ */ jsxs("svg", {
3771
+ fill: "none",
3772
+ height: size,
3773
+ stroke: "currentColor",
3774
+ strokeLinecap: "round",
3775
+ strokeLinejoin: "round",
3776
+ strokeWidth: "2",
3777
+ viewBox: "0 0 24 24",
3778
+ width: size,
3779
+ xmlns: "http://www.w3.org/2000/svg",
3780
+ children: [/* @__PURE__ */ jsx("polyline", { points: "4 17 10 11 4 5" }), /* @__PURE__ */ jsx(motion.line, {
3781
+ animate: controls,
3782
+ initial: "normal",
3783
+ variants: LINE_VARIANTS,
3784
+ x1: "12",
3785
+ x2: "20",
3786
+ y1: "19",
3787
+ y2: "19"
3788
+ })]
3789
+ })
3790
+ }));
3791
+ TerminalIcon.displayName = "TerminalIcon";
3792
+
3793
+ //#endregion
3794
+ //#region src/components/icons/users/users.tsx
3795
+ const PATH_VARIANTS = {
3796
+ animate: {
3797
+ transition: {
3798
+ damping: 13,
3799
+ delay: .1,
3800
+ stiffness: 200,
3801
+ type: "spring"
3802
+ },
3803
+ translateX: [-6, 0]
3804
+ },
3805
+ normal: {
3806
+ transition: {
3807
+ damping: 13,
3808
+ stiffness: 200,
3809
+ type: "spring"
3810
+ },
3811
+ translateX: 0
3812
+ }
3813
+ };
3814
+ const UsersIcon = forwardRef((props, ref) => /* @__PURE__ */ jsx(AnimatedIcon, {
3815
+ ref,
3816
+ ...props,
3817
+ children: (controls, size) => /* @__PURE__ */ jsxs("svg", {
3818
+ fill: "none",
3819
+ height: size,
3820
+ stroke: "currentColor",
3821
+ strokeLinecap: "round",
3822
+ strokeLinejoin: "round",
3823
+ strokeWidth: "2",
3824
+ viewBox: "0 0 24 24",
3825
+ width: size,
3826
+ xmlns: "http://www.w3.org/2000/svg",
3827
+ children: [
3828
+ /* @__PURE__ */ jsx("path", { d: "M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2" }),
3829
+ /* @__PURE__ */ jsx("circle", {
3830
+ cx: "9",
3831
+ cy: "7",
3832
+ r: "4"
3833
+ }),
3834
+ /* @__PURE__ */ jsx(motion.path, {
3835
+ animate: controls,
3836
+ d: "M22 21v-2a4 4 0 0 0-3-3.87",
3837
+ variants: PATH_VARIANTS
3838
+ }),
3839
+ /* @__PURE__ */ jsx(motion.path, {
3840
+ animate: controls,
3841
+ d: "M16 3.13a4 4 0 0 1 0 7.75",
3842
+ variants: PATH_VARIANTS
3843
+ })
3844
+ ]
3845
+ })
3846
+ }));
3847
+ UsersIcon.displayName = "UsersIcon";
3848
+
3849
+ //#endregion
3850
+ export { Accordion, AccordionContent, AccordionItem, AccordionTrigger, AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogOverlay, AlertDialogPortal, AlertDialogTitle, AlertDialogTrigger, AnimatedIcon, ArrowUpRightIcon, AskAIAction, AssetIcon, Avatar, AvatarFallback, AvatarImage, Badge, Button, Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, ChartBarIncreasingIcon, CheckIcon, Checkbox, ChevronDownIcon, ChevronRightIcon, ClaudeLogo, CodeBlock, Collapsible, CollapsibleContent, CollapsibleTrigger, Command, CommandDialog, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, CommandSeparator, CommandShortcut, CopyButton, CopyCheckIcon, CopyIcon, CursorLogo, DangerZone, Dialog, DialogBody, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, DollarSignIcon, DomainList, DownloadIcon, DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, EmptyState, FingerprintIcon, HomeIcon, Icon, IconConfigProvider, InfoBanner, Input, Kbd, KeyIcon, Label, LayoutPanelTopIcon, LinkIcon, MetricCard, MoonIcon, OpenAILogo, PageSkeleton, PanelLeftCloseIcon, PanelLeftOpenIcon, PlusIcon, Popover, PopoverAnchor, PopoverContent, PopoverTrigger, ProductPageLayout, Progress, RadioGroup, RadioGroupItem, RefreshCWIcon, ScrollArea, ScrollBar, SearchIcon, SearchInput, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue, SelectableCard, Separator, SettingsIcon, SettingsSection, Sheet, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetTitle, SheetTrigger, ShieldCheckIcon, Skeleton, Spinner, StatCardSkeleton, StatusBadge, SunIcon, Switch, Table, TableBody, TableCaption, TableCell, TableFooter, TableHead, TableHeader, TableRow, TableSkeleton, Tabs, TabsContent, TabsList, TabsTrigger, TerminalIcon, Textarea, Toaster, ToggleCard, ToggleRow, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, UnsavedChangesBar, UsersIcon, VSCodeLogo, WebhooksAction, Well, WellReveal, WindsurfLogo, badgeVariants, buttonVariants, cn, useIconConfig, useUnsavedChanges, wellVariants };
3851
+ //# sourceMappingURL=index.esm.js.map