roamjs-components 0.82.11 → 0.82.13

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.
@@ -1,7 +1,6 @@
1
1
  import React from "react";
2
2
  import type { Field, UnionField } from "./ConfigPanels/types";
3
3
  import { Brand } from "./ConfigPanels/getBrandColors";
4
- import { VersionSwitcherProps } from "./VersionSwitcher";
5
4
  declare type ConfigTab = {
6
5
  id: string;
7
6
  toggleable?: boolean | "premium";
@@ -12,7 +11,7 @@ declare type ConfigTab = {
12
11
  };
13
12
  declare type Config = {
14
13
  tabs: ConfigTab[];
15
- versioning?: boolean | ((props: VersionSwitcherProps) => void);
14
+ versioning?: boolean;
16
15
  brand?: Brand;
17
16
  } | Field<UnionField>[];
18
17
  declare const ConfigPage: ({ id, config, pageUid, }: {
@@ -46,7 +46,7 @@ const FieldTabs = ({ id, fields, uid, pageUid, order, toggleable, }) => {
46
46
  })));
47
47
  };
48
48
  const ConfigPage = ({ id, config, pageUid, }) => {
49
- var _a, _b, _c;
49
+ var _a;
50
50
  const isLegacy = "tabs" in config;
51
51
  const userTabs = isLegacy
52
52
  ? config.tabs.filter((t) => t.fields.length || t.toggleable)
@@ -55,23 +55,13 @@ const ConfigPage = ({ id, config, pageUid, }) => {
55
55
  const onTabsChange = (0, react_1.useCallback)((tabId) => setSelectedTabId(tabId), [setSelectedTabId]);
56
56
  const tree = (0, getBasicTreeByParentUid_1.default)(pageUid);
57
57
  // first character trimmed intentionally for the `v` below
58
- const currentVersion = ((_c = (_b = window.roamjs) === null || _b === void 0 ? void 0 : _b.version) === null || _c === void 0 ? void 0 : _c[id]) || "ersion not set";
59
58
  const titleRef = (0, react_1.useRef)(null);
60
59
  const experimentalMode = (0, react_1.useMemo)(() => (0, localStorageGet_1.default)("experimental"), []);
61
60
  return (react_1.default.createElement(core_1.Card, { style: { color: "#202B33" }, className: "roamjs-config-panel" },
62
61
  react_1.default.createElement("div", { style: { display: "flex", justifyContent: "space-between" }, ref: titleRef, tabIndex: -1 },
63
62
  react_1.default.createElement("h4", { style: { padding: 4 } },
64
63
  (0, idToTitle_1.default)(id),
65
- " Configuration"),
66
- react_1.default.createElement("span", null,
67
- react_1.default.createElement("span", { style: { color: "#cccccc", fontSize: 8 } },
68
- "v",
69
- currentVersion),
70
- "versioning" in config && typeof config.versioning === "function" && (react_1.default.createElement(core_1.Button, { icon: "git-branch", minimal: true, onClick: () => typeof config.versioning === "function" &&
71
- config.versioning({
72
- id,
73
- currentVersion,
74
- }), style: { marginLeft: 4 } })))),
64
+ " Configuration")),
75
65
  react_1.default.createElement("style", null, `.roamjs-config-tabs {\npadding: 4px;\n}`),
76
66
  isLegacy ? (react_1.default.createElement(core_1.Tabs, { id: `${id}-config-tabs`, onChange: onTabsChange, selectedTabId: selectedTabId, renderActiveTabPanelOnly: true, className: "roamjs-config-tabs" }, userTabs.map(({ id: tabId, fields, toggleable, development = false, onEnable, onDisable, }, i) => {
77
67
  var _a;
@@ -1 +1 @@
1
- {"version":3,"file":"ConfigPage.js","sourceRoot":"","sources":["../../src/components/ConfigPage.tsx"],"names":[],"mappings":"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","sourcesContent":["import { Button, 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\";\nimport { VersionSwitcherProps } from \"./VersionSwitcher\";\n\ntype 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 | ((props: VersionSwitcherProps) => void);\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 currentVersion = window.roamjs?.version?.[id] || \"ersion not set\";\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 <span>\n <span style={{ color: \"#cccccc\", fontSize: 8 }}>\n v{currentVersion}\n </span>\n {\"versioning\" in config && typeof config.versioning === \"function\" && (\n <Button\n icon={\"git-branch\"}\n minimal\n onClick={() =>\n typeof config.versioning === \"function\" &&\n config.versioning({\n id,\n currentVersion,\n })\n }\n style={{ marginLeft: 4 }}\n />\n )}\n </span>\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\ntype 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"]}
@@ -2,6 +2,9 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const tslib_1 = require("tslib");
4
4
  const createDivObserver_1 = tslib_1.__importDefault(require("./createDivObserver"));
5
- const createObserver = (mutationCallback) => (0, createDivObserver_1.default)(mutationCallback, document.getElementsByClassName("roam-body")[0]);
5
+ const createObserver = (mutationCallback) => {
6
+ var _a;
7
+ return (0, createDivObserver_1.default)(mutationCallback, (_a = document.getElementById("app")) !== null && _a !== void 0 ? _a : document.body);
8
+ };
6
9
  exports.default = createObserver;
7
10
  //# sourceMappingURL=createObserver.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"createObserver.js","sourceRoot":"","sources":["../../src/dom/createObserver.ts"],"names":[],"mappings":";;;AAAA,oFAAoD;AAEpD,MAAM,cAAc,GAAG,CACrB,gBAGS,EACS,EAAE,CACpB,IAAA,2BAAiB,EACf,gBAAgB,EAChB,QAAQ,CAAC,sBAAsB,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAChD,CAAC;AAEJ,kBAAe,cAAc,CAAC","sourcesContent":["import createDivObserver from \"./createDivObserver\";\n\nconst createObserver = (\n mutationCallback: (\n mutationList: MutationRecord[],\n observer: MutationObserver\n ) => void\n): MutationObserver =>\n createDivObserver(\n mutationCallback,\n document.getElementsByClassName(\"roam-body\")[0]\n );\n\nexport default createObserver;\n"]}
1
+ {"version":3,"file":"createObserver.js","sourceRoot":"","sources":["../../src/dom/createObserver.ts"],"names":[],"mappings":";;;AAAA,oFAAoD;AAEpD,MAAM,cAAc,GAAG,CACrB,gBAGS,EACS,EAAE;;IACpB,OAAO,IAAA,2BAAiB,EACtB,gBAAgB,EAChB,MAAA,QAAQ,CAAC,cAAc,CAAC,KAAK,CAAC,mCAAI,QAAQ,CAAC,IAAI,CAChD,CAAC;AACJ,CAAC,CAAC;AAEF,kBAAe,cAAc,CAAC","sourcesContent":["import createDivObserver from \"./createDivObserver\";\n\nconst createObserver = (\n mutationCallback: (\n mutationList: MutationRecord[],\n observer: MutationObserver\n ) => void\n): MutationObserver => {\n return createDivObserver(\n mutationCallback,\n document.getElementById(\"app\") ?? document.body\n );\n};\n\nexport default createObserver;\n"]}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "roamjs-components",
3
3
  "description": "Expansive toolset, utilities, & components for developing RoamJS extensions.",
4
- "version": "0.82.11",
4
+ "version": "0.82.13",
5
5
  "main": "index.js",
6
6
  "types": "index.d.ts",
7
7
  "scripts": {
@@ -1,10 +0,0 @@
1
- import React from "react";
2
- export declare type VersionSwitcherProps = {
3
- id: string;
4
- currentVersion: string;
5
- };
6
- declare const VersionSwitcher: ({ id, currentVersion, onClose, }: VersionSwitcherProps & {
7
- onClose: () => void;
8
- }) => React.ReactElement;
9
- export declare const render: (props: VersionSwitcherProps) => void;
10
- export default VersionSwitcher;
@@ -1,76 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.render = void 0;
4
- const tslib_1 = require("tslib");
5
- const core_1 = require("@blueprintjs/core");
6
- const react_1 = tslib_1.__importStar(require("react"));
7
- const react_dom_1 = tslib_1.__importDefault(require("react-dom"));
8
- const getBlockUidsReferencingPage_1 = tslib_1.__importDefault(require("../queries/getBlockUidsReferencingPage"));
9
- const getShallowTreeByParentUid_1 = tslib_1.__importDefault(require("../queries/getShallowTreeByParentUid"));
10
- const updateBlock_1 = tslib_1.__importDefault(require("../writes/updateBlock"));
11
- const getRenderRoot_1 = tslib_1.__importDefault(require("../util/getRenderRoot"));
12
- const apiGet_1 = tslib_1.__importDefault(require("../util/apiGet"));
13
- const VersionSwitcher = ({ id, currentVersion, onClose, }) => {
14
- const extensionRegex = (0, react_1.useMemo)(() => new RegExp(`https://roamjs\\.com/${id}(/\\d\\d\\d\\d-\\d\\d-\\d\\d-\\d\\d-\\d\\d)?/main.js`), [id]);
15
- const [page, setPage] = (0, react_1.useState)(0);
16
- const [versions, setVersions] = (0, react_1.useState)([]);
17
- const [isEnd, setIsEnd] = (0, react_1.useState)(true);
18
- const [loading, setLoading] = (0, react_1.useState)(false);
19
- const [selectedValue, setSelectedValue] = (0, react_1.useState)(currentVersion);
20
- const [useLatest, setUseLatest] = (0, react_1.useState)(currentVersion === "latest");
21
- (0, react_1.useEffect)(() => {
22
- setLoading(true);
23
- (0, apiGet_1.default)({
24
- path: `versions?limit=${5}&id=${id}&page=${page}`,
25
- anonymous: true,
26
- })
27
- .then((r) => {
28
- setVersions(r.versions);
29
- setIsEnd(r.isEnd);
30
- })
31
- .finally(() => setLoading(false));
32
- }, [page, id]);
33
- return (react_1.default.createElement(core_1.Dialog, { isOpen: true, onClose: onClose, canOutsideClickClose: true, canEscapeKeyClose: true, title: `Switch to version` },
34
- react_1.default.createElement("div", { className: core_1.Classes.DIALOG_BODY },
35
- react_1.default.createElement(core_1.RadioGroup, { onChange: (e) => setSelectedValue(e.target.value), selectedValue: selectedValue, className: loading ? core_1.Classes.SKELETON : "", disabled: useLatest }, versions.map((v) => (react_1.default.createElement(core_1.Radio, { key: v, value: v, labelElement: react_1.default.createElement("span", null,
36
- react_1.default.createElement("b", null, v),
37
- v === currentVersion && (react_1.default.createElement("span", { style: { fontSize: 10 } }, " (current)"))) })))),
38
- react_1.default.createElement(core_1.Checkbox, { checked: useLatest, onChange: (e) => {
39
- const checked = e.target.checked;
40
- setUseLatest(checked);
41
- if (!checked && !selectedValue) {
42
- setSelectedValue(versions[0]);
43
- }
44
- }, label: "Use Latest" }),
45
- react_1.default.createElement("div", { style: { display: "flex", justifyContent: "space-between" } },
46
- react_1.default.createElement(core_1.Button, { disabled: loading || page === 0, icon: "arrow-left", text: "Newer", onClick: () => setPage(Math.max(page - 5, 0)) }),
47
- react_1.default.createElement(core_1.Button, { disabled: loading || isEnd, icon: "arrow-right", text: "Older", onClick: () => setPage(page + 5) }))),
48
- react_1.default.createElement("div", { className: core_1.Classes.DIALOG_FOOTER },
49
- react_1.default.createElement("div", { className: core_1.Classes.DIALOG_FOOTER_ACTIONS },
50
- loading && react_1.default.createElement(core_1.Spinner, { size: core_1.Spinner.SIZE_SMALL }),
51
- react_1.default.createElement(core_1.Button, { text: "Switch", disabled: loading, intent: core_1.Intent.PRIMARY, style: { marginLeft: 16 }, onClick: () => {
52
- setLoading(true);
53
- setTimeout(() => {
54
- (0, getBlockUidsReferencingPage_1.default)("roam/js")
55
- .flatMap((u) => (0, getShallowTreeByParentUid_1.default)(u))
56
- .filter(({ text }) => extensionRegex.test(text))
57
- .forEach(({ uid, text }) => (0, updateBlock_1.default)({
58
- uid,
59
- text: text.replace(extensionRegex, `https://roamjs.com/${id}${useLatest ? "" : `/${selectedValue}`}/main.js`),
60
- }));
61
- setTimeout(() => {
62
- window.location.reload();
63
- }, 1000);
64
- }, 1);
65
- } })))));
66
- };
67
- const render = (props) => {
68
- const parent = (0, getRenderRoot_1.default)(`versioning-${props.id}`);
69
- react_dom_1.default.render(react_1.default.createElement(VersionSwitcher, Object.assign(Object.assign({}, props), { onClose: () => {
70
- react_dom_1.default.unmountComponentAtNode(parent);
71
- parent.remove();
72
- } })), parent);
73
- };
74
- exports.render = render;
75
- exports.default = VersionSwitcher;
76
- //# sourceMappingURL=VersionSwitcher.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"VersionSwitcher.js","sourceRoot":"","sources":["../../src/components/VersionSwitcher.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n Button,\n Checkbox,\n Classes,\n Dialog,\n Intent,\n Radio,\n RadioGroup,\n Spinner,\n} from \"@blueprintjs/core\";\nimport React, { useEffect, useMemo, useState } from \"react\";\nimport ReactDOM from \"react-dom\";\nimport getBlockUidsReferencingPage from \"../queries/getBlockUidsReferencingPage\";\nimport getShallowTreeByParentUid from \"../queries/getShallowTreeByParentUid\";\nimport updateBlock from \"../writes/updateBlock\";\nimport getRenderRoot from \"../util/getRenderRoot\";\nimport apiGet from \"../util/apiGet\";\n\nexport type VersionSwitcherProps = {\n id: string;\n currentVersion: string;\n};\n\nconst VersionSwitcher = ({\n id,\n currentVersion,\n onClose,\n}: VersionSwitcherProps & {\n onClose: () => void;\n}): React.ReactElement => {\n const extensionRegex = useMemo(\n () =>\n new RegExp(\n `https://roamjs\\\\.com/${id}(/\\\\d\\\\d\\\\d\\\\d-\\\\d\\\\d-\\\\d\\\\d-\\\\d\\\\d-\\\\d\\\\d)?/main.js`\n ),\n [id]\n );\n const [page, setPage] = useState(0);\n const [versions, setVersions] = useState<string[]>([]);\n const [isEnd, setIsEnd] = useState(true);\n const [loading, setLoading] = useState(false);\n const [selectedValue, setSelectedValue] = useState(currentVersion);\n const [useLatest, setUseLatest] = useState(currentVersion === \"latest\");\n useEffect(() => {\n setLoading(true);\n apiGet<{ versions: string[]; isEnd: boolean }>({\n path: `versions?limit=${5}&id=${id}&page=${page}`,\n anonymous: true,\n })\n .then((r) => {\n setVersions(r.versions);\n setIsEnd(r.isEnd);\n })\n .finally(() => setLoading(false));\n }, [page, id]);\n return (\n <Dialog\n isOpen={true}\n onClose={onClose}\n canOutsideClickClose\n canEscapeKeyClose\n title={`Switch to version`}\n >\n <div className={Classes.DIALOG_BODY}>\n <RadioGroup\n onChange={(e) =>\n setSelectedValue((e.target as HTMLInputElement).value)\n }\n selectedValue={selectedValue}\n className={loading ? Classes.SKELETON : \"\"}\n disabled={useLatest}\n >\n {versions.map((v) => (\n <Radio\n key={v}\n value={v}\n labelElement={\n <span>\n <b>{v}</b>\n {v === currentVersion && (\n <span style={{ fontSize: 10 }}> (current)</span>\n )}\n </span>\n }\n />\n ))}\n </RadioGroup>\n <Checkbox\n checked={useLatest}\n onChange={(e) => {\n const checked = (e.target as HTMLInputElement).checked;\n setUseLatest(checked);\n if (!checked && !selectedValue) {\n setSelectedValue(versions[0]);\n }\n }}\n label={\"Use Latest\"}\n />\n <div style={{ display: \"flex\", justifyContent: \"space-between\" }}>\n <Button\n disabled={loading || page === 0}\n icon={\"arrow-left\"}\n text={\"Newer\"}\n onClick={() => setPage(Math.max(page - 5, 0))}\n />\n <Button\n disabled={loading || isEnd}\n icon={\"arrow-right\"}\n text={\"Older\"}\n onClick={() => setPage(page + 5)}\n />\n </div>\n </div>\n <div className={Classes.DIALOG_FOOTER}>\n <div className={Classes.DIALOG_FOOTER_ACTIONS}>\n {loading && <Spinner size={Spinner.SIZE_SMALL} />}\n <Button\n text={\"Switch\"}\n disabled={loading}\n intent={Intent.PRIMARY}\n style={{ marginLeft: 16 }}\n onClick={() => {\n setLoading(true);\n setTimeout(() => {\n getBlockUidsReferencingPage(\"roam/js\")\n .flatMap((u) => getShallowTreeByParentUid(u))\n .filter(({ text }) => extensionRegex.test(text))\n .forEach(({ uid, text }) =>\n updateBlock({\n uid,\n text: text.replace(\n extensionRegex,\n `https://roamjs.com/${id}${\n useLatest ? \"\" : `/${selectedValue}`\n }/main.js`\n ),\n })\n );\n setTimeout(() => {\n window.location.reload();\n }, 1000);\n }, 1);\n }}\n />\n </div>\n </div>\n </Dialog>\n );\n};\n\nexport const render = (props: VersionSwitcherProps): void => {\n const parent = getRenderRoot(`versioning-${props.id}`);\n ReactDOM.render(\n React.createElement(VersionSwitcher, {\n ...props,\n onClose: () => {\n ReactDOM.unmountComponentAtNode(parent);\n parent.remove();\n },\n }),\n parent\n );\n};\n\nexport default VersionSwitcher;\n"]}