@copilotkit/react-textarea 0.19.0-alpha.7 → 0.19.0-alpha.8

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 (277) hide show
  1. package/.turbo/turbo-build.log +163 -160
  2. package/CHANGELOG.md +11 -0
  3. package/dist/components/base-copilot-textarea/base-copilot-textarea.mjs +1910 -33
  4. package/dist/components/base-copilot-textarea/base-copilot-textarea.mjs.map +1 -1
  5. package/dist/components/base-copilot-textarea/render-element.mjs +52 -3
  6. package/dist/components/base-copilot-textarea/render-element.mjs.map +1 -1
  7. package/dist/components/base-copilot-textarea/render-placeholder.mjs +46 -3
  8. package/dist/components/base-copilot-textarea/render-placeholder.mjs.map +1 -1
  9. package/dist/components/base-copilot-textarea/track-cursor-moved-since-last-text-change.mjs +86 -4
  10. package/dist/components/base-copilot-textarea/track-cursor-moved-since-last-text-change.mjs.map +1 -1
  11. package/dist/components/base-copilot-textarea/use-add-branding-css.mjs +57 -3
  12. package/dist/components/base-copilot-textarea/use-add-branding-css.mjs.map +1 -1
  13. package/dist/components/copilot-textarea/copilot-textarea.mjs +2378 -45
  14. package/dist/components/copilot-textarea/copilot-textarea.mjs.map +1 -1
  15. package/dist/components/hovering-toolbar/hovering-editor-provider.mjs +22 -3
  16. package/dist/components/hovering-toolbar/hovering-editor-provider.mjs.map +1 -1
  17. package/dist/components/hovering-toolbar/hovering-toolbar-components.mjs +125 -3
  18. package/dist/components/hovering-toolbar/hovering-toolbar-components.mjs.map +1 -1
  19. package/dist/components/hovering-toolbar/hovering-toolbar.mjs +1055 -16
  20. package/dist/components/hovering-toolbar/hovering-toolbar.mjs.map +1 -1
  21. package/dist/components/hovering-toolbar/text-insertion-prompt-box/hovering-insertion-prompt-box-core.mjs +761 -10
  22. package/dist/components/hovering-toolbar/text-insertion-prompt-box/hovering-insertion-prompt-box-core.mjs.map +1 -1
  23. package/dist/components/hovering-toolbar/text-insertion-prompt-box/hovering-insertion-prompt-box.mjs +774 -11
  24. package/dist/components/hovering-toolbar/text-insertion-prompt-box/hovering-insertion-prompt-box.mjs.map +1 -1
  25. package/dist/components/hovering-toolbar/text-insertion-prompt-box/index.mjs +774 -12
  26. package/dist/components/hovering-toolbar/text-insertion-prompt-box/index.mjs.map +1 -1
  27. package/dist/components/index.mjs +2379 -46
  28. package/dist/components/index.mjs.map +1 -1
  29. package/dist/components/manual-ui/chip-with-icon.mjs +5 -6
  30. package/dist/components/manual-ui/chip-with-icon.mjs.map +1 -1
  31. package/dist/components/source-search-box/source-search-box.mjs +356 -10
  32. package/dist/components/source-search-box/source-search-box.mjs.map +1 -1
  33. package/dist/components/ui/button.mjs +88 -4
  34. package/dist/components/ui/button.mjs.map +1 -1
  35. package/dist/components/ui/card.mjs +53 -7
  36. package/dist/components/ui/card.mjs.map +1 -1
  37. package/dist/components/ui/command.mjs +266 -5
  38. package/dist/components/ui/command.mjs.map +1 -1
  39. package/dist/components/ui/dialog.mjs +164 -4
  40. package/dist/components/ui/dialog.mjs.map +1 -1
  41. package/dist/components/ui/label.mjs +63 -4
  42. package/dist/components/ui/label.mjs.map +1 -1
  43. package/dist/components/ui/separator.mjs +50 -8
  44. package/dist/components/ui/separator.mjs.map +1 -1
  45. package/dist/components/ui/textarea.mjs +48 -7
  46. package/dist/components/ui/textarea.mjs.map +1 -1
  47. package/dist/context/index.mjs +0 -2
  48. package/dist/context/index.mjs.map +1 -1
  49. package/dist/hooks/base-copilot-textarea-implementation/use-autosuggestions.mjs +168 -6
  50. package/dist/hooks/base-copilot-textarea-implementation/use-autosuggestions.mjs.map +1 -1
  51. package/dist/hooks/base-copilot-textarea-implementation/use-copilot-textarea-editor.mjs +168 -4
  52. package/dist/hooks/base-copilot-textarea-implementation/use-copilot-textarea-editor.mjs.map +1 -1
  53. package/dist/hooks/base-copilot-textarea-implementation/use-populate-copilot-textarea-ref.mjs +155 -5
  54. package/dist/hooks/base-copilot-textarea-implementation/use-populate-copilot-textarea-ref.mjs.map +1 -1
  55. package/dist/hooks/index.mjs +0 -2
  56. package/dist/hooks/index.mjs.map +1 -1
  57. package/dist/hooks/make-autosuggestions-function/use-make-standard-autosuggestions-function.mjs +145 -14
  58. package/dist/hooks/make-autosuggestions-function/use-make-standard-autosuggestions-function.mjs.map +1 -1
  59. package/dist/hooks/make-autosuggestions-function/use-make-standard-insertion-function.mjs +199 -14
  60. package/dist/hooks/make-autosuggestions-function/use-make-standard-insertion-function.mjs.map +1 -1
  61. package/dist/hooks/misc/use-autosize-textarea.mjs +15 -3
  62. package/dist/hooks/misc/use-autosize-textarea.mjs.map +1 -1
  63. package/dist/index.mjs +2382 -48
  64. package/dist/index.mjs.map +1 -1
  65. package/dist/lib/debouncer.mjs +51 -3
  66. package/dist/lib/debouncer.mjs.map +1 -1
  67. package/dist/lib/editor-to-text.mjs +43 -3
  68. package/dist/lib/editor-to-text.mjs.map +1 -1
  69. package/dist/lib/get-text-around-cursor.mjs +109 -3
  70. package/dist/lib/get-text-around-cursor.mjs.map +1 -1
  71. package/dist/lib/retry.mjs +17 -3
  72. package/dist/lib/retry.mjs.map +1 -1
  73. package/dist/lib/slatejs-edits/add-autocompletions.mjs +25 -3
  74. package/dist/lib/slatejs-edits/add-autocompletions.mjs.map +1 -1
  75. package/dist/lib/slatejs-edits/clear-autocompletions.mjs +23 -3
  76. package/dist/lib/slatejs-edits/clear-autocompletions.mjs.map +1 -1
  77. package/dist/lib/slatejs-edits/replace-text.mjs +27 -3
  78. package/dist/lib/slatejs-edits/replace-text.mjs.map +1 -1
  79. package/dist/lib/slatejs-edits/with-partial-history.mjs +106 -3
  80. package/dist/lib/slatejs-edits/with-partial-history.mjs.map +1 -1
  81. package/dist/lib/stream-promise-flatten.mjs +47 -3
  82. package/dist/lib/stream-promise-flatten.mjs.map +1 -1
  83. package/dist/lib/utils.mjs +71 -3
  84. package/dist/lib/utils.mjs.map +1 -1
  85. package/dist/lib/utils.test.mjs +0 -1
  86. package/dist/lib/utils.test.mjs.map +1 -1
  87. package/dist/types/autosuggestions-config/autosuggestions-config-user-specified.mjs +0 -2
  88. package/dist/types/autosuggestions-config/autosuggestions-config-user-specified.mjs.map +1 -1
  89. package/dist/types/autosuggestions-config/autosuggestions-config.mjs +253 -8
  90. package/dist/types/autosuggestions-config/autosuggestions-config.mjs.map +1 -1
  91. package/dist/types/autosuggestions-config/editing-api-config.mjs +83 -3
  92. package/dist/types/autosuggestions-config/editing-api-config.mjs.map +1 -1
  93. package/dist/types/autosuggestions-config/index.mjs +309 -10
  94. package/dist/types/autosuggestions-config/index.mjs.map +1 -1
  95. package/dist/types/autosuggestions-config/insertions-api-config.mjs +77 -3
  96. package/dist/types/autosuggestions-config/insertions-api-config.mjs.map +1 -1
  97. package/dist/types/autosuggestions-config/subtypes/chatlike-api-endpoint.mjs +77 -3
  98. package/dist/types/autosuggestions-config/subtypes/chatlike-api-endpoint.mjs.map +1 -1
  99. package/dist/types/autosuggestions-config/subtypes/make-system-prompt.mjs +0 -2
  100. package/dist/types/autosuggestions-config/subtypes/make-system-prompt.mjs.map +1 -1
  101. package/dist/types/autosuggestions-config/subtypes/minimal-chat-gpt-message.mjs +0 -2
  102. package/dist/types/autosuggestions-config/subtypes/minimal-chat-gpt-message.mjs.map +1 -1
  103. package/dist/types/autosuggestions-config/suggestions-api-config.mjs +64 -3
  104. package/dist/types/autosuggestions-config/suggestions-api-config.mjs.map +1 -1
  105. package/dist/types/base/autosuggestion-state.mjs +0 -2
  106. package/dist/types/base/autosuggestion-state.mjs.map +1 -1
  107. package/dist/types/base/autosuggestions-bare-function.mjs +0 -2
  108. package/dist/types/base/autosuggestions-bare-function.mjs.map +1 -1
  109. package/dist/types/base/base-autosuggestions-config.mjs +11 -3
  110. package/dist/types/base/base-autosuggestions-config.mjs.map +1 -1
  111. package/dist/types/base/base-copilot-textarea-props.mjs +0 -2
  112. package/dist/types/base/base-copilot-textarea-props.mjs.map +1 -1
  113. package/dist/types/base/custom-editor.mjs +0 -2
  114. package/dist/types/base/custom-editor.mjs.map +1 -1
  115. package/dist/types/base/editor-autocomplete-state.mjs +17 -4
  116. package/dist/types/base/editor-autocomplete-state.mjs.map +1 -1
  117. package/dist/types/base/index.mjs +11 -4
  118. package/dist/types/base/index.mjs.map +1 -1
  119. package/dist/types/html-copilot-textarea-element.mjs +0 -2
  120. package/dist/types/html-copilot-textarea-element.mjs.map +1 -1
  121. package/dist/types/index.mjs +310 -12
  122. package/dist/types/index.mjs.map +1 -1
  123. package/package.json +4 -4
  124. package/dist/chunk-2NURR2DX.mjs +0 -47
  125. package/dist/chunk-2NURR2DX.mjs.map +0 -1
  126. package/dist/chunk-2TQBFDO7.mjs +0 -19
  127. package/dist/chunk-2TQBFDO7.mjs.map +0 -1
  128. package/dist/chunk-4S5ZJH3I.mjs +0 -18
  129. package/dist/chunk-4S5ZJH3I.mjs.map +0 -1
  130. package/dist/chunk-5EJ5XOGP.mjs +0 -22
  131. package/dist/chunk-5EJ5XOGP.mjs.map +0 -1
  132. package/dist/chunk-5FO6ISW4.mjs +0 -3
  133. package/dist/chunk-5FO6ISW4.mjs.map +0 -1
  134. package/dist/chunk-66BDXIX4.mjs +0 -76
  135. package/dist/chunk-66BDXIX4.mjs.map +0 -1
  136. package/dist/chunk-7XKICWEE.mjs +0 -44
  137. package/dist/chunk-7XKICWEE.mjs.map +0 -1
  138. package/dist/chunk-CSGFJU3L.mjs +0 -65
  139. package/dist/chunk-CSGFJU3L.mjs.map +0 -1
  140. package/dist/chunk-D7SEV5PR.mjs +0 -12
  141. package/dist/chunk-D7SEV5PR.mjs.map +0 -1
  142. package/dist/chunk-DE5K76I2.mjs +0 -3
  143. package/dist/chunk-DE5K76I2.mjs.map +0 -1
  144. package/dist/chunk-F3MHL6ZY.mjs +0 -25
  145. package/dist/chunk-F3MHL6ZY.mjs.map +0 -1
  146. package/dist/chunk-FN7GDKKG.mjs +0 -29
  147. package/dist/chunk-FN7GDKKG.mjs.map +0 -1
  148. package/dist/chunk-H4VKQGVU.mjs +0 -3
  149. package/dist/chunk-H4VKQGVU.mjs.map +0 -1
  150. package/dist/chunk-HRTFMM7P.mjs +0 -82
  151. package/dist/chunk-HRTFMM7P.mjs.map +0 -1
  152. package/dist/chunk-IU3WTXLQ.mjs +0 -3
  153. package/dist/chunk-IU3WTXLQ.mjs.map +0 -1
  154. package/dist/chunk-IXJ2HCOA.mjs +0 -101
  155. package/dist/chunk-IXJ2HCOA.mjs.map +0 -1
  156. package/dist/chunk-JAFCXEPU.mjs +0 -10
  157. package/dist/chunk-JAFCXEPU.mjs.map +0 -1
  158. package/dist/chunk-JHTAOLEW.mjs +0 -63
  159. package/dist/chunk-JHTAOLEW.mjs.map +0 -1
  160. package/dist/chunk-K2AVA67P.mjs +0 -57
  161. package/dist/chunk-K2AVA67P.mjs.map +0 -1
  162. package/dist/chunk-KCHYD3EB.mjs +0 -107
  163. package/dist/chunk-KCHYD3EB.mjs.map +0 -1
  164. package/dist/chunk-KGKLUWKW.mjs +0 -47
  165. package/dist/chunk-KGKLUWKW.mjs.map +0 -1
  166. package/dist/chunk-KIRROE2K.mjs +0 -37
  167. package/dist/chunk-KIRROE2K.mjs.map +0 -1
  168. package/dist/chunk-L7VVZH4Q.mjs +0 -3
  169. package/dist/chunk-L7VVZH4Q.mjs.map +0 -1
  170. package/dist/chunk-LNAIMEB2.mjs +0 -34
  171. package/dist/chunk-LNAIMEB2.mjs.map +0 -1
  172. package/dist/chunk-MMVDU6DF.mjs +0 -3
  173. package/dist/chunk-MMVDU6DF.mjs.map +0 -1
  174. package/dist/chunk-MPME5BW2.mjs +0 -59
  175. package/dist/chunk-MPME5BW2.mjs.map +0 -1
  176. package/dist/chunk-MRXNTQOX.mjs +0 -55
  177. package/dist/chunk-MRXNTQOX.mjs.map +0 -1
  178. package/dist/chunk-ND5PXTAW.mjs +0 -17
  179. package/dist/chunk-ND5PXTAW.mjs.map +0 -1
  180. package/dist/chunk-NKA6K7FW.mjs +0 -201
  181. package/dist/chunk-NKA6K7FW.mjs.map +0 -1
  182. package/dist/chunk-NKW5OU2S.mjs +0 -33
  183. package/dist/chunk-NKW5OU2S.mjs.map +0 -1
  184. package/dist/chunk-O5OWT5GE.mjs +0 -114
  185. package/dist/chunk-O5OWT5GE.mjs.map +0 -1
  186. package/dist/chunk-OD7ZMOVE.mjs +0 -45
  187. package/dist/chunk-OD7ZMOVE.mjs.map +0 -1
  188. package/dist/chunk-OELUUJZY.mjs +0 -16
  189. package/dist/chunk-OELUUJZY.mjs.map +0 -1
  190. package/dist/chunk-OXPXFYUG.mjs +0 -111
  191. package/dist/chunk-OXPXFYUG.mjs.map +0 -1
  192. package/dist/chunk-RQHOUUXQ.mjs +0 -29
  193. package/dist/chunk-RQHOUUXQ.mjs.map +0 -1
  194. package/dist/chunk-U5AJ5PBH.mjs +0 -107
  195. package/dist/chunk-U5AJ5PBH.mjs.map +0 -1
  196. package/dist/chunk-UHD44NC5.mjs +0 -101
  197. package/dist/chunk-UHD44NC5.mjs.map +0 -1
  198. package/dist/chunk-WADHCMPK.mjs +0 -3
  199. package/dist/chunk-WADHCMPK.mjs.map +0 -1
  200. package/dist/chunk-WJHSY5T6.mjs +0 -3
  201. package/dist/chunk-WJHSY5T6.mjs.map +0 -1
  202. package/dist/chunk-WJYQWL4I.mjs +0 -27
  203. package/dist/chunk-WJYQWL4I.mjs.map +0 -1
  204. package/dist/chunk-XA7M72ZO.mjs +0 -106
  205. package/dist/chunk-XA7M72ZO.mjs.map +0 -1
  206. package/dist/chunk-XHUMROEY.mjs +0 -91
  207. package/dist/chunk-XHUMROEY.mjs.map +0 -1
  208. package/dist/chunk-XYXKONR4.mjs +0 -501
  209. package/dist/chunk-XYXKONR4.mjs.map +0 -1
  210. package/dist/chunk-YQU7WG7T.mjs +0 -83
  211. package/dist/chunk-YQU7WG7T.mjs.map +0 -1
  212. package/dist/chunk-YTOPHPSG.mjs +0 -45
  213. package/dist/chunk-YTOPHPSG.mjs.map +0 -1
  214. package/dist/chunk-YW3REYX6.mjs +0 -23
  215. package/dist/chunk-YW3REYX6.mjs.map +0 -1
  216. package/dist/chunk-ZA3R6NZI.mjs +0 -20
  217. package/dist/chunk-ZA3R6NZI.mjs.map +0 -1
  218. package/dist/components/base-copilot-textarea/base-copilot-textarea.d.ts +0 -13
  219. package/dist/components/base-copilot-textarea/render-element.d.ts +0 -6
  220. package/dist/components/base-copilot-textarea/render-placeholder.d.ts +0 -6
  221. package/dist/components/base-copilot-textarea/track-cursor-moved-since-last-text-change.d.ts +0 -6
  222. package/dist/components/base-copilot-textarea/use-add-branding-css.d.ts +0 -3
  223. package/dist/components/copilot-textarea/copilot-textarea.d.ts +0 -19
  224. package/dist/components/hovering-toolbar/hovering-editor-provider.d.ts +0 -13
  225. package/dist/components/hovering-toolbar/hovering-toolbar-components.d.ts +0 -18
  226. package/dist/components/hovering-toolbar/hovering-toolbar.d.ts +0 -8
  227. package/dist/components/hovering-toolbar/text-insertion-prompt-box/hovering-insertion-prompt-box-core.d.ts +0 -29
  228. package/dist/components/hovering-toolbar/text-insertion-prompt-box/hovering-insertion-prompt-box.d.ts +0 -12
  229. package/dist/components/hovering-toolbar/text-insertion-prompt-box/index.d.ts +0 -3
  230. package/dist/components/index.d.ts +0 -14
  231. package/dist/components/manual-ui/chip-with-icon.d.ts +0 -10
  232. package/dist/components/source-search-box/source-search-box.d.ts +0 -17
  233. package/dist/components/ui/button.d.ts +0 -14
  234. package/dist/components/ui/card.d.ts +0 -10
  235. package/dist/components/ui/command.d.ts +0 -48
  236. package/dist/components/ui/dialog.d.ts +0 -18
  237. package/dist/components/ui/label.d.ts +0 -8
  238. package/dist/components/ui/separator.d.ts +0 -6
  239. package/dist/components/ui/textarea.d.ts +0 -7
  240. package/dist/context/index.d.ts +0 -1
  241. package/dist/hooks/base-copilot-textarea-implementation/use-autosuggestions.d.ts +0 -13
  242. package/dist/hooks/base-copilot-textarea-implementation/use-copilot-textarea-editor.d.ts +0 -8
  243. package/dist/hooks/base-copilot-textarea-implementation/use-populate-copilot-textarea-ref.d.ts +0 -7
  244. package/dist/hooks/index.d.ts +0 -1
  245. package/dist/hooks/make-autosuggestions-function/use-make-standard-autosuggestions-function.d.ts +0 -21
  246. package/dist/hooks/make-autosuggestions-function/use-make-standard-insertion-function.d.ts +0 -22
  247. package/dist/hooks/misc/use-autosize-textarea.d.ts +0 -5
  248. package/dist/index.d.ts +0 -16
  249. package/dist/lib/debouncer.d.ts +0 -11
  250. package/dist/lib/editor-to-text.d.ts +0 -7
  251. package/dist/lib/get-text-around-cursor.d.ts +0 -15
  252. package/dist/lib/retry.d.ts +0 -3
  253. package/dist/lib/slatejs-edits/add-autocompletions.d.ts +0 -8
  254. package/dist/lib/slatejs-edits/clear-autocompletions.d.ts +0 -8
  255. package/dist/lib/slatejs-edits/replace-text.d.ts +0 -5
  256. package/dist/lib/slatejs-edits/with-partial-history.d.ts +0 -10
  257. package/dist/lib/stream-promise-flatten.d.ts +0 -3
  258. package/dist/lib/utils.d.ts +0 -10
  259. package/dist/lib/utils.test.d.ts +0 -1
  260. package/dist/types/autosuggestions-config/autosuggestions-config-user-specified.d.ts +0 -22
  261. package/dist/types/autosuggestions-config/autosuggestions-config.d.ts +0 -19
  262. package/dist/types/autosuggestions-config/editing-api-config.d.ts +0 -15
  263. package/dist/types/autosuggestions-config/index.d.ts +0 -11
  264. package/dist/types/autosuggestions-config/insertions-api-config.d.ts +0 -15
  265. package/dist/types/autosuggestions-config/subtypes/chatlike-api-endpoint.d.ts +0 -27
  266. package/dist/types/autosuggestions-config/subtypes/make-system-prompt.d.ts +0 -3
  267. package/dist/types/autosuggestions-config/subtypes/minimal-chat-gpt-message.d.ts +0 -7
  268. package/dist/types/autosuggestions-config/suggestions-api-config.d.ts +0 -15
  269. package/dist/types/base/autosuggestion-state.d.ts +0 -8
  270. package/dist/types/base/autosuggestions-bare-function.d.ts +0 -17
  271. package/dist/types/base/base-autosuggestions-config.d.ts +0 -14
  272. package/dist/types/base/base-copilot-textarea-props.d.ts +0 -40
  273. package/dist/types/base/custom-editor.d.ts +0 -29
  274. package/dist/types/base/editor-autocomplete-state.d.ts +0 -10
  275. package/dist/types/base/index.d.ts +0 -4
  276. package/dist/types/html-copilot-textarea-element.d.ts +0 -7
  277. package/dist/types/index.d.ts +0 -14
@@ -1,107 +0,0 @@
1
- import { HoveringInsertionPromptBox } from './chunk-ZA3R6NZI.mjs';
2
- import { useHoveringEditorContext } from './chunk-YW3REYX6.mjs';
3
- import { Portal, Menu } from './chunk-XHUMROEY.mjs';
4
- import { getTextAroundSelection, getFullEditorTextWithNewlines } from './chunk-IXJ2HCOA.mjs';
5
- import { useRef, useState, useEffect } from 'react';
6
- import { Transforms } from 'slate';
7
- import { useSlate, useSlateSelection } from 'slate-react';
8
- import { jsx } from 'react/jsx-runtime';
9
-
10
- var HoveringToolbar = (props) => {
11
- const ref = useRef(null);
12
- const editor = useSlate();
13
- const selection = useSlateSelection();
14
- const { isDisplayed, setIsDisplayed } = useHoveringEditorContext();
15
- const [isClient, setIsClient] = useState(false);
16
- useEffect(() => {
17
- setIsClient(true);
18
- }, []);
19
- useEffect(() => {
20
- const el = ref.current;
21
- const { selection: selection2 } = editor;
22
- if (!el) {
23
- return;
24
- }
25
- if (!selection2) {
26
- el.removeAttribute("style");
27
- return;
28
- }
29
- const domSelection = window.getSelection();
30
- if (!domSelection) {
31
- return;
32
- }
33
- const domRange = domSelection.getRangeAt(0);
34
- const rect = domRange.getBoundingClientRect();
35
- if (rect.top === 0 && rect.left === 0 && rect.width === 0 && rect.height === 0) {
36
- return;
37
- }
38
- const minGapFromEdge = 60;
39
- const verticalOffsetFromCorner = 35;
40
- const horizontalOffsetFromCorner = 15;
41
- let top = rect.top + window.scrollY - el.offsetHeight + verticalOffsetFromCorner;
42
- if (top < minGapFromEdge) {
43
- top = rect.bottom + window.scrollY + minGapFromEdge;
44
- } else if (top + el.offsetHeight > window.innerHeight - minGapFromEdge) {
45
- top = rect.top + window.scrollY - el.offsetHeight - minGapFromEdge;
46
- }
47
- let left = rect.left + window.scrollX - el.offsetWidth / 2 + rect.width / 2 + horizontalOffsetFromCorner;
48
- if (left < minGapFromEdge) {
49
- left = minGapFromEdge;
50
- } else if (left + el.offsetWidth > window.innerWidth - minGapFromEdge) {
51
- left = window.innerWidth - el.offsetWidth - minGapFromEdge;
52
- }
53
- el.style.opacity = "1";
54
- el.style.top = `${top}px`;
55
- el.style.left = `${left}px`;
56
- });
57
- useEffect(() => {
58
- const handleClickOutside = (event) => {
59
- if (ref.current && !ref.current.contains(event.target)) {
60
- setIsDisplayed(false);
61
- }
62
- };
63
- document.addEventListener("mousedown", handleClickOutside);
64
- return () => {
65
- document.removeEventListener("mousedown", handleClickOutside);
66
- };
67
- }, [ref, setIsDisplayed]);
68
- if (!isClient) {
69
- return null;
70
- }
71
- return /* @__PURE__ */ jsx(Portal, {
72
- children: /* @__PURE__ */ jsx(Menu, {
73
- ref,
74
- className: "p-2 absolute z-10 top-[-10000px] left-[-10000px] mt-[-6px] opacity-0 transition-opacity duration-700",
75
- children: isDisplayed && selection && /* @__PURE__ */ jsx(HoveringInsertionPromptBox, {
76
- editorState: editorState(editor),
77
- apiConfig: props.apiConfig,
78
- closeWindow: () => {
79
- setIsDisplayed(false);
80
- },
81
- performInsertion: (insertedText) => {
82
- console.log("inserted text", insertedText);
83
- Transforms.delete(editor, { at: selection });
84
- Transforms.insertText(editor, insertedText, {
85
- at: selection
86
- });
87
- setIsDisplayed(false);
88
- }
89
- })
90
- })
91
- });
92
- };
93
- function editorState(editor, selection) {
94
- const textAroundCursor = getTextAroundSelection(editor);
95
- if (textAroundCursor) {
96
- return textAroundCursor;
97
- }
98
- return {
99
- textBeforeCursor: getFullEditorTextWithNewlines(editor),
100
- textAfterCursor: "",
101
- selectedText: ""
102
- };
103
- }
104
-
105
- export { HoveringToolbar };
106
- //# sourceMappingURL=out.js.map
107
- //# sourceMappingURL=chunk-U5AJ5PBH.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/hovering-toolbar/hovering-toolbar.tsx"],"names":["selection"],"mappings":";;;;;;;;;;;;;;;;AACA,SAAS,WAAoB,QAAQ,gBAAgB;AACrD,SAAiD,kBAAkB;AACnE,SAAS,UAAU,yBAAyB;AAuHlC;AAtGH,IAAM,kBAEa,CAAC,UAAU;AACnC,QAAM,MAAM,OAAuB,IAAI;AACvC,QAAM,SAAS,SAAS;AACxB,QAAM,YAAY,kBAAkB;AACpC,QAAM,EAAE,aAAa,eAAe,IAAI,yBAAyB;AAGjE,QAAM,CAAC,UAAU,WAAW,IAAI,SAAS,KAAK;AAC9C,YAAU,MAAM;AACd,gBAAY,IAAI;AAAA,EAClB,GAAG,CAAC,CAAC;AAEL,YAAU,MAAM;AACd,UAAM,KAAK,IAAI;AACf,UAAM,EAAE,WAAAA,WAAU,IAAI;AAEtB,QAAI,CAAC,IAAI;AACP;AAAA,IACF;AAEA,QAAI,CAACA,YAAW;AACd,SAAG,gBAAgB,OAAO;AAC1B;AAAA,IACF;AAEA,UAAM,eAAe,OAAO,aAAa;AACzC,QAAI,CAAC,cAAc;AACjB;AAAA,IACF;AAEA,UAAM,WAAW,aAAa,WAAW,CAAC;AAC1C,UAAM,OAAO,SAAS,sBAAsB;AAM5C,QACE,KAAK,QAAQ,KACb,KAAK,SAAS,KACd,KAAK,UAAU,KACf,KAAK,WAAW,GAChB;AACA;AAAA,IACF;AAEA,UAAM,iBAAiB;AACvB,UAAM,2BAA2B;AACjC,UAAM,6BAA6B;AACnC,QAAI,MACF,KAAK,MAAM,OAAO,UAAU,GAAG,eAAe;AAEhD,QAAI,MAAM,gBAAgB;AACxB,YAAM,KAAK,SAAS,OAAO,UAAU;AAAA,IACvC,WAAW,MAAM,GAAG,eAAe,OAAO,cAAc,gBAAgB;AACtE,YAAM,KAAK,MAAM,OAAO,UAAU,GAAG,eAAe;AAAA,IACtD;AAEA,QAAI,OACF,KAAK,OACL,OAAO,UACP,GAAG,cAAc,IACjB,KAAK,QAAQ,IACb;AAEF,QAAI,OAAO,gBAAgB;AACzB,aAAO;AAAA,IACT,WAAW,OAAO,GAAG,cAAc,OAAO,aAAa,gBAAgB;AACrE,aAAO,OAAO,aAAa,GAAG,cAAc;AAAA,IAC9C;AAEA,OAAG,MAAM,UAAU;AACnB,OAAG,MAAM,MAAM,GAAG;AAClB,OAAG,MAAM,OAAO,GAAG;AAAA,EACrB,CAAC;AAED,YAAU,MAAM;AACd,UAAM,qBAAqB,CAAC,UAAsB;AAChD,UAAI,IAAI,WAAW,CAAC,IAAI,QAAQ,SAAS,MAAM,MAAc,GAAG;AAC9D,uBAAe,KAAK;AAAA,MACtB;AAAA,IACF;AAEA,aAAS,iBAAiB,aAAa,kBAAkB;AACzD,WAAO,MAAM;AACX,eAAS,oBAAoB,aAAa,kBAAkB;AAAA,IAC9D;AAAA,EACF,GAAG,CAAC,KAAK,cAAc,CAAC;AAExB,MAAI,CAAC,UAAU;AACb,WAAO;AAAA,EACT;AAEA,SACE,oBAAC;AAAA,IACC,8BAAC;AAAA,MACC;AAAA,MACA,WAAU;AAAA,MAET,yBAAe,aACd,oBAAC;AAAA,QACC,aAAa,YAAY,QAAQ,SAAS;AAAA,QAC1C,WAAW,MAAM;AAAA,QACjB,aAAa,MAAM;AACjB,yBAAe,KAAK;AAAA,QACtB;AAAA,QACA,kBAAkB,CAAC,iBAAiB;AAClC,kBAAQ,IAAI,iBAAiB,YAAY;AAEzC,qBAAW,OAAO,QAAQ,EAAE,IAAI,UAAU,CAAC;AAC3C,qBAAW,WAAW,QAAQ,cAAc;AAAA,YAC1C,IAAI;AAAA,UACN,CAAC;AACD,yBAAe,KAAK;AAAA,QACtB;AAAA,OACF;AAAA,KAEJ;AAAA,GACF;AAEJ;AAEA,SAAS,YAAY,QAAgB,WAAyC;AAC5E,QAAM,mBAAmB,uBAAuB,MAAM;AACtD,MAAI,kBAAkB;AACpB,WAAO;AAAA,EACT;AAEA,SAAO;AAAA,IACL,kBAAkB,8BAA8B,MAAM;AAAA,IACtD,iBAAiB;AAAA,IACjB,cAAc;AAAA,EAChB;AACF","sourcesContent":["import { css } from \"@emotion/css\";\nimport { useEffect, useMemo, useRef, useState } from \"react\";\nimport { BaseSelection, Editor, Range, Location, Transforms } from \"slate\";\nimport { useSlate, useSlateSelection } from \"slate-react\";\nimport { HoveringInsertionPromptBox } from \"./text-insertion-prompt-box\";\nimport { Button, Icon, Menu, Portal } from \"./hovering-toolbar-components\";\nimport { useHoveringEditorContext } from \"./hovering-editor-provider\";\nimport {\n getFullEditorTextWithNewlines,\n getTextAroundSelection,\n} from \"../../lib/get-text-around-cursor\";\nimport {\n EditingEditorState,\n InsertionEditorApiConfig,\n} from \"../../types/base/autosuggestions-bare-function\";\n\nexport interface HoveringToolbarProps {\n apiConfig: InsertionEditorApiConfig;\n}\n\nexport const HoveringToolbar: (\n props: HoveringToolbarProps\n) => JSX.Element | null = (props) => {\n const ref = useRef<HTMLDivElement>(null);\n const editor = useSlate();\n const selection = useSlateSelection();\n const { isDisplayed, setIsDisplayed } = useHoveringEditorContext();\n\n // only render on client\n const [isClient, setIsClient] = useState(false);\n useEffect(() => {\n setIsClient(true);\n }, []);\n\n useEffect(() => {\n const el = ref.current;\n const { selection } = editor;\n\n if (!el) {\n return;\n }\n\n if (!selection) {\n el.removeAttribute(\"style\");\n return;\n }\n\n const domSelection = window.getSelection();\n if (!domSelection) {\n return;\n }\n\n const domRange = domSelection.getRangeAt(0);\n const rect = domRange.getBoundingClientRect();\n\n // We use window = (0,0,0,0) as a signal that the selection is not in the original copilot-textarea,\n // but inside the hovering window.\n //\n // in such case, we simply do nothing.\n if (\n rect.top === 0 &&\n rect.left === 0 &&\n rect.width === 0 &&\n rect.height === 0\n ) {\n return;\n }\n\n const minGapFromEdge = 60;\n const verticalOffsetFromCorner = 35;\n const horizontalOffsetFromCorner = 15;\n let top =\n rect.top + window.scrollY - el.offsetHeight + verticalOffsetFromCorner;\n // make sure top is in the viewport and not too close to the edge\n if (top < minGapFromEdge) {\n top = rect.bottom + window.scrollY + minGapFromEdge;\n } else if (top + el.offsetHeight > window.innerHeight - minGapFromEdge) {\n top = rect.top + window.scrollY - el.offsetHeight - minGapFromEdge;\n }\n\n let left =\n rect.left +\n window.scrollX -\n el.offsetWidth / 2 +\n rect.width / 2 +\n horizontalOffsetFromCorner;\n // make sure left is in the viewport and not too close to the edge\n if (left < minGapFromEdge) {\n left = minGapFromEdge;\n } else if (left + el.offsetWidth > window.innerWidth - minGapFromEdge) {\n left = window.innerWidth - el.offsetWidth - minGapFromEdge;\n }\n\n el.style.opacity = \"1\";\n el.style.top = `${top}px`;\n el.style.left = `${left}px`;\n });\n\n useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n if (ref.current && !ref.current.contains(event.target as Node)) {\n setIsDisplayed(false);\n }\n };\n\n document.addEventListener(\"mousedown\", handleClickOutside);\n return () => {\n document.removeEventListener(\"mousedown\", handleClickOutside);\n };\n }, [ref, setIsDisplayed]);\n\n if (!isClient) {\n return null;\n }\n\n return (\n <Portal>\n <Menu\n ref={ref}\n className=\"p-2 absolute z-10 top-[-10000px] left-[-10000px] mt-[-6px] opacity-0 transition-opacity duration-700\"\n >\n {isDisplayed && selection && (\n <HoveringInsertionPromptBox\n editorState={editorState(editor, selection)}\n apiConfig={props.apiConfig}\n closeWindow={() => {\n setIsDisplayed(false);\n }}\n performInsertion={(insertedText) => {\n console.log(\"inserted text\", insertedText);\n // replace the selection with the inserted text\n Transforms.delete(editor, { at: selection });\n Transforms.insertText(editor, insertedText, {\n at: selection,\n });\n setIsDisplayed(false);\n }}\n />\n )}\n </Menu>\n </Portal>\n );\n};\n\nfunction editorState(editor: Editor, selection: Location): EditingEditorState {\n const textAroundCursor = getTextAroundSelection(editor);\n if (textAroundCursor) {\n return textAroundCursor;\n }\n\n return {\n textBeforeCursor: getFullEditorTextWithNewlines(editor),\n textAfterCursor: \"\",\n selectedText: \"\",\n };\n}\n"]}
@@ -1,101 +0,0 @@
1
- import { areEqual_autocompleteState } from './chunk-JAFCXEPU.mjs';
2
- import { nullableCompatibleEqualityCheck } from './chunk-KGKLUWKW.mjs';
3
- import { Debouncer } from './chunk-NKW5OU2S.mjs';
4
- import { __async } from './chunk-MRXNTQOX.mjs';
5
- import { useState, useCallback, useMemo, useEffect } from 'react';
6
-
7
- function useAutosuggestions(debounceTime, acceptAutosuggestionKey, autosuggestionFunction, insertAutocompleteSuggestion, disableWhenEmpty, disabled) {
8
- const [previousAutocompleteState, setPreviousAutocompleteState] = useState(null);
9
- const [currentAutocompleteSuggestion, setCurrentAutocompleteSuggestion] = useState(null);
10
- const awaitForAndAppendSuggestion = useCallback(
11
- (editorAutocompleteState, abortSignal) => __async(this, null, function* () {
12
- if (disabled) {
13
- return;
14
- }
15
- if (disableWhenEmpty && editorAutocompleteState.textBeforeCursor === "" && editorAutocompleteState.textAfterCursor === "") {
16
- return;
17
- }
18
- const suggestion = yield autosuggestionFunction(
19
- editorAutocompleteState,
20
- abortSignal
21
- );
22
- if (!suggestion || abortSignal.aborted) {
23
- throw new DOMException("Aborted", "AbortError");
24
- }
25
- setCurrentAutocompleteSuggestion({
26
- text: suggestion,
27
- point: editorAutocompleteState.cursorPoint
28
- });
29
- }),
30
- [
31
- autosuggestionFunction,
32
- setCurrentAutocompleteSuggestion,
33
- disableWhenEmpty,
34
- disabled
35
- ]
36
- );
37
- const debouncedFunction = useMemo(
38
- () => new Debouncer(
39
- debounceTime
40
- ),
41
- [debounceTime]
42
- );
43
- useEffect(() => {
44
- return () => {
45
- debouncedFunction.cancel();
46
- setCurrentAutocompleteSuggestion(null);
47
- };
48
- }, [debouncedFunction, disabled]);
49
- const onChange = useCallback(
50
- (newEditorState) => {
51
- const editorStateHasChanged = !nullableCompatibleEqualityCheck(
52
- areEqual_autocompleteState,
53
- previousAutocompleteState,
54
- newEditorState
55
- );
56
- setPreviousAutocompleteState(newEditorState);
57
- if (!editorStateHasChanged) {
58
- return;
59
- }
60
- setCurrentAutocompleteSuggestion(null);
61
- if (newEditorState) {
62
- debouncedFunction.debounce(awaitForAndAppendSuggestion, newEditorState);
63
- } else {
64
- debouncedFunction.cancel();
65
- }
66
- },
67
- [
68
- previousAutocompleteState,
69
- setPreviousAutocompleteState,
70
- debouncedFunction,
71
- awaitForAndAppendSuggestion,
72
- setCurrentAutocompleteSuggestion
73
- ]
74
- );
75
- const keyDownHandler = useCallback(
76
- (event) => {
77
- if (currentAutocompleteSuggestion) {
78
- if (event.key === acceptAutosuggestionKey) {
79
- event.preventDefault();
80
- insertAutocompleteSuggestion(currentAutocompleteSuggestion);
81
- setCurrentAutocompleteSuggestion(null);
82
- }
83
- }
84
- },
85
- [
86
- currentAutocompleteSuggestion,
87
- setCurrentAutocompleteSuggestion,
88
- insertAutocompleteSuggestion,
89
- acceptAutosuggestionKey
90
- ]
91
- );
92
- return {
93
- currentAutocompleteSuggestion,
94
- onChangeHandler: onChange,
95
- onKeyDownHandler: keyDownHandler
96
- };
97
- }
98
-
99
- export { useAutosuggestions };
100
- //# sourceMappingURL=out.js.map
101
- //# sourceMappingURL=chunk-UHD44NC5.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/hooks/base-copilot-textarea-implementation/use-autosuggestions.ts"],"names":[],"mappings":";;;;;;;;;;;;;;AAAA,SAAS,aAAa,WAAW,SAAS,gBAAgB;AAgBnD,SAAS,mBACd,cACA,yBACA,wBACA,8BACA,kBACA,UAC0B;AAC1B,QAAM,CAAC,2BAA2B,4BAA4B,IAC5D,SAAyC,IAAI;AAE/C,QAAM,CAAC,+BAA+B,gCAAgC,IACpE,SAAqC,IAAI;AAE3C,QAAM,8BAGe;AAAA,IACnB,CACE,yBACA,gBACG;AAEH,UAAI,UAAU;AACZ;AAAA,MACF;AAEA,UACE,oBACA,wBAAwB,qBAAqB,MAC7C,wBAAwB,oBAAoB,IAC5C;AACA;AAAA,MACF;AAGA,YAAM,aAAa,MAAM;AAAA,QACvB;AAAA,QACA;AAAA,MACF;AAGA,UAAI,CAAC,cAAc,YAAY,SAAS;AACtC,cAAM,IAAI,aAAa,WAAW,YAAY;AAAA,MAChD;AAEA,uCAAiC;AAAA,QAC/B,MAAM;AAAA,QACN,OAAO,wBAAwB;AAAA,MACjC,CAAC;AAAA,IACH;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAEA,QAAM,oBAAoB;AAAA,IACxB,MACE,IAAI;AAAA,MACF;AAAA,IACF;AAAA,IACF,CAAC,YAAY;AAAA,EACf;AAGA,YAAU,MAAM;AACd,WAAO,MAAM;AACX,wBAAkB,OAAO;AACzB,uCAAiC,IAAI;AAAA,IACvC;AAAA,EACF,GAAG,CAAC,mBAAmB,QAAQ,CAAC;AAEhC,QAAM,WAAW;AAAA,IACf,CAAC,mBAAmD;AAClD,YAAM,wBAAwB,CAAC;AAAA,QAC7B;AAAA,QACA;AAAA,QACA;AAAA,MACF;AACA,mCAA6B,cAAc;AAG3C,UAAI,CAAC,uBAAuB;AAC1B;AAAA,MACF;AAGA,uCAAiC,IAAI;AAGrC,UAAI,gBAAgB;AAClB,0BAAkB,SAAS,6BAA6B,cAAc;AAAA,MACxE,OAAO;AACL,0BAAkB,OAAO;AAAA,MAC3B;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAEA,QAAM,iBAAiB;AAAA,IACrB,CAAC,UAA+C;AAC9C,UAAI,+BAA+B;AACjC,YAAI,MAAM,QAAQ,yBAAyB;AACzC,gBAAM,eAAe;AACrB,uCAA6B,6BAA6B;AAC1D,2CAAiC,IAAI;AAAA,QACvC;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AAAA,IACL;AAAA,IACA,iBAAiB;AAAA,IACjB,kBAAkB;AAAA,EACpB;AACF","sourcesContent":["import { useCallback, useEffect, useMemo, useState } from \"react\";\nimport { Debouncer } from \"../../lib/debouncer\";\nimport { nullableCompatibleEqualityCheck } from \"../../lib/utils\";\nimport { AutosuggestionsBareFunction } from \"../../types/base\";\nimport { AutosuggestionState } from \"../../types/base/autosuggestion-state\";\nimport {\n EditorAutocompleteState,\n areEqual_autocompleteState,\n} from \"../../types/base/editor-autocomplete-state\";\n\nexport interface UseAutosuggestionsResult {\n currentAutocompleteSuggestion: AutosuggestionState | null;\n onChangeHandler: (newEditorState: EditorAutocompleteState | null) => void;\n onKeyDownHandler: (event: React.KeyboardEvent<HTMLDivElement>) => void;\n}\n\nexport function useAutosuggestions(\n debounceTime: number,\n acceptAutosuggestionKey: string,\n autosuggestionFunction: AutosuggestionsBareFunction,\n insertAutocompleteSuggestion: (suggestion: AutosuggestionState) => void,\n disableWhenEmpty: boolean,\n disabled: boolean\n): UseAutosuggestionsResult {\n const [previousAutocompleteState, setPreviousAutocompleteState] =\n useState<EditorAutocompleteState | null>(null);\n\n const [currentAutocompleteSuggestion, setCurrentAutocompleteSuggestion] =\n useState<AutosuggestionState | null>(null);\n\n const awaitForAndAppendSuggestion: (\n editorAutocompleteState: EditorAutocompleteState,\n abortSignal: AbortSignal\n ) => Promise<void> = useCallback(\n async (\n editorAutocompleteState: EditorAutocompleteState,\n abortSignal: AbortSignal\n ) => {\n // early return if disabled\n if (disabled) {\n return;\n }\n\n if (\n disableWhenEmpty &&\n editorAutocompleteState.textBeforeCursor === \"\" &&\n editorAutocompleteState.textAfterCursor === \"\"\n ) {\n return;\n }\n\n // fetch the suggestion\n const suggestion = await autosuggestionFunction(\n editorAutocompleteState,\n abortSignal\n );\n\n // We'll assume for now that the autocomplete function might or might not respect the abort signal.\n if (!suggestion || abortSignal.aborted) {\n throw new DOMException(\"Aborted\", \"AbortError\");\n }\n\n setCurrentAutocompleteSuggestion({\n text: suggestion,\n point: editorAutocompleteState.cursorPoint,\n });\n },\n [\n autosuggestionFunction,\n setCurrentAutocompleteSuggestion,\n disableWhenEmpty,\n disabled,\n ]\n );\n\n const debouncedFunction = useMemo(\n () =>\n new Debouncer<[editorAutocompleteState: EditorAutocompleteState]>(\n debounceTime\n ),\n [debounceTime]\n );\n\n // clean current state when unmounting or disabling\n useEffect(() => {\n return () => {\n debouncedFunction.cancel();\n setCurrentAutocompleteSuggestion(null);\n };\n }, [debouncedFunction, disabled]);\n\n const onChange = useCallback(\n (newEditorState: EditorAutocompleteState | null) => {\n const editorStateHasChanged = !nullableCompatibleEqualityCheck(\n areEqual_autocompleteState,\n previousAutocompleteState,\n newEditorState\n );\n setPreviousAutocompleteState(newEditorState);\n\n // if no change, do nothing\n if (!editorStateHasChanged) {\n return;\n }\n\n // if change, then first null out the current suggestion\n setCurrentAutocompleteSuggestion(null);\n\n // then try to get a new suggestion, debouncing to avoid too many requests while typing\n if (newEditorState) {\n debouncedFunction.debounce(awaitForAndAppendSuggestion, newEditorState);\n } else {\n debouncedFunction.cancel();\n }\n },\n [\n previousAutocompleteState,\n setPreviousAutocompleteState,\n debouncedFunction,\n awaitForAndAppendSuggestion,\n setCurrentAutocompleteSuggestion,\n ]\n );\n\n const keyDownHandler = useCallback(\n (event: React.KeyboardEvent<HTMLDivElement>) => {\n if (currentAutocompleteSuggestion) {\n if (event.key === acceptAutosuggestionKey) {\n event.preventDefault();\n insertAutocompleteSuggestion(currentAutocompleteSuggestion);\n setCurrentAutocompleteSuggestion(null);\n }\n }\n },\n [\n currentAutocompleteSuggestion,\n setCurrentAutocompleteSuggestion,\n insertAutocompleteSuggestion,\n acceptAutosuggestionKey,\n ]\n );\n\n return {\n currentAutocompleteSuggestion,\n onChangeHandler: onChange,\n onKeyDownHandler: keyDownHandler,\n };\n}\n"]}
@@ -1,3 +0,0 @@
1
-
2
- //# sourceMappingURL=out.js.map
3
- //# sourceMappingURL=chunk-WADHCMPK.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":[],"names":[],"mappings":""}
@@ -1,3 +0,0 @@
1
-
2
- //# sourceMappingURL=out.js.map
3
- //# sourceMappingURL=chunk-WJHSY5T6.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":[],"names":[],"mappings":""}
@@ -1,27 +0,0 @@
1
- import { Transforms } from 'slate';
2
-
3
- // src/lib/slatejs-edits/add-autocompletions.ts
4
- function addAutocompletionsToEditor(editor, newSuggestion, point) {
5
- const editorPosition = editor.selection;
6
- Transforms.insertNodes(
7
- editor,
8
- [
9
- {
10
- type: "suggestion",
11
- inline: true,
12
- content: newSuggestion,
13
- children: [{ text: "" }]
14
- }
15
- ],
16
- {
17
- at: point
18
- }
19
- );
20
- if (editorPosition) {
21
- editor.selection = editorPosition;
22
- }
23
- }
24
-
25
- export { addAutocompletionsToEditor };
26
- //# sourceMappingURL=out.js.map
27
- //# sourceMappingURL=chunk-WJYQWL4I.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/lib/slatejs-edits/add-autocompletions.ts"],"names":[],"mappings":";AAAA,SAAoB,kBAAkB;AAG/B,SAAS,2BACd,QACA,eACA,OACA;AACA,QAAM,iBAAiB,OAAO;AAE9B,aAAW;AAAA,IACT;AAAA,IACA;AAAA,MACE;AAAA,QACE,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,SAAS;AAAA,QACT,UAAU,CAAC,EAAE,MAAM,GAAG,CAAC;AAAA,MACzB;AAAA,IACF;AAAA,IACA;AAAA,MACE,IAAI;AAAA,IACN;AAAA,EACF;AAGA,MAAI,gBAAgB;AAClB,WAAO,YAAY;AAAA,EACrB;AACF","sourcesContent":["import { BasePoint, Transforms } from \"slate\";\nimport { CustomEditor } from \"../../types/base/custom-editor\";\n\nexport function addAutocompletionsToEditor(\n editor: CustomEditor,\n newSuggestion: string,\n point: BasePoint\n) {\n const editorPosition = editor.selection;\n\n Transforms.insertNodes(\n editor,\n [\n {\n type: \"suggestion\",\n inline: true,\n content: newSuggestion,\n children: [{ text: \"\" }],\n },\n ],\n {\n at: point,\n }\n );\n\n // restore cursor position\n if (editorPosition) {\n editor.selection = editorPosition;\n }\n}\n"]}
@@ -1,106 +0,0 @@
1
- import { Dialog, DialogContent } from './chunk-O5OWT5GE.mjs';
2
- import { cn } from './chunk-KGKLUWKW.mjs';
3
- import { __objRest, __spreadValues, __spreadProps } from './chunk-MRXNTQOX.mjs';
4
- import * as React from 'react';
5
- import { Command as Command$1 } from 'cmdk';
6
- import { jsx } from 'react/jsx-runtime';
7
-
8
- var Command = React.forwardRef((_a, ref) => {
9
- var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
10
- return /* @__PURE__ */ jsx(Command$1, __spreadValues({
11
- ref,
12
- className: cn(
13
- "flex h-full w-full flex-col overflow-hidden rounded-md bg-popover text-popover-foreground",
14
- className
15
- )
16
- }, props));
17
- });
18
- Command.displayName = Command$1.displayName;
19
- var CommandDialog = (_a) => {
20
- var _b = _a, { children } = _b, props = __objRest(_b, ["children"]);
21
- return /* @__PURE__ */ jsx(Dialog, __spreadProps(__spreadValues({}, props), {
22
- children: /* @__PURE__ */ jsx(DialogContent, {
23
- className: "overflow-hidden p-0 shadow-lg",
24
- children: /* @__PURE__ */ jsx(Command, {
25
- className: "[&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:font-medium [&_[cmdk-group-heading]]:text-muted-foreground [&_[cmdk-group]:not([hidden])_~[cmdk-group]]:pt-0 [&_[cmdk-group]]:px-2 [&_[cmdk-input-wrapper]_svg]:h-5 [&_[cmdk-input-wrapper]_svg]:w-5 [&_[cmdk-input]]:h-12 [&_[cmdk-item]]:px-2 [&_[cmdk-item]]:py-3 [&_[cmdk-item]_svg]:h-5 [&_[cmdk-item]_svg]:w-5",
26
- children
27
- })
28
- })
29
- }));
30
- };
31
- var CommandInput = React.forwardRef((_a, ref) => {
32
- var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
33
- return /* @__PURE__ */ jsx("div", {
34
- className: "flex items-center border-b px-3",
35
- "cmdk-input-wrapper": "",
36
- children: /* @__PURE__ */ jsx(Command$1.Input, __spreadValues({
37
- ref,
38
- className: cn(
39
- "flex h-11 w-full rounded-md bg-transparent py-3 text-sm outline-none placeholder:text-muted-foreground disabled:cursor-not-allowed disabled:opacity-50",
40
- className
41
- )
42
- }, props))
43
- });
44
- });
45
- CommandInput.displayName = Command$1.Input.displayName;
46
- var CommandList = React.forwardRef((_a, ref) => {
47
- var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
48
- return /* @__PURE__ */ jsx(Command$1.List, __spreadValues({
49
- ref,
50
- className: cn("max-h-[300px] overflow-y-auto overflow-x-hidden", className)
51
- }, props));
52
- });
53
- CommandList.displayName = Command$1.List.displayName;
54
- var CommandEmpty = React.forwardRef((props, ref) => /* @__PURE__ */ jsx(Command$1.Empty, __spreadValues({
55
- ref,
56
- className: "py-6 text-center text-sm"
57
- }, props)));
58
- CommandEmpty.displayName = Command$1.Empty.displayName;
59
- var CommandGroup = React.forwardRef((_a, ref) => {
60
- var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
61
- return /* @__PURE__ */ jsx(Command$1.Group, __spreadValues({
62
- ref,
63
- className: cn(
64
- "overflow-hidden p-1 text-foreground [&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:py-1.5 [&_[cmdk-group-heading]]:text-xs [&_[cmdk-group-heading]]:font-medium [&_[cmdk-group-heading]]:text-muted-foreground",
65
- className
66
- )
67
- }, props));
68
- });
69
- CommandGroup.displayName = Command$1.Group.displayName;
70
- var CommandSeparator = React.forwardRef((_a, ref) => {
71
- var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
72
- return /* @__PURE__ */ jsx(Command$1.Separator, __spreadValues({
73
- ref,
74
- className: cn("-mx-1 h-px bg-border", className)
75
- }, props));
76
- });
77
- CommandSeparator.displayName = Command$1.Separator.displayName;
78
- var CommandItem = React.forwardRef((_a, ref) => {
79
- var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
80
- return /* @__PURE__ */ jsx(Command$1.Item, __spreadValues({
81
- ref,
82
- className: cn(
83
- "relative flex cursor-default select-none items-center rounded-sm text-sm outline-none aria-selected:bg-accent aria-selected:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
84
- className
85
- )
86
- }, props));
87
- });
88
- CommandItem.displayName = Command$1.Item.displayName;
89
- var CommandShortcut = (_a) => {
90
- var _b = _a, {
91
- className
92
- } = _b, props = __objRest(_b, [
93
- "className"
94
- ]);
95
- return /* @__PURE__ */ jsx("span", __spreadValues({
96
- className: cn(
97
- "ml-auto text-xs tracking-widest text-muted-foreground",
98
- className
99
- )
100
- }, props));
101
- };
102
- CommandShortcut.displayName = "CommandShortcut";
103
-
104
- export { Command, CommandDialog, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, CommandSeparator, CommandShortcut };
105
- //# sourceMappingURL=out.js.map
106
- //# sourceMappingURL=chunk-XA7M72ZO.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/ui/command.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;AAEA,YAAY,WAAW;AAEvB,SAAS,WAAW,wBAAwB;AAU1C;AAdF;AAUA,IAAM,UAAgB,iBAGpB,CAAC,IAAyB,QAAK;AAA9B,eAAE,YAbL,IAaG,IAAgB,kBAAhB,IAAgB,CAAd;AACH,6BAAC;AAAA,IACC;AAAA,IACA,WAAW;AAAA,MACT;AAAA,MACA;AAAA,IACF;AAAA,KACI,MACN;AAAA,CACD;AACD,QAAQ,cAAc,iBAAiB;AAIvC,IAAM,gBAAgB,CAAC,OAA+C;AAA/C,eAAE,WA3BzB,IA2BuB,IAAe,kBAAf,IAAe,CAAb;AACvB,SACE,oBAAC,yCAAW,QAAX;AAAA,IACC,8BAAC;AAAA,MAAc,WAAU;AAAA,MACvB,8BAAC;AAAA,QAAQ,WAAU;AAAA,QAChB;AAAA,OACH;AAAA,KACF;AAAA,IACF;AAEJ;AAEA,IAAM,eAAqB,iBAGzB,CAAC,IAAyB,QAAK;AAA9B,eAAE,YA1CL,IA0CG,IAAgB,kBAAhB,IAAgB,CAAd;AACH,6BAAC;AAAA,IAAI,WAAU;AAAA,IAAkC,sBAAmB;AAAA,IAElE,8BAAC,iBAAiB,OAAjB;AAAA,MACC;AAAA,MACA,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,OACI,MACN;AAAA,GACF;AAAA,CACD;AAED,aAAa,cAAc,iBAAiB,MAAM;AAElD,IAAM,cAAoB,iBAGxB,CAAC,IAAyB,QAAK;AAA9B,eAAE,YA7DL,IA6DG,IAAgB,kBAAhB,IAAgB,CAAd;AACH,6BAAC,iBAAiB,MAAjB;AAAA,IACC;AAAA,IACA,WAAW,GAAG,mDAAmD,SAAS;AAAA,KACtE,MACN;AAAA,CACD;AAED,YAAY,cAAc,iBAAiB,KAAK;AAEhD,IAAM,eAAqB,iBAGzB,CAAC,OAAO,QACR,oBAAC,iBAAiB,OAAjB;AAAA,EACC;AAAA,EACA,WAAU;AAAA,GACN,MACN,CACD;AAED,aAAa,cAAc,iBAAiB,MAAM;AAElD,IAAM,eAAqB,iBAGzB,CAAC,IAAyB,QAAK;AAA9B,eAAE,YAvFL,IAuFG,IAAgB,kBAAhB,IAAgB,CAAd;AACH,6BAAC,iBAAiB,OAAjB;AAAA,IACC;AAAA,IACA,WAAW;AAAA,MACT;AAAA,MACA;AAAA,IACF;AAAA,KACI,MACN;AAAA,CACD;AAED,aAAa,cAAc,iBAAiB,MAAM;AAElD,IAAM,mBAAyB,iBAG7B,CAAC,IAAyB,QAAK;AAA9B,eAAE,YAvGL,IAuGG,IAAgB,kBAAhB,IAAgB,CAAd;AACH,6BAAC,iBAAiB,WAAjB;AAAA,IACC;AAAA,IACA,WAAW,GAAG,wBAAwB,SAAS;AAAA,KAC3C,MACN;AAAA,CACD;AACD,iBAAiB,cAAc,iBAAiB,UAAU;AAE1D,IAAM,cAAoB,iBAGxB,CAAC,IAAyB,QAAK;AAA9B,eAAE,YAnHL,IAmHG,IAAgB,kBAAhB,IAAgB,CAAd;AACH,6BAAC,iBAAiB,MAAjB;AAAA,IACC;AAAA,IACA,WAAW;AAAA,MACT;AAAA,MACA;AAAA,IACF;AAAA,KACI,MACN;AAAA,CACD;AAED,YAAY,cAAc,iBAAiB,KAAK;AAEhD,IAAM,kBAAkB,CAAC,OAGoB;AAHpB,eACvB;AAAA;AAAA,EAjIF,IAgIyB,IAEpB,kBAFoB,IAEpB;AAAA,IADH;AAAA;AAGA,SACE,oBAAC;AAAA,IACC,WAAW;AAAA,MACT;AAAA,MACA;AAAA,IACF;AAAA,KACI,MACN;AAEJ;AACA,gBAAgB,cAAc","sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport { DialogProps } from \"@radix-ui/react-dialog\";\nimport { Command as CommandPrimitive } from \"cmdk\";\nimport { Search } from \"lucide-react\";\n\nimport { cn } from \"../../lib/utils\";\nimport { Dialog, DialogContent } from \"./dialog\";\n\nconst Command = React.forwardRef<\n React.ElementRef<typeof CommandPrimitive>,\n React.ComponentPropsWithoutRef<typeof CommandPrimitive>\n>(({ className, ...props }, ref) => (\n <CommandPrimitive\n ref={ref}\n className={cn(\n \"flex h-full w-full flex-col overflow-hidden rounded-md bg-popover text-popover-foreground\",\n className\n )}\n {...props}\n />\n));\nCommand.displayName = CommandPrimitive.displayName;\n\ninterface CommandDialogProps extends DialogProps {}\n\nconst CommandDialog = ({ children, ...props }: CommandDialogProps) => {\n return (\n <Dialog {...props}>\n <DialogContent className=\"overflow-hidden p-0 shadow-lg\">\n <Command className=\"[&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:font-medium [&_[cmdk-group-heading]]:text-muted-foreground [&_[cmdk-group]:not([hidden])_~[cmdk-group]]:pt-0 [&_[cmdk-group]]:px-2 [&_[cmdk-input-wrapper]_svg]:h-5 [&_[cmdk-input-wrapper]_svg]:w-5 [&_[cmdk-input]]:h-12 [&_[cmdk-item]]:px-2 [&_[cmdk-item]]:py-3 [&_[cmdk-item]_svg]:h-5 [&_[cmdk-item]_svg]:w-5\">\n {children}\n </Command>\n </DialogContent>\n </Dialog>\n );\n};\n\nconst CommandInput = React.forwardRef<\n React.ElementRef<typeof CommandPrimitive.Input>,\n React.ComponentPropsWithoutRef<typeof CommandPrimitive.Input>\n>(({ className, ...props }, ref) => (\n <div className=\"flex items-center border-b px-3\" cmdk-input-wrapper=\"\">\n {/* <Search className=\"mr-2 h-4 w-4 shrink-0 opacity-50\" /> */}\n <CommandPrimitive.Input\n ref={ref}\n className={cn(\n \"flex h-11 w-full rounded-md bg-transparent py-3 text-sm outline-none placeholder:text-muted-foreground disabled:cursor-not-allowed disabled:opacity-50\",\n className\n )}\n {...props}\n />\n </div>\n));\n\nCommandInput.displayName = CommandPrimitive.Input.displayName;\n\nconst CommandList = React.forwardRef<\n React.ElementRef<typeof CommandPrimitive.List>,\n React.ComponentPropsWithoutRef<typeof CommandPrimitive.List>\n>(({ className, ...props }, ref) => (\n <CommandPrimitive.List\n ref={ref}\n className={cn(\"max-h-[300px] overflow-y-auto overflow-x-hidden\", className)}\n {...props}\n />\n));\n\nCommandList.displayName = CommandPrimitive.List.displayName;\n\nconst CommandEmpty = React.forwardRef<\n React.ElementRef<typeof CommandPrimitive.Empty>,\n React.ComponentPropsWithoutRef<typeof CommandPrimitive.Empty>\n>((props, ref) => (\n <CommandPrimitive.Empty\n ref={ref}\n className=\"py-6 text-center text-sm\"\n {...props}\n />\n));\n\nCommandEmpty.displayName = CommandPrimitive.Empty.displayName;\n\nconst CommandGroup = React.forwardRef<\n React.ElementRef<typeof CommandPrimitive.Group>,\n React.ComponentPropsWithoutRef<typeof CommandPrimitive.Group>\n>(({ className, ...props }, ref) => (\n <CommandPrimitive.Group\n ref={ref}\n className={cn(\n \"overflow-hidden p-1 text-foreground [&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:py-1.5 [&_[cmdk-group-heading]]:text-xs [&_[cmdk-group-heading]]:font-medium [&_[cmdk-group-heading]]:text-muted-foreground\",\n className\n )}\n {...props}\n />\n));\n\nCommandGroup.displayName = CommandPrimitive.Group.displayName;\n\nconst CommandSeparator = React.forwardRef<\n React.ElementRef<typeof CommandPrimitive.Separator>,\n React.ComponentPropsWithoutRef<typeof CommandPrimitive.Separator>\n>(({ className, ...props }, ref) => (\n <CommandPrimitive.Separator\n ref={ref}\n className={cn(\"-mx-1 h-px bg-border\", className)}\n {...props}\n />\n));\nCommandSeparator.displayName = CommandPrimitive.Separator.displayName;\n\nconst CommandItem = React.forwardRef<\n React.ElementRef<typeof CommandPrimitive.Item>,\n React.ComponentPropsWithoutRef<typeof CommandPrimitive.Item>\n>(({ className, ...props }, ref) => (\n <CommandPrimitive.Item\n ref={ref}\n className={cn(\n \"relative flex cursor-default select-none items-center rounded-sm text-sm outline-none aria-selected:bg-accent aria-selected:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50\",\n className\n )}\n {...props}\n />\n));\n\nCommandItem.displayName = CommandPrimitive.Item.displayName;\n\nconst CommandShortcut = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLSpanElement>) => {\n return (\n <span\n className={cn(\n \"ml-auto text-xs tracking-widest text-muted-foreground\",\n className\n )}\n {...props}\n />\n );\n};\nCommandShortcut.displayName = \"CommandShortcut\";\n\nexport {\n Command,\n CommandDialog,\n CommandInput,\n CommandList,\n CommandEmpty,\n CommandGroup,\n CommandItem,\n CommandShortcut,\n CommandSeparator,\n};\n"]}
@@ -1,91 +0,0 @@
1
- import { __objRest, __spreadProps, __spreadValues } from './chunk-MRXNTQOX.mjs';
2
- import { cx, css } from '@emotion/css';
3
- import React from 'react';
4
- import ReactDOM from 'react-dom';
5
- import { jsx } from 'react/jsx-runtime';
6
-
7
- var Button = React.forwardRef(
8
- (_a, ref) => {
9
- var _b = _a, {
10
- className,
11
- active,
12
- reversed
13
- } = _b, props = __objRest(_b, [
14
- "className",
15
- "active",
16
- "reversed"
17
- ]);
18
- return /* @__PURE__ */ jsx("span", __spreadProps(__spreadValues({}, props), {
19
- ref,
20
- className: cx(
21
- className,
22
- css`
23
- cursor: pointer;
24
- color: ${reversed ? active ? "white" : "#aaa" : active ? "black" : "#ccc"};
25
- `
26
- )
27
- }));
28
- }
29
- );
30
- var Icon = React.forwardRef(
31
- (_a, ref) => {
32
- var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
33
- return /* @__PURE__ */ jsx("span", __spreadProps(__spreadValues({}, props), {
34
- ref,
35
- className: cx(
36
- "material-icons",
37
- className,
38
- css`
39
- font-size: 18px;
40
- vertical-align: text-bottom;
41
- `
42
- )
43
- }));
44
- }
45
- );
46
- var Menu = React.forwardRef(
47
- (_a, ref) => {
48
- var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
49
- return /* @__PURE__ */ jsx("div", __spreadProps(__spreadValues({}, props), {
50
- "data-test-id": "menu",
51
- ref,
52
- className: cx(
53
- className,
54
- css`
55
- & > * {
56
- display: inline-block;
57
- }
58
-
59
- & > * + * {
60
- margin-left: 15px;
61
- }
62
- `
63
- )
64
- }));
65
- }
66
- );
67
- var Portal = ({ children }) => {
68
- return typeof document === "object" ? ReactDOM.createPortal(children, document.body) : null;
69
- };
70
- var Toolbar = React.forwardRef(
71
- (_a, ref) => {
72
- var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
73
- return /* @__PURE__ */ jsx(Menu, __spreadProps(__spreadValues({}, props), {
74
- ref,
75
- className: cx(
76
- className,
77
- css`
78
- position: relative;
79
- padding: 1px 18px 17px;
80
- margin: 0 -20px;
81
- border-bottom: 2px solid #eee;
82
- margin-bottom: 20px;
83
- `
84
- )
85
- }));
86
- }
87
- );
88
-
89
- export { Button, Icon, Menu, Portal, Toolbar };
90
- //# sourceMappingURL=out.js.map
91
- //# sourceMappingURL=chunk-XHUMROEY.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/hovering-toolbar/hovering-toolbar-components.tsx"],"names":[],"mappings":";;;;;;;AAAA,SAAS,KAAK,UAAU;AACxB,OAAO,WAAuC;AAC9C,OAAO,cAAc;AAsBjB;AAfG,IAAM,SAAS,MAAM;AAAA,EAC1B,CACE,IAWA,QACA;AAZA,iBACE;AAAA;AAAA,MACA;AAAA,MACA;AAAA,IAdN,IAWI,IAIK,kBAJL,IAIK;AAAA,MAHH;AAAA,MACA;AAAA,MACA;AAAA;AAUF,+BAAC,yCACK,QADL;AAAA,MAEC;AAAA,MACA,WAAW;AAAA,QACT;AAAA,QACA;AAAA;AAAA,mBAEW,WACL,SACE,UACA,SACF,SACA,UACA;AAAA;AAAA,MAER;AAAA,MACF;AAAA;AAEJ;AAEO,IAAM,OAAO,MAAM;AAAA,EACxB,CACE,IACA,QACA;AAFA,iBAAE,YA9CN,IA8CI,IAAgB,kBAAhB,IAAgB,CAAd;AAGF,+BAAC,yCACK,QADL;AAAA,MAEC;AAAA,MACA,WAAW;AAAA,QACT;AAAA,QACA;AAAA,QACA;AAAA;AAAA;AAAA;AAAA,MAIF;AAAA,MACF;AAAA;AAEJ;AAEO,IAAM,OAAO,MAAM;AAAA,EACxB,CACE,IACA,QACA;AAFA,iBAAE,YAlEN,IAkEI,IAAgB,kBAAhB,IAAgB,CAAd;AAGF,+BAAC,wCACK,QADL;AAAA,MAEC,gBAAa;AAAA,MACb;AAAA,MACA,WAAW;AAAA,QACT;AAAA,QACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MASF;AAAA,MACF;AAAA;AAEJ;AACO,IAAM,SAAS,CAAC,EAAE,SAAS,MAAqC;AACrE,SAAO,OAAO,aAAa,WACvB,SAAS,aAAa,UAAU,SAAS,IAAI,IAC7C;AACN;AAEO,IAAM,UAAU,MAAM;AAAA,EAC3B,CACE,IACA,QACA;AAFA,iBAAE,YAhGN,IAgGI,IAAgB,kBAAhB,IAAgB,CAAd;AAGF,+BAAC,uCACK,QADL;AAAA,MAEC;AAAA,MACA,WAAW;AAAA,QACT;AAAA,QACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOF;AAAA,MACF;AAAA;AAEJ","sourcesContent":["import { css, cx } from \"@emotion/css\";\nimport React, { PropsWithChildren, Ref } from \"react\";\nimport ReactDOM from \"react-dom\";\n\ninterface BaseProps {\n className: string;\n [key: string]: unknown;\n}\n\nexport const Button = React.forwardRef(\n (\n {\n className,\n active,\n reversed,\n ...props\n }: PropsWithChildren<\n {\n active: boolean;\n reversed: boolean;\n } & BaseProps\n >,\n ref: Ref<HTMLSpanElement | null>\n ) => (\n <span\n {...props}\n ref={ref as Ref<HTMLSpanElement>}\n className={cx(\n className,\n css`\n cursor: pointer;\n color: ${reversed\n ? active\n ? \"white\"\n : \"#aaa\"\n : active\n ? \"black\"\n : \"#ccc\"};\n `\n )}\n />\n )\n);\n\nexport const Icon = React.forwardRef(\n (\n { className, ...props }: PropsWithChildren<BaseProps>,\n ref: Ref<HTMLSpanElement | null>\n ) => (\n <span\n {...props}\n ref={ref as Ref<HTMLSpanElement>}\n className={cx(\n \"material-icons\",\n className,\n css`\n font-size: 18px;\n vertical-align: text-bottom;\n `\n )}\n />\n )\n);\n\nexport const Menu = React.forwardRef(\n (\n { className, ...props }: PropsWithChildren<BaseProps>,\n ref: Ref<HTMLDivElement | null>\n ) => (\n <div\n {...props}\n data-test-id=\"menu\"\n ref={ref as Ref<HTMLDivElement>}\n className={cx(\n className,\n css`\n & > * {\n display: inline-block;\n }\n\n & > * + * {\n margin-left: 15px;\n }\n `\n )}\n />\n )\n);\nexport const Portal = ({ children }: { children: React.ReactNode }) => {\n return typeof document === \"object\"\n ? ReactDOM.createPortal(children, document.body)\n : null;\n};\n\nexport const Toolbar = React.forwardRef(\n (\n { className, ...props }: PropsWithChildren<BaseProps>,\n ref?: Ref<HTMLDivElement>\n ) => (\n <Menu\n {...props}\n ref={ref}\n className={cx(\n className,\n css`\n position: relative;\n padding: 1px 18px 17px;\n margin: 0 -20px;\n border-bottom: 2px solid #eee;\n margin-bottom: 20px;\n `\n )}\n />\n )\n);\n"]}