roamjs-components 0.86.0-alpha.3 → 0.86.1

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 (567) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +29 -29
  3. package/components/AutocompleteInput.d.ts +29 -28
  4. package/components/AutocompleteInput.js +132 -120
  5. package/components/AutocompleteInput.js.map +1 -1
  6. package/components/BlockErrorBoundary.d.ts +15 -16
  7. package/components/BlockErrorBoundary.js +27 -27
  8. package/components/BlockErrorBoundary.js.map +1 -1
  9. package/components/BlockInput.d.ts +13 -13
  10. package/components/BlockInput.js +55 -55
  11. package/components/ComponentContainer.d.ts +10 -11
  12. package/components/ComponentContainer.js +37 -37
  13. package/components/ComponentContainer.js.map +1 -1
  14. package/components/ConfigPage.d.ts +35 -35
  15. package/components/ConfigPage.js +159 -159
  16. package/components/ConfigPanels/BlockPanel.d.ts +3 -3
  17. package/components/ConfigPanels/BlockPanel.js +42 -42
  18. package/components/ConfigPanels/BlockPanel.js.map +1 -1
  19. package/components/ConfigPanels/BlocksPanel.d.ts +3 -3
  20. package/components/ConfigPanels/BlocksPanel.js +58 -58
  21. package/components/ConfigPanels/BlocksPanel.js.map +1 -1
  22. package/components/ConfigPanels/CustomPanel.d.ts +3 -3
  23. package/components/ConfigPanels/CustomPanel.js +24 -24
  24. package/components/ConfigPanels/FlagPanel.d.ts +3 -3
  25. package/components/ConfigPanels/FlagPanel.js +31 -31
  26. package/components/ConfigPanels/MultiChildPanel.d.ts +9 -9
  27. package/components/ConfigPanels/MultiChildPanel.js +58 -58
  28. package/components/ConfigPanels/MultiTextPanel.d.ts +3 -3
  29. package/components/ConfigPanels/MultiTextPanel.js +14 -14
  30. package/components/ConfigPanels/NumberPanel.d.ts +3 -3
  31. package/components/ConfigPanels/NumberPanel.js +25 -25
  32. package/components/ConfigPanels/OauthPanel.d.ts +3 -3
  33. package/components/ConfigPanels/OauthPanel.js +81 -81
  34. package/components/ConfigPanels/OauthPanel.js.map +1 -1
  35. package/components/ConfigPanels/PagesPanel.d.ts +3 -3
  36. package/components/ConfigPanels/PagesPanel.js +11 -11
  37. package/components/ConfigPanels/SelectPanel.d.ts +3 -3
  38. package/components/ConfigPanels/SelectPanel.js +27 -27
  39. package/components/ConfigPanels/TextPanel.d.ts +3 -3
  40. package/components/ConfigPanels/TextPanel.js +28 -28
  41. package/components/ConfigPanels/TimePanel.d.ts +3 -3
  42. package/components/ConfigPanels/TimePanel.js +34 -34
  43. package/components/ConfigPanels/getBrandColors.d.ts +7 -7
  44. package/components/ConfigPanels/getBrandColors.js +28 -28
  45. package/components/ConfigPanels/types.d.ts +84 -84
  46. package/components/ConfigPanels/types.js +2 -2
  47. package/components/ConfigPanels/types.js.map +1 -1
  48. package/components/ConfigPanels/useSingleChildValue.d.ts +13 -13
  49. package/components/ConfigPanels/useSingleChildValue.js +43 -43
  50. package/components/CursorMenu.d.ts +21 -21
  51. package/components/CursorMenu.js +181 -181
  52. package/components/CursorMenu.js.map +1 -1
  53. package/components/Description.d.ts +5 -5
  54. package/components/Description.js +16 -16
  55. package/components/ExtensionApiContext.d.ts +31 -31
  56. package/components/ExtensionApiContext.js +16 -16
  57. package/components/ExternalLogin.d.ts +18 -18
  58. package/components/ExternalLogin.js +141 -141
  59. package/components/Filter.d.ts +15 -15
  60. package/components/Filter.js +142 -142
  61. package/components/FormDialog.d.ts +55 -55
  62. package/components/FormDialog.js +220 -217
  63. package/components/FormDialog.js.map +1 -1
  64. package/components/Loading.d.ts +4 -4
  65. package/components/Loading.js +35 -35
  66. package/components/MenuItemSelect.d.ts +17 -17
  67. package/components/MenuItemSelect.js +23 -23
  68. package/components/MenuItemSelect.js.map +1 -1
  69. package/components/OauthPanel.d.ts +7 -7
  70. package/components/OauthPanel.js +30 -30
  71. package/components/OauthSelect.d.ts +5 -5
  72. package/components/OauthSelect.js +25 -25
  73. package/components/PageInput.d.ts +6 -6
  74. package/components/PageInput.js +13 -13
  75. package/components/PageLink.d.ts +6 -6
  76. package/components/PageLink.js +31 -31
  77. package/components/ProgressDialog.d.ts +11 -11
  78. package/components/ProgressDialog.js +48 -48
  79. package/components/SimpleAlert.d.ts +15 -15
  80. package/components/SimpleAlert.js +47 -47
  81. package/components/Toast.d.ts +15 -15
  82. package/components/Toast.js +50 -50
  83. package/components/index.js +4 -4
  84. package/components/index.js.map +1 -1
  85. package/components.d.ts +5 -5
  86. package/components.js +172 -201
  87. package/components.js.map +1 -1
  88. package/date/constants.d.ts +3 -3
  89. package/date/constants.js +19 -19
  90. package/date/constants.js.map +1 -1
  91. package/date/index.d.ts +3 -3
  92. package/date/index.js +9 -9
  93. package/date/index.js.map +1 -1
  94. package/date/parseNlpDate.d.ts +5 -5
  95. package/date/parseNlpDate.js +226 -226
  96. package/date/parseNlpDate.js.map +1 -1
  97. package/date/parseRoamDateUid.d.ts +2 -2
  98. package/date/parseRoamDateUid.js +7 -7
  99. package/date/parseRoamDateUid.js.map +1 -1
  100. package/dom/addBlockCommand.d.ts +5 -5
  101. package/dom/addBlockCommand.js +53 -53
  102. package/dom/addBlockCommand.js.map +1 -1
  103. package/dom/addKeyboardTriggers.d.ts +11 -11
  104. package/dom/addKeyboardTriggers.js +38 -38
  105. package/dom/addKeyboardTriggers.js.map +1 -1
  106. package/dom/addOldRoamJSDependency.d.ts +2 -2
  107. package/dom/addOldRoamJSDependency.js +10 -10
  108. package/dom/addOldRoamJSDependency.js.map +1 -1
  109. package/dom/addRoamJSDependency.d.ts +2 -2
  110. package/dom/addRoamJSDependency.js +8 -8
  111. package/dom/addRoamJSDependency.js.map +1 -1
  112. package/dom/addScriptAsDependency.d.ts +6 -6
  113. package/dom/addScriptAsDependency.js +16 -16
  114. package/dom/addScriptAsDependency.js.map +1 -1
  115. package/dom/addStyle.d.ts +2 -2
  116. package/dom/addStyle.js +14 -14
  117. package/dom/addStyle.js.map +1 -1
  118. package/dom/constants.d.ts +1 -1
  119. package/dom/constants.js +4 -4
  120. package/dom/constants.js.map +1 -1
  121. package/dom/createBlockObserver.d.ts +7 -7
  122. package/dom/createBlockObserver.js +43 -43
  123. package/dom/createBlockObserver.js.map +1 -1
  124. package/dom/createButtonObserver.d.ts +6 -6
  125. package/dom/createButtonObserver.js +21 -21
  126. package/dom/createButtonObserver.js.map +1 -1
  127. package/dom/createDivObserver.d.ts +2 -2
  128. package/dom/createDivObserver.js +13 -13
  129. package/dom/createDivObserver.js.map +1 -1
  130. package/dom/createHTMLObserver.d.ts +8 -8
  131. package/dom/createHTMLObserver.js +24 -24
  132. package/dom/createHTMLObserver.js.map +1 -1
  133. package/dom/createHashtagObserver.d.ts +5 -5
  134. package/dom/createHashtagObserver.js +16 -16
  135. package/dom/createHashtagObserver.js.map +1 -1
  136. package/dom/createIconButton.d.ts +2 -2
  137. package/dom/createIconButton.js +12 -12
  138. package/dom/createIconButton.js.map +1 -1
  139. package/dom/createObserver.d.ts +2 -2
  140. package/dom/createObserver.js +9 -9
  141. package/dom/createObserver.js.map +1 -1
  142. package/dom/createOverlayObserver.d.ts +2 -2
  143. package/dom/createOverlayObserver.js +6 -6
  144. package/dom/createOverlayObserver.js.map +1 -1
  145. package/dom/createPageObserver.d.ts +2 -2
  146. package/dom/createPageObserver.js +34 -34
  147. package/dom/createPageObserver.js.map +1 -1
  148. package/dom/createPageTitleObserver.d.ts +6 -6
  149. package/dom/createPageTitleObserver.js +31 -31
  150. package/dom/createPageTitleObserver.js.map +1 -1
  151. package/dom/elToTitle.d.ts +2 -2
  152. package/dom/elToTitle.js +22 -22
  153. package/dom/elToTitle.js.map +1 -1
  154. package/dom/genericError.d.ts +3 -3
  155. package/dom/genericError.js +11 -11
  156. package/dom/genericError.js.map +1 -1
  157. package/dom/getActiveUids.d.ts +3 -3
  158. package/dom/getActiveUids.js +6 -6
  159. package/dom/getActiveUids.js.map +1 -1
  160. package/dom/getBlockUidFromTarget.d.ts +2 -2
  161. package/dom/getBlockUidFromTarget.js +33 -33
  162. package/dom/getBlockUidFromTarget.js.map +1 -1
  163. package/dom/getCurrentPageUid.d.ts +2 -2
  164. package/dom/getCurrentPageUid.js +8 -8
  165. package/dom/getCurrentPageUid.js.map +1 -1
  166. package/dom/getDomRefs.d.ts +2 -2
  167. package/dom/getDomRefs.js +12 -12
  168. package/dom/getDomRefs.js.map +1 -1
  169. package/dom/getDropUidOffset.d.ts +5 -5
  170. package/dom/getDropUidOffset.js +27 -27
  171. package/dom/getDropUidOffset.js.map +1 -1
  172. package/dom/getMutatedNodes.d.ts +7 -7
  173. package/dom/getMutatedNodes.js +11 -11
  174. package/dom/getMutatedNodes.js.map +1 -1
  175. package/dom/getPageTitleByHtmlElement.d.ts +2 -2
  176. package/dom/getPageTitleByHtmlElement.js +12 -12
  177. package/dom/getPageTitleByHtmlElement.js.map +1 -1
  178. package/dom/getPageTitleValueByHtmlElement.d.ts +2 -2
  179. package/dom/getPageTitleValueByHtmlElement.js +9 -9
  180. package/dom/getPageTitleValueByHtmlElement.js.map +1 -1
  181. package/dom/getReferenceBlockUid.d.ts +2 -2
  182. package/dom/getReferenceBlockUid.js +18 -18
  183. package/dom/getReferenceBlockUid.js.map +1 -1
  184. package/dom/getRoamUrl.d.ts +2 -2
  185. package/dom/getRoamUrl.js +4 -4
  186. package/dom/getRoamUrl.js.map +1 -1
  187. package/dom/getRoamUrlByPage.d.ts +2 -2
  188. package/dom/getRoamUrlByPage.js +10 -10
  189. package/dom/getRoamUrlByPage.js.map +1 -1
  190. package/dom/getUids.d.ts +3 -3
  191. package/dom/getUids.js +8 -8
  192. package/dom/getUids.js.map +1 -1
  193. package/dom/getUidsFromButton.d.ts +3 -3
  194. package/dom/getUidsFromButton.js +8 -8
  195. package/dom/getUidsFromButton.js.map +1 -1
  196. package/dom/getUidsFromId.d.ts +5 -5
  197. package/dom/getUidsFromId.js +15 -15
  198. package/dom/getUidsFromId.js.map +1 -1
  199. package/dom/index.d.ts +30 -30
  200. package/dom/index.js +63 -63
  201. package/dom/index.js.map +1 -1
  202. package/dom/parseRoamBlocksToHtml.d.ts +11 -11
  203. package/dom/parseRoamBlocksToHtml.js +79 -79
  204. package/dom/parseRoamBlocksToHtml.js.map +1 -1
  205. package/dom/resolveRefs.d.ts +2 -2
  206. package/dom/resolveRefs.js +24 -24
  207. package/dom/resolveRefs.js.map +1 -1
  208. package/events/index.d.ts +1 -1
  209. package/events/index.js +8 -8
  210. package/events/index.js.map +1 -1
  211. package/events/watchOnce.d.ts +3 -3
  212. package/events/watchOnce.js +12 -12
  213. package/events/watchOnce.js.map +1 -1
  214. package/hooks/index.d.ts +2 -2
  215. package/hooks/index.js +10 -10
  216. package/hooks/index.js.map +1 -1
  217. package/hooks/useArrowKeyDown.d.ts +10 -10
  218. package/hooks/useArrowKeyDown.js +54 -54
  219. package/hooks/useArrowKeyDown.js.map +1 -1
  220. package/hooks/useSubTree.d.ts +3 -3
  221. package/hooks/useSubTree.js +11 -11
  222. package/hooks/useSubTree.js.map +1 -1
  223. package/marked/index.d.ts +25 -25
  224. package/marked/index.js +567 -567
  225. package/marked/index.js.map +1 -1
  226. package/package.json +120 -125
  227. package/queries/compileDatalog.d.ts +3 -3
  228. package/queries/compileDatalog.js +63 -63
  229. package/queries/compileDatalog.js.map +1 -1
  230. package/queries/getAllBlockUids.d.ts +2 -2
  231. package/queries/getAllBlockUids.js +6 -6
  232. package/queries/getAllBlockUids.js.map +1 -1
  233. package/queries/getAllBlockUidsAndTexts.d.ts +5 -5
  234. package/queries/getAllBlockUidsAndTexts.js +6 -6
  235. package/queries/getAllBlockUidsAndTexts.js.map +1 -1
  236. package/queries/getAllPageNames.d.ts +2 -2
  237. package/queries/getAllPageNames.js +6 -6
  238. package/queries/getAllPageNames.js.map +1 -1
  239. package/queries/getAttributeValueByBlockAndName.d.ts +5 -5
  240. package/queries/getAttributeValueByBlockAndName.js +11 -11
  241. package/queries/getAttributeValueByBlockAndName.js.map +1 -1
  242. package/queries/getBasicTreeByParentUid.d.ts +3 -3
  243. package/queries/getBasicTreeByParentUid.js +13 -13
  244. package/queries/getBasicTreeByParentUid.js.map +1 -1
  245. package/queries/getBlockUidAndTextIncludingText.d.ts +5 -5
  246. package/queries/getBlockUidAndTextIncludingText.js +7 -7
  247. package/queries/getBlockUidAndTextIncludingText.js.map +1 -1
  248. package/queries/getBlockUidByTextOnPage.d.ts +5 -5
  249. package/queries/getBlockUidByTextOnPage.js +7 -7
  250. package/queries/getBlockUidByTextOnPage.js.map +1 -1
  251. package/queries/getBlockUidsAndTextsReferencingPage.d.ts +5 -5
  252. package/queries/getBlockUidsAndTextsReferencingPage.js +9 -9
  253. package/queries/getBlockUidsAndTextsReferencingPage.js.map +1 -1
  254. package/queries/getBlockUidsByPageTitle.d.ts +2 -2
  255. package/queries/getBlockUidsByPageTitle.js +8 -8
  256. package/queries/getBlockUidsByPageTitle.js.map +1 -1
  257. package/queries/getBlockUidsReferencingBlock.d.ts +2 -2
  258. package/queries/getBlockUidsReferencingBlock.js +4 -4
  259. package/queries/getBlockUidsReferencingBlock.js.map +1 -1
  260. package/queries/getBlockUidsReferencingPage.d.ts +2 -2
  261. package/queries/getBlockUidsReferencingPage.js +6 -6
  262. package/queries/getBlockUidsReferencingPage.js.map +1 -1
  263. package/queries/getBlockUidsWithParentUid.d.ts +2 -2
  264. package/queries/getBlockUidsWithParentUid.js +6 -6
  265. package/queries/getBlockUidsWithParentUid.js.map +1 -1
  266. package/queries/getChildrenLengthByPageUid.d.ts +2 -2
  267. package/queries/getChildrenLengthByPageUid.js +8 -8
  268. package/queries/getChildrenLengthByPageUid.js.map +1 -1
  269. package/queries/getChildrenLengthByParentUid.d.ts +2 -2
  270. package/queries/getChildrenLengthByParentUid.js +7 -7
  271. package/queries/getChildrenLengthByParentUid.js.map +1 -1
  272. package/queries/getCreateTimeByBlockUid.d.ts +2 -2
  273. package/queries/getCreateTimeByBlockUid.js +7 -7
  274. package/queries/getCreateTimeByBlockUid.js.map +1 -1
  275. package/queries/getCurrentUser.d.ts +2 -2
  276. package/queries/getCurrentUser.js +11 -11
  277. package/queries/getCurrentUser.js.map +1 -1
  278. package/queries/getCurrentUserDisplayName.d.ts +2 -2
  279. package/queries/getCurrentUserDisplayName.js +10 -10
  280. package/queries/getCurrentUserDisplayName.js.map +1 -1
  281. package/queries/getCurrentUserEmail.d.ts +2 -2
  282. package/queries/getCurrentUserEmail.js +13 -13
  283. package/queries/getCurrentUserEmail.js.map +1 -1
  284. package/queries/getCurrentUserUid.d.ts +2 -2
  285. package/queries/getCurrentUserUid.js +13 -13
  286. package/queries/getCurrentUserUid.js.map +1 -1
  287. package/queries/getDisplayNameByEmail.d.ts +2 -2
  288. package/queries/getDisplayNameByEmail.js +7 -7
  289. package/queries/getDisplayNameByEmail.js.map +1 -1
  290. package/queries/getDisplayNameByUid.d.ts +2 -2
  291. package/queries/getDisplayNameByUid.js +7 -7
  292. package/queries/getDisplayNameByUid.js.map +1 -1
  293. package/queries/getEditTimeByBlockUid.d.ts +2 -2
  294. package/queries/getEditTimeByBlockUid.js +7 -7
  295. package/queries/getEditTimeByBlockUid.js.map +1 -1
  296. package/queries/getEditedUserEmailByBlockUid.d.ts +2 -2
  297. package/queries/getEditedUserEmailByBlockUid.js +7 -7
  298. package/queries/getEditedUserEmailByBlockUid.js.map +1 -1
  299. package/queries/getFirstChildTextByBlockUid.d.ts +2 -2
  300. package/queries/getFirstChildTextByBlockUid.js +7 -7
  301. package/queries/getFirstChildTextByBlockUid.js.map +1 -1
  302. package/queries/getFirstChildUidByBlockUid.d.ts +2 -2
  303. package/queries/getFirstChildUidByBlockUid.js +6 -6
  304. package/queries/getFirstChildUidByBlockUid.js.map +1 -1
  305. package/queries/getFullTreeByParentUid.d.ts +3 -3
  306. package/queries/getFullTreeByParentUid.js +51 -51
  307. package/queries/getFullTreeByParentUid.js.map +1 -1
  308. package/queries/getLinkedPageTitlesUnderUid.d.ts +2 -2
  309. package/queries/getLinkedPageTitlesUnderUid.js +6 -6
  310. package/queries/getLinkedPageTitlesUnderUid.js.map +1 -1
  311. package/queries/getNthChildUidByBlockUid.d.ts +5 -5
  312. package/queries/getNthChildUidByBlockUid.js +7 -7
  313. package/queries/getNthChildUidByBlockUid.js.map +1 -1
  314. package/queries/getOrderByBlockUid.d.ts +2 -2
  315. package/queries/getOrderByBlockUid.js +7 -7
  316. package/queries/getOrderByBlockUid.js.map +1 -1
  317. package/queries/getPageTitleByBlockUid.d.ts +2 -2
  318. package/queries/getPageTitleByBlockUid.js +7 -7
  319. package/queries/getPageTitleByBlockUid.js.map +1 -1
  320. package/queries/getPageTitleByPageUid.d.ts +2 -2
  321. package/queries/getPageTitleByPageUid.js +12 -12
  322. package/queries/getPageTitleByPageUid.js.map +1 -1
  323. package/queries/getPageTitleReferencesByPageTitle.d.ts +2 -2
  324. package/queries/getPageTitleReferencesByPageTitle.js +6 -6
  325. package/queries/getPageTitleReferencesByPageTitle.js.map +1 -1
  326. package/queries/getPageTitlesAndBlockUidsReferencingPage.d.ts +5 -5
  327. package/queries/getPageTitlesAndBlockUidsReferencingPage.js +9 -9
  328. package/queries/getPageTitlesAndBlockUidsReferencingPage.js.map +1 -1
  329. package/queries/getPageTitlesAndUidsDirectlyReferencingPage.d.ts +5 -5
  330. package/queries/getPageTitlesAndUidsDirectlyReferencingPage.js +9 -9
  331. package/queries/getPageTitlesAndUidsDirectlyReferencingPage.js.map +1 -1
  332. package/queries/getPageTitlesReferencingBlockUid.d.ts +2 -2
  333. package/queries/getPageTitlesReferencingBlockUid.js +4 -4
  334. package/queries/getPageTitlesReferencingBlockUid.js.map +1 -1
  335. package/queries/getPageTitlesStartingWithPrefix.d.ts +2 -2
  336. package/queries/getPageTitlesStartingWithPrefix.js +6 -6
  337. package/queries/getPageTitlesStartingWithPrefix.js.map +1 -1
  338. package/queries/getPageUidByBlockUid.d.ts +2 -2
  339. package/queries/getPageUidByBlockUid.js +7 -7
  340. package/queries/getPageUidByBlockUid.js.map +1 -1
  341. package/queries/getPageUidByPageTitle.d.ts +2 -2
  342. package/queries/getPageUidByPageTitle.js +9 -9
  343. package/queries/getPageUidByPageTitle.js.map +1 -1
  344. package/queries/getPageViewType.d.ts +3 -3
  345. package/queries/getPageViewType.js +9 -9
  346. package/queries/getPageViewType.js.map +1 -1
  347. package/queries/getParentTextByBlockUid.d.ts +2 -2
  348. package/queries/getParentTextByBlockUid.js +7 -7
  349. package/queries/getParentTextByBlockUid.js.map +1 -1
  350. package/queries/getParentTextByBlockUidAndTag.d.ts +5 -5
  351. package/queries/getParentTextByBlockUidAndTag.js +7 -7
  352. package/queries/getParentTextByBlockUidAndTag.js.map +1 -1
  353. package/queries/getParentUidByBlockUid.d.ts +2 -2
  354. package/queries/getParentUidByBlockUid.js +7 -7
  355. package/queries/getParentUidByBlockUid.js.map +1 -1
  356. package/queries/getParentUidsOfBlockUid.d.ts +2 -2
  357. package/queries/getParentUidsOfBlockUid.js +4 -4
  358. package/queries/getParentUidsOfBlockUid.js.map +1 -1
  359. package/queries/getSettingsByEmail.d.ts +3 -3
  360. package/queries/getSettingsByEmail.js +7 -7
  361. package/queries/getSettingsByEmail.js.map +1 -1
  362. package/queries/getShallowTreeByParentUid.d.ts +5 -5
  363. package/queries/getShallowTreeByParentUid.js +9 -9
  364. package/queries/getShallowTreeByParentUid.js.map +1 -1
  365. package/queries/getTextByBlockUid.d.ts +2 -2
  366. package/queries/getTextByBlockUid.js +9 -9
  367. package/queries/getTextByBlockUid.js.map +1 -1
  368. package/queries/index.js +4 -4
  369. package/queries/index.js.map +1 -1
  370. package/queries/isLiveBlock.d.ts +2 -2
  371. package/queries/isLiveBlock.js +4 -4
  372. package/queries/isLiveBlock.js.map +1 -1
  373. package/queries/isTagOnPage.d.ts +5 -5
  374. package/queries/isTagOnPage.js +9 -9
  375. package/queries/isTagOnPage.js.map +1 -1
  376. package/queries/normalizePageTitle.d.ts +2 -2
  377. package/queries/normalizePageTitle.js +4 -4
  378. package/queries/normalizePageTitle.js.map +1 -1
  379. package/scripts/index.d.ts +1 -1
  380. package/scripts/index.js +26 -26
  381. package/scripts/index.js.map +1 -1
  382. package/scripts/publishToRoamDepot.d.ts +7 -7
  383. package/scripts/publishToRoamDepot.js +113 -113
  384. package/scripts/publishToRoamDepot.js.map +1 -1
  385. package/testing/mockRoamEnvironment.d.ts +2 -2
  386. package/testing/mockRoamEnvironment.js +1253 -1253
  387. package/testing/mockRoamEnvironment.js.map +1 -1
  388. package/types/index.d.ts +393 -250
  389. package/types/index.js +4 -4
  390. package/types/index.js.map +1 -1
  391. package/types/native.d.ts +405 -402
  392. package/types/native.js +4 -4
  393. package/types/native.js.map +1 -1
  394. package/types/query-builder.d.ts +10 -10
  395. package/types/query-builder.js +2 -2
  396. package/types/query-builder.js.map +1 -1
  397. package/types/smartblocks.d.ts +35 -35
  398. package/types/smartblocks.js +2 -2
  399. package/types/smartblocks.js.map +1 -1
  400. package/util/addInputSetting.d.ts +7 -7
  401. package/util/addInputSetting.js +25 -25
  402. package/util/addInputSetting.js.map +1 -1
  403. package/util/apiDelete.d.ts +2 -2
  404. package/util/apiDelete.js +6 -6
  405. package/util/apiDelete.js.map +1 -1
  406. package/util/apiGet.d.ts +2 -2
  407. package/util/apiGet.js +6 -6
  408. package/util/apiGet.js.map +1 -1
  409. package/util/apiPost.d.ts +2 -2
  410. package/util/apiPost.js +6 -6
  411. package/util/apiPost.js.map +1 -1
  412. package/util/apiPut.d.ts +2 -2
  413. package/util/apiPut.js +6 -6
  414. package/util/apiPut.js.map +1 -1
  415. package/util/createOverlayRender.d.ts +4 -4
  416. package/util/createOverlayRender.js +6 -6
  417. package/util/createOverlayRender.js.map +1 -1
  418. package/util/createTagRegex.d.ts +2 -2
  419. package/util/createTagRegex.js +7 -7
  420. package/util/createTagRegex.js.map +1 -1
  421. package/util/dispatchToRegistry.d.ts +3 -3
  422. package/util/dispatchToRegistry.js +7 -7
  423. package/util/dispatchToRegistry.js.map +1 -1
  424. package/util/env.d.ts +4 -4
  425. package/util/env.js +47 -47
  426. package/util/env.js.map +1 -1
  427. package/util/extensionApiContext.d.ts +29 -29
  428. package/util/extensionApiContext.js +17 -17
  429. package/util/extensionApiContext.js.map +1 -1
  430. package/util/extensionDeprecatedWarning.d.ts +5 -5
  431. package/util/extensionDeprecatedWarning.js +39 -39
  432. package/util/extensionDeprecatedWarning.js.map +1 -1
  433. package/util/extractRef.d.ts +2 -2
  434. package/util/extractRef.js +8 -8
  435. package/util/extractRef.js.map +1 -1
  436. package/util/extractTag.d.ts +2 -2
  437. package/util/extractTag.js +15 -15
  438. package/util/extractTag.js.map +1 -1
  439. package/util/focusMainWindowBlock.d.ts +2 -2
  440. package/util/focusMainWindowBlock.js +12 -12
  441. package/util/focusMainWindowBlock.js.map +1 -1
  442. package/util/getAuthorizationHeader.d.ts +2 -2
  443. package/util/getAuthorizationHeader.js +12 -12
  444. package/util/getAuthorizationHeader.js.map +1 -1
  445. package/util/getLocalStorageKey.d.ts +2 -2
  446. package/util/getLocalStorageKey.js +4 -4
  447. package/util/getLocalStorageKey.js.map +1 -1
  448. package/util/getOauth.d.ts +2 -2
  449. package/util/getOauth.js +52 -52
  450. package/util/getOauth.js.map +1 -1
  451. package/util/getOauthAccounts.d.ts +2 -2
  452. package/util/getOauthAccounts.js +22 -22
  453. package/util/getOauthAccounts.js.map +1 -1
  454. package/util/getRenderRoot.d.ts +2 -2
  455. package/util/getRenderRoot.js +18 -18
  456. package/util/getRenderRoot.js.map +1 -1
  457. package/util/getSettingIntFromTree.d.ts +7 -7
  458. package/util/getSettingIntFromTree.js +11 -11
  459. package/util/getSettingIntFromTree.js.map +1 -1
  460. package/util/getSettingValueFromTree.d.ts +8 -8
  461. package/util/getSettingValueFromTree.js +14 -14
  462. package/util/getSettingValueFromTree.js.map +1 -1
  463. package/util/getSettingValuesFromTree.d.ts +7 -7
  464. package/util/getSettingValuesFromTree.js +12 -12
  465. package/util/getSettingValuesFromTree.js.map +1 -1
  466. package/util/getSubTree.d.ts +8 -8
  467. package/util/getSubTree.js +19 -19
  468. package/util/getSubTree.js.map +1 -1
  469. package/util/getToken.d.ts +2 -2
  470. package/util/getToken.js +10 -10
  471. package/util/getToken.js.map +1 -1
  472. package/util/getTokenFromTree.d.ts +3 -3
  473. package/util/getTokenFromTree.js +4 -4
  474. package/util/getTokenFromTree.js.map +1 -1
  475. package/util/getWorkerClient.d.ts +12 -12
  476. package/util/getWorkerClient.js +41 -41
  477. package/util/getWorkerClient.js.map +1 -1
  478. package/util/handleBodyFetch.d.ts +3 -3
  479. package/util/handleBodyFetch.js +21 -21
  480. package/util/handleBodyFetch.js.map +1 -1
  481. package/util/handleFetch.d.ts +13 -13
  482. package/util/handleFetch.js +40 -40
  483. package/util/handleFetch.js.map +1 -1
  484. package/util/handleUrlFetch.d.ts +3 -3
  485. package/util/handleUrlFetch.js +19 -19
  486. package/util/handleUrlFetch.js.map +1 -1
  487. package/util/idToTitle.d.ts +2 -2
  488. package/util/idToTitle.js +8 -8
  489. package/util/idToTitle.js.map +1 -1
  490. package/util/index.d.ts +24 -24
  491. package/util/index.js +54 -54
  492. package/util/index.js.map +1 -1
  493. package/util/isControl.d.ts +2 -2
  494. package/util/isControl.js +4 -4
  495. package/util/isControl.js.map +1 -1
  496. package/util/localStorageGet.d.ts +2 -2
  497. package/util/localStorageGet.js +8 -8
  498. package/util/localStorageGet.js.map +1 -1
  499. package/util/localStorageRemove.d.ts +2 -2
  500. package/util/localStorageRemove.js +6 -6
  501. package/util/localStorageRemove.js.map +1 -1
  502. package/util/localStorageSet.d.ts +2 -2
  503. package/util/localStorageSet.js +8 -8
  504. package/util/localStorageSet.js.map +1 -1
  505. package/util/registerExperimentalMode.d.ts +6 -6
  506. package/util/registerExperimentalMode.js +65 -65
  507. package/util/registerExperimentalMode.js.map +1 -1
  508. package/util/registerSmartBlocksCommand.d.ts +3 -3
  509. package/util/registerSmartBlocksCommand.js +23 -23
  510. package/util/registerSmartBlocksCommand.js.map +1 -1
  511. package/util/removeFromRegistry.d.ts +3 -3
  512. package/util/removeFromRegistry.js +7 -7
  513. package/util/removeFromRegistry.js.map +1 -1
  514. package/util/renderOverlay.d.ts +12 -12
  515. package/util/renderOverlay.js +48 -48
  516. package/util/renderOverlay.js.map +1 -1
  517. package/util/renderWithUnmount.d.ts +4 -4
  518. package/util/renderWithUnmount.js +44 -44
  519. package/util/renderWithUnmount.js.map +1 -1
  520. package/util/runExtension.d.ts +11 -11
  521. package/util/runExtension.js +174 -174
  522. package/util/runExtension.js.map +1 -1
  523. package/util/setInputSetting.d.ts +7 -7
  524. package/util/setInputSetting.js +37 -37
  525. package/util/setInputSetting.js.map +1 -1
  526. package/util/setInputSettings.d.ts +7 -7
  527. package/util/setInputSettings.js +28 -28
  528. package/util/setInputSettings.js.map +1 -1
  529. package/util/stripUid.d.ts +3 -3
  530. package/util/stripUid.js +10 -10
  531. package/util/stripUid.js.map +1 -1
  532. package/util/toConfigPageName.d.ts +2 -2
  533. package/util/toConfigPageName.js +4 -4
  534. package/util/toConfigPageName.js.map +1 -1
  535. package/util/toFlexRegex.d.ts +2 -2
  536. package/util/toFlexRegex.js +4 -4
  537. package/util/toFlexRegex.js.map +1 -1
  538. package/writes/clearBlockById.d.ts +2 -2
  539. package/writes/clearBlockById.js +17 -17
  540. package/writes/clearBlockById.js.map +1 -1
  541. package/writes/clearBlockByUid.d.ts +2 -2
  542. package/writes/clearBlockByUid.js +16 -16
  543. package/writes/clearBlockByUid.js.map +1 -1
  544. package/writes/createBlock.d.ts +8 -8
  545. package/writes/createBlock.js +28 -28
  546. package/writes/createBlock.js.map +1 -1
  547. package/writes/createPage.d.ts +7 -7
  548. package/writes/createPage.js +20 -20
  549. package/writes/createPage.js.map +1 -1
  550. package/writes/deleteBlock.d.ts +2 -2
  551. package/writes/deleteBlock.js +10 -10
  552. package/writes/deleteBlock.js.map +1 -1
  553. package/writes/index.d.ts +8 -8
  554. package/writes/index.js +22 -22
  555. package/writes/index.js.map +1 -1
  556. package/writes/openBlockInSidebar.d.ts +2 -2
  557. package/writes/openBlockInSidebar.js +13 -13
  558. package/writes/openBlockInSidebar.js.map +1 -1
  559. package/writes/submitActions.d.ts +8 -8
  560. package/writes/submitActions.js +36 -36
  561. package/writes/submitActions.js.map +1 -1
  562. package/writes/updateActiveBlock.d.ts +2 -2
  563. package/writes/updateActiveBlock.js +17 -17
  564. package/writes/updateActiveBlock.js.map +1 -1
  565. package/writes/updateBlock.d.ts +5 -5
  566. package/writes/updateBlock.js +23 -23
  567. package/writes/updateBlock.js.map +1 -1
package/LICENSE CHANGED
@@ -1,21 +1,21 @@
1
- MIT License
2
-
3
- Copyright (c) 2021 David Vargas
4
-
5
- Permission is hereby granted, free of charge, to any person obtaining a copy
6
- of this software and associated documentation files (the "Software"), to deal
7
- in the Software without restriction, including without limitation the rights
8
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- copies of the Software, and to permit persons to whom the Software is
10
- furnished to do so, subject to the following conditions:
11
-
12
- The above copyright notice and this permission notice shall be included in all
13
- copies or substantial portions of the Software.
14
-
15
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
- SOFTWARE.
1
+ MIT License
2
+
3
+ Copyright (c) 2021 David Vargas
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md CHANGED
@@ -1,29 +1,29 @@
1
- # roamjs-components
2
-
3
- This is a collection of common UI components used by RoamJS extensions made available to make development easier for other Roam developers.
4
-
5
- The `roamjs-components` repository provides a robust set of tools and components for building extensions and integrations for the Roam Research note-taking application. Engineers can use this repo to streamline the development of Roam extensions by leveraging pre-built React components, utility functions, and custom hooks that interact with the Roam Research API. This repo addresses the real-world problem of efficiently creating and managing Roam Research extensions, enabling developers to focus on building unique features rather than handling boilerplate code.
6
-
7
- The most important parts of the repo include the Components, utility functions, and database query functions. These components are organized into several directories, each serving a specific purpose:
8
-
9
- [Components](https://github.com/RoamJS/roamjs-components/blob/main/docs/components.md): Found in the `…/components` directory, these components handle tasks such as configuration management, external authentication, and data visualization. Key components include configuration panels like `BlockPanel`, `BlocksPanel`, and `OauthPanel`, which are detailed in the Configuration Panels section. These components use React hooks and context to manage state and interactions within the Roam Research application.
10
-
11
- [Date and Time Utilities](https://github.com/RoamJS/roamjs-components/blob/main/docs/date.md): Located in `…/date`, this directory provides functions for parsing and manipulating dates, crucial for working with Roam's daily notes. The `parseNlpDate` function uses the `chrono-node` library to parse natural language dates, while `parseRoamDateUid` converts Roam date UIDs into JavaScript Date objects. More details can be found in the Date and Time Utilities section.
12
-
13
- [DOM Manipulation](https://github.com/RoamJS/roamjs-components/blob/main/docs/dom.md): The `…/dom` directory contains functions for interacting with the Document Object Model (DOM) within Roam Research. Functions like `addBlockCommand` and `createBlockObserver` are essential for adding new commands and observing changes in the DOM. These utilities are explained in the DOM Manipulation section.
14
-
15
- [Event Handling](https://github.com/RoamJS/roamjs-components/blob/main/docs/events.md): The `…/events` directory includes the `watchOnce` function, which sets up one-time event listeners in Roam Research. This function is useful for performing actions when specific changes occur in the Roam environment, as detailed in the Event Handling section.
16
-
17
- [Custom React Hooks](https://github.com/RoamJS/roamjs-components/blob/main/docs/hooks.md): Found in `…/hooks`, these hooks provide reusable functionality for managing user interactions and data structures. The `useArrowKeyDown` hook handles keyboard navigation within lists, while `useSubTree` manages sub-tree data structures. More information is available in the Custom React Hooks section.
18
-
19
- [Markdown Parsing and Rendering](https://github.com/RoamJS/roamjs-components/blob/main/docs/marked.md): The `…/marked` directory customizes the `marked` library to parse and render Markdown content within Roam Research. This includes handling Roam-specific elements like block references and tags. The Markdown Parsing and Rendering section provides further details.
20
-
21
- [Database Queries](https://github.com/RoamJS/roamjs-components/blob/main/docs/queries.md): The `…/queries` directory offers utility functions for interacting with the Roam Research database. Functions like `getAllBlockUids`, `getPageTitleByBlockUid`, and `getCurrentUser` retrieve various types of data from the database. These functions are crucial for building data-driven features and are discussed in the Database Queries section.
22
-
23
- [Script Management](https://github.com/RoamJS/roamjs-components/blob/main/docs/scripts.md): The `…/scripts` directory includes functions for managing scripts in Roam Research. This includes functions for creating and managing script commands, as well as functions for executing scripts.
24
-
25
- [Type Definitions](https://github.com/RoamJS/roamjs-components/blob/main/docs/types.md): The `…/types` directory contains TypeScript type definitions for various Roam Research components.
26
-
27
- [Utility Functions](https://github.com/RoamJS/roamjs-components/blob/main/docs/util.md): The `…/util` directory includes utility functions for working with the Roam Research API. These functions are designed to simplify the process of interacting with the API.
28
-
29
- [Write Operations](https://github.com/RoamJS/roamjs-components/blob/main/docs/writes.md): The `…/writes` directory includes functions for performing write operations in Roam, such as `createBlock`, `deleteBlock`, and `updateActiveBlock`. These functions handle the submission of actions to the Roam API, as detailed in the Write Operations section.
1
+ # roamjs-components
2
+
3
+ This is a collection of common UI components used by RoamJS extensions made available to make development easier for other Roam developers.
4
+
5
+ The `roamjs-components` repository provides a robust set of tools and components for building extensions and integrations for the Roam Research note-taking application. Engineers can use this repo to streamline the development of Roam extensions by leveraging pre-built React components, utility functions, and custom hooks that interact with the Roam Research API. This repo addresses the real-world problem of efficiently creating and managing Roam Research extensions, enabling developers to focus on building unique features rather than handling boilerplate code.
6
+
7
+ The most important parts of the repo include the Components, utility functions, and database query functions. These components are organized into several directories, each serving a specific purpose:
8
+
9
+ [Components](https://github.com/RoamJS/roamjs-components/blob/main/docs/components.md): Found in the `…/components` directory, these components handle tasks such as configuration management, external authentication, and data visualization. Key components include configuration panels like `BlockPanel`, `BlocksPanel`, and `OauthPanel`, which are detailed in the Configuration Panels section. These components use React hooks and context to manage state and interactions within the Roam Research application.
10
+
11
+ [Date and Time Utilities](https://github.com/RoamJS/roamjs-components/blob/main/docs/date.md): Located in `…/date`, this directory provides functions for parsing and manipulating dates, crucial for working with Roam's daily notes. The `parseNlpDate` function uses the `chrono-node` library to parse natural language dates, while `parseRoamDateUid` converts Roam date UIDs into JavaScript Date objects. More details can be found in the Date and Time Utilities section.
12
+
13
+ [DOM Manipulation](https://github.com/RoamJS/roamjs-components/blob/main/docs/dom.md): The `…/dom` directory contains functions for interacting with the Document Object Model (DOM) within Roam Research. Functions like `addBlockCommand` and `createBlockObserver` are essential for adding new commands and observing changes in the DOM. These utilities are explained in the DOM Manipulation section.
14
+
15
+ [Event Handling](https://github.com/RoamJS/roamjs-components/blob/main/docs/events.md): The `…/events` directory includes the `watchOnce` function, which sets up one-time event listeners in Roam Research. This function is useful for performing actions when specific changes occur in the Roam environment, as detailed in the Event Handling section.
16
+
17
+ [Custom React Hooks](https://github.com/RoamJS/roamjs-components/blob/main/docs/hooks.md): Found in `…/hooks`, these hooks provide reusable functionality for managing user interactions and data structures. The `useArrowKeyDown` hook handles keyboard navigation within lists, while `useSubTree` manages sub-tree data structures. More information is available in the Custom React Hooks section.
18
+
19
+ [Markdown Parsing and Rendering](https://github.com/RoamJS/roamjs-components/blob/main/docs/marked.md): The `…/marked` directory customizes the `marked` library to parse and render Markdown content within Roam Research. This includes handling Roam-specific elements like block references and tags. The Markdown Parsing and Rendering section provides further details.
20
+
21
+ [Database Queries](https://github.com/RoamJS/roamjs-components/blob/main/docs/queries.md): The `…/queries` directory offers utility functions for interacting with the Roam Research database. Functions like `getAllBlockUids`, `getPageTitleByBlockUid`, and `getCurrentUser` retrieve various types of data from the database. These functions are crucial for building data-driven features and are discussed in the Database Queries section.
22
+
23
+ [Script Management](https://github.com/RoamJS/roamjs-components/blob/main/docs/scripts.md): The `…/scripts` directory includes functions for managing scripts in Roam Research. This includes functions for creating and managing script commands, as well as functions for executing scripts.
24
+
25
+ [Type Definitions](https://github.com/RoamJS/roamjs-components/blob/main/docs/types.md): The `…/types` directory contains TypeScript type definitions for various Roam Research components.
26
+
27
+ [Utility Functions](https://github.com/RoamJS/roamjs-components/blob/main/docs/util.md): The `…/util` directory includes utility functions for working with the Roam Research API. These functions are designed to simplify the process of interacting with the API.
28
+
29
+ [Write Operations](https://github.com/RoamJS/roamjs-components/blob/main/docs/writes.md): The `…/writes` directory includes functions for performing write operations in Roam, such as `createBlock`, `deleteBlock`, and `updateActiveBlock`. These functions handle the submission of actions to the Roam API, as detailed in the Write Operations section.
@@ -1,28 +1,29 @@
1
- import React from "react";
2
- declare type FilterOptions<T> = (options: T[], query: string) => T[];
3
- declare type OnNewItem<T> = (s: string) => T;
4
- declare type ItemToQuery<T> = (t?: T) => string;
5
- export declare type AutocompleteInputProps<T = string> = {
6
- value?: T;
7
- setValue: (q: T) => void;
8
- showButton?: boolean;
9
- onBlur?: (v: string) => void;
10
- onConfirm?: () => void;
11
- options?: T[];
12
- placeholder?: string;
13
- autoFocus?: boolean;
14
- multiline?: boolean;
15
- id?: string;
16
- filterOptions?: FilterOptions<T>;
17
- itemToQuery?: ItemToQuery<T>;
18
- renderItem?: (props: {
19
- item: T;
20
- onClick: () => void;
21
- active: boolean;
22
- }) => React.ReactElement;
23
- onNewItem?: OnNewItem<T>;
24
- disabled?: boolean;
25
- maxItemsDisplayed?: number;
26
- };
27
- declare const AutocompleteInput: <T extends unknown = string>({ value, setValue, onBlur, onConfirm, showButton, options, placeholder, autoFocus, multiline, id, filterOptions: _filterOptions, itemToQuery: _itemToQuery, renderItem, onNewItem: _onNewItem, disabled, maxItemsDisplayed, }: AutocompleteInputProps<T>) => React.ReactElement;
28
- export default AutocompleteInput;
1
+ import React from "react";
2
+ declare type FilterOptions<T> = (options: T[], query: string) => T[];
3
+ declare type OnNewItem<T> = (s: string) => T;
4
+ declare type ItemToQuery<T> = (t?: T) => string;
5
+ export declare type AutocompleteInputProps<T = string> = {
6
+ value?: T;
7
+ setValue: (q: T) => void;
8
+ showButton?: boolean;
9
+ onBlur?: (v: string) => void;
10
+ onConfirm?: () => void;
11
+ options?: T[];
12
+ placeholder?: string;
13
+ autoFocus?: boolean;
14
+ multiline?: boolean;
15
+ id?: string;
16
+ filterOptions?: FilterOptions<T>;
17
+ itemToQuery?: ItemToQuery<T>;
18
+ renderItem?: (props: {
19
+ item: T;
20
+ onClick: () => void;
21
+ active: boolean;
22
+ }) => React.ReactElement;
23
+ onNewItem?: OnNewItem<T>;
24
+ disabled?: boolean;
25
+ maxItemsDisplayed?: number;
26
+ autoSelectFirstOption?: boolean;
27
+ };
28
+ declare const AutocompleteInput: <T extends unknown = string>({ value, setValue, onBlur, onConfirm, showButton, options, placeholder, autoFocus, multiline, id, filterOptions: _filterOptions, itemToQuery: _itemToQuery, renderItem, onNewItem: _onNewItem, disabled, maxItemsDisplayed, autoSelectFirstOption, }: AutocompleteInputProps<T>) => React.ReactElement;
29
+ export default AutocompleteInput;
@@ -1,121 +1,133 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const tslib_1 = require("tslib");
4
- const core_1 = require("@blueprintjs/core");
5
- const react_1 = tslib_1.__importStar(require("react"));
6
- const useArrowKeyDown_1 = tslib_1.__importDefault(require("../hooks/useArrowKeyDown"));
7
- const fuzzy_1 = tslib_1.__importDefault(require("fuzzy"));
8
- // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-constraint
9
- const AutocompleteInput = ({ value, setValue, onBlur, onConfirm, showButton, options = [], placeholder = "Enter value", autoFocus, multiline, id, filterOptions: _filterOptions, itemToQuery: _itemToQuery, renderItem, onNewItem: _onNewItem, disabled, maxItemsDisplayed = Infinity, }) => {
10
- const [isOpen, setIsOpen] = (0, react_1.useState)(false);
11
- const itemToQuery = (0, react_1.useMemo)(() => _itemToQuery || ((s) => (s ? `${s}` : "")), [_itemToQuery]);
12
- const [query, setQuery] = (0, react_1.useState)(() => itemToQuery(value));
13
- const open = (0, react_1.useCallback)(() => setIsOpen(true), [setIsOpen]);
14
- const close = (0, react_1.useCallback)(() => setIsOpen(false), [setIsOpen]);
15
- const [isTyping, setIsTyping] = (0, react_1.useState)(false);
16
- const filterOptions = (0, react_1.useMemo)(() => _filterOptions ||
17
- ((o, q) => fuzzy_1.default
18
- .filter(q, o, { extract: itemToQuery })
19
- .map((f) => f.original)
20
- .filter((f) => !!f)), [_filterOptions, itemToQuery]);
21
- const onNewItem = (0, react_1.useMemo)(() => _onNewItem || ((s) => s), [_onNewItem]);
22
- const items = (0, react_1.useMemo)(() => (query ? filterOptions(options, query) : options).slice(0, maxItemsDisplayed), [query, options, filterOptions, maxItemsDisplayed]);
23
- const menuRef = (0, react_1.useRef)(null);
24
- const inputRef = (0, react_1.useRef)(null);
25
- const onEnter = (0, react_1.useCallback)((value) => {
26
- if (isOpen && value) {
27
- setQuery(itemToQuery(value));
28
- setValue(value);
29
- setIsTyping(false);
30
- }
31
- else if (onConfirm) {
32
- onConfirm();
33
- }
34
- else {
35
- setIsOpen(true);
36
- }
37
- }, [setValue, onConfirm, isOpen]);
38
- const { activeIndex, onKeyDown } = (0, useArrowKeyDown_1.default)({
39
- onEnter,
40
- results: items,
41
- menuRef,
42
- });
43
- (0, react_1.useEffect)(() => {
44
- if (!items.length || !isTyping)
45
- close();
46
- else
47
- open();
48
- }, [items, close, open, isTyping]);
49
- (0, react_1.useEffect)(() => {
50
- if (query && isOpen)
51
- setValue(items[activeIndex] || onNewItem(query));
52
- else if (query)
53
- setValue(onNewItem(query));
54
- }, [setValue, activeIndex, items, onNewItem, query]);
55
- (0, react_1.useEffect)(() => {
56
- if (inputRef.current &&
57
- inputRef.current === document.activeElement &&
58
- value) {
59
- const index = itemToQuery(value).length;
60
- inputRef.current.setSelectionRange(index, index);
61
- }
62
- const touchEndListener = (e) => {
63
- if (!e.target ||
64
- !menuRef.current ||
65
- menuRef.current.contains(e.target)) {
66
- return;
67
- }
68
- if (!inputRef.current || inputRef.current.contains(e.target)) {
69
- return;
70
- }
71
- close();
72
- };
73
- document.body.addEventListener("touchend", touchEndListener);
74
- return () => document.body.removeEventListener("touchend", touchEndListener);
75
- }, [inputRef, menuRef, close]);
76
- const Input = (0, react_1.useMemo)(() => (multiline ? core_1.TextArea : core_1.InputGroup), [multiline]);
77
- return (react_1.default.createElement(core_1.Popover, { portalClassName: "roamjs-autocomplete-input", targetClassName: "roamjs-autocomplete-input-target", captureDismiss: true, isOpen: isOpen, onOpened: open, minimal: true, autoFocus: false, enforceFocus: false, position: core_1.PopoverPosition.BOTTOM_LEFT, modifiers: {
78
- flip: { enabled: false },
79
- preventOverflow: { enabled: false },
80
- }, content: react_1.default.createElement(core_1.Menu, { className: "max-h-64 overflow-auto max-w-md", ulRef: menuRef }, items.map((t, i) => {
81
- const onClick = () => {
82
- var _a;
83
- setIsTyping(false);
84
- setValue(t);
85
- setQuery(itemToQuery(t));
86
- (_a = inputRef.current) === null || _a === void 0 ? void 0 : _a.focus();
87
- };
88
- const sharedProps = {
89
- onClick,
90
- onTouchEnd: onClick,
91
- active: activeIndex === i,
92
- };
93
- return renderItem ? (react_1.default.createElement(react_1.default.Fragment, { key: i }, renderItem === null || renderItem === void 0 ? void 0 : renderItem(Object.assign({ item: t }, sharedProps)))) : (react_1.default.createElement(core_1.MenuItem, Object.assign({ text: itemToQuery(t), key: i, multiline: true }, sharedProps)));
94
- })), target: react_1.default.createElement(Input, Object.assign({ disabled: disabled, value: query, onChange: (e) => {
95
- setIsTyping(true);
96
- setQuery(e.target.value);
97
- }, autoFocus: autoFocus, placeholder: placeholder, onKeyDown: (e) => {
98
- if (e.key === "Escape") {
99
- e.stopPropagation();
100
- close();
101
- }
102
- else {
103
- onKeyDown(e);
104
- }
105
- }, id: id, onClick: () => setIsTyping(true), onBlur: (e) => {
106
- var _a, _b;
107
- if (e.relatedTarget === null ||
108
- !((_b = (_a = e.relatedTarget).closest) === null || _b === void 0 ? void 0 : _b.call(_a, ".roamjs-autocomplete-input"))) {
109
- setIsTyping(false);
110
- }
111
- if (onBlur) {
112
- onBlur(e.target.value);
113
- }
114
- }, inputRef: inputRef }, (showButton
115
- ? {
116
- rightElement: (react_1.default.createElement(core_1.Button, { icon: "add", minimal: true, onClick: () => onEnter() })),
117
- }
118
- : {}))) }));
119
- };
120
- exports.default = AutocompleteInput;
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ const core_1 = require("@blueprintjs/core");
5
+ const react_1 = tslib_1.__importStar(require("react"));
6
+ const useArrowKeyDown_1 = tslib_1.__importDefault(require("../hooks/useArrowKeyDown"));
7
+ const fuzzy_1 = tslib_1.__importDefault(require("fuzzy"));
8
+ // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-constraint
9
+ const AutocompleteInput = ({ value, setValue, onBlur, onConfirm, showButton, options = [], placeholder = "Enter value", autoFocus, multiline, id, filterOptions: _filterOptions, itemToQuery: _itemToQuery, renderItem, onNewItem: _onNewItem, disabled, maxItemsDisplayed = Infinity, autoSelectFirstOption = true, }) => {
10
+ const [isOpen, setIsOpen] = (0, react_1.useState)(false);
11
+ const itemToQuery = (0, react_1.useMemo)(() => _itemToQuery || ((s) => (s ? `${s}` : "")), [_itemToQuery]);
12
+ const [query, setQuery] = (0, react_1.useState)(() => itemToQuery(value));
13
+ const open = (0, react_1.useCallback)(() => setIsOpen(true), [setIsOpen]);
14
+ const close = (0, react_1.useCallback)(() => setIsOpen(false), [setIsOpen]);
15
+ const [isTyping, setIsTyping] = (0, react_1.useState)(false);
16
+ const filterOptions = (0, react_1.useMemo)(() => _filterOptions ||
17
+ ((o, q) => fuzzy_1.default
18
+ .filter(q, o, { extract: itemToQuery })
19
+ .map((f) => f.original)
20
+ .filter((f) => !!f)), [_filterOptions, itemToQuery]);
21
+ const onNewItem = (0, react_1.useMemo)(() => _onNewItem || ((s) => s), [_onNewItem]);
22
+ const items = (0, react_1.useMemo)(() => (query ? filterOptions(options, query) : options).slice(0, maxItemsDisplayed), [query, options, filterOptions, maxItemsDisplayed]);
23
+ const menuRef = (0, react_1.useRef)(null);
24
+ const inputRef = (0, react_1.useRef)(null);
25
+ const onEnter = (0, react_1.useCallback)((value) => {
26
+ if (isOpen && value) {
27
+ setQuery(itemToQuery(value));
28
+ setValue(value);
29
+ setIsTyping(false);
30
+ }
31
+ else if (onConfirm) {
32
+ onConfirm();
33
+ }
34
+ else {
35
+ setIsOpen(true);
36
+ }
37
+ }, [setValue, onConfirm, isOpen]);
38
+ const { activeIndex, onKeyDown } = (0, useArrowKeyDown_1.default)({
39
+ onEnter,
40
+ results: items,
41
+ menuRef,
42
+ });
43
+ (0, react_1.useEffect)(() => {
44
+ if (!items.length || !isTyping)
45
+ close();
46
+ else
47
+ open();
48
+ }, [items, close, open, isTyping]);
49
+ (0, react_1.useEffect)(() => {
50
+ if (!query || !isTyping)
51
+ return;
52
+ if (autoSelectFirstOption && isOpen) {
53
+ setValue(items[activeIndex] || onNewItem(query));
54
+ return;
55
+ }
56
+ setValue(onNewItem(query));
57
+ }, [
58
+ setValue,
59
+ activeIndex,
60
+ items,
61
+ onNewItem,
62
+ isTyping,
63
+ query,
64
+ isOpen,
65
+ autoSelectFirstOption,
66
+ ]);
67
+ (0, react_1.useEffect)(() => {
68
+ if (inputRef.current &&
69
+ inputRef.current === document.activeElement &&
70
+ value) {
71
+ const index = itemToQuery(value).length;
72
+ inputRef.current.setSelectionRange(index, index);
73
+ }
74
+ const touchEndListener = (e) => {
75
+ if (!e.target ||
76
+ !menuRef.current ||
77
+ menuRef.current.contains(e.target)) {
78
+ return;
79
+ }
80
+ if (!inputRef.current || inputRef.current.contains(e.target)) {
81
+ return;
82
+ }
83
+ close();
84
+ };
85
+ document.body.addEventListener("touchend", touchEndListener);
86
+ return () => document.body.removeEventListener("touchend", touchEndListener);
87
+ }, [inputRef, menuRef, close]);
88
+ const Input = (0, react_1.useMemo)(() => (multiline ? core_1.TextArea : core_1.InputGroup), [multiline]);
89
+ return (react_1.default.createElement(core_1.Popover, { portalClassName: "roamjs-autocomplete-input", targetClassName: "roamjs-autocomplete-input-target", captureDismiss: true, isOpen: isOpen, onOpened: open, minimal: true, autoFocus: false, enforceFocus: false, position: core_1.PopoverPosition.BOTTOM_LEFT, modifiers: {
90
+ flip: { enabled: false },
91
+ preventOverflow: { enabled: false },
92
+ }, content: react_1.default.createElement(core_1.Menu, { className: "max-h-64 overflow-auto max-w-md", ulRef: menuRef }, items.map((t, i) => {
93
+ const onClick = () => {
94
+ var _a;
95
+ setIsTyping(false);
96
+ setValue(t);
97
+ setQuery(itemToQuery(t));
98
+ (_a = inputRef.current) === null || _a === void 0 ? void 0 : _a.focus();
99
+ };
100
+ const sharedProps = {
101
+ onClick,
102
+ onTouchEnd: onClick,
103
+ active: activeIndex === i,
104
+ };
105
+ return renderItem ? (react_1.default.createElement(react_1.default.Fragment, { key: i }, renderItem === null || renderItem === void 0 ? void 0 : renderItem(Object.assign({ item: t }, sharedProps)))) : (react_1.default.createElement(core_1.MenuItem, Object.assign({ text: itemToQuery(t), key: i, multiline: true }, sharedProps)));
106
+ })), target: react_1.default.createElement(Input, Object.assign({ disabled: disabled, value: query, onChange: (e) => {
107
+ setIsTyping(true);
108
+ setQuery(e.target.value);
109
+ }, autoFocus: autoFocus, placeholder: placeholder, onKeyDown: (e) => {
110
+ if (e.key === "Escape") {
111
+ e.stopPropagation();
112
+ close();
113
+ }
114
+ else {
115
+ onKeyDown(e);
116
+ }
117
+ }, id: id, onClick: () => setIsTyping(true), onBlur: (e) => {
118
+ var _a, _b;
119
+ if (e.relatedTarget === null ||
120
+ !((_b = (_a = e.relatedTarget).closest) === null || _b === void 0 ? void 0 : _b.call(_a, ".roamjs-autocomplete-input"))) {
121
+ setIsTyping(false);
122
+ }
123
+ if (onBlur) {
124
+ onBlur(e.target.value);
125
+ }
126
+ }, inputRef: inputRef }, (showButton
127
+ ? {
128
+ rightElement: (react_1.default.createElement(core_1.Button, { icon: "add", minimal: true, onClick: () => onEnter() })),
129
+ }
130
+ : {}))) }));
131
+ };
132
+ exports.default = AutocompleteInput;
121
133
  //# sourceMappingURL=AutocompleteInput.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"AutocompleteInput.js","sourceRoot":"","sources":["../../src/components/AutocompleteInput.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n InputGroup,\n Menu,\n MenuItem,\n PopoverPosition,\n Popover,\n Button,\n TextArea,\n} from \"@blueprintjs/core\";\nimport React, {\n useState,\n useCallback,\n useMemo,\n useRef,\n useEffect,\n} from \"react\";\nimport useArrowKeyDown from \"../hooks/useArrowKeyDown\";\nimport fuzzy from \"fuzzy\";\n\ntype FilterOptions<T> = (options: T[], query: string) => T[];\ntype OnNewItem<T> = (s: string) => T;\ntype ItemToQuery<T> = (t?: T) => string;\n\nexport type AutocompleteInputProps<T = string> = {\n value?: T;\n setValue: (q: T) => void;\n showButton?: boolean;\n onBlur?: (v: string) => void;\n onConfirm?: () => void;\n options?: T[];\n placeholder?: string;\n autoFocus?: boolean;\n multiline?: boolean;\n id?: string;\n filterOptions?: FilterOptions<T>;\n itemToQuery?: ItemToQuery<T>;\n renderItem?: (props: {\n item: T;\n onClick: () => void;\n active: boolean;\n }) => React.ReactElement;\n onNewItem?: OnNewItem<T>;\n disabled?: boolean;\n maxItemsDisplayed?: number;\n};\n\n// eslint-disable-next-line @typescript-eslint/no-unnecessary-type-constraint\nconst AutocompleteInput = <T extends unknown = string>({\n value,\n setValue,\n onBlur,\n onConfirm,\n showButton,\n options = [],\n placeholder = \"Enter value\",\n autoFocus,\n multiline,\n id,\n filterOptions: _filterOptions,\n itemToQuery: _itemToQuery,\n renderItem,\n onNewItem: _onNewItem,\n disabled,\n maxItemsDisplayed = Infinity,\n}: AutocompleteInputProps<T>): React.ReactElement => {\n const [isOpen, setIsOpen] = useState(false);\n const itemToQuery = useMemo<ItemToQuery<T>>(\n () => _itemToQuery || ((s) => (s ? `${s}` : \"\")),\n [_itemToQuery]\n );\n const [query, setQuery] = useState<string>(() => itemToQuery(value));\n const open = useCallback(() => setIsOpen(true), [setIsOpen]);\n const close = useCallback(() => setIsOpen(false), [setIsOpen]);\n const [isTyping, setIsTyping] = useState(false);\n const filterOptions = useMemo<FilterOptions<T>>(\n () =>\n _filterOptions ||\n ((o, q) =>\n fuzzy\n .filter(q, o, { extract: itemToQuery })\n .map((f) => f.original)\n .filter((f): f is T => !!f)),\n [_filterOptions, itemToQuery]\n );\n const onNewItem = useMemo<OnNewItem<T>>(\n () => _onNewItem || ((s) => s as T),\n [_onNewItem]\n );\n\n const items = useMemo(\n () =>\n (query ? filterOptions(options, query) : options).slice(\n 0,\n maxItemsDisplayed\n ),\n [query, options, filterOptions, maxItemsDisplayed]\n );\n const menuRef = useRef<HTMLUListElement>(null);\n const inputRef = useRef<HTMLInputElement & HTMLTextAreaElement>(null);\n const onEnter = useCallback(\n (value?: T) => {\n if (isOpen && value) {\n setQuery(itemToQuery(value));\n setValue(value);\n setIsTyping(false);\n } else if (onConfirm) {\n onConfirm();\n } else {\n setIsOpen(true);\n }\n },\n [setValue, onConfirm, isOpen]\n );\n const { activeIndex, onKeyDown } = useArrowKeyDown({\n onEnter,\n results: items,\n menuRef,\n });\n useEffect(() => {\n if (!items.length || !isTyping) close();\n else open();\n }, [items, close, open, isTyping]);\n useEffect(() => {\n if (query && isOpen) setValue(items[activeIndex] || onNewItem(query));\n else if (query) setValue(onNewItem(query));\n }, [setValue, activeIndex, items, onNewItem, query]);\n useEffect(() => {\n if (\n inputRef.current &&\n inputRef.current === document.activeElement &&\n value\n ) {\n const index = itemToQuery(value).length;\n inputRef.current.setSelectionRange(index, index);\n }\n const touchEndListener = (e: TouchEvent) => {\n if (\n !e.target ||\n !menuRef.current ||\n menuRef.current.contains(e.target as Element)\n ) {\n return;\n }\n if (!inputRef.current || inputRef.current.contains(e.target as Element)) {\n return;\n }\n close();\n };\n document.body.addEventListener(\"touchend\", touchEndListener);\n return () =>\n document.body.removeEventListener(\"touchend\", touchEndListener);\n }, [inputRef, menuRef, close]);\n const Input = useMemo(() => (multiline ? TextArea : InputGroup), [multiline]);\n return (\n <Popover\n portalClassName={\"roamjs-autocomplete-input\"}\n targetClassName={\"roamjs-autocomplete-input-target\"}\n captureDismiss={true}\n isOpen={isOpen}\n onOpened={open}\n minimal\n autoFocus={false}\n enforceFocus={false}\n position={PopoverPosition.BOTTOM_LEFT}\n modifiers={{\n flip: { enabled: false },\n preventOverflow: { enabled: false },\n }}\n content={\n <Menu className={\"max-h-64 overflow-auto max-w-md\"} ulRef={menuRef}>\n {items.map((t, i) => {\n const onClick = () => {\n setIsTyping(false);\n setValue(t);\n setQuery(itemToQuery(t));\n inputRef.current?.focus();\n };\n const sharedProps = {\n onClick,\n onTouchEnd: onClick,\n active: activeIndex === i,\n };\n return renderItem ? (\n <React.Fragment key={i}>\n {renderItem?.({\n item: t,\n ...sharedProps,\n })}\n </React.Fragment>\n ) : (\n <MenuItem\n text={itemToQuery(t)}\n key={i}\n multiline\n {...sharedProps}\n />\n );\n })}\n </Menu>\n }\n target={\n <Input\n disabled={disabled}\n value={query}\n onChange={(e) => {\n setIsTyping(true);\n setQuery(e.target.value);\n }}\n autoFocus={autoFocus}\n placeholder={placeholder}\n onKeyDown={(e) => {\n if (e.key === \"Escape\") {\n e.stopPropagation();\n close();\n } else {\n onKeyDown(e);\n }\n }}\n id={id}\n onClick={() => setIsTyping(true)}\n onBlur={(e) => {\n if (\n e.relatedTarget === null ||\n !(e.relatedTarget as HTMLElement).closest?.(\n \".roamjs-autocomplete-input\"\n )\n ) {\n setIsTyping(false);\n }\n if (onBlur) {\n onBlur(e.target.value);\n }\n }}\n inputRef={inputRef}\n {...(showButton\n ? {\n rightElement: (\n <Button icon={\"add\"} minimal onClick={() => onEnter()} />\n ),\n }\n : {})}\n />\n }\n />\n );\n};\n\nexport default AutocompleteInput;\n"]}
1
+ {"version":3,"file":"AutocompleteInput.js","sourceRoot":"","sources":["../../src/components/AutocompleteInput.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n InputGroup,\n Menu,\n MenuItem,\n PopoverPosition,\n Popover,\n Button,\n TextArea,\n} from \"@blueprintjs/core\";\nimport React, {\n useState,\n useCallback,\n useMemo,\n useRef,\n useEffect,\n} from \"react\";\nimport useArrowKeyDown from \"../hooks/useArrowKeyDown\";\nimport fuzzy from \"fuzzy\";\n\ntype FilterOptions<T> = (options: T[], query: string) => T[];\ntype OnNewItem<T> = (s: string) => T;\ntype ItemToQuery<T> = (t?: T) => string;\n\nexport type AutocompleteInputProps<T = string> = {\n value?: T;\n setValue: (q: T) => void;\n showButton?: boolean;\n onBlur?: (v: string) => void;\n onConfirm?: () => void;\n options?: T[];\n placeholder?: string;\n autoFocus?: boolean;\n multiline?: boolean;\n id?: string;\n filterOptions?: FilterOptions<T>;\n itemToQuery?: ItemToQuery<T>;\n renderItem?: (props: {\n item: T;\n onClick: () => void;\n active: boolean;\n }) => React.ReactElement;\n onNewItem?: OnNewItem<T>;\n disabled?: boolean;\n maxItemsDisplayed?: number;\n autoSelectFirstOption?: boolean;\n};\n\n// eslint-disable-next-line @typescript-eslint/no-unnecessary-type-constraint\nconst AutocompleteInput = <T extends unknown = string>({\n value,\n setValue,\n onBlur,\n onConfirm,\n showButton,\n options = [],\n placeholder = \"Enter value\",\n autoFocus,\n multiline,\n id,\n filterOptions: _filterOptions,\n itemToQuery: _itemToQuery,\n renderItem,\n onNewItem: _onNewItem,\n disabled,\n maxItemsDisplayed = Infinity,\n autoSelectFirstOption = true,\n}: AutocompleteInputProps<T>): React.ReactElement => {\n const [isOpen, setIsOpen] = useState(false);\n const itemToQuery = useMemo<ItemToQuery<T>>(\n () => _itemToQuery || ((s) => (s ? `${s}` : \"\")),\n [_itemToQuery]\n );\n const [query, setQuery] = useState<string>(() => itemToQuery(value));\n const open = useCallback(() => setIsOpen(true), [setIsOpen]);\n const close = useCallback(() => setIsOpen(false), [setIsOpen]);\n const [isTyping, setIsTyping] = useState(false);\n const filterOptions = useMemo<FilterOptions<T>>(\n () =>\n _filterOptions ||\n ((o, q) =>\n fuzzy\n .filter(q, o, { extract: itemToQuery })\n .map((f) => f.original)\n .filter((f): f is T => !!f)),\n [_filterOptions, itemToQuery]\n );\n const onNewItem = useMemo<OnNewItem<T>>(\n () => _onNewItem || ((s) => s as T),\n [_onNewItem]\n );\n\n const items = useMemo(\n () =>\n (query ? filterOptions(options, query) : options).slice(\n 0,\n maxItemsDisplayed\n ),\n [query, options, filterOptions, maxItemsDisplayed]\n );\n const menuRef = useRef<HTMLUListElement>(null);\n const inputRef = useRef<HTMLInputElement & HTMLTextAreaElement>(null);\n const onEnter = useCallback(\n (value?: T) => {\n if (isOpen && value) {\n setQuery(itemToQuery(value));\n setValue(value);\n setIsTyping(false);\n } else if (onConfirm) {\n onConfirm();\n } else {\n setIsOpen(true);\n }\n },\n [setValue, onConfirm, isOpen]\n );\n const { activeIndex, onKeyDown } = useArrowKeyDown({\n onEnter,\n results: items,\n menuRef,\n });\n useEffect(() => {\n if (!items.length || !isTyping) close();\n else open();\n }, [items, close, open, isTyping]);\n useEffect(() => {\n if (!query || !isTyping) return;\n if (autoSelectFirstOption && isOpen) {\n setValue(items[activeIndex] || onNewItem(query));\n return;\n }\n setValue(onNewItem(query));\n }, [\n setValue,\n activeIndex,\n items,\n onNewItem,\n isTyping,\n query,\n isOpen,\n autoSelectFirstOption,\n ]);\n useEffect(() => {\n if (\n inputRef.current &&\n inputRef.current === document.activeElement &&\n value\n ) {\n const index = itemToQuery(value).length;\n inputRef.current.setSelectionRange(index, index);\n }\n const touchEndListener = (e: TouchEvent) => {\n if (\n !e.target ||\n !menuRef.current ||\n menuRef.current.contains(e.target as Element)\n ) {\n return;\n }\n if (!inputRef.current || inputRef.current.contains(e.target as Element)) {\n return;\n }\n close();\n };\n document.body.addEventListener(\"touchend\", touchEndListener);\n return () =>\n document.body.removeEventListener(\"touchend\", touchEndListener);\n }, [inputRef, menuRef, close]);\n const Input = useMemo(() => (multiline ? TextArea : InputGroup), [multiline]);\n return (\n <Popover\n portalClassName={\"roamjs-autocomplete-input\"}\n targetClassName={\"roamjs-autocomplete-input-target\"}\n captureDismiss={true}\n isOpen={isOpen}\n onOpened={open}\n minimal\n autoFocus={false}\n enforceFocus={false}\n position={PopoverPosition.BOTTOM_LEFT}\n modifiers={{\n flip: { enabled: false },\n preventOverflow: { enabled: false },\n }}\n content={\n <Menu className={\"max-h-64 overflow-auto max-w-md\"} ulRef={menuRef}>\n {items.map((t, i) => {\n const onClick = () => {\n setIsTyping(false);\n setValue(t);\n setQuery(itemToQuery(t));\n inputRef.current?.focus();\n };\n const sharedProps = {\n onClick,\n onTouchEnd: onClick,\n active: activeIndex === i,\n };\n return renderItem ? (\n <React.Fragment key={i}>\n {renderItem?.({\n item: t,\n ...sharedProps,\n })}\n </React.Fragment>\n ) : (\n <MenuItem\n text={itemToQuery(t)}\n key={i}\n multiline\n {...sharedProps}\n />\n );\n })}\n </Menu>\n }\n target={\n <Input\n disabled={disabled}\n value={query}\n onChange={(e) => {\n setIsTyping(true);\n setQuery(e.target.value);\n }}\n autoFocus={autoFocus}\n placeholder={placeholder}\n onKeyDown={(e) => {\n if (e.key === \"Escape\") {\n e.stopPropagation();\n close();\n } else {\n onKeyDown(e);\n }\n }}\n id={id}\n onClick={() => setIsTyping(true)}\n onBlur={(e) => {\n if (\n e.relatedTarget === null ||\n !(e.relatedTarget as HTMLElement).closest?.(\n \".roamjs-autocomplete-input\"\n )\n ) {\n setIsTyping(false);\n }\n if (onBlur) {\n onBlur(e.target.value);\n }\n }}\n inputRef={inputRef}\n {...(showButton\n ? {\n rightElement: (\n <Button icon={\"add\"} minimal onClick={() => onEnter()} />\n ),\n }\n : {})}\n />\n }\n />\n );\n};\n\nexport default AutocompleteInput;\n"]}
@@ -1,16 +1,15 @@
1
- import React from "react";
2
- declare type BlockErrorBoundaryProps = {
3
- blockUid: string;
4
- message: string;
5
- children: React.ReactNode;
6
- };
7
- declare type BlockErrorBoundaryState = {
8
- hasError: boolean;
9
- };
10
- declare class BlockErrorBoundary extends React.Component<BlockErrorBoundaryProps, BlockErrorBoundaryState> {
11
- constructor(props: BlockErrorBoundaryProps);
12
- static getDerivedStateFromError(): BlockErrorBoundaryState;
13
- componentDidCatch(error: Error): void;
14
- render(): React.ReactNode;
15
- }
16
- export default BlockErrorBoundary;
1
+ import React from "react";
2
+ declare type BlockErrorBoundaryProps = {
3
+ blockUid: string;
4
+ message: string;
5
+ };
6
+ declare type BlockErrorBoundaryState = {
7
+ hasError: boolean;
8
+ };
9
+ declare class BlockErrorBoundary extends React.Component<BlockErrorBoundaryProps, BlockErrorBoundaryState> {
10
+ constructor(props: BlockErrorBoundaryProps);
11
+ static getDerivedStateFromError(): BlockErrorBoundaryState;
12
+ componentDidCatch(error: Error): void;
13
+ render(): React.ReactNode;
14
+ }
15
+ export default BlockErrorBoundary;
@@ -1,28 +1,28 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const tslib_1 = require("tslib");
4
- const react_1 = tslib_1.__importDefault(require("react"));
5
- const createBlock_1 = tslib_1.__importDefault(require("../writes/createBlock"));
6
- class BlockErrorBoundary extends react_1.default.Component {
7
- constructor(props) {
8
- super(props);
9
- this.state = { hasError: false };
10
- }
11
- static getDerivedStateFromError() {
12
- return { hasError: true };
13
- }
14
- componentDidCatch(error) {
15
- (0, createBlock_1.default)({
16
- node: { text: this.props.message.replace("{ERROR}", error.message) },
17
- parentUid: this.props.blockUid,
18
- });
19
- }
20
- render() {
21
- if (this.state.hasError) {
22
- return react_1.default.createElement("div", null, "Component Failed To Load");
23
- }
24
- return this.props.children;
25
- }
26
- }
27
- exports.default = BlockErrorBoundary;
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ const react_1 = tslib_1.__importDefault(require("react"));
5
+ const createBlock_1 = tslib_1.__importDefault(require("../writes/createBlock"));
6
+ class BlockErrorBoundary extends react_1.default.Component {
7
+ constructor(props) {
8
+ super(props);
9
+ this.state = { hasError: false };
10
+ }
11
+ static getDerivedStateFromError() {
12
+ return { hasError: true };
13
+ }
14
+ componentDidCatch(error) {
15
+ (0, createBlock_1.default)({
16
+ node: { text: this.props.message.replace("{ERROR}", error.message) },
17
+ parentUid: this.props.blockUid,
18
+ });
19
+ }
20
+ render() {
21
+ if (this.state.hasError) {
22
+ return react_1.default.createElement("div", null, "Component Failed To Load");
23
+ }
24
+ return this.props.children;
25
+ }
26
+ }
27
+ exports.default = BlockErrorBoundary;
28
28
  //# sourceMappingURL=BlockErrorBoundary.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"BlockErrorBoundary.js","sourceRoot":"","sources":["../../src/components/BlockErrorBoundary.tsx"],"names":[],"mappings":";;;AAAA,0DAA0B;AAC1B,gFAAgD;AAShD,MAAM,kBAAmB,SAAQ,eAAK,CAAC,SAGtC;IACC,YAAY,KAA8B;QACxC,KAAK,CAAC,KAAK,CAAC,CAAC;QACb,IAAI,CAAC,KAAK,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;IACnC,CAAC;IAED,MAAM,CAAC,wBAAwB;QAC7B,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IAC5B,CAAC;IAED,iBAAiB,CAAC,KAAY;QAC5B,IAAA,qBAAW,EAAC;YACV,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,EAAE,KAAK,CAAC,OAAO,CAAC,EAAE;YACpE,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ;SAC/B,CAAC,CAAC;IACL,CAAC;IAED,MAAM;QACJ,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE;YACvB,OAAO,sEAAmC,CAAC;SAC5C;QACD,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC;IAC7B,CAAC;CACF;AAED,kBAAe,kBAAkB,CAAC","sourcesContent":["import React from \"react\";\nimport createBlock from \"../writes/createBlock\";\n\ntype BlockErrorBoundaryProps = {\n blockUid: string;\n message: string;\n children: React.ReactNode;\n};\ntype BlockErrorBoundaryState = { hasError: boolean };\n\nclass BlockErrorBoundary extends React.Component<\n BlockErrorBoundaryProps,\n BlockErrorBoundaryState\n> {\n constructor(props: BlockErrorBoundaryProps) {\n super(props);\n this.state = { hasError: false };\n }\n\n static getDerivedStateFromError(): BlockErrorBoundaryState {\n return { hasError: true };\n }\n\n componentDidCatch(error: Error): void {\n createBlock({\n node: { text: this.props.message.replace(\"{ERROR}\", error.message) },\n parentUid: this.props.blockUid,\n });\n }\n\n render(): React.ReactNode {\n if (this.state.hasError) {\n return <div>Component Failed To Load</div>;\n }\n return this.props.children;\n }\n}\n\nexport default BlockErrorBoundary;\n"]}
1
+ {"version":3,"file":"BlockErrorBoundary.js","sourceRoot":"","sources":["../../src/components/BlockErrorBoundary.tsx"],"names":[],"mappings":";;;AAAA,0DAA0B;AAC1B,gFAAgD;AAKhD,MAAM,kBAAmB,SAAQ,eAAK,CAAC,SAGtC;IACC,YAAY,KAA8B;QACxC,KAAK,CAAC,KAAK,CAAC,CAAC;QACb,IAAI,CAAC,KAAK,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;IACnC,CAAC;IAED,MAAM,CAAC,wBAAwB;QAC7B,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IAC5B,CAAC;IAED,iBAAiB,CAAC,KAAY;QAC5B,IAAA,qBAAW,EAAC;YACV,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,EAAE,KAAK,CAAC,OAAO,CAAC,EAAE;YACpE,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ;SAC/B,CAAC,CAAC;IACL,CAAC;IAED,MAAM;QACJ,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE;YACvB,OAAO,sEAAmC,CAAC;SAC5C;QACD,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC;IAC7B,CAAC;CACF;AAED,kBAAe,kBAAkB,CAAC","sourcesContent":["import React from \"react\";\nimport createBlock from \"../writes/createBlock\";\n\ntype BlockErrorBoundaryProps = { blockUid: string; message: string };\ntype BlockErrorBoundaryState = { hasError: boolean };\n\nclass BlockErrorBoundary extends React.Component<\n BlockErrorBoundaryProps,\n BlockErrorBoundaryState\n> {\n constructor(props: BlockErrorBoundaryProps) {\n super(props);\n this.state = { hasError: false };\n }\n\n static getDerivedStateFromError(): BlockErrorBoundaryState {\n return { hasError: true };\n }\n\n componentDidCatch(error: Error): void {\n createBlock({\n node: { text: this.props.message.replace(\"{ERROR}\", error.message) },\n parentUid: this.props.blockUid,\n });\n }\n\n render(): React.ReactNode {\n if (this.state.hasError) {\n return <div>Component Failed To Load</div>;\n }\n return this.props.children;\n }\n}\n\nexport default BlockErrorBoundary;\n"]}
@@ -1,13 +1,13 @@
1
- import React from "react";
2
- declare const BlockInput: ({ value, setValue, onBlur, onConfirm, getAllBlocks, autoFocus, }: {
3
- value: string;
4
- setValue: (q: string, uid?: string) => void;
5
- onBlur?: ((v: string) => void) | undefined;
6
- onConfirm?: (() => void) | undefined;
7
- getAllBlocks?: (() => {
8
- text: string;
9
- uid: string;
10
- }[]) | undefined;
11
- autoFocus?: boolean | undefined;
12
- }) => React.ReactElement;
13
- export default BlockInput;
1
+ import React from "react";
2
+ declare const BlockInput: ({ value, setValue, onBlur, onConfirm, getAllBlocks, autoFocus, }: {
3
+ value: string;
4
+ setValue: (q: string, uid?: string) => void;
5
+ onBlur?: ((v: string) => void) | undefined;
6
+ onConfirm?: (() => void) | undefined;
7
+ getAllBlocks?: (() => {
8
+ text: string;
9
+ uid: string;
10
+ }[]) | undefined;
11
+ autoFocus?: boolean | undefined;
12
+ }) => React.ReactElement;
13
+ export default BlockInput;