roamjs-components 0.86.0-alpha.2 → 0.86.0-alpha.3
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.
- package/components/AutocompleteInput.d.ts +28 -0
- package/components/AutocompleteInput.js +121 -0
- package/components/AutocompleteInput.js.map +1 -0
- package/components/BlockErrorBoundary.d.ts +16 -0
- package/components/BlockErrorBoundary.js +28 -0
- package/components/BlockErrorBoundary.js.map +1 -0
- package/components/BlockInput.d.ts +13 -0
- package/components/BlockInput.js +56 -0
- package/components/BlockInput.js.map +1 -0
- package/components/ComponentContainer.d.ts +11 -0
- package/components/ComponentContainer.js +38 -0
- package/components/ComponentContainer.js.map +1 -0
- package/components/ConfigPage.d.ts +35 -0
- package/components/ConfigPage.js +160 -0
- package/components/ConfigPage.js.map +1 -0
- package/components/ConfigPanels/BlockPanel.d.ts +3 -0
- package/components/ConfigPanels/BlockPanel.js +43 -0
- package/components/ConfigPanels/BlockPanel.js.map +1 -0
- package/components/ConfigPanels/BlocksPanel.d.ts +3 -0
- package/components/ConfigPanels/BlocksPanel.js +69 -0
- package/components/ConfigPanels/BlocksPanel.js.map +1 -0
- package/components/ConfigPanels/CustomPanel.d.ts +3 -0
- package/components/ConfigPanels/CustomPanel.js +25 -0
- package/components/ConfigPanels/CustomPanel.js.map +1 -0
- package/components/ConfigPanels/FlagPanel.d.ts +3 -0
- package/components/ConfigPanels/FlagPanel.js +32 -0
- package/components/ConfigPanels/FlagPanel.js.map +1 -0
- package/components/ConfigPanels/MultiChildPanel.d.ts +9 -0
- package/components/ConfigPanels/MultiChildPanel.js +59 -0
- package/components/ConfigPanels/MultiChildPanel.js.map +1 -0
- package/components/ConfigPanels/MultiTextPanel.d.ts +3 -0
- package/components/ConfigPanels/MultiTextPanel.js +15 -0
- package/components/ConfigPanels/MultiTextPanel.js.map +1 -0
- package/components/ConfigPanels/NumberPanel.d.ts +3 -0
- package/components/ConfigPanels/NumberPanel.js +26 -0
- package/components/ConfigPanels/NumberPanel.js.map +1 -0
- package/components/ConfigPanels/OauthPanel.d.ts +3 -0
- package/components/ConfigPanels/OauthPanel.js +82 -0
- package/components/ConfigPanels/OauthPanel.js.map +1 -0
- package/components/ConfigPanels/PagesPanel.d.ts +3 -0
- package/components/ConfigPanels/PagesPanel.js +12 -0
- package/components/ConfigPanels/PagesPanel.js.map +1 -0
- package/components/ConfigPanels/SelectPanel.d.ts +3 -0
- package/components/ConfigPanels/SelectPanel.js +28 -0
- package/components/ConfigPanels/SelectPanel.js.map +1 -0
- package/components/ConfigPanels/TextPanel.d.ts +3 -0
- package/components/ConfigPanels/TextPanel.js +29 -0
- package/components/ConfigPanels/TextPanel.js.map +1 -0
- package/components/ConfigPanels/TimePanel.d.ts +3 -0
- package/components/ConfigPanels/TimePanel.js +35 -0
- package/components/ConfigPanels/TimePanel.js.map +1 -0
- package/components/ConfigPanels/getBrandColors.d.ts +7 -0
- package/components/ConfigPanels/getBrandColors.js +29 -0
- package/components/ConfigPanels/getBrandColors.js.map +1 -0
- package/components/ConfigPanels/types.d.ts +84 -0
- package/components/ConfigPanels/types.js +3 -0
- package/components/ConfigPanels/types.js.map +1 -0
- package/components/ConfigPanels/useSingleChildValue.d.ts +13 -0
- package/components/ConfigPanels/useSingleChildValue.js +44 -0
- package/components/ConfigPanels/useSingleChildValue.js.map +1 -0
- package/components/CursorMenu.d.ts +21 -0
- package/components/CursorMenu.js +182 -0
- package/components/CursorMenu.js.map +1 -0
- package/components/Description.d.ts +5 -0
- package/components/Description.js +17 -0
- package/components/Description.js.map +1 -0
- package/components/ExtensionApiContext.d.ts +31 -0
- package/components/ExtensionApiContext.js +17 -0
- package/components/ExtensionApiContext.js.map +1 -0
- package/components/ExternalLogin.d.ts +18 -0
- package/components/ExternalLogin.js +142 -0
- package/components/ExternalLogin.js.map +1 -0
- package/components/Filter.d.ts +15 -0
- package/components/Filter.js +143 -0
- package/components/Filter.js.map +1 -0
- package/components/FormDialog.d.ts +55 -0
- package/components/FormDialog.js +224 -0
- package/components/FormDialog.js.map +1 -0
- package/components/Loading.d.ts +4 -0
- package/components/Loading.js +36 -0
- package/components/Loading.js.map +1 -0
- package/components/MenuItemSelect.d.ts +17 -0
- package/components/MenuItemSelect.js +24 -0
- package/components/MenuItemSelect.js.map +1 -0
- package/components/OauthPanel.d.ts +7 -0
- package/components/OauthPanel.js +31 -0
- package/components/OauthPanel.js.map +1 -0
- package/components/OauthSelect.d.ts +5 -0
- package/components/OauthSelect.js +26 -0
- package/components/OauthSelect.js.map +1 -0
- package/components/PageInput.d.ts +6 -0
- package/components/PageInput.js +14 -0
- package/components/PageInput.js.map +1 -0
- package/components/PageLink.d.ts +6 -0
- package/components/PageLink.js +32 -0
- package/components/PageLink.js.map +1 -0
- package/components/ProgressDialog.d.ts +11 -0
- package/components/ProgressDialog.js +61 -0
- package/components/ProgressDialog.js.map +1 -0
- package/components/SimpleAlert.d.ts +15 -0
- package/components/SimpleAlert.js +48 -0
- package/components/SimpleAlert.js.map +1 -0
- package/components/Toast.d.ts +15 -0
- package/components/Toast.js +51 -0
- package/components/Toast.js.map +1 -0
- package/components/index.d.ts +0 -0
- package/components/index.js +5 -0
- package/components/index.js.map +1 -0
- package/components.d.ts +5 -0
- package/components.js +202 -0
- package/components.js.map +1 -0
- package/date/constants.d.ts +3 -0
- package/date/constants.js +20 -0
- package/date/constants.js.map +1 -0
- package/date/index.js +10 -0
- package/date/index.js.map +1 -0
- package/date/parseNlpDate.d.ts +5 -0
- package/date/parseNlpDate.js +227 -0
- package/date/parseNlpDate.js.map +1 -0
- package/date/parseRoamDateUid.d.ts +2 -0
- package/date/parseRoamDateUid.js +8 -0
- package/date/parseRoamDateUid.js.map +1 -0
- package/dom/addBlockCommand.d.ts +5 -0
- package/dom/addBlockCommand.js +54 -0
- package/dom/addBlockCommand.js.map +1 -0
- package/dom/addKeyboardTriggers.d.ts +11 -0
- package/dom/addKeyboardTriggers.js +39 -0
- package/dom/addKeyboardTriggers.js.map +1 -0
- package/dom/addOldRoamJSDependency.d.ts +2 -0
- package/dom/addOldRoamJSDependency.js +11 -0
- package/dom/addOldRoamJSDependency.js.map +1 -0
- package/dom/addRoamJSDependency.d.ts +2 -0
- package/dom/addRoamJSDependency.js +9 -0
- package/dom/addRoamJSDependency.js.map +1 -0
- package/dom/addScriptAsDependency.d.ts +6 -0
- package/dom/addScriptAsDependency.js +17 -0
- package/dom/addScriptAsDependency.js.map +1 -0
- package/dom/addStyle.d.ts +2 -0
- package/dom/addStyle.js +15 -0
- package/dom/addStyle.js.map +1 -0
- package/dom/constants.d.ts +1 -0
- package/dom/constants.js +5 -0
- package/dom/constants.js.map +1 -0
- package/dom/createBlockObserver.d.ts +7 -0
- package/dom/createBlockObserver.js +44 -0
- package/dom/createBlockObserver.js.map +1 -0
- package/dom/createButtonObserver.d.ts +6 -0
- package/dom/createButtonObserver.js +22 -0
- package/dom/createButtonObserver.js.map +1 -0
- package/dom/createDivObserver.d.ts +2 -0
- package/dom/createDivObserver.js +14 -0
- package/dom/createDivObserver.js.map +1 -0
- package/dom/createHTMLObserver.d.ts +8 -0
- package/dom/createHTMLObserver.js +25 -0
- package/dom/createHTMLObserver.js.map +1 -0
- package/dom/createHashtagObserver.d.ts +5 -0
- package/dom/createHashtagObserver.js +17 -0
- package/dom/createHashtagObserver.js.map +1 -0
- package/dom/createIconButton.d.ts +2 -0
- package/dom/createIconButton.js +13 -0
- package/dom/createIconButton.js.map +1 -0
- package/dom/createObserver.d.ts +2 -0
- package/dom/createObserver.js +10 -0
- package/dom/createObserver.js.map +1 -0
- package/dom/createOverlayObserver.d.ts +2 -0
- package/dom/createOverlayObserver.js +7 -0
- package/dom/createOverlayObserver.js.map +1 -0
- package/dom/createPageObserver.d.ts +2 -0
- package/dom/createPageObserver.js +35 -0
- package/dom/createPageObserver.js.map +1 -0
- package/dom/createPageTitleObserver.d.ts +6 -0
- package/dom/createPageTitleObserver.js +32 -0
- package/dom/createPageTitleObserver.js.map +1 -0
- package/dom/elToTitle.d.ts +2 -0
- package/dom/elToTitle.js +23 -0
- package/dom/elToTitle.js.map +1 -0
- package/dom/genericError.d.ts +3 -0
- package/dom/genericError.js +12 -0
- package/dom/genericError.js.map +1 -0
- package/dom/getActiveUids.d.ts +3 -0
- package/dom/getActiveUids.js +7 -0
- package/dom/getActiveUids.js.map +1 -0
- package/dom/getBlockUidFromTarget.d.ts +2 -0
- package/dom/getBlockUidFromTarget.js +34 -0
- package/dom/getBlockUidFromTarget.js.map +1 -0
- package/dom/getCurrentPageUid.d.ts +2 -0
- package/dom/getCurrentPageUid.js +9 -0
- package/dom/getCurrentPageUid.js.map +1 -0
- package/dom/getDomRefs.d.ts +2 -0
- package/dom/getDomRefs.js +13 -0
- package/dom/getDomRefs.js.map +1 -0
- package/dom/getDropUidOffset.d.ts +5 -0
- package/dom/getDropUidOffset.js +28 -0
- package/dom/getDropUidOffset.js.map +1 -0
- package/dom/getMutatedNodes.d.ts +7 -0
- package/dom/getMutatedNodes.js +12 -0
- package/dom/getMutatedNodes.js.map +1 -0
- package/dom/getPageTitleByHtmlElement.d.ts +2 -0
- package/dom/getPageTitleByHtmlElement.js +13 -0
- package/dom/getPageTitleByHtmlElement.js.map +1 -0
- package/dom/getPageTitleValueByHtmlElement.d.ts +2 -0
- package/dom/getPageTitleValueByHtmlElement.js +10 -0
- package/dom/getPageTitleValueByHtmlElement.js.map +1 -0
- package/dom/getReferenceBlockUid.d.ts +2 -0
- package/dom/getReferenceBlockUid.js +19 -0
- package/dom/getReferenceBlockUid.js.map +1 -0
- package/dom/getRoamUrl.d.ts +2 -0
- package/dom/getRoamUrl.js +5 -0
- package/dom/getRoamUrl.js.map +1 -0
- package/dom/getRoamUrlByPage.d.ts +2 -0
- package/dom/getRoamUrlByPage.js +11 -0
- package/dom/getRoamUrlByPage.js.map +1 -0
- package/dom/getUids.d.ts +3 -0
- package/dom/getUids.js +9 -0
- package/dom/getUids.js.map +1 -0
- package/dom/getUidsFromButton.d.ts +3 -0
- package/dom/getUidsFromButton.js +9 -0
- package/dom/getUidsFromButton.js.map +1 -0
- package/dom/getUidsFromId.d.ts +5 -0
- package/dom/getUidsFromId.js +16 -0
- package/dom/getUidsFromId.js.map +1 -0
- package/dom/index.js +64 -0
- package/dom/index.js.map +1 -0
- package/dom/parseRoamBlocksToHtml.d.ts +11 -0
- package/dom/parseRoamBlocksToHtml.js +80 -0
- package/dom/parseRoamBlocksToHtml.js.map +1 -0
- package/dom/resolveRefs.d.ts +2 -0
- package/dom/resolveRefs.js +25 -0
- package/dom/resolveRefs.js.map +1 -0
- package/events/index.js +9 -0
- package/events/index.js.map +1 -0
- package/events/watchOnce.d.ts +3 -0
- package/events/watchOnce.js +13 -0
- package/events/watchOnce.js.map +1 -0
- package/hooks/index.js +11 -0
- package/hooks/index.js.map +1 -0
- package/hooks/useArrowKeyDown.d.ts +10 -0
- package/hooks/useArrowKeyDown.js +55 -0
- package/hooks/useArrowKeyDown.js.map +1 -0
- package/hooks/useSubTree.d.ts +3 -0
- package/hooks/useSubTree.js +12 -0
- package/hooks/useSubTree.js.map +1 -0
- package/marked/index.d.ts +25 -0
- package/marked/index.js +568 -0
- package/marked/index.js.map +1 -0
- package/package.json +1 -1
- package/queries/compileDatalog.d.ts +3 -0
- package/queries/compileDatalog.js +64 -0
- package/queries/compileDatalog.js.map +1 -0
- package/queries/getAllBlockUids.d.ts +2 -0
- package/queries/getAllBlockUids.js +7 -0
- package/queries/getAllBlockUids.js.map +1 -0
- package/queries/getAllBlockUidsAndTexts.d.ts +5 -0
- package/queries/getAllBlockUidsAndTexts.js +7 -0
- package/queries/getAllBlockUidsAndTexts.js.map +1 -0
- package/queries/getAllPageNames.d.ts +2 -0
- package/queries/getAllPageNames.js +7 -0
- package/queries/getAllPageNames.js.map +1 -0
- package/queries/getAttributeValueByBlockAndName.d.ts +5 -0
- package/queries/getAttributeValueByBlockAndName.js +12 -0
- package/queries/getAttributeValueByBlockAndName.js.map +1 -0
- package/queries/getBasicTreeByParentUid.d.ts +3 -0
- package/queries/getBasicTreeByParentUid.js +14 -0
- package/queries/getBasicTreeByParentUid.js.map +1 -0
- package/queries/getBlockUidAndTextIncludingText.d.ts +5 -0
- package/queries/getBlockUidAndTextIncludingText.js +8 -0
- package/queries/getBlockUidAndTextIncludingText.js.map +1 -0
- package/queries/getBlockUidByTextOnPage.d.ts +5 -0
- package/queries/getBlockUidByTextOnPage.js +8 -0
- package/queries/getBlockUidByTextOnPage.js.map +1 -0
- package/queries/getBlockUidsAndTextsReferencingPage.d.ts +5 -0
- package/queries/getBlockUidsAndTextsReferencingPage.js +10 -0
- package/queries/getBlockUidsAndTextsReferencingPage.js.map +1 -0
- package/queries/getBlockUidsByPageTitle.d.ts +2 -0
- package/queries/getBlockUidsByPageTitle.js +9 -0
- package/queries/getBlockUidsByPageTitle.js.map +1 -0
- package/queries/getBlockUidsReferencingBlock.d.ts +2 -0
- package/queries/getBlockUidsReferencingBlock.js +5 -0
- package/queries/getBlockUidsReferencingBlock.js.map +1 -0
- package/queries/getBlockUidsReferencingPage.d.ts +2 -0
- package/queries/getBlockUidsReferencingPage.js +7 -0
- package/queries/getBlockUidsReferencingPage.js.map +1 -0
- package/queries/getBlockUidsWithParentUid.d.ts +2 -0
- package/queries/getBlockUidsWithParentUid.js +7 -0
- package/queries/getBlockUidsWithParentUid.js.map +1 -0
- package/queries/getChildrenLengthByPageUid.d.ts +2 -0
- package/queries/getChildrenLengthByPageUid.js +9 -0
- package/queries/getChildrenLengthByPageUid.js.map +1 -0
- package/queries/getChildrenLengthByParentUid.d.ts +2 -0
- package/queries/getChildrenLengthByParentUid.js +8 -0
- package/queries/getChildrenLengthByParentUid.js.map +1 -0
- package/queries/getCreateTimeByBlockUid.d.ts +2 -0
- package/queries/getCreateTimeByBlockUid.js +8 -0
- package/queries/getCreateTimeByBlockUid.js.map +1 -0
- package/queries/getCurrentUser.d.ts +2 -0
- package/queries/getCurrentUser.js +12 -0
- package/queries/getCurrentUser.js.map +1 -0
- package/queries/getCurrentUserDisplayName.d.ts +2 -0
- package/queries/getCurrentUserDisplayName.js +11 -0
- package/queries/getCurrentUserDisplayName.js.map +1 -0
- package/queries/getCurrentUserEmail.d.ts +2 -0
- package/queries/getCurrentUserEmail.js +14 -0
- package/queries/getCurrentUserEmail.js.map +1 -0
- package/queries/getCurrentUserUid.d.ts +2 -0
- package/queries/getCurrentUserUid.js +14 -0
- package/queries/getCurrentUserUid.js.map +1 -0
- package/queries/getDisplayNameByEmail.d.ts +2 -0
- package/queries/getDisplayNameByEmail.js +8 -0
- package/queries/getDisplayNameByEmail.js.map +1 -0
- package/queries/getDisplayNameByUid.d.ts +2 -0
- package/queries/getDisplayNameByUid.js +8 -0
- package/queries/getDisplayNameByUid.js.map +1 -0
- package/queries/getEditTimeByBlockUid.d.ts +2 -0
- package/queries/getEditTimeByBlockUid.js +8 -0
- package/queries/getEditTimeByBlockUid.js.map +1 -0
- package/queries/getEditedUserEmailByBlockUid.d.ts +2 -0
- package/queries/getEditedUserEmailByBlockUid.js +8 -0
- package/queries/getEditedUserEmailByBlockUid.js.map +1 -0
- package/queries/getFirstChildTextByBlockUid.d.ts +2 -0
- package/queries/getFirstChildTextByBlockUid.js +8 -0
- package/queries/getFirstChildTextByBlockUid.js.map +1 -0
- package/queries/getFirstChildUidByBlockUid.d.ts +2 -0
- package/queries/getFirstChildUidByBlockUid.js +7 -0
- package/queries/getFirstChildUidByBlockUid.js.map +1 -0
- package/queries/getFullTreeByParentUid.d.ts +3 -0
- package/queries/getFullTreeByParentUid.js +52 -0
- package/queries/getFullTreeByParentUid.js.map +1 -0
- package/queries/getLinkedPageTitlesUnderUid.d.ts +2 -0
- package/queries/getLinkedPageTitlesUnderUid.js +7 -0
- package/queries/getLinkedPageTitlesUnderUid.js.map +1 -0
- package/queries/getNthChildUidByBlockUid.d.ts +5 -0
- package/queries/getNthChildUidByBlockUid.js +8 -0
- package/queries/getNthChildUidByBlockUid.js.map +1 -0
- package/queries/getOrderByBlockUid.d.ts +2 -0
- package/queries/getOrderByBlockUid.js +8 -0
- package/queries/getOrderByBlockUid.js.map +1 -0
- package/queries/getPageTitleByBlockUid.d.ts +2 -0
- package/queries/getPageTitleByBlockUid.js +8 -0
- package/queries/getPageTitleByBlockUid.js.map +1 -0
- package/queries/getPageTitleByPageUid.d.ts +2 -0
- package/queries/getPageTitleByPageUid.js +13 -0
- package/queries/getPageTitleByPageUid.js.map +1 -0
- package/queries/getPageTitleReferencesByPageTitle.d.ts +2 -0
- package/queries/getPageTitleReferencesByPageTitle.js +7 -0
- package/queries/getPageTitleReferencesByPageTitle.js.map +1 -0
- package/queries/getPageTitlesAndBlockUidsReferencingPage.d.ts +5 -0
- package/queries/getPageTitlesAndBlockUidsReferencingPage.js +10 -0
- package/queries/getPageTitlesAndBlockUidsReferencingPage.js.map +1 -0
- package/queries/getPageTitlesAndUidsDirectlyReferencingPage.d.ts +5 -0
- package/queries/getPageTitlesAndUidsDirectlyReferencingPage.js +10 -0
- package/queries/getPageTitlesAndUidsDirectlyReferencingPage.js.map +1 -0
- package/queries/getPageTitlesReferencingBlockUid.d.ts +2 -0
- package/queries/getPageTitlesReferencingBlockUid.js +5 -0
- package/queries/getPageTitlesReferencingBlockUid.js.map +1 -0
- package/queries/getPageTitlesStartingWithPrefix.d.ts +2 -0
- package/queries/getPageTitlesStartingWithPrefix.js +7 -0
- package/queries/getPageTitlesStartingWithPrefix.js.map +1 -0
- package/queries/getPageUidByBlockUid.d.ts +2 -0
- package/queries/getPageUidByBlockUid.js +8 -0
- package/queries/getPageUidByBlockUid.js.map +1 -0
- package/queries/getPageUidByPageTitle.d.ts +2 -0
- package/queries/getPageUidByPageTitle.js +10 -0
- package/queries/getPageUidByPageTitle.js.map +1 -0
- package/queries/getPageViewType.d.ts +3 -0
- package/queries/getPageViewType.js +10 -0
- package/queries/getPageViewType.js.map +1 -0
- package/queries/getParentTextByBlockUid.d.ts +2 -0
- package/queries/getParentTextByBlockUid.js +8 -0
- package/queries/getParentTextByBlockUid.js.map +1 -0
- package/queries/getParentTextByBlockUidAndTag.d.ts +5 -0
- package/queries/getParentTextByBlockUidAndTag.js +8 -0
- package/queries/getParentTextByBlockUidAndTag.js.map +1 -0
- package/queries/getParentUidByBlockUid.d.ts +2 -0
- package/queries/getParentUidByBlockUid.js +8 -0
- package/queries/getParentUidByBlockUid.js.map +1 -0
- package/queries/getParentUidsOfBlockUid.d.ts +2 -0
- package/queries/getParentUidsOfBlockUid.js +5 -0
- package/queries/getParentUidsOfBlockUid.js.map +1 -0
- package/queries/getSettingsByEmail.d.ts +3 -0
- package/queries/getSettingsByEmail.js +8 -0
- package/queries/getSettingsByEmail.js.map +1 -0
- package/queries/getShallowTreeByParentUid.d.ts +5 -0
- package/queries/getShallowTreeByParentUid.js +10 -0
- package/queries/getShallowTreeByParentUid.js.map +1 -0
- package/queries/getTextByBlockUid.d.ts +2 -0
- package/queries/getTextByBlockUid.js +10 -0
- package/queries/getTextByBlockUid.js.map +1 -0
- package/queries/index.d.ts +0 -0
- package/queries/index.js +5 -0
- package/queries/index.js.map +1 -0
- package/queries/isLiveBlock.d.ts +2 -0
- package/queries/isLiveBlock.js +5 -0
- package/queries/isLiveBlock.js.map +1 -0
- package/queries/isTagOnPage.d.ts +5 -0
- package/queries/isTagOnPage.js +10 -0
- package/queries/isTagOnPage.js.map +1 -0
- package/queries/normalizePageTitle.d.ts +2 -0
- package/queries/normalizePageTitle.js +5 -0
- package/queries/normalizePageTitle.js.map +1 -0
- package/scripts/index.d.ts +1 -0
- package/scripts/index.js +27 -0
- package/scripts/index.js.map +1 -0
- package/scripts/publishToRoamDepot.d.ts +7 -0
- package/scripts/publishToRoamDepot.js +114 -0
- package/scripts/publishToRoamDepot.js.map +1 -0
- package/testing/mockRoamEnvironment.d.ts +2 -0
- package/testing/mockRoamEnvironment.js +1254 -0
- package/testing/mockRoamEnvironment.js.map +1 -0
- package/types/index.d.ts +250 -0
- package/types/index.js +5 -0
- package/types/index.js.map +1 -0
- package/types/native.d.ts +402 -0
- package/types/native.js +5 -0
- package/types/native.js.map +1 -0
- package/types/query-builder.d.ts +10 -0
- package/types/query-builder.js +3 -0
- package/types/query-builder.js.map +1 -0
- package/types/smartblocks.d.ts +35 -0
- package/types/smartblocks.js +3 -0
- package/types/smartblocks.js.map +1 -0
- package/util/addInputSetting.d.ts +7 -0
- package/util/addInputSetting.js +26 -0
- package/util/addInputSetting.js.map +1 -0
- package/util/apiDelete.d.ts +2 -0
- package/util/apiDelete.js +7 -0
- package/util/apiDelete.js.map +1 -0
- package/util/apiGet.d.ts +2 -0
- package/util/apiGet.js +7 -0
- package/util/apiGet.js.map +1 -0
- package/util/apiPost.d.ts +2 -0
- package/util/apiPost.js +7 -0
- package/util/apiPost.js.map +1 -0
- package/util/apiPut.d.ts +2 -0
- package/util/apiPut.js +7 -0
- package/util/apiPut.js.map +1 -0
- package/util/createOverlayRender.d.ts +4 -0
- package/util/createOverlayRender.js +7 -0
- package/util/createOverlayRender.js.map +1 -0
- package/util/createTagRegex.d.ts +2 -0
- package/util/createTagRegex.js +8 -0
- package/util/createTagRegex.js.map +1 -0
- package/util/dispatchToRegistry.d.ts +3 -0
- package/util/dispatchToRegistry.js +8 -0
- package/util/dispatchToRegistry.js.map +1 -0
- package/util/env.d.ts +4 -0
- package/util/env.js +48 -0
- package/util/env.js.map +1 -0
- package/util/extensionApiContext.d.ts +29 -0
- package/util/extensionApiContext.js +18 -0
- package/util/extensionApiContext.js.map +1 -0
- package/util/extensionDeprecatedWarning.d.ts +5 -0
- package/util/extensionDeprecatedWarning.js +40 -0
- package/util/extensionDeprecatedWarning.js.map +1 -0
- package/util/extractRef.d.ts +2 -0
- package/util/extractRef.js +9 -0
- package/util/extractRef.js.map +1 -0
- package/util/extractTag.d.ts +2 -0
- package/util/extractTag.js +16 -0
- package/util/extractTag.js.map +1 -0
- package/util/focusMainWindowBlock.d.ts +2 -0
- package/util/focusMainWindowBlock.js +13 -0
- package/util/focusMainWindowBlock.js.map +1 -0
- package/util/getAuthorizationHeader.d.ts +2 -0
- package/util/getAuthorizationHeader.js +13 -0
- package/util/getAuthorizationHeader.js.map +1 -0
- package/util/getLocalStorageKey.d.ts +2 -0
- package/util/getLocalStorageKey.js +5 -0
- package/util/getLocalStorageKey.js.map +1 -0
- package/util/getOauth.d.ts +2 -0
- package/util/getOauth.js +53 -0
- package/util/getOauth.js.map +1 -0
- package/util/getOauthAccounts.d.ts +2 -0
- package/util/getOauthAccounts.js +23 -0
- package/util/getOauthAccounts.js.map +1 -0
- package/util/getRenderRoot.d.ts +2 -0
- package/util/getRenderRoot.js +19 -0
- package/util/getRenderRoot.js.map +1 -0
- package/util/getSettingIntFromTree.d.ts +7 -0
- package/util/getSettingIntFromTree.js +12 -0
- package/util/getSettingIntFromTree.js.map +1 -0
- package/util/getSettingValueFromTree.d.ts +8 -0
- package/util/getSettingValueFromTree.js +15 -0
- package/util/getSettingValueFromTree.js.map +1 -0
- package/util/getSettingValuesFromTree.d.ts +7 -0
- package/util/getSettingValuesFromTree.js +13 -0
- package/util/getSettingValuesFromTree.js.map +1 -0
- package/util/getSubTree.d.ts +8 -0
- package/util/getSubTree.js +20 -0
- package/util/getSubTree.js.map +1 -0
- package/util/getToken.d.ts +2 -0
- package/util/getToken.js +11 -0
- package/util/getToken.js.map +1 -0
- package/util/getTokenFromTree.d.ts +3 -0
- package/util/getTokenFromTree.js +5 -0
- package/util/getTokenFromTree.js.map +1 -0
- package/util/getWorkerClient.d.ts +12 -0
- package/util/getWorkerClient.js +42 -0
- package/util/getWorkerClient.js.map +1 -0
- package/util/handleBodyFetch.d.ts +3 -0
- package/util/handleBodyFetch.js +22 -0
- package/util/handleBodyFetch.js.map +1 -0
- package/util/handleFetch.d.ts +13 -0
- package/util/handleFetch.js +41 -0
- package/util/handleFetch.js.map +1 -0
- package/util/handleUrlFetch.d.ts +3 -0
- package/util/handleUrlFetch.js +20 -0
- package/util/handleUrlFetch.js.map +1 -0
- package/util/idToTitle.d.ts +2 -0
- package/util/idToTitle.js +9 -0
- package/util/idToTitle.js.map +1 -0
- package/{src/util/index.ts → util/index.d.ts} +4 -4
- package/util/index.js +55 -0
- package/util/index.js.map +1 -0
- package/util/isControl.d.ts +2 -0
- package/util/isControl.js +5 -0
- package/util/isControl.js.map +1 -0
- package/util/localStorageGet.d.ts +2 -0
- package/util/localStorageGet.js +9 -0
- package/util/localStorageGet.js.map +1 -0
- package/util/localStorageRemove.d.ts +2 -0
- package/util/localStorageRemove.js +7 -0
- package/util/localStorageRemove.js.map +1 -0
- package/util/localStorageSet.d.ts +2 -0
- package/util/localStorageSet.js +9 -0
- package/util/localStorageSet.js.map +1 -0
- package/util/registerExperimentalMode.d.ts +6 -0
- package/util/registerExperimentalMode.js +66 -0
- package/util/registerExperimentalMode.js.map +1 -0
- package/util/registerSmartBlocksCommand.d.ts +3 -0
- package/util/registerSmartBlocksCommand.js +24 -0
- package/util/registerSmartBlocksCommand.js.map +1 -0
- package/util/removeFromRegistry.d.ts +3 -0
- package/util/removeFromRegistry.js +8 -0
- package/util/removeFromRegistry.js.map +1 -0
- package/util/renderOverlay.d.ts +12 -0
- package/util/renderOverlay.js +49 -0
- package/util/renderOverlay.js.map +1 -0
- package/util/renderWithUnmount.d.ts +4 -0
- package/util/renderWithUnmount.js +45 -0
- package/util/renderWithUnmount.js.map +1 -0
- package/util/runExtension.d.ts +11 -0
- package/util/runExtension.js +175 -0
- package/util/runExtension.js.map +1 -0
- package/util/setInputSetting.d.ts +7 -0
- package/util/setInputSetting.js +38 -0
- package/util/setInputSetting.js.map +1 -0
- package/util/setInputSettings.d.ts +7 -0
- package/util/setInputSettings.js +29 -0
- package/util/setInputSettings.js.map +1 -0
- package/util/stripUid.d.ts +3 -0
- package/util/stripUid.js +11 -0
- package/util/stripUid.js.map +1 -0
- package/util/toConfigPageName.d.ts +2 -0
- package/util/toConfigPageName.js +5 -0
- package/util/toConfigPageName.js.map +1 -0
- package/util/toFlexRegex.d.ts +2 -0
- package/util/toFlexRegex.js +5 -0
- package/util/toFlexRegex.js.map +1 -0
- package/writes/clearBlockById.d.ts +2 -0
- package/writes/clearBlockById.js +18 -0
- package/writes/clearBlockById.js.map +1 -0
- package/writes/clearBlockByUid.d.ts +2 -0
- package/writes/clearBlockByUid.js +17 -0
- package/writes/clearBlockByUid.js.map +1 -0
- package/writes/createBlock.d.ts +8 -0
- package/writes/createBlock.js +29 -0
- package/writes/createBlock.js.map +1 -0
- package/writes/createPage.d.ts +7 -0
- package/writes/createPage.js +21 -0
- package/writes/createPage.js.map +1 -0
- package/writes/deleteBlock.d.ts +2 -0
- package/writes/deleteBlock.js +11 -0
- package/writes/deleteBlock.js.map +1 -0
- package/writes/index.js +23 -0
- package/writes/index.js.map +1 -0
- package/writes/openBlockInSidebar.d.ts +2 -0
- package/writes/openBlockInSidebar.js +14 -0
- package/writes/openBlockInSidebar.js.map +1 -0
- package/writes/submitActions.d.ts +8 -0
- package/writes/submitActions.js +37 -0
- package/writes/submitActions.js.map +1 -0
- package/writes/updateActiveBlock.d.ts +2 -0
- package/writes/updateActiveBlock.js +18 -0
- package/writes/updateActiveBlock.js.map +1 -0
- package/writes/updateBlock.d.ts +5 -0
- package/writes/updateBlock.js +24 -0
- package/writes/updateBlock.js.map +1 -0
- package/.eslintrc.json +0 -19
- package/.github/workflows/main.yaml +0 -34
- package/docs/components.md +0 -32
- package/docs/date.md +0 -13
- package/docs/dom.md +0 -58
- package/docs/events.md +0 -16
- package/docs/hooks.md +0 -15
- package/docs/marked.md +0 -56
- package/docs/queries.md +0 -24
- package/docs/scripts.md +0 -20
- package/docs/types.md +0 -32
- package/docs/util.md +0 -38
- package/docs/writes.md +0 -23
- package/patches/@blueprintjs+core+3.50.4.patch +0 -48
- package/patches/@blueprintjs+select+3.18.6.patch +0 -12
- package/patches/dotenv+16.3.1.patch +0 -12
- package/src/components/AutocompleteInput.tsx +0 -248
- package/src/components/BlockErrorBoundary.tsx +0 -39
- package/src/components/BlockInput.tsx +0 -117
- package/src/components/ComponentContainer.tsx +0 -70
- package/src/components/ConfigPage.tsx +0 -320
- package/src/components/ConfigPanels/BlockPanel.tsx +0 -60
- package/src/components/ConfigPanels/BlocksPanel.tsx +0 -100
- package/src/components/ConfigPanels/CustomPanel.tsx +0 -41
- package/src/components/ConfigPanels/FlagPanel.tsx +0 -48
- package/src/components/ConfigPanels/MultiChildPanel.tsx +0 -99
- package/src/components/ConfigPanels/MultiTextPanel.tsx +0 -23
- package/src/components/ConfigPanels/NumberPanel.tsx +0 -36
- package/src/components/ConfigPanels/OauthPanel.tsx +0 -127
- package/src/components/ConfigPanels/PagesPanel.tsx +0 -19
- package/src/components/ConfigPanels/SelectPanel.tsx +0 -46
- package/src/components/ConfigPanels/TextPanel.tsx +0 -44
- package/src/components/ConfigPanels/TimePanel.tsx +0 -45
- package/src/components/ConfigPanels/getBrandColors.tsx +0 -31
- package/src/components/ConfigPanels/types.ts +0 -111
- package/src/components/ConfigPanels/useSingleChildValue.tsx +0 -63
- package/src/components/CursorMenu.tsx +0 -286
- package/src/components/Description.tsx +0 -31
- package/src/components/ExtensionApiContext.tsx +0 -24
- package/src/components/ExternalLogin.tsx +0 -190
- package/src/components/Filter.tsx +0 -313
- package/src/components/FormDialog.tsx +0 -503
- package/src/components/Loading.tsx +0 -33
- package/src/components/MenuItemSelect.tsx +0 -93
- package/src/components/OauthPanel.tsx +0 -62
- package/src/components/OauthSelect.tsx +0 -40
- package/src/components/PageInput.tsx +0 -17
- package/src/components/PageLink.tsx +0 -50
- package/src/components/ProgressDialog.tsx +0 -85
- package/src/components/SimpleAlert.tsx +0 -103
- package/src/components/Toast.tsx +0 -85
- package/src/components/index.ts +0 -5
- package/src/components.tsx +0 -285
- package/src/date/constants.ts +0 -19
- package/src/date/parseNlpDate.ts +0 -255
- package/src/date/parseRoamDateUid.ts +0 -6
- package/src/dom/addBlockCommand.ts +0 -59
- package/src/dom/addKeyboardTriggers.ts +0 -52
- package/src/dom/addOldRoamJSDependency.ts +0 -10
- package/src/dom/addRoamJSDependency.ts +0 -7
- package/src/dom/addScriptAsDependency.ts +0 -24
- package/src/dom/addStyle.ts +0 -11
- package/src/dom/constants.ts +0 -1
- package/src/dom/createBlockObserver.ts +0 -44
- package/src/dom/createButtonObserver.ts +0 -31
- package/src/dom/createDivObserver.ts +0 -15
- package/src/dom/createHTMLObserver.ts +0 -44
- package/src/dom/createHashtagObserver.ts +0 -22
- package/src/dom/createIconButton.ts +0 -13
- package/src/dom/createObserver.ts +0 -15
- package/src/dom/createOverlayObserver.ts +0 -7
- package/src/dom/createPageObserver.ts +0 -37
- package/src/dom/createPageTitleObserver.ts +0 -43
- package/src/dom/elToTitle.ts +0 -21
- package/src/dom/genericError.ts +0 -13
- package/src/dom/getActiveUids.ts +0 -6
- package/src/dom/getBlockUidFromTarget.ts +0 -39
- package/src/dom/getCurrentPageUid.ts +0 -5
- package/src/dom/getDomRefs.ts +0 -15
- package/src/dom/getDropUidOffset.ts +0 -36
- package/src/dom/getMutatedNodes.ts +0 -31
- package/src/dom/getPageTitleByHtmlElement.ts +0 -19
- package/src/dom/getPageTitleValueByHtmlElement.ts +0 -8
- package/src/dom/getReferenceBlockUid.ts +0 -22
- package/src/dom/getRoamUrl.ts +0 -6
- package/src/dom/getRoamUrlByPage.ts +0 -9
- package/src/dom/getUids.ts +0 -9
- package/src/dom/getUidsFromButton.ts +0 -9
- package/src/dom/getUidsFromId.ts +0 -13
- package/src/dom/parseRoamBlocksToHtml.ts +0 -118
- package/src/dom/resolveRefs.ts +0 -31
- package/src/events/watchOnce.ts +0 -17
- package/src/hooks/useArrowKeyDown.ts +0 -72
- package/src/hooks/useSubTree.ts +0 -16
- package/src/marked/index.ts +0 -619
- package/src/queries/compileDatalog.ts +0 -81
- package/src/queries/getAllBlockUids.ts +0 -6
- package/src/queries/getAllBlockUidsAndTexts.ts +0 -6
- package/src/queries/getAllPageNames.ts +0 -6
- package/src/queries/getAttributeValueByBlockAndName.ts +0 -23
- package/src/queries/getBasicTreeByParentUid.ts +0 -21
- package/src/queries/getBlockUidAndTextIncludingText.ts +0 -15
- package/src/queries/getBlockUidByTextOnPage.ts +0 -12
- package/src/queries/getBlockUidsAndTextsReferencingPage.ts +0 -18
- package/src/queries/getBlockUidsByPageTitle.ts +0 -12
- package/src/queries/getBlockUidsReferencingBlock.ts +0 -10
- package/src/queries/getBlockUidsReferencingPage.ts +0 -13
- package/src/queries/getBlockUidsWithParentUid.ts +0 -10
- package/src/queries/getChildrenLengthByPageUid.ts +0 -7
- package/src/queries/getChildrenLengthByParentUid.ts +0 -6
- package/src/queries/getCreateTimeByBlockUid.ts +0 -6
- package/src/queries/getCurrentUser.ts +0 -12
- package/src/queries/getCurrentUserDisplayName.ts +0 -9
- package/src/queries/getCurrentUserEmail.ts +0 -12
- package/src/queries/getCurrentUserUid.ts +0 -12
- package/src/queries/getDisplayNameByEmail.ts +0 -6
- package/src/queries/getDisplayNameByUid.ts +0 -6
- package/src/queries/getEditTimeByBlockUid.ts +0 -6
- package/src/queries/getEditedUserEmailByBlockUid.ts +0 -6
- package/src/queries/getFirstChildTextByBlockUid.ts +0 -8
- package/src/queries/getFirstChildUidByBlockUid.ts +0 -6
- package/src/queries/getFullTreeByParentUid.ts +0 -60
- package/src/queries/getLinkedPageTitlesUnderUid.ts +0 -8
- package/src/queries/getNthChildUidByBlockUid.ts +0 -16
- package/src/queries/getOrderByBlockUid.ts +0 -6
- package/src/queries/getPageTitleByBlockUid.ts +0 -8
- package/src/queries/getPageTitleByPageUid.ts +0 -11
- package/src/queries/getPageTitleReferencesByPageTitle.ts +0 -13
- package/src/queries/getPageTitlesAndBlockUidsReferencingPage.ts +0 -18
- package/src/queries/getPageTitlesAndUidsDirectlyReferencingPage.ts +0 -18
- package/src/queries/getPageTitlesReferencingBlockUid.ts +0 -10
- package/src/queries/getPageTitlesStartingWithPrefix.ts +0 -8
- package/src/queries/getPageUidByBlockUid.ts +0 -8
- package/src/queries/getPageUidByPageTitle.ts +0 -10
- package/src/queries/getPageViewType.ts +0 -11
- package/src/queries/getParentTextByBlockUid.ts +0 -6
- package/src/queries/getParentTextByBlockUidAndTag.ts +0 -12
- package/src/queries/getParentUidByBlockUid.ts +0 -10
- package/src/queries/getParentUidsOfBlockUid.ts +0 -10
- package/src/queries/getSettingsByEmail.ts +0 -8
- package/src/queries/getShallowTreeByParentUid.ts +0 -17
- package/src/queries/getTextByBlockUid.ts +0 -8
- package/src/queries/index.ts +0 -5
- package/src/queries/isLiveBlock.ts +0 -4
- package/src/queries/isTagOnPage.ts +0 -12
- package/src/queries/normalizePageTitle.ts +0 -4
- package/src/scripts/index.ts +0 -2
- package/src/scripts/publishToRoamDepot.ts +0 -163
- package/src/testing/mockRoamEnvironment.ts +0 -1489
- package/src/types/index.ts +0 -260
- package/src/types/native.ts +0 -495
- package/src/types/query-builder.ts +0 -10
- package/src/types/smartblocks.ts +0 -39
- package/src/util/addInputSetting.ts +0 -33
- package/src/util/apiDelete.ts +0 -5
- package/src/util/apiGet.ts +0 -5
- package/src/util/apiPost.ts +0 -5
- package/src/util/apiPut.ts +0 -5
- package/src/util/createOverlayRender.ts +0 -12
- package/src/util/createTagRegex.ts +0 -7
- package/src/util/dispatchToRegistry.ts +0 -11
- package/src/util/env.ts +0 -44
- package/src/util/extensionApiContext.ts +0 -17
- package/src/util/extensionDeprecatedWarning.ts +0 -57
- package/src/util/extractRef.ts +0 -8
- package/src/util/extractTag.ts +0 -15
- package/src/util/focusMainWindowBlock.ts +0 -13
- package/src/util/getAuthorizationHeader.ts +0 -11
- package/src/util/getLocalStorageKey.ts +0 -4
- package/src/util/getOauth.ts +0 -57
- package/src/util/getOauthAccounts.ts +0 -26
- package/src/util/getRenderRoot.ts +0 -17
- package/src/util/getSettingIntFromTree.ts +0 -18
- package/src/util/getSettingValueFromTree.ts +0 -23
- package/src/util/getSettingValuesFromTree.ts +0 -20
- package/src/util/getSubTree.ts +0 -31
- package/src/util/getToken.ts +0 -12
- package/src/util/getTokenFromTree.ts +0 -6
- package/src/util/getWorkerClient.ts +0 -55
- package/src/util/handleBodyFetch.ts +0 -38
- package/src/util/handleFetch.ts +0 -70
- package/src/util/handleUrlFetch.ts +0 -30
- package/src/util/idToTitle.ts +0 -8
- package/src/util/isControl.ts +0 -4
- package/src/util/localStorageGet.ts +0 -6
- package/src/util/localStorageRemove.ts +0 -6
- package/src/util/localStorageSet.ts +0 -6
- package/src/util/registerExperimentalMode.ts +0 -76
- package/src/util/registerSmartBlocksCommand.ts +0 -23
- package/src/util/removeFromRegistry.ts +0 -11
- package/src/util/renderOverlay.ts +0 -69
- package/src/util/renderWithUnmount.ts +0 -50
- package/src/util/runExtension.ts +0 -206
- package/src/util/setInputSetting.ts +0 -46
- package/src/util/setInputSettings.ts +0 -37
- package/src/util/stripUid.ts +0 -10
- package/src/util/toConfigPageName.ts +0 -3
- package/src/util/toFlexRegex.ts +0 -7
- package/src/writes/clearBlockById.ts +0 -17
- package/src/writes/clearBlockByUid.ts +0 -16
- package/src/writes/createBlock.ts +0 -50
- package/src/writes/createPage.ts +0 -30
- package/src/writes/deleteBlock.ts +0 -9
- package/src/writes/openBlockInSidebar.ts +0 -13
- package/src/writes/submitActions.ts +0 -54
- package/src/writes/updateActiveBlock.ts +0 -17
- package/src/writes/updateBlock.ts +0 -33
- package/tests/backend.test.tsx +0 -28
- package/tests/date.test.ts +0 -26
- package/tests/dom.test.tsx +0 -10
- package/tests/index.test.tsx +0 -25
- package/tests/marked.test.ts +0 -474
- package/tests/util/createTagRegex.test.ts +0 -63
- package/tests/util/extractTag.test.ts +0 -17
- package/tests/util/toFlexRegex.test.ts +0 -7
- package/tsconfig.json +0 -26
- /package/{src/date/index.ts → date/index.d.ts} +0 -0
- /package/{src/dom/index.ts → dom/index.d.ts} +0 -0
- /package/{src/events/index.ts → events/index.d.ts} +0 -0
- /package/{src/hooks/index.ts → hooks/index.d.ts} +0 -0
- /package/{src/writes/index.ts → writes/index.d.ts} +0 -0
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
declare type FilterOptions<T> = (options: T[], query: string) => T[];
|
|
3
|
+
declare type OnNewItem<T> = (s: string) => T;
|
|
4
|
+
declare type ItemToQuery<T> = (t?: T) => string;
|
|
5
|
+
export declare type AutocompleteInputProps<T = string> = {
|
|
6
|
+
value?: T;
|
|
7
|
+
setValue: (q: T) => void;
|
|
8
|
+
showButton?: boolean;
|
|
9
|
+
onBlur?: (v: string) => void;
|
|
10
|
+
onConfirm?: () => void;
|
|
11
|
+
options?: T[];
|
|
12
|
+
placeholder?: string;
|
|
13
|
+
autoFocus?: boolean;
|
|
14
|
+
multiline?: boolean;
|
|
15
|
+
id?: string;
|
|
16
|
+
filterOptions?: FilterOptions<T>;
|
|
17
|
+
itemToQuery?: ItemToQuery<T>;
|
|
18
|
+
renderItem?: (props: {
|
|
19
|
+
item: T;
|
|
20
|
+
onClick: () => void;
|
|
21
|
+
active: boolean;
|
|
22
|
+
}) => React.ReactElement;
|
|
23
|
+
onNewItem?: OnNewItem<T>;
|
|
24
|
+
disabled?: boolean;
|
|
25
|
+
maxItemsDisplayed?: number;
|
|
26
|
+
};
|
|
27
|
+
declare const AutocompleteInput: <T extends unknown = string>({ value, setValue, onBlur, onConfirm, showButton, options, placeholder, autoFocus, multiline, id, filterOptions: _filterOptions, itemToQuery: _itemToQuery, renderItem, onNewItem: _onNewItem, disabled, maxItemsDisplayed, }: AutocompleteInputProps<T>) => React.ReactElement;
|
|
28
|
+
export default AutocompleteInput;
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const tslib_1 = require("tslib");
|
|
4
|
+
const core_1 = require("@blueprintjs/core");
|
|
5
|
+
const react_1 = tslib_1.__importStar(require("react"));
|
|
6
|
+
const useArrowKeyDown_1 = tslib_1.__importDefault(require("../hooks/useArrowKeyDown"));
|
|
7
|
+
const fuzzy_1 = tslib_1.__importDefault(require("fuzzy"));
|
|
8
|
+
// eslint-disable-next-line @typescript-eslint/no-unnecessary-type-constraint
|
|
9
|
+
const AutocompleteInput = ({ value, setValue, onBlur, onConfirm, showButton, options = [], placeholder = "Enter value", autoFocus, multiline, id, filterOptions: _filterOptions, itemToQuery: _itemToQuery, renderItem, onNewItem: _onNewItem, disabled, maxItemsDisplayed = Infinity, }) => {
|
|
10
|
+
const [isOpen, setIsOpen] = (0, react_1.useState)(false);
|
|
11
|
+
const itemToQuery = (0, react_1.useMemo)(() => _itemToQuery || ((s) => (s ? `${s}` : "")), [_itemToQuery]);
|
|
12
|
+
const [query, setQuery] = (0, react_1.useState)(() => itemToQuery(value));
|
|
13
|
+
const open = (0, react_1.useCallback)(() => setIsOpen(true), [setIsOpen]);
|
|
14
|
+
const close = (0, react_1.useCallback)(() => setIsOpen(false), [setIsOpen]);
|
|
15
|
+
const [isTyping, setIsTyping] = (0, react_1.useState)(false);
|
|
16
|
+
const filterOptions = (0, react_1.useMemo)(() => _filterOptions ||
|
|
17
|
+
((o, q) => fuzzy_1.default
|
|
18
|
+
.filter(q, o, { extract: itemToQuery })
|
|
19
|
+
.map((f) => f.original)
|
|
20
|
+
.filter((f) => !!f)), [_filterOptions, itemToQuery]);
|
|
21
|
+
const onNewItem = (0, react_1.useMemo)(() => _onNewItem || ((s) => s), [_onNewItem]);
|
|
22
|
+
const items = (0, react_1.useMemo)(() => (query ? filterOptions(options, query) : options).slice(0, maxItemsDisplayed), [query, options, filterOptions, maxItemsDisplayed]);
|
|
23
|
+
const menuRef = (0, react_1.useRef)(null);
|
|
24
|
+
const inputRef = (0, react_1.useRef)(null);
|
|
25
|
+
const onEnter = (0, react_1.useCallback)((value) => {
|
|
26
|
+
if (isOpen && value) {
|
|
27
|
+
setQuery(itemToQuery(value));
|
|
28
|
+
setValue(value);
|
|
29
|
+
setIsTyping(false);
|
|
30
|
+
}
|
|
31
|
+
else if (onConfirm) {
|
|
32
|
+
onConfirm();
|
|
33
|
+
}
|
|
34
|
+
else {
|
|
35
|
+
setIsOpen(true);
|
|
36
|
+
}
|
|
37
|
+
}, [setValue, onConfirm, isOpen]);
|
|
38
|
+
const { activeIndex, onKeyDown } = (0, useArrowKeyDown_1.default)({
|
|
39
|
+
onEnter,
|
|
40
|
+
results: items,
|
|
41
|
+
menuRef,
|
|
42
|
+
});
|
|
43
|
+
(0, react_1.useEffect)(() => {
|
|
44
|
+
if (!items.length || !isTyping)
|
|
45
|
+
close();
|
|
46
|
+
else
|
|
47
|
+
open();
|
|
48
|
+
}, [items, close, open, isTyping]);
|
|
49
|
+
(0, react_1.useEffect)(() => {
|
|
50
|
+
if (query && isOpen)
|
|
51
|
+
setValue(items[activeIndex] || onNewItem(query));
|
|
52
|
+
else if (query)
|
|
53
|
+
setValue(onNewItem(query));
|
|
54
|
+
}, [setValue, activeIndex, items, onNewItem, query]);
|
|
55
|
+
(0, react_1.useEffect)(() => {
|
|
56
|
+
if (inputRef.current &&
|
|
57
|
+
inputRef.current === document.activeElement &&
|
|
58
|
+
value) {
|
|
59
|
+
const index = itemToQuery(value).length;
|
|
60
|
+
inputRef.current.setSelectionRange(index, index);
|
|
61
|
+
}
|
|
62
|
+
const touchEndListener = (e) => {
|
|
63
|
+
if (!e.target ||
|
|
64
|
+
!menuRef.current ||
|
|
65
|
+
menuRef.current.contains(e.target)) {
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
68
|
+
if (!inputRef.current || inputRef.current.contains(e.target)) {
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
close();
|
|
72
|
+
};
|
|
73
|
+
document.body.addEventListener("touchend", touchEndListener);
|
|
74
|
+
return () => document.body.removeEventListener("touchend", touchEndListener);
|
|
75
|
+
}, [inputRef, menuRef, close]);
|
|
76
|
+
const Input = (0, react_1.useMemo)(() => (multiline ? core_1.TextArea : core_1.InputGroup), [multiline]);
|
|
77
|
+
return (react_1.default.createElement(core_1.Popover, { portalClassName: "roamjs-autocomplete-input", targetClassName: "roamjs-autocomplete-input-target", captureDismiss: true, isOpen: isOpen, onOpened: open, minimal: true, autoFocus: false, enforceFocus: false, position: core_1.PopoverPosition.BOTTOM_LEFT, modifiers: {
|
|
78
|
+
flip: { enabled: false },
|
|
79
|
+
preventOverflow: { enabled: false },
|
|
80
|
+
}, content: react_1.default.createElement(core_1.Menu, { className: "max-h-64 overflow-auto max-w-md", ulRef: menuRef }, items.map((t, i) => {
|
|
81
|
+
const onClick = () => {
|
|
82
|
+
var _a;
|
|
83
|
+
setIsTyping(false);
|
|
84
|
+
setValue(t);
|
|
85
|
+
setQuery(itemToQuery(t));
|
|
86
|
+
(_a = inputRef.current) === null || _a === void 0 ? void 0 : _a.focus();
|
|
87
|
+
};
|
|
88
|
+
const sharedProps = {
|
|
89
|
+
onClick,
|
|
90
|
+
onTouchEnd: onClick,
|
|
91
|
+
active: activeIndex === i,
|
|
92
|
+
};
|
|
93
|
+
return renderItem ? (react_1.default.createElement(react_1.default.Fragment, { key: i }, renderItem === null || renderItem === void 0 ? void 0 : renderItem(Object.assign({ item: t }, sharedProps)))) : (react_1.default.createElement(core_1.MenuItem, Object.assign({ text: itemToQuery(t), key: i, multiline: true }, sharedProps)));
|
|
94
|
+
})), target: react_1.default.createElement(Input, Object.assign({ disabled: disabled, value: query, onChange: (e) => {
|
|
95
|
+
setIsTyping(true);
|
|
96
|
+
setQuery(e.target.value);
|
|
97
|
+
}, autoFocus: autoFocus, placeholder: placeholder, onKeyDown: (e) => {
|
|
98
|
+
if (e.key === "Escape") {
|
|
99
|
+
e.stopPropagation();
|
|
100
|
+
close();
|
|
101
|
+
}
|
|
102
|
+
else {
|
|
103
|
+
onKeyDown(e);
|
|
104
|
+
}
|
|
105
|
+
}, id: id, onClick: () => setIsTyping(true), onBlur: (e) => {
|
|
106
|
+
var _a, _b;
|
|
107
|
+
if (e.relatedTarget === null ||
|
|
108
|
+
!((_b = (_a = e.relatedTarget).closest) === null || _b === void 0 ? void 0 : _b.call(_a, ".roamjs-autocomplete-input"))) {
|
|
109
|
+
setIsTyping(false);
|
|
110
|
+
}
|
|
111
|
+
if (onBlur) {
|
|
112
|
+
onBlur(e.target.value);
|
|
113
|
+
}
|
|
114
|
+
}, inputRef: inputRef }, (showButton
|
|
115
|
+
? {
|
|
116
|
+
rightElement: (react_1.default.createElement(core_1.Button, { icon: "add", minimal: true, onClick: () => onEnter() })),
|
|
117
|
+
}
|
|
118
|
+
: {}))) }));
|
|
119
|
+
};
|
|
120
|
+
exports.default = AutocompleteInput;
|
|
121
|
+
//# sourceMappingURL=AutocompleteInput.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AutocompleteInput.js","sourceRoot":"","sources":["../../src/components/AutocompleteInput.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n InputGroup,\n Menu,\n MenuItem,\n PopoverPosition,\n Popover,\n Button,\n TextArea,\n} from \"@blueprintjs/core\";\nimport React, {\n useState,\n useCallback,\n useMemo,\n useRef,\n useEffect,\n} from \"react\";\nimport useArrowKeyDown from \"../hooks/useArrowKeyDown\";\nimport fuzzy from \"fuzzy\";\n\ntype FilterOptions<T> = (options: T[], query: string) => T[];\ntype OnNewItem<T> = (s: string) => T;\ntype ItemToQuery<T> = (t?: T) => string;\n\nexport type AutocompleteInputProps<T = string> = {\n value?: T;\n setValue: (q: T) => void;\n showButton?: boolean;\n onBlur?: (v: string) => void;\n onConfirm?: () => void;\n options?: T[];\n placeholder?: string;\n autoFocus?: boolean;\n multiline?: boolean;\n id?: string;\n filterOptions?: FilterOptions<T>;\n itemToQuery?: ItemToQuery<T>;\n renderItem?: (props: {\n item: T;\n onClick: () => void;\n active: boolean;\n }) => React.ReactElement;\n onNewItem?: OnNewItem<T>;\n disabled?: boolean;\n maxItemsDisplayed?: number;\n};\n\n// eslint-disable-next-line @typescript-eslint/no-unnecessary-type-constraint\nconst AutocompleteInput = <T extends unknown = string>({\n value,\n setValue,\n onBlur,\n onConfirm,\n showButton,\n options = [],\n placeholder = \"Enter value\",\n autoFocus,\n multiline,\n id,\n filterOptions: _filterOptions,\n itemToQuery: _itemToQuery,\n renderItem,\n onNewItem: _onNewItem,\n disabled,\n maxItemsDisplayed = Infinity,\n}: AutocompleteInputProps<T>): React.ReactElement => {\n const [isOpen, setIsOpen] = useState(false);\n const itemToQuery = useMemo<ItemToQuery<T>>(\n () => _itemToQuery || ((s) => (s ? `${s}` : \"\")),\n [_itemToQuery]\n );\n const [query, setQuery] = useState<string>(() => itemToQuery(value));\n const open = useCallback(() => setIsOpen(true), [setIsOpen]);\n const close = useCallback(() => setIsOpen(false), [setIsOpen]);\n const [isTyping, setIsTyping] = useState(false);\n const filterOptions = useMemo<FilterOptions<T>>(\n () =>\n _filterOptions ||\n ((o, q) =>\n fuzzy\n .filter(q, o, { extract: itemToQuery })\n .map((f) => f.original)\n .filter((f): f is T => !!f)),\n [_filterOptions, itemToQuery]\n );\n const onNewItem = useMemo<OnNewItem<T>>(\n () => _onNewItem || ((s) => s as T),\n [_onNewItem]\n );\n\n const items = useMemo(\n () =>\n (query ? filterOptions(options, query) : options).slice(\n 0,\n maxItemsDisplayed\n ),\n [query, options, filterOptions, maxItemsDisplayed]\n );\n const menuRef = useRef<HTMLUListElement>(null);\n const inputRef = useRef<HTMLInputElement & HTMLTextAreaElement>(null);\n const onEnter = useCallback(\n (value?: T) => {\n if (isOpen && value) {\n setQuery(itemToQuery(value));\n setValue(value);\n setIsTyping(false);\n } else if (onConfirm) {\n onConfirm();\n } else {\n setIsOpen(true);\n }\n },\n [setValue, onConfirm, isOpen]\n );\n const { activeIndex, onKeyDown } = useArrowKeyDown({\n onEnter,\n results: items,\n menuRef,\n });\n useEffect(() => {\n if (!items.length || !isTyping) close();\n else open();\n }, [items, close, open, isTyping]);\n useEffect(() => {\n if (query && isOpen) setValue(items[activeIndex] || onNewItem(query));\n else if (query) setValue(onNewItem(query));\n }, [setValue, activeIndex, items, onNewItem, query]);\n useEffect(() => {\n if (\n inputRef.current &&\n inputRef.current === document.activeElement &&\n value\n ) {\n const index = itemToQuery(value).length;\n inputRef.current.setSelectionRange(index, index);\n }\n const touchEndListener = (e: TouchEvent) => {\n if (\n !e.target ||\n !menuRef.current ||\n menuRef.current.contains(e.target as Element)\n ) {\n return;\n }\n if (!inputRef.current || inputRef.current.contains(e.target as Element)) {\n return;\n }\n close();\n };\n document.body.addEventListener(\"touchend\", touchEndListener);\n return () =>\n document.body.removeEventListener(\"touchend\", touchEndListener);\n }, [inputRef, menuRef, close]);\n const Input = useMemo(() => (multiline ? TextArea : InputGroup), [multiline]);\n return (\n <Popover\n portalClassName={\"roamjs-autocomplete-input\"}\n targetClassName={\"roamjs-autocomplete-input-target\"}\n captureDismiss={true}\n isOpen={isOpen}\n onOpened={open}\n minimal\n autoFocus={false}\n enforceFocus={false}\n position={PopoverPosition.BOTTOM_LEFT}\n modifiers={{\n flip: { enabled: false },\n preventOverflow: { enabled: false },\n }}\n content={\n <Menu className={\"max-h-64 overflow-auto max-w-md\"} ulRef={menuRef}>\n {items.map((t, i) => {\n const onClick = () => {\n setIsTyping(false);\n setValue(t);\n setQuery(itemToQuery(t));\n inputRef.current?.focus();\n };\n const sharedProps = {\n onClick,\n onTouchEnd: onClick,\n active: activeIndex === i,\n };\n return renderItem ? (\n <React.Fragment key={i}>\n {renderItem?.({\n item: t,\n ...sharedProps,\n })}\n </React.Fragment>\n ) : (\n <MenuItem\n text={itemToQuery(t)}\n key={i}\n multiline\n {...sharedProps}\n />\n );\n })}\n </Menu>\n }\n target={\n <Input\n disabled={disabled}\n value={query}\n onChange={(e) => {\n setIsTyping(true);\n setQuery(e.target.value);\n }}\n autoFocus={autoFocus}\n placeholder={placeholder}\n onKeyDown={(e) => {\n if (e.key === \"Escape\") {\n e.stopPropagation();\n close();\n } else {\n onKeyDown(e);\n }\n }}\n id={id}\n onClick={() => setIsTyping(true)}\n onBlur={(e) => {\n if (\n e.relatedTarget === null ||\n !(e.relatedTarget as HTMLElement).closest?.(\n \".roamjs-autocomplete-input\"\n )\n ) {\n setIsTyping(false);\n }\n if (onBlur) {\n onBlur(e.target.value);\n }\n }}\n inputRef={inputRef}\n {...(showButton\n ? {\n rightElement: (\n <Button icon={\"add\"} minimal onClick={() => onEnter()} />\n ),\n }\n : {})}\n />\n }\n />\n );\n};\n\nexport default AutocompleteInput;\n"]}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
declare type BlockErrorBoundaryProps = {
|
|
3
|
+
blockUid: string;
|
|
4
|
+
message: string;
|
|
5
|
+
children: React.ReactNode;
|
|
6
|
+
};
|
|
7
|
+
declare type BlockErrorBoundaryState = {
|
|
8
|
+
hasError: boolean;
|
|
9
|
+
};
|
|
10
|
+
declare class BlockErrorBoundary extends React.Component<BlockErrorBoundaryProps, BlockErrorBoundaryState> {
|
|
11
|
+
constructor(props: BlockErrorBoundaryProps);
|
|
12
|
+
static getDerivedStateFromError(): BlockErrorBoundaryState;
|
|
13
|
+
componentDidCatch(error: Error): void;
|
|
14
|
+
render(): React.ReactNode;
|
|
15
|
+
}
|
|
16
|
+
export default BlockErrorBoundary;
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const tslib_1 = require("tslib");
|
|
4
|
+
const react_1 = tslib_1.__importDefault(require("react"));
|
|
5
|
+
const createBlock_1 = tslib_1.__importDefault(require("../writes/createBlock"));
|
|
6
|
+
class BlockErrorBoundary extends react_1.default.Component {
|
|
7
|
+
constructor(props) {
|
|
8
|
+
super(props);
|
|
9
|
+
this.state = { hasError: false };
|
|
10
|
+
}
|
|
11
|
+
static getDerivedStateFromError() {
|
|
12
|
+
return { hasError: true };
|
|
13
|
+
}
|
|
14
|
+
componentDidCatch(error) {
|
|
15
|
+
(0, createBlock_1.default)({
|
|
16
|
+
node: { text: this.props.message.replace("{ERROR}", error.message) },
|
|
17
|
+
parentUid: this.props.blockUid,
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
render() {
|
|
21
|
+
if (this.state.hasError) {
|
|
22
|
+
return react_1.default.createElement("div", null, "Component Failed To Load");
|
|
23
|
+
}
|
|
24
|
+
return this.props.children;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
exports.default = BlockErrorBoundary;
|
|
28
|
+
//# sourceMappingURL=BlockErrorBoundary.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BlockErrorBoundary.js","sourceRoot":"","sources":["../../src/components/BlockErrorBoundary.tsx"],"names":[],"mappings":";;;AAAA,0DAA0B;AAC1B,gFAAgD;AAShD,MAAM,kBAAmB,SAAQ,eAAK,CAAC,SAGtC;IACC,YAAY,KAA8B;QACxC,KAAK,CAAC,KAAK,CAAC,CAAC;QACb,IAAI,CAAC,KAAK,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;IACnC,CAAC;IAED,MAAM,CAAC,wBAAwB;QAC7B,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IAC5B,CAAC;IAED,iBAAiB,CAAC,KAAY;QAC5B,IAAA,qBAAW,EAAC;YACV,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,EAAE,KAAK,CAAC,OAAO,CAAC,EAAE;YACpE,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ;SAC/B,CAAC,CAAC;IACL,CAAC;IAED,MAAM;QACJ,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE;YACvB,OAAO,sEAAmC,CAAC;SAC5C;QACD,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC;IAC7B,CAAC;CACF;AAED,kBAAe,kBAAkB,CAAC","sourcesContent":["import React from \"react\";\nimport createBlock from \"../writes/createBlock\";\n\ntype BlockErrorBoundaryProps = {\n blockUid: string;\n message: string;\n children: React.ReactNode;\n};\ntype BlockErrorBoundaryState = { hasError: boolean };\n\nclass BlockErrorBoundary extends React.Component<\n BlockErrorBoundaryProps,\n BlockErrorBoundaryState\n> {\n constructor(props: BlockErrorBoundaryProps) {\n super(props);\n this.state = { hasError: false };\n }\n\n static getDerivedStateFromError(): BlockErrorBoundaryState {\n return { hasError: true };\n }\n\n componentDidCatch(error: Error): void {\n createBlock({\n node: { text: this.props.message.replace(\"{ERROR}\", error.message) },\n parentUid: this.props.blockUid,\n });\n }\n\n render(): React.ReactNode {\n if (this.state.hasError) {\n return <div>Component Failed To Load</div>;\n }\n return this.props.children;\n }\n}\n\nexport default BlockErrorBoundary;\n"]}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
declare const BlockInput: ({ value, setValue, onBlur, onConfirm, getAllBlocks, autoFocus, }: {
|
|
3
|
+
value: string;
|
|
4
|
+
setValue: (q: string, uid?: string) => void;
|
|
5
|
+
onBlur?: ((v: string) => void) | undefined;
|
|
6
|
+
onConfirm?: (() => void) | undefined;
|
|
7
|
+
getAllBlocks?: (() => {
|
|
8
|
+
text: string;
|
|
9
|
+
uid: string;
|
|
10
|
+
}[]) | undefined;
|
|
11
|
+
autoFocus?: boolean | undefined;
|
|
12
|
+
}) => React.ReactElement;
|
|
13
|
+
export default BlockInput;
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const tslib_1 = require("tslib");
|
|
4
|
+
const core_1 = require("@blueprintjs/core");
|
|
5
|
+
const react_1 = tslib_1.__importStar(require("react"));
|
|
6
|
+
const getAllBlockUidsAndTexts_1 = tslib_1.__importDefault(require("../queries/getAllBlockUidsAndTexts"));
|
|
7
|
+
const useArrowKeyDown_1 = tslib_1.__importDefault(require("../hooks/useArrowKeyDown"));
|
|
8
|
+
const searchBlocksByString = (q, blocks) => {
|
|
9
|
+
const regex = new RegExp(q, "i");
|
|
10
|
+
return blocks.filter((a) => regex.test(a.text)).slice(0, 9);
|
|
11
|
+
};
|
|
12
|
+
const BlockInput = ({ value, setValue, onBlur, onConfirm, getAllBlocks = getAllBlockUidsAndTexts_1.default, autoFocus, }) => {
|
|
13
|
+
const [isOpen, setIsOpen] = (0, react_1.useState)(false);
|
|
14
|
+
const open = (0, react_1.useCallback)(() => setIsOpen(true), [setIsOpen]);
|
|
15
|
+
const close = (0, react_1.useCallback)(() => setIsOpen(false), [setIsOpen]);
|
|
16
|
+
const allBlocks = (0, react_1.useMemo)(getAllBlocks, []);
|
|
17
|
+
const items = (0, react_1.useMemo)(() => (value && isOpen ? searchBlocksByString(value, allBlocks) : []), [value, allBlocks]);
|
|
18
|
+
const menuRef = (0, react_1.useRef)(null);
|
|
19
|
+
const inputRef = (0, react_1.useRef)(null);
|
|
20
|
+
const { activeIndex, onKeyDown } = (0, useArrowKeyDown_1.default)({
|
|
21
|
+
onEnter: (value) => {
|
|
22
|
+
if (isOpen) {
|
|
23
|
+
setValue(value.text, value.uid);
|
|
24
|
+
close();
|
|
25
|
+
}
|
|
26
|
+
else if (onConfirm) {
|
|
27
|
+
onConfirm();
|
|
28
|
+
}
|
|
29
|
+
},
|
|
30
|
+
results: items,
|
|
31
|
+
menuRef,
|
|
32
|
+
});
|
|
33
|
+
return (react_1.default.createElement(core_1.Popover, { portalClassName: "roamjs-block-input", targetClassName: "roamjs-block-input-target", captureDismiss: true, isOpen: isOpen, onOpened: open, minimal: true, autoFocus: false, enforceFocus: false, position: core_1.PopoverPosition.BOTTOM_LEFT, modifiers: {
|
|
34
|
+
flip: { enabled: false },
|
|
35
|
+
preventOverflow: { enabled: false },
|
|
36
|
+
}, content: react_1.default.createElement(core_1.Menu, { className: "max-h-64 overflow-auto max-w-md", ulRef: menuRef }, items.map((t, i) => (react_1.default.createElement(core_1.MenuItem, { text: t.text, active: activeIndex === i, key: t.uid, multiline: true, onClick: () => {
|
|
37
|
+
var _a;
|
|
38
|
+
setValue(t.text, t.uid);
|
|
39
|
+
close();
|
|
40
|
+
(_a = inputRef.current) === null || _a === void 0 ? void 0 : _a.focus();
|
|
41
|
+
} })))), target: react_1.default.createElement(core_1.InputGroup, { value: value || "", onChange: (e) => {
|
|
42
|
+
setValue(e.target.value);
|
|
43
|
+
setIsOpen(!!e.target.value);
|
|
44
|
+
}, placeholder: "Search for a block", onKeyDown: onKeyDown, onBlur: (e) => {
|
|
45
|
+
var _a, _b;
|
|
46
|
+
if (e.relatedTarget &&
|
|
47
|
+
!((_b = (_a = e.relatedTarget).closest) === null || _b === void 0 ? void 0 : _b.call(_a, ".roamjs-block-input"))) {
|
|
48
|
+
close();
|
|
49
|
+
}
|
|
50
|
+
if (onBlur) {
|
|
51
|
+
onBlur(e.target.value);
|
|
52
|
+
}
|
|
53
|
+
}, inputRef: inputRef, autoFocus: autoFocus }) }));
|
|
54
|
+
};
|
|
55
|
+
exports.default = BlockInput;
|
|
56
|
+
//# sourceMappingURL=BlockInput.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BlockInput.js","sourceRoot":"","sources":["../../src/components/BlockInput.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n Popover,\n PopoverPosition,\n Menu,\n MenuItem,\n InputGroup,\n} from \"@blueprintjs/core\";\nimport React, { useCallback, useMemo, useRef, useState } from \"react\";\nimport getAllBlockUidsAndTexts from \"../queries/getAllBlockUidsAndTexts\";\nimport useArrowKeyDown from \"../hooks/useArrowKeyDown\";\n\nconst searchBlocksByString = (\n q: string,\n blocks: { text: string; uid: string }[]\n) => {\n const regex = new RegExp(q, \"i\");\n return blocks.filter((a) => regex.test(a.text)).slice(0, 9);\n};\n\nconst BlockInput = ({\n value,\n setValue,\n onBlur,\n onConfirm,\n getAllBlocks = getAllBlockUidsAndTexts,\n autoFocus,\n}: {\n value: string;\n setValue: (q: string, uid?: string) => void;\n onBlur?: (v: string) => void;\n onConfirm?: () => void;\n getAllBlocks?: () => { text: string; uid: string }[];\n autoFocus?: boolean;\n}): React.ReactElement => {\n const [isOpen, setIsOpen] = useState(false);\n const open = useCallback(() => setIsOpen(true), [setIsOpen]);\n const close = useCallback(() => setIsOpen(false), [setIsOpen]);\n const allBlocks = useMemo(getAllBlocks, []);\n const items = useMemo(\n () => (value && isOpen ? searchBlocksByString(value, allBlocks) : []),\n [value, allBlocks]\n );\n const menuRef = useRef<HTMLUListElement>(null);\n const inputRef = useRef<HTMLInputElement>(null);\n const { activeIndex, onKeyDown } = useArrowKeyDown({\n onEnter: (value) => {\n if (isOpen) {\n setValue(value.text, value.uid);\n close();\n } else if (onConfirm) {\n onConfirm();\n }\n },\n results: items,\n menuRef,\n });\n return (\n <Popover\n portalClassName={\"roamjs-block-input\"}\n targetClassName={\"roamjs-block-input-target\"}\n captureDismiss={true}\n isOpen={isOpen}\n onOpened={open}\n minimal={true}\n autoFocus={false}\n enforceFocus={false}\n position={PopoverPosition.BOTTOM_LEFT}\n modifiers={{\n flip: { enabled: false },\n preventOverflow: { enabled: false },\n }}\n content={\n <Menu className={\"max-h-64 overflow-auto max-w-md\"} ulRef={menuRef}>\n {items.map((t, i) => (\n <MenuItem\n text={t.text}\n active={activeIndex === i}\n key={t.uid}\n multiline\n onClick={() => {\n setValue(t.text, t.uid);\n close();\n inputRef.current?.focus();\n }}\n />\n ))}\n </Menu>\n }\n target={\n <InputGroup\n value={value || \"\"}\n onChange={(e: React.ChangeEvent<HTMLInputElement>) => {\n setValue(e.target.value);\n setIsOpen(!!e.target.value);\n }}\n placeholder={\"Search for a block\"}\n onKeyDown={onKeyDown}\n onBlur={(e) => {\n if (\n e.relatedTarget &&\n !(e.relatedTarget as HTMLElement).closest?.(\".roamjs-block-input\")\n ) {\n close();\n }\n if (onBlur) {\n onBlur(e.target.value);\n }\n }}\n inputRef={inputRef}\n autoFocus={autoFocus}\n />\n }\n />\n );\n};\n\nexport default BlockInput;\n"]}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { OnloadArgs } from "../types/native";
|
|
3
|
+
declare const ComponentContainer: React.FunctionComponent<{
|
|
4
|
+
blockId?: string;
|
|
5
|
+
className?: string;
|
|
6
|
+
children?: React.ReactNode;
|
|
7
|
+
}>;
|
|
8
|
+
export declare const createComponentRender: (Fc: (props: {
|
|
9
|
+
blockUid: string;
|
|
10
|
+
}) => React.ReactElement, className?: string) => (b: HTMLButtonElement, args?: OnloadArgs) => void;
|
|
11
|
+
export default ComponentContainer;
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createComponentRender = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const core_1 = require("@blueprintjs/core");
|
|
6
|
+
const react_1 = tslib_1.__importStar(require("react"));
|
|
7
|
+
const getUidsFromId_1 = tslib_1.__importDefault(require("../dom/getUidsFromId"));
|
|
8
|
+
const getBlockUidFromTarget_1 = tslib_1.__importDefault(require("../dom/getBlockUidFromTarget"));
|
|
9
|
+
const renderWithUnmount_1 = tslib_1.__importDefault(require("../util/renderWithUnmount"));
|
|
10
|
+
const ComponentContainer = ({ blockId, className, children }) => {
|
|
11
|
+
const [showIcons, setShowIcons] = (0, react_1.useState)(false);
|
|
12
|
+
const appear = (0, react_1.useCallback)(() => setShowIcons(true), [setShowIcons]);
|
|
13
|
+
const disappear = (0, react_1.useCallback)(() => setShowIcons(false), [setShowIcons]);
|
|
14
|
+
const { blockUid, windowId } = (0, getUidsFromId_1.default)(blockId);
|
|
15
|
+
return (react_1.default.createElement("div", { className: className, onMouseOver: appear, onMouseLeave: disappear, style: { position: "relative", width: "fit-content", minWidth: 300 } },
|
|
16
|
+
showIcons && (react_1.default.createElement("div", { className: "roamjs-edit-component absolute top-2 right-2 z-50" }, blockId && (react_1.default.createElement(core_1.Button, { icon: "edit", minimal: true, onClick: () => window.roamAlphaAPI.ui.setBlockFocusAndSelection({
|
|
17
|
+
location: { "block-uid": blockUid, "window-id": windowId },
|
|
18
|
+
}) })))),
|
|
19
|
+
children));
|
|
20
|
+
};
|
|
21
|
+
const createComponentRender = (Fc, className) => (b, args) => {
|
|
22
|
+
var _a, _b;
|
|
23
|
+
if (b.parentElement) {
|
|
24
|
+
b.parentElement.onmousedown = (e) => e.stopPropagation();
|
|
25
|
+
const blockUid = (0, getBlockUidFromTarget_1.default)(b);
|
|
26
|
+
const possibleBlockId = (_a = b.closest(".roam-block")) === null || _a === void 0 ? void 0 : _a.id;
|
|
27
|
+
const blockId = ((_b = possibleBlockId === null || possibleBlockId === void 0 ? void 0 : possibleBlockId.endsWith) === null || _b === void 0 ? void 0 : _b.call(possibleBlockId, blockUid))
|
|
28
|
+
? possibleBlockId
|
|
29
|
+
: undefined;
|
|
30
|
+
if (blockUid) {
|
|
31
|
+
(0, renderWithUnmount_1.default)(react_1.default.createElement(ComponentContainer, { blockId: blockId, className: className },
|
|
32
|
+
react_1.default.createElement(Fc, { blockUid: blockUid })), b.parentElement, args);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
};
|
|
36
|
+
exports.createComponentRender = createComponentRender;
|
|
37
|
+
exports.default = ComponentContainer;
|
|
38
|
+
//# sourceMappingURL=ComponentContainer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ComponentContainer.js","sourceRoot":"","sources":["../../src/components/ComponentContainer.tsx"],"names":[],"mappings":";;;;AAAA,4CAA2C;AAC3C,uDAAqD;AACrD,iFAAiD;AACjD,iGAAiE;AACjE,0FAA0D;AAG1D,MAAM,kBAAkB,GAInB,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE;IACxC,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,IAAA,gBAAQ,EAAC,KAAK,CAAC,CAAC;IAClD,MAAM,MAAM,GAAG,IAAA,mBAAW,EAAC,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC;IACrE,MAAM,SAAS,GAAG,IAAA,mBAAW,EAAC,GAAG,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC;IAEzE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,IAAA,uBAAa,EAAC,OAAO,CAAC,CAAC;IACtD,OAAO,CACL,uCACE,SAAS,EAAE,SAAS,EACpB,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,SAAS,EACvB,KAAK,EAAE,EAAE,QAAQ,EAAE,UAAU,EAAE,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,GAAG,EAAE;QAEnE,SAAS,IAAI,CACZ,uCAAK,SAAS,EAAE,mDAAmD,IAChE,OAAO,IAAI,CACV,8BAAC,aAAM,IACL,IAAI,EAAC,MAAM,EACX,OAAO,QACP,OAAO,EAAE,GAAG,EAAE,CACZ,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC,yBAAyB,CAAC;gBAC/C,QAAQ,EAAE,EAAE,WAAW,EAAE,QAAQ,EAAE,WAAW,EAAE,QAAQ,EAAE;aAC3D,CAAC,GAEJ,CACH,CACG,CACP;QACA,QAAQ,CACL,CACP,CAAC;AACJ,CAAC,CAAC;AAEK,MAAM,qBAAqB,GAChC,CACE,EAAuD,EACvD,SAAkB,EAClB,EAAE,CACJ,CAAC,CAAoB,EAAE,IAAiB,EAAQ,EAAE;;IAChD,IAAI,CAAC,CAAC,aAAa,EAAE;QACnB,CAAC,CAAC,aAAa,CAAC,WAAW,GAAG,CAAC,CAAa,EAAE,EAAE,CAAC,CAAC,CAAC,eAAe,EAAE,CAAC;QACrE,MAAM,QAAQ,GAAG,IAAA,+BAAqB,EAAC,CAAC,CAAC,CAAC;QAC1C,MAAM,eAAe,GAAG,MAAA,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC,0CAAE,EAAE,CAAC;QACrD,MAAM,OAAO,GAAG,CAAA,MAAA,eAAe,aAAf,eAAe,uBAAf,eAAe,CAAE,QAAQ,gEAAG,QAAQ,CAAC;YACnD,CAAC,CAAC,eAAe;YACjB,CAAC,CAAC,SAAS,CAAC;QACd,IAAI,QAAQ,EAAE;YACZ,IAAA,2BAAiB,EACf,8BAAC,kBAAkB,IAAC,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS;gBACxD,8BAAC,EAAE,IAAC,QAAQ,EAAE,QAAQ,GAAI,CACP,EACrB,CAAC,CAAC,aAAa,EACf,IAAI,CACL,CAAC;SACH;KACF;AACH,CAAC,CAAC;AAvBS,QAAA,qBAAqB,yBAuB9B;AAEJ,kBAAe,kBAAkB,CAAC","sourcesContent":["import { Button } from \"@blueprintjs/core\";\nimport React, { useCallback, useState } from \"react\";\nimport getUidsFromId from \"../dom/getUidsFromId\";\nimport getBlockUidFromTarget from \"../dom/getBlockUidFromTarget\";\nimport renderWithUnmount from \"../util/renderWithUnmount\";\nimport { OnloadArgs } from \"../types/native\";\n\nconst ComponentContainer: React.FunctionComponent<{\n blockId?: string;\n className?: string;\n children?: React.ReactNode;\n}> = ({ blockId, className, children }) => {\n const [showIcons, setShowIcons] = useState(false);\n const appear = useCallback(() => setShowIcons(true), [setShowIcons]);\n const disappear = useCallback(() => setShowIcons(false), [setShowIcons]);\n\n const { blockUid, windowId } = getUidsFromId(blockId);\n return (\n <div\n className={className}\n onMouseOver={appear}\n onMouseLeave={disappear}\n style={{ position: \"relative\", width: \"fit-content\", minWidth: 300 }}\n >\n {showIcons && (\n <div className={\"roamjs-edit-component absolute top-2 right-2 z-50\"}>\n {blockId && (\n <Button\n icon=\"edit\"\n minimal\n onClick={() =>\n window.roamAlphaAPI.ui.setBlockFocusAndSelection({\n location: { \"block-uid\": blockUid, \"window-id\": windowId },\n })\n }\n />\n )}\n </div>\n )}\n {children}\n </div>\n );\n};\n\nexport const createComponentRender =\n (\n Fc: (props: { blockUid: string }) => React.ReactElement,\n className?: string\n ) =>\n (b: HTMLButtonElement, args?: OnloadArgs): void => {\n if (b.parentElement) {\n b.parentElement.onmousedown = (e: MouseEvent) => e.stopPropagation();\n const blockUid = getBlockUidFromTarget(b);\n const possibleBlockId = b.closest(\".roam-block\")?.id;\n const blockId = possibleBlockId?.endsWith?.(blockUid)\n ? possibleBlockId\n : undefined;\n if (blockUid) {\n renderWithUnmount(\n <ComponentContainer blockId={blockId} className={className}>\n <Fc blockUid={blockUid} />\n </ComponentContainer>,\n b.parentElement,\n args\n );\n }\n }\n };\n\nexport default ComponentContainer;\n"]}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import type { Field, UnionField } from "./ConfigPanels/types";
|
|
3
|
+
import { Brand } from "./ConfigPanels/getBrandColors";
|
|
4
|
+
export declare type ConfigTab = {
|
|
5
|
+
id: string;
|
|
6
|
+
toggleable?: boolean | "premium";
|
|
7
|
+
onEnable?: () => void;
|
|
8
|
+
onDisable?: () => void;
|
|
9
|
+
development?: boolean;
|
|
10
|
+
fields: Field<UnionField>[];
|
|
11
|
+
};
|
|
12
|
+
declare type Config = {
|
|
13
|
+
tabs: ConfigTab[];
|
|
14
|
+
versioning?: boolean;
|
|
15
|
+
brand?: Brand;
|
|
16
|
+
} | Field<UnionField>[];
|
|
17
|
+
declare const ConfigPage: ({ id, config, pageUid, }: {
|
|
18
|
+
id: string;
|
|
19
|
+
config: Config;
|
|
20
|
+
pageUid: string;
|
|
21
|
+
}) => React.ReactElement;
|
|
22
|
+
export declare const render: ({ h, title, pageUid, config, }: {
|
|
23
|
+
h: HTMLHeadingElement;
|
|
24
|
+
title: string;
|
|
25
|
+
pageUid?: string | undefined;
|
|
26
|
+
config: Config;
|
|
27
|
+
}) => void;
|
|
28
|
+
export declare const createConfigObserver: ({ title, config, }: {
|
|
29
|
+
title: string;
|
|
30
|
+
config: Config;
|
|
31
|
+
}) => Promise<{
|
|
32
|
+
pageUid: string;
|
|
33
|
+
observer?: MutationObserver | undefined;
|
|
34
|
+
}>;
|
|
35
|
+
export default ConfigPage;
|
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createConfigObserver = exports.render = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const core_1 = require("@blueprintjs/core");
|
|
6
|
+
const react_1 = tslib_1.__importStar(require("react"));
|
|
7
|
+
const react_dom_1 = tslib_1.__importDefault(require("react-dom"));
|
|
8
|
+
const createHTMLObserver_1 = tslib_1.__importDefault(require("../dom/createHTMLObserver"));
|
|
9
|
+
const createBlock_1 = tslib_1.__importDefault(require("../writes/createBlock"));
|
|
10
|
+
const createPage_1 = tslib_1.__importDefault(require("../writes/createPage"));
|
|
11
|
+
const getBasicTreeByParentUid_1 = tslib_1.__importDefault(require("../queries/getBasicTreeByParentUid"));
|
|
12
|
+
const getPageUidByPageTitle_1 = tslib_1.__importDefault(require("../queries/getPageUidByPageTitle"));
|
|
13
|
+
const getShallowTreeByParentUid_1 = tslib_1.__importDefault(require("../queries/getShallowTreeByParentUid"));
|
|
14
|
+
const localStorageGet_1 = tslib_1.__importDefault(require("../util/localStorageGet"));
|
|
15
|
+
const idToTitle_1 = tslib_1.__importDefault(require("../util/idToTitle"));
|
|
16
|
+
const FieldTabs = ({ id, fields, uid, pageUid, order, toggleable, }) => {
|
|
17
|
+
const parentUid = (0, react_1.useMemo)(() => {
|
|
18
|
+
if (/home/i.test(id)) {
|
|
19
|
+
return pageUid;
|
|
20
|
+
}
|
|
21
|
+
if (uid) {
|
|
22
|
+
return uid;
|
|
23
|
+
}
|
|
24
|
+
if (toggleable) {
|
|
25
|
+
return "";
|
|
26
|
+
}
|
|
27
|
+
const newUid = window.roamAlphaAPI.util.generateUID();
|
|
28
|
+
(0, createBlock_1.default)({
|
|
29
|
+
parentUid: pageUid,
|
|
30
|
+
order,
|
|
31
|
+
node: { text: id, uid: newUid },
|
|
32
|
+
});
|
|
33
|
+
return newUid;
|
|
34
|
+
}, [pageUid, uid, id, toggleable]);
|
|
35
|
+
const childUids = Object.fromEntries((0, getShallowTreeByParentUid_1.default)(parentUid).map(({ text, uid }) => [
|
|
36
|
+
text.toLowerCase().trim(),
|
|
37
|
+
uid,
|
|
38
|
+
]));
|
|
39
|
+
const [selectedTabId, setSelectedTabId] = (0, react_1.useState)(fields.length && typeof toggleable !== "string"
|
|
40
|
+
? fields[0].title
|
|
41
|
+
: "enabled");
|
|
42
|
+
const onTabsChange = (0, react_1.useCallback)((tabId) => setSelectedTabId(tabId), [setSelectedTabId]);
|
|
43
|
+
return (react_1.default.createElement(core_1.Tabs, { vertical: true, id: `${id}-field-tabs`, onChange: onTabsChange, selectedTabId: selectedTabId, renderActiveTabPanelOnly: true }, fields.map((field, i) => {
|
|
44
|
+
const { Panel, title, defaultValue } = field;
|
|
45
|
+
return (react_1.default.createElement(core_1.Tab, { id: title, key: title, title: (0, idToTitle_1.default)(title), panel: react_1.default.createElement(Panel, Object.assign({}, field, { defaultValue: defaultValue, order: i, parentUid: parentUid, uid: childUids[title.toLowerCase()] })) }));
|
|
46
|
+
})));
|
|
47
|
+
};
|
|
48
|
+
const ConfigPage = ({ id, config, pageUid, }) => {
|
|
49
|
+
var _a;
|
|
50
|
+
const isLegacy = "tabs" in config;
|
|
51
|
+
const userTabs = isLegacy
|
|
52
|
+
? config.tabs.filter((t) => t.fields.length || t.toggleable)
|
|
53
|
+
: [{ fields: config, id: "home" }];
|
|
54
|
+
const [selectedTabId, setSelectedTabId] = (0, react_1.useState)((_a = userTabs[0]) === null || _a === void 0 ? void 0 : _a.id);
|
|
55
|
+
const onTabsChange = (0, react_1.useCallback)((tabId) => setSelectedTabId(tabId), [setSelectedTabId]);
|
|
56
|
+
const tree = (0, getBasicTreeByParentUid_1.default)(pageUid);
|
|
57
|
+
// first character trimmed intentionally for the `v` below
|
|
58
|
+
const titleRef = (0, react_1.useRef)(null);
|
|
59
|
+
const experimentalMode = (0, react_1.useMemo)(() => (0, localStorageGet_1.default)("experimental"), []);
|
|
60
|
+
return (react_1.default.createElement(core_1.Card, { style: { color: "#202B33" }, className: "roamjs-config-panel" },
|
|
61
|
+
react_1.default.createElement("div", { style: { display: "flex", justifyContent: "space-between" }, ref: titleRef, tabIndex: -1 },
|
|
62
|
+
react_1.default.createElement("h4", { style: { padding: 4 } },
|
|
63
|
+
(0, idToTitle_1.default)(id),
|
|
64
|
+
" Configuration")),
|
|
65
|
+
react_1.default.createElement("style", null, `.roamjs-config-tabs {\npadding: 4px;\n}`),
|
|
66
|
+
isLegacy ? (react_1.default.createElement(core_1.Tabs, { id: `${id}-config-tabs`, onChange: onTabsChange, selectedTabId: selectedTabId, renderActiveTabPanelOnly: true, className: "roamjs-config-tabs" }, userTabs.map(({ id: tabId, fields, toggleable, development = false, onEnable, onDisable, }, i) => {
|
|
67
|
+
var _a;
|
|
68
|
+
return (react_1.default.createElement(core_1.Tab, { id: tabId, key: tabId, title: (0, idToTitle_1.default)(tabId), disabled: development && !experimentalMode, panel: react_1.default.createElement(FieldTabs, { id: tabId, extensionId: id, fields: fields, uid: ((_a = tree.find((t) => new RegExp(tabId, "i").test(t.text))) === null || _a === void 0 ? void 0 : _a.uid) || "", pageUid: pageUid, order: i, toggleable: toggleable, onEnable: onEnable, onDisable: onDisable }) }));
|
|
69
|
+
}))) : (react_1.default.createElement(FieldTabs, { id: "home", extensionId: id, fields: config, uid: pageUid, pageUid: pageUid, order: 0, toggleable: false }))));
|
|
70
|
+
};
|
|
71
|
+
// TODO: better nested type discrimination here
|
|
72
|
+
const fieldsToChildren = (fields) => fields
|
|
73
|
+
.filter((f) => !!f.defaultValue)
|
|
74
|
+
.map((f) => {
|
|
75
|
+
var _a;
|
|
76
|
+
return ({
|
|
77
|
+
text: f.title,
|
|
78
|
+
children: f.Panel.type === "flag"
|
|
79
|
+
? []
|
|
80
|
+
: f.Panel.type === "custom"
|
|
81
|
+
? f.defaultValue || []
|
|
82
|
+
: f.Panel.type === "pages" || f.Panel.type === "multitext"
|
|
83
|
+
? (_a = f.defaultValue) === null || _a === void 0 ? void 0 : _a.map((v) => ({ text: v }))
|
|
84
|
+
: f.Panel.type === "block"
|
|
85
|
+
? f.defaultValue
|
|
86
|
+
? [f.defaultValue]
|
|
87
|
+
: []
|
|
88
|
+
: [{ text: `${f.defaultValue}` }],
|
|
89
|
+
});
|
|
90
|
+
});
|
|
91
|
+
const createConfigPage = ({ title, config, }) => {
|
|
92
|
+
var _a;
|
|
93
|
+
const homeTab = "tabs" in config
|
|
94
|
+
? (_a = config.tabs.find((t) => /home/i.test(t.id))) === null || _a === void 0 ? void 0 : _a.fields
|
|
95
|
+
: config;
|
|
96
|
+
const rawTree = [
|
|
97
|
+
...(homeTab ? fieldsToChildren(homeTab) : []),
|
|
98
|
+
...("tabs" in config
|
|
99
|
+
? config.tabs
|
|
100
|
+
.filter((t) => !/home/i.test(t.id) && !t.toggleable && !t.development)
|
|
101
|
+
.map((t) => ({
|
|
102
|
+
text: t.id,
|
|
103
|
+
children: fieldsToChildren(t.fields),
|
|
104
|
+
}))
|
|
105
|
+
: []),
|
|
106
|
+
];
|
|
107
|
+
return (0, createPage_1.default)({
|
|
108
|
+
title,
|
|
109
|
+
tree: rawTree.length ? rawTree : [{ text: " " }],
|
|
110
|
+
});
|
|
111
|
+
};
|
|
112
|
+
const render = ({ h, title, pageUid = (0, getPageUidByPageTitle_1.default)(title), config, }) => {
|
|
113
|
+
var _a, _b;
|
|
114
|
+
const uid = (0, getPageUidByPageTitle_1.default)(title);
|
|
115
|
+
const attribute = `data-roamjs-${uid}`;
|
|
116
|
+
const containerParent = (_a = h.parentElement) === null || _a === void 0 ? void 0 : _a.parentElement;
|
|
117
|
+
if (containerParent && !containerParent.hasAttribute(attribute)) {
|
|
118
|
+
containerParent.setAttribute(attribute, "true");
|
|
119
|
+
const parent = document.createElement("div");
|
|
120
|
+
const configPageId = title.split("/").slice(-1)[0];
|
|
121
|
+
parent.id = `${configPageId}-config`;
|
|
122
|
+
containerParent.insertBefore(parent, ((_b = h.parentElement) === null || _b === void 0 ? void 0 : _b.nextElementSibling) || null);
|
|
123
|
+
react_dom_1.default.render(react_1.default.createElement(ConfigPage, { id: configPageId, config: config, pageUid: pageUid }), parent);
|
|
124
|
+
}
|
|
125
|
+
};
|
|
126
|
+
exports.render = render;
|
|
127
|
+
const createConfigObserver = ({ title, config, }) => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
|
|
128
|
+
const pageUid = (0, getPageUidByPageTitle_1.default)(title) ||
|
|
129
|
+
(yield createConfigPage({
|
|
130
|
+
title,
|
|
131
|
+
config,
|
|
132
|
+
}));
|
|
133
|
+
if ("tabs" in config ? !!config.tabs.length : !!config.length) {
|
|
134
|
+
const observer = (0, createHTMLObserver_1.default)({
|
|
135
|
+
className: "rm-title-display",
|
|
136
|
+
tag: "H1",
|
|
137
|
+
callback: (d) => {
|
|
138
|
+
const h = d;
|
|
139
|
+
if (h.innerText === title) {
|
|
140
|
+
(0, exports.render)({
|
|
141
|
+
pageUid,
|
|
142
|
+
config,
|
|
143
|
+
title,
|
|
144
|
+
h,
|
|
145
|
+
});
|
|
146
|
+
}
|
|
147
|
+
},
|
|
148
|
+
});
|
|
149
|
+
return {
|
|
150
|
+
pageUid,
|
|
151
|
+
observer,
|
|
152
|
+
};
|
|
153
|
+
}
|
|
154
|
+
return {
|
|
155
|
+
pageUid,
|
|
156
|
+
};
|
|
157
|
+
});
|
|
158
|
+
exports.createConfigObserver = createConfigObserver;
|
|
159
|
+
exports.default = ConfigPage;
|
|
160
|
+
//# sourceMappingURL=ConfigPage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ConfigPage.js","sourceRoot":"","sources":["../../src/components/ConfigPage.tsx"],"names":[],"mappings":"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","sourcesContent":["import { Card, Tab, Tabs } from \"@blueprintjs/core\";\nimport React, { useCallback, useMemo, useRef, useState } from \"react\";\nimport ReactDOM from \"react-dom\";\nimport createHTMLObserver from \"../dom/createHTMLObserver\";\nimport createBlock from \"../writes/createBlock\";\nimport createPage from \"../writes/createPage\";\nimport getBasicTreeByParentUid from \"../queries/getBasicTreeByParentUid\";\nimport getPageUidByPageTitle from \"../queries/getPageUidByPageTitle\";\nimport getShallowTreeByParentUid from \"../queries/getShallowTreeByParentUid\";\nimport localStorageGet from \"../util/localStorageGet\";\nimport idToTitle from \"../util/idToTitle\";\nimport type { Field, UnionField } from \"./ConfigPanels/types\";\nimport { Brand } from \"./ConfigPanels/getBrandColors\";\nimport { InputTextNode } from \"../types\";\n\nexport type ConfigTab = {\n id: string;\n toggleable?: boolean | \"premium\";\n onEnable?: () => void;\n onDisable?: () => void;\n development?: boolean;\n fields: Field<UnionField>[];\n};\n\ntype Config =\n | {\n tabs: ConfigTab[];\n versioning?: boolean;\n brand?: Brand;\n }\n | Field<UnionField>[];\n\nconst FieldTabs = ({\n id,\n fields,\n uid,\n pageUid,\n order,\n toggleable,\n}: {\n uid: string;\n pageUid: string;\n order: number;\n extensionId: string;\n} & ConfigTab) => {\n const parentUid = useMemo(() => {\n if (/home/i.test(id)) {\n return pageUid;\n }\n if (uid) {\n return uid;\n }\n if (toggleable) {\n return \"\";\n }\n const newUid = window.roamAlphaAPI.util.generateUID();\n createBlock({\n parentUid: pageUid,\n order,\n node: { text: id, uid: newUid },\n });\n return newUid;\n }, [pageUid, uid, id, toggleable]);\n const childUids = Object.fromEntries(\n getShallowTreeByParentUid(parentUid).map(({ text, uid }) => [\n text.toLowerCase().trim(),\n uid,\n ])\n );\n const [selectedTabId, setSelectedTabId] = useState(\n fields.length && typeof toggleable !== \"string\"\n ? fields[0].title\n : \"enabled\"\n );\n const onTabsChange = useCallback(\n (tabId: string) => setSelectedTabId(tabId),\n [setSelectedTabId]\n );\n return (\n <Tabs\n vertical\n id={`${id}-field-tabs`}\n onChange={onTabsChange}\n selectedTabId={selectedTabId}\n renderActiveTabPanelOnly\n >\n {fields.map((field, i) => {\n const { Panel, title, defaultValue } = field;\n return (\n <Tab\n id={title}\n key={title}\n title={idToTitle(title)}\n panel={\n <Panel\n {...field}\n defaultValue={defaultValue}\n order={i}\n parentUid={parentUid}\n uid={childUids[title.toLowerCase()]}\n />\n }\n />\n );\n })}\n </Tabs>\n );\n};\n\nconst ConfigPage = ({\n id,\n config,\n pageUid,\n}: {\n id: string;\n config: Config;\n pageUid: string;\n}): React.ReactElement => {\n const isLegacy = \"tabs\" in config;\n const userTabs = isLegacy\n ? config.tabs.filter((t) => t.fields.length || t.toggleable)\n : [{ fields: config, id: \"home\" }];\n const [selectedTabId, setSelectedTabId] = useState(userTabs[0]?.id);\n const onTabsChange = useCallback(\n (tabId: string) => setSelectedTabId(tabId),\n [setSelectedTabId]\n );\n const tree = getBasicTreeByParentUid(pageUid);\n\n // first character trimmed intentionally for the `v` below\n const titleRef = useRef<HTMLDivElement>(null);\n const experimentalMode = useMemo(() => localStorageGet(\"experimental\"), []);\n return (\n <Card style={{ color: \"#202B33\" }} className={\"roamjs-config-panel\"}>\n <div\n style={{ display: \"flex\", justifyContent: \"space-between\" }}\n ref={titleRef}\n tabIndex={-1}\n >\n <h4 style={{ padding: 4 }}>{idToTitle(id)} Configuration</h4>\n </div>\n <style>{`.roamjs-config-tabs {\\npadding: 4px;\\n}`}</style>\n {isLegacy ? (\n <Tabs\n id={`${id}-config-tabs`}\n onChange={onTabsChange}\n selectedTabId={selectedTabId}\n renderActiveTabPanelOnly\n className={\"roamjs-config-tabs\"}\n >\n {userTabs.map(\n (\n {\n id: tabId,\n fields,\n toggleable,\n development = false,\n onEnable,\n onDisable,\n },\n i\n ) => (\n <Tab\n id={tabId}\n key={tabId}\n title={idToTitle(tabId)}\n disabled={development && !experimentalMode}\n panel={\n <FieldTabs\n id={tabId}\n extensionId={id}\n fields={fields}\n uid={\n tree.find((t) => new RegExp(tabId, \"i\").test(t.text))\n ?.uid || \"\"\n }\n pageUid={pageUid}\n order={i}\n toggleable={toggleable}\n onEnable={onEnable}\n onDisable={onDisable}\n />\n }\n />\n )\n )}\n </Tabs>\n ) : (\n <FieldTabs\n id={\"home\"}\n extensionId={id}\n fields={config}\n uid={pageUid}\n pageUid={pageUid}\n order={0}\n toggleable={false}\n />\n )}\n </Card>\n );\n};\n\n// TODO: better nested type discrimination here\nconst fieldsToChildren = (fields: Field<UnionField>[]) =>\n fields\n .filter((f) => !!f.defaultValue)\n .map((f) => ({\n text: f.title,\n children:\n f.Panel.type === \"flag\"\n ? []\n : f.Panel.type === \"custom\"\n ? (f.defaultValue as InputTextNode[]) || []\n : f.Panel.type === \"pages\" || f.Panel.type === \"multitext\"\n ? (f.defaultValue as string[])?.map((v) => ({ text: v }))\n : f.Panel.type === \"block\"\n ? f.defaultValue\n ? [f.defaultValue as InputTextNode]\n : []\n : [{ text: `${f.defaultValue}` }],\n }));\n\nconst createConfigPage = ({\n title,\n config,\n}: {\n title: string;\n config: Config;\n}) => {\n const homeTab =\n \"tabs\" in config\n ? config.tabs.find((t) => /home/i.test(t.id))?.fields\n : config;\n const rawTree = [\n ...(homeTab ? fieldsToChildren(homeTab) : []),\n ...(\"tabs\" in config\n ? config.tabs\n .filter((t) => !/home/i.test(t.id) && !t.toggleable && !t.development)\n .map((t) => ({\n text: t.id,\n children: fieldsToChildren(t.fields),\n }))\n : []),\n ];\n return createPage({\n title,\n tree: rawTree.length ? rawTree : [{ text: \" \" }],\n });\n};\n\nexport const render = ({\n h,\n title,\n pageUid = getPageUidByPageTitle(title),\n config,\n}: {\n h: HTMLHeadingElement;\n title: string;\n pageUid?: string;\n config: Config;\n}) => {\n const uid = getPageUidByPageTitle(title);\n const attribute = `data-roamjs-${uid}`;\n const containerParent = h.parentElement?.parentElement;\n if (containerParent && !containerParent.hasAttribute(attribute)) {\n containerParent.setAttribute(attribute, \"true\");\n const parent = document.createElement(\"div\");\n const configPageId = title.split(\"/\").slice(-1)[0];\n parent.id = `${configPageId}-config`;\n containerParent.insertBefore(\n parent,\n h.parentElement?.nextElementSibling || null\n );\n ReactDOM.render(\n <ConfigPage id={configPageId} config={config} pageUid={pageUid} />,\n parent\n );\n }\n};\n\nexport const createConfigObserver = async ({\n title,\n config,\n}: {\n title: string;\n config: Config;\n}): Promise<{ pageUid: string; observer?: MutationObserver }> => {\n const pageUid =\n getPageUidByPageTitle(title) ||\n (await createConfigPage({\n title,\n config,\n }));\n if (\"tabs\" in config ? !!config.tabs.length : !!config.length) {\n const observer = createHTMLObserver({\n className: \"rm-title-display\",\n tag: \"H1\",\n callback: (d: HTMLElement) => {\n const h = d as HTMLHeadingElement;\n if (h.innerText === title) {\n render({\n pageUid,\n config,\n title,\n h,\n });\n }\n },\n });\n return {\n pageUid,\n observer,\n };\n }\n return {\n pageUid,\n };\n};\n\nexport default ConfigPage;\n"]}
|