roamjs-components 0.85.4 → 0.86.0-alpha.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 (250) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +29 -29
  3. package/components/AutocompleteInput.d.ts +4 -4
  4. package/components/AutocompleteInput.js.map +1 -1
  5. package/components/BlockErrorBoundary.d.ts +2 -2
  6. package/components/BlockErrorBoundary.js.map +1 -1
  7. package/components/BlockInput.d.ts +5 -5
  8. package/components/BlockInput.js.map +1 -1
  9. package/components/ComponentContainer.js.map +1 -1
  10. package/components/ConfigPage.d.ts +4 -4
  11. package/components/ConfigPage.js +1 -1
  12. package/components/ConfigPage.js.map +1 -1
  13. package/components/ConfigPanels/BlockPanel.js.map +1 -1
  14. package/components/ConfigPanels/BlocksPanel.js.map +1 -1
  15. package/components/ConfigPanels/FlagPanel.js.map +1 -1
  16. package/components/ConfigPanels/MultiChildPanel.js.map +1 -1
  17. package/components/ConfigPanels/OauthPanel.js.map +1 -1
  18. package/components/ConfigPanels/getBrandColors.d.ts +1 -1
  19. package/components/ConfigPanels/getBrandColors.js.map +1 -1
  20. package/components/ConfigPanels/types.d.ts +15 -15
  21. package/components/ConfigPanels/types.js.map +1 -1
  22. package/components/ConfigPanels/useSingleChildValue.d.ts +1 -1
  23. package/components/ConfigPanels/useSingleChildValue.js.map +1 -1
  24. package/components/CursorMenu.d.ts +1 -1
  25. package/components/CursorMenu.js.map +1 -1
  26. package/components/ExternalLogin.d.ts +3 -3
  27. package/components/ExternalLogin.js +2 -2
  28. package/components/ExternalLogin.js.map +1 -1
  29. package/components/Filter.d.ts +6 -6
  30. package/components/FormDialog.d.ts +1 -1
  31. package/components/FormDialog.js +6 -6
  32. package/components/FormDialog.js.map +1 -1
  33. package/components/Loading.d.ts +0 -1
  34. package/components/Loading.js.map +1 -1
  35. package/components/MenuItemSelect.d.ts +5 -5
  36. package/components/OauthPanel.d.ts +0 -1
  37. package/components/PageInput.d.ts +2 -2
  38. package/components/PageLink.d.ts +1 -1
  39. package/components/PageLink.js.map +1 -1
  40. package/components/ProgressDialog.d.ts +1 -2
  41. package/components/ProgressDialog.js.map +1 -1
  42. package/components/SimpleAlert.d.ts +1 -1
  43. package/components/Toast.d.ts +2 -2
  44. package/components/Toast.js.map +1 -1
  45. package/components/index.js +2 -2
  46. package/components/index.js.map +1 -1
  47. package/components.js.map +1 -1
  48. package/date/constants.js.map +1 -1
  49. package/date/index.js.map +1 -1
  50. package/date/parseNlpDate.js.map +1 -1
  51. package/date/parseRoamDateUid.js.map +1 -1
  52. package/dom/addBlockCommand.js.map +1 -1
  53. package/dom/addKeyboardTriggers.js.map +1 -1
  54. package/dom/addOldRoamJSDependency.js.map +1 -1
  55. package/dom/addRoamJSDependency.js.map +1 -1
  56. package/dom/addScriptAsDependency.js.map +1 -1
  57. package/dom/addStyle.js.map +1 -1
  58. package/dom/constants.js.map +1 -1
  59. package/dom/createBlockObserver.d.ts +6 -6
  60. package/dom/createBlockObserver.js.map +1 -1
  61. package/dom/createButtonObserver.d.ts +1 -1
  62. package/dom/createButtonObserver.js.map +1 -1
  63. package/dom/createDivObserver.js.map +1 -1
  64. package/dom/createHTMLObserver.d.ts +2 -2
  65. package/dom/createHTMLObserver.js.map +1 -1
  66. package/dom/createHashtagObserver.js.map +1 -1
  67. package/dom/createIconButton.js.map +1 -1
  68. package/dom/createObserver.js.map +1 -1
  69. package/dom/createOverlayObserver.js.map +1 -1
  70. package/dom/createPageObserver.js.map +1 -1
  71. package/dom/createPageTitleObserver.d.ts +1 -1
  72. package/dom/createPageTitleObserver.js.map +1 -1
  73. package/dom/elToTitle.js.map +1 -1
  74. package/dom/genericError.js.map +1 -1
  75. package/dom/getActiveUids.js.map +1 -1
  76. package/dom/getBlockUidFromTarget.js.map +1 -1
  77. package/dom/getCurrentPageUid.js.map +1 -1
  78. package/dom/getDomRefs.js.map +1 -1
  79. package/dom/getDropUidOffset.js.map +1 -1
  80. package/dom/getMutatedNodes.js.map +1 -1
  81. package/dom/getPageTitleByHtmlElement.js.map +1 -1
  82. package/dom/getPageTitleValueByHtmlElement.js.map +1 -1
  83. package/dom/getReferenceBlockUid.js.map +1 -1
  84. package/dom/getRoamUrl.js.map +1 -1
  85. package/dom/getRoamUrlByPage.js.map +1 -1
  86. package/dom/getUids.js.map +1 -1
  87. package/dom/getUidsFromButton.js.map +1 -1
  88. package/dom/getUidsFromId.js.map +1 -1
  89. package/dom/index.js.map +1 -1
  90. package/dom/parseRoamBlocksToHtml.js.map +1 -1
  91. package/dom/resolveRefs.js.map +1 -1
  92. package/events/index.js +2 -4
  93. package/events/index.js.map +1 -1
  94. package/events/watchOnce.js.map +1 -1
  95. package/hooks/index.js +3 -5
  96. package/hooks/index.js.map +1 -1
  97. package/hooks/useArrowKeyDown.js.map +1 -1
  98. package/hooks/useSubTree.js.map +1 -1
  99. package/marked/index.d.ts +4 -4
  100. package/marked/index.js +25 -25
  101. package/marked/index.js.map +1 -1
  102. package/package.json +114 -116
  103. package/queries/compileDatalog.js.map +1 -1
  104. package/queries/getAllBlockUids.js.map +1 -1
  105. package/queries/getAllBlockUidsAndTexts.js.map +1 -1
  106. package/queries/getAllPageNames.js.map +1 -1
  107. package/queries/getAttributeValueByBlockAndName.js.map +1 -1
  108. package/queries/getBasicTreeByParentUid.js.map +1 -1
  109. package/queries/getBlockUidAndTextIncludingText.js.map +1 -1
  110. package/queries/getBlockUidByTextOnPage.js.map +1 -1
  111. package/queries/getBlockUidsAndTextsReferencingPage.js.map +1 -1
  112. package/queries/getBlockUidsByPageTitle.js.map +1 -1
  113. package/queries/getBlockUidsReferencingBlock.js.map +1 -1
  114. package/queries/getBlockUidsReferencingPage.js.map +1 -1
  115. package/queries/getBlockUidsWithParentUid.js.map +1 -1
  116. package/queries/getChildrenLengthByPageUid.js.map +1 -1
  117. package/queries/getChildrenLengthByParentUid.js.map +1 -1
  118. package/queries/getCreateTimeByBlockUid.js.map +1 -1
  119. package/queries/getCurrentUser.js.map +1 -1
  120. package/queries/getCurrentUserDisplayName.js.map +1 -1
  121. package/queries/getCurrentUserEmail.js.map +1 -1
  122. package/queries/getCurrentUserUid.js.map +1 -1
  123. package/queries/getDisplayNameByEmail.js.map +1 -1
  124. package/queries/getDisplayNameByUid.js.map +1 -1
  125. package/queries/getEditTimeByBlockUid.js.map +1 -1
  126. package/queries/getEditedUserEmailByBlockUid.js.map +1 -1
  127. package/queries/getFirstChildTextByBlockUid.js.map +1 -1
  128. package/queries/getFirstChildUidByBlockUid.js.map +1 -1
  129. package/queries/getFullTreeByParentUid.js +13 -13
  130. package/queries/getFullTreeByParentUid.js.map +1 -1
  131. package/queries/getLinkedPageTitlesUnderUid.js.map +1 -1
  132. package/queries/getNthChildUidByBlockUid.js.map +1 -1
  133. package/queries/getOrderByBlockUid.js.map +1 -1
  134. package/queries/getPageTitleByBlockUid.js.map +1 -1
  135. package/queries/getPageTitleByPageUid.js.map +1 -1
  136. package/queries/getPageTitleReferencesByPageTitle.js.map +1 -1
  137. package/queries/getPageTitlesAndBlockUidsReferencingPage.js.map +1 -1
  138. package/queries/getPageTitlesAndUidsDirectlyReferencingPage.js.map +1 -1
  139. package/queries/getPageTitlesReferencingBlockUid.js.map +1 -1
  140. package/queries/getPageTitlesStartingWithPrefix.js.map +1 -1
  141. package/queries/getPageUidByBlockUid.js.map +1 -1
  142. package/queries/getPageUidByPageTitle.js.map +1 -1
  143. package/queries/getPageViewType.js.map +1 -1
  144. package/queries/getParentTextByBlockUid.js.map +1 -1
  145. package/queries/getParentTextByBlockUidAndTag.js.map +1 -1
  146. package/queries/getParentUidByBlockUid.js.map +1 -1
  147. package/queries/getParentUidsOfBlockUid.js.map +1 -1
  148. package/queries/getSettingsByEmail.js.map +1 -1
  149. package/queries/getShallowTreeByParentUid.js.map +1 -1
  150. package/queries/getTextByBlockUid.js.map +1 -1
  151. package/queries/index.js +2 -2
  152. package/queries/index.js.map +1 -1
  153. package/queries/isLiveBlock.js.map +1 -1
  154. package/queries/isTagOnPage.js.map +1 -1
  155. package/queries/normalizePageTitle.js.map +1 -1
  156. package/scripts/index.js +17 -7
  157. package/scripts/index.js.map +1 -1
  158. package/scripts/publishToRoamDepot.d.ts +4 -4
  159. package/scripts/publishToRoamDepot.js +1 -1
  160. package/scripts/publishToRoamDepot.js.map +1 -1
  161. package/testing/mockRoamEnvironment.js.map +1 -1
  162. package/types/index.d.ts +1 -1
  163. package/types/index.js.map +1 -1
  164. package/types/native.d.ts +64 -64
  165. package/types/native.js.map +1 -1
  166. package/types/query-builder.d.ts +5 -5
  167. package/types/query-builder.js.map +1 -1
  168. package/types/smartblocks.d.ts +5 -5
  169. package/types/smartblocks.js.map +1 -1
  170. package/util/addInputSetting.d.ts +1 -1
  171. package/util/addInputSetting.js.map +1 -1
  172. package/util/apiDelete.d.ts +1 -1
  173. package/util/apiDelete.js.map +1 -1
  174. package/util/apiGet.d.ts +1 -1
  175. package/util/apiGet.js.map +1 -1
  176. package/util/apiPost.d.ts +1 -1
  177. package/util/apiPost.js.map +1 -1
  178. package/util/apiPut.d.ts +1 -1
  179. package/util/apiPut.js.map +1 -1
  180. package/util/createOverlayRender.js.map +1 -1
  181. package/util/createTagRegex.js.map +1 -1
  182. package/util/dispatchToRegistry.js.map +1 -1
  183. package/util/env.js.map +1 -1
  184. package/util/extensionApiContext.js.map +1 -1
  185. package/util/extensionDeprecatedWarning.js +5 -5
  186. package/util/extensionDeprecatedWarning.js.map +1 -1
  187. package/util/extractRef.js.map +1 -1
  188. package/util/extractTag.js.map +1 -1
  189. package/util/focusMainWindowBlock.js.map +1 -1
  190. package/util/getAuthorizationHeader.js.map +1 -1
  191. package/util/getLocalStorageKey.js.map +1 -1
  192. package/util/getOauth.js.map +1 -1
  193. package/util/getOauthAccounts.js.map +1 -1
  194. package/util/getRenderRoot.js.map +1 -1
  195. package/util/getSettingIntFromTree.d.ts +1 -1
  196. package/util/getSettingIntFromTree.js.map +1 -1
  197. package/util/getSettingValueFromTree.d.ts +3 -3
  198. package/util/getSettingValueFromTree.js.map +1 -1
  199. package/util/getSettingValuesFromTree.d.ts +1 -1
  200. package/util/getSettingValuesFromTree.js.map +1 -1
  201. package/util/getSubTree.d.ts +3 -3
  202. package/util/getSubTree.js.map +1 -1
  203. package/util/getToken.js.map +1 -1
  204. package/util/getTokenFromTree.js.map +1 -1
  205. package/util/getWorkerClient.d.ts +1 -1
  206. package/util/getWorkerClient.js.map +1 -1
  207. package/util/handleBodyFetch.d.ts +1 -1
  208. package/util/handleBodyFetch.js.map +1 -1
  209. package/util/handleFetch.d.ts +2 -2
  210. package/util/handleFetch.js.map +1 -1
  211. package/util/handleUrlFetch.d.ts +1 -1
  212. package/util/handleUrlFetch.js.map +1 -1
  213. package/util/idToTitle.js.map +1 -1
  214. package/util/index.js +25 -27
  215. package/util/index.js.map +1 -1
  216. package/util/isControl.js.map +1 -1
  217. package/util/localStorageGet.js.map +1 -1
  218. package/util/localStorageRemove.js.map +1 -1
  219. package/util/localStorageSet.js.map +1 -1
  220. package/util/registerExperimentalMode.d.ts +1 -1
  221. package/util/registerExperimentalMode.js +2 -2
  222. package/util/registerExperimentalMode.js.map +1 -1
  223. package/util/registerSmartBlocksCommand.js.map +1 -1
  224. package/util/removeFromRegistry.js.map +1 -1
  225. package/util/renderOverlay.d.ts +5 -5
  226. package/util/renderOverlay.js.map +1 -1
  227. package/util/renderWithUnmount.js.map +1 -1
  228. package/util/runExtension.d.ts +2 -2
  229. package/util/runExtension.js +2 -2
  230. package/util/runExtension.js.map +1 -1
  231. package/util/setInputSetting.d.ts +1 -1
  232. package/util/setInputSetting.js.map +1 -1
  233. package/util/setInputSettings.d.ts +1 -1
  234. package/util/setInputSettings.js.map +1 -1
  235. package/util/stripUid.js.map +1 -1
  236. package/util/toConfigPageName.js.map +1 -1
  237. package/util/toFlexRegex.js.map +1 -1
  238. package/writes/clearBlockById.js.map +1 -1
  239. package/writes/clearBlockByUid.js.map +1 -1
  240. package/writes/createBlock.d.ts +1 -1
  241. package/writes/createBlock.js.map +1 -1
  242. package/writes/createPage.d.ts +2 -2
  243. package/writes/createPage.js.map +1 -1
  244. package/writes/deleteBlock.js.map +1 -1
  245. package/writes/index.js +9 -11
  246. package/writes/index.js.map +1 -1
  247. package/writes/openBlockInSidebar.js.map +1 -1
  248. package/writes/submitActions.js.map +1 -1
  249. package/writes/updateActiveBlock.js.map +1 -1
  250. package/writes/updateBlock.js.map +1 -1
@@ -1,19 +1,19 @@
1
1
  import React from "react";
2
2
  import type { InputTextNode } from "../../types/native";
3
3
  import type { ExternalLoginOptions } from "../ExternalLogin";
4
- export declare type OauthField = {
4
+ export type OauthField = {
5
5
  type: "oauth";
6
6
  defaultValue?: [];
7
7
  options: ExternalLoginOptions;
8
8
  };
9
- export declare type FieldPanel<T extends UnionField, U = Record<string, unknown>> = ((props: {
9
+ export type FieldPanel<T extends UnionField, U = Record<string, unknown>> = ((props: {
10
10
  order: number;
11
11
  uid?: string;
12
12
  parentUid: string;
13
13
  } & Omit<Field<T>, "Panel"> & U) => React.ReactElement) & {
14
14
  type: T["type"];
15
15
  };
16
- export declare type TextField = {
16
+ export type TextField = {
17
17
  type: "text";
18
18
  defaultValue?: string;
19
19
  options?: {
@@ -21,15 +21,15 @@ export declare type TextField = {
21
21
  onChange?: (e: React.ChangeEvent<HTMLInputElement>) => void;
22
22
  };
23
23
  };
24
- export declare type TimeField = {
24
+ export type TimeField = {
25
25
  type: "time";
26
26
  defaultValue?: Date;
27
27
  };
28
- export declare type NumberField = {
28
+ export type NumberField = {
29
29
  type: "number";
30
30
  defaultValue?: number;
31
31
  };
32
- export declare type FlagField = {
32
+ export type FlagField = {
33
33
  type: "flag";
34
34
  defaultValue?: boolean;
35
35
  disabled?: boolean;
@@ -37,33 +37,33 @@ export declare type FlagField = {
37
37
  onChange?: (f: boolean, e: React.FormEvent<HTMLInputElement>) => void;
38
38
  };
39
39
  };
40
- export declare type MultiTextField = {
40
+ export type MultiTextField = {
41
41
  type: "multitext";
42
42
  defaultValue?: string[];
43
43
  options?: {
44
44
  placeholder?: string;
45
45
  };
46
46
  };
47
- export declare type PagesField = {
47
+ export type PagesField = {
48
48
  type: "pages";
49
49
  defaultValue?: string[];
50
50
  };
51
- export declare type SelectField = {
51
+ export type SelectField = {
52
52
  type: "select";
53
53
  defaultValue?: string;
54
54
  options: {
55
55
  items: string[] | (() => string[]);
56
56
  };
57
57
  };
58
- export declare type BlockField = {
58
+ export type BlockField = {
59
59
  type: "block";
60
60
  defaultValue?: InputTextNode;
61
61
  };
62
- export declare type BlocksField = {
62
+ export type BlocksField = {
63
63
  type: "blocks";
64
64
  defaultValue?: InputTextNode[];
65
65
  };
66
- export declare type CustomField = {
66
+ export type CustomField = {
67
67
  type: "custom";
68
68
  defaultValue?: InputTextNode[];
69
69
  options: {
@@ -75,9 +75,9 @@ export declare type CustomField = {
75
75
  }>;
76
76
  };
77
77
  };
78
- export declare type ArrayField = PagesField | MultiTextField | CustomField | BlocksField;
79
- export declare type UnionField = ArrayField | TextField | TimeField | NumberField | OauthField | FlagField | SelectField | BlockField;
80
- export declare type Field<T extends UnionField> = Omit<T, "type"> & {
78
+ export type ArrayField = PagesField | MultiTextField | CustomField | BlocksField;
79
+ export type UnionField = ArrayField | TextField | TimeField | NumberField | OauthField | FlagField | SelectField | BlockField;
80
+ export type Field<T extends UnionField> = Omit<T, "type"> & {
81
81
  title: string;
82
82
  description: string;
83
83
  Panel: FieldPanel<T>;
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/components/ConfigPanels/types.ts"],"names":[],"mappings":"","sourcesContent":["import React from \"react\";\nimport type { InputTextNode } from \"../../types/native\";\nimport type { ExternalLoginOptions } from \"../ExternalLogin\";\n\nexport type OauthField = {\n type: \"oauth\";\n defaultValue?: [];\n options: ExternalLoginOptions;\n};\n\nexport type FieldPanel<T extends UnionField, U = Record<string, unknown>> = ((\n props: {\n order: number;\n uid?: string;\n parentUid: string;\n } & Omit<Field<T>, \"Panel\"> &\n U\n) => React.ReactElement) & { type: T[\"type\"] };\n\nexport type TextField = {\n type: \"text\";\n defaultValue?: string;\n options?: {\n placeholder?: string;\n onChange?: (e: React.ChangeEvent<HTMLInputElement>) => void\n };\n};\n\nexport type TimeField = {\n type: \"time\";\n defaultValue?: Date;\n};\n\nexport type NumberField = {\n type: \"number\";\n defaultValue?: number;\n};\n\nexport type FlagField = {\n type: \"flag\";\n defaultValue?: boolean;\n disabled?: boolean;\n options?: {\n onChange?: (f: boolean, e: React.FormEvent<HTMLInputElement>) => void;\n };\n};\n\nexport type MultiTextField = {\n type: \"multitext\";\n defaultValue?: string[];\n options?: {\n placeholder?: string;\n };\n};\n\nexport type PagesField = {\n type: \"pages\";\n defaultValue?: string[];\n};\n\nexport type SelectField = {\n type: \"select\";\n defaultValue?: string;\n options: {\n items: string[] | (() => string[]);\n };\n};\n\nexport type BlockField = {\n type: \"block\";\n defaultValue?: InputTextNode;\n};\n\nexport type BlocksField = {\n type: \"blocks\";\n defaultValue?: InputTextNode[];\n};\n\nexport type CustomField = {\n type: \"custom\";\n defaultValue?: InputTextNode[];\n options: {\n component: React.FC<{\n parentUid: string;\n uid: string;\n defaultValue: InputTextNode[];\n title: string;\n }>;\n };\n};\n\nexport type ArrayField =\n | PagesField\n | MultiTextField\n | CustomField\n | BlocksField;\nexport type UnionField =\n | ArrayField\n | TextField\n | TimeField\n | NumberField\n | OauthField\n | FlagField\n | SelectField\n | BlockField;\n\nexport type Field<T extends UnionField> = Omit<T, \"type\"> & {\n title: string;\n description: string;\n Panel: FieldPanel<T>;\n};\n"]}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/components/ConfigPanels/types.ts"],"names":[],"mappings":"","sourcesContent":["import React from \"react\";\r\nimport type { InputTextNode } from \"../../types/native\";\r\nimport type { ExternalLoginOptions } from \"../ExternalLogin\";\r\n\r\nexport type OauthField = {\r\n type: \"oauth\";\r\n defaultValue?: [];\r\n options: ExternalLoginOptions;\r\n};\r\n\r\nexport type FieldPanel<T extends UnionField, U = Record<string, unknown>> = ((\r\n props: {\r\n order: number;\r\n uid?: string;\r\n parentUid: string;\r\n } & Omit<Field<T>, \"Panel\"> &\r\n U\r\n) => React.ReactElement) & { type: T[\"type\"] };\r\n\r\nexport type TextField = {\r\n type: \"text\";\r\n defaultValue?: string;\r\n options?: {\r\n placeholder?: string;\r\n onChange?: (e: React.ChangeEvent<HTMLInputElement>) => void\r\n };\r\n};\r\n\r\nexport type TimeField = {\r\n type: \"time\";\r\n defaultValue?: Date;\r\n};\r\n\r\nexport type NumberField = {\r\n type: \"number\";\r\n defaultValue?: number;\r\n};\r\n\r\nexport type FlagField = {\r\n type: \"flag\";\r\n defaultValue?: boolean;\r\n disabled?: boolean;\r\n options?: {\r\n onChange?: (f: boolean, e: React.FormEvent<HTMLInputElement>) => void;\r\n };\r\n};\r\n\r\nexport type MultiTextField = {\r\n type: \"multitext\";\r\n defaultValue?: string[];\r\n options?: {\r\n placeholder?: string;\r\n };\r\n};\r\n\r\nexport type PagesField = {\r\n type: \"pages\";\r\n defaultValue?: string[];\r\n};\r\n\r\nexport type SelectField = {\r\n type: \"select\";\r\n defaultValue?: string;\r\n options: {\r\n items: string[] | (() => string[]);\r\n };\r\n};\r\n\r\nexport type BlockField = {\r\n type: \"block\";\r\n defaultValue?: InputTextNode;\r\n};\r\n\r\nexport type BlocksField = {\r\n type: \"blocks\";\r\n defaultValue?: InputTextNode[];\r\n};\r\n\r\nexport type CustomField = {\r\n type: \"custom\";\r\n defaultValue?: InputTextNode[];\r\n options: {\r\n component: React.FC<{\r\n parentUid: string;\r\n uid: string;\r\n defaultValue: InputTextNode[];\r\n title: string;\r\n }>;\r\n };\r\n};\r\n\r\nexport type ArrayField =\r\n | PagesField\r\n | MultiTextField\r\n | CustomField\r\n | BlocksField;\r\nexport type UnionField =\r\n | ArrayField\r\n | TextField\r\n | TimeField\r\n | NumberField\r\n | OauthField\r\n | FlagField\r\n | SelectField\r\n | BlockField;\r\n\r\nexport type Field<T extends UnionField> = Omit<T, \"type\"> & {\r\n title: string;\r\n description: string;\r\n Panel: FieldPanel<T>;\r\n};\r\n"]}
@@ -2,7 +2,7 @@ declare const useSingleChildValue: <T extends string | number | Date>({ defaultV
2
2
  title: string;
3
3
  parentUid: string;
4
4
  order: number;
5
- uid?: string | undefined;
5
+ uid?: string;
6
6
  defaultValue: T;
7
7
  transform: (s: string) => T;
8
8
  toStr: (t: T) => string;
@@ -1 +1 @@
1
- {"version":3,"file":"useSingleChildValue.js","sourceRoot":"","sources":["../../../src/components/ConfigPanels/useSingleChildValue.tsx"],"names":[],"mappings":";;;AAAA,iCAA8C;AAC9C,kHAAkF;AAClF,gGAAgE;AAEhE,MAAM,mBAAmB,GAAG,CAAmC,EAC7D,YAAY,EACZ,GAAG,EAAE,UAAU,EACf,KAAK,EACL,SAAS,EACT,KAAK,EACL,SAAS,EACT,KAAK,GASN,EAA0C,EAAE;IAC3C,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,GAAG,IAAA,gBAAQ,EAAC,UAAU,CAAC,CAAC;IAC3C,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,IAAA,gBAAQ,EACtC,GAAG,IAAI,IAAA,oCAA0B,EAAC,GAAG,CAAC,CACvC,CAAC;IACF,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,IAAA,gBAAQ,EAChC,CAAC,QAAQ,IAAI,SAAS,CAAC,IAAA,2BAAiB,EAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,YAAY,CACrE,CAAC;IACF,MAAM,QAAQ,GAAG,IAAA,mBAAW,EAC1B,CAAC,CAAI,EAAE,EAAE;QACP,QAAQ,CAAC,CAAC,CAAC,CAAC;QACZ,IAAI,QAAQ,EAAE;YACZ,MAAM,CAAC,YAAY,CAAC,WAAW,CAAC;gBAC9B,KAAK,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAE;aAC3C,CAAC,CAAC;SACJ;aAAM,IAAI,GAAG,EAAE;YACd,MAAM,WAAW,GAAG,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YAC3D,MAAM,CAAC,YAAY,CAAC,WAAW,CAAC;gBAC9B,KAAK,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,WAAW,EAAE;gBAC7C,QAAQ,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,YAAY,EAAE,GAAG,EAAE;aAC1C,CAAC,CAAC;YACH,WAAW,CAAC,WAAW,CAAC,CAAC;SAC1B;aAAM;YACL,MAAM,MAAM,GAAG,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YACtD,MAAM,CAAC,YAAY,CAAC,WAAW,CAAC;gBAC9B,KAAK,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE;gBACrC,QAAQ,EAAE,EAAE,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE;aAC7C,CAAC,CAAC;YACH,UAAU,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;YACjC,MAAM,WAAW,GAAG,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YAC3D,MAAM,CAAC,YAAY,CAAC,WAAW,CAAC;gBAC9B,KAAK,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,WAAW,EAAE;gBAC7C,QAAQ,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,YAAY,EAAE,MAAM,EAAE;aAC7C,CAAC,CAAC;YACH,WAAW,CAAC,WAAW,CAAC,CAAC;SAC1B;IACH,CAAC,EACD,CAAC,QAAQ,EAAE,WAAW,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,CAAC,CACxE,CAAC;IACF,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;AAC7B,CAAC,CAAC;AAEF,kBAAe,mBAAmB,CAAC","sourcesContent":["import { useCallback, useState } from \"react\";\nimport getFirstChildUidByBlockUid from \"../../queries/getFirstChildUidByBlockUid\";\nimport getTextByBlockUid from \"../../queries/getTextByBlockUid\";\n\nconst useSingleChildValue = <T extends string | number | Date>({\n defaultValue,\n uid: initialUid,\n title,\n parentUid,\n order,\n transform,\n toStr,\n}: {\n title: string;\n parentUid: string;\n order: number;\n uid?: string;\n defaultValue: T;\n transform: (s: string) => T;\n toStr: (t: T) => string;\n}): { value: T; onChange: (v: T) => void } => {\n const [uid, setUid] = useState(initialUid);\n const [valueUid, setValueUid] = useState(\n uid && getFirstChildUidByBlockUid(uid)\n );\n const [value, setValue] = useState(\n (valueUid && transform(getTextByBlockUid(valueUid))) || defaultValue\n );\n const onChange = useCallback(\n (v: T) => {\n setValue(v);\n if (valueUid) {\n window.roamAlphaAPI.updateBlock({\n block: { string: toStr(v), uid: valueUid },\n });\n } else if (uid) {\n const newValueUid = window.roamAlphaAPI.util.generateUID();\n window.roamAlphaAPI.createBlock({\n block: { string: toStr(v), uid: newValueUid },\n location: { order: 0, \"parent-uid\": uid },\n });\n setValueUid(newValueUid);\n } else {\n const newUid = window.roamAlphaAPI.util.generateUID();\n window.roamAlphaAPI.createBlock({\n block: { string: title, uid: newUid },\n location: { order, \"parent-uid\": parentUid },\n });\n setTimeout(() => setUid(newUid));\n const newValueUid = window.roamAlphaAPI.util.generateUID();\n window.roamAlphaAPI.createBlock({\n block: { string: toStr(v), uid: newValueUid },\n location: { order: 0, \"parent-uid\": newUid },\n });\n setValueUid(newValueUid);\n }\n },\n [setValue, setValueUid, title, parentUid, order, uid, valueUid, setUid]\n );\n return { value, onChange };\n};\n\nexport default useSingleChildValue;\n"]}
1
+ {"version":3,"file":"useSingleChildValue.js","sourceRoot":"","sources":["../../../src/components/ConfigPanels/useSingleChildValue.tsx"],"names":[],"mappings":";;;AAAA,iCAA8C;AAC9C,kHAAkF;AAClF,gGAAgE;AAEhE,MAAM,mBAAmB,GAAG,CAAmC,EAC7D,YAAY,EACZ,GAAG,EAAE,UAAU,EACf,KAAK,EACL,SAAS,EACT,KAAK,EACL,SAAS,EACT,KAAK,GASN,EAA0C,EAAE;IAC3C,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,GAAG,IAAA,gBAAQ,EAAC,UAAU,CAAC,CAAC;IAC3C,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,IAAA,gBAAQ,EACtC,GAAG,IAAI,IAAA,oCAA0B,EAAC,GAAG,CAAC,CACvC,CAAC;IACF,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,IAAA,gBAAQ,EAChC,CAAC,QAAQ,IAAI,SAAS,CAAC,IAAA,2BAAiB,EAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,YAAY,CACrE,CAAC;IACF,MAAM,QAAQ,GAAG,IAAA,mBAAW,EAC1B,CAAC,CAAI,EAAE,EAAE;QACP,QAAQ,CAAC,CAAC,CAAC,CAAC;QACZ,IAAI,QAAQ,EAAE,CAAC;YACb,MAAM,CAAC,YAAY,CAAC,WAAW,CAAC;gBAC9B,KAAK,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAE;aAC3C,CAAC,CAAC;QACL,CAAC;aAAM,IAAI,GAAG,EAAE,CAAC;YACf,MAAM,WAAW,GAAG,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YAC3D,MAAM,CAAC,YAAY,CAAC,WAAW,CAAC;gBAC9B,KAAK,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,WAAW,EAAE;gBAC7C,QAAQ,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,YAAY,EAAE,GAAG,EAAE;aAC1C,CAAC,CAAC;YACH,WAAW,CAAC,WAAW,CAAC,CAAC;QAC3B,CAAC;aAAM,CAAC;YACN,MAAM,MAAM,GAAG,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YACtD,MAAM,CAAC,YAAY,CAAC,WAAW,CAAC;gBAC9B,KAAK,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE;gBACrC,QAAQ,EAAE,EAAE,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE;aAC7C,CAAC,CAAC;YACH,UAAU,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;YACjC,MAAM,WAAW,GAAG,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YAC3D,MAAM,CAAC,YAAY,CAAC,WAAW,CAAC;gBAC9B,KAAK,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,WAAW,EAAE;gBAC7C,QAAQ,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,YAAY,EAAE,MAAM,EAAE;aAC7C,CAAC,CAAC;YACH,WAAW,CAAC,WAAW,CAAC,CAAC;QAC3B,CAAC;IACH,CAAC,EACD,CAAC,QAAQ,EAAE,WAAW,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,CAAC,CACxE,CAAC;IACF,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;AAC7B,CAAC,CAAC;AAEF,kBAAe,mBAAmB,CAAC","sourcesContent":["import { useCallback, useState } from \"react\";\nimport getFirstChildUidByBlockUid from \"../../queries/getFirstChildUidByBlockUid\";\nimport getTextByBlockUid from \"../../queries/getTextByBlockUid\";\n\nconst useSingleChildValue = <T extends string | number | Date>({\n defaultValue,\n uid: initialUid,\n title,\n parentUid,\n order,\n transform,\n toStr,\n}: {\n title: string;\n parentUid: string;\n order: number;\n uid?: string;\n defaultValue: T;\n transform: (s: string) => T;\n toStr: (t: T) => string;\n}): { value: T; onChange: (v: T) => void } => {\n const [uid, setUid] = useState(initialUid);\n const [valueUid, setValueUid] = useState(\n uid && getFirstChildUidByBlockUid(uid)\n );\n const [value, setValue] = useState(\n (valueUid && transform(getTextByBlockUid(valueUid))) || defaultValue\n );\n const onChange = useCallback(\n (v: T) => {\n setValue(v);\n if (valueUid) {\n window.roamAlphaAPI.updateBlock({\n block: { string: toStr(v), uid: valueUid },\n });\n } else if (uid) {\n const newValueUid = window.roamAlphaAPI.util.generateUID();\n window.roamAlphaAPI.createBlock({\n block: { string: toStr(v), uid: newValueUid },\n location: { order: 0, \"parent-uid\": uid },\n });\n setValueUid(newValueUid);\n } else {\n const newUid = window.roamAlphaAPI.util.generateUID();\n window.roamAlphaAPI.createBlock({\n block: { string: title, uid: newUid },\n location: { order, \"parent-uid\": parentUid },\n });\n setTimeout(() => setUid(newUid));\n const newValueUid = window.roamAlphaAPI.util.generateUID();\n window.roamAlphaAPI.createBlock({\n block: { string: toStr(v), uid: newValueUid },\n location: { order: 0, \"parent-uid\": newUid },\n });\n setValueUid(newValueUid);\n }\n },\n [setValue, setValueUid, title, parentUid, order, uid, valueUid, setUid]\n );\n return { value, onChange };\n};\n\nexport default useSingleChildValue;\n"]}
@@ -3,7 +3,7 @@ export declare const getCoordsFromTextarea: (t: HTMLTextAreaElement) => {
3
3
  top: number;
4
4
  left: number;
5
5
  };
6
- declare type Props<T> = {
6
+ type Props<T> = {
7
7
  textarea: HTMLTextAreaElement;
8
8
  onItemSelect: (item: {
9
9
  text: string;
@@ -1 +1 @@
1
- {"version":3,"file":"CursorMenu.js","sourceRoot":"","sources":["../../src/components/CursorMenu.tsx"],"names":[],"mappings":"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","sourcesContent":["import { Menu, MenuItem, Popover, Position } from \"@blueprintjs/core\";\nimport React, {\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport ReactDOM from \"react-dom\";\nimport fuzzy from \"fuzzy\";\nimport getUids from \"../dom/getUids\";\nimport updateBlock from \"../writes/updateBlock\";\n\n// inspired by https://github.com/zurb/tribute/blob/master/src/TributeRange.js#L446-L556\nexport const getCoordsFromTextarea = (\n t: HTMLTextAreaElement\n): { top: number; left: number } => {\n const properties = [\n \"direction\",\n \"boxSizing\",\n \"width\",\n \"height\",\n \"overflowX\",\n \"overflowY\",\n \"borderTopWidth\",\n \"borderRightWidth\",\n \"borderBottomWidth\",\n \"borderLeftWidth\",\n \"paddingTop\",\n \"paddingRight\",\n \"paddingBottom\",\n \"paddingLeft\",\n \"fontStyle\",\n \"fontVariant\",\n \"fontWeight\",\n \"fontStretch\",\n \"fontSize\",\n \"fontSizeAdjust\",\n \"lineHeight\",\n \"fontFamily\",\n \"textAlign\",\n \"textTransform\",\n \"textIndent\",\n \"textDecoration\",\n \"letterSpacing\",\n \"wordSpacing\",\n ] as const;\n\n const div = document.createElement(\"div\");\n div.id = \"input-textarea-caret-position-mirror-div\";\n document.body.appendChild(div);\n\n const style = div.style;\n const computed = getComputedStyle(t);\n\n style.whiteSpace = \"pre-wrap\";\n style.wordWrap = \"break-word\";\n\n // position off-screen\n style.position = \"absolute\";\n style.visibility = \"hidden\";\n style.overflow = \"hidden\";\n\n // transfer the element's properties to the div\n properties.forEach((prop) => {\n style[prop] = computed[prop];\n });\n\n div.textContent = t.value.substring(0, t.selectionStart);\n\n const span = document.createElement(\"span\");\n span.textContent = t.value.substring(t.selectionStart) || \".\";\n div.appendChild(span);\n\n const doc = document.documentElement;\n const windowLeft =\n (window.pageXOffset || doc.scrollLeft) - (doc.clientLeft || 0);\n const windowTop =\n (window.pageYOffset || doc.scrollTop) - (doc.clientTop || 0);\n\n const coordinates = {\n top:\n windowTop +\n span.offsetTop +\n parseInt(computed.borderTopWidth) +\n parseInt(computed.fontSize) -\n t.scrollTop -\n 9,\n left: windowLeft + span.offsetLeft + parseInt(computed.borderLeftWidth) - 1,\n };\n document.body.removeChild(div);\n return coordinates;\n};\n\ntype Props<T> = {\n textarea: HTMLTextAreaElement;\n onItemSelect: (item: { text: string; id: string } & T) => void;\n initialItems: ({ text: string; id: string } & T)[];\n};\n\nconst VALID_FILTER = /^[\\w\\d\\s_-]$/;\n\nconst CursorMenu = <T extends Record<string, string>>({\n textarea,\n onClose,\n onItemSelect,\n initialItems,\n}: {\n onClose: () => void;\n} & Props<T>): React.ReactElement => {\n const itemsById = useMemo(\n () => Object.fromEntries(initialItems.map((item) => [item.id, item])),\n [initialItems]\n );\n const menuRef = useRef<HTMLUListElement>(null);\n const [activeIndex, setActiveIndex] = useState(0);\n const [filter, setFilter] = useState(\"\");\n const onPopoverClose = useCallback(() => {\n if (menuRef.current) {\n const value = menuRef.current.getAttribute(\"data-filter\");\n const text = `${textarea.value.substring(\n 0,\n textarea.selectionStart\n )}${value}${textarea.value.substring(textarea.selectionStart)}`;\n updateBlock({ uid: getUids(textarea).blockUid, text });\n setTimeout(() => {\n textarea.setSelectionRange(\n textarea.selectionStart + text.length,\n textarea.selectionEnd + text.length\n );\n onClose();\n }, 1);\n }\n }, [onClose, textarea, menuRef]);\n const items = useMemo(\n () =>\n (filter\n ? fuzzy\n .filter(filter, initialItems, {\n extract: (s) => s.text,\n pre: \"<b>\",\n post: \"</b>\",\n })\n .map((r) => ({ ...r.original, displayName: r.string }))\n : initialItems.map((r) => ({ ...r, displayName: r.text }))\n ).slice(0, 10),\n [filter, initialItems]\n );\n const onSelect = useCallback(\n (item) => {\n if (menuRef.current) {\n onItemSelect(item);\n onClose();\n }\n },\n [menuRef, onClose, textarea, onItemSelect]\n );\n const keydownListener = useCallback(\n (e: KeyboardEvent) => {\n if (\n menuRef.current &&\n (e.key === \"ArrowRight\" || e.key === \"ArrowDown\")\n ) {\n const index = Number(menuRef.current.getAttribute(\"data-active-index\"));\n const count = menuRef.current.childElementCount;\n setActiveIndex((index + 1) % count);\n } else if (\n menuRef.current &&\n (e.key === \"ArrowLeft\" || e.key === \"ArrowUp\")\n ) {\n const index = Number(menuRef.current.getAttribute(\"data-active-index\"));\n const count = menuRef.current.childElementCount;\n setActiveIndex((index - 1 + count) % count);\n } else if (menuRef.current && e.key === \"Enter\") {\n const index = Number(menuRef.current.getAttribute(\"data-active-index\"));\n const id =\n menuRef.current.children[index]\n .querySelector(\".bp3-menu-item\")\n ?.getAttribute(\"data-id\") || \"\";\n onSelect(itemsById[id]);\n } else if (menuRef.current && VALID_FILTER.test(e.key)) {\n const value = menuRef.current.getAttribute(\"data-filter\");\n setFilter(`${value}${e.key}`);\n } else if (menuRef.current && e.key === \"Backspace\") {\n const value = menuRef.current.getAttribute(\"data-filter\");\n if (value) {\n setFilter(value.slice(0, -1));\n } else {\n onClose();\n return;\n }\n } else if (e.key !== \"Shift\") {\n onPopoverClose();\n return;\n }\n e.stopPropagation();\n e.preventDefault();\n },\n [menuRef, setActiveIndex, onClose, onPopoverClose]\n );\n useEffect(() => {\n textarea.addEventListener(\"keydown\", keydownListener);\n return () => {\n textarea.removeEventListener(\"keydown\", keydownListener);\n };\n }, [keydownListener]);\n return (\n <Popover\n onClose={onPopoverClose}\n isOpen={true}\n canEscapeKeyClose\n minimal\n target={<span />}\n position={Position.BOTTOM_LEFT}\n modifiers={{\n flip: { enabled: false },\n preventOverflow: { enabled: false },\n }}\n autoFocus={false}\n content={\n <Menu\n ulRef={menuRef}\n data-active-index={activeIndex}\n data-filter={filter}\n style={{ width: 300 }}\n >\n {items.length ? (\n items.map(({ id, displayName }, i) => {\n return (\n <MenuItem\n key={id}\n data-id={id}\n text={displayName\n .split(/<b>(.*?)<\\/b>/)\n .map((part, i) =>\n i % 2 === 1 ? (\n <b key={i}>{part}</b>\n ) : (\n <span key={i}>{part}</span>\n )\n )}\n active={i === activeIndex}\n onMouseEnter={() => setActiveIndex(i)}\n onClick={() => setTimeout(() => onSelect(itemsById[id]), 1)}\n />\n );\n })\n ) : (\n <MenuItem\n text={\n <span style={{ opacity: 0.75 }}>\n <i>None</i>\n </span>\n }\n active={false}\n disabled={true}\n />\n )}\n </Menu>\n }\n />\n );\n};\n\nexport const render = <T extends Record<string, string>>(\n props: Props<T>\n): void => {\n const parent = document.createElement(\"span\");\n const coords = getCoordsFromTextarea(props.textarea);\n parent.style.position = \"absolute\";\n parent.style.left = `${coords.left}px`;\n parent.style.top = `${coords.top}px`;\n props.textarea.parentElement?.insertBefore(parent, props.textarea);\n ReactDOM.render(\n <CursorMenu\n {...props}\n onClose={() => {\n ReactDOM.unmountComponentAtNode(parent);\n parent.remove();\n }}\n />,\n parent\n );\n};\n\nexport default CursorMenu;\n"]}
1
+ {"version":3,"file":"CursorMenu.js","sourceRoot":"","sources":["../../src/components/CursorMenu.tsx"],"names":[],"mappings":";;;;AAAA,4CAAsE;AACtE,uDAMe;AACf,kEAAiC;AACjC,0DAA0B;AAC1B,qEAAqC;AACrC,gFAAgD;AAEhD,wFAAwF;AACjF,MAAM,qBAAqB,GAAG,CACnC,CAAsB,EACS,EAAE;IACjC,MAAM,UAAU,GAAG;QACjB,WAAW;QACX,WAAW;QACX,OAAO;QACP,QAAQ;QACR,WAAW;QACX,WAAW;QACX,gBAAgB;QAChB,kBAAkB;QAClB,mBAAmB;QACnB,iBAAiB;QACjB,YAAY;QACZ,cAAc;QACd,eAAe;QACf,aAAa;QACb,WAAW;QACX,aAAa;QACb,YAAY;QACZ,aAAa;QACb,UAAU;QACV,gBAAgB;QAChB,YAAY;QACZ,YAAY;QACZ,WAAW;QACX,eAAe;QACf,YAAY;QACZ,gBAAgB;QAChB,eAAe;QACf,aAAa;KACL,CAAC;IAEX,MAAM,GAAG,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IAC1C,GAAG,CAAC,EAAE,GAAG,0CAA0C,CAAC;IACpD,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IAE/B,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC;IACxB,MAAM,QAAQ,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC;IAErC,KAAK,CAAC,UAAU,GAAG,UAAU,CAAC;IAC9B,KAAK,CAAC,QAAQ,GAAG,YAAY,CAAC;IAE9B,sBAAsB;IACtB,KAAK,CAAC,QAAQ,GAAG,UAAU,CAAC;IAC5B,KAAK,CAAC,UAAU,GAAG,QAAQ,CAAC;IAC5B,KAAK,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAE1B,+CAA+C;IAC/C,UAAU,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;QAC1B,KAAK,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC/B,CAAC,CAAC,CAAC;IAEH,GAAG,CAAC,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,cAAc,CAAC,CAAC;IAEzD,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;IAC5C,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,cAAc,CAAC,IAAI,GAAG,CAAC;IAC9D,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;IAEtB,MAAM,GAAG,GAAG,QAAQ,CAAC,eAAe,CAAC;IACrC,MAAM,UAAU,GACd,CAAC,MAAM,CAAC,WAAW,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,UAAU,IAAI,CAAC,CAAC,CAAC;IACjE,MAAM,SAAS,GACb,CAAC,MAAM,CAAC,WAAW,IAAI,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,SAAS,IAAI,CAAC,CAAC,CAAC;IAE/D,MAAM,WAAW,GAAG;QAClB,GAAG,EACD,SAAS;YACT,IAAI,CAAC,SAAS;YACd,QAAQ,CAAC,QAAQ,CAAC,cAAc,CAAC;YACjC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC;YAC3B,CAAC,CAAC,SAAS;YACX,CAAC;QACH,IAAI,EAAE,UAAU,GAAG,IAAI,CAAC,UAAU,GAAG,QAAQ,CAAC,QAAQ,CAAC,eAAe,CAAC,GAAG,CAAC;KAC5E,CAAC;IACF,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IAC/B,OAAO,WAAW,CAAC;AACrB,CAAC,CAAC;AA9EW,QAAA,qBAAqB,yBA8EhC;AAQF,MAAM,YAAY,GAAG,cAAc,CAAC;AAEpC,MAAM,UAAU,GAAG,CAAmC,EACpD,QAAQ,EACR,OAAO,EACP,YAAY,EACZ,YAAY,GAGF,EAAsB,EAAE;IAClC,MAAM,SAAS,GAAG,IAAA,eAAO,EACvB,GAAG,EAAE,CAAC,MAAM,CAAC,WAAW,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,EACrE,CAAC,YAAY,CAAC,CACf,CAAC;IACF,MAAM,OAAO,GAAG,IAAA,cAAM,EAAmB,IAAI,CAAC,CAAC;IAC/C,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,IAAA,gBAAQ,EAAC,CAAC,CAAC,CAAC;IAClD,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,IAAA,gBAAQ,EAAC,EAAE,CAAC,CAAC;IACzC,MAAM,cAAc,GAAG,IAAA,mBAAW,EAAC,GAAG,EAAE;QACtC,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;YACpB,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,aAAa,CAAC,CAAC;YAC1D,MAAM,IAAI,GAAG,GAAG,QAAQ,CAAC,KAAK,CAAC,SAAS,CACtC,CAAC,EACD,QAAQ,CAAC,cAAc,CACxB,GAAG,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;YAChE,IAAA,qBAAW,EAAC,EAAE,GAAG,EAAE,IAAA,iBAAO,EAAC,QAAQ,CAAC,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;YACvD,UAAU,CAAC,GAAG,EAAE;gBACd,QAAQ,CAAC,iBAAiB,CACxB,QAAQ,CAAC,cAAc,GAAG,IAAI,CAAC,MAAM,EACrC,QAAQ,CAAC,YAAY,GAAG,IAAI,CAAC,MAAM,CACpC,CAAC;gBACF,OAAO,EAAE,CAAC;YACZ,CAAC,EAAE,CAAC,CAAC,CAAC;QACR,CAAC;IACH,CAAC,EAAE,CAAC,OAAO,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC;IACjC,MAAM,KAAK,GAAG,IAAA,eAAO,EACnB,GAAG,EAAE,CACH,CAAC,MAAM;QACL,CAAC,CAAC,eAAK;aACF,MAAM,CAAC,MAAM,EAAE,YAAY,EAAE;YAC5B,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI;YACtB,GAAG,EAAE,KAAK;YACV,IAAI,EAAE,MAAM;SACb,CAAC;aACD,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,iCAAM,CAAC,CAAC,QAAQ,KAAE,WAAW,EAAE,CAAC,CAAC,MAAM,IAAG,CAAC;QAC3D,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,iCAAM,CAAC,KAAE,WAAW,EAAE,CAAC,CAAC,IAAI,IAAG,CAAC,CAC3D,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAChB,CAAC,MAAM,EAAE,YAAY,CAAC,CACvB,CAAC;IACF,MAAM,QAAQ,GAAG,IAAA,mBAAW,EAC1B,CAAC,IAAI,EAAE,EAAE;QACP,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;YACpB,YAAY,CAAC,IAAI,CAAC,CAAC;YACnB,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC,EACD,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,YAAY,CAAC,CAC3C,CAAC;IACF,MAAM,eAAe,GAAG,IAAA,mBAAW,EACjC,CAAC,CAAgB,EAAE,EAAE;;QACnB,IACE,OAAO,CAAC,OAAO;YACf,CAAC,CAAC,CAAC,GAAG,KAAK,YAAY,IAAI,CAAC,CAAC,GAAG,KAAK,WAAW,CAAC,EACjD,CAAC;YACD,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,mBAAmB,CAAC,CAAC,CAAC;YACxE,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,iBAAiB,CAAC;YAChD,cAAc,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC;QACtC,CAAC;aAAM,IACL,OAAO,CAAC,OAAO;YACf,CAAC,CAAC,CAAC,GAAG,KAAK,WAAW,IAAI,CAAC,CAAC,GAAG,KAAK,SAAS,CAAC,EAC9C,CAAC;YACD,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,mBAAmB,CAAC,CAAC,CAAC;YACxE,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,iBAAiB,CAAC;YAChD,cAAc,CAAC,CAAC,KAAK,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,KAAK,CAAC,CAAC;QAC9C,CAAC;aAAM,IAAI,OAAO,CAAC,OAAO,IAAI,CAAC,CAAC,GAAG,KAAK,OAAO,EAAE,CAAC;YAChD,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,mBAAmB,CAAC,CAAC,CAAC;YACxE,MAAM,EAAE,GACN,CAAA,MAAA,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC;iBAC5B,aAAa,CAAC,gBAAgB,CAAC,0CAC9B,YAAY,CAAC,SAAS,CAAC,KAAI,EAAE,CAAC;YACpC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC;QAC1B,CAAC;aAAM,IAAI,OAAO,CAAC,OAAO,IAAI,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;YACvD,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,aAAa,CAAC,CAAC;YAC1D,SAAS,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;QAChC,CAAC;aAAM,IAAI,OAAO,CAAC,OAAO,IAAI,CAAC,CAAC,GAAG,KAAK,WAAW,EAAE,CAAC;YACpD,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,aAAa,CAAC,CAAC;YAC1D,IAAI,KAAK,EAAE,CAAC;gBACV,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;YAChC,CAAC;iBAAM,CAAC;gBACN,OAAO,EAAE,CAAC;gBACV,OAAO;YACT,CAAC;QACH,CAAC;aAAM,IAAI,CAAC,CAAC,GAAG,KAAK,OAAO,EAAE,CAAC;YAC7B,cAAc,EAAE,CAAC;YACjB,OAAO;QACT,CAAC;QACD,CAAC,CAAC,eAAe,EAAE,CAAC;QACpB,CAAC,CAAC,cAAc,EAAE,CAAC;IACrB,CAAC,EACD,CAAC,OAAO,EAAE,cAAc,EAAE,OAAO,EAAE,cAAc,CAAC,CACnD,CAAC;IACF,IAAA,iBAAS,EAAC,GAAG,EAAE;QACb,QAAQ,CAAC,gBAAgB,CAAC,SAAS,EAAE,eAAe,CAAC,CAAC;QACtD,OAAO,GAAG,EAAE;YACV,QAAQ,CAAC,mBAAmB,CAAC,SAAS,EAAE,eAAe,CAAC,CAAC;QAC3D,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,eAAe,CAAC,CAAC,CAAC;IACtB,OAAO,CACL,8BAAC,cAAO,IACN,OAAO,EAAE,cAAc,EACvB,MAAM,EAAE,IAAI,EACZ,iBAAiB,QACjB,OAAO,QACP,MAAM,EAAE,2CAAQ,EAChB,QAAQ,EAAE,eAAQ,CAAC,WAAW,EAC9B,SAAS,EAAE;YACT,IAAI,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE;YACxB,eAAe,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE;SACpC,EACD,SAAS,EAAE,KAAK,EAChB,OAAO,EACL,8BAAC,WAAI,IACH,KAAK,EAAE,OAAO,uBACK,WAAW,iBACjB,MAAM,EACnB,KAAK,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,IAEpB,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CACd,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,CAAC,EAAE,EAAE;YACnC,OAAO,CACL,8BAAC,eAAQ,IACP,GAAG,EAAE,EAAE,aACE,EAAE,EACX,IAAI,EAAE,WAAW;qBACd,KAAK,CAAC,eAAe,CAAC;qBACtB,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CACf,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CACZ,qCAAG,GAAG,EAAE,CAAC,IAAG,IAAI,CAAK,CACtB,CAAC,CAAC,CAAC,CACF,wCAAM,GAAG,EAAE,CAAC,IAAG,IAAI,CAAQ,CAC5B,CACF,EACH,MAAM,EAAE,CAAC,KAAK,WAAW,EACzB,YAAY,EAAE,GAAG,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC,EACrC,OAAO,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,GAC3D,CACH,CAAC;QACJ,CAAC,CAAC,CACH,CAAC,CAAC,CAAC,CACF,8BAAC,eAAQ,IACP,IAAI,EACF,wCAAM,KAAK,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE;gBAC5B,gDAAW,CACN,EAET,MAAM,EAAE,KAAK,EACb,QAAQ,EAAE,IAAI,GACd,CACH,CACI,GAET,CACH,CAAC;AACJ,CAAC,CAAC;AAEK,MAAM,MAAM,GAAG,CACpB,KAAe,EACT,EAAE;;IACR,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;IAC9C,MAAM,MAAM,GAAG,IAAA,6BAAqB,EAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IACrD,MAAM,CAAC,KAAK,CAAC,QAAQ,GAAG,UAAU,CAAC;IACnC,MAAM,CAAC,KAAK,CAAC,IAAI,GAAG,GAAG,MAAM,CAAC,IAAI,IAAI,CAAC;IACvC,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,GAAG,MAAM,CAAC,GAAG,IAAI,CAAC;IACrC,MAAA,KAAK,CAAC,QAAQ,CAAC,aAAa,0CAAE,YAAY,CAAC,MAAM,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;IACnE,mBAAQ,CAAC,MAAM,CACb,8BAAC,UAAU,oBACL,KAAK,IACT,OAAO,EAAE,GAAG,EAAE;YACZ,mBAAQ,CAAC,sBAAsB,CAAC,MAAM,CAAC,CAAC;YACxC,MAAM,CAAC,MAAM,EAAE,CAAC;QAClB,CAAC,IACD,EACF,MAAM,CACP,CAAC;AACJ,CAAC,CAAC;AAnBW,QAAA,MAAM,UAmBjB;AAEF,kBAAe,UAAU,CAAC","sourcesContent":["import { Menu, MenuItem, Popover, Position } from \"@blueprintjs/core\";\nimport React, {\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport ReactDOM from \"react-dom\";\nimport fuzzy from \"fuzzy\";\nimport getUids from \"../dom/getUids\";\nimport updateBlock from \"../writes/updateBlock\";\n\n// inspired by https://github.com/zurb/tribute/blob/master/src/TributeRange.js#L446-L556\nexport const getCoordsFromTextarea = (\n t: HTMLTextAreaElement\n): { top: number; left: number } => {\n const properties = [\n \"direction\",\n \"boxSizing\",\n \"width\",\n \"height\",\n \"overflowX\",\n \"overflowY\",\n \"borderTopWidth\",\n \"borderRightWidth\",\n \"borderBottomWidth\",\n \"borderLeftWidth\",\n \"paddingTop\",\n \"paddingRight\",\n \"paddingBottom\",\n \"paddingLeft\",\n \"fontStyle\",\n \"fontVariant\",\n \"fontWeight\",\n \"fontStretch\",\n \"fontSize\",\n \"fontSizeAdjust\",\n \"lineHeight\",\n \"fontFamily\",\n \"textAlign\",\n \"textTransform\",\n \"textIndent\",\n \"textDecoration\",\n \"letterSpacing\",\n \"wordSpacing\",\n ] as const;\n\n const div = document.createElement(\"div\");\n div.id = \"input-textarea-caret-position-mirror-div\";\n document.body.appendChild(div);\n\n const style = div.style;\n const computed = getComputedStyle(t);\n\n style.whiteSpace = \"pre-wrap\";\n style.wordWrap = \"break-word\";\n\n // position off-screen\n style.position = \"absolute\";\n style.visibility = \"hidden\";\n style.overflow = \"hidden\";\n\n // transfer the element's properties to the div\n properties.forEach((prop) => {\n style[prop] = computed[prop];\n });\n\n div.textContent = t.value.substring(0, t.selectionStart);\n\n const span = document.createElement(\"span\");\n span.textContent = t.value.substring(t.selectionStart) || \".\";\n div.appendChild(span);\n\n const doc = document.documentElement;\n const windowLeft =\n (window.pageXOffset || doc.scrollLeft) - (doc.clientLeft || 0);\n const windowTop =\n (window.pageYOffset || doc.scrollTop) - (doc.clientTop || 0);\n\n const coordinates = {\n top:\n windowTop +\n span.offsetTop +\n parseInt(computed.borderTopWidth) +\n parseInt(computed.fontSize) -\n t.scrollTop -\n 9,\n left: windowLeft + span.offsetLeft + parseInt(computed.borderLeftWidth) - 1,\n };\n document.body.removeChild(div);\n return coordinates;\n};\n\ntype Props<T> = {\n textarea: HTMLTextAreaElement;\n onItemSelect: (item: { text: string; id: string } & T) => void;\n initialItems: ({ text: string; id: string } & T)[];\n};\n\nconst VALID_FILTER = /^[\\w\\d\\s_-]$/;\n\nconst CursorMenu = <T extends Record<string, string>>({\n textarea,\n onClose,\n onItemSelect,\n initialItems,\n}: {\n onClose: () => void;\n} & Props<T>): React.ReactElement => {\n const itemsById = useMemo(\n () => Object.fromEntries(initialItems.map((item) => [item.id, item])),\n [initialItems]\n );\n const menuRef = useRef<HTMLUListElement>(null);\n const [activeIndex, setActiveIndex] = useState(0);\n const [filter, setFilter] = useState(\"\");\n const onPopoverClose = useCallback(() => {\n if (menuRef.current) {\n const value = menuRef.current.getAttribute(\"data-filter\");\n const text = `${textarea.value.substring(\n 0,\n textarea.selectionStart\n )}${value}${textarea.value.substring(textarea.selectionStart)}`;\n updateBlock({ uid: getUids(textarea).blockUid, text });\n setTimeout(() => {\n textarea.setSelectionRange(\n textarea.selectionStart + text.length,\n textarea.selectionEnd + text.length\n );\n onClose();\n }, 1);\n }\n }, [onClose, textarea, menuRef]);\n const items = useMemo(\n () =>\n (filter\n ? fuzzy\n .filter(filter, initialItems, {\n extract: (s) => s.text,\n pre: \"<b>\",\n post: \"</b>\",\n })\n .map((r) => ({ ...r.original, displayName: r.string }))\n : initialItems.map((r) => ({ ...r, displayName: r.text }))\n ).slice(0, 10),\n [filter, initialItems]\n );\n const onSelect = useCallback(\n (item) => {\n if (menuRef.current) {\n onItemSelect(item);\n onClose();\n }\n },\n [menuRef, onClose, textarea, onItemSelect]\n );\n const keydownListener = useCallback(\n (e: KeyboardEvent) => {\n if (\n menuRef.current &&\n (e.key === \"ArrowRight\" || e.key === \"ArrowDown\")\n ) {\n const index = Number(menuRef.current.getAttribute(\"data-active-index\"));\n const count = menuRef.current.childElementCount;\n setActiveIndex((index + 1) % count);\n } else if (\n menuRef.current &&\n (e.key === \"ArrowLeft\" || e.key === \"ArrowUp\")\n ) {\n const index = Number(menuRef.current.getAttribute(\"data-active-index\"));\n const count = menuRef.current.childElementCount;\n setActiveIndex((index - 1 + count) % count);\n } else if (menuRef.current && e.key === \"Enter\") {\n const index = Number(menuRef.current.getAttribute(\"data-active-index\"));\n const id =\n menuRef.current.children[index]\n .querySelector(\".bp3-menu-item\")\n ?.getAttribute(\"data-id\") || \"\";\n onSelect(itemsById[id]);\n } else if (menuRef.current && VALID_FILTER.test(e.key)) {\n const value = menuRef.current.getAttribute(\"data-filter\");\n setFilter(`${value}${e.key}`);\n } else if (menuRef.current && e.key === \"Backspace\") {\n const value = menuRef.current.getAttribute(\"data-filter\");\n if (value) {\n setFilter(value.slice(0, -1));\n } else {\n onClose();\n return;\n }\n } else if (e.key !== \"Shift\") {\n onPopoverClose();\n return;\n }\n e.stopPropagation();\n e.preventDefault();\n },\n [menuRef, setActiveIndex, onClose, onPopoverClose]\n );\n useEffect(() => {\n textarea.addEventListener(\"keydown\", keydownListener);\n return () => {\n textarea.removeEventListener(\"keydown\", keydownListener);\n };\n }, [keydownListener]);\n return (\n <Popover\n onClose={onPopoverClose}\n isOpen={true}\n canEscapeKeyClose\n minimal\n target={<span />}\n position={Position.BOTTOM_LEFT}\n modifiers={{\n flip: { enabled: false },\n preventOverflow: { enabled: false },\n }}\n autoFocus={false}\n content={\n <Menu\n ulRef={menuRef}\n data-active-index={activeIndex}\n data-filter={filter}\n style={{ width: 300 }}\n >\n {items.length ? (\n items.map(({ id, displayName }, i) => {\n return (\n <MenuItem\n key={id}\n data-id={id}\n text={displayName\n .split(/<b>(.*?)<\\/b>/)\n .map((part, i) =>\n i % 2 === 1 ? (\n <b key={i}>{part}</b>\n ) : (\n <span key={i}>{part}</span>\n )\n )}\n active={i === activeIndex}\n onMouseEnter={() => setActiveIndex(i)}\n onClick={() => setTimeout(() => onSelect(itemsById[id]), 1)}\n />\n );\n })\n ) : (\n <MenuItem\n text={\n <span style={{ opacity: 0.75 }}>\n <i>None</i>\n </span>\n }\n active={false}\n disabled={true}\n />\n )}\n </Menu>\n }\n />\n );\n};\n\nexport const render = <T extends Record<string, string>>(\n props: Props<T>\n): void => {\n const parent = document.createElement(\"span\");\n const coords = getCoordsFromTextarea(props.textarea);\n parent.style.position = \"absolute\";\n parent.style.left = `${coords.left}px`;\n parent.style.top = `${coords.top}px`;\n props.textarea.parentElement?.insertBefore(parent, props.textarea);\n ReactDOM.render(\n <CursorMenu\n {...props}\n onClose={() => {\n ReactDOM.unmountComponentAtNode(parent);\n parent.remove();\n }}\n />,\n parent\n );\n};\n\nexport default CursorMenu;\n"]}
@@ -1,5 +1,5 @@
1
1
  import React from "react";
2
- export declare type ExternalLoginOptions = {
2
+ export type ExternalLoginOptions = {
3
3
  service: string;
4
4
  getPopoutUrl: (state: string) => Promise<string>;
5
5
  getAuthData: (d: string) => Promise<Record<string, string>>;
@@ -12,7 +12,7 @@ declare const ExternalLogin: ({ onSuccess, useLocal, parentUid, service, getPopo
12
12
  data: string;
13
13
  }) => void;
14
14
  parentUid: string;
15
- useLocal?: boolean | undefined;
16
- loggedIn?: boolean | undefined;
15
+ useLocal?: boolean;
16
+ loggedIn?: boolean;
17
17
  } & ExternalLoginOptions) => React.ReactElement;
18
18
  export default ExternalLogin;
@@ -42,7 +42,7 @@ const ExternalLogin = ({ onSuccess, useLocal, parentUid, service, getPopoutUrl,
42
42
  (_a = loginWindow === null || loginWindow === void 0 ? void 0 : loginWindow.close) === null || _a === void 0 ? void 0 : _a.call(loginWindow);
43
43
  getAuthData(data)
44
44
  .then((rr) => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
45
- var _b;
45
+ var _a;
46
46
  const labelUid = window.roamAlphaAPI.util.generateUID();
47
47
  const { label = "Default Account" } = rr, rawData = tslib_1.__rest(rr, ["label"]);
48
48
  const oauthData = JSON.stringify(rawData);
@@ -65,7 +65,7 @@ const ExternalLogin = ({ onSuccess, useLocal, parentUid, service, getPopoutUrl,
65
65
  block: { string: label, uid: labelUid },
66
66
  location: {
67
67
  "parent-uid": blockUid,
68
- order: ((_b = existingTree === null || existingTree === void 0 ? void 0 : existingTree.children) === null || _b === void 0 ? void 0 : _b.length) || 0,
68
+ order: ((_a = existingTree === null || existingTree === void 0 ? void 0 : existingTree.children) === null || _a === void 0 ? void 0 : _a.length) || 0,
69
69
  },
70
70
  });
71
71
  const valueUid = window.roamAlphaAPI.util.generateUID();
@@ -1 +1 @@
1
- {"version":3,"file":"ExternalLogin.js","sourceRoot":"","sources":["../../src/components/ExternalLogin.tsx"],"names":[],"mappings":"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","sourcesContent":["import { Button, Icon, Spinner } from \"@blueprintjs/core\";\nimport React, { useState, useCallback } from \"react\";\nimport createBlock from \"../writes/createBlock\";\nimport getBasicTreeByParentUid from \"../queries/getBasicTreeByParentUid\";\nimport idToTitle from \"../util/idToTitle\";\nimport nanoid from \"nanoid\";\nimport CryptoJS from \"crypto-js\";\nimport localStorageGet from \"../util/localStorageGet\";\nimport localStorageSet from \"../util/localStorageSet\";\nimport apiPost from \"../util/apiPost\";\n\nexport type ExternalLoginOptions = {\n service: string;\n getPopoutUrl: (state: string) => Promise<string>;\n getAuthData: (d: string) => Promise<Record<string, string>>;\n ServiceIcon: React.FunctionComponent<React.SVGAttributes<SVGElement>>;\n};\n\nconst getTargetOrigin = () => {\n try {\n // This is for debugging purposes - should probably remove\n return process.env.CUSTOM_ROAMJS_ORIGIN;\n } catch {\n return \"https://roamjs.com\";\n }\n};\n\nconst ExternalLogin = ({\n onSuccess,\n useLocal,\n parentUid,\n service,\n getPopoutUrl,\n getAuthData,\n ServiceIcon,\n loggedIn = false,\n}: {\n onSuccess: (block: { text: string; uid: string; data: string }) => void;\n parentUid: string;\n useLocal?: boolean;\n loggedIn?: boolean;\n} & ExternalLoginOptions): React.ReactElement => {\n const targetOrigin = getTargetOrigin();\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState(\"\");\n const onClick = useCallback(() => {\n const otp = nanoid().replace(/_/g, \"-\");\n const key = nanoid().replace(/_/g, \"-\");\n const state = `${service}_${otp}_${key}`;\n setLoading(true);\n getPopoutUrl(state)\n .then((url) => {\n const width = 600;\n const height = 525;\n const left = window.screenX + (window.innerWidth - width) / 2;\n const top = window.screenY + (window.innerHeight - height) / 2;\n const loginWindow = window.open(\n `${url}&state=${state}`,\n `roamjs:${service}:login`,\n `left=${left},top=${top},width=${width},height=${height},status=1`\n );\n let intervalListener = 0;\n const processAuthData = (data: string) => {\n loginWindow?.close?.();\n getAuthData(data)\n .then(async (rr) => {\n const labelUid = window.roamAlphaAPI.util.generateUID();\n const { label = \"Default Account\", ...rawData } = rr;\n const oauthData = JSON.stringify(rawData);\n const account = {\n text: label,\n uid: labelUid,\n data: oauthData,\n time: new Date().valueOf(),\n };\n\n if (useLocal) {\n const key = `oauth-${service}`;\n const accounts = JSON.parse(\n (localStorageGet(key) as string) || \"[]\"\n );\n localStorageSet(key, JSON.stringify([...accounts, account]));\n } else {\n const existingTree = getBasicTreeByParentUid(parentUid).find(\n (t) => /oauth/i.test(t.text)\n );\n const blockUid =\n existingTree?.uid ||\n (await createBlock({ node: { text: \"oauth\" }, parentUid }));\n window.roamAlphaAPI.createBlock({\n block: { string: label, uid: labelUid },\n location: {\n \"parent-uid\": blockUid,\n order: existingTree?.children?.length || 0,\n },\n });\n\n const valueUid = window.roamAlphaAPI.util.generateUID();\n const block = {\n string: oauthData,\n uid: valueUid,\n };\n window.roamAlphaAPI.createBlock({\n location: { \"parent-uid\": labelUid, order: 0 },\n block,\n });\n window.roamAlphaAPI.updateBlock({\n block: { open: false, string: \"oauth\", uid: blockUid },\n });\n }\n onSuccess(account);\n })\n .finally(() => {\n window.removeEventListener(\"message\", messageEventListener);\n window.clearTimeout(intervalListener);\n setLoading(false);\n });\n };\n const messageEventListener = (e: MessageEvent) => {\n if (e.origin === targetOrigin && loginWindow) {\n processAuthData(e.data);\n }\n };\n const authInterval = () => {\n apiPost<{ auth: string }>({\n path: \"auth\",\n data: {\n service,\n otp,\n },\n anonymous: true,\n })\n .then((r) => {\n if (r.auth) {\n const auth = CryptoJS.AES.decrypt(r.auth, key).toString(\n CryptoJS.enc.Utf8\n );\n processAuthData(auth);\n } else {\n intervalListener = window.setTimeout(authInterval, 1000);\n }\n })\n .catch((e) => {\n if (e.response?.status !== 400) {\n intervalListener = window.setTimeout(authInterval, 1000);\n }\n });\n };\n authInterval();\n window.addEventListener(\"message\", messageEventListener);\n })\n .catch((e) => {\n setError(e.message);\n setLoading(false);\n });\n }, [onSuccess, parentUid, setLoading, setError]);\n return (\n <div style={{ display: \"flex\" }}>\n <Button\n icon={\n <Icon\n icon={\n <ServiceIcon\n style={{\n width: 15,\n height: 15,\n marginLeft: 4,\n cursor: \"pointer\",\n }}\n />\n }\n />\n }\n onClick={onClick}\n disabled={loading}\n className={\"roamjs-external-login\"}\n rightIcon={loading && <Spinner size={Spinner.SIZE_SMALL} />}\n >\n {loggedIn\n ? `Add Another ${idToTitle(service)} Account`\n : `Login With ${idToTitle(service)}`}\n </Button>\n {error && (\n <div style={{ color: \"red\", whiteSpace: \"pre-line\" }}>{error}</div>\n )}\n </div>\n );\n};\n\nexport default ExternalLogin;\n"]}
1
+ {"version":3,"file":"ExternalLogin.js","sourceRoot":"","sources":["../../src/components/ExternalLogin.tsx"],"names":[],"mappings":"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","sourcesContent":["import { Button, Icon, Spinner } from \"@blueprintjs/core\";\nimport React, { useState, useCallback } from \"react\";\nimport createBlock from \"../writes/createBlock\";\nimport getBasicTreeByParentUid from \"../queries/getBasicTreeByParentUid\";\nimport idToTitle from \"../util/idToTitle\";\nimport nanoid from \"nanoid\";\nimport CryptoJS from \"crypto-js\";\nimport localStorageGet from \"../util/localStorageGet\";\nimport localStorageSet from \"../util/localStorageSet\";\nimport apiPost from \"../util/apiPost\";\n\nexport type ExternalLoginOptions = {\n service: string;\n getPopoutUrl: (state: string) => Promise<string>;\n getAuthData: (d: string) => Promise<Record<string, string>>;\n ServiceIcon: React.FunctionComponent<React.SVGAttributes<SVGElement>>;\n};\n\nconst getTargetOrigin = () => {\n try {\n // This is for debugging purposes - should probably remove\n return process.env.CUSTOM_ROAMJS_ORIGIN;\n } catch {\n return \"https://roamjs.com\";\n }\n};\n\nconst ExternalLogin = ({\n onSuccess,\n useLocal,\n parentUid,\n service,\n getPopoutUrl,\n getAuthData,\n ServiceIcon,\n loggedIn = false,\n}: {\n onSuccess: (block: { text: string; uid: string; data: string }) => void;\n parentUid: string;\n useLocal?: boolean;\n loggedIn?: boolean;\n} & ExternalLoginOptions): React.ReactElement => {\n const targetOrigin = getTargetOrigin();\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState(\"\");\n const onClick = useCallback(() => {\n const otp = nanoid().replace(/_/g, \"-\");\n const key = nanoid().replace(/_/g, \"-\");\n const state = `${service}_${otp}_${key}`;\n setLoading(true);\n getPopoutUrl(state)\n .then((url) => {\n const width = 600;\n const height = 525;\n const left = window.screenX + (window.innerWidth - width) / 2;\n const top = window.screenY + (window.innerHeight - height) / 2;\n const loginWindow = window.open(\n `${url}&state=${state}`,\n `roamjs:${service}:login`,\n `left=${left},top=${top},width=${width},height=${height},status=1`\n );\n let intervalListener = 0;\n const processAuthData = (data: string) => {\n loginWindow?.close?.();\n getAuthData(data)\n .then(async (rr) => {\n const labelUid = window.roamAlphaAPI.util.generateUID();\n const { label = \"Default Account\", ...rawData } = rr;\n const oauthData = JSON.stringify(rawData);\n const account = {\n text: label,\n uid: labelUid,\n data: oauthData,\n time: new Date().valueOf(),\n };\n\n if (useLocal) {\n const key = `oauth-${service}`;\n const accounts = JSON.parse(\n (localStorageGet(key) as string) || \"[]\"\n );\n localStorageSet(key, JSON.stringify([...accounts, account]));\n } else {\n const existingTree = getBasicTreeByParentUid(parentUid).find(\n (t) => /oauth/i.test(t.text)\n );\n const blockUid =\n existingTree?.uid ||\n (await createBlock({ node: { text: \"oauth\" }, parentUid }));\n window.roamAlphaAPI.createBlock({\n block: { string: label, uid: labelUid },\n location: {\n \"parent-uid\": blockUid,\n order: existingTree?.children?.length || 0,\n },\n });\n\n const valueUid = window.roamAlphaAPI.util.generateUID();\n const block = {\n string: oauthData,\n uid: valueUid,\n };\n window.roamAlphaAPI.createBlock({\n location: { \"parent-uid\": labelUid, order: 0 },\n block,\n });\n window.roamAlphaAPI.updateBlock({\n block: { open: false, string: \"oauth\", uid: blockUid },\n });\n }\n onSuccess(account);\n })\n .finally(() => {\n window.removeEventListener(\"message\", messageEventListener);\n window.clearTimeout(intervalListener);\n setLoading(false);\n });\n };\n const messageEventListener = (e: MessageEvent) => {\n if (e.origin === targetOrigin && loginWindow) {\n processAuthData(e.data);\n }\n };\n const authInterval = () => {\n apiPost<{ auth: string }>({\n path: \"auth\",\n data: {\n service,\n otp,\n },\n anonymous: true,\n })\n .then((r) => {\n if (r.auth) {\n const auth = CryptoJS.AES.decrypt(r.auth, key).toString(\n CryptoJS.enc.Utf8\n );\n processAuthData(auth);\n } else {\n intervalListener = window.setTimeout(authInterval, 1000);\n }\n })\n .catch((e) => {\n if (e.response?.status !== 400) {\n intervalListener = window.setTimeout(authInterval, 1000);\n }\n });\n };\n authInterval();\n window.addEventListener(\"message\", messageEventListener);\n })\n .catch((e) => {\n setError(e.message);\n setLoading(false);\n });\n }, [onSuccess, parentUid, setLoading, setError]);\n return (\n <div style={{ display: \"flex\" }}>\n <Button\n icon={\n <Icon\n icon={\n <ServiceIcon\n style={{\n width: 15,\n height: 15,\n marginLeft: 4,\n cursor: \"pointer\",\n }}\n />\n }\n />\n }\n onClick={onClick}\n disabled={loading}\n className={\"roamjs-external-login\"}\n rightIcon={loading && <Spinner size={Spinner.SIZE_SMALL} />}\n >\n {loggedIn\n ? `Add Another ${idToTitle(service)} Account`\n : `Login With ${idToTitle(service)}`}\n </Button>\n {error && (\n <div style={{ color: \"red\", whiteSpace: \"pre-line\" }}>{error}</div>\n )}\n </div>\n );\n};\n\nexport default ExternalLogin;\n"]}
@@ -1,15 +1,15 @@
1
1
  import React from "react";
2
- export declare type Filters = {
2
+ export type Filters = {
3
3
  includes: Record<string, Set<string>>;
4
4
  excludes: Record<string, Set<string>>;
5
5
  };
6
6
  declare const Filter: ({ data, initialValue, onChange, renderButtonText, includeHelpMessage, excludeHelpMessage, small, }: {
7
- initialValue?: Filters | undefined;
7
+ initialValue?: Filters;
8
8
  data: Record<string, string[]>;
9
9
  onChange: (filters: Filters) => void;
10
- renderButtonText?: ((s: string, key: string) => React.ReactNode) | undefined;
11
- includeHelpMessage?: string | undefined;
12
- excludeHelpMessage?: string | undefined;
13
- small?: boolean | undefined;
10
+ renderButtonText?: (s: string, key: string) => React.ReactNode;
11
+ includeHelpMessage?: string;
12
+ excludeHelpMessage?: string;
13
+ small?: boolean;
14
14
  }) => JSX.Element;
15
15
  export default Filter;
@@ -1,7 +1,7 @@
1
1
  import React from "react";
2
2
  import type { RoamOverlayProps } from "../util/renderOverlay";
3
3
  import { InputTextNode } from "../types";
4
- declare type Props<T> = {
4
+ type Props<T> = {
5
5
  title?: React.ReactNode;
6
6
  content?: React.ReactNode;
7
7
  onSubmit?: (data: T) => Promise<unknown> | unknown;
@@ -71,12 +71,12 @@ const EmbedInput = ({ defaultValue, onChange, autoFocus, }) => {
71
71
  // onChange
72
72
  ]);
73
73
  return (react_1.default.createElement(react_1.default.Fragment, null,
74
- react_1.default.createElement("style", null, `div.rm-autocomplete__results {
75
- z-index: 1000;
76
- }
77
- .roamjs-form-embed div div:has(> h1.rm-title-display),
78
- .roamjs-form-embed .rm-api-render--page > div:has(.rm-reference-main) {
79
- display: none;
74
+ react_1.default.createElement("style", null, `div.rm-autocomplete__results {
75
+ z-index: 1000;
76
+ }
77
+ .roamjs-form-embed div div:has(> h1.rm-title-display),
78
+ .roamjs-form-embed .rm-api-render--page > div:has(.rm-reference-main) {
79
+ display: none;
80
80
  }`),
81
81
  react_1.default.createElement("div", { ref: elRef, className: "rounded-md bg-white font-normal mt-1 bp3-input h-32 overflow-scroll roamjs-form-embed py-2 px-4", tabIndex: 0, onFocus: realFocus, onKeyDown: (e) => {
82
82
  var _a, _b, _c, _d;
@@ -1 +1 @@
1
- {"version":3,"file":"FormDialog.js","sourceRoot":"","sources":["../../src/components/FormDialog.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n Button,\n Checkbox,\n Classes,\n Dialog,\n InputGroup,\n Intent,\n Label,\n NumericInput,\n Spinner,\n SpinnerSize,\n} from \"@blueprintjs/core\";\nimport React, {\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport getTextByBlockUid from \"../queries/getTextByBlockUid\";\nimport createOverlayRender from \"../util/createOverlayRender\";\nimport type { RoamOverlayProps } from \"../util/renderOverlay\";\nimport BlockInput from \"./BlockInput\";\nimport MenuItemSelect from \"./MenuItemSelect\";\nimport PageInput from \"./PageInput\";\nimport nanoid from \"nanoid\";\nimport { getUids } from \"../dom\";\nimport { InputTextNode, PullBlock } from \"../types\";\nimport getFullTreeByParentUid from \"../queries/getFullTreeByParentUid\";\nimport createPage from \"../writes/createPage\";\nimport { createBlock } from \"../writes\";\nimport AutocompleteInput from \"./AutocompleteInput\";\n\ntype Props<T> = {\n title?: React.ReactNode;\n content?: React.ReactNode;\n onSubmit?: (data: T) => Promise<unknown> | unknown;\n submitButtonText?: string;\n cancelButtonText?: string;\n enforceFocus?: boolean;\n className?: string;\n style?: React.CSSProperties;\n fields?: Record<\n string,\n (\n | {\n defaultValue?: string;\n type: \"text\";\n }\n | {\n defaultValue?: string;\n type: \"info\";\n }\n | {\n defaultValue?: number;\n type: \"number\";\n }\n | {\n defaultValue?: string;\n type: \"select\";\n options?: string[];\n }\n | {\n defaultValue?: string;\n type: \"page\";\n }\n | {\n defaultValue?: string;\n type: \"block\";\n }\n | {\n defaultValue?: string;\n type: \"autocomplete\";\n options?: string[];\n }\n | {\n defaultValue?: boolean;\n type: \"flag\";\n }\n | {\n defaultValue?: InputTextNode[];\n type: \"embed\";\n }\n ) & { label?: string; conditional?: string; conditionalValues?: string[] }\n >;\n};\n\nconst EmbedInput = ({\n defaultValue,\n onChange,\n autoFocus,\n}: {\n defaultValue?: InputTextNode[];\n onChange: (s: () => InputTextNode[]) => void;\n autoFocus: boolean;\n}) => {\n const defaultEmbed = useMemo(() => defaultValue || [], [defaultValue]);\n const elRef = useRef<HTMLDivElement>(null);\n const parentUid = useMemo(window.roamAlphaAPI.util.generateUID, []);\n const realFocus = useCallback(() => {\n if (!elRef.current) return;\n if (\n elRef.current.contains(document.activeElement) &&\n elRef.current !== document.activeElement\n )\n return;\n const block = elRef.current.querySelector<\n HTMLDivElement | HTMLTextAreaElement\n >(`div[id*=\"block-input\"],textarea[id*=\"block-input\"]`);\n if (block?.id === \"block-input-ghost\")\n createBlock({ parentUid, node: { text: \"\" } }).then(() =>\n setTimeout(realFocus, 500)\n );\n const { windowId, blockUid } = getUids(block);\n if (blockUid)\n window.roamAlphaAPI.ui.setBlockFocusAndSelection({\n location: {\n \"block-uid\": blockUid,\n \"window-id\": windowId,\n },\n });\n }, [elRef]);\n useEffect(() => {\n const el = elRef.current;\n if (el) {\n createPage({\n uid: parentUid,\n title: nanoid(),\n tree: defaultEmbed,\n }).then(() => {\n window.roamAlphaAPI.ui.components.renderPage({\n uid: parentUid,\n el,\n \"hide-mentions?\": true,\n });\n if (autoFocus) realFocus();\n });\n // In the future, we can return the whole tree of data from `parentUid`\n onChange(() => getFullTreeByParentUid(parentUid).children);\n return () => {\n window.roamAlphaAPI.deletePage({ page: { uid: parentUid } });\n };\n }\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n return () => {};\n }, [\n elRef,\n defaultEmbed,\n autoFocus,\n realFocus,\n parentUid,\n // Triggering infinite rerender\n // onChange\n ]);\n return (\n <>\n <style>{`div.rm-autocomplete__results {\n z-index: 1000;\n}\n.roamjs-form-embed div div:has(> h1.rm-title-display),\n.roamjs-form-embed .rm-api-render--page > div:has(.rm-reference-main) {\n display: none;\n}`}</style>\n <div\n ref={elRef}\n className=\"rounded-md bg-white font-normal mt-1 bp3-input h-32 overflow-scroll roamjs-form-embed py-2 px-4\"\n tabIndex={0}\n onFocus={realFocus}\n onKeyDown={(e) => {\n if (e.key !== \"Tab\") return;\n const { blockUid } = getUids(e.target as HTMLTextAreaElement);\n if (!blockUid) return;\n const { [\":block/order\"]: order, [\":block/parents\"]: parents } =\n window.roamAlphaAPI.pull(\n \"[:block/order {:block/parents [:block/uid]}]\",\n [\":block/uid\", blockUid]\n ) as PullBlock;\n if (\n !(\n order === 0 &&\n parents?.length === 1 &&\n parents[0][\":block/uid\"] === parentUid\n )\n )\n return;\n e.stopPropagation();\n e.preventDefault();\n const label = elRef.current?.parentElement;\n if (!label) return;\n const nextElToFocus = e.shiftKey\n ? label.previousElementSibling ||\n label\n .closest(\".bp3-dialog\")\n ?.querySelector(\".bp3-dialog-footer .bp3-button.roamjs-cancel\")\n : label.nextElementSibling ||\n label\n .closest(\".bp3-dialog\")\n ?.querySelector(\n \".bp3-dialog-footer .bp3-button.bp3-intent-primary\"\n );\n if (!nextElToFocus) return;\n const focusQuery = \"input,button,div.roamjs-form-embed\";\n if (nextElToFocus.matches(focusQuery))\n (nextElToFocus as HTMLElement).focus();\n else nextElToFocus.querySelector<HTMLElement>(focusQuery)?.focus();\n }}\n />\n </>\n );\n};\n\nconst FormDialog = <T extends Record<string, unknown>>({\n title,\n content,\n isOpen,\n onClose,\n onSubmit = () => Promise.resolve(),\n fields = {},\n submitButtonText = \"Submit\",\n cancelButtonText = \"Cancel\",\n enforceFocus,\n className,\n style,\n}: RoamOverlayProps<Props<T>>) => {\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState(\"\");\n const [data, setData] = useState<T>(\n () =>\n Object.fromEntries(\n Object.entries(fields)\n .filter(([, meta]) => typeof meta.defaultValue !== \"undefined\")\n .map(([key, meta]) => [key, meta.defaultValue])\n ) as T\n );\n const onClick = useCallback(\n () =>\n Promise.resolve(\n onSubmit(\n Object.fromEntries(\n Object.entries(data)\n .filter(([key]) => {\n const { conditional } = fields[key];\n return !conditional || !!data[conditional];\n })\n .map(\n ([key, value]) =>\n [key, typeof value === \"function\" ? value() : value] as const\n )\n ) as T\n )\n )\n .then(onClose)\n .catch((e) => {\n setError(e.message);\n setLoading(false);\n }),\n [data, onClose, setError, setLoading]\n );\n\n const getFieldAttributes = (\n name: string,\n meta: { type: string; label?: string }\n ) => {\n const attributes: Record<string, string> = {\n \"data-field-name\": name,\n \"data-field-type\": meta.type,\n };\n if (meta.label) attributes[\"data-field-label\"] = meta.label;\n return attributes;\n };\n\n return (\n <Dialog\n isOpen={isOpen}\n onClose={onClose}\n title={title}\n enforceFocus={!title || enforceFocus}\n autoFocus={!title}\n className={className}\n style={style}\n >\n <div className={Classes.DIALOG_BODY}>\n {content}\n {Object.entries(fields).map(([name, meta], index) => {\n const fieldClassName = `roamjs-form-field`;\n const setValue = useCallback(\n (value: unknown) => setData((d) => ({ ...d, [name]: value })),\n [setData, name]\n );\n if (meta.conditional && !data[meta.conditional]) {\n return <div key={name} />;\n } else if (\n meta.conditional &&\n meta.conditionalValues &&\n typeof data[meta.conditional] === \"string\" &&\n !meta.conditionalValues.includes(data[meta.conditional] as string)\n ) {\n return <div key={name} />;\n }\n if (meta.type === \"text\") {\n return (\n <Label\n key={name}\n className={fieldClassName}\n {...getFieldAttributes(name, meta)}\n >\n {meta.label}\n <InputGroup\n value={data[name] as string}\n onChange={(e) => setValue(e.target.value)}\n autoFocus={index === 0}\n />\n </Label>\n );\n } else if (meta.type === \"number\") {\n return (\n <Label\n key={name}\n className={fieldClassName}\n {...getFieldAttributes(name, meta)}\n >\n {meta.label}\n <NumericInput\n value={data[name] as string}\n onValueChange={(v) => setValue(v)}\n autoFocus={index === 0}\n />\n </Label>\n );\n } else if (meta.type === \"info\") {\n return (\n <div\n key={name}\n className={`${fieldClassName} mb-4`}\n {...getFieldAttributes(name, meta)}\n >\n {meta.label}\n </div>\n );\n } else if (meta.type === \"flag\") {\n return (\n <Checkbox\n label={meta.label}\n value={data[name] as string}\n onChange={(e) =>\n setValue((e.target as HTMLInputElement).checked)\n }\n key={name}\n autoFocus={index === 0}\n className={fieldClassName}\n {...getFieldAttributes(name, meta)}\n />\n );\n } else if (meta.type === \"select\") {\n return (\n <Label\n key={name}\n className={fieldClassName}\n {...getFieldAttributes(name, meta)}\n >\n {meta.label}\n <MenuItemSelect\n activeItem={data[name] as string}\n onItemSelect={setValue}\n items={meta.options || []}\n ButtonProps={{\n autoFocus: index === 0,\n }}\n />\n </Label>\n );\n } else if (meta.type === \"page\") {\n return (\n <Label\n key={name}\n className={fieldClassName}\n {...getFieldAttributes(name, meta)}\n >\n {meta.label}\n <PageInput\n key={name}\n value={data[name] as string}\n setValue={setValue}\n autoFocus={index === 0}\n />\n </Label>\n );\n } else if (meta.type === \"block\") {\n return (\n <Label\n key={name}\n className={fieldClassName}\n {...getFieldAttributes(name, meta)}\n >\n {meta.label}\n <BlockInput\n value={\n getTextByBlockUid(data[name] as string) ||\n (data[name] as string)\n }\n setValue={(text, uid) =>\n setValue(\n window.roamAlphaAPI.pull(\"[:db/id]\", [\n \":block/uid\",\n uid || \"\",\n ])\n ? uid\n : text\n )\n }\n autoFocus={index === 0}\n />\n </Label>\n );\n } else if (meta.type === \"autocomplete\") {\n return (\n <Label\n key={name}\n className={fieldClassName}\n {...getFieldAttributes(name, meta)}\n >\n {meta.label}\n <AutocompleteInput\n value={data[name] as string}\n options={meta.options}\n setValue={setValue}\n autoFocus={index === 0}\n />\n </Label>\n );\n } else if (meta.type === \"embed\") {\n return (\n <Label\n key={name}\n className={fieldClassName}\n {...getFieldAttributes(name, meta)}\n >\n {meta.label}\n <EmbedInput\n defaultValue={meta.defaultValue}\n onChange={setValue}\n autoFocus={index === 0}\n />\n </Label>\n );\n } else {\n return <div key={name} />;\n }\n })}\n </div>\n <div className={Classes.DIALOG_FOOTER}>\n <div\n className={`${Classes.DIALOG_FOOTER_ACTIONS} items-center flex-row-reverse`}\n >\n <Button\n text={submitButtonText}\n intent={Intent.PRIMARY}\n onClick={onClick}\n disabled={loading}\n className=\"flex-shrink-0\"\n />\n <Button\n text={cancelButtonText}\n onClick={onClose}\n disabled={loading}\n className=\"flex-shrink-0 roamjs-cancel\"\n />\n <span className=\"text-red-700 flex-grow\">{error}</span>\n {loading && <Spinner size={SpinnerSize.SMALL} />}\n </div>\n </div>\n </Dialog>\n );\n};\n\nexport const render = createOverlayRender<Props<Record<string, unknown>>>(\n \"form-dialog\",\n FormDialog\n);\n\nexport const prompt = ({\n defaultAnswer,\n question,\n title,\n}: {\n title: string;\n question: string;\n defaultAnswer: string;\n}) =>\n new Promise<string>((resolve) =>\n render({\n onSubmit: (data) => resolve(data.value as string),\n fields: { value: { type: \"text\", defaultValue: defaultAnswer } },\n title,\n content: (\n <div className=\"whitespace-pre-wrap font-semibold text-lg mb-4\">\n {question}\n </div>\n ),\n })\n );\n\nexport default FormDialog;\n"]}
1
+ {"version":3,"file":"FormDialog.js","sourceRoot":"","sources":["../../src/components/FormDialog.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\r\n Button,\r\n Checkbox,\r\n Classes,\r\n Dialog,\r\n InputGroup,\r\n Intent,\r\n Label,\r\n NumericInput,\r\n Spinner,\r\n SpinnerSize,\r\n} from \"@blueprintjs/core\";\r\nimport React, {\r\n useCallback,\r\n useEffect,\r\n useMemo,\r\n useRef,\r\n useState,\r\n} from \"react\";\r\nimport getTextByBlockUid from \"../queries/getTextByBlockUid\";\r\nimport createOverlayRender from \"../util/createOverlayRender\";\r\nimport type { RoamOverlayProps } from \"../util/renderOverlay\";\r\nimport BlockInput from \"./BlockInput\";\r\nimport MenuItemSelect from \"./MenuItemSelect\";\r\nimport PageInput from \"./PageInput\";\r\nimport nanoid from \"nanoid\";\r\nimport { getUids } from \"../dom\";\r\nimport { InputTextNode, PullBlock } from \"../types\";\r\nimport getFullTreeByParentUid from \"../queries/getFullTreeByParentUid\";\r\nimport createPage from \"../writes/createPage\";\r\nimport { createBlock } from \"../writes\";\r\nimport AutocompleteInput from \"./AutocompleteInput\";\r\n\r\ntype Props<T> = {\r\n title?: React.ReactNode;\r\n content?: React.ReactNode;\r\n onSubmit?: (data: T) => Promise<unknown> | unknown;\r\n submitButtonText?: string;\r\n cancelButtonText?: string;\r\n enforceFocus?: boolean;\r\n className?: string;\r\n style?: React.CSSProperties;\r\n fields?: Record<\r\n string,\r\n (\r\n | {\r\n defaultValue?: string;\r\n type: \"text\";\r\n }\r\n | {\r\n defaultValue?: string;\r\n type: \"info\";\r\n }\r\n | {\r\n defaultValue?: number;\r\n type: \"number\";\r\n }\r\n | {\r\n defaultValue?: string;\r\n type: \"select\";\r\n options?: string[];\r\n }\r\n | {\r\n defaultValue?: string;\r\n type: \"page\";\r\n }\r\n | {\r\n defaultValue?: string;\r\n type: \"block\";\r\n }\r\n | {\r\n defaultValue?: string;\r\n type: \"autocomplete\";\r\n options?: string[];\r\n }\r\n | {\r\n defaultValue?: boolean;\r\n type: \"flag\";\r\n }\r\n | {\r\n defaultValue?: InputTextNode[];\r\n type: \"embed\";\r\n }\r\n ) & { label?: string; conditional?: string; conditionalValues?: string[] }\r\n >;\r\n};\r\n\r\nconst EmbedInput = ({\r\n defaultValue,\r\n onChange,\r\n autoFocus,\r\n}: {\r\n defaultValue?: InputTextNode[];\r\n onChange: (s: () => InputTextNode[]) => void;\r\n autoFocus: boolean;\r\n}) => {\r\n const defaultEmbed = useMemo(() => defaultValue || [], [defaultValue]);\r\n const elRef = useRef<HTMLDivElement>(null);\r\n const parentUid = useMemo(window.roamAlphaAPI.util.generateUID, []);\r\n const realFocus = useCallback(() => {\r\n if (!elRef.current) return;\r\n if (\r\n elRef.current.contains(document.activeElement) &&\r\n elRef.current !== document.activeElement\r\n )\r\n return;\r\n const block = elRef.current.querySelector<\r\n HTMLDivElement | HTMLTextAreaElement\r\n >(`div[id*=\"block-input\"],textarea[id*=\"block-input\"]`);\r\n if (block?.id === \"block-input-ghost\")\r\n createBlock({ parentUid, node: { text: \"\" } }).then(() =>\r\n setTimeout(realFocus, 500)\r\n );\r\n const { windowId, blockUid } = getUids(block);\r\n if (blockUid)\r\n window.roamAlphaAPI.ui.setBlockFocusAndSelection({\r\n location: {\r\n \"block-uid\": blockUid,\r\n \"window-id\": windowId,\r\n },\r\n });\r\n }, [elRef]);\r\n useEffect(() => {\r\n const el = elRef.current;\r\n if (el) {\r\n createPage({\r\n uid: parentUid,\r\n title: nanoid(),\r\n tree: defaultEmbed,\r\n }).then(() => {\r\n window.roamAlphaAPI.ui.components.renderPage({\r\n uid: parentUid,\r\n el,\r\n \"hide-mentions?\": true,\r\n });\r\n if (autoFocus) realFocus();\r\n });\r\n // In the future, we can return the whole tree of data from `parentUid`\r\n onChange(() => getFullTreeByParentUid(parentUid).children);\r\n return () => {\r\n window.roamAlphaAPI.deletePage({ page: { uid: parentUid } });\r\n };\r\n }\r\n // eslint-disable-next-line @typescript-eslint/no-empty-function\r\n return () => {};\r\n }, [\r\n elRef,\r\n defaultEmbed,\r\n autoFocus,\r\n realFocus,\r\n parentUid,\r\n // Triggering infinite rerender\r\n // onChange\r\n ]);\r\n return (\r\n <>\r\n <style>{`div.rm-autocomplete__results {\r\n z-index: 1000;\r\n}\r\n.roamjs-form-embed div div:has(> h1.rm-title-display),\r\n.roamjs-form-embed .rm-api-render--page > div:has(.rm-reference-main) {\r\n display: none;\r\n}`}</style>\r\n <div\r\n ref={elRef}\r\n className=\"rounded-md bg-white font-normal mt-1 bp3-input h-32 overflow-scroll roamjs-form-embed py-2 px-4\"\r\n tabIndex={0}\r\n onFocus={realFocus}\r\n onKeyDown={(e) => {\r\n if (e.key !== \"Tab\") return;\r\n const { blockUid } = getUids(e.target as HTMLTextAreaElement);\r\n if (!blockUid) return;\r\n const { [\":block/order\"]: order, [\":block/parents\"]: parents } =\r\n window.roamAlphaAPI.pull(\r\n \"[:block/order {:block/parents [:block/uid]}]\",\r\n [\":block/uid\", blockUid]\r\n ) as PullBlock;\r\n if (\r\n !(\r\n order === 0 &&\r\n parents?.length === 1 &&\r\n parents[0][\":block/uid\"] === parentUid\r\n )\r\n )\r\n return;\r\n e.stopPropagation();\r\n e.preventDefault();\r\n const label = elRef.current?.parentElement;\r\n if (!label) return;\r\n const nextElToFocus = e.shiftKey\r\n ? label.previousElementSibling ||\r\n label\r\n .closest(\".bp3-dialog\")\r\n ?.querySelector(\".bp3-dialog-footer .bp3-button.roamjs-cancel\")\r\n : label.nextElementSibling ||\r\n label\r\n .closest(\".bp3-dialog\")\r\n ?.querySelector(\r\n \".bp3-dialog-footer .bp3-button.bp3-intent-primary\"\r\n );\r\n if (!nextElToFocus) return;\r\n const focusQuery = \"input,button,div.roamjs-form-embed\";\r\n if (nextElToFocus.matches(focusQuery))\r\n (nextElToFocus as HTMLElement).focus();\r\n else nextElToFocus.querySelector<HTMLElement>(focusQuery)?.focus();\r\n }}\r\n />\r\n </>\r\n );\r\n};\r\n\r\nconst FormDialog = <T extends Record<string, unknown>>({\r\n title,\r\n content,\r\n isOpen,\r\n onClose,\r\n onSubmit = () => Promise.resolve(),\r\n fields = {},\r\n submitButtonText = \"Submit\",\r\n cancelButtonText = \"Cancel\",\r\n enforceFocus,\r\n className,\r\n style,\r\n}: RoamOverlayProps<Props<T>>) => {\r\n const [loading, setLoading] = useState(false);\r\n const [error, setError] = useState(\"\");\r\n const [data, setData] = useState<T>(\r\n () =>\r\n Object.fromEntries(\r\n Object.entries(fields)\r\n .filter(([, meta]) => typeof meta.defaultValue !== \"undefined\")\r\n .map(([key, meta]) => [key, meta.defaultValue])\r\n ) as T\r\n );\r\n const onClick = useCallback(\r\n () =>\r\n Promise.resolve(\r\n onSubmit(\r\n Object.fromEntries(\r\n Object.entries(data)\r\n .filter(([key]) => {\r\n const { conditional } = fields[key];\r\n return !conditional || !!data[conditional];\r\n })\r\n .map(\r\n ([key, value]) =>\r\n [key, typeof value === \"function\" ? value() : value] as const\r\n )\r\n ) as T\r\n )\r\n )\r\n .then(onClose)\r\n .catch((e) => {\r\n setError(e.message);\r\n setLoading(false);\r\n }),\r\n [data, onClose, setError, setLoading]\r\n );\r\n\r\n const getFieldAttributes = (\r\n name: string,\r\n meta: { type: string; label?: string }\r\n ) => {\r\n const attributes: Record<string, string> = {\r\n \"data-field-name\": name,\r\n \"data-field-type\": meta.type,\r\n };\r\n if (meta.label) attributes[\"data-field-label\"] = meta.label;\r\n return attributes;\r\n };\r\n\r\n return (\r\n <Dialog\r\n isOpen={isOpen}\r\n onClose={onClose}\r\n title={title}\r\n enforceFocus={!title || enforceFocus}\r\n autoFocus={!title}\r\n className={className}\r\n style={style}\r\n >\r\n <div className={Classes.DIALOG_BODY}>\r\n {content}\r\n {Object.entries(fields).map(([name, meta], index) => {\r\n const fieldClassName = `roamjs-form-field`;\r\n const setValue = useCallback(\r\n (value: unknown) => setData((d) => ({ ...d, [name]: value })),\r\n [setData, name]\r\n );\r\n if (meta.conditional && !data[meta.conditional]) {\r\n return <div key={name} />;\r\n } else if (\r\n meta.conditional &&\r\n meta.conditionalValues &&\r\n typeof data[meta.conditional] === \"string\" &&\r\n !meta.conditionalValues.includes(data[meta.conditional] as string)\r\n ) {\r\n return <div key={name} />;\r\n }\r\n if (meta.type === \"text\") {\r\n return (\r\n <Label\r\n key={name}\r\n className={fieldClassName}\r\n {...getFieldAttributes(name, meta)}\r\n >\r\n {meta.label}\r\n <InputGroup\r\n value={data[name] as string}\r\n onChange={(e) => setValue(e.target.value)}\r\n autoFocus={index === 0}\r\n />\r\n </Label>\r\n );\r\n } else if (meta.type === \"number\") {\r\n return (\r\n <Label\r\n key={name}\r\n className={fieldClassName}\r\n {...getFieldAttributes(name, meta)}\r\n >\r\n {meta.label}\r\n <NumericInput\r\n value={data[name] as string}\r\n onValueChange={(v) => setValue(v)}\r\n autoFocus={index === 0}\r\n />\r\n </Label>\r\n );\r\n } else if (meta.type === \"info\") {\r\n return (\r\n <div\r\n key={name}\r\n className={`${fieldClassName} mb-4`}\r\n {...getFieldAttributes(name, meta)}\r\n >\r\n {meta.label}\r\n </div>\r\n );\r\n } else if (meta.type === \"flag\") {\r\n return (\r\n <Checkbox\r\n label={meta.label}\r\n value={data[name] as string}\r\n onChange={(e) =>\r\n setValue((e.target as HTMLInputElement).checked)\r\n }\r\n key={name}\r\n autoFocus={index === 0}\r\n className={fieldClassName}\r\n {...getFieldAttributes(name, meta)}\r\n />\r\n );\r\n } else if (meta.type === \"select\") {\r\n return (\r\n <Label\r\n key={name}\r\n className={fieldClassName}\r\n {...getFieldAttributes(name, meta)}\r\n >\r\n {meta.label}\r\n <MenuItemSelect\r\n activeItem={data[name] as string}\r\n onItemSelect={setValue}\r\n items={meta.options || []}\r\n ButtonProps={{\r\n autoFocus: index === 0,\r\n }}\r\n />\r\n </Label>\r\n );\r\n } else if (meta.type === \"page\") {\r\n return (\r\n <Label\r\n key={name}\r\n className={fieldClassName}\r\n {...getFieldAttributes(name, meta)}\r\n >\r\n {meta.label}\r\n <PageInput\r\n key={name}\r\n value={data[name] as string}\r\n setValue={setValue}\r\n autoFocus={index === 0}\r\n />\r\n </Label>\r\n );\r\n } else if (meta.type === \"block\") {\r\n return (\r\n <Label\r\n key={name}\r\n className={fieldClassName}\r\n {...getFieldAttributes(name, meta)}\r\n >\r\n {meta.label}\r\n <BlockInput\r\n value={\r\n getTextByBlockUid(data[name] as string) ||\r\n (data[name] as string)\r\n }\r\n setValue={(text, uid) =>\r\n setValue(\r\n window.roamAlphaAPI.pull(\"[:db/id]\", [\r\n \":block/uid\",\r\n uid || \"\",\r\n ])\r\n ? uid\r\n : text\r\n )\r\n }\r\n autoFocus={index === 0}\r\n />\r\n </Label>\r\n );\r\n } else if (meta.type === \"autocomplete\") {\r\n return (\r\n <Label\r\n key={name}\r\n className={fieldClassName}\r\n {...getFieldAttributes(name, meta)}\r\n >\r\n {meta.label}\r\n <AutocompleteInput\r\n value={data[name] as string}\r\n options={meta.options}\r\n setValue={setValue}\r\n autoFocus={index === 0}\r\n />\r\n </Label>\r\n );\r\n } else if (meta.type === \"embed\") {\r\n return (\r\n <Label\r\n key={name}\r\n className={fieldClassName}\r\n {...getFieldAttributes(name, meta)}\r\n >\r\n {meta.label}\r\n <EmbedInput\r\n defaultValue={meta.defaultValue}\r\n onChange={setValue}\r\n autoFocus={index === 0}\r\n />\r\n </Label>\r\n );\r\n } else {\r\n return <div key={name} />;\r\n }\r\n })}\r\n </div>\r\n <div className={Classes.DIALOG_FOOTER}>\r\n <div\r\n className={`${Classes.DIALOG_FOOTER_ACTIONS} items-center flex-row-reverse`}\r\n >\r\n <Button\r\n text={submitButtonText}\r\n intent={Intent.PRIMARY}\r\n onClick={onClick}\r\n disabled={loading}\r\n className=\"flex-shrink-0\"\r\n />\r\n <Button\r\n text={cancelButtonText}\r\n onClick={onClose}\r\n disabled={loading}\r\n className=\"flex-shrink-0 roamjs-cancel\"\r\n />\r\n <span className=\"text-red-700 flex-grow\">{error}</span>\r\n {loading && <Spinner size={SpinnerSize.SMALL} />}\r\n </div>\r\n </div>\r\n </Dialog>\r\n );\r\n};\r\n\r\nexport const render = createOverlayRender<Props<Record<string, unknown>>>(\r\n \"form-dialog\",\r\n FormDialog\r\n);\r\n\r\nexport const prompt = ({\r\n defaultAnswer,\r\n question,\r\n title,\r\n}: {\r\n title: string;\r\n question: string;\r\n defaultAnswer: string;\r\n}) =>\r\n new Promise<string>((resolve) =>\r\n render({\r\n onSubmit: (data) => resolve(data.value as string),\r\n fields: { value: { type: \"text\", defaultValue: defaultAnswer } },\r\n title,\r\n content: (\r\n <div className=\"whitespace-pre-wrap font-semibold text-lg mb-4\">\r\n {question}\r\n </div>\r\n ),\r\n })\r\n );\r\n\r\nexport default FormDialog;\r\n"]}
@@ -1,4 +1,3 @@
1
- /// <reference types="react" />
2
1
  declare const Loading: () => JSX.Element;
3
2
  export declare const renderLoading: (targetUid?: string) => () => void;
4
3
  export default Loading;
@@ -1 +1 @@
1
- {"version":3,"file":"Loading.js","sourceRoot":"","sources":["../../src/components/Loading.tsx"],"names":[],"mappings":";;;;AAAA,4CAAyD;AACzD,0DAA0B;AAC1B,kEAAiC;AAEjC,MAAM,OAAO,GAAG,GAAG,EAAE;IACnB,OAAO,8BAAC,cAAO,IAAC,IAAI,EAAE,kBAAW,CAAC,KAAK,GAAI,CAAC;AAC9C,CAAC,CAAC;AAEK,MAAM,aAAa,GAAG,CAAC,SAAkB,EAAE,EAAE;;IAClD,MAAM,WAAW,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IAClD,WAAW,CAAC,KAAK,CAAC,QAAQ,GAAG,UAAU,CAAC;IACxC,WAAW,CAAC,KAAK,CAAC,MAAM,GAAG,GAAG,CAAC;IAC/B,WAAW,CAAC,KAAK,CAAC,KAAK,GAAG,GAAG,CAAC;IAC9B,MAAM,MAAM,GAAG,SAAS;QACtB,CAAC,CAAC,CAAA,MAAA,QAAQ,CAAC,aAAa,CACpB,yBAAyB,SAAS,IAAI,CACvC,0CAAE,aAAa,KAAI,QAAQ,CAAC,aAAa,CAAC,eAAe,CAAC;QAC7D,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAC,eAAe,CAAC,CAAC;IAC5C,IAAI,MAAM,EAAE;QACV,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;QAChC,mBAAQ,CAAC,MAAM,CAAC,8BAAC,OAAO,OAAG,EAAE,WAAW,CAAC,CAAC;QAC1C,OAAO,GAAG,EAAE;YACV,mBAAQ,CAAC,sBAAsB,CAAC,WAAW,CAAC,CAAC;YAC7C,WAAW,CAAC,MAAM,EAAE,CAAC;QACvB,CAAC,CAAC;KACH;SAAM;QACL,OAAO,GAAG,EAAE;YACV,kBAAkB;QACpB,CAAC,CAAC;KACH;AACH,CAAC,CAAC;AAtBW,QAAA,aAAa,iBAsBxB;AAEF,kBAAe,OAAO,CAAC","sourcesContent":["import { Spinner, SpinnerSize } from \"@blueprintjs/core\";\nimport React from \"react\";\nimport ReactDOM from \"react-dom\";\n\nconst Loading = () => {\n return <Spinner size={SpinnerSize.SMALL} />;\n};\n\nexport const renderLoading = (targetUid?: string) => {\n const reactParent = document.createElement(\"div\");\n reactParent.style.position = \"absolute\";\n reactParent.style.bottom = \"0\";\n reactParent.style.right = \"0\";\n const parent = targetUid\n ? document.querySelector<HTMLDivElement>(\n `.rm-block__input[id$=\"${targetUid}\"]`\n )?.parentElement || document.querySelector(\".roam-article\")\n : document.querySelector(\".roam-article\");\n if (parent) {\n parent.appendChild(reactParent);\n ReactDOM.render(<Loading />, reactParent);\n return () => {\n ReactDOM.unmountComponentAtNode(reactParent);\n reactParent.remove();\n };\n } else {\n return () => {\n // no parent found\n };\n }\n};\n\nexport default Loading;\n"]}
1
+ {"version":3,"file":"Loading.js","sourceRoot":"","sources":["../../src/components/Loading.tsx"],"names":[],"mappings":";;;;AAAA,4CAAyD;AACzD,0DAA0B;AAC1B,kEAAiC;AAEjC,MAAM,OAAO,GAAG,GAAG,EAAE;IACnB,OAAO,8BAAC,cAAO,IAAC,IAAI,EAAE,kBAAW,CAAC,KAAK,GAAI,CAAC;AAC9C,CAAC,CAAC;AAEK,MAAM,aAAa,GAAG,CAAC,SAAkB,EAAE,EAAE;;IAClD,MAAM,WAAW,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IAClD,WAAW,CAAC,KAAK,CAAC,QAAQ,GAAG,UAAU,CAAC;IACxC,WAAW,CAAC,KAAK,CAAC,MAAM,GAAG,GAAG,CAAC;IAC/B,WAAW,CAAC,KAAK,CAAC,KAAK,GAAG,GAAG,CAAC;IAC9B,MAAM,MAAM,GAAG,SAAS;QACtB,CAAC,CAAC,CAAA,MAAA,QAAQ,CAAC,aAAa,CACpB,yBAAyB,SAAS,IAAI,CACvC,0CAAE,aAAa,KAAI,QAAQ,CAAC,aAAa,CAAC,eAAe,CAAC;QAC7D,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAC,eAAe,CAAC,CAAC;IAC5C,IAAI,MAAM,EAAE,CAAC;QACX,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;QAChC,mBAAQ,CAAC,MAAM,CAAC,8BAAC,OAAO,OAAG,EAAE,WAAW,CAAC,CAAC;QAC1C,OAAO,GAAG,EAAE;YACV,mBAAQ,CAAC,sBAAsB,CAAC,WAAW,CAAC,CAAC;YAC7C,WAAW,CAAC,MAAM,EAAE,CAAC;QACvB,CAAC,CAAC;IACJ,CAAC;SAAM,CAAC;QACN,OAAO,GAAG,EAAE;YACV,kBAAkB;QACpB,CAAC,CAAC;IACJ,CAAC;AACH,CAAC,CAAC;AAtBW,QAAA,aAAa,iBAsBxB;AAEF,kBAAe,OAAO,CAAC","sourcesContent":["import { Spinner, SpinnerSize } from \"@blueprintjs/core\";\nimport React from \"react\";\nimport ReactDOM from \"react-dom\";\n\nconst Loading = () => {\n return <Spinner size={SpinnerSize.SMALL} />;\n};\n\nexport const renderLoading = (targetUid?: string) => {\n const reactParent = document.createElement(\"div\");\n reactParent.style.position = \"absolute\";\n reactParent.style.bottom = \"0\";\n reactParent.style.right = \"0\";\n const parent = targetUid\n ? document.querySelector<HTMLDivElement>(\n `.rm-block__input[id$=\"${targetUid}\"]`\n )?.parentElement || document.querySelector(\".roam-article\")\n : document.querySelector(\".roam-article\");\n if (parent) {\n parent.appendChild(reactParent);\n ReactDOM.render(<Loading />, reactParent);\n return () => {\n ReactDOM.unmountComponentAtNode(reactParent);\n reactParent.remove();\n };\n } else {\n return () => {\n // no parent found\n };\n }\n};\n\nexport default Loading;\n"]}
@@ -1,9 +1,9 @@
1
1
  import { ButtonProps } from "@blueprintjs/core";
2
2
  import { SelectProps, ICreateNewItem } from "@blueprintjs/select";
3
- import React, { ReactText, ButtonHTMLAttributes, ReactNode } from "react";
4
- declare type ActiveItem<T> = T | ICreateNewItem | null | undefined;
5
- declare type TransformItem<T> = (s: T) => ReactNode;
6
- declare type MenuItemSelectProps<T extends ReactText> = Omit<SelectProps<T>, "itemRenderer"> & {
3
+ import { ReactText, ButtonHTMLAttributes, ReactNode } from "react";
4
+ type ActiveItem<T> = T | ICreateNewItem | null | undefined;
5
+ type TransformItem<T> = (s: T) => ReactNode;
6
+ type MenuItemSelectProps<T extends ReactText> = Omit<SelectProps<T>, "itemRenderer"> & {
7
7
  ButtonProps?: ButtonProps & ButtonHTMLAttributes<HTMLButtonElement>;
8
8
  emptyValueText?: string;
9
9
  transformItem?: TransformItem<T>;
@@ -13,5 +13,5 @@ declare type MenuItemSelectProps<T extends ReactText> = Omit<SelectProps<T>, "it
13
13
  transformItem?: TransformItem<T>;
14
14
  }) => ReactNode;
15
15
  };
16
- declare const MenuItemSelect: <T extends React.ReactText>(props: MenuItemSelectProps<T>) => JSX.Element;
16
+ declare const MenuItemSelect: <T extends ReactText>(props: MenuItemSelectProps<T>) => JSX.Element;
17
17
  export default MenuItemSelect;
@@ -1,4 +1,3 @@
1
- /// <reference types="react" />
2
1
  import { ExternalLoginOptions } from "./ExternalLogin";
3
2
  declare const OauthPanel: {
4
3
  (options: ExternalLoginOptions): JSX.Element;
@@ -1,6 +1,6 @@
1
1
  import React from "react";
2
2
  import { AutocompleteInputProps } from "./AutocompleteInput";
3
3
  declare const PageInput: ({ extra, ...rest }: {
4
- extra?: string[] | undefined;
5
- } & Omit<AutocompleteInputProps<string>, "options">) => React.ReactElement;
4
+ extra?: string[];
5
+ } & Omit<AutocompleteInputProps, "options">) => React.ReactElement;
6
6
  export default PageInput;
@@ -1,6 +1,6 @@
1
1
  import React from "react";
2
2
  declare const PageLink: ({ uid, onCtrlClick, children, }: React.PropsWithChildren<{
3
3
  uid: string;
4
- onCtrlClick?: ((e: React.MouseEvent) => void) | undefined;
4
+ onCtrlClick?: (e: React.MouseEvent) => void;
5
5
  }>) => JSX.Element;
6
6
  export default PageLink;
@@ -1 +1 @@
1
- {"version":3,"file":"PageLink.js","sourceRoot":"","sources":["../../src/components/PageLink.tsx"],"names":[],"mappings":";;;AAAA,uDAAuC;AACvC,2EAA2C;AAC3C,qGAAqE;AACrE,8FAA8D;AAE9D,MAAM,QAAQ,GAAG,CAAC,EAChB,GAAG,EACH,WAAW,EACX,QAAQ,GAIR,EAAE,EAAE;IACJ,MAAM,KAAK,GAAG,IAAA,eAAO,EACnB,GAAG,EAAE,CAAC,QAAQ,IAAI,IAAA,+BAAqB,EAAC,GAAG,CAAC,EAC5C,CAAC,QAAQ,EAAE,GAAG,CAAC,CAChB,CAAC;IACF,OAAO,CACL,qCACE,SAAS,EAAE,aAAa,qBACP,KAAK,EACtB,IAAI,EAAE,IAAA,oBAAU,EAAC,GAAG,CAAC,EACrB,WAAW,EAAE,CAAC,CAAC,EAAE,EAAE;YACjB,IAAI,CAAC,CAAC,QAAQ,EAAE;gBACd,IAAA,4BAAkB,EAAC,GAAG,CAAC,CAAC;gBACxB,CAAC,CAAC,cAAc,EAAE,CAAC;gBACnB,CAAC,CAAC,eAAe,EAAE,CAAC;aACrB;iBAAM,IAAI,CAAC,CAAC,OAAO,EAAE;gBACpB,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAG,CAAC,CAAC,CAAC;aAClB;QACH,CAAC,EACD,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE;YACb,IAAI,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,OAAO,EAAE;gBAC3B,CAAC,CAAC,cAAc,EAAE,CAAC;gBACnB,CAAC,CAAC,eAAe,EAAE,CAAC;aACrB;QACH,CAAC,EACD,aAAa,EAAE,CAAC,CAAC,EAAE,EAAE;YACnB,IAAI,CAAC,CAAC,OAAO,EAAE;gBACb,CAAC,CAAC,cAAc,EAAE,CAAC;gBACnB,CAAC,CAAC,eAAe,EAAE,CAAC;aACrB;QACH,CAAC,IAEA,KAAK,CACJ,CACL,CAAC;AACJ,CAAC,CAAC;AAEF,kBAAe,QAAQ,CAAC","sourcesContent":["import React, { useMemo } from \"react\";\nimport getRoamUrl from \"../dom/getRoamUrl\";\nimport getPageTitleByPageUid from \"../queries/getPageTitleByPageUid\";\nimport openBlockInSidebar from \"../writes/openBlockInSidebar\";\n\nconst PageLink = ({\n uid,\n onCtrlClick,\n children,\n}: React.PropsWithChildren<{\n uid: string;\n onCtrlClick?: (e: React.MouseEvent) => void;\n}>) => {\n const title = useMemo(\n () => children || getPageTitleByPageUid(uid),\n [children, uid]\n );\n return (\n <a\n className={\"rm-page-ref\"}\n data-link-title={title}\n href={getRoamUrl(uid)}\n onMouseDown={(e) => {\n if (e.shiftKey) {\n openBlockInSidebar(uid);\n e.preventDefault();\n e.stopPropagation();\n } else if (e.ctrlKey) {\n onCtrlClick?.(e);\n }\n }}\n onClick={(e) => {\n if (e.shiftKey || e.ctrlKey) {\n e.preventDefault();\n e.stopPropagation();\n }\n }}\n onContextMenu={(e) => {\n if (e.ctrlKey) {\n e.preventDefault();\n e.stopPropagation();\n }\n }}\n >\n {title}\n </a>\n );\n};\n\nexport default PageLink;\n"]}
1
+ {"version":3,"file":"PageLink.js","sourceRoot":"","sources":["../../src/components/PageLink.tsx"],"names":[],"mappings":";;;AAAA,uDAAuC;AACvC,2EAA2C;AAC3C,qGAAqE;AACrE,8FAA8D;AAE9D,MAAM,QAAQ,GAAG,CAAC,EAChB,GAAG,EACH,WAAW,EACX,QAAQ,GAIR,EAAE,EAAE;IACJ,MAAM,KAAK,GAAG,IAAA,eAAO,EACnB,GAAG,EAAE,CAAC,QAAQ,IAAI,IAAA,+BAAqB,EAAC,GAAG,CAAC,EAC5C,CAAC,QAAQ,EAAE,GAAG,CAAC,CAChB,CAAC;IACF,OAAO,CACL,qCACE,SAAS,EAAE,aAAa,qBACP,KAAK,EACtB,IAAI,EAAE,IAAA,oBAAU,EAAC,GAAG,CAAC,EACrB,WAAW,EAAE,CAAC,CAAC,EAAE,EAAE;YACjB,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC;gBACf,IAAA,4BAAkB,EAAC,GAAG,CAAC,CAAC;gBACxB,CAAC,CAAC,cAAc,EAAE,CAAC;gBACnB,CAAC,CAAC,eAAe,EAAE,CAAC;YACtB,CAAC;iBAAM,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC;gBACrB,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAG,CAAC,CAAC,CAAC;YACnB,CAAC;QACH,CAAC,EACD,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE;YACb,IAAI,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC;gBAC5B,CAAC,CAAC,cAAc,EAAE,CAAC;gBACnB,CAAC,CAAC,eAAe,EAAE,CAAC;YACtB,CAAC;QACH,CAAC,EACD,aAAa,EAAE,CAAC,CAAC,EAAE,EAAE;YACnB,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC;gBACd,CAAC,CAAC,cAAc,EAAE,CAAC;gBACnB,CAAC,CAAC,eAAe,EAAE,CAAC;YACtB,CAAC;QACH,CAAC,IAEA,KAAK,CACJ,CACL,CAAC;AACJ,CAAC,CAAC;AAEF,kBAAe,QAAQ,CAAC","sourcesContent":["import React, { useMemo } from \"react\";\nimport getRoamUrl from \"../dom/getRoamUrl\";\nimport getPageTitleByPageUid from \"../queries/getPageTitleByPageUid\";\nimport openBlockInSidebar from \"../writes/openBlockInSidebar\";\n\nconst PageLink = ({\n uid,\n onCtrlClick,\n children,\n}: React.PropsWithChildren<{\n uid: string;\n onCtrlClick?: (e: React.MouseEvent) => void;\n}>) => {\n const title = useMemo(\n () => children || getPageTitleByPageUid(uid),\n [children, uid]\n );\n return (\n <a\n className={\"rm-page-ref\"}\n data-link-title={title}\n href={getRoamUrl(uid)}\n onMouseDown={(e) => {\n if (e.shiftKey) {\n openBlockInSidebar(uid);\n e.preventDefault();\n e.stopPropagation();\n } else if (e.ctrlKey) {\n onCtrlClick?.(e);\n }\n }}\n onClick={(e) => {\n if (e.shiftKey || e.ctrlKey) {\n e.preventDefault();\n e.stopPropagation();\n }\n }}\n onContextMenu={(e) => {\n if (e.ctrlKey) {\n e.preventDefault();\n e.stopPropagation();\n }\n }}\n >\n {title}\n </a>\n );\n};\n\nexport default PageLink;\n"]}