@macrostrat/feedback-components 1.1.5 → 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.
Files changed (64) hide show
  1. package/CHANGELOG.md +10 -1
  2. package/dist/esm/{feedback-components.03f08dc7.js → feedback-components.0d16f68a.js} +4 -4
  3. package/dist/esm/{feedback-components.03f08dc7.js.map → feedback-components.0d16f68a.js.map} +1 -1
  4. package/dist/esm/{feedback-components.4cbd249a.js → feedback-components.263bc4a5.js} +5 -5
  5. package/dist/esm/{feedback-components.4cbd249a.js.map → feedback-components.263bc4a5.js.map} +1 -1
  6. package/dist/esm/{feedback-components.5a8f0185.css → feedback-components.3c6291c9.css} +5 -1
  7. package/dist/esm/feedback-components.3c6291c9.css.map +1 -0
  8. package/dist/esm/{feedback-components.3f59f2a5.js → feedback-components.3cb322a5.js} +18 -6
  9. package/dist/esm/feedback-components.3cb322a5.js.map +1 -0
  10. package/dist/esm/{feedback-components.6cec1102.js → feedback-components.3d7fd2df.js} +5 -1
  11. package/dist/esm/feedback-components.3d7fd2df.js.map +1 -0
  12. package/dist/esm/{feedback-components.06a79c6a.js → feedback-components.5242166d.js} +18 -13
  13. package/dist/esm/feedback-components.5242166d.js.map +1 -0
  14. package/dist/esm/{feedback-components.e53837d9.js → feedback-components.a35aed63.js} +10 -10
  15. package/dist/esm/feedback-components.a35aed63.js.map +1 -0
  16. package/dist/esm/{feedback-components.7c2fe400.js → feedback-components.b7fe8db7.js} +4 -1
  17. package/dist/esm/feedback-components.b7fe8db7.js.map +1 -0
  18. package/dist/esm/{feedback-components.939a3a9f.js → feedback-components.c0ded32f.js} +5 -5
  19. package/dist/esm/{feedback-components.939a3a9f.js.map → feedback-components.c0ded32f.js.map} +1 -1
  20. package/dist/esm/index.d.ts.map +1 -1
  21. package/dist/esm/index.js +1 -1
  22. package/dist/node/{feedback-components.db4d0a14.css → feedback-components.104b4099.css} +2 -2
  23. package/dist/node/feedback-components.104b4099.css.map +1 -0
  24. package/dist/node/feedback-components.1ec0e5c7.js +2 -0
  25. package/dist/node/feedback-components.1ec0e5c7.js.map +1 -0
  26. package/dist/node/{feedback-components.3888aa2a.js → feedback-components.4c09ec76.js} +2 -2
  27. package/dist/node/{feedback-components.3888aa2a.js.map → feedback-components.4c09ec76.js.map} +1 -1
  28. package/dist/node/{feedback-components.827f8d80.js → feedback-components.6e969752.js} +2 -2
  29. package/dist/node/{feedback-components.827f8d80.js.map → feedback-components.6e969752.js.map} +1 -1
  30. package/dist/node/{feedback-components.fc0395df.js → feedback-components.79d7b18c.js} +2 -2
  31. package/dist/node/{feedback-components.fc0395df.js.map → feedback-components.79d7b18c.js.map} +1 -1
  32. package/dist/node/feedback-components.8caef76e.js +2 -0
  33. package/dist/node/feedback-components.8caef76e.js.map +1 -0
  34. package/dist/node/feedback-components.ad3ad94e.js +2 -0
  35. package/dist/node/feedback-components.ad3ad94e.js.map +1 -0
  36. package/dist/node/feedback-components.cf680c38.js +2 -0
  37. package/dist/node/feedback-components.cf680c38.js.map +1 -0
  38. package/dist/node/feedback-components.e1fe112f.js +2 -0
  39. package/dist/node/feedback-components.e1fe112f.js.map +1 -0
  40. package/dist/node/index.js +1 -1
  41. package/dist/node/index.js.map +1 -1
  42. package/package.json +1 -1
  43. package/src/feedback/edit-state.ts +6 -1
  44. package/src/feedback/feedback.module.sass +3 -0
  45. package/src/feedback/index.ts +13 -3
  46. package/src/feedback/matches.ts +3 -3
  47. package/src/feedback/text-visualizer.ts +18 -5
  48. package/dist/esm/feedback-components.06a79c6a.js.map +0 -1
  49. package/dist/esm/feedback-components.3f59f2a5.js.map +0 -1
  50. package/dist/esm/feedback-components.5a8f0185.css.map +0 -1
  51. package/dist/esm/feedback-components.6cec1102.js.map +0 -1
  52. package/dist/esm/feedback-components.7c2fe400.js.map +0 -1
  53. package/dist/esm/feedback-components.e53837d9.js.map +0 -1
  54. package/dist/node/feedback-components.388de4ac.js +0 -2
  55. package/dist/node/feedback-components.388de4ac.js.map +0 -1
  56. package/dist/node/feedback-components.9e1d4e4c.js +0 -2
  57. package/dist/node/feedback-components.9e1d4e4c.js.map +0 -1
  58. package/dist/node/feedback-components.b8da3bce.js +0 -2
  59. package/dist/node/feedback-components.b8da3bce.js.map +0 -1
  60. package/dist/node/feedback-components.c31cf831.js +0 -2
  61. package/dist/node/feedback-components.c31cf831.js.map +0 -1
  62. package/dist/node/feedback-components.db4d0a14.css.map +0 -1
  63. package/dist/node/feedback-components.f91331e9.js +0 -2
  64. package/dist/node/feedback-components.f91331e9.js.map +0 -1
@@ -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.388de4ac.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.fc0395df.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.fc0395df.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{useReducer as e,createContext as t,useContext as n}from"react";import l from"immutability-helper";var r,d=((r={}).Tree="tree",r.Graph="graph",r);function i(t,n,l,r){let d=n.values().next().value;return e(s,{initialTree:t,tree:t,selectedNodes:[],entityTypesMap:n,selectedEntityType:d,lastInternalId:0,isSelectingEntityType:!1,viewMode:"tree",viewOnly:l,matchMode:r})}let a=t(null);function o(){let e=n(a);if(null==e)throw Error("No dispatch context available");return e}function s(e,t){if("toggle-match-mode"===t.type)return{...e,matchMode:!e.matchMode};if("toggle-view-only"===t.type)return{...e,viewOnly:!e.viewOnly};if(e.viewOnly){var n,r;return n=e,"set-view-mode"===(r=t).type?{...n,viewMode:r.payload}:n}if(e.matchMode)return function(e,t){if("select-node"===t.type||"toggle-node-selected"===t.type){let{ids:n}=t.payload;if(1!=n.length)return e;if(1===e.selectedNodes.length&&n[0]===e.selectedNodes[0])return{...e,selectedNodes:[]};let l=t.payload.ids.length>0?f(e.tree,n[0])?.type:null;return{...e,selectedNodes:n,selectedEntityType:l}}if("add-match"===t.type){let{id:n}=t.payload,r=p(e.tree,n);if(!r)return console.warn(`Node with id ${n} not found`),e;let d=c(r,{match:{$set:t.payload.payload}}),i=l(e.tree,d);return{...e,tree:i}}if("remove-match"===t.type){let{id:n}=t.payload;console.log("Removing match for node with id:",n);let r=p(e.tree,n);if(!r)return console.warn(`Node with id ${n} not found`),e;let d=c(r,{match:{$set:null}}),i=l(e.tree,d);return{...e,tree:i}}return e}(e,t);switch(t.type){case"add-entity-type":{let{name:n,description:l,color:r}=t.payload,d=e.lastInternalId-1,i={id:d,name:n,description:""===l?null:l,color:r},a=new Map(e.entityTypesMap);return a.set(d,i),{...e,entityTypesMap:a,selectedEntityType:i,lastInternalId:d}}case"update-entity-type":{let{id:n,name:l,description:r,color:d}=t.payload,i=new Map(e.entityTypesMap),a=i.get(n);if(!a)return console.warn(`Entity type with id ${n} not found`),e;let o={...a,name:l,description:""===r?null:r,color:d};i.set(n,o);let s=h(e.tree,a,o);return{...e,tree:s,entityTypesMap:i,selectedEntityType:o}}case"select-range":let d=t.payload.ids,i=d[0],a=d[1],o=function(e){let t=[];return!function e(n){for(let l of n)t.push(l),Array.isArray(l.children)&&l.children.length>0&&e(l.children)}(e),t.sort((e,t)=>e.indices[0]-t.indices[0])}(e.tree),s=o.findIndex(e=>e.id===i),u=o.findIndex(e=>e.id===a),g=o.slice(s,u+1);return console.log("Selecting range:",g),{...e,selectedNodes:g.map(e=>e.id)};case"move-node":let[m,T]=y(e.tree,t.payload.dragIds),$=[];t.payload.parentId&&($=p(m,t.payload.parentId)).push("children");let w=c($,{$splice:[[t.payload.index,0,...T]]});return{...e,tree:l(m,w)};case"delete-node":let[N,v]=y(e.tree,t.payload.ids),M=v.flatMap(e=>e.children??[]).filter(e=>!function e(t,n){for(let l of t)if(l.id==n)return!0;else if(l.children&&e(l.children,n))return!0;return!1}(N,e.id));return{...e,tree:[...N,...M],selectedNodes:e.selectedNodes.filter(e=>!t.payload.ids.includes(e))};case"select-node":let{ids:x}=t.payload,I=t.payload.ids.length>0?f(e.tree,x[0])?.type:null;return{...e,selectedNodes:x,selectedEntityType:I};case"toggle-node-selected":let E=t.payload.ids.filter(t=>!e.selectedNodes.includes(t)),b=e.selectedNodes.filter(e=>!t.payload.ids.includes(e)),O=t.payload.ids.length>0?f(e.tree,t.payload.ids[0])?.type:null;return{...e,selectedNodes:[...b,...E],selectedEntityType:O};case"create-node":let S=e.lastInternalId-1,{text:C,start:A,end:D}=t.payload,G={id:S,name:C,children:[],indices:[A,D],type:e.selectedEntityType};return{...e,tree:[...e.tree,G],selectedNodes:[S],lastInternalId:S};case"delete-entity-type":{let{id:n}=t.payload,l=new Map(e.entityTypesMap),r=l.get(n);l.delete(n);let d=l.values().next().value,i=h(e.tree,r,d);return{...e,tree:i,entityTypesMap:l,selectedNodes:[]}}case"toggle-entity-type-selector":return{...e,isSelectingEntityType:t.payload??!e.isSelectingEntityType};case"select-entity-type":{let n=e.tree;for(let r of e.selectedNodes)n=l(n,c(p(e.tree,r),{type:{$set:t.payload}}));return{...e,tree:n,selectedEntityType:t.payload}}case"deselect":return{...e,selectedNodes:[]};case"reset":return{...e,tree:e.initialTree,selectedNodes:[]};case"set-view-mode":return{...e,viewMode:t.payload}}}function c(e,t){let n=t;for(let t=e.length-1;t>=0;t--)n={[e[t]]:n};return n}function p(e,t){for(let n=0;n<e.length;n++)if(e[n].id==t)return[n];else if(e[n].children){let l=p(e[n].children,t);if(null!=l)return[n,"children",...l]}return null}function y(e,t){let n=[],l=[];for(let r of e)if(t.includes(r.id))l.push(r);else{if(r.children){let[e,n]=y(r.children,t);r={...r,children:e},l.push(...n)}n.push(r)}return[n,l]}function u(e){let t=[],n=[],l=new Map;for(let r of e){if(l.has(r.id))continue;let{indices:e,id:d,name:i,type:a,children:o}=r,s={id:d,type:a.id,color:a.color,name:i,txt_range:[e],reasoning:null,match:r.match,children:o};if(l.set(r.id,r),t.push(s),r.children){for(let e of r.children)n.push({source:r.id,dest:e.id});let{nodes:e,edges:l}=u(r.children);t.push(...e),n.push(...l)}}return{nodes:t,edges:n}}function f(e,t){for(let n of e){if(n.id===t)return n;if(n.children){let e=f(n.children,t);if(e)return e}}return null}function h(e,t,n){return e.map(e=>(function(e,t,n){let l=e.type.id===t.id?n:e.type;return{...e,type:l,children:e.children?h(e.children,t,n):[]}})(e,t,n))}export{d as ViewMode,i as useUpdatableTree,a as TreeDispatchContext,o as useTreeDispatch,f as findNodeById,u as treeToGraph};
2
+ //# sourceMappingURL=feedback-components.8caef76e.js.map
@@ -0,0 +1 @@
1
+ {"mappings":"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","sources":["<anon>","packages/feedback-components/src/feedback/edit-state.ts"],"sourcesContent":["import {useReducer as $eGztG$useReducer, createContext as $eGztG$createContext, useContext as $eGztG$useContext} from \"react\";\nimport $eGztG$immutabilityhelper from \"immutability-helper\";\n\n\n\nvar $330ae695507d96f5$export$53ec42062883b2d4 = /*#__PURE__*/ function(ViewMode) {\n ViewMode[\"Tree\"] = \"tree\";\n ViewMode[\"Graph\"] = \"graph\";\n return ViewMode;\n}({});\nfunction $330ae695507d96f5$export$911bb4b9c8065d3d(initialTree, entityTypes, viewOnly, matchMode) {\n // Get the first entity type\n // issue: grabs second entity instead of selected one\n const type = entityTypes.values().next().value;\n return (0, $eGztG$useReducer)($330ae695507d96f5$var$treeReducer, {\n initialTree: initialTree,\n tree: initialTree,\n selectedNodes: [],\n entityTypesMap: entityTypes,\n selectedEntityType: type,\n lastInternalId: 0,\n isSelectingEntityType: false,\n viewMode: \"tree\",\n viewOnly: viewOnly,\n matchMode: matchMode\n });\n}\nconst $330ae695507d96f5$export$e5ce04c5b3f58533 = (0, $eGztG$createContext)(null);\nfunction $330ae695507d96f5$export$e1068f2d1c68f87e() {\n const dispatch = (0, $eGztG$useContext)($330ae695507d96f5$export$e5ce04c5b3f58533);\n if (dispatch == null) throw new Error(\"No dispatch context available\");\n return dispatch;\n}\nfunction $330ae695507d96f5$var$treeReducer(state, action) {\n if (action.type === \"toggle-match-mode\") return {\n ...state,\n matchMode: !state.matchMode\n };\n if (action.type === \"toggle-view-only\") return {\n ...state,\n viewOnly: !state.viewOnly\n };\n if (state.viewOnly) return $330ae695507d96f5$var$viewMode(state, action);\n if (state.matchMode) return $330ae695507d96f5$var$matchMode(state, action);\n switch(action.type){\n case \"add-entity-type\":\n {\n // Add a new entity type to the map\n const { name: name, description: description, color: color } = action.payload;\n const newId = state.lastInternalId - 1;\n const newType = {\n id: newId,\n name: name,\n description: description === \"\" ? null : description,\n color: color\n };\n const newEntityTypesMap = new Map(state.entityTypesMap);\n newEntityTypesMap.set(newId, newType);\n return {\n ...state,\n entityTypesMap: newEntityTypesMap,\n selectedEntityType: newType,\n lastInternalId: newId\n };\n }\n case \"update-entity-type\":\n {\n // Update an existing entity type in the map\n const { id: id, name: name, description: description, color: color } = action.payload;\n const newEntityTypesMap = new Map(state.entityTypesMap);\n const oldType = newEntityTypesMap.get(id);\n if (!oldType) {\n console.warn(`Entity type with id ${id} not found`);\n return state;\n }\n const updatedType = {\n ...oldType,\n name: name,\n description: description === \"\" ? null : description,\n color: color\n };\n newEntityTypesMap.set(id, updatedType);\n // Update the tree to reflect the new type\n const newTree = $330ae695507d96f5$var$updateTreeTypes(state.tree, oldType, updatedType);\n return {\n ...state,\n tree: newTree,\n entityTypesMap: newEntityTypesMap,\n selectedEntityType: updatedType\n };\n }\n case \"select-range\":\n // Select a range of nodes by their IDs\n const payloadIds = action.payload.ids;\n const node1 = payloadIds[0];\n const node2 = payloadIds[1];\n // make list of nodes in order\n const allNodes = $330ae695507d96f5$var$flattenAndSort(state.tree);\n // select all nodes between node1 and node2\n const startIndex = allNodes.findIndex((node)=>node.id === node1);\n const endIndex = allNodes.findIndex((node)=>node.id === node2);\n const selectedNodes = allNodes.slice(startIndex, endIndex + 1);\n console.log(\"Selecting range:\", selectedNodes);\n return {\n ...state,\n selectedNodes: selectedNodes.map((node)=>node.id)\n };\n case \"move-node\":\n // For each node in the tree, if the node is in the dragIds, remove it from the tree and collect it\n const [newTree, removedNodes] = $330ae695507d96f5$var$removeNodes(state.tree, action.payload.dragIds);\n let keyPath = [];\n if (action.payload.parentId) {\n keyPath = $330ae695507d96f5$var$findNode(newTree, action.payload.parentId);\n keyPath.push(\"children\");\n }\n // Add removed nodes to the new tree at the correct location\n let updateSpec = $330ae695507d96f5$var$buildNestedSpec(keyPath, {\n $splice: [\n [\n action.payload.index,\n 0,\n ...removedNodes\n ]\n ]\n });\n return {\n ...state,\n tree: (0, $eGztG$immutabilityhelper)(newTree, updateSpec)\n };\n case \"delete-node\":\n // For each node in the tree, if the node is in the ids, remove it from the tree\n const [newTree2, _removedNodes] = $330ae695507d96f5$var$removeNodes(state.tree, action.payload.ids);\n // Get children of the removed nodes\n // If children are not present elsewhere in the tree, insert them\n const children = _removedNodes.flatMap((node)=>node.children ?? []).filter((child)=>!$330ae695507d96f5$var$nodeIsInTree(newTree2, child.id));\n // Reset the selection\n return {\n ...state,\n tree: [\n ...newTree2,\n ...children\n ],\n selectedNodes: state.selectedNodes.filter((id)=>!action.payload.ids.includes(id))\n };\n case \"select-node\":\n const { ids: ids } = action.payload;\n const type = action.payload.ids.length > 0 ? $330ae695507d96f5$export$e64eb58334357825(state.tree, ids[0])?.type : null;\n return {\n ...state,\n selectedNodes: ids,\n selectedEntityType: type\n };\n // otherwise fall through to toggle-node-selected for a single ID\n case \"toggle-node-selected\":\n const nodesToAdd = action.payload.ids.filter((id)=>!state.selectedNodes.includes(id));\n const nodesToKeep = state.selectedNodes.filter((id)=>!action.payload.ids.includes(id));\n const newType = action.payload.ids.length > 0 ? $330ae695507d96f5$export$e64eb58334357825(state.tree, action.payload.ids[0])?.type : null;\n return {\n ...state,\n selectedNodes: [\n ...nodesToKeep,\n ...nodesToAdd\n ],\n selectedEntityType: newType\n };\n case \"create-node\":\n const newId = state.lastInternalId - 1;\n const { text: text, start: start, end: end } = action.payload;\n const node = {\n id: newId,\n name: text,\n children: [],\n indices: [\n start,\n end\n ],\n type: state.selectedEntityType\n };\n return {\n ...state,\n tree: [\n ...state.tree,\n node\n ],\n selectedNodes: [\n newId\n ],\n lastInternalId: newId\n };\n case \"delete-entity-type\":\n {\n // Remove the entity type from the map\n const { id: id } = action.payload;\n const newEntityTypesMap = new Map(state.entityTypesMap);\n const oldType = newEntityTypesMap.get(id);\n newEntityTypesMap.delete(id);\n const defaultType = newEntityTypesMap.values().next().value;\n const newTree = $330ae695507d96f5$var$updateTreeTypes(state.tree, oldType, defaultType);\n return {\n ...state,\n tree: newTree,\n entityTypesMap: newEntityTypesMap,\n selectedNodes: []\n };\n }\n /** Entity type selection */ case \"toggle-entity-type-selector\":\n return {\n ...state,\n isSelectingEntityType: action.payload ?? !state.isSelectingEntityType\n };\n case \"select-entity-type\":\n {\n // For each selected node, update the type\n let newTree2 = state.tree;\n for (let id of state.selectedNodes){\n const keyPath = $330ae695507d96f5$var$findNode(state.tree, id);\n const nestedSpec = $330ae695507d96f5$var$buildNestedSpec(keyPath, {\n type: {\n $set: action.payload\n }\n });\n newTree2 = (0, $eGztG$immutabilityhelper)(newTree2, nestedSpec);\n }\n return {\n ...state,\n tree: newTree2,\n selectedEntityType: action.payload\n };\n }\n case \"deselect\":\n return {\n ...state,\n selectedNodes: []\n };\n case \"reset\":\n return {\n ...state,\n tree: state.initialTree,\n selectedNodes: []\n };\n case \"set-view-mode\":\n return {\n ...state,\n viewMode: action.payload\n };\n }\n}\nfunction $330ae695507d96f5$var$nodeIsInTree(tree, id) {\n for (let node of tree){\n if (node.id == id) return true;\n else if (node.children) {\n if ($330ae695507d96f5$var$nodeIsInTree(node.children, id)) return true;\n }\n }\n return false;\n}\nfunction $330ae695507d96f5$var$buildNestedSpec(keyPath, innerSpec) {\n // Build a nested object from a key path\n let spec = innerSpec;\n for(let i = keyPath.length - 1; i >= 0; i--)spec = {\n [keyPath[i]]: spec\n };\n return spec;\n// Since we don't have a \"children\" key at the root, we make the top-level spec an array\n}\nfunction $330ae695507d96f5$var$findNode(tree, id) {\n // Find the index of the node with the given id in the tree, returning the key path\n for(let i = 0; i < tree.length; i++){\n if (tree[i].id == id) return [\n i\n ];\n else if (tree[i].children) {\n let path = $330ae695507d96f5$var$findNode(tree[i].children, id);\n if (path != null) return [\n i,\n \"children\",\n ...path\n ];\n }\n }\n return null;\n}\nfunction $330ae695507d96f5$var$removeNodes(tree, ids) {\n /** Remove nodes with the given ids from the tree and return the new tree and the removed nodes */ let newTree = [];\n let removedNodes = [];\n for (let node of tree)if (ids.includes(node.id)) removedNodes.push(node);\n else {\n // Recurse into children\n if (node.children) {\n let [newChildren, removedChildren] = $330ae695507d96f5$var$removeNodes(node.children, ids);\n node = {\n ...node,\n children: newChildren\n };\n removedNodes.push(...removedChildren);\n }\n newTree.push(node);\n }\n return [\n newTree,\n removedNodes\n ];\n}\nfunction $330ae695507d96f5$export$8d9dbb7a64bf2a5e(tree) {\n // Convert the tree to a graph\n let nodes = [];\n let edges = [];\n const nodeMap = new Map();\n for (let node of tree){\n // If we've already found an instance of this node, we don't need to record\n // it again\n if (nodeMap.has(node.id)) continue;\n const { indices: indices, id: id, name: name, type: type, children: children } = node;\n const nodeData = {\n id: id,\n type: type.id,\n color: type.color,\n name: name,\n txt_range: [\n indices\n ],\n reasoning: null,\n match: node.match,\n children: children\n };\n nodeMap.set(node.id, node);\n nodes.push(nodeData);\n if (node.children) {\n for (let child of node.children)edges.push({\n source: node.id,\n dest: child.id\n });\n // Now process the children\n const { nodes: childNodes, edges: childEdges } = $330ae695507d96f5$export$8d9dbb7a64bf2a5e(node.children);\n nodes.push(...childNodes);\n edges.push(...childEdges);\n }\n }\n return {\n nodes: nodes,\n edges: edges\n };\n}\nfunction $330ae695507d96f5$export$e64eb58334357825(tree, id) {\n for (const node of tree){\n if (node.id === id) return node;\n if (node.children) {\n const found = $330ae695507d96f5$export$e64eb58334357825(node.children, id);\n if (found) return found;\n }\n }\n return null;\n}\nfunction $330ae695507d96f5$var$updateTreeTypes(tree, oldType, defaultType) {\n return tree.map((node)=>$330ae695507d96f5$var$updateNodeType(node, oldType, defaultType));\n}\nfunction $330ae695507d96f5$var$updateNodeType(node, oldType, defaultType) {\n const type = node.type.id === oldType.id ? defaultType : node.type;\n return {\n ...node,\n type: type,\n children: node.children ? $330ae695507d96f5$var$updateTreeTypes(node.children, oldType, defaultType) : []\n };\n}\nfunction $330ae695507d96f5$var$flattenAndSort(nodes) {\n const result = [];\n function traverse(nodeList) {\n for (const node of nodeList){\n result.push(node);\n if (Array.isArray(node.children) && node.children.length > 0) traverse(node.children);\n }\n }\n traverse(nodes);\n // sort by start\n return result.sort((a, b)=>a.indices[0] - b.indices[0]);\n}\nfunction $330ae695507d96f5$var$matchMode(state, action) {\n if (action.type === \"select-node\" || action.type === \"toggle-node-selected\") {\n const { ids: ids } = action.payload;\n if (ids.length != 1) return state;\n if (state.selectedNodes.length === 1) {\n if (ids[0] === state.selectedNodes[0]) // If the selected node is the same as the current selection, deselect it\n return {\n ...state,\n selectedNodes: []\n };\n }\n const type = action.payload.ids.length > 0 ? $330ae695507d96f5$export$e64eb58334357825(state.tree, ids[0])?.type : null;\n return {\n ...state,\n selectedNodes: ids,\n selectedEntityType: type\n };\n }\n if (action.type === \"add-match\") {\n const { id: id } = action.payload;\n // Find the node path\n const keyPath = $330ae695507d96f5$var$findNode(state.tree, id);\n if (!keyPath) {\n console.warn(`Node with id ${id} not found`);\n return state;\n }\n // Build update spec to set the `match` property\n const matchUpdateSpec = $330ae695507d96f5$var$buildNestedSpec(keyPath, {\n match: {\n $set: action.payload.payload\n }\n });\n const updatedTree = (0, $eGztG$immutabilityhelper)(state.tree, matchUpdateSpec);\n return {\n ...state,\n tree: updatedTree\n };\n }\n if (action.type === \"remove-match\") {\n const { id: id } = action.payload;\n console.log(\"Removing match for node with id:\", id);\n // Find the node path\n const keyPath = $330ae695507d96f5$var$findNode(state.tree, id);\n if (!keyPath) {\n console.warn(`Node with id ${id} not found`);\n return state;\n }\n // Build update spec to unset the `match` property\n const matchUpdateSpec = $330ae695507d96f5$var$buildNestedSpec(keyPath, {\n match: {\n $set: null\n }\n });\n const updatedTree = (0, $eGztG$immutabilityhelper)(state.tree, matchUpdateSpec);\n return {\n ...state,\n tree: updatedTree\n };\n }\n return state;\n}\nfunction $330ae695507d96f5$var$viewMode(state, action) {\n if (action.type === \"set-view-mode\") return {\n ...state,\n viewMode: action.payload\n };\n return state;\n}\n\n\nexport {$330ae695507d96f5$export$53ec42062883b2d4 as ViewMode, $330ae695507d96f5$export$911bb4b9c8065d3d as useUpdatableTree, $330ae695507d96f5$export$e5ce04c5b3f58533 as TreeDispatchContext, $330ae695507d96f5$export$e1068f2d1c68f87e as useTreeDispatch, $330ae695507d96f5$export$e64eb58334357825 as findNodeById, $330ae695507d96f5$export$8d9dbb7a64bf2a5e as treeToGraph};\n//# sourceMappingURL=feedback-components.8caef76e.js.map\n","import { TreeData } from \"./types\";\nimport { createContext, Dispatch, useContext, useReducer } from \"react\";\nimport update, { Spec } from \"immutability-helper\";\nimport { EntityType } from \"../extractions/types\";\n\nexport enum ViewMode {\n Tree = \"tree\",\n Graph = \"graph\",\n}\n\ninterface TreeState {\n initialTree: TreeData[];\n tree: TreeData[];\n selectedNodes: number[];\n entityTypesMap: Map<number, EntityType>;\n selectedEntityType: EntityType;\n lastInternalId: number;\n isSelectingEntityType: boolean;\n viewMode: ViewMode;\n viewOnly: boolean;\n matchMode: boolean;\n}\n\ntype TextRange = {\n start: number;\n end: number;\n text: string;\n};\n\ntype TreeAction =\n | {\n type: \"move-node\";\n payload: { dragIds: number[]; parentId: number; index: number };\n }\n | { type: \"delete-node\"; payload: { ids: number[] } }\n | { type: \"select-node\"; payload: { ids: number[] } }\n | { type: \"toggle-node-selected\"; payload: { ids: number[] } }\n | { type: \"set-view-mode\"; payload: ViewMode }\n | { type: \"create-node\"; payload: TextRange }\n | { type: \"select-entity-type\"; payload: EntityType }\n | { type: \"toggle-entity-type-selector\"; payload?: boolean | null }\n | { type: \"deselect\" }\n | { type: \"reset\" }\n | { type: \"delete-entity-type\"; payload: { id: number } }\n | {\n type: \"add-entity-type\";\n payload: { name: string; description: string; color: string };\n }\n | {\n type: \"update-entity-type\";\n payload: { id: number; name: string; description: string; color: string };\n }\n | { type: \"select-range\"; payload: { ids: number[] } }\n | { type: \"add-match\"; payload: { id: number; payload: any } }\n | { type: \"remove-match\"; payload: { id: number } }\n | { type: \"toggle-match-mode\" }\n | { type: \"toggle-view-only\" };\n\nexport type TreeDispatch = Dispatch<TreeAction>;\n\nexport function useUpdatableTree(\n initialTree: TreeData[],\n entityTypes: Map<number, EntityType>,\n viewOnly: boolean,\n matchMode: boolean,\n): [TreeState, TreeDispatch] {\n // Get the first entity type\n // issue: grabs second entity instead of selected one\n const type = entityTypes.values().next().value;\n\n return useReducer(treeReducer, {\n initialTree,\n tree: initialTree,\n selectedNodes: [],\n entityTypesMap: entityTypes,\n selectedEntityType: type,\n lastInternalId: 0,\n isSelectingEntityType: false,\n viewMode: ViewMode.Tree,\n viewOnly,\n matchMode,\n });\n}\n\nexport const TreeDispatchContext = createContext<TreeDispatch | null>(null);\n\nexport function useTreeDispatch() {\n const dispatch = useContext(TreeDispatchContext);\n if (dispatch == null) {\n throw new Error(\"No dispatch context available\");\n }\n return dispatch;\n}\n\nfunction treeReducer(state: TreeState, action: TreeAction) {\n if (action.type === \"toggle-match-mode\") {\n return { ...state, matchMode: !state.matchMode };\n }\n\n if (action.type === \"toggle-view-only\") {\n return { ...state, viewOnly: !state.viewOnly };\n }\n\n if (state.viewOnly) return viewMode(state, action);\n\n if (state.matchMode) return matchMode(state, action);\n\n switch (action.type) {\n case \"add-entity-type\": {\n // Add a new entity type to the map\n const { name, description, color } = action.payload;\n const newId = state.lastInternalId - 1;\n const newType: EntityType = {\n id: newId,\n name,\n description: description === \"\" ? null : description,\n color,\n };\n\n const newEntityTypesMap = new Map(state.entityTypesMap);\n newEntityTypesMap.set(newId, newType);\n\n return {\n ...state,\n entityTypesMap: newEntityTypesMap,\n selectedEntityType: newType,\n lastInternalId: newId,\n };\n }\n case \"update-entity-type\": {\n // Update an existing entity type in the map\n const { id, name, description, color } = action.payload;\n const newEntityTypesMap = new Map(state.entityTypesMap);\n const oldType = newEntityTypesMap.get(id);\n\n if (!oldType) {\n console.warn(`Entity type with id ${id} not found`);\n return state;\n }\n\n const updatedType: EntityType = {\n ...oldType,\n name,\n description: description === \"\" ? null : description,\n color,\n };\n\n newEntityTypesMap.set(id, updatedType);\n\n // Update the tree to reflect the new type\n const newTree = updateTreeTypes(state.tree, oldType, updatedType);\n\n return {\n ...state,\n tree: newTree,\n entityTypesMap: newEntityTypesMap,\n selectedEntityType: updatedType,\n };\n }\n case \"select-range\":\n // Select a range of nodes by their IDs\n const payloadIds = action.payload.ids;\n const node1 = payloadIds[0];\n const node2 = payloadIds[1];\n\n // make list of nodes in order\n const allNodes = flattenAndSort(state.tree);\n\n // select all nodes between node1 and node2\n const startIndex = allNodes.findIndex((node) => node.id === node1);\n const endIndex = allNodes.findIndex((node) => node.id === node2);\n\n const selectedNodes = allNodes.slice(startIndex, endIndex + 1);\n\n console.log(\"Selecting range:\", selectedNodes);\n return {\n ...state,\n selectedNodes: selectedNodes.map((node) => node.id),\n };\n\n case \"move-node\":\n // For each node in the tree, if the node is in the dragIds, remove it from the tree and collect it\n const [newTree, removedNodes] = removeNodes(\n state.tree,\n action.payload.dragIds,\n );\n\n let keyPath: (number | \"children\")[] = [];\n if (action.payload.parentId) {\n keyPath = findNode(newTree, action.payload.parentId);\n keyPath.push(\"children\");\n }\n\n // Add removed nodes to the new tree at the correct location\n let updateSpec = buildNestedSpec(keyPath, {\n $splice: [[action.payload.index, 0, ...removedNodes]],\n });\n\n return { ...state, tree: update(newTree, updateSpec) };\n case \"delete-node\":\n // For each node in the tree, if the node is in the ids, remove it from the tree\n const [newTree2, _removedNodes] = removeNodes(\n state.tree,\n action.payload.ids,\n );\n // Get children of the removed nodes\n // If children are not present elsewhere in the tree, insert them\n\n const children = _removedNodes\n .flatMap((node) => node.children ?? [])\n .filter((child) => !nodeIsInTree(newTree2, child.id));\n\n // Reset the selection\n\n return {\n ...state,\n tree: [...newTree2, ...children],\n selectedNodes: state.selectedNodes.filter(\n (id) => !action.payload.ids.includes(id),\n ),\n };\n case \"select-node\":\n const { ids } = action.payload;\n\n const type =\n action.payload.ids.length > 0\n ? findNodeById(state.tree, ids[0])?.type\n : null;\n\n return { ...state, selectedNodes: ids, selectedEntityType: type };\n // otherwise fall through to toggle-node-selected for a single ID\n case \"toggle-node-selected\":\n const nodesToAdd = action.payload.ids.filter(\n (id) => !state.selectedNodes.includes(id),\n );\n const nodesToKeep = state.selectedNodes.filter(\n (id) => !action.payload.ids.includes(id),\n );\n\n const newType =\n action.payload.ids.length > 0\n ? findNodeById(state.tree, action.payload.ids[0])?.type\n : null;\n\n return {\n ...state,\n selectedNodes: [...nodesToKeep, ...nodesToAdd],\n selectedEntityType: newType,\n };\n\n case \"create-node\":\n const newId = state.lastInternalId - 1;\n const { text, start, end } = action.payload;\n const node: TreeData = {\n id: newId,\n name: text,\n children: [],\n indices: [start, end],\n type: state.selectedEntityType,\n };\n\n return {\n ...state,\n tree: [...state.tree, node],\n selectedNodes: [newId],\n lastInternalId: newId,\n };\n\n case \"delete-entity-type\": {\n // Remove the entity type from the map\n const { id } = action.payload;\n const newEntityTypesMap = new Map(state.entityTypesMap);\n const oldType = newEntityTypesMap.get(id);\n newEntityTypesMap.delete(id);\n\n const defaultType = newEntityTypesMap.values().next().value;\n const newTree = updateTreeTypes(state.tree, oldType, defaultType);\n\n return {\n ...state,\n tree: newTree,\n entityTypesMap: newEntityTypesMap,\n selectedNodes: [],\n };\n }\n\n /** Entity type selection */\n case \"toggle-entity-type-selector\":\n return {\n ...state,\n isSelectingEntityType: action.payload ?? !state.isSelectingEntityType,\n };\n case \"select-entity-type\": {\n // For each selected node, update the type\n let newTree2 = state.tree;\n for (let id of state.selectedNodes) {\n const keyPath = findNode(state.tree, id);\n const nestedSpec = buildNestedSpec(keyPath, {\n type: { $set: action.payload },\n });\n newTree2 = update(newTree2, nestedSpec);\n }\n\n return {\n ...state,\n tree: newTree2,\n selectedEntityType: action.payload,\n };\n }\n case \"deselect\":\n return { ...state, selectedNodes: [] };\n case \"reset\":\n return {\n ...state,\n tree: state.initialTree,\n selectedNodes: [],\n };\n case \"set-view-mode\":\n return { ...state, viewMode: action.payload };\n }\n}\n\nfunction nodeIsInTree(tree: TreeData[], id: number): boolean {\n for (let node of tree) {\n if (node.id == id) {\n return true;\n } else if (node.children) {\n if (nodeIsInTree(node.children, id)) {\n return true;\n }\n }\n }\n return false;\n}\n\nfunction buildNestedSpec(\n keyPath: (number | \"children\")[],\n innerSpec: Spec<any>,\n): Spec<TreeData[]> {\n // Build a nested object from a key path\n\n let spec = innerSpec;\n for (let i = keyPath.length - 1; i >= 0; i--) {\n spec = { [keyPath[i]]: spec };\n }\n return spec as any;\n // Since we don't have a \"children\" key at the root, we make the top-level spec an array\n}\n\nfunction findNode(\n tree: TreeData[],\n id: number,\n): (number | \"children\")[] | null {\n // Find the index of the node with the given id in the tree, returning the key path\n for (let i = 0; i < tree.length; i++) {\n if (tree[i].id == id) {\n return [i];\n } else if (tree[i].children) {\n let path = findNode(tree[i].children, id);\n if (path != null) {\n return [i, \"children\", ...path];\n }\n }\n }\n return null;\n}\n\nfunction removeNodes(\n tree: TreeData[],\n ids: number[],\n): [TreeData[], TreeData[]] {\n /** Remove nodes with the given ids from the tree and return the new tree and the removed nodes */\n let newTree: TreeData[] = [];\n let removedNodes: TreeData[] = [];\n\n for (let node of tree) {\n if (ids.includes(node.id)) {\n removedNodes.push(node);\n } else {\n // Recurse into children\n if (node.children) {\n let [newChildren, removedChildren] = removeNodes(node.children, ids);\n node = { ...node, children: newChildren };\n removedNodes.push(...removedChildren);\n }\n newTree.push(node);\n }\n }\n\n return [newTree, removedNodes];\n}\n\nexport interface EntityOutput {\n id: number;\n type: number | null;\n txt_range: number[][];\n name: string;\n match: any | null;\n reasoning: string | null;\n color: string | null;\n children: any[] | null;\n}\n\nexport interface GraphData {\n nodes: EntityOutput[];\n edges: { source: number; dest: number }[];\n}\n\nexport function treeToGraph(tree: TreeData[]): GraphData {\n // Convert the tree to a graph\n let nodes: EntityOutput[] = [];\n let edges: { source: number; dest: number }[] = [];\n const nodeMap = new Map<number, TreeData>();\n\n for (let node of tree) {\n // If we've already found an instance of this node, we don't need to record\n // it again\n if (nodeMap.has(node.id)) {\n continue;\n }\n\n const { indices, id, name, type, children } = node;\n\n const nodeData: EntityOutput = {\n id,\n type: type.id,\n color: type.color,\n name,\n txt_range: [indices],\n reasoning: null,\n match: node.match,\n children,\n };\n\n nodeMap.set(node.id, node);\n nodes.push(nodeData);\n\n if (node.children) {\n for (let child of node.children) {\n edges.push({ source: node.id, dest: child.id });\n }\n\n // Now process the children\n const { nodes: childNodes, edges: childEdges } = treeToGraph(\n node.children,\n );\n nodes.push(...childNodes);\n edges.push(...childEdges);\n }\n }\n\n return { nodes, edges };\n}\n\nexport function findNodeById(tree, id) {\n for (const node of tree) {\n if (node.id === id) {\n return node;\n }\n if (node.children) {\n const found = findNodeById(node.children, id);\n if (found) return found;\n }\n }\n return null;\n}\n\nfunction updateTreeTypes(tree, oldType, defaultType) {\n return tree.map((node) => updateNodeType(node, oldType, defaultType));\n}\n\nfunction updateNodeType(node, oldType, defaultType) {\n const type = node.type.id === oldType.id ? defaultType : node.type;\n\n return {\n ...node,\n type,\n children: node.children\n ? updateTreeTypes(node.children, oldType, defaultType)\n : [],\n };\n}\n\nfunction flattenAndSort(nodes) {\n const result = [];\n\n function traverse(nodeList) {\n for (const node of nodeList) {\n result.push(node);\n if (Array.isArray(node.children) && node.children.length > 0) {\n traverse(node.children);\n }\n }\n }\n\n traverse(nodes);\n\n // sort by start\n return result.sort((a, b) => a.indices[0] - b.indices[0]);\n}\n\nfunction matchMode(state, action) {\n if (action.type === \"select-node\" || action.type === \"toggle-node-selected\") {\n const { ids } = action.payload;\n\n if (ids.length != 1) return state;\n\n if (state.selectedNodes.length === 1) {\n if (ids[0] === state.selectedNodes[0]) {\n // If the selected node is the same as the current selection, deselect it\n return { ...state, selectedNodes: [] };\n }\n }\n\n const type =\n action.payload.ids.length > 0\n ? findNodeById(state.tree, ids[0])?.type\n : null;\n\n return { ...state, selectedNodes: ids, selectedEntityType: type };\n }\n\n if (action.type === \"add-match\") {\n const { id } = action.payload;\n\n // Find the node path\n const keyPath = findNode(state.tree, id);\n if (!keyPath) {\n console.warn(`Node with id ${id} not found`);\n return state;\n }\n\n // Build update spec to set the `match` property\n const matchUpdateSpec = buildNestedSpec(keyPath, {\n match: { $set: action.payload.payload },\n });\n\n const updatedTree = update(state.tree, matchUpdateSpec);\n\n return {\n ...state,\n tree: updatedTree,\n };\n }\n\n if (action.type === \"remove-match\") {\n const { id } = action.payload;\n\n console.log(\"Removing match for node with id:\", id);\n\n // Find the node path\n const keyPath = findNode(state.tree, id);\n if (!keyPath) {\n console.warn(`Node with id ${id} not found`);\n return state;\n }\n\n // Build update spec to unset the `match` property\n const matchUpdateSpec = buildNestedSpec(keyPath, {\n match: { $set: null },\n });\n\n const updatedTree = update(state.tree, matchUpdateSpec);\n\n return {\n ...state,\n tree: updatedTree,\n };\n }\n\n return state;\n}\n\nfunction viewMode(state, action) {\n if (action.type === \"set-view-mode\") {\n return { ...state, viewMode: action.payload };\n }\n\n return state;\n}\n"],"names":["useReducer","$eGztG$useReducer","createContext","$eGztG$createContext","useContext","$eGztG$useContext","$eGztG$immutabilityhelper","ViewMode","$330ae695507d96f5$export$53ec42062883b2d4","$330ae695507d96f5$export$911bb4b9c8065d3d","initialTree","entityTypes","viewOnly","matchMode","type","values","next","value","$330ae695507d96f5$var$treeReducer","tree","selectedNodes","entityTypesMap","selectedEntityType","lastInternalId","isSelectingEntityType","viewMode","$330ae695507d96f5$export$e5ce04c5b3f58533","$330ae695507d96f5$export$e1068f2d1c68f87e","dispatch","Error","state","action","payload","$330ae695507d96f5$var$matchMode","ids","length","$330ae695507d96f5$export$e64eb58334357825","id","keyPath","$330ae695507d96f5$var$findNode","console","warn","matchUpdateSpec","$330ae695507d96f5$var$buildNestedSpec","match","$set","updatedTree","log","name","description","color","newId","newType","newEntityTypesMap","Map","set","oldType","get","updatedType","newTree","$330ae695507d96f5$var$updateTreeTypes","payloadIds","node1","node2","allNodes","$330ae695507d96f5$var$flattenAndSort","nodes","result","traverse","nodeList","node","push","Array","isArray","children","sort","a","b","indices","startIndex","findIndex","endIndex","slice","map","removedNodes","$330ae695507d96f5$var$removeNodes","dragIds","parentId","updateSpec","$splice","index","newTree2","_removedNodes","flatMap","filter","child","$330ae695507d96f5$var$nodeIsInTree","includes","nodesToAdd","nodesToKeep","text","start","end","delete","defaultType","innerSpec","spec","i","path","newChildren","removedChildren","$330ae695507d96f5$export$8d9dbb7a64bf2a5e","edges","nodeMap","has","nodeData","txt_range","reasoning","source","dest","childNodes","childEdges","found","$330ae695507d96f5$var$updateNodeType","useUpdatableTree","TreeDispatchContext","useTreeDispatch","findNodeById","treeToGraph"],"version":3,"file":"feedback-components.8caef76e.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":"../../../../"}
@@ -1,2 +1,2 @@
1
- import"./feedback-components.b22d37d1.js";import"./feedback-components.b8da3bce.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};
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
@@ -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.b8da3bce.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":"../../../../"}
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@macrostrat/feedback-components",
3
- "version": "1.1.5",
3
+ "version": "1.1.7",
4
4
  "description": "",
5
5
  "source": "src/index.ts",
6
6
  "type": "module",
@@ -53,7 +53,8 @@ type TreeAction =
53
53
  | { type: "select-range"; payload: { ids: number[] } }
54
54
  | { type: "add-match"; payload: { id: number; payload: any } }
55
55
  | { type: "remove-match"; payload: { id: number } }
56
- | { type: "toggle-match-mode" };
56
+ | { type: "toggle-match-mode" }
57
+ | { type: "toggle-view-only" };
57
58
 
58
59
  export type TreeDispatch = Dispatch<TreeAction>;
59
60
 
@@ -96,6 +97,10 @@ function treeReducer(state: TreeState, action: TreeAction) {
96
97
  return { ...state, matchMode: !state.matchMode };
97
98
  }
98
99
 
100
+ if (action.type === "toggle-view-only") {
101
+ return { ...state, viewOnly: !state.viewOnly };
102
+ }
103
+
99
104
  if (state.viewOnly) return viewMode(state, action);
100
105
 
101
106
  if (state.matchMode) return matchMode(state, action);
@@ -167,3 +167,6 @@ mark
167
167
 
168
168
  .close-btn
169
169
  cursor: pointer
170
+
171
+ .match-link
172
+ padding: .5em
@@ -60,7 +60,7 @@ export function FeedbackComponent({
60
60
  }) {
61
61
  const [viewOnly, setViewOnly] = useState(view);
62
62
  const [match, setMatchLinks] = useState(matchLinks);
63
- const matchMode = match !== null;
63
+ const matchMode = match !== undefined;
64
64
 
65
65
  // Get the input arguments
66
66
  const [state, dispatch] = useUpdatableTree(
@@ -93,6 +93,7 @@ export function FeedbackComponent({
93
93
  small: true,
94
94
  onValueChange() {
95
95
  setViewOnly(!viewOnly);
96
+ dispatch({ type: "toggle-view-only" });
96
97
  },
97
98
  role: "toolbar",
98
99
  }),
@@ -145,6 +146,7 @@ export function FeedbackComponent({
145
146
  width,
146
147
  height,
147
148
  matchComponent,
149
+ viewOnly,
148
150
  }),
149
151
  h.if(state.viewMode == "graph")(GraphView, {
150
152
  tree,
@@ -304,8 +306,15 @@ function countNodes(tree) {
304
306
  }
305
307
 
306
308
  function ManagedSelectionTree(props) {
307
- const { selectedNodes, dispatch, tree, height, width, matchComponent } =
308
- props;
309
+ const {
310
+ selectedNodes,
311
+ dispatch,
312
+ tree,
313
+ height,
314
+ width,
315
+ matchComponent,
316
+ viewOnly,
317
+ } = props;
309
318
 
310
319
  const ref = useRef<TreeApi<TreeData>>();
311
320
  // Use a ref to track clicks (won't cause rerender)
@@ -401,6 +410,7 @@ function ManagedSelectionTree(props) {
401
410
  onSelect: handleSelect,
402
411
  children: _Node,
403
412
  idAccessor(d) {
413
+ if (viewOnly) return -1;
404
414
  return d.id.toString();
405
415
  },
406
416
  }),
@@ -29,9 +29,9 @@ export function Matches({
29
29
  h(Divider),
30
30
  h(Switch, {
31
31
  label: "Match mode",
32
- checked: match !== null,
32
+ checked: match !== undefined,
33
33
  onChange: (e) => {
34
- setMatchLinks(match === null ? matchLinks || {} : null);
34
+ setMatchLinks(match === undefined ? matchLinks || {} : undefined);
35
35
  dispatch({ type: "toggle-match-mode" });
36
36
  },
37
37
  }),
@@ -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") {