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.
- package/LICENSE +21 -21
- package/README.md +29 -29
- package/components/AutocompleteInput.d.ts +4 -4
- package/components/AutocompleteInput.js.map +1 -1
- package/components/BlockErrorBoundary.d.ts +2 -2
- package/components/BlockErrorBoundary.js.map +1 -1
- package/components/BlockInput.d.ts +5 -5
- package/components/BlockInput.js.map +1 -1
- package/components/ComponentContainer.js.map +1 -1
- package/components/ConfigPage.d.ts +4 -4
- package/components/ConfigPage.js +1 -1
- package/components/ConfigPage.js.map +1 -1
- package/components/ConfigPanels/BlockPanel.js.map +1 -1
- package/components/ConfigPanels/BlocksPanel.js.map +1 -1
- package/components/ConfigPanels/FlagPanel.js.map +1 -1
- package/components/ConfigPanels/MultiChildPanel.js.map +1 -1
- package/components/ConfigPanels/OauthPanel.js.map +1 -1
- package/components/ConfigPanels/getBrandColors.d.ts +1 -1
- package/components/ConfigPanels/getBrandColors.js.map +1 -1
- package/components/ConfigPanels/types.d.ts +15 -15
- package/components/ConfigPanels/types.js.map +1 -1
- package/components/ConfigPanels/useSingleChildValue.d.ts +1 -1
- package/components/ConfigPanels/useSingleChildValue.js.map +1 -1
- package/components/CursorMenu.d.ts +1 -1
- package/components/CursorMenu.js.map +1 -1
- package/components/ExternalLogin.d.ts +3 -3
- package/components/ExternalLogin.js +2 -2
- package/components/ExternalLogin.js.map +1 -1
- package/components/Filter.d.ts +6 -6
- package/components/FormDialog.d.ts +1 -1
- package/components/FormDialog.js +6 -6
- package/components/FormDialog.js.map +1 -1
- package/components/Loading.d.ts +0 -1
- package/components/Loading.js.map +1 -1
- package/components/MenuItemSelect.d.ts +5 -5
- package/components/OauthPanel.d.ts +0 -1
- package/components/PageInput.d.ts +2 -2
- package/components/PageLink.d.ts +1 -1
- package/components/PageLink.js.map +1 -1
- package/components/ProgressDialog.d.ts +1 -2
- package/components/ProgressDialog.js.map +1 -1
- package/components/SimpleAlert.d.ts +1 -1
- package/components/Toast.d.ts +2 -2
- package/components/Toast.js.map +1 -1
- package/components/index.js +2 -2
- package/components/index.js.map +1 -1
- package/components.js.map +1 -1
- package/date/constants.js.map +1 -1
- package/date/index.js.map +1 -1
- package/date/parseNlpDate.js.map +1 -1
- package/date/parseRoamDateUid.js.map +1 -1
- package/dom/addBlockCommand.js.map +1 -1
- package/dom/addKeyboardTriggers.js.map +1 -1
- package/dom/addOldRoamJSDependency.js.map +1 -1
- package/dom/addRoamJSDependency.js.map +1 -1
- package/dom/addScriptAsDependency.js.map +1 -1
- package/dom/addStyle.js.map +1 -1
- package/dom/constants.js.map +1 -1
- package/dom/createBlockObserver.d.ts +6 -6
- package/dom/createBlockObserver.js.map +1 -1
- package/dom/createButtonObserver.d.ts +1 -1
- package/dom/createButtonObserver.js.map +1 -1
- package/dom/createDivObserver.js.map +1 -1
- package/dom/createHTMLObserver.d.ts +2 -2
- package/dom/createHTMLObserver.js.map +1 -1
- package/dom/createHashtagObserver.js.map +1 -1
- package/dom/createIconButton.js.map +1 -1
- package/dom/createObserver.js.map +1 -1
- package/dom/createOverlayObserver.js.map +1 -1
- package/dom/createPageObserver.js.map +1 -1
- package/dom/createPageTitleObserver.d.ts +1 -1
- package/dom/createPageTitleObserver.js.map +1 -1
- package/dom/elToTitle.js.map +1 -1
- package/dom/genericError.js.map +1 -1
- package/dom/getActiveUids.js.map +1 -1
- package/dom/getBlockUidFromTarget.js.map +1 -1
- package/dom/getCurrentPageUid.js.map +1 -1
- package/dom/getDomRefs.js.map +1 -1
- package/dom/getDropUidOffset.js.map +1 -1
- package/dom/getMutatedNodes.js.map +1 -1
- package/dom/getPageTitleByHtmlElement.js.map +1 -1
- package/dom/getPageTitleValueByHtmlElement.js.map +1 -1
- package/dom/getReferenceBlockUid.js.map +1 -1
- package/dom/getRoamUrl.js.map +1 -1
- package/dom/getRoamUrlByPage.js.map +1 -1
- package/dom/getUids.js.map +1 -1
- package/dom/getUidsFromButton.js.map +1 -1
- package/dom/getUidsFromId.js.map +1 -1
- package/dom/index.js.map +1 -1
- package/dom/parseRoamBlocksToHtml.js.map +1 -1
- package/dom/resolveRefs.js.map +1 -1
- package/events/index.js +2 -4
- package/events/index.js.map +1 -1
- package/events/watchOnce.js.map +1 -1
- package/hooks/index.js +3 -5
- package/hooks/index.js.map +1 -1
- package/hooks/useArrowKeyDown.js.map +1 -1
- package/hooks/useSubTree.js.map +1 -1
- package/marked/index.d.ts +4 -4
- package/marked/index.js +25 -25
- package/marked/index.js.map +1 -1
- package/package.json +114 -116
- package/queries/compileDatalog.js.map +1 -1
- package/queries/getAllBlockUids.js.map +1 -1
- package/queries/getAllBlockUidsAndTexts.js.map +1 -1
- package/queries/getAllPageNames.js.map +1 -1
- package/queries/getAttributeValueByBlockAndName.js.map +1 -1
- package/queries/getBasicTreeByParentUid.js.map +1 -1
- package/queries/getBlockUidAndTextIncludingText.js.map +1 -1
- package/queries/getBlockUidByTextOnPage.js.map +1 -1
- package/queries/getBlockUidsAndTextsReferencingPage.js.map +1 -1
- package/queries/getBlockUidsByPageTitle.js.map +1 -1
- package/queries/getBlockUidsReferencingBlock.js.map +1 -1
- package/queries/getBlockUidsReferencingPage.js.map +1 -1
- package/queries/getBlockUidsWithParentUid.js.map +1 -1
- package/queries/getChildrenLengthByPageUid.js.map +1 -1
- package/queries/getChildrenLengthByParentUid.js.map +1 -1
- package/queries/getCreateTimeByBlockUid.js.map +1 -1
- package/queries/getCurrentUser.js.map +1 -1
- package/queries/getCurrentUserDisplayName.js.map +1 -1
- package/queries/getCurrentUserEmail.js.map +1 -1
- package/queries/getCurrentUserUid.js.map +1 -1
- package/queries/getDisplayNameByEmail.js.map +1 -1
- package/queries/getDisplayNameByUid.js.map +1 -1
- package/queries/getEditTimeByBlockUid.js.map +1 -1
- package/queries/getEditedUserEmailByBlockUid.js.map +1 -1
- package/queries/getFirstChildTextByBlockUid.js.map +1 -1
- package/queries/getFirstChildUidByBlockUid.js.map +1 -1
- package/queries/getFullTreeByParentUid.js +13 -13
- package/queries/getFullTreeByParentUid.js.map +1 -1
- package/queries/getLinkedPageTitlesUnderUid.js.map +1 -1
- package/queries/getNthChildUidByBlockUid.js.map +1 -1
- package/queries/getOrderByBlockUid.js.map +1 -1
- package/queries/getPageTitleByBlockUid.js.map +1 -1
- package/queries/getPageTitleByPageUid.js.map +1 -1
- package/queries/getPageTitleReferencesByPageTitle.js.map +1 -1
- package/queries/getPageTitlesAndBlockUidsReferencingPage.js.map +1 -1
- package/queries/getPageTitlesAndUidsDirectlyReferencingPage.js.map +1 -1
- package/queries/getPageTitlesReferencingBlockUid.js.map +1 -1
- package/queries/getPageTitlesStartingWithPrefix.js.map +1 -1
- package/queries/getPageUidByBlockUid.js.map +1 -1
- package/queries/getPageUidByPageTitle.js.map +1 -1
- package/queries/getPageViewType.js.map +1 -1
- package/queries/getParentTextByBlockUid.js.map +1 -1
- package/queries/getParentTextByBlockUidAndTag.js.map +1 -1
- package/queries/getParentUidByBlockUid.js.map +1 -1
- package/queries/getParentUidsOfBlockUid.js.map +1 -1
- package/queries/getSettingsByEmail.js.map +1 -1
- package/queries/getShallowTreeByParentUid.js.map +1 -1
- package/queries/getTextByBlockUid.js.map +1 -1
- package/queries/index.js +2 -2
- package/queries/index.js.map +1 -1
- package/queries/isLiveBlock.js.map +1 -1
- package/queries/isTagOnPage.js.map +1 -1
- package/queries/normalizePageTitle.js.map +1 -1
- package/scripts/index.js +17 -7
- package/scripts/index.js.map +1 -1
- package/scripts/publishToRoamDepot.d.ts +4 -4
- package/scripts/publishToRoamDepot.js +1 -1
- package/scripts/publishToRoamDepot.js.map +1 -1
- package/testing/mockRoamEnvironment.js.map +1 -1
- package/types/index.d.ts +1 -1
- package/types/index.js.map +1 -1
- package/types/native.d.ts +64 -64
- package/types/native.js.map +1 -1
- package/types/query-builder.d.ts +5 -5
- package/types/query-builder.js.map +1 -1
- package/types/smartblocks.d.ts +5 -5
- package/types/smartblocks.js.map +1 -1
- package/util/addInputSetting.d.ts +1 -1
- package/util/addInputSetting.js.map +1 -1
- package/util/apiDelete.d.ts +1 -1
- package/util/apiDelete.js.map +1 -1
- package/util/apiGet.d.ts +1 -1
- package/util/apiGet.js.map +1 -1
- package/util/apiPost.d.ts +1 -1
- package/util/apiPost.js.map +1 -1
- package/util/apiPut.d.ts +1 -1
- package/util/apiPut.js.map +1 -1
- package/util/createOverlayRender.js.map +1 -1
- package/util/createTagRegex.js.map +1 -1
- package/util/dispatchToRegistry.js.map +1 -1
- package/util/env.js.map +1 -1
- package/util/extensionApiContext.js.map +1 -1
- package/util/extensionDeprecatedWarning.js +5 -5
- package/util/extensionDeprecatedWarning.js.map +1 -1
- package/util/extractRef.js.map +1 -1
- package/util/extractTag.js.map +1 -1
- package/util/focusMainWindowBlock.js.map +1 -1
- package/util/getAuthorizationHeader.js.map +1 -1
- package/util/getLocalStorageKey.js.map +1 -1
- package/util/getOauth.js.map +1 -1
- package/util/getOauthAccounts.js.map +1 -1
- package/util/getRenderRoot.js.map +1 -1
- package/util/getSettingIntFromTree.d.ts +1 -1
- package/util/getSettingIntFromTree.js.map +1 -1
- package/util/getSettingValueFromTree.d.ts +3 -3
- package/util/getSettingValueFromTree.js.map +1 -1
- package/util/getSettingValuesFromTree.d.ts +1 -1
- package/util/getSettingValuesFromTree.js.map +1 -1
- package/util/getSubTree.d.ts +3 -3
- package/util/getSubTree.js.map +1 -1
- package/util/getToken.js.map +1 -1
- package/util/getTokenFromTree.js.map +1 -1
- package/util/getWorkerClient.d.ts +1 -1
- package/util/getWorkerClient.js.map +1 -1
- package/util/handleBodyFetch.d.ts +1 -1
- package/util/handleBodyFetch.js.map +1 -1
- package/util/handleFetch.d.ts +2 -2
- package/util/handleFetch.js.map +1 -1
- package/util/handleUrlFetch.d.ts +1 -1
- package/util/handleUrlFetch.js.map +1 -1
- package/util/idToTitle.js.map +1 -1
- package/util/index.js +25 -27
- package/util/index.js.map +1 -1
- package/util/isControl.js.map +1 -1
- package/util/localStorageGet.js.map +1 -1
- package/util/localStorageRemove.js.map +1 -1
- package/util/localStorageSet.js.map +1 -1
- package/util/registerExperimentalMode.d.ts +1 -1
- package/util/registerExperimentalMode.js +2 -2
- package/util/registerExperimentalMode.js.map +1 -1
- package/util/registerSmartBlocksCommand.js.map +1 -1
- package/util/removeFromRegistry.js.map +1 -1
- package/util/renderOverlay.d.ts +5 -5
- package/util/renderOverlay.js.map +1 -1
- package/util/renderWithUnmount.js.map +1 -1
- package/util/runExtension.d.ts +2 -2
- package/util/runExtension.js +2 -2
- package/util/runExtension.js.map +1 -1
- package/util/setInputSetting.d.ts +1 -1
- package/util/setInputSetting.js.map +1 -1
- package/util/setInputSettings.d.ts +1 -1
- package/util/setInputSettings.js.map +1 -1
- package/util/stripUid.js.map +1 -1
- package/util/toConfigPageName.js.map +1 -1
- package/util/toFlexRegex.js.map +1 -1
- package/writes/clearBlockById.js.map +1 -1
- package/writes/clearBlockByUid.js.map +1 -1
- package/writes/createBlock.d.ts +1 -1
- package/writes/createBlock.js.map +1 -1
- package/writes/createPage.d.ts +2 -2
- package/writes/createPage.js.map +1 -1
- package/writes/deleteBlock.js.map +1 -1
- package/writes/index.js +9 -11
- package/writes/index.js.map +1 -1
- package/writes/openBlockInSidebar.js.map +1 -1
- package/writes/submitActions.js.map +1 -1
- package/writes/updateActiveBlock.js.map +1 -1
- package/writes/updateBlock.js.map +1 -1
package/LICENSE
CHANGED
|
@@ -1,21 +1,21 @@
|
|
|
1
|
-
MIT License
|
|
2
|
-
|
|
3
|
-
Copyright (c) 2021 David Vargas
|
|
4
|
-
|
|
5
|
-
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
-
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
-
in the Software without restriction, including without limitation the rights
|
|
8
|
-
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
-
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
-
furnished to do so, subject to the following conditions:
|
|
11
|
-
|
|
12
|
-
The above copyright notice and this permission notice shall be included in all
|
|
13
|
-
copies or substantial portions of the Software.
|
|
14
|
-
|
|
15
|
-
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
-
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
-
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
-
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
-
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
-
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
-
SOFTWARE.
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2021 David Vargas
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
CHANGED
|
@@ -1,29 +1,29 @@
|
|
|
1
|
-
# roamjs-components
|
|
2
|
-
|
|
3
|
-
This is a collection of common UI components used by RoamJS extensions made available to make development easier for other Roam developers.
|
|
4
|
-
|
|
5
|
-
The `roamjs-components` repository provides a robust set of tools and components for building extensions and integrations for the Roam Research note-taking application. Engineers can use this repo to streamline the development of Roam extensions by leveraging pre-built React components, utility functions, and custom hooks that interact with the Roam Research API. This repo addresses the real-world problem of efficiently creating and managing Roam Research extensions, enabling developers to focus on building unique features rather than handling boilerplate code.
|
|
6
|
-
|
|
7
|
-
The most important parts of the repo include the Components, utility functions, and database query functions. These components are organized into several directories, each serving a specific purpose:
|
|
8
|
-
|
|
9
|
-
[Components](https://github.com/RoamJS/roamjs-components/blob/main/docs/components.md): Found in the `…/components` directory, these components handle tasks such as configuration management, external authentication, and data visualization. Key components include configuration panels like `BlockPanel`, `BlocksPanel`, and `OauthPanel`, which are detailed in the Configuration Panels section. These components use React hooks and context to manage state and interactions within the Roam Research application.
|
|
10
|
-
|
|
11
|
-
[Date and Time Utilities](https://github.com/RoamJS/roamjs-components/blob/main/docs/date.md): Located in `…/date`, this directory provides functions for parsing and manipulating dates, crucial for working with Roam's daily notes. The `parseNlpDate` function uses the `chrono-node` library to parse natural language dates, while `parseRoamDateUid` converts Roam date UIDs into JavaScript Date objects. More details can be found in the Date and Time Utilities section.
|
|
12
|
-
|
|
13
|
-
[DOM Manipulation](https://github.com/RoamJS/roamjs-components/blob/main/docs/dom.md): The `…/dom` directory contains functions for interacting with the Document Object Model (DOM) within Roam Research. Functions like `addBlockCommand` and `createBlockObserver` are essential for adding new commands and observing changes in the DOM. These utilities are explained in the DOM Manipulation section.
|
|
14
|
-
|
|
15
|
-
[Event Handling](https://github.com/RoamJS/roamjs-components/blob/main/docs/events.md): The `…/events` directory includes the `watchOnce` function, which sets up one-time event listeners in Roam Research. This function is useful for performing actions when specific changes occur in the Roam environment, as detailed in the Event Handling section.
|
|
16
|
-
|
|
17
|
-
[Custom React Hooks](https://github.com/RoamJS/roamjs-components/blob/main/docs/hooks.md): Found in `…/hooks`, these hooks provide reusable functionality for managing user interactions and data structures. The `useArrowKeyDown` hook handles keyboard navigation within lists, while `useSubTree` manages sub-tree data structures. More information is available in the Custom React Hooks section.
|
|
18
|
-
|
|
19
|
-
[Markdown Parsing and Rendering](https://github.com/RoamJS/roamjs-components/blob/main/docs/marked.md): The `…/marked` directory customizes the `marked` library to parse and render Markdown content within Roam Research. This includes handling Roam-specific elements like block references and tags. The Markdown Parsing and Rendering section provides further details.
|
|
20
|
-
|
|
21
|
-
[Database Queries](https://github.com/RoamJS/roamjs-components/blob/main/docs/queries.md): The `…/queries` directory offers utility functions for interacting with the Roam Research database. Functions like `getAllBlockUids`, `getPageTitleByBlockUid`, and `getCurrentUser` retrieve various types of data from the database. These functions are crucial for building data-driven features and are discussed in the Database Queries section.
|
|
22
|
-
|
|
23
|
-
[Script Management](https://github.com/RoamJS/roamjs-components/blob/main/docs/scripts.md): The `…/scripts` directory includes functions for managing scripts in Roam Research. This includes functions for creating and managing script commands, as well as functions for executing scripts.
|
|
24
|
-
|
|
25
|
-
[Type Definitions](https://github.com/RoamJS/roamjs-components/blob/main/docs/types.md): The `…/types` directory contains TypeScript type definitions for various Roam Research components.
|
|
26
|
-
|
|
27
|
-
[Utility Functions](https://github.com/RoamJS/roamjs-components/blob/main/docs/util.md): The `…/util` directory includes utility functions for working with the Roam Research API. These functions are designed to simplify the process of interacting with the API.
|
|
28
|
-
|
|
29
|
-
[Write Operations](https://github.com/RoamJS/roamjs-components/blob/main/docs/writes.md): The `…/writes` directory includes functions for performing write operations in Roam, such as `createBlock`, `deleteBlock`, and `updateActiveBlock`. These functions handle the submission of actions to the Roam API, as detailed in the Write Operations section.
|
|
1
|
+
# roamjs-components
|
|
2
|
+
|
|
3
|
+
This is a collection of common UI components used by RoamJS extensions made available to make development easier for other Roam developers.
|
|
4
|
+
|
|
5
|
+
The `roamjs-components` repository provides a robust set of tools and components for building extensions and integrations for the Roam Research note-taking application. Engineers can use this repo to streamline the development of Roam extensions by leveraging pre-built React components, utility functions, and custom hooks that interact with the Roam Research API. This repo addresses the real-world problem of efficiently creating and managing Roam Research extensions, enabling developers to focus on building unique features rather than handling boilerplate code.
|
|
6
|
+
|
|
7
|
+
The most important parts of the repo include the Components, utility functions, and database query functions. These components are organized into several directories, each serving a specific purpose:
|
|
8
|
+
|
|
9
|
+
[Components](https://github.com/RoamJS/roamjs-components/blob/main/docs/components.md): Found in the `…/components` directory, these components handle tasks such as configuration management, external authentication, and data visualization. Key components include configuration panels like `BlockPanel`, `BlocksPanel`, and `OauthPanel`, which are detailed in the Configuration Panels section. These components use React hooks and context to manage state and interactions within the Roam Research application.
|
|
10
|
+
|
|
11
|
+
[Date and Time Utilities](https://github.com/RoamJS/roamjs-components/blob/main/docs/date.md): Located in `…/date`, this directory provides functions for parsing and manipulating dates, crucial for working with Roam's daily notes. The `parseNlpDate` function uses the `chrono-node` library to parse natural language dates, while `parseRoamDateUid` converts Roam date UIDs into JavaScript Date objects. More details can be found in the Date and Time Utilities section.
|
|
12
|
+
|
|
13
|
+
[DOM Manipulation](https://github.com/RoamJS/roamjs-components/blob/main/docs/dom.md): The `…/dom` directory contains functions for interacting with the Document Object Model (DOM) within Roam Research. Functions like `addBlockCommand` and `createBlockObserver` are essential for adding new commands and observing changes in the DOM. These utilities are explained in the DOM Manipulation section.
|
|
14
|
+
|
|
15
|
+
[Event Handling](https://github.com/RoamJS/roamjs-components/blob/main/docs/events.md): The `…/events` directory includes the `watchOnce` function, which sets up one-time event listeners in Roam Research. This function is useful for performing actions when specific changes occur in the Roam environment, as detailed in the Event Handling section.
|
|
16
|
+
|
|
17
|
+
[Custom React Hooks](https://github.com/RoamJS/roamjs-components/blob/main/docs/hooks.md): Found in `…/hooks`, these hooks provide reusable functionality for managing user interactions and data structures. The `useArrowKeyDown` hook handles keyboard navigation within lists, while `useSubTree` manages sub-tree data structures. More information is available in the Custom React Hooks section.
|
|
18
|
+
|
|
19
|
+
[Markdown Parsing and Rendering](https://github.com/RoamJS/roamjs-components/blob/main/docs/marked.md): The `…/marked` directory customizes the `marked` library to parse and render Markdown content within Roam Research. This includes handling Roam-specific elements like block references and tags. The Markdown Parsing and Rendering section provides further details.
|
|
20
|
+
|
|
21
|
+
[Database Queries](https://github.com/RoamJS/roamjs-components/blob/main/docs/queries.md): The `…/queries` directory offers utility functions for interacting with the Roam Research database. Functions like `getAllBlockUids`, `getPageTitleByBlockUid`, and `getCurrentUser` retrieve various types of data from the database. These functions are crucial for building data-driven features and are discussed in the Database Queries section.
|
|
22
|
+
|
|
23
|
+
[Script Management](https://github.com/RoamJS/roamjs-components/blob/main/docs/scripts.md): The `…/scripts` directory includes functions for managing scripts in Roam Research. This includes functions for creating and managing script commands, as well as functions for executing scripts.
|
|
24
|
+
|
|
25
|
+
[Type Definitions](https://github.com/RoamJS/roamjs-components/blob/main/docs/types.md): The `…/types` directory contains TypeScript type definitions for various Roam Research components.
|
|
26
|
+
|
|
27
|
+
[Utility Functions](https://github.com/RoamJS/roamjs-components/blob/main/docs/util.md): The `…/util` directory includes utility functions for working with the Roam Research API. These functions are designed to simplify the process of interacting with the API.
|
|
28
|
+
|
|
29
|
+
[Write Operations](https://github.com/RoamJS/roamjs-components/blob/main/docs/writes.md): The `…/writes` directory includes functions for performing write operations in Roam, such as `createBlock`, `deleteBlock`, and `updateActiveBlock`. These functions handle the submission of actions to the Roam API, as detailed in the Write Operations section.
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import React from "react";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
export
|
|
2
|
+
type FilterOptions<T> = (options: T[], query: string) => T[];
|
|
3
|
+
type OnNewItem<T> = (s: string) => T;
|
|
4
|
+
type ItemToQuery<T> = (t?: T) => string;
|
|
5
|
+
export type AutocompleteInputProps<T = string> = {
|
|
6
6
|
value?: T;
|
|
7
7
|
setValue: (q: T) => void;
|
|
8
8
|
showButton?: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AutocompleteInput.js","sourceRoot":"","sources":["../../src/components/AutocompleteInput.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n InputGroup,\n Menu,\n MenuItem,\n PopoverPosition,\n Popover,\n Button,\n TextArea,\n} from \"@blueprintjs/core\";\nimport React, {\n useState,\n useCallback,\n useMemo,\n useRef,\n useEffect,\n} from \"react\";\nimport useArrowKeyDown from \"../hooks/useArrowKeyDown\";\nimport fuzzy from \"fuzzy\";\n\ntype FilterOptions<T> = (options: T[], query: string) => T[];\ntype OnNewItem<T> = (s: string) => T;\ntype ItemToQuery<T> = (t?: T) => string;\n\nexport type AutocompleteInputProps<T = string> = {\n value?: T;\n setValue: (q: T) => void;\n showButton?: boolean;\n onBlur?: (v: string) => void;\n onConfirm?: () => void;\n options?: T[];\n placeholder?: string;\n autoFocus?: boolean;\n multiline?: boolean;\n id?: string;\n filterOptions?: FilterOptions<T>;\n itemToQuery?: ItemToQuery<T>;\n renderItem?: (props: {\n item: T;\n onClick: () => void;\n active: boolean;\n }) => React.ReactElement;\n onNewItem?: OnNewItem<T>;\n disabled?: boolean;\n maxItemsDisplayed?: number;\n};\n\n// eslint-disable-next-line @typescript-eslint/no-unnecessary-type-constraint\nconst AutocompleteInput = <T extends unknown = string>({\n value,\n setValue,\n onBlur,\n onConfirm,\n showButton,\n options = [],\n placeholder = \"Enter value\",\n autoFocus,\n multiline,\n id,\n filterOptions: _filterOptions,\n itemToQuery: _itemToQuery,\n renderItem,\n onNewItem: _onNewItem,\n disabled,\n maxItemsDisplayed = Infinity,\n}: AutocompleteInputProps<T>): React.ReactElement => {\n const [isOpen, setIsOpen] = useState(false);\n const itemToQuery = useMemo<ItemToQuery<T>>(\n () => _itemToQuery || ((s) => (s ? `${s}` : \"\")),\n [_itemToQuery]\n );\n const [query, setQuery] = useState<string>(() => itemToQuery(value));\n const open = useCallback(() => setIsOpen(true), [setIsOpen]);\n const close = useCallback(() => setIsOpen(false), [setIsOpen]);\n const [isTyping, setIsTyping] = useState(false);\n const filterOptions = useMemo<FilterOptions<T>>(\n () =>\n _filterOptions ||\n ((o, q) =>\n fuzzy\n .filter(q, o, { extract: itemToQuery })\n .map((f) => f.original)\n .filter((f): f is T => !!f)),\n [_filterOptions, itemToQuery]\n );\n const onNewItem = useMemo<OnNewItem<T>>(\n () => _onNewItem || ((s) => s as T),\n [_onNewItem]\n );\n\n const items = useMemo(\n () =>\n (query ? filterOptions(options, query) : options).slice(\n 0,\n maxItemsDisplayed\n ),\n [query, options, filterOptions, maxItemsDisplayed]\n );\n const menuRef = useRef<HTMLUListElement>(null);\n const inputRef = useRef<HTMLInputElement & HTMLTextAreaElement>(null);\n const onEnter = useCallback(\n (value?: T) => {\n if (isOpen && value) {\n setQuery(itemToQuery(value));\n setValue(value);\n setIsTyping(false);\n } else if (onConfirm) {\n onConfirm();\n } else {\n setIsOpen(true);\n }\n },\n [setValue, onConfirm, isOpen]\n );\n const { activeIndex, onKeyDown } = useArrowKeyDown({\n onEnter,\n results: items,\n menuRef,\n });\n useEffect(() => {\n if (!items.length || !isTyping) close();\n else open();\n }, [items, close, open, isTyping]);\n useEffect(() => {\n if (query && isOpen) setValue(items[activeIndex] || onNewItem(query));\n else if (query) setValue(onNewItem(query));\n }, [setValue, activeIndex, items, onNewItem, query]);\n useEffect(() => {\n if (\n inputRef.current &&\n inputRef.current === document.activeElement &&\n value\n ) {\n const index = itemToQuery(value).length;\n inputRef.current.setSelectionRange(index, index);\n }\n const touchEndListener = (e: TouchEvent) => {\n if (\n !e.target ||\n !menuRef.current ||\n menuRef.current.contains(e.target as Element)\n ) {\n return;\n }\n if (!inputRef.current || inputRef.current.contains(e.target as Element)) {\n return;\n }\n close();\n };\n document.body.addEventListener(\"touchend\", touchEndListener);\n return () =>\n document.body.removeEventListener(\"touchend\", touchEndListener);\n }, [inputRef, menuRef, close]);\n const Input = useMemo(() => (multiline ? TextArea : InputGroup), [multiline]);\n return (\n <Popover\n portalClassName={\"roamjs-autocomplete-input\"}\n targetClassName={\"roamjs-autocomplete-input-target\"}\n captureDismiss={true}\n isOpen={isOpen}\n onOpened={open}\n minimal\n autoFocus={false}\n enforceFocus={false}\n position={PopoverPosition.BOTTOM_LEFT}\n modifiers={{\n flip: { enabled: false },\n preventOverflow: { enabled: false },\n }}\n content={\n <Menu className={\"max-h-64 overflow-auto max-w-md\"} ulRef={menuRef}>\n {items.map((t, i) => {\n const onClick = () => {\n setIsTyping(false);\n setValue(t);\n setQuery(itemToQuery(t));\n inputRef.current?.focus();\n };\n const sharedProps = {\n onClick,\n onTouchEnd: onClick,\n active: activeIndex === i,\n };\n return renderItem ? (\n <React.Fragment key={i}>\n {renderItem?.({\n item: t,\n ...sharedProps,\n })}\n </React.Fragment>\n ) : (\n <MenuItem\n text={itemToQuery(t)}\n key={i}\n multiline\n {...sharedProps}\n />\n );\n })}\n </Menu>\n }\n target={\n <Input\n disabled={disabled}\n value={query}\n onChange={(e) => {\n setIsTyping(true);\n setQuery(e.target.value);\n }}\n autoFocus={autoFocus}\n placeholder={placeholder}\n onKeyDown={(e) => {\n if (e.key === \"Escape\") {\n e.stopPropagation();\n close();\n } else {\n onKeyDown(e);\n }\n }}\n id={id}\n onClick={() => setIsTyping(true)}\n onBlur={(e) => {\n if (\n e.relatedTarget === null ||\n !(e.relatedTarget as HTMLElement).closest?.(\n \".roamjs-autocomplete-input\"\n )\n ) {\n setIsTyping(false);\n }\n if (onBlur) {\n onBlur(e.target.value);\n }\n }}\n inputRef={inputRef}\n {...(showButton\n ? {\n rightElement: (\n <Button icon={\"add\"} minimal onClick={() => onEnter()} />\n ),\n }\n : {})}\n />\n }\n />\n );\n};\n\nexport default AutocompleteInput;\n"]}
|
|
1
|
+
{"version":3,"file":"AutocompleteInput.js","sourceRoot":"","sources":["../../src/components/AutocompleteInput.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n InputGroup,\n Menu,\n MenuItem,\n PopoverPosition,\n Popover,\n Button,\n TextArea,\n} from \"@blueprintjs/core\";\nimport React, {\n useState,\n useCallback,\n useMemo,\n useRef,\n useEffect,\n} from \"react\";\nimport useArrowKeyDown from \"../hooks/useArrowKeyDown\";\nimport fuzzy from \"fuzzy\";\n\ntype FilterOptions<T> = (options: T[], query: string) => T[];\ntype OnNewItem<T> = (s: string) => T;\ntype ItemToQuery<T> = (t?: T) => string;\n\nexport type AutocompleteInputProps<T = string> = {\n value?: T;\n setValue: (q: T) => void;\n showButton?: boolean;\n onBlur?: (v: string) => void;\n onConfirm?: () => void;\n options?: T[];\n placeholder?: string;\n autoFocus?: boolean;\n multiline?: boolean;\n id?: string;\n filterOptions?: FilterOptions<T>;\n itemToQuery?: ItemToQuery<T>;\n renderItem?: (props: {\n item: T;\n onClick: () => void;\n active: boolean;\n }) => React.ReactElement;\n onNewItem?: OnNewItem<T>;\n disabled?: boolean;\n maxItemsDisplayed?: number;\n};\n\n// eslint-disable-next-line @typescript-eslint/no-unnecessary-type-constraint\nconst AutocompleteInput = <T extends unknown = string>({\n value,\n setValue,\n onBlur,\n onConfirm,\n showButton,\n options = [],\n placeholder = \"Enter value\",\n autoFocus,\n multiline,\n id,\n filterOptions: _filterOptions,\n itemToQuery: _itemToQuery,\n renderItem,\n onNewItem: _onNewItem,\n disabled,\n maxItemsDisplayed = Infinity,\n}: AutocompleteInputProps<T>): React.ReactElement => {\n const [isOpen, setIsOpen] = useState(false);\n const itemToQuery = useMemo<ItemToQuery<T>>(\n () => _itemToQuery || ((s) => (s ? `${s}` : \"\")),\n [_itemToQuery]\n );\n const [query, setQuery] = useState<string>(() => itemToQuery(value));\n const open = useCallback(() => setIsOpen(true), [setIsOpen]);\n const close = useCallback(() => setIsOpen(false), [setIsOpen]);\n const [isTyping, setIsTyping] = useState(false);\n const filterOptions = useMemo<FilterOptions<T>>(\n () =>\n _filterOptions ||\n ((o, q) =>\n fuzzy\n .filter(q, o, { extract: itemToQuery })\n .map((f) => f.original)\n .filter((f): f is T => !!f)),\n [_filterOptions, itemToQuery]\n );\n const onNewItem = useMemo<OnNewItem<T>>(\n () => _onNewItem || ((s) => s as T),\n [_onNewItem]\n );\n\n const items = useMemo(\n () =>\n (query ? filterOptions(options, query) : options).slice(\n 0,\n maxItemsDisplayed\n ),\n [query, options, filterOptions, maxItemsDisplayed]\n );\n const menuRef = useRef<HTMLUListElement>(null);\n const inputRef = useRef<HTMLInputElement & HTMLTextAreaElement>(null);\n const onEnter = useCallback(\n (value?: T) => {\n if (isOpen && value) {\n setQuery(itemToQuery(value));\n setValue(value);\n setIsTyping(false);\n } else if (onConfirm) {\n onConfirm();\n } else {\n setIsOpen(true);\n }\n },\n [setValue, onConfirm, isOpen]\n );\n const { activeIndex, onKeyDown } = useArrowKeyDown({\n onEnter,\n results: items,\n menuRef,\n });\n useEffect(() => {\n if (!items.length || !isTyping) close();\n else open();\n }, [items, close, open, isTyping]);\n useEffect(() => {\n if (query && isOpen) setValue(items[activeIndex] || onNewItem(query));\n else if (query) setValue(onNewItem(query));\n }, [setValue, activeIndex, items, onNewItem, query]);\n useEffect(() => {\n if (\n inputRef.current &&\n inputRef.current === document.activeElement &&\n value\n ) {\n const index = itemToQuery(value).length;\n inputRef.current.setSelectionRange(index, index);\n }\n const touchEndListener = (e: TouchEvent) => {\n if (\n !e.target ||\n !menuRef.current ||\n menuRef.current.contains(e.target as Element)\n ) {\n return;\n }\n if (!inputRef.current || inputRef.current.contains(e.target as Element)) {\n return;\n }\n close();\n };\n document.body.addEventListener(\"touchend\", touchEndListener);\n return () =>\n document.body.removeEventListener(\"touchend\", touchEndListener);\n }, [inputRef, menuRef, close]);\n const Input = useMemo(() => (multiline ? TextArea : InputGroup), [multiline]);\n return (\n <Popover\n portalClassName={\"roamjs-autocomplete-input\"}\n targetClassName={\"roamjs-autocomplete-input-target\"}\n captureDismiss={true}\n isOpen={isOpen}\n onOpened={open}\n minimal\n autoFocus={false}\n enforceFocus={false}\n position={PopoverPosition.BOTTOM_LEFT}\n modifiers={{\n flip: { enabled: false },\n preventOverflow: { enabled: false },\n }}\n content={\n <Menu className={\"max-h-64 overflow-auto max-w-md\"} ulRef={menuRef}>\n {items.map((t, i) => {\n const onClick = () => {\n setIsTyping(false);\n setValue(t);\n setQuery(itemToQuery(t));\n inputRef.current?.focus();\n };\n const sharedProps = {\n onClick,\n onTouchEnd: onClick,\n active: activeIndex === i,\n };\n return renderItem ? (\n <React.Fragment key={i}>\n {renderItem?.({\n item: t,\n ...sharedProps,\n })}\n </React.Fragment>\n ) : (\n <MenuItem\n text={itemToQuery(t)}\n key={i}\n multiline\n {...sharedProps}\n />\n );\n })}\n </Menu>\n }\n target={\n <Input\n disabled={disabled}\n value={query}\n onChange={(e) => {\n setIsTyping(true);\n setQuery(e.target.value);\n }}\n autoFocus={autoFocus}\n placeholder={placeholder}\n onKeyDown={(e) => {\n if (e.key === \"Escape\") {\n e.stopPropagation();\n close();\n } else {\n onKeyDown(e);\n }\n }}\n id={id}\n onClick={() => setIsTyping(true)}\n onBlur={(e) => {\n if (\n e.relatedTarget === null ||\n !(e.relatedTarget as HTMLElement).closest?.(\n \".roamjs-autocomplete-input\"\n )\n ) {\n setIsTyping(false);\n }\n if (onBlur) {\n onBlur(e.target.value);\n }\n }}\n inputRef={inputRef}\n {...(showButton\n ? {\n rightElement: (\n <Button icon={\"add\"} minimal onClick={() => onEnter()} />\n ),\n }\n : {})}\n />\n }\n />\n );\n};\n\nexport default AutocompleteInput;\n"]}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import React from "react";
|
|
2
|
-
|
|
2
|
+
type BlockErrorBoundaryProps = {
|
|
3
3
|
blockUid: string;
|
|
4
4
|
message: string;
|
|
5
5
|
};
|
|
6
|
-
|
|
6
|
+
type BlockErrorBoundaryState = {
|
|
7
7
|
hasError: boolean;
|
|
8
8
|
};
|
|
9
9
|
declare class BlockErrorBoundary extends React.Component<BlockErrorBoundaryProps, BlockErrorBoundaryState> {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BlockErrorBoundary.js","sourceRoot":"","sources":["../../src/components/BlockErrorBoundary.tsx"],"names":[],"mappings":";;;AAAA,0DAA0B;AAC1B,gFAAgD;AAKhD,MAAM,kBAAmB,SAAQ,eAAK,CAAC,SAGtC;IACC,YAAY,KAA8B;QACxC,KAAK,CAAC,KAAK,CAAC,CAAC;QACb,IAAI,CAAC,KAAK,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;IACnC,CAAC;IAED,MAAM,CAAC,wBAAwB;QAC7B,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IAC5B,CAAC;IAED,iBAAiB,CAAC,KAAY;QAC5B,IAAA,qBAAW,EAAC;YACV,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,EAAE,KAAK,CAAC,OAAO,CAAC,EAAE;YACpE,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ;SAC/B,CAAC,CAAC;IACL,CAAC;IAED,MAAM;QACJ,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE;
|
|
1
|
+
{"version":3,"file":"BlockErrorBoundary.js","sourceRoot":"","sources":["../../src/components/BlockErrorBoundary.tsx"],"names":[],"mappings":";;;AAAA,0DAA0B;AAC1B,gFAAgD;AAKhD,MAAM,kBAAmB,SAAQ,eAAK,CAAC,SAGtC;IACC,YAAY,KAA8B;QACxC,KAAK,CAAC,KAAK,CAAC,CAAC;QACb,IAAI,CAAC,KAAK,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;IACnC,CAAC;IAED,MAAM,CAAC,wBAAwB;QAC7B,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IAC5B,CAAC;IAED,iBAAiB,CAAC,KAAY;QAC5B,IAAA,qBAAW,EAAC;YACV,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,EAAE,KAAK,CAAC,OAAO,CAAC,EAAE;YACpE,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ;SAC/B,CAAC,CAAC;IACL,CAAC;IAED,MAAM;QACJ,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;YACxB,OAAO,sEAAmC,CAAC;QAC7C,CAAC;QACD,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC;IAC7B,CAAC;CACF;AAED,kBAAe,kBAAkB,CAAC","sourcesContent":["import React from \"react\";\nimport createBlock from \"../writes/createBlock\";\n\ntype BlockErrorBoundaryProps = { blockUid: string; message: string };\ntype BlockErrorBoundaryState = { hasError: boolean };\n\nclass BlockErrorBoundary extends React.Component<\n BlockErrorBoundaryProps,\n BlockErrorBoundaryState\n> {\n constructor(props: BlockErrorBoundaryProps) {\n super(props);\n this.state = { hasError: false };\n }\n\n static getDerivedStateFromError(): BlockErrorBoundaryState {\n return { hasError: true };\n }\n\n componentDidCatch(error: Error): void {\n createBlock({\n node: { text: this.props.message.replace(\"{ERROR}\", error.message) },\n parentUid: this.props.blockUid,\n });\n }\n\n render(): React.ReactNode {\n if (this.state.hasError) {\n return <div>Component Failed To Load</div>;\n }\n return this.props.children;\n }\n}\n\nexport default BlockErrorBoundary;\n"]}
|
|
@@ -2,12 +2,12 @@ import React from "react";
|
|
|
2
2
|
declare const BlockInput: ({ value, setValue, onBlur, onConfirm, getAllBlocks, autoFocus, }: {
|
|
3
3
|
value: string;
|
|
4
4
|
setValue: (q: string, uid?: string) => void;
|
|
5
|
-
onBlur?: (
|
|
6
|
-
onConfirm?: (
|
|
7
|
-
getAllBlocks?: (
|
|
5
|
+
onBlur?: (v: string) => void;
|
|
6
|
+
onConfirm?: () => void;
|
|
7
|
+
getAllBlocks?: () => {
|
|
8
8
|
text: string;
|
|
9
9
|
uid: string;
|
|
10
|
-
}[]
|
|
11
|
-
autoFocus?: boolean
|
|
10
|
+
}[];
|
|
11
|
+
autoFocus?: boolean;
|
|
12
12
|
}) => React.ReactElement;
|
|
13
13
|
export default BlockInput;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BlockInput.js","sourceRoot":"","sources":["../../src/components/BlockInput.tsx"],"names":[],"mappings":";;;AAAA,4CAM2B;AAC3B,uDAAsE;AACtE,yGAAyE;AACzE,uFAAuD;AAEvD,MAAM,oBAAoB,GAAG,CAC3B,CAAS,EACT,MAAuC,EACvC,EAAE;IACF,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACjC,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAC9D,CAAC,CAAC;AAEF,MAAM,UAAU,GAAG,CAAC,EAClB,KAAK,EACL,QAAQ,EACR,MAAM,EACN,SAAS,EACT,YAAY,GAAG,iCAAuB,EACtC,SAAS,GAQV,EAAsB,EAAE;IACvB,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,IAAA,gBAAQ,EAAC,KAAK,CAAC,CAAC;IAC5C,MAAM,IAAI,GAAG,IAAA,mBAAW,EAAC,GAAG,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;IAC7D,MAAM,KAAK,GAAG,IAAA,mBAAW,EAAC,GAAG,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;IAC/D,MAAM,SAAS,GAAG,IAAA,eAAO,EAAC,YAAY,EAAE,EAAE,CAAC,CAAC;IAC5C,MAAM,KAAK,GAAG,IAAA,eAAO,EACnB,GAAG,EAAE,CAAC,CAAC,KAAK,IAAI,MAAM,CAAC,CAAC,CAAC,oBAAoB,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EACrE,CAAC,KAAK,EAAE,SAAS,CAAC,CACnB,CAAC;IACF,MAAM,OAAO,GAAG,IAAA,cAAM,EAAmB,IAAI,CAAC,CAAC;IAC/C,MAAM,QAAQ,GAAG,IAAA,cAAM,EAAmB,IAAI,CAAC,CAAC;IAChD,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE,GAAG,IAAA,yBAAe,EAAC;QACjD,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;YACjB,IAAI,MAAM,EAAE;
|
|
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"]}
|
|
@@ -1 +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,GAGnB,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;
|
|
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,GAGnB,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,CAAC;QACpB,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,CAAC;YACb,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;QACJ,CAAC;IACH,CAAC;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}> = ({ 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"]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import React from "react";
|
|
2
2
|
import type { Field, UnionField } from "./ConfigPanels/types";
|
|
3
3
|
import { Brand } from "./ConfigPanels/getBrandColors";
|
|
4
|
-
export
|
|
4
|
+
export type ConfigTab = {
|
|
5
5
|
id: string;
|
|
6
6
|
toggleable?: boolean | "premium";
|
|
7
7
|
onEnable?: () => void;
|
|
@@ -9,7 +9,7 @@ export declare type ConfigTab = {
|
|
|
9
9
|
development?: boolean;
|
|
10
10
|
fields: Field<UnionField>[];
|
|
11
11
|
};
|
|
12
|
-
|
|
12
|
+
type Config = {
|
|
13
13
|
tabs: ConfigTab[];
|
|
14
14
|
versioning?: boolean;
|
|
15
15
|
brand?: Brand;
|
|
@@ -22,7 +22,7 @@ declare const ConfigPage: ({ id, config, pageUid, }: {
|
|
|
22
22
|
export declare const render: ({ h, title, pageUid, config, }: {
|
|
23
23
|
h: HTMLHeadingElement;
|
|
24
24
|
title: string;
|
|
25
|
-
pageUid?: string
|
|
25
|
+
pageUid?: string;
|
|
26
26
|
config: Config;
|
|
27
27
|
}) => void;
|
|
28
28
|
export declare const createConfigObserver: ({ title, config, }: {
|
|
@@ -30,6 +30,6 @@ export declare const createConfigObserver: ({ title, config, }: {
|
|
|
30
30
|
config: Config;
|
|
31
31
|
}) => Promise<{
|
|
32
32
|
pageUid: string;
|
|
33
|
-
observer?: MutationObserver
|
|
33
|
+
observer?: MutationObserver;
|
|
34
34
|
}>;
|
|
35
35
|
export default ConfigPage;
|
package/components/ConfigPage.js
CHANGED
|
@@ -124,7 +124,7 @@ const render = ({ h, title, pageUid = (0, getPageUidByPageTitle_1.default)(title
|
|
|
124
124
|
}
|
|
125
125
|
};
|
|
126
126
|
exports.render = render;
|
|
127
|
-
const createConfigObserver = (
|
|
127
|
+
const createConfigObserver = (_a) => tslib_1.__awaiter(void 0, [_a], void 0, function* ({ title, config, }) {
|
|
128
128
|
const pageUid = (0, getPageUidByPageTitle_1.default)(title) ||
|
|
129
129
|
(yield createConfigPage({
|
|
130
130
|
title,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ConfigPage.js","sourceRoot":"","sources":["../../src/components/ConfigPage.tsx"],"names":[],"mappings":";;;;AAAA,4CAAoD;AACpD,uDAAsE;AACtE,kEAAiC;AACjC,2FAA2D;AAC3D,gFAAgD;AAChD,8EAA8C;AAC9C,yGAAyE;AACzE,qGAAqE;AACrE,6GAA6E;AAC7E,sFAAsD;AACtD,0EAA0C;AAsB1C,MAAM,SAAS,GAAG,CAAC,EACjB,EAAE,EACF,MAAM,EACN,GAAG,EACH,OAAO,EACP,KAAK,EACL,UAAU,GAMC,EAAE,EAAE;IACf,MAAM,SAAS,GAAG,IAAA,eAAO,EAAC,GAAG,EAAE;QAC7B,IAAI,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE;YACpB,OAAO,OAAO,CAAC;SAChB;QACD,IAAI,GAAG,EAAE;YACP,OAAO,GAAG,CAAC;SACZ;QACD,IAAI,UAAU,EAAE;YACd,OAAO,EAAE,CAAC;SACX;QACD,MAAM,MAAM,GAAG,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;QACtD,IAAA,qBAAW,EAAC;YACV,SAAS,EAAE,OAAO;YAClB,KAAK;YACL,IAAI,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE;SAChC,CAAC,CAAC;QACH,OAAO,MAAM,CAAC;IAChB,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE,UAAU,CAAC,CAAC,CAAC;IACnC,MAAM,SAAS,GAAG,MAAM,CAAC,WAAW,CAClC,IAAA,mCAAyB,EAAC,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC;QAC1D,IAAI,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE;QACzB,GAAG;KACJ,CAAC,CACH,CAAC;IACF,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,IAAA,gBAAQ,EAChD,MAAM,CAAC,MAAM,IAAI,OAAO,UAAU,KAAK,QAAQ;QAC7C,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK;QACjB,CAAC,CAAC,SAAS,CACd,CAAC;IACF,MAAM,YAAY,GAAG,IAAA,mBAAW,EAC9B,CAAC,KAAa,EAAE,EAAE,CAAC,gBAAgB,CAAC,KAAK,CAAC,EAC1C,CAAC,gBAAgB,CAAC,CACnB,CAAC;IACF,OAAO,CACL,8BAAC,WAAI,IACH,QAAQ,QACR,EAAE,EAAE,GAAG,EAAE,aAAa,EACtB,QAAQ,EAAE,YAAY,EACtB,aAAa,EAAE,aAAa,EAC5B,wBAAwB,UAEvB,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE;QACvB,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,YAAY,EAAE,GAAG,KAAK,CAAC;QAC7C,OAAO,CACL,8BAAC,UAAG,IACF,EAAE,EAAE,KAAK,EACT,GAAG,EAAE,KAAK,EACV,KAAK,EAAE,IAAA,mBAAS,EAAC,KAAK,CAAC,EACvB,KAAK,EACH,8BAAC,KAAK,oBACA,KAAK,IACT,YAAY,EAAE,YAAY,EAC1B,KAAK,EAAE,CAAC,EACR,SAAS,EAAE,SAAS,EACpB,GAAG,EAAE,SAAS,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,IACnC,GAEJ,CACH,CAAC;IACJ,CAAC,CAAC,CACG,CACR,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,UAAU,GAAG,CAAC,EAClB,EAAE,EACF,MAAM,EACN,OAAO,GAKR,EAAsB,EAAE;;IACvB,MAAM,QAAQ,GAAG,MAAM,IAAI,MAAM,CAAC;IAClC,MAAM,QAAQ,GAAG,QAAQ;QACvB,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,CAAC,UAAU,CAAC;QAC5D,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;IACrC,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,IAAA,gBAAQ,EAAC,MAAA,QAAQ,CAAC,CAAC,CAAC,0CAAE,EAAE,CAAC,CAAC;IACpE,MAAM,YAAY,GAAG,IAAA,mBAAW,EAC9B,CAAC,KAAa,EAAE,EAAE,CAAC,gBAAgB,CAAC,KAAK,CAAC,EAC1C,CAAC,gBAAgB,CAAC,CACnB,CAAC;IACF,MAAM,IAAI,GAAG,IAAA,iCAAuB,EAAC,OAAO,CAAC,CAAC;IAE9C,0DAA0D;IAC1D,MAAM,QAAQ,GAAG,IAAA,cAAM,EAAiB,IAAI,CAAC,CAAC;IAC9C,MAAM,gBAAgB,GAAG,IAAA,eAAO,EAAC,GAAG,EAAE,CAAC,IAAA,yBAAe,EAAC,cAAc,CAAC,EAAE,EAAE,CAAC,CAAC;IAC5E,OAAO,CACL,8BAAC,WAAI,IAAC,KAAK,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,SAAS,EAAE,qBAAqB;QACjE,uCACE,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,eAAe,EAAE,EAC3D,GAAG,EAAE,QAAQ,EACb,QAAQ,EAAE,CAAC,CAAC;YAEZ,sCAAI,KAAK,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE;gBAAG,IAAA,mBAAS,EAAC,EAAE,CAAC;iCAAoB,CACzD;QACN,6CAAQ,yCAAyC,CAAS;QACzD,QAAQ,CAAC,CAAC,CAAC,CACV,8BAAC,WAAI,IACH,EAAE,EAAE,GAAG,EAAE,cAAc,EACvB,QAAQ,EAAE,YAAY,EACtB,aAAa,EAAE,aAAa,EAC5B,wBAAwB,QACxB,SAAS,EAAE,oBAAoB,IAE9B,QAAQ,CAAC,GAAG,CACX,CACE,EACE,EAAE,EAAE,KAAK,EACT,MAAM,EACN,UAAU,EACV,WAAW,GAAG,KAAK,EACnB,QAAQ,EACR,SAAS,GACV,EACD,CAAC,EACD,EAAE;;YAAC,OAAA,CACH,8BAAC,UAAG,IACF,EAAE,EAAE,KAAK,EACT,GAAG,EAAE,KAAK,EACV,KAAK,EAAE,IAAA,mBAAS,EAAC,KAAK,CAAC,EACvB,QAAQ,EAAE,WAAW,IAAI,CAAC,gBAAgB,EAC1C,KAAK,EACH,8BAAC,SAAS,IACR,EAAE,EAAE,KAAK,EACT,WAAW,EAAE,EAAE,EACf,MAAM,EAAE,MAAM,EACd,GAAG,EACD,CAAA,MAAA,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,0CACjD,GAAG,KAAI,EAAE,EAEf,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,CAAC,EACR,UAAU,EAAE,UAAU,EACtB,QAAQ,EAAE,QAAQ,EAClB,SAAS,EAAE,SAAS,GACpB,GAEJ,CACH,CAAA;SAAA,CACF,CACI,CACR,CAAC,CAAC,CAAC,CACF,8BAAC,SAAS,IACR,EAAE,EAAE,MAAM,EACV,WAAW,EAAE,EAAE,EACf,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,OAAO,EACZ,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,CAAC,EACR,UAAU,EAAE,KAAK,GACjB,CACH,CACI,CACR,CAAC;AACJ,CAAC,CAAC;AAEF,+CAA+C;AAC/C,MAAM,gBAAgB,GAAG,CAAC,MAA2B,EAAE,EAAE,CACvD,MAAM;KACH,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC;KAC/B,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;;IAAC,OAAA,CAAC;QACX,IAAI,EAAE,CAAC,CAAC,KAAK;QACb,QAAQ,EACN,CAAC,CAAC,KAAK,CAAC,IAAI,KAAK,MAAM;YACrB,CAAC,CAAC,EAAE;YACJ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,KAAK,QAAQ;gBAC3B,CAAC,CAAE,CAAC,CAAC,YAAgC,IAAI,EAAE;gBAC3C,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,KAAK,OAAO,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,KAAK,WAAW;oBAC1D,CAAC,CAAC,MAAC,CAAC,CAAC,YAAyB,0CAAE,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;oBACzD,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,KAAK,OAAO;wBAC1B,CAAC,CAAC,CAAC,CAAC,YAAY;4BACd,CAAC,CAAC,CAAC,CAAC,CAAC,YAA6B,CAAC;4BACnC,CAAC,CAAC,EAAE;wBACN,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC,YAAY,EAAE,EAAE,CAAC;KACtC,CAAC,CAAA;CAAA,CAAC,CAAC;AAER,MAAM,gBAAgB,GAAG,CAAC,EACxB,KAAK,EACL,MAAM,GAIP,EAAE,EAAE;;IACH,MAAM,OAAO,GACX,MAAM,IAAI,MAAM;QACd,CAAC,CAAC,MAAA,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,0CAAE,MAAM;QACrD,CAAC,CAAC,MAAM,CAAC;IACb,MAAM,OAAO,GAAG;QACd,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7C,GAAG,CAAC,MAAM,IAAI,MAAM;YAClB,CAAC,CAAC,MAAM,CAAC,IAAI;iBACR,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC;iBACrE,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBACX,IAAI,EAAE,CAAC,CAAC,EAAE;gBACV,QAAQ,EAAE,gBAAgB,CAAC,CAAC,CAAC,MAAM,CAAC;aACrC,CAAC,CAAC;YACP,CAAC,CAAC,EAAE,CAAC;KACR,CAAC;IACF,OAAO,IAAA,oBAAU,EAAC;QAChB,KAAK;QACL,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;KACjD,CAAC,CAAC;AACL,CAAC,CAAC;AAEK,MAAM,MAAM,GAAG,CAAC,EACrB,CAAC,EACD,KAAK,EACL,OAAO,GAAG,IAAA,+BAAqB,EAAC,KAAK,CAAC,EACtC,MAAM,GAMP,EAAE,EAAE;;IACH,MAAM,GAAG,GAAG,IAAA,+BAAqB,EAAC,KAAK,CAAC,CAAC;IACzC,MAAM,SAAS,GAAG,eAAe,GAAG,EAAE,CAAC;IACvC,MAAM,eAAe,GAAG,MAAA,CAAC,CAAC,aAAa,0CAAE,aAAa,CAAC;IACvD,IAAI,eAAe,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC,SAAS,CAAC,EAAE;QAC/D,eAAe,CAAC,YAAY,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;QAChD,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAC7C,MAAM,YAAY,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACnD,MAAM,CAAC,EAAE,GAAG,GAAG,YAAY,SAAS,CAAC;QACrC,eAAe,CAAC,YAAY,CAC1B,MAAM,EACN,CAAA,MAAA,CAAC,CAAC,aAAa,0CAAE,kBAAkB,KAAI,IAAI,CAC5C,CAAC;QACF,mBAAQ,CAAC,MAAM,CACb,8BAAC,UAAU,IAAC,EAAE,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAI,EAClE,MAAM,CACP,CAAC;KACH;AACH,CAAC,CAAC;AA5BW,QAAA,MAAM,UA4BjB;AAEK,MAAM,oBAAoB,GAAG,CAAO,EACzC,KAAK,EACL,MAAM,GAIP,EAA6D,EAAE;IAC9D,MAAM,OAAO,GACX,IAAA,+BAAqB,EAAC,KAAK,CAAC;QAC5B,CAAC,MAAM,gBAAgB,CAAC;YACtB,KAAK;YACL,MAAM;SACP,CAAC,CAAC,CAAC;IACN,IAAI,MAAM,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE;QAC7D,MAAM,QAAQ,GAAG,IAAA,4BAAkB,EAAC;YAClC,SAAS,EAAE,kBAAkB;YAC7B,GAAG,EAAE,IAAI;YACT,QAAQ,EAAE,CAAC,CAAc,EAAE,EAAE;gBAC3B,MAAM,CAAC,GAAG,CAAuB,CAAC;gBAClC,IAAI,CAAC,CAAC,SAAS,KAAK,KAAK,EAAE;oBACzB,IAAA,cAAM,EAAC;wBACL,OAAO;wBACP,MAAM;wBACN,KAAK;wBACL,CAAC;qBACF,CAAC,CAAC;iBACJ;YACH,CAAC;SACF,CAAC,CAAC;QACH,OAAO;YACL,OAAO;YACP,QAAQ;SACT,CAAC;KACH;IACD,OAAO;QACL,OAAO;KACR,CAAC;AACJ,CAAC,CAAA,CAAC;AArCW,QAAA,oBAAoB,wBAqC/B;AAEF,kBAAe,UAAU,CAAC","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"]}
|
|
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"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BlockPanel.js","sourceRoot":"","sources":["../../../src/components/ConfigPanels/BlockPanel.tsx"],"names":[],"mappings":";;;AAAA,4CAA0C;AAC1C,uDAAiD;AACjD,kHAAkF;AAClF,6EAA6C;AAC7C,mFAAmD;AACnD,yEAAyC;AAGzC,MAAM,UAAU,GAA2B,CAAC,EAC1C,GAAG,EAAE,UAAU,EACf,SAAS,EACT,KAAK,EACL,YAAY,EACZ,WAAW,GACZ,EAAE,EAAE;IACH,MAAM,YAAY,GAAG,IAAA,cAAM,EAAC,IAAI,CAAC,CAAC;IAClC,IAAA,iBAAS,EAAC,GAAG,EAAE;QACb,IAAI,YAAY,CAAC,OAAO,EAAE;
|
|
1
|
+
{"version":3,"file":"BlockPanel.js","sourceRoot":"","sources":["../../../src/components/ConfigPanels/BlockPanel.tsx"],"names":[],"mappings":";;;AAAA,4CAA0C;AAC1C,uDAAiD;AACjD,kHAAkF;AAClF,6EAA6C;AAC7C,mFAAmD;AACnD,yEAAyC;AAGzC,MAAM,UAAU,GAA2B,CAAC,EAC1C,GAAG,EAAE,UAAU,EACf,SAAS,EACT,KAAK,EACL,YAAY,EACZ,WAAW,GACZ,EAAE,EAAE;IACH,MAAM,YAAY,GAAG,IAAA,cAAM,EAAC,IAAI,CAAC,CAAC;IAClC,IAAA,iBAAS,EAAC,GAAG,EAAE;QACb,IAAI,YAAY,CAAC,OAAO,EAAE,CAAC;YACzB,MAAM,EAAE,GAAG,YAAY,CAAC,OAAO,CAAC;YAChC,CAAC,UAAU;gBACT,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC;gBAC7B,CAAC,CAAC,IAAA,qBAAW,EAAC,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE,CAAC,CAClE;iBACE,IAAI,CACH,CAAC,SAAS,EAAE,EAAE,CACZ,IAAA,oCAA0B,EAAC,SAAS,CAAC;gBACrC,IAAA,qBAAW,EAAC;oBACV,IAAI,EAAE,YAAY,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE;oBACnC,SAAS,EAAE,SAAS;iBACrB,CAAC,CACL;iBACA,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE;gBACZ,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC;oBAC5C,GAAG;oBACH,EAAE;iBACH,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;QACP,CAAC;IACH,CAAC,EAAE,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC,CAAC;IACjC,OAAO,CACL;QACE,8BAAC,YAAK;YACH,IAAA,mBAAS,EAAC,KAAK,CAAC;YACjB,8BAAC,qBAAW,IAAC,WAAW,EAAE,WAAW,GAAI,CACnC;QACR,uCACE,GAAG,EAAE,YAAY,EACjB,KAAK,EAAE;gBACL,MAAM,EAAE,qBAAqB;gBAC7B,OAAO,EAAE,OAAO;gBAChB,YAAY,EAAE,CAAC;aAChB,GACI,CACN,CACJ,CAAC;AACJ,CAAC,CAAC;AAEF,UAAU,CAAC,IAAI,GAAG,OAAO,CAAC;AAE1B,kBAAe,UAAU,CAAC","sourcesContent":["import { Label } from \"@blueprintjs/core\";\nimport React, { useRef, useEffect } from \"react\";\nimport getFirstChildUidByBlockUid from \"../../queries/getFirstChildUidByBlockUid\";\nimport idToTitle from \"../../util/idToTitle\";\nimport createBlock from \"../../writes/createBlock\";\nimport Description from \"../Description\";\nimport type { FieldPanel, BlockField } from \"./types\";\n\nconst BlockPanel: FieldPanel<BlockField> = ({\n uid: initialUid,\n parentUid,\n title,\n defaultValue,\n description,\n}) => {\n const containerRef = useRef(null);\n useEffect(() => {\n if (containerRef.current) {\n const el = containerRef.current;\n (initialUid\n ? Promise.resolve(initialUid)\n : createBlock({ node: { text: title, children: [] }, parentUid })\n )\n .then(\n (formatUid) =>\n getFirstChildUidByBlockUid(formatUid) ||\n createBlock({\n node: defaultValue || { text: \" \" },\n parentUid: formatUid,\n })\n )\n .then((uid) => {\n window.roamAlphaAPI.ui.components.renderBlock({\n uid,\n el,\n });\n });\n }\n }, [containerRef, defaultValue]);\n return (\n <>\n <Label>\n {idToTitle(title)}\n <Description description={description} />\n </Label>\n <div\n ref={containerRef}\n style={{\n border: \"1px solid #33333333\",\n padding: \"8px 0\",\n borderRadius: 4,\n }}\n ></div>\n </>\n );\n};\n\nBlockPanel.type = \"block\";\n\nexport default BlockPanel;\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BlocksPanel.js","sourceRoot":"","sources":["../../../src/components/ConfigPanels/BlocksPanel.tsx"],"names":[],"mappings":";;;AAAA,4CAA2D;AAC3D,uDAA2D;AAC3D,kHAAkF;AAClF,6EAA6C;AAC7C,mFAAmD;AACnD,yEAAyC;AAGzC,MAAM,WAAW,GAA4B,CAAC,EAC5C,GAAG,EAAE,UAAU,EACf,SAAS,EACT,KAAK,EACL,YAAY,EACZ,WAAW,GACZ,EAAE,EAAE;IACH,MAAM,YAAY,GAAG,IAAA,cAAM,EAAC,IAAI,CAAC,CAAC;IAClC,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,IAAA,gBAAQ,EAAC,UAAU,IAAI,SAAS,CAAC,CAAC;IAC9D,IAAA,iBAAS,EAAC,GAAG,EAAE;QACb,IAAI,YAAY,CAAC,OAAO,EAAE;
|
|
1
|
+
{"version":3,"file":"BlocksPanel.js","sourceRoot":"","sources":["../../../src/components/ConfigPanels/BlocksPanel.tsx"],"names":[],"mappings":"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","sourcesContent":["import { Button, Label, Tooltip } from \"@blueprintjs/core\";\nimport React, { useEffect, useRef, useState } from \"react\";\nimport getFirstChildUidByBlockUid from \"../../queries/getFirstChildUidByBlockUid\";\nimport idToTitle from \"../../util/idToTitle\";\nimport createBlock from \"../../writes/createBlock\";\nimport Description from \"../Description\";\nimport type { FieldPanel, BlocksField } from \"./types\";\n\nconst BlocksPanel: FieldPanel<BlocksField> = ({\n uid: initialUid,\n parentUid,\n title,\n defaultValue,\n description,\n}) => {\n const containerRef = useRef(null);\n const [navUid, setNavUid] = useState(initialUid || parentUid);\n useEffect(() => {\n if (containerRef.current) {\n const el = containerRef.current;\n (initialUid\n ? Promise.resolve(initialUid)\n : createBlock({ node: { text: title, children: [] }, parentUid }).then(\n (uid) => {\n setNavUid(uid);\n return uid;\n }\n )\n )\n .then((formatUid) =>\n getFirstChildUidByBlockUid(formatUid)\n ? formatUid\n : (defaultValue?.length\n ? Promise.all(\n defaultValue.map((node, order) =>\n createBlock({\n node,\n parentUid: formatUid,\n order,\n })\n )\n )\n : createBlock({\n node: { text: \" \" },\n parentUid: formatUid,\n })\n ).then(() => formatUid)\n )\n .then((uid) => {\n window.roamAlphaAPI.ui.components.renderBlock({\n uid,\n el,\n });\n });\n }\n }, [containerRef, defaultValue, setNavUid]);\n return (\n <>\n <Label>\n {idToTitle(title)}\n <Description description={description} />\n <Tooltip content={\"Click here to edit these blocks directly\"}>\n <Button\n icon={\"link\"}\n minimal\n onClick={() =>\n window.roamAlphaAPI.ui.mainWindow.openBlock({\n block: { uid: navUid },\n })\n }\n />\n </Tooltip>\n </Label>\n <style>{`.roamjs-config-blocks > div > .rm-block-main {\n display: none;\n }\n \n .roamjs-config-blocks > div > .rm-block-children > .rm-multibar {\n display: none;\n }\n \n .roamjs-config-blocks > div > .rm-block-children {\n margin-left: -4px;\n }`}</style>\n <div\n ref={containerRef}\n style={{\n border: \"1px solid #33333333\",\n padding: \"8px 0\",\n borderRadius: 4,\n }}\n className={\"roamjs-config-blocks\"}\n ></div>\n </>\n );\n};\n\nBlocksPanel.type = \"blocks\";\n\nexport default BlocksPanel;\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FlagPanel.js","sourceRoot":"","sources":["../../../src/components/ConfigPanels/FlagPanel.tsx"],"names":[],"mappings":";;;AAAA,4CAA6C;AAC7C,uDAAwC;AACxC,6EAA6C;AAC7C,yEAAyC;AAGzC,MAAM,SAAS,GAA0B,CAAC,EACxC,KAAK,EACL,GAAG,EAAE,UAAU,EACf,SAAS,EACT,KAAK,EACL,WAAW,EACX,OAAO,GAAG,EAAE,EACZ,QAAQ,GAAG,KAAK,GACjB,EAAE,EAAE;IACH,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,GAAG,IAAA,gBAAQ,EAAC,UAAU,CAAC,CAAC;IAC3C,OAAO,CACL,8BAAC,eAAQ,IACP,OAAO,EAAE,CAAC,CAAC,GAAG,EACd,QAAQ,EAAE,QAAQ,EAClB,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE;;YACd,MAAM,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC,MAA0B,CAAC;YACjD,IAAI,OAAO,EAAE;
|
|
1
|
+
{"version":3,"file":"FlagPanel.js","sourceRoot":"","sources":["../../../src/components/ConfigPanels/FlagPanel.tsx"],"names":[],"mappings":";;;AAAA,4CAA6C;AAC7C,uDAAwC;AACxC,6EAA6C;AAC7C,yEAAyC;AAGzC,MAAM,SAAS,GAA0B,CAAC,EACxC,KAAK,EACL,GAAG,EAAE,UAAU,EACf,SAAS,EACT,KAAK,EACL,WAAW,EACX,OAAO,GAAG,EAAE,EACZ,QAAQ,GAAG,KAAK,GACjB,EAAE,EAAE;IACH,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,GAAG,IAAA,gBAAQ,EAAC,UAAU,CAAC,CAAC;IAC3C,OAAO,CACL,8BAAC,eAAQ,IACP,OAAO,EAAE,CAAC,CAAC,GAAG,EACd,QAAQ,EAAE,QAAQ,EAClB,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE;;YACd,MAAM,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC,MAA0B,CAAC;YACjD,IAAI,OAAO,EAAE,CAAC;gBACZ,MAAM,MAAM,GAAG,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;gBACtD,MAAM,CAAC,YAAY,CAAC,WAAW,CAAC;oBAC9B,KAAK,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE;oBACrC,QAAQ,EAAE,EAAE,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE;iBAC7C,CAAC,CAAC;gBACH,UAAU,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;YACtC,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,YAAY,CAAC,WAAW,CAAC,EAAE,KAAK,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;gBACpD,MAAM,CAAC,EAAE,CAAC,CAAC;YACb,CAAC;YACD,MAAA,OAAO,CAAC,QAAQ,wDAAG,OAAO,EAAE,CAAC,CAAC,CAAC;QACjC,CAAC,EACD,YAAY,EACV;YACG,IAAA,mBAAS,EAAC,KAAK,CAAC;YACjB,8BAAC,qBAAW,IAAC,WAAW,EAAE,WAAW,GAAI,CACxC,GAEL,CACH,CAAC;AACJ,CAAC,CAAC;AAEF,SAAS,CAAC,IAAI,GAAG,MAAM,CAAC;AAExB,kBAAe,SAAS,CAAC","sourcesContent":["import { Checkbox } from \"@blueprintjs/core\";\nimport React, { useState } from \"react\";\nimport idToTitle from \"../../util/idToTitle\";\nimport Description from \"../Description\";\nimport type { FieldPanel, FlagField } from \"./types\";\n\nconst FlagPanel: FieldPanel<FlagField> = ({\n title,\n uid: initialUid,\n parentUid,\n order,\n description,\n options = {},\n disabled = false,\n}) => {\n const [uid, setUid] = useState(initialUid);\n return (\n <Checkbox\n checked={!!uid}\n disabled={disabled}\n onChange={(e) => {\n const { checked } = e.target as HTMLInputElement;\n if (checked) {\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), 1);\n } else {\n window.roamAlphaAPI.deleteBlock({ block: { uid } });\n setUid(\"\");\n }\n options.onChange?.(checked, e);\n }}\n labelElement={\n <>\n {idToTitle(title)}\n <Description description={description} />\n </>\n }\n />\n );\n};\n\nFlagPanel.type = \"flag\";\n\nexport default FlagPanel;\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MultiChildPanel.js","sourceRoot":"","sources":["../../../src/components/ConfigPanels/MultiChildPanel.tsx"],"names":[],"mappings":";;;AAAA,4CAAkD;AAClD,uDAAwC;AACxC,gHAAgF;AAChF,6EAA6C;AAC7C,yEAAyC;AAGzC,MAAM,eAAe,GAQjB,CAAC,EACH,GAAG,EAAE,UAAU,EACf,KAAK,EACL,WAAW,EACX,KAAK,EACL,SAAS,EACT,cAAc,GACf,EAAE,EAAE;IACH,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,GAAG,IAAA,gBAAQ,EAAC,UAAU,CAAC,CAAC;IAC3C,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,IAAA,gBAAQ,EAAC,GAAG,EAAE,CACtC,GAAG,CAAC,CAAC,CAAC,IAAA,mCAAyB,EAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAC1C,CAAC;IACF,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,IAAA,gBAAQ,EAAC,EAAE,CAAC,CAAC;IACvC,OAAO,CACL;QACE,8BAAC,YAAK;YACH,IAAA,mBAAS,EAAC,KAAK,CAAC;YACjB,8BAAC,qBAAW,IAAC,WAAW,EAAE,WAAW,GAAI;YACzC,uCAAK,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE;gBAC7B,8BAAC,cAAc,IAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,GAAI;gBACpD,8BAAC,aAAM,IACL,IAAI,EAAE,MAAM,EACZ,OAAO,QACP,QAAQ,EAAE,CAAC,KAAK,EAChB,OAAO,EAAE,GAAG,EAAE;wBACZ,MAAM,QAAQ,GAAG,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;wBACxD,IAAI,GAAG,EAAE;
|
|
1
|
+
{"version":3,"file":"MultiChildPanel.js","sourceRoot":"","sources":["../../../src/components/ConfigPanels/MultiChildPanel.tsx"],"names":[],"mappings":"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","sourcesContent":["import { Button, Label } from \"@blueprintjs/core\";\nimport React, { useState } from \"react\";\nimport getShallowTreeByParentUid from \"../../queries/getShallowTreeByParentUid\";\nimport idToTitle from \"../../util/idToTitle\";\nimport Description from \"../Description\";\nimport type { FieldPanel, ArrayField } from \"./types\";\n\nconst MultiChildPanel: FieldPanel<\n ArrayField,\n {\n InputComponent: (props: {\n value: string;\n setValue: (s: string) => void;\n }) => React.ReactElement;\n }\n> = ({\n uid: initialUid,\n title,\n description,\n order,\n parentUid,\n InputComponent,\n}) => {\n const [uid, setUid] = useState(initialUid);\n const [texts, setTexts] = useState(() =>\n uid ? getShallowTreeByParentUid(uid) : []\n );\n const [value, setValue] = useState(\"\");\n return (\n <>\n <Label>\n {idToTitle(title)}\n <Description description={description} />\n <div style={{ display: \"flex\" }}>\n <InputComponent value={value} setValue={setValue} />\n <Button\n icon={\"plus\"}\n minimal\n disabled={!value}\n onClick={() => {\n const valueUid = window.roamAlphaAPI.util.generateUID();\n if (uid) {\n window.roamAlphaAPI.createBlock({\n location: { \"parent-uid\": uid, order: texts.length },\n block: { string: value, uid: valueUid },\n });\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 window.roamAlphaAPI.createBlock({\n block: { string: value, uid: valueUid },\n location: { order: 0, \"parent-uid\": newUid },\n });\n }\n setTexts([...texts, { text: value, uid: valueUid }]);\n setValue(\"\");\n }}\n />\n </div>\n </Label>\n {texts.map((p) => (\n <div\n key={p.uid}\n style={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n }}\n >\n <span\n style={{\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n overflow: \"hidden\",\n }}\n >\n {p.text}\n </span>\n <Button\n icon={\"trash\"}\n minimal\n onClick={() => {\n window.roamAlphaAPI.deleteBlock({ block: { uid: p.uid } });\n setTexts(texts.filter((f) => f.uid !== p.uid));\n }}\n />\n </div>\n ))}\n </>\n );\n};\n\nMultiChildPanel.type = \"custom\";\n\nexport default MultiChildPanel;\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OauthPanel.js","sourceRoot":"","sources":["../../../src/components/ConfigPanels/OauthPanel.tsx"],"names":[],"mappings":";;;AAAA,4CAAqD;AACrD,uDAAqD;AACrD,4GAA4E;AAC5E,gHAAgF;AAChF,yFAAyD;AACzD,+FAA+D;AAC/D,gEAA6D;AAC7D,mFAAmD;AACnD,yEAAyC;AACzC,6EAA6C;AAG7C,MAAM,UAAU,GAA2B,CAAC,EAAE,GAAG,EAAE,SAAS,EAAE,OAAO,EAAE,EAAE,EAAE;IACzE,MAAM,GAAG,GAAG,SAAS,OAAO,CAAC,OAAO,EAAE,CAAC;IACvC,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,IAAA,gBAAQ,EAAC,CAAC,CAAC,IAAA,yBAAe,EAAC,GAAG,CAAC,CAAC,CAAC;IACjE,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,IAAA,gBAAQ,EAEtC,GAAG,EAAE,CACL,QAAQ;QACN,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAA,yBAAe,EAAC,GAAG,CAAW,CAAC;QAC5C,CAAC,CAAC,GAAG;YACL,CAAC,CAAC,IAAA,iCAAuB,EAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;;gBAAC,OAAA,CAAC;oBACvC,IAAI,EAAE,CAAA,MAAA,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,0CAAE,IAAI,EAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,iBAAiB;oBACtD,GAAG,EAAE,CAAC,CAAC,GAAG;oBACV,IAAI,EAAE,CAAA,MAAA,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,0CAAE,IAAI,KAAI,CAAC,CAAC,IAAI;iBACpC,CAAC,CAAA;aAAA,CAAC;YACL,CAAC,CAAC,EAAE,CACP,CAAC;IACF,MAAM,OAAO,GAAG,IAAA,mBAAW,EACzB,CAAC,CAAC,EAAE,EAAE;QACJ,MAAM,OAAO,GAAI,CAAC,CAAC,MAA2B,CAAC,OAAO,CAAC;QACvD,WAAW,CAAC,OAAO,CAAC,CAAC;QACrB,IAAI,OAAO,EAAE;
|
|
1
|
+
{"version":3,"file":"OauthPanel.js","sourceRoot":"","sources":["../../../src/components/ConfigPanels/OauthPanel.tsx"],"names":[],"mappings":"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","sourcesContent":["import { Button, Checkbox } from \"@blueprintjs/core\";\nimport React, { useCallback, useState } from \"react\";\nimport getBasicTreeByParentUid from \"../../queries/getBasicTreeByParentUid\";\nimport getShallowTreeByParentUid from \"../../queries/getShallowTreeByParentUid\";\nimport localStorageGet from \"../../util/localStorageGet\";\nimport localStorageRemove from \"../../util/localStorageRemove\";\nimport { localStorageSet } from \"../../util/localStorageSet\";\nimport deleteBlock from \"../../writes/deleteBlock\";\nimport Description from \"../Description\";\nimport ExternalLogin from \"../ExternalLogin\";\nimport type { OauthField, FieldPanel } from \"./types\";\n\nconst OauthPanel: FieldPanel<OauthField> = ({ uid, parentUid, options }) => {\n const key = `oauth-${options.service}`;\n const [useLocal, setUseLocal] = useState(!!localStorageGet(key));\n const [accounts, setAccounts] = useState<\n { text: string; uid: string; data: string }[]\n >(() =>\n useLocal\n ? JSON.parse(localStorageGet(key) as string)\n : uid\n ? getBasicTreeByParentUid(uid).map((v) => ({\n text: v.children[0]?.text ? v.text : \"Default Account\",\n uid: v.uid,\n data: v.children[0]?.text || v.text,\n }))\n : []\n );\n const onCheck = useCallback(\n (e) => {\n const checked = (e.target as HTMLInputElement).checked;\n setUseLocal(checked);\n if (checked) {\n if (uid) {\n getShallowTreeByParentUid(uid).forEach(({ uid: u }) =>\n deleteBlock(u)\n );\n }\n localStorageSet(key, JSON.stringify(accounts));\n } else {\n localStorageRemove(key);\n if (uid) {\n accounts.forEach(({ text, uid: u, data }, order) => {\n window.roamAlphaAPI.createBlock({\n location: { \"parent-uid\": uid, order },\n block: { string: text, uid: u },\n });\n window.roamAlphaAPI.createBlock({\n location: { \"parent-uid\": u, order: 0 },\n block: { string: data },\n });\n });\n }\n }\n },\n [setUseLocal, accounts, uid, key]\n );\n return (\n <>\n <Checkbox\n labelElement={\n <>\n Store Locally\n <Description\n description={\n \"If checked, sensitive authentication data will be stored locally on your machine and will require re-logging in per device. If unchecked, sensitive authentication data will be stored in your Roam Graph.\"\n }\n />\n </>\n }\n checked={useLocal}\n onChange={onCheck}\n />\n <ExternalLogin\n useLocal={useLocal}\n onSuccess={(acc) => setAccounts([...accounts, acc])}\n parentUid={parentUid}\n loggedIn={!!accounts.length}\n {...options}\n />\n {!!accounts.length && (\n <>\n <h5 style={{ marginTop: 8 }}>Accounts</h5>\n <hr />\n <ul style={{ marginTop: 8, padding: 0 }}>\n {accounts.map((act) => (\n <li\n key={act.uid}\n style={{\n display: \"flex\",\n justifyContent: \"space-between\",\n alignItems: \"center\",\n marginTop: 8,\n }}\n >\n <span style={{ minWidth: 192 }}>{act.text}</span>\n <Button\n text={\"Log Out\"}\n onClick={() => {\n if (useLocal) {\n const accts = JSON.parse(\n localStorageGet(key) as string\n ) as {\n uid: string;\n }[];\n localStorageSet(\n key,\n JSON.stringify(accts.filter((a) => act.uid !== a.uid))\n );\n } else {\n deleteBlock(act.uid);\n }\n setAccounts(accounts.filter((a) => act.uid !== a.uid));\n }}\n />\n </li>\n ))}\n </ul>\n </>\n )}\n </>\n );\n};\n\nOauthPanel.type = \"oauth\";\n\nexport default OauthPanel;\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getBrandColors.js","sourceRoot":"","sources":["../../../src/components/ConfigPanels/getBrandColors.tsx"],"names":[],"mappings":";;;AAAA,0DAA0B;AAQ1B,MAAM,QAAQ,GAAG,CAAC,CAAU,EAAE,EAAE;IAC9B,IAAI,CAAC,CAAC;QAAE,OAAO,SAAS,CAAC;IACzB,IAAI;
|
|
1
|
+
{"version":3,"file":"getBrandColors.js","sourceRoot":"","sources":["../../../src/components/ConfigPanels/getBrandColors.tsx"],"names":[],"mappings":";;;AAAA,0DAA0B;AAQ1B,MAAM,QAAQ,GAAG,CAAC,CAAU,EAAE,EAAE;IAC9B,IAAI,CAAC,CAAC;QAAE,OAAO,SAAS,CAAC;IACzB,IAAI,CAAC;QACH,OAAO,IAAA,eAAK,EAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,cAAc,GAAG,CAAC,IAAa,EAAqB,EAAE;IAC1D,MAAM,UAAU,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;IAClC,IAAI,CAAC,UAAU;QAAE,OAAO,SAAS,CAAC;IAClC,OAAO;QACL,IAAI,EAAE,UAAU,CAAC,QAAQ,EAAE;QAC3B,KAAK,EAAE,UAAU;aACd,KAAK,CAAC,GAAG,CAAC;aACV,SAAS,CAAC,UAAU,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;aACrC,QAAQ,EAAE;QACb,MAAM,EAAE,UAAU,CAAC,SAAS,CAAC,UAAU,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE;KACpE,CAAC;AACJ,CAAC,CAAC;AAEF,kBAAe,cAAc,CAAC","sourcesContent":["import Color from \"color\";\n\nexport type Brand = {\n base: string;\n bright: string;\n faded: string;\n};\n\nconst tryColor = (s?: string) => {\n if (!s) return undefined;\n try {\n return Color(s);\n } catch (e) {\n return undefined;\n }\n};\n\nconst getBrandColors = (base?: string): Brand | undefined => {\n const brandColor = tryColor(base);\n if (!brandColor) return undefined;\n return {\n base: brandColor.toString(),\n faded: brandColor\n .alpha(0.2)\n .lightness(brandColor.lightness() + 5)\n .toString(),\n bright: brandColor.lightness(brandColor.lightness() + 5).toString(),\n };\n};\n\nexport default getBrandColors;\n"]}
|