@macrostrat/feedback-components 1.0.0 → 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +9 -5
- package/dist/{edit-state.e8edb13a.js → esm/edit-state.c39d8466.js} +8 -8
- package/dist/{edit-state.e8edb13a.js.map → esm/edit-state.c39d8466.js.map} +1 -1
- package/dist/{extractions.54be85f8.js → esm/extractions.65bb73cc.js} +12 -12
- package/dist/{extractions.54be85f8.js.map → esm/extractions.65bb73cc.js.map} +1 -1
- package/dist/{feedback.46c2b5c4.js → esm/feedback.5c86878e.js} +28 -28
- package/dist/{feedback.46c2b5c4.js.map → esm/feedback.5c86878e.js.map} +1 -1
- package/dist/{feedback.module.7e16830e.css → esm/feedback.module.55921afe.css} +1 -1
- package/dist/{feedback.module.7e16830e.css.map → esm/feedback.module.55921afe.css.map} +1 -1
- package/dist/{feedback.module.c28cbac7.js → esm/feedback.module.765b1e58.js} +1 -1
- package/dist/{feedback.module.c28cbac7.js.map → esm/feedback.module.765b1e58.js.map} +1 -1
- package/dist/{graph.cb42b871.js → esm/graph.f4f65d79.js} +17 -17
- package/dist/{graph.cb42b871.js.map → esm/graph.f4f65d79.js.map} +1 -1
- package/dist/{index.d.ts.map → esm/index.d.ts.map} +1 -1
- package/dist/{index.js → esm/index.js} +2 -2
- package/dist/{main.module.d6508c0e.css → esm/main.module.2f2972c8.css} +1 -1
- package/dist/{main.module.d6508c0e.css.map → esm/main.module.2f2972c8.css.map} +1 -1
- package/dist/{main.module.f9f92ece.css → esm/main.module.8d366b6e.css} +1 -1
- package/dist/{main.module.f9f92ece.css.map → esm/main.module.8d366b6e.css.map} +1 -1
- package/dist/{main.module.ca3db294.js → esm/main.module.cd706d67.js} +1 -1
- package/dist/{main.module.ca3db294.js.map → esm/main.module.cd706d67.js.map} +1 -1
- package/dist/{main.module.21bbfaf4.js → esm/main.module.d2fbdf09.js} +1 -1
- package/dist/{main.module.21bbfaf4.js.map → esm/main.module.d2fbdf09.js.map} +1 -1
- package/dist/{node.30d0b8c3.js → esm/node.28634e40.js} +7 -7
- package/dist/{node.30d0b8c3.js.map → esm/node.28634e40.js.map} +1 -1
- package/dist/{text-visualizer.77af0d24.js → esm/text-visualizer.198e27ff.js} +10 -10
- package/dist/{text-visualizer.77af0d24.js.map → esm/text-visualizer.198e27ff.js.map} +1 -1
- package/dist/{type-selector.e75dd247.js → esm/type-selector.6e8952d6.js} +9 -9
- package/dist/{type-selector.e75dd247.js.map → esm/type-selector.6e8952d6.js.map} +1 -1
- package/dist/node/edit-state.f50ca728.js +2 -0
- package/dist/node/edit-state.f50ca728.js.map +1 -0
- package/dist/node/extractions.e6ea2eb9.js +2 -0
- package/dist/node/extractions.e6ea2eb9.js.map +1 -0
- package/dist/node/feedback.8d3d1219.js +2 -0
- package/dist/node/feedback.8d3d1219.js.map +1 -0
- package/dist/node/feedback.module.a8744203.js +2 -0
- package/dist/node/feedback.module.a8744203.js.map +1 -0
- package/dist/node/feedback.module.c4eab97d.css +2 -0
- package/dist/node/feedback.module.c4eab97d.css.map +1 -0
- package/dist/node/graph.ca5b649f.js +2 -0
- package/dist/node/graph.ca5b649f.js.map +1 -0
- package/dist/node/index.js +2 -0
- package/dist/node/index.js.map +1 -0
- package/dist/node/main.module.1857be22.js +2 -0
- package/dist/node/main.module.1857be22.js.map +1 -0
- package/dist/node/main.module.1fdfe813.css +2 -0
- package/dist/node/main.module.1fdfe813.css.map +1 -0
- package/dist/node/main.module.6bc7d51b.css +2 -0
- package/dist/node/main.module.6bc7d51b.css.map +1 -0
- package/dist/node/main.module.ebdf985b.js +2 -0
- package/dist/node/main.module.ebdf985b.js.map +1 -0
- package/dist/node/node.33108ccc.js +2 -0
- package/dist/node/node.33108ccc.js.map +1 -0
- package/dist/node/text-visualizer.1e770afa.js +2 -0
- package/dist/node/text-visualizer.1e770afa.js.map +1 -0
- package/dist/node/type-selector.0035ef7d.js +2 -0
- package/dist/node/type-selector.0035ef7d.js.map +1 -0
- package/package.json +24 -11
- package/stories/feedback.stories.ts +0 -40
- package/stories/test-data.ts +0 -330
- /package/dist/{index.d.ts → esm/index.d.ts} +0 -0
- /package/dist/{index.js.map → esm/index.js.map} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"mappings":"A,O,M,mB,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,E,SEAiB,AAAA,EAAA,SAAA,YAAA,CAA6C,S,I,E,E,SDOpD,AAAA,EAAM,MAAM,C,AAAC,G,AAAA,E,U,C,AAAA,E,O,CAAA","sources":["<anon>","packages/feedback-components/src/feedback/node.ts","../../../../.yarn/berry/cache/@parcel-runtime-js-npm-2.13.3-f44fec8492-10c0.zip/node_modules/@parcel/runtime-js/lib/runtime-be5b24876b77195e.js"],"sourcesContent":["import $hPIF3$macrostrathyper from \"@macrostrat/hyper\";\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[\"parcelRequire94c2\"];\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[\"parcelRequire94c2\"] = parcelRequire;\n}\n\nvar parcelRegister = parcelRequire.register;\n\nvar $edvRb = parcelRequire(\"edvRb\");\nvar $d834190537e68c62$exports = {};\n\n$d834190537e68c62$exports = (parcelRequire(\"daZiC\")).getBundleURL('hPIF3') + \"edit-state.f50ca728.js\";\n\n\n\nvar $9wFEx = parcelRequire(\"9wFEx\");\n\nconst $2e9ede27ff2a3eea$var$h = (0, $hPIF3$macrostrathyper).styled((0, (/*@__PURE__*/$parcel$interopDefault($9wFEx))));\nfunction $2e9ede27ff2a3eea$var$isSelected(searchNode, treeNode) {\n return searchNode.id == treeNode.id;\n// We could also select children of the search node here if we wanted to\n}\nfunction $2e9ede27ff2a3eea$var$isNodeHighlighted(node, tree) {\n // We treat no selection as all nodes being active. We may add some nuance later\n if (tree.selectedNodes.length == 0) return true;\n for (const selectedNode of tree.selectedNodes){\n if ($2e9ede27ff2a3eea$var$isSelected(node.data, selectedNode.data)) return true;\n }\n // Check if the parent node is highlighted\n if (node.parent != null && $2e9ede27ff2a3eea$var$isNodeHighlighted(node.parent, tree)) return true;\n return false;\n}\nfunction $2e9ede27ff2a3eea$var$isNodeActive(node, tree) {\n for (const selectedNode of tree.selectedNodes){\n if ($2e9ede27ff2a3eea$var$isSelected(node.data, selectedNode.data)) return true;\n }\n return false;\n}\nfunction $2e9ede27ff2a3eea$var$Node({ node: node, style: style, dragHandle: dragHandle, tree: tree, matchComponent: matchComponent }) {\n let highlighted = $2e9ede27ff2a3eea$var$isNodeHighlighted(node, tree);\n let active = $2e9ede27ff2a3eea$var$isNodeActive(node, tree);\n const dispatch = (0, $d834190537e68c62$exports.useTreeDispatch)();\n return $2e9ede27ff2a3eea$var$h(\"div.node\", {\n style: style,\n ref: dragHandle\n }, $2e9ede27ff2a3eea$var$h((0, $edvRb.EntityTag), {\n data: node.data,\n active: active,\n highlighted: highlighted,\n matchComponent: matchComponent,\n onClickType () {\n dispatch({\n type: \"toggle-entity-type-selector\"\n });\n }\n }));\n}\nvar $2e9ede27ff2a3eea$export$2e2bcd8739ae039 = $2e9ede27ff2a3eea$var$Node;\n\n\n//# sourceMappingURL=node.33108ccc.js.map\n","import { NodeApi, TreeApi } from \"react-arborist\";\nimport { TreeData } from \"./types\";\nimport { EntityTag } from \"../extractions\";\nimport { useTreeDispatch } from \"./edit-state\";\nimport styles from \"./feedback.module.sass\";\nimport hyper from \"@macrostrat/hyper\";\n\nconst h = hyper.styled(styles);\n\nfunction isSelected(searchNode: TreeData, treeNode: TreeData) {\n return searchNode.id == treeNode.id;\n // We could also select children of the search node here if we wanted to\n}\n\nfunction isNodeHighlighted(node: NodeApi<TreeData>, tree: TreeApi<TreeData>) {\n // We treat no selection as all nodes being active. We may add some nuance later\n if (tree.selectedNodes.length == 0) {\n return true;\n }\n\n for (const selectedNode of tree.selectedNodes) {\n if (isSelected(node.data, selectedNode.data)) {\n return true;\n }\n }\n\n // Check if the parent node is highlighted\n if (node.parent != null && isNodeHighlighted(node.parent, tree)) {\n return true;\n }\n\n return false;\n}\n\nfunction isNodeActive(node: NodeApi<TreeData>, tree: TreeApi<TreeData>) {\n for (const selectedNode of tree.selectedNodes) {\n if (isSelected(node.data, selectedNode.data)) {\n return true;\n }\n }\n return false;\n}\n\nfunction Node({ node, style, dragHandle, tree, matchComponent }: any) {\n let highlighted: boolean = isNodeHighlighted(node, tree);\n let active: boolean = isNodeActive(node, tree);\n\n const dispatch = useTreeDispatch();\n\n return h(\n \"div.node\",\n { style, ref: dragHandle },\n h(EntityTag, {\n data: node.data,\n active,\n highlighted,\n matchComponent,\n onClickType() {\n dispatch({ type: \"toggle-entity-type-selector\" });\n },\n })\n );\n}\n\nexport default Node;\n","module.exports = require('./helpers/bundle-url').getBundleURL('hPIF3') + \"edit-state.f50ca728.js\";"],"names":["$hPIF3$macrostrathyper","$parcel$global","globalThis","$parcel$modules","$parcel$inits","parcelRequire","id","exports","init","module","call","err","Error","code","register","getBundleURL","$9wFEx","styled","a","__esModule","default"],"version":3,"file":"node.33108ccc.js.map","sourceRoot":"../../../../"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import"react-text-annotate-blend";import r from"@macrostrat/hyper";import"react";var e=globalThis,t={},o={},a=e.parcelRequire94c2;null==a&&((a=function(r){if(r in t)return t[r].exports;if(r in o){var e=o[r];delete o[r];var a={id:r,exports:{}};return t[r]=a,e.call(a.exports,a,a.exports),a.exports}var i=Error("Cannot find module '"+r+"'");throw i.code="MODULE_NOT_FOUND",i}).register=function(r,e){o[r]=e},e.parcelRequire94c2=a),a.register;var i=a("9wFEx");a("edvRb"),r.styled(i&&i.__esModule?i.default:i);
|
|
2
|
+
//# sourceMappingURL=text-visualizer.1e770afa.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"mappings":"A,M,2B,A,Q,M,mB,A,O,O,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,SCSU,AAAA,EAAM,MAAM,C,AAAC,G,AAAA,E,U,C,AAAA,E,O,CAAA","sources":["<anon>","packages/feedback-components/src/feedback/text-visualizer.ts"],"sourcesContent":["import {TextAnnotateBlend as $h8ona$TextAnnotateBlend} from \"react-text-annotate-blend\";\nimport $h8ona$macrostrathyper from \"@macrostrat/hyper\";\nimport {useCallback as $h8ona$useCallback} from \"react\";\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[\"parcelRequire94c2\"];\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[\"parcelRequire94c2\"] = parcelRequire;\n}\n\nvar parcelRegister = parcelRequire.register;\n\n\nvar $9wFEx = parcelRequire(\"9wFEx\");\n\n\nvar $edvRb = parcelRequire(\"edvRb\");\n\nconst $d6cf457c7790c03a$var$h = (0, $h8ona$macrostrathyper).styled((0, (/*@__PURE__*/$parcel$interopDefault($9wFEx))));\nfunction $d6cf457c7790c03a$var$buildTags(highlights, selectedNodes) {\n let tags = [];\n // If entity ID has already been seen, don't add it again\n const entities = new Set();\n for (const highlight of highlights){\n // Don't add multiply-linked entities multiple times\n if (entities.has(highlight.id)) continue;\n const highlighted = $d6cf457c7790c03a$var$isHighlighted(highlight, selectedNodes);\n const active = $d6cf457c7790c03a$var$isActive(highlight, selectedNodes);\n tags.push({\n markStyle: {\n ...(0, $edvRb.getTagStyle)(highlight.backgroundColor, {\n highlighted: highlighted,\n active: active\n }),\n borderRadius: \"0.2em\",\n padding: \"0.1em\",\n borderWidth: \"1.5px\",\n cursor: \"pointer\"\n },\n tagStyle: {\n display: \"none\"\n },\n ...highlight\n });\n entities.add(highlight.id);\n }\n return tags;\n}\nfunction $d6cf457c7790c03a$var$isActive(tag, selectedNodes) {\n return selectedNodes.includes(tag.id);\n}\nfunction $d6cf457c7790c03a$var$isHighlighted(tag, selectedNodes) {\n if (selectedNodes.length === 0) return true;\n return (selectedNodes.includes(tag.id) || tag.parents?.some((d)=>selectedNodes.includes(d))) ?? false;\n}\nfunction $d6cf457c7790c03a$export$6e107db9091b8219(props) {\n // Convert input to tags\n const { text: text, selectedNodes: selectedNodes, nodes: nodes, dispatch: dispatch } = props;\n let allTags = $d6cf457c7790c03a$var$buildTags((0, $edvRb.buildHighlights)(nodes, null), selectedNodes);\n const onChange = (0, $h8ona$useCallback)((tags)=>{\n // New tags\n console.log(tags);\n const newTags = tags.filter((d)=>!(\"id\" in d));\n if (newTags.length > 0) {\n const { start: start, end: end } = newTags[0];\n const payload = {\n start: start,\n end: end,\n text: text.slice(start, end)\n };\n dispatch({\n type: \"create-node\",\n payload: payload\n });\n return;\n }\n const tagIDs = new Set(tags.map((d)=>d.id));\n const removedIds = allTags.map((d)=>d.id).filter((d)=>!tagIDs.has(d));\n /* Find the id that was removed: that is the one that will be selected\n (we are hijacking the 'click to delete' functionality to select instead) */ if (removedIds.length > 0) dispatch({\n type: \"toggle-node-selected\",\n payload: {\n ids: removedIds\n }\n });\n }, [\n allTags,\n text\n ]);\n return $d6cf457c7790c03a$var$h((0, $h8ona$TextAnnotateBlend), {\n style: {\n fontSize: \"1.2em\"\n },\n className: \"feedback-text\",\n content: text,\n onChange: onChange,\n value: allTags\n });\n}\n\n\n//# sourceMappingURL=text-visualizer.1e770afa.js.map\n","import { AnnotateBlendTag, TextAnnotateBlend } from \"react-text-annotate-blend\";\nimport { InternalEntity } from \"./types\";\nimport { TreeDispatch } from \"./edit-state\";\nimport styles from \"./feedback.module.sass\";\nimport hyper from \"@macrostrat/hyper\";\nimport { buildHighlights, getTagStyle } from \"../extractions\";\nimport { Highlight } from \"../extractions/types\";\nimport { useCallback } from \"react\";\n\nconst h = hyper.styled(styles);\n\nexport interface FeedbackTextProps {\n text: string;\n selectedNodes: number[];\n nodes: InternalEntity[];\n updateNodes: (nodes: string[]) => void;\n dispatch: TreeDispatch;\n}\n\nfunction buildTags(\n highlights: Highlight[],\n selectedNodes: number[]\n): AnnotateBlendTag[] {\n let tags: AnnotateBlendTag[] = [];\n\n // If entity ID has already been seen, don't add it again\n const entities = new Set<number>();\n\n for (const highlight of highlights) {\n // Don't add multiply-linked entities multiple times\n if (entities.has(highlight.id)) continue;\n\n const highlighted = isHighlighted(highlight, selectedNodes);\n const active = isActive(highlight, selectedNodes);\n\n tags.push({\n markStyle: {\n ...getTagStyle(highlight.backgroundColor, {\n highlighted,\n active,\n }),\n borderRadius: \"0.2em\",\n padding: \"0.1em\",\n borderWidth: \"1.5px\",\n cursor: \"pointer\",\n },\n tagStyle: {\n display: \"none\",\n },\n ...highlight,\n });\n\n entities.add(highlight.id);\n }\n\n return tags;\n}\n\nfunction isActive(tag: Highlight, selectedNodes: number[]) {\n return selectedNodes.includes(tag.id);\n}\n\nfunction isHighlighted(tag: Highlight, selectedNodes: number[]) {\n if (selectedNodes.length === 0) return true;\n return (\n (selectedNodes.includes(tag.id) ||\n tag.parents?.some((d) => selectedNodes.includes(d))) ??\n false\n );\n}\n\nexport function FeedbackText(props: FeedbackTextProps) {\n // Convert input to tags\n const { text, selectedNodes, nodes, dispatch } = props;\n let allTags: AnnotateBlendTag[] = buildTags(\n buildHighlights(nodes, null),\n selectedNodes\n );\n\n const onChange = useCallback(\n (tags) => {\n // New tags\n console.log(tags);\n const newTags = tags.filter((d) => !(\"id\" in d));\n if (newTags.length > 0) {\n const { start, end } = newTags[0];\n const payload = { start, end, text: text.slice(start, end) };\n dispatch({ type: \"create-node\", payload });\n return;\n }\n\n const tagIDs = new Set(tags.map((d) => d.id));\n const removedIds = allTags.map((d) => d.id).filter((d) => !tagIDs.has(d));\n\n /* Find the id that was removed: that is the one that will be selected\n (we are hijacking the 'click to delete' functionality to select instead) */\n if (removedIds.length > 0) {\n dispatch({\n type: \"toggle-node-selected\",\n payload: { ids: removedIds },\n });\n }\n },\n [allTags, text]\n );\n\n return h(TextAnnotateBlend, {\n style: {\n fontSize: \"1.2em\",\n },\n className: \"feedback-text\",\n content: text,\n onChange,\n value: allTags,\n });\n}\n"],"names":["$h8ona$macrostrathyper","$parcel$global","globalThis","$parcel$modules","$parcel$inits","parcelRequire","id","exports","init","module","call","err","Error","code","register","$9wFEx","styled","a","__esModule","default"],"version":3,"file":"text-visualizer.1e770afa.js.map","sourceRoot":"../../../../"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import e from"@macrostrat/hyper";import"classnames";import"@blueprintjs/select";import"@blueprintjs/select/lib/css/blueprint-select.css";var r,t=globalThis,s={},i={},l=t.parcelRequire94c2;null==l&&((l=function(e){if(e in s)return s[e].exports;if(e in i){var r=i[e];delete i[e];var t={id:e,exports:{}};return s[e]=t,r.call(t.exports,t,t.exports),t.exports}var l=Error("Cannot find module '"+e+"'");throw l.code="MODULE_NOT_FOUND",l}).register=function(e,r){i[e]=r},t.parcelRequire94c2=l),l.register;var o={};o=l("daZiC").getBundleURL("16Zb4")+"main.module.6bc7d51b.css",e.styled((r=o)&&r.__esModule?r.default:r);
|
|
2
|
+
//# sourceMappingURL=type-selector.0035ef7d.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"mappings":"A,O,M,mB,A,O,Y,A,O,qB,A,O,kD,C,I,E,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,EEAA,EAAiB,AAAA,EAAA,SAAA,YAAA,CAA6C,SAAW,4CDY/D,AAAA,EAAM,MAAM,C,C,EAAC,I,E,U,C,E,O,C","sources":["<anon>","packages/feedback-components/src/feedback/type-selector/index.ts","../../../../.yarn/berry/cache/@parcel-runtime-js-npm-2.13.3-f44fec8492-10c0.zip/node_modules/@parcel/runtime-js/lib/runtime-d2adba764022ad20.js"],"sourcesContent":["import $16Zb4$macrostrathyper from \"@macrostrat/hyper\";\nimport $16Zb4$classnames from \"classnames\";\nimport {Omnibar as $16Zb4$Omnibar} from \"@blueprintjs/select\";\nimport \"@blueprintjs/select/lib/css/blueprint-select.css\";\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[\"parcelRequire94c2\"];\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[\"parcelRequire94c2\"] = parcelRequire;\n}\n\nvar parcelRegister = parcelRequire.register;\n/**\n * Entity type selector\n */ var $40e2e1c28f0230c6$exports = {};\n\n$40e2e1c28f0230c6$exports = (parcelRequire(\"daZiC\")).getBundleURL('16Zb4') + \"main.module.6bc7d51b.css\";\n\n\n\n\n\n\nconst $48d99b99dde7627d$var$h = (0, $16Zb4$macrostrathyper).styled((0, (/*@__PURE__*/$parcel$interopDefault($40e2e1c28f0230c6$exports))));\nconst $48d99b99dde7627d$var$TagListItem = (props)=>{\n /** Render a tag for the omnibox list */ let { active: active, selected: selected, className: className, onSelect: onSelect, item: item, children: children } = props;\n className = (0, $16Zb4$classnames)({\n active: active,\n selected: selected\n }, className);\n const onClick = ()=>onSelect(item);\n return $48d99b99dde7627d$var$h(\"div.item-container\", {\n key: item.id,\n className: className,\n onClick: onClick\n }, [\n $48d99b99dde7627d$var$h(\"div.swatch\", {\n style: {\n backgroundColor: item.color\n }\n }),\n $48d99b99dde7627d$var$h(\"div.item\", {}, item.name)\n ]);\n};\nfunction $48d99b99dde7627d$export$d8660660a589068c(props) {\n /** A general omnibox for annotation types */ const { onSelectItem: onSelectItem, items: items, isOpen: isOpen, onClose: onClose } = props;\n return $48d99b99dde7627d$var$h((0, $16Zb4$Omnibar), {\n onItemSelect: onSelectItem,\n items: items,\n resetOnSelect: false,\n isOpen: isOpen,\n onClose: onClose,\n itemRenderer (item, { handleClick: handleClick, modifiers: modifiers }) {\n return $48d99b99dde7627d$var$h($48d99b99dde7627d$var$TagListItem, {\n key: item.id,\n item: item,\n onSelect: handleClick,\n active: modifiers.active,\n selected: modifiers.active\n });\n }\n });\n}\n\n\n//# sourceMappingURL=type-selector.0035ef7d.js.map\n","/**\n * Entity type selector\n */\n\nimport styles from \"./main.module.sass\";\nimport hyper from \"@macrostrat/hyper\";\n\nimport classNames from \"classnames\";\nimport React from \"react\";\nimport { Omnibar, OmnibarProps } from \"@blueprintjs/select\";\nimport \"@blueprintjs/select/lib/css/blueprint-select.css\";\n\nconst h = hyper.styled(styles);\n\ninterface TagItemProps<T> {\n selected: boolean;\n active: boolean;\n className?: string;\n item: T;\n\n onSelect(t: T): void;\n\n children?: React.ReactElement;\n}\n\nconst TagListItem: React.ComponentType<TagItemProps<T>> = (props) => {\n /** Render a tag for the omnibox list */\n let { active, selected, className, onSelect, item, children } = props;\n className = classNames({ active, selected }, className);\n const onClick = () => onSelect(item);\n\n return h(\n \"div.item-container\",\n {\n key: item.id,\n className,\n onClick,\n },\n [\n h(\"div.swatch\", { style: { backgroundColor: item.color } }),\n h(\"div.item\", {}, item.name),\n ]\n );\n};\n\ntype BoxLifecycleProps<T> = Pick<OmnibarProps<T>, \"onClose\" | \"isOpen\">;\n\ninterface OmniboxProps<T> extends BoxLifecycleProps<T> {\n items: T[];\n selectedItem: T;\n onSelectItem: (t: T) => void;\n listItemComponent?: React.ComponentType<TagItemProps<T>>;\n}\n\nexport function OmniboxSelector<T>(props: OmniboxProps<T>) {\n /** A general omnibox for annotation types */\n const { onSelectItem, items, isOpen, onClose } = props;\n\n return h(Omnibar, {\n onItemSelect: onSelectItem,\n items,\n resetOnSelect: false,\n isOpen,\n onClose,\n itemRenderer(item: T, { handleClick, modifiers }) {\n return h(TagListItem, {\n key: item.id,\n item,\n onSelect: handleClick,\n active: modifiers.active,\n selected: modifiers.active,\n });\n },\n });\n}\n","module.exports = require('./helpers/bundle-url').getBundleURL('16Zb4') + \"main.module.6bc7d51b.css\";"],"names":["$16Zb4$macrostrathyper","a","$parcel$global","globalThis","$parcel$modules","$parcel$inits","parcelRequire","id","exports","init","module","call","err","Error","code","register","$40e2e1c28f0230c6$exports","getBundleURL","styled","__esModule","default"],"version":3,"file":"type-selector.0035ef7d.js.map","sourceRoot":"../../../../"}
|
package/package.json
CHANGED
|
@@ -1,11 +1,31 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@macrostrat/feedback-components",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.1",
|
|
4
4
|
"description": "",
|
|
5
5
|
"source": "src/index.ts",
|
|
6
6
|
"type": "module",
|
|
7
|
-
"main": "dist/index.js",
|
|
8
|
-
"types": "dist/index.d.ts",
|
|
7
|
+
"main": "dist/esm/index.js",
|
|
8
|
+
"types": "dist/esm/index.d.ts",
|
|
9
|
+
"node": "dist/node/index.js",
|
|
10
|
+
"exports": {
|
|
11
|
+
".": {
|
|
12
|
+
"source": "./src/index.ts",
|
|
13
|
+
"import": "./dist/esm/index.js",
|
|
14
|
+
"types": "./dist/esm/index.d.ts",
|
|
15
|
+
"node": "./dist/node/index.js"
|
|
16
|
+
}
|
|
17
|
+
},
|
|
18
|
+
"targets": {
|
|
19
|
+
"node": {
|
|
20
|
+
"engines": {
|
|
21
|
+
"node": ">=14"
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
},
|
|
25
|
+
"files": [
|
|
26
|
+
"src",
|
|
27
|
+
"dist"
|
|
28
|
+
],
|
|
9
29
|
"scripts": {
|
|
10
30
|
"build": "rm -rf dist && parcel build"
|
|
11
31
|
},
|
|
@@ -17,7 +37,7 @@
|
|
|
17
37
|
"@blueprintjs/select": "^5.3.10",
|
|
18
38
|
"@macrostrat/color-utils": "^1.0.1",
|
|
19
39
|
"@macrostrat/hyper": "^3.0.6",
|
|
20
|
-
"@macrostrat/ui-components": "^4.1.
|
|
40
|
+
"@macrostrat/ui-components": "^4.1.1",
|
|
21
41
|
"@xyflow/react": "^12.3.6",
|
|
22
42
|
"classnames": "^2.5.1",
|
|
23
43
|
"d3-force": "^3.0.0",
|
|
@@ -26,13 +46,6 @@
|
|
|
26
46
|
"react-text-annotate-blend": "^1.2.0",
|
|
27
47
|
"use-element-dimensions": "^2.1.3"
|
|
28
48
|
},
|
|
29
|
-
"exports": {
|
|
30
|
-
".": {
|
|
31
|
-
"source": "./src/index.ts",
|
|
32
|
-
"import": "./dist/index.js",
|
|
33
|
-
"types": "./dist/index.d.ts"
|
|
34
|
-
}
|
|
35
|
-
},
|
|
36
49
|
"peerDependencies": {
|
|
37
50
|
"react": "^17.0.2||^18",
|
|
38
51
|
"react-dom": "^17.0.2||^18"
|
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
import type { Meta, StoryObj } from "@storybook/react";
|
|
2
|
-
|
|
3
|
-
import { FeedbackComponent } from "../src";
|
|
4
|
-
import { data, entityTypes } from "./test-data";
|
|
5
|
-
import h from "@macrostrat/hyper";
|
|
6
|
-
|
|
7
|
-
function FeedbackInterface({ data, types }) {
|
|
8
|
-
const { entities = [], paragraph_text, model, model_run, source_text } = data;
|
|
9
|
-
|
|
10
|
-
return h(FeedbackComponent, {
|
|
11
|
-
entities,
|
|
12
|
-
text: paragraph_text,
|
|
13
|
-
model,
|
|
14
|
-
entityTypes: createMap(types),
|
|
15
|
-
sourceTextID: source_text,
|
|
16
|
-
runID: model_run,
|
|
17
|
-
});
|
|
18
|
-
}
|
|
19
|
-
// More on default export: https://storybook.js.org/docs/react/writing-stories/introduction#default-export
|
|
20
|
-
const meta: Meta<any> = {
|
|
21
|
-
title: "Text extractions/Text extraction",
|
|
22
|
-
component: FeedbackInterface,
|
|
23
|
-
};
|
|
24
|
-
|
|
25
|
-
export default meta;
|
|
26
|
-
|
|
27
|
-
export const Primary: StoryObj<{}> = {
|
|
28
|
-
args: {
|
|
29
|
-
data,
|
|
30
|
-
types: entityTypes,
|
|
31
|
-
},
|
|
32
|
-
};
|
|
33
|
-
|
|
34
|
-
function createMap(arr) {
|
|
35
|
-
const out = new Map();
|
|
36
|
-
for (const d of arr) {
|
|
37
|
-
out.set(d.id, d);
|
|
38
|
-
}
|
|
39
|
-
return out;
|
|
40
|
-
}
|
package/stories/test-data.ts
DELETED
|
@@ -1,330 +0,0 @@
|
|
|
1
|
-
export const data = {
|
|
2
|
-
entities: [
|
|
3
|
-
{
|
|
4
|
-
id: 433864,
|
|
5
|
-
name: "Serpent",
|
|
6
|
-
type: {
|
|
7
|
-
id: 1,
|
|
8
|
-
name: "strat_name",
|
|
9
|
-
description: "Test 2",
|
|
10
|
-
color: "rgb(115, 66, 255)",
|
|
11
|
-
},
|
|
12
|
-
match: {
|
|
13
|
-
name: "Serpent",
|
|
14
|
-
rank: "Fm",
|
|
15
|
-
strat_name_id: 5894,
|
|
16
|
-
},
|
|
17
|
-
indices: [368, 375],
|
|
18
|
-
children: [
|
|
19
|
-
{
|
|
20
|
-
id: 433865,
|
|
21
|
-
name: "Sandstone",
|
|
22
|
-
type: {
|
|
23
|
-
id: 2,
|
|
24
|
-
name: "lith",
|
|
25
|
-
description: "Test",
|
|
26
|
-
color: "rgb(107, 255, 91)",
|
|
27
|
-
},
|
|
28
|
-
match: {
|
|
29
|
-
name: "sandstone",
|
|
30
|
-
color: "#FFD500",
|
|
31
|
-
lith_id: 10,
|
|
32
|
-
},
|
|
33
|
-
indices: [78, 87],
|
|
34
|
-
},
|
|
35
|
-
],
|
|
36
|
-
},
|
|
37
|
-
{
|
|
38
|
-
id: 433886,
|
|
39
|
-
name: "Serpent Formation CAssHYAP",
|
|
40
|
-
type: {
|
|
41
|
-
id: 44,
|
|
42
|
-
name: "strat_proper_noun",
|
|
43
|
-
description: null,
|
|
44
|
-
color: "rgb(255, 255, 255)",
|
|
45
|
-
},
|
|
46
|
-
indices: [368, 394],
|
|
47
|
-
},
|
|
48
|
-
{
|
|
49
|
-
id: 433880,
|
|
50
|
-
name: "muddy sandstone",
|
|
51
|
-
type: {
|
|
52
|
-
id: 1,
|
|
53
|
-
name: "strat_name",
|
|
54
|
-
description: "Test 2",
|
|
55
|
-
color: "rgb(115, 66, 255)",
|
|
56
|
-
},
|
|
57
|
-
match: {
|
|
58
|
-
name: "Muddy Sandstone",
|
|
59
|
-
rank: "Fm",
|
|
60
|
-
concept_id: 9450,
|
|
61
|
-
strat_name_id: 72335,
|
|
62
|
-
},
|
|
63
|
-
indices: [72, 87],
|
|
64
|
-
},
|
|
65
|
-
{
|
|
66
|
-
id: 433881,
|
|
67
|
-
name: "S. M. CASSHYAP",
|
|
68
|
-
type: {
|
|
69
|
-
id: 44,
|
|
70
|
-
name: "strat_proper_noun",
|
|
71
|
-
description: null,
|
|
72
|
-
color: "rgb(255, 255, 255)",
|
|
73
|
-
},
|
|
74
|
-
indices: [147, 161],
|
|
75
|
-
},
|
|
76
|
-
{
|
|
77
|
-
id: 433882,
|
|
78
|
-
name: "Cobalt",
|
|
79
|
-
type: {
|
|
80
|
-
id: 44,
|
|
81
|
-
name: "strat_proper_noun",
|
|
82
|
-
description: null,
|
|
83
|
-
color: "rgb(255, 255, 255)",
|
|
84
|
-
},
|
|
85
|
-
indices: [169, 175],
|
|
86
|
-
},
|
|
87
|
-
{
|
|
88
|
-
id: 433883,
|
|
89
|
-
name: "EspanolaWillisville",
|
|
90
|
-
type: {
|
|
91
|
-
id: 44,
|
|
92
|
-
name: "strat_proper_noun",
|
|
93
|
-
description: null,
|
|
94
|
-
color: "rgb(255, 255, 255)",
|
|
95
|
-
},
|
|
96
|
-
indices: [231, 250],
|
|
97
|
-
},
|
|
98
|
-
{
|
|
99
|
-
id: 433888,
|
|
100
|
-
name: "Espanola Formation Fig.2",
|
|
101
|
-
type: {
|
|
102
|
-
id: 44,
|
|
103
|
-
name: "strat_proper_noun",
|
|
104
|
-
description: null,
|
|
105
|
-
color: "rgb(255, 255, 255)",
|
|
106
|
-
},
|
|
107
|
-
indices: [526, 550],
|
|
108
|
-
},
|
|
109
|
-
{
|
|
110
|
-
id: 433884,
|
|
111
|
-
name: "Quirke Elliot Lake",
|
|
112
|
-
type: {
|
|
113
|
-
id: 44,
|
|
114
|
-
name: "strat_proper_noun",
|
|
115
|
-
description: null,
|
|
116
|
-
color: "rgb(255, 255, 255)",
|
|
117
|
-
},
|
|
118
|
-
indices: [267, 285],
|
|
119
|
-
},
|
|
120
|
-
{
|
|
121
|
-
id: 433885,
|
|
122
|
-
name: "RoscoE",
|
|
123
|
-
type: {
|
|
124
|
-
id: 44,
|
|
125
|
-
name: "strat_proper_noun",
|
|
126
|
-
description: null,
|
|
127
|
-
color: "rgb(255, 255, 255)",
|
|
128
|
-
},
|
|
129
|
-
indices: [291, 297],
|
|
130
|
-
},
|
|
131
|
-
{
|
|
132
|
-
id: 433887,
|
|
133
|
-
name: "Gowganda Formation",
|
|
134
|
-
type: {
|
|
135
|
-
id: 44,
|
|
136
|
-
name: "strat_proper_noun",
|
|
137
|
-
description: null,
|
|
138
|
-
color: "rgb(255, 255, 255)",
|
|
139
|
-
},
|
|
140
|
-
indices: [407, 425],
|
|
141
|
-
},
|
|
142
|
-
{
|
|
143
|
-
id: 433866,
|
|
144
|
-
name: "Bruce Formation",
|
|
145
|
-
type: {
|
|
146
|
-
id: 1,
|
|
147
|
-
name: "strat_name",
|
|
148
|
-
description: "Test 2",
|
|
149
|
-
color: "rgb(179, 116, 255)",
|
|
150
|
-
},
|
|
151
|
-
indices: [587, 602],
|
|
152
|
-
children: [
|
|
153
|
-
{
|
|
154
|
-
id: 433867,
|
|
155
|
-
name: "structure",
|
|
156
|
-
type: {
|
|
157
|
-
id: 2,
|
|
158
|
-
name: "lith",
|
|
159
|
-
description: "Test",
|
|
160
|
-
color: "rgb(165, 255, 142)",
|
|
161
|
-
},
|
|
162
|
-
indices: [656, 665],
|
|
163
|
-
children: [
|
|
164
|
-
{
|
|
165
|
-
id: 433869,
|
|
166
|
-
name: "sedimentary",
|
|
167
|
-
type: {
|
|
168
|
-
id: 3,
|
|
169
|
-
name: "lith_att",
|
|
170
|
-
description: "Test",
|
|
171
|
-
color: "rgb(255, 144, 255)",
|
|
172
|
-
},
|
|
173
|
-
indices: [644, 655],
|
|
174
|
-
},
|
|
175
|
-
{
|
|
176
|
-
id: 433873,
|
|
177
|
-
name: "muddy",
|
|
178
|
-
type: {
|
|
179
|
-
id: 3,
|
|
180
|
-
name: "lith_att",
|
|
181
|
-
description: "Test",
|
|
182
|
-
color: "rgb(216, 93, 231)",
|
|
183
|
-
},
|
|
184
|
-
match: {
|
|
185
|
-
name: "muddy",
|
|
186
|
-
lith_att_id: 154,
|
|
187
|
-
},
|
|
188
|
-
indices: [72, 77],
|
|
189
|
-
},
|
|
190
|
-
{
|
|
191
|
-
id: 433875,
|
|
192
|
-
name: "massive",
|
|
193
|
-
type: {
|
|
194
|
-
id: 3,
|
|
195
|
-
name: "lith_att",
|
|
196
|
-
description: "Test",
|
|
197
|
-
color: "rgb(216, 93, 231)",
|
|
198
|
-
},
|
|
199
|
-
match: {
|
|
200
|
-
name: "massive ",
|
|
201
|
-
lith_att_id: 9,
|
|
202
|
-
},
|
|
203
|
-
indices: [41, 48],
|
|
204
|
-
},
|
|
205
|
-
{
|
|
206
|
-
id: 433871,
|
|
207
|
-
name: "Conglomeratic",
|
|
208
|
-
type: {
|
|
209
|
-
id: 3,
|
|
210
|
-
name: "lith_att",
|
|
211
|
-
description: "Test",
|
|
212
|
-
color: "rgb(216, 93, 231)",
|
|
213
|
-
},
|
|
214
|
-
match: {
|
|
215
|
-
name: "conglomeratic",
|
|
216
|
-
lith_att_id: 67,
|
|
217
|
-
},
|
|
218
|
-
indices: [58, 71],
|
|
219
|
-
},
|
|
220
|
-
],
|
|
221
|
-
},
|
|
222
|
-
],
|
|
223
|
-
},
|
|
224
|
-
{
|
|
225
|
-
id: 433876,
|
|
226
|
-
name: "The Gowganda Formation in this area",
|
|
227
|
-
type: {
|
|
228
|
-
id: 1,
|
|
229
|
-
name: "strat_name",
|
|
230
|
-
description: "Test 2",
|
|
231
|
-
color: "rgb(179, 116, 255)",
|
|
232
|
-
},
|
|
233
|
-
indices: [403, 438],
|
|
234
|
-
children: [
|
|
235
|
-
{
|
|
236
|
-
id: 433877,
|
|
237
|
-
name: "structures",
|
|
238
|
-
type: {
|
|
239
|
-
id: 2,
|
|
240
|
-
name: "lith",
|
|
241
|
-
description: "Test",
|
|
242
|
-
color: "rgb(165, 255, 142)",
|
|
243
|
-
},
|
|
244
|
-
indices: [713, 723],
|
|
245
|
-
children: [
|
|
246
|
-
{
|
|
247
|
-
id: 433869,
|
|
248
|
-
name: "sedimentary",
|
|
249
|
-
type: {
|
|
250
|
-
id: 3,
|
|
251
|
-
name: "lith_att",
|
|
252
|
-
description: "Test",
|
|
253
|
-
color: "rgb(255, 144, 255)",
|
|
254
|
-
},
|
|
255
|
-
indices: [644, 655],
|
|
256
|
-
},
|
|
257
|
-
],
|
|
258
|
-
},
|
|
259
|
-
],
|
|
260
|
-
},
|
|
261
|
-
],
|
|
262
|
-
paragraph_text:
|
|
263
|
-
"Fig.4. X ray radiograph of a specimen of massive Gowganda conglomeratic muddy sandstone. A sandstone interbed reveals ripple cross laminations.\n14 S. M. CASSHYAP in the Cobalt area THOMSON, 1957. Most evidence suggests that in the EspanolaWillisville area, as in the Quirke Elliot Lake area RoscoE, 1957, no erosional break occurred after deposition of the underlying Serpent Formation CAssHYAP, 1966b.\nThe Gowganda Formation in this area lies conformably abovethe Serpent Sandstone which in turn lies gradationally above the Espanola Formation Fig.2.\nConglomeratic muddy deposit of the Bruce Formation is essentially massive and does not show sedimentary structure of any kind. However, a variety of sedimentary structures occur in the various units of the Gowganda Formation.",
|
|
264
|
-
model_id: 5321,
|
|
265
|
-
version_id: 20504,
|
|
266
|
-
model: {
|
|
267
|
-
id: 5321,
|
|
268
|
-
name: "tree_based_span_bert",
|
|
269
|
-
description: null,
|
|
270
|
-
url: null,
|
|
271
|
-
first_run: "2024-10-14T14:39:49.425489",
|
|
272
|
-
last_run: "2024-11-18T18:33:45.320584",
|
|
273
|
-
n_runs: 7510,
|
|
274
|
-
n_entities: 96301,
|
|
275
|
-
n_matches: 16918,
|
|
276
|
-
n_strat_names: 4181,
|
|
277
|
-
},
|
|
278
|
-
};
|
|
279
|
-
|
|
280
|
-
export const entityTypes = [
|
|
281
|
-
{
|
|
282
|
-
id: 2,
|
|
283
|
-
name: "lith",
|
|
284
|
-
description: "Test",
|
|
285
|
-
color: "rgb(33,208,35)",
|
|
286
|
-
},
|
|
287
|
-
{
|
|
288
|
-
id: 3,
|
|
289
|
-
name: "lith_att",
|
|
290
|
-
description: "Test",
|
|
291
|
-
color: "rgb(164,38,180)",
|
|
292
|
-
},
|
|
293
|
-
{
|
|
294
|
-
id: 1,
|
|
295
|
-
name: "strat_name",
|
|
296
|
-
description: "Test 2",
|
|
297
|
-
color: "rgb(13,0,255)",
|
|
298
|
-
},
|
|
299
|
-
{
|
|
300
|
-
id: 10,
|
|
301
|
-
name: "location",
|
|
302
|
-
description: "A geographical location or area",
|
|
303
|
-
color: null,
|
|
304
|
-
},
|
|
305
|
-
{
|
|
306
|
-
id: 4,
|
|
307
|
-
name: "noun",
|
|
308
|
-
description: "A general noun of unknown type",
|
|
309
|
-
color: "rgb(113,112,217)",
|
|
310
|
-
},
|
|
311
|
-
{
|
|
312
|
-
id: 8,
|
|
313
|
-
name: "form",
|
|
314
|
-
description:
|
|
315
|
-
"The form in which a lithology/rock body is expressed (e.g., boulders, lenses, interbedded packages, etc.)",
|
|
316
|
-
color: "rgb(173,225,0)",
|
|
317
|
-
},
|
|
318
|
-
{
|
|
319
|
-
id: 11,
|
|
320
|
-
name: "citation",
|
|
321
|
-
description: "Paper citation",
|
|
322
|
-
color: "rgb(190,156,156)",
|
|
323
|
-
},
|
|
324
|
-
{
|
|
325
|
-
id: 44,
|
|
326
|
-
name: "strat_proper_noun",
|
|
327
|
-
description: null,
|
|
328
|
-
color: null,
|
|
329
|
-
},
|
|
330
|
-
];
|
|
File without changes
|
|
File without changes
|