@flamingo-stack/openframe-frontend-core 0.0.204 → 0.0.205

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 (509) hide show
  1. package/dist/{chunk-4CWSZPXH.cjs → chunk-24KCAECR.cjs} +9 -9
  2. package/dist/{chunk-4CWSZPXH.cjs.map → chunk-24KCAECR.cjs.map} +1 -1
  3. package/dist/chunk-27APPAJN.cjs +24 -0
  4. package/dist/chunk-27APPAJN.cjs.map +1 -0
  5. package/dist/{chunk-UC43NICZ.cjs → chunk-664KA5FI.cjs} +2 -35
  6. package/dist/chunk-664KA5FI.cjs.map +1 -0
  7. package/dist/chunk-6RZYJICV.cjs +24 -0
  8. package/dist/chunk-6RZYJICV.cjs.map +1 -0
  9. package/dist/chunk-7L4DWM7P.js +24 -0
  10. package/dist/chunk-7L4DWM7P.js.map +1 -0
  11. package/dist/chunk-BZFW3FOF.cjs +21 -0
  12. package/dist/chunk-BZFW3FOF.cjs.map +1 -0
  13. package/dist/{chunk-N57KWHDB.js → chunk-CIPO6DXK.js} +5 -5
  14. package/dist/chunk-EL5YVPD5.js +21 -0
  15. package/dist/chunk-EL5YVPD5.js.map +1 -0
  16. package/dist/{chunk-ARQ4XP64.cjs → chunk-FDCFI7YT.cjs} +40080 -31492
  17. package/dist/chunk-FDCFI7YT.cjs.map +1 -0
  18. package/dist/chunk-G7UE6RKV.cjs +121 -0
  19. package/dist/chunk-G7UE6RKV.cjs.map +1 -0
  20. package/dist/{chunk-25LVV26X.cjs → chunk-JUZGUQMX.cjs} +178 -50
  21. package/dist/chunk-JUZGUQMX.cjs.map +1 -0
  22. package/dist/{chunk-SZPJ5R5B.js → chunk-KSOOKNBG.js} +1 -34
  23. package/dist/chunk-KSOOKNBG.js.map +1 -0
  24. package/dist/{chunk-RMB5DVED.cjs → chunk-KUZGEA7U.cjs} +83 -66
  25. package/dist/chunk-KUZGEA7U.cjs.map +1 -0
  26. package/dist/chunk-LXC6P2EO.js +63 -0
  27. package/dist/chunk-LXC6P2EO.js.map +1 -0
  28. package/dist/chunk-MJNXIEV2.js +24 -0
  29. package/dist/chunk-MJNXIEV2.js.map +1 -0
  30. package/dist/{chunk-CPXLQ57U.js → chunk-MVGGXOFA.js} +37 -20
  31. package/dist/chunk-MVGGXOFA.js.map +1 -0
  32. package/dist/{chunk-LY34ORX6.js → chunk-O55ZUAX7.js} +39920 -31332
  33. package/dist/chunk-O55ZUAX7.js.map +1 -0
  34. package/dist/chunk-OHPI2HRK.js +47 -0
  35. package/dist/chunk-OHPI2HRK.js.map +1 -0
  36. package/dist/chunk-PLJLE4A4.js +121 -0
  37. package/dist/chunk-PLJLE4A4.js.map +1 -0
  38. package/dist/{chunk-XGL5FKIK.js → chunk-SCN5WFIZ.js} +148 -20
  39. package/dist/chunk-SCN5WFIZ.js.map +1 -0
  40. package/dist/chunk-WBR7H6E3.cjs +47 -0
  41. package/dist/chunk-WBR7H6E3.cjs.map +1 -0
  42. package/dist/chunk-XL4V2PYG.cjs +63 -0
  43. package/dist/chunk-XL4V2PYG.cjs.map +1 -0
  44. package/dist/components/announcement-bar.d.ts.map +1 -1
  45. package/dist/components/chat/chat-attachment-bar.d.ts +66 -0
  46. package/dist/components/chat/chat-attachment-bar.d.ts.map +1 -0
  47. package/dist/components/chat/chat-container.d.ts +21 -1
  48. package/dist/components/chat/chat-container.d.ts.map +1 -1
  49. package/dist/components/chat/chat-input.d.ts.map +1 -1
  50. package/dist/components/chat/chat-message-enhanced.d.ts.map +1 -1
  51. package/dist/components/chat/chat-message-list.d.ts.map +1 -1
  52. package/dist/components/chat/chat-panel-context.d.ts +9 -0
  53. package/dist/components/chat/chat-panel-context.d.ts.map +1 -0
  54. package/dist/components/chat/chat-ticket-list.d.ts +1 -1
  55. package/dist/components/chat/chat-ticket-list.d.ts.map +1 -1
  56. package/dist/components/chat/embeddable-chat.d.ts +42 -0
  57. package/dist/components/chat/embeddable-chat.d.ts.map +1 -0
  58. package/dist/components/chat/entity-cards/admin-content-card.d.ts +34 -0
  59. package/dist/components/chat/entity-cards/admin-content-card.d.ts.map +1 -0
  60. package/dist/components/chat/entity-cards/block-card.d.ts.map +1 -0
  61. package/dist/components/chat/entity-cards/blog-card.d.ts +30 -0
  62. package/dist/components/chat/entity-cards/blog-card.d.ts.map +1 -0
  63. package/dist/components/chat/entity-cards/blog-image-placeholder.d.ts +26 -0
  64. package/dist/components/chat/entity-cards/blog-image-placeholder.d.ts.map +1 -0
  65. package/dist/components/chat/entity-cards/campaign-card-admin.d.ts +33 -0
  66. package/dist/components/chat/entity-cards/campaign-card-admin.d.ts.map +1 -0
  67. package/dist/components/chat/entity-cards/case-study-card.d.ts +20 -0
  68. package/dist/components/chat/entity-cards/case-study-card.d.ts.map +1 -0
  69. package/dist/components/chat/entity-cards/chat-ticket-item.d.ts.map +1 -0
  70. package/dist/components/chat/{chat-video-entity-card.d.ts → entity-cards/chat-video-entity-card.d.ts} +1 -1
  71. package/dist/components/chat/entity-cards/chat-video-entity-card.d.ts.map +1 -0
  72. package/dist/components/chat/entity-cards/customer-interview-card.d.ts +19 -0
  73. package/dist/components/chat/entity-cards/customer-interview-card.d.ts.map +1 -0
  74. package/dist/components/chat/entity-cards/data-room-doc-card.d.ts +47 -0
  75. package/dist/components/chat/entity-cards/data-room-doc-card.d.ts.map +1 -0
  76. package/dist/components/chat/entity-cards/dispatch.d.ts +119 -0
  77. package/dist/components/chat/entity-cards/dispatch.d.ts.map +1 -0
  78. package/dist/components/chat/entity-cards/entity-author-card.d.ts +87 -0
  79. package/dist/components/chat/entity-cards/entity-author-card.d.ts.map +1 -0
  80. package/dist/components/chat/entity-cards/generic-entity-card.d.ts +42 -0
  81. package/dist/components/chat/entity-cards/generic-entity-card.d.ts.map +1 -0
  82. package/dist/components/chat/entity-cards/github-activity-card.d.ts +37 -0
  83. package/dist/components/chat/entity-cards/github-activity-card.d.ts.map +1 -0
  84. package/dist/components/chat/entity-cards/hubspot-ticket-card.d.ts +28 -0
  85. package/dist/components/chat/entity-cards/hubspot-ticket-card.d.ts.map +1 -0
  86. package/dist/components/chat/entity-cards/index.d.ts +32 -0
  87. package/dist/components/chat/entity-cards/index.d.ts.map +1 -0
  88. package/dist/components/chat/entity-cards/investor-update-card.d.ts +19 -0
  89. package/dist/components/chat/entity-cards/investor-update-card.d.ts.map +1 -0
  90. package/dist/components/chat/entity-cards/onboarding-guide-card.d.ts +20 -0
  91. package/dist/components/chat/entity-cards/onboarding-guide-card.d.ts.map +1 -0
  92. package/dist/components/chat/entity-cards/product-release-card-defaults.d.ts +21 -0
  93. package/dist/components/chat/entity-cards/product-release-card-defaults.d.ts.map +1 -0
  94. package/dist/components/chat/entity-cards/product-release-card.d.ts +12 -0
  95. package/dist/components/chat/entity-cards/product-release-card.d.ts.map +1 -0
  96. package/dist/components/chat/entity-cards/program-card-defaults.d.ts +32 -0
  97. package/dist/components/chat/entity-cards/program-card-defaults.d.ts.map +1 -0
  98. package/dist/components/chat/entity-cards/program-card.d.ts +37 -0
  99. package/dist/components/chat/entity-cards/program-card.d.ts.map +1 -0
  100. package/dist/components/chat/entity-cards/roadmap-card.d.ts +28 -0
  101. package/dist/components/chat/entity-cards/roadmap-card.d.ts.map +1 -0
  102. package/dist/components/chat/entity-cards/roadmap-vote-button.d.ts +12 -0
  103. package/dist/components/chat/entity-cards/roadmap-vote-button.d.ts.map +1 -0
  104. package/dist/components/chat/entity-cards/slack-message-card.d.ts +28 -0
  105. package/dist/components/chat/entity-cards/slack-message-card.d.ts.map +1 -0
  106. package/dist/components/chat/entity-cards/task-type-icon.d.ts +6 -0
  107. package/dist/components/chat/entity-cards/task-type-icon.d.ts.map +1 -0
  108. package/dist/components/chat/hooks/index.d.ts +10 -0
  109. package/dist/components/chat/hooks/index.d.ts.map +1 -1
  110. package/dist/components/chat/hooks/use-chat-attachment-image-gallery.d.ts +5 -0
  111. package/dist/components/chat/hooks/use-chat-attachment-image-gallery.d.ts.map +1 -0
  112. package/dist/components/chat/hooks/use-chat-attachments.d.ts +33 -0
  113. package/dist/components/chat/hooks/use-chat-attachments.d.ts.map +1 -0
  114. package/dist/components/chat/hooks/use-chat-card-item.d.ts +7 -0
  115. package/dist/components/chat/hooks/use-chat-card-item.d.ts.map +1 -0
  116. package/dist/components/chat/hooks/use-chat-identity.d.ts +44 -0
  117. package/dist/components/chat/hooks/use-chat-identity.d.ts.map +1 -0
  118. package/dist/components/chat/hooks/use-chat.d.ts +30 -0
  119. package/dist/components/chat/hooks/use-chat.d.ts.map +1 -0
  120. package/dist/components/chat/hooks/use-close-on-navigation.d.ts +2 -0
  121. package/dist/components/chat/hooks/use-close-on-navigation.d.ts.map +1 -0
  122. package/dist/components/chat/hooks/use-embedded-chat.d.ts +174 -0
  123. package/dist/components/chat/hooks/use-embedded-chat.d.ts.map +1 -0
  124. package/dist/components/chat/hooks/use-proxied-image-url.d.ts +18 -0
  125. package/dist/components/chat/hooks/use-proxied-image-url.d.ts.map +1 -0
  126. package/dist/components/chat/hooks/use-slash-commands.d.ts +32 -0
  127. package/dist/components/chat/hooks/use-slash-commands.d.ts.map +1 -0
  128. package/dist/components/chat/hooks/use-sse.d.ts +57 -0
  129. package/dist/components/chat/hooks/use-sse.d.ts.map +1 -0
  130. package/dist/components/chat/index.cjs +393 -0
  131. package/dist/components/chat/index.cjs.map +1 -0
  132. package/dist/components/chat/index.d.ts +5 -3
  133. package/dist/components/chat/index.d.ts.map +1 -1
  134. package/dist/components/chat/index.js +393 -0
  135. package/dist/components/chat/index.js.map +1 -0
  136. package/dist/components/chat/nav-link-anchor-via-runtime.d.ts +33 -0
  137. package/dist/components/chat/nav-link-anchor-via-runtime.d.ts.map +1 -0
  138. package/dist/components/chat/source-action-button.d.ts +39 -0
  139. package/dist/components/chat/source-action-button.d.ts.map +1 -0
  140. package/dist/components/chat/types/chat.types.d.ts +36 -0
  141. package/dist/components/chat/types/chat.types.d.ts.map +1 -1
  142. package/dist/components/chat/types/component.types.d.ts +56 -11
  143. package/dist/components/chat/types/component.types.d.ts.map +1 -1
  144. package/dist/components/chat/types/entities/blog.d.ts +14 -0
  145. package/dist/components/chat/types/entities/blog.d.ts.map +1 -0
  146. package/dist/components/chat/types/entities/case-study.d.ts +10 -0
  147. package/dist/components/chat/types/entities/case-study.d.ts.map +1 -0
  148. package/dist/components/chat/types/entities/content-ref.d.ts +23 -0
  149. package/dist/components/chat/types/entities/content-ref.d.ts.map +1 -0
  150. package/dist/components/chat/types/entities/customer-interview.d.ts +10 -0
  151. package/dist/components/chat/types/entities/customer-interview.d.ts.map +1 -0
  152. package/dist/components/chat/types/entities/data-room-doc.d.ts +37 -0
  153. package/dist/components/chat/types/entities/data-room-doc.d.ts.map +1 -0
  154. package/dist/components/chat/types/entities/github-activity.d.ts +29 -0
  155. package/dist/components/chat/types/entities/github-activity.d.ts.map +1 -0
  156. package/dist/components/chat/types/entities/hubspot-ticket.d.ts +39 -0
  157. package/dist/components/chat/types/entities/hubspot-ticket.d.ts.map +1 -0
  158. package/dist/components/chat/types/entities/index.d.ts +28 -0
  159. package/dist/components/chat/types/entities/index.d.ts.map +1 -0
  160. package/dist/components/chat/types/entities/investor-update.d.ts +83 -0
  161. package/dist/components/chat/types/entities/investor-update.d.ts.map +1 -0
  162. package/dist/components/chat/types/entities/onboarding-guide.d.ts +79 -0
  163. package/dist/components/chat/types/entities/onboarding-guide.d.ts.map +1 -0
  164. package/dist/components/chat/types/entities/program-types.d.ts +303 -0
  165. package/dist/components/chat/types/entities/program-types.d.ts.map +1 -0
  166. package/dist/components/chat/types/entities/roadmap-item.d.ts +41 -0
  167. package/dist/components/chat/types/entities/roadmap-item.d.ts.map +1 -0
  168. package/dist/components/chat/types/entities/slack-message.d.ts +28 -0
  169. package/dist/components/chat/types/entities/slack-message.d.ts.map +1 -0
  170. package/dist/components/chat/types/index.d.ts +1 -0
  171. package/dist/components/chat/types/index.d.ts.map +1 -1
  172. package/dist/components/chat/utils/agent-status-message.d.ts +18 -0
  173. package/dist/components/chat/utils/agent-status-message.d.ts.map +1 -0
  174. package/dist/components/chat/utils/auto-continuation-directive.d.ts +38 -0
  175. package/dist/components/chat/utils/auto-continuation-directive.d.ts.map +1 -0
  176. package/dist/components/chat/utils/chat-attachment-markdown.d.ts +114 -0
  177. package/dist/components/chat/utils/chat-attachment-markdown.d.ts.map +1 -0
  178. package/dist/components/chat/utils/chat-authed-fetch.d.ts +13 -0
  179. package/dist/components/chat/utils/chat-authed-fetch.d.ts.map +1 -0
  180. package/dist/components/chat/utils/chat-nav-resolution.d.ts +72 -0
  181. package/dist/components/chat/utils/chat-nav-resolution.d.ts.map +1 -0
  182. package/dist/components/chat/utils/chat-proxy-auth-storage.d.ts +43 -0
  183. package/dist/components/chat/utils/chat-proxy-auth-storage.d.ts.map +1 -0
  184. package/dist/components/chat/utils/chip-action-class.d.ts +16 -0
  185. package/dist/components/chat/utils/chip-action-class.d.ts.map +1 -0
  186. package/dist/components/chat/utils/chip-styles.d.ts +32 -0
  187. package/dist/components/chat/utils/chip-styles.d.ts.map +1 -0
  188. package/dist/components/chat/utils/clickup-task-type-utils.d.ts +38 -0
  189. package/dist/components/chat/utils/clickup-task-type-utils.d.ts.map +1 -0
  190. package/dist/components/chat/utils/compact-card-classes.d.ts +50 -0
  191. package/dist/components/chat/utils/compact-card-classes.d.ts.map +1 -0
  192. package/dist/components/chat/utils/decide-new-tab.d.ts +39 -0
  193. package/dist/components/chat/utils/decide-new-tab.d.ts.map +1 -0
  194. package/dist/components/chat/utils/external-app-urls.d.ts +14 -0
  195. package/dist/components/chat/utils/external-app-urls.d.ts.map +1 -0
  196. package/dist/components/chat/utils/flatten-assistant-content.d.ts +25 -0
  197. package/dist/components/chat/utils/flatten-assistant-content.d.ts.map +1 -0
  198. package/dist/components/chat/utils/icon-registry.d.ts +67 -0
  199. package/dist/components/chat/utils/icon-registry.d.ts.map +1 -0
  200. package/dist/components/chat/utils/index.d.ts +21 -0
  201. package/dist/components/chat/utils/index.d.ts.map +1 -1
  202. package/dist/components/chat/utils/is-cross-origin-url.d.ts +22 -0
  203. package/dist/components/chat/utils/is-cross-origin-url.d.ts.map +1 -0
  204. package/dist/components/chat/utils/nav-anchor-props.d.ts +54 -0
  205. package/dist/components/chat/utils/nav-anchor-props.d.ts.map +1 -0
  206. package/dist/components/chat/utils/nav-click-handler.d.ts +51 -0
  207. package/dist/components/chat/utils/nav-click-handler.d.ts.map +1 -0
  208. package/dist/components/chat/utils/scroll-anchor.d.ts +30 -0
  209. package/dist/components/chat/utils/scroll-anchor.d.ts.map +1 -0
  210. package/dist/components/chat/utils/slash-dispatch-utils.d.ts +109 -0
  211. package/dist/components/chat/utils/slash-dispatch-utils.d.ts.map +1 -0
  212. package/dist/components/chat/utils/source-icons.d.ts +8 -0
  213. package/dist/components/chat/utils/source-icons.d.ts.map +1 -0
  214. package/dist/components/chat/utils/source-row-cta.d.ts +111 -0
  215. package/dist/components/chat/utils/source-row-cta.d.ts.map +1 -0
  216. package/dist/components/features/figma-prototype-viewer.d.ts.map +1 -1
  217. package/dist/components/features/index.cjs +12 -6
  218. package/dist/components/features/index.cjs.map +1 -1
  219. package/dist/components/features/index.js +11 -5
  220. package/dist/components/features/video.d.ts.map +1 -1
  221. package/dist/components/icons/index.cjs +3 -3
  222. package/dist/components/icons/index.js +2 -2
  223. package/dist/components/index.cjs +274 -8
  224. package/dist/components/index.cjs.map +1 -1
  225. package/dist/components/index.js +273 -7
  226. package/dist/components/interactive-wrapper.d.ts +3 -3
  227. package/dist/components/navigation/index.cjs +12 -6
  228. package/dist/components/navigation/index.cjs.map +1 -1
  229. package/dist/components/navigation/index.js +11 -5
  230. package/dist/components/resizable.d.ts +1 -1
  231. package/dist/components/shared/product-release/product-release-card-skeleton.d.ts +1 -1
  232. package/dist/components/shared/product-release/product-release-card-skeleton.d.ts.map +1 -1
  233. package/dist/components/shared/product-release/product-release-card.d.ts +19 -12
  234. package/dist/components/shared/product-release/product-release-card.d.ts.map +1 -1
  235. package/dist/components/shared/product-release/release-detail-page.d.ts +2 -4
  236. package/dist/components/shared/product-release/release-detail-page.d.ts.map +1 -1
  237. package/dist/components/ui/button/button.d.ts +13 -0
  238. package/dist/components/ui/button/button.d.ts.map +1 -1
  239. package/dist/components/ui/dashboard-info-card.d.ts.map +1 -1
  240. package/dist/components/ui/entity-image.d.ts.map +1 -1
  241. package/dist/components/ui/file-manager/index.cjs +71 -70
  242. package/dist/components/ui/file-manager/index.cjs.map +1 -1
  243. package/dist/components/ui/file-manager/index.js +6 -5
  244. package/dist/components/ui/file-manager/index.js.map +1 -1
  245. package/dist/components/ui/hover-dropdown.d.ts +66 -0
  246. package/dist/components/ui/hover-dropdown.d.ts.map +1 -0
  247. package/dist/components/ui/index.cjs +276 -6
  248. package/dist/components/ui/index.cjs.map +1 -1
  249. package/dist/components/ui/index.d.ts +1 -0
  250. package/dist/components/ui/index.d.ts.map +1 -1
  251. package/dist/components/ui/index.js +278 -8
  252. package/dist/components/ui/simple-markdown-renderer.d.ts.map +1 -1
  253. package/dist/components/ui/square-avatar.d.ts.map +1 -1
  254. package/dist/contexts/chat-runtime-context.d.ts +109 -0
  255. package/dist/contexts/chat-runtime-context.d.ts.map +1 -0
  256. package/dist/contexts/endpoints-runtime-context.d.ts +28 -0
  257. package/dist/contexts/endpoints-runtime-context.d.ts.map +1 -0
  258. package/dist/contexts/index.cjs +30 -0
  259. package/dist/contexts/index.cjs.map +1 -0
  260. package/dist/contexts/index.d.ts +26 -0
  261. package/dist/contexts/index.d.ts.map +1 -0
  262. package/dist/contexts/index.js +30 -0
  263. package/dist/contexts/index.js.map +1 -0
  264. package/dist/contexts/use-outer-or-default.d.ts +29 -0
  265. package/dist/contexts/use-outer-or-default.d.ts.map +1 -0
  266. package/dist/embed-shims/index.cjs +51 -0
  267. package/dist/embed-shims/index.cjs.map +1 -0
  268. package/dist/embed-shims/index.d.ts +31 -0
  269. package/dist/embed-shims/index.d.ts.map +1 -0
  270. package/dist/embed-shims/index.js +51 -0
  271. package/dist/embed-shims/index.js.map +1 -0
  272. package/dist/embed-shims/next-dynamic.cjs +12 -0
  273. package/dist/embed-shims/next-dynamic.cjs.map +1 -0
  274. package/dist/embed-shims/next-dynamic.d.ts +47 -0
  275. package/dist/embed-shims/next-dynamic.d.ts.map +1 -0
  276. package/dist/embed-shims/next-dynamic.js +12 -0
  277. package/dist/embed-shims/next-dynamic.js.map +1 -0
  278. package/dist/embed-shims/next-image.cjs +12 -0
  279. package/dist/embed-shims/next-image.cjs.map +1 -0
  280. package/dist/embed-shims/next-image.d.ts +28 -0
  281. package/dist/embed-shims/next-image.d.ts.map +1 -0
  282. package/dist/embed-shims/next-image.js +12 -0
  283. package/dist/embed-shims/next-image.js.map +1 -0
  284. package/dist/embed-shims/next-link.cjs +14 -0
  285. package/dist/embed-shims/next-link.cjs.map +1 -0
  286. package/dist/embed-shims/next-link.d.ts +22 -0
  287. package/dist/embed-shims/next-link.d.ts.map +1 -0
  288. package/dist/embed-shims/next-link.js +14 -0
  289. package/dist/embed-shims/next-link.js.map +1 -0
  290. package/dist/embed-shims/next-navigation.cjs +30 -0
  291. package/dist/embed-shims/next-navigation.cjs.map +1 -0
  292. package/dist/embed-shims/next-navigation.d.ts +46 -0
  293. package/dist/embed-shims/next-navigation.d.ts.map +1 -0
  294. package/dist/embed-shims/next-navigation.js +30 -0
  295. package/dist/embed-shims/next-navigation.js.map +1 -0
  296. package/dist/hooks/index.cjs +10 -4
  297. package/dist/hooks/index.cjs.map +1 -1
  298. package/dist/hooks/index.d.ts +2 -0
  299. package/dist/hooks/index.d.ts.map +1 -1
  300. package/dist/hooks/index.js +9 -3
  301. package/dist/hooks/use-access-code-integration.d.ts +48 -0
  302. package/dist/hooks/use-access-code-integration.d.ts.map +1 -0
  303. package/dist/hooks/use-contact-submission.d.ts.map +1 -1
  304. package/dist/hooks/use-og-placeholder.d.ts +31 -0
  305. package/dist/hooks/use-og-placeholder.d.ts.map +1 -0
  306. package/dist/hooks/use-toast.d.ts +1 -1
  307. package/dist/index.cjs +367 -7
  308. package/dist/index.cjs.map +1 -1
  309. package/dist/index.js +378 -18
  310. package/dist/types/index.cjs.map +1 -1
  311. package/dist/types/index.js.map +1 -1
  312. package/dist/utils/access-code-client.d.ts +21 -37
  313. package/dist/utils/access-code-client.d.ts.map +1 -1
  314. package/dist/utils/cn.d.ts +0 -27
  315. package/dist/utils/cn.d.ts.map +1 -1
  316. package/dist/utils/color-analysis.d.ts +33 -0
  317. package/dist/utils/color-analysis.d.ts.map +1 -0
  318. package/dist/utils/date-formatters.d.ts +16 -5
  319. package/dist/utils/date-formatters.d.ts.map +1 -1
  320. package/dist/utils/fetch-priority.d.ts +3 -0
  321. package/dist/utils/fetch-priority.d.ts.map +1 -0
  322. package/dist/utils/format.d.ts +192 -1
  323. package/dist/utils/format.d.ts.map +1 -1
  324. package/dist/utils/image-proxy.d.ts +67 -2
  325. package/dist/utils/image-proxy.d.ts.map +1 -1
  326. package/dist/utils/index.cjs +1274 -155
  327. package/dist/utils/index.cjs.map +1 -1
  328. package/dist/utils/index.d.ts +19 -3
  329. package/dist/utils/index.d.ts.map +1 -1
  330. package/dist/utils/index.js +1200 -157
  331. package/dist/utils/index.js.map +1 -1
  332. package/dist/utils/local-storage-adapter.d.ts +46 -0
  333. package/dist/utils/local-storage-adapter.d.ts.map +1 -0
  334. package/dist/utils/source-icons.d.ts +78 -0
  335. package/dist/utils/source-icons.d.ts.map +1 -0
  336. package/package.json +29 -2
  337. package/src/components/announcement-bar.tsx +26 -4
  338. package/src/components/categories-cart.tsx +1 -1
  339. package/src/components/chat/chat-attachment-bar.tsx +323 -0
  340. package/src/components/chat/chat-container.tsx +39 -5
  341. package/src/components/chat/chat-input.tsx +7 -1
  342. package/src/components/chat/chat-message-enhanced.tsx +32 -22
  343. package/src/components/chat/chat-message-list.tsx +53 -4
  344. package/src/components/chat/chat-panel-context.tsx +37 -0
  345. package/src/components/chat/chat-ticket-list.tsx +1 -1
  346. package/src/components/chat/embeddable-chat.tsx +1106 -0
  347. package/src/components/chat/entity-cards/admin-content-card.tsx +155 -0
  348. package/src/components/chat/entity-cards/blog-card.tsx +259 -0
  349. package/src/components/chat/entity-cards/blog-image-placeholder.tsx +52 -0
  350. package/src/components/chat/entity-cards/campaign-card-admin.tsx +113 -0
  351. package/src/components/chat/entity-cards/case-study-card.tsx +192 -0
  352. package/src/components/chat/{chat-ticket-item.tsx → entity-cards/chat-ticket-item.tsx} +2 -2
  353. package/src/components/chat/{chat-video-entity-card.tsx → entity-cards/chat-video-entity-card.tsx} +2 -2
  354. package/src/components/chat/entity-cards/customer-interview-card.tsx +211 -0
  355. package/src/components/chat/entity-cards/data-room-doc-card.tsx +120 -0
  356. package/src/components/chat/entity-cards/dispatch.tsx +1093 -0
  357. package/src/components/chat/entity-cards/entity-author-card.tsx +193 -0
  358. package/src/components/chat/entity-cards/generic-entity-card.tsx +144 -0
  359. package/src/components/chat/entity-cards/github-activity-card.tsx +305 -0
  360. package/src/components/chat/entity-cards/hubspot-ticket-card.tsx +205 -0
  361. package/src/components/chat/entity-cards/index.ts +125 -0
  362. package/src/components/chat/entity-cards/investor-update-card.tsx +150 -0
  363. package/src/components/chat/entity-cards/onboarding-guide-card.tsx +326 -0
  364. package/src/components/chat/entity-cards/product-release-card-defaults.ts +57 -0
  365. package/src/components/chat/entity-cards/product-release-card.tsx +19 -0
  366. package/src/components/chat/entity-cards/program-card-defaults.ts +62 -0
  367. package/src/components/chat/entity-cards/program-card.tsx +451 -0
  368. package/src/components/chat/entity-cards/roadmap-card.tsx +356 -0
  369. package/src/components/chat/entity-cards/roadmap-vote-button.tsx +54 -0
  370. package/src/components/chat/entity-cards/slack-message-card.tsx +182 -0
  371. package/src/components/chat/entity-cards/task-type-icon.tsx +60 -0
  372. package/src/components/chat/hooks/index.ts +22 -0
  373. package/src/components/chat/hooks/use-chat-attachment-image-gallery.tsx +114 -0
  374. package/src/components/chat/hooks/use-chat-attachments.ts +429 -0
  375. package/src/components/chat/hooks/use-chat-card-item.ts +102 -0
  376. package/src/components/chat/hooks/use-chat-identity.ts +139 -0
  377. package/src/components/chat/hooks/use-chat.ts +501 -0
  378. package/src/components/chat/hooks/use-close-on-navigation.ts +87 -0
  379. package/src/components/chat/hooks/use-embedded-chat.ts +1023 -0
  380. package/src/components/chat/hooks/use-proxied-image-url.ts +31 -0
  381. package/src/components/chat/hooks/use-slash-commands.ts +106 -0
  382. package/src/components/chat/hooks/use-sse.ts +143 -0
  383. package/src/components/chat/index.ts +30 -4
  384. package/src/components/chat/nav-link-anchor-via-runtime.tsx +72 -0
  385. package/src/components/chat/source-action-button.tsx +120 -0
  386. package/src/components/chat/types/chat.types.ts +61 -0
  387. package/src/components/chat/types/component.types.ts +57 -11
  388. package/src/components/chat/types/entities/blog.ts +27 -0
  389. package/src/components/chat/types/entities/case-study.ts +14 -0
  390. package/src/components/chat/types/entities/content-ref.ts +23 -0
  391. package/src/components/chat/types/entities/customer-interview.ts +15 -0
  392. package/src/components/chat/types/entities/data-room-doc.ts +37 -0
  393. package/src/components/chat/types/entities/github-activity.ts +36 -0
  394. package/src/components/chat/types/entities/hubspot-ticket.ts +39 -0
  395. package/src/components/chat/types/entities/index.ts +28 -0
  396. package/src/components/chat/types/entities/investor-update.ts +100 -0
  397. package/src/components/chat/types/entities/onboarding-guide.ts +101 -0
  398. package/src/components/chat/types/entities/program-types.ts +433 -0
  399. package/src/components/chat/types/entities/roadmap-item.ts +42 -0
  400. package/src/components/chat/types/entities/slack-message.ts +28 -0
  401. package/src/components/chat/types/index.ts +1 -0
  402. package/src/components/chat/utils/agent-status-message.ts +52 -0
  403. package/src/components/chat/utils/auto-continuation-directive.ts +70 -0
  404. package/src/components/chat/utils/chat-attachment-markdown.ts +190 -0
  405. package/src/components/chat/utils/chat-authed-fetch.ts +73 -0
  406. package/src/components/chat/utils/chat-nav-resolution.ts +151 -0
  407. package/src/components/chat/utils/chat-proxy-auth-storage.ts +148 -0
  408. package/src/components/chat/utils/chip-action-class.ts +19 -0
  409. package/src/components/chat/utils/chip-styles.ts +51 -0
  410. package/src/components/chat/utils/clickup-task-type-utils.ts +59 -0
  411. package/src/components/chat/utils/compact-card-classes.ts +97 -0
  412. package/src/components/chat/utils/decide-new-tab.ts +57 -0
  413. package/src/components/chat/utils/external-app-urls.ts +19 -0
  414. package/src/components/chat/utils/flatten-assistant-content.ts +35 -0
  415. package/src/components/chat/utils/icon-registry.ts +297 -0
  416. package/src/components/chat/utils/index.ts +133 -0
  417. package/src/components/chat/utils/is-cross-origin-url.ts +28 -0
  418. package/src/components/chat/utils/nav-anchor-props.ts +78 -0
  419. package/src/components/chat/utils/nav-click-handler.ts +81 -0
  420. package/src/components/chat/utils/scroll-anchor.ts +35 -0
  421. package/src/components/chat/utils/slash-dispatch-utils.ts +183 -0
  422. package/src/components/chat/utils/source-icons.ts +14 -0
  423. package/src/components/chat/utils/source-row-cta.ts +215 -0
  424. package/src/components/empty-state.tsx +1 -1
  425. package/src/components/features/board/ticket-card.tsx +1 -1
  426. package/src/components/features/figma-prototype-viewer.tsx +2 -1
  427. package/src/components/features/media-gallery-manager.tsx +1 -1
  428. package/src/components/features/parallax-image-showcase.tsx +1 -1
  429. package/src/components/features/release-media-manager.tsx +1 -1
  430. package/src/components/features/seo-editor-preview.tsx +1 -1
  431. package/src/components/features/video.tsx +54 -3
  432. package/src/components/footer-waitlist-button.tsx +1 -1
  433. package/src/components/navigation/header.tsx +1 -1
  434. package/src/components/shared/onboarding/onboarding-step-card.tsx +1 -1
  435. package/src/components/shared/product-release/product-release-card-skeleton.tsx +8 -44
  436. package/src/components/shared/product-release/product-release-card.tsx +31 -116
  437. package/src/components/shared/product-release/release-detail-page.tsx +12 -16
  438. package/src/components/ui/actions-menu.tsx +1 -1
  439. package/src/components/ui/button/button.tsx +41 -11
  440. package/src/components/ui/button/split-button.tsx +1 -1
  441. package/src/components/ui/dashboard-info-card.tsx +2 -3
  442. package/src/components/ui/data-table/data-table-row.tsx +1 -1
  443. package/src/components/ui/entity-image.tsx +2 -8
  444. package/src/components/ui/hover-dropdown.tsx +258 -0
  445. package/src/components/ui/image-gallery-modal.tsx +1 -1
  446. package/src/components/ui/index.ts +1 -0
  447. package/src/components/ui/markdown-editor.tsx +1 -1
  448. package/src/components/ui/more-actions-menu.tsx +1 -1
  449. package/src/components/ui/organization-card.tsx +1 -1
  450. package/src/components/ui/simple-markdown-renderer.tsx +53 -5
  451. package/src/components/ui/square-avatar.tsx +3 -12
  452. package/src/components/ui/tab-navigation.tsx +1 -1
  453. package/src/components/ui/table/table-row.tsx +1 -1
  454. package/src/components/unified-filter-logic.tsx +1 -1
  455. package/src/components/unified-pagination.tsx +1 -1
  456. package/src/components/user-summary-stub.tsx +1 -1
  457. package/src/components/vendor-display-button.tsx +1 -1
  458. package/src/components/vendor-icon.tsx +1 -1
  459. package/src/contexts/chat-runtime-context.tsx +163 -0
  460. package/src/contexts/endpoints-runtime-context.tsx +68 -0
  461. package/src/contexts/index.ts +38 -0
  462. package/src/contexts/use-outer-or-default.ts +42 -0
  463. package/src/embed-shims/index.ts +42 -0
  464. package/src/embed-shims/next-dynamic.tsx +70 -0
  465. package/src/embed-shims/next-image.tsx +114 -0
  466. package/src/embed-shims/next-link.tsx +91 -0
  467. package/src/embed-shims/next-navigation.tsx +201 -0
  468. package/src/hooks/index.ts +9 -0
  469. package/src/hooks/state/use-api-params.ts +1 -1
  470. package/src/hooks/state/use-query-params.ts +1 -1
  471. package/src/hooks/use-access-code-integration.ts +107 -0
  472. package/src/hooks/use-contact-submission.ts +7 -3
  473. package/src/hooks/use-og-placeholder.ts +45 -0
  474. package/src/stories/OnboardingStepCard.stories.tsx +140 -0
  475. package/src/styles/chat-animations.css +65 -0
  476. package/src/styles/index.css +1 -0
  477. package/src/utils/access-code-client.ts +32 -75
  478. package/src/utils/cn.ts +0 -65
  479. package/src/utils/color-analysis.ts +205 -0
  480. package/src/utils/date-formatters.ts +54 -11
  481. package/src/utils/fetch-priority.ts +41 -0
  482. package/src/utils/format.ts +525 -1
  483. package/src/utils/image-proxy.ts +127 -7
  484. package/src/utils/index.ts +145 -5
  485. package/src/utils/local-storage-adapter.ts +105 -0
  486. package/src/utils/source-icons.ts +219 -0
  487. package/dist/chunk-25LVV26X.cjs.map +0 -1
  488. package/dist/chunk-ARQ4XP64.cjs.map +0 -1
  489. package/dist/chunk-CPXLQ57U.js.map +0 -1
  490. package/dist/chunk-LY34ORX6.js.map +0 -1
  491. package/dist/chunk-RMB5DVED.cjs.map +0 -1
  492. package/dist/chunk-SZPJ5R5B.js.map +0 -1
  493. package/dist/chunk-UC43NICZ.cjs.map +0 -1
  494. package/dist/chunk-XGL5FKIK.js.map +0 -1
  495. package/dist/components/chat/block-card.d.ts.map +0 -1
  496. package/dist/components/chat/chat-ticket-item.d.ts.map +0 -1
  497. package/dist/components/chat/chat-video-entity-card.d.ts.map +0 -1
  498. package/dist/utils/dynamic-icons.d.ts +0 -26
  499. package/dist/utils/dynamic-icons.d.ts.map +0 -1
  500. package/dist/utils/format-relative-time.d.ts +0 -21
  501. package/dist/utils/format-relative-time.d.ts.map +0 -1
  502. package/src/utils/.dynamic-icons.md +0 -30
  503. package/src/utils/.format-relative-time.md +0 -36
  504. package/src/utils/dynamic-icons.tsx +0 -120
  505. package/src/utils/format-relative-time.ts +0 -52
  506. /package/dist/{chunk-N57KWHDB.js.map → chunk-CIPO6DXK.js.map} +0 -0
  507. /package/dist/components/chat/{block-card.d.ts → entity-cards/block-card.d.ts} +0 -0
  508. /package/dist/components/chat/{chat-ticket-item.d.ts → entity-cards/chat-ticket-item.d.ts} +0 -0
  509. /package/src/components/chat/{block-card.tsx → entity-cards/block-card.tsx} +0 -0
@@ -1 +1 @@
1
- {"version":3,"sources":["/home/runner/work/openframe-oss-lib/openframe-oss-lib/openframe-frontend-core/dist/components/ui/file-manager/index.cjs","../../../../src/components/ui/file-manager/file-manager.tsx","../../../../src/components/ui/file-manager/file-manager-breadcrumb.tsx","../../../../src/components/ui/file-manager/file-manager-action-bar.tsx","../../../../src/components/ui/file-manager/file-manager-table.tsx","../../../../src/components/ui/file-manager/file-manager-table-row.tsx","../../../../src/components/ui/file-manager/file-icon.tsx","../../../../src/components/ui/file-manager/file-manager-context-menu.tsx","../../../../src/components/ui/file-manager/file-manager-empty.tsx","../../../../src/components/ui/file-manager/file-manager-skeleton.tsx"],"names":["jsxs","jsx","Copy","Scissors","React","MoreHorizontal","ChevronRight","useState"],"mappings":"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","file":"/home/runner/work/openframe-oss-lib/openframe-oss-lib/openframe-frontend-core/dist/components/ui/file-manager/index.cjs","sourcesContent":[null,"'use client'\n\nimport React, { useMemo } from 'react'\nimport { cn } from '../../../utils/cn'\nimport { Input } from '../input'\nimport { SearchIcon } from '../../icons-v2-generated/interface/search-icon'\nimport { FileManagerBreadcrumb } from './file-manager-breadcrumb'\nimport { FileManagerActionBar } from './file-manager-action-bar'\nimport { FileManagerTable } from './file-manager-table'\nimport type { FileManagerProps, BreadcrumbItem } from './types'\nimport { Loader2 } from 'lucide-react'\n\nexport function FileManager({ \n files,\n currentPath,\n selectedFiles,\n searchQuery,\n loading = false,\n isSearching,\n showCheckboxes = true,\n showSearch = true,\n showActions = true,\n canPaste = false,\n disableSearch = false,\n resultsCount,\n onNavigate,\n onBreadcrumbClick,\n onSearch,\n onSelectFile,\n onSelectAll,\n onFileAction,\n onFileClick,\n onFolderOpen,\n className \n}: FileManagerProps) {\n const breadcrumbItems = useMemo((): BreadcrumbItem[] => {\n const items: BreadcrumbItem[] = []\n \n items.push({ label: 'Root', path: '' })\n \n if (!currentPath || currentPath === '' || currentPath === '/') {\n return items\n }\n \n const isWindowsPath = currentPath.includes('\\\\') || /^[A-Za-z]:/.test(currentPath)\n const separator = isWindowsPath ? '\\\\' : '/'\n \n const parts = currentPath.split(separator).filter(Boolean)\n \n let startIndex = 0\n if (isWindowsPath && parts.length > 0) {\n const driveMatch = parts[0].match(/^([A-Za-z]:)/)\n if (driveMatch) {\n items.push({\n label: driveMatch[1],\n path: driveMatch[1] + separator\n })\n if (parts[0] === driveMatch[1]) {\n startIndex = 1\n } else {\n parts[0] = parts[0].substring(driveMatch[1].length)\n }\n }\n }\n \n let accumulatedPath = ''\n if (isWindowsPath && items.length > 1) {\n accumulatedPath = items[items.length - 1].path\n }\n \n for (let i = startIndex; i < parts.length; i++) {\n const part = parts[i]\n if (!part) continue\n \n if (isWindowsPath) {\n accumulatedPath = accumulatedPath.endsWith(separator) \n ? accumulatedPath + part \n : accumulatedPath + separator + part\n } else {\n accumulatedPath = accumulatedPath === '' || accumulatedPath === '/'\n ? '/' + part \n : accumulatedPath + '/' + part\n }\n \n items.push({\n label: part,\n path: accumulatedPath\n })\n }\n \n return items\n }, [currentPath])\n\n const handleBreadcrumbClick = (path: string) => {\n onBreadcrumbClick?.(path)\n onNavigate?.(path)\n }\n\n const handleFolderOpen = (file: any) => {\n let newPath: string\n \n if (!currentPath || currentPath === '') {\n if (file.name && /^[A-Za-z]:/.test(file.name)) {\n newPath = file.name + (file.name.endsWith('\\\\') ? '' : '\\\\')\n } else {\n newPath = file.name\n }\n } else {\n const separator = currentPath.includes('\\\\') ? '\\\\' : '/'\n \n if (currentPath === '/') {\n newPath = '/' + file.name\n } else if (currentPath.endsWith(separator)) {\n newPath = currentPath + file.name\n } else {\n newPath = currentPath + separator + file.name\n }\n }\n \n onFolderOpen?.(file)\n onNavigate?.(newPath)\n }\n\n const handleSelectAll = (selected: boolean) => {\n onSelectAll?.(selected)\n }\n\n const handleSelectFile = (fileId: string, selected: boolean) => {\n onSelectFile?.(fileId, selected)\n }\n\n return (\n <div className={cn('flex flex-col h-full bg-ods-bg', className)}>\n <div className=\"flex-1 flex flex-col py-2 space-y-6 min-h-0\">\n <div className=\"flex flex-col justify-between gap-4 mb-4 md:flex-row\">\n <FileManagerBreadcrumb\n items={breadcrumbItems}\n onItemClick={handleBreadcrumbClick}\n />\n\n {showActions && (\n <FileManagerActionBar\n canPaste={canPaste}\n hasSelection={selectedFiles.length > 0}\n onNewFolder={() => onFileAction?.('new-folder')}\n onPaste={() => onFileAction?.('paste')}\n onCopy={() => onFileAction?.('copy')}\n onCut={() => onFileAction?.('cut')}\n onUpload={() => onFileAction?.('upload')}\n onSelectAll={() => handleSelectAll(true)}\n />\n )}\n </div>\n \n {showSearch && (\n <Input\n value={searchQuery}\n onChange={(e) => onSearch?.(e.target.value)}\n placeholder=\"Search...\"\n disabled={disableSearch}\n startAdornment={<SearchIcon />}\n loading={isSearching}\n />\n )}\n \n <div className=\"flex-1 min-h-0\">\n <FileManagerTable\n files={files}\n selectedFiles={selectedFiles}\n resultsCount={resultsCount || files.length}\n showCheckboxes={showCheckboxes}\n loading={loading}\n isSearchResult={!!searchQuery}\n onSelectFile={handleSelectFile}\n onSelectAll={handleSelectAll}\n onFileClick={onFileClick}\n onFolderOpen={handleFolderOpen}\n onFileAction={onFileAction}\n />\n </div>\n </div>\n </div>\n )\n}","'use client'\n\nimport React from 'react'\nimport { ChevronRight } from 'lucide-react'\nimport { cn } from '../../../utils/cn'\nimport type { FileManagerBreadcrumbProps } from './types'\n\nexport function FileManagerBreadcrumb({ \n items, \n onItemClick, \n className \n}: FileManagerBreadcrumbProps) {\n return (\n <nav className={cn(\n 'flex flex-wrap items-center gap-x-1 gap-y-1 text-sm break-words',\n className\n )}>\n {items.map((item, index) => (\n <React.Fragment key={item.path}>\n {index > 0 && (\n <ChevronRight className=\"h-4 w-4 text-ods-text-tertiary flex-shrink-0\" />\n )}\n <button\n onClick={() => onItemClick?.(item.path)}\n className={cn(\n 'shrink-0 px-1 py-0.5 rounded hover:bg-ods-bg-secondary transition-colors',\n 'text-ods-text-primary hover:text-ods-accent text-left break-all',\n index === items.length - 1 && 'font-medium'\n )}\n >\n {item.label}\n </button>\n </React.Fragment>\n ))}\n </nav>\n )\n}","'use client'\n\nimport React from 'react'\nimport { FolderPlus, Clipboard, Upload, CheckSquare, Copy, Scissors } from 'lucide-react'\nimport { Button } from '../button'\nimport { cn } from '../../../utils/cn'\nimport type { FileManagerActionBarProps } from './types'\n\nexport function FileManagerActionBar({ \n canPaste = false,\n hasSelection = false,\n onNewFolder,\n onPaste,\n onCopy,\n onCut,\n onUpload,\n onSelectAll,\n className \n}: FileManagerActionBarProps) {\n return (\n <div className={cn('flex items-center gap-4 flex-wrap md:justify-end', className)}>\n <Button\n variant=\"outline\"\n size=\"small-legacy\"\n onClick={onNewFolder}\n leftIcon={<FolderPlus className=\"h-4 w-4\" />}\n >\n New Folder\n </Button>\n\n <Button\n variant=\"outline\"\n size=\"small-legacy\"\n onClick={onCopy}\n disabled={!hasSelection}\n leftIcon={<Copy className=\"h-4 w-4\" />}\n >\n Copy\n </Button>\n\n <Button\n variant=\"outline\"\n size=\"small-legacy\"\n onClick={onCut}\n disabled={!hasSelection}\n leftIcon={<Scissors className=\"h-4 w-4\" />}\n >\n Cut\n </Button>\n\n <Button\n variant=\"outline\"\n size=\"small-legacy\"\n onClick={onPaste}\n disabled={!canPaste}\n leftIcon={<Clipboard className=\"h-4 w-4\" />}\n >\n Paste\n </Button>\n\n <Button\n variant=\"outline\"\n size=\"small-legacy\"\n onClick={onUpload}\n leftIcon={<Upload className=\"h-4 w-4\" />}\n >\n Upload\n </Button>\n\n <Button\n variant=\"outline\"\n size=\"small-legacy\"\n onClick={onSelectAll}\n leftIcon={<CheckSquare className=\"h-4 w-4\" />}\n >\n Select All\n </Button>\n </div>\n )\n}","'use client'\n\nimport React, { useLayoutEffect, useMemo, useRef, useState } from 'react'\nimport { Checkbox } from '../checkbox'\nimport { Skeleton } from '../skeleton'\nimport { cn } from '../../../utils/cn'\nimport { FileManagerTableRow } from './file-manager-table-row'\nimport { FileManagerEmpty } from './file-manager-empty'\nimport type { FileManagerTableProps } from './types'\n\nexport function FileManagerTable({ \n files,\n selectedFiles,\n showCheckboxes = true,\n loading = false,\n isSearchResult = false,\n onSelectFile,\n onSelectAll,\n onFileClick,\n onFolderOpen,\n onFileAction,\n className \n}: FileManagerTableProps) {\n const allSelected = useMemo(() => {\n return files.length > 0 && selectedFiles.length === files.length\n }, [files.length, selectedFiles.length])\n\n const someSelected = useMemo(() => {\n return selectedFiles.length > 0 && selectedFiles.length < files.length\n }, [files.length, selectedFiles.length])\n\n const containerRef = useRef<HTMLDivElement>(null)\n const [tableHeight, setTableHeight] = useState<number | null>(null)\n\n useLayoutEffect(() => {\n if (loading || files.length === 0) {\n setTableHeight(null)\n return\n }\n\n const handleResize = () => {\n const node = containerRef.current\n if (!node) return\n const rect = node.getBoundingClientRect()\n const availableHeight = window.innerHeight - rect.top\n setTableHeight(availableHeight > 0 ? availableHeight : null)\n }\n\n handleResize()\n\n window.addEventListener('resize', handleResize)\n window.addEventListener('scroll', handleResize, true)\n\n const resizeObserver = new ResizeObserver(handleResize)\n const parent = containerRef.current?.parentElement\n if (parent) {\n resizeObserver.observe(parent)\n } else if (containerRef.current) {\n resizeObserver.observe(containerRef.current)\n }\n\n return () => {\n window.removeEventListener('resize', handleResize)\n window.removeEventListener('scroll', handleResize, true)\n resizeObserver.disconnect()\n }\n }, [loading, files.length])\n\n const handleSelectAll = (checked: boolean) => {\n onSelectAll?.(checked)\n }\n\n if (loading) {\n const skeletonRows = 8\n \n return (\n <div className={cn('bg-ods-bg border border-ods-border rounded-lg flex flex-col', className)}>\n {/* Table header */}\n <div className=\"flex items-center h-12 px-4 bg-ods-bg-secondary border-b border-ods-border rounded-t-lg\">\n {showCheckboxes && (\n <div className=\"mr-4\">\n <Skeleton className=\"h-5 w-5 rounded\" />\n </div>\n )}\n \n <div className=\"flex items-center gap-3 flex-1 min-w-0 text-sm font-medium text-ods-text-secondary\">\n NAME\n </div>\n \n <div className=\"w-24 shrink-0 pr-4 text-sm font-medium text-ods-text-secondary\">\n SIZE\n </div>\n \n <div className=\"w-36 shrink-0 pl-4 text-sm font-medium text-ods-text-secondary\">\n EDITED\n </div>\n \n <div className=\"w-48 shrink-0 pl-4 flex justify-end\">\n {/* Space for action buttons */}\n </div>\n </div>\n \n {/* Skeleton rows */}\n <div className=\"divide-y divide-ods-border rounded-b-lg flex-1 overflow-auto\">\n {Array.from({ length: skeletonRows }).map((_, idx) => (\n <div key={idx} className=\"bg-ods-card group flex items-center h-16 px-4 border-ods-border\">\n {showCheckboxes && (\n <div className=\"mr-4\">\n <Skeleton className=\"h-5 w-5 rounded\" />\n </div>\n )}\n \n {/* File icon and name column */}\n <div className=\"flex items-center gap-3 flex-1 min-w-0\">\n <Skeleton className=\"h-6 w-6 rounded\" />\n <div className=\"flex flex-col min-w-0\">\n <Skeleton className=\"h-4 w-32\" />\n {isSearchResult && (\n <Skeleton className=\"h-3 w-48 mt-1\" />\n )}\n </div>\n </div>\n \n {/* Size column */}\n <div className=\"w-24 shrink-0 pr-4\">\n <Skeleton className=\"h-4 w-16\" />\n </div>\n \n {/* Modified date column */}\n <div className=\"w-36 shrink-0 pl-4\">\n <Skeleton className=\"h-4 w-24\" />\n </div>\n \n {/* Action buttons column */}\n <div className=\"w-48 shrink-0 pl-4 flex items-center justify-end gap-1\">\n <Skeleton className=\"h-8 w-8 rounded\" />\n <Skeleton className=\"h-8 w-8 rounded\" />\n </div>\n </div>\n ))}\n </div>\n </div>\n )\n }\n\n if (files.length === 0) {\n return <FileManagerEmpty />\n }\n\n return (\n <div\n ref={containerRef}\n className={cn('bg-ods-bg border border-ods-border rounded-lg flex flex-col', className)}\n style={tableHeight ? { height: `${tableHeight}px` } : undefined}\n >\n <div className=\"flex items-center h-12 px-4 bg-ods-bg-secondary border-b border-ods-border rounded-t-lg\">\n {showCheckboxes && (\n <div className=\"mr-4\">\n <Checkbox\n checked={allSelected || someSelected}\n onCheckedChange={handleSelectAll}\n className=\"h-5 w-5\"\n />\n </div>\n )}\n \n <div className=\"flex items-center gap-3 flex-1 min-w-0 text-sm font-medium text-ods-text-secondary\">\n NAME\n </div>\n \n <div className=\"w-24 shrink-0 pr-4 text-sm font-medium text-ods-text-secondary\">\n SIZE\n </div>\n \n <div className=\"w-36 shrink-0 pl-4 text-sm font-medium text-ods-text-secondary\">\n EDITED\n </div>\n \n <div className=\"w-48 shrink-0 pl-4 flex justify-end\">\n {/* Space for action buttons */}\n </div>\n </div>\n \n <div className=\"divide-y divide-ods-border rounded-b-lg flex-1 overflow-auto\">\n {files.map((file) => (\n <FileManagerTableRow\n key={file.id}\n file={file}\n isSelected={selectedFiles.includes(file.id)}\n showCheckbox={showCheckboxes}\n showPath={isSearchResult}\n onSelect={(selected) => onSelectFile?.(file.id, selected)}\n onClick={() => {\n if (isSearchResult) {\n onFileClick?.(file)\n } else if (file.type === 'folder') {\n onFolderOpen?.(file)\n }\n }}\n onDoubleClick={() => {\n if (file.type === 'folder' && !isSearchResult) {\n onFolderOpen?.(file)\n }\n }}\n onActionClick={(action) => onFileAction?.(action, file.id)}\n />\n ))}\n </div>\n </div>\n )\n}","'use client'\n\nimport React, { useState } from 'react'\nimport { ChevronRight, MoreHorizontal } from 'lucide-react'\nimport { Checkbox } from '../checkbox'\nimport { Button } from '../button'\nimport { cn } from '../../../utils/cn'\nimport { FileIcon } from './file-icon'\nimport { FileManagerContextMenu } from './file-manager-context-menu'\nimport type { FileManagerTableRowProps } from './types'\n\nexport function FileManagerTableRow({ \n file,\n isSelected = false,\n showCheckbox = true,\n showPath = false,\n onSelect,\n onClick,\n onDoubleClick,\n onContextMenu,\n onActionClick,\n className \n}: FileManagerTableRowProps) {\n const [contextMenuOpen, setContextMenuOpen] = useState(false)\n \n const handleRowClick = (e: React.MouseEvent) => {\n // Don't trigger row click if clicking on interactive elements\n if ((e.target as HTMLElement).closest('[data-no-row-click]')) {\n return\n }\n onClick?.()\n }\n\n const handleCheckboxChange = (checked: boolean) => {\n onSelect?.(checked)\n }\n\n const handleContextAction = (action: any) => {\n onActionClick?.(action)\n setContextMenuOpen(false)\n }\n\n const fileExtension = file.type === 'file' \n ? file.name.split('.').pop() \n : undefined\n\n return (\n <div\n className={cn(\n 'bg-ods-card group flex items-center h-16 px-4 border-ods-border',\n 'hover:bg-ods-bg-secondary transition-colors cursor-pointer',\n isSelected && 'bg-ods-bg-secondary',\n className\n )}\n onClick={handleRowClick}\n onDoubleClick={onDoubleClick}\n onContextMenu={(e) => {\n e.preventDefault()\n onContextMenu?.(e)\n }}\n >\n {showCheckbox && (\n <div className=\"mr-4\" data-no-row-click>\n <Checkbox\n checked={isSelected}\n onCheckedChange={handleCheckboxChange}\n className=\"h-5 w-5\"\n />\n </div>\n )}\n \n <div className=\"flex items-center gap-3 flex-1 min-w-0\">\n <FileIcon \n type={file.type} \n extension={fileExtension}\n size=\"md\" \n />\n <div className=\"flex flex-col min-w-0\">\n <span className=\"text-sm text-ods-text-primary truncate\" title={file.name}>\n {file.name}\n </span>\n {showPath && file.path && (\n <span className=\"text-xs text-ods-text-secondary truncate\" title={file.path}>\n {file.path}\n </span>\n )}\n </div>\n </div>\n \n <div className=\"w-24 shrink-0 pr-4 text-sm text-ods-text-secondary\">\n {file.size || ''}\n </div>\n \n <div className=\"w-36 shrink-0 pl-4 text-sm text-ods-text-secondary\">\n {file.modified}\n </div>\n \n <div className=\"w-48 shrink-0 pl-4 flex items-center justify-end gap-1\" data-no-row-click>\n <FileManagerContextMenu\n open={contextMenuOpen}\n onOpenChange={setContextMenuOpen}\n onAction={handleContextAction}\n fileType={file.type}\n trigger={\n <Button\n variant=\"transparent\"\n size=\"small-legacy\"\n className=\"h-8 w-8 p-0 opacity-0 group-hover:opacity-100 transition-opacity\"\n onClick={(e) => {\n e.stopPropagation()\n }}\n >\n <MoreHorizontal className=\"h-4 w-4\" />\n </Button>\n }\n />\n \n {file.type === 'folder' ? (\n <Button\n variant=\"transparent\"\n size=\"small-legacy\"\n className=\"h-8 w-8 p-0\"\n onClick={(e) => {\n e.stopPropagation()\n onDoubleClick?.()\n }}\n >\n <ChevronRight className=\"h-4 w-4\" />\n </Button>\n ) : (\n <div className=\"w-8\" /> /* Space to maintain alignment when no chevron */\n )}\n </div>\n </div>\n )\n}","'use client'\n\nimport React from 'react'\nimport { Folder, File, FileText, Image, FileVideo, FileAudio, FileCode, FileArchive } from 'lucide-react'\nimport { cn } from '../../../utils/cn'\nimport type { FileIconProps } from './types'\n\nconst sizeMap = {\n sm: 'h-4 w-4',\n md: 'h-5 w-5',\n lg: 'h-6 w-6'\n}\n\nconst getFileIcon = (extension?: string) => {\n if (!extension) return File\n \n const ext = extension.toLowerCase()\n \n // Document files\n if (['txt', 'doc', 'docx', 'pdf', 'rtf'].includes(ext)) return FileText\n \n // Image files\n if (['jpg', 'jpeg', 'png', 'gif', 'svg', 'webp', 'bmp'].includes(ext)) return Image\n \n // Video files\n if (['mp4', 'avi', 'mov', 'wmv', 'flv', 'mkv'].includes(ext)) return FileVideo\n \n // Audio files\n if (['mp3', 'wav', 'flac', 'aac', 'ogg', 'wma'].includes(ext)) return FileAudio\n \n // Code files\n if (['js', 'ts', 'jsx', 'tsx', 'py', 'java', 'c', 'cpp', 'cs', 'html', 'css', 'json', 'xml'].includes(ext)) return FileCode\n \n // Archive files\n if (['zip', 'rar', '7z', 'tar', 'gz', 'bz2'].includes(ext)) return FileArchive\n \n return File\n}\n\nexport function FileIcon({ type, extension, className, size = 'md' }: FileIconProps) {\n const Icon = type === 'folder' ? Folder : getFileIcon(extension)\n \n return (\n <Icon \n className={cn(\n sizeMap[size],\n type === 'folder' ? 'text-ods-accent' : 'text-ods-text-secondary',\n className\n )}\n />\n )\n}","'use client'\n\nimport React from 'react'\nimport { Download, Copy, Edit2, Scissors, Archive, Trash2, MoreHorizontal } from 'lucide-react'\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from '../dropdown-menu'\nimport { Button } from '../button'\nimport { cn } from '../../../utils/cn'\nimport type { FileManagerContextMenuProps } from './types'\n\nexport function FileManagerContextMenu({ \n open,\n onOpenChange,\n onAction,\n fileType = 'file',\n hasSelection = false,\n trigger,\n className \n}: FileManagerContextMenuProps) {\n const menuItems = [\n {\n action: 'download' as const,\n label: 'Download',\n icon: Download,\n show: fileType === 'file' || hasSelection\n },\n {\n action: 'copy' as const,\n label: 'Copy',\n icon: Copy,\n show: true\n },\n {\n action: 'rename' as const,\n label: 'Rename',\n icon: Edit2,\n show: !hasSelection\n },\n {\n action: 'cut' as const,\n label: 'Cut',\n icon: Scissors,\n show: true\n },\n {\n action: 'delete' as const,\n label: 'Delete',\n icon: Trash2,\n show: true,\n separator: true\n }\n ]\n\n const visibleItems = menuItems.filter(item => item.show)\n\n return (\n <DropdownMenu open={open} onOpenChange={onOpenChange}>\n <DropdownMenuTrigger asChild>\n {trigger || (\n <Button\n variant=\"transparent\"\n size=\"small-legacy\"\n className=\"h-8 w-8 p-0\"\n >\n <MoreHorizontal className=\"h-4 w-4\" />\n </Button>\n )}\n </DropdownMenuTrigger>\n <DropdownMenuContent \n align=\"end\" \n className={cn('w-56', className)}\n onClick={(e) => e.stopPropagation()}\n >\n {visibleItems.map((item, index) => (\n <React.Fragment key={item.action}>\n {item.separator && index > 0 && <DropdownMenuSeparator />}\n <DropdownMenuItem\n onClick={(e) => {\n e.stopPropagation()\n onAction(item.action)\n }}\n className=\"cursor-pointer\"\n >\n <item.icon className=\"mr-3 h-4 w-4\" />\n <span>{item.label}</span>\n </DropdownMenuItem>\n </React.Fragment>\n ))}\n </DropdownMenuContent>\n </DropdownMenu>\n )\n}","'use client'\n\nimport React from 'react'\nimport { FolderOpen } from 'lucide-react'\nimport { Button } from '../button'\nimport { cn } from '../../../utils/cn'\nimport type { FileManagerEmptyProps } from './types'\n\nexport function FileManagerEmpty({ \n message = 'No files or folders found',\n description = 'This folder is empty. Create a new folder or upload files to get started.',\n action,\n className \n}: FileManagerEmptyProps) {\n return (\n <div className={cn(\n 'flex flex-col items-center justify-center py-20 px-4',\n className\n )}>\n <div className=\"p-4 bg-ods-bg-secondary rounded-full mb-6\">\n <FolderOpen className=\"h-12 w-12 text-ods-text-tertiary\" />\n </div>\n \n <h3 className=\"text-lg font-medium text-ods-text-primary mb-2\">\n {message}\n </h3>\n \n <p className=\"text-sm text-ods-text-secondary text-center max-w-md mb-6\">\n {description}\n </p>\n \n {action && (\n <Button\n variant=\"accent\"\n size=\"small-legacy\"\n onClick={action.onClick}\n >\n {action.label}\n </Button>\n )}\n </div>\n )\n}","'use client'\n\nimport React from 'react'\nimport { Skeleton } from '../skeleton'\n\ninterface FileManagerSkeletonProps {\n rows?: number\n showSearch?: boolean\n showActions?: boolean\n}\n\nexport function FileManagerSkeleton({ \n rows = 8,\n showSearch = true,\n showActions = true\n}: FileManagerSkeletonProps) {\n const rowPlaceholders = Array.from({ length: rows })\n\n return (\n <div className=\"flex flex-col h-full bg-ods-bg\">\n <div className=\"flex-1 flex flex-col py-6 space-y-6 min-h-0\">\n {/* Breadcrumb and Action Bar */}\n <div className=\"flex flex-wrap items-start justify-between gap-4\">\n {/* Breadcrumb skeleton */}\n <div className=\"flex-1 min-w-0 flex items-center gap-2\">\n <Skeleton className=\"h-5 w-12\" />\n <Skeleton className=\"h-4 w-4 rounded-full\" />\n <Skeleton className=\"h-5 w-20\" />\n <Skeleton className=\"h-4 w-4 rounded-full\" />\n <Skeleton className=\"h-5 w-24\" />\n </div>\n \n {/* Action buttons skeleton */}\n {showActions && (\n <div className=\"flex-shrink-0 flex items-center gap-2\">\n <Skeleton className=\"h-9 w-24\" />\n <Skeleton className=\"h-9 w-20\" />\n <Skeleton className=\"h-9 w-20\" />\n <Skeleton className=\"h-9 w-28\" />\n </div>\n )}\n </div>\n \n {/* Search bar skeleton */}\n {showSearch && (\n <Skeleton className=\"h-10 w-full rounded-lg\" />\n )}\n \n {/* Table skeleton */}\n <div className=\"flex-1 min-h-0\">\n <div className=\"bg-ods-bg border border-ods-border rounded-lg flex flex-col\">\n {/* Table header */}\n <div className=\"flex items-center h-12 px-4 bg-ods-bg-secondary border-b border-ods-border rounded-t-lg\">\n {/* Checkbox */}\n <div className=\"mr-4\">\n <Skeleton className=\"h-5 w-5 rounded\" />\n </div>\n \n {/* Column headers */}\n <div className=\"flex items-center gap-3 flex-1 min-w-0 text-sm font-medium text-ods-text-secondary\">\n NAME\n </div>\n \n <div className=\"w-24 shrink-0 pr-4 text-sm font-medium text-ods-text-secondary\">\n SIZE\n </div>\n \n <div className=\"w-36 shrink-0 pl-4 text-sm font-medium text-ods-text-secondary\">\n EDITED\n </div>\n \n <div className=\"w-48 shrink-0 pl-4 flex justify-end\">\n {/* Empty space for actions */}\n </div>\n </div>\n \n {/* Table rows */}\n <div className=\"divide-y divide-ods-border rounded-b-lg flex-1 overflow-auto min-h-0\">\n {rowPlaceholders.map((_, idx) => (\n <div key={idx} className=\"bg-ods-card flex items-center h-16 px-4 border-ods-border\">\n {/* Checkbox */}\n <div className=\"mr-4\">\n <Skeleton className=\"h-5 w-5 rounded\" />\n </div>\n \n {/* File icon and name */}\n <div className=\"flex items-center gap-3 flex-1 min-w-0\">\n <Skeleton className=\"h-6 w-6 rounded\" />\n <div className=\"flex flex-col min-w-0\">\n <Skeleton className=\"h-4 w-32\" />\n </div>\n </div>\n \n {/* Size */}\n <div className=\"w-24 shrink-0 pr-4\">\n <Skeleton className=\"h-4 w-16\" />\n </div>\n \n {/* Modified date */}\n <div className=\"w-36 shrink-0 pl-4\">\n <Skeleton className=\"h-4 w-24\" />\n </div>\n \n {/* Action buttons */}\n <div className=\"w-48 shrink-0 pl-4 flex items-center justify-end gap-1\">\n <Skeleton className=\"h-8 w-8 rounded\" />\n <Skeleton className=\"h-8 w-8 rounded\" />\n </div>\n </div>\n ))}\n </div>\n </div>\n </div>\n </div>\n </div>\n )\n}\n\n"]}
1
+ {"version":3,"sources":["/home/runner/work/openframe-oss-lib/openframe-oss-lib/openframe-frontend-core/dist/components/ui/file-manager/index.cjs","../../../../src/components/ui/file-manager/file-manager.tsx","../../../../src/components/ui/file-manager/file-manager-breadcrumb.tsx","../../../../src/components/ui/file-manager/file-manager-action-bar.tsx","../../../../src/components/ui/file-manager/file-manager-table.tsx","../../../../src/components/ui/file-manager/file-manager-table-row.tsx","../../../../src/components/ui/file-manager/file-icon.tsx","../../../../src/components/ui/file-manager/file-manager-context-menu.tsx","../../../../src/components/ui/file-manager/file-manager-empty.tsx","../../../../src/components/ui/file-manager/file-manager-skeleton.tsx"],"names":["jsxs","jsx","Copy","Scissors","React","MoreHorizontal","ChevronRight","useState"],"mappings":"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","file":"/home/runner/work/openframe-oss-lib/openframe-oss-lib/openframe-frontend-core/dist/components/ui/file-manager/index.cjs","sourcesContent":[null,"'use client'\n\nimport React, { useMemo } from 'react'\nimport { cn } from '../../../utils/cn'\nimport { Input } from '../input'\nimport { SearchIcon } from '../../icons-v2-generated/interface/search-icon'\nimport { FileManagerBreadcrumb } from './file-manager-breadcrumb'\nimport { FileManagerActionBar } from './file-manager-action-bar'\nimport { FileManagerTable } from './file-manager-table'\nimport type { FileManagerProps, BreadcrumbItem } from './types'\nimport { Loader2 } from 'lucide-react'\n\nexport function FileManager({ \n files,\n currentPath,\n selectedFiles,\n searchQuery,\n loading = false,\n isSearching,\n showCheckboxes = true,\n showSearch = true,\n showActions = true,\n canPaste = false,\n disableSearch = false,\n resultsCount,\n onNavigate,\n onBreadcrumbClick,\n onSearch,\n onSelectFile,\n onSelectAll,\n onFileAction,\n onFileClick,\n onFolderOpen,\n className \n}: FileManagerProps) {\n const breadcrumbItems = useMemo((): BreadcrumbItem[] => {\n const items: BreadcrumbItem[] = []\n \n items.push({ label: 'Root', path: '' })\n \n if (!currentPath || currentPath === '' || currentPath === '/') {\n return items\n }\n \n const isWindowsPath = currentPath.includes('\\\\') || /^[A-Za-z]:/.test(currentPath)\n const separator = isWindowsPath ? '\\\\' : '/'\n \n const parts = currentPath.split(separator).filter(Boolean)\n \n let startIndex = 0\n if (isWindowsPath && parts.length > 0) {\n const driveMatch = parts[0].match(/^([A-Za-z]:)/)\n if (driveMatch) {\n items.push({\n label: driveMatch[1],\n path: driveMatch[1] + separator\n })\n if (parts[0] === driveMatch[1]) {\n startIndex = 1\n } else {\n parts[0] = parts[0].substring(driveMatch[1].length)\n }\n }\n }\n \n let accumulatedPath = ''\n if (isWindowsPath && items.length > 1) {\n accumulatedPath = items[items.length - 1].path\n }\n \n for (let i = startIndex; i < parts.length; i++) {\n const part = parts[i]\n if (!part) continue\n \n if (isWindowsPath) {\n accumulatedPath = accumulatedPath.endsWith(separator) \n ? accumulatedPath + part \n : accumulatedPath + separator + part\n } else {\n accumulatedPath = accumulatedPath === '' || accumulatedPath === '/'\n ? '/' + part \n : accumulatedPath + '/' + part\n }\n \n items.push({\n label: part,\n path: accumulatedPath\n })\n }\n \n return items\n }, [currentPath])\n\n const handleBreadcrumbClick = (path: string) => {\n onBreadcrumbClick?.(path)\n onNavigate?.(path)\n }\n\n const handleFolderOpen = (file: any) => {\n let newPath: string\n \n if (!currentPath || currentPath === '') {\n if (file.name && /^[A-Za-z]:/.test(file.name)) {\n newPath = file.name + (file.name.endsWith('\\\\') ? '' : '\\\\')\n } else {\n newPath = file.name\n }\n } else {\n const separator = currentPath.includes('\\\\') ? '\\\\' : '/'\n \n if (currentPath === '/') {\n newPath = '/' + file.name\n } else if (currentPath.endsWith(separator)) {\n newPath = currentPath + file.name\n } else {\n newPath = currentPath + separator + file.name\n }\n }\n \n onFolderOpen?.(file)\n onNavigate?.(newPath)\n }\n\n const handleSelectAll = (selected: boolean) => {\n onSelectAll?.(selected)\n }\n\n const handleSelectFile = (fileId: string, selected: boolean) => {\n onSelectFile?.(fileId, selected)\n }\n\n return (\n <div className={cn('flex flex-col h-full bg-ods-bg', className)}>\n <div className=\"flex-1 flex flex-col py-2 space-y-6 min-h-0\">\n <div className=\"flex flex-col justify-between gap-4 mb-4 md:flex-row\">\n <FileManagerBreadcrumb\n items={breadcrumbItems}\n onItemClick={handleBreadcrumbClick}\n />\n\n {showActions && (\n <FileManagerActionBar\n canPaste={canPaste}\n hasSelection={selectedFiles.length > 0}\n onNewFolder={() => onFileAction?.('new-folder')}\n onPaste={() => onFileAction?.('paste')}\n onCopy={() => onFileAction?.('copy')}\n onCut={() => onFileAction?.('cut')}\n onUpload={() => onFileAction?.('upload')}\n onSelectAll={() => handleSelectAll(true)}\n />\n )}\n </div>\n \n {showSearch && (\n <Input\n value={searchQuery}\n onChange={(e) => onSearch?.(e.target.value)}\n placeholder=\"Search...\"\n disabled={disableSearch}\n startAdornment={<SearchIcon />}\n loading={isSearching}\n />\n )}\n \n <div className=\"flex-1 min-h-0\">\n <FileManagerTable\n files={files}\n selectedFiles={selectedFiles}\n resultsCount={resultsCount || files.length}\n showCheckboxes={showCheckboxes}\n loading={loading}\n isSearchResult={!!searchQuery}\n onSelectFile={handleSelectFile}\n onSelectAll={handleSelectAll}\n onFileClick={onFileClick}\n onFolderOpen={handleFolderOpen}\n onFileAction={onFileAction}\n />\n </div>\n </div>\n </div>\n )\n}","'use client'\n\nimport React from 'react'\nimport { ChevronRight } from 'lucide-react'\nimport { cn } from '../../../utils/cn'\nimport type { FileManagerBreadcrumbProps } from './types'\n\nexport function FileManagerBreadcrumb({ \n items, \n onItemClick, \n className \n}: FileManagerBreadcrumbProps) {\n return (\n <nav className={cn(\n 'flex flex-wrap items-center gap-x-1 gap-y-1 text-sm break-words',\n className\n )}>\n {items.map((item, index) => (\n <React.Fragment key={item.path}>\n {index > 0 && (\n <ChevronRight className=\"h-4 w-4 text-ods-text-tertiary flex-shrink-0\" />\n )}\n <button\n onClick={() => onItemClick?.(item.path)}\n className={cn(\n 'shrink-0 px-1 py-0.5 rounded hover:bg-ods-bg-secondary transition-colors',\n 'text-ods-text-primary hover:text-ods-accent text-left break-all',\n index === items.length - 1 && 'font-medium'\n )}\n >\n {item.label}\n </button>\n </React.Fragment>\n ))}\n </nav>\n )\n}","'use client'\n\nimport React from 'react'\nimport { FolderPlus, Clipboard, Upload, CheckSquare, Copy, Scissors } from 'lucide-react'\nimport { Button } from '../button'\nimport { cn } from '../../../utils/cn'\nimport type { FileManagerActionBarProps } from './types'\n\nexport function FileManagerActionBar({ \n canPaste = false,\n hasSelection = false,\n onNewFolder,\n onPaste,\n onCopy,\n onCut,\n onUpload,\n onSelectAll,\n className \n}: FileManagerActionBarProps) {\n return (\n <div className={cn('flex items-center gap-4 flex-wrap md:justify-end', className)}>\n <Button\n variant=\"outline\"\n size=\"small-legacy\"\n onClick={onNewFolder}\n leftIcon={<FolderPlus className=\"h-4 w-4\" />}\n >\n New Folder\n </Button>\n\n <Button\n variant=\"outline\"\n size=\"small-legacy\"\n onClick={onCopy}\n disabled={!hasSelection}\n leftIcon={<Copy className=\"h-4 w-4\" />}\n >\n Copy\n </Button>\n\n <Button\n variant=\"outline\"\n size=\"small-legacy\"\n onClick={onCut}\n disabled={!hasSelection}\n leftIcon={<Scissors className=\"h-4 w-4\" />}\n >\n Cut\n </Button>\n\n <Button\n variant=\"outline\"\n size=\"small-legacy\"\n onClick={onPaste}\n disabled={!canPaste}\n leftIcon={<Clipboard className=\"h-4 w-4\" />}\n >\n Paste\n </Button>\n\n <Button\n variant=\"outline\"\n size=\"small-legacy\"\n onClick={onUpload}\n leftIcon={<Upload className=\"h-4 w-4\" />}\n >\n Upload\n </Button>\n\n <Button\n variant=\"outline\"\n size=\"small-legacy\"\n onClick={onSelectAll}\n leftIcon={<CheckSquare className=\"h-4 w-4\" />}\n >\n Select All\n </Button>\n </div>\n )\n}","'use client'\n\nimport React, { useLayoutEffect, useMemo, useRef, useState } from 'react'\nimport { Checkbox } from '../checkbox'\nimport { Skeleton } from '../skeleton'\nimport { cn } from '../../../utils/cn'\nimport { FileManagerTableRow } from './file-manager-table-row'\nimport { FileManagerEmpty } from './file-manager-empty'\nimport type { FileManagerTableProps } from './types'\n\nexport function FileManagerTable({ \n files,\n selectedFiles,\n showCheckboxes = true,\n loading = false,\n isSearchResult = false,\n onSelectFile,\n onSelectAll,\n onFileClick,\n onFolderOpen,\n onFileAction,\n className \n}: FileManagerTableProps) {\n const allSelected = useMemo(() => {\n return files.length > 0 && selectedFiles.length === files.length\n }, [files.length, selectedFiles.length])\n\n const someSelected = useMemo(() => {\n return selectedFiles.length > 0 && selectedFiles.length < files.length\n }, [files.length, selectedFiles.length])\n\n const containerRef = useRef<HTMLDivElement>(null)\n const [tableHeight, setTableHeight] = useState<number | null>(null)\n\n useLayoutEffect(() => {\n if (loading || files.length === 0) {\n setTableHeight(null)\n return\n }\n\n const handleResize = () => {\n const node = containerRef.current\n if (!node) return\n const rect = node.getBoundingClientRect()\n const availableHeight = window.innerHeight - rect.top\n setTableHeight(availableHeight > 0 ? availableHeight : null)\n }\n\n handleResize()\n\n window.addEventListener('resize', handleResize)\n window.addEventListener('scroll', handleResize, true)\n\n const resizeObserver = new ResizeObserver(handleResize)\n const parent = containerRef.current?.parentElement\n if (parent) {\n resizeObserver.observe(parent)\n } else if (containerRef.current) {\n resizeObserver.observe(containerRef.current)\n }\n\n return () => {\n window.removeEventListener('resize', handleResize)\n window.removeEventListener('scroll', handleResize, true)\n resizeObserver.disconnect()\n }\n }, [loading, files.length])\n\n const handleSelectAll = (checked: boolean) => {\n onSelectAll?.(checked)\n }\n\n if (loading) {\n const skeletonRows = 8\n \n return (\n <div className={cn('bg-ods-bg border border-ods-border rounded-lg flex flex-col', className)}>\n {/* Table header */}\n <div className=\"flex items-center h-12 px-4 bg-ods-bg-secondary border-b border-ods-border rounded-t-lg\">\n {showCheckboxes && (\n <div className=\"mr-4\">\n <Skeleton className=\"h-5 w-5 rounded\" />\n </div>\n )}\n \n <div className=\"flex items-center gap-3 flex-1 min-w-0 text-sm font-medium text-ods-text-secondary\">\n NAME\n </div>\n \n <div className=\"w-24 shrink-0 pr-4 text-sm font-medium text-ods-text-secondary\">\n SIZE\n </div>\n \n <div className=\"w-36 shrink-0 pl-4 text-sm font-medium text-ods-text-secondary\">\n EDITED\n </div>\n \n <div className=\"w-48 shrink-0 pl-4 flex justify-end\">\n {/* Space for action buttons */}\n </div>\n </div>\n \n {/* Skeleton rows */}\n <div className=\"divide-y divide-ods-border rounded-b-lg flex-1 overflow-auto\">\n {Array.from({ length: skeletonRows }).map((_, idx) => (\n <div key={idx} className=\"bg-ods-card group flex items-center h-16 px-4 border-ods-border\">\n {showCheckboxes && (\n <div className=\"mr-4\">\n <Skeleton className=\"h-5 w-5 rounded\" />\n </div>\n )}\n \n {/* File icon and name column */}\n <div className=\"flex items-center gap-3 flex-1 min-w-0\">\n <Skeleton className=\"h-6 w-6 rounded\" />\n <div className=\"flex flex-col min-w-0\">\n <Skeleton className=\"h-4 w-32\" />\n {isSearchResult && (\n <Skeleton className=\"h-3 w-48 mt-1\" />\n )}\n </div>\n </div>\n \n {/* Size column */}\n <div className=\"w-24 shrink-0 pr-4\">\n <Skeleton className=\"h-4 w-16\" />\n </div>\n \n {/* Modified date column */}\n <div className=\"w-36 shrink-0 pl-4\">\n <Skeleton className=\"h-4 w-24\" />\n </div>\n \n {/* Action buttons column */}\n <div className=\"w-48 shrink-0 pl-4 flex items-center justify-end gap-1\">\n <Skeleton className=\"h-8 w-8 rounded\" />\n <Skeleton className=\"h-8 w-8 rounded\" />\n </div>\n </div>\n ))}\n </div>\n </div>\n )\n }\n\n if (files.length === 0) {\n return <FileManagerEmpty />\n }\n\n return (\n <div\n ref={containerRef}\n className={cn('bg-ods-bg border border-ods-border rounded-lg flex flex-col', className)}\n style={tableHeight ? { height: `${tableHeight}px` } : undefined}\n >\n <div className=\"flex items-center h-12 px-4 bg-ods-bg-secondary border-b border-ods-border rounded-t-lg\">\n {showCheckboxes && (\n <div className=\"mr-4\">\n <Checkbox\n checked={allSelected || someSelected}\n onCheckedChange={handleSelectAll}\n className=\"h-5 w-5\"\n />\n </div>\n )}\n \n <div className=\"flex items-center gap-3 flex-1 min-w-0 text-sm font-medium text-ods-text-secondary\">\n NAME\n </div>\n \n <div className=\"w-24 shrink-0 pr-4 text-sm font-medium text-ods-text-secondary\">\n SIZE\n </div>\n \n <div className=\"w-36 shrink-0 pl-4 text-sm font-medium text-ods-text-secondary\">\n EDITED\n </div>\n \n <div className=\"w-48 shrink-0 pl-4 flex justify-end\">\n {/* Space for action buttons */}\n </div>\n </div>\n \n <div className=\"divide-y divide-ods-border rounded-b-lg flex-1 overflow-auto\">\n {files.map((file) => (\n <FileManagerTableRow\n key={file.id}\n file={file}\n isSelected={selectedFiles.includes(file.id)}\n showCheckbox={showCheckboxes}\n showPath={isSearchResult}\n onSelect={(selected) => onSelectFile?.(file.id, selected)}\n onClick={() => {\n if (isSearchResult) {\n onFileClick?.(file)\n } else if (file.type === 'folder') {\n onFolderOpen?.(file)\n }\n }}\n onDoubleClick={() => {\n if (file.type === 'folder' && !isSearchResult) {\n onFolderOpen?.(file)\n }\n }}\n onActionClick={(action) => onFileAction?.(action, file.id)}\n />\n ))}\n </div>\n </div>\n )\n}","'use client'\n\nimport React, { useState } from 'react'\nimport { ChevronRight, MoreHorizontal } from 'lucide-react'\nimport { Checkbox } from '../checkbox'\nimport { Button } from '../button'\nimport { cn } from '../../../utils/cn'\nimport { FileIcon } from './file-icon'\nimport { FileManagerContextMenu } from './file-manager-context-menu'\nimport type { FileManagerTableRowProps } from './types'\n\nexport function FileManagerTableRow({ \n file,\n isSelected = false,\n showCheckbox = true,\n showPath = false,\n onSelect,\n onClick,\n onDoubleClick,\n onContextMenu,\n onActionClick,\n className \n}: FileManagerTableRowProps) {\n const [contextMenuOpen, setContextMenuOpen] = useState(false)\n \n const handleRowClick = (e: React.MouseEvent) => {\n // Don't trigger row click if clicking on interactive elements\n if ((e.target as HTMLElement).closest('[data-no-row-click]')) {\n return\n }\n onClick?.()\n }\n\n const handleCheckboxChange = (checked: boolean) => {\n onSelect?.(checked)\n }\n\n const handleContextAction = (action: any) => {\n onActionClick?.(action)\n setContextMenuOpen(false)\n }\n\n const fileExtension = file.type === 'file' \n ? file.name.split('.').pop() \n : undefined\n\n return (\n <div\n className={cn(\n 'bg-ods-card group flex items-center h-16 px-4 border-ods-border',\n 'hover:bg-ods-bg-secondary transition-colors cursor-pointer',\n isSelected && 'bg-ods-bg-secondary',\n className\n )}\n onClick={handleRowClick}\n onDoubleClick={onDoubleClick}\n onContextMenu={(e) => {\n e.preventDefault()\n onContextMenu?.(e)\n }}\n >\n {showCheckbox && (\n <div className=\"mr-4\" data-no-row-click>\n <Checkbox\n checked={isSelected}\n onCheckedChange={handleCheckboxChange}\n className=\"h-5 w-5\"\n />\n </div>\n )}\n \n <div className=\"flex items-center gap-3 flex-1 min-w-0\">\n <FileIcon \n type={file.type} \n extension={fileExtension}\n size=\"md\" \n />\n <div className=\"flex flex-col min-w-0\">\n <span className=\"text-sm text-ods-text-primary truncate\" title={file.name}>\n {file.name}\n </span>\n {showPath && file.path && (\n <span className=\"text-xs text-ods-text-secondary truncate\" title={file.path}>\n {file.path}\n </span>\n )}\n </div>\n </div>\n \n <div className=\"w-24 shrink-0 pr-4 text-sm text-ods-text-secondary\">\n {file.size || ''}\n </div>\n \n <div className=\"w-36 shrink-0 pl-4 text-sm text-ods-text-secondary\">\n {file.modified}\n </div>\n \n <div className=\"w-48 shrink-0 pl-4 flex items-center justify-end gap-1\" data-no-row-click>\n <FileManagerContextMenu\n open={contextMenuOpen}\n onOpenChange={setContextMenuOpen}\n onAction={handleContextAction}\n fileType={file.type}\n trigger={\n <Button\n variant=\"transparent\"\n size=\"small-legacy\"\n className=\"h-8 w-8 p-0 opacity-0 group-hover:opacity-100 transition-opacity\"\n onClick={(e) => {\n e.stopPropagation()\n }}\n >\n <MoreHorizontal className=\"h-4 w-4\" />\n </Button>\n }\n />\n \n {file.type === 'folder' ? (\n <Button\n variant=\"transparent\"\n size=\"small-legacy\"\n className=\"h-8 w-8 p-0\"\n onClick={(e) => {\n e.stopPropagation()\n onDoubleClick?.()\n }}\n >\n <ChevronRight className=\"h-4 w-4\" />\n </Button>\n ) : (\n <div className=\"w-8\" /> /* Space to maintain alignment when no chevron */\n )}\n </div>\n </div>\n )\n}","'use client'\n\nimport React from 'react'\nimport { Folder, File, FileText, Image, FileVideo, FileAudio, FileCode, FileArchive } from 'lucide-react'\nimport { cn } from '../../../utils/cn'\nimport type { FileIconProps } from './types'\n\nconst sizeMap = {\n sm: 'h-4 w-4',\n md: 'h-5 w-5',\n lg: 'h-6 w-6'\n}\n\nconst getFileIcon = (extension?: string) => {\n if (!extension) return File\n \n const ext = extension.toLowerCase()\n \n // Document files\n if (['txt', 'doc', 'docx', 'pdf', 'rtf'].includes(ext)) return FileText\n \n // Image files\n if (['jpg', 'jpeg', 'png', 'gif', 'svg', 'webp', 'bmp'].includes(ext)) return Image\n \n // Video files\n if (['mp4', 'avi', 'mov', 'wmv', 'flv', 'mkv'].includes(ext)) return FileVideo\n \n // Audio files\n if (['mp3', 'wav', 'flac', 'aac', 'ogg', 'wma'].includes(ext)) return FileAudio\n \n // Code files\n if (['js', 'ts', 'jsx', 'tsx', 'py', 'java', 'c', 'cpp', 'cs', 'html', 'css', 'json', 'xml'].includes(ext)) return FileCode\n \n // Archive files\n if (['zip', 'rar', '7z', 'tar', 'gz', 'bz2'].includes(ext)) return FileArchive\n \n return File\n}\n\nexport function FileIcon({ type, extension, className, size = 'md' }: FileIconProps) {\n const Icon = type === 'folder' ? Folder : getFileIcon(extension)\n \n return (\n <Icon \n className={cn(\n sizeMap[size],\n type === 'folder' ? 'text-ods-accent' : 'text-ods-text-secondary',\n className\n )}\n />\n )\n}","'use client'\n\nimport React from 'react'\nimport { Download, Copy, Edit2, Scissors, Archive, Trash2, MoreHorizontal } from 'lucide-react'\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from '../dropdown-menu'\nimport { Button } from '../button'\nimport { cn } from '../../../utils/cn'\nimport type { FileManagerContextMenuProps } from './types'\n\nexport function FileManagerContextMenu({ \n open,\n onOpenChange,\n onAction,\n fileType = 'file',\n hasSelection = false,\n trigger,\n className \n}: FileManagerContextMenuProps) {\n const menuItems = [\n {\n action: 'download' as const,\n label: 'Download',\n icon: Download,\n show: fileType === 'file' || hasSelection\n },\n {\n action: 'copy' as const,\n label: 'Copy',\n icon: Copy,\n show: true\n },\n {\n action: 'rename' as const,\n label: 'Rename',\n icon: Edit2,\n show: !hasSelection\n },\n {\n action: 'cut' as const,\n label: 'Cut',\n icon: Scissors,\n show: true\n },\n {\n action: 'delete' as const,\n label: 'Delete',\n icon: Trash2,\n show: true,\n separator: true\n }\n ]\n\n const visibleItems = menuItems.filter(item => item.show)\n\n return (\n <DropdownMenu open={open} onOpenChange={onOpenChange}>\n <DropdownMenuTrigger asChild>\n {trigger || (\n <Button\n variant=\"transparent\"\n size=\"small-legacy\"\n className=\"h-8 w-8 p-0\"\n >\n <MoreHorizontal className=\"h-4 w-4\" />\n </Button>\n )}\n </DropdownMenuTrigger>\n <DropdownMenuContent \n align=\"end\" \n className={cn('w-56', className)}\n onClick={(e) => e.stopPropagation()}\n >\n {visibleItems.map((item, index) => (\n <React.Fragment key={item.action}>\n {item.separator && index > 0 && <DropdownMenuSeparator />}\n <DropdownMenuItem\n onClick={(e) => {\n e.stopPropagation()\n onAction(item.action)\n }}\n className=\"cursor-pointer\"\n >\n <item.icon className=\"mr-3 h-4 w-4\" />\n <span>{item.label}</span>\n </DropdownMenuItem>\n </React.Fragment>\n ))}\n </DropdownMenuContent>\n </DropdownMenu>\n )\n}","'use client'\n\nimport React from 'react'\nimport { FolderOpen } from 'lucide-react'\nimport { Button } from '../button'\nimport { cn } from '../../../utils/cn'\nimport type { FileManagerEmptyProps } from './types'\n\nexport function FileManagerEmpty({ \n message = 'No files or folders found',\n description = 'This folder is empty. Create a new folder or upload files to get started.',\n action,\n className \n}: FileManagerEmptyProps) {\n return (\n <div className={cn(\n 'flex flex-col items-center justify-center py-20 px-4',\n className\n )}>\n <div className=\"p-4 bg-ods-bg-secondary rounded-full mb-6\">\n <FolderOpen className=\"h-12 w-12 text-ods-text-tertiary\" />\n </div>\n \n <h3 className=\"text-lg font-medium text-ods-text-primary mb-2\">\n {message}\n </h3>\n \n <p className=\"text-sm text-ods-text-secondary text-center max-w-md mb-6\">\n {description}\n </p>\n \n {action && (\n <Button\n variant=\"accent\"\n size=\"small-legacy\"\n onClick={action.onClick}\n >\n {action.label}\n </Button>\n )}\n </div>\n )\n}","'use client'\n\nimport React from 'react'\nimport { Skeleton } from '../skeleton'\n\ninterface FileManagerSkeletonProps {\n rows?: number\n showSearch?: boolean\n showActions?: boolean\n}\n\nexport function FileManagerSkeleton({ \n rows = 8,\n showSearch = true,\n showActions = true\n}: FileManagerSkeletonProps) {\n const rowPlaceholders = Array.from({ length: rows })\n\n return (\n <div className=\"flex flex-col h-full bg-ods-bg\">\n <div className=\"flex-1 flex flex-col py-6 space-y-6 min-h-0\">\n {/* Breadcrumb and Action Bar */}\n <div className=\"flex flex-wrap items-start justify-between gap-4\">\n {/* Breadcrumb skeleton */}\n <div className=\"flex-1 min-w-0 flex items-center gap-2\">\n <Skeleton className=\"h-5 w-12\" />\n <Skeleton className=\"h-4 w-4 rounded-full\" />\n <Skeleton className=\"h-5 w-20\" />\n <Skeleton className=\"h-4 w-4 rounded-full\" />\n <Skeleton className=\"h-5 w-24\" />\n </div>\n \n {/* Action buttons skeleton */}\n {showActions && (\n <div className=\"flex-shrink-0 flex items-center gap-2\">\n <Skeleton className=\"h-9 w-24\" />\n <Skeleton className=\"h-9 w-20\" />\n <Skeleton className=\"h-9 w-20\" />\n <Skeleton className=\"h-9 w-28\" />\n </div>\n )}\n </div>\n \n {/* Search bar skeleton */}\n {showSearch && (\n <Skeleton className=\"h-10 w-full rounded-lg\" />\n )}\n \n {/* Table skeleton */}\n <div className=\"flex-1 min-h-0\">\n <div className=\"bg-ods-bg border border-ods-border rounded-lg flex flex-col\">\n {/* Table header */}\n <div className=\"flex items-center h-12 px-4 bg-ods-bg-secondary border-b border-ods-border rounded-t-lg\">\n {/* Checkbox */}\n <div className=\"mr-4\">\n <Skeleton className=\"h-5 w-5 rounded\" />\n </div>\n \n {/* Column headers */}\n <div className=\"flex items-center gap-3 flex-1 min-w-0 text-sm font-medium text-ods-text-secondary\">\n NAME\n </div>\n \n <div className=\"w-24 shrink-0 pr-4 text-sm font-medium text-ods-text-secondary\">\n SIZE\n </div>\n \n <div className=\"w-36 shrink-0 pl-4 text-sm font-medium text-ods-text-secondary\">\n EDITED\n </div>\n \n <div className=\"w-48 shrink-0 pl-4 flex justify-end\">\n {/* Empty space for actions */}\n </div>\n </div>\n \n {/* Table rows */}\n <div className=\"divide-y divide-ods-border rounded-b-lg flex-1 overflow-auto min-h-0\">\n {rowPlaceholders.map((_, idx) => (\n <div key={idx} className=\"bg-ods-card flex items-center h-16 px-4 border-ods-border\">\n {/* Checkbox */}\n <div className=\"mr-4\">\n <Skeleton className=\"h-5 w-5 rounded\" />\n </div>\n \n {/* File icon and name */}\n <div className=\"flex items-center gap-3 flex-1 min-w-0\">\n <Skeleton className=\"h-6 w-6 rounded\" />\n <div className=\"flex flex-col min-w-0\">\n <Skeleton className=\"h-4 w-32\" />\n </div>\n </div>\n \n {/* Size */}\n <div className=\"w-24 shrink-0 pr-4\">\n <Skeleton className=\"h-4 w-16\" />\n </div>\n \n {/* Modified date */}\n <div className=\"w-36 shrink-0 pl-4\">\n <Skeleton className=\"h-4 w-24\" />\n </div>\n \n {/* Action buttons */}\n <div className=\"w-48 shrink-0 pl-4 flex items-center justify-end gap-1\">\n <Skeleton className=\"h-8 w-8 rounded\" />\n <Skeleton className=\"h-8 w-8 rounded\" />\n </div>\n </div>\n ))}\n </div>\n </div>\n </div>\n </div>\n </div>\n )\n}\n\n"]}
@@ -10,14 +10,15 @@ import {
10
10
  Input,
11
11
  Skeleton,
12
12
  init_button2 as init_button
13
- } from "../../../chunk-CPXLQ57U.js";
14
- import {
15
- cn,
16
- init_cn
17
- } from "../../../chunk-SZPJ5R5B.js";
13
+ } from "../../../chunk-MVGGXOFA.js";
18
14
  import {
19
15
  SearchIcon
20
16
  } from "../../../chunk-6U3IUD57.js";
17
+ import "../../../chunk-OHPI2HRK.js";
18
+ import {
19
+ cn,
20
+ init_cn
21
+ } from "../../../chunk-KSOOKNBG.js";
21
22
  import "../../../chunk-GGWZFCYS.js";
22
23
 
23
24
  // src/components/ui/file-manager/file-manager.tsx
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/components/ui/file-manager/file-manager.tsx","../../../../src/components/ui/file-manager/file-manager-breadcrumb.tsx","../../../../src/components/ui/file-manager/file-manager-action-bar.tsx","../../../../src/components/ui/file-manager/file-manager-table.tsx","../../../../src/components/ui/file-manager/file-manager-table-row.tsx","../../../../src/components/ui/file-manager/file-icon.tsx","../../../../src/components/ui/file-manager/file-manager-context-menu.tsx","../../../../src/components/ui/file-manager/file-manager-empty.tsx","../../../../src/components/ui/file-manager/file-manager-skeleton.tsx"],"sourcesContent":["'use client'\n\nimport React, { useMemo } from 'react'\nimport { cn } from '../../../utils/cn'\nimport { Input } from '../input'\nimport { SearchIcon } from '../../icons-v2-generated/interface/search-icon'\nimport { FileManagerBreadcrumb } from './file-manager-breadcrumb'\nimport { FileManagerActionBar } from './file-manager-action-bar'\nimport { FileManagerTable } from './file-manager-table'\nimport type { FileManagerProps, BreadcrumbItem } from './types'\nimport { Loader2 } from 'lucide-react'\n\nexport function FileManager({ \n files,\n currentPath,\n selectedFiles,\n searchQuery,\n loading = false,\n isSearching,\n showCheckboxes = true,\n showSearch = true,\n showActions = true,\n canPaste = false,\n disableSearch = false,\n resultsCount,\n onNavigate,\n onBreadcrumbClick,\n onSearch,\n onSelectFile,\n onSelectAll,\n onFileAction,\n onFileClick,\n onFolderOpen,\n className \n}: FileManagerProps) {\n const breadcrumbItems = useMemo((): BreadcrumbItem[] => {\n const items: BreadcrumbItem[] = []\n \n items.push({ label: 'Root', path: '' })\n \n if (!currentPath || currentPath === '' || currentPath === '/') {\n return items\n }\n \n const isWindowsPath = currentPath.includes('\\\\') || /^[A-Za-z]:/.test(currentPath)\n const separator = isWindowsPath ? '\\\\' : '/'\n \n const parts = currentPath.split(separator).filter(Boolean)\n \n let startIndex = 0\n if (isWindowsPath && parts.length > 0) {\n const driveMatch = parts[0].match(/^([A-Za-z]:)/)\n if (driveMatch) {\n items.push({\n label: driveMatch[1],\n path: driveMatch[1] + separator\n })\n if (parts[0] === driveMatch[1]) {\n startIndex = 1\n } else {\n parts[0] = parts[0].substring(driveMatch[1].length)\n }\n }\n }\n \n let accumulatedPath = ''\n if (isWindowsPath && items.length > 1) {\n accumulatedPath = items[items.length - 1].path\n }\n \n for (let i = startIndex; i < parts.length; i++) {\n const part = parts[i]\n if (!part) continue\n \n if (isWindowsPath) {\n accumulatedPath = accumulatedPath.endsWith(separator) \n ? accumulatedPath + part \n : accumulatedPath + separator + part\n } else {\n accumulatedPath = accumulatedPath === '' || accumulatedPath === '/'\n ? '/' + part \n : accumulatedPath + '/' + part\n }\n \n items.push({\n label: part,\n path: accumulatedPath\n })\n }\n \n return items\n }, [currentPath])\n\n const handleBreadcrumbClick = (path: string) => {\n onBreadcrumbClick?.(path)\n onNavigate?.(path)\n }\n\n const handleFolderOpen = (file: any) => {\n let newPath: string\n \n if (!currentPath || currentPath === '') {\n if (file.name && /^[A-Za-z]:/.test(file.name)) {\n newPath = file.name + (file.name.endsWith('\\\\') ? '' : '\\\\')\n } else {\n newPath = file.name\n }\n } else {\n const separator = currentPath.includes('\\\\') ? '\\\\' : '/'\n \n if (currentPath === '/') {\n newPath = '/' + file.name\n } else if (currentPath.endsWith(separator)) {\n newPath = currentPath + file.name\n } else {\n newPath = currentPath + separator + file.name\n }\n }\n \n onFolderOpen?.(file)\n onNavigate?.(newPath)\n }\n\n const handleSelectAll = (selected: boolean) => {\n onSelectAll?.(selected)\n }\n\n const handleSelectFile = (fileId: string, selected: boolean) => {\n onSelectFile?.(fileId, selected)\n }\n\n return (\n <div className={cn('flex flex-col h-full bg-ods-bg', className)}>\n <div className=\"flex-1 flex flex-col py-2 space-y-6 min-h-0\">\n <div className=\"flex flex-col justify-between gap-4 mb-4 md:flex-row\">\n <FileManagerBreadcrumb\n items={breadcrumbItems}\n onItemClick={handleBreadcrumbClick}\n />\n\n {showActions && (\n <FileManagerActionBar\n canPaste={canPaste}\n hasSelection={selectedFiles.length > 0}\n onNewFolder={() => onFileAction?.('new-folder')}\n onPaste={() => onFileAction?.('paste')}\n onCopy={() => onFileAction?.('copy')}\n onCut={() => onFileAction?.('cut')}\n onUpload={() => onFileAction?.('upload')}\n onSelectAll={() => handleSelectAll(true)}\n />\n )}\n </div>\n \n {showSearch && (\n <Input\n value={searchQuery}\n onChange={(e) => onSearch?.(e.target.value)}\n placeholder=\"Search...\"\n disabled={disableSearch}\n startAdornment={<SearchIcon />}\n loading={isSearching}\n />\n )}\n \n <div className=\"flex-1 min-h-0\">\n <FileManagerTable\n files={files}\n selectedFiles={selectedFiles}\n resultsCount={resultsCount || files.length}\n showCheckboxes={showCheckboxes}\n loading={loading}\n isSearchResult={!!searchQuery}\n onSelectFile={handleSelectFile}\n onSelectAll={handleSelectAll}\n onFileClick={onFileClick}\n onFolderOpen={handleFolderOpen}\n onFileAction={onFileAction}\n />\n </div>\n </div>\n </div>\n )\n}","'use client'\n\nimport React from 'react'\nimport { ChevronRight } from 'lucide-react'\nimport { cn } from '../../../utils/cn'\nimport type { FileManagerBreadcrumbProps } from './types'\n\nexport function FileManagerBreadcrumb({ \n items, \n onItemClick, \n className \n}: FileManagerBreadcrumbProps) {\n return (\n <nav className={cn(\n 'flex flex-wrap items-center gap-x-1 gap-y-1 text-sm break-words',\n className\n )}>\n {items.map((item, index) => (\n <React.Fragment key={item.path}>\n {index > 0 && (\n <ChevronRight className=\"h-4 w-4 text-ods-text-tertiary flex-shrink-0\" />\n )}\n <button\n onClick={() => onItemClick?.(item.path)}\n className={cn(\n 'shrink-0 px-1 py-0.5 rounded hover:bg-ods-bg-secondary transition-colors',\n 'text-ods-text-primary hover:text-ods-accent text-left break-all',\n index === items.length - 1 && 'font-medium'\n )}\n >\n {item.label}\n </button>\n </React.Fragment>\n ))}\n </nav>\n )\n}","'use client'\n\nimport React from 'react'\nimport { FolderPlus, Clipboard, Upload, CheckSquare, Copy, Scissors } from 'lucide-react'\nimport { Button } from '../button'\nimport { cn } from '../../../utils/cn'\nimport type { FileManagerActionBarProps } from './types'\n\nexport function FileManagerActionBar({ \n canPaste = false,\n hasSelection = false,\n onNewFolder,\n onPaste,\n onCopy,\n onCut,\n onUpload,\n onSelectAll,\n className \n}: FileManagerActionBarProps) {\n return (\n <div className={cn('flex items-center gap-4 flex-wrap md:justify-end', className)}>\n <Button\n variant=\"outline\"\n size=\"small-legacy\"\n onClick={onNewFolder}\n leftIcon={<FolderPlus className=\"h-4 w-4\" />}\n >\n New Folder\n </Button>\n\n <Button\n variant=\"outline\"\n size=\"small-legacy\"\n onClick={onCopy}\n disabled={!hasSelection}\n leftIcon={<Copy className=\"h-4 w-4\" />}\n >\n Copy\n </Button>\n\n <Button\n variant=\"outline\"\n size=\"small-legacy\"\n onClick={onCut}\n disabled={!hasSelection}\n leftIcon={<Scissors className=\"h-4 w-4\" />}\n >\n Cut\n </Button>\n\n <Button\n variant=\"outline\"\n size=\"small-legacy\"\n onClick={onPaste}\n disabled={!canPaste}\n leftIcon={<Clipboard className=\"h-4 w-4\" />}\n >\n Paste\n </Button>\n\n <Button\n variant=\"outline\"\n size=\"small-legacy\"\n onClick={onUpload}\n leftIcon={<Upload className=\"h-4 w-4\" />}\n >\n Upload\n </Button>\n\n <Button\n variant=\"outline\"\n size=\"small-legacy\"\n onClick={onSelectAll}\n leftIcon={<CheckSquare className=\"h-4 w-4\" />}\n >\n Select All\n </Button>\n </div>\n )\n}","'use client'\n\nimport React, { useLayoutEffect, useMemo, useRef, useState } from 'react'\nimport { Checkbox } from '../checkbox'\nimport { Skeleton } from '../skeleton'\nimport { cn } from '../../../utils/cn'\nimport { FileManagerTableRow } from './file-manager-table-row'\nimport { FileManagerEmpty } from './file-manager-empty'\nimport type { FileManagerTableProps } from './types'\n\nexport function FileManagerTable({ \n files,\n selectedFiles,\n showCheckboxes = true,\n loading = false,\n isSearchResult = false,\n onSelectFile,\n onSelectAll,\n onFileClick,\n onFolderOpen,\n onFileAction,\n className \n}: FileManagerTableProps) {\n const allSelected = useMemo(() => {\n return files.length > 0 && selectedFiles.length === files.length\n }, [files.length, selectedFiles.length])\n\n const someSelected = useMemo(() => {\n return selectedFiles.length > 0 && selectedFiles.length < files.length\n }, [files.length, selectedFiles.length])\n\n const containerRef = useRef<HTMLDivElement>(null)\n const [tableHeight, setTableHeight] = useState<number | null>(null)\n\n useLayoutEffect(() => {\n if (loading || files.length === 0) {\n setTableHeight(null)\n return\n }\n\n const handleResize = () => {\n const node = containerRef.current\n if (!node) return\n const rect = node.getBoundingClientRect()\n const availableHeight = window.innerHeight - rect.top\n setTableHeight(availableHeight > 0 ? availableHeight : null)\n }\n\n handleResize()\n\n window.addEventListener('resize', handleResize)\n window.addEventListener('scroll', handleResize, true)\n\n const resizeObserver = new ResizeObserver(handleResize)\n const parent = containerRef.current?.parentElement\n if (parent) {\n resizeObserver.observe(parent)\n } else if (containerRef.current) {\n resizeObserver.observe(containerRef.current)\n }\n\n return () => {\n window.removeEventListener('resize', handleResize)\n window.removeEventListener('scroll', handleResize, true)\n resizeObserver.disconnect()\n }\n }, [loading, files.length])\n\n const handleSelectAll = (checked: boolean) => {\n onSelectAll?.(checked)\n }\n\n if (loading) {\n const skeletonRows = 8\n \n return (\n <div className={cn('bg-ods-bg border border-ods-border rounded-lg flex flex-col', className)}>\n {/* Table header */}\n <div className=\"flex items-center h-12 px-4 bg-ods-bg-secondary border-b border-ods-border rounded-t-lg\">\n {showCheckboxes && (\n <div className=\"mr-4\">\n <Skeleton className=\"h-5 w-5 rounded\" />\n </div>\n )}\n \n <div className=\"flex items-center gap-3 flex-1 min-w-0 text-sm font-medium text-ods-text-secondary\">\n NAME\n </div>\n \n <div className=\"w-24 shrink-0 pr-4 text-sm font-medium text-ods-text-secondary\">\n SIZE\n </div>\n \n <div className=\"w-36 shrink-0 pl-4 text-sm font-medium text-ods-text-secondary\">\n EDITED\n </div>\n \n <div className=\"w-48 shrink-0 pl-4 flex justify-end\">\n {/* Space for action buttons */}\n </div>\n </div>\n \n {/* Skeleton rows */}\n <div className=\"divide-y divide-ods-border rounded-b-lg flex-1 overflow-auto\">\n {Array.from({ length: skeletonRows }).map((_, idx) => (\n <div key={idx} className=\"bg-ods-card group flex items-center h-16 px-4 border-ods-border\">\n {showCheckboxes && (\n <div className=\"mr-4\">\n <Skeleton className=\"h-5 w-5 rounded\" />\n </div>\n )}\n \n {/* File icon and name column */}\n <div className=\"flex items-center gap-3 flex-1 min-w-0\">\n <Skeleton className=\"h-6 w-6 rounded\" />\n <div className=\"flex flex-col min-w-0\">\n <Skeleton className=\"h-4 w-32\" />\n {isSearchResult && (\n <Skeleton className=\"h-3 w-48 mt-1\" />\n )}\n </div>\n </div>\n \n {/* Size column */}\n <div className=\"w-24 shrink-0 pr-4\">\n <Skeleton className=\"h-4 w-16\" />\n </div>\n \n {/* Modified date column */}\n <div className=\"w-36 shrink-0 pl-4\">\n <Skeleton className=\"h-4 w-24\" />\n </div>\n \n {/* Action buttons column */}\n <div className=\"w-48 shrink-0 pl-4 flex items-center justify-end gap-1\">\n <Skeleton className=\"h-8 w-8 rounded\" />\n <Skeleton className=\"h-8 w-8 rounded\" />\n </div>\n </div>\n ))}\n </div>\n </div>\n )\n }\n\n if (files.length === 0) {\n return <FileManagerEmpty />\n }\n\n return (\n <div\n ref={containerRef}\n className={cn('bg-ods-bg border border-ods-border rounded-lg flex flex-col', className)}\n style={tableHeight ? { height: `${tableHeight}px` } : undefined}\n >\n <div className=\"flex items-center h-12 px-4 bg-ods-bg-secondary border-b border-ods-border rounded-t-lg\">\n {showCheckboxes && (\n <div className=\"mr-4\">\n <Checkbox\n checked={allSelected || someSelected}\n onCheckedChange={handleSelectAll}\n className=\"h-5 w-5\"\n />\n </div>\n )}\n \n <div className=\"flex items-center gap-3 flex-1 min-w-0 text-sm font-medium text-ods-text-secondary\">\n NAME\n </div>\n \n <div className=\"w-24 shrink-0 pr-4 text-sm font-medium text-ods-text-secondary\">\n SIZE\n </div>\n \n <div className=\"w-36 shrink-0 pl-4 text-sm font-medium text-ods-text-secondary\">\n EDITED\n </div>\n \n <div className=\"w-48 shrink-0 pl-4 flex justify-end\">\n {/* Space for action buttons */}\n </div>\n </div>\n \n <div className=\"divide-y divide-ods-border rounded-b-lg flex-1 overflow-auto\">\n {files.map((file) => (\n <FileManagerTableRow\n key={file.id}\n file={file}\n isSelected={selectedFiles.includes(file.id)}\n showCheckbox={showCheckboxes}\n showPath={isSearchResult}\n onSelect={(selected) => onSelectFile?.(file.id, selected)}\n onClick={() => {\n if (isSearchResult) {\n onFileClick?.(file)\n } else if (file.type === 'folder') {\n onFolderOpen?.(file)\n }\n }}\n onDoubleClick={() => {\n if (file.type === 'folder' && !isSearchResult) {\n onFolderOpen?.(file)\n }\n }}\n onActionClick={(action) => onFileAction?.(action, file.id)}\n />\n ))}\n </div>\n </div>\n )\n}","'use client'\n\nimport React, { useState } from 'react'\nimport { ChevronRight, MoreHorizontal } from 'lucide-react'\nimport { Checkbox } from '../checkbox'\nimport { Button } from '../button'\nimport { cn } from '../../../utils/cn'\nimport { FileIcon } from './file-icon'\nimport { FileManagerContextMenu } from './file-manager-context-menu'\nimport type { FileManagerTableRowProps } from './types'\n\nexport function FileManagerTableRow({ \n file,\n isSelected = false,\n showCheckbox = true,\n showPath = false,\n onSelect,\n onClick,\n onDoubleClick,\n onContextMenu,\n onActionClick,\n className \n}: FileManagerTableRowProps) {\n const [contextMenuOpen, setContextMenuOpen] = useState(false)\n \n const handleRowClick = (e: React.MouseEvent) => {\n // Don't trigger row click if clicking on interactive elements\n if ((e.target as HTMLElement).closest('[data-no-row-click]')) {\n return\n }\n onClick?.()\n }\n\n const handleCheckboxChange = (checked: boolean) => {\n onSelect?.(checked)\n }\n\n const handleContextAction = (action: any) => {\n onActionClick?.(action)\n setContextMenuOpen(false)\n }\n\n const fileExtension = file.type === 'file' \n ? file.name.split('.').pop() \n : undefined\n\n return (\n <div\n className={cn(\n 'bg-ods-card group flex items-center h-16 px-4 border-ods-border',\n 'hover:bg-ods-bg-secondary transition-colors cursor-pointer',\n isSelected && 'bg-ods-bg-secondary',\n className\n )}\n onClick={handleRowClick}\n onDoubleClick={onDoubleClick}\n onContextMenu={(e) => {\n e.preventDefault()\n onContextMenu?.(e)\n }}\n >\n {showCheckbox && (\n <div className=\"mr-4\" data-no-row-click>\n <Checkbox\n checked={isSelected}\n onCheckedChange={handleCheckboxChange}\n className=\"h-5 w-5\"\n />\n </div>\n )}\n \n <div className=\"flex items-center gap-3 flex-1 min-w-0\">\n <FileIcon \n type={file.type} \n extension={fileExtension}\n size=\"md\" \n />\n <div className=\"flex flex-col min-w-0\">\n <span className=\"text-sm text-ods-text-primary truncate\" title={file.name}>\n {file.name}\n </span>\n {showPath && file.path && (\n <span className=\"text-xs text-ods-text-secondary truncate\" title={file.path}>\n {file.path}\n </span>\n )}\n </div>\n </div>\n \n <div className=\"w-24 shrink-0 pr-4 text-sm text-ods-text-secondary\">\n {file.size || ''}\n </div>\n \n <div className=\"w-36 shrink-0 pl-4 text-sm text-ods-text-secondary\">\n {file.modified}\n </div>\n \n <div className=\"w-48 shrink-0 pl-4 flex items-center justify-end gap-1\" data-no-row-click>\n <FileManagerContextMenu\n open={contextMenuOpen}\n onOpenChange={setContextMenuOpen}\n onAction={handleContextAction}\n fileType={file.type}\n trigger={\n <Button\n variant=\"transparent\"\n size=\"small-legacy\"\n className=\"h-8 w-8 p-0 opacity-0 group-hover:opacity-100 transition-opacity\"\n onClick={(e) => {\n e.stopPropagation()\n }}\n >\n <MoreHorizontal className=\"h-4 w-4\" />\n </Button>\n }\n />\n \n {file.type === 'folder' ? (\n <Button\n variant=\"transparent\"\n size=\"small-legacy\"\n className=\"h-8 w-8 p-0\"\n onClick={(e) => {\n e.stopPropagation()\n onDoubleClick?.()\n }}\n >\n <ChevronRight className=\"h-4 w-4\" />\n </Button>\n ) : (\n <div className=\"w-8\" /> /* Space to maintain alignment when no chevron */\n )}\n </div>\n </div>\n )\n}","'use client'\n\nimport React from 'react'\nimport { Folder, File, FileText, Image, FileVideo, FileAudio, FileCode, FileArchive } from 'lucide-react'\nimport { cn } from '../../../utils/cn'\nimport type { FileIconProps } from './types'\n\nconst sizeMap = {\n sm: 'h-4 w-4',\n md: 'h-5 w-5',\n lg: 'h-6 w-6'\n}\n\nconst getFileIcon = (extension?: string) => {\n if (!extension) return File\n \n const ext = extension.toLowerCase()\n \n // Document files\n if (['txt', 'doc', 'docx', 'pdf', 'rtf'].includes(ext)) return FileText\n \n // Image files\n if (['jpg', 'jpeg', 'png', 'gif', 'svg', 'webp', 'bmp'].includes(ext)) return Image\n \n // Video files\n if (['mp4', 'avi', 'mov', 'wmv', 'flv', 'mkv'].includes(ext)) return FileVideo\n \n // Audio files\n if (['mp3', 'wav', 'flac', 'aac', 'ogg', 'wma'].includes(ext)) return FileAudio\n \n // Code files\n if (['js', 'ts', 'jsx', 'tsx', 'py', 'java', 'c', 'cpp', 'cs', 'html', 'css', 'json', 'xml'].includes(ext)) return FileCode\n \n // Archive files\n if (['zip', 'rar', '7z', 'tar', 'gz', 'bz2'].includes(ext)) return FileArchive\n \n return File\n}\n\nexport function FileIcon({ type, extension, className, size = 'md' }: FileIconProps) {\n const Icon = type === 'folder' ? Folder : getFileIcon(extension)\n \n return (\n <Icon \n className={cn(\n sizeMap[size],\n type === 'folder' ? 'text-ods-accent' : 'text-ods-text-secondary',\n className\n )}\n />\n )\n}","'use client'\n\nimport React from 'react'\nimport { Download, Copy, Edit2, Scissors, Archive, Trash2, MoreHorizontal } from 'lucide-react'\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from '../dropdown-menu'\nimport { Button } from '../button'\nimport { cn } from '../../../utils/cn'\nimport type { FileManagerContextMenuProps } from './types'\n\nexport function FileManagerContextMenu({ \n open,\n onOpenChange,\n onAction,\n fileType = 'file',\n hasSelection = false,\n trigger,\n className \n}: FileManagerContextMenuProps) {\n const menuItems = [\n {\n action: 'download' as const,\n label: 'Download',\n icon: Download,\n show: fileType === 'file' || hasSelection\n },\n {\n action: 'copy' as const,\n label: 'Copy',\n icon: Copy,\n show: true\n },\n {\n action: 'rename' as const,\n label: 'Rename',\n icon: Edit2,\n show: !hasSelection\n },\n {\n action: 'cut' as const,\n label: 'Cut',\n icon: Scissors,\n show: true\n },\n {\n action: 'delete' as const,\n label: 'Delete',\n icon: Trash2,\n show: true,\n separator: true\n }\n ]\n\n const visibleItems = menuItems.filter(item => item.show)\n\n return (\n <DropdownMenu open={open} onOpenChange={onOpenChange}>\n <DropdownMenuTrigger asChild>\n {trigger || (\n <Button\n variant=\"transparent\"\n size=\"small-legacy\"\n className=\"h-8 w-8 p-0\"\n >\n <MoreHorizontal className=\"h-4 w-4\" />\n </Button>\n )}\n </DropdownMenuTrigger>\n <DropdownMenuContent \n align=\"end\" \n className={cn('w-56', className)}\n onClick={(e) => e.stopPropagation()}\n >\n {visibleItems.map((item, index) => (\n <React.Fragment key={item.action}>\n {item.separator && index > 0 && <DropdownMenuSeparator />}\n <DropdownMenuItem\n onClick={(e) => {\n e.stopPropagation()\n onAction(item.action)\n }}\n className=\"cursor-pointer\"\n >\n <item.icon className=\"mr-3 h-4 w-4\" />\n <span>{item.label}</span>\n </DropdownMenuItem>\n </React.Fragment>\n ))}\n </DropdownMenuContent>\n </DropdownMenu>\n )\n}","'use client'\n\nimport React from 'react'\nimport { FolderOpen } from 'lucide-react'\nimport { Button } from '../button'\nimport { cn } from '../../../utils/cn'\nimport type { FileManagerEmptyProps } from './types'\n\nexport function FileManagerEmpty({ \n message = 'No files or folders found',\n description = 'This folder is empty. Create a new folder or upload files to get started.',\n action,\n className \n}: FileManagerEmptyProps) {\n return (\n <div className={cn(\n 'flex flex-col items-center justify-center py-20 px-4',\n className\n )}>\n <div className=\"p-4 bg-ods-bg-secondary rounded-full mb-6\">\n <FolderOpen className=\"h-12 w-12 text-ods-text-tertiary\" />\n </div>\n \n <h3 className=\"text-lg font-medium text-ods-text-primary mb-2\">\n {message}\n </h3>\n \n <p className=\"text-sm text-ods-text-secondary text-center max-w-md mb-6\">\n {description}\n </p>\n \n {action && (\n <Button\n variant=\"accent\"\n size=\"small-legacy\"\n onClick={action.onClick}\n >\n {action.label}\n </Button>\n )}\n </div>\n )\n}","'use client'\n\nimport React from 'react'\nimport { Skeleton } from '../skeleton'\n\ninterface FileManagerSkeletonProps {\n rows?: number\n showSearch?: boolean\n showActions?: boolean\n}\n\nexport function FileManagerSkeleton({ \n rows = 8,\n showSearch = true,\n showActions = true\n}: FileManagerSkeletonProps) {\n const rowPlaceholders = Array.from({ length: rows })\n\n return (\n <div className=\"flex flex-col h-full bg-ods-bg\">\n <div className=\"flex-1 flex flex-col py-6 space-y-6 min-h-0\">\n {/* Breadcrumb and Action Bar */}\n <div className=\"flex flex-wrap items-start justify-between gap-4\">\n {/* Breadcrumb skeleton */}\n <div className=\"flex-1 min-w-0 flex items-center gap-2\">\n <Skeleton className=\"h-5 w-12\" />\n <Skeleton className=\"h-4 w-4 rounded-full\" />\n <Skeleton className=\"h-5 w-20\" />\n <Skeleton className=\"h-4 w-4 rounded-full\" />\n <Skeleton className=\"h-5 w-24\" />\n </div>\n \n {/* Action buttons skeleton */}\n {showActions && (\n <div className=\"flex-shrink-0 flex items-center gap-2\">\n <Skeleton className=\"h-9 w-24\" />\n <Skeleton className=\"h-9 w-20\" />\n <Skeleton className=\"h-9 w-20\" />\n <Skeleton className=\"h-9 w-28\" />\n </div>\n )}\n </div>\n \n {/* Search bar skeleton */}\n {showSearch && (\n <Skeleton className=\"h-10 w-full rounded-lg\" />\n )}\n \n {/* Table skeleton */}\n <div className=\"flex-1 min-h-0\">\n <div className=\"bg-ods-bg border border-ods-border rounded-lg flex flex-col\">\n {/* Table header */}\n <div className=\"flex items-center h-12 px-4 bg-ods-bg-secondary border-b border-ods-border rounded-t-lg\">\n {/* Checkbox */}\n <div className=\"mr-4\">\n <Skeleton className=\"h-5 w-5 rounded\" />\n </div>\n \n {/* Column headers */}\n <div className=\"flex items-center gap-3 flex-1 min-w-0 text-sm font-medium text-ods-text-secondary\">\n NAME\n </div>\n \n <div className=\"w-24 shrink-0 pr-4 text-sm font-medium text-ods-text-secondary\">\n SIZE\n </div>\n \n <div className=\"w-36 shrink-0 pl-4 text-sm font-medium text-ods-text-secondary\">\n EDITED\n </div>\n \n <div className=\"w-48 shrink-0 pl-4 flex justify-end\">\n {/* Empty space for actions */}\n </div>\n </div>\n \n {/* Table rows */}\n <div className=\"divide-y divide-ods-border rounded-b-lg flex-1 overflow-auto min-h-0\">\n {rowPlaceholders.map((_, idx) => (\n <div key={idx} className=\"bg-ods-card flex items-center h-16 px-4 border-ods-border\">\n {/* Checkbox */}\n <div className=\"mr-4\">\n <Skeleton className=\"h-5 w-5 rounded\" />\n </div>\n \n {/* File icon and name */}\n <div className=\"flex items-center gap-3 flex-1 min-w-0\">\n <Skeleton className=\"h-6 w-6 rounded\" />\n <div className=\"flex flex-col min-w-0\">\n <Skeleton className=\"h-4 w-32\" />\n </div>\n </div>\n \n {/* Size */}\n <div className=\"w-24 shrink-0 pr-4\">\n <Skeleton className=\"h-4 w-16\" />\n </div>\n \n {/* Modified date */}\n <div className=\"w-36 shrink-0 pl-4\">\n <Skeleton className=\"h-4 w-24\" />\n </div>\n \n {/* Action buttons */}\n <div className=\"w-48 shrink-0 pl-4 flex items-center justify-end gap-1\">\n <Skeleton className=\"h-8 w-8 rounded\" />\n <Skeleton className=\"h-8 w-8 rounded\" />\n </div>\n </div>\n ))}\n </div>\n </div>\n </div>\n </div>\n </div>\n )\n}\n\n"],"mappings":"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","names":["useMemo","jsx","jsxs","useState","ChevronRight","MoreHorizontal","jsx","React","Copy","Scissors","jsx","jsxs","Copy","Scissors","React","jsx","jsxs","MoreHorizontal","ChevronRight","jsx","jsxs","jsx","jsxs","useState","jsx","jsxs","useMemo","jsx","jsxs"]}
1
+ {"version":3,"sources":["../../../../src/components/ui/file-manager/file-manager.tsx","../../../../src/components/ui/file-manager/file-manager-breadcrumb.tsx","../../../../src/components/ui/file-manager/file-manager-action-bar.tsx","../../../../src/components/ui/file-manager/file-manager-table.tsx","../../../../src/components/ui/file-manager/file-manager-table-row.tsx","../../../../src/components/ui/file-manager/file-icon.tsx","../../../../src/components/ui/file-manager/file-manager-context-menu.tsx","../../../../src/components/ui/file-manager/file-manager-empty.tsx","../../../../src/components/ui/file-manager/file-manager-skeleton.tsx"],"sourcesContent":["'use client'\n\nimport React, { useMemo } from 'react'\nimport { cn } from '../../../utils/cn'\nimport { Input } from '../input'\nimport { SearchIcon } from '../../icons-v2-generated/interface/search-icon'\nimport { FileManagerBreadcrumb } from './file-manager-breadcrumb'\nimport { FileManagerActionBar } from './file-manager-action-bar'\nimport { FileManagerTable } from './file-manager-table'\nimport type { FileManagerProps, BreadcrumbItem } from './types'\nimport { Loader2 } from 'lucide-react'\n\nexport function FileManager({ \n files,\n currentPath,\n selectedFiles,\n searchQuery,\n loading = false,\n isSearching,\n showCheckboxes = true,\n showSearch = true,\n showActions = true,\n canPaste = false,\n disableSearch = false,\n resultsCount,\n onNavigate,\n onBreadcrumbClick,\n onSearch,\n onSelectFile,\n onSelectAll,\n onFileAction,\n onFileClick,\n onFolderOpen,\n className \n}: FileManagerProps) {\n const breadcrumbItems = useMemo((): BreadcrumbItem[] => {\n const items: BreadcrumbItem[] = []\n \n items.push({ label: 'Root', path: '' })\n \n if (!currentPath || currentPath === '' || currentPath === '/') {\n return items\n }\n \n const isWindowsPath = currentPath.includes('\\\\') || /^[A-Za-z]:/.test(currentPath)\n const separator = isWindowsPath ? '\\\\' : '/'\n \n const parts = currentPath.split(separator).filter(Boolean)\n \n let startIndex = 0\n if (isWindowsPath && parts.length > 0) {\n const driveMatch = parts[0].match(/^([A-Za-z]:)/)\n if (driveMatch) {\n items.push({\n label: driveMatch[1],\n path: driveMatch[1] + separator\n })\n if (parts[0] === driveMatch[1]) {\n startIndex = 1\n } else {\n parts[0] = parts[0].substring(driveMatch[1].length)\n }\n }\n }\n \n let accumulatedPath = ''\n if (isWindowsPath && items.length > 1) {\n accumulatedPath = items[items.length - 1].path\n }\n \n for (let i = startIndex; i < parts.length; i++) {\n const part = parts[i]\n if (!part) continue\n \n if (isWindowsPath) {\n accumulatedPath = accumulatedPath.endsWith(separator) \n ? accumulatedPath + part \n : accumulatedPath + separator + part\n } else {\n accumulatedPath = accumulatedPath === '' || accumulatedPath === '/'\n ? '/' + part \n : accumulatedPath + '/' + part\n }\n \n items.push({\n label: part,\n path: accumulatedPath\n })\n }\n \n return items\n }, [currentPath])\n\n const handleBreadcrumbClick = (path: string) => {\n onBreadcrumbClick?.(path)\n onNavigate?.(path)\n }\n\n const handleFolderOpen = (file: any) => {\n let newPath: string\n \n if (!currentPath || currentPath === '') {\n if (file.name && /^[A-Za-z]:/.test(file.name)) {\n newPath = file.name + (file.name.endsWith('\\\\') ? '' : '\\\\')\n } else {\n newPath = file.name\n }\n } else {\n const separator = currentPath.includes('\\\\') ? '\\\\' : '/'\n \n if (currentPath === '/') {\n newPath = '/' + file.name\n } else if (currentPath.endsWith(separator)) {\n newPath = currentPath + file.name\n } else {\n newPath = currentPath + separator + file.name\n }\n }\n \n onFolderOpen?.(file)\n onNavigate?.(newPath)\n }\n\n const handleSelectAll = (selected: boolean) => {\n onSelectAll?.(selected)\n }\n\n const handleSelectFile = (fileId: string, selected: boolean) => {\n onSelectFile?.(fileId, selected)\n }\n\n return (\n <div className={cn('flex flex-col h-full bg-ods-bg', className)}>\n <div className=\"flex-1 flex flex-col py-2 space-y-6 min-h-0\">\n <div className=\"flex flex-col justify-between gap-4 mb-4 md:flex-row\">\n <FileManagerBreadcrumb\n items={breadcrumbItems}\n onItemClick={handleBreadcrumbClick}\n />\n\n {showActions && (\n <FileManagerActionBar\n canPaste={canPaste}\n hasSelection={selectedFiles.length > 0}\n onNewFolder={() => onFileAction?.('new-folder')}\n onPaste={() => onFileAction?.('paste')}\n onCopy={() => onFileAction?.('copy')}\n onCut={() => onFileAction?.('cut')}\n onUpload={() => onFileAction?.('upload')}\n onSelectAll={() => handleSelectAll(true)}\n />\n )}\n </div>\n \n {showSearch && (\n <Input\n value={searchQuery}\n onChange={(e) => onSearch?.(e.target.value)}\n placeholder=\"Search...\"\n disabled={disableSearch}\n startAdornment={<SearchIcon />}\n loading={isSearching}\n />\n )}\n \n <div className=\"flex-1 min-h-0\">\n <FileManagerTable\n files={files}\n selectedFiles={selectedFiles}\n resultsCount={resultsCount || files.length}\n showCheckboxes={showCheckboxes}\n loading={loading}\n isSearchResult={!!searchQuery}\n onSelectFile={handleSelectFile}\n onSelectAll={handleSelectAll}\n onFileClick={onFileClick}\n onFolderOpen={handleFolderOpen}\n onFileAction={onFileAction}\n />\n </div>\n </div>\n </div>\n )\n}","'use client'\n\nimport React from 'react'\nimport { ChevronRight } from 'lucide-react'\nimport { cn } from '../../../utils/cn'\nimport type { FileManagerBreadcrumbProps } from './types'\n\nexport function FileManagerBreadcrumb({ \n items, \n onItemClick, \n className \n}: FileManagerBreadcrumbProps) {\n return (\n <nav className={cn(\n 'flex flex-wrap items-center gap-x-1 gap-y-1 text-sm break-words',\n className\n )}>\n {items.map((item, index) => (\n <React.Fragment key={item.path}>\n {index > 0 && (\n <ChevronRight className=\"h-4 w-4 text-ods-text-tertiary flex-shrink-0\" />\n )}\n <button\n onClick={() => onItemClick?.(item.path)}\n className={cn(\n 'shrink-0 px-1 py-0.5 rounded hover:bg-ods-bg-secondary transition-colors',\n 'text-ods-text-primary hover:text-ods-accent text-left break-all',\n index === items.length - 1 && 'font-medium'\n )}\n >\n {item.label}\n </button>\n </React.Fragment>\n ))}\n </nav>\n )\n}","'use client'\n\nimport React from 'react'\nimport { FolderPlus, Clipboard, Upload, CheckSquare, Copy, Scissors } from 'lucide-react'\nimport { Button } from '../button'\nimport { cn } from '../../../utils/cn'\nimport type { FileManagerActionBarProps } from './types'\n\nexport function FileManagerActionBar({ \n canPaste = false,\n hasSelection = false,\n onNewFolder,\n onPaste,\n onCopy,\n onCut,\n onUpload,\n onSelectAll,\n className \n}: FileManagerActionBarProps) {\n return (\n <div className={cn('flex items-center gap-4 flex-wrap md:justify-end', className)}>\n <Button\n variant=\"outline\"\n size=\"small-legacy\"\n onClick={onNewFolder}\n leftIcon={<FolderPlus className=\"h-4 w-4\" />}\n >\n New Folder\n </Button>\n\n <Button\n variant=\"outline\"\n size=\"small-legacy\"\n onClick={onCopy}\n disabled={!hasSelection}\n leftIcon={<Copy className=\"h-4 w-4\" />}\n >\n Copy\n </Button>\n\n <Button\n variant=\"outline\"\n size=\"small-legacy\"\n onClick={onCut}\n disabled={!hasSelection}\n leftIcon={<Scissors className=\"h-4 w-4\" />}\n >\n Cut\n </Button>\n\n <Button\n variant=\"outline\"\n size=\"small-legacy\"\n onClick={onPaste}\n disabled={!canPaste}\n leftIcon={<Clipboard className=\"h-4 w-4\" />}\n >\n Paste\n </Button>\n\n <Button\n variant=\"outline\"\n size=\"small-legacy\"\n onClick={onUpload}\n leftIcon={<Upload className=\"h-4 w-4\" />}\n >\n Upload\n </Button>\n\n <Button\n variant=\"outline\"\n size=\"small-legacy\"\n onClick={onSelectAll}\n leftIcon={<CheckSquare className=\"h-4 w-4\" />}\n >\n Select All\n </Button>\n </div>\n )\n}","'use client'\n\nimport React, { useLayoutEffect, useMemo, useRef, useState } from 'react'\nimport { Checkbox } from '../checkbox'\nimport { Skeleton } from '../skeleton'\nimport { cn } from '../../../utils/cn'\nimport { FileManagerTableRow } from './file-manager-table-row'\nimport { FileManagerEmpty } from './file-manager-empty'\nimport type { FileManagerTableProps } from './types'\n\nexport function FileManagerTable({ \n files,\n selectedFiles,\n showCheckboxes = true,\n loading = false,\n isSearchResult = false,\n onSelectFile,\n onSelectAll,\n onFileClick,\n onFolderOpen,\n onFileAction,\n className \n}: FileManagerTableProps) {\n const allSelected = useMemo(() => {\n return files.length > 0 && selectedFiles.length === files.length\n }, [files.length, selectedFiles.length])\n\n const someSelected = useMemo(() => {\n return selectedFiles.length > 0 && selectedFiles.length < files.length\n }, [files.length, selectedFiles.length])\n\n const containerRef = useRef<HTMLDivElement>(null)\n const [tableHeight, setTableHeight] = useState<number | null>(null)\n\n useLayoutEffect(() => {\n if (loading || files.length === 0) {\n setTableHeight(null)\n return\n }\n\n const handleResize = () => {\n const node = containerRef.current\n if (!node) return\n const rect = node.getBoundingClientRect()\n const availableHeight = window.innerHeight - rect.top\n setTableHeight(availableHeight > 0 ? availableHeight : null)\n }\n\n handleResize()\n\n window.addEventListener('resize', handleResize)\n window.addEventListener('scroll', handleResize, true)\n\n const resizeObserver = new ResizeObserver(handleResize)\n const parent = containerRef.current?.parentElement\n if (parent) {\n resizeObserver.observe(parent)\n } else if (containerRef.current) {\n resizeObserver.observe(containerRef.current)\n }\n\n return () => {\n window.removeEventListener('resize', handleResize)\n window.removeEventListener('scroll', handleResize, true)\n resizeObserver.disconnect()\n }\n }, [loading, files.length])\n\n const handleSelectAll = (checked: boolean) => {\n onSelectAll?.(checked)\n }\n\n if (loading) {\n const skeletonRows = 8\n \n return (\n <div className={cn('bg-ods-bg border border-ods-border rounded-lg flex flex-col', className)}>\n {/* Table header */}\n <div className=\"flex items-center h-12 px-4 bg-ods-bg-secondary border-b border-ods-border rounded-t-lg\">\n {showCheckboxes && (\n <div className=\"mr-4\">\n <Skeleton className=\"h-5 w-5 rounded\" />\n </div>\n )}\n \n <div className=\"flex items-center gap-3 flex-1 min-w-0 text-sm font-medium text-ods-text-secondary\">\n NAME\n </div>\n \n <div className=\"w-24 shrink-0 pr-4 text-sm font-medium text-ods-text-secondary\">\n SIZE\n </div>\n \n <div className=\"w-36 shrink-0 pl-4 text-sm font-medium text-ods-text-secondary\">\n EDITED\n </div>\n \n <div className=\"w-48 shrink-0 pl-4 flex justify-end\">\n {/* Space for action buttons */}\n </div>\n </div>\n \n {/* Skeleton rows */}\n <div className=\"divide-y divide-ods-border rounded-b-lg flex-1 overflow-auto\">\n {Array.from({ length: skeletonRows }).map((_, idx) => (\n <div key={idx} className=\"bg-ods-card group flex items-center h-16 px-4 border-ods-border\">\n {showCheckboxes && (\n <div className=\"mr-4\">\n <Skeleton className=\"h-5 w-5 rounded\" />\n </div>\n )}\n \n {/* File icon and name column */}\n <div className=\"flex items-center gap-3 flex-1 min-w-0\">\n <Skeleton className=\"h-6 w-6 rounded\" />\n <div className=\"flex flex-col min-w-0\">\n <Skeleton className=\"h-4 w-32\" />\n {isSearchResult && (\n <Skeleton className=\"h-3 w-48 mt-1\" />\n )}\n </div>\n </div>\n \n {/* Size column */}\n <div className=\"w-24 shrink-0 pr-4\">\n <Skeleton className=\"h-4 w-16\" />\n </div>\n \n {/* Modified date column */}\n <div className=\"w-36 shrink-0 pl-4\">\n <Skeleton className=\"h-4 w-24\" />\n </div>\n \n {/* Action buttons column */}\n <div className=\"w-48 shrink-0 pl-4 flex items-center justify-end gap-1\">\n <Skeleton className=\"h-8 w-8 rounded\" />\n <Skeleton className=\"h-8 w-8 rounded\" />\n </div>\n </div>\n ))}\n </div>\n </div>\n )\n }\n\n if (files.length === 0) {\n return <FileManagerEmpty />\n }\n\n return (\n <div\n ref={containerRef}\n className={cn('bg-ods-bg border border-ods-border rounded-lg flex flex-col', className)}\n style={tableHeight ? { height: `${tableHeight}px` } : undefined}\n >\n <div className=\"flex items-center h-12 px-4 bg-ods-bg-secondary border-b border-ods-border rounded-t-lg\">\n {showCheckboxes && (\n <div className=\"mr-4\">\n <Checkbox\n checked={allSelected || someSelected}\n onCheckedChange={handleSelectAll}\n className=\"h-5 w-5\"\n />\n </div>\n )}\n \n <div className=\"flex items-center gap-3 flex-1 min-w-0 text-sm font-medium text-ods-text-secondary\">\n NAME\n </div>\n \n <div className=\"w-24 shrink-0 pr-4 text-sm font-medium text-ods-text-secondary\">\n SIZE\n </div>\n \n <div className=\"w-36 shrink-0 pl-4 text-sm font-medium text-ods-text-secondary\">\n EDITED\n </div>\n \n <div className=\"w-48 shrink-0 pl-4 flex justify-end\">\n {/* Space for action buttons */}\n </div>\n </div>\n \n <div className=\"divide-y divide-ods-border rounded-b-lg flex-1 overflow-auto\">\n {files.map((file) => (\n <FileManagerTableRow\n key={file.id}\n file={file}\n isSelected={selectedFiles.includes(file.id)}\n showCheckbox={showCheckboxes}\n showPath={isSearchResult}\n onSelect={(selected) => onSelectFile?.(file.id, selected)}\n onClick={() => {\n if (isSearchResult) {\n onFileClick?.(file)\n } else if (file.type === 'folder') {\n onFolderOpen?.(file)\n }\n }}\n onDoubleClick={() => {\n if (file.type === 'folder' && !isSearchResult) {\n onFolderOpen?.(file)\n }\n }}\n onActionClick={(action) => onFileAction?.(action, file.id)}\n />\n ))}\n </div>\n </div>\n )\n}","'use client'\n\nimport React, { useState } from 'react'\nimport { ChevronRight, MoreHorizontal } from 'lucide-react'\nimport { Checkbox } from '../checkbox'\nimport { Button } from '../button'\nimport { cn } from '../../../utils/cn'\nimport { FileIcon } from './file-icon'\nimport { FileManagerContextMenu } from './file-manager-context-menu'\nimport type { FileManagerTableRowProps } from './types'\n\nexport function FileManagerTableRow({ \n file,\n isSelected = false,\n showCheckbox = true,\n showPath = false,\n onSelect,\n onClick,\n onDoubleClick,\n onContextMenu,\n onActionClick,\n className \n}: FileManagerTableRowProps) {\n const [contextMenuOpen, setContextMenuOpen] = useState(false)\n \n const handleRowClick = (e: React.MouseEvent) => {\n // Don't trigger row click if clicking on interactive elements\n if ((e.target as HTMLElement).closest('[data-no-row-click]')) {\n return\n }\n onClick?.()\n }\n\n const handleCheckboxChange = (checked: boolean) => {\n onSelect?.(checked)\n }\n\n const handleContextAction = (action: any) => {\n onActionClick?.(action)\n setContextMenuOpen(false)\n }\n\n const fileExtension = file.type === 'file' \n ? file.name.split('.').pop() \n : undefined\n\n return (\n <div\n className={cn(\n 'bg-ods-card group flex items-center h-16 px-4 border-ods-border',\n 'hover:bg-ods-bg-secondary transition-colors cursor-pointer',\n isSelected && 'bg-ods-bg-secondary',\n className\n )}\n onClick={handleRowClick}\n onDoubleClick={onDoubleClick}\n onContextMenu={(e) => {\n e.preventDefault()\n onContextMenu?.(e)\n }}\n >\n {showCheckbox && (\n <div className=\"mr-4\" data-no-row-click>\n <Checkbox\n checked={isSelected}\n onCheckedChange={handleCheckboxChange}\n className=\"h-5 w-5\"\n />\n </div>\n )}\n \n <div className=\"flex items-center gap-3 flex-1 min-w-0\">\n <FileIcon \n type={file.type} \n extension={fileExtension}\n size=\"md\" \n />\n <div className=\"flex flex-col min-w-0\">\n <span className=\"text-sm text-ods-text-primary truncate\" title={file.name}>\n {file.name}\n </span>\n {showPath && file.path && (\n <span className=\"text-xs text-ods-text-secondary truncate\" title={file.path}>\n {file.path}\n </span>\n )}\n </div>\n </div>\n \n <div className=\"w-24 shrink-0 pr-4 text-sm text-ods-text-secondary\">\n {file.size || ''}\n </div>\n \n <div className=\"w-36 shrink-0 pl-4 text-sm text-ods-text-secondary\">\n {file.modified}\n </div>\n \n <div className=\"w-48 shrink-0 pl-4 flex items-center justify-end gap-1\" data-no-row-click>\n <FileManagerContextMenu\n open={contextMenuOpen}\n onOpenChange={setContextMenuOpen}\n onAction={handleContextAction}\n fileType={file.type}\n trigger={\n <Button\n variant=\"transparent\"\n size=\"small-legacy\"\n className=\"h-8 w-8 p-0 opacity-0 group-hover:opacity-100 transition-opacity\"\n onClick={(e) => {\n e.stopPropagation()\n }}\n >\n <MoreHorizontal className=\"h-4 w-4\" />\n </Button>\n }\n />\n \n {file.type === 'folder' ? (\n <Button\n variant=\"transparent\"\n size=\"small-legacy\"\n className=\"h-8 w-8 p-0\"\n onClick={(e) => {\n e.stopPropagation()\n onDoubleClick?.()\n }}\n >\n <ChevronRight className=\"h-4 w-4\" />\n </Button>\n ) : (\n <div className=\"w-8\" /> /* Space to maintain alignment when no chevron */\n )}\n </div>\n </div>\n )\n}","'use client'\n\nimport React from 'react'\nimport { Folder, File, FileText, Image, FileVideo, FileAudio, FileCode, FileArchive } from 'lucide-react'\nimport { cn } from '../../../utils/cn'\nimport type { FileIconProps } from './types'\n\nconst sizeMap = {\n sm: 'h-4 w-4',\n md: 'h-5 w-5',\n lg: 'h-6 w-6'\n}\n\nconst getFileIcon = (extension?: string) => {\n if (!extension) return File\n \n const ext = extension.toLowerCase()\n \n // Document files\n if (['txt', 'doc', 'docx', 'pdf', 'rtf'].includes(ext)) return FileText\n \n // Image files\n if (['jpg', 'jpeg', 'png', 'gif', 'svg', 'webp', 'bmp'].includes(ext)) return Image\n \n // Video files\n if (['mp4', 'avi', 'mov', 'wmv', 'flv', 'mkv'].includes(ext)) return FileVideo\n \n // Audio files\n if (['mp3', 'wav', 'flac', 'aac', 'ogg', 'wma'].includes(ext)) return FileAudio\n \n // Code files\n if (['js', 'ts', 'jsx', 'tsx', 'py', 'java', 'c', 'cpp', 'cs', 'html', 'css', 'json', 'xml'].includes(ext)) return FileCode\n \n // Archive files\n if (['zip', 'rar', '7z', 'tar', 'gz', 'bz2'].includes(ext)) return FileArchive\n \n return File\n}\n\nexport function FileIcon({ type, extension, className, size = 'md' }: FileIconProps) {\n const Icon = type === 'folder' ? Folder : getFileIcon(extension)\n \n return (\n <Icon \n className={cn(\n sizeMap[size],\n type === 'folder' ? 'text-ods-accent' : 'text-ods-text-secondary',\n className\n )}\n />\n )\n}","'use client'\n\nimport React from 'react'\nimport { Download, Copy, Edit2, Scissors, Archive, Trash2, MoreHorizontal } from 'lucide-react'\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from '../dropdown-menu'\nimport { Button } from '../button'\nimport { cn } from '../../../utils/cn'\nimport type { FileManagerContextMenuProps } from './types'\n\nexport function FileManagerContextMenu({ \n open,\n onOpenChange,\n onAction,\n fileType = 'file',\n hasSelection = false,\n trigger,\n className \n}: FileManagerContextMenuProps) {\n const menuItems = [\n {\n action: 'download' as const,\n label: 'Download',\n icon: Download,\n show: fileType === 'file' || hasSelection\n },\n {\n action: 'copy' as const,\n label: 'Copy',\n icon: Copy,\n show: true\n },\n {\n action: 'rename' as const,\n label: 'Rename',\n icon: Edit2,\n show: !hasSelection\n },\n {\n action: 'cut' as const,\n label: 'Cut',\n icon: Scissors,\n show: true\n },\n {\n action: 'delete' as const,\n label: 'Delete',\n icon: Trash2,\n show: true,\n separator: true\n }\n ]\n\n const visibleItems = menuItems.filter(item => item.show)\n\n return (\n <DropdownMenu open={open} onOpenChange={onOpenChange}>\n <DropdownMenuTrigger asChild>\n {trigger || (\n <Button\n variant=\"transparent\"\n size=\"small-legacy\"\n className=\"h-8 w-8 p-0\"\n >\n <MoreHorizontal className=\"h-4 w-4\" />\n </Button>\n )}\n </DropdownMenuTrigger>\n <DropdownMenuContent \n align=\"end\" \n className={cn('w-56', className)}\n onClick={(e) => e.stopPropagation()}\n >\n {visibleItems.map((item, index) => (\n <React.Fragment key={item.action}>\n {item.separator && index > 0 && <DropdownMenuSeparator />}\n <DropdownMenuItem\n onClick={(e) => {\n e.stopPropagation()\n onAction(item.action)\n }}\n className=\"cursor-pointer\"\n >\n <item.icon className=\"mr-3 h-4 w-4\" />\n <span>{item.label}</span>\n </DropdownMenuItem>\n </React.Fragment>\n ))}\n </DropdownMenuContent>\n </DropdownMenu>\n )\n}","'use client'\n\nimport React from 'react'\nimport { FolderOpen } from 'lucide-react'\nimport { Button } from '../button'\nimport { cn } from '../../../utils/cn'\nimport type { FileManagerEmptyProps } from './types'\n\nexport function FileManagerEmpty({ \n message = 'No files or folders found',\n description = 'This folder is empty. Create a new folder or upload files to get started.',\n action,\n className \n}: FileManagerEmptyProps) {\n return (\n <div className={cn(\n 'flex flex-col items-center justify-center py-20 px-4',\n className\n )}>\n <div className=\"p-4 bg-ods-bg-secondary rounded-full mb-6\">\n <FolderOpen className=\"h-12 w-12 text-ods-text-tertiary\" />\n </div>\n \n <h3 className=\"text-lg font-medium text-ods-text-primary mb-2\">\n {message}\n </h3>\n \n <p className=\"text-sm text-ods-text-secondary text-center max-w-md mb-6\">\n {description}\n </p>\n \n {action && (\n <Button\n variant=\"accent\"\n size=\"small-legacy\"\n onClick={action.onClick}\n >\n {action.label}\n </Button>\n )}\n </div>\n )\n}","'use client'\n\nimport React from 'react'\nimport { Skeleton } from '../skeleton'\n\ninterface FileManagerSkeletonProps {\n rows?: number\n showSearch?: boolean\n showActions?: boolean\n}\n\nexport function FileManagerSkeleton({ \n rows = 8,\n showSearch = true,\n showActions = true\n}: FileManagerSkeletonProps) {\n const rowPlaceholders = Array.from({ length: rows })\n\n return (\n <div className=\"flex flex-col h-full bg-ods-bg\">\n <div className=\"flex-1 flex flex-col py-6 space-y-6 min-h-0\">\n {/* Breadcrumb and Action Bar */}\n <div className=\"flex flex-wrap items-start justify-between gap-4\">\n {/* Breadcrumb skeleton */}\n <div className=\"flex-1 min-w-0 flex items-center gap-2\">\n <Skeleton className=\"h-5 w-12\" />\n <Skeleton className=\"h-4 w-4 rounded-full\" />\n <Skeleton className=\"h-5 w-20\" />\n <Skeleton className=\"h-4 w-4 rounded-full\" />\n <Skeleton className=\"h-5 w-24\" />\n </div>\n \n {/* Action buttons skeleton */}\n {showActions && (\n <div className=\"flex-shrink-0 flex items-center gap-2\">\n <Skeleton className=\"h-9 w-24\" />\n <Skeleton className=\"h-9 w-20\" />\n <Skeleton className=\"h-9 w-20\" />\n <Skeleton className=\"h-9 w-28\" />\n </div>\n )}\n </div>\n \n {/* Search bar skeleton */}\n {showSearch && (\n <Skeleton className=\"h-10 w-full rounded-lg\" />\n )}\n \n {/* Table skeleton */}\n <div className=\"flex-1 min-h-0\">\n <div className=\"bg-ods-bg border border-ods-border rounded-lg flex flex-col\">\n {/* Table header */}\n <div className=\"flex items-center h-12 px-4 bg-ods-bg-secondary border-b border-ods-border rounded-t-lg\">\n {/* Checkbox */}\n <div className=\"mr-4\">\n <Skeleton className=\"h-5 w-5 rounded\" />\n </div>\n \n {/* Column headers */}\n <div className=\"flex items-center gap-3 flex-1 min-w-0 text-sm font-medium text-ods-text-secondary\">\n NAME\n </div>\n \n <div className=\"w-24 shrink-0 pr-4 text-sm font-medium text-ods-text-secondary\">\n SIZE\n </div>\n \n <div className=\"w-36 shrink-0 pl-4 text-sm font-medium text-ods-text-secondary\">\n EDITED\n </div>\n \n <div className=\"w-48 shrink-0 pl-4 flex justify-end\">\n {/* Empty space for actions */}\n </div>\n </div>\n \n {/* Table rows */}\n <div className=\"divide-y divide-ods-border rounded-b-lg flex-1 overflow-auto min-h-0\">\n {rowPlaceholders.map((_, idx) => (\n <div key={idx} className=\"bg-ods-card flex items-center h-16 px-4 border-ods-border\">\n {/* Checkbox */}\n <div className=\"mr-4\">\n <Skeleton className=\"h-5 w-5 rounded\" />\n </div>\n \n {/* File icon and name */}\n <div className=\"flex items-center gap-3 flex-1 min-w-0\">\n <Skeleton className=\"h-6 w-6 rounded\" />\n <div className=\"flex flex-col min-w-0\">\n <Skeleton className=\"h-4 w-32\" />\n </div>\n </div>\n \n {/* Size */}\n <div className=\"w-24 shrink-0 pr-4\">\n <Skeleton className=\"h-4 w-16\" />\n </div>\n \n {/* Modified date */}\n <div className=\"w-36 shrink-0 pl-4\">\n <Skeleton className=\"h-4 w-24\" />\n </div>\n \n {/* Action buttons */}\n <div className=\"w-48 shrink-0 pl-4 flex items-center justify-end gap-1\">\n <Skeleton className=\"h-8 w-8 rounded\" />\n <Skeleton className=\"h-8 w-8 rounded\" />\n </div>\n </div>\n ))}\n </div>\n </div>\n </div>\n </div>\n </div>\n )\n}\n\n"],"mappings":"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","names":["useMemo","jsx","jsxs","useState","ChevronRight","MoreHorizontal","jsx","React","Copy","Scissors","jsx","jsxs","Copy","Scissors","React","jsx","jsxs","MoreHorizontal","ChevronRight","jsx","jsxs","jsx","jsxs","useState","jsx","jsxs","useMemo","jsx","jsxs"]}
@@ -0,0 +1,66 @@
1
+ import React from 'react';
2
+ export interface HoverDropdownItem {
3
+ label: string;
4
+ icon?: React.ReactNode;
5
+ href?: string;
6
+ /**
7
+ * Target platform for the row's link — threaded through to the caller's
8
+ * `renderAnchor` slot, which decides how to route (same tab vs new tab,
9
+ * embed-aware open, etc.). Plain UI dropdown — no internal click rule.
10
+ */
11
+ targetPlatform?: string | null;
12
+ /**
13
+ * In-app doc-tree path for `markdown` / `data_room_doc` refs. Threaded
14
+ * through to the caller's `renderAnchor` so chat consumers can wire it
15
+ * into `handleChatNavClick` and trigger an in-page doc-tree swap
16
+ * (parity with source chips and inline cards).
17
+ */
18
+ path?: string | null;
19
+ /**
20
+ * @deprecated Pass `targetPlatform` to the consumer's `renderAnchor` and
21
+ * let it decide. Kept on the item shape for caller-side decisions but
22
+ * unused by this component.
23
+ */
24
+ alwaysNewTab?: boolean;
25
+ onClick?: () => void;
26
+ /** Optional secondary action rendered as a small icon-button at the
27
+ * right edge of the row. Independent of the row's primary click target
28
+ * — clicking the secondary button does NOT navigate. */
29
+ secondaryAction?: {
30
+ icon: React.ReactNode;
31
+ label: string;
32
+ onClick: () => void;
33
+ };
34
+ }
35
+ export interface HoverDropdownRenderAnchorArgs {
36
+ href: string;
37
+ targetPlatform?: string | null;
38
+ /** In-app doc-tree path — chat consumers forward to `handleChatNavClick`
39
+ * for doc-tree swap parity with chips + inline cards. */
40
+ path?: string | null;
41
+ alwaysNewTab?: boolean;
42
+ className: string;
43
+ children: React.ReactNode;
44
+ }
45
+ interface HoverDropdownProps {
46
+ /** The trigger element — dropdown appears on hover */
47
+ children: React.ReactNode;
48
+ /** Items to show in the dropdown */
49
+ items: HoverDropdownItem[];
50
+ /** Dropdown position relative to trigger (default: 'top') */
51
+ side?: 'top' | 'bottom';
52
+ /** Delay in ms before hiding on mouse leave (default: 200) */
53
+ hideDelay?: number;
54
+ /** Additional className for the dropdown container */
55
+ className?: string;
56
+ /**
57
+ * Optional anchor renderer for rows that have an `href`. Chat consumers
58
+ * supply a `<NavLinkAnchorViaRuntime>`-backed renderer so clicks route
59
+ * through the chat runtime; non-chat consumers can skip this and rely
60
+ * on the default plain `<a>`.
61
+ */
62
+ renderAnchor?: (args: HoverDropdownRenderAnchorArgs) => React.ReactNode;
63
+ }
64
+ export declare function HoverDropdown({ children, items, side, hideDelay, className, renderAnchor, }: HoverDropdownProps): import("react/jsx-runtime").JSX.Element;
65
+ export {};
66
+ //# sourceMappingURL=hover-dropdown.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hover-dropdown.d.ts","sourceRoot":"","sources":["../../../src/components/ui/hover-dropdown.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAwC,MAAM,OAAO,CAAA;AAM5D,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IACtB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb;;;;OAIG;IACH,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC9B;;;;;OAKG;IACH,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACpB;;;;OAIG;IACH,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAA;IACpB;;6DAEyD;IACzD,eAAe,CAAC,EAAE;QAChB,IAAI,EAAE,KAAK,CAAC,SAAS,CAAA;QACrB,KAAK,EAAE,MAAM,CAAA;QACb,OAAO,EAAE,MAAM,IAAI,CAAA;KACpB,CAAA;CACF;AAED,MAAM,WAAW,6BAA6B;IAC5C,IAAI,EAAE,MAAM,CAAA;IACZ,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC9B;8DAC0D;IAC1D,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACpB,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;CAC1B;AAED,UAAU,kBAAkB;IAC1B,sDAAsD;IACtD,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;IACzB,oCAAoC;IACpC,KAAK,EAAE,iBAAiB,EAAE,CAAA;IAC1B,6DAA6D;IAC7D,IAAI,CAAC,EAAE,KAAK,GAAG,QAAQ,CAAA;IACvB,8DAA8D;IAC9D,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,sDAAsD;IACtD,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB;;;;;OAKG;IACH,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,6BAA6B,KAAK,KAAK,CAAC,SAAS,CAAA;CACxE;AA6BD,wBAAgB,aAAa,CAAC,EAC5B,QAAQ,EACR,KAAK,EACL,IAAY,EACZ,SAAe,EACf,SAAS,EACT,YAAY,GACb,EAAE,kBAAkB,2CAsJpB"}