@sth87/shadcn-design-system 0.0.36 → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (420) hide show
  1. package/dist/AI_CONTEXT.md +212 -214
  2. package/dist/cjs/components/Accordion/Accordion.cjs +1 -1
  3. package/dist/cjs/components/Accordion/Accordion.cjs.map +1 -1
  4. package/dist/cjs/components/Avatar/Avatar.cjs +1 -1
  5. package/dist/cjs/components/Avatar/Avatar.cjs.map +1 -1
  6. package/dist/cjs/components/Badge/Badge.cjs +1 -1
  7. package/dist/cjs/components/Badge/Badge.cjs.map +1 -1
  8. package/dist/cjs/components/Breadcrumb/Breadcrumb.cjs +1 -1
  9. package/dist/cjs/components/Breadcrumb/Breadcrumb.cjs.map +1 -1
  10. package/dist/cjs/components/Button/Button.cjs +1 -1
  11. package/dist/cjs/components/Button/Button.cjs.map +1 -1
  12. package/dist/cjs/components/Calendar/Calendar.cjs +1 -1
  13. package/dist/cjs/components/Calendar/Calendar.cjs.map +1 -1
  14. package/dist/cjs/components/Carousel/Carousel.cjs +1 -1
  15. package/dist/cjs/components/Carousel/Carousel.cjs.map +1 -1
  16. package/dist/cjs/components/Checkbox/Checkbox.cjs +1 -1
  17. package/dist/cjs/components/Checkbox/Checkbox.cjs.map +1 -1
  18. package/dist/cjs/components/Collapsible/Collapsible.cjs +1 -1
  19. package/dist/cjs/components/Collapsible/Collapsible.cjs.map +1 -1
  20. package/dist/cjs/components/Command/Command.cjs +1 -1
  21. package/dist/cjs/components/Command/Command.cjs.map +1 -1
  22. package/dist/cjs/components/ContextMenu/ContextMenu.cjs +1 -1
  23. package/dist/cjs/components/ContextMenu/ContextMenu.cjs.map +1 -1
  24. package/dist/cjs/components/Cropper/Cropper.cjs +1 -1
  25. package/dist/cjs/components/Cropper/Cropper.cjs.map +1 -1
  26. package/dist/cjs/components/DatePicker/DatePicker.cjs +1 -1
  27. package/dist/cjs/components/DatePicker/DatePicker.cjs.map +1 -1
  28. package/dist/cjs/components/DatePicker/RangePicker.cjs +1 -1
  29. package/dist/cjs/components/DatePicker/RangePicker.cjs.map +1 -1
  30. package/dist/cjs/components/DatePicker/TimePicker.cjs +1 -1
  31. package/dist/cjs/components/DatePicker/TimePicker.cjs.map +1 -1
  32. package/dist/cjs/components/Dialog/Dialog.cjs +1 -1
  33. package/dist/cjs/components/Dialog/Dialog.cjs.map +1 -1
  34. package/dist/cjs/components/DropdownMenu/DropdownMenu.cjs +1 -1
  35. package/dist/cjs/components/DropdownMenu/DropdownMenu.cjs.map +1 -1
  36. package/dist/cjs/components/FloatLabel.cjs +1 -1
  37. package/dist/cjs/components/FloatLabel.cjs.map +1 -1
  38. package/dist/cjs/components/Glass/Glass.cjs +1 -1
  39. package/dist/cjs/components/Glass/Glass.cjs.map +1 -1
  40. package/dist/cjs/components/ImageViewer/ImageViewer.cjs +1 -1
  41. package/dist/cjs/components/ImageViewer/ImageViewer.cjs.map +1 -1
  42. package/dist/cjs/components/Input/Input.cjs +1 -1
  43. package/dist/cjs/components/Input/Input.cjs.map +1 -1
  44. package/dist/cjs/components/InputOTP/InputOTP.cjs +1 -1
  45. package/dist/cjs/components/InputOTP/InputOTP.cjs.map +1 -1
  46. package/dist/cjs/components/Interactive/CursorFollow.cjs +1 -1
  47. package/dist/cjs/components/Interactive/CursorFollow.cjs.map +1 -1
  48. package/dist/cjs/components/Marquee/Marquee.cjs +1 -1
  49. package/dist/cjs/components/Marquee/Marquee.cjs.map +1 -1
  50. package/dist/cjs/components/Pagination/Pagination.cjs +1 -1
  51. package/dist/cjs/components/Pagination/Pagination.cjs.map +1 -1
  52. package/dist/cjs/components/QrCode/QrCode.cjs +1 -1
  53. package/dist/cjs/components/QrCode/QrCode.cjs.map +1 -1
  54. package/dist/cjs/components/Radio/Radio.cjs +1 -1
  55. package/dist/cjs/components/Radio/Radio.cjs.map +1 -1
  56. package/dist/cjs/components/Rate/Rate.cjs +1 -1
  57. package/dist/cjs/components/Rate/Rate.cjs.map +1 -1
  58. package/dist/cjs/components/Resizable/Resizable.cjs +1 -1
  59. package/dist/cjs/components/Resizable/Resizable.cjs.map +1 -1
  60. package/dist/cjs/components/ScrollArea/ScrollArea.cjs +1 -1
  61. package/dist/cjs/components/ScrollArea/ScrollArea.cjs.map +1 -1
  62. package/dist/cjs/components/Select/Select.cjs +1 -1
  63. package/dist/cjs/components/Select/Select.cjs.map +1 -1
  64. package/dist/cjs/components/Sheet/Sheet.cjs +2 -2
  65. package/dist/cjs/components/Sheet/Sheet.cjs.map +1 -1
  66. package/dist/cjs/components/Slider/Slider.cjs +1 -1
  67. package/dist/cjs/components/Slider/Slider.cjs.map +1 -1
  68. package/dist/cjs/components/Stepper/Stepper.cjs +1 -1
  69. package/dist/cjs/components/Stepper/Stepper.cjs.map +1 -1
  70. package/dist/cjs/components/Stepper/StepperWrapper.cjs +1 -1
  71. package/dist/cjs/components/Stepper/StepperWrapper.cjs.map +1 -1
  72. package/dist/cjs/components/Switch/Switch.cjs +1 -1
  73. package/dist/cjs/components/Switch/Switch.cjs.map +1 -1
  74. package/dist/cjs/components/Table/TableFilter/data-table-date-filter.cjs +1 -1
  75. package/dist/cjs/components/Table/TableFilter/data-table-date-filter.cjs.map +1 -1
  76. package/dist/cjs/components/Table/TableFilter/data-table-filter-popover.cjs +1 -1
  77. package/dist/cjs/components/Table/TableFilter/data-table-filter-popover.cjs.map +1 -1
  78. package/dist/cjs/components/Table/TableFilter/data-table-slider-filter.cjs +1 -1
  79. package/dist/cjs/components/Table/TableFilter/data-table-slider-filter.cjs.map +1 -1
  80. package/dist/cjs/components/Table/data-table-column-header.cjs +1 -1
  81. package/dist/cjs/components/Table/data-table-column-header.cjs.map +1 -1
  82. package/dist/cjs/components/Table/data-table-pagination.cjs +1 -1
  83. package/dist/cjs/components/Table/data-table-pagination.cjs.map +1 -1
  84. package/dist/cjs/components/Table/data-table.cjs +1 -1
  85. package/dist/cjs/components/Table/data-table.cjs.map +1 -1
  86. package/dist/cjs/components/Tabs/Tabs.cjs +1 -1
  87. package/dist/cjs/components/Tabs/Tabs.cjs.map +1 -1
  88. package/dist/cjs/components/Tabs/classes.cjs +1 -1
  89. package/dist/cjs/components/Tabs/classes.cjs.map +1 -1
  90. package/dist/cjs/components/Textarea/Textarea.cjs +1 -1
  91. package/dist/cjs/components/Textarea/Textarea.cjs.map +1 -1
  92. package/dist/cjs/components/TimeGridView.cjs +1 -1
  93. package/dist/cjs/components/TimeGridView.cjs.map +1 -1
  94. package/dist/cjs/components/Toast/Toast.cjs +1 -1
  95. package/dist/cjs/components/Toast/Toast.cjs.map +1 -1
  96. package/dist/cjs/components/Tooltip/Tooltip.cjs +1 -1
  97. package/dist/cjs/components/Tooltip/Tooltip.cjs.map +1 -1
  98. package/dist/cjs/components/Tour/Tour.cjs +1 -1
  99. package/dist/cjs/components/Tour/Tour.cjs.map +1 -1
  100. package/dist/cjs/components/Tour/TourWrapper.cjs +1 -1
  101. package/dist/cjs/components/Tour/TourWrapper.cjs.map +1 -1
  102. package/dist/cjs/components/Upload/Upload.cjs +3 -3
  103. package/dist/cjs/components/Upload/Upload.cjs.map +1 -1
  104. package/dist/cjs/components/WheelColumn.cjs +1 -1
  105. package/dist/cjs/components/WheelColumn.cjs.map +1 -1
  106. package/dist/cjs/lib/TextAnimation/BlurText.cjs +1 -1
  107. package/dist/cjs/lib/TextAnimation/BlurText.cjs.map +1 -1
  108. package/dist/cjs/lib/TextAnimation/CircularText.cjs +1 -1
  109. package/dist/cjs/lib/TextAnimation/CircularText.cjs.map +1 -1
  110. package/dist/cjs/lib/TextAnimation/FlipWords.cjs +1 -1
  111. package/dist/cjs/lib/TextAnimation/FlipWords.cjs.map +1 -1
  112. package/dist/cjs/lib/TextAnimation/GradientText.cjs +1 -1
  113. package/dist/cjs/lib/TextAnimation/GradientText.cjs.map +1 -1
  114. package/dist/cjs/lib/TextAnimation/RollingText.cjs +1 -1
  115. package/dist/cjs/lib/TextAnimation/RollingText.cjs.map +1 -1
  116. package/dist/cjs/lib/TextAnimation/RotatingText.cjs +1 -1
  117. package/dist/cjs/lib/TextAnimation/RotatingText.cjs.map +1 -1
  118. package/dist/cjs/lib/TextAnimation/ShimmeringText.cjs +1 -1
  119. package/dist/cjs/lib/TextAnimation/ShimmeringText.cjs.map +1 -1
  120. package/dist/cjs/lib/TextAnimation/TextGenerateEffect.cjs +1 -1
  121. package/dist/cjs/lib/TextAnimation/TextGenerateEffect.cjs.map +1 -1
  122. package/dist/cjs/lib/TextAnimation/TextHoverEffect.cjs +1 -1
  123. package/dist/cjs/lib/TextAnimation/TextHoverEffect.cjs.map +1 -1
  124. package/dist/cjs/lib/TextAnimation/TextPressureEffect.cjs +2 -2
  125. package/dist/cjs/lib/TextAnimation/TextPressureEffect.cjs.map +1 -1
  126. package/dist/cjs/lib/TextAnimation/TypingText.cjs +1 -1
  127. package/dist/cjs/lib/TextAnimation/TypingText.cjs.map +1 -1
  128. package/dist/cjs/lib/TextAnimation/WritingText.cjs +1 -1
  129. package/dist/cjs/lib/TextAnimation/WritingText.cjs.map +1 -1
  130. package/dist/cjs/node_modules/.pnpm/nuqs@2.8.0_next@15.5.9_@babel_core@7.28.5_react-dom@19.1.1_react@19.1.1__react@19.1.1__react@19.1.1/node_modules/nuqs/dist/server.cjs.map +1 -0
  131. package/dist/cjs/packages/ui/src/components/accordion.cjs +1 -1
  132. package/dist/cjs/packages/ui/src/components/accordion.cjs.map +1 -1
  133. package/dist/cjs/packages/ui/src/components/alert-dialog.cjs +1 -1
  134. package/dist/cjs/packages/ui/src/components/alert-dialog.cjs.map +1 -1
  135. package/dist/cjs/packages/ui/src/components/avatar.cjs +1 -1
  136. package/dist/cjs/packages/ui/src/components/avatar.cjs.map +1 -1
  137. package/dist/cjs/packages/ui/src/components/badge.cjs +1 -1
  138. package/dist/cjs/packages/ui/src/components/badge.cjs.map +1 -1
  139. package/dist/cjs/packages/ui/src/components/breadcrumb.cjs +1 -1
  140. package/dist/cjs/packages/ui/src/components/breadcrumb.cjs.map +1 -1
  141. package/dist/cjs/packages/ui/src/components/button-group.cjs +1 -1
  142. package/dist/cjs/packages/ui/src/components/button-group.cjs.map +1 -1
  143. package/dist/cjs/packages/ui/src/components/button.cjs +1 -1
  144. package/dist/cjs/packages/ui/src/components/button.cjs.map +1 -1
  145. package/dist/cjs/packages/ui/src/components/calendar.cjs +1 -1
  146. package/dist/cjs/packages/ui/src/components/calendar.cjs.map +1 -1
  147. package/dist/cjs/packages/ui/src/components/checkbox.cjs +1 -1
  148. package/dist/cjs/packages/ui/src/components/checkbox.cjs.map +1 -1
  149. package/dist/cjs/packages/ui/src/components/combobox.cjs +1 -1
  150. package/dist/cjs/packages/ui/src/components/combobox.cjs.map +1 -1
  151. package/dist/cjs/packages/ui/src/components/command.cjs +1 -1
  152. package/dist/cjs/packages/ui/src/components/command.cjs.map +1 -1
  153. package/dist/cjs/packages/ui/src/components/context-menu.cjs +1 -1
  154. package/dist/cjs/packages/ui/src/components/context-menu.cjs.map +1 -1
  155. package/dist/cjs/packages/ui/src/components/dialog.cjs +1 -1
  156. package/dist/cjs/packages/ui/src/components/dialog.cjs.map +1 -1
  157. package/dist/cjs/packages/ui/src/components/drawer.cjs +1 -1
  158. package/dist/cjs/packages/ui/src/components/drawer.cjs.map +1 -1
  159. package/dist/cjs/packages/ui/src/components/dropdown-menu.cjs +1 -1
  160. package/dist/cjs/packages/ui/src/components/dropdown-menu.cjs.map +1 -1
  161. package/dist/cjs/packages/ui/src/components/input-otp.cjs +1 -1
  162. package/dist/cjs/packages/ui/src/components/input-otp.cjs.map +1 -1
  163. package/dist/cjs/packages/ui/src/components/input.cjs +1 -1
  164. package/dist/cjs/packages/ui/src/components/input.cjs.map +1 -1
  165. package/dist/cjs/packages/ui/src/components/label.cjs +1 -1
  166. package/dist/cjs/packages/ui/src/components/label.cjs.map +1 -1
  167. package/dist/cjs/packages/ui/src/components/pagination.cjs +1 -1
  168. package/dist/cjs/packages/ui/src/components/pagination.cjs.map +1 -1
  169. package/dist/cjs/packages/ui/src/components/popover.cjs +1 -1
  170. package/dist/cjs/packages/ui/src/components/popover.cjs.map +1 -1
  171. package/dist/cjs/packages/ui/src/components/radio-group.cjs +1 -1
  172. package/dist/cjs/packages/ui/src/components/radio-group.cjs.map +1 -1
  173. package/dist/cjs/packages/ui/src/components/resizable.cjs +1 -1
  174. package/dist/cjs/packages/ui/src/components/resizable.cjs.map +1 -1
  175. package/dist/cjs/packages/ui/src/components/scroll-area.cjs +1 -1
  176. package/dist/cjs/packages/ui/src/components/scroll-area.cjs.map +1 -1
  177. package/dist/cjs/packages/ui/src/components/select.cjs +1 -1
  178. package/dist/cjs/packages/ui/src/components/select.cjs.map +1 -1
  179. package/dist/cjs/packages/ui/src/components/separator.cjs +1 -1
  180. package/dist/cjs/packages/ui/src/components/separator.cjs.map +1 -1
  181. package/dist/cjs/packages/ui/src/components/sheet.cjs +1 -1
  182. package/dist/cjs/packages/ui/src/components/sheet.cjs.map +1 -1
  183. package/dist/cjs/packages/ui/src/components/sidebar.cjs +1 -1
  184. package/dist/cjs/packages/ui/src/components/sidebar.cjs.map +1 -1
  185. package/dist/cjs/packages/ui/src/components/skeleton.cjs +1 -1
  186. package/dist/cjs/packages/ui/src/components/skeleton.cjs.map +1 -1
  187. package/dist/cjs/packages/ui/src/components/switch.cjs +1 -1
  188. package/dist/cjs/packages/ui/src/components/switch.cjs.map +1 -1
  189. package/dist/cjs/packages/ui/src/components/table.cjs +1 -1
  190. package/dist/cjs/packages/ui/src/components/table.cjs.map +1 -1
  191. package/dist/cjs/packages/ui/src/components/tabs.cjs +1 -1
  192. package/dist/cjs/packages/ui/src/components/tabs.cjs.map +1 -1
  193. package/dist/cjs/packages/ui/src/components/textarea.cjs +1 -1
  194. package/dist/cjs/packages/ui/src/components/textarea.cjs.map +1 -1
  195. package/dist/cjs/packages/ui/src/components/toggle.cjs +1 -1
  196. package/dist/cjs/packages/ui/src/components/toggle.cjs.map +1 -1
  197. package/dist/cjs/packages/ui/src/components/tooltip.cjs +1 -1
  198. package/dist/cjs/packages/ui/src/components/tooltip.cjs.map +1 -1
  199. package/dist/cjs/packages/ui/src/components/tree-view.cjs +1 -1
  200. package/dist/cjs/packages/ui/src/components/tree-view.cjs.map +1 -1
  201. package/dist/cjs/styles/index.css +1 -1
  202. package/dist/cjs/utils/animations.cjs +1 -1
  203. package/dist/cjs/utils/animations.cjs.map +1 -1
  204. package/dist/cjs/utils/css.cjs +1 -1
  205. package/dist/cjs/utils/css.cjs.map +1 -1
  206. package/dist/cjs/utils/parsers.cjs +1 -1
  207. package/dist/cjs/utils/parsers.cjs.map +1 -1
  208. package/dist/esm/components/Accordion/Accordion.js +60 -60
  209. package/dist/esm/components/Accordion/Accordion.js.map +1 -1
  210. package/dist/esm/components/Avatar/Avatar.js +40 -40
  211. package/dist/esm/components/Avatar/Avatar.js.map +1 -1
  212. package/dist/esm/components/Badge/Badge.js +1 -1
  213. package/dist/esm/components/Badge/Badge.js.map +1 -1
  214. package/dist/esm/components/Breadcrumb/Breadcrumb.js +36 -36
  215. package/dist/esm/components/Breadcrumb/Breadcrumb.js.map +1 -1
  216. package/dist/esm/components/Button/Button.js +9 -9
  217. package/dist/esm/components/Button/Button.js.map +1 -1
  218. package/dist/esm/components/Calendar/Calendar.js +4 -4
  219. package/dist/esm/components/Calendar/Calendar.js.map +1 -1
  220. package/dist/esm/components/Carousel/Carousel.js +165 -165
  221. package/dist/esm/components/Carousel/Carousel.js.map +1 -1
  222. package/dist/esm/components/Checkbox/Checkbox.js +26 -26
  223. package/dist/esm/components/Checkbox/Checkbox.js.map +1 -1
  224. package/dist/esm/components/Collapsible/Collapsible.js +43 -43
  225. package/dist/esm/components/Collapsible/Collapsible.js.map +1 -1
  226. package/dist/esm/components/Command/Command.js +28 -28
  227. package/dist/esm/components/Command/Command.js.map +1 -1
  228. package/dist/esm/components/ContextMenu/ContextMenu.js +11 -11
  229. package/dist/esm/components/ContextMenu/ContextMenu.js.map +1 -1
  230. package/dist/esm/components/Cropper/Cropper.js +132 -132
  231. package/dist/esm/components/Cropper/Cropper.js.map +1 -1
  232. package/dist/esm/components/DatePicker/DatePicker.js +75 -75
  233. package/dist/esm/components/DatePicker/DatePicker.js.map +1 -1
  234. package/dist/esm/components/DatePicker/RangePicker.js +136 -136
  235. package/dist/esm/components/DatePicker/RangePicker.js.map +1 -1
  236. package/dist/esm/components/DatePicker/TimePicker.js +150 -150
  237. package/dist/esm/components/DatePicker/TimePicker.js.map +1 -1
  238. package/dist/esm/components/Dialog/Dialog.js +114 -114
  239. package/dist/esm/components/Dialog/Dialog.js.map +1 -1
  240. package/dist/esm/components/DropdownMenu/DropdownMenu.js +13 -13
  241. package/dist/esm/components/DropdownMenu/DropdownMenu.js.map +1 -1
  242. package/dist/esm/components/FloatLabel.js +44 -44
  243. package/dist/esm/components/FloatLabel.js.map +1 -1
  244. package/dist/esm/components/Glass/Glass.js +15 -15
  245. package/dist/esm/components/Glass/Glass.js.map +1 -1
  246. package/dist/esm/components/ImageViewer/ImageViewer.js +53 -53
  247. package/dist/esm/components/ImageViewer/ImageViewer.js.map +1 -1
  248. package/dist/esm/components/Input/Input.js +104 -104
  249. package/dist/esm/components/Input/Input.js.map +1 -1
  250. package/dist/esm/components/InputOTP/InputOTP.js +16 -16
  251. package/dist/esm/components/InputOTP/InputOTP.js.map +1 -1
  252. package/dist/esm/components/Interactive/CursorFollow.js +49 -49
  253. package/dist/esm/components/Interactive/CursorFollow.js.map +1 -1
  254. package/dist/esm/components/Marquee/Marquee.js +130 -130
  255. package/dist/esm/components/Marquee/Marquee.js.map +1 -1
  256. package/dist/esm/components/Pagination/Pagination.js +68 -68
  257. package/dist/esm/components/Pagination/Pagination.js.map +1 -1
  258. package/dist/esm/components/QrCode/QrCode.js +37 -37
  259. package/dist/esm/components/QrCode/QrCode.js.map +1 -1
  260. package/dist/esm/components/Radio/Radio.js +16 -16
  261. package/dist/esm/components/Radio/Radio.js.map +1 -1
  262. package/dist/esm/components/Rate/Rate.js +62 -62
  263. package/dist/esm/components/Rate/Rate.js.map +1 -1
  264. package/dist/esm/components/Resizable/Resizable.js +6 -6
  265. package/dist/esm/components/Resizable/Resizable.js.map +1 -1
  266. package/dist/esm/components/ScrollArea/ScrollArea.js +10 -10
  267. package/dist/esm/components/ScrollArea/ScrollArea.js.map +1 -1
  268. package/dist/esm/components/Select/Select.js +64 -64
  269. package/dist/esm/components/Select/Select.js.map +1 -1
  270. package/dist/esm/components/Sheet/Sheet.js +21 -21
  271. package/dist/esm/components/Sheet/Sheet.js.map +1 -1
  272. package/dist/esm/components/Slider/Slider.js +54 -54
  273. package/dist/esm/components/Slider/Slider.js.map +1 -1
  274. package/dist/esm/components/Stepper/Stepper.js +198 -198
  275. package/dist/esm/components/Stepper/Stepper.js.map +1 -1
  276. package/dist/esm/components/Stepper/StepperWrapper.js +15 -15
  277. package/dist/esm/components/Stepper/StepperWrapper.js.map +1 -1
  278. package/dist/esm/components/Switch/Switch.js +38 -38
  279. package/dist/esm/components/Switch/Switch.js.map +1 -1
  280. package/dist/esm/components/Table/TableFilter/data-table-date-filter.js +37 -37
  281. package/dist/esm/components/Table/TableFilter/data-table-date-filter.js.map +1 -1
  282. package/dist/esm/components/Table/TableFilter/data-table-filter-popover.js +25 -25
  283. package/dist/esm/components/Table/TableFilter/data-table-filter-popover.js.map +1 -1
  284. package/dist/esm/components/Table/TableFilter/data-table-slider-filter.js +64 -64
  285. package/dist/esm/components/Table/TableFilter/data-table-slider-filter.js.map +1 -1
  286. package/dist/esm/components/Table/data-table-column-header.js +18 -18
  287. package/dist/esm/components/Table/data-table-column-header.js.map +1 -1
  288. package/dist/esm/components/Table/data-table-pagination.js +21 -21
  289. package/dist/esm/components/Table/data-table-pagination.js.map +1 -1
  290. package/dist/esm/components/Table/data-table.js +18 -18
  291. package/dist/esm/components/Table/data-table.js.map +1 -1
  292. package/dist/esm/components/Tabs/Tabs.js +242 -242
  293. package/dist/esm/components/Tabs/Tabs.js.map +1 -1
  294. package/dist/esm/components/Tabs/classes.js +51 -51
  295. package/dist/esm/components/Tabs/classes.js.map +1 -1
  296. package/dist/esm/components/Textarea/Textarea.js +49 -49
  297. package/dist/esm/components/Textarea/Textarea.js.map +1 -1
  298. package/dist/esm/components/TimeGridView.js +12 -12
  299. package/dist/esm/components/TimeGridView.js.map +1 -1
  300. package/dist/esm/components/Toast/Toast.js +45 -45
  301. package/dist/esm/components/Toast/Toast.js.map +1 -1
  302. package/dist/esm/components/Tooltip/Tooltip.js +19 -19
  303. package/dist/esm/components/Tooltip/Tooltip.js.map +1 -1
  304. package/dist/esm/components/Tour/Tour.js +11 -11
  305. package/dist/esm/components/Tour/Tour.js.map +1 -1
  306. package/dist/esm/components/Tour/TourWrapper.js +15 -15
  307. package/dist/esm/components/Tour/TourWrapper.js.map +1 -1
  308. package/dist/esm/components/Upload/Upload.js +405 -405
  309. package/dist/esm/components/Upload/Upload.js.map +1 -1
  310. package/dist/esm/components/WheelColumn.js +47 -47
  311. package/dist/esm/components/WheelColumn.js.map +1 -1
  312. package/dist/esm/lib/TextAnimation/BlurText.js +18 -18
  313. package/dist/esm/lib/TextAnimation/BlurText.js.map +1 -1
  314. package/dist/esm/lib/TextAnimation/CircularText.js +7 -7
  315. package/dist/esm/lib/TextAnimation/CircularText.js.map +1 -1
  316. package/dist/esm/lib/TextAnimation/FlipWords.js +21 -21
  317. package/dist/esm/lib/TextAnimation/FlipWords.js.map +1 -1
  318. package/dist/esm/lib/TextAnimation/GradientText.js +4 -4
  319. package/dist/esm/lib/TextAnimation/GradientText.js.map +1 -1
  320. package/dist/esm/lib/TextAnimation/RollingText.js +24 -24
  321. package/dist/esm/lib/TextAnimation/RollingText.js.map +1 -1
  322. package/dist/esm/lib/TextAnimation/RotatingText.js +6 -6
  323. package/dist/esm/lib/TextAnimation/RotatingText.js.map +1 -1
  324. package/dist/esm/lib/TextAnimation/ShimmeringText.js +9 -9
  325. package/dist/esm/lib/TextAnimation/ShimmeringText.js.map +1 -1
  326. package/dist/esm/lib/TextAnimation/TextGenerateEffect.js +14 -14
  327. package/dist/esm/lib/TextAnimation/TextGenerateEffect.js.map +1 -1
  328. package/dist/esm/lib/TextAnimation/TextHoverEffect.js +9 -9
  329. package/dist/esm/lib/TextAnimation/TextHoverEffect.js.map +1 -1
  330. package/dist/esm/lib/TextAnimation/TextPressureEffect.js +3 -3
  331. package/dist/esm/lib/TextAnimation/TextPressureEffect.js.map +1 -1
  332. package/dist/esm/lib/TextAnimation/TypingText.js +17 -17
  333. package/dist/esm/lib/TextAnimation/TypingText.js.map +1 -1
  334. package/dist/esm/lib/TextAnimation/WritingText.js +10 -10
  335. package/dist/esm/lib/TextAnimation/WritingText.js.map +1 -1
  336. package/dist/esm/node_modules/.pnpm/nuqs@2.8.0_next@15.5.9_@babel_core@7.28.5_react-dom@19.1.1_react@19.1.1__react@19.1.1__react@19.1.1/node_modules/nuqs/dist/server.js.map +1 -0
  337. package/dist/esm/packages/ui/src/components/accordion.js +31 -31
  338. package/dist/esm/packages/ui/src/components/accordion.js.map +1 -1
  339. package/dist/esm/packages/ui/src/components/alert-dialog.js +33 -33
  340. package/dist/esm/packages/ui/src/components/alert-dialog.js.map +1 -1
  341. package/dist/esm/packages/ui/src/components/avatar.js +20 -20
  342. package/dist/esm/packages/ui/src/components/avatar.js.map +1 -1
  343. package/dist/esm/packages/ui/src/components/badge.js +53 -53
  344. package/dist/esm/packages/ui/src/components/badge.js.map +1 -1
  345. package/dist/esm/packages/ui/src/components/breadcrumb.js +20 -20
  346. package/dist/esm/packages/ui/src/components/breadcrumb.js.map +1 -1
  347. package/dist/esm/packages/ui/src/components/button-group.js +31 -31
  348. package/dist/esm/packages/ui/src/components/button-group.js.map +1 -1
  349. package/dist/esm/packages/ui/src/components/button.js +90 -90
  350. package/dist/esm/packages/ui/src/components/button.js.map +1 -1
  351. package/dist/esm/packages/ui/src/components/calendar.js +94 -94
  352. package/dist/esm/packages/ui/src/components/calendar.js.map +1 -1
  353. package/dist/esm/packages/ui/src/components/checkbox.js +47 -47
  354. package/dist/esm/packages/ui/src/components/checkbox.js.map +1 -1
  355. package/dist/esm/packages/ui/src/components/combobox.js +64 -64
  356. package/dist/esm/packages/ui/src/components/combobox.js.map +1 -1
  357. package/dist/esm/packages/ui/src/components/command.js +77 -77
  358. package/dist/esm/packages/ui/src/components/command.js.map +1 -1
  359. package/dist/esm/packages/ui/src/components/context-menu.js +76 -76
  360. package/dist/esm/packages/ui/src/components/context-menu.js.map +1 -1
  361. package/dist/esm/packages/ui/src/components/dialog.js +54 -54
  362. package/dist/esm/packages/ui/src/components/dialog.js.map +1 -1
  363. package/dist/esm/packages/ui/src/components/drawer.js +39 -39
  364. package/dist/esm/packages/ui/src/components/drawer.js.map +1 -1
  365. package/dist/esm/packages/ui/src/components/dropdown-menu.js +109 -109
  366. package/dist/esm/packages/ui/src/components/dropdown-menu.js.map +1 -1
  367. package/dist/esm/packages/ui/src/components/input-otp.js +30 -30
  368. package/dist/esm/packages/ui/src/components/input-otp.js.map +1 -1
  369. package/dist/esm/packages/ui/src/components/input.js +19 -19
  370. package/dist/esm/packages/ui/src/components/input.js.map +1 -1
  371. package/dist/esm/packages/ui/src/components/label.js +9 -9
  372. package/dist/esm/packages/ui/src/components/label.js.map +1 -1
  373. package/dist/esm/packages/ui/src/components/pagination.js +26 -26
  374. package/dist/esm/packages/ui/src/components/pagination.js.map +1 -1
  375. package/dist/esm/packages/ui/src/components/popover.js +13 -13
  376. package/dist/esm/packages/ui/src/components/popover.js.map +1 -1
  377. package/dist/esm/packages/ui/src/components/radio-group.js +45 -45
  378. package/dist/esm/packages/ui/src/components/radio-group.js.map +1 -1
  379. package/dist/esm/packages/ui/src/components/resizable.js +18 -18
  380. package/dist/esm/packages/ui/src/components/resizable.js.map +1 -1
  381. package/dist/esm/packages/ui/src/components/scroll-area.js +31 -31
  382. package/dist/esm/packages/ui/src/components/scroll-area.js.map +1 -1
  383. package/dist/esm/packages/ui/src/components/select.js +119 -119
  384. package/dist/esm/packages/ui/src/components/select.js.map +1 -1
  385. package/dist/esm/packages/ui/src/components/separator.js +86 -86
  386. package/dist/esm/packages/ui/src/components/separator.js.map +1 -1
  387. package/dist/esm/packages/ui/src/components/sheet.js +50 -50
  388. package/dist/esm/packages/ui/src/components/sheet.js.map +1 -1
  389. package/dist/esm/packages/ui/src/components/sidebar.js +198 -198
  390. package/dist/esm/packages/ui/src/components/sidebar.js.map +1 -1
  391. package/dist/esm/packages/ui/src/components/skeleton.js +3 -3
  392. package/dist/esm/packages/ui/src/components/skeleton.js.map +1 -1
  393. package/dist/esm/packages/ui/src/components/switch.js +57 -57
  394. package/dist/esm/packages/ui/src/components/switch.js.map +1 -1
  395. package/dist/esm/packages/ui/src/components/table.js +17 -17
  396. package/dist/esm/packages/ui/src/components/table.js.map +1 -1
  397. package/dist/esm/packages/ui/src/components/tabs.js +33 -33
  398. package/dist/esm/packages/ui/src/components/tabs.js.map +1 -1
  399. package/dist/esm/packages/ui/src/components/textarea.js +17 -17
  400. package/dist/esm/packages/ui/src/components/textarea.js.map +1 -1
  401. package/dist/esm/packages/ui/src/components/toggle.js +36 -36
  402. package/dist/esm/packages/ui/src/components/toggle.js.map +1 -1
  403. package/dist/esm/packages/ui/src/components/tooltip.js +20 -20
  404. package/dist/esm/packages/ui/src/components/tooltip.js.map +1 -1
  405. package/dist/esm/packages/ui/src/components/tree-view.js +218 -218
  406. package/dist/esm/packages/ui/src/components/tree-view.js.map +1 -1
  407. package/dist/esm/styles/index.css +1 -1
  408. package/dist/esm/utils/animations.js +55 -55
  409. package/dist/esm/utils/animations.js.map +1 -1
  410. package/dist/esm/utils/css.js +7 -7
  411. package/dist/esm/utils/css.js.map +1 -1
  412. package/dist/esm/utils/parsers.js +1 -1
  413. package/dist/types/components/DatePicker/RangePicker.d.ts.map +1 -1
  414. package/dist/types/lib/TextAnimation/TextPressureEffect.d.ts.map +1 -1
  415. package/dist/types/lib/TextAnimation/TypingText.d.ts.map +1 -1
  416. package/package.json +1 -1
  417. package/dist/cjs/node_modules/.pnpm/nuqs@2.8.0_next@15.5.9_react-dom@19.1.1_react@19.1.1__react@19.1.1__react@19.1.1/node_modules/nuqs/dist/server.cjs.map +0 -1
  418. package/dist/esm/node_modules/.pnpm/nuqs@2.8.0_next@15.5.9_react-dom@19.1.1_react@19.1.1__react@19.1.1__react@19.1.1/node_modules/nuqs/dist/server.js.map +0 -1
  419. /package/dist/cjs/node_modules/.pnpm/{nuqs@2.8.0_next@15.5.9_react-dom@19.1.1_react@19.1.1__react@19.1.1__react@19.1.1 → nuqs@2.8.0_next@15.5.9_@babel_core@7.28.5_react-dom@19.1.1_react@19.1.1__react@19.1.1__react@19.1.1}/node_modules/nuqs/dist/server.cjs +0 -0
  420. /package/dist/esm/node_modules/.pnpm/{nuqs@2.8.0_next@15.5.9_react-dom@19.1.1_react@19.1.1__react@19.1.1__react@19.1.1 → nuqs@2.8.0_next@15.5.9_@babel_core@7.28.5_react-dom@19.1.1_react@19.1.1__react@19.1.1__react@19.1.1}/node_modules/nuqs/dist/server.js +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"Tour.cjs","sources":["../../../../src/components/Tour/Tour.tsx"],"sourcesContent":["\"use client\";\n\nimport { cn, Slot, useComposedRefs } from \"@dsui/ui/index\";\nimport {\n autoUpdate,\n flip,\n hide,\n limitShift,\n type Middleware,\n offset,\n arrow as onArrow,\n type Placement,\n shift,\n useFloating,\n} from \"@floating-ui/react-dom\";\nimport { ChevronLeft, ChevronRight, X } from \"lucide-react\";\nimport * as React from \"react\";\nimport * as ReactDOM from \"react-dom\";\nimport { Button } from \"../Button\";\n\nconst ROOT_NAME = \"Tour\";\nconst PORTAL_NAME = \"TourPortal\";\nconst STEP_NAME = \"TourStep\";\nconst ARROW_NAME = \"TourArrow\";\nconst HEADER_NAME = \"TourHeader\";\nconst TITLE_NAME = \"TourTitle\";\nconst DESCRIPTION_NAME = \"TourDescription\";\nconst CLOSE_NAME = \"TourClose\";\nconst PREV_NAME = \"TourPrev\";\nconst NEXT_NAME = \"TourNext\";\nconst SKIP_NAME = \"TourSkip\";\nconst FOOTER_NAME = \"TourFooter\";\n\nconst POINTER_DOWN_OUTSIDE = \"tour.pointerDownOutside\";\nconst INTERACT_OUTSIDE = \"tour.interactOutside\";\nconst OPEN_AUTO_FOCUS = \"tour.openAutoFocus\";\nconst CLOSE_AUTO_FOCUS = \"tour.closeAutoFocus\";\nconst EVENT_OPTIONS = { bubbles: false, cancelable: true };\n\nconst SIDE_OPTIONS = [\"top\", \"right\", \"bottom\", \"left\"] as const;\nconst ALIGN_OPTIONS = [\"start\", \"center\", \"end\"] as const;\n\nconst DEFAULT_ALIGN_OFFSET = 0;\nconst DEFAULT_SIDE_OFFSET = 16;\nconst DEFAULT_SPOTLIGHT_PADDING = 4;\n\ntype Side = (typeof SIDE_OPTIONS)[number];\ntype Align = (typeof ALIGN_OPTIONS)[number];\ntype Direction = \"ltr\" | \"rtl\";\n\ninterface ScrollOffset {\n top?: number;\n bottom?: number;\n left?: number;\n right?: number;\n}\n\ntype Boundary = Element | null;\n\ninterface DivProps extends React.ComponentProps<\"div\"> {\n asChild?: boolean;\n}\n\ntype StepElement = React.ComponentRef<typeof TourStep>;\ntype CloseElement = React.ComponentRef<typeof TourClose>;\ntype PrevElement = React.ComponentRef<typeof TourPrev>;\ntype NextElement = React.ComponentRef<typeof TourNext>;\ntype SkipElement = React.ComponentRef<typeof TourSkip>;\ntype FooterElement = React.ComponentRef<typeof TourFooter>;\n\nconst OPPOSITE_SIDE: Record<Side, Side> = {\n top: \"bottom\",\n right: \"left\",\n bottom: \"top\",\n left: \"right\",\n};\n\nconst useIsomorphicLayoutEffect =\n typeof window === \"undefined\" ? React.useEffect : React.useLayoutEffect;\n\nfunction useAsRef<T>(props: T) {\n const ref = React.useRef<T>(props);\n\n useIsomorphicLayoutEffect(() => {\n ref.current = props;\n });\n\n return ref;\n}\n\nfunction useLazyRef<T>(fn: () => T) {\n const ref = React.useRef<T | null>(null);\n\n if (ref.current === null) {\n ref.current = fn();\n }\n\n return ref as React.RefObject<T>;\n}\n\n/**\n * @see https://github.com/radix-ui/primitives/blob/main/packages/react/focus-guards/src/focus-guards.tsx\n */\nlet focusGuardCount = 0;\n\nfunction createFocusGuard() {\n const element = document.createElement(\"span\");\n element.setAttribute(\"data-tour-focus-guard\", \"\");\n element.tabIndex = 0;\n element.style.outline = \"none\";\n element.style.opacity = \"0\";\n element.style.position = \"fixed\";\n element.style.pointerEvents = \"none\";\n return element;\n}\n\nfunction useFocusGuards() {\n React.useEffect(() => {\n const edgeGuards = document.querySelectorAll(\"[data-tour-focus-guard]\");\n document.body.insertAdjacentElement(\n \"afterbegin\",\n edgeGuards[0] ?? createFocusGuard()\n );\n document.body.insertAdjacentElement(\n \"beforeend\",\n edgeGuards[1] ?? createFocusGuard()\n );\n focusGuardCount++;\n\n return () => {\n if (focusGuardCount === 1) {\n const guards = document.querySelectorAll(\"[data-tour-focus-guard]\");\n for (const node of guards) {\n node.remove();\n }\n }\n focusGuardCount--;\n };\n }, []);\n}\n\nfunction useFocusTrap(\n containerRef: React.RefObject<HTMLElement | null>,\n enabled: boolean,\n tourOpen: boolean,\n onOpenAutoFocus?: (event: OpenAutoFocusEvent) => void,\n onCloseAutoFocus?: (event: CloseAutoFocusEvent) => void\n) {\n const lastFocusedElementRef = React.useRef<HTMLElement | null>(null);\n const onOpenAutoFocusRef = useAsRef(onOpenAutoFocus);\n const onCloseAutoFocusRef = useAsRef(onCloseAutoFocus);\n const tourOpenRef = useAsRef(tourOpen);\n\n React.useEffect(() => {\n if (!enabled) return;\n\n const container = containerRef.current;\n if (!container) return;\n\n const previouslyFocusedElement =\n document.activeElement as HTMLElement | null;\n\n function getTabbableCandidates() {\n if (!container) return [];\n\n const nodes: HTMLElement[] = [];\n const walker = document.createTreeWalker(\n container,\n NodeFilter.SHOW_ELEMENT,\n {\n acceptNode: (node: Element) => {\n const element = node as HTMLElement;\n const isHiddenInput =\n element.tagName === \"INPUT\" &&\n (element as HTMLInputElement).type === \"hidden\";\n if (element.hidden || isHiddenInput) return NodeFilter.FILTER_SKIP;\n return element.tabIndex >= 0\n ? NodeFilter.FILTER_ACCEPT\n : NodeFilter.FILTER_SKIP;\n },\n }\n );\n while (walker.nextNode()) {\n nodes.push(walker.currentNode as HTMLElement);\n }\n return nodes;\n }\n\n function getTabbableEdges() {\n const candidates = getTabbableCandidates();\n const first = candidates[0];\n const last = candidates[candidates.length - 1];\n return [first, last] as const;\n }\n\n function onFocusIn(event: FocusEvent) {\n if (!container) return;\n\n const target = event.target as HTMLElement | null;\n if (container.contains(target)) {\n lastFocusedElementRef.current = target;\n } else {\n const elementToFocus =\n lastFocusedElementRef.current ?? getTabbableCandidates()[0];\n elementToFocus?.focus({ preventScroll: true });\n }\n }\n\n function onKeyDown(event: KeyboardEvent) {\n if (event.key !== \"Tab\" || event.altKey || event.ctrlKey || event.metaKey)\n return;\n\n const [first, last] = getTabbableEdges();\n const hasTabbableElements = first && last;\n\n if (!hasTabbableElements) {\n if (document.activeElement === container) event.preventDefault();\n return;\n }\n\n if (!event.shiftKey && document.activeElement === last) {\n event.preventDefault();\n first?.focus({ preventScroll: true });\n } else if (event.shiftKey && document.activeElement === first) {\n event.preventDefault();\n last?.focus({ preventScroll: true });\n }\n }\n\n const openAutoFocusEvent = new CustomEvent(OPEN_AUTO_FOCUS, EVENT_OPTIONS);\n if (onOpenAutoFocusRef.current) {\n container.addEventListener(\n OPEN_AUTO_FOCUS,\n onOpenAutoFocusRef.current as EventListener,\n { once: true }\n );\n }\n container.dispatchEvent(openAutoFocusEvent);\n\n if (!openAutoFocusEvent.defaultPrevented) {\n const tabbableCandidates = getTabbableCandidates();\n if (tabbableCandidates.length > 0) {\n tabbableCandidates[0]?.focus({ preventScroll: true });\n } else {\n container.focus({ preventScroll: true });\n }\n }\n\n document.addEventListener(\"focusin\", onFocusIn);\n container.addEventListener(\"keydown\", onKeyDown);\n\n return () => {\n document.removeEventListener(\"focusin\", onFocusIn);\n container.removeEventListener(\"keydown\", onKeyDown);\n\n if (!tourOpenRef.current) {\n setTimeout(() => {\n const closeAutoFocusEvent = new CustomEvent(\n CLOSE_AUTO_FOCUS,\n EVENT_OPTIONS\n );\n if (onCloseAutoFocusRef.current) {\n container.addEventListener(\n CLOSE_AUTO_FOCUS,\n onCloseAutoFocusRef.current as EventListener,\n { once: true }\n );\n }\n container.dispatchEvent(closeAutoFocusEvent);\n\n if (!closeAutoFocusEvent.defaultPrevented) {\n if (\n previouslyFocusedElement &&\n document.body.contains(previouslyFocusedElement)\n ) {\n previouslyFocusedElement.focus({ preventScroll: true });\n }\n }\n\n if (onCloseAutoFocusRef.current) {\n container.removeEventListener(\n CLOSE_AUTO_FOCUS,\n onCloseAutoFocusRef.current as EventListener\n );\n }\n }, 0);\n }\n };\n }, [\n containerRef,\n enabled,\n onOpenAutoFocusRef,\n onCloseAutoFocusRef,\n tourOpenRef,\n ]);\n}\n\nconst DirectionContext = React.createContext<Direction | undefined>(undefined);\n\nfunction useDirection(dirProp?: Direction): Direction {\n const contextDir = React.useContext(DirectionContext);\n return dirProp ?? contextDir ?? \"ltr\";\n}\n\nfunction getDataState(open: boolean): string {\n return open ? \"open\" : \"closed\";\n}\n\ninterface StepData {\n target: string | React.RefObject<HTMLElement> | HTMLElement;\n align?: Align;\n alignOffset?: number;\n side?: Side;\n sideOffset?: number;\n collisionBoundary?: Boundary | Boundary[];\n collisionPadding?: number | Partial<Record<Side, number>>;\n arrowPadding?: number;\n sticky?: \"partial\" | \"always\";\n hideWhenDetached?: boolean;\n avoidCollisions?: boolean;\n onStepEnter?: () => void;\n onStepLeave?: () => void;\n required?: boolean;\n}\n\ninterface StoreState {\n open: boolean;\n value: number;\n steps: StepData[];\n maskPath: string;\n spotlightRect: { x: number; y: number; width: number; height: number } | null;\n}\n\ninterface Store {\n subscribe: (callback: () => void) => () => void;\n getState: () => StoreState;\n setState: <K extends keyof StoreState>(\n key: K,\n value: StoreState[K],\n opts?: unknown\n ) => void;\n notify: () => void;\n addStep: (stepData: StepData) => { id: string; index: number };\n removeStep: (id: string) => void;\n}\n\nfunction useStore<T>(selector: (state: StoreState) => T): T {\n const store = useStoreContext(\"useStore\");\n\n const getSnapshot = React.useCallback(\n () => selector(store.getState()),\n [store, selector]\n );\n\n return React.useSyncExternalStore(store.subscribe, getSnapshot, getSnapshot);\n}\n\nfunction getTargetElement(\n target: string | React.RefObject<HTMLElement> | HTMLElement\n): HTMLElement | null {\n if (typeof target === \"string\") {\n return document.querySelector(target);\n }\n if (target && \"current\" in target) {\n return target.current;\n }\n if (target instanceof HTMLElement) {\n return target;\n }\n return null;\n}\n\nfunction getDefaultScrollBehavior(): ScrollBehavior {\n if (typeof window === \"undefined\") return \"smooth\";\n return window.matchMedia(\"(prefers-reduced-motion: reduce)\").matches\n ? \"auto\"\n : \"smooth\";\n}\n\nfunction onScrollToElement(\n element: HTMLElement,\n scrollBehavior: ScrollBehavior = getDefaultScrollBehavior(),\n scrollOffset?: ScrollOffset\n) {\n const offset: Required<ScrollOffset> = {\n top: 100,\n bottom: 100,\n left: 0,\n right: 0,\n ...scrollOffset,\n };\n const rect = element.getBoundingClientRect();\n const viewportHeight = window.innerHeight;\n const viewportWidth = window.innerWidth;\n\n const isInViewport =\n rect.top >= offset.top &&\n rect.bottom <= viewportHeight - offset.bottom &&\n rect.left >= offset.left &&\n rect.right <= viewportWidth - offset.right;\n\n if (!isInViewport) {\n const elementTop = rect.top + window.scrollY;\n const scrollTop = elementTop - offset.top;\n\n window.scrollTo({\n top: Math.max(0, scrollTop),\n behavior: scrollBehavior,\n });\n }\n}\n\nfunction getSideAndAlignFromPlacement(placement: Placement): [Side, Align] {\n const [side, align = \"center\"] = placement.split(\"-\") as [Side, Align?];\n return [side, align];\n}\n\nfunction getPlacement(side: Side, align: Align): Placement {\n if (align === \"center\") {\n return side as Placement;\n }\n return `${side}-${align}` as Placement;\n}\n\nfunction updateMask(\n store: Store,\n targetElement: HTMLElement,\n padding: number = DEFAULT_SPOTLIGHT_PADDING\n) {\n const clientRect = targetElement.getBoundingClientRect();\n const viewportWidth = window.innerWidth;\n const viewportHeight = window.innerHeight;\n\n const x = Math.max(0, clientRect.left - padding);\n const y = Math.max(0, clientRect.top - padding);\n const width = Math.min(viewportWidth - x, clientRect.width + padding * 2);\n const height = Math.min(viewportHeight - y, clientRect.height + padding * 2);\n\n const path = `polygon(0% 0%, 0% 100%, ${x}px 100%, ${x}px ${y}px, ${x + width}px ${y}px, ${x + width}px ${y + height}px, ${x}px ${y + height}px, ${x}px 100%, 100% 100%, 100% 0%)`;\n store.setState(\"maskPath\", path);\n store.setState(\"spotlightRect\", { x, y, width, height });\n}\n\nconst StoreContext = React.createContext<Store | null>(null);\n\nfunction useStoreContext(consumerName: string) {\n const context = React.useContext(StoreContext);\n if (!context) {\n throw new Error(`\\`${consumerName}\\` must be used within \\`${ROOT_NAME}\\``);\n }\n return context;\n}\n\ninterface TourContextValue {\n dir: Direction;\n alignOffset: number;\n sideOffset: number;\n spotlightPadding: number;\n dismissible: boolean;\n modal: boolean;\n stepFooter?: React.ReactElement;\n onPointerDownOutside?: (event: PointerDownOutsideEvent) => void;\n onInteractOutside?: (event: InteractOutsideEvent) => void;\n onOpenAutoFocus?: (event: OpenAutoFocusEvent) => void;\n onCloseAutoFocus?: (event: CloseAutoFocusEvent) => void;\n}\n\nconst TourContext = React.createContext<TourContextValue | null>(null);\n\nfunction useTourContext(consumerName: string) {\n const context = React.useContext(TourContext);\n if (!context) {\n throw new Error(`\\`${consumerName}\\` must be used within \\`${ROOT_NAME}\\``);\n }\n return context;\n}\n\ninterface StepContextValue {\n arrowX?: number;\n arrowY?: number;\n placedAlign: Align;\n placedSide: Side;\n shouldHideArrow: boolean;\n onArrowChange: (arrow: HTMLSpanElement | null) => void;\n onFooterChange: (footer: FooterElement | null) => void;\n}\n\nconst StepContext = React.createContext<StepContextValue | null>(null);\n\nfunction useStepContext(consumerName: string) {\n const context = React.useContext(StepContext);\n if (!context) {\n throw new Error(`\\`${consumerName}\\` must be used within \\`${STEP_NAME}\\``);\n }\n return context;\n}\n\nconst DefaultFooterContext = React.createContext(false);\n\ninterface PortalContextValue {\n portal: HTMLElement | null;\n onPortalChange: (node: HTMLElement | null) => void;\n}\n\nconst PortalContext = React.createContext<PortalContextValue | null>(null);\n\nfunction usePortalContext(consumerName: string) {\n const context = React.useContext(PortalContext);\n if (!context) {\n throw new Error(`\\`${consumerName}\\` must be used within \\`${ROOT_NAME}\\``);\n }\n return context;\n}\n\nfunction useScrollLock(enabled: boolean) {\n React.useEffect(() => {\n if (!enabled) return;\n\n const originalStyle = window.getComputedStyle(document.body).overflow;\n const scrollbarWidth =\n window.innerWidth - document.documentElement.clientWidth;\n\n document.body.style.overflow = \"hidden\";\n if (scrollbarWidth > 0) {\n document.body.style.paddingRight = `${scrollbarWidth}px`;\n }\n\n return () => {\n document.body.style.overflow = originalStyle;\n document.body.style.paddingRight = \"\";\n };\n }, [enabled]);\n}\n\ntype PointerDownOutsideEvent = CustomEvent<{ originalEvent: PointerEvent }>;\ntype InteractOutsideEvent = CustomEvent<{\n originalEvent: PointerEvent | FocusEvent;\n}>;\ntype OpenAutoFocusEvent = CustomEvent<Record<string, never>>;\ntype CloseAutoFocusEvent = CustomEvent<Record<string, never>>;\n\ninterface TourRootProps extends DivProps {\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n value?: number;\n defaultValue?: number;\n onValueChange?: (step: number) => void;\n onComplete?: () => void;\n onSkip?: () => void;\n onEscapeKeyDown?: (event: KeyboardEvent) => void;\n onPointerDownOutside?: (event: PointerDownOutsideEvent) => void;\n onInteractOutside?: (event: InteractOutsideEvent) => void;\n onOpenAutoFocus?: (event: OpenAutoFocusEvent) => void;\n onCloseAutoFocus?: (event: CloseAutoFocusEvent) => void;\n dir?: Direction;\n alignOffset?: number;\n sideOffset?: number;\n spotlightPadding?: number;\n autoScroll?: boolean;\n scrollBehavior?: ScrollBehavior;\n scrollOffset?: ScrollOffset;\n dismissible?: boolean;\n modal?: boolean;\n stepFooter?: React.ReactElement;\n}\n\nfunction TourRoot(props: TourRootProps) {\n const {\n open: openProp,\n defaultOpen = false,\n onOpenChange,\n value: valueProp,\n defaultValue = 0,\n onValueChange,\n onComplete,\n onSkip,\n autoScroll = true,\n scrollBehavior = getDefaultScrollBehavior(),\n scrollOffset,\n ...rootProps\n } = props;\n\n const stateRef = useLazyRef<StoreState>(() => ({\n open: openProp ?? defaultOpen,\n value: valueProp ?? defaultValue,\n steps: [],\n maskPath: \"\",\n spotlightRect: null,\n }));\n const listenersRef = useLazyRef<Set<() => void>>(() => new Set());\n const stepIdsMapRef = useLazyRef<Map<string, number>>(() => new Map());\n const stepIdCounterRef = useLazyRef(() => ({ current: 0 }));\n const propsRef = useAsRef({\n valueProp,\n onOpenChange,\n onValueChange,\n onComplete,\n onSkip,\n autoScroll,\n scrollBehavior,\n scrollOffset,\n });\n\n const store: Store = React.useMemo(\n () => ({\n subscribe: (cb) => {\n listenersRef.current.add(cb);\n return () => listenersRef.current.delete(cb);\n },\n getState: () => {\n return stateRef.current;\n },\n setState: (key, value) => {\n if (Object.is(stateRef.current[key], value)) return;\n stateRef.current[key] = value;\n\n if (key === \"open\" && typeof value === \"boolean\") {\n propsRef.current.onOpenChange?.(value);\n\n if (value) {\n if (stateRef.current.steps.length > 0) {\n if (stateRef.current.value >= stateRef.current.steps.length) {\n store.setState(\"value\", 0);\n }\n }\n } else {\n if (\n stateRef.current.value <\n (stateRef.current.steps.length || 0) - 1\n ) {\n propsRef.current.onSkip?.();\n }\n }\n } else if (key === \"value\" && typeof value === \"number\") {\n const prevStep = stateRef.current.steps[stateRef.current.value];\n const nextStep = stateRef.current.steps[value];\n\n prevStep?.onStepLeave?.();\n nextStep?.onStepEnter?.();\n\n if (value >= stateRef.current.steps.length) {\n propsRef.current.onComplete?.();\n\n if (propsRef.current.valueProp !== undefined) {\n propsRef.current.onValueChange?.(value);\n }\n\n store.setState(\"open\", false);\n return;\n }\n\n if (propsRef.current.valueProp !== undefined) {\n propsRef.current.onValueChange?.(value);\n return;\n }\n\n propsRef.current.onValueChange?.(value);\n\n if (nextStep && propsRef.current.autoScroll) {\n const targetElement = getTargetElement(nextStep.target);\n if (targetElement) {\n onScrollToElement(\n targetElement,\n propsRef.current.scrollBehavior,\n propsRef.current.scrollOffset\n );\n }\n }\n }\n\n store.notify();\n },\n notify: () => {\n listenersRef.current.forEach((l) => {\n l();\n });\n },\n addStep: (stepData) => {\n const id = `step-${stepIdCounterRef.current.current++}`;\n const index = stateRef.current.steps.length;\n stepIdsMapRef.current.set(id, index);\n stateRef.current.steps = [...stateRef.current.steps, stepData];\n store.notify();\n return { id, index };\n },\n removeStep: (id) => {\n const index = stepIdsMapRef.current.get(id);\n if (index === undefined) return;\n\n stateRef.current.steps = stateRef.current.steps.filter(\n (_, i) => i !== index\n );\n\n stepIdsMapRef.current.delete(id);\n\n for (const [stepId, stepIndex] of stepIdsMapRef.current.entries()) {\n if (stepIndex > index) {\n stepIdsMapRef.current.set(stepId, stepIndex - 1);\n }\n }\n\n store.notify();\n },\n }),\n [stateRef, listenersRef, stepIdsMapRef, stepIdCounterRef, propsRef]\n );\n\n useIsomorphicLayoutEffect(() => {\n if (openProp !== undefined) {\n store.setState(\"open\", openProp);\n }\n }, [openProp, store]);\n\n useIsomorphicLayoutEffect(() => {\n if (valueProp !== undefined) {\n store.setState(\"value\", valueProp);\n }\n }, [valueProp, store]);\n\n return (\n <StoreContext.Provider value={store}>\n <TourRootImpl {...rootProps} />\n </StoreContext.Provider>\n );\n}\n\ninterface TourRootImplProps\n extends Omit<\n TourRootProps,\n | \"open\"\n | \"defaultOpen\"\n | \"onOpenChange\"\n | \"value\"\n | \"defaultValue\"\n | \"onValueChange\"\n | \"onComplete\"\n | \"onSkip\"\n | \"autoScroll\"\n | \"scrollBehavior\"\n | \"scrollOffset\"\n > {}\n\nfunction TourRootImpl(props: TourRootImplProps) {\n const {\n onEscapeKeyDown,\n onPointerDownOutside,\n onInteractOutside,\n onOpenAutoFocus,\n onCloseAutoFocus,\n dir: dirProp,\n alignOffset = DEFAULT_ALIGN_OFFSET,\n sideOffset = DEFAULT_SIDE_OFFSET,\n spotlightPadding = DEFAULT_SPOTLIGHT_PADDING,\n dismissible = true,\n modal = true,\n stepFooter,\n asChild,\n ...rootImplProps\n } = props;\n\n const store = useStoreContext(\"TourRootImpl\");\n const dir = useDirection(dirProp);\n\n const [portal, setPortal] = React.useState<HTMLElement | null>(null);\n const previouslyFocusedElementRef = React.useRef<HTMLElement | null>(null);\n\n const onEscapeKeyDownRef = useAsRef(onEscapeKeyDown);\n const onCloseAutoFocusRef = useAsRef(onCloseAutoFocus);\n\n React.useEffect(() => {\n function onKeyDown(event: KeyboardEvent) {\n if (store.getState().open && event.key === \"Escape\") {\n if (onEscapeKeyDownRef.current) {\n onEscapeKeyDownRef.current(event);\n if (event.defaultPrevented) return;\n }\n store.setState(\"open\", false);\n }\n }\n\n document.addEventListener(\"keydown\", onKeyDown);\n return () => document.removeEventListener(\"keydown\", onKeyDown);\n }, [store, onEscapeKeyDownRef]);\n\n const open = useStore((state) => state.open);\n const prevOpenRef = React.useRef<boolean | undefined>(undefined);\n\n useIsomorphicLayoutEffect(() => {\n const wasOpen = prevOpenRef.current;\n\n if (open && !wasOpen) {\n previouslyFocusedElementRef.current =\n document.activeElement as HTMLElement | null;\n } else if (!open && wasOpen) {\n setTimeout(() => {\n const container = portal ?? document.body;\n const closeAutoFocusEvent = new CustomEvent(\n CLOSE_AUTO_FOCUS,\n EVENT_OPTIONS\n );\n\n if (onCloseAutoFocusRef.current) {\n container.addEventListener(\n CLOSE_AUTO_FOCUS,\n onCloseAutoFocusRef.current as EventListener,\n { once: true }\n );\n }\n container.dispatchEvent(closeAutoFocusEvent);\n\n if (!closeAutoFocusEvent.defaultPrevented) {\n const elementToFocus = previouslyFocusedElementRef.current;\n if (elementToFocus && document.body.contains(elementToFocus)) {\n elementToFocus.focus({ preventScroll: true });\n }\n }\n\n previouslyFocusedElementRef.current = null;\n }, 0);\n }\n\n prevOpenRef.current = open;\n }, [open, portal, onCloseAutoFocusRef]);\n\n const contextValue = React.useMemo<TourContextValue>(\n () => ({\n dir,\n alignOffset,\n sideOffset,\n spotlightPadding,\n dismissible,\n modal,\n stepFooter,\n onPointerDownOutside,\n onInteractOutside,\n onOpenAutoFocus,\n onCloseAutoFocus,\n }),\n [\n dir,\n alignOffset,\n sideOffset,\n spotlightPadding,\n dismissible,\n modal,\n stepFooter,\n onPointerDownOutside,\n onInteractOutside,\n onOpenAutoFocus,\n onCloseAutoFocus,\n ]\n );\n\n const portalContextValue = React.useMemo<PortalContextValue>(\n () => ({\n portal,\n onPortalChange: setPortal,\n }),\n [portal]\n );\n\n useScrollLock(open && modal);\n\n const RootPrimitive = asChild ? Slot : \"div\";\n\n return (\n <TourContext.Provider value={contextValue}>\n <PortalContext.Provider value={portalContextValue}>\n <RootPrimitive data-slot=\"tour\" dir={dir} {...rootImplProps} />\n </PortalContext.Provider>\n </TourContext.Provider>\n );\n}\n\ninterface TourStepProps extends DivProps {\n target: string | React.RefObject<HTMLElement> | HTMLElement;\n side?: Side;\n sideOffset?: number;\n align?: Align;\n alignOffset?: number;\n collisionBoundary?: Boundary | Boundary[];\n collisionPadding?: number | Partial<Record<Side, number>>;\n arrowPadding?: number;\n sticky?: \"partial\" | \"always\";\n hideWhenDetached?: boolean;\n avoidCollisions?: boolean;\n required?: boolean;\n forceMount?: boolean;\n onStepEnter?: () => void;\n onStepLeave?: () => void;\n}\n\nfunction TourStep(props: TourStepProps) {\n const {\n target,\n side = \"bottom\",\n sideOffset,\n align = \"center\",\n alignOffset,\n collisionBoundary = [],\n collisionPadding = 0,\n arrowPadding = 0,\n sticky = \"partial\",\n hideWhenDetached = false,\n avoidCollisions = true,\n required = false,\n forceMount = false,\n onStepEnter,\n onStepLeave,\n onPointerDownCapture: onPointerDownCaptureProp,\n onFocusCapture: onFocusCaptureProp,\n onBlurCapture: onBlurCaptureProp,\n children,\n className,\n style,\n asChild,\n ...stepProps\n } = props;\n\n const store = useStoreContext(STEP_NAME);\n\n const [arrow, setArrow] = React.useState<HTMLSpanElement | null>(null);\n const [footer, setFooter] = React.useState<FooterElement | null>(null);\n\n const stepRef = React.useRef<StepElement | null>(null);\n const stepIdRef = React.useRef<string>(\"\");\n const stepOrderRef = React.useRef<number>(-1);\n const isPointerInsideReactTreeRef = React.useRef(false);\n const isFocusInsideReactTreeRef = React.useRef(false);\n\n const open = useStore((state) => state.open);\n const value = useStore((state) => state.value);\n const steps = useStore((state) => state.steps);\n const context = useTourContext(STEP_NAME);\n\n const resolvedSideOffset = sideOffset ?? context.sideOffset;\n const resolvedAlignOffset = alignOffset ?? context.alignOffset;\n\n useIsomorphicLayoutEffect(() => {\n const { id, index } = store.addStep({\n target,\n align,\n alignOffset: resolvedAlignOffset,\n side,\n sideOffset: resolvedSideOffset,\n collisionBoundary,\n collisionPadding,\n arrowPadding,\n sticky,\n hideWhenDetached,\n avoidCollisions,\n onStepEnter,\n onStepLeave,\n required,\n });\n stepIdRef.current = id;\n stepOrderRef.current = index;\n\n return () => {\n store.removeStep(stepIdRef.current);\n };\n }, [\n target,\n side,\n resolvedSideOffset,\n align,\n resolvedAlignOffset,\n collisionPadding,\n arrowPadding,\n sticky,\n hideWhenDetached,\n avoidCollisions,\n required,\n onStepEnter,\n onStepLeave,\n store,\n ]);\n\n const stepData = steps[value];\n const targetElement = stepData ? getTargetElement(stepData.target) : null;\n\n const isCurrentStep = stepOrderRef.current === value;\n\n const middleware = React.useMemo(() => {\n if (!stepData) return [];\n\n const mainAxisOffset = stepData.sideOffset ?? resolvedSideOffset;\n const crossAxisOffset = stepData.alignOffset ?? resolvedAlignOffset;\n\n const padding =\n typeof stepData.collisionPadding === \"number\"\n ? stepData.collisionPadding\n : {\n top: stepData.collisionPadding?.top ?? 0,\n right: stepData.collisionPadding?.right ?? 0,\n bottom: stepData.collisionPadding?.bottom ?? 0,\n left: stepData.collisionPadding?.left ?? 0,\n };\n\n const boundary = Array.isArray(stepData.collisionBoundary)\n ? stepData.collisionBoundary\n : stepData.collisionBoundary\n ? [stepData.collisionBoundary]\n : [];\n const hasExplicitBoundaries = boundary.length > 0;\n\n const detectOverflowOptions = {\n padding,\n boundary: boundary.filter((b): b is Element => b !== null),\n altBoundary: hasExplicitBoundaries,\n };\n\n return [\n offset({\n mainAxis: mainAxisOffset,\n alignmentAxis: crossAxisOffset,\n }),\n stepData.avoidCollisions &&\n shift({\n mainAxis: true,\n crossAxis: false,\n limiter: stepData.sticky === \"partial\" ? limitShift() : undefined,\n ...detectOverflowOptions,\n }),\n stepData.avoidCollisions && flip({ ...detectOverflowOptions }),\n arrow && onArrow({ element: arrow, padding: stepData.arrowPadding }),\n stepData.hideWhenDetached &&\n hide({\n strategy: \"referenceHidden\",\n ...detectOverflowOptions,\n }),\n ].filter(Boolean) as Middleware[];\n }, [stepData, resolvedSideOffset, resolvedAlignOffset, arrow]);\n\n const placement = getPlacement(\n stepData?.side ?? side,\n stepData?.align ?? align\n );\n\n const {\n refs,\n floatingStyles,\n placement: finalPlacement,\n middlewareData,\n } = useFloating({\n placement,\n middleware,\n strategy: \"fixed\",\n whileElementsMounted: autoUpdate,\n elements: {\n reference: targetElement,\n },\n });\n\n const composedRef = useComposedRefs(refs.setFloating, stepRef);\n\n const [placedSide, placedAlign] =\n getSideAndAlignFromPlacement(finalPlacement);\n\n const arrowX = middlewareData.arrow?.x;\n const arrowY = middlewareData.arrow?.y;\n const cannotCenterArrow = middlewareData.arrow?.centerOffset !== 0;\n const isHidden = hideWhenDetached && middlewareData.hide?.referenceHidden;\n\n const stepContextValue = React.useMemo<StepContextValue>(\n () => ({\n arrowX,\n arrowY,\n placedAlign,\n placedSide,\n shouldHideArrow: cannotCenterArrow,\n onArrowChange: setArrow,\n onFooterChange: setFooter,\n }),\n [arrowX, arrowY, placedSide, placedAlign, cannotCenterArrow]\n );\n\n React.useEffect(() => {\n if (open && targetElement && isCurrentStep) {\n updateMask(store, targetElement, context.spotlightPadding);\n\n let rafId: number | null = null;\n\n function onResize() {\n if (targetElement) {\n updateMask(store, targetElement, context.spotlightPadding);\n }\n }\n\n function onScroll() {\n if (rafId !== null) return;\n rafId = requestAnimationFrame(() => {\n if (targetElement) {\n updateMask(store, targetElement, context.spotlightPadding);\n }\n rafId = null;\n });\n }\n\n window.addEventListener(\"resize\", onResize);\n window.addEventListener(\"scroll\", onScroll, { passive: true });\n return () => {\n window.removeEventListener(\"resize\", onResize);\n window.removeEventListener(\"scroll\", onScroll);\n if (rafId !== null) {\n cancelAnimationFrame(rafId);\n }\n };\n }\n }, [open, targetElement, isCurrentStep, store, context.spotlightPadding]);\n\n React.useEffect(() => {\n if (!open || !isCurrentStep) return;\n\n const stepElement = stepRef.current;\n if (!stepElement) return;\n\n const ownerDocument = stepElement.ownerDocument;\n\n function onPointerDown(event: PointerEvent) {\n if (event.target && !isPointerInsideReactTreeRef.current) {\n const pointerDownOutsideEvent = new CustomEvent(POINTER_DOWN_OUTSIDE, {\n ...EVENT_OPTIONS,\n detail: { originalEvent: event },\n });\n\n context.onPointerDownOutside?.(pointerDownOutsideEvent);\n\n const interactOutsideEvent = new CustomEvent(INTERACT_OUTSIDE, {\n ...EVENT_OPTIONS,\n detail: { originalEvent: event },\n });\n context.onInteractOutside?.(interactOutsideEvent);\n\n if (\n !pointerDownOutsideEvent.defaultPrevented &&\n !interactOutsideEvent.defaultPrevented &&\n context.dismissible\n ) {\n store.setState(\"open\", false);\n }\n }\n\n isPointerInsideReactTreeRef.current = false;\n }\n\n const timerId = window.setTimeout(() => {\n ownerDocument.addEventListener(\"pointerdown\", onPointerDown);\n }, 0);\n\n return () => {\n window.clearTimeout(timerId);\n ownerDocument.removeEventListener(\"pointerdown\", onPointerDown);\n };\n }, [open, isCurrentStep, store, context]);\n\n React.useEffect(() => {\n if (!open || !isCurrentStep) return;\n\n const stepElement = stepRef.current;\n if (!stepElement) return;\n\n const ownerDocument = stepElement.ownerDocument;\n\n function onFocusIn(event: FocusEvent) {\n const target = event.target as HTMLElement;\n\n const isFocusInStep = stepElement?.contains(target);\n const isFocusInTarget = targetElement?.contains(target);\n\n if (\n event.target &&\n !isFocusInsideReactTreeRef.current &&\n !isFocusInStep &&\n !isFocusInTarget\n ) {\n const interactOutsideEvent = new CustomEvent(INTERACT_OUTSIDE, {\n ...EVENT_OPTIONS,\n detail: { originalEvent: event },\n });\n\n context.onInteractOutside?.(interactOutsideEvent);\n\n if (!interactOutsideEvent.defaultPrevented && context.dismissible) {\n store.setState(\"open\", false);\n }\n }\n }\n\n ownerDocument.addEventListener(\"focusin\", onFocusIn);\n\n return () => {\n ownerDocument.removeEventListener(\"focusin\", onFocusIn);\n };\n }, [open, isCurrentStep, store, context, targetElement]);\n\n const onPointerDownCapture = React.useCallback(\n (event: React.PointerEvent<StepElement>) => {\n onPointerDownCaptureProp?.(event);\n isPointerInsideReactTreeRef.current = true;\n },\n [onPointerDownCaptureProp]\n );\n\n const onFocusCapture = React.useCallback(\n (event: React.FocusEvent<StepElement>) => {\n onFocusCaptureProp?.(event);\n isFocusInsideReactTreeRef.current = true;\n },\n [onFocusCaptureProp]\n );\n\n const onBlurCapture = React.useCallback(\n (event: React.FocusEvent<StepElement>) => {\n onBlurCaptureProp?.(event);\n isFocusInsideReactTreeRef.current = false;\n },\n [onBlurCaptureProp]\n );\n\n React.useEffect(() => {\n if (!open || !isCurrentStep || !targetElement) return;\n\n function onTargetPointerDownCapture() {\n isPointerInsideReactTreeRef.current = true;\n }\n\n function onTargetFocusCapture() {\n isFocusInsideReactTreeRef.current = true;\n }\n\n function onTargetBlurCapture() {\n isFocusInsideReactTreeRef.current = false;\n }\n\n targetElement.addEventListener(\n \"pointerdown\",\n onTargetPointerDownCapture,\n true\n );\n targetElement.addEventListener(\"focus\", onTargetFocusCapture, true);\n targetElement.addEventListener(\"blur\", onTargetBlurCapture, true);\n\n return () => {\n targetElement.removeEventListener(\n \"pointerdown\",\n onTargetPointerDownCapture,\n true\n );\n targetElement.removeEventListener(\"focus\", onTargetFocusCapture, true);\n targetElement.removeEventListener(\"blur\", onTargetBlurCapture, true);\n };\n }, [open, isCurrentStep, targetElement]);\n\n useFocusGuards();\n useFocusTrap(\n stepRef,\n open && isCurrentStep,\n open,\n context.onOpenAutoFocus,\n context.onCloseAutoFocus\n );\n\n if (!open || !stepData || (!targetElement && !forceMount) || !isCurrentStep) {\n return null;\n }\n\n const StepPrimitive = asChild ? Slot : \"div\";\n\n return (\n <StepContext.Provider value={stepContextValue}>\n <StepPrimitive\n ref={composedRef}\n data-slot=\"tour-step\"\n data-side={placedSide}\n data-align={placedAlign}\n dir={context.dir}\n tabIndex={-1}\n {...stepProps}\n onPointerDownCapture={onPointerDownCapture}\n onFocusCapture={onFocusCapture}\n onBlurCapture={onBlurCapture}\n className={cn(\n \"fixed z-50 flex w-80 flex-col gap-4 rounded-lg border bg-popover p-4 text-popover-foreground shadow-md outline-none\",\n className\n )}\n style={{\n ...style,\n ...floatingStyles,\n visibility: isHidden ? \"hidden\" : undefined,\n pointerEvents: isHidden ? \"none\" : undefined,\n } as React.CSSProperties}\n >\n {children}\n {!footer && (\n <DefaultFooterContext.Provider value={true}>\n {context.stepFooter}\n </DefaultFooterContext.Provider>\n )}\n </StepPrimitive>\n </StepContext.Provider>\n );\n}\n\ninterface TourSpotlightProps extends DivProps {\n forceMount?: boolean;\n}\n\nfunction TourSpotlight(props: TourSpotlightProps) {\n const {\n asChild,\n className,\n style,\n forceMount = false,\n ...backdropProps\n } = props;\n\n const open = useStore((state) => state.open);\n const maskPath = useStore((state) => state.maskPath);\n\n if (!open && !forceMount) return null;\n\n const SpotlightPrimitive = asChild ? Slot : \"div\";\n\n return (\n <SpotlightPrimitive\n data-slot=\"tour-spotlight\"\n data-state={getDataState(open)}\n {...backdropProps}\n className={cn(\n \"data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-40 bg-black/80 data-[state=closed]:animate-out data-[state=open]:animate-in\",\n className\n )}\n style={{\n clipPath: maskPath,\n ...style,\n }}\n />\n );\n}\n\ninterface TourSpotlightRingProps extends DivProps {\n forceMount?: boolean;\n}\n\nfunction TourSpotlightRing(props: TourSpotlightRingProps) {\n const { asChild, className, style, forceMount = false, ...ringProps } = props;\n\n const open = useStore((state) => state.open);\n const spotlightRect = useStore((state) => state.spotlightRect);\n\n if (!open && !forceMount) return null;\n if (!spotlightRect) return null;\n\n const RingPrimitive = asChild ? Slot : \"div\";\n\n return (\n <RingPrimitive\n data-slot=\"tour-spotlight-ring\"\n data-state={getDataState(open)}\n {...ringProps}\n className={cn(\n \"pointer-events-none fixed z-40 border-ring ring-[3px] ring-ring/50\",\n className\n )}\n style={{\n left: spotlightRect.x,\n top: spotlightRect.y,\n width: spotlightRect.width,\n height: spotlightRect.height,\n ...style,\n }}\n />\n );\n}\n\ninterface TourPortalProps {\n children?: React.ReactNode;\n container?: HTMLElement | null;\n}\n\nfunction TourPortal(props: TourPortalProps) {\n const { children, container } = props;\n\n const portalContext = usePortalContext(PORTAL_NAME);\n\n const [mounted, setMounted] = React.useState(false);\n\n useIsomorphicLayoutEffect(() => {\n setMounted(true);\n\n const node = container ?? document.body;\n\n portalContext?.onPortalChange(node);\n return () => {\n portalContext?.onPortalChange(null);\n };\n }, [container, portalContext]);\n\n if (!mounted) return null;\n\n const portalContainer = container ?? portalContext?.portal ?? document.body;\n\n return ReactDOM.createPortal(children, portalContainer);\n}\n\ninterface TourArrowProps extends React.ComponentProps<\"svg\"> {\n width?: number;\n height?: number;\n asChild?: boolean;\n}\n\nfunction TourArrow(props: TourArrowProps) {\n const {\n width = 10,\n height = 5,\n className,\n children,\n asChild,\n ...arrowProps\n } = props;\n\n const stepContext = useStepContext(ARROW_NAME);\n const baseSide = OPPOSITE_SIDE[stepContext.placedSide];\n\n return (\n <span\n ref={stepContext.onArrowChange}\n data-slot=\"tour-arrow\"\n style={{\n position: \"absolute\",\n left:\n stepContext.arrowX != null ? `${stepContext.arrowX}px` : undefined,\n top: stepContext.arrowY != null ? `${stepContext.arrowY}px` : undefined,\n [baseSide]: 0,\n transformOrigin: {\n top: \"\",\n right: \"0 0\",\n bottom: \"center 0\",\n left: \"100% 0\",\n }[stepContext.placedSide],\n transform: {\n top: \"translateY(100%)\",\n right: \"translateY(50%) rotate(90deg) translateX(-50%)\",\n bottom: \"rotate(180deg)\",\n left: \"translateY(50%) rotate(-90deg) translateX(50%)\",\n }[stepContext.placedSide],\n visibility: stepContext.shouldHideArrow ? \"hidden\" : undefined,\n }}\n >\n <svg\n viewBox=\"0 0 30 10\"\n preserveAspectRatio=\"none\"\n width={width}\n height={height}\n {...arrowProps}\n className={cn(\"block fill-popover stroke-border\", className)}\n >\n {asChild ? children : <polygon points=\"0,0 30,0 15,10\" />}\n </svg>\n </span>\n );\n}\n\nfunction TourHeader(props: DivProps) {\n const { asChild, className, ...headerProps } = props;\n\n const context = useTourContext(HEADER_NAME);\n\n const HeaderPrimitive = asChild ? Slot : \"div\";\n\n return (\n <HeaderPrimitive\n data-slot=\"tour-header\"\n dir={context.dir}\n {...headerProps}\n className={cn(\n \"flex flex-col gap-1.5 text-center sm:text-left\",\n className\n )}\n />\n );\n}\n\nfunction TourTitle(props: DivProps) {\n const { asChild, className, ...titleProps } = props;\n\n const context = useTourContext(TITLE_NAME);\n\n const TitlePrimitive = asChild ? Slot : \"div\";\n\n return (\n <TitlePrimitive\n data-slot=\"tour-title\"\n dir={context.dir}\n {...titleProps}\n className={cn(\n \"font-semibold text-lg leading-none tracking-tight\",\n className\n )}\n />\n );\n}\n\nfunction TourDescription(props: DivProps) {\n const { asChild, className, ...descriptionProps } = props;\n\n const context = useTourContext(DESCRIPTION_NAME);\n\n const DescriptionPrimitive = asChild ? Slot : \"div\";\n\n return (\n <DescriptionPrimitive\n data-slot=\"tour-description\"\n dir={context.dir}\n {...descriptionProps}\n className={cn(\"text-muted-foreground text-sm\", className)}\n />\n );\n}\n\ninterface TourCloseProps extends React.ComponentProps<\"button\"> {\n asChild?: boolean;\n}\n\nfunction TourClose(props: TourCloseProps) {\n const {\n asChild,\n className,\n onClick: onClickProp,\n ...closeButtonProps\n } = props;\n\n const store = useStoreContext(CLOSE_NAME);\n\n const onClick = React.useCallback(\n (event: React.MouseEvent<CloseElement>) => {\n onClickProp?.(event);\n if (event.defaultPrevented) return;\n\n store.setState(\"open\", false);\n },\n [store, onClickProp]\n );\n\n const ClosePrimitive = asChild ? Slot : \"button\";\n\n return (\n <ClosePrimitive\n type=\"button\"\n aria-label=\"Close tour\"\n className={cn(\n \"absolute top-4 right-4 rounded-xs opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-hidden focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none [&_svg:not([class*='size-'])]:size-4 [&_svg]:pointer-events-none [&_svg]:shrink-0\",\n className\n )}\n onClick={onClick}\n {...closeButtonProps}\n >\n <X className=\"size-4\" />\n </ClosePrimitive>\n );\n}\n\nfunction TourPrev(props: React.ComponentProps<typeof Button>) {\n const { children, onClick: onClickProp, ...prevButtonProps } = props;\n\n const store = useStoreContext(PREV_NAME);\n const value = useStore((state) => state.value);\n\n const onClick = React.useCallback(\n (event: React.MouseEvent<PrevElement>) => {\n onClickProp?.(event);\n if (event.defaultPrevented) return;\n\n if (value > 0) {\n store.setState(\"value\", value - 1);\n }\n },\n [value, store, onClickProp]\n );\n\n return (\n <Button\n type=\"button\"\n aria-label=\"Previous step\"\n data-slot=\"tour-prev\"\n variant=\"outline\"\n {...prevButtonProps}\n onClick={onClick}\n disabled={value === 0}\n >\n {children ?? (\n <>\n <ChevronLeft />\n Previous\n </>\n )}\n </Button>\n );\n}\n\nfunction TourNext(props: React.ComponentProps<typeof Button>) {\n const { children, onClick: onClickProp, ...nextButtonProps } = props;\n const store = useStoreContext(NEXT_NAME);\n const value = useStore((state) => state.value);\n const steps = useStore((state) => state.steps);\n\n const isLastStep = value === steps.length - 1;\n\n const onClick = React.useCallback(\n (event: React.MouseEvent<NextElement>) => {\n onClickProp?.(event);\n if (event.defaultPrevented) return;\n\n store.setState(\"value\", value + 1);\n },\n [value, store, onClickProp]\n );\n\n return (\n <Button\n type=\"button\"\n aria-label=\"Next step\"\n data-slot=\"tour-next\"\n {...nextButtonProps}\n onClick={onClick}\n >\n {children ?? (\n <>\n {isLastStep ? \"Finish\" : \"Next\"}\n {!isLastStep && <ChevronRight />}\n </>\n )}\n </Button>\n );\n}\n\nfunction TourSkip(props: React.ComponentProps<typeof Button>) {\n const { children, onClick: onClickProp, ...skipButtonProps } = props;\n\n const store = useStoreContext(SKIP_NAME);\n\n const onClick = React.useCallback(\n (event: React.MouseEvent<SkipElement>) => {\n onClickProp?.(event);\n if (event.defaultPrevented) return;\n\n store.setState(\"open\", false);\n },\n [store, onClickProp]\n );\n\n return (\n <Button\n type=\"button\"\n aria-label=\"Skip tour\"\n data-slot=\"tour-skip\"\n variant=\"outline\"\n {...skipButtonProps}\n onClick={onClick}\n >\n {children ?? \"Skip\"}\n </Button>\n );\n}\n\ninterface TourStepCounterProps extends DivProps {\n format?: (current: number, total: number) => string;\n}\n\nfunction TourStepCounter(props: TourStepCounterProps) {\n const {\n format = (current, total) => `${current} / ${total}`,\n asChild,\n className,\n children,\n ...stepCounterProps\n } = props;\n\n const value = useStore((state) => state.value);\n const steps = useStore((state) => state.steps);\n\n const StepCounterPrimitive = asChild ? Slot : \"div\";\n\n return (\n <StepCounterPrimitive\n data-slot=\"tour-step-counter\"\n {...stepCounterProps}\n className={cn(\"text-muted-foreground text-sm\", className)}\n >\n {children ?? format(value + 1, steps.length)}\n </StepCounterPrimitive>\n );\n}\n\nfunction TourFooter(props: DivProps) {\n const { asChild, className, ref, ...footerProps } = props;\n\n const stepContext = useStepContext(FOOTER_NAME);\n const hasDefaultFooter = React.useContext(DefaultFooterContext);\n const context = useTourContext(FOOTER_NAME);\n\n const composedRef = useComposedRefs(\n ref,\n hasDefaultFooter ? undefined : stepContext.onFooterChange\n );\n\n const FooterPrimitive = asChild ? Slot : \"div\";\n\n return (\n <FooterPrimitive\n data-slot=\"tour-footer\"\n dir={context.dir}\n {...footerProps}\n ref={composedRef}\n className={cn(\n \"flex flex-col-reverse gap-2 sm:flex-row sm:justify-end\",\n className\n )}\n />\n );\n}\n\nexport {\n TourRoot as Root,\n TourPortal as Portal,\n TourSpotlight as Spotlight,\n TourSpotlightRing as SpotlightRing,\n TourStep as Step,\n TourArrow as Arrow,\n TourHeader as Header,\n TourTitle as Title,\n TourDescription as Description,\n TourClose as Close,\n TourPrev as Prev,\n TourNext as Next,\n TourSkip as Skip,\n TourStepCounter as StepCounter,\n TourFooter as Footer,\n //\n TourRoot as Tour,\n TourPortal,\n TourSpotlight,\n TourSpotlightRing,\n TourStep,\n TourArrow,\n TourHeader,\n TourTitle,\n TourDescription,\n TourClose,\n TourPrev,\n TourNext,\n TourSkip,\n TourStepCounter,\n TourFooter,\n //\n type TourRootProps as TourProps,\n};\n"],"names":["ROOT_NAME","PORTAL_NAME","STEP_NAME","ARROW_NAME","HEADER_NAME","TITLE_NAME","DESCRIPTION_NAME","CLOSE_NAME","PREV_NAME","NEXT_NAME","SKIP_NAME","FOOTER_NAME","POINTER_DOWN_OUTSIDE","INTERACT_OUTSIDE","OPEN_AUTO_FOCUS","CLOSE_AUTO_FOCUS","EVENT_OPTIONS","DEFAULT_ALIGN_OFFSET","DEFAULT_SIDE_OFFSET","DEFAULT_SPOTLIGHT_PADDING","OPPOSITE_SIDE","useIsomorphicLayoutEffect","React","useAsRef","props","ref","useLazyRef","fn","focusGuardCount","createFocusGuard","element","useFocusGuards","edgeGuards","guards","node","useFocusTrap","containerRef","enabled","tourOpen","onOpenAutoFocus","onCloseAutoFocus","lastFocusedElementRef","onOpenAutoFocusRef","onCloseAutoFocusRef","tourOpenRef","container","previouslyFocusedElement","getTabbableCandidates","nodes","walker","isHiddenInput","getTabbableEdges","candidates","first","last","onFocusIn","event","target","onKeyDown","openAutoFocusEvent","tabbableCandidates","closeAutoFocusEvent","DirectionContext","useDirection","dirProp","contextDir","getDataState","open","useStore","selector","store","useStoreContext","getSnapshot","getTargetElement","getDefaultScrollBehavior","onScrollToElement","scrollBehavior","scrollOffset","offset","rect","viewportHeight","viewportWidth","scrollTop","getSideAndAlignFromPlacement","placement","side","align","getPlacement","updateMask","targetElement","padding","clientRect","x","y","width","height","path","StoreContext","consumerName","context","TourContext","useTourContext","StepContext","useStepContext","DefaultFooterContext","PortalContext","usePortalContext","useScrollLock","originalStyle","scrollbarWidth","TourRoot","openProp","defaultOpen","onOpenChange","valueProp","defaultValue","onValueChange","onComplete","onSkip","autoScroll","rootProps","stateRef","listenersRef","stepIdsMapRef","stepIdCounterRef","propsRef","cb","key","value","prevStep","nextStep","l","stepData","id","index","_","i","stepId","stepIndex","jsx","TourRootImpl","onEscapeKeyDown","onPointerDownOutside","onInteractOutside","alignOffset","sideOffset","spotlightPadding","dismissible","modal","stepFooter","asChild","rootImplProps","dir","portal","setPortal","previouslyFocusedElementRef","onEscapeKeyDownRef","state","prevOpenRef","wasOpen","elementToFocus","contextValue","portalContextValue","RootPrimitive","Slot","TourStep","collisionBoundary","collisionPadding","arrowPadding","sticky","hideWhenDetached","avoidCollisions","required","forceMount","onStepEnter","onStepLeave","onPointerDownCaptureProp","onFocusCaptureProp","onBlurCaptureProp","children","className","style","stepProps","arrow","setArrow","footer","setFooter","stepRef","stepIdRef","stepOrderRef","isPointerInsideReactTreeRef","isFocusInsideReactTreeRef","steps","resolvedSideOffset","resolvedAlignOffset","isCurrentStep","middleware","mainAxisOffset","crossAxisOffset","boundary","hasExplicitBoundaries","detectOverflowOptions","b","shift","limitShift","flip","onArrow","hide","refs","floatingStyles","finalPlacement","middlewareData","useFloating","autoUpdate","composedRef","useComposedRefs","placedSide","placedAlign","arrowX","arrowY","cannotCenterArrow","isHidden","stepContextValue","onResize","onScroll","rafId","stepElement","ownerDocument","onPointerDown","pointerDownOutsideEvent","interactOutsideEvent","timerId","isFocusInStep","isFocusInTarget","onPointerDownCapture","onFocusCapture","onBlurCapture","onTargetPointerDownCapture","onTargetFocusCapture","onTargetBlurCapture","StepPrimitive","jsxs","cn","TourSpotlight","backdropProps","maskPath","SpotlightPrimitive","TourSpotlightRing","ringProps","spotlightRect","RingPrimitive","TourPortal","portalContext","mounted","setMounted","portalContainer","ReactDOM","TourArrow","arrowProps","stepContext","baseSide","TourHeader","headerProps","HeaderPrimitive","TourTitle","titleProps","TitlePrimitive","TourDescription","descriptionProps","DescriptionPrimitive","TourClose","onClickProp","closeButtonProps","onClick","ClosePrimitive","X","TourPrev","prevButtonProps","Button","Fragment","ChevronLeft","TourNext","nextButtonProps","isLastStep","ChevronRight","TourSkip","skipButtonProps","TourStepCounter","format","current","total","stepCounterProps","StepCounterPrimitive","TourFooter","footerProps","hasDefaultFooter","FooterPrimitive"],"mappings":"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"}
1
+ {"version":3,"file":"Tour.cjs","sources":["../../../../src/components/Tour/Tour.tsx"],"sourcesContent":["\"use client\";\n\nimport { cn, Slot, useComposedRefs } from \"@dsui/ui/index\";\nimport {\n autoUpdate,\n flip,\n hide,\n limitShift,\n type Middleware,\n offset,\n arrow as onArrow,\n type Placement,\n shift,\n useFloating,\n} from \"@floating-ui/react-dom\";\nimport { ChevronLeft, ChevronRight, X } from \"lucide-react\";\nimport * as React from \"react\";\nimport * as ReactDOM from \"react-dom\";\nimport { Button } from \"../Button\";\n\nconst ROOT_NAME = \"Tour\";\nconst PORTAL_NAME = \"TourPortal\";\nconst STEP_NAME = \"TourStep\";\nconst ARROW_NAME = \"TourArrow\";\nconst HEADER_NAME = \"TourHeader\";\nconst TITLE_NAME = \"TourTitle\";\nconst DESCRIPTION_NAME = \"TourDescription\";\nconst CLOSE_NAME = \"TourClose\";\nconst PREV_NAME = \"TourPrev\";\nconst NEXT_NAME = \"TourNext\";\nconst SKIP_NAME = \"TourSkip\";\nconst FOOTER_NAME = \"TourFooter\";\n\nconst POINTER_DOWN_OUTSIDE = \"tour.pointerDownOutside\";\nconst INTERACT_OUTSIDE = \"tour.interactOutside\";\nconst OPEN_AUTO_FOCUS = \"tour.openAutoFocus\";\nconst CLOSE_AUTO_FOCUS = \"tour.closeAutoFocus\";\nconst EVENT_OPTIONS = { bubbles: false, cancelable: true };\n\nconst SIDE_OPTIONS = [\"top\", \"right\", \"bottom\", \"left\"] as const;\nconst ALIGN_OPTIONS = [\"start\", \"center\", \"end\"] as const;\n\nconst DEFAULT_ALIGN_OFFSET = 0;\nconst DEFAULT_SIDE_OFFSET = 16;\nconst DEFAULT_SPOTLIGHT_PADDING = 4;\n\ntype Side = (typeof SIDE_OPTIONS)[number];\ntype Align = (typeof ALIGN_OPTIONS)[number];\ntype Direction = \"ltr\" | \"rtl\";\n\ninterface ScrollOffset {\n top?: number;\n bottom?: number;\n left?: number;\n right?: number;\n}\n\ntype Boundary = Element | null;\n\ninterface DivProps extends React.ComponentProps<\"div\"> {\n asChild?: boolean;\n}\n\ntype StepElement = React.ComponentRef<typeof TourStep>;\ntype CloseElement = React.ComponentRef<typeof TourClose>;\ntype PrevElement = React.ComponentRef<typeof TourPrev>;\ntype NextElement = React.ComponentRef<typeof TourNext>;\ntype SkipElement = React.ComponentRef<typeof TourSkip>;\ntype FooterElement = React.ComponentRef<typeof TourFooter>;\n\nconst OPPOSITE_SIDE: Record<Side, Side> = {\n top: \"bottom\",\n right: \"left\",\n bottom: \"top\",\n left: \"right\",\n};\n\nconst useIsomorphicLayoutEffect =\n typeof window === \"undefined\" ? React.useEffect : React.useLayoutEffect;\n\nfunction useAsRef<T>(props: T) {\n const ref = React.useRef<T>(props);\n\n useIsomorphicLayoutEffect(() => {\n ref.current = props;\n });\n\n return ref;\n}\n\nfunction useLazyRef<T>(fn: () => T) {\n const ref = React.useRef<T | null>(null);\n\n if (ref.current === null) {\n ref.current = fn();\n }\n\n return ref as React.RefObject<T>;\n}\n\n/**\n * @see https://github.com/radix-ui/primitives/blob/main/packages/react/focus-guards/src/focus-guards.tsx\n */\nlet focusGuardCount = 0;\n\nfunction createFocusGuard() {\n const element = document.createElement(\"span\");\n element.setAttribute(\"data-tour-focus-guard\", \"\");\n element.tabIndex = 0;\n element.style.outline = \"none\";\n element.style.opacity = \"0\";\n element.style.position = \"fixed\";\n element.style.pointerEvents = \"none\";\n return element;\n}\n\nfunction useFocusGuards() {\n React.useEffect(() => {\n const edgeGuards = document.querySelectorAll(\"[data-tour-focus-guard]\");\n document.body.insertAdjacentElement(\n \"afterbegin\",\n edgeGuards[0] ?? createFocusGuard()\n );\n document.body.insertAdjacentElement(\n \"beforeend\",\n edgeGuards[1] ?? createFocusGuard()\n );\n focusGuardCount++;\n\n return () => {\n if (focusGuardCount === 1) {\n const guards = document.querySelectorAll(\"[data-tour-focus-guard]\");\n for (const node of guards) {\n node.remove();\n }\n }\n focusGuardCount--;\n };\n }, []);\n}\n\nfunction useFocusTrap(\n containerRef: React.RefObject<HTMLElement | null>,\n enabled: boolean,\n tourOpen: boolean,\n onOpenAutoFocus?: (event: OpenAutoFocusEvent) => void,\n onCloseAutoFocus?: (event: CloseAutoFocusEvent) => void\n) {\n const lastFocusedElementRef = React.useRef<HTMLElement | null>(null);\n const onOpenAutoFocusRef = useAsRef(onOpenAutoFocus);\n const onCloseAutoFocusRef = useAsRef(onCloseAutoFocus);\n const tourOpenRef = useAsRef(tourOpen);\n\n React.useEffect(() => {\n if (!enabled) return;\n\n const container = containerRef.current;\n if (!container) return;\n\n const previouslyFocusedElement =\n document.activeElement as HTMLElement | null;\n\n function getTabbableCandidates() {\n if (!container) return [];\n\n const nodes: HTMLElement[] = [];\n const walker = document.createTreeWalker(\n container,\n NodeFilter.SHOW_ELEMENT,\n {\n acceptNode: (node: Element) => {\n const element = node as HTMLElement;\n const isHiddenInput =\n element.tagName === \"INPUT\" &&\n (element as HTMLInputElement).type === \"hidden\";\n if (element.hidden || isHiddenInput) return NodeFilter.FILTER_SKIP;\n return element.tabIndex >= 0\n ? NodeFilter.FILTER_ACCEPT\n : NodeFilter.FILTER_SKIP;\n },\n }\n );\n while (walker.nextNode()) {\n nodes.push(walker.currentNode as HTMLElement);\n }\n return nodes;\n }\n\n function getTabbableEdges() {\n const candidates = getTabbableCandidates();\n const first = candidates[0];\n const last = candidates[candidates.length - 1];\n return [first, last] as const;\n }\n\n function onFocusIn(event: FocusEvent) {\n if (!container) return;\n\n const target = event.target as HTMLElement | null;\n if (container.contains(target)) {\n lastFocusedElementRef.current = target;\n } else {\n const elementToFocus =\n lastFocusedElementRef.current ?? getTabbableCandidates()[0];\n elementToFocus?.focus({ preventScroll: true });\n }\n }\n\n function onKeyDown(event: KeyboardEvent) {\n if (event.key !== \"Tab\" || event.altKey || event.ctrlKey || event.metaKey)\n return;\n\n const [first, last] = getTabbableEdges();\n const hasTabbableElements = first && last;\n\n if (!hasTabbableElements) {\n if (document.activeElement === container) event.preventDefault();\n return;\n }\n\n if (!event.shiftKey && document.activeElement === last) {\n event.preventDefault();\n first?.focus({ preventScroll: true });\n } else if (event.shiftKey && document.activeElement === first) {\n event.preventDefault();\n last?.focus({ preventScroll: true });\n }\n }\n\n const openAutoFocusEvent = new CustomEvent(OPEN_AUTO_FOCUS, EVENT_OPTIONS);\n if (onOpenAutoFocusRef.current) {\n container.addEventListener(\n OPEN_AUTO_FOCUS,\n onOpenAutoFocusRef.current as EventListener,\n { once: true }\n );\n }\n container.dispatchEvent(openAutoFocusEvent);\n\n if (!openAutoFocusEvent.defaultPrevented) {\n const tabbableCandidates = getTabbableCandidates();\n if (tabbableCandidates.length > 0) {\n tabbableCandidates[0]?.focus({ preventScroll: true });\n } else {\n container.focus({ preventScroll: true });\n }\n }\n\n document.addEventListener(\"focusin\", onFocusIn);\n container.addEventListener(\"keydown\", onKeyDown);\n\n return () => {\n document.removeEventListener(\"focusin\", onFocusIn);\n container.removeEventListener(\"keydown\", onKeyDown);\n\n if (!tourOpenRef.current) {\n setTimeout(() => {\n const closeAutoFocusEvent = new CustomEvent(\n CLOSE_AUTO_FOCUS,\n EVENT_OPTIONS\n );\n if (onCloseAutoFocusRef.current) {\n container.addEventListener(\n CLOSE_AUTO_FOCUS,\n onCloseAutoFocusRef.current as EventListener,\n { once: true }\n );\n }\n container.dispatchEvent(closeAutoFocusEvent);\n\n if (!closeAutoFocusEvent.defaultPrevented) {\n if (\n previouslyFocusedElement &&\n document.body.contains(previouslyFocusedElement)\n ) {\n previouslyFocusedElement.focus({ preventScroll: true });\n }\n }\n\n if (onCloseAutoFocusRef.current) {\n container.removeEventListener(\n CLOSE_AUTO_FOCUS,\n onCloseAutoFocusRef.current as EventListener\n );\n }\n }, 0);\n }\n };\n }, [\n containerRef,\n enabled,\n onOpenAutoFocusRef,\n onCloseAutoFocusRef,\n tourOpenRef,\n ]);\n}\n\nconst DirectionContext = React.createContext<Direction | undefined>(undefined);\n\nfunction useDirection(dirProp?: Direction): Direction {\n const contextDir = React.useContext(DirectionContext);\n return dirProp ?? contextDir ?? \"ltr\";\n}\n\nfunction getDataState(open: boolean): string {\n return open ? \"open\" : \"closed\";\n}\n\ninterface StepData {\n target: string | React.RefObject<HTMLElement> | HTMLElement;\n align?: Align;\n alignOffset?: number;\n side?: Side;\n sideOffset?: number;\n collisionBoundary?: Boundary | Boundary[];\n collisionPadding?: number | Partial<Record<Side, number>>;\n arrowPadding?: number;\n sticky?: \"partial\" | \"always\";\n hideWhenDetached?: boolean;\n avoidCollisions?: boolean;\n onStepEnter?: () => void;\n onStepLeave?: () => void;\n required?: boolean;\n}\n\ninterface StoreState {\n open: boolean;\n value: number;\n steps: StepData[];\n maskPath: string;\n spotlightRect: { x: number; y: number; width: number; height: number } | null;\n}\n\ninterface Store {\n subscribe: (callback: () => void) => () => void;\n getState: () => StoreState;\n setState: <K extends keyof StoreState>(\n key: K,\n value: StoreState[K],\n opts?: unknown\n ) => void;\n notify: () => void;\n addStep: (stepData: StepData) => { id: string; index: number };\n removeStep: (id: string) => void;\n}\n\nfunction useStore<T>(selector: (state: StoreState) => T): T {\n const store = useStoreContext(\"useStore\");\n\n const getSnapshot = React.useCallback(\n () => selector(store.getState()),\n [store, selector]\n );\n\n return React.useSyncExternalStore(store.subscribe, getSnapshot, getSnapshot);\n}\n\nfunction getTargetElement(\n target: string | React.RefObject<HTMLElement> | HTMLElement\n): HTMLElement | null {\n if (typeof target === \"string\") {\n return document.querySelector(target);\n }\n if (target && \"current\" in target) {\n return target.current;\n }\n if (target instanceof HTMLElement) {\n return target;\n }\n return null;\n}\n\nfunction getDefaultScrollBehavior(): ScrollBehavior {\n if (typeof window === \"undefined\") return \"smooth\";\n return window.matchMedia(\"(prefers-reduced-motion: reduce)\").matches\n ? \"auto\"\n : \"smooth\";\n}\n\nfunction onScrollToElement(\n element: HTMLElement,\n scrollBehavior: ScrollBehavior = getDefaultScrollBehavior(),\n scrollOffset?: ScrollOffset\n) {\n const offset: Required<ScrollOffset> = {\n top: 100,\n bottom: 100,\n left: 0,\n right: 0,\n ...scrollOffset,\n };\n const rect = element.getBoundingClientRect();\n const viewportHeight = window.innerHeight;\n const viewportWidth = window.innerWidth;\n\n const isInViewport =\n rect.top >= offset.top &&\n rect.bottom <= viewportHeight - offset.bottom &&\n rect.left >= offset.left &&\n rect.right <= viewportWidth - offset.right;\n\n if (!isInViewport) {\n const elementTop = rect.top + window.scrollY;\n const scrollTop = elementTop - offset.top;\n\n window.scrollTo({\n top: Math.max(0, scrollTop),\n behavior: scrollBehavior,\n });\n }\n}\n\nfunction getSideAndAlignFromPlacement(placement: Placement): [Side, Align] {\n const [side, align = \"center\"] = placement.split(\"-\") as [Side, Align?];\n return [side, align];\n}\n\nfunction getPlacement(side: Side, align: Align): Placement {\n if (align === \"center\") {\n return side as Placement;\n }\n return `${side}-${align}` as Placement;\n}\n\nfunction updateMask(\n store: Store,\n targetElement: HTMLElement,\n padding: number = DEFAULT_SPOTLIGHT_PADDING\n) {\n const clientRect = targetElement.getBoundingClientRect();\n const viewportWidth = window.innerWidth;\n const viewportHeight = window.innerHeight;\n\n const x = Math.max(0, clientRect.left - padding);\n const y = Math.max(0, clientRect.top - padding);\n const width = Math.min(viewportWidth - x, clientRect.width + padding * 2);\n const height = Math.min(viewportHeight - y, clientRect.height + padding * 2);\n\n const path = `polygon(0% 0%, 0% 100%, ${x}px 100%, ${x}px ${y}px, ${x + width}px ${y}px, ${x + width}px ${y + height}px, ${x}px ${y + height}px, ${x}px 100%, 100% 100%, 100% 0%)`;\n store.setState(\"maskPath\", path);\n store.setState(\"spotlightRect\", { x, y, width, height });\n}\n\nconst StoreContext = React.createContext<Store | null>(null);\n\nfunction useStoreContext(consumerName: string) {\n const context = React.useContext(StoreContext);\n if (!context) {\n throw new Error(`\\`${consumerName}\\` must be used within \\`${ROOT_NAME}\\``);\n }\n return context;\n}\n\ninterface TourContextValue {\n dir: Direction;\n alignOffset: number;\n sideOffset: number;\n spotlightPadding: number;\n dismissible: boolean;\n modal: boolean;\n stepFooter?: React.ReactElement;\n onPointerDownOutside?: (event: PointerDownOutsideEvent) => void;\n onInteractOutside?: (event: InteractOutsideEvent) => void;\n onOpenAutoFocus?: (event: OpenAutoFocusEvent) => void;\n onCloseAutoFocus?: (event: CloseAutoFocusEvent) => void;\n}\n\nconst TourContext = React.createContext<TourContextValue | null>(null);\n\nfunction useTourContext(consumerName: string) {\n const context = React.useContext(TourContext);\n if (!context) {\n throw new Error(`\\`${consumerName}\\` must be used within \\`${ROOT_NAME}\\``);\n }\n return context;\n}\n\ninterface StepContextValue {\n arrowX?: number;\n arrowY?: number;\n placedAlign: Align;\n placedSide: Side;\n shouldHideArrow: boolean;\n onArrowChange: (arrow: HTMLSpanElement | null) => void;\n onFooterChange: (footer: FooterElement | null) => void;\n}\n\nconst StepContext = React.createContext<StepContextValue | null>(null);\n\nfunction useStepContext(consumerName: string) {\n const context = React.useContext(StepContext);\n if (!context) {\n throw new Error(`\\`${consumerName}\\` must be used within \\`${STEP_NAME}\\``);\n }\n return context;\n}\n\nconst DefaultFooterContext = React.createContext(false);\n\ninterface PortalContextValue {\n portal: HTMLElement | null;\n onPortalChange: (node: HTMLElement | null) => void;\n}\n\nconst PortalContext = React.createContext<PortalContextValue | null>(null);\n\nfunction usePortalContext(consumerName: string) {\n const context = React.useContext(PortalContext);\n if (!context) {\n throw new Error(`\\`${consumerName}\\` must be used within \\`${ROOT_NAME}\\``);\n }\n return context;\n}\n\nfunction useScrollLock(enabled: boolean) {\n React.useEffect(() => {\n if (!enabled) return;\n\n const originalStyle = window.getComputedStyle(document.body).overflow;\n const scrollbarWidth =\n window.innerWidth - document.documentElement.clientWidth;\n\n document.body.style.overflow = \"hidden\";\n if (scrollbarWidth > 0) {\n document.body.style.paddingRight = `${scrollbarWidth}px`;\n }\n\n return () => {\n document.body.style.overflow = originalStyle;\n document.body.style.paddingRight = \"\";\n };\n }, [enabled]);\n}\n\ntype PointerDownOutsideEvent = CustomEvent<{ originalEvent: PointerEvent }>;\ntype InteractOutsideEvent = CustomEvent<{\n originalEvent: PointerEvent | FocusEvent;\n}>;\ntype OpenAutoFocusEvent = CustomEvent<Record<string, never>>;\ntype CloseAutoFocusEvent = CustomEvent<Record<string, never>>;\n\ninterface TourRootProps extends DivProps {\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n value?: number;\n defaultValue?: number;\n onValueChange?: (step: number) => void;\n onComplete?: () => void;\n onSkip?: () => void;\n onEscapeKeyDown?: (event: KeyboardEvent) => void;\n onPointerDownOutside?: (event: PointerDownOutsideEvent) => void;\n onInteractOutside?: (event: InteractOutsideEvent) => void;\n onOpenAutoFocus?: (event: OpenAutoFocusEvent) => void;\n onCloseAutoFocus?: (event: CloseAutoFocusEvent) => void;\n dir?: Direction;\n alignOffset?: number;\n sideOffset?: number;\n spotlightPadding?: number;\n autoScroll?: boolean;\n scrollBehavior?: ScrollBehavior;\n scrollOffset?: ScrollOffset;\n dismissible?: boolean;\n modal?: boolean;\n stepFooter?: React.ReactElement;\n}\n\nfunction TourRoot(props: TourRootProps) {\n const {\n open: openProp,\n defaultOpen = false,\n onOpenChange,\n value: valueProp,\n defaultValue = 0,\n onValueChange,\n onComplete,\n onSkip,\n autoScroll = true,\n scrollBehavior = getDefaultScrollBehavior(),\n scrollOffset,\n ...rootProps\n } = props;\n\n const stateRef = useLazyRef<StoreState>(() => ({\n open: openProp ?? defaultOpen,\n value: valueProp ?? defaultValue,\n steps: [],\n maskPath: \"\",\n spotlightRect: null,\n }));\n const listenersRef = useLazyRef<Set<() => void>>(() => new Set());\n const stepIdsMapRef = useLazyRef<Map<string, number>>(() => new Map());\n const stepIdCounterRef = useLazyRef(() => ({ current: 0 }));\n const propsRef = useAsRef({\n valueProp,\n onOpenChange,\n onValueChange,\n onComplete,\n onSkip,\n autoScroll,\n scrollBehavior,\n scrollOffset,\n });\n\n const store: Store = React.useMemo(\n () => ({\n subscribe: (cb) => {\n listenersRef.current.add(cb);\n return () => listenersRef.current.delete(cb);\n },\n getState: () => {\n return stateRef.current;\n },\n setState: (key, value) => {\n if (Object.is(stateRef.current[key], value)) return;\n stateRef.current[key] = value;\n\n if (key === \"open\" && typeof value === \"boolean\") {\n propsRef.current.onOpenChange?.(value);\n\n if (value) {\n if (stateRef.current.steps.length > 0) {\n if (stateRef.current.value >= stateRef.current.steps.length) {\n store.setState(\"value\", 0);\n }\n }\n } else {\n if (\n stateRef.current.value <\n (stateRef.current.steps.length || 0) - 1\n ) {\n propsRef.current.onSkip?.();\n }\n }\n } else if (key === \"value\" && typeof value === \"number\") {\n const prevStep = stateRef.current.steps[stateRef.current.value];\n const nextStep = stateRef.current.steps[value];\n\n prevStep?.onStepLeave?.();\n nextStep?.onStepEnter?.();\n\n if (value >= stateRef.current.steps.length) {\n propsRef.current.onComplete?.();\n\n if (propsRef.current.valueProp !== undefined) {\n propsRef.current.onValueChange?.(value);\n }\n\n store.setState(\"open\", false);\n return;\n }\n\n if (propsRef.current.valueProp !== undefined) {\n propsRef.current.onValueChange?.(value);\n return;\n }\n\n propsRef.current.onValueChange?.(value);\n\n if (nextStep && propsRef.current.autoScroll) {\n const targetElement = getTargetElement(nextStep.target);\n if (targetElement) {\n onScrollToElement(\n targetElement,\n propsRef.current.scrollBehavior,\n propsRef.current.scrollOffset\n );\n }\n }\n }\n\n store.notify();\n },\n notify: () => {\n listenersRef.current.forEach((l) => {\n l();\n });\n },\n addStep: (stepData) => {\n const id = `step-${stepIdCounterRef.current.current++}`;\n const index = stateRef.current.steps.length;\n stepIdsMapRef.current.set(id, index);\n stateRef.current.steps = [...stateRef.current.steps, stepData];\n store.notify();\n return { id, index };\n },\n removeStep: (id) => {\n const index = stepIdsMapRef.current.get(id);\n if (index === undefined) return;\n\n stateRef.current.steps = stateRef.current.steps.filter(\n (_, i) => i !== index\n );\n\n stepIdsMapRef.current.delete(id);\n\n for (const [stepId, stepIndex] of stepIdsMapRef.current.entries()) {\n if (stepIndex > index) {\n stepIdsMapRef.current.set(stepId, stepIndex - 1);\n }\n }\n\n store.notify();\n },\n }),\n [stateRef, listenersRef, stepIdsMapRef, stepIdCounterRef, propsRef]\n );\n\n useIsomorphicLayoutEffect(() => {\n if (openProp !== undefined) {\n store.setState(\"open\", openProp);\n }\n }, [openProp, store]);\n\n useIsomorphicLayoutEffect(() => {\n if (valueProp !== undefined) {\n store.setState(\"value\", valueProp);\n }\n }, [valueProp, store]);\n\n return (\n <StoreContext.Provider value={store}>\n <TourRootImpl {...rootProps} />\n </StoreContext.Provider>\n );\n}\n\ninterface TourRootImplProps\n extends Omit<\n TourRootProps,\n | \"open\"\n | \"defaultOpen\"\n | \"onOpenChange\"\n | \"value\"\n | \"defaultValue\"\n | \"onValueChange\"\n | \"onComplete\"\n | \"onSkip\"\n | \"autoScroll\"\n | \"scrollBehavior\"\n | \"scrollOffset\"\n > {}\n\nfunction TourRootImpl(props: TourRootImplProps) {\n const {\n onEscapeKeyDown,\n onPointerDownOutside,\n onInteractOutside,\n onOpenAutoFocus,\n onCloseAutoFocus,\n dir: dirProp,\n alignOffset = DEFAULT_ALIGN_OFFSET,\n sideOffset = DEFAULT_SIDE_OFFSET,\n spotlightPadding = DEFAULT_SPOTLIGHT_PADDING,\n dismissible = true,\n modal = true,\n stepFooter,\n asChild,\n ...rootImplProps\n } = props;\n\n const store = useStoreContext(\"TourRootImpl\");\n const dir = useDirection(dirProp);\n\n const [portal, setPortal] = React.useState<HTMLElement | null>(null);\n const previouslyFocusedElementRef = React.useRef<HTMLElement | null>(null);\n\n const onEscapeKeyDownRef = useAsRef(onEscapeKeyDown);\n const onCloseAutoFocusRef = useAsRef(onCloseAutoFocus);\n\n React.useEffect(() => {\n function onKeyDown(event: KeyboardEvent) {\n if (store.getState().open && event.key === \"Escape\") {\n if (onEscapeKeyDownRef.current) {\n onEscapeKeyDownRef.current(event);\n if (event.defaultPrevented) return;\n }\n store.setState(\"open\", false);\n }\n }\n\n document.addEventListener(\"keydown\", onKeyDown);\n return () => document.removeEventListener(\"keydown\", onKeyDown);\n }, [store, onEscapeKeyDownRef]);\n\n const open = useStore((state) => state.open);\n const prevOpenRef = React.useRef<boolean | undefined>(undefined);\n\n useIsomorphicLayoutEffect(() => {\n const wasOpen = prevOpenRef.current;\n\n if (open && !wasOpen) {\n previouslyFocusedElementRef.current =\n document.activeElement as HTMLElement | null;\n } else if (!open && wasOpen) {\n setTimeout(() => {\n const container = portal ?? document.body;\n const closeAutoFocusEvent = new CustomEvent(\n CLOSE_AUTO_FOCUS,\n EVENT_OPTIONS\n );\n\n if (onCloseAutoFocusRef.current) {\n container.addEventListener(\n CLOSE_AUTO_FOCUS,\n onCloseAutoFocusRef.current as EventListener,\n { once: true }\n );\n }\n container.dispatchEvent(closeAutoFocusEvent);\n\n if (!closeAutoFocusEvent.defaultPrevented) {\n const elementToFocus = previouslyFocusedElementRef.current;\n if (elementToFocus && document.body.contains(elementToFocus)) {\n elementToFocus.focus({ preventScroll: true });\n }\n }\n\n previouslyFocusedElementRef.current = null;\n }, 0);\n }\n\n prevOpenRef.current = open;\n }, [open, portal, onCloseAutoFocusRef]);\n\n const contextValue = React.useMemo<TourContextValue>(\n () => ({\n dir,\n alignOffset,\n sideOffset,\n spotlightPadding,\n dismissible,\n modal,\n stepFooter,\n onPointerDownOutside,\n onInteractOutside,\n onOpenAutoFocus,\n onCloseAutoFocus,\n }),\n [\n dir,\n alignOffset,\n sideOffset,\n spotlightPadding,\n dismissible,\n modal,\n stepFooter,\n onPointerDownOutside,\n onInteractOutside,\n onOpenAutoFocus,\n onCloseAutoFocus,\n ]\n );\n\n const portalContextValue = React.useMemo<PortalContextValue>(\n () => ({\n portal,\n onPortalChange: setPortal,\n }),\n [portal]\n );\n\n useScrollLock(open && modal);\n\n const RootPrimitive = asChild ? Slot : \"div\";\n\n return (\n <TourContext.Provider value={contextValue}>\n <PortalContext.Provider value={portalContextValue}>\n <RootPrimitive data-slot=\"tour\" dir={dir} {...rootImplProps} />\n </PortalContext.Provider>\n </TourContext.Provider>\n );\n}\n\ninterface TourStepProps extends DivProps {\n target: string | React.RefObject<HTMLElement> | HTMLElement;\n side?: Side;\n sideOffset?: number;\n align?: Align;\n alignOffset?: number;\n collisionBoundary?: Boundary | Boundary[];\n collisionPadding?: number | Partial<Record<Side, number>>;\n arrowPadding?: number;\n sticky?: \"partial\" | \"always\";\n hideWhenDetached?: boolean;\n avoidCollisions?: boolean;\n required?: boolean;\n forceMount?: boolean;\n onStepEnter?: () => void;\n onStepLeave?: () => void;\n}\n\nfunction TourStep(props: TourStepProps) {\n const {\n target,\n side = \"bottom\",\n sideOffset,\n align = \"center\",\n alignOffset,\n collisionBoundary = [],\n collisionPadding = 0,\n arrowPadding = 0,\n sticky = \"partial\",\n hideWhenDetached = false,\n avoidCollisions = true,\n required = false,\n forceMount = false,\n onStepEnter,\n onStepLeave,\n onPointerDownCapture: onPointerDownCaptureProp,\n onFocusCapture: onFocusCaptureProp,\n onBlurCapture: onBlurCaptureProp,\n children,\n className,\n style,\n asChild,\n ...stepProps\n } = props;\n\n const store = useStoreContext(STEP_NAME);\n\n const [arrow, setArrow] = React.useState<HTMLSpanElement | null>(null);\n const [footer, setFooter] = React.useState<FooterElement | null>(null);\n\n const stepRef = React.useRef<StepElement | null>(null);\n const stepIdRef = React.useRef<string>(\"\");\n const stepOrderRef = React.useRef<number>(-1);\n const isPointerInsideReactTreeRef = React.useRef(false);\n const isFocusInsideReactTreeRef = React.useRef(false);\n\n const open = useStore((state) => state.open);\n const value = useStore((state) => state.value);\n const steps = useStore((state) => state.steps);\n const context = useTourContext(STEP_NAME);\n\n const resolvedSideOffset = sideOffset ?? context.sideOffset;\n const resolvedAlignOffset = alignOffset ?? context.alignOffset;\n\n useIsomorphicLayoutEffect(() => {\n const { id, index } = store.addStep({\n target,\n align,\n alignOffset: resolvedAlignOffset,\n side,\n sideOffset: resolvedSideOffset,\n collisionBoundary,\n collisionPadding,\n arrowPadding,\n sticky,\n hideWhenDetached,\n avoidCollisions,\n onStepEnter,\n onStepLeave,\n required,\n });\n stepIdRef.current = id;\n stepOrderRef.current = index;\n\n return () => {\n store.removeStep(stepIdRef.current);\n };\n }, [\n target,\n side,\n resolvedSideOffset,\n align,\n resolvedAlignOffset,\n collisionPadding,\n arrowPadding,\n sticky,\n hideWhenDetached,\n avoidCollisions,\n required,\n onStepEnter,\n onStepLeave,\n store,\n ]);\n\n const stepData = steps[value];\n const targetElement = stepData ? getTargetElement(stepData.target) : null;\n\n const isCurrentStep = stepOrderRef.current === value;\n\n const middleware = React.useMemo(() => {\n if (!stepData) return [];\n\n const mainAxisOffset = stepData.sideOffset ?? resolvedSideOffset;\n const crossAxisOffset = stepData.alignOffset ?? resolvedAlignOffset;\n\n const padding =\n typeof stepData.collisionPadding === \"number\"\n ? stepData.collisionPadding\n : {\n top: stepData.collisionPadding?.top ?? 0,\n right: stepData.collisionPadding?.right ?? 0,\n bottom: stepData.collisionPadding?.bottom ?? 0,\n left: stepData.collisionPadding?.left ?? 0,\n };\n\n const boundary = Array.isArray(stepData.collisionBoundary)\n ? stepData.collisionBoundary\n : stepData.collisionBoundary\n ? [stepData.collisionBoundary]\n : [];\n const hasExplicitBoundaries = boundary.length > 0;\n\n const detectOverflowOptions = {\n padding,\n boundary: boundary.filter((b): b is Element => b !== null),\n altBoundary: hasExplicitBoundaries,\n };\n\n return [\n offset({\n mainAxis: mainAxisOffset,\n alignmentAxis: crossAxisOffset,\n }),\n stepData.avoidCollisions &&\n shift({\n mainAxis: true,\n crossAxis: false,\n limiter: stepData.sticky === \"partial\" ? limitShift() : undefined,\n ...detectOverflowOptions,\n }),\n stepData.avoidCollisions && flip({ ...detectOverflowOptions }),\n arrow && onArrow({ element: arrow, padding: stepData.arrowPadding }),\n stepData.hideWhenDetached &&\n hide({\n strategy: \"referenceHidden\",\n ...detectOverflowOptions,\n }),\n ].filter(Boolean) as Middleware[];\n }, [stepData, resolvedSideOffset, resolvedAlignOffset, arrow]);\n\n const placement = getPlacement(\n stepData?.side ?? side,\n stepData?.align ?? align\n );\n\n const {\n refs,\n floatingStyles,\n placement: finalPlacement,\n middlewareData,\n } = useFloating({\n placement,\n middleware,\n strategy: \"fixed\",\n whileElementsMounted: autoUpdate,\n elements: {\n reference: targetElement,\n },\n });\n\n const composedRef = useComposedRefs(refs.setFloating, stepRef);\n\n const [placedSide, placedAlign] =\n getSideAndAlignFromPlacement(finalPlacement);\n\n const arrowX = middlewareData.arrow?.x;\n const arrowY = middlewareData.arrow?.y;\n const cannotCenterArrow = middlewareData.arrow?.centerOffset !== 0;\n const isHidden = hideWhenDetached && middlewareData.hide?.referenceHidden;\n\n const stepContextValue = React.useMemo<StepContextValue>(\n () => ({\n arrowX,\n arrowY,\n placedAlign,\n placedSide,\n shouldHideArrow: cannotCenterArrow,\n onArrowChange: setArrow,\n onFooterChange: setFooter,\n }),\n [arrowX, arrowY, placedSide, placedAlign, cannotCenterArrow]\n );\n\n React.useEffect(() => {\n if (open && targetElement && isCurrentStep) {\n updateMask(store, targetElement, context.spotlightPadding);\n\n let rafId: number | null = null;\n\n function onResize() {\n if (targetElement) {\n updateMask(store, targetElement, context.spotlightPadding);\n }\n }\n\n function onScroll() {\n if (rafId !== null) return;\n rafId = requestAnimationFrame(() => {\n if (targetElement) {\n updateMask(store, targetElement, context.spotlightPadding);\n }\n rafId = null;\n });\n }\n\n window.addEventListener(\"resize\", onResize);\n window.addEventListener(\"scroll\", onScroll, { passive: true });\n return () => {\n window.removeEventListener(\"resize\", onResize);\n window.removeEventListener(\"scroll\", onScroll);\n if (rafId !== null) {\n cancelAnimationFrame(rafId);\n }\n };\n }\n }, [open, targetElement, isCurrentStep, store, context.spotlightPadding]);\n\n React.useEffect(() => {\n if (!open || !isCurrentStep) return;\n\n const stepElement = stepRef.current;\n if (!stepElement) return;\n\n const ownerDocument = stepElement.ownerDocument;\n\n function onPointerDown(event: PointerEvent) {\n if (event.target && !isPointerInsideReactTreeRef.current) {\n const pointerDownOutsideEvent = new CustomEvent(POINTER_DOWN_OUTSIDE, {\n ...EVENT_OPTIONS,\n detail: { originalEvent: event },\n });\n\n context.onPointerDownOutside?.(pointerDownOutsideEvent);\n\n const interactOutsideEvent = new CustomEvent(INTERACT_OUTSIDE, {\n ...EVENT_OPTIONS,\n detail: { originalEvent: event },\n });\n context.onInteractOutside?.(interactOutsideEvent);\n\n if (\n !pointerDownOutsideEvent.defaultPrevented &&\n !interactOutsideEvent.defaultPrevented &&\n context.dismissible\n ) {\n store.setState(\"open\", false);\n }\n }\n\n isPointerInsideReactTreeRef.current = false;\n }\n\n const timerId = window.setTimeout(() => {\n ownerDocument.addEventListener(\"pointerdown\", onPointerDown);\n }, 0);\n\n return () => {\n window.clearTimeout(timerId);\n ownerDocument.removeEventListener(\"pointerdown\", onPointerDown);\n };\n }, [open, isCurrentStep, store, context]);\n\n React.useEffect(() => {\n if (!open || !isCurrentStep) return;\n\n const stepElement = stepRef.current;\n if (!stepElement) return;\n\n const ownerDocument = stepElement.ownerDocument;\n\n function onFocusIn(event: FocusEvent) {\n const target = event.target as HTMLElement;\n\n const isFocusInStep = stepElement?.contains(target);\n const isFocusInTarget = targetElement?.contains(target);\n\n if (\n event.target &&\n !isFocusInsideReactTreeRef.current &&\n !isFocusInStep &&\n !isFocusInTarget\n ) {\n const interactOutsideEvent = new CustomEvent(INTERACT_OUTSIDE, {\n ...EVENT_OPTIONS,\n detail: { originalEvent: event },\n });\n\n context.onInteractOutside?.(interactOutsideEvent);\n\n if (!interactOutsideEvent.defaultPrevented && context.dismissible) {\n store.setState(\"open\", false);\n }\n }\n }\n\n ownerDocument.addEventListener(\"focusin\", onFocusIn);\n\n return () => {\n ownerDocument.removeEventListener(\"focusin\", onFocusIn);\n };\n }, [open, isCurrentStep, store, context, targetElement]);\n\n const onPointerDownCapture = React.useCallback(\n (event: React.PointerEvent<StepElement>) => {\n onPointerDownCaptureProp?.(event);\n isPointerInsideReactTreeRef.current = true;\n },\n [onPointerDownCaptureProp]\n );\n\n const onFocusCapture = React.useCallback(\n (event: React.FocusEvent<StepElement>) => {\n onFocusCaptureProp?.(event);\n isFocusInsideReactTreeRef.current = true;\n },\n [onFocusCaptureProp]\n );\n\n const onBlurCapture = React.useCallback(\n (event: React.FocusEvent<StepElement>) => {\n onBlurCaptureProp?.(event);\n isFocusInsideReactTreeRef.current = false;\n },\n [onBlurCaptureProp]\n );\n\n React.useEffect(() => {\n if (!open || !isCurrentStep || !targetElement) return;\n\n function onTargetPointerDownCapture() {\n isPointerInsideReactTreeRef.current = true;\n }\n\n function onTargetFocusCapture() {\n isFocusInsideReactTreeRef.current = true;\n }\n\n function onTargetBlurCapture() {\n isFocusInsideReactTreeRef.current = false;\n }\n\n targetElement.addEventListener(\n \"pointerdown\",\n onTargetPointerDownCapture,\n true\n );\n targetElement.addEventListener(\"focus\", onTargetFocusCapture, true);\n targetElement.addEventListener(\"blur\", onTargetBlurCapture, true);\n\n return () => {\n targetElement.removeEventListener(\n \"pointerdown\",\n onTargetPointerDownCapture,\n true\n );\n targetElement.removeEventListener(\"focus\", onTargetFocusCapture, true);\n targetElement.removeEventListener(\"blur\", onTargetBlurCapture, true);\n };\n }, [open, isCurrentStep, targetElement]);\n\n useFocusGuards();\n useFocusTrap(\n stepRef,\n open && isCurrentStep,\n open,\n context.onOpenAutoFocus,\n context.onCloseAutoFocus\n );\n\n if (!open || !stepData || (!targetElement && !forceMount) || !isCurrentStep) {\n return null;\n }\n\n const StepPrimitive = asChild ? Slot : \"div\";\n\n return (\n <StepContext.Provider value={stepContextValue}>\n <StepPrimitive\n ref={composedRef}\n data-slot=\"tour-step\"\n data-side={placedSide}\n data-align={placedAlign}\n dir={context.dir}\n tabIndex={-1}\n {...stepProps}\n onPointerDownCapture={onPointerDownCapture}\n onFocusCapture={onFocusCapture}\n onBlurCapture={onBlurCapture}\n className={cn(\n \"ds:fixed ds:z-50 ds:flex ds:w-80 ds:flex-col ds:gap-4 ds:rounded-lg ds:border ds:bg-popover ds:p-4 ds:text-popover-foreground ds:shadow-md ds:outline-none\",\n className\n )}\n style={{\n ...style,\n ...floatingStyles,\n visibility: isHidden ? \"hidden\" : undefined,\n pointerEvents: isHidden ? \"none\" : undefined,\n } as React.CSSProperties}\n >\n {children}\n {!footer && (\n <DefaultFooterContext.Provider value={true}>\n {context.stepFooter}\n </DefaultFooterContext.Provider>\n )}\n </StepPrimitive>\n </StepContext.Provider>\n );\n}\n\ninterface TourSpotlightProps extends DivProps {\n forceMount?: boolean;\n}\n\nfunction TourSpotlight(props: TourSpotlightProps) {\n const {\n asChild,\n className,\n style,\n forceMount = false,\n ...backdropProps\n } = props;\n\n const open = useStore((state) => state.open);\n const maskPath = useStore((state) => state.maskPath);\n\n if (!open && !forceMount) return null;\n\n const SpotlightPrimitive = asChild ? Slot : \"div\";\n\n return (\n <SpotlightPrimitive\n data-slot=\"tour-spotlight\"\n data-state={getDataState(open)}\n {...backdropProps}\n className={cn(\n \"ds:data-[state=closed]:fade-out-0 ds:data-[state=open]:fade-in-0 ds:fixed ds:inset-0 ds:z-40 ds:bg-black/80 ds:data-[state=closed]:animate-out ds:data-[state=open]:animate-in\",\n className\n )}\n style={{\n clipPath: maskPath,\n ...style,\n }}\n />\n );\n}\n\ninterface TourSpotlightRingProps extends DivProps {\n forceMount?: boolean;\n}\n\nfunction TourSpotlightRing(props: TourSpotlightRingProps) {\n const { asChild, className, style, forceMount = false, ...ringProps } = props;\n\n const open = useStore((state) => state.open);\n const spotlightRect = useStore((state) => state.spotlightRect);\n\n if (!open && !forceMount) return null;\n if (!spotlightRect) return null;\n\n const RingPrimitive = asChild ? Slot : \"div\";\n\n return (\n <RingPrimitive\n data-slot=\"tour-spotlight-ring\"\n data-state={getDataState(open)}\n {...ringProps}\n className={cn(\n \"ds:pointer-events-none ds:fixed ds:z-40 ds:border-ring ds:ring-[3px] ds:ring-ring/50\",\n className\n )}\n style={{\n left: spotlightRect.x,\n top: spotlightRect.y,\n width: spotlightRect.width,\n height: spotlightRect.height,\n ...style,\n }}\n />\n );\n}\n\ninterface TourPortalProps {\n children?: React.ReactNode;\n container?: HTMLElement | null;\n}\n\nfunction TourPortal(props: TourPortalProps) {\n const { children, container } = props;\n\n const portalContext = usePortalContext(PORTAL_NAME);\n\n const [mounted, setMounted] = React.useState(false);\n\n useIsomorphicLayoutEffect(() => {\n setMounted(true);\n\n const node = container ?? document.body;\n\n portalContext?.onPortalChange(node);\n return () => {\n portalContext?.onPortalChange(null);\n };\n }, [container, portalContext]);\n\n if (!mounted) return null;\n\n const portalContainer = container ?? portalContext?.portal ?? document.body;\n\n return ReactDOM.createPortal(children, portalContainer);\n}\n\ninterface TourArrowProps extends React.ComponentProps<\"svg\"> {\n width?: number;\n height?: number;\n asChild?: boolean;\n}\n\nfunction TourArrow(props: TourArrowProps) {\n const {\n width = 10,\n height = 5,\n className,\n children,\n asChild,\n ...arrowProps\n } = props;\n\n const stepContext = useStepContext(ARROW_NAME);\n const baseSide = OPPOSITE_SIDE[stepContext.placedSide];\n\n return (\n <span\n ref={stepContext.onArrowChange}\n data-slot=\"tour-arrow\"\n style={{\n position: \"absolute\",\n left:\n stepContext.arrowX != null ? `${stepContext.arrowX}px` : undefined,\n top: stepContext.arrowY != null ? `${stepContext.arrowY}px` : undefined,\n [baseSide]: 0,\n transformOrigin: {\n top: \"\",\n right: \"0 0\",\n bottom: \"center 0\",\n left: \"100% 0\",\n }[stepContext.placedSide],\n transform: {\n top: \"translateY(100%)\",\n right: \"translateY(50%) rotate(90deg) translateX(-50%)\",\n bottom: \"rotate(180deg)\",\n left: \"translateY(50%) rotate(-90deg) translateX(50%)\",\n }[stepContext.placedSide],\n visibility: stepContext.shouldHideArrow ? \"hidden\" : undefined,\n }}\n >\n <svg\n viewBox=\"0 0 30 10\"\n preserveAspectRatio=\"none\"\n width={width}\n height={height}\n {...arrowProps}\n className={cn(\"ds:block ds:fill-popover ds:stroke-border\", className)}\n >\n {asChild ? children : <polygon points=\"0,0 30,0 15,10\" />}\n </svg>\n </span>\n );\n}\n\nfunction TourHeader(props: DivProps) {\n const { asChild, className, ...headerProps } = props;\n\n const context = useTourContext(HEADER_NAME);\n\n const HeaderPrimitive = asChild ? Slot : \"div\";\n\n return (\n <HeaderPrimitive\n data-slot=\"tour-header\"\n dir={context.dir}\n {...headerProps}\n className={cn(\n \"ds:flex ds:flex-col ds:gap-1.5 ds:text-center ds:sm:text-left\",\n className\n )}\n />\n );\n}\n\nfunction TourTitle(props: DivProps) {\n const { asChild, className, ...titleProps } = props;\n\n const context = useTourContext(TITLE_NAME);\n\n const TitlePrimitive = asChild ? Slot : \"div\";\n\n return (\n <TitlePrimitive\n data-slot=\"tour-title\"\n dir={context.dir}\n {...titleProps}\n className={cn(\n \"ds:font-semibold ds:text-lg ds:leading-none ds:tracking-tight\",\n className\n )}\n />\n );\n}\n\nfunction TourDescription(props: DivProps) {\n const { asChild, className, ...descriptionProps } = props;\n\n const context = useTourContext(DESCRIPTION_NAME);\n\n const DescriptionPrimitive = asChild ? Slot : \"div\";\n\n return (\n <DescriptionPrimitive\n data-slot=\"tour-description\"\n dir={context.dir}\n {...descriptionProps}\n className={cn(\"ds:text-muted-foreground ds:text-sm\", className)}\n />\n );\n}\n\ninterface TourCloseProps extends React.ComponentProps<\"button\"> {\n asChild?: boolean;\n}\n\nfunction TourClose(props: TourCloseProps) {\n const {\n asChild,\n className,\n onClick: onClickProp,\n ...closeButtonProps\n } = props;\n\n const store = useStoreContext(CLOSE_NAME);\n\n const onClick = React.useCallback(\n (event: React.MouseEvent<CloseElement>) => {\n onClickProp?.(event);\n if (event.defaultPrevented) return;\n\n store.setState(\"open\", false);\n },\n [store, onClickProp]\n );\n\n const ClosePrimitive = asChild ? Slot : \"button\";\n\n return (\n <ClosePrimitive\n type=\"button\"\n aria-label=\"Close tour\"\n className={cn(\n \"ds:absolute ds:top-4 ds:right-4 ds:rounded-xs ds:opacity-70 ds:ring-offset-background ds:transition-opacity ds:hover:opacity-100 ds:focus:outline-hidden ds:focus:ring-2 ds:focus:ring-ring ds:focus:ring-offset-2 ds:disabled:pointer-events-none ds:[&_svg:not([class*='size-'])]:size-4 ds:[&_svg]:pointer-events-none ds:[&_svg]:shrink-0\",\n className\n )}\n onClick={onClick}\n {...closeButtonProps}\n >\n <X className=\"ds:size-4\" />\n </ClosePrimitive>\n );\n}\n\nfunction TourPrev(props: React.ComponentProps<typeof Button>) {\n const { children, onClick: onClickProp, ...prevButtonProps } = props;\n\n const store = useStoreContext(PREV_NAME);\n const value = useStore((state) => state.value);\n\n const onClick = React.useCallback(\n (event: React.MouseEvent<PrevElement>) => {\n onClickProp?.(event);\n if (event.defaultPrevented) return;\n\n if (value > 0) {\n store.setState(\"value\", value - 1);\n }\n },\n [value, store, onClickProp]\n );\n\n return (\n <Button\n type=\"button\"\n aria-label=\"Previous step\"\n data-slot=\"tour-prev\"\n variant=\"outline\"\n {...prevButtonProps}\n onClick={onClick}\n disabled={value === 0}\n >\n {children ?? (\n <>\n <ChevronLeft />\n Previous\n </>\n )}\n </Button>\n );\n}\n\nfunction TourNext(props: React.ComponentProps<typeof Button>) {\n const { children, onClick: onClickProp, ...nextButtonProps } = props;\n const store = useStoreContext(NEXT_NAME);\n const value = useStore((state) => state.value);\n const steps = useStore((state) => state.steps);\n\n const isLastStep = value === steps.length - 1;\n\n const onClick = React.useCallback(\n (event: React.MouseEvent<NextElement>) => {\n onClickProp?.(event);\n if (event.defaultPrevented) return;\n\n store.setState(\"value\", value + 1);\n },\n [value, store, onClickProp]\n );\n\n return (\n <Button\n type=\"button\"\n aria-label=\"Next step\"\n data-slot=\"tour-next\"\n {...nextButtonProps}\n onClick={onClick}\n >\n {children ?? (\n <>\n {isLastStep ? \"Finish\" : \"Next\"}\n {!isLastStep && <ChevronRight />}\n </>\n )}\n </Button>\n );\n}\n\nfunction TourSkip(props: React.ComponentProps<typeof Button>) {\n const { children, onClick: onClickProp, ...skipButtonProps } = props;\n\n const store = useStoreContext(SKIP_NAME);\n\n const onClick = React.useCallback(\n (event: React.MouseEvent<SkipElement>) => {\n onClickProp?.(event);\n if (event.defaultPrevented) return;\n\n store.setState(\"open\", false);\n },\n [store, onClickProp]\n );\n\n return (\n <Button\n type=\"button\"\n aria-label=\"Skip tour\"\n data-slot=\"tour-skip\"\n variant=\"outline\"\n {...skipButtonProps}\n onClick={onClick}\n >\n {children ?? \"Skip\"}\n </Button>\n );\n}\n\ninterface TourStepCounterProps extends DivProps {\n format?: (current: number, total: number) => string;\n}\n\nfunction TourStepCounter(props: TourStepCounterProps) {\n const {\n format = (current, total) => `${current} / ${total}`,\n asChild,\n className,\n children,\n ...stepCounterProps\n } = props;\n\n const value = useStore((state) => state.value);\n const steps = useStore((state) => state.steps);\n\n const StepCounterPrimitive = asChild ? Slot : \"div\";\n\n return (\n <StepCounterPrimitive\n data-slot=\"tour-step-counter\"\n {...stepCounterProps}\n className={cn(\"ds:text-muted-foreground ds:text-sm\", className)}\n >\n {children ?? format(value + 1, steps.length)}\n </StepCounterPrimitive>\n );\n}\n\nfunction TourFooter(props: DivProps) {\n const { asChild, className, ref, ...footerProps } = props;\n\n const stepContext = useStepContext(FOOTER_NAME);\n const hasDefaultFooter = React.useContext(DefaultFooterContext);\n const context = useTourContext(FOOTER_NAME);\n\n const composedRef = useComposedRefs(\n ref,\n hasDefaultFooter ? undefined : stepContext.onFooterChange\n );\n\n const FooterPrimitive = asChild ? Slot : \"div\";\n\n return (\n <FooterPrimitive\n data-slot=\"tour-footer\"\n dir={context.dir}\n {...footerProps}\n ref={composedRef}\n className={cn(\n \"ds:flex ds:flex-col-reverse ds:gap-2 ds:sm:flex-row ds:sm:justify-end\",\n className\n )}\n />\n );\n}\n\nexport {\n TourRoot as Root,\n TourPortal as Portal,\n TourSpotlight as Spotlight,\n TourSpotlightRing as SpotlightRing,\n TourStep as Step,\n TourArrow as Arrow,\n TourHeader as Header,\n TourTitle as Title,\n TourDescription as Description,\n TourClose as Close,\n TourPrev as Prev,\n TourNext as Next,\n TourSkip as Skip,\n TourStepCounter as StepCounter,\n TourFooter as Footer,\n //\n TourRoot as Tour,\n TourPortal,\n TourSpotlight,\n TourSpotlightRing,\n TourStep,\n TourArrow,\n TourHeader,\n TourTitle,\n TourDescription,\n TourClose,\n TourPrev,\n TourNext,\n TourSkip,\n TourStepCounter,\n TourFooter,\n //\n type TourRootProps as TourProps,\n};\n"],"names":["ROOT_NAME","PORTAL_NAME","STEP_NAME","ARROW_NAME","HEADER_NAME","TITLE_NAME","DESCRIPTION_NAME","CLOSE_NAME","PREV_NAME","NEXT_NAME","SKIP_NAME","FOOTER_NAME","POINTER_DOWN_OUTSIDE","INTERACT_OUTSIDE","OPEN_AUTO_FOCUS","CLOSE_AUTO_FOCUS","EVENT_OPTIONS","DEFAULT_ALIGN_OFFSET","DEFAULT_SIDE_OFFSET","DEFAULT_SPOTLIGHT_PADDING","OPPOSITE_SIDE","useIsomorphicLayoutEffect","React","useAsRef","props","ref","useLazyRef","fn","focusGuardCount","createFocusGuard","element","useFocusGuards","edgeGuards","guards","node","useFocusTrap","containerRef","enabled","tourOpen","onOpenAutoFocus","onCloseAutoFocus","lastFocusedElementRef","onOpenAutoFocusRef","onCloseAutoFocusRef","tourOpenRef","container","previouslyFocusedElement","getTabbableCandidates","nodes","walker","isHiddenInput","getTabbableEdges","candidates","first","last","onFocusIn","event","target","onKeyDown","openAutoFocusEvent","tabbableCandidates","closeAutoFocusEvent","DirectionContext","useDirection","dirProp","contextDir","getDataState","open","useStore","selector","store","useStoreContext","getSnapshot","getTargetElement","getDefaultScrollBehavior","onScrollToElement","scrollBehavior","scrollOffset","offset","rect","viewportHeight","viewportWidth","scrollTop","getSideAndAlignFromPlacement","placement","side","align","getPlacement","updateMask","targetElement","padding","clientRect","x","y","width","height","path","StoreContext","consumerName","context","TourContext","useTourContext","StepContext","useStepContext","DefaultFooterContext","PortalContext","usePortalContext","useScrollLock","originalStyle","scrollbarWidth","TourRoot","openProp","defaultOpen","onOpenChange","valueProp","defaultValue","onValueChange","onComplete","onSkip","autoScroll","rootProps","stateRef","listenersRef","stepIdsMapRef","stepIdCounterRef","propsRef","cb","key","value","prevStep","nextStep","l","stepData","id","index","_","i","stepId","stepIndex","jsx","TourRootImpl","onEscapeKeyDown","onPointerDownOutside","onInteractOutside","alignOffset","sideOffset","spotlightPadding","dismissible","modal","stepFooter","asChild","rootImplProps","dir","portal","setPortal","previouslyFocusedElementRef","onEscapeKeyDownRef","state","prevOpenRef","wasOpen","elementToFocus","contextValue","portalContextValue","RootPrimitive","Slot","TourStep","collisionBoundary","collisionPadding","arrowPadding","sticky","hideWhenDetached","avoidCollisions","required","forceMount","onStepEnter","onStepLeave","onPointerDownCaptureProp","onFocusCaptureProp","onBlurCaptureProp","children","className","style","stepProps","arrow","setArrow","footer","setFooter","stepRef","stepIdRef","stepOrderRef","isPointerInsideReactTreeRef","isFocusInsideReactTreeRef","steps","resolvedSideOffset","resolvedAlignOffset","isCurrentStep","middleware","mainAxisOffset","crossAxisOffset","boundary","hasExplicitBoundaries","detectOverflowOptions","b","shift","limitShift","flip","onArrow","hide","refs","floatingStyles","finalPlacement","middlewareData","useFloating","autoUpdate","composedRef","useComposedRefs","placedSide","placedAlign","arrowX","arrowY","cannotCenterArrow","isHidden","stepContextValue","onResize","onScroll","rafId","stepElement","ownerDocument","onPointerDown","pointerDownOutsideEvent","interactOutsideEvent","timerId","isFocusInStep","isFocusInTarget","onPointerDownCapture","onFocusCapture","onBlurCapture","onTargetPointerDownCapture","onTargetFocusCapture","onTargetBlurCapture","StepPrimitive","jsxs","cn","TourSpotlight","backdropProps","maskPath","SpotlightPrimitive","TourSpotlightRing","ringProps","spotlightRect","RingPrimitive","TourPortal","portalContext","mounted","setMounted","portalContainer","ReactDOM","TourArrow","arrowProps","stepContext","baseSide","TourHeader","headerProps","HeaderPrimitive","TourTitle","titleProps","TitlePrimitive","TourDescription","descriptionProps","DescriptionPrimitive","TourClose","onClickProp","closeButtonProps","onClick","ClosePrimitive","X","TourPrev","prevButtonProps","Button","Fragment","ChevronLeft","TourNext","nextButtonProps","isLastStep","ChevronRight","TourSkip","skipButtonProps","TourStepCounter","format","current","total","stepCounterProps","StepCounterPrimitive","TourFooter","footerProps","hasDefaultFooter","FooterPrimitive"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const i=require("react/jsx-runtime");require("react");const r=require("./Tour.cjs");function t({steps:l,children:s,showSpotlight:c=!0,showSpotlightRing:o=!0,spotlightClassName:a,spotlightRingClassName:h,buttonConfig:n,...x}){return i.jsxs(r.Root,{...x,children:[i.jsxs(r.Portal,{children:[c&&i.jsxs(i.Fragment,{children:[i.jsx(r.Spotlight,{className:a}),o&&i.jsx(r.SpotlightRing,{className:h})]}),l&&l.length>0&&l.map((e,d)=>i.jsxs(r.Step,{target:e.target,side:e.side,align:e.align,alignOffset:e.alignOffset,sideOffset:e.sideOffset,collisionBoundary:e.collisionBoundary,collisionPadding:e.collisionPadding,arrowPadding:e.arrowPadding,sticky:e.sticky,hideWhenDetached:e.hideWhenDetached,avoidCollisions:e.avoidCollisions,required:e.required,forceMount:e.forceMount,onStepEnter:e.onStepEnter,onStepLeave:e.onStepLeave,children:[!e.hideArrow&&i.jsx(r.Arrow,{}),i.jsxs(r.Header,{children:[i.jsx(r.Title,{children:e.title}),!e.hideClose&&i.jsx(r.Close,{})]}),e.description&&i.jsx(r.Description,{children:e.description}),e.content&&i.jsx("div",{className:"py-2",children:e.content}),!e.hideFooter&&i.jsxs(r.Footer,{children:[i.jsxs("div",{className:"flex items-center gap-2",children:[!e.hideStepCounter&&i.jsx(r.StepCounter,{}),!e.hideSkip&&d===0&&(n?.skip?i.jsx(r.Skip,{children:n.skip}):i.jsx(r.Skip,{}))]}),i.jsxs("div",{className:"flex items-center gap-2",children:[d>0&&(n?.prev?i.jsx(r.Prev,{children:n.prev}):i.jsx(r.Prev,{})),n?.next?d===l.length-1&&n?.finish?i.jsx(r.Next,{children:n.finish}):i.jsx(r.Next,{children:n.next}):i.jsx(r.Next,{})]})]})]},d))]}),s]})}exports.TourWrapper=t;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const i=require("react/jsx-runtime");require("react");const r=require("./Tour.cjs");function t({steps:s,children:l,showSpotlight:c=!0,showSpotlightRing:o=!0,spotlightClassName:a,spotlightRingClassName:h,buttonConfig:d,...x}){return i.jsxs(r.Root,{...x,children:[i.jsxs(r.Portal,{children:[c&&i.jsxs(i.Fragment,{children:[i.jsx(r.Spotlight,{className:a}),o&&i.jsx(r.SpotlightRing,{className:h})]}),s&&s.length>0&&s.map((e,n)=>i.jsxs(r.Step,{target:e.target,side:e.side,align:e.align,alignOffset:e.alignOffset,sideOffset:e.sideOffset,collisionBoundary:e.collisionBoundary,collisionPadding:e.collisionPadding,arrowPadding:e.arrowPadding,sticky:e.sticky,hideWhenDetached:e.hideWhenDetached,avoidCollisions:e.avoidCollisions,required:e.required,forceMount:e.forceMount,onStepEnter:e.onStepEnter,onStepLeave:e.onStepLeave,children:[!e.hideArrow&&i.jsx(r.Arrow,{}),i.jsxs(r.Header,{children:[i.jsx(r.Title,{children:e.title}),!e.hideClose&&i.jsx(r.Close,{})]}),e.description&&i.jsx(r.Description,{children:e.description}),e.content&&i.jsx("div",{className:"ds:py-2",children:e.content}),!e.hideFooter&&i.jsxs(r.Footer,{children:[i.jsxs("div",{className:"ds:flex ds:items-center ds:gap-2",children:[!e.hideStepCounter&&i.jsx(r.StepCounter,{}),!e.hideSkip&&n===0&&(d?.skip?i.jsx(r.Skip,{children:d.skip}):i.jsx(r.Skip,{}))]}),i.jsxs("div",{className:"ds:flex ds:items-center ds:gap-2",children:[n>0&&(d?.prev?i.jsx(r.Prev,{children:d.prev}):i.jsx(r.Prev,{})),d?.next?n===s.length-1&&d?.finish?i.jsx(r.Next,{children:d.finish}):i.jsx(r.Next,{children:d.next}):i.jsx(r.Next,{})]})]})]},n))]}),l]})}exports.TourWrapper=t;
2
2
  //# sourceMappingURL=TourWrapper.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"TourWrapper.cjs","sources":["../../../../src/components/Tour/TourWrapper.tsx"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport {\n Root,\n Portal,\n Step,\n Arrow,\n Header,\n Title,\n Description,\n Close,\n Footer,\n Prev,\n Next,\n Skip,\n StepCounter,\n Spotlight,\n SpotlightRing,\n} from \"./Tour\";\nimport type { TourProps } from \"./Tour\";\n\ninterface TourStep {\n target: string | React.RefObject<HTMLElement> | HTMLElement;\n title: string;\n description?: string;\n side?: \"top\" | \"right\" | \"bottom\" | \"left\";\n align?: \"start\" | \"center\" | \"end\";\n alignOffset?: number;\n sideOffset?: number;\n collisionBoundary?: Element | null | Array<Element | null>;\n collisionPadding?:\n | number\n | Partial<Record<\"top\" | \"right\" | \"bottom\" | \"left\", number>>;\n arrowPadding?: number;\n sticky?: \"partial\" | \"always\";\n hideWhenDetached?: boolean;\n avoidCollisions?: boolean;\n required?: boolean;\n forceMount?: boolean;\n hideArrow?: boolean;\n hideClose?: boolean;\n hideFooter?: boolean;\n hideSkip?: boolean;\n hideStepCounter?: boolean;\n content?: React.ReactNode;\n onStepEnter?: () => void;\n onStepLeave?: () => void;\n}\n\ninterface ButtonConfig {\n skip?: string;\n prev?: string;\n next?: string;\n finish?: string;\n}\n\ninterface TourWrapperProps extends Omit<TourProps, \"children\"> {\n steps?: TourStep[];\n children?: React.ReactNode;\n showSpotlight?: boolean;\n showSpotlightRing?: boolean;\n spotlightClassName?: string;\n spotlightRingClassName?: string;\n buttonConfig?: ButtonConfig;\n}\n\nfunction TourWrapper({\n steps,\n children,\n showSpotlight = true,\n showSpotlightRing = true,\n spotlightClassName,\n spotlightRingClassName,\n buttonConfig,\n ...props\n}: TourWrapperProps) {\n return (\n <Root {...props}>\n <Portal>\n {showSpotlight && (\n <>\n <Spotlight className={spotlightClassName} />\n {showSpotlightRing && (\n <SpotlightRing className={spotlightRingClassName} />\n )}\n </>\n )}\n\n {steps &&\n steps.length > 0 &&\n steps.map((step, index) => (\n <Step\n key={index}\n target={step.target}\n side={step.side}\n align={step.align}\n alignOffset={step.alignOffset}\n sideOffset={step.sideOffset}\n collisionBoundary={step.collisionBoundary}\n collisionPadding={step.collisionPadding}\n arrowPadding={step.arrowPadding}\n sticky={step.sticky}\n hideWhenDetached={step.hideWhenDetached}\n avoidCollisions={step.avoidCollisions}\n required={step.required}\n forceMount={step.forceMount}\n onStepEnter={step.onStepEnter}\n onStepLeave={step.onStepLeave}\n >\n {!step.hideArrow && <Arrow />}\n <Header>\n <Title>{step.title}</Title>\n {!step.hideClose && <Close />}\n </Header>\n {step.description && (\n <Description>{step.description}</Description>\n )}\n {step.content && <div className=\"py-2\">{step.content}</div>}\n {!step.hideFooter && (\n <Footer>\n <div className=\"flex items-center gap-2\">\n {!step.hideStepCounter && <StepCounter />}\n {!step.hideSkip &&\n index === 0 &&\n (buttonConfig?.skip ? (\n <Skip>{buttonConfig.skip}</Skip>\n ) : (\n <Skip />\n ))}\n </div>\n <div className=\"flex items-center gap-2\">\n {index > 0 &&\n (buttonConfig?.prev ? (\n <Prev>{buttonConfig.prev}</Prev>\n ) : (\n <Prev />\n ))}\n {buttonConfig?.next ? (\n index === steps.length - 1 && buttonConfig?.finish ? (\n <Next>{buttonConfig.finish}</Next>\n ) : (\n <Next>{buttonConfig.next}</Next>\n )\n ) : (\n <Next />\n )}\n </div>\n </Footer>\n )}\n </Step>\n ))}\n </Portal>\n\n {children}\n </Root>\n );\n}\n\nexport { TourWrapper };\nexport type { TourWrapperProps, TourStep, ButtonConfig };\n"],"names":["TourWrapper","steps","children","showSpotlight","showSpotlightRing","spotlightClassName","spotlightRingClassName","buttonConfig","props","jsxs","Root","Portal","Fragment","jsx","Spotlight","SpotlightRing","step","index","Step","Arrow","Header","Title","Close","Description","Footer","StepCounter","Skip","Prev","Next"],"mappings":"oKAmEA,SAASA,EAAY,CACnB,MAAAC,EACA,SAAAC,EACA,cAAAC,EAAgB,GAChB,kBAAAC,EAAoB,GACpB,mBAAAC,EACA,uBAAAC,EACA,aAAAC,EACA,GAAGC,CACL,EAAqB,CACnB,OACEC,EAAAA,KAACC,EAAAA,KAAA,CAAM,GAAGF,EACR,SAAA,CAAAC,OAACE,EAAAA,OAAA,CACE,SAAA,CAAAR,GACCM,EAAAA,KAAAG,WAAA,CACE,SAAA,CAAAC,EAAAA,IAACC,EAAAA,UAAA,CAAU,UAAWT,CAAA,CAAoB,EACzCD,GACCS,EAAAA,IAACE,EAAAA,cAAA,CAAc,UAAWT,CAAA,CAAwB,CAAA,EAEtD,EAGDL,GACCA,EAAM,OAAS,GACfA,EAAM,IAAI,CAACe,EAAMC,IACfR,EAAAA,KAACS,EAAAA,KAAA,CAEC,OAAQF,EAAK,OACb,KAAMA,EAAK,KACX,MAAOA,EAAK,MACZ,YAAaA,EAAK,YAClB,WAAYA,EAAK,WACjB,kBAAmBA,EAAK,kBACxB,iBAAkBA,EAAK,iBACvB,aAAcA,EAAK,aACnB,OAAQA,EAAK,OACb,iBAAkBA,EAAK,iBACvB,gBAAiBA,EAAK,gBACtB,SAAUA,EAAK,SACf,WAAYA,EAAK,WACjB,YAAaA,EAAK,YAClB,YAAaA,EAAK,YAEjB,SAAA,CAAA,CAACA,EAAK,WAAaH,MAACM,EAAAA,MAAA,CAAA,CAAM,SAC1BC,EAAAA,OAAA,CACC,SAAA,CAAAP,EAAAA,IAACQ,EAAAA,MAAA,CAAO,WAAK,KAAA,CAAM,EAClB,CAACL,EAAK,WAAaH,EAAAA,IAACS,EAAAA,MAAA,CAAA,CAAM,CAAA,EAC7B,EACCN,EAAK,aACJH,MAACU,EAAAA,YAAA,CAAa,WAAK,YAAY,EAEhCP,EAAK,SAAWH,EAAAA,IAAC,OAAI,UAAU,OAAQ,WAAK,QAAQ,EACpD,CAACG,EAAK,YACLP,EAAAA,KAACe,EAAAA,OAAA,CACC,SAAA,CAAAf,EAAAA,KAAC,MAAA,CAAI,UAAU,0BACZ,SAAA,CAAA,CAACO,EAAK,iBAAmBH,MAACY,EAAAA,YAAA,CAAA,CAAY,EACtC,CAACT,EAAK,UACLC,IAAU,IACTV,GAAc,KACbM,EAAAA,IAACa,EAAAA,KAAA,CAAM,SAAAnB,EAAa,IAAA,CAAK,QAExBmB,EAAAA,KAAA,EAAK,EAAA,EAEZ,EACAjB,EAAAA,KAAC,MAAA,CAAI,UAAU,0BACZ,SAAA,CAAAQ,EAAQ,IACNV,GAAc,KACbM,EAAAA,IAACc,EAAAA,MAAM,SAAApB,EAAa,IAAA,CAAK,EAEzBM,EAAAA,IAACc,EAAAA,KAAA,CAAA,CAAK,GAETpB,GAAc,KACbU,IAAUhB,EAAM,OAAS,GAAKM,GAAc,OAC1CM,MAACe,EAAAA,MAAM,SAAArB,EAAa,OAAO,EAE3BM,MAACe,EAAAA,KAAA,CAAM,WAAa,IAAA,CAAK,QAG1BA,EAAAA,KAAA,CAAA,CAAK,CAAA,CAAA,CAEV,CAAA,CAAA,CACF,CAAA,CAAA,EAvDGX,CAAA,CA0DR,CAAA,EACL,EAECf,CAAA,EACH,CAEJ"}
1
+ {"version":3,"file":"TourWrapper.cjs","sources":["../../../../src/components/Tour/TourWrapper.tsx"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport {\n Root,\n Portal,\n Step,\n Arrow,\n Header,\n Title,\n Description,\n Close,\n Footer,\n Prev,\n Next,\n Skip,\n StepCounter,\n Spotlight,\n SpotlightRing,\n} from \"./Tour\";\nimport type { TourProps } from \"./Tour\";\n\ninterface TourStep {\n target: string | React.RefObject<HTMLElement> | HTMLElement;\n title: string;\n description?: string;\n side?: \"top\" | \"right\" | \"bottom\" | \"left\";\n align?: \"start\" | \"center\" | \"end\";\n alignOffset?: number;\n sideOffset?: number;\n collisionBoundary?: Element | null | Array<Element | null>;\n collisionPadding?:\n | number\n | Partial<Record<\"top\" | \"right\" | \"bottom\" | \"left\", number>>;\n arrowPadding?: number;\n sticky?: \"partial\" | \"always\";\n hideWhenDetached?: boolean;\n avoidCollisions?: boolean;\n required?: boolean;\n forceMount?: boolean;\n hideArrow?: boolean;\n hideClose?: boolean;\n hideFooter?: boolean;\n hideSkip?: boolean;\n hideStepCounter?: boolean;\n content?: React.ReactNode;\n onStepEnter?: () => void;\n onStepLeave?: () => void;\n}\n\ninterface ButtonConfig {\n skip?: string;\n prev?: string;\n next?: string;\n finish?: string;\n}\n\ninterface TourWrapperProps extends Omit<TourProps, \"children\"> {\n steps?: TourStep[];\n children?: React.ReactNode;\n showSpotlight?: boolean;\n showSpotlightRing?: boolean;\n spotlightClassName?: string;\n spotlightRingClassName?: string;\n buttonConfig?: ButtonConfig;\n}\n\nfunction TourWrapper({\n steps,\n children,\n showSpotlight = true,\n showSpotlightRing = true,\n spotlightClassName,\n spotlightRingClassName,\n buttonConfig,\n ...props\n}: TourWrapperProps) {\n return (\n <Root {...props}>\n <Portal>\n {showSpotlight && (\n <>\n <Spotlight className={spotlightClassName} />\n {showSpotlightRing && (\n <SpotlightRing className={spotlightRingClassName} />\n )}\n </>\n )}\n\n {steps &&\n steps.length > 0 &&\n steps.map((step, index) => (\n <Step\n key={index}\n target={step.target}\n side={step.side}\n align={step.align}\n alignOffset={step.alignOffset}\n sideOffset={step.sideOffset}\n collisionBoundary={step.collisionBoundary}\n collisionPadding={step.collisionPadding}\n arrowPadding={step.arrowPadding}\n sticky={step.sticky}\n hideWhenDetached={step.hideWhenDetached}\n avoidCollisions={step.avoidCollisions}\n required={step.required}\n forceMount={step.forceMount}\n onStepEnter={step.onStepEnter}\n onStepLeave={step.onStepLeave}\n >\n {!step.hideArrow && <Arrow />}\n <Header>\n <Title>{step.title}</Title>\n {!step.hideClose && <Close />}\n </Header>\n {step.description && (\n <Description>{step.description}</Description>\n )}\n {step.content && <div className=\"ds:py-2\">{step.content}</div>}\n {!step.hideFooter && (\n <Footer>\n <div className=\"ds:flex ds:items-center ds:gap-2\">\n {!step.hideStepCounter && <StepCounter />}\n {!step.hideSkip &&\n index === 0 &&\n (buttonConfig?.skip ? (\n <Skip>{buttonConfig.skip}</Skip>\n ) : (\n <Skip />\n ))}\n </div>\n <div className=\"ds:flex ds:items-center ds:gap-2\">\n {index > 0 &&\n (buttonConfig?.prev ? (\n <Prev>{buttonConfig.prev}</Prev>\n ) : (\n <Prev />\n ))}\n {buttonConfig?.next ? (\n index === steps.length - 1 && buttonConfig?.finish ? (\n <Next>{buttonConfig.finish}</Next>\n ) : (\n <Next>{buttonConfig.next}</Next>\n )\n ) : (\n <Next />\n )}\n </div>\n </Footer>\n )}\n </Step>\n ))}\n </Portal>\n\n {children}\n </Root>\n );\n}\n\nexport { TourWrapper };\nexport type { TourWrapperProps, TourStep, ButtonConfig };\n"],"names":["TourWrapper","steps","children","showSpotlight","showSpotlightRing","spotlightClassName","spotlightRingClassName","buttonConfig","props","jsxs","Root","Portal","Fragment","jsx","Spotlight","SpotlightRing","step","index","Step","Arrow","Header","Title","Close","Description","Footer","StepCounter","Skip","Prev","Next"],"mappings":"oKAmEA,SAASA,EAAY,CACnB,MAAAC,EACA,SAAAC,EACA,cAAAC,EAAgB,GAChB,kBAAAC,EAAoB,GACpB,mBAAAC,EACA,uBAAAC,EACA,aAAAC,EACA,GAAGC,CACL,EAAqB,CACnB,OACEC,EAAAA,KAACC,EAAAA,KAAA,CAAM,GAAGF,EACR,SAAA,CAAAC,OAACE,EAAAA,OAAA,CACE,SAAA,CAAAR,GACCM,EAAAA,KAAAG,WAAA,CACE,SAAA,CAAAC,EAAAA,IAACC,EAAAA,UAAA,CAAU,UAAWT,CAAA,CAAoB,EACzCD,GACCS,EAAAA,IAACE,EAAAA,cAAA,CAAc,UAAWT,CAAA,CAAwB,CAAA,EAEtD,EAGDL,GACCA,EAAM,OAAS,GACfA,EAAM,IAAI,CAACe,EAAMC,IACfR,EAAAA,KAACS,EAAAA,KAAA,CAEC,OAAQF,EAAK,OACb,KAAMA,EAAK,KACX,MAAOA,EAAK,MACZ,YAAaA,EAAK,YAClB,WAAYA,EAAK,WACjB,kBAAmBA,EAAK,kBACxB,iBAAkBA,EAAK,iBACvB,aAAcA,EAAK,aACnB,OAAQA,EAAK,OACb,iBAAkBA,EAAK,iBACvB,gBAAiBA,EAAK,gBACtB,SAAUA,EAAK,SACf,WAAYA,EAAK,WACjB,YAAaA,EAAK,YAClB,YAAaA,EAAK,YAEjB,SAAA,CAAA,CAACA,EAAK,WAAaH,MAACM,EAAAA,MAAA,CAAA,CAAM,SAC1BC,EAAAA,OAAA,CACC,SAAA,CAAAP,EAAAA,IAACQ,EAAAA,MAAA,CAAO,WAAK,KAAA,CAAM,EAClB,CAACL,EAAK,WAAaH,EAAAA,IAACS,EAAAA,MAAA,CAAA,CAAM,CAAA,EAC7B,EACCN,EAAK,aACJH,MAACU,EAAAA,YAAA,CAAa,WAAK,YAAY,EAEhCP,EAAK,SAAWH,EAAAA,IAAC,OAAI,UAAU,UAAW,WAAK,QAAQ,EACvD,CAACG,EAAK,YACLP,EAAAA,KAACe,EAAAA,OAAA,CACC,SAAA,CAAAf,EAAAA,KAAC,MAAA,CAAI,UAAU,mCACZ,SAAA,CAAA,CAACO,EAAK,iBAAmBH,MAACY,EAAAA,YAAA,CAAA,CAAY,EACtC,CAACT,EAAK,UACLC,IAAU,IACTV,GAAc,KACbM,EAAAA,IAACa,EAAAA,KAAA,CAAM,SAAAnB,EAAa,IAAA,CAAK,QAExBmB,EAAAA,KAAA,EAAK,EAAA,EAEZ,EACAjB,EAAAA,KAAC,MAAA,CAAI,UAAU,mCACZ,SAAA,CAAAQ,EAAQ,IACNV,GAAc,KACbM,EAAAA,IAACc,EAAAA,MAAM,SAAApB,EAAa,IAAA,CAAK,EAEzBM,EAAAA,IAACc,EAAAA,KAAA,CAAA,CAAK,GAETpB,GAAc,KACbU,IAAUhB,EAAM,OAAS,GAAKM,GAAc,OAC1CM,MAACe,EAAAA,MAAM,SAAArB,EAAa,OAAO,EAE3BM,MAACe,EAAAA,KAAA,CAAM,WAAa,IAAA,CAAK,QAG1BA,EAAAA,KAAA,CAAA,CAAK,CAAA,CAAA,CAEV,CAAA,CAAA,CACF,CAAA,CAAA,EAvDGX,CAAA,CA0DR,CAAA,EACL,EAECf,CAAA,EACH,CAEJ"}
@@ -1,4 +1,4 @@
1
- "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("react/jsx-runtime"),z=require("react"),Ue=require("class-variance-authority"),C=require("../../packages/ui/src/lib/utils.cjs"),i=require("lucide-react"),P=require("../Toast/Toast.cjs"),Re=require("../Dialog/Dialog.cjs"),$e=Ue.cva("relative flex justify-center items-center rounded-lg transition-all duration-200 cursor-pointer select-none",{variants:{variant:{outline:"border border-foreground/10 bg-background text-foreground",primaryOutline:"border border-primary bg-background text-primary",icon:"border border-primary text-primary bg-background rounded-xl p-2",avatar:"border-2 border-dashed border-foreground/20 bg-background !w-full !h-full flex-col text-center hover:border-foreground/40 !p-1",avatarCircle:"border-2 border-dashed border-foreground/20 bg-background !w-full !h-full rounded-full flex-col text-center hover:border-foreground/40 !p-1",dropzone:"border border-foreground/10 bg-background flex-col text-center py-10",primaryDropzone:"border border-primary bg-primary/10 flex-col text-center py-10",secondaryDropzone:"border border-foreground/10 bg-foreground/10 flex-col text-center py-10"},size:{small:"h-8 p-[6px] text-sm",medium:"h-10 p-2 text-base",large:"h-12 p-3 text-base"},status:{idle:"",dragover:"border-primary bg-primary/5 scale-[1.02]",disabled:"opacity-50 cursor-not-allowed"}},defaultVariants:{variant:"outline",size:"medium",status:"idle"}}),A=t=>{const o=t.type||"",m=t.name.toLowerCase();return o.startsWith("image/")?e.jsx(i.Image,{className:"h-4 w-4"}):o.startsWith("video/")?e.jsx(i.Film,{className:"h-4 w-4"}):o.startsWith("audio/")?e.jsx(i.Music,{className:"h-4 w-4"}):m.endsWith(".zip")||m.endsWith(".rar")||m.endsWith(".7z")?e.jsx(i.Archive,{className:"h-4 w-4"}):m.endsWith(".js")||m.endsWith(".ts")||m.endsWith(".jsx")||m.endsWith(".tsx")||m.endsWith(".css")||m.endsWith(".html")?e.jsx(i.FileCode,{className:"h-4 w-4"}):m.endsWith(".txt")||m.endsWith(".md")?e.jsx(i.FileText,{className:"h-4 w-4"}):e.jsx(i.File,{className:"h-4 w-4"})},J=t=>{if(t===0)return"0 Bytes";const o=1024,m=["Bytes","KB","MB","GB"],w=Math.floor(Math.log(t)/Math.log(o));return Math.round(t/Math.pow(o,w)*100)/100+" "+m[w]},ae=()=>`upload-${Date.now()}-${Math.random().toString(36).substring(2,9)}`,le=z.forwardRef(({className:t,variant:o,accept:m,multiple:w=!1,disabled:j=!1,fileList:U,defaultFileList:$=[],action:v,customRequest:N,beforeUpload:L,onChange:c,onRemove:X,onPreview:K,onDownload:Q,maxCount:E,maxSize:R,listType:ie="text",showUploadList:T=!0,pictureCardSize:ce,pictureCardCols:de=3,iconOnly:H=!1,showBorder:ue=!0,uploadText:pe="Click to upload",uploadDescription:Z,uploadIcon:ee,size:M="medium",children:me,headers:I,withCredentials:_,directory:W=!1,...he},ge)=>{const S=z.useRef(null),[xe,be]=z.useState($),[fe,G]=z.useState(!1),[ye,te]=z.useState(!1),[we,ve]=z.useState(""),[re,je]=z.useState(""),x=U??xe,V=U?void 0:be,Ne=["dropzone","primaryDropzone","secondaryDropzone"].includes(o||""),F=W||Ne&&x.length>0?"text":ie,se=z.useRef(x);se.current=x;const O=E?x.length<E:W||w?!0:x.length===0,b=z.useCallback((s,n)=>{const a=s(se.current);V&&V(s),c&&c({file:n||{},fileList:a})},[V,c]),ke=z.useCallback(s=>{const n=s.type.startsWith("image/")?URL.createObjectURL(s):void 0,a={uid:ae(),name:s.name,size:s.size,type:s.type,status:"uploading",percent:0,originFileObj:s,url:n,thumbUrl:n};if(b(h=>[...h,a],a),N)N({file:s,onProgress:h=>{const u={...a,percent:h};b(r=>r.map(l=>l.uid===a.uid?u:l),u)},onSuccess:h=>{const u={...a,status:"done",percent:100,response:h};b(r=>r.map(l=>l.uid===a.uid?u:l),u)},onError:h=>{const u={...a,status:"error",error:h};b(r=>r.map(l=>l.uid===a.uid?u:l),u)}});else if(v){const h=typeof v=="function"?v(s):v,u=new FormData;u.append("file",s);const r=new XMLHttpRequest;r.upload.addEventListener("progress",l=>{if(l.lengthComputable){const y=Math.round(l.loaded/l.total*100),g={...a,percent:y};b(f=>f.map(p=>p.uid===a.uid?g:p),g)}}),r.addEventListener("load",()=>{if(r.status>=200&&r.status<300){const l=JSON.parse(r.responseText),y={...a,status:"done",percent:100,response:l,url:l.url||l.data?.url};b(g=>g.map(f=>f.uid===a.uid?y:f),y)}else{const l={...a,status:"error",error:new Error(`Upload failed with status ${r.status}`)};b(y=>y.map(g=>g.uid===a.uid?l:g),l)}}),r.addEventListener("error",()=>{const l={...a,status:"error",error:new Error("Network error")};b(y=>y.map(g=>g.uid===a.uid?l:g),l)}),r.open("POST",h),I&&Object.entries(I).forEach(([l,y])=>{r.setRequestHeader(l,y)}),_&&(r.withCredentials=!0),r.send(u)}else setTimeout(()=>{const h={...a,status:"done",percent:100};b(u=>u.map(r=>r.uid===a.uid?h:r),h)},100)},[v,N,b,I,_]),De=async s=>{const n=Array.from(s.target.files||[]);if(console.log("=== handleFileChange DEBUG ==="),console.log("Files from browser:",n.length),console.log("Directory mode:",W),console.log("Multiple mode:",w),console.log("Current fileList length:",x.length),console.log("File names:",n.map(r=>r.name)),n.length===0)return;if(!W&&!w&&x.length>0){P.toast.error("You can only upload one file. Please remove the existing file first.");return}if(E&&x.length+n.length>E){P.toast.error(`You can only upload up to ${E} file(s)`);return}let a=0;const h=[];for(const r of n){if(console.log(`
2
- 📁 Processing: ${r.name}`),R&&r.size>R){console.log(`❌ REJECTED: File size ${r.size} exceeds maxSize ${R}`),P.toast.error(`${r.name} exceeds maximum size of ${J(R)}`);continue}if(L){if(console.log(`🔍 Calling beforeUpload for ${r.name}...`),await L(r,n)===!1){console.log(`❌ REJECTED by beforeUpload: ${r.name}`);continue}console.log(`✅ beforeUpload passed for ${r.name}`)}console.log(`✅ Valid file: ${r.name}`),h.push(r),a++}console.log(`
3
- 📊 Summary: ${a} / ${n.length} files will be uploaded`);const u=h.map(r=>{const l=r.type.startsWith("image/")?URL.createObjectURL(r):void 0;return{uid:ae(),name:r.name,size:r.size,type:r.type,status:"uploading",percent:0,originFileObj:r,url:l,thumbUrl:l}});b(r=>[...r,...u]),u.forEach((r,l)=>{const y=h[l];if(N)N({file:y,onProgress:g=>{const f={...r,percent:g};b(p=>p.map(d=>d.uid===r.uid?f:d),f)},onSuccess:g=>{const f={...r,status:"done",percent:100,response:g};b(p=>p.map(d=>d.uid===r.uid?f:d),f)},onError:g=>{const f={...r,status:"error",error:g};b(p=>p.map(d=>d.uid===r.uid?f:d),f)}});else if(v){const g=typeof v=="function"?v(y):v,f=new FormData;f.append("file",y);const p=new XMLHttpRequest;p.upload.addEventListener("progress",d=>{if(d.lengthComputable){const k=Math.round(d.loaded/d.total*100),D={...r,percent:k};b(q=>q.map(ne=>ne.uid===r.uid?D:ne),D)}}),p.addEventListener("load",()=>{if(p.status>=200&&p.status<300){const d=JSON.parse(p.responseText),k={...r,status:"done",percent:100,response:d,url:d.url||d.data?.url};b(D=>D.map(q=>q.uid===r.uid?k:q),k)}else{const d={...r,status:"error",error:new Error(`Upload failed with status ${p.status}`)};b(k=>k.map(D=>D.uid===r.uid?d:D),d)}}),p.addEventListener("error",()=>{const d={...r,status:"error",error:new Error("Network error")};b(k=>k.map(D=>D.uid===r.uid?d:D),d)}),p.open("POST",g),I&&Object.entries(I).forEach(([d,k])=>{p.setRequestHeader(d,k)}),_&&(p.withCredentials=!0),p.send(f)}else console.log(`⏱️ Mock upload starting for ${y.name} (delay: ${100+l*50}ms)`),setTimeout(()=>{console.log(`✅ Mock upload complete for ${y.name}`);const g={...r,status:"done",percent:100};b(f=>(console.log(`📝 Updating status for ${y.name}, current list:`,f.length),f.map(p=>p.uid===r.uid?g:p)),g)},100+l*50)}),S.current&&(S.current.value="")},oe=async s=>{X&&await X(s)===!1||(b(n=>n.filter(a=>a.uid!==s.uid),{...s,status:"removed"}),s.url&&s.url.startsWith("blob:")&&URL.revokeObjectURL(s.url))},ze=s=>{s.preventDefault(),s.stopPropagation(),!j&&O&&G(!0)},Ce=s=>{s.preventDefault(),s.stopPropagation(),G(!1)},Le=async s=>{if(s.preventDefault(),s.stopPropagation(),G(!1),j||!O)return;let n=Array.from(s.dataTransfer.files);if(n.length!==0){if(!w&&x.length>0){P.toast.error("You can only upload one file. Please remove the existing file first.");return}if(!w&&n.length>1&&(P.toast.error("You can only upload one file at a time"),n=[n[0]]),E&&x.length+n.length>E){P.toast.error(`You can only upload up to ${E} file(s)`);return}for(const a of n)if(!(m&&!a.type.match(new RegExp(m.replace(/,/g,"|"))))){if(R&&a.size>R){P.toast.error(`${a.name} exceeds maximum size of ${J(R)}`);continue}L&&await L(a,n)===!1||ke(a)}}},Pe=()=>{!j&&O&&S.current?.click()},Ee=s=>{K?K(s):(s.url||s.thumbUrl)&&(ve(s.url||s.thumbUrl||""),je(s.name),te(!0))},Fe=async s=>{if(Q)Q(s);else if(s.url){if(s.status==="uploading"){P.toast.error("Please wait until the file finishes uploading");return}if(s.status==="error"){P.toast.error("Cannot download file with error status");return}try{const a=await(await fetch(s.url)).blob(),h=URL.createObjectURL(a),u=document.createElement("a");u.href=h,u.download=s.name,u.style.display="none",document.body.appendChild(u),u.click(),document.body.removeChild(u),setTimeout(()=>URL.revokeObjectURL(h),100)}catch{const n=document.createElement("a");n.href=s.url,n.download=s.name,n.target="_blank",n.rel="noopener noreferrer",n.style.display="none",document.body.appendChild(n),n.click(),document.body.removeChild(n)}}},Y=typeof T=="boolean"?{showPreviewIcon:!0,showRemoveIcon:!0,showDownloadIcon:!0}:{showPreviewIcon:T.showPreviewIcon??!0,showRemoveIcon:T.showRemoveIcon??!0,showDownloadIcon:T.showDownloadIcon??!0};return e.jsxs(e.Fragment,{children:[e.jsxs("div",{ref:ge,className:C.cn(t),...he,children:[e.jsxs("div",{className:C.cn($e({variant:o,status:j||!O?"disabled":fe?"dragover":"idle",size:["dropzone","primaryDropzone","secondaryDropzone"].includes(o)?void 0:M}),["dropzone","primaryDropzone","secondaryDropzone"].includes(o)&&"min-h-[180px] min-w-[300px]",!ue&&"border-0",!H&&o!=="avatar"&&o!=="avatarCircle"&&"px-4",(o==="avatar"||o==="avatarCircle")&&x.length>0&&x[0].url&&"opacity-100!"),onDragOver:ze,onDragLeave:Ce,onDrop:Le,onClick:Pe,children:[e.jsx("input",{ref:S,type:"file",accept:m,multiple:w,disabled:j,onChange:De,className:"hidden",...W?{webkitdirectory:"",directory:""}:{}}),o==="avatar"||o==="avatarCircle"?e.jsx(e.Fragment,{children:x.length>0&&x[0].url&&!j?e.jsxs("div",{className:"relative w-full h-full group",children:[e.jsx("img",{draggable:!1,src:x[0].url||x[0].thumbUrl,alt:x[0].name,className:C.cn("w-full h-full object-cover",o==="avatarCircle"&&"rounded-full",o==="avatar"&&"rounded-lg")}),e.jsx("div",{className:C.cn("absolute inset-0 bg-black/50 opacity-0 group-hover:opacity-100 transition-opacity flex items-center justify-center",o==="avatarCircle"&&"rounded-full",o==="avatar"&&"rounded-lg"),onClick:s=>{s.stopPropagation(),oe(x[0])},children:e.jsx(i.Trash2,{className:"h-6 w-6 text-white cursor-pointer hover:scale-110 transition-transform"})})]}):me}):e.jsxs("div",{className:C.cn("flex items-center justify-center gap-2",["secondaryDropzone","dropzone","primaryDropzone"].includes(o)&&"flex-col"),children:[ee?e.jsx("div",{className:C.cn(["dropzone","primaryDropzone","secondaryDropzone"].includes(o)?"h-10 w-10":M==="small"?"h-5 w-5":"h-6 w-6",o==="outline"&&"text-gray-500",["primaryDropzone","secondaryDropzone","primaryOutline"].includes(o)&&"text-primary"),children:ee}):e.jsx(e.Fragment,{children:H?e.jsx(i.Upload,{className:C.cn(["dropzone","primaryDropzone","secondaryDropzone"].includes(o)?"h-10 w-10":M==="small"?"h-5 w-5":"h-6 w-6",o==="outline"&&"text-gray-500",["secondaryDropzone","primaryDropzone","primaryOutline"].includes(o)&&"text-primary")}):e.jsx(i.CloudUploadIcon,{className:C.cn(["dropzone","primaryDropzone","secondaryDropzone"].includes(o)?"h-10 w-10":M==="small"?"h-5 w-5":"h-6 w-6",o==="outline"&&"text-gray-500",["primaryDropzone","secondaryDropzone","primaryOutline"].includes(o)&&"text-primary")})}),!H&&e.jsxs(e.Fragment,{children:[e.jsx("span",{className:"font-medium whitespace-nowrap text-sm",children:pe}),Z&&["dropzone","primaryDropzone","secondaryDropzone"].includes(o)&&e.jsx("span",{className:"text-xs text-gray-500",children:Z})]})]})]}),T&&x.length>0&&e.jsx("div",{className:C.cn("mt-4",(F==="picture-card"||F==="picture-circle")&&"grid gap-2",F==="picture"&&"space-y-2"),style:{gridTemplateColumns:F==="picture-card"||F==="picture-circle"?`repeat(${de}, 1fr)`:void 0,minWidth:F==="picture-card"||F==="picture-circle"?"100px":void 0},children:x.filter(s=>s.response!==B.LIST_IGNORE).map(s=>e.jsx(Te,{file:s,listType:F,onRemove:()=>oe(s),onPreview:Ee,onDownload:Fe,showPreviewIcon:Y.showPreviewIcon,showRemoveIcon:Y.showRemoveIcon,showDownloadIcon:Y.showDownloadIcon,pictureCardSize:ce},s.uid))})]}),e.jsx(Re.default,{open:ye,onOpenChange:te,title:re,size:"lg",children:e.jsx("img",{src:we,alt:re,className:"w-full h-auto max-h-[70vh] object-contain"})})]})});le.displayName="Upload";const B=le;B.LIST_IGNORE="LIST_IGNORE";const Te=({file:t,listType:o,onRemove:m,onPreview:w,onDownload:j,showPreviewIcon:U,showRemoveIcon:$,showDownloadIcon:v})=>{const N=t.type?.startsWith("image/"),L=N||t.url;return o==="picture-card"?e.jsxs("div",{className:"relative aspect-square rounded-lg border bg-muted/50 overflow-hidden group",style:{width:"100px",height:"100px",minWidth:"100px",minHeight:"100px",padding:"4px"},children:[t.url&&N?e.jsx("img",{src:t.thumbUrl||t.url,alt:t.name,className:"h-full w-full object-cover rounded-lg"}):e.jsx("div",{className:"flex items-center justify-center h-full",children:A(t)}),t.status==="uploading"&&e.jsx("div",{className:"absolute inset-0 bg-background/80 flex items-center justify-center",children:e.jsxs("div",{className:"w-full px-4",children:[e.jsxs("div",{className:"flex items-center gap-2 mb-2",children:[e.jsx(i.Loader2,{className:"h-4 w-4 animate-spin"}),e.jsxs("span",{className:"text-xs",children:[t.percent,"%"]})]}),e.jsx("div",{className:"h-1 bg-muted rounded-full overflow-hidden",children:e.jsx("div",{className:"h-full bg-primary transition-all duration-300",style:{width:`${t.percent}%`}})})]})}),t.status==="done"&&e.jsx("div",{className:"absolute top-2 right-2 bg-green-500 rounded-full p-1",children:e.jsx(i.CheckCircle2,{className:"h-4 w-4 text-white"})}),t.status==="error"&&e.jsx("div",{className:"absolute top-2 right-2 bg-red-500 rounded-full p-1",children:e.jsx(i.AlertCircle,{className:"h-4 w-4 text-white"})}),e.jsxs("div",{className:"absolute inset-0 bg-black/60 opacity-0 group-hover:opacity-100 transition-opacity flex items-center justify-center gap-2",children:[U&&L&&e.jsx("button",{onClick:c=>{c.stopPropagation(),w?.(t)},className:"p-1 rounded-full bg-background/20 hover:bg-background/30 transition-colors",title:"Preview",children:e.jsx(i.Eye,{className:"h-4 w-4 text-white"})}),v&&t.url&&e.jsx("button",{onClick:c=>{c.stopPropagation(),j?.(t)},className:"p-1 rounded-full bg-background/20 hover:bg-background/30 transition-colors",title:"Download",children:e.jsx(i.Download,{className:"h-4 w-4 text-white"})}),$&&e.jsx("button",{onClick:c=>{c.stopPropagation(),m()},className:"p-1 rounded-full bg-background/20 hover:bg-background/30 transition-colors",title:"Remove",children:e.jsx(i.Trash2,{className:"h-4 w-4 text-white"})})]}),e.jsx("div",{className:"absolute bottom-0 left-0 right-0 bg-black/60 p-2 text-white text-xs truncate opacity-0 group-hover:opacity-100 transition-opacity",children:t.name})]}):o==="picture-circle"?e.jsxs("div",{className:C.cn("relative aspect-square rounded-full border bg-muted/50 overflow-hidden group",t.status==="done"&&"border-2 border-green-500",t.status==="error"&&"border-2 border-red-500"),style:{width:"100px",height:"100px",minWidth:"100px",minHeight:"100px",padding:"4px"},children:[t.url&&N?e.jsx("img",{src:t.thumbUrl||t.url,alt:t.name,className:"h-full w-full object-cover rounded-full"}):e.jsx("div",{className:"flex items-center justify-center h-full rounded-full bg-muted",children:A(t)}),t.status==="uploading"&&e.jsx("div",{className:"absolute inset-0 bg-background/80 flex items-center justify-center rounded-full",children:e.jsxs("div",{className:"w-full px-4",children:[e.jsxs("div",{className:"flex items-center gap-2 mb-2 justify-center",children:[e.jsx(i.Loader2,{className:"h-4 w-4 animate-spin"}),e.jsxs("span",{className:"text-xs",children:[t.percent,"%"]})]}),e.jsx("div",{className:"h-1 bg-muted rounded-full overflow-hidden",children:e.jsx("div",{className:"h-full bg-primary transition-all duration-300",style:{width:`${t.percent}%`}})})]})}),e.jsxs("div",{className:"absolute inset-0 bg-black/60 opacity-0 group-hover:opacity-100 transition-opacity flex items-center justify-center gap-2 rounded-full",children:[U&&L&&e.jsx("button",{onClick:c=>{c.stopPropagation(),w?.(t)},className:"p-1 rounded-full bg-background/20 hover:bg-background/30 transition-colors",title:"Preview",children:e.jsx(i.Eye,{className:"h-4 w-4 text-white"})}),v&&t.url&&e.jsx("button",{onClick:c=>{c.stopPropagation(),j?.(t)},className:"p-1 rounded-full bg-background/20 hover:bg-background/30 transition-colors",title:"Download",children:e.jsx(i.Download,{className:"h-4 w-4 text-white"})}),$&&e.jsx("button",{onClick:c=>{c.stopPropagation(),m()},className:"p-1 rounded-full bg-background/20 hover:bg-background/30 transition-colors",title:"Remove",children:e.jsx(i.Trash2,{className:"h-4 w-4 text-white"})}),e.jsx("div",{className:"absolute bottom-0 left-0 right-0 bg-black/60 p-2 text-white text-xs truncate opacity-0 group-hover:opacity-100 transition-opacity",children:t.name})]})]}):o==="picture"?e.jsxs("div",{className:"flex items-center gap-3 p-2 rounded-lg border bg-background hover:bg-muted/50 transition-colors group",children:[e.jsx("div",{className:"shrink-0 h-10 w-10 rounded overflow-hidden bg-muted flex items-center justify-center",children:t.url&&N?e.jsx("img",{src:t.thumbUrl||t.url,alt:t.name,className:"h-full w-full object-cover"}):A(t)}),e.jsxs("div",{className:"flex-1 min-w-0",children:[e.jsx("p",{className:"text-sm font-medium truncate",children:t.name}),e.jsxs("div",{className:"flex items-center gap-2 mt-1",children:[t.size&&e.jsx("span",{className:"text-xs text-muted-foreground",children:J(t.size)}),t.status==="uploading"&&e.jsxs("span",{className:"text-xs text-primary",children:[t.percent,"%"]}),t.status==="done"&&e.jsx(i.CheckCircle2,{className:"h-4 w-4 text-green-500"}),t.status==="error"&&e.jsx(i.AlertCircle,{className:"h-4 w-4 text-red-500"})]}),t.status==="uploading"&&e.jsx("div",{className:"h-1 bg-muted rounded-full overflow-hidden mt-2",children:e.jsx("div",{className:"h-full bg-primary transition-all duration-300",style:{width:`${t.percent}%`}})})]}),e.jsxs("div",{className:"flex items-center gap-1 opacity-0 group-hover:opacity-100 transition-opacity",children:[U&&L&&e.jsx("button",{onClick:c=>{c.stopPropagation(),w?.(t)},className:"p-1.5 rounded hover:bg-muted transition-colors",title:"Preview",children:e.jsx(i.Eye,{className:"h-4 w-4"})}),v&&t.url&&e.jsx("button",{onClick:c=>{c.stopPropagation(),j?.(t)},className:"p-1.5 rounded hover:bg-muted transition-colors",title:"Download",children:e.jsx(i.Download,{className:"h-4 w-4"})}),$&&e.jsx("button",{onClick:c=>{c.stopPropagation(),m()},className:"p-1.5 rounded hover:bg-destructive/10 transition-colors text-destructive",title:"Remove",children:e.jsx(i.X,{className:"h-4 w-4"})})]})]}):e.jsxs("div",{className:"flex items-center gap-2 p-2 rounded hover:bg-muted/50 transition-colors group",children:[e.jsx("div",{className:"shrink-0",children:A(t)}),e.jsxs("div",{className:"flex-1 min-w-0",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("p",{className:"text-sm truncate",children:t.name}),t.status==="done"&&e.jsx(i.CheckCircle2,{className:"h-4 w-4 text-green-500 shrink-0"}),t.status==="error"&&e.jsx(i.AlertCircle,{className:"h-4 w-4 text-red-500 shrink-0"}),t.status==="uploading"&&e.jsx(i.Loader2,{className:"h-4 w-4 animate-spin shrink-0"})]}),t.status==="uploading"&&e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("div",{className:"flex-1 h-1 bg-muted rounded-full overflow-hidden",children:e.jsx("div",{className:"h-full bg-primary transition-all duration-300",style:{width:`${t.percent}%`}})}),e.jsxs("span",{className:"text-xs text-muted-foreground",children:[t.percent,"%"]})]})]}),e.jsxs("div",{className:"flex items-center gap-1 opacity-0 group-hover:opacity-100 transition-opacity",children:[U&&L&&e.jsx("button",{onClick:c=>{c.stopPropagation(),w?.(t)},className:"p-1 rounded hover:bg-muted transition-colors",title:"Preview",children:e.jsx(i.Eye,{className:"h-4 w-4"})}),v&&t.url&&e.jsx("button",{onClick:c=>{c.stopPropagation(),j?.(t)},className:"p-1 rounded hover:bg-muted transition-colors",title:"Download",children:e.jsx(i.Download,{className:"h-4 w-4"})}),$&&e.jsx("button",{onClick:c=>{c.stopPropagation(),m()},className:"p-1 rounded hover:bg-destructive/10 transition-colors text-destructive",title:"Remove",children:e.jsx(i.Trash2,{className:"h-4 w-4"})})]})]})};exports.Upload=B;exports.default=B;
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const s=require("react/jsx-runtime"),z=require("react"),Us=require("class-variance-authority"),C=require("../../packages/ui/src/lib/utils.cjs"),l=require("lucide-react"),P=require("../Toast/Toast.cjs"),Rs=require("../Dialog/Dialog.cjs"),$s=Us.cva("ds:relative ds:flex ds:justify-center ds:items-center ds:rounded-lg ds:transition-all ds:duration-200 ds:cursor-pointer ds:select-none",{variants:{variant:{outline:"ds:border ds:border-foreground/10 ds:bg-background ds:text-foreground",primaryOutline:"ds:border ds:border-primary ds:bg-background ds:text-primary",icon:"ds:border ds:border-primary ds:text-primary ds:bg-background ds:rounded-xl ds:p-2",avatar:"ds:border-2 ds:border-dashed ds:border-foreground/20 ds:bg-background ds:!w-full ds:!h-full ds:flex-col ds:text-center ds:hover:border-foreground/40 ds:!p-1",avatarCircle:"ds:border-2 ds:border-dashed ds:border-foreground/20 ds:bg-background ds:!w-full ds:!h-full ds:rounded-full ds:flex-col ds:text-center ds:hover:border-foreground/40 ds:!p-1",dropzone:"ds:border ds:border-foreground/10 ds:bg-background ds:flex-col ds:text-center ds:py-10",primaryDropzone:"ds:border ds:border-primary ds:bg-primary/10 ds:flex-col ds:text-center ds:py-10",secondaryDropzone:"ds:border ds:border-foreground/10 ds:bg-foreground/10 ds:flex-col ds:text-center ds:py-10"},size:{small:"ds:h-8 ds:p-[6px] ds:text-sm",medium:"ds:h-10 ds:p-2 ds:text-base",large:"ds:h-12 ds:p-3 ds:text-base"},status:{idle:"",dragover:"ds:border-primary ds:bg-primary/5 ds:scale-[1.02]",disabled:"ds:opacity-50 ds:cursor-not-allowed"}},defaultVariants:{variant:"outline",size:"medium",status:"idle"}}),A=e=>{const r=e.type||"",m=e.name.toLowerCase();return r.startsWith("image/")?s.jsx(l.Image,{className:"ds:h-4 ds:w-4"}):r.startsWith("video/")?s.jsx(l.Film,{className:"ds:h-4 ds:w-4"}):r.startsWith("audio/")?s.jsx(l.Music,{className:"ds:h-4 ds:w-4"}):m.endsWith(".zip")||m.endsWith(".rar")||m.endsWith(".7z")?s.jsx(l.Archive,{className:"ds:h-4 ds:w-4"}):m.endsWith(".js")||m.endsWith(".ts")||m.endsWith(".jsx")||m.endsWith(".tsx")||m.endsWith(".css")||m.endsWith(".html")?s.jsx(l.FileCode,{className:"ds:h-4 ds:w-4"}):m.endsWith(".txt")||m.endsWith(".md")?s.jsx(l.FileText,{className:"ds:h-4 ds:w-4"}):s.jsx(l.File,{className:"ds:h-4 ds:w-4"})},J=e=>{if(e===0)return"0 Bytes";const r=1024,m=["Bytes","KB","MB","GB"],w=Math.floor(Math.log(e)/Math.log(r));return Math.round(e/Math.pow(r,w)*100)/100+" "+m[w]},ns=()=>`upload-${Date.now()}-${Math.random().toString(36).substring(2,9)}`,as=z.forwardRef(({className:e,variant:r,accept:m,multiple:w=!1,disabled:j=!1,fileList:U,defaultFileList:$=[],action:v,customRequest:N,beforeUpload:L,onChange:i,onRemove:X,onPreview:K,onDownload:Q,maxCount:E,maxSize:R,listType:ls="text",showUploadList:T=!0,pictureCardSize:is,pictureCardCols:cs=3,iconOnly:H=!1,showBorder:us=!0,uploadText:ps="Click to upload",uploadDescription:Z,uploadIcon:ss,size:M="medium",children:ms,headers:I,withCredentials:_,directory:W=!1,...hs},gs)=>{const S=z.useRef(null),[xs,bs]=z.useState($),[fs,G]=z.useState(!1),[ys,es]=z.useState(!1),[ws,vs]=z.useState(""),[ds,js]=z.useState(""),x=U??xs,V=U?void 0:bs,Ns=["dropzone","primaryDropzone","secondaryDropzone"].includes(r||""),F=W||Ns&&x.length>0?"text":ls,ts=z.useRef(x);ts.current=x;const O=E?x.length<E:W||w?!0:x.length===0,b=z.useCallback((t,o)=>{const n=t(ts.current);V&&V(t),i&&i({file:o||{},fileList:n})},[V,i]),ks=z.useCallback(t=>{const o=t.type.startsWith("image/")?URL.createObjectURL(t):void 0,n={uid:ns(),name:t.name,size:t.size,type:t.type,status:"uploading",percent:0,originFileObj:t,url:o,thumbUrl:o};if(b(h=>[...h,n],n),N)N({file:t,onProgress:h=>{const u={...n,percent:h};b(d=>d.map(a=>a.uid===n.uid?u:a),u)},onSuccess:h=>{const u={...n,status:"done",percent:100,response:h};b(d=>d.map(a=>a.uid===n.uid?u:a),u)},onError:h=>{const u={...n,status:"error",error:h};b(d=>d.map(a=>a.uid===n.uid?u:a),u)}});else if(v){const h=typeof v=="function"?v(t):v,u=new FormData;u.append("file",t);const d=new XMLHttpRequest;d.upload.addEventListener("progress",a=>{if(a.lengthComputable){const y=Math.round(a.loaded/a.total*100),g={...n,percent:y};b(f=>f.map(p=>p.uid===n.uid?g:p),g)}}),d.addEventListener("load",()=>{if(d.status>=200&&d.status<300){const a=JSON.parse(d.responseText),y={...n,status:"done",percent:100,response:a,url:a.url||a.data?.url};b(g=>g.map(f=>f.uid===n.uid?y:f),y)}else{const a={...n,status:"error",error:new Error(`Upload failed with status ${d.status}`)};b(y=>y.map(g=>g.uid===n.uid?a:g),a)}}),d.addEventListener("error",()=>{const a={...n,status:"error",error:new Error("Network error")};b(y=>y.map(g=>g.uid===n.uid?a:g),a)}),d.open("POST",h),I&&Object.entries(I).forEach(([a,y])=>{d.setRequestHeader(a,y)}),_&&(d.withCredentials=!0),d.send(u)}else setTimeout(()=>{const h={...n,status:"done",percent:100};b(u=>u.map(d=>d.uid===n.uid?h:d),h)},100)},[v,N,b,I,_]),Ds=async t=>{const o=Array.from(t.target.files||[]);if(console.log("=== handleFileChange DEBUG ==="),console.log("Files from browser:",o.length),console.log("Directory mode:",W),console.log("Multiple mode:",w),console.log("Current fileList length:",x.length),console.log("File names:",o.map(d=>d.name)),o.length===0)return;if(!W&&!w&&x.length>0){P.toast.error("You can only upload one file. Please remove the existing file first.");return}if(E&&x.length+o.length>E){P.toast.error(`You can only upload up to ${E} file(s)`);return}let n=0;const h=[];for(const d of o){if(console.log(`
2
+ 📁 Processing: ${d.name}`),R&&d.size>R){console.log(`❌ REJECTED: File size ${d.size} exceeds maxSize ${R}`),P.toast.error(`${d.name} exceeds maximum size of ${J(R)}`);continue}if(L){if(console.log(`🔍 Calling beforeUpload for ${d.name}...`),await L(d,o)===!1){console.log(`❌ REJECTED by beforeUpload: ${d.name}`);continue}console.log(`✅ beforeUpload passed for ${d.name}`)}console.log(`✅ Valid file: ${d.name}`),h.push(d),n++}console.log(`
3
+ 📊 Summary: ${n} / ${o.length} files will be uploaded`);const u=h.map(d=>{const a=d.type.startsWith("image/")?URL.createObjectURL(d):void 0;return{uid:ns(),name:d.name,size:d.size,type:d.type,status:"uploading",percent:0,originFileObj:d,url:a,thumbUrl:a}});b(d=>[...d,...u]),u.forEach((d,a)=>{const y=h[a];if(N)N({file:y,onProgress:g=>{const f={...d,percent:g};b(p=>p.map(c=>c.uid===d.uid?f:c),f)},onSuccess:g=>{const f={...d,status:"done",percent:100,response:g};b(p=>p.map(c=>c.uid===d.uid?f:c),f)},onError:g=>{const f={...d,status:"error",error:g};b(p=>p.map(c=>c.uid===d.uid?f:c),f)}});else if(v){const g=typeof v=="function"?v(y):v,f=new FormData;f.append("file",y);const p=new XMLHttpRequest;p.upload.addEventListener("progress",c=>{if(c.lengthComputable){const k=Math.round(c.loaded/c.total*100),D={...d,percent:k};b(q=>q.map(os=>os.uid===d.uid?D:os),D)}}),p.addEventListener("load",()=>{if(p.status>=200&&p.status<300){const c=JSON.parse(p.responseText),k={...d,status:"done",percent:100,response:c,url:c.url||c.data?.url};b(D=>D.map(q=>q.uid===d.uid?k:q),k)}else{const c={...d,status:"error",error:new Error(`Upload failed with status ${p.status}`)};b(k=>k.map(D=>D.uid===d.uid?c:D),c)}}),p.addEventListener("error",()=>{const c={...d,status:"error",error:new Error("Network error")};b(k=>k.map(D=>D.uid===d.uid?c:D),c)}),p.open("POST",g),I&&Object.entries(I).forEach(([c,k])=>{p.setRequestHeader(c,k)}),_&&(p.withCredentials=!0),p.send(f)}else console.log(`⏱️ Mock upload starting for ${y.name} (delay: ${100+a*50}ms)`),setTimeout(()=>{console.log(`✅ Mock upload complete for ${y.name}`);const g={...d,status:"done",percent:100};b(f=>(console.log(`📝 Updating status for ${y.name}, current list:`,f.length),f.map(p=>p.uid===d.uid?g:p)),g)},100+a*50)}),S.current&&(S.current.value="")},rs=async t=>{X&&await X(t)===!1||(b(o=>o.filter(n=>n.uid!==t.uid),{...t,status:"removed"}),t.url&&t.url.startsWith("blob:")&&URL.revokeObjectURL(t.url))},zs=t=>{t.preventDefault(),t.stopPropagation(),!j&&O&&G(!0)},Cs=t=>{t.preventDefault(),t.stopPropagation(),G(!1)},Ls=async t=>{if(t.preventDefault(),t.stopPropagation(),G(!1),j||!O)return;let o=Array.from(t.dataTransfer.files);if(o.length!==0){if(!w&&x.length>0){P.toast.error("You can only upload one file. Please remove the existing file first.");return}if(!w&&o.length>1&&(P.toast.error("You can only upload one file at a time"),o=[o[0]]),E&&x.length+o.length>E){P.toast.error(`You can only upload up to ${E} file(s)`);return}for(const n of o)if(!(m&&!n.type.match(new RegExp(m.replace(/,/g,"|"))))){if(R&&n.size>R){P.toast.error(`${n.name} exceeds maximum size of ${J(R)}`);continue}L&&await L(n,o)===!1||ks(n)}}},Ps=()=>{!j&&O&&S.current?.click()},Es=t=>{K?K(t):(t.url||t.thumbUrl)&&(vs(t.url||t.thumbUrl||""),js(t.name),es(!0))},Fs=async t=>{if(Q)Q(t);else if(t.url){if(t.status==="uploading"){P.toast.error("Please wait until the file finishes uploading");return}if(t.status==="error"){P.toast.error("Cannot download file with error status");return}try{const n=await(await fetch(t.url)).blob(),h=URL.createObjectURL(n),u=document.createElement("a");u.href=h,u.download=t.name,u.style.display="none",document.body.appendChild(u),u.click(),document.body.removeChild(u),setTimeout(()=>URL.revokeObjectURL(h),100)}catch{const o=document.createElement("a");o.href=t.url,o.download=t.name,o.target="_blank",o.rel="noopener noreferrer",o.style.display="none",document.body.appendChild(o),o.click(),document.body.removeChild(o)}}},Y=typeof T=="boolean"?{showPreviewIcon:!0,showRemoveIcon:!0,showDownloadIcon:!0}:{showPreviewIcon:T.showPreviewIcon??!0,showRemoveIcon:T.showRemoveIcon??!0,showDownloadIcon:T.showDownloadIcon??!0};return s.jsxs(s.Fragment,{children:[s.jsxs("div",{ref:gs,className:C.cn(e),...hs,children:[s.jsxs("div",{className:C.cn($s({variant:r,status:j||!O?"disabled":fs?"dragover":"idle",size:["dropzone","primaryDropzone","secondaryDropzone"].includes(r)?void 0:M}),["dropzone","primaryDropzone","secondaryDropzone"].includes(r)&&"ds:min-h-[180px] ds:min-w-[300px]",!us&&"ds:border-0",!H&&r!=="avatar"&&r!=="avatarCircle"&&"ds:px-4",(r==="avatar"||r==="avatarCircle")&&x.length>0&&x[0].url&&"ds:opacity-100!"),onDragOver:zs,onDragLeave:Cs,onDrop:Ls,onClick:Ps,children:[s.jsx("input",{ref:S,type:"file",accept:m,multiple:w,disabled:j,onChange:Ds,className:"ds:hidden",...W?{webkitdirectory:"",directory:""}:{}}),r==="avatar"||r==="avatarCircle"?s.jsx(s.Fragment,{children:x.length>0&&x[0].url&&!j?s.jsxs("div",{className:"ds:relative ds:w-full ds:h-full ds:group",children:[s.jsx("img",{draggable:!1,src:x[0].url||x[0].thumbUrl,alt:x[0].name,className:C.cn("ds:w-full ds:h-full ds:object-cover",r==="avatarCircle"&&"ds:rounded-full",r==="avatar"&&"ds:rounded-lg")}),s.jsx("div",{className:C.cn("ds:absolute ds:inset-0 ds:bg-black/50 ds:opacity-0 ds:group-hover:opacity-100 ds:transition-opacity ds:flex ds:items-center ds:justify-center",r==="avatarCircle"&&"ds:rounded-full",r==="avatar"&&"ds:rounded-lg"),onClick:t=>{t.stopPropagation(),rs(x[0])},children:s.jsx(l.Trash2,{className:"ds:h-6 ds:w-6 ds:text-white ds:cursor-pointer ds:hover:scale-110 ds:transition-transform"})})]}):ms}):s.jsxs("div",{className:C.cn("ds:flex ds:items-center ds:justify-center ds:gap-2",["secondaryDropzone","dropzone","primaryDropzone"].includes(r)&&"ds:flex-col"),children:[ss?s.jsx("div",{className:C.cn(["dropzone","primaryDropzone","secondaryDropzone"].includes(r)?"ds:h-10 ds:w-10":M==="small"?"ds:h-5 ds:w-5":"ds:h-6 ds:w-6",r==="outline"&&"ds:text-gray-500",["primaryDropzone","secondaryDropzone","primaryOutline"].includes(r)&&"ds:text-primary"),children:ss}):s.jsx(s.Fragment,{children:H?s.jsx(l.Upload,{className:C.cn(["dropzone","primaryDropzone","secondaryDropzone"].includes(r)?"ds:h-10 ds:w-10":M==="small"?"ds:h-5 ds:w-5":"ds:h-6 ds:w-6",r==="outline"&&"ds:text-gray-500",["secondaryDropzone","primaryDropzone","primaryOutline"].includes(r)&&"ds:text-primary")}):s.jsx(l.CloudUploadIcon,{className:C.cn(["dropzone","primaryDropzone","secondaryDropzone"].includes(r)?"ds:h-10 ds:w-10":M==="small"?"ds:h-5 ds:w-5":"ds:h-6 ds:w-6",r==="outline"&&"ds:text-gray-500",["primaryDropzone","secondaryDropzone","primaryOutline"].includes(r)&&"ds:text-primary")})}),!H&&s.jsxs(s.Fragment,{children:[s.jsx("span",{className:"ds:font-medium ds:whitespace-nowrap ds:text-sm",children:ps}),Z&&["dropzone","primaryDropzone","secondaryDropzone"].includes(r)&&s.jsx("span",{className:"ds:text-xs ds:text-gray-500",children:Z})]})]})]}),T&&x.length>0&&s.jsx("div",{className:C.cn("ds:mt-4",(F==="picture-card"||F==="picture-circle")&&"ds:grid ds:gap-2",F==="picture"&&"ds:space-y-2"),style:{gridTemplateColumns:F==="picture-card"||F==="picture-circle"?`repeat(${cs}, 1fr)`:void 0,minWidth:F==="picture-card"||F==="picture-circle"?"100px":void 0},children:x.filter(t=>t.response!==B.LIST_IGNORE).map(t=>s.jsx(Ts,{file:t,listType:F,onRemove:()=>rs(t),onPreview:Es,onDownload:Fs,showPreviewIcon:Y.showPreviewIcon,showRemoveIcon:Y.showRemoveIcon,showDownloadIcon:Y.showDownloadIcon,pictureCardSize:is},t.uid))})]}),s.jsx(Rs.default,{open:ys,onOpenChange:es,title:ds,size:"lg",children:s.jsx("img",{src:ws,alt:ds,className:"ds:w-full ds:h-auto ds:max-h-[70vh] ds:object-contain"})})]})});as.displayName="Upload";const B=as;B.LIST_IGNORE="LIST_IGNORE";const Ts=({file:e,listType:r,onRemove:m,onPreview:w,onDownload:j,showPreviewIcon:U,showRemoveIcon:$,showDownloadIcon:v})=>{const N=e.type?.startsWith("image/"),L=N||e.url;return r==="picture-card"?s.jsxs("div",{className:"ds:relative ds:aspect-square ds:rounded-lg ds:border ds:bg-muted/50 ds:overflow-hidden ds:group",style:{width:"100px",height:"100px",minWidth:"100px",minHeight:"100px",padding:"4px"},children:[e.url&&N?s.jsx("img",{src:e.thumbUrl||e.url,alt:e.name,className:"ds:h-full ds:w-full ds:object-cover ds:rounded-lg"}):s.jsx("div",{className:"ds:flex ds:items-center ds:justify-center ds:h-full",children:A(e)}),e.status==="uploading"&&s.jsx("div",{className:"ds:absolute ds:inset-0 ds:bg-background/80 ds:flex ds:items-center ds:justify-center",children:s.jsxs("div",{className:"ds:w-full ds:px-4",children:[s.jsxs("div",{className:"ds:flex ds:items-center ds:gap-2 ds:mb-2",children:[s.jsx(l.Loader2,{className:"ds:h-4 ds:w-4 ds:animate-spin"}),s.jsxs("span",{className:"ds:text-xs",children:[e.percent,"%"]})]}),s.jsx("div",{className:"ds:h-1 ds:bg-muted ds:rounded-full ds:overflow-hidden",children:s.jsx("div",{className:"ds:h-full ds:bg-primary ds:transition-all ds:duration-300",style:{width:`${e.percent}%`}})})]})}),e.status==="done"&&s.jsx("div",{className:"ds:absolute ds:top-2 ds:right-2 ds:bg-green-500 ds:rounded-full ds:p-1",children:s.jsx(l.CheckCircle2,{className:"ds:h-4 ds:w-4 ds:text-white"})}),e.status==="error"&&s.jsx("div",{className:"ds:absolute ds:top-2 ds:right-2 ds:bg-red-500 ds:rounded-full ds:p-1",children:s.jsx(l.AlertCircle,{className:"ds:h-4 ds:w-4 ds:text-white"})}),s.jsxs("div",{className:"ds:absolute ds:inset-0 ds:bg-black/60 ds:opacity-0 ds:group-hover:opacity-100 ds:transition-opacity ds:flex ds:items-center ds:justify-center ds:gap-2",children:[U&&L&&s.jsx("button",{onClick:i=>{i.stopPropagation(),w?.(e)},className:"ds:p-1 ds:rounded-full ds:bg-background/20 ds:hover:bg-background/30 ds:transition-colors",title:"Preview",children:s.jsx(l.Eye,{className:"ds:h-4 ds:w-4 ds:text-white"})}),v&&e.url&&s.jsx("button",{onClick:i=>{i.stopPropagation(),j?.(e)},className:"ds:p-1 ds:rounded-full ds:bg-background/20 ds:hover:bg-background/30 ds:transition-colors",title:"Download",children:s.jsx(l.Download,{className:"ds:h-4 ds:w-4 ds:text-white"})}),$&&s.jsx("button",{onClick:i=>{i.stopPropagation(),m()},className:"ds:p-1 ds:rounded-full ds:bg-background/20 ds:hover:bg-background/30 ds:transition-colors",title:"Remove",children:s.jsx(l.Trash2,{className:"ds:h-4 ds:w-4 ds:text-white"})})]}),s.jsx("div",{className:"ds:absolute ds:bottom-0 ds:left-0 ds:right-0 ds:bg-black/60 ds:p-2 ds:text-white ds:text-xs ds:truncate ds:opacity-0 ds:group-hover:opacity-100 ds:transition-opacity",children:e.name})]}):r==="picture-circle"?s.jsxs("div",{className:C.cn("ds:relative ds:aspect-square ds:rounded-full ds:border ds:bg-muted/50 ds:overflow-hidden ds:group",e.status==="done"&&"ds:border-2 ds:border-green-500",e.status==="error"&&"ds:border-2 ds:border-red-500"),style:{width:"100px",height:"100px",minWidth:"100px",minHeight:"100px",padding:"4px"},children:[e.url&&N?s.jsx("img",{src:e.thumbUrl||e.url,alt:e.name,className:"ds:h-full ds:w-full ds:object-cover ds:rounded-full"}):s.jsx("div",{className:"ds:flex ds:items-center ds:justify-center ds:h-full ds:rounded-full ds:bg-muted",children:A(e)}),e.status==="uploading"&&s.jsx("div",{className:"ds:absolute ds:inset-0 ds:bg-background/80 ds:flex ds:items-center ds:justify-center ds:rounded-full",children:s.jsxs("div",{className:"ds:w-full ds:px-4",children:[s.jsxs("div",{className:"ds:flex ds:items-center ds:gap-2 ds:mb-2 ds:justify-center",children:[s.jsx(l.Loader2,{className:"ds:h-4 ds:w-4 ds:animate-spin"}),s.jsxs("span",{className:"ds:text-xs",children:[e.percent,"%"]})]}),s.jsx("div",{className:"ds:h-1 ds:bg-muted ds:rounded-full ds:overflow-hidden",children:s.jsx("div",{className:"ds:h-full ds:bg-primary ds:transition-all ds:duration-300",style:{width:`${e.percent}%`}})})]})}),s.jsxs("div",{className:"ds:absolute ds:inset-0 ds:bg-black/60 ds:opacity-0 ds:group-hover:opacity-100 ds:transition-opacity ds:flex ds:items-center ds:justify-center ds:gap-2 ds:rounded-full",children:[U&&L&&s.jsx("button",{onClick:i=>{i.stopPropagation(),w?.(e)},className:"ds:p-1 ds:rounded-full ds:bg-background/20 ds:hover:bg-background/30 ds:transition-colors",title:"Preview",children:s.jsx(l.Eye,{className:"ds:h-4 ds:w-4 ds:text-white"})}),v&&e.url&&s.jsx("button",{onClick:i=>{i.stopPropagation(),j?.(e)},className:"ds:p-1 ds:rounded-full ds:bg-background/20 ds:hover:bg-background/30 ds:transition-colors",title:"Download",children:s.jsx(l.Download,{className:"ds:h-4 ds:w-4 ds:text-white"})}),$&&s.jsx("button",{onClick:i=>{i.stopPropagation(),m()},className:"ds:p-1 ds:rounded-full ds:bg-background/20 ds:hover:bg-background/30 ds:transition-colors",title:"Remove",children:s.jsx(l.Trash2,{className:"ds:h-4 ds:w-4 ds:text-white"})}),s.jsx("div",{className:"ds:absolute ds:bottom-0 ds:left-0 ds:right-0 ds:bg-black/60 ds:p-2 ds:text-white ds:text-xs ds:truncate ds:opacity-0 ds:group-hover:opacity-100 ds:transition-opacity",children:e.name})]})]}):r==="picture"?s.jsxs("div",{className:"ds:flex ds:items-center ds:gap-3 ds:p-2 ds:rounded-lg ds:border ds:bg-background ds:hover:bg-muted/50 ds:transition-colors ds:group",children:[s.jsx("div",{className:"ds:shrink-0 ds:h-10 ds:w-10 ds:rounded ds:overflow-hidden ds:bg-muted ds:flex ds:items-center ds:justify-center",children:e.url&&N?s.jsx("img",{src:e.thumbUrl||e.url,alt:e.name,className:"ds:h-full ds:w-full ds:object-cover"}):A(e)}),s.jsxs("div",{className:"ds:flex-1 ds:min-w-0",children:[s.jsx("p",{className:"ds:text-sm ds:font-medium ds:truncate",children:e.name}),s.jsxs("div",{className:"ds:flex ds:items-center ds:gap-2 ds:mt-1",children:[e.size&&s.jsx("span",{className:"ds:text-xs ds:text-muted-foreground",children:J(e.size)}),e.status==="uploading"&&s.jsxs("span",{className:"ds:text-xs ds:text-primary",children:[e.percent,"%"]}),e.status==="done"&&s.jsx(l.CheckCircle2,{className:"ds:h-4 ds:w-4 ds:text-green-500"}),e.status==="error"&&s.jsx(l.AlertCircle,{className:"ds:h-4 ds:w-4 ds:text-red-500"})]}),e.status==="uploading"&&s.jsx("div",{className:"ds:h-1 ds:bg-muted ds:rounded-full ds:overflow-hidden ds:mt-2",children:s.jsx("div",{className:"ds:h-full ds:bg-primary ds:transition-all ds:duration-300",style:{width:`${e.percent}%`}})})]}),s.jsxs("div",{className:"ds:flex ds:items-center ds:gap-1 ds:opacity-0 ds:group-hover:opacity-100 ds:transition-opacity",children:[U&&L&&s.jsx("button",{onClick:i=>{i.stopPropagation(),w?.(e)},className:"ds:p-1.5 ds:rounded ds:hover:bg-muted ds:transition-colors",title:"Preview",children:s.jsx(l.Eye,{className:"ds:h-4 ds:w-4"})}),v&&e.url&&s.jsx("button",{onClick:i=>{i.stopPropagation(),j?.(e)},className:"ds:p-1.5 ds:rounded ds:hover:bg-muted ds:transition-colors",title:"Download",children:s.jsx(l.Download,{className:"ds:h-4 ds:w-4"})}),$&&s.jsx("button",{onClick:i=>{i.stopPropagation(),m()},className:"ds:p-1.5 ds:rounded ds:hover:bg-destructive/10 ds:transition-colors ds:text-destructive",title:"Remove",children:s.jsx(l.X,{className:"ds:h-4 ds:w-4"})})]})]}):s.jsxs("div",{className:"ds:flex ds:items-center ds:gap-2 ds:p-2 ds:rounded ds:hover:bg-muted/50 ds:transition-colors ds:group",children:[s.jsx("div",{className:"ds:shrink-0",children:A(e)}),s.jsxs("div",{className:"ds:flex-1 ds:min-w-0",children:[s.jsxs("div",{className:"ds:flex ds:items-center ds:gap-2",children:[s.jsx("p",{className:"ds:text-sm ds:truncate",children:e.name}),e.status==="done"&&s.jsx(l.CheckCircle2,{className:"ds:h-4 ds:w-4 ds:text-green-500 ds:shrink-0"}),e.status==="error"&&s.jsx(l.AlertCircle,{className:"ds:h-4 ds:w-4 ds:text-red-500 ds:shrink-0"}),e.status==="uploading"&&s.jsx(l.Loader2,{className:"ds:h-4 ds:w-4 ds:animate-spin ds:shrink-0"})]}),e.status==="uploading"&&s.jsxs("div",{className:"ds:flex ds:items-center ds:gap-2",children:[s.jsx("div",{className:"ds:flex-1 ds:h-1 ds:bg-muted ds:rounded-full ds:overflow-hidden",children:s.jsx("div",{className:"ds:h-full ds:bg-primary ds:transition-all ds:duration-300",style:{width:`${e.percent}%`}})}),s.jsxs("span",{className:"ds:text-xs ds:text-muted-foreground",children:[e.percent,"%"]})]})]}),s.jsxs("div",{className:"ds:flex ds:items-center ds:gap-1 ds:opacity-0 ds:group-hover:opacity-100 ds:transition-opacity",children:[U&&L&&s.jsx("button",{onClick:i=>{i.stopPropagation(),w?.(e)},className:"ds:p-1 ds:rounded ds:hover:bg-muted ds:transition-colors",title:"Preview",children:s.jsx(l.Eye,{className:"ds:h-4 ds:w-4"})}),v&&e.url&&s.jsx("button",{onClick:i=>{i.stopPropagation(),j?.(e)},className:"ds:p-1 ds:rounded ds:hover:bg-muted ds:transition-colors",title:"Download",children:s.jsx(l.Download,{className:"ds:h-4 ds:w-4"})}),$&&s.jsx("button",{onClick:i=>{i.stopPropagation(),m()},className:"ds:p-1 ds:rounded ds:hover:bg-destructive/10 ds:transition-colors ds:text-destructive",title:"Remove",children:s.jsx(l.Trash2,{className:"ds:h-4 ds:w-4"})})]})]})};exports.Upload=B;exports.default=B;
4
4
  //# sourceMappingURL=Upload.cjs.map