@gabvdl/ui 0.0.14

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 (330) hide show
  1. package/README.md +95 -0
  2. package/dist/components/button/button.d.ts +39 -0
  3. package/dist/components/button/button.d.ts.map +1 -0
  4. package/dist/components/button/button.js +72 -0
  5. package/dist/components/button/button.js.map +1 -0
  6. package/dist/components/button/index.d.ts +5 -0
  7. package/dist/components/button/index.d.ts.map +1 -0
  8. package/dist/components/button/tooltip.d.ts +31 -0
  9. package/dist/components/button/tooltip.d.ts.map +1 -0
  10. package/dist/components/button/tooltip.js +83 -0
  11. package/dist/components/button/tooltip.js.map +1 -0
  12. package/dist/components/changelog/changelog.d.ts +52 -0
  13. package/dist/components/changelog/changelog.d.ts.map +1 -0
  14. package/dist/components/changelog/changelog.js +164 -0
  15. package/dist/components/changelog/changelog.js.map +1 -0
  16. package/dist/components/changelog/index.d.ts +3 -0
  17. package/dist/components/changelog/index.d.ts.map +1 -0
  18. package/dist/components/copy-button/copy-button.d.ts +16 -0
  19. package/dist/components/copy-button/copy-button.d.ts.map +1 -0
  20. package/dist/components/copy-button/copy-button.js +40 -0
  21. package/dist/components/copy-button/copy-button.js.map +1 -0
  22. package/dist/components/copy-button/index.d.ts +3 -0
  23. package/dist/components/copy-button/index.d.ts.map +1 -0
  24. package/dist/components/drop-zone/drop-zone.d.ts +20 -0
  25. package/dist/components/drop-zone/drop-zone.d.ts.map +1 -0
  26. package/dist/components/drop-zone/drop-zone.js +54 -0
  27. package/dist/components/drop-zone/drop-zone.js.map +1 -0
  28. package/dist/components/drop-zone/index.d.ts +5 -0
  29. package/dist/components/drop-zone/index.d.ts.map +1 -0
  30. package/dist/components/drop-zone/use-file-drop.d.ts +45 -0
  31. package/dist/components/drop-zone/use-file-drop.d.ts.map +1 -0
  32. package/dist/components/drop-zone/use-file-drop.js +97 -0
  33. package/dist/components/drop-zone/use-file-drop.js.map +1 -0
  34. package/dist/components/element-picker/element-picker-field.d.ts +30 -0
  35. package/dist/components/element-picker/element-picker-field.d.ts.map +1 -0
  36. package/dist/components/element-picker/element-picker-field.js +273 -0
  37. package/dist/components/element-picker/element-picker-field.js.map +1 -0
  38. package/dist/components/element-picker/element-picker.d.ts +45 -0
  39. package/dist/components/element-picker/element-picker.d.ts.map +1 -0
  40. package/dist/components/element-picker/element-picker.js +179 -0
  41. package/dist/components/element-picker/element-picker.js.map +1 -0
  42. package/dist/components/element-picker/element-preview.d.ts +23 -0
  43. package/dist/components/element-picker/element-preview.d.ts.map +1 -0
  44. package/dist/components/element-picker/element-preview.js +72 -0
  45. package/dist/components/element-picker/element-preview.js.map +1 -0
  46. package/dist/components/element-picker/index.d.ts +12 -0
  47. package/dist/components/element-picker/index.d.ts.map +1 -0
  48. package/dist/components/element-picker/parse.d.ts +32 -0
  49. package/dist/components/element-picker/parse.d.ts.map +1 -0
  50. package/dist/components/element-picker/parse.js +230 -0
  51. package/dist/components/element-picker/parse.js.map +1 -0
  52. package/dist/components/element-picker/types.d.ts +72 -0
  53. package/dist/components/element-picker/types.d.ts.map +1 -0
  54. package/dist/components/element-picker/use-element-picker.d.ts +56 -0
  55. package/dist/components/element-picker/use-element-picker.d.ts.map +1 -0
  56. package/dist/components/element-picker/use-element-picker.js +201 -0
  57. package/dist/components/element-picker/use-element-picker.js.map +1 -0
  58. package/dist/components/empty-state/empty-state.d.ts +16 -0
  59. package/dist/components/empty-state/empty-state.d.ts.map +1 -0
  60. package/dist/components/empty-state/empty-state.js +41 -0
  61. package/dist/components/empty-state/empty-state.js.map +1 -0
  62. package/dist/components/empty-state/index.d.ts +3 -0
  63. package/dist/components/empty-state/index.d.ts.map +1 -0
  64. package/dist/components/floating-panel/dock-context.d.ts +66 -0
  65. package/dist/components/floating-panel/dock-context.d.ts.map +1 -0
  66. package/dist/components/floating-panel/dock-context.js +96 -0
  67. package/dist/components/floating-panel/dock-context.js.map +1 -0
  68. package/dist/components/floating-panel/dock.d.ts +26 -0
  69. package/dist/components/floating-panel/dock.d.ts.map +1 -0
  70. package/dist/components/floating-panel/dock.js +46 -0
  71. package/dist/components/floating-panel/dock.js.map +1 -0
  72. package/dist/components/floating-panel/floating-panel.d.ts +69 -0
  73. package/dist/components/floating-panel/floating-panel.d.ts.map +1 -0
  74. package/dist/components/floating-panel/floating-panel.js +285 -0
  75. package/dist/components/floating-panel/floating-panel.js.map +1 -0
  76. package/dist/components/floating-panel/index.d.ts +7 -0
  77. package/dist/components/floating-panel/index.d.ts.map +1 -0
  78. package/dist/components/fuzzy-list/fuzzy-list.d.ts +96 -0
  79. package/dist/components/fuzzy-list/fuzzy-list.d.ts.map +1 -0
  80. package/dist/components/fuzzy-list/fuzzy-list.js +127 -0
  81. package/dist/components/fuzzy-list/fuzzy-list.js.map +1 -0
  82. package/dist/components/fuzzy-list/index.d.ts +4 -0
  83. package/dist/components/fuzzy-list/index.d.ts.map +1 -0
  84. package/dist/components/global-search/global-search.d.ts +78 -0
  85. package/dist/components/global-search/global-search.d.ts.map +1 -0
  86. package/dist/components/global-search/global-search.js +181 -0
  87. package/dist/components/global-search/global-search.js.map +1 -0
  88. package/dist/components/global-search/hotkey.d.ts +23 -0
  89. package/dist/components/global-search/hotkey.d.ts.map +1 -0
  90. package/dist/components/global-search/hotkey.js +41 -0
  91. package/dist/components/global-search/hotkey.js.map +1 -0
  92. package/dist/components/global-search/index.d.ts +5 -0
  93. package/dist/components/global-search/index.d.ts.map +1 -0
  94. package/dist/components/iframe-preview/iframe-preview.d.ts +64 -0
  95. package/dist/components/iframe-preview/iframe-preview.d.ts.map +1 -0
  96. package/dist/components/iframe-preview/iframe-preview.js +257 -0
  97. package/dist/components/iframe-preview/iframe-preview.js.map +1 -0
  98. package/dist/components/iframe-preview/index.d.ts +3 -0
  99. package/dist/components/iframe-preview/index.d.ts.map +1 -0
  100. package/dist/components/image-viewer/image-viewer.d.ts +30 -0
  101. package/dist/components/image-viewer/image-viewer.d.ts.map +1 -0
  102. package/dist/components/image-viewer/image-viewer.js +226 -0
  103. package/dist/components/image-viewer/image-viewer.js.map +1 -0
  104. package/dist/components/image-viewer/index.d.ts +4 -0
  105. package/dist/components/image-viewer/index.d.ts.map +1 -0
  106. package/dist/components/image-viewer/progressive-image.d.ts +20 -0
  107. package/dist/components/image-viewer/progressive-image.d.ts.map +1 -0
  108. package/dist/components/image-viewer/progressive-image.js +62 -0
  109. package/dist/components/image-viewer/progressive-image.js.map +1 -0
  110. package/dist/components/image-viewer/viewable-image.d.ts +17 -0
  111. package/dist/components/image-viewer/viewable-image.d.ts.map +1 -0
  112. package/dist/components/image-viewer/viewable-image.js +38 -0
  113. package/dist/components/image-viewer/viewable-image.js.map +1 -0
  114. package/dist/components/input/index.d.ts +3 -0
  115. package/dist/components/input/index.d.ts.map +1 -0
  116. package/dist/components/input/input.d.ts +15 -0
  117. package/dist/components/input/input.d.ts.map +1 -0
  118. package/dist/components/input/input.js +56 -0
  119. package/dist/components/input/input.js.map +1 -0
  120. package/dist/components/modal/index.d.ts +5 -0
  121. package/dist/components/modal/index.d.ts.map +1 -0
  122. package/dist/components/modal/modal-context.d.ts +37 -0
  123. package/dist/components/modal/modal-context.d.ts.map +1 -0
  124. package/dist/components/modal/modal-context.js +81 -0
  125. package/dist/components/modal/modal-context.js.map +1 -0
  126. package/dist/components/modal/modal.d.ts +28 -0
  127. package/dist/components/modal/modal.d.ts.map +1 -0
  128. package/dist/components/modal/modal.js +94 -0
  129. package/dist/components/modal/modal.js.map +1 -0
  130. package/dist/components/nav-2d/index.d.ts +3 -0
  131. package/dist/components/nav-2d/index.d.ts.map +1 -0
  132. package/dist/components/nav-2d/nav-2d.d.ts +59 -0
  133. package/dist/components/nav-2d/nav-2d.d.ts.map +1 -0
  134. package/dist/components/nav-2d/nav-2d.js +290 -0
  135. package/dist/components/nav-2d/nav-2d.js.map +1 -0
  136. package/dist/components/phone-preview/index.d.ts +3 -0
  137. package/dist/components/phone-preview/index.d.ts.map +1 -0
  138. package/dist/components/phone-preview/phone-preview.d.ts +45 -0
  139. package/dist/components/phone-preview/phone-preview.d.ts.map +1 -0
  140. package/dist/components/phone-preview/phone-preview.js +117 -0
  141. package/dist/components/phone-preview/phone-preview.js.map +1 -0
  142. package/dist/components/progressive-bash/index.d.ts +7 -0
  143. package/dist/components/progressive-bash/index.d.ts.map +1 -0
  144. package/dist/components/progressive-bash/parse.d.ts +88 -0
  145. package/dist/components/progressive-bash/parse.d.ts.map +1 -0
  146. package/dist/components/progressive-bash/parse.js +120 -0
  147. package/dist/components/progressive-bash/parse.js.map +1 -0
  148. package/dist/components/progressive-bash/playback.d.ts +50 -0
  149. package/dist/components/progressive-bash/playback.d.ts.map +1 -0
  150. package/dist/components/progressive-bash/playback.js +19 -0
  151. package/dist/components/progressive-bash/playback.js.map +1 -0
  152. package/dist/components/progressive-bash/progressive-bash.d.ts +97 -0
  153. package/dist/components/progressive-bash/progressive-bash.d.ts.map +1 -0
  154. package/dist/components/progressive-bash/progressive-bash.js +377 -0
  155. package/dist/components/progressive-bash/progressive-bash.js.map +1 -0
  156. package/dist/components/progressive-list/index.d.ts +3 -0
  157. package/dist/components/progressive-list/index.d.ts.map +1 -0
  158. package/dist/components/progressive-list/progressive-list.d.ts +55 -0
  159. package/dist/components/progressive-list/progressive-list.d.ts.map +1 -0
  160. package/dist/components/progressive-list/progressive-list.js +83 -0
  161. package/dist/components/progressive-list/progressive-list.js.map +1 -0
  162. package/dist/components/progressive-table/index.d.ts +3 -0
  163. package/dist/components/progressive-table/index.d.ts.map +1 -0
  164. package/dist/components/progressive-table/progressive-table.d.ts +58 -0
  165. package/dist/components/progressive-table/progressive-table.d.ts.map +1 -0
  166. package/dist/components/progressive-table/progressive-table.js +86 -0
  167. package/dist/components/progressive-table/progressive-table.js.map +1 -0
  168. package/dist/components/progressive-text/index.d.ts +3 -0
  169. package/dist/components/progressive-text/index.d.ts.map +1 -0
  170. package/dist/components/progressive-text/progressive-text.d.ts +54 -0
  171. package/dist/components/progressive-text/progressive-text.d.ts.map +1 -0
  172. package/dist/components/progressive-text/progressive-text.js +97 -0
  173. package/dist/components/progressive-text/progressive-text.js.map +1 -0
  174. package/dist/components/progressive-timeline/index.d.ts +3 -0
  175. package/dist/components/progressive-timeline/index.d.ts.map +1 -0
  176. package/dist/components/progressive-timeline/progressive-timeline.d.ts +46 -0
  177. package/dist/components/progressive-timeline/progressive-timeline.d.ts.map +1 -0
  178. package/dist/components/progressive-timeline/progressive-timeline.js +62 -0
  179. package/dist/components/progressive-timeline/progressive-timeline.js.map +1 -0
  180. package/dist/components/relative-time/index.d.ts +3 -0
  181. package/dist/components/relative-time/index.d.ts.map +1 -0
  182. package/dist/components/relative-time/relative-time.d.ts +14 -0
  183. package/dist/components/relative-time/relative-time.d.ts.map +1 -0
  184. package/dist/components/relative-time/relative-time.js +15 -0
  185. package/dist/components/relative-time/relative-time.js.map +1 -0
  186. package/dist/components/resizable-layout/index.d.ts +3 -0
  187. package/dist/components/resizable-layout/index.d.ts.map +1 -0
  188. package/dist/components/resizable-layout/resizable-layout.d.ts +113 -0
  189. package/dist/components/resizable-layout/resizable-layout.d.ts.map +1 -0
  190. package/dist/components/resizable-layout/resizable-layout.js +398 -0
  191. package/dist/components/resizable-layout/resizable-layout.js.map +1 -0
  192. package/dist/components/rich-input/compose.d.ts +13 -0
  193. package/dist/components/rich-input/compose.d.ts.map +1 -0
  194. package/dist/components/rich-input/compose.js +28 -0
  195. package/dist/components/rich-input/compose.js.map +1 -0
  196. package/dist/components/rich-input/index.d.ts +5 -0
  197. package/dist/components/rich-input/index.d.ts.map +1 -0
  198. package/dist/components/rich-input/parts.d.ts +53 -0
  199. package/dist/components/rich-input/parts.d.ts.map +1 -0
  200. package/dist/components/rich-input/parts.js +285 -0
  201. package/dist/components/rich-input/parts.js.map +1 -0
  202. package/dist/components/rich-input/rich-input.d.ts +64 -0
  203. package/dist/components/rich-input/rich-input.d.ts.map +1 -0
  204. package/dist/components/rich-input/rich-input.js +351 -0
  205. package/dist/components/rich-input/rich-input.js.map +1 -0
  206. package/dist/components/rich-input/types.d.ts +92 -0
  207. package/dist/components/rich-input/types.d.ts.map +1 -0
  208. package/dist/components/rich-input/use-draft.d.ts +9 -0
  209. package/dist/components/rich-input/use-draft.d.ts.map +1 -0
  210. package/dist/components/rich-input/use-draft.js +47 -0
  211. package/dist/components/rich-input/use-draft.js.map +1 -0
  212. package/dist/components/rich-input/use-file-upload.d.ts +18 -0
  213. package/dist/components/rich-input/use-file-upload.d.ts.map +1 -0
  214. package/dist/components/rich-input/use-file-upload.js +88 -0
  215. package/dist/components/rich-input/use-file-upload.js.map +1 -0
  216. package/dist/components/rich-input/use-guidelines.d.ts +16 -0
  217. package/dist/components/rich-input/use-guidelines.d.ts.map +1 -0
  218. package/dist/components/rich-input/use-guidelines.js +85 -0
  219. package/dist/components/rich-input/use-guidelines.js.map +1 -0
  220. package/dist/components/rich-input/use-input-history.d.ts +22 -0
  221. package/dist/components/rich-input/use-input-history.d.ts.map +1 -0
  222. package/dist/components/rich-input/use-input-history.js +61 -0
  223. package/dist/components/rich-input/use-input-history.js.map +1 -0
  224. package/dist/components/rich-input/use-mention.d.ts +24 -0
  225. package/dist/components/rich-input/use-mention.d.ts.map +1 -0
  226. package/dist/components/rich-input/use-mention.js +54 -0
  227. package/dist/components/rich-input/use-mention.js.map +1 -0
  228. package/dist/components/search-input/index.d.ts +3 -0
  229. package/dist/components/search-input/index.d.ts.map +1 -0
  230. package/dist/components/search-input/search-input.d.ts +14 -0
  231. package/dist/components/search-input/search-input.d.ts.map +1 -0
  232. package/dist/components/search-input/search-input.js +63 -0
  233. package/dist/components/search-input/search-input.js.map +1 -0
  234. package/dist/components/skeleton/index.d.ts +3 -0
  235. package/dist/components/skeleton/index.d.ts.map +1 -0
  236. package/dist/components/skeleton/skeleton.d.ts +19 -0
  237. package/dist/components/skeleton/skeleton.d.ts.map +1 -0
  238. package/dist/components/skeleton/skeleton.js +29 -0
  239. package/dist/components/skeleton/skeleton.js.map +1 -0
  240. package/dist/components/spinner/index.d.ts +3 -0
  241. package/dist/components/spinner/index.d.ts.map +1 -0
  242. package/dist/components/spinner/spinner.d.ts +11 -0
  243. package/dist/components/spinner/spinner.d.ts.map +1 -0
  244. package/dist/components/spinner/spinner.js +32 -0
  245. package/dist/components/spinner/spinner.js.map +1 -0
  246. package/dist/components/status-badge/index.d.ts +3 -0
  247. package/dist/components/status-badge/index.d.ts.map +1 -0
  248. package/dist/components/status-badge/status-badge.d.ts +31 -0
  249. package/dist/components/status-badge/status-badge.d.ts.map +1 -0
  250. package/dist/components/status-badge/status-badge.js +53 -0
  251. package/dist/components/status-badge/status-badge.js.map +1 -0
  252. package/dist/components/theme/index.d.ts +5 -0
  253. package/dist/components/theme/index.d.ts.map +1 -0
  254. package/dist/components/theme/theme-toggle.d.ts +11 -0
  255. package/dist/components/theme/theme-toggle.d.ts.map +1 -0
  256. package/dist/components/theme/theme-toggle.js +57 -0
  257. package/dist/components/theme/theme-toggle.js.map +1 -0
  258. package/dist/components/theme/theme.d.ts +29 -0
  259. package/dist/components/theme/theme.d.ts.map +1 -0
  260. package/dist/components/theme/theme.js +70 -0
  261. package/dist/components/theme/theme.js.map +1 -0
  262. package/dist/components/toast/index.d.ts +3 -0
  263. package/dist/components/toast/index.d.ts.map +1 -0
  264. package/dist/components/toast/toast.d.ts +64 -0
  265. package/dist/components/toast/toast.d.ts.map +1 -0
  266. package/dist/components/toast/toast.js +155 -0
  267. package/dist/components/toast/toast.js.map +1 -0
  268. package/dist/components/virtual-list/index.d.ts +3 -0
  269. package/dist/components/virtual-list/index.d.ts.map +1 -0
  270. package/dist/components/virtual-list/virtual-list.d.ts +71 -0
  271. package/dist/components/virtual-list/virtual-list.d.ts.map +1 -0
  272. package/dist/components/virtual-list/virtual-list.js +65 -0
  273. package/dist/components/virtual-list/virtual-list.js.map +1 -0
  274. package/dist/hooks/index.d.ts +12 -0
  275. package/dist/hooks/index.d.ts.map +1 -0
  276. package/dist/hooks/use-copy-to-clipboard.d.ts +26 -0
  277. package/dist/hooks/use-copy-to-clipboard.d.ts.map +1 -0
  278. package/dist/hooks/use-copy-to-clipboard.js +36 -0
  279. package/dist/hooks/use-copy-to-clipboard.js.map +1 -0
  280. package/dist/hooks/use-debounced-value.d.ts +23 -0
  281. package/dist/hooks/use-debounced-value.d.ts.map +1 -0
  282. package/dist/hooks/use-debounced-value.js +19 -0
  283. package/dist/hooks/use-debounced-value.js.map +1 -0
  284. package/dist/hooks/use-intersection.d.ts +25 -0
  285. package/dist/hooks/use-intersection.d.ts.map +1 -0
  286. package/dist/hooks/use-intersection.js +38 -0
  287. package/dist/hooks/use-intersection.js.map +1 -0
  288. package/dist/hooks/use-local-storage.d.ts +12 -0
  289. package/dist/hooks/use-local-storage.d.ts.map +1 -0
  290. package/dist/hooks/use-local-storage.js +43 -0
  291. package/dist/hooks/use-local-storage.js.map +1 -0
  292. package/dist/hooks/use-long-press.d.ts +37 -0
  293. package/dist/hooks/use-long-press.d.ts.map +1 -0
  294. package/dist/hooks/use-long-press.js +39 -0
  295. package/dist/hooks/use-long-press.js.map +1 -0
  296. package/dist/hooks/use-media-query.d.ts +17 -0
  297. package/dist/hooks/use-media-query.d.ts.map +1 -0
  298. package/dist/hooks/use-media-query.js +37 -0
  299. package/dist/hooks/use-media-query.js.map +1 -0
  300. package/dist/hooks/use-overlay.d.ts +20 -0
  301. package/dist/hooks/use-overlay.d.ts.map +1 -0
  302. package/dist/hooks/use-overlay.js +42 -0
  303. package/dist/hooks/use-overlay.js.map +1 -0
  304. package/dist/image-viewer.css +152 -0
  305. package/dist/index.d.ts +67 -0
  306. package/dist/index.d.ts.map +1 -0
  307. package/dist/index.js +161 -0
  308. package/dist/index.js.map +1 -0
  309. package/dist/lib/format.d.ts +19 -0
  310. package/dist/lib/format.d.ts.map +1 -0
  311. package/dist/lib/format.js +62 -0
  312. package/dist/lib/format.js.map +1 -0
  313. package/dist/lib/highlight.d.ts +15 -0
  314. package/dist/lib/highlight.d.ts.map +1 -0
  315. package/dist/lib/highlight.js +39 -0
  316. package/dist/lib/highlight.js.map +1 -0
  317. package/dist/lib/search.d.ts +40 -0
  318. package/dist/lib/search.d.ts.map +1 -0
  319. package/dist/lib/search.js +91 -0
  320. package/dist/lib/search.js.map +1 -0
  321. package/dist/lib/utils.d.ts +4 -0
  322. package/dist/lib/utils.d.ts.map +1 -0
  323. package/dist/lib/utils.js +9 -0
  324. package/dist/lib/utils.js.map +1 -0
  325. package/dist/overlay.css +78 -0
  326. package/dist/styles.css +6 -0
  327. package/dist/theme.css +81 -0
  328. package/dist/tooltip.css +53 -0
  329. package/dist/virtual-list.css +29 -0
  330. package/package.json +77 -0
@@ -0,0 +1,53 @@
1
+ import { ReactNode } from 'react';
2
+ import { GuidelineTag, RichFile } from './types';
3
+ export declare function fmtBytes(n: number): string;
4
+ export declare function AttachmentChips({ files, onRemove, }: {
5
+ files: RichFile[];
6
+ onRemove: (id: string) => void;
7
+ }): import("react").JSX.Element | null;
8
+ export declare function GuidelinesSwitch({ on, onToggle }: {
9
+ on: boolean;
10
+ onToggle: () => void;
11
+ }): import("react").JSX.Element;
12
+ export declare function TagChips({ tags, selected, onToggle, showMax, expanded, onExpand, leading, }: {
13
+ tags: GuidelineTag[];
14
+ selected: Set<string>;
15
+ onToggle: (id: string) => void;
16
+ showMax?: number;
17
+ expanded: boolean;
18
+ onExpand: () => void;
19
+ /** Rendered as the first item of the row (e.g. the guidelines master switch). */
20
+ leading?: ReactNode;
21
+ }): import("react").JSX.Element | null;
22
+ export declare function TagScrollList({ tags, selected, onToggle, rows, }: {
23
+ tags: GuidelineTag[];
24
+ selected: Set<string>;
25
+ onToggle: (id: string) => void;
26
+ /** Visible height in chip rows before it scrolls. Default 3. */
27
+ rows?: number;
28
+ }): import("react").JSX.Element | null;
29
+ export declare function MentionMenu({ matches, active, prefix, onHover, onPick, }: {
30
+ matches: GuidelineTag[];
31
+ active: number;
32
+ prefix: string;
33
+ onHover: (i: number) => void;
34
+ onPick: (tag: GuidelineTag) => void;
35
+ }): import("react").JSX.Element;
36
+ export declare function ReverseSearchBar({ query, match, onQueryChange, onNext, onAccept, onClose, }: {
37
+ query: string;
38
+ match: string | null;
39
+ onQueryChange: (q: string) => void;
40
+ onNext: () => void;
41
+ onAccept: () => void;
42
+ onClose: () => void;
43
+ }): import("react").JSX.Element;
44
+ export declare function HistorySheet({ entries, onPick, onClose, }: {
45
+ entries: string[];
46
+ onPick: (value: string) => void;
47
+ onClose: () => void;
48
+ }): import("react").JSX.Element;
49
+ export declare function UnsendBanner({ countdown, onUndo, }: {
50
+ countdown: number;
51
+ onUndo: () => void;
52
+ }): import("react").JSX.Element;
53
+ //# sourceMappingURL=parts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parts.d.ts","sourceRoot":"","sources":["../../../src/components/rich-input/parts.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAa,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAMlD,OAAO,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAEtD,wBAAgB,QAAQ,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAK1C;AAGD,wBAAgB,eAAe,CAAC,EAC9B,KAAK,EACL,QAAQ,GACT,EAAE;IACD,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,QAAQ,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;CAChC,sCAgCA;AAyBD,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE;IAAE,EAAE,EAAE,OAAO,CAAC;IAAC,QAAQ,EAAE,MAAM,IAAI,CAAA;CAAE,+BAuBvF;AAGD,wBAAgB,QAAQ,CAAC,EACvB,IAAI,EACJ,QAAQ,EACR,QAAQ,EACR,OAAO,EACP,QAAQ,EACR,QAAQ,EACR,OAAO,GACR,EAAE;IACD,IAAI,EAAE,YAAY,EAAE,CAAC;IACrB,QAAQ,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACtB,QAAQ,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,iFAAiF;IACjF,OAAO,CAAC,EAAE,SAAS,CAAC;CACrB,sCAsBA;AAKD,wBAAgB,aAAa,CAAC,EAC5B,IAAI,EACJ,QAAQ,EACR,QAAQ,EACR,IAAQ,GACT,EAAE;IACD,IAAI,EAAE,YAAY,EAAE,CAAC;IACrB,QAAQ,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACtB,QAAQ,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/B,gEAAgE;IAChE,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,sCAcA;AAGD,wBAAgB,WAAW,CAAC,EAC1B,OAAO,EACP,MAAM,EACN,MAAM,EACN,OAAO,EACP,MAAM,GACP,EAAE;IACD,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7B,MAAM,EAAE,CAAC,GAAG,EAAE,YAAY,KAAK,IAAI,CAAC;CACrC,+BA2BA;AAGD,wBAAgB,gBAAgB,CAAC,EAC/B,KAAK,EACL,KAAK,EACL,aAAa,EACb,MAAM,EACN,QAAQ,EACR,OAAO,GACR,EAAE;IACD,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,aAAa,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB,+BAkCA;AAGD,wBAAgB,YAAY,CAAC,EAC3B,OAAO,EACP,MAAM,EACN,OAAO,GACR,EAAE;IACD,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,MAAM,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB,+BAqDA;AAGD,wBAAgB,YAAY,CAAC,EAC3B,SAAS,EACT,MAAM,GACP,EAAE;IACD,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,IAAI,CAAC;CACpB,+BAYA"}
@@ -0,0 +1,285 @@
1
+ import { jsxs as l, jsx as t } from "react/jsx-runtime";
2
+ import { useEffect as h } from "react";
3
+ import { Undo2 as p, X as u, File as b, ListChecks as g, History as y } from "lucide-react";
4
+ import { cn as m } from "../../lib/utils.js";
5
+ import { tagSlug as v } from "./use-mention.js";
6
+ import { VirtualList as N } from "../virtual-list/virtual-list.js";
7
+ function k(e) {
8
+ if (!Number.isFinite(e) || e <= 0) return "0 B";
9
+ const n = ["B", "KB", "MB", "GB"], r = Math.min(n.length - 1, Math.floor(Math.log(e) / Math.log(1024)));
10
+ return `${(e / 1024 ** r).toFixed(r === 0 ? 0 : 1)} ${n[r]}`;
11
+ }
12
+ function E({
13
+ files: e,
14
+ onRemove: n
15
+ }) {
16
+ return e.length === 0 ? null : /* @__PURE__ */ t("div", { className: "flex flex-wrap gap-1.5 px-1 pb-1.5", children: e.map((r) => {
17
+ const s = r.contentType.startsWith("image/") && r.url;
18
+ return /* @__PURE__ */ l(
19
+ "span",
20
+ {
21
+ className: "group inline-flex max-w-[13rem] items-center gap-1.5 rounded-md border border-input bg-background/60 py-1 pl-1.5 pr-1 text-xs",
22
+ children: [
23
+ s ? /* @__PURE__ */ t("img", { src: r.url, alt: "", className: "size-5 shrink-0 rounded object-cover" }) : /* @__PURE__ */ t(b, { className: "size-3.5 shrink-0 text-muted-foreground" }),
24
+ /* @__PURE__ */ t("span", { className: "min-w-0 truncate text-foreground", children: r.name }),
25
+ /* @__PURE__ */ t("span", { className: "shrink-0 text-[10px] text-muted-foreground", children: k(r.size) }),
26
+ /* @__PURE__ */ t(
27
+ "button",
28
+ {
29
+ type: "button",
30
+ "aria-label": `Remove ${r.name}`,
31
+ onMouseDown: (o) => o.preventDefault(),
32
+ onClick: () => n(r.id),
33
+ className: "ml-0.5 inline-flex size-4 shrink-0 items-center justify-center rounded text-muted-foreground transition-colors hover:bg-muted hover:text-foreground",
34
+ children: /* @__PURE__ */ t(u, { className: "size-3" })
35
+ }
36
+ )
37
+ ]
38
+ },
39
+ r.id
40
+ );
41
+ }) });
42
+ }
43
+ function f({ tag: e, on: n, onToggle: r }) {
44
+ const s = n ? e.label : e.labelOff ?? e.label;
45
+ return /* @__PURE__ */ l(
46
+ "button",
47
+ {
48
+ type: "button",
49
+ "aria-pressed": n,
50
+ onMouseDown: (o) => o.preventDefault(),
51
+ onClick: () => r(e.id),
52
+ className: m(
53
+ "inline-flex items-center gap-1 rounded-full border px-2.5 py-1 text-xs transition-colors",
54
+ n ? "border-primary/40 bg-primary/10 text-foreground" : "border-input text-muted-foreground hover:text-foreground"
55
+ ),
56
+ children: [
57
+ e.icon,
58
+ s
59
+ ]
60
+ }
61
+ );
62
+ }
63
+ function S({ on: e, onToggle: n }) {
64
+ return /* @__PURE__ */ l(
65
+ "button",
66
+ {
67
+ type: "button",
68
+ "aria-pressed": e,
69
+ onMouseDown: (r) => r.preventDefault(),
70
+ onClick: n,
71
+ title: e ? "Guidelines are appended to the prompt — click to send it as typed" : "Prompt is sent as typed — click to append the guidelines again",
72
+ className: m(
73
+ "inline-flex shrink-0 items-center gap-1 rounded-full border px-2 py-1 text-[11px] font-medium transition-colors",
74
+ e ? "border-primary/60 bg-primary/10 text-primary hover:bg-primary/20" : "border-input bg-transparent text-muted-foreground hover:text-foreground"
75
+ ),
76
+ children: [
77
+ /* @__PURE__ */ t(g, { className: "size-3" }),
78
+ "Guidelines ",
79
+ e ? "on" : "off"
80
+ ]
81
+ }
82
+ );
83
+ }
84
+ function L({
85
+ tags: e,
86
+ selected: n,
87
+ onToggle: r,
88
+ showMax: s,
89
+ expanded: o,
90
+ onExpand: a,
91
+ leading: i
92
+ }) {
93
+ if (e.length === 0 && !i) return null;
94
+ const d = s != null && !o ? Math.max(0, e.length - s) : 0, x = d > 0 ? e.slice(0, s) : e;
95
+ return /* @__PURE__ */ l("div", { className: "flex flex-wrap items-center gap-1.5", children: [
96
+ i,
97
+ x.map((c) => /* @__PURE__ */ t(f, { tag: c, on: n.has(c.id), onToggle: r }, c.id)),
98
+ d > 0 && /* @__PURE__ */ l(
99
+ "button",
100
+ {
101
+ type: "button",
102
+ onMouseDown: (c) => c.preventDefault(),
103
+ onClick: a,
104
+ className: "rounded-full border border-dashed border-input px-2.5 py-1 text-xs text-muted-foreground transition-colors hover:text-foreground",
105
+ children: [
106
+ "+",
107
+ d,
108
+ " more"
109
+ ]
110
+ }
111
+ )
112
+ ] });
113
+ }
114
+ const w = 30;
115
+ function G({
116
+ tags: e,
117
+ selected: n,
118
+ onToggle: r,
119
+ rows: s = 3
120
+ }) {
121
+ return e.length === 0 ? null : /* @__PURE__ */ t(
122
+ "div",
123
+ {
124
+ className: "overflow-y-auto rounded-lg border border-input/60 bg-background/40 p-1.5",
125
+ style: { maxHeight: s * w },
126
+ children: /* @__PURE__ */ t("div", { className: "flex flex-wrap gap-1.5", children: e.map((o) => /* @__PURE__ */ t(f, { tag: o, on: n.has(o.id), onToggle: r }, o.id)) })
127
+ }
128
+ );
129
+ }
130
+ function H({
131
+ matches: e,
132
+ active: n,
133
+ prefix: r,
134
+ onHover: s,
135
+ onPick: o
136
+ }) {
137
+ return /* @__PURE__ */ t("div", { className: "mb-1.5 max-h-56 overflow-y-auto rounded-lg border border-border bg-popover p-1 shadow-lg", children: e.map((a, i) => /* @__PURE__ */ l(
138
+ "button",
139
+ {
140
+ type: "button",
141
+ onMouseDown: (d) => d.preventDefault(),
142
+ onMouseEnter: () => s(i),
143
+ onClick: () => o(a),
144
+ className: m(
145
+ "flex w-full items-center gap-2 rounded-md px-2 py-1.5 text-left text-sm transition-colors",
146
+ i === n ? "bg-accent text-accent-foreground" : "text-foreground hover:bg-accent/60"
147
+ ),
148
+ children: [
149
+ a.icon,
150
+ /* @__PURE__ */ l("span", { className: "font-medium", children: [
151
+ r,
152
+ v(a)
153
+ ] }),
154
+ a.description && /* @__PURE__ */ t("span", { className: "ml-auto truncate text-xs text-muted-foreground", children: a.description })
155
+ ]
156
+ },
157
+ a.id
158
+ )) });
159
+ }
160
+ function K({
161
+ query: e,
162
+ match: n,
163
+ onQueryChange: r,
164
+ onNext: s,
165
+ onAccept: o,
166
+ onClose: a
167
+ }) {
168
+ return /* @__PURE__ */ l("div", { className: "mb-1.5 flex items-center gap-2 rounded-lg border border-border bg-popover px-2.5 py-1.5 text-sm shadow-lg", children: [
169
+ /* @__PURE__ */ t("span", { className: "shrink-0 font-mono text-xs text-muted-foreground", children: "(reverse-i-search)" }),
170
+ /* @__PURE__ */ t(
171
+ "input",
172
+ {
173
+ autoFocus: !0,
174
+ value: e,
175
+ placeholder: "type to search history…",
176
+ onChange: (i) => r(i.target.value),
177
+ onKeyDown: (i) => {
178
+ i.key === "Enter" ? (i.preventDefault(), o()) : i.key === "Escape" ? (i.preventDefault(), a()) : (i.ctrlKey && i.key.toLowerCase() === "r" || i.key === "ArrowUp") && (i.preventDefault(), s());
179
+ },
180
+ className: "w-28 shrink-0 bg-transparent text-foreground outline-none placeholder:text-muted-foreground"
181
+ }
182
+ ),
183
+ /* @__PURE__ */ t("span", { className: "min-w-0 flex-1 truncate text-muted-foreground", children: n ?? "no match" }),
184
+ /* @__PURE__ */ t(
185
+ "button",
186
+ {
187
+ type: "button",
188
+ "aria-label": "Close search",
189
+ onClick: a,
190
+ className: "inline-flex size-5 shrink-0 items-center justify-center rounded text-muted-foreground hover:text-foreground",
191
+ children: /* @__PURE__ */ t(u, { className: "size-3.5" })
192
+ }
193
+ )
194
+ ] });
195
+ }
196
+ function T({
197
+ entries: e,
198
+ onPick: n,
199
+ onClose: r
200
+ }) {
201
+ h(() => {
202
+ const o = (a) => a.key === "Escape" && r();
203
+ return window.addEventListener("keydown", o), () => window.removeEventListener("keydown", o);
204
+ }, [r]);
205
+ const s = [...e].reverse();
206
+ return /* @__PURE__ */ t("div", { className: "fixed inset-0 z-[120] flex flex-col justify-end bg-black/40", onClick: r, children: /* @__PURE__ */ l(
207
+ "div",
208
+ {
209
+ className: "max-h-[70vh] rounded-t-2xl border-t border-border bg-card shadow-2xl",
210
+ onClick: (o) => o.stopPropagation(),
211
+ children: [
212
+ /* @__PURE__ */ l("div", { className: "flex items-center justify-between gap-3 border-b border-border px-4 py-3", children: [
213
+ /* @__PURE__ */ l("span", { className: "flex items-center gap-2 text-sm font-medium text-foreground", children: [
214
+ /* @__PURE__ */ t(y, { className: "size-4" }),
215
+ " History"
216
+ ] }),
217
+ /* @__PURE__ */ t(
218
+ "button",
219
+ {
220
+ type: "button",
221
+ "aria-label": "Close",
222
+ onClick: r,
223
+ className: "inline-flex size-7 items-center justify-center rounded-md border border-border text-muted-foreground hover:text-foreground",
224
+ children: /* @__PURE__ */ t(u, { className: "size-4" })
225
+ }
226
+ )
227
+ ] }),
228
+ s.length === 0 ? /* @__PURE__ */ t("div", { className: "px-4 py-10 text-center text-sm text-muted-foreground", children: "No history yet" }) : /* @__PURE__ */ t(
229
+ N,
230
+ {
231
+ items: s,
232
+ className: "max-h-[calc(70vh-3.25rem)] p-2",
233
+ estimateSize: 52,
234
+ getItemKey: (o, a) => a,
235
+ renderItem: (o) => /* @__PURE__ */ t("div", { className: "px-1 pb-1.5", children: /* @__PURE__ */ l(
236
+ "button",
237
+ {
238
+ type: "button",
239
+ onClick: () => n(o),
240
+ className: "flex w-full items-start gap-2 rounded-lg border border-transparent px-3 py-2 text-left text-sm text-foreground transition-colors hover:border-border hover:bg-accent/50",
241
+ children: [
242
+ /* @__PURE__ */ t(p, { className: "mt-0.5 size-3.5 shrink-0 text-muted-foreground" }),
243
+ /* @__PURE__ */ t("span", { className: "line-clamp-2 min-w-0 flex-1", children: o })
244
+ ]
245
+ }
246
+ ) })
247
+ }
248
+ )
249
+ ]
250
+ }
251
+ ) });
252
+ }
253
+ function F({
254
+ countdown: e,
255
+ onUndo: n
256
+ }) {
257
+ return /* @__PURE__ */ l(
258
+ "button",
259
+ {
260
+ type: "button",
261
+ onClick: n,
262
+ className: "flex w-full items-center justify-center gap-2 rounded-xl border border-primary/40 bg-primary/10 px-3 py-2.5 text-sm text-foreground transition-colors hover:bg-primary/15",
263
+ children: [
264
+ /* @__PURE__ */ t(p, { className: "size-4" }),
265
+ "Sent — tap to un-send",
266
+ /* @__PURE__ */ l("span", { className: "font-mono tabular-nums text-muted-foreground", children: [
267
+ e,
268
+ "s"
269
+ ] })
270
+ ]
271
+ }
272
+ );
273
+ }
274
+ export {
275
+ E as AttachmentChips,
276
+ S as GuidelinesSwitch,
277
+ T as HistorySheet,
278
+ H as MentionMenu,
279
+ K as ReverseSearchBar,
280
+ L as TagChips,
281
+ G as TagScrollList,
282
+ F as UnsendBanner,
283
+ k as fmtBytes
284
+ };
285
+ //# sourceMappingURL=parts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parts.js","sources":["../../../src/components/rich-input/parts.tsx"],"sourcesContent":["import { useEffect, type ReactNode } from 'react';\nimport { File as FileIcon, History, ListChecks, Undo2, X } from 'lucide-react';\n\nimport { cn } from '../../lib/utils';\nimport { VirtualList } from '../virtual-list';\nimport { tagSlug } from './use-mention';\nimport type { GuidelineTag, RichFile } from './types';\n\nexport function fmtBytes(n: number): string {\n if (!Number.isFinite(n) || n <= 0) return '0 B';\n const u = ['B', 'KB', 'MB', 'GB'];\n const i = Math.min(u.length - 1, Math.floor(Math.log(n) / Math.log(1024)));\n return `${(n / 1024 ** i).toFixed(i === 0 ? 0 : 1)} ${u[i]}`;\n}\n\n/* ── Attachments ─────────────────────────────────────────────────────────── */\nexport function AttachmentChips({\n files,\n onRemove,\n}: {\n files: RichFile[];\n onRemove: (id: string) => void;\n}) {\n if (files.length === 0) return null;\n return (\n <div className=\"flex flex-wrap gap-1.5 px-1 pb-1.5\">\n {files.map((f) => {\n const isImage = f.contentType.startsWith('image/') && f.url;\n return (\n <span\n key={f.id}\n className=\"group inline-flex max-w-[13rem] items-center gap-1.5 rounded-md border border-input bg-background/60 py-1 pl-1.5 pr-1 text-xs\"\n >\n {isImage ? (\n <img src={f.url} alt=\"\" className=\"size-5 shrink-0 rounded object-cover\" />\n ) : (\n <FileIcon className=\"size-3.5 shrink-0 text-muted-foreground\" />\n )}\n <span className=\"min-w-0 truncate text-foreground\">{f.name}</span>\n <span className=\"shrink-0 text-[10px] text-muted-foreground\">{fmtBytes(f.size)}</span>\n <button\n type=\"button\"\n aria-label={`Remove ${f.name}`}\n onMouseDown={(e) => e.preventDefault()}\n onClick={() => onRemove(f.id)}\n className=\"ml-0.5 inline-flex size-4 shrink-0 items-center justify-center rounded text-muted-foreground transition-colors hover:bg-muted hover:text-foreground\"\n >\n <X className=\"size-3\" />\n </button>\n </span>\n );\n })}\n </div>\n );\n}\n\n/* ── A single toggle chip ────────────────────────────────────────────────── */\nfunction TagChip({ tag, on, onToggle }: { tag: GuidelineTag; on: boolean; onToggle: (id: string) => void }) {\n const label = on ? tag.label : (tag.labelOff ?? tag.label);\n return (\n <button\n type=\"button\"\n aria-pressed={on}\n onMouseDown={(e) => e.preventDefault()}\n onClick={() => onToggle(tag.id)}\n className={cn(\n 'inline-flex items-center gap-1 rounded-full border px-2.5 py-1 text-xs transition-colors',\n on\n ? 'border-primary/40 bg-primary/10 text-foreground'\n : 'border-input text-muted-foreground hover:text-foreground',\n )}\n >\n {tag.icon}\n {label}\n </button>\n );\n}\n\n/* ── Guideline master on/off switch ──────────────────────────────────────── */\nexport function GuidelinesSwitch({ on, onToggle }: { on: boolean; onToggle: () => void }) {\n return (\n <button\n type=\"button\"\n aria-pressed={on}\n onMouseDown={(e) => e.preventDefault()}\n onClick={onToggle}\n title={\n on\n ? 'Guidelines are appended to the prompt — click to send it as typed'\n : 'Prompt is sent as typed — click to append the guidelines again'\n }\n className={cn(\n 'inline-flex shrink-0 items-center gap-1 rounded-full border px-2 py-1 text-[11px] font-medium transition-colors',\n on\n ? 'border-primary/60 bg-primary/10 text-primary hover:bg-primary/20'\n : 'border-input bg-transparent text-muted-foreground hover:text-foreground',\n )}\n >\n <ListChecks className=\"size-3\" />\n Guidelines {on ? 'on' : 'off'}\n </button>\n );\n}\n\n/* ── Guideline toggle chips (with show-more + optional leading switch) ────── */\nexport function TagChips({\n tags,\n selected,\n onToggle,\n showMax,\n expanded,\n onExpand,\n leading,\n}: {\n tags: GuidelineTag[];\n selected: Set<string>;\n onToggle: (id: string) => void;\n showMax?: number;\n expanded: boolean;\n onExpand: () => void;\n /** Rendered as the first item of the row (e.g. the guidelines master switch). */\n leading?: ReactNode;\n}) {\n if (tags.length === 0 && !leading) return null;\n const hidden = showMax != null && !expanded ? Math.max(0, tags.length - showMax) : 0;\n const shown = hidden > 0 ? tags.slice(0, showMax) : tags;\n return (\n <div className=\"flex flex-wrap items-center gap-1.5\">\n {leading}\n {shown.map((t) => (\n <TagChip key={t.id} tag={t} on={selected.has(t.id)} onToggle={onToggle} />\n ))}\n {hidden > 0 && (\n <button\n type=\"button\"\n onMouseDown={(e) => e.preventDefault()}\n onClick={onExpand}\n className=\"rounded-full border border-dashed border-input px-2.5 py-1 text-xs text-muted-foreground transition-colors hover:text-foreground\"\n >\n +{hidden} more\n </button>\n )}\n </div>\n );\n}\n\n/* ── Scrollable tag list (e.g. project/service locations), capped in height ── */\nconst TAG_ROW_H = 30; // approx chip row height (px) incl. vertical gap\n\nexport function TagScrollList({\n tags,\n selected,\n onToggle,\n rows = 3,\n}: {\n tags: GuidelineTag[];\n selected: Set<string>;\n onToggle: (id: string) => void;\n /** Visible height in chip rows before it scrolls. Default 3. */\n rows?: number;\n}) {\n if (tags.length === 0) return null;\n return (\n <div\n className=\"overflow-y-auto rounded-lg border border-input/60 bg-background/40 p-1.5\"\n style={{ maxHeight: rows * TAG_ROW_H }}\n >\n <div className=\"flex flex-wrap gap-1.5\">\n {tags.map((t) => (\n <TagChip key={t.id} tag={t} on={selected.has(t.id)} onToggle={onToggle} />\n ))}\n </div>\n </div>\n );\n}\n\n/* ── Mention autocomplete menu ───────────────────────────────────────────── */\nexport function MentionMenu({\n matches,\n active,\n prefix,\n onHover,\n onPick,\n}: {\n matches: GuidelineTag[];\n active: number;\n prefix: string;\n onHover: (i: number) => void;\n onPick: (tag: GuidelineTag) => void;\n}) {\n return (\n <div className=\"mb-1.5 max-h-56 overflow-y-auto rounded-lg border border-border bg-popover p-1 shadow-lg\">\n {matches.map((t, i) => (\n <button\n key={t.id}\n type=\"button\"\n onMouseDown={(e) => e.preventDefault()}\n onMouseEnter={() => onHover(i)}\n onClick={() => onPick(t)}\n className={cn(\n 'flex w-full items-center gap-2 rounded-md px-2 py-1.5 text-left text-sm transition-colors',\n i === active ? 'bg-accent text-accent-foreground' : 'text-foreground hover:bg-accent/60',\n )}\n >\n {t.icon}\n <span className=\"font-medium\">\n {prefix}\n {tagSlug(t)}\n </span>\n {t.description && (\n <span className=\"ml-auto truncate text-xs text-muted-foreground\">{t.description}</span>\n )}\n </button>\n ))}\n </div>\n );\n}\n\n/* ── Reverse (Ctrl+R) search bar ─────────────────────────────────────────── */\nexport function ReverseSearchBar({\n query,\n match,\n onQueryChange,\n onNext,\n onAccept,\n onClose,\n}: {\n query: string;\n match: string | null;\n onQueryChange: (q: string) => void;\n onNext: () => void;\n onAccept: () => void;\n onClose: () => void;\n}) {\n return (\n <div className=\"mb-1.5 flex items-center gap-2 rounded-lg border border-border bg-popover px-2.5 py-1.5 text-sm shadow-lg\">\n <span className=\"shrink-0 font-mono text-xs text-muted-foreground\">(reverse-i-search)</span>\n <input\n autoFocus\n value={query}\n placeholder=\"type to search history…\"\n onChange={(e) => onQueryChange(e.target.value)}\n onKeyDown={(e) => {\n if (e.key === 'Enter') {\n e.preventDefault();\n onAccept();\n } else if (e.key === 'Escape') {\n e.preventDefault();\n onClose();\n } else if ((e.ctrlKey && e.key.toLowerCase() === 'r') || e.key === 'ArrowUp') {\n e.preventDefault();\n onNext();\n }\n }}\n className=\"w-28 shrink-0 bg-transparent text-foreground outline-none placeholder:text-muted-foreground\"\n />\n <span className=\"min-w-0 flex-1 truncate text-muted-foreground\">{match ?? 'no match'}</span>\n <button\n type=\"button\"\n aria-label=\"Close search\"\n onClick={onClose}\n className=\"inline-flex size-5 shrink-0 items-center justify-center rounded text-muted-foreground hover:text-foreground\"\n >\n <X className=\"size-3.5\" />\n </button>\n </div>\n );\n}\n\n/* ── Mobile history sheet ────────────────────────────────────────────────── */\nexport function HistorySheet({\n entries,\n onPick,\n onClose,\n}: {\n entries: string[];\n onPick: (value: string) => void;\n onClose: () => void;\n}) {\n useEffect(() => {\n const onKey = (e: KeyboardEvent) => e.key === 'Escape' && onClose();\n window.addEventListener('keydown', onKey);\n return () => window.removeEventListener('keydown', onKey);\n }, [onClose]);\n\n // Newest first for a history list.\n const rows = [...entries].reverse();\n return (\n <div className=\"fixed inset-0 z-[120] flex flex-col justify-end bg-black/40\" onClick={onClose}>\n <div\n className=\"max-h-[70vh] rounded-t-2xl border-t border-border bg-card shadow-2xl\"\n onClick={(e) => e.stopPropagation()}\n >\n <div className=\"flex items-center justify-between gap-3 border-b border-border px-4 py-3\">\n <span className=\"flex items-center gap-2 text-sm font-medium text-foreground\">\n <History className=\"size-4\" /> History\n </span>\n <button\n type=\"button\"\n aria-label=\"Close\"\n onClick={onClose}\n className=\"inline-flex size-7 items-center justify-center rounded-md border border-border text-muted-foreground hover:text-foreground\"\n >\n <X className=\"size-4\" />\n </button>\n </div>\n {rows.length === 0 ? (\n <div className=\"px-4 py-10 text-center text-sm text-muted-foreground\">No history yet</div>\n ) : (\n <VirtualList\n items={rows}\n className=\"max-h-[calc(70vh-3.25rem)] p-2\"\n estimateSize={52}\n getItemKey={(_, i) => i}\n renderItem={(value) => (\n <div className=\"px-1 pb-1.5\">\n <button\n type=\"button\"\n onClick={() => onPick(value)}\n className=\"flex w-full items-start gap-2 rounded-lg border border-transparent px-3 py-2 text-left text-sm text-foreground transition-colors hover:border-border hover:bg-accent/50\"\n >\n <Undo2 className=\"mt-0.5 size-3.5 shrink-0 text-muted-foreground\" />\n <span className=\"line-clamp-2 min-w-0 flex-1\">{value}</span>\n </button>\n </div>\n )}\n />\n )}\n </div>\n </div>\n );\n}\n\n/* ── Un-send banner ──────────────────────────────────────────────────────── */\nexport function UnsendBanner({\n countdown,\n onUndo,\n}: {\n countdown: number;\n onUndo: () => void;\n}) {\n return (\n <button\n type=\"button\"\n onClick={onUndo}\n className=\"flex w-full items-center justify-center gap-2 rounded-xl border border-primary/40 bg-primary/10 px-3 py-2.5 text-sm text-foreground transition-colors hover:bg-primary/15\"\n >\n <Undo2 className=\"size-4\" />\n Sent — tap to un-send\n <span className=\"font-mono tabular-nums text-muted-foreground\">{countdown}s</span>\n </button>\n );\n}\n"],"names":["fmtBytes","n","u","i","AttachmentChips","files","onRemove","f","isImage","jsxs","jsx","FileIcon","e","X","TagChip","tag","on","onToggle","label","cn","GuidelinesSwitch","ListChecks","TagChips","tags","selected","showMax","expanded","onExpand","leading","hidden","shown","t","TAG_ROW_H","TagScrollList","rows","MentionMenu","matches","active","prefix","onHover","onPick","tagSlug","ReverseSearchBar","query","match","onQueryChange","onNext","onAccept","onClose","HistorySheet","entries","useEffect","onKey","History","VirtualList","_","value","Undo2","UnsendBanner","countdown","onUndo"],"mappings":"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"}
@@ -0,0 +1,64 @@
1
+ import { ReactNode } from 'react';
2
+ import { ComposeInput, GuidelineTag, RichFile, RichInputHandle, RichSendPayload } from './types';
3
+ export interface RichInputProps {
4
+ /** Initial text (ignored when a cached draft exists). */
5
+ defaultValue?: string;
6
+ placeholder?: string;
7
+ disabled?: boolean;
8
+ className?: string;
9
+ autoFocus?: boolean;
10
+ minRows?: number;
11
+ maxRows?: number;
12
+ /** Fired once the un-send window elapses (or immediately when it is 0). */
13
+ onSubmit?: (payload: RichSendPayload) => void | Promise<void>;
14
+ /** ms to hold a submission so it can be un-sent. 0 disables. Default 3000. */
15
+ undoWindowMs?: number;
16
+ /** `'enter'` (default): Enter submits, Shift+Enter newline. `'mod+enter'`: ⌘/Ctrl+Enter submits. */
17
+ submitKey?: 'enter' | 'mod+enter';
18
+ /** Persist the draft under this key (localStorage). Also namespaces history. */
19
+ cacheKey?: string;
20
+ cacheLocation?: 'local' | 'session';
21
+ /** Upload handler. Omit to keep files client-side (object URLs). */
22
+ uploadFiles?: (files: File[]) => Promise<RichFile[]>;
23
+ accept?: string;
24
+ maxFiles?: number;
25
+ fileFilter?: (file: File) => boolean | string;
26
+ /**
27
+ * Attach files dropped anywhere on the composer. On by default whenever file
28
+ * support is (i.e. one of `uploadFiles` / `accept` / `maxFiles` is set); the
29
+ * drops go through the same `accept` / `maxFiles` / `fileFilter` checks as the
30
+ * paperclip. Dragged text still drops into the textarea as usual.
31
+ */
32
+ fileDrop?: boolean;
33
+ /** Expand dropped folders into their files (Chromium/WebKit). Default true. */
34
+ dropDirectories?: boolean;
35
+ /** Guideline / mention tags. */
36
+ tags?: GuidelineTag[];
37
+ onTagsChange?: (active: GuidelineTag[]) => void;
38
+ /** Show the guideline toggle chip row. Defaults to true when toggle tags exist. */
39
+ guidelines?: boolean;
40
+ /**
41
+ * Render a built-in on/off master switch for the guideline chips. When off,
42
+ * the guideline lines are dropped from the composed prompt and the guideline
43
+ * chip row is hidden; `group: 'tag'` chips are unaffected. Default false.
44
+ */
45
+ guidelinesToggle?: boolean;
46
+ /** Initial state of the guidelines master switch. Default true. */
47
+ defaultGuidelinesOn?: boolean;
48
+ /** Notified when the guidelines master switch flips. */
49
+ onGuidelinesToggle?: (on: boolean) => void;
50
+ /** Height (in chip rows) of the scrollable `group: 'tag'` list. Default 3. */
51
+ tagListRows?: number;
52
+ /** Chips shown before a "+N more" button. */
53
+ showMax?: number;
54
+ /** Mention trigger symbol. Default `#`. */
55
+ mentionPrefix?: string;
56
+ /** Enable Up-arrow / Ctrl+R history + the mobile history sheet. Default true. */
57
+ history?: boolean;
58
+ /** Override how the final prompt string is composed. */
59
+ composePrompt?: (input: ComposeInput) => string;
60
+ /** Extra buttons rendered in the toolbar's left cluster. */
61
+ toolbarExtra?: ReactNode;
62
+ }
63
+ export declare const RichInput: import('react').ForwardRefExoticComponent<RichInputProps & import('react').RefAttributes<RichInputHandle>>;
64
+ //# sourceMappingURL=rich-input.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rich-input.d.ts","sourceRoot":"","sources":["../../../src/components/rich-input/rich-input.tsx"],"names":[],"mappings":"AAAA,OAAO,EASL,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAqBf,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,QAAQ,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAItG,MAAM,WAAW,cAAc;IAC7B,yDAAyD;IACzD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,2EAA2E;IAC3E,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,eAAe,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9D,8EAA8E;IAC9E,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,oGAAoG;IACpG,SAAS,CAAC,EAAE,OAAO,GAAG,WAAW,CAAC;IAElC,gFAAgF;IAChF,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAEpC,oEAAoE;IACpE,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;IACrD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,OAAO,GAAG,MAAM,CAAC;IAC9C;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,+EAA+E;IAC/E,eAAe,CAAC,EAAE,OAAO,CAAC;IAE1B,gCAAgC;IAChC,IAAI,CAAC,EAAE,YAAY,EAAE,CAAC;IACtB,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,YAAY,EAAE,KAAK,IAAI,CAAC;IAChD,mFAAmF;IACnF,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,mEAAmE;IACnE,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,wDAAwD;IACxD,kBAAkB,CAAC,EAAE,CAAC,EAAE,EAAE,OAAO,KAAK,IAAI,CAAC;IAC3C,8EAA8E;IAC9E,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,6CAA6C;IAC7C,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,2CAA2C;IAC3C,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB,iFAAiF;IACjF,OAAO,CAAC,EAAE,OAAO,CAAC;IAElB,wDAAwD;IACxD,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,MAAM,CAAC;IAEhD,4DAA4D;IAC5D,YAAY,CAAC,EAAE,SAAS,CAAC;CAC1B;AAED,eAAO,MAAM,SAAS,4GA+cpB,CAAC"}