sa2kit 1.6.30 → 1.6.32

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 (251) hide show
  1. package/dist/AliyunOSSProvider-4W47OFEK.mjs +6 -0
  2. package/dist/{AliyunOSSProvider-KJYRIZES.mjs.map → AliyunOSSProvider-4W47OFEK.mjs.map} +1 -1
  3. package/dist/AliyunOSSProvider-HCNGDJL7.js +15 -0
  4. package/dist/{AliyunOSSProvider-FWAKUB2T.js.map → AliyunOSSProvider-HCNGDJL7.js.map} +1 -1
  5. package/dist/ConfigService-3DIC6C3Q.js +21 -0
  6. package/dist/{ConfigService-7MEZXKJ5.js.map → ConfigService-3DIC6C3Q.js.map} +1 -1
  7. package/dist/ConfigService-V6ZK273Z.mjs +4 -0
  8. package/dist/{ConfigService-BV57YYFW.mjs.map → ConfigService-V6ZK273Z.mjs.map} +1 -1
  9. package/dist/LocalStorageProvider-3RVPCQB3.mjs +6 -0
  10. package/dist/{LocalStorageProvider-RTPMUOZ2.mjs.map → LocalStorageProvider-3RVPCQB3.mjs.map} +1 -1
  11. package/dist/LocalStorageProvider-PP7MA5OT.js +15 -0
  12. package/dist/{LocalStorageProvider-XSRCUXOU.js.map → LocalStorageProvider-PP7MA5OT.js.map} +1 -1
  13. package/dist/PMXParser-2VTA737I.js +13 -0
  14. package/dist/{PMXParser-YBS3B6HM.js.map → PMXParser-2VTA737I.js.map} +1 -1
  15. package/dist/PMXParser-RNVQL76A.mjs +4 -0
  16. package/dist/{PMXParser-L6IWHL4I.mjs.map → PMXParser-RNVQL76A.mjs.map} +1 -1
  17. package/dist/analytics/index.js +46 -45
  18. package/dist/analytics/index.js.map +1 -1
  19. package/dist/analytics/index.mjs +45 -44
  20. package/dist/analytics/index.mjs.map +1 -1
  21. package/dist/analytics/server/index.js +4 -4
  22. package/dist/analytics/server/index.js.map +1 -1
  23. package/dist/analytics/server/index.mjs +4 -4
  24. package/dist/analytics/server/index.mjs.map +1 -1
  25. package/dist/api/index.js +5 -5
  26. package/dist/api/index.js.map +1 -1
  27. package/dist/api/index.mjs +5 -5
  28. package/dist/api/index.mjs.map +1 -1
  29. package/dist/audioDetection/index.js +17 -16
  30. package/dist/audioDetection/index.js.map +1 -1
  31. package/dist/audioDetection/index.mjs +17 -16
  32. package/dist/audioDetection/index.mjs.map +1 -1
  33. package/dist/auth/client/index.js +4 -4
  34. package/dist/auth/client/index.mjs +1 -1
  35. package/dist/auth/components/index.js +3 -3
  36. package/dist/auth/components/index.js.map +1 -1
  37. package/dist/auth/components/index.mjs +3 -3
  38. package/dist/auth/components/index.mjs.map +1 -1
  39. package/dist/auth/index.js +29 -29
  40. package/dist/auth/index.mjs +5 -5
  41. package/dist/auth/middleware/index.js +3 -3
  42. package/dist/auth/middleware/index.mjs +2 -2
  43. package/dist/auth/routes/index.js +14 -14
  44. package/dist/auth/routes/index.mjs +2 -2
  45. package/dist/auth/services/index.js +7 -7
  46. package/dist/auth/services/index.mjs +1 -1
  47. package/dist/calendar/index.js +146 -182
  48. package/dist/calendar/index.js.map +1 -1
  49. package/dist/calendar/index.mjs +139 -175
  50. package/dist/calendar/index.mjs.map +1 -1
  51. package/dist/calendar/routes/index.js +1 -1
  52. package/dist/calendar/routes/index.js.map +1 -1
  53. package/dist/calendar/routes/index.mjs +1 -1
  54. package/dist/calendar/routes/index.mjs.map +1 -1
  55. package/dist/{chunk-5YQ5B7IZ.js → chunk-24HGREE6.js} +5 -5
  56. package/dist/{chunk-5YQ5B7IZ.js.map → chunk-24HGREE6.js.map} +1 -1
  57. package/dist/{chunk-6PRFP5EG.js → chunk-25OFOKNF.js} +6 -6
  58. package/dist/chunk-25OFOKNF.js.map +1 -0
  59. package/dist/{chunk-KQGP6BTS.mjs → chunk-3DXPQ4YV.mjs} +6 -6
  60. package/dist/chunk-3DXPQ4YV.mjs.map +1 -0
  61. package/dist/{chunk-3BGPZN4X.mjs → chunk-3NHAT7D4.mjs} +12 -12
  62. package/dist/chunk-3NHAT7D4.mjs.map +1 -0
  63. package/dist/{chunk-MW4BCIZC.mjs → chunk-4HC6M7FK.mjs} +3 -3
  64. package/dist/chunk-4HC6M7FK.mjs.map +1 -0
  65. package/dist/{chunk-ESRCX5TQ.mjs → chunk-52TN2QSS.mjs} +3 -3
  66. package/dist/{chunk-ESRCX5TQ.mjs.map → chunk-52TN2QSS.mjs.map} +1 -1
  67. package/dist/{chunk-CNTILN5J.mjs → chunk-5YQ62BKX.mjs} +20 -19
  68. package/dist/chunk-5YQ62BKX.mjs.map +1 -0
  69. package/dist/{chunk-6W5BMXJG.js → chunk-6OWNMJKG.js} +4 -4
  70. package/dist/{chunk-6W5BMXJG.js.map → chunk-6OWNMJKG.js.map} +1 -1
  71. package/dist/{chunk-DUHZ7VZP.js → chunk-7VRT55ZD.js} +3 -3
  72. package/dist/chunk-7VRT55ZD.js.map +1 -0
  73. package/dist/{chunk-3WOAPLEG.mjs → chunk-EB4NR623.mjs} +27 -26
  74. package/dist/chunk-EB4NR623.mjs.map +1 -0
  75. package/dist/chunk-EI27JKND.mjs +1988 -0
  76. package/dist/chunk-EI27JKND.mjs.map +1 -0
  77. package/dist/{chunk-CD77U7LZ.js → chunk-GBPLX42J.js} +9 -9
  78. package/dist/chunk-GBPLX42J.js.map +1 -0
  79. package/dist/{chunk-TFQF2HDO.mjs → chunk-HDEOCX2L.mjs} +12 -12
  80. package/dist/chunk-HDEOCX2L.mjs.map +1 -0
  81. package/dist/{chunk-TV3VKRJK.mjs → chunk-HDMIOOZY.mjs} +38 -68
  82. package/dist/chunk-HDMIOOZY.mjs.map +1 -0
  83. package/dist/{chunk-OPPF3326.js → chunk-HJ6MH7J7.js} +39 -69
  84. package/dist/chunk-HJ6MH7J7.js.map +1 -0
  85. package/dist/chunk-KO73EBUT.js +80 -0
  86. package/dist/chunk-KO73EBUT.js.map +1 -0
  87. package/dist/{chunk-6YKMCPQI.mjs → chunk-KZKIH4AS.mjs} +4 -4
  88. package/dist/chunk-KZKIH4AS.mjs.map +1 -0
  89. package/dist/{chunk-LX4XX6W7.js → chunk-L47ZOYHL.js} +15 -89
  90. package/dist/chunk-L47ZOYHL.js.map +1 -0
  91. package/dist/{chunk-6MQUBPKB.mjs → chunk-LJ4CCSSY.mjs} +3 -3
  92. package/dist/{chunk-6MQUBPKB.mjs.map → chunk-LJ4CCSSY.mjs.map} +1 -1
  93. package/dist/{chunk-TOC5FSHP.js → chunk-NJ2SNXBJ.js} +12 -12
  94. package/dist/chunk-NJ2SNXBJ.js.map +1 -0
  95. package/dist/{chunk-OCR5DS4C.mjs → chunk-PE5EAHZK.mjs} +3 -3
  96. package/dist/chunk-PE5EAHZK.mjs.map +1 -0
  97. package/dist/{chunk-LZHMNOED.js → chunk-Q5EDCKQA.js} +26 -26
  98. package/dist/chunk-Q5EDCKQA.js.map +1 -0
  99. package/dist/{chunk-CLKKZSPZ.js → chunk-RBKGYWME.js} +20 -19
  100. package/dist/chunk-RBKGYWME.js.map +1 -0
  101. package/dist/{chunk-VRTRSEEH.mjs → chunk-RSJSZ7QH.mjs} +11 -11
  102. package/dist/chunk-RSJSZ7QH.mjs.map +1 -0
  103. package/dist/{chunk-E7RGBAYJ.js → chunk-TDCDEBGP.js} +30 -29
  104. package/dist/chunk-TDCDEBGP.js.map +1 -0
  105. package/dist/{chunk-JZXJQMVE.js → chunk-UIFFDRTE.js} +11 -11
  106. package/dist/chunk-UIFFDRTE.js.map +1 -0
  107. package/dist/{chunk-T5OZHYVM.mjs → chunk-UKT3PLON.mjs} +13 -85
  108. package/dist/chunk-UKT3PLON.mjs.map +1 -0
  109. package/dist/{chunk-UOFTHYIH.js → chunk-UL6XJGUZ.js} +4 -4
  110. package/dist/chunk-UL6XJGUZ.js.map +1 -0
  111. package/dist/chunk-VVWQTO4Y.mjs +77 -0
  112. package/dist/chunk-VVWQTO4Y.mjs.map +1 -0
  113. package/dist/{chunk-A3UP56MS.js → chunk-WA67GZSZ.js} +3 -3
  114. package/dist/chunk-WA67GZSZ.js.map +1 -0
  115. package/dist/{chunk-OLHGZXN3.mjs → chunk-WEEXCPSE.mjs} +5 -5
  116. package/dist/chunk-WEEXCPSE.mjs.map +1 -0
  117. package/dist/chunk-XGBE4SUV.js +2093 -0
  118. package/dist/chunk-XGBE4SUV.js.map +1 -0
  119. package/dist/{chunk-QU5OT4DF.js → chunk-XJ7ZAGC5.js} +5 -5
  120. package/dist/chunk-XJ7ZAGC5.js.map +1 -0
  121. package/dist/{chunk-ZI25QCHD.mjs → chunk-YOTQG4NP.mjs} +25 -25
  122. package/dist/chunk-YOTQG4NP.mjs.map +1 -0
  123. package/dist/{chunk-QAT2RWAO.mjs → chunk-Z36R3P62.mjs} +7 -7
  124. package/dist/chunk-Z36R3P62.mjs.map +1 -0
  125. package/dist/{chunk-7Z5LLJ3A.js → chunk-ZWQJSZEY.js} +13 -13
  126. package/dist/chunk-ZWQJSZEY.js.map +1 -0
  127. package/dist/config/index.js +6 -6
  128. package/dist/config/index.js.map +1 -1
  129. package/dist/config/index.mjs +6 -6
  130. package/dist/config/index.mjs.map +1 -1
  131. package/dist/config/server/index.js +37 -37
  132. package/dist/config/server/index.js.map +1 -1
  133. package/dist/config/server/index.mjs +37 -37
  134. package/dist/config/server/index.mjs.map +1 -1
  135. package/dist/i18n/index.d.mts +2 -2
  136. package/dist/i18n/index.d.ts +2 -2
  137. package/dist/i18n/index.js +16 -17
  138. package/dist/i18n/index.js.map +1 -1
  139. package/dist/i18n/index.mjs +16 -17
  140. package/dist/i18n/index.mjs.map +1 -1
  141. package/dist/imageCrop/index.js +11 -10
  142. package/dist/imageCrop/index.js.map +1 -1
  143. package/dist/imageCrop/index.mjs +11 -10
  144. package/dist/imageCrop/index.mjs.map +1 -1
  145. package/dist/index.d.mts +185 -100
  146. package/dist/index.d.ts +185 -100
  147. package/dist/index.js +225 -249
  148. package/dist/index.js.map +1 -1
  149. package/dist/index.mjs +80 -104
  150. package/dist/index.mjs.map +1 -1
  151. package/dist/logger/index.js +6 -6
  152. package/dist/logger/index.mjs +1 -1
  153. package/dist/mikuFusionGame/index.d.mts +112 -0
  154. package/dist/mikuFusionGame/index.d.ts +112 -0
  155. package/dist/mikuFusionGame/index.js +680 -0
  156. package/dist/mikuFusionGame/index.js.map +1 -0
  157. package/dist/mikuFusionGame/index.mjs +667 -0
  158. package/dist/mikuFusionGame/index.mjs.map +1 -0
  159. package/dist/mmd/admin/index.js +11 -10
  160. package/dist/mmd/admin/index.js.map +1 -1
  161. package/dist/mmd/admin/index.mjs +11 -10
  162. package/dist/mmd/admin/index.mjs.map +1 -1
  163. package/dist/mmd/index.js +223 -241
  164. package/dist/mmd/index.js.map +1 -1
  165. package/dist/mmd/index.mjs +220 -238
  166. package/dist/mmd/index.mjs.map +1 -1
  167. package/dist/mmd/server/index.js +6 -6
  168. package/dist/mmd/server/index.js.map +1 -1
  169. package/dist/mmd/server/index.mjs +6 -6
  170. package/dist/mmd/server/index.mjs.map +1 -1
  171. package/dist/music/index.js +16 -16
  172. package/dist/music/index.mjs +2 -2
  173. package/dist/music/server/index.js +8 -8
  174. package/dist/music/server/index.mjs +1 -1
  175. package/dist/request/index.js +2 -2
  176. package/dist/request/index.js.map +1 -1
  177. package/dist/request/index.mjs +2 -2
  178. package/dist/request/index.mjs.map +1 -1
  179. package/dist/storage/index.js +15 -14
  180. package/dist/storage/index.mjs +3 -2
  181. package/dist/testYourself/admin/index.js +3 -3
  182. package/dist/testYourself/admin/index.mjs +1 -1
  183. package/dist/testYourself/index.js +22 -22
  184. package/dist/testYourself/index.js.map +1 -1
  185. package/dist/testYourself/index.mjs +14 -14
  186. package/dist/testYourself/index.mjs.map +1 -1
  187. package/dist/testYourself/server/index.js +4 -4
  188. package/dist/testYourself/server/index.mjs +1 -1
  189. package/dist/universalExport/index.d.mts +3 -3
  190. package/dist/universalExport/index.d.ts +3 -3
  191. package/dist/universalExport/index.js +48 -47
  192. package/dist/universalExport/index.js.map +1 -1
  193. package/dist/universalExport/index.mjs +48 -47
  194. package/dist/universalExport/index.mjs.map +1 -1
  195. package/dist/universalExport/server/index.js +29 -29
  196. package/dist/universalExport/server/index.js.map +1 -1
  197. package/dist/universalExport/server/index.mjs +28 -28
  198. package/dist/universalExport/server/index.mjs.map +1 -1
  199. package/dist/universalFile/index.d.mts +3 -3
  200. package/dist/universalFile/index.d.ts +3 -3
  201. package/dist/universalFile/index.js +73 -72
  202. package/dist/universalFile/index.js.map +1 -1
  203. package/dist/universalFile/index.mjs +73 -72
  204. package/dist/universalFile/index.mjs.map +1 -1
  205. package/dist/universalFile/server/index.js +258 -260
  206. package/dist/universalFile/server/index.js.map +1 -1
  207. package/dist/universalFile/server/index.mjs +244 -246
  208. package/dist/universalFile/server/index.mjs.map +1 -1
  209. package/dist/utils/index.js +11 -11
  210. package/dist/utils/index.mjs +2 -2
  211. package/package.json +25 -31
  212. package/dist/AliyunOSSProvider-FWAKUB2T.js +0 -15
  213. package/dist/AliyunOSSProvider-KJYRIZES.mjs +0 -6
  214. package/dist/ConfigService-7MEZXKJ5.js +0 -21
  215. package/dist/ConfigService-BV57YYFW.mjs +0 -4
  216. package/dist/LocalStorageProvider-RTPMUOZ2.mjs +0 -6
  217. package/dist/LocalStorageProvider-XSRCUXOU.js +0 -15
  218. package/dist/PMXParser-L6IWHL4I.mjs +0 -4
  219. package/dist/PMXParser-YBS3B6HM.js +0 -13
  220. package/dist/chunk-3BGPZN4X.mjs.map +0 -1
  221. package/dist/chunk-3WOAPLEG.mjs.map +0 -1
  222. package/dist/chunk-6PRFP5EG.js.map +0 -1
  223. package/dist/chunk-6YKMCPQI.mjs.map +0 -1
  224. package/dist/chunk-7Z5LLJ3A.js.map +0 -1
  225. package/dist/chunk-A3UP56MS.js.map +0 -1
  226. package/dist/chunk-CD77U7LZ.js.map +0 -1
  227. package/dist/chunk-CLKKZSPZ.js.map +0 -1
  228. package/dist/chunk-CNTILN5J.mjs.map +0 -1
  229. package/dist/chunk-DUHZ7VZP.js.map +0 -1
  230. package/dist/chunk-DW2ZTOCV.js +0 -1727
  231. package/dist/chunk-DW2ZTOCV.js.map +0 -1
  232. package/dist/chunk-E7RGBAYJ.js.map +0 -1
  233. package/dist/chunk-JZXJQMVE.js.map +0 -1
  234. package/dist/chunk-KQGP6BTS.mjs.map +0 -1
  235. package/dist/chunk-LFG6FPM5.mjs +0 -1597
  236. package/dist/chunk-LFG6FPM5.mjs.map +0 -1
  237. package/dist/chunk-LX4XX6W7.js.map +0 -1
  238. package/dist/chunk-LZHMNOED.js.map +0 -1
  239. package/dist/chunk-MW4BCIZC.mjs.map +0 -1
  240. package/dist/chunk-OCR5DS4C.mjs.map +0 -1
  241. package/dist/chunk-OLHGZXN3.mjs.map +0 -1
  242. package/dist/chunk-OPPF3326.js.map +0 -1
  243. package/dist/chunk-QAT2RWAO.mjs.map +0 -1
  244. package/dist/chunk-QU5OT4DF.js.map +0 -1
  245. package/dist/chunk-T5OZHYVM.mjs.map +0 -1
  246. package/dist/chunk-TFQF2HDO.mjs.map +0 -1
  247. package/dist/chunk-TOC5FSHP.js.map +0 -1
  248. package/dist/chunk-TV3VKRJK.mjs.map +0 -1
  249. package/dist/chunk-UOFTHYIH.js.map +0 -1
  250. package/dist/chunk-VRTRSEEH.mjs.map +0 -1
  251. package/dist/chunk-ZI25QCHD.mjs.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/Button.tsx","../src/components/Card.tsx","../src/components/Badge.tsx","../src/components/Input.tsx","../src/components/Label.tsx","../src/components/internal/ui-core.tsx","../src/components/Tabs.tsx","../src/components/Dialog.tsx","../src/components/AlertDialog.tsx","../src/components/DropdownMenu.tsx","../src/components/Popover.tsx","../src/components/Progress.tsx","../src/components/ScrollArea.tsx","../src/components/Select.tsx","../src/components/Separator.tsx","../src/components/Sheet.tsx","../src/components/Textarea.tsx","../src/components/Tooltip.tsx","../src/components/Avatar.tsx","../src/components/Grid.tsx","../src/components/SearchBox.tsx","../src/components/Timeline.tsx","../src/components/CollisionBalls.tsx","../src/components/GenericOrderManager.tsx","../src/components/BackButton.tsx","../src/components/FilterButtonGroup.tsx","../src/components/SearchResultHint.tsx","../src/components/PopWindow.tsx"],"names":["React","React2","cva","React3","React4","React5","React6","React7","React8","React9","React11","React12","React13","React14","Check","React15","React16","X","React17","React18","React19","clsx","useRef","useState","useEffect","draggedBall","width","height","mousePos","useCallback","ChevronUp","ChevronDown"],"mappings":"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","file":"chunk-EI27JKND.mjs","sourcesContent":["import * as React from \"react\"\nimport { cva } from \"class-variance-authority\"\n\nimport { cn } from \"../utils\"\n\nconst buttonVariants = cva(\n \"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0\",\n {\n variants: {\n variant: {\n default:\n \"bg-primary text-primary-foreground shadow hover:bg-primary/90\",\n destructive:\n \"bg-destructive text-destructive-foreground shadow-sm hover:bg-destructive/90\",\n outline:\n \"border border-input bg-background shadow-sm hover:bg-accent hover:text-accent-foreground\",\n secondary:\n \"bg-secondary text-secondary-foreground shadow-sm hover:bg-secondary/80\",\n ghost: \"hover:bg-accent hover:text-accent-foreground\",\n link: \"text-primary underline-offset-4 hover:underline\",\n },\n size: {\n default: \"h-9 px-4 py-2\",\n sm: \"h-8 rounded-md px-3 text-xs\",\n lg: \"h-10 rounded-md px-8\",\n icon: \"h-9 w-9\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n }\n)\n\nexport interface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n variant?: 'default' | 'destructive' | 'outline' | 'secondary' | 'ghost' | 'link';\n size?: 'default' | 'sm' | 'lg' | 'icon';\n asChild?: boolean;\n}\n\nconst Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n ({ className, variant = 'default', size = 'default', asChild = false, children, ...props }, ref) => {\n if (asChild && React.isValidElement(children)) {\n const childProps = children.props as { className?: string }\n return React.cloneElement(children, {\n ...(props as object),\n className: cn(buttonVariants({ variant, size, className }), childProps.className),\n })\n }\n\n return (\n <button\n className={cn(buttonVariants({ variant, size, className }))}\n ref={ref}\n {...props}\n >\n {children}\n </button>\n )\n }\n)\nButton.displayName = \"Button\"\n\nexport { Button, buttonVariants }\n","import * as React from \"react\"\n\nimport { cn } from \"../utils\"\n\nconst Card = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\n \"rounded-xl border bg-card text-card-foreground shadow\",\n className\n )}\n {...(props as any)}\n />\n))\nCard.displayName = \"Card\"\n\nconst CardHeader = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\"flex flex-col space-y-1.5 p-6\", className)}\n {...(props as any)}\n />\n))\nCardHeader.displayName = \"CardHeader\"\n\nconst CardTitle = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\"font-semibold leading-none tracking-tight\", className)}\n {...(props as any)}\n />\n))\nCardTitle.displayName = \"CardTitle\"\n\nconst CardDescription = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\"text-sm text-muted-foreground\", className)}\n {...(props as any)}\n />\n))\nCardDescription.displayName = \"CardDescription\"\n\nconst CardContent = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div ref={ref} className={cn(\"p-6 pt-0\", className)} {...(props as any)} />\n))\nCardContent.displayName = \"CardContent\"\n\nconst CardFooter = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\"flex items-center p-6 pt-0\", className)}\n {...(props as any)}\n />\n))\nCardFooter.displayName = \"CardFooter\"\n\nexport { Card, CardHeader, CardFooter, CardTitle, CardDescription, CardContent }\n","import * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"../utils\"\n\nconst badgeVariants = cva(\n \"inline-flex items-center rounded-md border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2\",\n {\n variants: {\n variant: {\n default:\n \"border-transparent bg-primary text-primary-foreground shadow hover:bg-primary/80\",\n secondary:\n \"border-transparent bg-secondary text-secondary-foreground hover:bg-secondary/80\",\n destructive:\n \"border-transparent bg-destructive text-destructive-foreground shadow hover:bg-destructive/80\",\n outline: \"text-foreground\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n }\n)\n\nexport interface BadgeProps\n extends React.HTMLAttributes<HTMLDivElement>,\n VariantProps<typeof badgeVariants> {}\n\nfunction Badge({ className, variant, ...props }: BadgeProps) {\n return (\n <div className={cn(badgeVariants({ variant }), className)} {...(props as any)} />\n )\n}\n\nexport { Badge, badgeVariants }\n","import * as React from \"react\"\n\nimport { cn } from \"../utils\"\n\nconst Input = React.forwardRef<HTMLInputElement, React.ComponentProps<\"input\">>(\n ({ className, type, ...props }, ref) => {\n return (\n <input\n type={type}\n className={cn(\n \"flex h-9 w-full rounded-md border border-input bg-transparent px-3 py-1 text-base shadow-sm transition-colors file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50 md:text-sm\",\n className\n )}\n ref={ref}\n {...(props as any)}\n />\n )\n }\n)\nInput.displayName = \"Input\"\n\nexport { Input }\n","\"use client\"\n\nimport * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"../utils\"\n\nconst labelVariants = cva(\n \"text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70\"\n)\n\nconst Label = React.forwardRef<\n HTMLLabelElement,\n React.LabelHTMLAttributes<HTMLLabelElement> & VariantProps<typeof labelVariants>\n>(({ className, ...props }, ref) => (\n <label\n ref={ref}\n className={cn(labelVariants(), className)}\n {...(props as any)}\n />\n))\nLabel.displayName = \"Label\"\n\nexport { Label }\n","\"use client\";\n\nimport * as React from \"react\";\nimport { createPortal } from \"react-dom\";\n\nexport function useControllableState<T>({\n value,\n defaultValue,\n onChange,\n}: {\n value?: T;\n defaultValue: T;\n onChange?: (next: T) => void;\n}) {\n const [internal, setInternal] = React.useState<T>(defaultValue);\n const isControlled = value !== undefined;\n const state = isControlled ? (value as T) : internal;\n\n const setState = React.useCallback(\n (next: T) => {\n if (!isControlled) setInternal(next);\n onChange?.(next);\n },\n [isControlled, onChange]\n );\n\n return [state, setState] as const;\n}\n\nexport function Portal({\n children,\n container,\n}: {\n children: React.ReactNode;\n container?: Element | null;\n}) {\n const [mounted, setMounted] = React.useState(false);\n\n React.useEffect(() => {\n setMounted(true);\n }, []);\n\n if (!mounted) return null;\n return createPortal(children, container ?? document.body);\n}\n\nexport function useOnClickOutside(\n refs: Array<React.RefObject<HTMLElement | null>>,\n handler: (event: MouseEvent | TouchEvent) => void,\n enabled: boolean\n) {\n React.useEffect(() => {\n if (!enabled) return;\n\n const listener = (event: MouseEvent | TouchEvent) => {\n const target = event.target as Node;\n const clickedInside = refs.some((ref) => {\n const el = ref.current;\n return el && el.contains(target);\n });\n if (!clickedInside) {\n handler(event);\n }\n };\n\n document.addEventListener(\"mousedown\", listener);\n document.addEventListener(\"touchstart\", listener);\n return () => {\n document.removeEventListener(\"mousedown\", listener);\n document.removeEventListener(\"touchstart\", listener);\n };\n }, [refs, handler, enabled]);\n}\n\nexport function mergeRefs<T>(\n ...refs: Array<React.Ref<T> | undefined>\n): React.RefCallback<T> {\n return (value) => {\n refs.forEach((ref) => {\n if (!ref) return;\n if (typeof ref === \"function\") {\n ref(value);\n } else {\n (ref as React.MutableRefObject<T | null>).current = value;\n }\n });\n };\n}\n","\"use client\"\n\nimport * as React from \"react\"\n\nimport { cn } from \"../utils\"\nimport { useControllableState } from \"./internal/ui-core\"\n\ninterface TabsContextValue {\n value: string\n setValue: (next: string) => void\n}\n\nconst TabsContext = React.createContext<TabsContextValue | null>(null)\n\ninterface TabsProps extends React.HTMLAttributes<HTMLDivElement> {\n value?: string\n defaultValue?: string\n onValueChange?: (value: string) => void\n}\n\nconst Tabs = ({\n value,\n defaultValue = \"\",\n onValueChange,\n className,\n ...props\n}: TabsProps) => {\n const [current, setCurrent] = useControllableState({\n value,\n defaultValue,\n onChange: onValueChange,\n })\n\n return (\n <TabsContext.Provider value={{ value: current, setValue: setCurrent }}>\n <div className={className} {...(props as any)} />\n </TabsContext.Provider>\n )\n}\n\nconst TabsList = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\n \"inline-flex h-9 items-center justify-center rounded-lg bg-muted p-1 text-muted-foreground\",\n className\n )}\n {...(props as any)}\n />\n))\nTabsList.displayName = \"TabsList\"\n\ninterface TabsTriggerProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n value: string\n}\n\nconst TabsTrigger = React.forwardRef<HTMLButtonElement, TabsTriggerProps>(\n ({ className, value, onClick, ...props }, ref) => {\n const ctx = React.useContext(TabsContext)\n const active = ctx?.value === value\n\n return (\n <button\n ref={ref}\n type=\"button\"\n data-state={active ? \"active\" : \"inactive\"}\n className={cn(\n \"inline-flex items-center justify-center whitespace-nowrap rounded-md px-3 py-1 text-sm font-medium ring-offset-background transition-all focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50\",\n active && \"bg-background text-foreground shadow\",\n className\n )}\n onClick={(e) => {\n ctx?.setValue(value)\n onClick?.(e)\n }}\n {...(props as any)}\n />\n )\n }\n)\nTabsTrigger.displayName = \"TabsTrigger\"\n\ninterface TabsContentProps extends React.HTMLAttributes<HTMLDivElement> {\n value: string\n forceMount?: boolean\n}\n\nconst TabsContent = React.forwardRef<HTMLDivElement, TabsContentProps>(\n ({ className, value, forceMount = false, ...props }, ref) => {\n const ctx = React.useContext(TabsContext)\n const active = ctx?.value === value\n if (!active && !forceMount) return null\n\n return (\n <div\n ref={ref}\n data-state={active ? \"active\" : \"inactive\"}\n hidden={!active && forceMount}\n className={cn(\n \"mt-2 ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2\",\n className\n )}\n {...(props as any)}\n />\n )\n }\n)\nTabsContent.displayName = \"TabsContent\"\n\nexport { Tabs, TabsList, TabsTrigger, TabsContent }\n","\"use client\"\n\nimport * as React from \"react\"\nimport { X } from \"lucide-react\"\n\nimport { cn } from \"../utils\"\nimport { mergeRefs, Portal, useControllableState, useOnClickOutside } from \"./internal/ui-core\"\n\ninterface DialogContextValue {\n open: boolean\n setOpen: (open: boolean) => void\n triggerRef: React.RefObject<HTMLButtonElement>\n contentRef: React.RefObject<HTMLDivElement>\n}\n\nconst DialogContext = React.createContext<DialogContextValue | null>(null)\n\ninterface DialogProps {\n open?: boolean\n defaultOpen?: boolean\n onOpenChange?: (open: boolean) => void\n children: React.ReactNode\n}\n\nconst Dialog = ({ open, defaultOpen = false, onOpenChange, children }: DialogProps) => {\n const [isOpen, setIsOpen] = useControllableState({\n value: open,\n defaultValue: defaultOpen,\n onChange: onOpenChange,\n })\n const triggerRef = React.useRef<HTMLButtonElement>(null)\n const contentRef = React.useRef<HTMLDivElement>(null)\n\n return (\n <DialogContext.Provider value={{ open: isOpen, setOpen: setIsOpen, triggerRef, contentRef }}>\n {children}\n </DialogContext.Provider>\n )\n}\n\ninterface TriggerProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n asChild?: boolean\n children: React.ReactNode\n}\n\nconst DialogTrigger = React.forwardRef<HTMLButtonElement, TriggerProps>(\n ({ children, onClick, ...props }, ref) => {\n const ctx = React.useContext(DialogContext)\n if (!ctx) return null\n\n const mergedRef = mergeRefs<HTMLButtonElement>(ctx.triggerRef, ref)\n\n const handleClick = (e: React.MouseEvent<HTMLButtonElement>) => {\n ctx.setOpen(true)\n onClick?.(e)\n }\n\n return (\n <button ref={mergedRef} type=\"button\" onClick={handleClick} {...(props as any)}>\n {children}\n </button>\n )\n }\n)\nDialogTrigger.displayName = \"DialogTrigger\"\n\nconst DialogPortal = ({ children }: { children: React.ReactNode }) => {\n const ctx = React.useContext(DialogContext)\n if (!ctx?.open) return null\n return <Portal>{children}</Portal>\n}\n\nconst DialogClose = React.forwardRef<\n HTMLButtonElement,\n React.ButtonHTMLAttributes<HTMLButtonElement>\n>(({ onClick, ...props }, ref) => {\n const ctx = React.useContext(DialogContext)\n return (\n <button\n ref={ref}\n type=\"button\"\n onClick={(e) => {\n ctx?.setOpen(false)\n onClick?.(e)\n }}\n {...(props as any)}\n />\n )\n})\nDialogClose.displayName = \"DialogClose\"\n\nconst DialogOverlay = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => {\n const ctx = React.useContext(DialogContext)\n if (!ctx?.open) return null\n return (\n <div\n ref={ref}\n className={cn(\"fixed inset-0 z-[9999] bg-black/80\", className)}\n {...(props as any)}\n />\n )\n})\nDialogOverlay.displayName = \"DialogOverlay\"\n\nexport interface DialogContentProps extends React.HTMLAttributes<HTMLDivElement> {\n onPointerDownOutside?: (event: PointerEvent) => void\n onEscapeKeyDown?: (event: KeyboardEvent) => void\n showCloseButton?: boolean\n}\n\nconst DialogContent = React.forwardRef<HTMLDivElement, DialogContentProps>(\n ({ className, children, onPointerDownOutside, onEscapeKeyDown, showCloseButton = true, ...props }, ref) => {\n const ctx = React.useContext(DialogContext)\n const open = !!ctx?.open\n\n useOnClickOutside(\n [ctx?.contentRef ?? { current: null }, ctx?.triggerRef ?? { current: null }],\n (evt) => {\n onPointerDownOutside?.(evt as PointerEvent)\n if (!(evt as Event).defaultPrevented) {\n ctx?.setOpen(false)\n }\n },\n open\n )\n\n React.useEffect(() => {\n if (!open) return\n const onKey = (e: KeyboardEvent) => {\n if (e.key !== \"Escape\") return\n onEscapeKeyDown?.(e)\n if (!e.defaultPrevented) {\n ctx?.setOpen(false)\n }\n }\n document.addEventListener(\"keydown\", onKey)\n return () => document.removeEventListener(\"keydown\", onKey)\n }, [ctx, onEscapeKeyDown, open])\n\n if (!ctx || !open) return null\n\n return (\n <DialogPortal>\n <DialogOverlay />\n <div\n ref={mergeRefs(ctx.contentRef, ref)}\n className={cn(\n \"fixed left-[50%] top-[50%] z-[10000] grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border bg-background p-6 shadow-lg sm:rounded-lg\",\n className\n )}\n {...(props as any)}\n >\n {children}\n {showCloseButton ? (\n <DialogClose className=\"absolute right-4 top-4 rounded-sm opacity-70 transition-opacity hover:opacity-100\">\n <X className=\"h-4 w-4\" />\n <span className=\"sr-only\">Close</span>\n </DialogClose>\n ) : null}\n </div>\n </DialogPortal>\n )\n }\n)\nDialogContent.displayName = \"DialogContent\"\n\nconst DialogHeader = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLDivElement>) => (\n <div\n className={cn(\n \"flex flex-col space-y-1.5 text-center sm:text-left\",\n className\n )}\n {...(props as any)}\n />\n)\nDialogHeader.displayName = \"DialogHeader\"\n\nconst DialogFooter = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLDivElement>) => (\n <div\n className={cn(\n \"flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2\",\n className\n )}\n {...(props as any)}\n />\n)\nDialogFooter.displayName = \"DialogFooter\"\n\nconst DialogTitle = React.forwardRef<\n HTMLHeadingElement,\n React.HTMLAttributes<HTMLHeadingElement>\n>(({ className, ...props }, ref) => (\n <h2\n ref={ref}\n className={cn(\n \"text-lg font-semibold leading-none tracking-tight\",\n className\n )}\n {...(props as any)}\n />\n))\nDialogTitle.displayName = \"DialogTitle\"\n\nconst DialogDescription = React.forwardRef<\n HTMLParagraphElement,\n React.HTMLAttributes<HTMLParagraphElement>\n>(({ className, ...props }, ref) => (\n <p\n ref={ref}\n className={cn(\"text-sm text-muted-foreground\", className)}\n {...(props as any)}\n />\n))\nDialogDescription.displayName = \"DialogDescription\"\n\nexport {\n Dialog,\n DialogPortal,\n DialogOverlay,\n DialogTrigger,\n DialogClose,\n DialogContent,\n DialogHeader,\n DialogFooter,\n DialogTitle,\n DialogDescription,\n}\n","\"use client\"\n\nimport * as React from \"react\"\n\nimport { cn } from \"../utils\"\nimport { buttonVariants } from \"./Button\"\nimport {\n Dialog as AlertDialog,\n DialogPortal as AlertDialogPortal,\n DialogOverlay as AlertDialogOverlay,\n DialogTrigger as AlertDialogTrigger,\n DialogContent as AlertDialogContentBase,\n DialogHeader as AlertDialogHeader,\n DialogFooter as AlertDialogFooter,\n DialogTitle as AlertDialogTitle,\n DialogDescription as AlertDialogDescription,\n DialogClose,\n} from \"./Dialog\"\n\nconst AlertDialogContent = React.forwardRef<\n HTMLDivElement,\n React.ComponentPropsWithoutRef<typeof AlertDialogContentBase>\n>(({ className, ...props }, ref) => (\n <AlertDialogContentBase\n ref={ref}\n className={cn(\"z-[9999]\", className)}\n {...(props as any)}\n />\n))\nAlertDialogContent.displayName = \"AlertDialogContent\"\n\nconst AlertDialogAction = React.forwardRef<\n HTMLButtonElement,\n React.ButtonHTMLAttributes<HTMLButtonElement>\n>(({ className, ...props }, ref) => (\n <DialogClose\n ref={ref}\n className={cn(buttonVariants(), className)}\n {...(props as any)}\n />\n))\nAlertDialogAction.displayName = \"AlertDialogAction\"\n\nconst AlertDialogCancel = React.forwardRef<\n HTMLButtonElement,\n React.ButtonHTMLAttributes<HTMLButtonElement>\n>(({ className, ...props }, ref) => (\n <DialogClose\n ref={ref}\n className={cn(\n buttonVariants({ variant: \"outline\" }),\n \"mt-2 sm:mt-0\",\n className\n )}\n {...(props as any)}\n />\n))\nAlertDialogCancel.displayName = \"AlertDialogCancel\"\n\nexport {\n AlertDialog,\n AlertDialogPortal,\n AlertDialogOverlay,\n AlertDialogTrigger,\n AlertDialogContent,\n AlertDialogHeader,\n AlertDialogFooter,\n AlertDialogTitle,\n AlertDialogDescription,\n AlertDialogAction,\n AlertDialogCancel,\n}\n","\"use client\"\n\nimport * as React from \"react\"\nimport { Check, ChevronRight, Circle } from \"lucide-react\"\n\nimport { cn } from \"../utils\"\nimport { mergeRefs, Portal, useControllableState, useOnClickOutside } from \"./internal/ui-core\"\n\ninterface DropdownMenuContextValue {\n open: boolean\n setOpen: (open: boolean) => void\n triggerRef: React.RefObject<HTMLButtonElement>\n contentRef: React.RefObject<HTMLDivElement>\n}\n\nconst DropdownMenuContext = React.createContext<DropdownMenuContextValue | null>(null)\nconst DropdownMenuRadioGroupContext = React.createContext<{\n value?: string\n onValueChange?: (value: string) => void\n} | null>(null)\n\ninterface DropdownMenuProps {\n open?: boolean\n defaultOpen?: boolean\n onOpenChange?: (open: boolean) => void\n children: React.ReactNode\n}\n\nconst DropdownMenu = ({ open, defaultOpen = false, onOpenChange, children }: DropdownMenuProps) => {\n const [isOpen, setIsOpen] = useControllableState({\n value: open,\n defaultValue: defaultOpen,\n onChange: onOpenChange,\n })\n const triggerRef = React.useRef<HTMLButtonElement>(null)\n const contentRef = React.useRef<HTMLDivElement>(null)\n\n return (\n <DropdownMenuContext.Provider value={{ open: isOpen, setOpen: setIsOpen, triggerRef, contentRef }}>\n {children}\n </DropdownMenuContext.Provider>\n )\n}\n\nconst DropdownMenuTrigger = React.forwardRef<\n HTMLButtonElement,\n React.ButtonHTMLAttributes<HTMLButtonElement> & { asChild?: boolean; children: React.ReactNode }\n>(({ children, onClick, ...props }, ref) => {\n const ctx = React.useContext(DropdownMenuContext)\n if (!ctx) return null\n\n const mergedRef = mergeRefs<HTMLButtonElement>(ctx.triggerRef, ref)\n\n const handleClick = (e: React.MouseEvent<HTMLButtonElement>) => {\n ctx.setOpen(!ctx.open)\n onClick?.(e)\n }\n\n return (\n <button ref={mergedRef} type=\"button\" onClick={handleClick} {...(props as any)}>\n {children}\n </button>\n )\n})\nDropdownMenuTrigger.displayName = \"DropdownMenuTrigger\"\n\nconst DropdownMenuGroup = ({ children }: { children: React.ReactNode }) => <>{children}</>\nconst DropdownMenuPortal = ({ children }: { children: React.ReactNode }) => <Portal>{children}</Portal>\nconst DropdownMenuSub = ({ children }: { children: React.ReactNode }) => <>{children}</>\n\nconst DropdownMenuContent = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement> & { sideOffset?: number }\n>(({ className, sideOffset = 4, style, ...props }, ref) => {\n const ctx = React.useContext(DropdownMenuContext)\n const [pos, setPos] = React.useState({ top: 0, left: 0 })\n const open = !!ctx?.open\n const trigger = ctx?.triggerRef.current ?? null\n\n React.useLayoutEffect(() => {\n if (!trigger) return\n const rect = trigger.getBoundingClientRect()\n setPos({ top: rect.bottom + sideOffset, left: rect.left })\n }, [trigger, sideOffset])\n\n useOnClickOutside(\n [ctx?.contentRef ?? { current: null }, ctx?.triggerRef ?? { current: null }],\n () => ctx?.setOpen(false),\n open\n )\n\n if (!ctx || !open || !trigger) return null\n\n return (\n <DropdownMenuPortal>\n <div\n ref={mergeRefs(ctx.contentRef, ref)}\n className={cn(\n \"z-50 min-w-[8rem] overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-md\",\n className\n )}\n style={{ position: \"fixed\", top: pos.top, left: pos.left, ...style }}\n {...(props as any)}\n />\n </DropdownMenuPortal>\n )\n})\nDropdownMenuContent.displayName = \"DropdownMenuContent\"\n\ntype SelectEventLike = Event & { preventDefault: () => void; defaultPrevented: boolean }\n\nconst DropdownMenuItem = React.forwardRef<\n HTMLButtonElement,\n React.ButtonHTMLAttributes<HTMLButtonElement> & {\n inset?: boolean\n onSelect?: (event: SelectEventLike) => void\n }\n>(({ className, inset, onSelect, onClick, ...props }, ref) => {\n const ctx = React.useContext(DropdownMenuContext)\n return (\n <button\n ref={ref}\n type=\"button\"\n className={cn(\n \"relative flex w-full cursor-default select-none items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-none transition-colors hover:bg-accent hover:text-accent-foreground disabled:pointer-events-none disabled:opacity-50\",\n inset && \"pl-8\",\n className\n )}\n onClick={(e) => {\n onSelect?.(e.nativeEvent as SelectEventLike)\n onClick?.(e)\n if (!e.isDefaultPrevented()) {\n ctx?.setOpen(false)\n }\n }}\n {...(props as any)}\n />\n )\n})\nDropdownMenuItem.displayName = \"DropdownMenuItem\"\n\nconst DropdownMenuCheckboxItem = React.forwardRef<\n HTMLButtonElement,\n React.ButtonHTMLAttributes<HTMLButtonElement> & {\n checked?: boolean\n onCheckedChange?: (checked: boolean) => void\n }\n>(({ className, children, checked = false, onCheckedChange, onClick, ...props }, ref) => (\n <button\n ref={ref}\n type=\"button\"\n className={cn(\n \"relative flex w-full cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none transition-colors hover:bg-accent hover:text-accent-foreground disabled:pointer-events-none disabled:opacity-50\",\n className\n )}\n onClick={(e) => {\n onCheckedChange?.(!checked)\n onClick?.(e)\n }}\n {...(props as any)}\n >\n <span className=\"absolute left-2 flex h-3.5 w-3.5 items-center justify-center\">\n {checked ? <Check className=\"h-4 w-4\" /> : null}\n </span>\n {children}\n </button>\n))\nDropdownMenuCheckboxItem.displayName = \"DropdownMenuCheckboxItem\"\n\nconst DropdownMenuRadioGroup = ({\n value,\n onValueChange,\n children,\n}: {\n value?: string\n onValueChange?: (value: string) => void\n children: React.ReactNode\n}) => (\n <DropdownMenuRadioGroupContext.Provider value={{ value, onValueChange }}>\n {children}\n </DropdownMenuRadioGroupContext.Provider>\n)\n\nconst DropdownMenuRadioItem = React.forwardRef<\n HTMLButtonElement,\n React.ButtonHTMLAttributes<HTMLButtonElement> & { value: string }\n>(({ className, children, value, onClick, ...props }, ref) => {\n const radioCtx = React.useContext(DropdownMenuRadioGroupContext)\n const menuCtx = React.useContext(DropdownMenuContext)\n const checked = radioCtx?.value === value\n return (\n <button\n ref={ref}\n type=\"button\"\n className={cn(\n \"relative flex w-full cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none transition-colors hover:bg-accent hover:text-accent-foreground disabled:pointer-events-none disabled:opacity-50\",\n className\n )}\n onClick={(e) => {\n radioCtx?.onValueChange?.(value)\n onClick?.(e)\n menuCtx?.setOpen(false)\n }}\n {...(props as any)}\n >\n <span className=\"absolute left-2 flex h-3.5 w-3.5 items-center justify-center\">\n {checked ? <Circle className=\"h-2 w-2 fill-current\" /> : null}\n </span>\n {children}\n </button>\n )\n})\nDropdownMenuRadioItem.displayName = \"DropdownMenuRadioItem\"\n\nconst DropdownMenuLabel = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement> & {\n inset?: boolean\n }\n>(({ className, inset, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\"px-2 py-1.5 text-sm font-semibold\", inset && \"pl-8\", className)}\n {...(props as any)}\n />\n))\nDropdownMenuLabel.displayName = \"DropdownMenuLabel\"\n\nconst DropdownMenuSeparator = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\"-mx-1 my-1 h-px bg-muted\", className)}\n {...(props as any)}\n />\n))\nDropdownMenuSeparator.displayName = \"DropdownMenuSeparator\"\n\nconst DropdownMenuShortcut = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLSpanElement>) => (\n <span\n className={cn(\"ml-auto text-xs tracking-widest opacity-60\", className)}\n {...(props as any)}\n />\n)\nDropdownMenuShortcut.displayName = \"DropdownMenuShortcut\"\n\nconst DropdownMenuSubTrigger = React.forwardRef<\n HTMLButtonElement,\n React.ButtonHTMLAttributes<HTMLButtonElement> & { inset?: boolean }\n>(({ className, inset, children, ...props }, ref) => (\n <button\n ref={ref}\n type=\"button\"\n className={cn(\n \"flex w-full cursor-default select-none items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-none hover:bg-accent\",\n inset && \"pl-8\",\n className\n )}\n {...(props as any)}\n >\n {children}\n <ChevronRight className=\"ml-auto\" />\n </button>\n))\nDropdownMenuSubTrigger.displayName = \"DropdownMenuSubTrigger\"\n\nconst DropdownMenuSubContent = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\n \"z-50 min-w-[8rem] overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-lg\",\n className\n )}\n {...(props as any)}\n />\n))\nDropdownMenuSubContent.displayName = \"DropdownMenuSubContent\"\n\nexport {\n DropdownMenu,\n DropdownMenuTrigger,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuCheckboxItem,\n DropdownMenuRadioItem,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuShortcut,\n DropdownMenuGroup,\n DropdownMenuPortal,\n DropdownMenuSub,\n DropdownMenuSubContent,\n DropdownMenuSubTrigger,\n DropdownMenuRadioGroup,\n}\n","\"use client\"\n\nimport * as React from \"react\"\n\nimport { cn } from \"../utils\"\nimport { mergeRefs, Portal, useControllableState, useOnClickOutside } from \"./internal/ui-core\"\n\ninterface PopoverContextValue {\n open: boolean\n setOpen: (open: boolean) => void\n triggerRef: React.RefObject<HTMLButtonElement>\n anchorRef: React.RefObject<HTMLSpanElement>\n contentRef: React.RefObject<HTMLDivElement>\n}\n\nconst PopoverContext = React.createContext<PopoverContextValue | null>(null)\n\ninterface PopoverProps {\n open?: boolean\n defaultOpen?: boolean\n onOpenChange?: (open: boolean) => void\n children: React.ReactNode\n}\n\nconst Popover = ({ open, defaultOpen = false, onOpenChange, children }: PopoverProps) => {\n const [isOpen, setIsOpen] = useControllableState({\n value: open,\n defaultValue: defaultOpen,\n onChange: onOpenChange,\n })\n const triggerRef = React.useRef<HTMLButtonElement>(null)\n const anchorRef = React.useRef<HTMLSpanElement>(null)\n const contentRef = React.useRef<HTMLDivElement>(null)\n\n return (\n <PopoverContext.Provider value={{ open: isOpen, setOpen: setIsOpen, triggerRef, anchorRef, contentRef }}>\n {children}\n </PopoverContext.Provider>\n )\n}\n\ninterface PopoverTriggerProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n asChild?: boolean\n children: React.ReactNode\n}\n\nconst PopoverTrigger = React.forwardRef<HTMLButtonElement, PopoverTriggerProps>(\n ({ children, onClick, ...props }, ref) => {\n const ctx = React.useContext(PopoverContext)\n if (!ctx) return null\n\n const mergedRef = mergeRefs<HTMLButtonElement>(ctx.triggerRef, ref)\n\n const handleClick = (e: React.MouseEvent<HTMLButtonElement>) => {\n ctx.setOpen(!ctx.open)\n onClick?.(e)\n }\n\n return (\n <button ref={mergedRef} type=\"button\" onClick={handleClick} {...(props as any)}>\n {children}\n </button>\n )\n }\n)\nPopoverTrigger.displayName = \"PopoverTrigger\"\n\nconst PopoverAnchor = React.forwardRef<HTMLSpanElement, React.HTMLAttributes<HTMLSpanElement>>(\n ({ ...props }, ref) => {\n const ctx = React.useContext(PopoverContext)\n if (!ctx) return null\n\n return (\n <span ref={mergeRefs(ctx.anchorRef, ref)} {...(props as any)} />\n )\n }\n)\nPopoverAnchor.displayName = \"PopoverAnchor\"\n\ninterface PopoverContentProps extends React.HTMLAttributes<HTMLDivElement> {\n align?: \"start\" | \"center\" | \"end\"\n sideOffset?: number\n}\n\nconst PopoverContent = React.forwardRef<HTMLDivElement, PopoverContentProps>(\n ({ className, align = \"center\", sideOffset = 4, style, ...props }, ref) => {\n const ctx = React.useContext(PopoverContext)\n const [position, setPosition] = React.useState({ top: 0, left: 0 })\n const open = !!ctx?.open\n const anchor = ctx?.anchorRef.current ?? ctx?.triggerRef.current ?? null\n\n React.useLayoutEffect(() => {\n if (!anchor) return\n const rect = anchor.getBoundingClientRect()\n let left = rect.left + rect.width / 2\n if (align === \"start\") left = rect.left\n if (align === \"end\") left = rect.right\n setPosition({ top: rect.bottom + sideOffset, left })\n }, [anchor, align, sideOffset])\n\n useOnClickOutside(\n [ctx?.contentRef ?? { current: null }, ctx?.triggerRef ?? { current: null }],\n () => ctx?.setOpen(false),\n open\n )\n\n if (!ctx || !open) return null\n\n return (\n <Portal>\n <div\n ref={mergeRefs(ctx.contentRef, ref)}\n className={cn(\n \"z-50 w-72 rounded-md border bg-popover p-4 text-popover-foreground shadow-md outline-none\",\n className\n )}\n style={{\n position: \"fixed\",\n top: position.top,\n left: position.left,\n transform: align === \"center\" ? \"translateX(-50%)\" : align === \"end\" ? \"translateX(-100%)\" : undefined,\n ...style,\n }}\n {...(props as any)}\n />\n </Portal>\n )\n }\n)\nPopoverContent.displayName = \"PopoverContent\"\n\nexport { Popover, PopoverTrigger, PopoverContent, PopoverAnchor }\n","\"use client\"\n\nimport * as React from \"react\"\n\nimport { cn } from \"../utils\"\n\nexport interface ProgressProps extends React.HTMLAttributes<HTMLDivElement> {\n value?: number\n max?: number\n}\n\nconst Progress = React.forwardRef<HTMLDivElement, ProgressProps>(\n ({ className, value = 0, max = 100, ...props }, ref) => {\n const safeMax = max <= 0 ? 100 : max\n const safeValue = Math.max(0, Math.min(value, safeMax))\n const percent = (safeValue / safeMax) * 100\n\n return (\n <div\n ref={ref}\n role=\"progressbar\"\n aria-valuemin={0}\n aria-valuemax={safeMax}\n aria-valuenow={safeValue}\n className={cn(\n \"relative h-2 w-full overflow-hidden rounded-full bg-primary/20\",\n className\n )}\n {...(props as any)}\n >\n <div\n className=\"h-full w-full flex-1 bg-primary transition-all\"\n style={{ transform: `translateX(-${100 - percent}%)` }}\n />\n </div>\n )\n }\n)\nProgress.displayName = \"Progress\"\n\nexport { Progress }\n","\"use client\"\n\nimport * as React from \"react\"\n\nimport { cn } from \"../utils\"\n\nconst ScrollArea = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, children, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\"relative overflow-auto\", className)}\n {...(props as any)}\n >\n {children}\n </div>\n))\nScrollArea.displayName = \"ScrollArea\"\n\ninterface ScrollBarProps extends React.HTMLAttributes<HTMLDivElement> {\n orientation?: \"vertical\" | \"horizontal\"\n}\n\nconst ScrollBar = React.forwardRef<HTMLDivElement, ScrollBarProps>(\n ({ className, orientation = \"vertical\", ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\n \"pointer-events-none absolute\",\n orientation === \"vertical\"\n ? \"right-0 top-0 h-full w-2.5\"\n : \"bottom-0 left-0 h-2.5 w-full\",\n className\n )}\n {...(props as any)}\n />\n )\n)\nScrollBar.displayName = \"ScrollBar\"\n\nexport { ScrollArea, ScrollBar }\n","\"use client\"\n\nimport * as React from \"react\"\nimport { Check, ChevronDown, ChevronUp } from \"lucide-react\"\n\nimport { cn } from \"../utils\"\nimport { mergeRefs, Portal, useControllableState, useOnClickOutside } from \"./internal/ui-core\"\n\ninterface SelectContextValue {\n open: boolean\n setOpen: (open: boolean) => void\n value?: string\n setValue: (value: string) => void\n triggerRef: React.RefObject<HTMLButtonElement>\n contentRef: React.RefObject<HTMLDivElement>\n itemsRef: React.MutableRefObject<Map<string, React.ReactNode>>\n}\n\nconst SelectContext = React.createContext<SelectContextValue | null>(null)\nconst SelectGroupContext = React.createContext<boolean>(false)\n\ninterface SelectProps {\n value?: string\n defaultValue?: string\n onValueChange?: (value: string) => void\n open?: boolean\n defaultOpen?: boolean\n onOpenChange?: (open: boolean) => void\n disabled?: boolean\n children: React.ReactNode\n}\n\nconst Select = ({\n value,\n defaultValue,\n onValueChange,\n open,\n defaultOpen = false,\n onOpenChange,\n disabled = false,\n children,\n}: SelectProps) => {\n const [isOpen, setIsOpen] = useControllableState({\n value: open,\n defaultValue: defaultOpen,\n onChange: onOpenChange,\n })\n const [currentValue, setCurrentValue] = useControllableState<string | undefined>({\n value,\n defaultValue,\n onChange: (next) => {\n if (next !== undefined) {\n onValueChange?.(next)\n }\n },\n })\n const triggerRef = React.useRef<HTMLButtonElement>(null)\n const contentRef = React.useRef<HTMLDivElement>(null)\n const itemsRef = React.useRef<Map<string, React.ReactNode>>(new Map())\n\n return (\n <SelectContext.Provider\n value={{\n open: disabled ? false : isOpen,\n setOpen: disabled ? () => undefined : setIsOpen,\n value: currentValue,\n setValue: (next) => {\n if (disabled) return\n setCurrentValue(next)\n setIsOpen(false)\n },\n triggerRef,\n contentRef,\n itemsRef,\n }}\n >\n {children}\n </SelectContext.Provider>\n )\n}\n\nconst SelectGroup = ({ children }: { children: React.ReactNode }) => (\n <SelectGroupContext.Provider value={true}>{children}</SelectGroupContext.Provider>\n)\n\nconst SelectValue = ({\n placeholder,\n children,\n}: {\n placeholder?: React.ReactNode\n children?: React.ReactNode\n}) => {\n const ctx = React.useContext(SelectContext)\n if (!ctx) return null\n if (children) return <>{children}</>\n if (ctx.value && ctx.itemsRef.current.has(ctx.value)) {\n return <>{ctx.itemsRef.current.get(ctx.value)}</>\n }\n return <span className=\"text-muted-foreground\">{placeholder}</span>\n}\n\nconst SelectTrigger = React.forwardRef<\n HTMLButtonElement,\n React.ButtonHTMLAttributes<HTMLButtonElement>\n>(({ className, children, onClick, ...props }, ref) => {\n const ctx = React.useContext(SelectContext)\n if (!ctx) return null\n\n return (\n <button\n ref={mergeRefs(ctx.triggerRef, ref)}\n type=\"button\"\n className={cn(\n \"flex h-9 w-full items-center justify-between whitespace-nowrap rounded-md border border-input bg-transparent px-3 py-2 text-sm shadow-sm ring-offset-background focus:outline-none focus:ring-1 focus:ring-ring disabled:cursor-not-allowed disabled:opacity-50 [&>span]:line-clamp-1\",\n className\n )}\n onClick={(e) => {\n ctx.setOpen(!ctx.open)\n onClick?.(e)\n }}\n {...(props as any)}\n >\n <span>{children}</span>\n <ChevronDown className=\"h-4 w-4 opacity-50\" />\n </button>\n )\n})\nSelectTrigger.displayName = \"SelectTrigger\"\n\nconst SelectScrollUpButton = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\"flex cursor-default items-center justify-center py-1\", className)}\n {...(props as any)}\n >\n <ChevronUp className=\"h-4 w-4\" />\n </div>\n))\nSelectScrollUpButton.displayName = \"SelectScrollUpButton\"\n\nconst SelectScrollDownButton = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\"flex cursor-default items-center justify-center py-1\", className)}\n {...(props as any)}\n >\n <ChevronDown className=\"h-4 w-4\" />\n </div>\n))\nSelectScrollDownButton.displayName = \"SelectScrollDownButton\"\n\nconst SelectContent = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement> & {\n position?: \"item-aligned\" | \"popper\"\n }\n>(({ className, children, style, ...props }, ref) => {\n const ctx = React.useContext(SelectContext)\n const [pos, setPos] = React.useState({ top: 0, left: 0, width: 0 })\n const open = !!ctx?.open\n const trigger = ctx?.triggerRef.current ?? null\n\n React.useLayoutEffect(() => {\n if (!trigger) return\n const rect = trigger.getBoundingClientRect()\n setPos({ top: rect.bottom + 4, left: rect.left, width: rect.width })\n }, [trigger])\n\n useOnClickOutside(\n [ctx?.contentRef ?? { current: null }, ctx?.triggerRef ?? { current: null }],\n () => ctx?.setOpen(false),\n open\n )\n\n if (!ctx || !open || !trigger) return null\n\n return (\n <Portal>\n <div\n ref={mergeRefs(ctx.contentRef, ref)}\n className={cn(\n \"relative z-50 max-h-80 overflow-y-auto overflow-x-hidden rounded-md border bg-popover text-popover-foreground shadow-md\",\n className\n )}\n style={{\n position: \"fixed\",\n top: pos.top,\n left: pos.left,\n minWidth: Math.max(pos.width, 128),\n ...style,\n }}\n {...(props as any)}\n >\n <div className=\"p-1\">{children}</div>\n </div>\n </Portal>\n )\n})\nSelectContent.displayName = \"SelectContent\"\n\nconst SelectLabel = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\"px-2 py-1.5 text-sm font-semibold\", className)}\n {...(props as any)}\n />\n))\nSelectLabel.displayName = \"SelectLabel\"\n\ninterface SelectItemProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n value: string\n}\n\nconst SelectItem = React.forwardRef<HTMLButtonElement, SelectItemProps>(\n ({ className, children, value, onClick, ...props }, ref) => {\n const ctx = React.useContext(SelectContext)\n\n React.useEffect(() => {\n if (!ctx) return\n ctx.itemsRef.current.set(value, children)\n return () => {\n ctx.itemsRef.current.delete(value)\n }\n }, [ctx, value, children])\n\n if (!ctx) return null\n\n const selected = ctx.value === value\n\n return (\n <button\n ref={ref}\n type=\"button\"\n className={cn(\n \"relative flex w-full cursor-default select-none items-center rounded-sm py-1.5 pl-2 pr-8 text-sm outline-none hover:bg-accent hover:text-accent-foreground disabled:pointer-events-none disabled:opacity-50\",\n className\n )}\n onClick={(e) => {\n ctx.setValue(value)\n onClick?.(e)\n }}\n {...(props as any)}\n >\n <span className=\"absolute right-2 flex h-3.5 w-3.5 items-center justify-center\">\n {selected ? <Check className=\"h-4 w-4\" /> : null}\n </span>\n <span>{children}</span>\n </button>\n )\n }\n)\nSelectItem.displayName = \"SelectItem\"\n\nconst SelectSeparator = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\"-mx-1 my-1 h-px bg-muted\", className)}\n {...(props as any)}\n />\n))\nSelectSeparator.displayName = \"SelectSeparator\"\n\nexport {\n Select,\n SelectGroup,\n SelectValue,\n SelectTrigger,\n SelectContent,\n SelectLabel,\n SelectItem,\n SelectSeparator,\n SelectScrollUpButton,\n SelectScrollDownButton,\n}\n","\"use client\"\n\nimport * as React from \"react\"\n\nimport { cn } from \"../utils\"\n\nexport interface SeparatorProps extends React.HTMLAttributes<HTMLDivElement> {\n orientation?: \"horizontal\" | \"vertical\"\n decorative?: boolean\n}\n\nconst Separator = React.forwardRef<HTMLDivElement, SeparatorProps>(\n (\n { className, orientation = \"horizontal\", decorative = true, ...props },\n ref\n ) => (\n <div\n ref={ref}\n role={decorative ? undefined : \"separator\"}\n aria-orientation={orientation}\n className={cn(\n \"shrink-0 bg-border\",\n orientation === \"horizontal\" ? \"h-[1px] w-full\" : \"h-full w-[1px]\",\n className\n )}\n {...(props as any)}\n />\n )\n)\nSeparator.displayName = \"Separator\"\n\nexport { Separator }\n","\"use client\"\n\nimport * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\nimport { X } from \"lucide-react\"\n\nimport { cn } from \"../utils\"\nimport {\n Dialog as Sheet,\n DialogTrigger as SheetTrigger,\n DialogClose as SheetClose,\n DialogPortal as SheetPortal,\n DialogOverlay as SheetOverlay,\n DialogContent as BaseDialogContent,\n} from \"./Dialog\"\n\nconst sheetVariants = cva(\n \"fixed z-[10000] gap-4 bg-background p-6 shadow-lg transition ease-in-out translate-x-0 translate-y-0\",\n {\n variants: {\n side: {\n top: \"inset-x-0 top-0 left-0 border-b\",\n bottom: \"inset-x-0 bottom-0 left-0 border-t\",\n left: \"inset-y-0 left-0 top-0 h-full w-3/4 border-r sm:max-w-sm\",\n right: \"inset-y-0 right-0 top-0 h-full w-3/4 border-l sm:max-w-sm\",\n },\n },\n defaultVariants: {\n side: \"right\",\n },\n }\n)\n\ninterface SheetContentProps\n extends Omit<React.ComponentPropsWithoutRef<typeof BaseDialogContent>, \"children\">,\n VariantProps<typeof sheetVariants> {\n children?: React.ReactNode\n}\n\nconst SheetContent = React.forwardRef<HTMLDivElement, SheetContentProps>(\n ({ side = \"right\", className, children, ...props }, ref) => (\n <BaseDialogContent\n ref={ref}\n className={cn(\n \"max-w-none rounded-none\",\n sheetVariants({ side }),\n className\n )}\n showCloseButton={false}\n {...(props as any)}\n >\n <SheetClose className=\"absolute right-4 top-4 rounded-sm opacity-70 transition-opacity hover:opacity-100\">\n <X className=\"h-4 w-4\" />\n <span className=\"sr-only\">Close</span>\n </SheetClose>\n {children}\n </BaseDialogContent>\n )\n)\nSheetContent.displayName = \"SheetContent\"\n\nconst SheetHeader = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLDivElement>) => (\n <div\n className={cn(\n \"flex flex-col space-y-2 text-center sm:text-left\",\n className\n )}\n {...(props as any)}\n />\n)\nSheetHeader.displayName = \"SheetHeader\"\n\nconst SheetFooter = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLDivElement>) => (\n <div\n className={cn(\n \"flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2\",\n className\n )}\n {...(props as any)}\n />\n)\nSheetFooter.displayName = \"SheetFooter\"\n\nconst SheetTitle = React.forwardRef<\n HTMLHeadingElement,\n React.HTMLAttributes<HTMLHeadingElement>\n>(({ className, ...props }, ref) => (\n <h2\n ref={ref}\n className={cn(\"text-lg font-semibold text-foreground\", className)}\n {...(props as any)}\n />\n))\nSheetTitle.displayName = \"SheetTitle\"\n\nconst SheetDescription = React.forwardRef<\n HTMLParagraphElement,\n React.HTMLAttributes<HTMLParagraphElement>\n>(({ className, ...props }, ref) => (\n <p\n ref={ref}\n className={cn(\"text-sm text-muted-foreground\", className)}\n {...(props as any)}\n />\n))\nSheetDescription.displayName = \"SheetDescription\"\n\nexport {\n Sheet,\n SheetPortal,\n SheetOverlay,\n SheetTrigger,\n SheetClose,\n SheetContent,\n SheetHeader,\n SheetFooter,\n SheetTitle,\n SheetDescription,\n}\n","import * as React from \"react\"\n\nimport { cn } from \"../utils\"\n\nconst Textarea = React.forwardRef<\n HTMLTextAreaElement,\n React.ComponentProps<\"textarea\">\n>(({ className, ...props }, ref) => {\n return (\n <textarea\n className={cn(\n \"flex min-h-[60px] w-full rounded-md border border-input bg-transparent px-3 py-2 text-base shadow-sm placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50 md:text-sm\",\n className\n )}\n ref={ref}\n {...(props as any)}\n />\n )\n})\nTextarea.displayName = \"Textarea\"\n\nexport { Textarea }\n","\"use client\"\n\nimport * as React from \"react\"\n\nimport { cn } from \"../utils\"\nimport { mergeRefs, Portal } from \"./internal/ui-core\"\n\nconst TooltipConfigContext = React.createContext<{ delayDuration: number }>({\n delayDuration: 200,\n})\n\ninterface TooltipContextValue {\n open: boolean\n setOpen: (open: boolean) => void\n triggerRef: React.RefObject<HTMLSpanElement>\n}\n\nconst TooltipContext = React.createContext<TooltipContextValue | null>(null)\n\nconst TooltipProvider = ({\n children,\n delayDuration = 200,\n}: {\n children: React.ReactNode\n delayDuration?: number\n}) => {\n return (\n <TooltipConfigContext.Provider value={{ delayDuration }}>\n {children}\n </TooltipConfigContext.Provider>\n )\n}\n\nconst Tooltip = ({ children }: { children: React.ReactNode }) => {\n const [open, setOpen] = React.useState(false)\n const triggerRef = React.useRef<HTMLSpanElement>(null)\n return (\n <TooltipContext.Provider value={{ open, setOpen, triggerRef }}>\n {children}\n </TooltipContext.Provider>\n )\n}\n\nconst TooltipTrigger = React.forwardRef<\n HTMLSpanElement,\n React.HTMLAttributes<HTMLSpanElement> & { asChild?: boolean; children: React.ReactNode }\n>(({ children, ...props }, ref) => {\n const ctx = React.useContext(TooltipContext)\n const cfg = React.useContext(TooltipConfigContext)\n const timer = React.useRef<ReturnType<typeof setTimeout> | null>(null)\n if (!ctx) return null\n\n const setRef = mergeRefs(ctx.triggerRef, ref)\n\n const openWithDelay = () => {\n if (timer.current) clearTimeout(timer.current)\n timer.current = setTimeout(() => ctx.setOpen(true), cfg.delayDuration)\n }\n\n const closeNow = () => {\n if (timer.current) clearTimeout(timer.current)\n ctx.setOpen(false)\n }\n\n const shared = {\n onMouseEnter: openWithDelay,\n onMouseLeave: closeNow,\n onFocus: openWithDelay,\n onBlur: closeNow,\n ...props,\n }\n\n return (\n <span ref={setRef} {...(shared as any)}>\n {children}\n </span>\n )\n})\nTooltipTrigger.displayName = \"TooltipTrigger\"\n\nconst TooltipContent = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement> & { sideOffset?: number }\n>(({ className, sideOffset = 4, style, ...props }, ref) => {\n const ctx = React.useContext(TooltipContext)\n const [pos, setPos] = React.useState({ top: 0, left: 0 })\n const open = !!ctx?.open\n const trigger = ctx?.triggerRef.current ?? null\n\n React.useLayoutEffect(() => {\n if (!trigger) return\n const rect = trigger.getBoundingClientRect()\n setPos({\n top: rect.top - sideOffset,\n left: rect.left + rect.width / 2,\n })\n }, [trigger, sideOffset])\n\n if (!ctx || !open || !trigger) return null\n\n return (\n <Portal>\n <div\n ref={ref}\n className={cn(\n \"z-50 overflow-hidden rounded-md bg-primary px-3 py-1.5 text-xs text-primary-foreground\",\n className\n )}\n style={{\n position: \"fixed\",\n top: pos.top,\n left: pos.left,\n transform: \"translate(-50%, -100%)\",\n ...style,\n }}\n {...(props as any)}\n />\n </Portal>\n )\n})\nTooltipContent.displayName = \"TooltipContent\"\n\nexport { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider }\n","\"use client\"\n\nimport * as React from \"react\"\n\nimport { cn } from \"../utils\"\n\ntype AvatarStatus = \"idle\" | \"loaded\" | \"error\"\n\nconst AvatarContext = React.createContext<{\n status: AvatarStatus\n setStatus: (next: AvatarStatus) => void\n} | null>(null)\n\nconst Avatar = React.forwardRef<\n HTMLSpanElement,\n React.HTMLAttributes<HTMLSpanElement>\n>(({ className, ...props }, ref) => {\n const [status, setStatus] = React.useState<AvatarStatus>(\"idle\")\n\n return (\n <AvatarContext.Provider value={{ status, setStatus }}>\n <span\n ref={ref}\n className={cn(\n \"relative flex h-10 w-10 shrink-0 overflow-hidden rounded-full\",\n className\n )}\n {...(props as any)}\n />\n </AvatarContext.Provider>\n )\n})\nAvatar.displayName = \"Avatar\"\n\nconst AvatarImage = React.forwardRef<\n HTMLImageElement,\n React.ImgHTMLAttributes<HTMLImageElement>\n>(({ className, onLoad, onError, ...props }, ref) => {\n const ctx = React.useContext(AvatarContext)\n\n return (\n <img\n ref={ref}\n className={cn(\n \"aspect-square h-full w-full\",\n ctx?.status === \"error\" ? \"hidden\" : undefined,\n className\n )}\n onLoad={(e) => {\n ctx?.setStatus(\"loaded\")\n onLoad?.(e)\n }}\n onError={(e) => {\n ctx?.setStatus(\"error\")\n onError?.(e)\n }}\n {...(props as any)}\n />\n )\n})\nAvatarImage.displayName = \"AvatarImage\"\n\nconst AvatarFallback = React.forwardRef<\n HTMLSpanElement,\n React.HTMLAttributes<HTMLSpanElement>\n>(({ className, ...props }, ref) => {\n const ctx = React.useContext(AvatarContext)\n const show = ctx?.status !== \"loaded\"\n\n if (!show) return null\n\n return (\n <span\n ref={ref}\n className={cn(\n \"flex h-full w-full items-center justify-center rounded-full bg-muted\",\n className\n )}\n {...(props as any)}\n />\n )\n})\nAvatarFallback.displayName = \"AvatarFallback\"\n\nexport { Avatar, AvatarImage, AvatarFallback }\n","import React from 'react';\nimport { clsx } from 'clsx';\n\n// ==================== 公共类型定义 ====================\n\n/** 基础网格项接口 */\nexport interface GridItem {\n id: string;\n [key: string]: any; // 允许额外的属性\n }\n \n /** 网格列数配置 */\n export interface GridColumns {\n /** 小屏幕列数 (640px+) */\n sm?: number;\n /** 中等屏幕列数 (768px+) */\n md?: number;\n /** 大屏幕列数 (1024px+) */\n lg?: number;\n /** 超大屏幕列数 (1280px+) */\n xl?: number;\n }\n \n /** 网格间距类型 */\n export type GridGap = 'sm' | 'md' | 'lg' | 'xl';\n \n // ==================== 公共工具函数 ====================\n \n /** 构建网格列数类名 */\n export function buildGridColsClasses(columns: GridColumns): string {\n return [\n 'grid-cols-1', // 默认单列\n columns.sm ? 'sm:grid-cols-' + (columns.sm) : '',\n columns.md ? 'md:grid-cols-' + (columns.md) : 'md:grid-cols-2',\n columns.lg ? 'lg:grid-cols-' + (columns.lg) : 'lg:grid-cols-3',\n columns.xl ? 'xl:grid-cols-' + (columns.xl) : ''\n ].filter(Boolean).join(' ');\n }\n \n /** 获取间距类名 */\n export function getGapClassName(gap: GridGap): string {\n const gapClasses: Record<GridGap, string> = {\n sm: 'gap-3',\n md: 'gap-6',\n lg: 'gap-8',\n xl: 'gap-10'\n };\n return gapClasses[gap];\n }\n \n // ==================== 通用网格组件 ====================\n \n /** 通用网格组件 Props */\n export interface GridProps<T extends GridItem> {\n /** 数据项数组 */\n items: T[];\n /** 渲染函数 */\n renderItem: (item: T, index: number) => React.ReactNode;\n /** 网格列数配置 */\n columns?: GridColumns;\n /** 间距配置 */\n gap?: GridGap;\n /** 额外的容器类名 */\n className?: string;\n /** 容器样式 */\n style?: React.CSSProperties;\n }\n \n /** 通用网格组件 */\n export function Grid<T extends GridItem>({\n items,\n renderItem,\n columns = { md: 2, lg: 3 },\n gap = 'md',\n className = '',\n style\n }: GridProps<T>) {\n const gridColsClasses = buildGridColsClasses(columns);\n const gapClass = getGapClassName(gap);\n \n return (\n <div \n className={clsx('grid', gridColsClasses, gapClass, className)}\n style={style}\n >\n {items.map((item, index) => (\n <div key={item.id}>\n {renderItem(item, index)}\n </div>\n ))}\n </div>\n );\n }","import React from 'react';\nimport { clsx } from 'clsx';\n\ninterface SearchBoxProps {\n searchQuery: string;\n onSearchChange: (query: string) => void;\n placeholder?: string;\n size?: 'small' | 'medium' | 'large';\n}\n\nexport const SearchBox: React.FC<SearchBoxProps> = ({ \n searchQuery, \n onSearchChange, \n placeholder = \"搜索实验项目的标题、描述或标签...\",\n size = 'large'\n}) => {\n // 根据尺寸获取样式\n const getSizeStyles = () => {\n switch (size) {\n case 'small':\n return {\n container: 'h-10',\n input: 'pl-10 pr-10 text-sm',\n icon: 'w-4 h-4',\n iconPosition: 'left-3',\n clearButton: 'right-2 w-6 h-6',\n clearIcon: 'w-3 h-3'\n };\n case 'medium':\n return {\n container: 'h-12',\n input: 'pl-12 pr-12 text-base',\n icon: 'w-5 h-5',\n iconPosition: 'left-3',\n clearButton: 'right-3 w-7 h-7',\n clearIcon: 'w-4 h-4'\n };\n case 'large':\n default:\n return {\n container: 'h-16',\n input: 'pl-6 pr-16 text-lg',\n icon: 'w-6 h-6',\n iconPosition: 'left-6',\n clearButton: 'right-4 w-8 h-8',\n clearIcon: 'w-4 h-4'\n };\n }\n };\n\n const styles = getSizeStyles();\n const isLarge = size === 'large';\n\n return (\n <div className=\"relative group w-full\">\n {/* 搜索输入框 */}\n <input\n type=\"text\"\n placeholder={placeholder}\n value={searchQuery}\n onChange={(e) => onSearchChange(e.target.value)}\n className={clsx(\n 'w-full',\n styles.container,\n styles.input,\n isLarge ? 'border-2 border-gray-200 rounded-2xl shadow-lg' : 'border border-gray-300 rounded-lg shadow-sm',\n 'bg-white focus:ring-2 focus:ring-blue-500/20 focus:border-blue-500 hover:border-gray-400',\n isLarge ? 'hover:shadow-xl' : 'hover:shadow-md',\n 'transition-all duration-300 ease-out text-gray-800 placeholder-gray-500',\n isLarge ? 'font-medium' : 'font-normal'\n )}\n />\n\n {/* 清除按钮 */}\n {searchQuery && (\n <button\n onClick={() => onSearchChange('')}\n className={clsx(\n 'absolute top-1/2',\n styles.clearButton,\n 'transform -translate-y-1/2 z-10 group/clear'\n )}\n >\n <div className={clsx(\n styles.clearButton,\n 'flex items-center justify-center rounded-full bg-gray-100 hover:bg-gray-200 transition-all duration-200 group-hover/clear:scale-105'\n )}>\n <svg \n className={clsx(styles.clearIcon, 'text-gray-500 group-hover/clear:text-gray-700')}\n fill=\"none\" \n stroke=\"currentColor\" \n viewBox=\"0 0 24 24\"\n >\n <path \n strokeLinecap=\"round\" \n strokeLinejoin=\"round\" \n strokeWidth={2} \n d=\"M6 18L18 6M6 6l12 12\" \n />\n </svg>\n </div>\n </button>\n )}\n </div>\n );\n}","'use client';\n\nimport React from 'react';\n\n// Timeline相关的类型定义\nexport interface TimelineItem {\n date: string;\n title: string;\n description: string;\n}\n\nexport interface TimelineConfig {\n items: TimelineItem[];\n}\n\ninterface TimelineProps {\n items?: TimelineItem[];\n}\n\nexport const Timeline: React.FC<TimelineProps> = ({ items = [] }) => {\n if (!items || items.length === 0) {\n return null;\n }\n\n return (\n <div className=\"relative\">\n {/* 时间线 */}\n <div className=\"absolute left-4 top-0 bottom-0 w-0.5 bg-gray-200\"></div>\n \n {/* 时间线项目 */}\n {items.map((item, index) => (\n <div key={index} className=\"relative pl-12 pb-8\">\n {/* 时间点 */}\n <div className=\"absolute left-0 w-8 h-8 rounded-full bg-blue-500 border-4 border-white shadow-md flex items-center justify-center\">\n <div className=\"w-2 h-2 rounded-full bg-white\"></div>\n </div>\n \n {/* 内容 */}\n <div className=\"bg-white rounded-lg p-4 shadow-md\">\n <div className=\"text-sm text-gray-500 mb-2\">{item.date}</div>\n <h4 className=\"text-lg font-semibold mb-2\">{item.title}</h4>\n <p className=\"text-gray-600\">{item.description}</p>\n </div>\n </div>\n ))}\n </div>\n );\n};\n\nexport default Timeline;\n","'use client';\n\nimport React, { useEffect, useRef, useState } from \"react\";\nimport { clsx } from 'clsx';\n\n// CollisionBalls相关的类型定义\nexport interface Ball {\n x: number;\n y: number;\n vx: number;\n vy: number;\n radius: number;\n color: string;\n text?: string;\n isDragging?: boolean;\n}\n\nexport interface CollisionBallsConfig {\n balls: {\n id: string;\n label: string;\n color: string;\n size: number;\n }[];\n width: number;\n height: number;\n}\n\ninterface CollisionBallsProps {\n collisionBallsConfig: CollisionBallsConfig;\n}\n\nexport const CollisionBalls: React.FC<CollisionBallsProps> = ({\n collisionBallsConfig: {\n balls,\n width,\n height\n },\n}) => {\n const canvasRef = useRef<HTMLCanvasElement>(null);\n const containerRef = useRef<HTMLDivElement>(null);\n const ballsRef = useRef<Ball[]>([]);\n const [isShaking, setIsShaking] = useState(false);\n const [draggedBall, setDraggedBall] = useState<Ball | null>(null);\n const [mousePos, setMousePos] = useState({ x: 0, y: 0 });\n const animationRef = useRef<number | null>(null);\n\n // 更新canvas尺寸\n const updateCanvasSize = () => {\n const container = containerRef.current;\n const canvas = canvasRef.current;\n if (!container || !canvas) {\n console.error('Container or canvas not found');\n return;\n }\n\n const containerWidth = container.clientWidth;\n const containerHeight = container.clientHeight;\n \n console.log('Container size:', { containerWidth, containerHeight });\n \n // 设置canvas的实际尺寸\n canvas.width = containerWidth;\n canvas.height = containerHeight;\n \n // 设置canvas的显示尺寸\n canvas.style.width = (containerWidth) + 'px';\n canvas.style.height = (containerHeight) + 'px';\n \n console.log('Canvas size updated:', {\n width: canvas.width,\n height: canvas.height,\n containerWidth,\n containerHeight\n });\n };\n\n // 初始化小球\n const initBalls = () => {\n const canvas = canvasRef.current;\n if (!canvas) {\n console.error('Canvas not found during ball initialization');\n return [];\n }\n\n console.log('Initializing balls with canvas size:', {\n width: canvas.width,\n height: canvas.height\n });\n\n return balls.map((ballConfig) => ({\n x: Math.random() * (canvas.width - 100) + 50,\n y: Math.random() * (canvas.height - 100) + 50,\n vx: (Math.random() - 0.5) * 4,\n vy: (Math.random() - 0.5) * 4,\n radius: ballConfig.size,\n color: ballConfig.color,\n text: ballConfig.label,\n isDragging: false\n }));\n };\n\n // 添加resize监听\n useEffect(() => {\n const handleResize = () => {\n console.log('Window resized');\n updateCanvasSize();\n };\n\n if (typeof window !== 'undefined') {\n window.addEventListener('resize', handleResize);\n // 初始设置尺寸\n updateCanvasSize();\n }\n\n return () => {\n if (typeof window !== 'undefined') {\n window.removeEventListener('resize', handleResize);\n }\n };\n }, []);\n\n // 动画循环\n useEffect(() => {\n const canvas = canvasRef.current;\n if (!canvas) {\n console.error('Canvas element not found');\n return;\n }\n\n const ctx = canvas.getContext(\"2d\");\n if (!ctx) {\n console.error('Failed to get canvas context');\n return;\n }\n\n console.log('Starting animation setup...');\n \n // 确保canvas尺寸已更新\n updateCanvasSize();\n \n // 初始化小球\n ballsRef.current = initBalls();\n console.log('Balls initialized:', ballsRef.current);\n\n let lastTime = performance.now();\n let frameCount = 0;\n\n const animate = (currentTime: number) => {\n try {\n // 计算帧率\n frameCount++;\n if (currentTime - lastTime >= 1000) {\n console.log('FPS: ' + (frameCount));\n frameCount = 0;\n lastTime = currentTime;\n }\n\n // 清除画布\n ctx.clearRect(0, 0, canvas.width, canvas.height);\n\n // 更新和绘制每个小球\n ballsRef.current.forEach((ball) => {\n if (!ball.isDragging) {\n updatePosition(ball, canvas.width, canvas.height);\n }\n\n for (let i = 0; i < ballsRef.current.length; i++) {\n for (let j = i + 1; j < ballsRef.current.length; j++) {\n const ball1 = ballsRef.current[i];\n const ball2 = ballsRef.current[j];\n if (ball1 && ball2) {\n checkCollision(ball1, ball2);\n }\n }\n }\n\n draw(ctx, ball);\n });\n\n // 继续动画循环\n animationRef.current = requestAnimationFrame(animate);\n } catch (error) {\n console.error('Animation error:', error);\n }\n };\n\n // 启动动画\n console.log('Starting animation loop...');\n animationRef.current = requestAnimationFrame(animate);\n\n // 清理函数\n return () => {\n console.log('Cleaning up animation...');\n if (animationRef.current) {\n cancelAnimationFrame(animationRef.current);\n animationRef.current = null;\n }\n };\n }, []);\n\n const shake = () => {\n setIsShaking(true);\n ballsRef.current.forEach((ball) => {\n ball.vx = (Math.random() - 0.5) * 10;\n ball.vy = (Math.random() - 0.5) * 10;\n });\n setTimeout(() => setIsShaking(false), 200);\n };\n\n const slowdown = () => {\n setIsShaking(true);\n ballsRef.current.forEach((ball) => {\n ball.vx = ball.vx * 0.5;\n ball.vy = ball.vy * 0.5;\n });\n setTimeout(() => setIsShaking(false), 200);\n };\n\n const checkCollision = (ball1: Ball, ball2: Ball) => {\n const dx = ball2.x - ball1.x;\n const dy = ball2.y - ball1.y;\n const distance = Math.sqrt(dx * dx + dy * dy);\n\n if (distance < ball1.radius + ball2.radius) {\n const angle = Math.atan2(dy, dx);\n const overlap = (ball1.radius + ball2.radius - distance) / 2;\n\n if (ball1.isDragging || ball2.isDragging) {\n const draggedBall = ball1.isDragging ? ball1 : ball2;\n const otherBall = ball1.isDragging ? ball2 : ball1;\n\n otherBall.x += (draggedBall === ball1 ? 1 : -1) * overlap * Math.cos(angle);\n otherBall.y += (draggedBall === ball1 ? 1 : -1) * overlap * Math.sin(angle);\n\n const pushForce = 2;\n otherBall.vx = (draggedBall === ball1 ? -1 : 1) * Math.cos(angle) * pushForce;\n otherBall.vy = (draggedBall === ball1 ? -1 : 1) * Math.sin(angle) * pushForce;\n\n return;\n }\n\n const sin = Math.sin(angle);\n const cos = Math.cos(angle);\n\n const vx1 = ball1.vx * cos + ball1.vy * sin;\n const vy1 = ball1.vy * cos - ball1.vx * sin;\n const vx2 = ball2.vx * cos + ball2.vy * sin;\n const vy2 = ball2.vy * cos - ball2.vx * sin;\n\n const newVx1 = vx2;\n const newVx2 = vx1;\n\n ball1.vx = newVx1 * cos - vy1 * sin;\n ball1.vy = vy1 * cos + newVx1 * sin;\n ball2.vx = newVx2 * cos - vy2 * sin;\n ball2.vy = vy2 * cos + newVx2 * sin;\n\n ball1.x -= overlap * Math.cos(angle);\n ball1.y -= overlap * Math.sin(angle);\n ball2.x += overlap * Math.cos(angle);\n ball2.y += overlap * Math.sin(angle);\n }\n };\n\n const updatePosition = (ball: Ball, width: number, height: number) => {\n const handleBoundaryCollision = (\n velocity: number,\n position: number,\n boundary: number,\n radius: number,\n ): [number, number] => {\n let newVelocity = velocity;\n let newPosition = position;\n\n if (position - radius < 0) {\n newPosition = radius;\n newVelocity = Math.abs(velocity);\n } else if (position + radius > boundary) {\n newPosition = boundary - radius;\n newVelocity = -Math.abs(velocity);\n }\n\n return [newVelocity, newPosition];\n };\n\n const [newVx, newX] = handleBoundaryCollision(\n ball.vx,\n ball.x,\n width,\n ball.radius,\n );\n const [newVy, newY] = handleBoundaryCollision(\n ball.vy,\n ball.y,\n height,\n ball.radius,\n );\n\n ball.vx = newVx;\n ball.vy = newVy;\n ball.x = newX;\n ball.y = newY;\n };\n\n const draw = (ctx: CanvasRenderingContext2D, ball: Ball) => {\n ctx.beginPath();\n ctx.arc(ball.x, ball.y, ball.radius, 0, Math.PI * 2);\n ctx.fillStyle = ball.color;\n ctx.fill();\n ctx.closePath();\n\n if (ball.text) {\n ctx.font = \"14px Arial\";\n ctx.fillStyle = \"#fff\";\n ctx.textAlign = \"center\";\n ctx.textBaseline = \"middle\";\n ctx.fillText(ball.text, ball.x, ball.y);\n }\n };\n\n const handleMouseDown = (event: React.MouseEvent<HTMLCanvasElement>) => {\n const mousePos = getMousePos(event);\n const ball = ballsRef.current.find((b) => {\n const dx = b.x - mousePos.x;\n const dy = b.y - mousePos.y;\n return Math.sqrt(dx * dx + dy * dy) < b.radius;\n });\n\n if (ball) {\n ball.isDragging = true;\n setDraggedBall(ball);\n }\n };\n\n const handleMouseMove = (event: React.MouseEvent<HTMLCanvasElement>) => {\n const mousePos = getMousePos(event);\n setMousePos(mousePos);\n\n if (draggedBall) {\n draggedBall.x = mousePos.x;\n draggedBall.y = mousePos.y;\n draggedBall.vx = 0;\n draggedBall.vy = 0;\n }\n };\n\n const handleMouseUp = () => {\n if (draggedBall) {\n draggedBall.isDragging = false;\n setDraggedBall(null);\n }\n };\n\n const getMousePos = (event: React.MouseEvent<HTMLCanvasElement>) => {\n const canvas = canvasRef.current;\n if (!canvas) return { x: 0, y: 0 };\n\n const rect = canvas.getBoundingClientRect();\n const scaleX = canvas.width / rect.width;\n const scaleY = canvas.height / rect.height;\n \n return {\n x: (event.clientX - rect.left) * scaleX,\n y: (event.clientY - rect.top) * scaleY\n };\n };\n\n return (\n <div style={{ width: '100%', height: '100%', position: 'relative', backgroundColor: '#f9fafb', borderRadius: '0.5rem' }}>\n <div ref={containerRef} style={{ width: '100%', height: '100%', position: 'absolute', top: 0, left: 0 }}>\n <canvas\n ref={canvasRef}\n style={{ \n width: '100%', \n height: '100%',\n display: 'block' // 确保canvas正确显示\n }}\n onMouseDown={handleMouseDown}\n onMouseMove={handleMouseMove}\n onMouseUp={handleMouseUp}\n onMouseLeave={handleMouseUp}\n />\n </div>\n <div className=\"absolute bottom-4 right-4 flex gap-2\">\n <button\n onClick={shake}\n className={clsx('px-4 py-2 bg-blue-500 text-white rounded-lg hover:bg-blue-600 transition-colors', isShaking ? \"animate-pulse\" : \"\")}\n >\n 摇一摇\n </button>\n <button\n onClick={slowdown}\n className={clsx('px-4 py-2 bg-green-500 text-white rounded-lg hover:bg-green-600 transition-colors', isShaking ? \"animate-pulse\" : \"\")}\n >\n 减速\n </button>\n </div>\n </div>\n );\n};\n\nexport default CollisionBalls;\n","'use client';\n\nimport React, { useState, useEffect, useCallback } from 'react';\nimport { \n ChevronUp, \n ChevronDown, \n GripVertical, \n Save,\n RotateCcw,\n AlertCircle\n} from 'lucide-react';\nimport { cn } from '../utils';\n\nexport interface OrderableItem {\n id: number;\n [key: string]: any;\n}\n\nexport interface OrderManagerOperations<T extends OrderableItem> {\n loadItems: () => Promise<T[]>;\n moveItemUp: (id: number) => Promise<void>;\n moveItemDown: (id: number) => Promise<void>;\n updateItemOrder: (orders: { id: number; order: number }[]) => Promise<void>;\n}\n\nexport interface GenericOrderManagerProps<T extends OrderableItem> {\n operations: OrderManagerOperations<T>;\n renderItem: (item: T, index: number, isFirst: boolean, isLast: boolean) => React.ReactNode;\n className?: string;\n title?: string;\n description?: string;\n onOrderChanged?: () => void;\n emptyMessage?: string;\n loadingMessage?: string;\n}\n\nexport function GenericOrderManager<T extends OrderableItem>({\n operations,\n renderItem,\n className = '',\n title = '顺序管理',\n description = '拖拽或使用按钮调整显示顺序',\n onOrderChanged,\n emptyMessage = '暂无数据',\n loadingMessage = '加载数据...'\n}: GenericOrderManagerProps<T>) {\n const [items, setItems] = useState<T[]>([]);\n const [originalOrder, setOriginalOrder] = useState<T[]>([]);\n const [loading, setLoading] = useState(true);\n const [saving, setSaving] = useState(false);\n const [error, setError] = useState<string | null>(null);\n const [hasChanges, setHasChanges] = useState(false);\n const [draggedItem, setDraggedItem] = useState<number | null>(null);\n\n // 加载数据\n const loadItems = useCallback(async () => {\n try {\n setLoading(true);\n setError(null);\n \n const data = await operations.loadItems();\n \n setItems(data);\n setOriginalOrder([...data]);\n setHasChanges(false);\n } catch (err) {\n console.error('❌ [通用排序] 加载数据错误:', err);\n setError(err instanceof Error ? err.message : '加载数据失败');\n } finally {\n setLoading(false);\n }\n }, [operations]);\n\n useEffect(() => {\n loadItems();\n }, [loadItems]);\n\n // 检查是否有变更\n useEffect(() => {\n const hasOrderChanged = items.some((item, index) => \n originalOrder[index]?.id !== item.id\n );\n setHasChanges(hasOrderChanged);\n }, [items, originalOrder]);\n\n // 上移项目\n const handleMoveUp = async (itemId: number) => {\n try {\n setError(null);\n \n const currentIndex = items.findIndex(item => item.id === itemId);\n if (currentIndex === -1) {\n setError('项目不存在');\n return;\n }\n if (currentIndex === 0) {\n setError('项目已经在最前面,无法上移');\n return;\n }\n \n await operations.moveItemUp(itemId);\n await loadItems();\n onOrderChanged?.();\n \n } catch (err) {\n console.error('❌ [通用排序] 上移项目错误:', err);\n setError(err instanceof Error ? err.message : '上移失败');\n }\n };\n\n // 下移项目\n const handleMoveDown = async (itemId: number) => {\n try {\n setError(null);\n \n const currentIndex = items.findIndex(item => item.id === itemId);\n if (currentIndex === -1) {\n setError('项目不存在');\n return;\n }\n if (currentIndex === items.length - 1) {\n setError('项目已经在最后面,无法下移');\n return;\n }\n \n await operations.moveItemDown(itemId);\n await loadItems();\n onOrderChanged?.();\n \n } catch (err) {\n console.error('❌ [通用排序] 下移项目错误:', err);\n setError(err instanceof Error ? err.message : '下移失败');\n }\n };\n\n // 拖拽开始\n const handleDragStart = (e: React.DragEvent, index: number) => {\n setDraggedItem(index);\n e.dataTransfer.effectAllowed = 'move';\n };\n\n // 拖拽悬停\n const handleDragOver = (e: React.DragEvent, _index: number) => {\n e.preventDefault();\n e.dataTransfer.dropEffect = 'move';\n };\n\n // 拖拽放置\n const handleDrop = async (e: React.DragEvent, dropIndex: number) => {\n e.preventDefault();\n \n if (draggedItem === null || draggedItem === dropIndex) {\n setDraggedItem(null);\n return;\n }\n\n try {\n setError(null);\n \n const newItems = [...items];\n const draggedItemData = newItems[draggedItem];\n if (!draggedItemData) return;\n \n newItems.splice(draggedItem, 1);\n newItems.splice(dropIndex, 0, draggedItemData);\n \n const itemOrders = newItems.map((item, index) => ({\n id: item.id,\n order: index,\n }));\n \n await operations.updateItemOrder(itemOrders);\n await loadItems();\n onOrderChanged?.();\n \n } catch (err) {\n console.error('❌ [通用排序] 拖拽排序错误:', err);\n setError(err instanceof Error ? err.message : '排序失败');\n } finally {\n setDraggedItem(null);\n }\n };\n\n // 保存新顺序\n const handleSaveOrder = async () => {\n try {\n setSaving(true);\n setError(null);\n \n const itemOrders = items.map((item, index) => ({\n id: item.id,\n order: index,\n }));\n\n await operations.updateItemOrder(itemOrders);\n \n setOriginalOrder([...items]);\n setHasChanges(false);\n onOrderChanged?.();\n } catch (err) {\n console.error('❌ [通用排序] 保存顺序错误:', err);\n setError(err instanceof Error ? err.message : '保存失败');\n await loadItems();\n } finally {\n setSaving(false);\n }\n };\n\n // 重置顺序\n const handleResetOrder = () => {\n setItems([...originalOrder]);\n };\n\n if (loading) {\n return (\n <div className={cn(\"flex flex-col items-center justify-center p-12 text-gray-500\", className)}>\n <div className=\"w-6 h-6 border-2 border-gray-200 border-t-blue-500 rounded-full animate-spin mb-2\" />\n <span>{loadingMessage}</span>\n </div>\n );\n }\n\n return (\n <div className={cn(\"bg-white rounded-xl p-6 shadow-md border-2 border-gray-100\", className)}>\n <div className=\"flex items-center justify-between mb-4 pb-3 border-b border-gray-100 sm:flex-row flex-col sm:items-center items-start gap-4\">\n <h3 className=\"m-0 text-gray-900 text-lg font-semibold\">{title}</h3>\n <div className=\"flex gap-3 w-full sm:w-auto\">\n {hasChanges && (\n <>\n <button\n onClick={handleResetOrder}\n className=\"flex items-center gap-2 bg-amber-500 hover:bg-amber-600 text-white px-4 py-2 rounded-lg font-medium transition-colors\"\n title=\"重置为原始顺序\"\n >\n <RotateCcw size={16} />\n 重置\n </button>\n <button\n onClick={handleSaveOrder}\n disabled={saving}\n className=\"flex items-center gap-2 bg-blue-500 hover:bg-blue-600 disabled:opacity-50 disabled:cursor-not-allowed text-white px-4 py-2 rounded-lg font-medium transition-colors\"\n title=\"保存新顺序\"\n >\n <Save size={16} />\n {saving ? '保存中...' : '保存顺序'}\n </button>\n </>\n )}\n </div>\n </div>\n\n {error && (\n <div className=\"flex items-center gap-2 bg-red-50 text-red-600 p-3 rounded-lg mb-4 border border-red-200\">\n <AlertCircle size={16} />\n <span>{error}</span>\n </div>\n )}\n\n <div className=\"bg-slate-50 border border-slate-200 rounded-lg p-4 mb-6\">\n <p className=\"m-0 mb-2 color-slate-500 text-sm\">{description}</p>\n <ul className=\"m-0 pl-6 color-slate-500 text-sm list-disc\">\n <li className=\"mb-1\">使用拖拽:点击并拖动 <GripVertical size={14} className=\"inline-block align-middle text-gray-500\" /> 图标</li>\n <li className=\"mb-1\">使用按钮:点击 <ChevronUp size={14} className=\"inline-block align-middle text-gray-500\" /> 或 <ChevronDown size={14} className=\"inline-block align-middle text-gray-500\" /> 按钮</li>\n <li>完成调整后,点击\"保存顺序\"按钮保存更改</li>\n </ul>\n </div>\n\n <div className=\"flex flex-col gap-3\">\n {items.map((item, index) => (\n <div\n key={item.id}\n className={cn(\n \"flex items-center gap-3 p-4 bg-gray-50 border-2 border-gray-200 rounded-lg transition-all hover:border-gray-300 hover:shadow-sm\",\n draggedItem === index && \"opacity-50 rotate-2 border-blue-500\"\n )}\n draggable\n onDragStart={(e) => handleDragStart(e, index)}\n onDragOver={(e) => handleDragOver(e, index)}\n onDrop={(e) => handleDrop(e, index)}\n >\n <div className=\"flex items-center cursor-grab active:cursor-grabbing text-gray-400 p-1 rounded hover:text-gray-500 hover:bg-gray-100 transition-colors\">\n <GripVertical size={20} />\n </div>\n \n <div className=\"flex-1 min-w-0\">\n {renderItem(item, index, index === 0, index === items.length - 1)}\n </div>\n\n <div className=\"flex items-center mx-3\">\n <span className=\"flex items-center justify-center w-8 h-8 bg-blue-500 text-white text-sm font-semibold rounded-full sm:w-8 sm:h-8 w-7 h-7 sm:text-sm text-xs\">\n #{index + 1}\n </span>\n </div>\n\n <div className=\"flex flex-col gap-1 sm:flex-col flex-row\">\n <button\n onClick={() => handleMoveUp(item.id)}\n disabled={index === 0}\n className=\"flex items-center justify-center w-8 h-8 p-0 border border-gray-300 bg-white text-gray-500 rounded cursor-pointer transition-all hover:bg-gray-100 hover:border-gray-400 hover:text-gray-700 disabled:opacity-40 disabled:cursor-not-allowed disabled:bg-gray-50 sm:w-8 sm:h-8 w-7 h-7\"\n title=\"上移\"\n >\n <ChevronUp size={18} />\n </button>\n <button\n onClick={() => handleMoveDown(item.id)}\n disabled={index === items.length - 1}\n className=\"flex items-center justify-center w-8 h-8 p-0 border border-gray-300 bg-white text-gray-500 rounded cursor-pointer transition-all hover:bg-gray-100 hover:border-gray-400 hover:text-gray-700 disabled:opacity-40 disabled:cursor-not-allowed disabled:bg-gray-50 sm:w-8 sm:h-8 w-7 h-7\"\n title=\"下移\"\n >\n <ChevronDown size={18} />\n </button>\n </div>\n </div>\n ))}\n </div>\n\n {items.length === 0 && (\n <div className=\"text-center p-12 text-gray-400 italic\">\n <p className=\"m-0\">{emptyMessage}</p>\n </div>\n )}\n </div>\n );\n}\n\n","'use client';\n\nimport React from 'react';\nimport { useRouter } from 'next/navigation';\nimport { cn } from '../utils';\n\nexport interface BackButtonProps {\n href?: string;\n className?: string;\n}\n\nexport const BackButton: React.FC<BackButtonProps> = ({ href, className = '' }) => {\n const router = useRouter();\n\n const handleClick = () => {\n if (href) {\n router.push(href);\n } else {\n router.back();\n }\n };\n\n return (\n <button\n onClick={handleClick}\n className={cn(\n \"inline-flex items-center px-4 py-2 text-sm font-medium text-gray-700 bg-white border border-gray-300 rounded-md hover:bg-gray-50 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-blue-500 transition-colors\",\n className\n )}\n >\n <svg\n className=\"w-5 h-5 mr-2\"\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M10 19l-7-7m0 0l7-7m-7 7h18\"\n />\n </svg>\n 返回\n </button>\n );\n};\n\nexport default BackButton;\n\n","'use client';\n\nimport React from 'react';\nimport { cn } from '../utils';\n\nexport interface FilterOption<T> {\n value: T;\n label: string;\n icon: string;\n activeColor: {\n bg: string;\n shadow: string;\n };\n count?: number;\n showCount?: boolean;\n}\n\nexport interface FilterButtonGroupProps<T> {\n label: string;\n value: T;\n options: FilterOption<T>[];\n onChange: (value: T) => void;\n className?: string;\n}\n\n// 辅助函数:将 Tailwind 背景色类名转换为实际颜色值\nfunction getColorValue(bgClass: string): string {\n const colorMap: Record<string, string> = {\n 'bg-blue-500': '#3b82f6',\n 'bg-green-500': '#10b981',\n 'bg-red-500': '#ef4444',\n 'bg-purple-500': '#8b5cf6',\n 'bg-slate-500': '#64748b',\n 'bg-emerald-500': '#10b981',\n 'bg-orange-500': '#f97316',\n };\n return colorMap[bgClass] || '#3b82f6'; // 默认蓝色\n}\n\nexport function FilterButtonGroup<T extends string>({ \n label, \n value, \n options, \n onChange,\n className\n}: FilterButtonGroupProps<T>) {\n return (\n <div className={cn(\"space-y-4\", className)}>\n <h3 className=\"text-lg font-semibold text-gray-800\">\n {label}\n </h3>\n\n <div className=\"flex gap-3\">\n {options.map((option) => {\n const isActive = value === option.value;\n \n return (\n <button\n key={option.value}\n onClick={() => onChange(option.value)}\n style={isActive ? { backgroundColor: getColorValue(option.activeColor.bg) } : undefined}\n className={cn(\n \"flex-1 h-12 rounded-lg font-medium text-sm transition-all duration-200 ease-out focus:outline-none focus:ring-2 focus:ring-opacity-50 border\",\n isActive\n ? \"text-white border-transparent shadow-md focus:ring-white\"\n : \"bg-white text-gray-700 border-gray-200 shadow-sm hover:bg-gray-50 hover:border-gray-300 hover:shadow focus:ring-blue-300\"\n )}\n >\n <div className=\"flex items-center justify-center space-x-2\">\n <span className=\"text-lg\">{option.icon}</span>\n <span>{option.label}</span>\n {option.showCount && option.count !== undefined && (\n <span className={cn(\n \"text-xs font-semibold px-2 py-0.5 rounded-full min-w-[1.25rem] text-center\",\n isActive ? \"bg-white/20 text-white\" : \"bg-gray-100 text-gray-600\"\n )}>\n {option.count}\n </span>\n )}\n </div>\n </button>\n );\n })}\n </div>\n </div>\n );\n}\n\n","'use client';\n\nimport React from 'react';\nimport { cn } from '../utils';\n\nexport interface SearchResultHintProps {\n searchQuery: string;\n resultCount: number;\n className?: string;\n}\n\nexport function SearchResultHint({ searchQuery, resultCount, className }: SearchResultHintProps) {\n if (!searchQuery) return null;\n\n return (\n <div className={cn(\"mb-6 p-4 bg-blue-50 border border-blue-200 rounded-lg\", className)}>\n <p className=\"text-sm text-blue-700\">\n 搜索 \"<span className=\"font-medium\">{searchQuery}</span>\" \n 找到 {resultCount} 个结果\n </p>\n </div>\n );\n}\n\nexport default SearchResultHint;\n\n","'use client';\n\nimport React from 'react';\nimport {\n Dialog,\n DialogContent,\n DialogHeader,\n DialogTitle,\n} from './Dialog';\nimport {\n AlertDialog,\n AlertDialogAction,\n AlertDialogCancel,\n AlertDialogContent,\n AlertDialogDescription,\n AlertDialogFooter,\n AlertDialogHeader,\n AlertDialogTitle,\n} from './AlertDialog';\nimport { cn } from '@/utils';\n\nexport interface ModalProps {\n isOpen: boolean;\n onClose: () => void;\n title?: string;\n width?: number | string;\n className?: string;\n maskClosable?: boolean;\n children: React.ReactNode;\n zIndex?: number;\n}\n\nexport const Modal: React.FC<ModalProps> = ({\n isOpen,\n onClose,\n title,\n width,\n className,\n maskClosable = true,\n children,\n zIndex = 50,\n}) => {\n return (\n <Dialog open={isOpen} onOpenChange={(open) => {\n if (!open) {\n if (maskClosable) {\n onClose();\n } else {\n // If maskClosable is false, we don't allow closing via backdrop/ESC\n }\n }\n }}>\n <DialogContent \n className={cn(\"sm:max-w-[425px]\", className) + ' z-[' + (zIndex) + ']'}\n onPointerDownOutside={(e) => {\n if (!maskClosable) e.preventDefault();\n }}\n onEscapeKeyDown={(e) => {\n if (!maskClosable) e.preventDefault();\n }}\n style={width ? { maxWidth: typeof width === 'number' ? (width) + 'px' : width } : undefined}\n >\n {title ? (\n <DialogHeader>\n <DialogTitle>{title}</DialogTitle>\n </DialogHeader>\n ) : (\n // 无障碍性:始终需要 DialogTitle,使用 sr-only 对视觉隐藏但对屏幕阅读器可见\n <DialogTitle className=\"sr-only\">弹窗</DialogTitle>\n )}\n <div className=\"py-4\">\n {children}\n </div>\n </DialogContent>\n </Dialog>\n );\n};\n\nexport interface ConfirmModalProps {\n isOpen: boolean;\n onClose: () => void;\n onConfirm: () => void;\n title?: string;\n message: string;\n confirmText?: string;\n cancelText?: string;\n isLoading?: boolean;\n}\n\nexport const ConfirmModal: React.FC<ConfirmModalProps> = ({\n isOpen,\n onClose,\n onConfirm,\n title = \"确认操作\",\n message,\n confirmText = \"确认\",\n cancelText = \"取消\",\n isLoading = false,\n}) => {\n return (\n <AlertDialog open={isOpen} onOpenChange={(open) => !open && onClose()}>\n <AlertDialogContent>\n <AlertDialogHeader>\n <AlertDialogTitle>{title}</AlertDialogTitle>\n <AlertDialogDescription>{message}</AlertDialogDescription>\n </AlertDialogHeader>\n <AlertDialogFooter>\n <AlertDialogCancel disabled={isLoading}>{cancelText}</AlertDialogCancel>\n <AlertDialogAction \n onClick={(e) => {\n e.preventDefault();\n onConfirm();\n }}\n disabled={isLoading}\n className=\"bg-destructive text-destructive-foreground hover:bg-destructive/90\"\n >\n {isLoading ? \"处理中...\" : confirmText}\n </AlertDialogAction>\n </AlertDialogFooter>\n </AlertDialogContent>\n </AlertDialog>\n );\n};\n"]}
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var chunkDUHZ7VZP_js = require('./chunk-DUHZ7VZP.js');
3
+ var chunk7VRT55ZD_js = require('./chunk-7VRT55ZD.js');
4
4
 
5
5
  // src/auth/routes/login.ts
6
6
  function addCorsHeaders(response, config, request) {
@@ -82,7 +82,7 @@ function createLoginHandler(config) {
82
82
  // 7天
83
83
  path: config.cookieOptions?.path || "/"
84
84
  };
85
- const cookieValue = `${cookieOptions.name}=${result.token}; HttpOnly=${cookieOptions.httpOnly}; Secure=${cookieOptions.secure}; SameSite=${cookieOptions.sameSite}; Max-Age=${cookieOptions.maxAge}; Path=${cookieOptions.path}`;
85
+ const cookieValue = cookieOptions.name + "=" + result.token + "; HttpOnly=" + cookieOptions.httpOnly + "; Secure=" + cookieOptions.secure + "; SameSite=" + cookieOptions.sameSite + "; Max-Age=" + cookieOptions.maxAge + "; Path=" + cookieOptions.path;
86
86
  response.headers.set("Set-Cookie", cookieValue);
87
87
  }
88
88
  return addCorsHeaders(response, config, request);
@@ -219,7 +219,7 @@ function createRegisterHandler(config) {
219
219
  maxAge: config.cookieOptions?.maxAge || 60 * 60 * 24 * 7,
220
220
  path: config.cookieOptions?.path || "/"
221
221
  };
222
- const cookieValue = `${cookieOptions.name}=${result.token}; HttpOnly=${cookieOptions.httpOnly}; Secure=${cookieOptions.secure}; SameSite=${cookieOptions.sameSite}; Max-Age=${cookieOptions.maxAge}; Path=${cookieOptions.path}`;
222
+ const cookieValue = cookieOptions.name + "=" + result.token + "; HttpOnly=" + cookieOptions.httpOnly + "; Secure=" + cookieOptions.secure + "; SameSite=" + cookieOptions.sameSite + "; Max-Age=" + cookieOptions.maxAge + "; Path=" + cookieOptions.path;
223
223
  response.headers.set("Set-Cookie", cookieValue);
224
224
  }
225
225
  return addCorsHeaders2(response, config, request);
@@ -307,7 +307,7 @@ function addCorsHeaders3(response, config, request) {
307
307
  function createMeHandler(config) {
308
308
  return async (request) => {
309
309
  try {
310
- const token = chunkDUHZ7VZP_js.getTokenFromRequest(request);
310
+ const token = chunk7VRT55ZD_js.getTokenFromRequest(request);
311
311
  if (!token) {
312
312
  const response2 = new Response(
313
313
  JSON.stringify({
@@ -387,7 +387,7 @@ function addCorsHeaders4(response, config, request) {
387
387
  function createLogoutHandler(config) {
388
388
  return async (request) => {
389
389
  try {
390
- const token = chunkDUHZ7VZP_js.getTokenFromRequest(request);
390
+ const token = chunk7VRT55ZD_js.getTokenFromRequest(request);
391
391
  if (!token) {
392
392
  const response2 = new Response(
393
393
  JSON.stringify({
@@ -519,7 +519,7 @@ function createAnalyticsAdapter(analyticsService, options) {
519
519
  sdkVersion: options?.sdkVersion || "1.0.0",
520
520
  deviceId: options?.deviceId || "server",
521
521
  generateId: options?.generateId || (() => {
522
- return `${Date.now()}_${Math.random().toString(36).substring(2, 15)}`;
522
+ return Date.now() + "_" + Math.random().toString(36).substring(2, 15);
523
523
  })
524
524
  };
525
525
  return {
@@ -542,7 +542,7 @@ function createAnalyticsAdapter(analyticsService, options) {
542
542
  timestamp: (/* @__PURE__ */ new Date()).toISOString(),
543
543
  priority: 1,
544
544
  userId: properties.userId || "anonymous",
545
- sessionId: properties.sessionId || `session_${Date.now()}_${properties.userId || "anonymous"}`,
545
+ sessionId: properties.sessionId || "session_" + Date.now() + "_" + (properties.userId || "anonymous"),
546
546
  deviceId: config.deviceId,
547
547
  platform: config.platform,
548
548
  appVersion: config.appVersion,
@@ -569,5 +569,5 @@ exports.createMeHandler = createMeHandler;
569
569
  exports.createMeOptionsHandler = createMeOptionsHandler;
570
570
  exports.createRegisterHandler = createRegisterHandler;
571
571
  exports.createRegisterOptionsHandler = createRegisterOptionsHandler;
572
- //# sourceMappingURL=chunk-CD77U7LZ.js.map
573
- //# sourceMappingURL=chunk-CD77U7LZ.js.map
572
+ //# sourceMappingURL=chunk-GBPLX42J.js.map
573
+ //# sourceMappingURL=chunk-GBPLX42J.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/auth/routes/login.ts","../src/auth/routes/register.ts","../src/auth/routes/me.ts","../src/auth/routes/logout.ts","../src/auth/routes/defaults.ts","../src/auth/routes/analytics-adapter.ts"],"names":["response","addCorsHeaders","getTokenFromRequest"],"mappings":";;;;;AAUA,SAAS,cAAA,CAAe,QAAA,EAAoB,MAAA,EAA0B,OAAA,EAA4B;AAChG,EAAA,IAAI,CAAC,MAAA,CAAO,IAAA,EAAM,OAAA,EAAS,OAAO,QAAA;AAElC,EAAA,MAAM,MAAA,GAAS,OAAA,CAAQ,OAAA,CAAQ,GAAA,CAAI,QAAQ,CAAA;AAC3C,EAAA,MAAM,cAAA,GAAiB,OAAO,IAAA,CAAK,MAAA;AAGnC,EAAA,IAAI,cAAA,EAAgB;AAClB,IAAA,IAAI,OAAO,mBAAmB,QAAA,EAAU;AACtC,MAAA,QAAA,CAAS,OAAA,CAAQ,GAAA,CAAI,6BAAA,EAA+B,cAAc,CAAA;AAAA,IACpE,CAAA,MAAA,IAAW,MAAM,OAAA,CAAQ,cAAc,KAAK,MAAA,IAAU,cAAA,CAAe,QAAA,CAAS,MAAM,CAAA,EAAG;AACrF,MAAA,QAAA,CAAS,OAAA,CAAQ,GAAA,CAAI,6BAAA,EAA+B,MAAM,CAAA;AAAA,IAC5D;AAAA,EACF,CAAA,MAAO;AAEL,IAAA,QAAA,CAAS,OAAA,CAAQ,GAAA,CAAI,6BAAA,EAA+B,MAAA,IAAU,GAAG,CAAA;AAAA,EACnE;AAEA,EAAA,IAAI,MAAA,CAAO,KAAK,WAAA,EAAa;AAC3B,IAAA,QAAA,CAAS,OAAA,CAAQ,GAAA,CAAI,kCAAA,EAAoC,MAAM,CAAA;AAAA,EACjE;AAEA,EAAA,MAAM,OAAA,GAAU,OAAO,IAAA,CAAK,OAAA,IAAW,CAAC,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,QAAA,EAAU,SAAS,CAAA;AACjF,EAAA,QAAA,CAAS,QAAQ,GAAA,CAAI,8BAAA,EAAgC,OAAA,CAAQ,IAAA,CAAK,IAAI,CAAC,CAAA;AAEvE,EAAA,MAAM,UAAU,MAAA,CAAO,IAAA,CAAK,cAAA,IAAkB,CAAC,gBAAgB,eAAe,CAAA;AAC9E,EAAA,QAAA,CAAS,QAAQ,GAAA,CAAI,8BAAA,EAAgC,OAAA,CAAQ,IAAA,CAAK,IAAI,CAAC,CAAA;AAEvE,EAAA,OAAO,QAAA;AACT;AAgBO,SAAS,mBAAmB,MAAA,EAA0B;AAC3D,EAAA,OAAO,OAAO,OAAA,KAAqB;AACjC,IAAA,IAAI,cAAmB,EAAC;AAExB,IAAA,IAAI;AAEF,MAAA,WAAA,GAAc,MAAM,QAAQ,IAAA,EAAK;AACjC,MAAA,MAAM,EAAE,KAAA,EAAO,QAAA,EAAS,GAAI,WAAA;AAG5B,MAAA,IAAI,CAAC,KAAA,IAAS,CAAC,QAAA,EAAU;AACvB,QAAA,MAAMA,YAAW,IAAI,QAAA;AAAA,UACnB,KAAK,SAAA,CAAU;AAAA,YACb,OAAA,EAAS,KAAA;AAAA,YACT,KAAA,EAAO;AAAA,WACO,CAAA;AAAA,UAChB;AAAA,YACE,MAAA,EAAQ,GAAA;AAAA,YACR,OAAA,EAAS,EAAE,cAAA,EAAgB,kBAAA;AAAmB;AAChD,SACF;AACA,QAAA,OAAO,cAAA,CAAeA,SAAAA,EAAU,MAAA,EAAQ,OAAO,CAAA;AAAA,MACjD;AAGA,MAAA,MAAM,SAAS,MAAM,MAAA,CAAO,WAAA,CAAY,MAAA,CAAO,OAAO,QAAQ,CAAA;AAG9D,MAAA,IAAI,OAAO,SAAA,EAAW;AACpB,QAAA,IAAI;AACF,UAAA,MAAM,MAAA,CAAO,SAAA,CAAU,KAAA,CAAM,oBAAA,EAAsB;AAAA,YACjD,MAAA,EAAQ,OAAO,IAAA,CAAK,EAAA;AAAA,YACpB,QAAA,EAAU,OAAO,IAAA,CAAK,IAAA;AAAA,YACtB,KAAA,EAAO,OAAO,IAAA,CAAK,KAAA;AAAA,YACnB,WAAA,EAAa,gBAAA;AAAA,YACb,SAAA,EAAA,iBAAW,IAAI,IAAA,EAAK,EAAE,WAAA;AAAY,WACnC,CAAA;AAAA,QACH,SAAS,cAAA,EAAgB;AACvB,UAAA,OAAA,CAAQ,KAAA,CAAM,oCAAoC,cAAc,CAAA;AAAA,QAClE;AAAA,MACF;AAGA,MAAA,MAAM,WAAW,IAAI,QAAA;AAAA,QACnB,KAAK,SAAA,CAAU;AAAA,UACb,OAAA,EAAS,IAAA;AAAA,UACT,IAAA,EAAM;AAAA,YACJ,MAAM,MAAA,CAAO,IAAA;AAAA,YACb,OAAO,MAAA,CAAO;AAAA,WAChB;AAAA,UACA,OAAA,EAAS;AAAA,SACK,CAAA;AAAA,QAChB;AAAA,UACE,MAAA,EAAQ,GAAA;AAAA,UACR,OAAA,EAAS,EAAE,cAAA,EAAgB,kBAAA;AAAmB;AAChD,OACF;AAGA,MAAA,IAAI,OAAO,aAAA,EAAe;AACxB,QAAA,MAAM,aAAA,GAAgB;AAAA,UACpB,IAAA,EAAM,MAAA,CAAO,aAAA,EAAe,IAAA,IAAQ,YAAA;AAAA,UACpC,QAAA,EAAU,MAAA,CAAO,aAAA,EAAe,QAAA,KAAa,KAAA;AAAA,UAC7C,QAAQ,MAAA,CAAO,aAAA,EAAe,WAAW,KAAA,IAAS,OAAA,CAAQ,IAAI,QAAA,KAAa,YAAA;AAAA,UAC3E,QAAA,EAAU,MAAA,CAAO,aAAA,EAAe,QAAA,IAAY,KAAA;AAAA,UAC5C,QAAQ,MAAA,CAAO,aAAA,EAAe,MAAA,IAAU,EAAA,GAAK,KAAK,EAAA,GAAK,CAAA;AAAA;AAAA,UACvD,IAAA,EAAM,MAAA,CAAO,aAAA,EAAe,IAAA,IAAQ;AAAA,SACtC;AAGA,QAAA,MAAM,cAAe,aAAA,CAAc,IAAA,GAAQ,MAAO,MAAA,CAAO,KAAA,GAAS,gBAAiB,aAAA,CAAc,QAAA,GAAY,cAAe,aAAA,CAAc,MAAA,GAAU,gBAAiB,aAAA,CAAc,QAAA,GAAY,eAAgB,aAAA,CAAc,MAAA,GAAU,YAAa,aAAA,CAAc,IAAA;AAClQ,QAAA,QAAA,CAAS,OAAA,CAAQ,GAAA,CAAI,YAAA,EAAc,WAAW,CAAA;AAAA,MAChD;AAEA,MAAA,OAAO,cAAA,CAAe,QAAA,EAAU,MAAA,EAAQ,OAAO,CAAA;AAAA,IACjD,SAAS,KAAA,EAAO;AACd,MAAA,OAAA,CAAQ,KAAA,CAAM,gBAAgB,KAAK,CAAA;AAGnC,MAAA,IAAI,OAAO,SAAA,EAAW;AACpB,QAAA,IAAI;AACF,UAAA,MAAM,MAAA,CAAO,SAAA,CAAU,KAAA,CAAM,mBAAA,EAAqB;AAAA,YAChD,YAAA,EAAe,MAAc,OAAA,IAAW,0BAAA;AAAA,YACxC,OAAO,WAAA,CAAY,KAAA;AAAA,YACnB,SAAA,EAAA,iBAAW,IAAI,IAAA,EAAK,EAAE,WAAA;AAAY,WACnC,CAAA;AAAA,QACH,SAAS,cAAA,EAAgB;AACvB,UAAA,OAAA,CAAQ,KAAA,CAAM,4CAA4C,cAAc,CAAA;AAAA,QAC1E;AAAA,MACF;AAEA,MAAA,MAAM,WAAW,IAAI,QAAA;AAAA,QACnB,KAAK,SAAA,CAAU;AAAA,UACb,OAAA,EAAS,KAAA;AAAA,UACT,KAAA,EAAQ,MAAc,OAAA,IAAW;AAAA,SACnB,CAAA;AAAA,QAChB;AAAA,UACE,MAAA,EAAQ,GAAA;AAAA,UACR,OAAA,EAAS,EAAE,cAAA,EAAgB,kBAAA;AAAmB;AAChD,OACF;AAEA,MAAA,OAAO,cAAA,CAAe,QAAA,EAAU,MAAA,EAAQ,OAAO,CAAA;AAAA,IACjD;AAAA,EACF,CAAA;AACF;AAKO,SAAS,0BAA0B,MAAA,EAA0B;AAClE,EAAA,OAAO,OAAO,OAAA,KAAqB;AACjC,IAAA,MAAM,QAAA,GAAW,IAAI,QAAA,CAAS,IAAA,EAAM;AAAA,MAClC,MAAA,EAAQ,GAAA;AAAA,MACR,OAAA,EAAS;AAAA,QACP,gBAAA,EAAkB;AAAA;AACpB,KACD,CAAA;AAED,IAAA,OAAO,cAAA,CAAe,QAAA,EAAU,MAAA,EAAQ,OAAO,CAAA;AAAA,EACjD,CAAA;AACF;;;ACtKA,SAASC,eAAAA,CAAe,QAAA,EAAoB,MAAA,EAA6B,OAAA,EAA4B;AACnG,EAAA,IAAI,CAAC,MAAA,CAAO,IAAA,EAAM,OAAA,EAAS,OAAO,QAAA;AAElC,EAAA,MAAM,MAAA,GAAS,OAAA,CAAQ,OAAA,CAAQ,GAAA,CAAI,QAAQ,CAAA;AAC3C,EAAA,MAAM,cAAA,GAAiB,OAAO,IAAA,CAAK,MAAA;AAGnC,EAAA,IAAI,cAAA,EAAgB;AAClB,IAAA,IAAI,OAAO,mBAAmB,QAAA,EAAU;AACtC,MAAA,QAAA,CAAS,OAAA,CAAQ,GAAA,CAAI,6BAAA,EAA+B,cAAc,CAAA;AAAA,IACpE,CAAA,MAAA,IAAW,MAAM,OAAA,CAAQ,cAAc,KAAK,MAAA,IAAU,cAAA,CAAe,QAAA,CAAS,MAAM,CAAA,EAAG;AACrF,MAAA,QAAA,CAAS,OAAA,CAAQ,GAAA,CAAI,6BAAA,EAA+B,MAAM,CAAA;AAAA,IAC5D;AAAA,EACF,CAAA,MAAO;AAEL,IAAA,QAAA,CAAS,OAAA,CAAQ,GAAA,CAAI,6BAAA,EAA+B,MAAA,IAAU,GAAG,CAAA;AAAA,EACnE;AAEA,EAAA,IAAI,MAAA,CAAO,KAAK,WAAA,EAAa;AAC3B,IAAA,QAAA,CAAS,OAAA,CAAQ,GAAA,CAAI,kCAAA,EAAoC,MAAM,CAAA;AAAA,EACjE;AAEA,EAAA,MAAM,OAAA,GAAU,OAAO,IAAA,CAAK,OAAA,IAAW,CAAC,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,QAAA,EAAU,SAAS,CAAA;AACjF,EAAA,QAAA,CAAS,QAAQ,GAAA,CAAI,8BAAA,EAAgC,OAAA,CAAQ,IAAA,CAAK,IAAI,CAAC,CAAA;AAEvE,EAAA,MAAM,UAAU,MAAA,CAAO,IAAA,CAAK,cAAA,IAAkB,CAAC,gBAAgB,eAAe,CAAA;AAC9E,EAAA,QAAA,CAAS,QAAQ,GAAA,CAAI,8BAAA,EAAgC,OAAA,CAAQ,IAAA,CAAK,IAAI,CAAC,CAAA;AAEvE,EAAA,OAAO,QAAA;AACT;AAgBO,SAAS,sBAAsB,MAAA,EAA6B;AACjE,EAAA,OAAO,OAAO,OAAA,KAAqB;AACjC,IAAA,IAAI;AAEF,MAAA,MAAM,EAAE,KAAA,EAAO,QAAA,EAAU,UAAS,GAAI,MAAM,QAAQ,IAAA,EAAK;AAGzD,MAAA,IAAI,CAAC,KAAA,IAAS,CAAC,QAAA,EAAU;AACvB,QAAA,MAAMD,YAAW,IAAI,QAAA;AAAA,UACnB,KAAK,SAAA,CAAU;AAAA,YACb,OAAA,EAAS,KAAA;AAAA,YACT,KAAA,EAAO;AAAA,WACO,CAAA;AAAA,UAChB;AAAA,YACE,MAAA,EAAQ,GAAA;AAAA,YACR,OAAA,EAAS,EAAE,cAAA,EAAgB,kBAAA;AAAmB;AAChD,SACF;AACA,QAAA,OAAOC,eAAAA,CAAeD,SAAAA,EAAU,MAAA,EAAQ,OAAO,CAAA;AAAA,MACjD;AAGA,MAAA,IAAI,QAAA,CAAS,SAAS,CAAA,EAAG;AACvB,QAAA,MAAMA,YAAW,IAAI,QAAA;AAAA,UACnB,KAAK,SAAA,CAAU;AAAA,YACb,OAAA,EAAS,KAAA;AAAA,YACT,KAAA,EAAO;AAAA,WACO,CAAA;AAAA,UAChB;AAAA,YACE,MAAA,EAAQ,GAAA;AAAA,YACR,OAAA,EAAS,EAAE,cAAA,EAAgB,kBAAA;AAAmB;AAChD,SACF;AACA,QAAA,OAAOC,eAAAA,CAAeD,SAAAA,EAAU,MAAA,EAAQ,OAAO,CAAA;AAAA,MACjD;AAGA,MAAA,MAAM,MAAA,GAAS,MAAM,MAAA,CAAO,WAAA,CAAY,MAAA;AAAA,QACtC,KAAA;AAAA,QACA,QAAA;AAAA,QACA,QAAA;AAAA,QACA,OAAO,WAAA,IAAe;AAAA,OACxB;AAGA,MAAA,IAAI,OAAO,SAAA,EAAW;AACpB,QAAA,IAAI;AACF,UAAA,MAAM,MAAA,CAAO,SAAA,CAAU,KAAA,CAAM,uBAAA,EAAyB;AAAA,YACpD,MAAA,EAAQ,OAAO,IAAA,CAAK,EAAA;AAAA,YACpB,KAAA,EAAO,OAAO,IAAA,CAAK,KAAA;AAAA,YACnB,QAAA,EAAU,OAAO,IAAA,CAAK,QAAA;AAAA,YACtB,SAAA,EAAA,iBAAW,IAAI,IAAA,EAAK,EAAE,WAAA;AAAY,WACnC,CAAA;AAAA,QACH,SAAS,cAAA,EAAgB;AACvB,UAAA,OAAA,CAAQ,KAAA,CAAM,uCAAuC,cAAc,CAAA;AAAA,QACrE;AAAA,MACF;AAGA,MAAA,MAAM,WAAW,IAAI,QAAA;AAAA,QACnB,KAAK,SAAA,CAAU;AAAA,UACb,OAAA,EAAS,IAAA;AAAA,UACT,IAAA,EAAM;AAAA,YACJ,MAAM,MAAA,CAAO,IAAA;AAAA,YACb,OAAO,MAAA,CAAO;AAAA,WAChB;AAAA,UACA,OAAA,EAAS;AAAA,SACK,CAAA;AAAA,QAChB;AAAA,UACE,MAAA,EAAQ,GAAA;AAAA,UACR,OAAA,EAAS,EAAE,cAAA,EAAgB,kBAAA;AAAmB;AAChD,OACF;AAGA,MAAA,IAAI,OAAO,aAAA,EAAe;AACxB,QAAA,MAAM,aAAA,GAAgB;AAAA,UACpB,IAAA,EAAM,MAAA,CAAO,aAAA,EAAe,IAAA,IAAQ,YAAA;AAAA,UACpC,QAAA,EAAU,MAAA,CAAO,aAAA,EAAe,QAAA,KAAa,KAAA;AAAA,UAC7C,QAAQ,MAAA,CAAO,aAAA,EAAe,WAAW,KAAA,IAAS,OAAA,CAAQ,IAAI,QAAA,KAAa,YAAA;AAAA,UAC3E,QAAA,EAAU,MAAA,CAAO,aAAA,EAAe,QAAA,IAAY,KAAA;AAAA,UAC5C,QAAQ,MAAA,CAAO,aAAA,EAAe,MAAA,IAAU,EAAA,GAAK,KAAK,EAAA,GAAK,CAAA;AAAA,UACvD,IAAA,EAAM,MAAA,CAAO,aAAA,EAAe,IAAA,IAAQ;AAAA,SACtC;AAEA,QAAA,MAAM,cAAe,aAAA,CAAc,IAAA,GAAQ,MAAO,MAAA,CAAO,KAAA,GAAS,gBAAiB,aAAA,CAAc,QAAA,GAAY,cAAe,aAAA,CAAc,MAAA,GAAU,gBAAiB,aAAA,CAAc,QAAA,GAAY,eAAgB,aAAA,CAAc,MAAA,GAAU,YAAa,aAAA,CAAc,IAAA;AAClQ,QAAA,QAAA,CAAS,OAAA,CAAQ,GAAA,CAAI,YAAA,EAAc,WAAW,CAAA;AAAA,MAChD;AAEA,MAAA,OAAOC,eAAAA,CAAe,QAAA,EAAU,MAAA,EAAQ,OAAO,CAAA;AAAA,IACjD,SAAS,KAAA,EAAO;AACd,MAAA,OAAA,CAAQ,KAAA,CAAM,mBAAmB,KAAK,CAAA;AAGtC,MAAA,IAAI,OAAO,SAAA,EAAW;AACpB,QAAA,IAAI;AACF,UAAA,MAAM,MAAA,CAAO,SAAA,CAAU,KAAA,CAAM,sBAAA,EAAwB;AAAA,YACnD,YAAA,EAAe,MAAc,OAAA,IAAW,0BAAA;AAAA,YACxC,SAAA,EAAA,iBAAW,IAAI,IAAA,EAAK,EAAE,WAAA;AAAY,WACnC,CAAA;AAAA,QACH,SAAS,cAAA,EAAgB;AACvB,UAAA,OAAA,CAAQ,KAAA,CAAM,+CAA+C,cAAc,CAAA;AAAA,QAC7E;AAAA,MACF;AAEA,MAAA,MAAM,WAAW,IAAI,QAAA;AAAA,QACnB,KAAK,SAAA,CAAU;AAAA,UACb,OAAA,EAAS,KAAA;AAAA,UACT,KAAA,EAAQ,MAAc,OAAA,IAAW;AAAA,SACnB,CAAA;AAAA,QAChB;AAAA,UACE,MAAA,EAAQ,GAAA;AAAA,UACR,OAAA,EAAS,EAAE,cAAA,EAAgB,kBAAA;AAAmB;AAChD,OACF;AAEA,MAAA,OAAOA,eAAAA,CAAe,QAAA,EAAU,MAAA,EAAQ,OAAO,CAAA;AAAA,IACjD;AAAA,EACF,CAAA;AACF;AAKO,SAAS,6BAA6B,MAAA,EAA6B;AACxE,EAAA,OAAO,OAAO,OAAA,KAAqB;AACjC,IAAA,MAAM,QAAA,GAAW,IAAI,QAAA,CAAS,IAAA,EAAM;AAAA,MAClC,MAAA,EAAQ,GAAA;AAAA,MACR,OAAA,EAAS;AAAA,QACP,gBAAA,EAAkB;AAAA;AACpB,KACD,CAAA;AAGD,IAAA,IAAI,MAAA,CAAO,MAAM,OAAA,EAAS;AACxB,MAAA,MAAM,MAAA,GAAS,OAAA,CAAQ,OAAA,CAAQ,GAAA,CAAI,QAAQ,CAAA;AAC3C,MAAA,MAAM,cAAA,GAAiB,OAAO,IAAA,CAAK,MAAA;AAEnC,MAAA,IAAI,cAAA,EAAgB;AAClB,QAAA,IAAI,OAAO,mBAAmB,QAAA,EAAU;AACtC,UAAA,QAAA,CAAS,OAAA,CAAQ,GAAA,CAAI,6BAAA,EAA+B,cAAc,CAAA;AAAA,QACpE,CAAA,MAAA,IAAW,MAAM,OAAA,CAAQ,cAAc,KAAK,MAAA,IAAU,cAAA,CAAe,QAAA,CAAS,MAAM,CAAA,EAAG;AACrF,UAAA,QAAA,CAAS,OAAA,CAAQ,GAAA,CAAI,6BAAA,EAA+B,MAAM,CAAA;AAAA,QAC5D;AAAA,MACF,CAAA,MAAO;AACL,QAAA,QAAA,CAAS,OAAA,CAAQ,GAAA,CAAI,6BAAA,EAA+B,MAAA,IAAU,GAAG,CAAA;AAAA,MACnE;AAEA,MAAA,IAAI,MAAA,CAAO,KAAK,WAAA,EAAa;AAC3B,QAAA,QAAA,CAAS,OAAA,CAAQ,GAAA,CAAI,kCAAA,EAAoC,MAAM,CAAA;AAAA,MACjE;AAEA,MAAA,MAAM,OAAA,GAAU,OAAO,IAAA,CAAK,OAAA,IAAW,CAAC,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,QAAA,EAAU,SAAS,CAAA;AACjF,MAAA,QAAA,CAAS,QAAQ,GAAA,CAAI,8BAAA,EAAgC,OAAA,CAAQ,IAAA,CAAK,IAAI,CAAC,CAAA;AAEvE,MAAA,MAAM,UAAU,MAAA,CAAO,IAAA,CAAK,cAAA,IAAkB,CAAC,gBAAgB,eAAe,CAAA;AAC9E,MAAA,QAAA,CAAS,QAAQ,GAAA,CAAI,8BAAA,EAAgC,OAAA,CAAQ,IAAA,CAAK,IAAI,CAAC,CAAA;AAAA,IACzE;AAEA,IAAA,OAAO,QAAA;AAAA,EACT,CAAA;AACF;;;AC7MA,SAASA,eAAAA,CAAe,QAAA,EAAoB,MAAA,EAAyB,OAAA,EAA4B;AAC/F,EAAA,IAAI,CAAC,MAAA,CAAO,IAAA,EAAM,OAAA,EAAS,OAAO,QAAA;AAElC,EAAA,MAAM,MAAA,GAAS,OAAA,CAAQ,OAAA,CAAQ,GAAA,CAAI,QAAQ,CAAA;AAC3C,EAAA,MAAM,cAAA,GAAiB,OAAO,IAAA,CAAK,MAAA;AAGnC,EAAA,IAAI,cAAA,EAAgB;AAClB,IAAA,IAAI,OAAO,mBAAmB,QAAA,EAAU;AACtC,MAAA,QAAA,CAAS,OAAA,CAAQ,GAAA,CAAI,6BAAA,EAA+B,cAAc,CAAA;AAAA,IACpE,CAAA,MAAA,IAAW,MAAM,OAAA,CAAQ,cAAc,KAAK,MAAA,IAAU,cAAA,CAAe,QAAA,CAAS,MAAM,CAAA,EAAG;AACrF,MAAA,QAAA,CAAS,OAAA,CAAQ,GAAA,CAAI,6BAAA,EAA+B,MAAM,CAAA;AAAA,IAC5D;AAAA,EACF,CAAA,MAAO;AAEL,IAAA,QAAA,CAAS,OAAA,CAAQ,GAAA,CAAI,6BAAA,EAA+B,MAAA,IAAU,GAAG,CAAA;AAAA,EACnE;AAEA,EAAA,IAAI,MAAA,CAAO,KAAK,WAAA,EAAa;AAC3B,IAAA,QAAA,CAAS,OAAA,CAAQ,GAAA,CAAI,kCAAA,EAAoC,MAAM,CAAA;AAAA,EACjE;AAEA,EAAA,MAAM,OAAA,GAAU,OAAO,IAAA,CAAK,OAAA,IAAW,CAAC,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,QAAA,EAAU,SAAS,CAAA;AACjF,EAAA,QAAA,CAAS,QAAQ,GAAA,CAAI,8BAAA,EAAgC,OAAA,CAAQ,IAAA,CAAK,IAAI,CAAC,CAAA;AAEvE,EAAA,MAAM,UAAU,MAAA,CAAO,IAAA,CAAK,cAAA,IAAkB,CAAC,gBAAgB,eAAe,CAAA;AAC9E,EAAA,QAAA,CAAS,QAAQ,GAAA,CAAI,8BAAA,EAAgC,OAAA,CAAQ,IAAA,CAAK,IAAI,CAAC,CAAA;AAEvE,EAAA,OAAO,QAAA;AACT;AAeO,SAAS,gBAAgB,MAAA,EAAyB;AACvD,EAAA,OAAO,OAAO,OAAA,KAAqB;AACjC,IAAA,IAAI;AAEF,MAAA,MAAM,KAAA,GAAQC,qCAAoB,OAAO,CAAA;AAEzC,MAAA,IAAI,CAAC,KAAA,EAAO;AACV,QAAA,MAAMF,YAAW,IAAI,QAAA;AAAA,UACnB,KAAK,SAAA,CAAU;AAAA,YACb,OAAA,EAAS,KAAA;AAAA,YACT,KAAA,EAAO;AAAA,WACO,CAAA;AAAA,UAChB;AAAA,YACE,MAAA,EAAQ,GAAA;AAAA,YACR,OAAA,EAAS,EAAE,cAAA,EAAgB,kBAAA;AAAmB;AAChD,SACF;AACA,QAAA,OAAOC,eAAAA,CAAeD,SAAAA,EAAU,MAAA,EAAQ,OAAO,CAAA;AAAA,MACjD;AAGA,MAAA,MAAM,MAAA,GAAS,MAAM,MAAA,CAAO,WAAA,CAAY,YAAY,KAAK,CAAA;AAEzD,MAAA,MAAM,WAAW,IAAI,QAAA;AAAA,QACnB,KAAK,SAAA,CAAU;AAAA,UACb,OAAA,EAAS,IAAA;AAAA,UACT,MAAM,MAAA,CAAO;AAAA,SACC,CAAA;AAAA,QAChB;AAAA,UACE,MAAA,EAAQ,GAAA;AAAA,UACR,OAAA,EAAS,EAAE,cAAA,EAAgB,kBAAA;AAAmB;AAChD,OACF;AAEA,MAAA,OAAOC,eAAAA,CAAe,QAAA,EAAU,MAAA,EAAQ,OAAO,CAAA;AAAA,IACjD,SAAS,KAAA,EAAO;AACd,MAAA,OAAA,CAAQ,KAAA,CAAM,wBAAwB,KAAK,CAAA;AAE3C,MAAA,MAAM,WAAW,IAAI,QAAA;AAAA,QACnB,KAAK,SAAA,CAAU;AAAA,UACb,OAAA,EAAS,KAAA;AAAA,UACT,KAAA,EAAO;AAAA,SACO,CAAA;AAAA,QAChB;AAAA,UACE,MAAA,EAAQ,GAAA;AAAA,UACR,OAAA,EAAS,EAAE,cAAA,EAAgB,kBAAA;AAAmB;AAChD,OACF;AAEA,MAAA,OAAOA,eAAAA,CAAe,QAAA,EAAU,MAAA,EAAQ,OAAO,CAAA;AAAA,IACjD;AAAA,EACF,CAAA;AACF;AAKO,SAAS,uBAAuB,MAAA,EAAyB;AAC9D,EAAA,OAAO,OAAO,OAAA,KAAqB;AACjC,IAAA,MAAM,QAAA,GAAW,IAAI,QAAA,CAAS,IAAA,EAAM;AAAA,MAClC,MAAA,EAAQ,GAAA;AAAA,MACR,OAAA,EAAS;AAAA,QACP,gBAAA,EAAkB;AAAA;AACpB,KACD,CAAA;AAED,IAAA,OAAOA,eAAAA,CAAe,QAAA,EAAU,MAAA,EAAQ,OAAO,CAAA;AAAA,EACjD,CAAA;AACF;;;AChHA,SAASA,eAAAA,CAAe,QAAA,EAAoB,MAAA,EAAyB,OAAA,EAA4B;AAC/F,EAAA,IAAI,CAAC,MAAA,CAAO,IAAA,EAAM,OAAA,EAAS,OAAO,QAAA;AAElC,EAAA,MAAM,MAAA,GAAS,OAAA,CAAQ,OAAA,CAAQ,GAAA,CAAI,QAAQ,CAAA;AAC3C,EAAA,MAAM,cAAA,GAAiB,OAAO,IAAA,CAAK,MAAA;AAGnC,EAAA,IAAI,cAAA,EAAgB;AAClB,IAAA,IAAI,OAAO,mBAAmB,QAAA,EAAU;AACtC,MAAA,QAAA,CAAS,OAAA,CAAQ,GAAA,CAAI,6BAAA,EAA+B,cAAc,CAAA;AAAA,IACpE,CAAA,MAAA,IAAW,MAAM,OAAA,CAAQ,cAAc,KAAK,MAAA,IAAU,cAAA,CAAe,QAAA,CAAS,MAAM,CAAA,EAAG;AACrF,MAAA,QAAA,CAAS,OAAA,CAAQ,GAAA,CAAI,6BAAA,EAA+B,MAAM,CAAA;AAAA,IAC5D;AAAA,EACF,CAAA,MAAO;AAEL,IAAA,QAAA,CAAS,OAAA,CAAQ,GAAA,CAAI,6BAAA,EAA+B,MAAA,IAAU,GAAG,CAAA;AAAA,EACnE;AAEA,EAAA,IAAI,MAAA,CAAO,KAAK,WAAA,EAAa;AAC3B,IAAA,QAAA,CAAS,OAAA,CAAQ,GAAA,CAAI,kCAAA,EAAoC,MAAM,CAAA;AAAA,EACjE;AAEA,EAAA,MAAM,OAAA,GAAU,OAAO,IAAA,CAAK,OAAA,IAAW,CAAC,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,QAAA,EAAU,SAAS,CAAA;AACjF,EAAA,QAAA,CAAS,QAAQ,GAAA,CAAI,8BAAA,EAAgC,OAAA,CAAQ,IAAA,CAAK,IAAI,CAAC,CAAA;AAEvE,EAAA,MAAM,UAAU,MAAA,CAAO,IAAA,CAAK,cAAA,IAAkB,CAAC,gBAAgB,eAAe,CAAA;AAC9E,EAAA,QAAA,CAAS,QAAQ,GAAA,CAAI,8BAAA,EAAgC,OAAA,CAAQ,IAAA,CAAK,IAAI,CAAC,CAAA;AAEvE,EAAA,OAAO,QAAA;AACT;AAeO,SAAS,oBAAoB,MAAA,EAAyB;AAC3D,EAAA,OAAO,OAAO,OAAA,KAAqB;AACjC,IAAA,IAAI;AAEF,MAAA,MAAM,KAAA,GAAQC,qCAAoB,OAAO,CAAA;AAEzC,MAAA,IAAI,CAAC,KAAA,EAAO;AACV,QAAA,MAAMF,YAAW,IAAI,QAAA;AAAA,UACnB,KAAK,SAAA,CAAU;AAAA,YACb,OAAA,EAAS,KAAA;AAAA,YACT,KAAA,EAAO;AAAA,WACO,CAAA;AAAA,UAChB;AAAA,YACE,MAAA,EAAQ,GAAA;AAAA,YACR,OAAA,EAAS,EAAE,cAAA,EAAgB,kBAAA;AAAmB;AAChD,SACF;AACA,QAAA,OAAOC,eAAAA,CAAeD,SAAAA,EAAU,MAAA,EAAQ,OAAO,CAAA;AAAA,MACjD;AAGA,MAAA,MAAM,MAAA,CAAO,WAAA,CAAY,OAAA,CAAQ,KAAK,CAAA;AAGtC,MAAA,IAAI,OAAO,SAAA,EAAW;AACpB,QAAA,IAAI;AACF,UAAA,MAAM,MAAA,CAAO,SAAA,CAAU,KAAA,CAAM,aAAA,EAAe;AAAA,YAC1C,SAAA,EAAA,iBAAW,IAAI,IAAA,EAAK,EAAE,WAAA;AAAY,WACnC,CAAA;AAAA,QACH,SAAS,cAAA,EAAgB;AACvB,UAAA,OAAA,CAAQ,KAAA,CAAM,qCAAqC,cAAc,CAAA;AAAA,QACnE;AAAA,MACF;AAGA,MAAA,MAAM,WAAW,IAAI,QAAA;AAAA,QACnB,KAAK,SAAA,CAAU;AAAA,UACb,OAAA,EAAS,IAAA;AAAA,UACT,OAAA,EAAS;AAAA,SACK,CAAA;AAAA,QAChB;AAAA,UACE,MAAA,EAAQ,GAAA;AAAA,UACR,OAAA,EAAS,EAAE,cAAA,EAAgB,kBAAA;AAAmB;AAChD,OACF;AAGA,MAAA,QAAA,CAAS,OAAA,CAAQ,GAAA;AAAA,QACf,YAAA;AAAA,QACA;AAAA,OACF;AAEA,MAAA,OAAOC,eAAAA,CAAe,QAAA,EAAU,MAAA,EAAQ,OAAO,CAAA;AAAA,IACjD,SAAS,KAAA,EAAO;AACd,MAAA,OAAA,CAAQ,KAAA,CAAM,iBAAiB,KAAK,CAAA;AAEpC,MAAA,MAAM,WAAW,IAAI,QAAA;AAAA,QACnB,KAAK,SAAA,CAAU;AAAA,UACb,OAAA,EAAS,KAAA;AAAA,UACT,KAAA,EAAO;AAAA,SACO,CAAA;AAAA,QAChB;AAAA,UACE,MAAA,EAAQ,GAAA;AAAA,UACR,OAAA,EAAS,EAAE,cAAA,EAAgB,kBAAA;AAAmB;AAChD,OACF;AAEA,MAAA,OAAOA,eAAAA,CAAe,QAAA,EAAU,MAAA,EAAQ,OAAO,CAAA;AAAA,IACjD;AAAA,EACF,CAAA;AACF;AAKO,SAAS,2BAA2B,MAAA,EAAyB;AAClE,EAAA,OAAO,OAAO,OAAA,KAAqB;AACjC,IAAA,MAAM,QAAA,GAAW,IAAI,QAAA,CAAS,IAAA,EAAM;AAAA,MAClC,MAAA,EAAQ,GAAA;AAAA,MACR,OAAA,EAAS;AAAA,QACP,gBAAA,EAAkB;AAAA;AACpB,KACD,CAAA;AAED,IAAA,OAAOA,eAAAA,CAAe,QAAA,EAAU,MAAA,EAAQ,OAAO,CAAA;AAAA,EACjD,CAAA;AACF;;;AC9HO,SAAS,uBAAA,CACd,aACA,SAAA,EACiB;AACjB,EAAA,OAAO;AAAA,IACL,WAAA;AAAA,IACA,IAAA,EAAM;AAAA,MACJ,OAAA,EAAS,IAAA;AAAA,MACT,WAAA,EAAa,IAAA;AAAA,MACb,GAAG,SAAA,EAAW;AAAA,KAChB;AAAA,IACA,WAAW,SAAA,EAAW;AAAA,GACxB;AACF;AAKO,SAAS,wBAAA,CACd,aACA,SAAA,EACkB;AAClB,EAAA,OAAO;AAAA,IACL,WAAA;AAAA,IACA,IAAA,EAAM;AAAA,MACJ,OAAA,EAAS,IAAA;AAAA,MACT,WAAA,EAAa,IAAA;AAAA,MACb,GAAG,SAAA,EAAW;AAAA,KAChB;AAAA,IACA,aAAA,EAAe;AAAA,MACb,IAAA,EAAM,YAAA;AAAA,MACN,QAAA,EAAU,IAAA;AAAA,MACV,MAAA,EAAQ,OAAA,CAAQ,GAAA,CAAI,QAAA,KAAa,YAAA;AAAA,MACjC,QAAA,EAAU,KAAA;AAAA,MACV,MAAA,EAAQ,EAAA,GAAK,EAAA,GAAK,EAAA,GAAK,CAAA;AAAA;AAAA,MACvB,IAAA,EAAM,GAAA;AAAA,MACN,GAAG,SAAA,EAAW;AAAA,KAChB;AAAA,IACA,WAAW,SAAA,EAAW;AAAA,GACxB;AACF;AAKO,SAAS,2BAAA,CACd,aACA,SAAA,EACqB;AACrB,EAAA,OAAO;AAAA,IACL,WAAA;AAAA,IACA,WAAA,EAAa,WAAW,WAAA,IAAe,MAAA;AAAA,IACvC,IAAA,EAAM;AAAA,MACJ,OAAA,EAAS,IAAA;AAAA,MACT,WAAA,EAAa,IAAA;AAAA,MACb,GAAG,SAAA,EAAW;AAAA,KAChB;AAAA,IACA,aAAA,EAAe,SAAA,EAAW,aAAA,KAAkB,MAAA,GAAY;AAAA,MACtD,IAAA,EAAM,YAAA;AAAA,MACN,QAAA,EAAU,IAAA;AAAA,MACV,MAAA,EAAQ,OAAA,CAAQ,GAAA,CAAI,QAAA,KAAa,YAAA;AAAA,MACjC,QAAA,EAAU,KAAA;AAAA,MACV,MAAA,EAAQ,EAAA,GAAK,EAAA,GAAK,EAAA,GAAK,CAAA;AAAA;AAAA,MACvB,IAAA,EAAM,GAAA;AAAA,MACN,GAAG,SAAA,CAAU;AAAA,KACf,GAAI,MAAA;AAAA,IACJ,WAAW,SAAA,EAAW,SAAA;AAAA,IACtB,2BAA2B,SAAA,EAAW;AAAA,GACxC;AACF;;;AC/BO,SAAS,sBAAA,CACd,kBACA,OAAA,EASA;AAEA,EAAA,MAAM,MAAA,GAAS;AAAA,IACb,QAAA,EAAU,SAAS,QAAA,IAAY,SAAA;AAAA,IAC/B,UAAA,EAAY,SAAS,UAAA,IAAc,OAAA;AAAA,IACnC,UAAA,EAAY,SAAS,UAAA,IAAc,OAAA;AAAA,IACnC,QAAA,EAAU,SAAS,QAAA,IAAY,QAAA;AAAA,IAC/B,UAAA,EAAY,OAAA,EAAS,UAAA,KAAe,MAAM;AAExC,MAAA,OAAQ,IAAA,CAAK,GAAA,EAAI,GAAK,GAAA,GAAO,IAAA,CAAK,MAAA,EAAO,CAAE,QAAA,CAAS,EAAE,CAAA,CAAE,SAAA,CAAU,CAAA,EAAG,EAAE,CAAA;AAAA,IACzE,CAAA;AAAA,GACF;AAEA,EAAA,OAAO;AAAA,IACL,KAAA,EAAO,OAAO,SAAA,EAAmB,UAAA,KAAoB;AACnD,MAAA,IAAI;AAEF,QAAA,IAAI,SAAA,GAAY,OAAA;AAChB,QAAA,IAAI,SAAA,CAAU,QAAA,CAAS,eAAe,CAAA,EAAG;AACvC,UAAA,SAAA,GAAY,OAAA;AAAA,QACd,CAAA,MAAA,IAAW,SAAA,CAAU,QAAA,CAAS,kBAAkB,CAAA,EAAG;AACjD,UAAA,SAAA,GAAY,UAAA;AAAA,QACd,CAAA,MAAA,IAAW,SAAA,CAAU,QAAA,CAAS,QAAQ,CAAA,EAAG;AACvC,UAAA,SAAA,GAAY,QAAA;AAAA,QACd,CAAA,MAAA,IAAW,UAAU,QAAA,CAAS,QAAQ,KAAK,SAAA,CAAU,QAAA,CAAS,OAAO,CAAA,EAAG;AACtE,UAAA,SAAA,GAAY,OAAA;AAAA,QACd;AAGA,QAAA,MAAM,KAAA,GAAwB;AAAA,UAC5B,EAAA,EAAI,OAAO,UAAA,EAAW;AAAA,UACtB,SAAA;AAAA,UACA,SAAA;AAAA,UACA,SAAA,EAAA,iBAAW,IAAI,IAAA,EAAK,EAAE,WAAA,EAAY;AAAA,UAClC,QAAA,EAAU,CAAA;AAAA,UACV,MAAA,EAAQ,WAAW,MAAA,IAAU,WAAA;AAAA,UAC7B,SAAA,EAAW,WAAW,SAAA,IAAa,UAAA,GAAc,KAAK,GAAA,EAAI,GAAK,GAAA,IAAO,UAAA,CAAW,MAAA,IAAU,WAAA,CAAA;AAAA,UAC3F,UAAU,MAAA,CAAO,QAAA;AAAA,UACjB,UAAU,MAAA,CAAO,QAAA;AAAA,UACjB,YAAY,MAAA,CAAO,UAAA;AAAA,UACnB,YAAY,MAAA,CAAO,UAAA;AAAA,UACnB;AAAA,SACF;AAGA,QAAA,MAAM,gBAAA,CAAiB,qBAAA,CAAsB,CAAC,KAAK,CAAC,CAAA;AAAA,MACtD,SAAS,KAAA,EAAO;AACd,QAAA,OAAA,CAAQ,KAAA,CAAM,8BAA8B,KAAK,CAAA;AAAA,MACnD;AAAA,IACF;AAAA,GACF;AACF","file":"chunk-GBPLX42J.js","sourcesContent":["/**\n * Auth Routes - Login\n * 登录路由处理器\n */\n\nimport type { LoginRouteConfig, ApiResponse } from './types';\n\n/**\n * 添加 CORS 头到响应\n */\nfunction addCorsHeaders(response: Response, config: LoginRouteConfig, request: Request): Response {\n if (!config.cors?.enabled) return response;\n\n const origin = request.headers.get('origin');\n const allowedOrigins = config.cors.origin;\n\n // 处理允许的源\n if (allowedOrigins) {\n if (typeof allowedOrigins === 'string') {\n response.headers.set('Access-Control-Allow-Origin', allowedOrigins);\n } else if (Array.isArray(allowedOrigins) && origin && allowedOrigins.includes(origin)) {\n response.headers.set('Access-Control-Allow-Origin', origin);\n }\n } else {\n // 默认允许所有源\n response.headers.set('Access-Control-Allow-Origin', origin || '*');\n }\n\n if (config.cors.credentials) {\n response.headers.set('Access-Control-Allow-Credentials', 'true');\n }\n\n const methods = config.cors.methods || ['GET', 'POST', 'PUT', 'DELETE', 'OPTIONS'];\n response.headers.set('Access-Control-Allow-Methods', methods.join(', '));\n\n const headers = config.cors.allowedHeaders || ['Content-Type', 'Authorization'];\n response.headers.set('Access-Control-Allow-Headers', headers.join(', '));\n\n return response;\n}\n\n/**\n * 创建登录路由处理器\n *\n * @example\n * ```typescript\n * import { createLoginHandler } from 'sa2kit/auth/routes';\n *\n * export const POST = createLoginHandler({\n * authService: myAuthService,\n * analytics: myAnalytics,\n * cors: { enabled: true },\n * });\n * ```\n */\nexport function createLoginHandler(config: LoginRouteConfig) {\n return async (request: Request) => {\n let requestBody: any = {};\n\n try {\n // 解析请求体\n requestBody = await request.json();\n const { email, password } = requestBody;\n\n // 验证必填字段\n if (!email || !password) {\n const response = new Response(\n JSON.stringify({\n success: false,\n error: '邮箱和密码不能为空',\n } as ApiResponse),\n {\n status: 400,\n headers: { 'Content-Type': 'application/json' },\n }\n );\n return addCorsHeaders(response, config, request);\n }\n\n // 执行登录\n const result = await config.authService.signIn(email, password);\n\n // 记录登录成功埋点\n if (config.analytics) {\n try {\n await config.analytics.track('user_login_success', {\n userId: result.user.id,\n userRole: result.user.role,\n email: result.user.email,\n loginMethod: 'email_password',\n timestamp: new Date().toISOString(),\n });\n } catch (analyticsError) {\n console.error('Failed to track login analytics:', analyticsError);\n }\n }\n\n // 创建响应\n const response = new Response(\n JSON.stringify({\n success: true,\n data: {\n user: result.user,\n token: result.token,\n },\n message: '登录成功',\n } as ApiResponse),\n {\n status: 200,\n headers: { 'Content-Type': 'application/json' },\n }\n );\n\n // 设置 Cookie(如果有配置)\n if (config.cookieOptions) {\n const cookieOptions = {\n name: config.cookieOptions?.name || 'auth_token',\n httpOnly: config.cookieOptions?.httpOnly !== false,\n secure: config.cookieOptions?.secure !== false && process.env.NODE_ENV === 'production',\n sameSite: config.cookieOptions?.sameSite || 'lax',\n maxAge: config.cookieOptions?.maxAge || 60 * 60 * 24 * 7, // 7天\n path: config.cookieOptions?.path || '/',\n };\n\n // 设置 Set-Cookie header\n const cookieValue = (cookieOptions.name) + '=' + (result.token) + '; HttpOnly=' + (cookieOptions.httpOnly) + '; Secure=' + (cookieOptions.secure) + '; SameSite=' + (cookieOptions.sameSite) + '; Max-Age=' + (cookieOptions.maxAge) + '; Path=' + (cookieOptions.path);\n response.headers.set('Set-Cookie', cookieValue);\n }\n\n return addCorsHeaders(response, config, request);\n } catch (error) {\n console.error('Login error:', error);\n\n // 记录登录失败埋点\n if (config.analytics) {\n try {\n await config.analytics.track('user_login_failed', {\n errorMessage: (error as any).message || '登录失败',\n email: requestBody.email,\n timestamp: new Date().toISOString(),\n });\n } catch (analyticsError) {\n console.error('Failed to track login failure analytics:', analyticsError);\n }\n }\n\n const response = new Response(\n JSON.stringify({\n success: false,\n error: (error as any).message || '登录失败,请检查邮箱和密码',\n } as ApiResponse),\n {\n status: 401,\n headers: { 'Content-Type': 'application/json' },\n }\n );\n\n return addCorsHeaders(response, config, request);\n }\n };\n}\n\n/**\n * 创建 CORS 预检请求处理器\n */\nexport function createLoginOptionsHandler(config: LoginRouteConfig) {\n return async (request: Request) => {\n const response = new Response(null, {\n status: 204,\n headers: {\n 'Content-Length': '0',\n },\n });\n\n return addCorsHeaders(response, config, request);\n };\n}\n\n","/**\n * Auth Routes - Register\n * 注册路由处理器\n */\n\nimport type { RegisterRouteConfig, ApiResponse } from './types';\n\n/**\n * 添加 CORS 头到响应\n */\nfunction addCorsHeaders(response: Response, config: RegisterRouteConfig, request: Request): Response {\n if (!config.cors?.enabled) return response;\n\n const origin = request.headers.get('origin');\n const allowedOrigins = config.cors.origin;\n\n // 处理允许的源\n if (allowedOrigins) {\n if (typeof allowedOrigins === 'string') {\n response.headers.set('Access-Control-Allow-Origin', allowedOrigins);\n } else if (Array.isArray(allowedOrigins) && origin && allowedOrigins.includes(origin)) {\n response.headers.set('Access-Control-Allow-Origin', origin);\n }\n } else {\n // 默认允许所有源\n response.headers.set('Access-Control-Allow-Origin', origin || '*');\n }\n\n if (config.cors.credentials) {\n response.headers.set('Access-Control-Allow-Credentials', 'true');\n }\n\n const methods = config.cors.methods || ['GET', 'POST', 'PUT', 'DELETE', 'OPTIONS'];\n response.headers.set('Access-Control-Allow-Methods', methods.join(', '));\n\n const headers = config.cors.allowedHeaders || ['Content-Type', 'Authorization'];\n response.headers.set('Access-Control-Allow-Headers', headers.join(', '));\n\n return response;\n}\n\n/**\n * 创建注册路由处理器\n *\n * @example\n * ```typescript\n * import { createRegisterHandler } from 'sa2kit/auth/routes';\n *\n * export const POST = createRegisterHandler({\n * authService: myAuthService,\n * defaultRole: 'USER',\n * cors: { enabled: true },\n * });\n * ```\n */\nexport function createRegisterHandler(config: RegisterRouteConfig) {\n return async (request: Request) => {\n try {\n // 解析请求体\n const { email, password, username } = await request.json();\n\n // 验证必填字段\n if (!email || !password) {\n const response = new Response(\n JSON.stringify({\n success: false,\n error: '邮箱和密码不能为空',\n } as ApiResponse),\n {\n status: 400,\n headers: { 'Content-Type': 'application/json' },\n }\n );\n return addCorsHeaders(response, config, request);\n }\n\n // 密码强度验证\n if (password.length < 6) {\n const response = new Response(\n JSON.stringify({\n success: false,\n error: '密码长度至少为 6 位',\n } as ApiResponse),\n {\n status: 400,\n headers: { 'Content-Type': 'application/json' },\n }\n );\n return addCorsHeaders(response, config, request);\n }\n\n // 执行注册\n const result = await config.authService.signUp(\n email,\n password,\n username,\n config.defaultRole || 'USER'\n );\n\n // 记录注册成功埋点\n if (config.analytics) {\n try {\n await config.analytics.track('user_register_success', {\n userId: result.user.id,\n email: result.user.email,\n username: result.user.username,\n timestamp: new Date().toISOString(),\n });\n } catch (analyticsError) {\n console.error('Failed to track register analytics:', analyticsError);\n }\n }\n\n // 创建响应\n const response = new Response(\n JSON.stringify({\n success: true,\n data: {\n user: result.user,\n token: result.token,\n },\n message: '注册成功',\n } as ApiResponse),\n {\n status: 201,\n headers: { 'Content-Type': 'application/json' },\n }\n );\n\n // 设置 Cookie(如果有配置)\n if (config.cookieOptions) {\n const cookieOptions = {\n name: config.cookieOptions?.name || 'auth_token',\n httpOnly: config.cookieOptions?.httpOnly !== false,\n secure: config.cookieOptions?.secure !== false && process.env.NODE_ENV === 'production',\n sameSite: config.cookieOptions?.sameSite || 'lax',\n maxAge: config.cookieOptions?.maxAge || 60 * 60 * 24 * 7,\n path: config.cookieOptions?.path || '/',\n };\n\n const cookieValue = (cookieOptions.name) + '=' + (result.token) + '; HttpOnly=' + (cookieOptions.httpOnly) + '; Secure=' + (cookieOptions.secure) + '; SameSite=' + (cookieOptions.sameSite) + '; Max-Age=' + (cookieOptions.maxAge) + '; Path=' + (cookieOptions.path);\n response.headers.set('Set-Cookie', cookieValue);\n }\n\n return addCorsHeaders(response, config, request);\n } catch (error) {\n console.error('Register error:', error);\n\n // 记录注册失败埋点\n if (config.analytics) {\n try {\n await config.analytics.track('user_register_failed', {\n errorMessage: (error as any).message || '注册失败',\n timestamp: new Date().toISOString(),\n });\n } catch (analyticsError) {\n console.error('Failed to track register failure analytics:', analyticsError);\n }\n }\n\n const response = new Response(\n JSON.stringify({\n success: false,\n error: (error as any).message || '注册失败',\n } as ApiResponse),\n {\n status: 400,\n headers: { 'Content-Type': 'application/json' },\n }\n );\n\n return addCorsHeaders(response, config, request);\n }\n };\n}\n\n/**\n * 创建 CORS 预检请求处理器\n */\nexport function createRegisterOptionsHandler(config: RegisterRouteConfig) {\n return async (request: Request) => {\n const response = new Response(null, {\n status: 204,\n headers: {\n 'Content-Length': '0',\n },\n });\n\n // 复用 addCorsHeaders 函数\n if (config.cors?.enabled) {\n const origin = request.headers.get('origin');\n const allowedOrigins = config.cors.origin;\n\n if (allowedOrigins) {\n if (typeof allowedOrigins === 'string') {\n response.headers.set('Access-Control-Allow-Origin', allowedOrigins);\n } else if (Array.isArray(allowedOrigins) && origin && allowedOrigins.includes(origin)) {\n response.headers.set('Access-Control-Allow-Origin', origin);\n }\n } else {\n response.headers.set('Access-Control-Allow-Origin', origin || '*');\n }\n\n if (config.cors.credentials) {\n response.headers.set('Access-Control-Allow-Credentials', 'true');\n }\n\n const methods = config.cors.methods || ['GET', 'POST', 'PUT', 'DELETE', 'OPTIONS'];\n response.headers.set('Access-Control-Allow-Methods', methods.join(', '));\n\n const headers = config.cors.allowedHeaders || ['Content-Type', 'Authorization'];\n response.headers.set('Access-Control-Allow-Headers', headers.join(', '));\n }\n\n return response;\n };\n}\n\n","/**\n * Auth Routes - Me\n * 获取当前用户信息路由处理器\n */\n\nimport { getTokenFromRequest } from '../services';\nimport type { BaseRouteConfig, ApiResponse } from './types';\n\n/**\n * 添加 CORS 头到响应\n */\nfunction addCorsHeaders(response: Response, config: BaseRouteConfig, request: Request): Response {\n if (!config.cors?.enabled) return response;\n\n const origin = request.headers.get('origin');\n const allowedOrigins = config.cors.origin;\n\n // 处理允许的源\n if (allowedOrigins) {\n if (typeof allowedOrigins === 'string') {\n response.headers.set('Access-Control-Allow-Origin', allowedOrigins);\n } else if (Array.isArray(allowedOrigins) && origin && allowedOrigins.includes(origin)) {\n response.headers.set('Access-Control-Allow-Origin', origin);\n }\n } else {\n // 默认允许所有源\n response.headers.set('Access-Control-Allow-Origin', origin || '*');\n }\n\n if (config.cors.credentials) {\n response.headers.set('Access-Control-Allow-Credentials', 'true');\n }\n\n const methods = config.cors.methods || ['GET', 'POST', 'PUT', 'DELETE', 'OPTIONS'];\n response.headers.set('Access-Control-Allow-Methods', methods.join(', '));\n\n const headers = config.cors.allowedHeaders || ['Content-Type', 'Authorization'];\n response.headers.set('Access-Control-Allow-Headers', headers.join(', '));\n\n return response;\n}\n\n/**\n * 创建获取当前用户信息路由处理器\n *\n * @example\n * ```typescript\n * import { createMeHandler } from 'sa2kit/auth/routes';\n *\n * export const GET = createMeHandler({\n * authService: myAuthService,\n * cors: { enabled: true },\n * });\n * ```\n */\nexport function createMeHandler(config: BaseRouteConfig) {\n return async (request: Request) => {\n try {\n // 获取 token\n const token = getTokenFromRequest(request);\n\n if (!token) {\n const response = new Response(\n JSON.stringify({\n success: false,\n error: '未提供认证令牌',\n } as ApiResponse),\n {\n status: 401,\n headers: { 'Content-Type': 'application/json' },\n }\n );\n return addCorsHeaders(response, config, request);\n }\n\n // 验证 token 并获取用户信息\n const result = await config.authService.verifyToken(token);\n\n const response = new Response(\n JSON.stringify({\n success: true,\n data: result.user,\n } as ApiResponse),\n {\n status: 200,\n headers: { 'Content-Type': 'application/json' },\n }\n );\n\n return addCorsHeaders(response, config, request);\n } catch (error) {\n console.error('Get user info error:', error);\n\n const response = new Response(\n JSON.stringify({\n success: false,\n error: '认证失败',\n } as ApiResponse),\n {\n status: 401,\n headers: { 'Content-Type': 'application/json' },\n }\n );\n\n return addCorsHeaders(response, config, request);\n }\n };\n}\n\n/**\n * 创建 CORS 预检请求处理器\n */\nexport function createMeOptionsHandler(config: BaseRouteConfig) {\n return async (request: Request) => {\n const response = new Response(null, {\n status: 204,\n headers: {\n 'Content-Length': '0',\n },\n });\n\n return addCorsHeaders(response, config, request);\n };\n}\n","/**\n * Auth Routes - Logout\n * 登出路由处理器\n */\n\nimport { getTokenFromRequest } from '../services';\nimport type { BaseRouteConfig, ApiResponse } from './types';\n\n/**\n * 添加 CORS 头到响应\n */\nfunction addCorsHeaders(response: Response, config: BaseRouteConfig, request: Request): Response {\n if (!config.cors?.enabled) return response;\n\n const origin = request.headers.get('origin');\n const allowedOrigins = config.cors.origin;\n\n // 处理允许的源\n if (allowedOrigins) {\n if (typeof allowedOrigins === 'string') {\n response.headers.set('Access-Control-Allow-Origin', allowedOrigins);\n } else if (Array.isArray(allowedOrigins) && origin && allowedOrigins.includes(origin)) {\n response.headers.set('Access-Control-Allow-Origin', origin);\n }\n } else {\n // 默认允许所有源\n response.headers.set('Access-Control-Allow-Origin', origin || '*');\n }\n\n if (config.cors.credentials) {\n response.headers.set('Access-Control-Allow-Credentials', 'true');\n }\n\n const methods = config.cors.methods || ['GET', 'POST', 'PUT', 'DELETE', 'OPTIONS'];\n response.headers.set('Access-Control-Allow-Methods', methods.join(', '));\n\n const headers = config.cors.allowedHeaders || ['Content-Type', 'Authorization'];\n response.headers.set('Access-Control-Allow-Headers', headers.join(', '));\n\n return response;\n}\n\n/**\n * 创建登出路由处理器\n *\n * @example\n * ```typescript\n * import { createLogoutHandler } from 'sa2kit/auth/routes';\n *\n * export const POST = createLogoutHandler({\n * authService: myAuthService,\n * cors: { enabled: true },\n * });\n * ```\n */\nexport function createLogoutHandler(config: BaseRouteConfig) {\n return async (request: Request) => {\n try {\n // 获取 token\n const token = getTokenFromRequest(request);\n\n if (!token) {\n const response = new Response(\n JSON.stringify({\n success: false,\n error: '未提供认证令牌',\n } as ApiResponse),\n {\n status: 401,\n headers: { 'Content-Type': 'application/json' },\n }\n );\n return addCorsHeaders(response, config, request);\n }\n\n // 删除会话\n await config.authService.signOut(token);\n\n // 记录登出埋点\n if (config.analytics) {\n try {\n await config.analytics.track('user_logout', {\n timestamp: new Date().toISOString(),\n });\n } catch (analyticsError) {\n console.error('Failed to track logout analytics:', analyticsError);\n }\n }\n\n // 创建响应并清除 Cookie\n const response = new Response(\n JSON.stringify({\n success: true,\n message: '登出成功',\n } as ApiResponse),\n {\n status: 200,\n headers: { 'Content-Type': 'application/json' },\n }\n );\n\n // 清除 auth_token cookie\n response.headers.set(\n 'Set-Cookie',\n 'auth_token=; HttpOnly; Secure; SameSite=Lax; Max-Age=0; Path=/'\n );\n\n return addCorsHeaders(response, config, request);\n } catch (error) {\n console.error('Logout error:', error);\n\n const response = new Response(\n JSON.stringify({\n success: false,\n error: '登出失败',\n } as ApiResponse),\n {\n status: 500,\n headers: { 'Content-Type': 'application/json' },\n }\n );\n\n return addCorsHeaders(response, config, request);\n }\n };\n}\n\n/**\n * 创建 CORS 预检请求处理器\n */\nexport function createLogoutOptionsHandler(config: BaseRouteConfig) {\n return async (request: Request) => {\n const response = new Response(null, {\n status: 204,\n headers: {\n 'Content-Length': '0',\n },\n });\n\n return addCorsHeaders(response, config, request);\n };\n}\n","/**\n * Auth Routes - Default Configurations\n * 默认路由配置\n */\n\nimport type { \n BaseRouteConfig, \n LoginRouteConfig, \n RegisterRouteConfig \n} from './types';\nimport type { DrizzleAuthService } from '../services';\n\n/**\n * 创建默认的基础路由配置\n */\nexport function createDefaultBaseConfig(\n authService: DrizzleAuthService,\n overrides?: Partial<BaseRouteConfig>\n): BaseRouteConfig {\n return {\n authService,\n cors: {\n enabled: true,\n credentials: true,\n ...overrides?.cors,\n },\n analytics: overrides?.analytics,\n };\n}\n\n/**\n * 创建默认的登录路由配置\n */\nexport function createDefaultLoginConfig(\n authService: DrizzleAuthService,\n overrides?: Partial<LoginRouteConfig>\n): LoginRouteConfig {\n return {\n authService,\n cors: {\n enabled: true,\n credentials: true,\n ...overrides?.cors,\n },\n cookieOptions: {\n name: 'auth_token',\n httpOnly: true,\n secure: process.env.NODE_ENV === 'production',\n sameSite: 'lax',\n maxAge: 60 * 60 * 24 * 7, // 7天\n path: '/',\n ...overrides?.cookieOptions,\n },\n analytics: overrides?.analytics,\n };\n}\n\n/**\n * 创建默认的注册路由配置\n */\nexport function createDefaultRegisterConfig(\n authService: DrizzleAuthService,\n overrides?: Partial<RegisterRouteConfig>\n): RegisterRouteConfig {\n return {\n authService,\n defaultRole: overrides?.defaultRole || 'USER',\n cors: {\n enabled: true,\n credentials: true,\n ...overrides?.cors,\n },\n cookieOptions: overrides?.cookieOptions !== undefined ? {\n name: 'auth_token',\n httpOnly: true,\n secure: process.env.NODE_ENV === 'production',\n sameSite: 'lax',\n maxAge: 60 * 60 * 24 * 7, // 7天\n path: '/',\n ...overrides.cookieOptions,\n } : undefined,\n analytics: overrides?.analytics,\n emailVerificationRequired: overrides?.emailVerificationRequired,\n };\n}\n\n","/**\n * Auth Routes - Analytics Adapter\n * 埋点适配器,用于适配不同的埋点服务\n */\n\n/**\n * 埋点事件接口\n */\nexport interface AnalyticsEvent {\n id: string;\n eventType: string;\n eventName: string;\n timestamp: string;\n priority: number;\n userId: string;\n sessionId: string;\n deviceId: string;\n platform: string;\n appVersion: string;\n sdkVersion: string;\n properties: Record<string, any>;\n}\n\n/**\n * 埋点服务接口\n */\nexport interface AnalyticsService {\n insertAnalyticsEvents(events: AnalyticsEvent[]): Promise<void>;\n}\n\n/**\n * 创建埋点适配器\n *\n * @param analyticsService 埋点服务实例\n * @param options 可选配置\n * @returns 符合 sa2kit 格式的埋点函数\n *\n * @example\n * ```typescript\n * import { createAnalyticsAdapter } from 'sa2kit/auth/routes';\n * import { analyticsService } from '@/lib/analytics';\n *\n * const analytics = createAnalyticsAdapter(analyticsService, {\n * platform: 'backend',\n * appVersion: '1.0.0',\n * });\n *\n * // 在路由配置中使用\n * const config = createDefaultLoginConfig(authService, {\n * analytics,\n * });\n * ```\n */\nexport function createAnalyticsAdapter(\n analyticsService: AnalyticsService,\n options?: {\n platform?: string;\n appVersion?: string;\n sdkVersion?: string;\n deviceId?: string;\n generateId?: () => string;\n }\n): {\n track: (eventName: string, properties: any) => Promise<void>;\n} {\n // 默认配置\n const config = {\n platform: options?.platform || 'backend',\n appVersion: options?.appVersion || '1.0.0',\n sdkVersion: options?.sdkVersion || '1.0.0',\n deviceId: options?.deviceId || 'server',\n generateId: options?.generateId || (() => {\n // 简单的 ID 生成器(仅用于浏览器环境)\n return (Date.now()) + '_' + (Math.random().toString(36).substring(2, 15));\n }),\n };\n\n return {\n track: async (eventName: string, properties: any) => {\n try {\n // 推断事件类型\n let eventType = 'event';\n if (eventName.includes('login_success')) {\n eventType = 'login';\n } else if (eventName.includes('register_success')) {\n eventType = 'register';\n } else if (eventName.includes('logout')) {\n eventType = 'logout';\n } else if (eventName.includes('failed') || eventName.includes('error')) {\n eventType = 'error';\n }\n\n // 构建埋点事件\n const event: AnalyticsEvent = {\n id: config.generateId(),\n eventType,\n eventName,\n timestamp: new Date().toISOString(),\n priority: 1,\n userId: properties.userId || 'anonymous',\n sessionId: properties.sessionId || 'session_' + (Date.now()) + '_' + (properties.userId || 'anonymous'),\n deviceId: config.deviceId,\n platform: config.platform,\n appVersion: config.appVersion,\n sdkVersion: config.sdkVersion,\n properties,\n };\n\n // 插入埋点事件\n await analyticsService.insertAnalyticsEvents([event]);\n } catch (error) {\n console.error('Failed to track analytics:', error);\n }\n },\n };\n}\n\n"]}