@macrostrat/feedback-components 1.1.6 → 1.1.7
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/CHANGELOG.md +5 -0
- package/dist/esm/{feedback-components.03f08dc7.js → feedback-components.0d16f68a.js} +4 -4
- package/dist/esm/{feedback-components.03f08dc7.js.map → feedback-components.0d16f68a.js.map} +1 -1
- package/dist/esm/{feedback-components.e068f453.js → feedback-components.263bc4a5.js} +4 -4
- package/dist/esm/{feedback-components.e068f453.js.map → feedback-components.263bc4a5.js.map} +1 -1
- package/dist/esm/{feedback-components.5a8f0185.css → feedback-components.3c6291c9.css} +5 -1
- package/dist/esm/feedback-components.3c6291c9.css.map +1 -0
- package/dist/esm/{feedback-components.63a12d32.js → feedback-components.3cb322a5.js} +19 -7
- package/dist/esm/feedback-components.3cb322a5.js.map +1 -0
- package/dist/esm/{feedback-components.47b7bf19.js → feedback-components.5242166d.js} +13 -11
- package/dist/esm/feedback-components.5242166d.js.map +1 -0
- package/dist/esm/{feedback-components.a451f964.js → feedback-components.a35aed63.js} +8 -8
- package/dist/esm/{feedback-components.a451f964.js.map → feedback-components.a35aed63.js.map} +1 -1
- package/dist/esm/{feedback-components.7c2fe400.js → feedback-components.b7fe8db7.js} +4 -1
- package/dist/esm/feedback-components.b7fe8db7.js.map +1 -0
- package/dist/esm/{feedback-components.e4935bf3.js → feedback-components.c0ded32f.js} +4 -4
- package/dist/esm/{feedback-components.e4935bf3.js.map → feedback-components.c0ded32f.js.map} +1 -1
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +1 -1
- package/dist/node/{feedback-components.db4d0a14.css → feedback-components.104b4099.css} +2 -2
- package/dist/node/feedback-components.104b4099.css.map +1 -0
- package/dist/node/feedback-components.1ec0e5c7.js +2 -0
- package/dist/node/feedback-components.1ec0e5c7.js.map +1 -0
- package/dist/node/{feedback-components.67e60839.js → feedback-components.4c09ec76.js} +2 -2
- package/dist/node/{feedback-components.67e60839.js.map → feedback-components.4c09ec76.js.map} +1 -1
- package/dist/node/{feedback-components.827f8d80.js → feedback-components.6e969752.js} +2 -2
- package/dist/node/{feedback-components.827f8d80.js.map → feedback-components.6e969752.js.map} +1 -1
- package/dist/node/{feedback-components.ce5efb18.js → feedback-components.79d7b18c.js} +2 -2
- package/dist/node/{feedback-components.ce5efb18.js.map → feedback-components.79d7b18c.js.map} +1 -1
- package/dist/node/feedback-components.ad3ad94e.js +2 -0
- package/dist/node/feedback-components.ad3ad94e.js.map +1 -0
- package/dist/node/feedback-components.cf680c38.js +2 -0
- package/dist/node/feedback-components.cf680c38.js.map +1 -0
- package/dist/node/feedback-components.e1fe112f.js +2 -0
- package/dist/node/feedback-components.e1fe112f.js.map +1 -0
- package/dist/node/index.js +1 -1
- package/dist/node/index.js.map +1 -1
- package/package.json +1 -1
- package/src/feedback/feedback.module.sass +3 -0
- package/src/feedback/index.ts +11 -2
- package/src/feedback/matches.ts +1 -1
- package/src/feedback/text-visualizer.ts +19 -6
- package/dist/esm/feedback-components.47b7bf19.js.map +0 -1
- package/dist/esm/feedback-components.5a8f0185.css.map +0 -1
- package/dist/esm/feedback-components.63a12d32.js.map +0 -1
- package/dist/esm/feedback-components.7c2fe400.js.map +0 -1
- package/dist/node/feedback-components.2ad7d057.js +0 -2
- package/dist/node/feedback-components.2ad7d057.js.map +0 -1
- package/dist/node/feedback-components.441e2203.js +0 -2
- package/dist/node/feedback-components.441e2203.js.map +0 -1
- package/dist/node/feedback-components.76ed75d8.js +0 -2
- package/dist/node/feedback-components.76ed75d8.js.map +0 -1
- package/dist/node/feedback-components.c31cf831.js +0 -2
- package/dist/node/feedback-components.c31cf831.js.map +0 -1
- package/dist/node/feedback-components.db4d0a14.css.map +0 -1
package/dist/node/{feedback-components.ce5efb18.js.map → feedback-components.79d7b18c.js.map}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"mappings":"A,M,oD,A,O,oD,A,O,oD,A,Q,M,mB,A,Q,mB,C,C,a,C,C,iB,C,C,e,C,C,gB,C,K,U,A,Q,Y,C,C,a,C,K,O,A,Q,W,C,C,U,C,K,mB,A,Q,iB,C,K,2B,C,I,E,W,E,C,E,E,C,E,E,E,iB,A,O,I,A,C,E,S,C,E,G,K,E,O,C,C,E,C,O,C,G,K,E,C,I,E,C,C,E,A,Q,C,C,E,C,I,E,C,G,E,Q,C,C,E,O,C,C,E,C,E,E,I,C,E,O,C,E,E,O,E,E,O,A,C,I,E,A,M,uB,E,I,O,E,I,C,mB,C,C,E,Q,C,S,C,C,C,E,C,C,E,C,C,E,E,iB,C,G,E,Q,C,I,E,E,S,E,E,S,E,E,SCkBA,IAAM,EAAI,AAAA,EAAM,MAAM,C,AAAC,G,AAAA,E,U,C,AAAA,E,O,CAAA,GAEhB,SAAS,EAAU,CAOzB,EAGC,GAAM,CAAA,KAAE,CAAI,CAAA,MAAE,CAAK,CAAA,OAAE,CAAM,CAAA,SAAE,CAAQ,CAAA,cAAE,CAAa,CAAA,SAAE,CAAQ,CAAE,CAAG,EAE7D,CAAC,EAAO,EAAS,CAAG,AAAA,EAAgC,MACpD,CAAC,EAAO,EAAS,CAAG,AAAA,EAAgC,MACpD,CAAC,EAAY,EAAc,CAAG,AAAA,EAAS,CAAA,SAsC7C,CApCA,AAAA,EAAU,KACR,GAAM,CAAA,MAAE,CAAK,CAAA,MAAE,CAAK,CAAE,CAAG,AAAA,CAAA,EAAA,EAAA,WAAU,AAAV,EAAY,GAE/B,EAAW,IAAI,IACnB,EAAM,GAAG,CAAC,AAAC,GAAM,CAAC,EAAE,EAAE,CAAE,EAAE,GAGtB,EAAQ,EAAM,GAAG,CAAC,AAAC,GAChB,CAAA,CACL,OAAQ,EAAS,GAAG,CAAC,EAAE,MAAM,EAC7B,OAAQ,EAAS,GAAG,CAAC,EAAE,IAAI,EAC3B,SAAU,CACZ,CAAA,GAGI,EAAa,AAAA,EAAgB,GAChC,KAAK,CAAC,OAAQ,AAAA,EAAU,IACxB,KAAK,CAAC,SAAU,AAAA,IAAgB,QAAQ,CAAC,MACzC,KAAK,CAAC,SAAU,AAAA,EAAY,EAAQ,EAAG,EAAS,IAChD,KAAK,CAAC,UAAW,AAAA,IAAe,MAAM,CAAC,KACvC,EAAE,CAAC,OAAQ,KAGV,QAAQ,GAAG,CAAC,kBACd,GACC,EAAE,CAAC,MAAO,KAET,EAAS,GACT,EAAS,EACX,GAEF,MAAO,KACL,EAAW,IAAI,EACjB,CACF,EAAG,CAAC,EAAM,EAAO,EAAO,EAEpB,AAAS,MAAT,GAAiB,AAAS,MAAT,GACZ,EAAE,IAGX,QAAQ,GAAG,CAAC,QAAS,EAAO,EAAO,GAE5B,EACL,EACA,CACE,YAAa,mDACf,EACA,EAAE,iBAAkB,CAAE,MAAO,CAAE,MAAA,EAAO,OAAA,CAAO,CAAE,EAAG,CAChD,EAAE,EAAQ,CACR,UAAW,qBACX,MAAO,cACP,QAAS,EACT,SAAU,AAAC,GAAM,EAAc,EAAE,MAAM,CAAC,OAAO,CACjD,GACA,EAAE,MAAO,CAAE,MAAA,EAAO,OAAA,CAAO,EAAG,CAC1B,EACE,UACA,EAAM,GAAG,CAAC,AAAC,GACF,EAAE,OAAQ,CACf,GAAI,EAAE,MAAM,CAAC,CAAC,CACd,GAAI,EAAE,MAAM,CAAC,CAAC,CACd,GAAI,EAAE,MAAM,CAAC,CAAC,CACd,GAAI,EAAE,MAAM,CAAC,CAAC,CACd,OAAQ,OACV,KAGJ,EACE,UACA,EAAM,GAAG,CAAC,AAAC,QAwDE,EAAY,EAAyB,EAvDhD,IAAM,EAAS,EAAc,QAAQ,CAAC,EAAE,EAAE,EAEpC,GAqDK,EArDuB,EAAE,EAAE,CAqDf,EArDiB,EAqDQ,EArDO,EAsDjE,AAA6B,IAAzB,EAAc,MAAM,EAEtB,EAAc,QAAQ,CAAC,IACvB,EAAM,IAAI,CACR,AAAC,GACC,EAAc,QAAQ,CAAC,EAAK,EAAE,GAC9B,EAAK,QAAQ,CAAC,IAAI,CAAC,AAAC,GAAU,EAAM,EAAE,GAAK,KA3DjC,EAAQ,AAAA,CAAA,EAAA,EAAA,WAAU,AAAV,EAAY,EAAE,KAAK,CAAE,CAAE,YAAA,EAAa,OAAA,CAAO,GAEzD,OAAO,EAAE,IAAK,CACZ,EAAE,SAAU,CACV,GAAI,EAAE,CAAC,CACP,GAAI,EAAE,CAAC,CACP,EAAG,EACH,KAAM,EAAM,eAAe,EAAI,OAC/B,QAAS,AAAC,IACR,EAAE,eAAe,GAEf,EAAE,OAAO,EACT,EAAE,OAAO,EACR,CAAa,CAAC,EAAE,GAAK,EAAE,EAAE,EAAI,AAAyB,IAAzB,EAAc,MAAM,EAGlD,EAAE,eAAe,GACjB,EAAS,CACP,KAAM,uBACN,QAAS,CAAE,IAAK,CAAC,EAAE,EAAE,CAAC,AAAC,CACzB,IAEA,EAAS,CACP,KAAM,cACN,QAAS,CAAE,IAAK,CAAC,EAAE,EAAE,CAAC,AAAC,CACzB,EAEJ,EACA,UAAW,EACP,WACM,EAAW,GAAK,aAC1B,OAjCW,EAAS,QAAU,QAkC9B,YAAa,CACf,GACA,EAAE,EAAE,CAAC,GACH,OACA,CACE,EAAG,EAAE,CAAC,CAAG,GACT,EAAG,EAAE,CAAC,CAAG,EACT,UAAW,YACb,EACA,EAAE,IAAI,EAAI,CAAC,KAAK,EAAE,EAAE,EAAE,CAAA,CAAE,EAE1B,EAAE,EAAE,CAAC,CAAC,GAAY,QAAS,EAAE,IAAI,EAAI,CAAC,KAAK,EAAE,EAAE,EAAE,CAAA,CAAE,EACpD,CACH,IAEH,EACF,GAEL,Q,K,S","sources":["<anon>","packages/feedback-components/src/feedback/graph.ts"],"sourcesContent":["import \"./feedback-components.8caef76e.js\";\nimport \"./feedback-components.c31cf831.js\";\nimport \"./feedback-components.b22d37d1.js\";\nimport $9bqpz$macrostrathyper from \"@macrostrat/hyper\";\nimport {forceSimulation as $9bqpz$forceSimulation, forceLink as $9bqpz$forceLink, forceManyBody as $9bqpz$forceManyBody, forceCenter as $9bqpz$forceCenter, forceCollide as $9bqpz$forceCollide} from \"d3-force\";\nimport {useState as $9bqpz$useState, useEffect as $9bqpz$useEffect} from \"react\";\nimport {Spinner as $9bqpz$Spinner, Switch as $9bqpz$Switch} from \"@blueprintjs/core\";\nimport {ErrorBoundary as $9bqpz$ErrorBoundary} from \"@macrostrat/ui-components\";\n\n\nfunction $parcel$interopDefault(a) {\n return a && a.__esModule ? a.default : a;\n}\n\n var $parcel$global = globalThis;\n \nvar $parcel$modules = {};\nvar $parcel$inits = {};\n\nvar parcelRequire = $parcel$global[\"parcelRequirea149\"];\n\nif (parcelRequire == null) {\n parcelRequire = function(id) {\n if (id in $parcel$modules) {\n return $parcel$modules[id].exports;\n }\n if (id in $parcel$inits) {\n var init = $parcel$inits[id];\n delete $parcel$inits[id];\n var module = {id: id, exports: {}};\n $parcel$modules[id] = module;\n init.call(module.exports, module, module.exports);\n return module.exports;\n }\n var err = new Error(\"Cannot find module '\" + id + \"'\");\n err.code = 'MODULE_NOT_FOUND';\n throw err;\n };\n\n parcelRequire.register = function register(id, init) {\n $parcel$inits[id] = init;\n };\n\n $parcel$global[\"parcelRequirea149\"] = parcelRequire;\n}\n\nvar parcelRegister = parcelRequire.register;\n\nvar $eedTh = parcelRequire(\"eedTh\");\n\nvar $9wFEx = parcelRequire(\"9wFEx\");\n\n\n\n\n\n\nvar $edvRb = parcelRequire(\"edvRb\");\nconst $8732cb0ae0ae3dfd$var$h = (0, $9bqpz$macrostrathyper).styled((0, (/*@__PURE__*/$parcel$interopDefault($9wFEx))));\nfunction $8732cb0ae0ae3dfd$export$6a7fe3ef90e8d566(props) {\n // A graph view with react-flow\n // Get positions of nodes using force simulation\n const { tree: tree, width: width, height: height, dispatch: dispatch, selectedNodes: selectedNodes, viewOnly: viewOnly } = props;\n const [nodes, setNodes] = (0, $9bqpz$useState)(null);\n const [links, setLinks] = (0, $9bqpz$useState)(null);\n const [showLabels, setShowLabels] = (0, $9bqpz$useState)(false);\n (0, $9bqpz$useEffect)(()=>{\n const { nodes: nodes, edges: edges } = (0, $eedTh.treeToGraph)(tree);\n const nodesMap = new Map(nodes.map((d)=>[\n d.id,\n d\n ]));\n const links = edges.map((d)=>{\n return {\n source: nodesMap.get(d.source),\n target: nodesMap.get(d.dest),\n strength: 1\n };\n });\n const simulation = (0, $9bqpz$forceSimulation)(nodes).force(\"link\", (0, $9bqpz$forceLink)(links)).force(\"charge\", (0, $9bqpz$forceManyBody)().strength(-50)).force(\"center\", (0, $9bqpz$forceCenter)(width / 2, height / 2)).force(\"collide\", (0, $9bqpz$forceCollide)().radius(20)).on(\"tick\", ()=>{\n // Update the positions of the nodes\n // setNodes(nodes);\n console.log(\"Simulation tick\");\n }).on(\"end\", ()=>{\n // Update the positions of the nodes\n setNodes(nodes);\n setLinks(links);\n });\n return ()=>{\n simulation.stop();\n };\n }, [\n tree,\n width,\n height\n ]);\n if (nodes == null || links == null) return $8732cb0ae0ae3dfd$var$h((0, $9bqpz$Spinner));\n console.log(\"Graph\", nodes, links, selectedNodes);\n return $8732cb0ae0ae3dfd$var$h((0, $9bqpz$ErrorBoundary), {\n description: \"An error occurred while rendering the graph view.\"\n }, $8732cb0ae0ae3dfd$var$h(\"div.graph-view\", {\n style: {\n width: width,\n height: height\n }\n }, [\n $8732cb0ae0ae3dfd$var$h((0, $9bqpz$Switch), {\n className: \"show-labels-switch\",\n label: \"Show Labels\",\n checked: showLabels,\n onChange: (e)=>setShowLabels(e.target.checked)\n }),\n $8732cb0ae0ae3dfd$var$h(\"svg\", {\n width: width,\n height: height\n }, [\n $8732cb0ae0ae3dfd$var$h(\"g.links\", links.map((d)=>{\n return $8732cb0ae0ae3dfd$var$h(\"line\", {\n x1: d.source.x,\n y1: d.source.y,\n x2: d.target.x,\n y2: d.target.y,\n stroke: \"black\"\n });\n })),\n $8732cb0ae0ae3dfd$var$h(\"g.nodes\", nodes.map((d)=>{\n const active = selectedNodes.includes(d.id);\n const stroke = active ? \"white\" : \"black\";\n const highlighted = $8732cb0ae0ae3dfd$var$isHighlighted(d.id, selectedNodes, nodes);\n const style = (0, $edvRb.getTagStyle)(d.color, {\n highlighted: highlighted,\n active: active\n });\n return $8732cb0ae0ae3dfd$var$h(\"g\", [\n $8732cb0ae0ae3dfd$var$h(\"circle\", {\n cx: d.x,\n cy: d.y,\n r: 8,\n fill: style.backgroundColor || \"blue\",\n onClick: (e)=>{\n e.stopPropagation();\n if (e.ctrlKey || e.metaKey || selectedNodes[0] === d.id && selectedNodes.length === 1) {\n // Toggle selection on ctrl/cmd click or when node is only selected node\n e.stopPropagation();\n dispatch({\n type: \"toggle-node-selected\",\n payload: {\n ids: [\n d.id\n ]\n }\n });\n } else dispatch({\n type: \"select-node\",\n payload: {\n ids: [\n d.id\n ]\n }\n });\n },\n className: active ? \"selected\" : \"\" + (viewOnly ? \"\" : \" clickable\"),\n stroke: stroke,\n strokeWidth: 2\n }),\n $8732cb0ae0ae3dfd$var$h.if(showLabels)(\"text\", {\n x: d.x + 10,\n y: d.y + 4,\n className: \"node-label\"\n }, d.name || `Node ${d.id}`),\n $8732cb0ae0ae3dfd$var$h.if(!showLabels)(\"title\", d.name || `Node ${d.id}`)\n ]);\n }))\n ])\n ]));\n}\nfunction $8732cb0ae0ae3dfd$var$isHighlighted(id, selectedNodes, nodes) {\n if (selectedNodes.length === 0) return true;\n return selectedNodes.includes(id) || nodes.some((node)=>selectedNodes.includes(node.id) && node.children.some((child)=>child.id === id));\n}\n\n\nexport {$8732cb0ae0ae3dfd$export$6a7fe3ef90e8d566 as GraphView};\n//# sourceMappingURL=feedback-components.ce5efb18.js.map\n","import { TreeData } from \"./types\";\nimport { treeToGraph } from \"./edit-state\";\nimport styles from \"./feedback.module.sass\";\nimport hyper from \"@macrostrat/hyper\";\nimport {\n forceSimulation,\n SimulationNodeDatum,\n SimulationLinkDatum,\n forceCenter,\n forceLink,\n forceManyBody,\n forceCollide,\n} from \"d3-force\";\nimport { useEffect, useState } from \"react\";\nimport { Spinner, Switch } from \"@blueprintjs/core\";\nimport { ErrorBoundary } from \"@macrostrat/ui-components\";\nimport { getTagStyle } from \"../extractions\";\n\nconst h = hyper.styled(styles);\n\nexport function GraphView(props: {\n tree: TreeData[];\n width: number;\n height: number;\n dispatch: (action: any) => void;\n selectedNodes: number[];\n viewOnly?: boolean;\n}) {\n // A graph view with react-flow\n // Get positions of nodes using force simulation\n const { tree, width, height, dispatch, selectedNodes, viewOnly } = props;\n\n const [nodes, setNodes] = useState<SimulationNodeDatum[]>(null);\n const [links, setLinks] = useState<SimulationLinkDatum[]>(null);\n const [showLabels, setShowLabels] = useState(false);\n\n useEffect(() => {\n const { nodes, edges } = treeToGraph(tree);\n\n const nodesMap = new Map<number, SimulationNodeDatum>(\n nodes.map((d) => [d.id, d]),\n );\n\n const links = edges.map((d) => {\n return {\n source: nodesMap.get(d.source),\n target: nodesMap.get(d.dest),\n strength: 1,\n };\n });\n\n const simulation = forceSimulation(nodes)\n .force(\"link\", forceLink(links))\n .force(\"charge\", forceManyBody().strength(-50))\n .force(\"center\", forceCenter(width / 2, height / 2))\n .force(\"collide\", forceCollide().radius(20))\n .on(\"tick\", () => {\n // Update the positions of the nodes\n // setNodes(nodes);\n console.log(\"Simulation tick\");\n })\n .on(\"end\", () => {\n // Update the positions of the nodes\n setNodes(nodes);\n setLinks(links);\n });\n\n return () => {\n simulation.stop();\n };\n }, [tree, width, height]);\n\n if (nodes == null || links == null) {\n return h(Spinner);\n }\n\n console.log(\"Graph\", nodes, links, selectedNodes);\n\n return h(\n ErrorBoundary,\n {\n description: \"An error occurred while rendering the graph view.\",\n },\n h(\"div.graph-view\", { style: { width, height } }, [\n h(Switch, {\n className: \"show-labels-switch\",\n label: \"Show Labels\",\n checked: showLabels,\n onChange: (e) => setShowLabels(e.target.checked),\n }),\n h(\"svg\", { width, height }, [\n h(\n \"g.links\",\n links.map((d) => {\n return h(\"line\", {\n x1: d.source.x,\n y1: d.source.y,\n x2: d.target.x,\n y2: d.target.y,\n stroke: \"black\",\n });\n }),\n ),\n h(\n \"g.nodes\",\n nodes.map((d) => {\n const active = selectedNodes.includes(d.id);\n const stroke = active ? \"white\" : \"black\";\n const highlighted = isHighlighted(d.id, selectedNodes, nodes);\n const style = getTagStyle(d.color, { highlighted, active });\n\n return h(\"g\", [\n h(\"circle\", {\n cx: d.x,\n cy: d.y,\n r: 8,\n fill: style.backgroundColor || \"blue\",\n onClick: (e) => {\n e.stopPropagation();\n if (\n e.ctrlKey ||\n e.metaKey ||\n (selectedNodes[0] === d.id && selectedNodes.length === 1)\n ) {\n // Toggle selection on ctrl/cmd click or when node is only selected node\n e.stopPropagation();\n dispatch({\n type: \"toggle-node-selected\",\n payload: { ids: [d.id] },\n });\n } else {\n dispatch({\n type: \"select-node\",\n payload: { ids: [d.id] },\n });\n }\n },\n className: active\n ? \"selected\"\n : \"\" + (viewOnly ? \"\" : \" clickable\"),\n stroke,\n strokeWidth: 2,\n }),\n h.if(showLabels)(\n \"text\",\n {\n x: d.x + 10,\n y: d.y + 4,\n className: \"node-label\",\n },\n d.name || `Node ${d.id}`,\n ),\n h.if(!showLabels)(\"title\", d.name || `Node ${d.id}`),\n ]);\n }),\n ),\n ]),\n ]),\n );\n}\n\nfunction isHighlighted(id: number, selectedNodes: number[], nodes: TreeData[]) {\n if (selectedNodes.length === 0) return true;\n return (\n selectedNodes.includes(id) ||\n nodes.some(\n (node) =>\n selectedNodes.includes(node.id) &&\n node.children.some((child) => child.id === id),\n )\n );\n}\n"],"names":["$9bqpz$macrostrathyper","forceSimulation","$9bqpz$forceSimulation","forceLink","$9bqpz$forceLink","forceManyBody","$9bqpz$forceManyBody","forceCenter","$9bqpz$forceCenter","forceCollide","$9bqpz$forceCollide","useState","$9bqpz$useState","useEffect","$9bqpz$useEffect","Spinner","$9bqpz$Spinner","Switch","$9bqpz$Switch","ErrorBoundary","$9bqpz$ErrorBoundary","$parcel$global","globalThis","$parcel$modules","$parcel$inits","parcelRequire","id","exports","init","module","call","err","Error","code","register","$eedTh","$9wFEx","$edvRb","$8732cb0ae0ae3dfd$var$h","styled","a","__esModule","default","$8732cb0ae0ae3dfd$export$6a7fe3ef90e8d566","props","tree","width","height","dispatch","selectedNodes","viewOnly","nodes","setNodes","links","setLinks","showLabels","setShowLabels","edges","treeToGraph","nodesMap","Map","map","d","source","get","target","dest","strength","simulation","force","radius","on","console","log","stop","description","style","className","label","checked","onChange","e","x1","x","y1","y","x2","y2","stroke","active","includes","highlighted","length","some","node","children","child","getTagStyle","color","cx","cy","r","fill","backgroundColor","onClick","stopPropagation","ctrlKey","metaKey","type","payload","ids","strokeWidth","if","name","GraphView"],"version":3,"file":"feedback-components.ce5efb18.js.map","sourceRoot":"../../../../"}
|
|
1
|
+
{"mappings":"A,M,oD,A,O,oD,A,O,oD,A,Q,M,mB,A,Q,mB,C,C,a,C,C,iB,C,C,e,C,C,gB,C,K,U,A,Q,Y,C,C,a,C,K,O,A,Q,W,C,C,U,C,K,mB,A,Q,iB,C,K,2B,C,I,E,W,E,C,E,E,C,E,E,E,iB,A,O,I,A,C,E,S,C,E,G,K,E,O,C,C,E,C,O,C,G,K,E,C,I,E,C,C,E,A,Q,C,C,E,C,I,E,C,G,E,Q,C,C,E,O,C,C,E,C,E,E,I,C,E,O,C,E,E,O,E,E,O,A,C,I,E,A,M,uB,E,I,O,E,I,C,mB,C,C,E,Q,C,S,C,C,C,E,C,C,E,C,C,E,E,iB,C,G,E,Q,C,I,E,E,S,E,E,S,E,E,SCkBA,IAAM,EAAI,AAAA,EAAM,MAAM,C,AAAC,G,AAAA,E,U,C,AAAA,E,O,CAAA,GAEhB,SAAS,EAAU,CAOzB,EAGC,GAAM,CAAA,KAAE,CAAI,CAAA,MAAE,CAAK,CAAA,OAAE,CAAM,CAAA,SAAE,CAAQ,CAAA,cAAE,CAAa,CAAA,SAAE,CAAQ,CAAE,CAAG,EAE7D,CAAC,EAAO,EAAS,CAAG,AAAA,EAAgC,MACpD,CAAC,EAAO,EAAS,CAAG,AAAA,EAAgC,MACpD,CAAC,EAAY,EAAc,CAAG,AAAA,EAAS,CAAA,SAsC7C,CApCA,AAAA,EAAU,KACR,GAAM,CAAA,MAAE,CAAK,CAAA,MAAE,CAAK,CAAE,CAAG,AAAA,CAAA,EAAA,EAAA,WAAU,AAAV,EAAY,GAE/B,EAAW,IAAI,IACnB,EAAM,GAAG,CAAC,AAAC,GAAM,CAAC,EAAE,EAAE,CAAE,EAAE,GAGtB,EAAQ,EAAM,GAAG,CAAC,AAAC,GAChB,CAAA,CACL,OAAQ,EAAS,GAAG,CAAC,EAAE,MAAM,EAC7B,OAAQ,EAAS,GAAG,CAAC,EAAE,IAAI,EAC3B,SAAU,CACZ,CAAA,GAGI,EAAa,AAAA,EAAgB,GAChC,KAAK,CAAC,OAAQ,AAAA,EAAU,IACxB,KAAK,CAAC,SAAU,AAAA,IAAgB,QAAQ,CAAC,MACzC,KAAK,CAAC,SAAU,AAAA,EAAY,EAAQ,EAAG,EAAS,IAChD,KAAK,CAAC,UAAW,AAAA,IAAe,MAAM,CAAC,KACvC,EAAE,CAAC,OAAQ,KAGV,QAAQ,GAAG,CAAC,kBACd,GACC,EAAE,CAAC,MAAO,KAET,EAAS,GACT,EAAS,EACX,GAEF,MAAO,KACL,EAAW,IAAI,EACjB,CACF,EAAG,CAAC,EAAM,EAAO,EAAO,EAEpB,AAAS,MAAT,GAAiB,AAAS,MAAT,GACZ,EAAE,IAGX,QAAQ,GAAG,CAAC,QAAS,EAAO,EAAO,GAE5B,EACL,EACA,CACE,YAAa,mDACf,EACA,EAAE,iBAAkB,CAAE,MAAO,CAAE,MAAA,EAAO,OAAA,CAAO,CAAE,EAAG,CAChD,EAAE,EAAQ,CACR,UAAW,qBACX,MAAO,cACP,QAAS,EACT,SAAU,AAAC,GAAM,EAAc,EAAE,MAAM,CAAC,OAAO,CACjD,GACA,EAAE,MAAO,CAAE,MAAA,EAAO,OAAA,CAAO,EAAG,CAC1B,EACE,UACA,EAAM,GAAG,CAAC,AAAC,GACF,EAAE,OAAQ,CACf,GAAI,EAAE,MAAM,CAAC,CAAC,CACd,GAAI,EAAE,MAAM,CAAC,CAAC,CACd,GAAI,EAAE,MAAM,CAAC,CAAC,CACd,GAAI,EAAE,MAAM,CAAC,CAAC,CACd,OAAQ,OACV,KAGJ,EACE,UACA,EAAM,GAAG,CAAC,AAAC,QAwDE,EAAY,EAAyB,EAvDhD,IAAM,EAAS,EAAc,QAAQ,CAAC,EAAE,EAAE,EAEpC,GAqDK,EArDuB,EAAE,EAAE,CAqDf,EArDiB,EAqDQ,EArDO,EAsDjE,AAA6B,IAAzB,EAAc,MAAM,EAEtB,EAAc,QAAQ,CAAC,IACvB,EAAM,IAAI,CACR,AAAC,GACC,EAAc,QAAQ,CAAC,EAAK,EAAE,GAC9B,EAAK,QAAQ,CAAC,IAAI,CAAC,AAAC,GAAU,EAAM,EAAE,GAAK,KA3DjC,EAAQ,AAAA,CAAA,EAAA,EAAA,WAAU,AAAV,EAAY,EAAE,KAAK,CAAE,CAAE,YAAA,EAAa,OAAA,CAAO,GAEzD,OAAO,EAAE,IAAK,CACZ,EAAE,SAAU,CACV,GAAI,EAAE,CAAC,CACP,GAAI,EAAE,CAAC,CACP,EAAG,EACH,KAAM,EAAM,eAAe,EAAI,OAC/B,QAAS,AAAC,IACR,EAAE,eAAe,GAEf,EAAE,OAAO,EACT,EAAE,OAAO,EACR,CAAa,CAAC,EAAE,GAAK,EAAE,EAAE,EAAI,AAAyB,IAAzB,EAAc,MAAM,EAGlD,EAAE,eAAe,GACjB,EAAS,CACP,KAAM,uBACN,QAAS,CAAE,IAAK,CAAC,EAAE,EAAE,CAAC,AAAC,CACzB,IAEA,EAAS,CACP,KAAM,cACN,QAAS,CAAE,IAAK,CAAC,EAAE,EAAE,CAAC,AAAC,CACzB,EAEJ,EACA,UAAW,EACP,WACM,EAAW,GAAK,aAC1B,OAjCW,EAAS,QAAU,QAkC9B,YAAa,CACf,GACA,EAAE,EAAE,CAAC,GACH,OACA,CACE,EAAG,EAAE,CAAC,CAAG,GACT,EAAG,EAAE,CAAC,CAAG,EACT,UAAW,YACb,EACA,EAAE,IAAI,EAAI,CAAC,KAAK,EAAE,EAAE,EAAE,CAAA,CAAE,EAE1B,EAAE,EAAE,CAAC,CAAC,GAAY,QAAS,EAAE,IAAI,EAAI,CAAC,KAAK,EAAE,EAAE,EAAE,CAAA,CAAE,EACpD,CACH,IAEH,EACF,GAEL,Q,K,S","sources":["<anon>","packages/feedback-components/src/feedback/graph.ts"],"sourcesContent":["import \"./feedback-components.8caef76e.js\";\nimport \"./feedback-components.e1fe112f.js\";\nimport \"./feedback-components.b22d37d1.js\";\nimport $9bqpz$macrostrathyper from \"@macrostrat/hyper\";\nimport {forceSimulation as $9bqpz$forceSimulation, forceLink as $9bqpz$forceLink, forceManyBody as $9bqpz$forceManyBody, forceCenter as $9bqpz$forceCenter, forceCollide as $9bqpz$forceCollide} from \"d3-force\";\nimport {useState as $9bqpz$useState, useEffect as $9bqpz$useEffect} from \"react\";\nimport {Spinner as $9bqpz$Spinner, Switch as $9bqpz$Switch} from \"@blueprintjs/core\";\nimport {ErrorBoundary as $9bqpz$ErrorBoundary} from \"@macrostrat/ui-components\";\n\n\nfunction $parcel$interopDefault(a) {\n return a && a.__esModule ? a.default : a;\n}\n\n var $parcel$global = globalThis;\n \nvar $parcel$modules = {};\nvar $parcel$inits = {};\n\nvar parcelRequire = $parcel$global[\"parcelRequirea149\"];\n\nif (parcelRequire == null) {\n parcelRequire = function(id) {\n if (id in $parcel$modules) {\n return $parcel$modules[id].exports;\n }\n if (id in $parcel$inits) {\n var init = $parcel$inits[id];\n delete $parcel$inits[id];\n var module = {id: id, exports: {}};\n $parcel$modules[id] = module;\n init.call(module.exports, module, module.exports);\n return module.exports;\n }\n var err = new Error(\"Cannot find module '\" + id + \"'\");\n err.code = 'MODULE_NOT_FOUND';\n throw err;\n };\n\n parcelRequire.register = function register(id, init) {\n $parcel$inits[id] = init;\n };\n\n $parcel$global[\"parcelRequirea149\"] = parcelRequire;\n}\n\nvar parcelRegister = parcelRequire.register;\n\nvar $eedTh = parcelRequire(\"eedTh\");\n\nvar $9wFEx = parcelRequire(\"9wFEx\");\n\n\n\n\n\n\nvar $edvRb = parcelRequire(\"edvRb\");\nconst $8732cb0ae0ae3dfd$var$h = (0, $9bqpz$macrostrathyper).styled((0, (/*@__PURE__*/$parcel$interopDefault($9wFEx))));\nfunction $8732cb0ae0ae3dfd$export$6a7fe3ef90e8d566(props) {\n // A graph view with react-flow\n // Get positions of nodes using force simulation\n const { tree: tree, width: width, height: height, dispatch: dispatch, selectedNodes: selectedNodes, viewOnly: viewOnly } = props;\n const [nodes, setNodes] = (0, $9bqpz$useState)(null);\n const [links, setLinks] = (0, $9bqpz$useState)(null);\n const [showLabels, setShowLabels] = (0, $9bqpz$useState)(false);\n (0, $9bqpz$useEffect)(()=>{\n const { nodes: nodes, edges: edges } = (0, $eedTh.treeToGraph)(tree);\n const nodesMap = new Map(nodes.map((d)=>[\n d.id,\n d\n ]));\n const links = edges.map((d)=>{\n return {\n source: nodesMap.get(d.source),\n target: nodesMap.get(d.dest),\n strength: 1\n };\n });\n const simulation = (0, $9bqpz$forceSimulation)(nodes).force(\"link\", (0, $9bqpz$forceLink)(links)).force(\"charge\", (0, $9bqpz$forceManyBody)().strength(-50)).force(\"center\", (0, $9bqpz$forceCenter)(width / 2, height / 2)).force(\"collide\", (0, $9bqpz$forceCollide)().radius(20)).on(\"tick\", ()=>{\n // Update the positions of the nodes\n // setNodes(nodes);\n console.log(\"Simulation tick\");\n }).on(\"end\", ()=>{\n // Update the positions of the nodes\n setNodes(nodes);\n setLinks(links);\n });\n return ()=>{\n simulation.stop();\n };\n }, [\n tree,\n width,\n height\n ]);\n if (nodes == null || links == null) return $8732cb0ae0ae3dfd$var$h((0, $9bqpz$Spinner));\n console.log(\"Graph\", nodes, links, selectedNodes);\n return $8732cb0ae0ae3dfd$var$h((0, $9bqpz$ErrorBoundary), {\n description: \"An error occurred while rendering the graph view.\"\n }, $8732cb0ae0ae3dfd$var$h(\"div.graph-view\", {\n style: {\n width: width,\n height: height\n }\n }, [\n $8732cb0ae0ae3dfd$var$h((0, $9bqpz$Switch), {\n className: \"show-labels-switch\",\n label: \"Show Labels\",\n checked: showLabels,\n onChange: (e)=>setShowLabels(e.target.checked)\n }),\n $8732cb0ae0ae3dfd$var$h(\"svg\", {\n width: width,\n height: height\n }, [\n $8732cb0ae0ae3dfd$var$h(\"g.links\", links.map((d)=>{\n return $8732cb0ae0ae3dfd$var$h(\"line\", {\n x1: d.source.x,\n y1: d.source.y,\n x2: d.target.x,\n y2: d.target.y,\n stroke: \"black\"\n });\n })),\n $8732cb0ae0ae3dfd$var$h(\"g.nodes\", nodes.map((d)=>{\n const active = selectedNodes.includes(d.id);\n const stroke = active ? \"white\" : \"black\";\n const highlighted = $8732cb0ae0ae3dfd$var$isHighlighted(d.id, selectedNodes, nodes);\n const style = (0, $edvRb.getTagStyle)(d.color, {\n highlighted: highlighted,\n active: active\n });\n return $8732cb0ae0ae3dfd$var$h(\"g\", [\n $8732cb0ae0ae3dfd$var$h(\"circle\", {\n cx: d.x,\n cy: d.y,\n r: 8,\n fill: style.backgroundColor || \"blue\",\n onClick: (e)=>{\n e.stopPropagation();\n if (e.ctrlKey || e.metaKey || selectedNodes[0] === d.id && selectedNodes.length === 1) {\n // Toggle selection on ctrl/cmd click or when node is only selected node\n e.stopPropagation();\n dispatch({\n type: \"toggle-node-selected\",\n payload: {\n ids: [\n d.id\n ]\n }\n });\n } else dispatch({\n type: \"select-node\",\n payload: {\n ids: [\n d.id\n ]\n }\n });\n },\n className: active ? \"selected\" : \"\" + (viewOnly ? \"\" : \" clickable\"),\n stroke: stroke,\n strokeWidth: 2\n }),\n $8732cb0ae0ae3dfd$var$h.if(showLabels)(\"text\", {\n x: d.x + 10,\n y: d.y + 4,\n className: \"node-label\"\n }, d.name || `Node ${d.id}`),\n $8732cb0ae0ae3dfd$var$h.if(!showLabels)(\"title\", d.name || `Node ${d.id}`)\n ]);\n }))\n ])\n ]));\n}\nfunction $8732cb0ae0ae3dfd$var$isHighlighted(id, selectedNodes, nodes) {\n if (selectedNodes.length === 0) return true;\n return selectedNodes.includes(id) || nodes.some((node)=>selectedNodes.includes(node.id) && node.children.some((child)=>child.id === id));\n}\n\n\nexport {$8732cb0ae0ae3dfd$export$6a7fe3ef90e8d566 as GraphView};\n//# sourceMappingURL=feedback-components.79d7b18c.js.map\n","import { TreeData } from \"./types\";\nimport { treeToGraph } from \"./edit-state\";\nimport styles from \"./feedback.module.sass\";\nimport hyper from \"@macrostrat/hyper\";\nimport {\n forceSimulation,\n SimulationNodeDatum,\n SimulationLinkDatum,\n forceCenter,\n forceLink,\n forceManyBody,\n forceCollide,\n} from \"d3-force\";\nimport { useEffect, useState } from \"react\";\nimport { Spinner, Switch } from \"@blueprintjs/core\";\nimport { ErrorBoundary } from \"@macrostrat/ui-components\";\nimport { getTagStyle } from \"../extractions\";\n\nconst h = hyper.styled(styles);\n\nexport function GraphView(props: {\n tree: TreeData[];\n width: number;\n height: number;\n dispatch: (action: any) => void;\n selectedNodes: number[];\n viewOnly?: boolean;\n}) {\n // A graph view with react-flow\n // Get positions of nodes using force simulation\n const { tree, width, height, dispatch, selectedNodes, viewOnly } = props;\n\n const [nodes, setNodes] = useState<SimulationNodeDatum[]>(null);\n const [links, setLinks] = useState<SimulationLinkDatum[]>(null);\n const [showLabels, setShowLabels] = useState(false);\n\n useEffect(() => {\n const { nodes, edges } = treeToGraph(tree);\n\n const nodesMap = new Map<number, SimulationNodeDatum>(\n nodes.map((d) => [d.id, d]),\n );\n\n const links = edges.map((d) => {\n return {\n source: nodesMap.get(d.source),\n target: nodesMap.get(d.dest),\n strength: 1,\n };\n });\n\n const simulation = forceSimulation(nodes)\n .force(\"link\", forceLink(links))\n .force(\"charge\", forceManyBody().strength(-50))\n .force(\"center\", forceCenter(width / 2, height / 2))\n .force(\"collide\", forceCollide().radius(20))\n .on(\"tick\", () => {\n // Update the positions of the nodes\n // setNodes(nodes);\n console.log(\"Simulation tick\");\n })\n .on(\"end\", () => {\n // Update the positions of the nodes\n setNodes(nodes);\n setLinks(links);\n });\n\n return () => {\n simulation.stop();\n };\n }, [tree, width, height]);\n\n if (nodes == null || links == null) {\n return h(Spinner);\n }\n\n console.log(\"Graph\", nodes, links, selectedNodes);\n\n return h(\n ErrorBoundary,\n {\n description: \"An error occurred while rendering the graph view.\",\n },\n h(\"div.graph-view\", { style: { width, height } }, [\n h(Switch, {\n className: \"show-labels-switch\",\n label: \"Show Labels\",\n checked: showLabels,\n onChange: (e) => setShowLabels(e.target.checked),\n }),\n h(\"svg\", { width, height }, [\n h(\n \"g.links\",\n links.map((d) => {\n return h(\"line\", {\n x1: d.source.x,\n y1: d.source.y,\n x2: d.target.x,\n y2: d.target.y,\n stroke: \"black\",\n });\n }),\n ),\n h(\n \"g.nodes\",\n nodes.map((d) => {\n const active = selectedNodes.includes(d.id);\n const stroke = active ? \"white\" : \"black\";\n const highlighted = isHighlighted(d.id, selectedNodes, nodes);\n const style = getTagStyle(d.color, { highlighted, active });\n\n return h(\"g\", [\n h(\"circle\", {\n cx: d.x,\n cy: d.y,\n r: 8,\n fill: style.backgroundColor || \"blue\",\n onClick: (e) => {\n e.stopPropagation();\n if (\n e.ctrlKey ||\n e.metaKey ||\n (selectedNodes[0] === d.id && selectedNodes.length === 1)\n ) {\n // Toggle selection on ctrl/cmd click or when node is only selected node\n e.stopPropagation();\n dispatch({\n type: \"toggle-node-selected\",\n payload: { ids: [d.id] },\n });\n } else {\n dispatch({\n type: \"select-node\",\n payload: { ids: [d.id] },\n });\n }\n },\n className: active\n ? \"selected\"\n : \"\" + (viewOnly ? \"\" : \" clickable\"),\n stroke,\n strokeWidth: 2,\n }),\n h.if(showLabels)(\n \"text\",\n {\n x: d.x + 10,\n y: d.y + 4,\n className: \"node-label\",\n },\n d.name || `Node ${d.id}`,\n ),\n h.if(!showLabels)(\"title\", d.name || `Node ${d.id}`),\n ]);\n }),\n ),\n ]),\n ]),\n );\n}\n\nfunction isHighlighted(id: number, selectedNodes: number[], nodes: TreeData[]) {\n if (selectedNodes.length === 0) return true;\n return (\n selectedNodes.includes(id) ||\n nodes.some(\n (node) =>\n selectedNodes.includes(node.id) &&\n node.children.some((child) => child.id === id),\n )\n );\n}\n"],"names":["$9bqpz$macrostrathyper","forceSimulation","$9bqpz$forceSimulation","forceLink","$9bqpz$forceLink","forceManyBody","$9bqpz$forceManyBody","forceCenter","$9bqpz$forceCenter","forceCollide","$9bqpz$forceCollide","useState","$9bqpz$useState","useEffect","$9bqpz$useEffect","Spinner","$9bqpz$Spinner","Switch","$9bqpz$Switch","ErrorBoundary","$9bqpz$ErrorBoundary","$parcel$global","globalThis","$parcel$modules","$parcel$inits","parcelRequire","id","exports","init","module","call","err","Error","code","register","$eedTh","$9wFEx","$edvRb","$8732cb0ae0ae3dfd$var$h","styled","a","__esModule","default","$8732cb0ae0ae3dfd$export$6a7fe3ef90e8d566","props","tree","width","height","dispatch","selectedNodes","viewOnly","nodes","setNodes","links","setLinks","showLabels","setShowLabels","edges","treeToGraph","nodesMap","Map","map","d","source","get","target","dest","strength","simulation","force","radius","on","console","log","stop","description","style","className","label","checked","onChange","e","x1","x","y1","y","x2","y2","stroke","active","includes","highlighted","length","some","node","children","child","getTagStyle","color","cx","cy","r","fill","backgroundColor","onClick","stopPropagation","ctrlKey","metaKey","type","payload","ids","strokeWidth","if","name","GraphView"],"version":3,"file":"feedback-components.79d7b18c.js.map","sourceRoot":"../../../../"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import"./feedback-components.e1fe112f.js";import{Divider as a,Switch as t,Icon as e,Overlay2 as i}from"@blueprintjs/core";import{Select as n}from"@blueprintjs/select";import o from"@macrostrat/hyper";import{useState as r}from"react";import{useAPIResult as c,SaveButton as l,DataField as d,JSONView as s}from"@macrostrat/ui-components";import{LithologyTag as m}from"@macrostrat/data-components";var p=globalThis,h={},u={},v=p.parcelRequirea149;null==v&&((v=function(a){if(a in h)return h[a].exports;if(a in u){var t=u[a];delete u[a];var e={id:a,exports:{}};return h[a]=e,t.call(e.exports,e,e.exports),e.exports}var i=Error("Cannot find module '"+a+"'");throw i.code="MODULE_NOT_FOUND",i}).register=function(a,t){u[a]=t},p.parcelRequirea149=v),v.register;var _=v("9wFEx");let f=o.styled(_&&_.__esModule?_.default:_);function y({match:i,setMatchLinks:n,matchLinks:o,selectedNodes:c,tree:l,dispatch:d}){var s,m;let p,[h,u]=r(!1),v=null;return 1===c.length&&(s=l,m=c[0],p=null,s.forEach(function a(t){if(t.id===m)return p=t,!0;if(Array.isArray(t.children)){for(let e of t.children)if(a(e))return!0}return!1}),v=p),f.if(o)("div",[f(a),f(t,{label:"Match mode",checked:void 0!==i,onChange:a=>{n(void 0===i?o||{}:void 0),d({type:"toggle-match-mode"})}}),f.if(v&&i)(b,{data:v?.match,matchLinks:o,dispatch:d,nodeId:v?.id}),f.if(1==c.length&&!v?.match&&i)("div.add-match-container",[f("div.add-type",{onClick:()=>{u(!0)}},[f("p.add-match-text","Add match"),f(e,{icon:"plus"})]),f(k,{isOpen:h,setOverlayOpen:u,nodeMatch:v,dispatch:d})])])}function k({isOpen:a,setOverlayOpen:t,nodeMatch:o,dispatch:d}){let[s,m]=r(o?.name||""),[p,h]=r(f("div","Select a match")),[u,v]=r(!0),[_,y]=r({}),k=c("https://dev.macrostrat.org/api/pg/type_lookup?name=ilike.*"+s+"*"),b=k?.map(a=>f(g,{data:a,setPayload:y}));return f(i,{isOpen:a},f("div.overlay-container",f("div.add-type-overlay",[f("h2.title",["Add match with "+o.name,f(e,{icon:"cross",className:"close-icon",onClick:()=>{t(!1)},style:{cursor:"pointer",color:"red"}})]),f("div.form-group",[f(n,{items:b||[],itemRenderer:(a,{handleClick:t})=>f("div.match-item",{onClick:t},a),onItemSelect:a=>{v(!1),h(a)},onQueryChange:a=>m(a),popoverProps:{minimal:!0},query:s,placeholder:"Enter match name"},p)]),f(l,{className:"save-btn",small:!0,onClick:()=>{d({type:"add-match",payload:{id:o.id,payload:_}}),t(!1)},disabled:u},"Save changes")])))}function b({data:a,matchLinks:t,dispatch:i,nodeId:n}){return f.if(a)("div.match-container",[g({data:a,matchLinks:t}),f(e,{icon:"cross",color:"red",className:"close-btn",onClick:()=>{i({type:"remove-match",payload:{id:n}})}})])}function g({data:a,matchLinks:t,setPayload:e}){if(a&&0!==Object.keys(a).length)return a.lith_id||a?.type==="lith"?f("div",{onClick:()=>{"lith"===a.type&&e({lith_id:a.id,name:a.name})}},f(d,{className:"match-item",label:"Stratigraphic name",value:f(m,{data:{name:a.name,id:a.id,color:a.color},onClick:()=>window.open(t.strat_name+"/"+a.strat_name_id,"_blank")})})):a.strat_name_id||a?.type==="strat_name"?f("div",{onClick:()=>{"strat_name"===a.type&&e({strat_name_id:a.id,name:a.name})}},f(d,{className:"match-item",label:"Stratigraphic name",value:f(m,{data:{name:a.name,id:a.id,color:a.color},onClick:()=>window.open(t.strat_name+"/"+a.strat_name_id,"_blank")})})):a.lith_att_id||a?.type==="lith_att"?f("div",{onClick:()=>{"lith_att"===a.type&&e({lith_att_id:a.id,name:a.name})}},f(d,{className:"match-item",label:"Lithology attribute",value:f(m,{data:{name:a.name,id:a.lith_att_id},onClick:()=>window.open(t.lith_att+"/"+a.lith_att_id,"_blank")})})):a.int_id||a?.type==="interval"?f("div",{onClick:()=>{"interval"===a.type&&e({int_id:a.id,name:a.name})}},f(d,{label:"Interval",className:"match-item",value:f(m,{data:{name:a.name,id:a.id},onClick:()=>window.open(t.interval+"/"+a.int_id,"_blank")})})):f(s,{data:a})}export{y as Matches,g as MatchTag};
|
|
2
|
+
//# sourceMappingURL=feedback-components.ad3ad94e.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"mappings":"A,M,oD,A,Q,W,C,C,U,C,C,Q,C,C,Y,C,K,mB,A,Q,U,C,K,qB,A,Q,M,mB,A,Q,Y,C,K,O,A,Q,gB,C,C,c,C,C,a,C,C,Y,C,K,2B,A,Q,gB,C,K,6B,C,I,E,W,E,C,E,E,C,E,E,E,iB,A,O,I,A,C,E,S,C,E,G,K,E,O,C,C,E,C,O,C,G,K,E,C,I,E,C,C,E,A,Q,C,C,E,C,I,E,C,G,E,Q,C,C,E,O,C,C,E,C,E,E,I,C,E,O,C,E,E,O,E,E,O,A,C,I,E,A,M,uB,E,I,O,E,I,C,mB,C,C,E,Q,C,S,C,C,C,E,C,C,E,C,C,E,E,iB,C,G,E,Q,C,I,E,E,SCUA,IAAM,EAAI,AAAA,EAAM,MAAM,C,AAAC,G,AAAA,E,U,C,AAAA,E,O,CAAA,GAEhB,SAAS,EAAQ,CAAA,MACtB,CAAK,CAAA,cACL,CAAa,CAAA,WACb,CAAU,CAAA,cACV,CAAa,CAAA,KACb,CAAI,CAAA,SACJ,CAAQ,CACT,MA+CyB,EAAM,EA9C9B,IA+CI,EA/CE,CAAC,EAAa,EAAe,CAAG,AAAA,EAAS,CAAA,GAE3C,EAAY,KAKhB,OAJI,AAAyB,IAAzB,EAAc,MAAM,GA2CA,EA1CO,EA0CD,EA1CO,CAAa,CAAC,EAAE,CA2CjD,EAAQ,KAeZ,EAAK,OAAO,CAbZ,SAAS,EAAS,CAAI,EACpB,GAAI,EAAK,EAAE,GAAK,EAEd,OADA,EAAQ,EACD,CAAA,EAET,GAAI,MAAM,OAAO,CAAC,EAAK,QAAQ,EAC7B,CAAA,IAAK,IAAM,KAAS,EAAK,QAAQ,CAC/B,GAAI,EAAS,GAAQ,MAAO,CAAA,CAC9B,CAEF,MAAO,CAAA,CACT,GAxDE,EA2DK,GAxDA,EAAE,EAAE,CAAC,GAAY,MAAO,CAC7B,EAAE,GACF,EAAE,EAAQ,CACR,MAAO,aACP,QAAS,AAAU,KAAA,IAAV,EACT,SAAU,AAAC,IACT,EAAc,AAAU,KAAA,IAAV,EAAsB,GAAc,CAAC,EAAI,KAAA,GACvD,EAAS,CAAE,KAAM,mBAAoB,EACvC,CACF,GACA,EAAE,EAAE,CAAC,GAAa,GAAO,EAAO,CAC9B,KAAM,GAAW,MACjB,WAAY,EACZ,SAAA,EACA,OAAQ,GAAW,EAC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","sources":["<anon>","packages/feedback-components/src/feedback/matches.ts"],"sourcesContent":["import \"./feedback-components.e1fe112f.js\";\nimport {Divider as $locXJ$Divider, Switch as $locXJ$Switch, Icon as $locXJ$Icon, Overlay2 as $locXJ$Overlay2} from \"@blueprintjs/core\";\nimport {Select as $locXJ$Select} from \"@blueprintjs/select\";\nimport $locXJ$macrostrathyper from \"@macrostrat/hyper\";\nimport {useState as $locXJ$useState} from \"react\";\nimport {useAPIResult as $locXJ$useAPIResult, SaveButton as $locXJ$SaveButton, DataField as $locXJ$DataField, JSONView as $locXJ$JSONView} from \"@macrostrat/ui-components\";\nimport {LithologyTag as $locXJ$LithologyTag} from \"@macrostrat/data-components\";\n\n\nfunction $parcel$interopDefault(a) {\n return a && a.__esModule ? a.default : a;\n}\n\n var $parcel$global = globalThis;\n \nvar $parcel$modules = {};\nvar $parcel$inits = {};\n\nvar parcelRequire = $parcel$global[\"parcelRequirea149\"];\n\nif (parcelRequire == null) {\n parcelRequire = function(id) {\n if (id in $parcel$modules) {\n return $parcel$modules[id].exports;\n }\n if (id in $parcel$inits) {\n var init = $parcel$inits[id];\n delete $parcel$inits[id];\n var module = {id: id, exports: {}};\n $parcel$modules[id] = module;\n init.call(module.exports, module, module.exports);\n return module.exports;\n }\n var err = new Error(\"Cannot find module '\" + id + \"'\");\n err.code = 'MODULE_NOT_FOUND';\n throw err;\n };\n\n parcelRequire.register = function register(id, init) {\n $parcel$inits[id] = init;\n };\n\n $parcel$global[\"parcelRequirea149\"] = parcelRequire;\n}\n\nvar parcelRegister = parcelRequire.register;\n\n\n\nvar $9wFEx = parcelRequire(\"9wFEx\");\n\n\n\n\nconst $7accc8160d3205c1$var$h = (0, $locXJ$macrostrathyper).styled((0, (/*@__PURE__*/$parcel$interopDefault($9wFEx))));\nfunction $7accc8160d3205c1$export$6479cfcac2b87c0({ match: match, setMatchLinks: setMatchLinks, matchLinks: matchLinks, selectedNodes: selectedNodes, tree: tree, dispatch: dispatch }) {\n const [overlayOpen, setOverlayOpen] = (0, $locXJ$useState)(false);\n let nodeMatch = null;\n if (selectedNodes.length === 1) nodeMatch = $7accc8160d3205c1$var$findMatchingNode(tree, selectedNodes[0]);\n return $7accc8160d3205c1$var$h.if(matchLinks)(\"div\", [\n $7accc8160d3205c1$var$h((0, $locXJ$Divider)),\n $7accc8160d3205c1$var$h((0, $locXJ$Switch), {\n label: \"Match mode\",\n checked: match !== undefined,\n onChange: (e)=>{\n setMatchLinks(match === undefined ? matchLinks || {} : undefined);\n dispatch({\n type: \"toggle-match-mode\"\n });\n }\n }),\n $7accc8160d3205c1$var$h.if(nodeMatch && match)($7accc8160d3205c1$var$Match, {\n data: nodeMatch?.match,\n matchLinks: matchLinks,\n dispatch: dispatch,\n nodeId: nodeMatch?.id\n }),\n $7accc8160d3205c1$var$h.if(selectedNodes.length == 1 && !nodeMatch?.match && match)(\"div.add-match-container\", [\n $7accc8160d3205c1$var$h(\"div.add-type\", {\n onClick: ()=>{\n setOverlayOpen(true);\n }\n }, [\n $7accc8160d3205c1$var$h(\"p.add-match-text\", \"Add match\"),\n $7accc8160d3205c1$var$h((0, $locXJ$Icon), {\n icon: \"plus\"\n })\n ]),\n $7accc8160d3205c1$var$h($7accc8160d3205c1$var$MatchOverlay, {\n isOpen: overlayOpen,\n setOverlayOpen: setOverlayOpen,\n nodeMatch: nodeMatch,\n dispatch: dispatch\n })\n ])\n ]);\n}\nfunction $7accc8160d3205c1$var$findMatchingNode(tree, nodeId) {\n let match = null;\n function traverse(node) {\n if (node.id === nodeId) {\n match = node;\n return true;\n }\n if (Array.isArray(node.children)) for (const child of node.children){\n if (traverse(child)) return true;\n }\n return false;\n }\n tree.forEach(traverse);\n return match;\n}\nfunction $7accc8160d3205c1$var$MatchOverlay({ isOpen: isOpen, setOverlayOpen: setOverlayOpen, nodeMatch: nodeMatch, dispatch: dispatch }) {\n const [inputValue, setInputValue] = (0, $locXJ$useState)(nodeMatch?.name || \"\");\n const [selectedItem, setSelectedItem] = (0, $locXJ$useState)($7accc8160d3205c1$var$h(\"div\", \"Select a match\"));\n const [disabled, setDisabled] = (0, $locXJ$useState)(true);\n const [payload, setPayload] = (0, $locXJ$useState)({});\n const data = (0, $locXJ$useAPIResult)(\"https://dev.macrostrat.org/api/pg/type_lookup?name=ilike.*\" + inputValue + \"*\");\n const items = data?.map((data)=>$7accc8160d3205c1$var$h($7accc8160d3205c1$export$5eeb3456842e9e5f, {\n data: data,\n setPayload: setPayload\n }));\n return $7accc8160d3205c1$var$h((0, $locXJ$Overlay2), {\n isOpen: isOpen\n }, $7accc8160d3205c1$var$h(\"div.overlay-container\", $7accc8160d3205c1$var$h(\"div.add-type-overlay\", [\n $7accc8160d3205c1$var$h(\"h2.title\", [\n \"Add match with \" + nodeMatch.name,\n $7accc8160d3205c1$var$h((0, $locXJ$Icon), {\n icon: \"cross\",\n className: \"close-icon\",\n onClick: ()=>{\n setOverlayOpen(false);\n },\n style: {\n cursor: \"pointer\",\n color: \"red\"\n }\n })\n ]),\n $7accc8160d3205c1$var$h(\"div.form-group\", [\n $7accc8160d3205c1$var$h((0, $locXJ$Select), {\n items: items || [],\n itemRenderer: (item, { handleClick: handleClick })=>{\n return $7accc8160d3205c1$var$h(\"div.match-item\", {\n onClick: handleClick\n }, item);\n },\n onItemSelect: (item)=>{\n setDisabled(false);\n setSelectedItem(item);\n },\n onQueryChange: (query)=>setInputValue(query),\n popoverProps: {\n minimal: true\n },\n query: inputValue,\n placeholder: \"Enter match name\"\n }, selectedItem)\n ]),\n $7accc8160d3205c1$var$h((0, $locXJ$SaveButton), {\n className: \"save-btn\",\n small: true,\n onClick: ()=>{\n // Handle save changes\n dispatch({\n type: \"add-match\",\n payload: {\n id: nodeMatch.id,\n payload: payload\n }\n });\n setOverlayOpen(false);\n },\n disabled: disabled\n }, \"Save changes\")\n ])));\n}\nfunction $7accc8160d3205c1$var$Match({ data: data, matchLinks: matchLinks, dispatch: dispatch, nodeId: nodeId }) {\n return $7accc8160d3205c1$var$h.if(data)(\"div.match-container\", [\n $7accc8160d3205c1$export$5eeb3456842e9e5f({\n data: data,\n matchLinks: matchLinks\n }),\n $7accc8160d3205c1$var$h((0, $locXJ$Icon), {\n icon: \"cross\",\n color: \"red\",\n className: \"close-btn\",\n onClick: ()=>{\n dispatch({\n type: \"remove-match\",\n payload: {\n id: nodeId\n }\n });\n }\n })\n ]);\n}\nfunction $7accc8160d3205c1$export$5eeb3456842e9e5f({ data: data, matchLinks: matchLinks, setPayload: setPayload }) {\n if (!data || Object.keys(data).length === 0) return;\n if (data.lith_id || data?.type === \"lith\") return $7accc8160d3205c1$var$h(\"div\", {\n onClick: ()=>{\n data.type === \"lith\" && setPayload({\n lith_id: data.id,\n name: data.name\n });\n }\n }, $7accc8160d3205c1$var$h((0, $locXJ$DataField), {\n className: \"match-item\",\n label: \"Stratigraphic name\",\n value: $7accc8160d3205c1$var$h((0, $locXJ$LithologyTag), {\n data: {\n name: data.name,\n id: data.id,\n color: data.color\n },\n onClick: ()=>window.open(matchLinks.strat_name + \"/\" + data.strat_name_id, \"_blank\")\n })\n }));\n if (data.strat_name_id || data?.type === \"strat_name\") return $7accc8160d3205c1$var$h(\"div\", {\n onClick: ()=>{\n data.type === \"strat_name\" && setPayload({\n strat_name_id: data.id,\n name: data.name\n });\n }\n }, $7accc8160d3205c1$var$h((0, $locXJ$DataField), {\n className: \"match-item\",\n label: \"Stratigraphic name\",\n value: $7accc8160d3205c1$var$h((0, $locXJ$LithologyTag), {\n data: {\n name: data.name,\n id: data.id,\n color: data.color\n },\n onClick: ()=>window.open(matchLinks.strat_name + \"/\" + data.strat_name_id, \"_blank\")\n })\n }));\n if (data.lith_att_id || data?.type === \"lith_att\") return $7accc8160d3205c1$var$h(\"div\", {\n onClick: ()=>{\n data.type === \"lith_att\" && setPayload({\n lith_att_id: data.id,\n name: data.name\n });\n }\n }, $7accc8160d3205c1$var$h((0, $locXJ$DataField), {\n className: \"match-item\",\n label: \"Lithology attribute\",\n value: $7accc8160d3205c1$var$h((0, $locXJ$LithologyTag), {\n data: {\n name: data.name,\n id: data.lith_att_id\n },\n onClick: ()=>window.open(matchLinks.lith_att + \"/\" + data.lith_att_id, \"_blank\")\n })\n }));\n if (data.int_id || data?.type === \"interval\") return $7accc8160d3205c1$var$h(\"div\", {\n onClick: ()=>{\n data.type === \"interval\" && setPayload({\n int_id: data.id,\n name: data.name\n });\n }\n }, $7accc8160d3205c1$var$h((0, $locXJ$DataField), {\n label: \"Interval\",\n className: \"match-item\",\n value: $7accc8160d3205c1$var$h((0, $locXJ$LithologyTag), {\n data: {\n name: data.name,\n id: data.id\n },\n onClick: ()=>window.open(matchLinks.interval + \"/\" + data.int_id, \"_blank\")\n })\n }));\n return $7accc8160d3205c1$var$h((0, $locXJ$JSONView), {\n data: data\n });\n}\n\n\nexport {$7accc8160d3205c1$export$6479cfcac2b87c0 as Matches, $7accc8160d3205c1$export$5eeb3456842e9e5f as MatchTag};\n//# sourceMappingURL=feedback-components.ad3ad94e.js.map\n","import { Switch } from \"@blueprintjs/core\";\nimport { Select } from \"@blueprintjs/select\";\nimport styles from \"./feedback.module.sass\";\nimport hyper from \"@macrostrat/hyper\";\nimport { useState } from \"react\";\nimport { Icon, Divider, Overlay2 } from \"@blueprintjs/core\";\nimport { JSONView, SaveButton } from \"@macrostrat/ui-components\";\nimport { useAPIResult, DataField } from \"@macrostrat/ui-components\";\nimport { LithologyTag } from \"@macrostrat/data-components\";\n\nconst h = hyper.styled(styles);\n\nexport function Matches({\n match,\n setMatchLinks,\n matchLinks,\n selectedNodes,\n tree,\n dispatch,\n}) {\n const [overlayOpen, setOverlayOpen] = useState(false);\n\n let nodeMatch = null;\n if (selectedNodes.length === 1) {\n nodeMatch = findMatchingNode(tree, selectedNodes[0]);\n }\n\n return h.if(matchLinks)(\"div\", [\n h(Divider),\n h(Switch, {\n label: \"Match mode\",\n checked: match !== undefined,\n onChange: (e) => {\n setMatchLinks(match === undefined ? matchLinks || {} : undefined);\n dispatch({ type: \"toggle-match-mode\" });\n },\n }),\n h.if(nodeMatch && match)(Match, {\n data: nodeMatch?.match,\n matchLinks: matchLinks,\n dispatch,\n nodeId: nodeMatch?.id,\n }),\n h.if(selectedNodes.length == 1 && !nodeMatch?.match && match)(\n \"div.add-match-container\",\n [\n h(\n \"div.add-type\",\n {\n onClick: () => {\n setOverlayOpen(true);\n },\n },\n [h(\"p.add-match-text\", \"Add match\"), h(Icon, { icon: \"plus\" })],\n ),\n h(MatchOverlay, {\n isOpen: overlayOpen,\n setOverlayOpen,\n nodeMatch,\n dispatch,\n }),\n ],\n ),\n ]);\n}\n\nfunction findMatchingNode(tree, nodeId) {\n let match = null;\n\n function traverse(node) {\n if (node.id === nodeId) {\n match = node;\n return true;\n }\n if (Array.isArray(node.children)) {\n for (const child of node.children) {\n if (traverse(child)) return true;\n }\n }\n return false;\n }\n\n tree.forEach(traverse);\n return match;\n}\n\nfunction MatchOverlay({ isOpen, setOverlayOpen, nodeMatch, dispatch }) {\n const [inputValue, setInputValue] = useState(nodeMatch?.name || \"\");\n const [selectedItem, setSelectedItem] = useState(h(\"div\", \"Select a match\"));\n const [disabled, setDisabled] = useState(true);\n const [payload, setPayload] = useState({});\n\n const data = useAPIResult(\n \"https://dev.macrostrat.org/api/pg/type_lookup?name=ilike.*\" +\n inputValue +\n \"*\",\n );\n const items = data?.map((data) => h(MatchTag, { data, setPayload }));\n\n return h(\n Overlay2,\n {\n isOpen,\n },\n h(\n \"div.overlay-container\",\n h(\"div.add-type-overlay\", [\n h(\"h2.title\", [\n \"Add match with \" + nodeMatch.name,\n h(Icon, {\n icon: \"cross\",\n className: \"close-icon\",\n onClick: () => {\n setOverlayOpen(false);\n },\n style: { cursor: \"pointer\", color: \"red\" },\n }),\n ]),\n h(\"div.form-group\", [\n h(\n Select,\n {\n items: items || [],\n itemRenderer: (item, { handleClick }) => {\n return h(\"div.match-item\", { onClick: handleClick }, item);\n },\n onItemSelect: (item) => {\n setDisabled(false);\n setSelectedItem(item);\n },\n onQueryChange: (query) => setInputValue(query),\n popoverProps: { minimal: true },\n query: inputValue,\n placeholder: \"Enter match name\",\n },\n selectedItem,\n ),\n ]),\n h(\n SaveButton,\n {\n className: \"save-btn\",\n small: true,\n onClick: () => {\n // Handle save changes\n dispatch({\n type: \"add-match\",\n payload: { id: nodeMatch.id, payload },\n });\n setOverlayOpen(false);\n },\n disabled,\n },\n \"Save changes\",\n ),\n ]),\n ),\n );\n}\n\nfunction Match({ data, matchLinks, dispatch, nodeId }) {\n return h.if(data)(\"div.match-container\", [\n MatchTag({ data, matchLinks }),\n h(Icon, {\n icon: \"cross\",\n color: \"red\",\n className: \"close-btn\",\n onClick: () => {\n dispatch({ type: \"remove-match\", payload: { id: nodeId } });\n },\n }),\n ]);\n}\n\ninterface MatchTagProps {\n data: any;\n matchLinks?: Record<string, string>;\n setPayload?: (payload: Record<string, any>) => void;\n}\n\nexport function MatchTag({ data, matchLinks, setPayload }: MatchTagProps) {\n if (!data || Object.keys(data).length === 0) return;\n\n if (data.lith_id || data?.type === \"lith\") {\n return h(\n \"div\",\n {\n onClick: () => {\n data.type === \"lith\"\n ? setPayload({ lith_id: data.id, name: data.name })\n : null;\n },\n },\n h(DataField, {\n className: \"match-item\",\n label: \"Stratigraphic name\",\n value: h(LithologyTag, {\n data: { name: data.name, id: data.id, color: data.color },\n onClick: () =>\n window.open(\n matchLinks.strat_name + \"/\" + data.strat_name_id,\n \"_blank\",\n ),\n }),\n }),\n );\n }\n\n if (data.strat_name_id || data?.type === \"strat_name\") {\n return h(\n \"div\",\n {\n onClick: () => {\n data.type === \"strat_name\"\n ? setPayload({ strat_name_id: data.id, name: data.name })\n : null;\n },\n },\n h(DataField, {\n className: \"match-item\",\n label: \"Stratigraphic name\",\n value: h(LithologyTag, {\n data: { name: data.name, id: data.id, color: data.color },\n onClick: () =>\n window.open(\n matchLinks.strat_name + \"/\" + data.strat_name_id,\n \"_blank\",\n ),\n }),\n }),\n );\n }\n\n if (data.lith_att_id || data?.type === \"lith_att\") {\n return h(\n \"div\",\n {\n onClick: () => {\n data.type === \"lith_att\"\n ? setPayload({ lith_att_id: data.id, name: data.name })\n : null;\n },\n },\n h(DataField, {\n className: \"match-item\",\n label: \"Lithology attribute\",\n value: h(LithologyTag, {\n data: { name: data.name, id: data.lith_att_id },\n onClick: () =>\n window.open(matchLinks.lith_att + \"/\" + data.lith_att_id, \"_blank\"),\n }),\n }),\n );\n }\n\n if (data.int_id || data?.type === \"interval\") {\n return h(\n \"div\",\n {\n onClick: () => {\n data.type === \"interval\"\n ? setPayload({ int_id: data.id, name: data.name })\n : null;\n },\n },\n h(DataField, {\n label: \"Interval\",\n className: \"match-item\",\n value: h(LithologyTag, {\n data: { name: data.name, id: data.id },\n onClick: () =>\n window.open(matchLinks.interval + \"/\" + data.int_id, \"_blank\"),\n }),\n }),\n );\n }\n\n return h(JSONView, { data });\n}\n"],"names":["Divider","$locXJ$Divider","Switch","$locXJ$Switch","Icon","$locXJ$Icon","Overlay2","$locXJ$Overlay2","Select","$locXJ$Select","$locXJ$macrostrathyper","useState","$locXJ$useState","useAPIResult","$locXJ$useAPIResult","SaveButton","$locXJ$SaveButton","DataField","$locXJ$DataField","JSONView","$locXJ$JSONView","LithologyTag","$locXJ$LithologyTag","$parcel$global","globalThis","$parcel$modules","$parcel$inits","parcelRequire","id","exports","init","module","call","err","Error","code","register","$9wFEx","$7accc8160d3205c1$var$h","styled","a","__esModule","default","$7accc8160d3205c1$export$6479cfcac2b87c0","match","setMatchLinks","matchLinks","selectedNodes","tree","dispatch","nodeId","overlayOpen","setOverlayOpen","nodeMatch","length","forEach","traverse","node","Array","isArray","children","child","if","label","checked","undefined","onChange","e","type","$7accc8160d3205c1$var$Match","data","onClick","icon","$7accc8160d3205c1$var$MatchOverlay","isOpen","inputValue","setInputValue","name","selectedItem","setSelectedItem","disabled","setDisabled","payload","setPayload","items","map","$7accc8160d3205c1$export$5eeb3456842e9e5f","className","style","cursor","color","itemRenderer","item","handleClick","onItemSelect","onQueryChange","query","popoverProps","minimal","placeholder","small","Object","keys","lith_id","value","window","open","strat_name","strat_name_id","lith_att_id","lith_att","int_id","interval","Matches","MatchTag"],"version":3,"file":"feedback-components.ad3ad94e.js.map","sourceRoot":"../../../../"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import"./feedback-components.e1fe112f.js";import"./feedback-components.4c09ec76.js";import"./feedback-components.1ec0e5c7.js";import"./feedback-components.b22d37d1.js";import"./feedback-components.8caef76e.js";import"./feedback-components.acac789b.js";import"./feedback-components.79d7b18c.js";import"./feedback-components.ad3ad94e.js";import"./feedback-components.6e969752.js";import e from"@macrostrat/hyper";import{Tree as t}from"react-arborist";import{useState as n,useRef as o,useCallback as r,useEffect as a}from"react";import{SegmentedControl as i,Card as s,ButtonGroup as d,Divider as l}from"@blueprintjs/core";import{ErrorBoundary as c,FlexRow as p,CancelButton as m,SaveButton as u}from"@macrostrat/ui-components";import f from"use-element-dimensions";function h(e,t,n,o){Object.defineProperty(e,t,{get:n,set:o,enumerable:!0,configurable:!0})}var y=globalThis,v={},b={},w=y.parcelRequirea149;null==w&&((w=function(e){if(e in v)return v[e].exports;if(e in b){var t=b[e];delete b[e];var n={id:e,exports:{}};return v[e]=n,t.call(n.exports,n,n.exports),n.exports}var o=Error("Cannot find module '"+e+"'");throw o.code="MODULE_NOT_FOUND",o}).register=function(e,t){b[e]=t},y.parcelRequirea149=w),w.register;var g={};h(g,"FeedbackComponent",()=>F),h(g,"treeToGraph",()=>w("eedTh").treeToGraph);var k=w("9wFEx"),S=w("bQY4Q"),_=w("3OP12"),C=w("edvRb"),T=w("eedTh"),E=w("iKZjQ"),O=w("bK9Of"),x=w("jlqgz"),H=w("aWecs");let R=e.styled(k&&k.__esModule?k.default:k);function F({entities:e=[],text:t,model:o,entityTypes:r,matchComponent:a,onSave:h,allowOverlap:y,matchLinks:v,view:b=!1}){let[w,g]=n(b),[k,S]=n(v),E=void 0!==k,[H,F]=(0,T.useUpdatableTree)(e.map(j),r,w,E),{selectedNodes:A,tree:L,selectedEntityType:M,isSelectingEntityType:D,entityTypesMap:G}=H,[{width:$,height:B},K]=f();return R("div.page-wrapper",[R("div.feedback-container",R(T.TreeDispatchContext.Provider,{value:F},[R.if(!b)(i,{options:[{label:"View",value:"view"},{label:"Edit",value:"edit"}],value:w?"view":"edit",small:!0,onValueChange(){g(!w),F({type:"toggle-view-only"})},role:"toolbar"}),R(c,{description:"An error occurred while rendering the feedback text component."},R(_.FeedbackText,{text:t,dispatch:F,nodes:L,selectedNodes:A,allowOverlap:y,matchLinks:k,viewOnly:w})),R(p,{alignItems:"baseline",justifyContent:"space-between"},[R(C.ModelInfo,{data:o}),R(i,{options:[{label:"Tree",value:"tree"},{label:"Graph",value:"graph"}],value:H.viewMode,small:!0,onValueChange(e){console.log("Setting view mode",e),F({type:"set-view-mode",payload:e})}})]),R("div.entity-panel",{ref:K},[R.if("tree"==H.viewMode)(N,{selectedNodes:A,dispatch:F,tree:L,width:$,height:B,matchComponent:a,viewOnly:w}),R.if("graph"==H.viewMode)(O.GraphView,{tree:L,width:$,height:B,dispatch:F,selectedNodes:A,viewOnly:w})])])),R(s,{className:"control-panel"},[R("div.control-content",[R.if(!w)(d,{vertical:!0,fill:!0,minimal:!0,alignText:"left"},[R(m,{icon:"trash",disabled:H.initialTree==H.tree,onClick(){F({type:"reset"})}},"Reset"),R(u,{onClick(){h(H.tree)},disabled:H.initialTree==H.tree},"Save")]),R.if(!w)(x.Matches,{match:k,setMatchLinks:S,matchLinks:v,selectedNodes:A,tree:L,dispatch:F}),R.if(!w)(l),R(I,{entityTypes:G,selected:M,onChange(e){F({type:"select-entity-type",payload:e})},dispatch:F,tree:L,selectedNodes:A,isOpen:D,setOpen:e=>F({type:"toggle-entity-type-selector",payload:e}),viewOnly:w,matchMode:E})])])])}function j(e){return{...e,term_type:e.type.name,txt_range:[e.indices],children:e.children?.map(j)??[]}}function I({entityTypes:e,selected:t,isOpen:o,setOpen:r,onChange:a,tree:i,dispatch:s,selectedNodes:d=[],viewOnly:l,matchMode:c}){let p=null!=t?t:void 0,[m,u]=n(""),f=Array.from(e.values()),h=""!==m?f.filter(e=>e.name.toLowerCase().includes(m.toLowerCase())):f;return R("div.entity-type-selector",[R(H.TypeList,{types:e,selected:p,dispatch:s,selectedNodes:d,tree:i,viewOnly:l||c}),R(E.OmniboxSelector,{isOpen:o,items:h,selectedItem:p,onSelectItem(e){r(!1),a(e)},onQueryChange(e){u(e)},onClose(){r(!1)}})])}function N(e){let{selectedNodes:n,dispatch:i,tree:s,height:d,width:l,matchComponent:c,viewOnly:p}=e,m=o(),u=o(!1),f=r(e=>R(S.default,{...e,matchComponent:c}),[c]);a(()=>{if(null!=m.current)!function(e,t){if(e.size!==t.size)return!1;for(let n of e)if(!t.has(n))return!1;return!0}(new Set(n.map(e=>e.toString())),m.current.selectedIds)&&m.current.setSelection({ids:n.map(e=>e.toString()),anchor:null,mostRecent:null})},[n]);let h=o(!1);return a(()=>{let e=e=>{(e.ctrlKey||e.metaKey)&&(h.current=!0)},t=()=>h.current=!1;return window.addEventListener("keydown",e),window.addEventListener("keyup",t),()=>{window.removeEventListener("keydown",e),window.removeEventListener("keyup",t)}},[]),R("div.selection-tree-wrapper",{onPointerDown:function(){u.current=!0}},R(t,{className:"selection-tree",height:d,width:l,ref:m,data:s,onMove({dragIds:e,parentId:t,index:n}){i({type:"move-node",payload:{dragIds:e.map(e=>parseInt(e)),parentId:t?parseInt(t):null,index:n}})},onDelete({ids:e}){i({type:"delete-node",payload:{ids:e.map(e=>parseInt(e))}})},onSelect:r(e=>{if(!u.current)return;u.current=!1;let t=h.current,o=e.map(e=>parseInt(e.id));t?i({type:"toggle-node-selected",payload:{ids:o}}):(1===o.length&&o[0]===n[0]&&(o=[]),i({type:"select-node",payload:{ids:o}}))},[n,i]),children:f,idAccessor:e=>p?-1:e.id.toString()}))}export{F as FeedbackComponent,$330ae695507d96f5$export$8d9dbb7a64bf2a5e as treeToGraph};
|
|
2
|
+
//# sourceMappingURL=feedback-components.cf680c38.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"mappings":"A,M,oD,A,O,oD,A,O,oD,A,O,oD,A,O,oD,A,O,oD,A,O,oD,A,O,oD,A,O,oD,A,Q,M,mB,A,Q,Q,C,K,gB,A,Q,Y,C,C,U,C,C,e,C,C,a,C,K,O,A,Q,oB,C,C,Q,C,C,e,C,C,W,C,K,mB,A,Q,iB,C,C,W,C,C,gB,C,C,c,C,K,2B,A,Q,M,wB,C,S,E,C,C,C,C,C,C,C,E,O,c,C,E,E,C,I,E,I,E,W,C,E,a,C,C,E,C,I,E,W,E,C,E,E,C,E,E,E,iB,A,O,I,A,C,E,S,C,E,G,K,E,O,C,C,E,C,O,C,G,K,E,C,I,E,C,C,E,A,Q,C,C,E,C,I,E,C,G,E,Q,C,C,E,O,C,C,E,C,E,E,I,C,E,O,C,E,E,O,E,E,O,A,C,I,E,A,M,uB,E,I,O,E,I,C,mB,C,C,E,Q,C,S,C,C,C,E,C,C,E,C,C,E,E,iB,C,G,E,Q,C,I,E,C,E,E,E,oB,I,G,E,E,c,I,A,E,S,W,E,I,E,E,S,E,E,S,E,E,S,E,E,S,E,E,S,E,E,S,E,E,S,E,E,S,E,E,SCuCA,IAAM,EAAI,AAAA,EAAM,MAAM,C,AAAC,G,AAAA,E,U,C,AAAA,E,O,CAAA,GAUhB,SAAS,EAAkB,CAAA,SAChC,EAAW,EAAE,CAAA,KACb,CAAI,CAAA,MACJ,CAAK,CAAA,YACL,CAAW,CAAA,eACX,CAAc,CAAA,OACd,CAAM,CAAA,aACN,CAAY,CAAA,WACZ,CAAU,CAAA,KACV,EAAO,CAAA,CAAA,CACR,EACC,GAAM,CAAC,EAAU,EAAY,CAAG,AAAA,EAAS,GACnC,CAAC,EAAO,EAAc,CAAG,AAAA,EAAS,GAClC,EAAY,AAAU,KAAA,IAAV,EAGZ,CAAC,EAAO,EAAS,CAAG,AAAA,CAAA,EAAA,EAAA,gBAAe,AAAf,EACxB,EAAS,GAAG,CAAC,GACb,EACA,EACA,GAGI,CAAA,cACJ,CAAa,CAAA,KACb,CAAI,CAAA,mBACJ,CAAkB,CAAA,sBAClB,CAAqB,CAAA,eACrB,CAAc,CACf,CAAG,EAEE,CAAC,CAAA,MAAE,CAAK,CAAA,OAAE,CAAM,CAAE,CAAE,EAAI,CAAG,AAAA,IAEjC,OAAO,EAAE,mBAAoB,CAC3B,EACE,yBACA,EAAE,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","sources":["<anon>","packages/feedback-components/src/feedback/index.ts"],"sourcesContent":["import \"./feedback-components.e1fe112f.js\";\nimport \"./feedback-components.4c09ec76.js\";\nimport \"./feedback-components.1ec0e5c7.js\";\nimport \"./feedback-components.b22d37d1.js\";\nimport \"./feedback-components.8caef76e.js\";\nimport \"./feedback-components.acac789b.js\";\nimport \"./feedback-components.79d7b18c.js\";\nimport \"./feedback-components.ad3ad94e.js\";\nimport \"./feedback-components.6e969752.js\";\nimport $ajJMX$macrostrathyper from \"@macrostrat/hyper\";\nimport {Tree as $ajJMX$Tree} from \"react-arborist\";\nimport {useState as $ajJMX$useState, useRef as $ajJMX$useRef, useCallback as $ajJMX$useCallback, useEffect as $ajJMX$useEffect} from \"react\";\nimport {SegmentedControl as $ajJMX$SegmentedControl, Card as $ajJMX$Card, ButtonGroup as $ajJMX$ButtonGroup, Divider as $ajJMX$Divider} from \"@blueprintjs/core\";\nimport {ErrorBoundary as $ajJMX$ErrorBoundary, FlexRow as $ajJMX$FlexRow, CancelButton as $ajJMX$CancelButton, SaveButton as $ajJMX$SaveButton} from \"@macrostrat/ui-components\";\nimport $ajJMX$useelementdimensions from \"use-element-dimensions\";\n\n\nfunction $parcel$interopDefault(a) {\n return a && a.__esModule ? a.default : a;\n}\n\nfunction $parcel$export(e, n, v, s) {\n Object.defineProperty(e, n, {get: v, set: s, enumerable: true, configurable: true});\n}\n\n var $parcel$global = globalThis;\n \nvar $parcel$modules = {};\nvar $parcel$inits = {};\n\nvar parcelRequire = $parcel$global[\"parcelRequirea149\"];\n\nif (parcelRequire == null) {\n parcelRequire = function(id) {\n if (id in $parcel$modules) {\n return $parcel$modules[id].exports;\n }\n if (id in $parcel$inits) {\n var init = $parcel$inits[id];\n delete $parcel$inits[id];\n var module = {id: id, exports: {}};\n $parcel$modules[id] = module;\n init.call(module.exports, module, module.exports);\n return module.exports;\n }\n var err = new Error(\"Cannot find module '\" + id + \"'\");\n err.code = 'MODULE_NOT_FOUND';\n throw err;\n };\n\n parcelRequire.register = function register(id, init) {\n $parcel$inits[id] = init;\n };\n\n $parcel$global[\"parcelRequirea149\"] = parcelRequire;\n}\n\nvar parcelRegister = parcelRequire.register;\nvar $2c86488f2f3c1edd$exports = {};\n\n$parcel$export($2c86488f2f3c1edd$exports, \"FeedbackComponent\", () => $2c86488f2f3c1edd$export$a90600c9da52b40c);\n$parcel$export($2c86488f2f3c1edd$exports, \"treeToGraph\", () => (parcelRequire(\"eedTh\")).treeToGraph);\n\nvar $9wFEx = parcelRequire(\"9wFEx\");\n\n\n\nvar $bQY4Q = parcelRequire(\"bQY4Q\");\n\nvar $3OP12 = parcelRequire(\"3OP12\");\n\nvar $edvRb = parcelRequire(\"edvRb\");\n\nvar $eedTh = parcelRequire(\"eedTh\");\n\n\n\nvar $iKZjQ = parcelRequire(\"iKZjQ\");\n\n\n\nvar $bK9Of = parcelRequire(\"bK9Of\");\n\nvar $jlqgz = parcelRequire(\"jlqgz\");\n\nvar $aWecs = parcelRequire(\"aWecs\");\nconst $2c86488f2f3c1edd$var$h = (0, $ajJMX$macrostrathyper).styled((0, (/*@__PURE__*/$parcel$interopDefault($9wFEx))));\nfunction $2c86488f2f3c1edd$var$setsAreTheSame(a, b) {\n if (a.size !== b.size) return false;\n for (const item of a){\n if (!b.has(item)) return false;\n }\n return true;\n}\nfunction $2c86488f2f3c1edd$export$a90600c9da52b40c({ entities: entities = [], text: text, model: model, entityTypes: entityTypes, matchComponent: matchComponent, onSave: onSave, allowOverlap: allowOverlap, matchLinks: matchLinks, view: view = false }) {\n const [viewOnly, setViewOnly] = (0, $ajJMX$useState)(view);\n const [match, setMatchLinks] = (0, $ajJMX$useState)(matchLinks);\n const matchMode = match !== undefined;\n // Get the input arguments\n const [state, dispatch] = (0, $eedTh.useUpdatableTree)(entities.map($2c86488f2f3c1edd$var$processEntity), entityTypes, viewOnly, matchMode);\n const { selectedNodes: selectedNodes, tree: tree, selectedEntityType: selectedEntityType, isSelectingEntityType: isSelectingEntityType, entityTypesMap: entityTypesMap } = state;\n const [{ width: width, height: height }, ref] = (0, $ajJMX$useelementdimensions)();\n return $2c86488f2f3c1edd$var$h(\"div.page-wrapper\", [\n $2c86488f2f3c1edd$var$h(\"div.feedback-container\", $2c86488f2f3c1edd$var$h((0, $eedTh.TreeDispatchContext).Provider, {\n value: dispatch\n }, [\n $2c86488f2f3c1edd$var$h.if(!view)((0, $ajJMX$SegmentedControl), {\n options: [\n {\n label: \"View\",\n value: \"view\"\n },\n {\n label: \"Edit\",\n value: \"edit\"\n }\n ],\n value: viewOnly ? \"view\" : \"edit\",\n small: true,\n onValueChange () {\n setViewOnly(!viewOnly);\n dispatch({\n type: \"toggle-view-only\"\n });\n },\n role: \"toolbar\"\n }),\n $2c86488f2f3c1edd$var$h((0, $ajJMX$ErrorBoundary), {\n description: \"An error occurred while rendering the feedback text component.\"\n }, $2c86488f2f3c1edd$var$h((0, $3OP12.FeedbackText), {\n text: text,\n dispatch: dispatch,\n // @ts-ignore\n nodes: tree,\n selectedNodes: selectedNodes,\n allowOverlap: allowOverlap,\n matchLinks: match,\n viewOnly: viewOnly\n })),\n $2c86488f2f3c1edd$var$h((0, $ajJMX$FlexRow), {\n alignItems: \"baseline\",\n justifyContent: \"space-between\"\n }, [\n $2c86488f2f3c1edd$var$h((0, $edvRb.ModelInfo), {\n data: model\n }),\n $2c86488f2f3c1edd$var$h((0, $ajJMX$SegmentedControl), {\n options: [\n {\n label: \"Tree\",\n value: \"tree\"\n },\n {\n label: \"Graph\",\n value: \"graph\"\n }\n ],\n value: state.viewMode,\n small: true,\n onValueChange (value) {\n console.log(\"Setting view mode\", value);\n dispatch({\n type: \"set-view-mode\",\n payload: value\n });\n }\n })\n ]),\n $2c86488f2f3c1edd$var$h(\"div.entity-panel\", {\n ref: ref\n }, [\n $2c86488f2f3c1edd$var$h.if(state.viewMode == \"tree\")($2c86488f2f3c1edd$var$ManagedSelectionTree, {\n selectedNodes: selectedNodes,\n dispatch: dispatch,\n tree: tree,\n width: width,\n height: height,\n matchComponent: matchComponent,\n viewOnly: viewOnly\n }),\n $2c86488f2f3c1edd$var$h.if(state.viewMode == \"graph\")((0, $bK9Of.GraphView), {\n tree: tree,\n width: width,\n height: height,\n dispatch: dispatch,\n selectedNodes: selectedNodes,\n viewOnly: viewOnly\n })\n ])\n ])),\n $2c86488f2f3c1edd$var$h((0, $ajJMX$Card), {\n className: \"control-panel\"\n }, [\n $2c86488f2f3c1edd$var$h(\"div.control-content\", [\n $2c86488f2f3c1edd$var$h.if(!viewOnly)((0, $ajJMX$ButtonGroup), {\n vertical: true,\n fill: true,\n minimal: true,\n alignText: \"left\"\n }, [\n $2c86488f2f3c1edd$var$h((0, $ajJMX$CancelButton), {\n icon: \"trash\",\n disabled: state.initialTree == state.tree,\n onClick () {\n dispatch({\n type: \"reset\"\n });\n }\n }, \"Reset\"),\n $2c86488f2f3c1edd$var$h((0, $ajJMX$SaveButton), {\n onClick () {\n onSave(state.tree);\n },\n disabled: state.initialTree == state.tree\n }, \"Save\")\n ]),\n $2c86488f2f3c1edd$var$h.if(!viewOnly)((0, $jlqgz.Matches), {\n match: match,\n setMatchLinks: setMatchLinks,\n matchLinks: matchLinks,\n selectedNodes: selectedNodes,\n tree: tree,\n dispatch: dispatch\n }),\n $2c86488f2f3c1edd$var$h.if(!viewOnly)((0, $ajJMX$Divider)),\n $2c86488f2f3c1edd$var$h($2c86488f2f3c1edd$var$EntityTypeSelector, {\n entityTypes: entityTypesMap,\n selected: selectedEntityType,\n onChange (payload) {\n dispatch({\n type: \"select-entity-type\",\n payload: payload\n });\n },\n dispatch: dispatch,\n tree: tree,\n selectedNodes: selectedNodes,\n isOpen: isSelectingEntityType,\n setOpen: (isOpen)=>dispatch({\n type: \"toggle-entity-type-selector\",\n payload: isOpen\n }),\n viewOnly: viewOnly,\n matchMode: matchMode\n })\n ])\n ])\n ]);\n}\nfunction $2c86488f2f3c1edd$var$processEntity(entity) {\n // @ts-ignore\n return {\n ...entity,\n // @ts-ignore\n term_type: entity.type.name,\n txt_range: [\n entity.indices\n ],\n children: entity.children?.map($2c86488f2f3c1edd$var$processEntity) ?? []\n };\n}\nfunction $2c86488f2f3c1edd$var$EntityTypeSelector({ entityTypes: entityTypes, selected: selected, isOpen: isOpen, setOpen: setOpen, onChange: onChange, tree: tree, dispatch: dispatch, selectedNodes: selectedNodes = [], viewOnly: viewOnly, matchMode: matchMode }) {\n // Show all entity types when selected is null\n const _selected = selected != null ? selected : undefined;\n const [inputValue, setInputValue] = (0, $ajJMX$useState)(\"\");\n const types = Array.from(entityTypes.values());\n const items = inputValue !== \"\" ? types.filter((d)=>d.name.toLowerCase().includes(inputValue.toLowerCase())) : types;\n return $2c86488f2f3c1edd$var$h(\"div.entity-type-selector\", [\n $2c86488f2f3c1edd$var$h((0, $aWecs.TypeList), {\n types: entityTypes,\n selected: _selected,\n dispatch: dispatch,\n selectedNodes: selectedNodes,\n tree: tree,\n viewOnly: viewOnly || matchMode\n }),\n $2c86488f2f3c1edd$var$h((0, $iKZjQ.OmniboxSelector), {\n isOpen: isOpen,\n items: items,\n selectedItem: _selected,\n onSelectItem (item) {\n setOpen(false);\n onChange(item);\n },\n onQueryChange (query) {\n setInputValue(query);\n },\n onClose () {\n setOpen(false);\n }\n })\n ]);\n}\nfunction $2c86488f2f3c1edd$var$countNodes(tree) {\n if (!tree) return 0;\n let count = 0;\n function recurse(nodes) {\n for (const node of nodes){\n count++;\n if (node.children && Array.isArray(node.children)) recurse(node.children);\n }\n }\n recurse(tree);\n return count;\n}\nfunction $2c86488f2f3c1edd$var$ManagedSelectionTree(props) {\n const { selectedNodes: selectedNodes, dispatch: dispatch, tree: tree, height: height, width: width, matchComponent: matchComponent, viewOnly: viewOnly } = props;\n const ref = (0, $ajJMX$useRef)();\n // Use a ref to track clicks (won't cause rerender)\n const clickedRef = (0, $ajJMX$useRef)(false);\n const _Node = (0, $ajJMX$useCallback)((props)=>$2c86488f2f3c1edd$var$h((0, $bQY4Q.default), {\n ...props,\n matchComponent: matchComponent\n }), [\n matchComponent\n ]);\n // Update Tree selection when selectedNodes change\n (0, $ajJMX$useEffect)(()=>{\n if (ref.current == null) return;\n const selection = new Set(selectedNodes.map((d)=>d.toString()));\n const currentSelection = ref.current.selectedIds;\n if ($2c86488f2f3c1edd$var$setsAreTheSame(selection, currentSelection)) return;\n ref.current.setSelection({\n ids: selectedNodes.map((d)=>d.toString()),\n anchor: null,\n mostRecent: null\n });\n }, [\n selectedNodes\n ]);\n // Mark clicked when user clicks inside the tree container\n function handleClick() {\n clickedRef.current = true;\n }\n const ctrlPressedRef = (0, $ajJMX$useRef)(false);\n (0, $ajJMX$useEffect)(()=>{\n const down = (e)=>{\n if (e.ctrlKey || e.metaKey) ctrlPressedRef.current = true;\n };\n const up = ()=>ctrlPressedRef.current = false;\n window.addEventListener(\"keydown\", down);\n window.addEventListener(\"keyup\", up);\n return ()=>{\n window.removeEventListener(\"keydown\", down);\n window.removeEventListener(\"keyup\", up);\n };\n }, []);\n const handleSelect = (0, $ajJMX$useCallback)((nodes)=>{\n if (!clickedRef.current) return;\n clickedRef.current = false;\n const isMultiSelect = ctrlPressedRef.current;\n let ids = nodes.map((d)=>parseInt(d.id));\n if (isMultiSelect) dispatch({\n type: \"toggle-node-selected\",\n payload: {\n ids: ids\n }\n });\n else {\n if (ids.length === 1 && ids[0] === selectedNodes[0]) ids = [];\n dispatch({\n type: \"select-node\",\n payload: {\n ids: ids\n }\n });\n }\n }, [\n selectedNodes,\n dispatch\n ]);\n return $2c86488f2f3c1edd$var$h(\"div.selection-tree-wrapper\", {\n onPointerDown: handleClick\n }, $2c86488f2f3c1edd$var$h((0, $ajJMX$Tree), {\n className: \"selection-tree\",\n height: height,\n width: width,\n ref: ref,\n data: tree,\n onMove ({ dragIds: dragIds, parentId: parentId, index: index }) {\n dispatch({\n type: \"move-node\",\n payload: {\n dragIds: dragIds.map((d)=>parseInt(d)),\n parentId: parentId ? parseInt(parentId) : null,\n index: index\n }\n });\n },\n onDelete ({ ids: ids }) {\n dispatch({\n type: \"delete-node\",\n payload: {\n ids: ids.map((d)=>parseInt(d))\n }\n });\n },\n onSelect: handleSelect,\n children: _Node,\n idAccessor (d) {\n if (viewOnly) return -1;\n return d.id.toString();\n }\n }));\n}\n\n\nexport {$2c86488f2f3c1edd$export$a90600c9da52b40c as FeedbackComponent, $330ae695507d96f5$export$8d9dbb7a64bf2a5e as treeToGraph};\n//# sourceMappingURL=feedback-components.cf680c38.js.map\n","import styles from \"./feedback.module.sass\";\nimport hyper from \"@macrostrat/hyper\";\n\nimport { Tree, TreeApi } from \"react-arborist\";\nimport Node from \"./node\";\nimport { FeedbackText } from \"./text-visualizer\";\nimport type { InternalEntity, TreeData } from \"./types\";\nimport type { Entity } from \"../extractions\";\nimport { getTagStyle, ModelInfo } from \"../extractions\";\nimport {\n TreeDispatchContext,\n treeToGraph,\n useUpdatableTree,\n ViewMode,\n} from \"./edit-state\";\nimport { useCallback, useEffect, useRef, useState } from \"react\";\nimport {\n ButtonGroup,\n Card,\n SegmentedControl,\n Divider,\n} from \"@blueprintjs/core\";\nimport { OmniboxSelector } from \"./type-selector\";\nimport {\n CancelButton,\n ErrorBoundary,\n FlexRow,\n SaveButton,\n} from \"@macrostrat/ui-components\";\nimport useElementDimensions from \"use-element-dimensions\";\nimport { GraphView } from \"./graph\";\n\nimport { Matches } from \"./matches\";\nimport { TypeList } from \"./typelist\";\n\nexport type { GraphData } from \"./edit-state\";\nexport { treeToGraph } from \"./edit-state\";\nexport type { TreeData } from \"./types\";\n\nconst h = hyper.styled(styles);\n\nfunction setsAreTheSame<T>(a: Set<T>, b: Set<T>) {\n if (a.size !== b.size) return false;\n for (const item of a) {\n if (!b.has(item)) return false;\n }\n return true;\n}\n\nexport function FeedbackComponent({\n entities = [],\n text,\n model,\n entityTypes,\n matchComponent,\n onSave,\n allowOverlap,\n matchLinks,\n view = false,\n}) {\n const [viewOnly, setViewOnly] = useState(view);\n const [match, setMatchLinks] = useState(matchLinks);\n const matchMode = match !== undefined;\n\n // Get the input arguments\n const [state, dispatch] = useUpdatableTree(\n entities.map(processEntity) as any,\n entityTypes,\n viewOnly,\n matchMode,\n );\n\n const {\n selectedNodes,\n tree,\n selectedEntityType,\n isSelectingEntityType,\n entityTypesMap,\n } = state;\n\n const [{ width, height }, ref] = useElementDimensions();\n\n return h(\"div.page-wrapper\", [\n h(\n \"div.feedback-container\",\n h(TreeDispatchContext.Provider, { value: dispatch }, [\n h.if(!view)(SegmentedControl, {\n options: [\n { label: \"View\", value: \"view\" },\n { label: \"Edit\", value: \"edit\" },\n ],\n value: viewOnly ? \"view\" : \"edit\",\n small: true,\n onValueChange() {\n setViewOnly(!viewOnly);\n dispatch({ type: \"toggle-view-only\" });\n },\n role: \"toolbar\",\n }),\n h(\n ErrorBoundary,\n {\n description:\n \"An error occurred while rendering the feedback text component.\",\n },\n h(FeedbackText, {\n text,\n dispatch,\n // @ts-ignore\n nodes: tree,\n selectedNodes,\n allowOverlap,\n matchLinks: match,\n viewOnly,\n }),\n ),\n h(\n FlexRow,\n { alignItems: \"baseline\", justifyContent: \"space-between\" },\n [\n h(ModelInfo, { data: model }),\n h(SegmentedControl, {\n options: [\n { label: \"Tree\", value: \"tree\" },\n { label: \"Graph\", value: \"graph\" },\n ],\n value: state.viewMode,\n small: true,\n onValueChange(value: ViewMode) {\n console.log(\"Setting view mode\", value);\n dispatch({ type: \"set-view-mode\", payload: value });\n },\n }),\n ],\n ),\n h(\n \"div.entity-panel\",\n {\n ref,\n },\n [\n h.if(state.viewMode == \"tree\")(ManagedSelectionTree, {\n selectedNodes,\n dispatch,\n tree,\n width,\n height,\n matchComponent,\n viewOnly,\n }),\n h.if(state.viewMode == \"graph\")(GraphView, {\n tree,\n width,\n height,\n dispatch,\n selectedNodes,\n viewOnly,\n }),\n ],\n ),\n ]),\n ),\n h(Card, { className: \"control-panel\" }, [\n h(\"div.control-content\", [\n h.if(!viewOnly)(\n ButtonGroup,\n {\n vertical: true,\n fill: true,\n minimal: true,\n alignText: \"left\",\n },\n [\n h(\n CancelButton,\n {\n icon: \"trash\",\n disabled: state.initialTree == state.tree,\n onClick() {\n dispatch({ type: \"reset\" });\n },\n },\n \"Reset\",\n ),\n h(\n SaveButton,\n {\n onClick() {\n onSave(state.tree);\n },\n disabled: state.initialTree == state.tree,\n },\n \"Save\",\n ),\n ],\n ),\n h.if(!viewOnly)(Matches, {\n match,\n setMatchLinks,\n matchLinks,\n selectedNodes,\n tree,\n dispatch,\n }),\n h.if(!viewOnly)(Divider),\n h(EntityTypeSelector, {\n entityTypes: entityTypesMap,\n selected: selectedEntityType,\n onChange(payload) {\n dispatch({ type: \"select-entity-type\", payload });\n },\n dispatch,\n tree,\n selectedNodes,\n isOpen: isSelectingEntityType,\n setOpen: (isOpen: boolean) =>\n dispatch({\n type: \"toggle-entity-type-selector\",\n payload: isOpen,\n }),\n viewOnly,\n matchMode,\n }),\n ]),\n ]),\n ]);\n}\n\nfunction processEntity(entity: Entity): InternalEntity {\n // @ts-ignore\n return {\n ...entity,\n // @ts-ignore\n term_type: entity.type.name,\n txt_range: [entity.indices],\n children: entity.children?.map(processEntity) ?? [],\n };\n}\n\nfunction EntityTypeSelector({\n entityTypes,\n selected,\n isOpen,\n setOpen,\n onChange,\n tree,\n dispatch,\n selectedNodes = [],\n viewOnly,\n matchMode,\n}) {\n // Show all entity types when selected is null\n const _selected = selected != null ? selected : undefined;\n const [inputValue, setInputValue] = useState(\"\");\n const types = Array.from(entityTypes.values());\n\n const items =\n inputValue !== \"\"\n ? types.filter((d) =>\n d.name.toLowerCase().includes(inputValue.toLowerCase()),\n )\n : types;\n\n return h(\"div.entity-type-selector\", [\n h(TypeList, {\n types: entityTypes,\n selected: _selected,\n dispatch,\n selectedNodes,\n tree,\n viewOnly: viewOnly || matchMode,\n }),\n h(OmniboxSelector, {\n isOpen,\n items,\n selectedItem: _selected,\n onSelectItem(item) {\n setOpen(false);\n onChange(item);\n },\n onQueryChange(query) {\n setInputValue(query);\n },\n onClose() {\n setOpen(false);\n },\n }),\n ]);\n}\n\nfunction countNodes(tree) {\n if (!tree) return 0;\n let count = 0;\n\n function recurse(nodes) {\n for (const node of nodes) {\n count++;\n if (node.children && Array.isArray(node.children)) {\n recurse(node.children);\n }\n }\n }\n\n recurse(tree);\n return count;\n}\n\nfunction ManagedSelectionTree(props) {\n const {\n selectedNodes,\n dispatch,\n tree,\n height,\n width,\n matchComponent,\n viewOnly,\n } = props;\n\n const ref = useRef<TreeApi<TreeData>>();\n // Use a ref to track clicks (won't cause rerender)\n const clickedRef = useRef(false);\n\n const _Node = useCallback(\n (props) => h(Node, { ...props, matchComponent }),\n [matchComponent],\n );\n\n // Update Tree selection when selectedNodes change\n useEffect(() => {\n if (ref.current == null) return;\n\n const selection = new Set(selectedNodes.map((d) => d.toString()));\n const currentSelection = ref.current.selectedIds;\n if (setsAreTheSame(selection, currentSelection)) return;\n\n ref.current.setSelection({\n ids: selectedNodes.map((d) => d.toString()),\n anchor: null,\n mostRecent: null,\n });\n }, [selectedNodes]);\n\n // Mark clicked when user clicks inside the tree container\n function handleClick() {\n clickedRef.current = true;\n }\n\n const ctrlPressedRef = useRef(false);\n\n useEffect(() => {\n const down = (e) => {\n if (e.ctrlKey || e.metaKey) ctrlPressedRef.current = true;\n };\n const up = () => (ctrlPressedRef.current = false);\n\n window.addEventListener(\"keydown\", down);\n window.addEventListener(\"keyup\", up);\n return () => {\n window.removeEventListener(\"keydown\", down);\n window.removeEventListener(\"keyup\", up);\n };\n }, []);\n\n const handleSelect = useCallback(\n (nodes) => {\n if (!clickedRef.current) return;\n clickedRef.current = false;\n const isMultiSelect = ctrlPressedRef.current;\n\n let ids = nodes.map((d) => parseInt(d.id));\n\n if (isMultiSelect) {\n dispatch({ type: \"toggle-node-selected\", payload: { ids } });\n } else {\n if (ids.length === 1 && ids[0] === selectedNodes[0]) {\n ids = [];\n }\n\n dispatch({ type: \"select-node\", payload: { ids } });\n }\n },\n [selectedNodes, dispatch],\n );\n\n return h(\n \"div.selection-tree-wrapper\",\n { onPointerDown: handleClick },\n h(Tree, {\n className: \"selection-tree\",\n height,\n width,\n ref,\n data: tree,\n onMove({ dragIds, parentId, index }) {\n dispatch({\n type: \"move-node\",\n payload: {\n dragIds: dragIds.map((d) => parseInt(d)),\n parentId: parentId ? parseInt(parentId) : null,\n index,\n },\n });\n },\n onDelete({ ids }) {\n dispatch({\n type: \"delete-node\",\n payload: { ids: ids.map((d) => parseInt(d)) },\n });\n },\n onSelect: handleSelect,\n children: _Node,\n idAccessor(d) {\n if (viewOnly) return -1;\n return d.id.toString();\n },\n }),\n );\n}\n"],"names":["$ajJMX$macrostrathyper","Tree","$ajJMX$Tree","useState","$ajJMX$useState","useRef","$ajJMX$useRef","useCallback","$ajJMX$useCallback","useEffect","$ajJMX$useEffect","SegmentedControl","$ajJMX$SegmentedControl","Card","$ajJMX$Card","ButtonGroup","$ajJMX$ButtonGroup","Divider","$ajJMX$Divider","ErrorBoundary","$ajJMX$ErrorBoundary","FlexRow","$ajJMX$FlexRow","CancelButton","$ajJMX$CancelButton","SaveButton","$ajJMX$SaveButton","$ajJMX$useelementdimensions","$parcel$export","e","n","v","s","Object","defineProperty","get","set","enumerable","configurable","$parcel$global","globalThis","$parcel$modules","$parcel$inits","parcelRequire","id","exports","init","module","call","err","Error","code","register","$2c86488f2f3c1edd$exports","$2c86488f2f3c1edd$export$a90600c9da52b40c","treeToGraph","$9wFEx","$bQY4Q","$3OP12","$edvRb","$eedTh","$iKZjQ","$bK9Of","$jlqgz","$aWecs","$2c86488f2f3c1edd$var$h","styled","a","__esModule","default","entities","text","model","entityTypes","matchComponent","onSave","allowOverlap","matchLinks","view","viewOnly","setViewOnly","match","setMatchLinks","matchMode","undefined","state","dispatch","useUpdatableTree","map","$2c86488f2f3c1edd$var$processEntity","selectedNodes","tree","selectedEntityType","isSelectingEntityType","entityTypesMap","width","height","ref","TreeDispatchContext","Provider","value","if","options","label","small","onValueChange","type","role","description","FeedbackText","nodes","alignItems","justifyContent","ModelInfo","data","viewMode","console","log","payload","$2c86488f2f3c1edd$var$ManagedSelectionTree","GraphView","className","vertical","fill","minimal","alignText","icon","disabled","initialTree","onClick","Matches","$2c86488f2f3c1edd$var$EntityTypeSelector","selected","onChange","isOpen","setOpen","entity","term_type","name","txt_range","indices","children","_selected","inputValue","setInputValue","types","Array","from","values","items","filter","d","toLowerCase","includes","TypeList","OmniboxSelector","selectedItem","onSelectItem","item","onQueryChange","query","onClose","props","clickedRef","_Node","current","$2c86488f2f3c1edd$var$setsAreTheSame","b","size","has","Set","toString","selectedIds","setSelection","ids","anchor","mostRecent","ctrlPressedRef","down","ctrlKey","metaKey","up","window","addEventListener","removeEventListener","onPointerDown","onMove","dragIds","parentId","index","parseInt","onDelete","onSelect","isMultiSelect","length","idAccessor","FeedbackComponent","$330ae695507d96f5$export$8d9dbb7a64bf2a5e"],"version":3,"file":"feedback-components.cf680c38.js.map","sourceRoot":"../../../../"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
function e(e,t,o,a){Object.defineProperty(e,t,{get:o,set:a,enumerable:!0,configurable:!0})}var t,o,a,n,c,l,r,i,p,Q,W,X,_,d,b,s,y,f,m,h,g,k,u,x,v,w,$,j,O,P,q={};e(q,"add-type",()=>t,e=>t=e),e(q,"add-type-overlay",()=>o,e=>o=e),e(q,"clickable",()=>a,e=>a=e),e(q,"close-btn",()=>n,e=>n=e),e(q,"control-content",()=>c,e=>c=e),e(q,"control-panel",()=>l,e=>l=e),e(q,"description",()=>r,e=>r=e),e(q,"entity-panel",()=>i,e=>i=e),e(q,"feedback-component",()=>p,e=>p=e),e(q,"feedback-container",()=>Q,e=>Q=e),e(q,"feedback-text",()=>W,e=>W=e),e(q,"feedback-text-wrapper",()=>X,e=>X=e),e(q,"form-group",()=>_,e=>_=e),e(q,"highlight",()=>d,e=>d=e),e(q,"icons",()=>b,e=>b=e),e(q,"match-container",()=>s,e=>s=e),e(q,"match-item",()=>y,e=>y=e),e(q,"match-label",()=>f,e=>f=e),e(q,"match-link",()=>m,e=>m=e),e(q,"node",()=>h,e=>h=e),e(q,"node-label",()=>g,e=>g=e),e(q,"overlay-container",()=>k,e=>k=e),e(q,"page-wrapper",()=>u,e=>u=e),e(q,"selected",()=>x,e=>x=e),e(q,"selection-tree",()=>v,e=>v=e),e(q,"text-inputs",()=>w,e=>w=e),e(q,"title",()=>$,e=>$=e),e(q,"type-container",()=>j,e=>j=e),e(q,"type-list",()=>O,e=>O=e),e(q,"type-tag",()=>P,e=>P=e),t="QoX8-W_add-type",o="QoX8-W_add-type-overlay",a="QoX8-W_clickable",n="QoX8-W_close-btn",c="QoX8-W_control-content",l="QoX8-W_control-panel",r="QoX8-W_description",i="QoX8-W_entity-panel",p="QoX8-W_feedback-component",Q="QoX8-W_feedback-container",W="QoX8-W_feedback-text",X="QoX8-W_feedback-text-wrapper",_="QoX8-W_form-group",d="QoX8-W_highlight",b="QoX8-W_icons",s="QoX8-W_match-container",y="QoX8-W_match-item",f="QoX8-W_match-label",m="QoX8-W_match-link",h="QoX8-W_node",g="QoX8-W_node-label",k="QoX8-W_overlay-container",u="QoX8-W_page-wrapper",x="QoX8-W_selected",v="QoX8-W_selection-tree",w="QoX8-W_text-inputs",$="QoX8-W_title",j="QoX8-W_type-container",O="QoX8-W_type-list",P="QoX8-W_type-tag";export{q as default};
|
|
2
|
+
//# sourceMappingURL=feedback-components.e1fe112f.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"mappings":"A,S,E,C,C,C,C,C,C,C,E,O,c,C,E,E,C,I,E,I,E,W,C,E,a,C,C,E,C,ICAA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,E,E,C,E,E,E,W,I,E,A,G,E,G,E,E,mB,I,E,A,G,E,G,E,E,Y,I,E,A,G,E,G,E,E,Y,I,E,A,G,E,G,E,E,kB,I,E,A,G,E,G,E,E,gB,I,E,A,G,E,G,E,E,c,I,E,A,G,E,G,E,E,e,I,E,A,G,E,G,E,E,qB,I,E,A,G,E,G,E,E,qB,I,E,A,G,E,G,E,E,gB,I,E,A,G,E,G,E,E,wB,I,E,A,G,E,G,E,E,a,I,E,A,G,E,G,E,E,Y,I,E,A,G,E,G,E,E,Q,I,E,A,G,E,G,E,E,kB,I,E,A,G,E,G,E,E,a,I,E,A,G,E,G,E,E,c,I,E,A,G,E,G,E,E,a,I,E,A,G,E,G,E,E,O,I,E,A,G,E,G,E,E,a,I,E,A,G,E,G,E,E,oB,I,E,A,G,E,G,E,E,e,I,E,A,G,E,G,E,E,W,I,E,A,G,E,G,E,E,iB,I,E,A,G,E,G,E,E,c,I,E,A,G,E,G,E,E,Q,I,E,A,G,E,G,E,E,iB,I,E,A,G,E,G,E,E,Y,I,E,A,G,E,G,E,E,W,I,E,A,G,E,GA7BA,EAA6B,kBAC7B,EAAqC,0BACrC,EAA8B,mBAC9B,EAA8B,mBAC9B,EAAoC,yBACpC,EAAkC,uBAClC,EAAgC,qBAChC,EAAiC,sBACjC,EAAuC,4BACvC,EAAuC,4BACvC,EAAkC,uBAClC,EAA0C,+BAC1C,EAA+B,oBAC/B,EAA8B,mBAC9B,EAA0B,eAC1B,EAAoC,yBACpC,EAA+B,oBAC/B,EAAgC,qBAChC,EAA+B,oBAC/B,EAAyB,cACzB,EAA+B,oBAC/B,EAAsC,2BACtC,EAAiC,sBACjC,EAA6B,kBAC7B,EAAmC,wBACnC,EAAgC,qBAChC,EAA0B,eAC1B,EAAmC,wBACnC,EAA8B,mBAC9B,EAA6B,yB,K,O","sources":["<anon>","packages/feedback-components/src/feedback/feedback.module.sass"],"sourcesContent":["\nfunction $parcel$export(e, n, v, s) {\n Object.defineProperty(e, n, {get: v, set: s, enumerable: true, configurable: true});\n}\nvar $01ca2f1f49a3a114$exports = {};\n\n$parcel$export($01ca2f1f49a3a114$exports, \"add-type\", () => $01ca2f1f49a3a114$export$cb889aaddfa2926c, (v) => $01ca2f1f49a3a114$export$cb889aaddfa2926c = v);\n$parcel$export($01ca2f1f49a3a114$exports, \"add-type-overlay\", () => $01ca2f1f49a3a114$export$5f8f750fd71deeed, (v) => $01ca2f1f49a3a114$export$5f8f750fd71deeed = v);\n$parcel$export($01ca2f1f49a3a114$exports, \"clickable\", () => $01ca2f1f49a3a114$export$60d5655c6babb2a0, (v) => $01ca2f1f49a3a114$export$60d5655c6babb2a0 = v);\n$parcel$export($01ca2f1f49a3a114$exports, \"close-btn\", () => $01ca2f1f49a3a114$export$f5032a039312e50b, (v) => $01ca2f1f49a3a114$export$f5032a039312e50b = v);\n$parcel$export($01ca2f1f49a3a114$exports, \"control-content\", () => $01ca2f1f49a3a114$export$42e8b5293e69631e, (v) => $01ca2f1f49a3a114$export$42e8b5293e69631e = v);\n$parcel$export($01ca2f1f49a3a114$exports, \"control-panel\", () => $01ca2f1f49a3a114$export$a0a23f31d5562853, (v) => $01ca2f1f49a3a114$export$a0a23f31d5562853 = v);\n$parcel$export($01ca2f1f49a3a114$exports, \"description\", () => $01ca2f1f49a3a114$export$6d59db4903f20f7d, (v) => $01ca2f1f49a3a114$export$6d59db4903f20f7d = v);\n$parcel$export($01ca2f1f49a3a114$exports, \"entity-panel\", () => $01ca2f1f49a3a114$export$38f2cd12e45697e, (v) => $01ca2f1f49a3a114$export$38f2cd12e45697e = v);\n$parcel$export($01ca2f1f49a3a114$exports, \"feedback-component\", () => $01ca2f1f49a3a114$export$579bd45c78bf5510, (v) => $01ca2f1f49a3a114$export$579bd45c78bf5510 = v);\n$parcel$export($01ca2f1f49a3a114$exports, \"feedback-container\", () => $01ca2f1f49a3a114$export$23889d205b405f6e, (v) => $01ca2f1f49a3a114$export$23889d205b405f6e = v);\n$parcel$export($01ca2f1f49a3a114$exports, \"feedback-text\", () => $01ca2f1f49a3a114$export$890489be1870bed5, (v) => $01ca2f1f49a3a114$export$890489be1870bed5 = v);\n$parcel$export($01ca2f1f49a3a114$exports, \"feedback-text-wrapper\", () => $01ca2f1f49a3a114$export$6bd0fd0a746c88f, (v) => $01ca2f1f49a3a114$export$6bd0fd0a746c88f = v);\n$parcel$export($01ca2f1f49a3a114$exports, \"form-group\", () => $01ca2f1f49a3a114$export$55a1f87a143fb302, (v) => $01ca2f1f49a3a114$export$55a1f87a143fb302 = v);\n$parcel$export($01ca2f1f49a3a114$exports, \"highlight\", () => $01ca2f1f49a3a114$export$e4043f67d36cbb26, (v) => $01ca2f1f49a3a114$export$e4043f67d36cbb26 = v);\n$parcel$export($01ca2f1f49a3a114$exports, \"icons\", () => $01ca2f1f49a3a114$export$df03f54e09e486fa, (v) => $01ca2f1f49a3a114$export$df03f54e09e486fa = v);\n$parcel$export($01ca2f1f49a3a114$exports, \"match-container\", () => $01ca2f1f49a3a114$export$864d1dadc1dd3f57, (v) => $01ca2f1f49a3a114$export$864d1dadc1dd3f57 = v);\n$parcel$export($01ca2f1f49a3a114$exports, \"match-item\", () => $01ca2f1f49a3a114$export$a7bcc8ced81f8d07, (v) => $01ca2f1f49a3a114$export$a7bcc8ced81f8d07 = v);\n$parcel$export($01ca2f1f49a3a114$exports, \"match-label\", () => $01ca2f1f49a3a114$export$be49c8f7a120829f, (v) => $01ca2f1f49a3a114$export$be49c8f7a120829f = v);\n$parcel$export($01ca2f1f49a3a114$exports, \"match-link\", () => $01ca2f1f49a3a114$export$f308f5f3e77e2c87, (v) => $01ca2f1f49a3a114$export$f308f5f3e77e2c87 = v);\n$parcel$export($01ca2f1f49a3a114$exports, \"node\", () => $01ca2f1f49a3a114$export$35059013cd4a06db, (v) => $01ca2f1f49a3a114$export$35059013cd4a06db = v);\n$parcel$export($01ca2f1f49a3a114$exports, \"node-label\", () => $01ca2f1f49a3a114$export$75d14899fb692bb6, (v) => $01ca2f1f49a3a114$export$75d14899fb692bb6 = v);\n$parcel$export($01ca2f1f49a3a114$exports, \"overlay-container\", () => $01ca2f1f49a3a114$export$6a1093e41947f68e, (v) => $01ca2f1f49a3a114$export$6a1093e41947f68e = v);\n$parcel$export($01ca2f1f49a3a114$exports, \"page-wrapper\", () => $01ca2f1f49a3a114$export$7c414e944018fb15, (v) => $01ca2f1f49a3a114$export$7c414e944018fb15 = v);\n$parcel$export($01ca2f1f49a3a114$exports, \"selected\", () => $01ca2f1f49a3a114$export$d90250155de6d7e7, (v) => $01ca2f1f49a3a114$export$d90250155de6d7e7 = v);\n$parcel$export($01ca2f1f49a3a114$exports, \"selection-tree\", () => $01ca2f1f49a3a114$export$3ae1b51693c80a9c, (v) => $01ca2f1f49a3a114$export$3ae1b51693c80a9c = v);\n$parcel$export($01ca2f1f49a3a114$exports, \"text-inputs\", () => $01ca2f1f49a3a114$export$bc7581b048bdc9d, (v) => $01ca2f1f49a3a114$export$bc7581b048bdc9d = v);\n$parcel$export($01ca2f1f49a3a114$exports, \"title\", () => $01ca2f1f49a3a114$export$fb184b623420d9be, (v) => $01ca2f1f49a3a114$export$fb184b623420d9be = v);\n$parcel$export($01ca2f1f49a3a114$exports, \"type-container\", () => $01ca2f1f49a3a114$export$b2d17fca990bb66c, (v) => $01ca2f1f49a3a114$export$b2d17fca990bb66c = v);\n$parcel$export($01ca2f1f49a3a114$exports, \"type-list\", () => $01ca2f1f49a3a114$export$915fe2ca68846e4c, (v) => $01ca2f1f49a3a114$export$915fe2ca68846e4c = v);\n$parcel$export($01ca2f1f49a3a114$exports, \"type-tag\", () => $01ca2f1f49a3a114$export$5e5acbc770fb0e4, (v) => $01ca2f1f49a3a114$export$5e5acbc770fb0e4 = v);\nvar $01ca2f1f49a3a114$export$cb889aaddfa2926c;\nvar $01ca2f1f49a3a114$export$5f8f750fd71deeed;\nvar $01ca2f1f49a3a114$export$60d5655c6babb2a0;\nvar $01ca2f1f49a3a114$export$f5032a039312e50b;\nvar $01ca2f1f49a3a114$export$42e8b5293e69631e;\nvar $01ca2f1f49a3a114$export$a0a23f31d5562853;\nvar $01ca2f1f49a3a114$export$6d59db4903f20f7d;\nvar $01ca2f1f49a3a114$export$38f2cd12e45697e;\nvar $01ca2f1f49a3a114$export$579bd45c78bf5510;\nvar $01ca2f1f49a3a114$export$23889d205b405f6e;\nvar $01ca2f1f49a3a114$export$890489be1870bed5;\nvar $01ca2f1f49a3a114$export$6bd0fd0a746c88f;\nvar $01ca2f1f49a3a114$export$55a1f87a143fb302;\nvar $01ca2f1f49a3a114$export$e4043f67d36cbb26;\nvar $01ca2f1f49a3a114$export$df03f54e09e486fa;\nvar $01ca2f1f49a3a114$export$864d1dadc1dd3f57;\nvar $01ca2f1f49a3a114$export$a7bcc8ced81f8d07;\nvar $01ca2f1f49a3a114$export$be49c8f7a120829f;\nvar $01ca2f1f49a3a114$export$f308f5f3e77e2c87;\nvar $01ca2f1f49a3a114$export$35059013cd4a06db;\nvar $01ca2f1f49a3a114$export$75d14899fb692bb6;\nvar $01ca2f1f49a3a114$export$6a1093e41947f68e;\nvar $01ca2f1f49a3a114$export$7c414e944018fb15;\nvar $01ca2f1f49a3a114$export$d90250155de6d7e7;\nvar $01ca2f1f49a3a114$export$3ae1b51693c80a9c;\nvar $01ca2f1f49a3a114$export$bc7581b048bdc9d;\nvar $01ca2f1f49a3a114$export$fb184b623420d9be;\nvar $01ca2f1f49a3a114$export$b2d17fca990bb66c;\nvar $01ca2f1f49a3a114$export$915fe2ca68846e4c;\nvar $01ca2f1f49a3a114$export$5e5acbc770fb0e4;\n$01ca2f1f49a3a114$export$cb889aaddfa2926c = `QoX8-W_add-type`;\n$01ca2f1f49a3a114$export$5f8f750fd71deeed = `QoX8-W_add-type-overlay`;\n$01ca2f1f49a3a114$export$60d5655c6babb2a0 = `QoX8-W_clickable`;\n$01ca2f1f49a3a114$export$f5032a039312e50b = `QoX8-W_close-btn`;\n$01ca2f1f49a3a114$export$42e8b5293e69631e = `QoX8-W_control-content`;\n$01ca2f1f49a3a114$export$a0a23f31d5562853 = `QoX8-W_control-panel`;\n$01ca2f1f49a3a114$export$6d59db4903f20f7d = `QoX8-W_description`;\n$01ca2f1f49a3a114$export$38f2cd12e45697e = `QoX8-W_entity-panel`;\n$01ca2f1f49a3a114$export$579bd45c78bf5510 = `QoX8-W_feedback-component`;\n$01ca2f1f49a3a114$export$23889d205b405f6e = `QoX8-W_feedback-container`;\n$01ca2f1f49a3a114$export$890489be1870bed5 = `QoX8-W_feedback-text`;\n$01ca2f1f49a3a114$export$6bd0fd0a746c88f = `QoX8-W_feedback-text-wrapper`;\n$01ca2f1f49a3a114$export$55a1f87a143fb302 = `QoX8-W_form-group`;\n$01ca2f1f49a3a114$export$e4043f67d36cbb26 = `QoX8-W_highlight`;\n$01ca2f1f49a3a114$export$df03f54e09e486fa = `QoX8-W_icons`;\n$01ca2f1f49a3a114$export$864d1dadc1dd3f57 = `QoX8-W_match-container`;\n$01ca2f1f49a3a114$export$a7bcc8ced81f8d07 = `QoX8-W_match-item`;\n$01ca2f1f49a3a114$export$be49c8f7a120829f = `QoX8-W_match-label`;\n$01ca2f1f49a3a114$export$f308f5f3e77e2c87 = `QoX8-W_match-link`;\n$01ca2f1f49a3a114$export$35059013cd4a06db = `QoX8-W_node`;\n$01ca2f1f49a3a114$export$75d14899fb692bb6 = `QoX8-W_node-label`;\n$01ca2f1f49a3a114$export$6a1093e41947f68e = `QoX8-W_overlay-container`;\n$01ca2f1f49a3a114$export$7c414e944018fb15 = `QoX8-W_page-wrapper`;\n$01ca2f1f49a3a114$export$d90250155de6d7e7 = `QoX8-W_selected`;\n$01ca2f1f49a3a114$export$3ae1b51693c80a9c = `QoX8-W_selection-tree`;\n$01ca2f1f49a3a114$export$bc7581b048bdc9d = `QoX8-W_text-inputs`;\n$01ca2f1f49a3a114$export$fb184b623420d9be = `QoX8-W_title`;\n$01ca2f1f49a3a114$export$b2d17fca990bb66c = `QoX8-W_type-container`;\n$01ca2f1f49a3a114$export$915fe2ca68846e4c = `QoX8-W_type-list`;\n$01ca2f1f49a3a114$export$5e5acbc770fb0e4 = `QoX8-W_type-tag`;\n\n\nexport {$01ca2f1f49a3a114$exports as default};\n//# sourceMappingURL=feedback-components.e1fe112f.js.map\n",null],"names":["$parcel$export","e","n","v","s","Object","defineProperty","get","set","enumerable","configurable","$01ca2f1f49a3a114$export$cb889aaddfa2926c","$01ca2f1f49a3a114$export$5f8f750fd71deeed","$01ca2f1f49a3a114$export$60d5655c6babb2a0","$01ca2f1f49a3a114$export$f5032a039312e50b","$01ca2f1f49a3a114$export$42e8b5293e69631e","$01ca2f1f49a3a114$export$a0a23f31d5562853","$01ca2f1f49a3a114$export$6d59db4903f20f7d","$01ca2f1f49a3a114$export$38f2cd12e45697e","$01ca2f1f49a3a114$export$579bd45c78bf5510","$01ca2f1f49a3a114$export$23889d205b405f6e","$01ca2f1f49a3a114$export$890489be1870bed5","$01ca2f1f49a3a114$export$6bd0fd0a746c88f","$01ca2f1f49a3a114$export$55a1f87a143fb302","$01ca2f1f49a3a114$export$e4043f67d36cbb26","$01ca2f1f49a3a114$export$df03f54e09e486fa","$01ca2f1f49a3a114$export$864d1dadc1dd3f57","$01ca2f1f49a3a114$export$a7bcc8ced81f8d07","$01ca2f1f49a3a114$export$be49c8f7a120829f","$01ca2f1f49a3a114$export$f308f5f3e77e2c87","$01ca2f1f49a3a114$export$35059013cd4a06db","$01ca2f1f49a3a114$export$75d14899fb692bb6","$01ca2f1f49a3a114$export$6a1093e41947f68e","$01ca2f1f49a3a114$export$7c414e944018fb15","$01ca2f1f49a3a114$export$d90250155de6d7e7","$01ca2f1f49a3a114$export$3ae1b51693c80a9c","$01ca2f1f49a3a114$export$bc7581b048bdc9d","$01ca2f1f49a3a114$export$fb184b623420d9be","$01ca2f1f49a3a114$export$b2d17fca990bb66c","$01ca2f1f49a3a114$export$915fe2ca68846e4c","$01ca2f1f49a3a114$export$5e5acbc770fb0e4","$01ca2f1f49a3a114$exports","default"],"version":3,"file":"feedback-components.e1fe112f.js.map","sourceRoot":"../../../../"}
|
package/dist/node/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import"./feedback-components.b22d37d1.js";import"./feedback-components.
|
|
1
|
+
import"./feedback-components.b22d37d1.js";import"./feedback-components.cf680c38.js";function e(e,a){return Object.keys(a).forEach(function(t){"default"===t||"__esModule"===t||Object.prototype.hasOwnProperty.call(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:function(){return a[t]}})}),e}var a=globalThis,t={},r={},c=a.parcelRequirea149;null==c&&((c=function(e){if(e in t)return t[e].exports;if(e in r){var a=r[e];delete r[e];var c={id:e,exports:{}};return t[e]=c,a.call(c.exports,c,c.exports),c.exports}var o=Error("Cannot find module '"+e+"'");throw o.code="MODULE_NOT_FOUND",o}).register=function(e,a){r[e]=a},a.parcelRequirea149=c),c.register;var o={},n=c("edvRb"),d=c("aZPCw");e(o,n),e(o,d);export{$8c534c0378e15a46$export$c4b91360064ad200 as buildHighlights,$8c534c0378e15a46$export$d60b563f571177d as enhanceData,$8c534c0378e15a46$export$35baa338324d8550 as getTagStyle,$8c534c0378e15a46$export$2b07158757c249e0 as ExtractionContext,$8c534c0378e15a46$export$4eb2a0ce903ce967 as ModelInfo,$8c534c0378e15a46$export$117e56c71b172cde as EntityTag,$2c86488f2f3c1edd$export$a90600c9da52b40c as FeedbackComponent,$330ae695507d96f5$export$8d9dbb7a64bf2a5e as treeToGraph};
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
package/dist/node/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"mappings":"A,M,oD,A,O,oD,C,S,E,C,C,C,E,O,O,I,C,G,O,C,S,C,E,Y,G,A,e,G,O,S,C,c,C,I,C,E,I,O,c,C,E,E,C,W,C,E,I,W,O,C,C,E,A,C,E,G,C,C,I,E,W,E,C,E,E,C,E,E,E,iB,A,O,I,A,C,E,S,C,E,G,K,E,O,C,C,E,C,O,C,G,K,E,C,I,E,C,C,E,A,Q,C,C,E,C,I,E,C,G,E,Q,C,C,E,O,C,C,E,C,E,E,I,C,E,O,C,E,E,O,E,E,O,A,C,I,E,A,M,uB,E,I,O,E,I,C,mB,C,C,E,Q,C,S,C,C,C,E,C,C,E,C,C,E,E,iB,C,G,E,Q,C,I,E,C,E,E,E,S,E,E,S,E,E,G,E,E,U,6C,e,C,4C,W,C,6C,W,C,6C,iB,C,6C,S,C,6C,S,C,6C,iB,C,6C,W","sources":["<anon>","packages/feedback-components/src/index.ts"],"sourcesContent":["import \"./feedback-components.b22d37d1.js\";\nimport \"./feedback-components.
|
|
1
|
+
{"mappings":"A,M,oD,A,O,oD,C,S,E,C,C,C,E,O,O,I,C,G,O,C,S,C,E,Y,G,A,e,G,O,S,C,c,C,I,C,E,I,O,c,C,E,E,C,W,C,E,I,W,O,C,C,E,A,C,E,G,C,C,I,E,W,E,C,E,E,C,E,E,E,iB,A,O,I,A,C,E,S,C,E,G,K,E,O,C,C,E,C,O,C,G,K,E,C,I,E,C,C,E,A,Q,C,C,E,C,I,E,C,G,E,Q,C,C,E,O,C,C,E,C,E,E,I,C,E,O,C,E,E,O,E,E,O,A,C,I,E,A,M,uB,E,I,O,E,I,C,mB,C,C,E,Q,C,S,C,C,C,E,C,C,E,C,C,E,E,iB,C,G,E,Q,C,I,E,C,E,E,E,S,E,E,S,E,E,G,E,E,U,6C,e,C,4C,W,C,6C,W,C,6C,iB,C,6C,S,C,6C,S,C,6C,iB,C,6C,W","sources":["<anon>","packages/feedback-components/src/index.ts"],"sourcesContent":["import \"./feedback-components.b22d37d1.js\";\nimport \"./feedback-components.cf680c38.js\";\n\n\nfunction $parcel$exportWildcard(dest, source) {\n Object.keys(source).forEach(function(key) {\n if (key === 'default' || key === '__esModule' || Object.prototype.hasOwnProperty.call(dest, key)) {\n return;\n }\n\n Object.defineProperty(dest, key, {\n enumerable: true,\n get: function get() {\n return source[key];\n }\n });\n });\n\n return dest;\n}\n\n var $parcel$global = globalThis;\n \nvar $parcel$modules = {};\nvar $parcel$inits = {};\n\nvar parcelRequire = $parcel$global[\"parcelRequirea149\"];\n\nif (parcelRequire == null) {\n parcelRequire = function(id) {\n if (id in $parcel$modules) {\n return $parcel$modules[id].exports;\n }\n if (id in $parcel$inits) {\n var init = $parcel$inits[id];\n delete $parcel$inits[id];\n var module = {id: id, exports: {}};\n $parcel$modules[id] = module;\n init.call(module.exports, module, module.exports);\n return module.exports;\n }\n var err = new Error(\"Cannot find module '\" + id + \"'\");\n err.code = 'MODULE_NOT_FOUND';\n throw err;\n };\n\n parcelRequire.register = function register(id, init) {\n $parcel$inits[id] = init;\n };\n\n $parcel$global[\"parcelRequirea149\"] = parcelRequire;\n}\n\nvar parcelRegister = parcelRequire.register;\nvar $c688386f08592f9c$exports = {};\n\nvar $edvRb = parcelRequire(\"edvRb\");\n\nvar $aZPCw = parcelRequire(\"aZPCw\");\n$parcel$exportWildcard($c688386f08592f9c$exports, $edvRb);\n$parcel$exportWildcard($c688386f08592f9c$exports, $aZPCw);\n\n\nexport {$8c534c0378e15a46$export$c4b91360064ad200 as buildHighlights, $8c534c0378e15a46$export$d60b563f571177d as enhanceData, $8c534c0378e15a46$export$35baa338324d8550 as getTagStyle, $8c534c0378e15a46$export$2b07158757c249e0 as ExtractionContext, $8c534c0378e15a46$export$4eb2a0ce903ce967 as ModelInfo, $8c534c0378e15a46$export$117e56c71b172cde as EntityTag, $2c86488f2f3c1edd$export$a90600c9da52b40c as FeedbackComponent, $330ae695507d96f5$export$8d9dbb7a64bf2a5e as treeToGraph};\n//# sourceMappingURL=index.js.map\n","export * from \"./extractions\";\nexport * from \"./feedback\";\n"],"names":["$parcel$exportWildcard","dest","source","Object","keys","forEach","key","prototype","hasOwnProperty","call","defineProperty","enumerable","get","$parcel$global","globalThis","$parcel$modules","$parcel$inits","parcelRequire","id","exports","init","module","err","Error","code","register","$c688386f08592f9c$exports","$edvRb","$aZPCw","$8c534c0378e15a46$export$c4b91360064ad200","buildHighlights","$8c534c0378e15a46$export$d60b563f571177d","enhanceData","$8c534c0378e15a46$export$35baa338324d8550","getTagStyle","$8c534c0378e15a46$export$2b07158757c249e0","ExtractionContext","$8c534c0378e15a46$export$4eb2a0ce903ce967","ModelInfo","$8c534c0378e15a46$export$117e56c71b172cde","EntityTag","$2c86488f2f3c1edd$export$a90600c9da52b40c","FeedbackComponent","$330ae695507d96f5$export$8d9dbb7a64bf2a5e","treeToGraph"],"version":3,"file":"index.js.map","sourceRoot":"../../../../"}
|
package/package.json
CHANGED
package/src/feedback/index.ts
CHANGED
|
@@ -146,6 +146,7 @@ export function FeedbackComponent({
|
|
|
146
146
|
width,
|
|
147
147
|
height,
|
|
148
148
|
matchComponent,
|
|
149
|
+
viewOnly,
|
|
149
150
|
}),
|
|
150
151
|
h.if(state.viewMode == "graph")(GraphView, {
|
|
151
152
|
tree,
|
|
@@ -305,8 +306,15 @@ function countNodes(tree) {
|
|
|
305
306
|
}
|
|
306
307
|
|
|
307
308
|
function ManagedSelectionTree(props) {
|
|
308
|
-
const {
|
|
309
|
-
|
|
309
|
+
const {
|
|
310
|
+
selectedNodes,
|
|
311
|
+
dispatch,
|
|
312
|
+
tree,
|
|
313
|
+
height,
|
|
314
|
+
width,
|
|
315
|
+
matchComponent,
|
|
316
|
+
viewOnly,
|
|
317
|
+
} = props;
|
|
310
318
|
|
|
311
319
|
const ref = useRef<TreeApi<TreeData>>();
|
|
312
320
|
// Use a ref to track clicks (won't cause rerender)
|
|
@@ -402,6 +410,7 @@ function ManagedSelectionTree(props) {
|
|
|
402
410
|
onSelect: handleSelect,
|
|
403
411
|
children: _Node,
|
|
404
412
|
idAccessor(d) {
|
|
413
|
+
if (viewOnly) return -1;
|
|
405
414
|
return d.id.toString();
|
|
406
415
|
},
|
|
407
416
|
}),
|
package/src/feedback/matches.ts
CHANGED
|
@@ -178,7 +178,7 @@ interface MatchTagProps {
|
|
|
178
178
|
setPayload?: (payload: Record<string, any>) => void;
|
|
179
179
|
}
|
|
180
180
|
|
|
181
|
-
function MatchTag({ data, matchLinks, setPayload }: MatchTagProps) {
|
|
181
|
+
export function MatchTag({ data, matchLinks, setPayload }: MatchTagProps) {
|
|
182
182
|
if (!data || Object.keys(data).length === 0) return;
|
|
183
183
|
|
|
184
184
|
if (data.lith_id || data?.type === "lith") {
|
|
@@ -6,9 +6,9 @@ import hyper from "@macrostrat/hyper";
|
|
|
6
6
|
import { buildHighlights, getTagStyle } from "../extractions";
|
|
7
7
|
import { Highlight } from "../extractions/types";
|
|
8
8
|
import { useEffect, useRef } from "react";
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
9
|
+
import { Popover } from "@blueprintjs/core";
|
|
10
|
+
import { MatchTag } from "./matches";
|
|
11
|
+
import { data } from "packages/feedback-components/stories/test-data";
|
|
12
12
|
|
|
13
13
|
const h = hyper.styled(styles);
|
|
14
14
|
|
|
@@ -284,7 +284,7 @@ function renderNode(
|
|
|
284
284
|
zIndex: parentSelected ? -1 : 1,
|
|
285
285
|
border:
|
|
286
286
|
"1px solid " +
|
|
287
|
-
(match != undefined && matchLinks
|
|
287
|
+
(match != undefined && matchLinks
|
|
288
288
|
? "orange"
|
|
289
289
|
: showBorder
|
|
290
290
|
? tag.color
|
|
@@ -306,13 +306,13 @@ function renderNode(
|
|
|
306
306
|
}
|
|
307
307
|
}
|
|
308
308
|
|
|
309
|
-
|
|
309
|
+
const tagComponent = h(
|
|
310
310
|
"span",
|
|
311
311
|
{
|
|
312
312
|
onMouseEnter: (e: MouseEvent) => {
|
|
313
313
|
e.stopPropagation();
|
|
314
314
|
},
|
|
315
|
-
className: "highlight" + (!viewOnly ? " clickable" : ""),
|
|
315
|
+
className: "highlight" + (!viewOnly || match ? " clickable" : ""),
|
|
316
316
|
style,
|
|
317
317
|
onClick: (e: MouseEvent) => {
|
|
318
318
|
e.stopPropagation();
|
|
@@ -356,6 +356,19 @@ function renderNode(
|
|
|
356
356
|
),
|
|
357
357
|
),
|
|
358
358
|
);
|
|
359
|
+
|
|
360
|
+
if (viewOnly && match) {
|
|
361
|
+
return h(
|
|
362
|
+
Popover,
|
|
363
|
+
{
|
|
364
|
+
content: h("div.match-link", h(MatchTag, { data: match, matchLinks })),
|
|
365
|
+
interactionKind: "hover",
|
|
366
|
+
},
|
|
367
|
+
tagComponent,
|
|
368
|
+
);
|
|
369
|
+
}
|
|
370
|
+
|
|
371
|
+
return tagComponent;
|
|
359
372
|
}
|
|
360
373
|
|
|
361
374
|
export function HighlightedText(props: {
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"mappings":"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","sources":["packages/feedback-components/src/feedback/index.ts"],"sourcesContent":["import styles from \"./feedback.module.sass\";\nimport hyper from \"@macrostrat/hyper\";\n\nimport { Tree, TreeApi } from \"react-arborist\";\nimport Node from \"./node\";\nimport { FeedbackText } from \"./text-visualizer\";\nimport type { InternalEntity, TreeData } from \"./types\";\nimport type { Entity } from \"../extractions\";\nimport { getTagStyle, ModelInfo } from \"../extractions\";\nimport {\n TreeDispatchContext,\n treeToGraph,\n useUpdatableTree,\n ViewMode,\n} from \"./edit-state\";\nimport { useCallback, useEffect, useRef, useState } from \"react\";\nimport {\n ButtonGroup,\n Card,\n SegmentedControl,\n Divider,\n} from \"@blueprintjs/core\";\nimport { OmniboxSelector } from \"./type-selector\";\nimport {\n CancelButton,\n ErrorBoundary,\n FlexRow,\n SaveButton,\n} from \"@macrostrat/ui-components\";\nimport useElementDimensions from \"use-element-dimensions\";\nimport { GraphView } from \"./graph\";\n\nimport { Matches } from \"./matches\";\nimport { TypeList } from \"./typelist\";\n\nexport type { GraphData } from \"./edit-state\";\nexport { treeToGraph } from \"./edit-state\";\nexport type { TreeData } from \"./types\";\n\nconst h = hyper.styled(styles);\n\nfunction setsAreTheSame<T>(a: Set<T>, b: Set<T>) {\n if (a.size !== b.size) return false;\n for (const item of a) {\n if (!b.has(item)) return false;\n }\n return true;\n}\n\nexport function FeedbackComponent({\n entities = [],\n text,\n model,\n entityTypes,\n matchComponent,\n onSave,\n allowOverlap,\n matchLinks,\n view = false,\n}) {\n const [viewOnly, setViewOnly] = useState(view);\n const [match, setMatchLinks] = useState(matchLinks);\n const matchMode = match !== undefined;\n\n // Get the input arguments\n const [state, dispatch] = useUpdatableTree(\n entities.map(processEntity) as any,\n entityTypes,\n viewOnly,\n matchMode,\n );\n\n const {\n selectedNodes,\n tree,\n selectedEntityType,\n isSelectingEntityType,\n entityTypesMap,\n } = state;\n\n const [{ width, height }, ref] = useElementDimensions();\n\n return h(\"div.page-wrapper\", [\n h(\n \"div.feedback-container\",\n h(TreeDispatchContext.Provider, { value: dispatch }, [\n h.if(!view)(SegmentedControl, {\n options: [\n { label: \"View\", value: \"view\" },\n { label: \"Edit\", value: \"edit\" },\n ],\n value: viewOnly ? \"view\" : \"edit\",\n small: true,\n onValueChange() {\n setViewOnly(!viewOnly);\n dispatch({ type: \"toggle-view-only\" });\n },\n role: \"toolbar\",\n }),\n h(\n ErrorBoundary,\n {\n description:\n \"An error occurred while rendering the feedback text component.\",\n },\n h(FeedbackText, {\n text,\n dispatch,\n // @ts-ignore\n nodes: tree,\n selectedNodes,\n allowOverlap,\n matchLinks: match,\n viewOnly,\n }),\n ),\n h(\n FlexRow,\n { alignItems: \"baseline\", justifyContent: \"space-between\" },\n [\n h(ModelInfo, { data: model }),\n h(SegmentedControl, {\n options: [\n { label: \"Tree\", value: \"tree\" },\n { label: \"Graph\", value: \"graph\" },\n ],\n value: state.viewMode,\n small: true,\n onValueChange(value: ViewMode) {\n console.log(\"Setting view mode\", value);\n dispatch({ type: \"set-view-mode\", payload: value });\n },\n }),\n ],\n ),\n h(\n \"div.entity-panel\",\n {\n ref,\n },\n [\n h.if(state.viewMode == \"tree\")(ManagedSelectionTree, {\n selectedNodes,\n dispatch,\n tree,\n width,\n height,\n matchComponent,\n }),\n h.if(state.viewMode == \"graph\")(GraphView, {\n tree,\n width,\n height,\n dispatch,\n selectedNodes,\n viewOnly,\n }),\n ],\n ),\n ]),\n ),\n h(Card, { className: \"control-panel\" }, [\n h(\"div.control-content\", [\n h.if(!viewOnly)(\n ButtonGroup,\n {\n vertical: true,\n fill: true,\n minimal: true,\n alignText: \"left\",\n },\n [\n h(\n CancelButton,\n {\n icon: \"trash\",\n disabled: state.initialTree == state.tree,\n onClick() {\n dispatch({ type: \"reset\" });\n },\n },\n \"Reset\",\n ),\n h(\n SaveButton,\n {\n onClick() {\n onSave(state.tree);\n },\n disabled: state.initialTree == state.tree,\n },\n \"Save\",\n ),\n ],\n ),\n h.if(!viewOnly)(Matches, {\n match,\n setMatchLinks,\n matchLinks,\n selectedNodes,\n tree,\n dispatch,\n }),\n h.if(!viewOnly)(Divider),\n h(EntityTypeSelector, {\n entityTypes: entityTypesMap,\n selected: selectedEntityType,\n onChange(payload) {\n dispatch({ type: \"select-entity-type\", payload });\n },\n dispatch,\n tree,\n selectedNodes,\n isOpen: isSelectingEntityType,\n setOpen: (isOpen: boolean) =>\n dispatch({\n type: \"toggle-entity-type-selector\",\n payload: isOpen,\n }),\n viewOnly,\n matchMode,\n }),\n ]),\n ]),\n ]);\n}\n\nfunction processEntity(entity: Entity): InternalEntity {\n // @ts-ignore\n return {\n ...entity,\n // @ts-ignore\n term_type: entity.type.name,\n txt_range: [entity.indices],\n children: entity.children?.map(processEntity) ?? [],\n };\n}\n\nfunction EntityTypeSelector({\n entityTypes,\n selected,\n isOpen,\n setOpen,\n onChange,\n tree,\n dispatch,\n selectedNodes = [],\n viewOnly,\n matchMode,\n}) {\n // Show all entity types when selected is null\n const _selected = selected != null ? selected : undefined;\n const [inputValue, setInputValue] = useState(\"\");\n const types = Array.from(entityTypes.values());\n\n const items =\n inputValue !== \"\"\n ? types.filter((d) =>\n d.name.toLowerCase().includes(inputValue.toLowerCase()),\n )\n : types;\n\n return h(\"div.entity-type-selector\", [\n h(TypeList, {\n types: entityTypes,\n selected: _selected,\n dispatch,\n selectedNodes,\n tree,\n viewOnly: viewOnly || matchMode,\n }),\n h(OmniboxSelector, {\n isOpen,\n items,\n selectedItem: _selected,\n onSelectItem(item) {\n setOpen(false);\n onChange(item);\n },\n onQueryChange(query) {\n setInputValue(query);\n },\n onClose() {\n setOpen(false);\n },\n }),\n ]);\n}\n\nfunction countNodes(tree) {\n if (!tree) return 0;\n let count = 0;\n\n function recurse(nodes) {\n for (const node of nodes) {\n count++;\n if (node.children && Array.isArray(node.children)) {\n recurse(node.children);\n }\n }\n }\n\n recurse(tree);\n return count;\n}\n\nfunction ManagedSelectionTree(props) {\n const { selectedNodes, dispatch, tree, height, width, matchComponent } =\n props;\n\n const ref = useRef<TreeApi<TreeData>>();\n // Use a ref to track clicks (won't cause rerender)\n const clickedRef = useRef(false);\n\n const _Node = useCallback(\n (props) => h(Node, { ...props, matchComponent }),\n [matchComponent],\n );\n\n // Update Tree selection when selectedNodes change\n useEffect(() => {\n if (ref.current == null) return;\n\n const selection = new Set(selectedNodes.map((d) => d.toString()));\n const currentSelection = ref.current.selectedIds;\n if (setsAreTheSame(selection, currentSelection)) return;\n\n ref.current.setSelection({\n ids: selectedNodes.map((d) => d.toString()),\n anchor: null,\n mostRecent: null,\n });\n }, [selectedNodes]);\n\n // Mark clicked when user clicks inside the tree container\n function handleClick() {\n clickedRef.current = true;\n }\n\n const ctrlPressedRef = useRef(false);\n\n useEffect(() => {\n const down = (e) => {\n if (e.ctrlKey || e.metaKey) ctrlPressedRef.current = true;\n };\n const up = () => (ctrlPressedRef.current = false);\n\n window.addEventListener(\"keydown\", down);\n window.addEventListener(\"keyup\", up);\n return () => {\n window.removeEventListener(\"keydown\", down);\n window.removeEventListener(\"keyup\", up);\n };\n }, []);\n\n const handleSelect = useCallback(\n (nodes) => {\n if (!clickedRef.current) return;\n clickedRef.current = false;\n const isMultiSelect = ctrlPressedRef.current;\n\n let ids = nodes.map((d) => parseInt(d.id));\n\n if (isMultiSelect) {\n dispatch({ type: \"toggle-node-selected\", payload: { ids } });\n } else {\n if (ids.length === 1 && ids[0] === selectedNodes[0]) {\n ids = [];\n }\n\n dispatch({ type: \"select-node\", payload: { ids } });\n }\n },\n [selectedNodes, dispatch],\n );\n\n return h(\n \"div.selection-tree-wrapper\",\n { onPointerDown: handleClick },\n h(Tree, {\n className: \"selection-tree\",\n height,\n width,\n ref,\n data: tree,\n onMove({ dragIds, parentId, index }) {\n dispatch({\n type: \"move-node\",\n payload: {\n dragIds: dragIds.map((d) => parseInt(d)),\n parentId: parentId ? parseInt(parentId) : null,\n index,\n },\n });\n },\n onDelete({ ids }) {\n dispatch({\n type: \"delete-node\",\n payload: { ids: ids.map((d) => parseInt(d)) },\n });\n },\n onSelect: handleSelect,\n children: _Node,\n idAccessor(d) {\n return d.id.toString();\n },\n }),\n );\n}\n"],"names":[],"version":3,"file":"feedback-components.47b7bf19.js.map"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"mappings":"AAAA;;;;;AAIA;;;;;;;;AAOA;;;;AAGA;;;;;AAIA;;;;;AAIA;;;;;AAIE;;;;AAGF;;;;AAGA;;;;AAGA;;;;AAGA;;;;AAGA;;;;;;;;;;;;AAYA;;;;;AAIA;;;;;;;AAME;;;;;AAIF;;;;;AAIA;;;;;;AAKA;;;;AAGA;;;;;;;AAMA;;;;AAGA;;;;;;;AAMA;;;;;;;AAMA;;;;;;;;AAOE;;;;AAGF;;;;;;;;AAOE;;;;;;;;;AAQE;;;;;;AAKA;;;;AAGA;;;;;AAIE;;;;;;AAKN;;;;;AAIA;;;;;;AAKA;;;;;;;;AAOE;;;;;AAIF;;;;;;AAKE","sources":["packages/feedback-components/src/feedback/feedback.module.sass"],"sourcesContent":[":root\n --text-line-height: 3em\n --main-extra-width: 200px\n\n.page-wrapper\n display: flex\n flex-direction: row\n position: relative\n gap: 2em\n align-items: flex-start // makes control-content lose stick\n\n.feedback-container\n flex: 4\n\n.control-panel\n flex: 1\n height: auto\n\n.control-content\n position: sticky\n top: 0\n\n.feedback-component\n position: relative\n width: 800px\n\n & > svg\n width: 800px\n\n.node\n cursor: pointer\n\ncircle\n border: 1px solid black\n\n.selected\n border: 1px solid white\n \n.feedback-text\n margin-bottom: 2em\n\n.entity-panel\n position: relative\n max-height: 600px\n width: calc(100% - 2em)\n flex: 1\n min-height: 100px\n padding: 1em\n background: var(--panel-secondary-background-color)\n border-radius: 4px\n // Inset box shadow\n box-shadow: 0 0 0 1px var(--panel-border-color) inset\n\n.selection-tree\n margin: -1em 0\n padding: 1em 0\n \n.type-list\n display: grid\n grid-auto-flow: column\n grid-template-rows: repeat(10, auto)\n gap: 0.2em\n\n .type-tag\n padding: .2em .5em\n border-radius: .2em\n\n.description\n max-width: 300px\n padding: .5em\n\nmark\n border-radius: .2em\n cursor: pointer\n color: black !important\n\n[role=\"treeitem\"]\n width: auto !important\n\n.highlight\n padding: .2em 0\n border-radius: .2em\n position: relative\n zIndex: 10\n\n.clickable\n cursor: pointer\n\n.feedback-text-wrapper \n position: relative\n z-index: 0\n overflow: visible\n line-height: var(--text-line-height)\n\n.type-container\n display: flex\n justify-content: space-between\n align-items: center\n column-gap: 1em\n\n.add-type\n cursor: pointer\n display: flex\n justify-content: space-between\n padding: 0 .5em\n align-items: center\n\n p\n margin: 0\n\n.overlay-container\n height: 80vh\n width: 100vw\n display: flex\n justify-content: center\n align-items: center\n\n .add-type-overlay\n background-color: var(--tertiary-background)\n padding: .5em 1em\n display: flex\n flex-direction: column\n gap: 1em\n border-radius: .2em\n\n .title\n display: flex\n justify-content: space-between\n align-items: center\n\n h2\n margin: 0\n\n .form-group\n display: flex\n gap: 3em\n\n .text-inputs\n display: flex\n flex-direction: column\n gap: 1em\n\n.icons\n display: flex\n gap: .25em\n\n.node-label\n fill: var(--text-emphasized-color)\n fontSize: 10px\n pointerEvents: none\n\n.match-item\n color: var(--text-emphasized-color)\n padding: .1em .2em\n border-radius: .2em\n margin-bottom: 4px\n cursor: pointer\n \n .match-label\n margin: 0\n color: var(--text-color)\n\n.match-container\n display: flex\n justify-content: space-between\n align-items: center\n\n .close-btn\n cursor: pointer\n"],"names":[],"version":3,"file":"feedback-components.5a8f0185.css.map"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"mappings":"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","sources":["packages/feedback-components/src/feedback/text-visualizer.ts"],"sourcesContent":["import { AnnotateBlendTag } from \"react-text-annotate-blend\";\nimport { InternalEntity } from \"./types\";\nimport { TreeDispatch } from \"./edit-state\";\nimport styles from \"./feedback.module.sass\";\nimport hyper from \"@macrostrat/hyper\";\nimport { buildHighlights, getTagStyle } from \"../extractions\";\nimport { Highlight } from \"../extractions/types\";\nimport { useEffect, useRef } from \"react\";\nimport { Icon } from \"@blueprintjs/core\";\nimport { DataField, JSONView } from \"@macrostrat/ui-components\";\nimport { LithologyList, LithologyTag } from \"@macrostrat/data-components\";\n\nconst h = hyper.styled(styles);\n\nexport interface FeedbackTextProps {\n text: string;\n selectedNodes: number[];\n nodes: InternalEntity[];\n updateNodes: (nodes: string[]) => void;\n dispatch: TreeDispatch;\n lineHeight: string;\n allowOverlap?: boolean;\n matchLinks?: {\n lithology: string;\n strat_name: string;\n lith_att: string;\n };\n viewOnly?: boolean;\n}\n\nfunction buildTags(\n highlights: Highlight[],\n selectedNodes: number[],\n): AnnotateBlendTag[] {\n let tags: AnnotateBlendTag[] = [];\n // If entity ID has already been seen, don't add it again\n const entities = new Set<number>();\n\n for (const highlight of highlights) {\n // Don't add multiply-linked entities multiple times\n if (entities.has(highlight.id)) continue;\n\n const highlighted = isHighlighted(highlight, selectedNodes);\n const active = isActive(highlight, selectedNodes);\n const tagStyle = getTagStyle(highlight.backgroundColor, {\n highlighted,\n active,\n });\n\n const tag = {\n color: tagStyle.color,\n tagStyle: {\n display: \"none\",\n },\n markStyle: {\n backgroundColor: tagStyle.backgroundColor,\n },\n ...highlight,\n backgroundColor: tagStyle.backgroundColor,\n };\n\n tags.push(tag);\n\n entities.add(highlight.id);\n }\n\n return tags;\n}\n\nfunction isActive(tag: Highlight, selectedNodes: number[]) {\n return selectedNodes.includes(tag.id);\n}\n\nfunction isHighlighted(tag: Highlight, selectedNodes: number[]) {\n if (selectedNodes.length === 0) return true;\n return (\n (selectedNodes.includes(tag.id) ||\n tag.parents?.some((d) => selectedNodes.includes(d))) ??\n false\n );\n}\n\nexport function FeedbackText(props: FeedbackTextProps) {\n // Convert input to tags\n const {\n text,\n selectedNodes,\n nodes,\n dispatch,\n allowOverlap,\n matchLinks,\n viewOnly,\n } = props;\n const allTags: AnnotateBlendTag[] = buildTags(\n buildHighlights(nodes, null),\n selectedNodes,\n );\n\n return h(\n \"div.feedback-text-wrapper\",\n {\n tabIndex: 0,\n onKeyDown: (e) => {\n if (e.key === \"Backspace\") {\n dispatch({\n type: \"delete-node\",\n payload: { ids: selectedNodes },\n });\n }\n },\n },\n h(HighlightedText, {\n text,\n allTags,\n allowOverlap,\n dispatch,\n selectedNodes,\n viewOnly,\n matchLinks,\n }),\n );\n}\n\nfunction createTagFromSelection({\n container,\n}: {\n container: HTMLElement | null;\n}) {\n const selection = window.getSelection();\n if (\n !selection ||\n selection.isCollapsed ||\n selection.rangeCount === 0 ||\n !container\n )\n return null;\n\n const range = selection.getRangeAt(0);\n\n if (\n !container.contains(range.startContainer) ||\n !container.contains(range.endContainer)\n ) {\n return null;\n }\n\n const preRange = document.createRange();\n preRange.setStart(container, 0);\n preRange.setEnd(range.startContainer, range.startOffset);\n const start = preRange.toString().length;\n\n const selectedText = range.toString();\n const end = start + selectedText.length;\n\n return {\n start,\n end,\n text: selectedText,\n };\n}\n\nfunction addTag({ tag, dispatch, text, allTags, allowOverlap }) {\n let { start, end } = tag;\n // snap to text\n if (text[end - 1] != \" \") {\n // double clicking word overselects by one, shouldn't increase to next word\n while (start > 0 && /\\w/.test(text[start - 1])) {\n start--;\n }\n while (end < text.length && /\\w/.test(text[end])) {\n end++;\n }\n }\n\n let payload = { start, end, text: text.slice(start, end) };\n\n if (payload.text.trim() === \"\") {\n console.log(\"Blank tag found, ignoring\");\n return;\n }\n\n const duplicate = allTags.find(\n (t) =>\n t.start === payload.start &&\n (t.end === payload.end || t.end === payload.end - 1),\n );\n\n if (duplicate) {\n console.log(\"Duplicate tag found, ignoring\");\n return;\n }\n\n if (payload.text.endsWith(\" \")) {\n payload.text = payload.text.slice(0, -1);\n payload.end -= 1;\n }\n\n const inside = allTags.some(\n (t) => t.start <= payload.start && t.end >= payload.end,\n );\n\n const overlap = allTags.some(\n (t) => t.start < payload.end && t.end > payload.start,\n );\n\n if ((inside || overlap) && !allowOverlap) {\n console.log(\"Tag is inside another tag, ignoring\");\n return;\n }\n\n dispatch({ type: \"create-node\", payload });\n}\n\nfunction nestHighlights(text: string, tags: AnnotateBlendTag[]) {\n const events: Array<{\n pos: number;\n type: \"start\" | \"end\";\n tag: AnnotateBlendTag;\n }> = [];\n\n for (const tag of tags) {\n events.push({ pos: tag.start, type: \"start\", tag });\n events.push({ pos: tag.end, type: \"end\", tag });\n }\n\n events.sort((a, b) => {\n if (a.pos !== b.pos) return a.pos - b.pos;\n if (a.type === \"end\" && b.type === \"start\") return -1;\n if (a.type === \"start\" && b.type === \"end\") return 1;\n return 0;\n });\n\n const root = { children: [], textStart: 0 };\n const stack = [root];\n let lastPos = 0;\n\n for (const { pos, type, tag } of events) {\n const parent = stack[stack.length - 1];\n\n if (pos > lastPos) {\n const slice = text.slice(lastPos, pos);\n parent.children.push(slice);\n }\n\n if (type === \"start\") {\n const newNode = { tag, children: [], textStart: pos };\n parent.children.push(newNode);\n stack.push(newNode);\n } else {\n stack.pop();\n }\n\n lastPos = pos;\n }\n\n if (lastPos < text.length) {\n stack[stack.length - 1].children.push(text.slice(lastPos));\n }\n\n return root;\n}\n\nfunction renderNode(\n node: any,\n dispatch: TreeDispatch,\n selectedNodes: number[],\n parentSelected: boolean,\n matchLinks?: {\n lithology: string;\n strat_name: string;\n lith_att: string;\n },\n viewOnly?: boolean,\n): any {\n if (typeof node === \"string\") return node;\n\n const { tag, children } = node;\n const isSelected = selectedNodes?.includes(tag.id);\n const showBorder = selectedNodes.length === 0 || isSelected;\n const match = tag.match;\n\n const style = {\n ...tag,\n zIndex: parentSelected ? -1 : 1,\n border:\n \"1px solid \" +\n (match != undefined && matchLinks && !viewOnly\n ? \"orange\"\n : showBorder\n ? tag.color\n : \"transparent\"),\n margin: \"-1px\",\n };\n\n let moveText = [];\n if (isSelected) {\n for (const key in children) {\n if (Object.prototype.hasOwnProperty.call(children, key)) {\n const child = children[key];\n if (child?.tag) {\n moveText.push(child.children[0]);\n } else {\n moveText.push(child);\n }\n }\n }\n }\n\n return h(\n \"span\",\n {\n onMouseEnter: (e: MouseEvent) => {\n e.stopPropagation();\n },\n className: \"highlight\" + (!viewOnly ? \" clickable\" : \"\"),\n style,\n onClick: (e: MouseEvent) => {\n e.stopPropagation();\n if (\n e.ctrlKey ||\n e.metaKey ||\n (selectedNodes[0] === tag.id && selectedNodes.length === 1)\n ) {\n // Toggle selection on ctrl/cmd click or when node is only selected node\n e.stopPropagation();\n dispatch({\n type: \"toggle-node-selected\",\n payload: { ids: [tag.id] },\n });\n } else if (e.shiftKey && selectedNodes.length > 0) {\n // Select range from last selected node to this one\n const lastSelected = selectedNodes[selectedNodes.length - 1];\n\n dispatch({\n type: \"select-range\",\n payload: { ids: [lastSelected, tag.id] },\n });\n } else {\n dispatch({\n type: \"select-node\",\n payload: { ids: [tag.id] },\n });\n }\n },\n },\n isSelected\n ? moveText.flat()\n : children.map((child: any, i: number) =>\n renderNode(\n child,\n dispatch,\n selectedNodes,\n isSelected,\n matchLinks,\n viewOnly,\n ),\n ),\n );\n}\n\nexport function HighlightedText(props: {\n text: string;\n allTags: AnnotateBlendTag[];\n lineHeight: string;\n allowOverlap?: boolean;\n dispatch: TreeDispatch;\n selectedNodes: number[];\n matchLinks?: {\n lithology: string;\n strat_name: string;\n lith_att: string;\n };\n viewOnly?: boolean;\n}) {\n const {\n text,\n allTags = [],\n dispatch,\n selectedNodes,\n allowOverlap,\n matchLinks,\n viewOnly,\n } = props;\n\n const tree = nestHighlights(text, allTags);\n\n const spanRef = useRef<HTMLSpanElement>(null);\n\n useEffect(() => {\n const handleMouseUp = () => {\n const tag = createTagFromSelection({ container: spanRef.current });\n if (!tag) return;\n addTag({ tag, dispatch, text, allTags, allowOverlap });\n };\n\n document.addEventListener(\"mouseup\", handleMouseUp);\n return () => {\n document.removeEventListener(\"mouseup\", handleMouseUp);\n };\n }, [text, allTags, dispatch, allowOverlap]);\n\n return h(\n \"span\",\n { ref: spanRef },\n tree.children.map((child: any, i: number) =>\n renderNode(child, dispatch, selectedNodes, false, matchLinks, viewOnly),\n ),\n );\n}\n"],"names":[],"version":3,"file":"feedback-components.63a12d32.js.map"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AA5BA,4CAA6B,CAAC,eAAe,CAAC;AAC9C,4CAAqC,CAAC,uBAAuB,CAAC;AAC9D,4CAA8B,CAAC,gBAAgB,CAAC;AAChD,4CAA8B,CAAC,gBAAgB,CAAC;AAChD,4CAAoC,CAAC,sBAAsB,CAAC;AAC5D,4CAAkC,CAAC,oBAAoB,CAAC;AACxD,4CAAgC,CAAC,kBAAkB,CAAC;AACpD,2CAAiC,CAAC,mBAAmB,CAAC;AACtD,4CAAuC,CAAC,yBAAyB,CAAC;AAClE,4CAAuC,CAAC,yBAAyB,CAAC;AAClE,4CAAkC,CAAC,oBAAoB,CAAC;AACxD,2CAA0C,CAAC,4BAA4B,CAAC;AACxE,4CAA+B,CAAC,iBAAiB,CAAC;AAClD,4CAA8B,CAAC,gBAAgB,CAAC;AAChD,4CAA0B,CAAC,YAAY,CAAC;AACxC,4CAAoC,CAAC,sBAAsB,CAAC;AAC5D,4CAA+B,CAAC,iBAAiB,CAAC;AAClD,4CAAgC,CAAC,kBAAkB,CAAC;AACpD,4CAAyB,CAAC,WAAW,CAAC;AACtC,4CAA+B,CAAC,iBAAiB,CAAC;AAClD,4CAAsC,CAAC,wBAAwB,CAAC;AAChE,4CAAiC,CAAC,mBAAmB,CAAC;AACtD,4CAA6B,CAAC,eAAe,CAAC;AAC9C,4CAAmC,CAAC,qBAAqB,CAAC;AAC1D,2CAAgC,CAAC,kBAAkB,CAAC;AACpD,4CAA0B,CAAC,YAAY,CAAC;AACxC,4CAAmC,CAAC,qBAAqB,CAAC;AAC1D,4CAA8B,CAAC,gBAAgB,CAAC;AAChD,2CAA6B,CAAC,eAAe,CAAC","sources":["packages/feedback-components/src/feedback/feedback.module.sass"],"sourcesContent":[":root\n --text-line-height: 3em\n --main-extra-width: 200px\n\n.page-wrapper\n display: flex\n flex-direction: row\n position: relative\n gap: 2em\n align-items: flex-start // makes control-content lose stick\n\n.feedback-container\n flex: 4\n\n.control-panel\n flex: 1\n height: auto\n\n.control-content\n position: sticky\n top: 0\n\n.feedback-component\n position: relative\n width: 800px\n\n & > svg\n width: 800px\n\n.node\n cursor: pointer\n\ncircle\n border: 1px solid black\n\n.selected\n border: 1px solid white\n \n.feedback-text\n margin-bottom: 2em\n\n.entity-panel\n position: relative\n max-height: 600px\n width: calc(100% - 2em)\n flex: 1\n min-height: 100px\n padding: 1em\n background: var(--panel-secondary-background-color)\n border-radius: 4px\n // Inset box shadow\n box-shadow: 0 0 0 1px var(--panel-border-color) inset\n\n.selection-tree\n margin: -1em 0\n padding: 1em 0\n \n.type-list\n display: grid\n grid-auto-flow: column\n grid-template-rows: repeat(10, auto)\n gap: 0.2em\n\n .type-tag\n padding: .2em .5em\n border-radius: .2em\n\n.description\n max-width: 300px\n padding: .5em\n\nmark\n border-radius: .2em\n cursor: pointer\n color: black !important\n\n[role=\"treeitem\"]\n width: auto !important\n\n.highlight\n padding: .2em 0\n border-radius: .2em\n position: relative\n zIndex: 10\n\n.clickable\n cursor: pointer\n\n.feedback-text-wrapper \n position: relative\n z-index: 0\n overflow: visible\n line-height: var(--text-line-height)\n\n.type-container\n display: flex\n justify-content: space-between\n align-items: center\n column-gap: 1em\n\n.add-type\n cursor: pointer\n display: flex\n justify-content: space-between\n padding: 0 .5em\n align-items: center\n\n p\n margin: 0\n\n.overlay-container\n height: 80vh\n width: 100vw\n display: flex\n justify-content: center\n align-items: center\n\n .add-type-overlay\n background-color: var(--tertiary-background)\n padding: .5em 1em\n display: flex\n flex-direction: column\n gap: 1em\n border-radius: .2em\n\n .title\n display: flex\n justify-content: space-between\n align-items: center\n\n h2\n margin: 0\n\n .form-group\n display: flex\n gap: 3em\n\n .text-inputs\n display: flex\n flex-direction: column\n gap: 1em\n\n.icons\n display: flex\n gap: .25em\n\n.node-label\n fill: var(--text-emphasized-color)\n fontSize: 10px\n pointerEvents: none\n\n.match-item\n color: var(--text-emphasized-color)\n padding: .1em .2em\n border-radius: .2em\n margin-bottom: 4px\n cursor: pointer\n \n .match-label\n margin: 0\n color: var(--text-color)\n\n.match-container\n display: flex\n justify-content: space-between\n align-items: center\n\n .close-btn\n cursor: pointer\n"],"names":[],"version":3,"file":"feedback-components.7c2fe400.js.map"}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import"./feedback-components.c31cf831.js";import{Divider as a,Switch as t,Icon as e,Overlay2 as i}from"@blueprintjs/core";import{Select as n}from"@blueprintjs/select";import o from"@macrostrat/hyper";import{useState as r}from"react";import{useAPIResult as l,SaveButton as d,DataField as c,JSONView as s}from"@macrostrat/ui-components";import{LithologyTag as m}from"@macrostrat/data-components";var p=globalThis,h={},u={},v=p.parcelRequirea149;null==v&&((v=function(a){if(a in h)return h[a].exports;if(a in u){var t=u[a];delete u[a];var e={id:a,exports:{}};return h[a]=e,t.call(e.exports,e,e.exports),e.exports}var i=Error("Cannot find module '"+a+"'");throw i.code="MODULE_NOT_FOUND",i}).register=function(a,t){u[a]=t},p.parcelRequirea149=v),v.register;var _=v("9wFEx");let y=o.styled(_&&_.__esModule?_.default:_);function f({match:i,setMatchLinks:n,matchLinks:o,selectedNodes:l,tree:d,dispatch:c}){var s,m;let p,[h,u]=r(!1),v=null;return 1===l.length&&(s=d,m=l[0],p=null,s.forEach(function a(t){if(t.id===m)return p=t,!0;if(Array.isArray(t.children)){for(let e of t.children)if(a(e))return!0}return!1}),v=p),y.if(o)("div",[y(a),y(t,{label:"Match mode",checked:void 0!==i,onChange:a=>{n(void 0===i?o||{}:void 0),c({type:"toggle-match-mode"})}}),y.if(v&&i)(b,{data:v?.match,matchLinks:o,dispatch:c,nodeId:v?.id}),y.if(1==l.length&&!v?.match&&i)("div.add-match-container",[y("div.add-type",{onClick:()=>{u(!0)}},[y("p.add-match-text","Add match"),y(e,{icon:"plus"})]),y(k,{isOpen:h,setOverlayOpen:u,nodeMatch:v,dispatch:c})])])}function k({isOpen:a,setOverlayOpen:t,nodeMatch:o,dispatch:c}){let[s,m]=r(o?.name||""),[p,h]=r(y("div","Select a match")),[u,v]=r(!0),[_,f]=r({}),k=l("https://dev.macrostrat.org/api/pg/type_lookup?name=ilike.*"+s+"*"),b=k?.map(a=>y(g,{data:a,setPayload:f}));return y(i,{isOpen:a},y("div.overlay-container",y("div.add-type-overlay",[y("h2.title",["Add match with "+o.name,y(e,{icon:"cross",className:"close-icon",onClick:()=>{t(!1)},style:{cursor:"pointer",color:"red"}})]),y("div.form-group",[y(n,{items:b||[],itemRenderer:(a,{handleClick:t})=>y("div.match-item",{onClick:t},a),onItemSelect:a=>{v(!1),h(a)},onQueryChange:a=>m(a),popoverProps:{minimal:!0},query:s,placeholder:"Enter match name"},p)]),y(d,{className:"save-btn",small:!0,onClick:()=>{c({type:"add-match",payload:{id:o.id,payload:_}}),t(!1)},disabled:u},"Save changes")])))}function b({data:a,matchLinks:t,dispatch:i,nodeId:n}){return y.if(a)("div.match-container",[g({data:a,matchLinks:t}),y(e,{icon:"cross",color:"red",className:"close-btn",onClick:()=>{i({type:"remove-match",payload:{id:n}})}})])}function g({data:a,matchLinks:t,setPayload:e}){if(a&&0!==Object.keys(a).length)return a.lith_id||a?.type==="lith"?y("div",{onClick:()=>{"lith"===a.type&&e({lith_id:a.id,name:a.name})}},y(c,{className:"match-item",label:"Stratigraphic name",value:y(m,{data:{name:a.name,id:a.id,color:a.color},onClick:()=>window.open(t.strat_name+"/"+a.strat_name_id,"_blank")})})):a.strat_name_id||a?.type==="strat_name"?y("div",{onClick:()=>{"strat_name"===a.type&&e({strat_name_id:a.id,name:a.name})}},y(c,{className:"match-item",label:"Stratigraphic name",value:y(m,{data:{name:a.name,id:a.id,color:a.color},onClick:()=>window.open(t.strat_name+"/"+a.strat_name_id,"_blank")})})):a.lith_att_id||a?.type==="lith_att"?y("div",{onClick:()=>{"lith_att"===a.type&&e({lith_att_id:a.id,name:a.name})}},y(c,{className:"match-item",label:"Lithology attribute",value:y(m,{data:{name:a.name,id:a.lith_att_id},onClick:()=>window.open(t.lith_att+"/"+a.lith_att_id,"_blank")})})):a.int_id||a?.type==="interval"?y("div",{onClick:()=>{"interval"===a.type&&e({int_id:a.id,name:a.name})}},y(c,{label:"Interval",className:"match-item",value:y(m,{data:{name:a.name,id:a.id},onClick:()=>window.open(t.interval+"/"+a.int_id,"_blank")})})):y(s,{data:a})}export{f as Matches};
|
|
2
|
-
//# sourceMappingURL=feedback-components.2ad7d057.js.map
|