@macrostrat/feedback-components 2.0.0 → 2.0.2
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 +17 -0
- package/dist/extractions/index.cjs +5 -2
- package/dist/extractions/index.cjs.map +1 -1
- package/dist/extractions/index.js +2 -2
- package/dist/extractions/index.js.map +1 -1
- package/dist/extractions/main.module.sass.cjs +6 -1
- package/dist/extractions/main.module.sass.cjs.map +1 -1
- package/dist/extractions/main.module.sass.js +4 -1
- package/dist/extractions/main.module.sass.js.map +1 -1
- package/dist/feedback/edit-state.cjs +6 -4
- package/dist/feedback/edit-state.cjs.map +1 -1
- package/dist/feedback/feedback.module.sass.cjs +6 -1
- package/dist/feedback/feedback.module.sass.cjs.map +1 -1
- package/dist/feedback/feedback.module.sass.js +4 -1
- package/dist/feedback/feedback.module.sass.js.map +1 -1
- package/dist/feedback/graph.cjs +3 -1
- package/dist/feedback/graph.cjs.map +1 -1
- package/dist/feedback/graph.js +2 -2
- package/dist/feedback/graph.js.map +1 -1
- package/dist/feedback/index.cjs +6 -3
- package/dist/feedback/index.cjs.map +1 -1
- package/dist/feedback/index.js +2 -2
- package/dist/feedback/index.js.map +1 -1
- package/dist/feedback/matches.cjs +3 -1
- package/dist/feedback/matches.cjs.map +1 -1
- package/dist/feedback/matches.js +2 -2
- package/dist/feedback/matches.js.map +1 -1
- package/dist/feedback/node.cjs +4 -3
- package/dist/feedback/node.cjs.map +1 -1
- package/dist/feedback/node.js +2 -2
- package/dist/feedback/node.js.map +1 -1
- package/dist/feedback/text-visualizer.cjs +3 -1
- package/dist/feedback/text-visualizer.cjs.map +1 -1
- package/dist/feedback/text-visualizer.js +2 -2
- package/dist/feedback/text-visualizer.js.map +1 -1
- package/dist/feedback/type-selector/index.cjs +5 -2
- package/dist/feedback/type-selector/index.cjs.map +1 -1
- package/dist/feedback/type-selector/index.js +2 -2
- package/dist/feedback/type-selector/index.js.map +1 -1
- package/dist/feedback/type-selector/main.module.sass.cjs +6 -1
- package/dist/feedback/type-selector/main.module.sass.cjs.map +1 -1
- package/dist/feedback/type-selector/main.module.sass.js +4 -1
- package/dist/feedback/type-selector/main.module.sass.js.map +1 -1
- package/dist/feedback/typelist.cjs +3 -1
- package/dist/feedback/typelist.cjs.map +1 -1
- package/dist/feedback/typelist.js +2 -2
- package/dist/feedback/typelist.js.map +1 -1
- package/dist/feedback-components.css +2 -2
- package/package.json +18 -13
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"text-visualizer.js","sources":["../../src/feedback/text-visualizer.ts"],"sourcesContent":["import { AnnotateBlendTag } from \"react-text-annotate-blend\";\nimport { InternalEntity } from \"./types\";\nimport { TreeDispatch } from \"./edit-state\";\nimport styles from \"./feedback.module.sass\";\nimport hyper from \"@macrostrat/hyper\";\nimport { buildHighlights, getTagStyle } from \"../extractions\";\nimport { Highlight } from \"../extractions/types\";\nimport { useEffect, useRef } from \"react\";\nimport { Popover } from \"@blueprintjs/core\";\nimport { MatchTag } from \"./matches\";\n\nconst h = hyper.styled(styles);\n\nexport interface FeedbackTextProps {\n text: string;\n selectedNodes: number[];\n nodes: InternalEntity[];\n updateNodes: (nodes: string[]) => void;\n dispatch: TreeDispatch;\n lineHeight: string;\n allowOverlap?: boolean;\n matchLinks?: {\n lithology: string;\n strat_name: string;\n lith_att: string;\n };\n viewOnly?: boolean;\n}\n\nfunction buildTags(\n highlights: Highlight[],\n selectedNodes: number[],\n): AnnotateBlendTag[] {\n let tags: AnnotateBlendTag[] = [];\n // If entity ID has already been seen, don't add it again\n const entities = new Set<number>();\n\n for (const highlight of highlights) {\n // Don't add multiply-linked entities multiple times\n if (entities.has(highlight.id)) continue;\n\n const highlighted = isHighlighted(highlight, selectedNodes);\n const active = isActive(highlight, selectedNodes);\n const tagStyle = getTagStyle(highlight.backgroundColor, {\n highlighted,\n active,\n });\n\n const tag = {\n color: tagStyle.color,\n tagStyle: {\n display: \"none\",\n },\n markStyle: {\n backgroundColor: tagStyle.backgroundColor,\n },\n ...highlight,\n backgroundColor: tagStyle.backgroundColor,\n };\n\n tags.push(tag);\n\n entities.add(highlight.id);\n }\n\n return tags;\n}\n\nfunction isActive(tag: Highlight, selectedNodes: number[]) {\n return selectedNodes.includes(tag.id);\n}\n\nfunction isHighlighted(tag: Highlight, selectedNodes: number[]) {\n if (selectedNodes.length === 0) return true;\n return (\n (selectedNodes.includes(tag.id) ||\n tag.parents?.some((d) => selectedNodes.includes(d))) ??\n false\n );\n}\n\nexport function FeedbackText(props: FeedbackTextProps) {\n // Convert input to tags\n const {\n text,\n selectedNodes,\n nodes,\n dispatch,\n allowOverlap,\n matchLinks,\n viewOnly,\n } = props;\n const allTags: AnnotateBlendTag[] = buildTags(\n buildHighlights(nodes, null),\n selectedNodes,\n );\n\n return h(\n \"div.feedback-text-wrapper\",\n {\n tabIndex: 0,\n onKeyDown: (e) => {\n if (e.key === \"Backspace\") {\n dispatch({\n type: \"delete-node\",\n payload: { ids: selectedNodes },\n });\n }\n },\n },\n h(HighlightedText, {\n text,\n allTags,\n allowOverlap,\n dispatch,\n selectedNodes,\n viewOnly,\n matchLinks,\n }),\n );\n}\n\nfunction createTagFromSelection({\n container,\n}: {\n container: HTMLElement | null;\n}) {\n const selection = window.getSelection();\n if (\n !selection ||\n selection.isCollapsed ||\n selection.rangeCount === 0 ||\n !container\n )\n return null;\n\n const range = selection.getRangeAt(0);\n\n if (\n !container.contains(range.startContainer) ||\n !container.contains(range.endContainer)\n ) {\n return null;\n }\n\n const preRange = document.createRange();\n preRange.setStart(container, 0);\n preRange.setEnd(range.startContainer, range.startOffset);\n const start = preRange.toString().length;\n\n const selectedText = range.toString();\n const end = start + selectedText.length;\n\n return {\n start,\n end,\n text: selectedText,\n };\n}\n\nfunction addTag({ tag, dispatch, text, allTags, allowOverlap }) {\n let { start, end } = tag;\n // snap to text\n if (text[end - 1] != \" \") {\n // double clicking word overselects by one, shouldn't increase to next word\n while (start > 0 && /\\w/.test(text[start - 1])) {\n start--;\n }\n while (end < text.length && /\\w/.test(text[end])) {\n end++;\n }\n }\n\n let payload = { start, end, text: text.slice(start, end) };\n\n if (payload.text.trim() === \"\") {\n console.log(\"Blank tag found, ignoring\");\n return;\n }\n\n const duplicate = allTags.find(\n (t) =>\n t.start === payload.start &&\n (t.end === payload.end || t.end === payload.end - 1),\n );\n\n if (duplicate) {\n console.log(\"Duplicate tag found, ignoring\");\n return;\n }\n\n if (payload.text.endsWith(\" \")) {\n payload.text = payload.text.slice(0, -1);\n payload.end -= 1;\n }\n\n const inside = allTags.some(\n (t) => t.start <= payload.start && t.end >= payload.end,\n );\n\n const overlap = allTags.some(\n (t) => t.start < payload.end && t.end > payload.start,\n );\n\n if ((inside || overlap) && !allowOverlap) {\n console.log(\"Tag is inside another tag, ignoring\");\n return;\n }\n\n dispatch({ type: \"create-node\", payload });\n}\n\nfunction nestHighlights(text: string, tags: AnnotateBlendTag[]) {\n const events: Array<{\n pos: number;\n type: \"start\" | \"end\";\n tag: AnnotateBlendTag;\n }> = [];\n\n for (const tag of tags) {\n events.push({ pos: tag.start, type: \"start\", tag });\n events.push({ pos: tag.end, type: \"end\", tag });\n }\n\n events.sort((a, b) => {\n if (a.pos !== b.pos) return a.pos - b.pos;\n if (a.type === \"end\" && b.type === \"start\") return -1;\n if (a.type === \"start\" && b.type === \"end\") return 1;\n return 0;\n });\n\n const root = { children: [], textStart: 0 };\n const stack = [root];\n let lastPos = 0;\n\n for (const { pos, type, tag } of events) {\n const parent = stack[stack.length - 1];\n\n if (pos > lastPos) {\n const slice = text.slice(lastPos, pos);\n parent.children.push(slice);\n }\n\n if (type === \"start\") {\n const newNode = { tag, children: [], textStart: pos };\n parent.children.push(newNode);\n stack.push(newNode);\n } else {\n stack.pop();\n }\n\n lastPos = pos;\n }\n\n if (lastPos < text.length) {\n stack[stack.length - 1].children.push(text.slice(lastPos));\n }\n\n return root;\n}\n\nfunction renderNode(\n node: any,\n dispatch: TreeDispatch,\n selectedNodes: number[],\n parentSelected: boolean,\n matchLinks?: {\n lithology: string;\n strat_name: string;\n lith_att: string;\n },\n viewOnly?: boolean,\n): any {\n if (typeof node === \"string\") return node;\n\n const { tag, children } = node;\n const isSelected = selectedNodes?.includes(tag.id);\n const showBorder = selectedNodes.length === 0 || isSelected;\n const match = tag.match;\n\n const style = {\n ...tag,\n zIndex: parentSelected ? -1 : 1,\n border:\n \"1px solid \" +\n (match != undefined && matchLinks\n ? \"orange\"\n : showBorder\n ? tag.color\n : \"transparent\"),\n margin: \"-1px\",\n };\n\n let moveText = [];\n if (isSelected) {\n for (const key in children) {\n if (Object.prototype.hasOwnProperty.call(children, key)) {\n const child = children[key];\n if (child?.tag) {\n moveText.push(child.children[0]);\n } else {\n moveText.push(child);\n }\n }\n }\n }\n\n const tagComponent = h(\n \"span\",\n {\n onMouseEnter: (e: MouseEvent) => {\n e.stopPropagation();\n },\n className: \"highlight\" + (!viewOnly || match ? \" clickable\" : \"\"),\n style,\n onClick: (e: MouseEvent) => {\n e.stopPropagation();\n if (\n e.ctrlKey ||\n e.metaKey ||\n (selectedNodes[0] === tag.id && selectedNodes.length === 1)\n ) {\n // Toggle selection on ctrl/cmd click or when node is only selected node\n e.stopPropagation();\n dispatch({\n type: \"toggle-node-selected\",\n payload: { ids: [tag.id] },\n });\n } else if (e.shiftKey && selectedNodes.length > 0) {\n // Select range from last selected node to this one\n const lastSelected = selectedNodes[selectedNodes.length - 1];\n\n dispatch({\n type: \"select-range\",\n payload: { ids: [lastSelected, tag.id] },\n });\n } else {\n dispatch({\n type: \"select-node\",\n payload: { ids: [tag.id] },\n });\n }\n },\n },\n isSelected\n ? moveText.flat()\n : children.map((child: any, i: number) =>\n renderNode(\n child,\n dispatch,\n selectedNodes,\n isSelected,\n matchLinks,\n viewOnly,\n ),\n ),\n );\n\n if (viewOnly && match) {\n return h(\n Popover,\n {\n content: h(\"div.match-link\", h(MatchTag, { data: match, matchLinks })),\n interactionKind: \"hover\",\n },\n tagComponent,\n );\n }\n\n return tagComponent;\n}\n\nexport function HighlightedText(props: {\n text: string;\n allTags: AnnotateBlendTag[];\n lineHeight: string;\n allowOverlap?: boolean;\n dispatch: TreeDispatch;\n selectedNodes: number[];\n matchLinks?: {\n lithology: string;\n strat_name: string;\n lith_att: string;\n };\n viewOnly?: boolean;\n}) {\n const {\n text,\n allTags = [],\n dispatch,\n selectedNodes,\n allowOverlap,\n matchLinks,\n viewOnly,\n } = props;\n\n const tree = nestHighlights(text, allTags);\n\n const spanRef = useRef<HTMLSpanElement>(null);\n\n useEffect(() => {\n const handleMouseUp = () => {\n const tag = createTagFromSelection({ container: spanRef.current });\n if (!tag) return;\n addTag({ tag, dispatch, text, allTags, allowOverlap });\n };\n\n document.addEventListener(\"mouseup\", handleMouseUp);\n return () => {\n document.removeEventListener(\"mouseup\", handleMouseUp);\n };\n }, [text, allTags, dispatch, allowOverlap]);\n\n return h(\n \"span\",\n { ref: spanRef },\n tree.children.map((child: any, i: number) =>\n renderNode(child, dispatch, selectedNodes, false, matchLinks, viewOnly),\n ),\n );\n}\n"],"names":[],"mappings":";;;;;;AAWA,MAAM,IAAI,MAAM,OAAO,MAAM;AAkB7B,SAAS,UACP,YACA,eACoB;AACpB,MAAI,OAA2B,CAAA;AAE/B,QAAM,+BAAe,IAAA;AAErB,aAAW,aAAa,YAAY;AAElC,QAAI,SAAS,IAAI,UAAU,EAAE,EAAG;AAEhC,UAAM,cAAc,cAAc,WAAW,aAAa;AAC1D,UAAM,SAAS,SAAS,WAAW,aAAa;AAChD,UAAM,WAAW,YAAY,UAAU,iBAAiB;AAAA,MACtD;AAAA,MACA;AAAA,IAAA,CACD;AAED,UAAM,MAAM;AAAA,MACV,OAAO,SAAS;AAAA,MAChB,UAAU;AAAA,QACR,SAAS;AAAA,MAAA;AAAA,MAEX,WAAW;AAAA,QACT,iBAAiB,SAAS;AAAA,MAAA;AAAA,MAE5B,GAAG;AAAA,MACH,iBAAiB,SAAS;AAAA,IAAA;AAG5B,SAAK,KAAK,GAAG;AAEb,aAAS,IAAI,UAAU,EAAE;AAAA,EAC3B;AAEA,SAAO;AACT;AAEA,SAAS,SAAS,KAAgB,eAAyB;AACzD,SAAO,cAAc,SAAS,IAAI,EAAE;AACtC;AAEA,SAAS,cAAc,KAAgB,eAAyB;AAC9D,MAAI,cAAc,WAAW,EAAG,QAAO;AACvC,UACG,cAAc,SAAS,IAAI,EAAE,KAC5B,IAAI,SAAS,KAAK,CAAC,MAAM,cAAc,SAAS,CAAC,CAAC,MACpD;AAEJ;AAEO,SAAS,aAAa,OAA0B;AAErD,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA,IACE;AACJ,QAAM,UAA8B;AAAA,IAClC,gBAAgB,OAAO,IAAI;AAAA,IAC3B;AAAA,EAAA;AAGF,SAAO;AAAA,IACL;AAAA,IACA;AAAA,MACE,UAAU;AAAA,MACV,WAAW,CAAC,MAAM;AAChB,YAAI,EAAE,QAAQ,aAAa;AACzB,mBAAS;AAAA,YACP,MAAM;AAAA,YACN,SAAS,EAAE,KAAK,cAAA;AAAA,UAAc,CAC/B;AAAA,QACH;AAAA,MACF;AAAA,IAAA;AAAA,IAEF,EAAE,iBAAiB;AAAA,MACjB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IAAA,CACD;AAAA,EAAA;AAEL;AAEA,SAAS,uBAAuB;AAAA,EAC9B;AACF,GAEG;AACD,QAAM,YAAY,OAAO,aAAA;AACzB,MACE,CAAC,aACD,UAAU,eACV,UAAU,eAAe,KACzB,CAAC;AAED,WAAO;AAET,QAAM,QAAQ,UAAU,WAAW,CAAC;AAEpC,MACE,CAAC,UAAU,SAAS,MAAM,cAAc,KACxC,CAAC,UAAU,SAAS,MAAM,YAAY,GACtC;AACA,WAAO;AAAA,EACT;AAEA,QAAM,WAAW,SAAS,YAAA;AAC1B,WAAS,SAAS,WAAW,CAAC;AAC9B,WAAS,OAAO,MAAM,gBAAgB,MAAM,WAAW;AACvD,QAAM,QAAQ,SAAS,SAAA,EAAW;AAElC,QAAM,eAAe,MAAM,SAAA;AAC3B,QAAM,MAAM,QAAQ,aAAa;AAEjC,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA,MAAM;AAAA,EAAA;AAEV;AAEA,SAAS,OAAO,EAAE,KAAK,UAAU,MAAM,SAAS,gBAAgB;AAC9D,MAAI,EAAE,OAAO,IAAA,IAAQ;AAErB,MAAI,KAAK,MAAM,CAAC,KAAK,KAAK;AAExB,WAAO,QAAQ,KAAK,KAAK,KAAK,KAAK,QAAQ,CAAC,CAAC,GAAG;AAC9C;AAAA,IACF;AACA,WAAO,MAAM,KAAK,UAAU,KAAK,KAAK,KAAK,GAAG,CAAC,GAAG;AAChD;AAAA,IACF;AAAA,EACF;AAEA,MAAI,UAAU,EAAE,OAAO,KAAK,MAAM,KAAK,MAAM,OAAO,GAAG,EAAA;AAEvD,MAAI,QAAQ,KAAK,KAAA,MAAW,IAAI;AAC9B,YAAQ,IAAI,2BAA2B;AACvC;AAAA,EACF;AAEA,QAAM,YAAY,QAAQ;AAAA,IACxB,CAAC,MACC,EAAE,UAAU,QAAQ,UACnB,EAAE,QAAQ,QAAQ,OAAO,EAAE,QAAQ,QAAQ,MAAM;AAAA,EAAA;AAGtD,MAAI,WAAW;AACb,YAAQ,IAAI,+BAA+B;AAC3C;AAAA,EACF;AAEA,MAAI,QAAQ,KAAK,SAAS,GAAG,GAAG;AAC9B,YAAQ,OAAO,QAAQ,KAAK,MAAM,GAAG,EAAE;AACvC,YAAQ,OAAO;AAAA,EACjB;AAEA,QAAM,SAAS,QAAQ;AAAA,IACrB,CAAC,MAAM,EAAE,SAAS,QAAQ,SAAS,EAAE,OAAO,QAAQ;AAAA,EAAA;AAGtD,QAAM,UAAU,QAAQ;AAAA,IACtB,CAAC,MAAM,EAAE,QAAQ,QAAQ,OAAO,EAAE,MAAM,QAAQ;AAAA,EAAA;AAGlD,OAAK,UAAU,YAAY,CAAC,cAAc;AACxC,YAAQ,IAAI,qCAAqC;AACjD;AAAA,EACF;AAEA,WAAS,EAAE,MAAM,eAAe,QAAA,CAAS;AAC3C;AAEA,SAAS,eAAe,MAAc,MAA0B;AAC9D,QAAM,SAID,CAAA;AAEL,aAAW,OAAO,MAAM;AACtB,WAAO,KAAK,EAAE,KAAK,IAAI,OAAO,MAAM,SAAS,KAAK;AAClD,WAAO,KAAK,EAAE,KAAK,IAAI,KAAK,MAAM,OAAO,KAAK;AAAA,EAChD;AAEA,SAAO,KAAK,CAAC,GAAG,MAAM;AACpB,QAAI,EAAE,QAAQ,EAAE,IAAK,QAAO,EAAE,MAAM,EAAE;AACtC,QAAI,EAAE,SAAS,SAAS,EAAE,SAAS,QAAS,QAAO;AACnD,QAAI,EAAE,SAAS,WAAW,EAAE,SAAS,MAAO,QAAO;AACnD,WAAO;AAAA,EACT,CAAC;AAED,QAAM,OAAO,EAAE,UAAU,CAAA,GAAI,WAAW,EAAA;AACxC,QAAM,QAAQ,CAAC,IAAI;AACnB,MAAI,UAAU;AAEd,aAAW,EAAE,KAAK,MAAM,IAAA,KAAS,QAAQ;AACvC,UAAM,SAAS,MAAM,MAAM,SAAS,CAAC;AAErC,QAAI,MAAM,SAAS;AACjB,YAAM,QAAQ,KAAK,MAAM,SAAS,GAAG;AACrC,aAAO,SAAS,KAAK,KAAK;AAAA,IAC5B;AAEA,QAAI,SAAS,SAAS;AACpB,YAAM,UAAU,EAAE,KAAK,UAAU,CAAA,GAAI,WAAW,IAAA;AAChD,aAAO,SAAS,KAAK,OAAO;AAC5B,YAAM,KAAK,OAAO;AAAA,IACpB,OAAO;AACL,YAAM,IAAA;AAAA,IACR;AAEA,cAAU;AAAA,EACZ;AAEA,MAAI,UAAU,KAAK,QAAQ;AACzB,UAAM,MAAM,SAAS,CAAC,EAAE,SAAS,KAAK,KAAK,MAAM,OAAO,CAAC;AAAA,EAC3D;AAEA,SAAO;AACT;AAEA,SAAS,WACP,MACA,UACA,eACA,gBACA,YAKA,UACK;AACL,MAAI,OAAO,SAAS,SAAU,QAAO;AAErC,QAAM,EAAE,KAAK,SAAA,IAAa;AAC1B,QAAM,aAAa,eAAe,SAAS,IAAI,EAAE;AACjD,QAAM,aAAa,cAAc,WAAW,KAAK;AACjD,QAAM,QAAQ,IAAI;AAElB,QAAM,QAAQ;AAAA,IACZ,GAAG;AAAA,IACH,QAAQ,iBAAiB,KAAK;AAAA,IAC9B,QACE,gBACC,SAAS,UAAa,aACnB,WACA,aACE,IAAI,QACJ;AAAA,IACR,QAAQ;AAAA,EAAA;AAGV,MAAI,WAAW,CAAA;AACf,MAAI,YAAY;AACd,eAAW,OAAO,UAAU;AAC1B,UAAI,OAAO,UAAU,eAAe,KAAK,UAAU,GAAG,GAAG;AACvD,cAAM,QAAQ,SAAS,GAAG;AAC1B,YAAI,OAAO,KAAK;AACd,mBAAS,KAAK,MAAM,SAAS,CAAC,CAAC;AAAA,QACjC,OAAO;AACL,mBAAS,KAAK,KAAK;AAAA,QACrB;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,QAAM,eAAe;AAAA,IACnB;AAAA,IACA;AAAA,MACE,cAAc,CAAC,MAAkB;AAC/B,UAAE,gBAAA;AAAA,MACJ;AAAA,MACA,WAAW,eAAe,CAAC,YAAY,QAAQ,eAAe;AAAA,MAC9D;AAAA,MACA,SAAS,CAAC,MAAkB;AAC1B,UAAE,gBAAA;AACF,YACE,EAAE,WACF,EAAE,WACD,cAAc,CAAC,MAAM,IAAI,MAAM,cAAc,WAAW,GACzD;AAEA,YAAE,gBAAA;AACF,mBAAS;AAAA,YACP,MAAM;AAAA,YACN,SAAS,EAAE,KAAK,CAAC,IAAI,EAAE,EAAA;AAAA,UAAE,CAC1B;AAAA,QACH,WAAW,EAAE,YAAY,cAAc,SAAS,GAAG;AAEjD,gBAAM,eAAe,cAAc,cAAc,SAAS,CAAC;AAE3D,mBAAS;AAAA,YACP,MAAM;AAAA,YACN,SAAS,EAAE,KAAK,CAAC,cAAc,IAAI,EAAE,EAAA;AAAA,UAAE,CACxC;AAAA,QACH,OAAO;AACL,mBAAS;AAAA,YACP,MAAM;AAAA,YACN,SAAS,EAAE,KAAK,CAAC,IAAI,EAAE,EAAA;AAAA,UAAE,CAC1B;AAAA,QACH;AAAA,MACF;AAAA,IAAA;AAAA,IAEF,aACI,SAAS,KAAA,IACT,SAAS;AAAA,MAAI,CAAC,OAAY,MACxB;AAAA,QACE;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MAAA;AAAA,IACF;AAAA,EACF;AAGN,MAAI,YAAY,OAAO;AACrB,WAAO;AAAA,MACL;AAAA,MACA;AAAA,QACE,SAAS,EAAE,kBAAkB,EAAE,UAAU,EAAE,MAAM,OAAO,WAAA,CAAY,CAAC;AAAA,QACrE,iBAAiB;AAAA,MAAA;AAAA,MAEnB;AAAA,IAAA;AAAA,EAEJ;AAEA,SAAO;AACT;AAEO,SAAS,gBAAgB,OAa7B;AACD,QAAM;AAAA,IACJ;AAAA,IACA,UAAU,CAAA;AAAA,IACV;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA,IACE;AAEJ,QAAM,OAAO,eAAe,MAAM,OAAO;AAEzC,QAAM,UAAU,OAAwB,IAAI;AAE5C,YAAU,MAAM;AACd,UAAM,gBAAgB,MAAM;AAC1B,YAAM,MAAM,uBAAuB,EAAE,WAAW,QAAQ,SAAS;AACjE,UAAI,CAAC,IAAK;AACV,aAAO,EAAE,KAAK,UAAU,MAAM,SAAS,cAAc;AAAA,IACvD;AAEA,aAAS,iBAAiB,WAAW,aAAa;AAClD,WAAO,MAAM;AACX,eAAS,oBAAoB,WAAW,aAAa;AAAA,IACvD;AAAA,EACF,GAAG,CAAC,MAAM,SAAS,UAAU,YAAY,CAAC;AAE1C,SAAO;AAAA,IACL;AAAA,IACA,EAAE,KAAK,QAAA;AAAA,IACP,KAAK,SAAS;AAAA,MAAI,CAAC,OAAY,MAC7B,WAAW,OAAO,UAAU,eAAe,OAAO,YAAY,QAAQ;AAAA,IAAA;AAAA,EACxE;AAEJ;"}
|
|
1
|
+
{"version":3,"file":"text-visualizer.js","sources":["../../src/feedback/text-visualizer.ts"],"sourcesContent":["import { AnnotateBlendTag } from \"react-text-annotate-blend\";\nimport { InternalEntity } from \"./types\";\nimport { TreeDispatch } from \"./edit-state\";\nimport styles from \"./feedback.module.sass\";\nimport hyper from \"@macrostrat/hyper\";\nimport { buildHighlights, getTagStyle } from \"../extractions\";\nimport { Highlight } from \"../extractions/types\";\nimport { useEffect, useRef } from \"react\";\nimport { Popover } from \"@blueprintjs/core\";\nimport { MatchTag } from \"./matches\";\n\nconst h = hyper.styled(styles);\n\nexport interface FeedbackTextProps {\n text: string;\n selectedNodes: number[];\n nodes: InternalEntity[];\n updateNodes: (nodes: string[]) => void;\n dispatch: TreeDispatch;\n lineHeight: string;\n allowOverlap?: boolean;\n matchLinks?: {\n lithology: string;\n strat_name: string;\n lith_att: string;\n };\n viewOnly?: boolean;\n}\n\nfunction buildTags(\n highlights: Highlight[],\n selectedNodes: number[],\n): AnnotateBlendTag[] {\n let tags: AnnotateBlendTag[] = [];\n // If entity ID has already been seen, don't add it again\n const entities = new Set<number>();\n\n for (const highlight of highlights) {\n // Don't add multiply-linked entities multiple times\n if (entities.has(highlight.id)) continue;\n\n const highlighted = isHighlighted(highlight, selectedNodes);\n const active = isActive(highlight, selectedNodes);\n const tagStyle = getTagStyle(highlight.backgroundColor, {\n highlighted,\n active,\n });\n\n const tag = {\n color: tagStyle.color,\n tagStyle: {\n display: \"none\",\n },\n markStyle: {\n backgroundColor: tagStyle.backgroundColor,\n },\n ...highlight,\n backgroundColor: tagStyle.backgroundColor,\n };\n\n tags.push(tag);\n\n entities.add(highlight.id);\n }\n\n return tags;\n}\n\nfunction isActive(tag: Highlight, selectedNodes: number[]) {\n return selectedNodes.includes(tag.id);\n}\n\nfunction isHighlighted(tag: Highlight, selectedNodes: number[]) {\n if (selectedNodes.length === 0) return true;\n return (\n (selectedNodes.includes(tag.id) ||\n tag.parents?.some((d) => selectedNodes.includes(d))) ??\n false\n );\n}\n\nexport function FeedbackText(props: FeedbackTextProps) {\n // Convert input to tags\n const {\n text,\n selectedNodes,\n nodes,\n dispatch,\n allowOverlap,\n matchLinks,\n viewOnly,\n } = props;\n const allTags: AnnotateBlendTag[] = buildTags(\n buildHighlights(nodes, null),\n selectedNodes,\n );\n\n return h(\n \"div.feedback-text-wrapper\",\n {\n tabIndex: 0,\n onKeyDown: (e) => {\n if (e.key === \"Backspace\") {\n dispatch({\n type: \"delete-node\",\n payload: { ids: selectedNodes },\n });\n }\n },\n },\n h(HighlightedText, {\n text,\n allTags,\n allowOverlap,\n dispatch,\n selectedNodes,\n viewOnly,\n matchLinks,\n }),\n );\n}\n\nfunction createTagFromSelection({\n container,\n}: {\n container: HTMLElement | null;\n}) {\n const selection = window.getSelection();\n if (\n !selection ||\n selection.isCollapsed ||\n selection.rangeCount === 0 ||\n !container\n )\n return null;\n\n const range = selection.getRangeAt(0);\n\n if (\n !container.contains(range.startContainer) ||\n !container.contains(range.endContainer)\n ) {\n return null;\n }\n\n const preRange = document.createRange();\n preRange.setStart(container, 0);\n preRange.setEnd(range.startContainer, range.startOffset);\n const start = preRange.toString().length;\n\n const selectedText = range.toString();\n const end = start + selectedText.length;\n\n return {\n start,\n end,\n text: selectedText,\n };\n}\n\nfunction addTag({ tag, dispatch, text, allTags, allowOverlap }) {\n let { start, end } = tag;\n // snap to text\n if (text[end - 1] != \" \") {\n // double clicking word overselects by one, shouldn't increase to next word\n while (start > 0 && /\\w/.test(text[start - 1])) {\n start--;\n }\n while (end < text.length && /\\w/.test(text[end])) {\n end++;\n }\n }\n\n let payload = { start, end, text: text.slice(start, end) };\n\n if (payload.text.trim() === \"\") {\n console.log(\"Blank tag found, ignoring\");\n return;\n }\n\n const duplicate = allTags.find(\n (t) =>\n t.start === payload.start &&\n (t.end === payload.end || t.end === payload.end - 1),\n );\n\n if (duplicate) {\n console.log(\"Duplicate tag found, ignoring\");\n return;\n }\n\n if (payload.text.endsWith(\" \")) {\n payload.text = payload.text.slice(0, -1);\n payload.end -= 1;\n }\n\n const inside = allTags.some(\n (t) => t.start <= payload.start && t.end >= payload.end,\n );\n\n const overlap = allTags.some(\n (t) => t.start < payload.end && t.end > payload.start,\n );\n\n if ((inside || overlap) && !allowOverlap) {\n console.log(\"Tag is inside another tag, ignoring\");\n return;\n }\n\n dispatch({ type: \"create-node\", payload });\n}\n\nfunction nestHighlights(text: string, tags: AnnotateBlendTag[]) {\n const events: Array<{\n pos: number;\n type: \"start\" | \"end\";\n tag: AnnotateBlendTag;\n }> = [];\n\n for (const tag of tags) {\n events.push({ pos: tag.start, type: \"start\", tag });\n events.push({ pos: tag.end, type: \"end\", tag });\n }\n\n events.sort((a, b) => {\n if (a.pos !== b.pos) return a.pos - b.pos;\n if (a.type === \"end\" && b.type === \"start\") return -1;\n if (a.type === \"start\" && b.type === \"end\") return 1;\n return 0;\n });\n\n const root = { children: [], textStart: 0 };\n const stack = [root];\n let lastPos = 0;\n\n for (const { pos, type, tag } of events) {\n const parent = stack[stack.length - 1];\n\n if (pos > lastPos) {\n const slice = text.slice(lastPos, pos);\n parent.children.push(slice);\n }\n\n if (type === \"start\") {\n const newNode = { tag, children: [], textStart: pos };\n parent.children.push(newNode);\n stack.push(newNode);\n } else {\n stack.pop();\n }\n\n lastPos = pos;\n }\n\n if (lastPos < text.length) {\n stack[stack.length - 1].children.push(text.slice(lastPos));\n }\n\n return root;\n}\n\nfunction renderNode(\n node: any,\n dispatch: TreeDispatch,\n selectedNodes: number[],\n parentSelected: boolean,\n matchLinks?: {\n lithology: string;\n strat_name: string;\n lith_att: string;\n },\n viewOnly?: boolean,\n): any {\n if (typeof node === \"string\") return node;\n\n const { tag, children } = node;\n const isSelected = selectedNodes?.includes(tag.id);\n const showBorder = selectedNodes.length === 0 || isSelected;\n const match = tag.match;\n\n const style = {\n ...tag,\n zIndex: parentSelected ? -1 : 1,\n border:\n \"1px solid \" +\n (match != undefined && matchLinks\n ? \"orange\"\n : showBorder\n ? tag.color\n : \"transparent\"),\n margin: \"-1px\",\n };\n\n let moveText = [];\n if (isSelected) {\n for (const key in children) {\n if (Object.prototype.hasOwnProperty.call(children, key)) {\n const child = children[key];\n if (child?.tag) {\n moveText.push(child.children[0]);\n } else {\n moveText.push(child);\n }\n }\n }\n }\n\n const tagComponent = h(\n \"span\",\n {\n onMouseEnter: (e: MouseEvent) => {\n e.stopPropagation();\n },\n className: \"highlight\" + (!viewOnly || match ? \" clickable\" : \"\"),\n style,\n onClick: (e: MouseEvent) => {\n e.stopPropagation();\n if (\n e.ctrlKey ||\n e.metaKey ||\n (selectedNodes[0] === tag.id && selectedNodes.length === 1)\n ) {\n // Toggle selection on ctrl/cmd click or when node is only selected node\n e.stopPropagation();\n dispatch({\n type: \"toggle-node-selected\",\n payload: { ids: [tag.id] },\n });\n } else if (e.shiftKey && selectedNodes.length > 0) {\n // Select range from last selected node to this one\n const lastSelected = selectedNodes[selectedNodes.length - 1];\n\n dispatch({\n type: \"select-range\",\n payload: { ids: [lastSelected, tag.id] },\n });\n } else {\n dispatch({\n type: \"select-node\",\n payload: { ids: [tag.id] },\n });\n }\n },\n },\n isSelected\n ? moveText.flat()\n : children.map((child: any, i: number) =>\n renderNode(\n child,\n dispatch,\n selectedNodes,\n isSelected,\n matchLinks,\n viewOnly,\n ),\n ),\n );\n\n if (viewOnly && match) {\n return h(\n Popover,\n {\n content: h(\"div.match-link\", h(MatchTag, { data: match, matchLinks })),\n interactionKind: \"hover\",\n },\n tagComponent,\n );\n }\n\n return tagComponent;\n}\n\nexport function HighlightedText(props: {\n text: string;\n allTags: AnnotateBlendTag[];\n lineHeight: string;\n allowOverlap?: boolean;\n dispatch: TreeDispatch;\n selectedNodes: number[];\n matchLinks?: {\n lithology: string;\n strat_name: string;\n lith_att: string;\n };\n viewOnly?: boolean;\n}) {\n const {\n text,\n allTags = [],\n dispatch,\n selectedNodes,\n allowOverlap,\n matchLinks,\n viewOnly,\n } = props;\n\n const tree = nestHighlights(text, allTags);\n\n const spanRef = useRef<HTMLSpanElement>(null);\n\n useEffect(() => {\n const handleMouseUp = () => {\n const tag = createTagFromSelection({ container: spanRef.current });\n if (!tag) return;\n addTag({ tag, dispatch, text, allTags, allowOverlap });\n };\n\n document.addEventListener(\"mouseup\", handleMouseUp);\n return () => {\n document.removeEventListener(\"mouseup\", handleMouseUp);\n };\n }, [text, allTags, dispatch, allowOverlap]);\n\n return h(\n \"span\",\n { ref: spanRef },\n tree.children.map((child: any, i: number) =>\n renderNode(child, dispatch, selectedNodes, false, matchLinks, viewOnly),\n ),\n );\n}\n"],"names":["styles"],"mappings":"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"}
|
|
@@ -5,10 +5,13 @@ const hyper = require("@macrostrat/hyper");
|
|
|
5
5
|
const classNames = require("classnames");
|
|
6
6
|
const select = require("@blueprintjs/select");
|
|
7
7
|
;/* empty css */
|
|
8
|
-
const
|
|
8
|
+
const _interopDefault = (e) => e && e.__esModule ? e : { default: e };
|
|
9
|
+
const hyper__default = /* @__PURE__ */ _interopDefault(hyper);
|
|
10
|
+
const classNames__default = /* @__PURE__ */ _interopDefault(classNames);
|
|
11
|
+
const h = hyper__default.default.styled(main_module.default);
|
|
9
12
|
const TagListItem = (props) => {
|
|
10
13
|
let { active, selected, className, onSelect, item, children } = props;
|
|
11
|
-
className =
|
|
14
|
+
className = classNames__default.default({ active, selected }, className);
|
|
12
15
|
const onClick = () => onSelect(item);
|
|
13
16
|
return h(
|
|
14
17
|
"div.item-container",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sources":["../../../src/feedback/type-selector/index.ts"],"sourcesContent":["/**\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 onQueryChange: (query: string) => 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, onQueryChange } = props;\n\n return h(Omnibar, {\n onItemSelect: onSelectItem,\n items,\n onQueryChange,\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"],"names":["styles","Omnibar"],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../../../src/feedback/type-selector/index.ts"],"sourcesContent":["/**\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 onQueryChange: (query: string) => 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, onQueryChange } = props;\n\n return h(Omnibar, {\n onItemSelect: onSelectItem,\n items,\n onQueryChange,\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"],"names":["hyper","styles","classNames","Omnibar"],"mappings":";;;;;;;;;;AAYA,MAAM,IAAIA,eAAAA,QAAM,OAAOC,mBAAM;AAa7B,MAAM,cAAoD,CAAC,UAAU;AAEnE,MAAI,EAAE,QAAQ,UAAU,WAAW,UAAU,MAAM,aAAa;AAChE,cAAYC,oBAAAA,QAAW,EAAE,QAAQ,SAAA,GAAY,SAAS;AACtD,QAAM,UAAU,MAAM,SAAS,IAAI;AAEnC,SAAO;AAAA,IACL;AAAA,IACA;AAAA,MACE,KAAK,KAAK;AAAA,MACV;AAAA,MACA;AAAA,IAAA;AAAA,IAEF;AAAA,MACE,EAAE,cAAc,EAAE,OAAO,EAAE,iBAAiB,KAAK,MAAA,GAAS;AAAA,MAC1D,EAAE,YAAY,IAAI,KAAK,IAAI;AAAA,IAAA;AAAA,EAC7B;AAEJ;AAYO,SAAS,gBAAmB,OAAwB;AAEzD,QAAM,EAAE,cAAc,OAAO,QAAQ,SAAS,kBAAkB;AAEhE,SAAO,EAAEC,OAAAA,SAAS;AAAA,IAChB,cAAc;AAAA,IACd;AAAA,IACA;AAAA,IACA,eAAe;AAAA,IACf;AAAA,IACA;AAAA,IACA,aAAa,MAAS,EAAE,aAAa,aAAa;AAChD,aAAO,EAAE,aAAa;AAAA,QACpB,KAAK,KAAK;AAAA,QACV;AAAA,QACA,UAAU;AAAA,QACV,QAAQ,UAAU;AAAA,QAClB,UAAU,UAAU;AAAA,MAAA,CACrB;AAAA,IACH;AAAA,EAAA,CACD;AACH;;"}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import
|
|
1
|
+
import h$1 from "./main.module.sass.js";
|
|
2
2
|
import hyper from "@macrostrat/hyper";
|
|
3
3
|
import classNames from "classnames";
|
|
4
4
|
import { Omnibar } from "@blueprintjs/select";
|
|
5
5
|
/* empty css */
|
|
6
|
-
const h = hyper.styled(
|
|
6
|
+
const h = hyper.styled(h$1);
|
|
7
7
|
const TagListItem = (props) => {
|
|
8
8
|
let { active, selected, className, onSelect, item, children } = props;
|
|
9
9
|
className = classNames({ active, selected }, className);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../src/feedback/type-selector/index.ts"],"sourcesContent":["/**\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 onQueryChange: (query: string) => 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, onQueryChange } = props;\n\n return h(Omnibar, {\n onItemSelect: onSelectItem,\n items,\n onQueryChange,\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"],"names":[],"mappings":";;;;;AAYA,MAAM,IAAI,MAAM,
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../src/feedback/type-selector/index.ts"],"sourcesContent":["/**\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 onQueryChange: (query: string) => 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, onQueryChange } = props;\n\n return h(Omnibar, {\n onItemSelect: onSelectItem,\n items,\n onQueryChange,\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"],"names":["styles"],"mappings":";;;;;AAYA,MAAM,IAAI,MAAM,OAAOA,GAAM;AAa7B,MAAM,cAAoD,CAAC,UAAU;AAEnE,MAAI,EAAE,QAAQ,UAAU,WAAW,UAAU,MAAM,aAAa;AAChE,cAAY,WAAW,EAAE,QAAQ,SAAA,GAAY,SAAS;AACtD,QAAM,UAAU,MAAM,SAAS,IAAI;AAEnC,SAAO;AAAA,IACL;AAAA,IACA;AAAA,MACE,KAAK,KAAK;AAAA,MACV;AAAA,MACA;AAAA,IAAA;AAAA,IAEF;AAAA,MACE,EAAE,cAAc,EAAE,OAAO,EAAE,iBAAiB,KAAK,MAAA,GAAS;AAAA,MAC1D,EAAE,YAAY,IAAI,KAAK,IAAI;AAAA,IAAA;AAAA,EAC7B;AAEJ;AAYO,SAAS,gBAAmB,OAAwB;AAEzD,QAAM,EAAE,cAAc,OAAO,QAAQ,SAAS,kBAAkB;AAEhE,SAAO,EAAE,SAAS;AAAA,IAChB,cAAc;AAAA,IACd;AAAA,IACA;AAAA,IACA,eAAe;AAAA,IACf;AAAA,IACA;AAAA,IACA,aAAa,MAAS,EAAE,aAAa,aAAa;AAChD,aAAO,EAAE,aAAa;AAAA,QACpB,KAAK,KAAK;AAAA,QACV;AAAA,QACA,UAAU;AAAA,QACV,QAAQ,UAAU;AAAA,QAClB,UAAU,UAAU;AAAA,MAAA,CACrB;AAAA,IACH;AAAA,EAAA,CACD;AACH;"}
|
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
|
|
3
|
+
const hyper = require("@macrostrat/hyper");
|
|
4
|
+
const _interopDefault = (e) => e && e.__esModule ? e : { default: e };
|
|
5
|
+
const hyper__default = /* @__PURE__ */ _interopDefault(hyper);
|
|
3
6
|
const selected = "_selected_fcffo_7";
|
|
4
7
|
const swatch = "_swatch_fcffo_11";
|
|
5
8
|
const styles = {
|
|
@@ -7,7 +10,9 @@ const styles = {
|
|
|
7
10
|
selected,
|
|
8
11
|
swatch
|
|
9
12
|
};
|
|
10
|
-
|
|
13
|
+
let h = hyper__default.default.styled(styles);
|
|
14
|
+
Object.assign(h, styles);
|
|
15
|
+
exports.default = h;
|
|
11
16
|
exports.selected = selected;
|
|
12
17
|
exports.swatch = swatch;
|
|
13
18
|
//# sourceMappingURL=main.module.sass.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"main.module.sass.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"main.module.sass.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import hyper from "@macrostrat/hyper";
|
|
1
2
|
const selected = "_selected_fcffo_7";
|
|
2
3
|
const swatch = "_swatch_fcffo_11";
|
|
3
4
|
const styles = {
|
|
@@ -5,8 +6,10 @@ const styles = {
|
|
|
5
6
|
selected,
|
|
6
7
|
swatch
|
|
7
8
|
};
|
|
9
|
+
let h = hyper.styled(styles);
|
|
10
|
+
Object.assign(h, styles);
|
|
8
11
|
export {
|
|
9
|
-
|
|
12
|
+
h as default,
|
|
10
13
|
selected,
|
|
11
14
|
swatch
|
|
12
15
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"main.module.sass.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"main.module.sass.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;"}
|
|
@@ -7,7 +7,9 @@ const react = require("react");
|
|
|
7
7
|
const core = require("@blueprintjs/core");
|
|
8
8
|
const uiComponents = require("@macrostrat/ui-components");
|
|
9
9
|
const dataSheet = require("@macrostrat/data-sheet");
|
|
10
|
-
const
|
|
10
|
+
const _interopDefault = (e) => e && e.__esModule ? e : { default: e };
|
|
11
|
+
const hyper__default = /* @__PURE__ */ _interopDefault(hyper);
|
|
12
|
+
const h = hyper__default.default.styled(feedback_module.default);
|
|
11
13
|
function TypeList({
|
|
12
14
|
types,
|
|
13
15
|
selected,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"typelist.cjs","sources":["../../src/feedback/typelist.ts"],"sourcesContent":["import styles from \"./feedback.module.sass\";\nimport hyper from \"@macrostrat/hyper\";\n\nimport { getTagStyle } from \"../extractions\";\nimport { useState } from \"react\";\nimport { Icon, Popover, Overlay2 } from \"@blueprintjs/core\";\nimport { SaveButton } from \"@macrostrat/ui-components\";\nimport { useInDarkMode } from \"@macrostrat/ui-components\";\nimport { ColorPicker } from \"@macrostrat/data-sheet\";\n\nconst h = hyper.styled(styles);\n\nexport function TypeList({\n types,\n selected,\n dispatch,\n selectedNodes,\n tree,\n viewOnly,\n}) {\n const [selectedType, setSelectedType] = useState(null);\n const isSelectedNodes = selectedNodes.length > 0;\n const darkMode = useInDarkMode();\n const luminance = darkMode ? 0.9 : 0.4;\n\n return h(\"div.type-list-container\", [\n h(\n \"div.type-list-header\",\n isSelectedNodes && !selectedType\n ? \"Change selected nodes to:\"\n : \"Entity Types\",\n ),\n h(\n \"div.type-list\",\n Array.from(types.values()).map((type) =>\n h(TypeTag, {\n type,\n luminance,\n selectedType,\n setSelectedType,\n dispatch,\n viewOnly,\n tree,\n selectedNodes,\n selected,\n isSelectedNodes,\n }),\n ),\n ),\n h.if(!viewOnly)(AddType, { dispatch }),\n ]);\n}\n\nfunction collectMatchingIds(tree, id) {\n const ids = [];\n\n function traverse(node) {\n if (node.type.id === id) {\n ids.push(node.id);\n }\n if (Array.isArray(node.children)) {\n node.children.forEach(traverse);\n }\n }\n\n tree.forEach(traverse);\n return ids;\n}\n\nfunction AddType({ dispatch }) {\n const [overlayOpen, setOverlayOpen] = useState(false);\n\n const saveHandler = (payload) => {\n dispatch({\n type: \"add-entity-type\",\n payload,\n });\n setOverlayOpen(false);\n };\n\n return h(\"div.add-type-container\", [\n h(\"div.add-type\", { onClick: () => setOverlayOpen(true) }, [\n h(\"p.add-type-text\", \"Add new type\"),\n h(Icon, { icon: \"plus\" }),\n ]),\n h(TypeOverlay, {\n setOverlayOpen,\n overlayOpen,\n title: \"Add New Type\",\n saveHandler,\n }),\n ]);\n}\n\nfunction EditType({ dispatch, type }) {\n const [editorOpen, setEditorOpen] = useState(false);\n\n const saveHandler = (payload) => {\n dispatch({\n type: \"update-entity-type\",\n payload,\n });\n setEditorOpen(false);\n };\n\n return h(\"div.edit-type\", [\n h(Icon, {\n icon: \"edit\",\n className: \"edit-icon\",\n onClick: (e) => {\n e.stopPropagation();\n setEditorOpen(true);\n },\n }),\n h(TypeOverlay, {\n setOverlayOpen: setEditorOpen,\n overlayOpen: editorOpen,\n originalType: type,\n title: \"Edit Type\",\n saveHandler,\n }),\n ]);\n}\n\nfunction TypeOverlay({\n setOverlayOpen,\n overlayOpen,\n originalType,\n title,\n saveHandler,\n}) {\n const { name, description, color, id } = originalType || {};\n\n const [nameInput, setNameInput] = useState(name || \"\");\n const [descriptionInput, setDescriptionInput] = useState(description || \"\");\n const [colorInput, setColorInput] = useState(color || \"#fff\");\n\n return h(\n Overlay2,\n {\n isOpen: overlayOpen,\n },\n h(\n \"div.overlay-container\",\n h(\"div.add-type-overlay\", [\n h(\"h2.title\", [\n title,\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(\"div.text-inputs\", [\n h(\"div.form-field.name\", [\n h(\"p.label\", \"Name\"),\n h(\"input\", {\n type: \"text\",\n placeholder: \"Enter type name\",\n onChange: (e) => setNameInput(e.target.value),\n value: nameInput,\n }),\n ]),\n h(\"div.form-field.form-description\", [\n h(\"p.label\", \"Description\"),\n h(\"input\", {\n type: \"text\",\n placeholder: \"Enter type description\",\n onChange: (e) => setDescriptionInput(e.target.value),\n value: descriptionInput,\n }),\n ]),\n ]),\n h(\"div.form-field.color\", [\n h(\"p.label\", \"Color\"),\n h(ColorPicker, {\n value: colorInput,\n onChange: (color) => setColorInput(color),\n style: { width: \"100%\" },\n }),\n ]),\n ]),\n h(\n SaveButton,\n {\n className: \"save-btn\",\n small: true,\n onClick: () =>\n saveHandler({\n name: nameInput,\n description: descriptionInput,\n color: colorInput,\n id,\n }),\n },\n \"Save changes\",\n ),\n ]),\n ),\n );\n}\n\nfunction TypeTag({\n type,\n luminance,\n selectedType,\n setSelectedType,\n dispatch,\n tree,\n selectedNodes,\n selected,\n isSelectedNodes,\n viewOnly,\n}) {\n const { color, name, id, description } = type;\n const darkMode = useInDarkMode();\n const isSelected = id === selected?.id && selectedNodes.length > 0;\n\n const style = getTagStyle(color, {\n active: isSelected,\n highlighted: selectedNodes.length === 0,\n });\n\n const payload = {\n id,\n name,\n color,\n description,\n };\n\n const ids = collectMatchingIds(tree, id);\n\n const handleTagClick = () => {\n if (!isSelectedNodes && selectedType === null) {\n if (ids.length > 0) {\n setSelectedType(type);\n dispatch({ type: \"toggle-node-selected\", payload: { ids } });\n }\n } else if (isSelectedNodes && selectedType === null) {\n if (id === selected?.id && selectedNodes.length > 0) {\n dispatch({\n type: \"toggle-node-selected\",\n payload: { ids: selectedNodes },\n });\n } else {\n dispatch({ type: \"select-entity-type\", payload });\n }\n } else if (isSelectedNodes && selectedType.id === id) {\n setSelectedType(null);\n dispatch({ type: \"toggle-node-selected\", payload: { ids } });\n } else if (isSelectedNodes && selectedType.id !== id) {\n if (ids.length > 0) {\n setSelectedType(type);\n const oldIds = collectMatchingIds(tree, selectedType.id);\n\n dispatch({ type: \"toggle-node-selected\", payload: { ids: oldIds } });\n dispatch({ type: \"toggle-node-selected\", payload: { ids } });\n }\n } else {\n console.warn(\"Unexpected state in TypeTag click handler\", {\n isSelectedNodes,\n selectedType,\n selectedNodes,\n ids,\n id,\n selected,\n });\n }\n };\n\n return h(\n Popover,\n {\n autoFocus: false,\n content: h(\"div.description\", description || \"No description available\"),\n interactionKind: \"hover\",\n },\n h(\n \"div.type-tag\",\n {\n onClick: handleTagClick,\n style: {\n cursor:\n (ids.length > 0 || (isSelectedNodes && !selectedType)) && !viewOnly\n ? \"pointer\"\n : \"\",\n color: \"black\",\n backgroundColor: style.backgroundColor,\n border: isSelected\n ? `1px solid var(--text-emphasized-color)`\n : `1px solid var(--background-color)`,\n },\n },\n h(\"div.type-container\", [\n h(\"div.type-name\", name),\n h.if(!viewOnly)(\"div.icons\", [\n h(EditType, {\n dispatch,\n type,\n }),\n h(Icon, {\n icon: \"cross\",\n className: \"delete-type-icon\",\n style: { color: \"red\", cursor: \"pointer\" },\n onClick: (e) => {\n e.stopPropagation();\n dispatch({\n type: \"delete-entity-type\",\n payload: { id },\n });\n },\n }),\n ]),\n ]),\n ),\n );\n}\n"],"names":["styles","useState","useInDarkMode","Icon","Overlay2","ColorPicker","color","SaveButton","getTagStyle","Popover"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"typelist.cjs","sources":["../../src/feedback/typelist.ts"],"sourcesContent":["import styles from \"./feedback.module.sass\";\nimport hyper from \"@macrostrat/hyper\";\n\nimport { getTagStyle } from \"../extractions\";\nimport { useState } from \"react\";\nimport { Icon, Popover, Overlay2 } from \"@blueprintjs/core\";\nimport { SaveButton } from \"@macrostrat/ui-components\";\nimport { useInDarkMode } from \"@macrostrat/ui-components\";\nimport { ColorPicker } from \"@macrostrat/data-sheet\";\n\nconst h = hyper.styled(styles);\n\nexport function TypeList({\n types,\n selected,\n dispatch,\n selectedNodes,\n tree,\n viewOnly,\n}) {\n const [selectedType, setSelectedType] = useState(null);\n const isSelectedNodes = selectedNodes.length > 0;\n const darkMode = useInDarkMode();\n const luminance = darkMode ? 0.9 : 0.4;\n\n return h(\"div.type-list-container\", [\n h(\n \"div.type-list-header\",\n isSelectedNodes && !selectedType\n ? \"Change selected nodes to:\"\n : \"Entity Types\",\n ),\n h(\n \"div.type-list\",\n Array.from(types.values()).map((type) =>\n h(TypeTag, {\n type,\n luminance,\n selectedType,\n setSelectedType,\n dispatch,\n viewOnly,\n tree,\n selectedNodes,\n selected,\n isSelectedNodes,\n }),\n ),\n ),\n h.if(!viewOnly)(AddType, { dispatch }),\n ]);\n}\n\nfunction collectMatchingIds(tree, id) {\n const ids = [];\n\n function traverse(node) {\n if (node.type.id === id) {\n ids.push(node.id);\n }\n if (Array.isArray(node.children)) {\n node.children.forEach(traverse);\n }\n }\n\n tree.forEach(traverse);\n return ids;\n}\n\nfunction AddType({ dispatch }) {\n const [overlayOpen, setOverlayOpen] = useState(false);\n\n const saveHandler = (payload) => {\n dispatch({\n type: \"add-entity-type\",\n payload,\n });\n setOverlayOpen(false);\n };\n\n return h(\"div.add-type-container\", [\n h(\"div.add-type\", { onClick: () => setOverlayOpen(true) }, [\n h(\"p.add-type-text\", \"Add new type\"),\n h(Icon, { icon: \"plus\" }),\n ]),\n h(TypeOverlay, {\n setOverlayOpen,\n overlayOpen,\n title: \"Add New Type\",\n saveHandler,\n }),\n ]);\n}\n\nfunction EditType({ dispatch, type }) {\n const [editorOpen, setEditorOpen] = useState(false);\n\n const saveHandler = (payload) => {\n dispatch({\n type: \"update-entity-type\",\n payload,\n });\n setEditorOpen(false);\n };\n\n return h(\"div.edit-type\", [\n h(Icon, {\n icon: \"edit\",\n className: \"edit-icon\",\n onClick: (e) => {\n e.stopPropagation();\n setEditorOpen(true);\n },\n }),\n h(TypeOverlay, {\n setOverlayOpen: setEditorOpen,\n overlayOpen: editorOpen,\n originalType: type,\n title: \"Edit Type\",\n saveHandler,\n }),\n ]);\n}\n\nfunction TypeOverlay({\n setOverlayOpen,\n overlayOpen,\n originalType,\n title,\n saveHandler,\n}) {\n const { name, description, color, id } = originalType || {};\n\n const [nameInput, setNameInput] = useState(name || \"\");\n const [descriptionInput, setDescriptionInput] = useState(description || \"\");\n const [colorInput, setColorInput] = useState(color || \"#fff\");\n\n return h(\n Overlay2,\n {\n isOpen: overlayOpen,\n },\n h(\n \"div.overlay-container\",\n h(\"div.add-type-overlay\", [\n h(\"h2.title\", [\n title,\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(\"div.text-inputs\", [\n h(\"div.form-field.name\", [\n h(\"p.label\", \"Name\"),\n h(\"input\", {\n type: \"text\",\n placeholder: \"Enter type name\",\n onChange: (e) => setNameInput(e.target.value),\n value: nameInput,\n }),\n ]),\n h(\"div.form-field.form-description\", [\n h(\"p.label\", \"Description\"),\n h(\"input\", {\n type: \"text\",\n placeholder: \"Enter type description\",\n onChange: (e) => setDescriptionInput(e.target.value),\n value: descriptionInput,\n }),\n ]),\n ]),\n h(\"div.form-field.color\", [\n h(\"p.label\", \"Color\"),\n h(ColorPicker, {\n value: colorInput,\n onChange: (color) => setColorInput(color),\n style: { width: \"100%\" },\n }),\n ]),\n ]),\n h(\n SaveButton,\n {\n className: \"save-btn\",\n small: true,\n onClick: () =>\n saveHandler({\n name: nameInput,\n description: descriptionInput,\n color: colorInput,\n id,\n }),\n },\n \"Save changes\",\n ),\n ]),\n ),\n );\n}\n\nfunction TypeTag({\n type,\n luminance,\n selectedType,\n setSelectedType,\n dispatch,\n tree,\n selectedNodes,\n selected,\n isSelectedNodes,\n viewOnly,\n}) {\n const { color, name, id, description } = type;\n const darkMode = useInDarkMode();\n const isSelected = id === selected?.id && selectedNodes.length > 0;\n\n const style = getTagStyle(color, {\n active: isSelected,\n highlighted: selectedNodes.length === 0,\n });\n\n const payload = {\n id,\n name,\n color,\n description,\n };\n\n const ids = collectMatchingIds(tree, id);\n\n const handleTagClick = () => {\n if (!isSelectedNodes && selectedType === null) {\n if (ids.length > 0) {\n setSelectedType(type);\n dispatch({ type: \"toggle-node-selected\", payload: { ids } });\n }\n } else if (isSelectedNodes && selectedType === null) {\n if (id === selected?.id && selectedNodes.length > 0) {\n dispatch({\n type: \"toggle-node-selected\",\n payload: { ids: selectedNodes },\n });\n } else {\n dispatch({ type: \"select-entity-type\", payload });\n }\n } else if (isSelectedNodes && selectedType.id === id) {\n setSelectedType(null);\n dispatch({ type: \"toggle-node-selected\", payload: { ids } });\n } else if (isSelectedNodes && selectedType.id !== id) {\n if (ids.length > 0) {\n setSelectedType(type);\n const oldIds = collectMatchingIds(tree, selectedType.id);\n\n dispatch({ type: \"toggle-node-selected\", payload: { ids: oldIds } });\n dispatch({ type: \"toggle-node-selected\", payload: { ids } });\n }\n } else {\n console.warn(\"Unexpected state in TypeTag click handler\", {\n isSelectedNodes,\n selectedType,\n selectedNodes,\n ids,\n id,\n selected,\n });\n }\n };\n\n return h(\n Popover,\n {\n autoFocus: false,\n content: h(\"div.description\", description || \"No description available\"),\n interactionKind: \"hover\",\n },\n h(\n \"div.type-tag\",\n {\n onClick: handleTagClick,\n style: {\n cursor:\n (ids.length > 0 || (isSelectedNodes && !selectedType)) && !viewOnly\n ? \"pointer\"\n : \"\",\n color: \"black\",\n backgroundColor: style.backgroundColor,\n border: isSelected\n ? `1px solid var(--text-emphasized-color)`\n : `1px solid var(--background-color)`,\n },\n },\n h(\"div.type-container\", [\n h(\"div.type-name\", name),\n h.if(!viewOnly)(\"div.icons\", [\n h(EditType, {\n dispatch,\n type,\n }),\n h(Icon, {\n icon: \"cross\",\n className: \"delete-type-icon\",\n style: { color: \"red\", cursor: \"pointer\" },\n onClick: (e) => {\n e.stopPropagation();\n dispatch({\n type: \"delete-entity-type\",\n payload: { id },\n });\n },\n }),\n ]),\n ]),\n ),\n );\n}\n"],"names":["hyper","styles","useState","useInDarkMode","Icon","Overlay2","ColorPicker","color","SaveButton","getTagStyle","Popover"],"mappings":"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"}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import
|
|
1
|
+
import h$1 from "./feedback.module.sass.js";
|
|
2
2
|
import hyper from "@macrostrat/hyper";
|
|
3
3
|
import { getTagStyle } from "../extractions/index.js";
|
|
4
4
|
import { useState } from "react";
|
|
5
5
|
import { Popover, Icon, Overlay2 } from "@blueprintjs/core";
|
|
6
6
|
import { useInDarkMode, SaveButton } from "@macrostrat/ui-components";
|
|
7
7
|
import { ColorPicker } from "@macrostrat/data-sheet";
|
|
8
|
-
const h = hyper.styled(
|
|
8
|
+
const h = hyper.styled(h$1);
|
|
9
9
|
function TypeList({
|
|
10
10
|
types,
|
|
11
11
|
selected,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"typelist.js","sources":["../../src/feedback/typelist.ts"],"sourcesContent":["import styles from \"./feedback.module.sass\";\nimport hyper from \"@macrostrat/hyper\";\n\nimport { getTagStyle } from \"../extractions\";\nimport { useState } from \"react\";\nimport { Icon, Popover, Overlay2 } from \"@blueprintjs/core\";\nimport { SaveButton } from \"@macrostrat/ui-components\";\nimport { useInDarkMode } from \"@macrostrat/ui-components\";\nimport { ColorPicker } from \"@macrostrat/data-sheet\";\n\nconst h = hyper.styled(styles);\n\nexport function TypeList({\n types,\n selected,\n dispatch,\n selectedNodes,\n tree,\n viewOnly,\n}) {\n const [selectedType, setSelectedType] = useState(null);\n const isSelectedNodes = selectedNodes.length > 0;\n const darkMode = useInDarkMode();\n const luminance = darkMode ? 0.9 : 0.4;\n\n return h(\"div.type-list-container\", [\n h(\n \"div.type-list-header\",\n isSelectedNodes && !selectedType\n ? \"Change selected nodes to:\"\n : \"Entity Types\",\n ),\n h(\n \"div.type-list\",\n Array.from(types.values()).map((type) =>\n h(TypeTag, {\n type,\n luminance,\n selectedType,\n setSelectedType,\n dispatch,\n viewOnly,\n tree,\n selectedNodes,\n selected,\n isSelectedNodes,\n }),\n ),\n ),\n h.if(!viewOnly)(AddType, { dispatch }),\n ]);\n}\n\nfunction collectMatchingIds(tree, id) {\n const ids = [];\n\n function traverse(node) {\n if (node.type.id === id) {\n ids.push(node.id);\n }\n if (Array.isArray(node.children)) {\n node.children.forEach(traverse);\n }\n }\n\n tree.forEach(traverse);\n return ids;\n}\n\nfunction AddType({ dispatch }) {\n const [overlayOpen, setOverlayOpen] = useState(false);\n\n const saveHandler = (payload) => {\n dispatch({\n type: \"add-entity-type\",\n payload,\n });\n setOverlayOpen(false);\n };\n\n return h(\"div.add-type-container\", [\n h(\"div.add-type\", { onClick: () => setOverlayOpen(true) }, [\n h(\"p.add-type-text\", \"Add new type\"),\n h(Icon, { icon: \"plus\" }),\n ]),\n h(TypeOverlay, {\n setOverlayOpen,\n overlayOpen,\n title: \"Add New Type\",\n saveHandler,\n }),\n ]);\n}\n\nfunction EditType({ dispatch, type }) {\n const [editorOpen, setEditorOpen] = useState(false);\n\n const saveHandler = (payload) => {\n dispatch({\n type: \"update-entity-type\",\n payload,\n });\n setEditorOpen(false);\n };\n\n return h(\"div.edit-type\", [\n h(Icon, {\n icon: \"edit\",\n className: \"edit-icon\",\n onClick: (e) => {\n e.stopPropagation();\n setEditorOpen(true);\n },\n }),\n h(TypeOverlay, {\n setOverlayOpen: setEditorOpen,\n overlayOpen: editorOpen,\n originalType: type,\n title: \"Edit Type\",\n saveHandler,\n }),\n ]);\n}\n\nfunction TypeOverlay({\n setOverlayOpen,\n overlayOpen,\n originalType,\n title,\n saveHandler,\n}) {\n const { name, description, color, id } = originalType || {};\n\n const [nameInput, setNameInput] = useState(name || \"\");\n const [descriptionInput, setDescriptionInput] = useState(description || \"\");\n const [colorInput, setColorInput] = useState(color || \"#fff\");\n\n return h(\n Overlay2,\n {\n isOpen: overlayOpen,\n },\n h(\n \"div.overlay-container\",\n h(\"div.add-type-overlay\", [\n h(\"h2.title\", [\n title,\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(\"div.text-inputs\", [\n h(\"div.form-field.name\", [\n h(\"p.label\", \"Name\"),\n h(\"input\", {\n type: \"text\",\n placeholder: \"Enter type name\",\n onChange: (e) => setNameInput(e.target.value),\n value: nameInput,\n }),\n ]),\n h(\"div.form-field.form-description\", [\n h(\"p.label\", \"Description\"),\n h(\"input\", {\n type: \"text\",\n placeholder: \"Enter type description\",\n onChange: (e) => setDescriptionInput(e.target.value),\n value: descriptionInput,\n }),\n ]),\n ]),\n h(\"div.form-field.color\", [\n h(\"p.label\", \"Color\"),\n h(ColorPicker, {\n value: colorInput,\n onChange: (color) => setColorInput(color),\n style: { width: \"100%\" },\n }),\n ]),\n ]),\n h(\n SaveButton,\n {\n className: \"save-btn\",\n small: true,\n onClick: () =>\n saveHandler({\n name: nameInput,\n description: descriptionInput,\n color: colorInput,\n id,\n }),\n },\n \"Save changes\",\n ),\n ]),\n ),\n );\n}\n\nfunction TypeTag({\n type,\n luminance,\n selectedType,\n setSelectedType,\n dispatch,\n tree,\n selectedNodes,\n selected,\n isSelectedNodes,\n viewOnly,\n}) {\n const { color, name, id, description } = type;\n const darkMode = useInDarkMode();\n const isSelected = id === selected?.id && selectedNodes.length > 0;\n\n const style = getTagStyle(color, {\n active: isSelected,\n highlighted: selectedNodes.length === 0,\n });\n\n const payload = {\n id,\n name,\n color,\n description,\n };\n\n const ids = collectMatchingIds(tree, id);\n\n const handleTagClick = () => {\n if (!isSelectedNodes && selectedType === null) {\n if (ids.length > 0) {\n setSelectedType(type);\n dispatch({ type: \"toggle-node-selected\", payload: { ids } });\n }\n } else if (isSelectedNodes && selectedType === null) {\n if (id === selected?.id && selectedNodes.length > 0) {\n dispatch({\n type: \"toggle-node-selected\",\n payload: { ids: selectedNodes },\n });\n } else {\n dispatch({ type: \"select-entity-type\", payload });\n }\n } else if (isSelectedNodes && selectedType.id === id) {\n setSelectedType(null);\n dispatch({ type: \"toggle-node-selected\", payload: { ids } });\n } else if (isSelectedNodes && selectedType.id !== id) {\n if (ids.length > 0) {\n setSelectedType(type);\n const oldIds = collectMatchingIds(tree, selectedType.id);\n\n dispatch({ type: \"toggle-node-selected\", payload: { ids: oldIds } });\n dispatch({ type: \"toggle-node-selected\", payload: { ids } });\n }\n } else {\n console.warn(\"Unexpected state in TypeTag click handler\", {\n isSelectedNodes,\n selectedType,\n selectedNodes,\n ids,\n id,\n selected,\n });\n }\n };\n\n return h(\n Popover,\n {\n autoFocus: false,\n content: h(\"div.description\", description || \"No description available\"),\n interactionKind: \"hover\",\n },\n h(\n \"div.type-tag\",\n {\n onClick: handleTagClick,\n style: {\n cursor:\n (ids.length > 0 || (isSelectedNodes && !selectedType)) && !viewOnly\n ? \"pointer\"\n : \"\",\n color: \"black\",\n backgroundColor: style.backgroundColor,\n border: isSelected\n ? `1px solid var(--text-emphasized-color)`\n : `1px solid var(--background-color)`,\n },\n },\n h(\"div.type-container\", [\n h(\"div.type-name\", name),\n h.if(!viewOnly)(\"div.icons\", [\n h(EditType, {\n dispatch,\n type,\n }),\n h(Icon, {\n icon: \"cross\",\n className: \"delete-type-icon\",\n style: { color: \"red\", cursor: \"pointer\" },\n onClick: (e) => {\n e.stopPropagation();\n dispatch({\n type: \"delete-entity-type\",\n payload: { id },\n });\n },\n }),\n ]),\n ]),\n ),\n );\n}\n"],"names":["color"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"typelist.js","sources":["../../src/feedback/typelist.ts"],"sourcesContent":["import styles from \"./feedback.module.sass\";\nimport hyper from \"@macrostrat/hyper\";\n\nimport { getTagStyle } from \"../extractions\";\nimport { useState } from \"react\";\nimport { Icon, Popover, Overlay2 } from \"@blueprintjs/core\";\nimport { SaveButton } from \"@macrostrat/ui-components\";\nimport { useInDarkMode } from \"@macrostrat/ui-components\";\nimport { ColorPicker } from \"@macrostrat/data-sheet\";\n\nconst h = hyper.styled(styles);\n\nexport function TypeList({\n types,\n selected,\n dispatch,\n selectedNodes,\n tree,\n viewOnly,\n}) {\n const [selectedType, setSelectedType] = useState(null);\n const isSelectedNodes = selectedNodes.length > 0;\n const darkMode = useInDarkMode();\n const luminance = darkMode ? 0.9 : 0.4;\n\n return h(\"div.type-list-container\", [\n h(\n \"div.type-list-header\",\n isSelectedNodes && !selectedType\n ? \"Change selected nodes to:\"\n : \"Entity Types\",\n ),\n h(\n \"div.type-list\",\n Array.from(types.values()).map((type) =>\n h(TypeTag, {\n type,\n luminance,\n selectedType,\n setSelectedType,\n dispatch,\n viewOnly,\n tree,\n selectedNodes,\n selected,\n isSelectedNodes,\n }),\n ),\n ),\n h.if(!viewOnly)(AddType, { dispatch }),\n ]);\n}\n\nfunction collectMatchingIds(tree, id) {\n const ids = [];\n\n function traverse(node) {\n if (node.type.id === id) {\n ids.push(node.id);\n }\n if (Array.isArray(node.children)) {\n node.children.forEach(traverse);\n }\n }\n\n tree.forEach(traverse);\n return ids;\n}\n\nfunction AddType({ dispatch }) {\n const [overlayOpen, setOverlayOpen] = useState(false);\n\n const saveHandler = (payload) => {\n dispatch({\n type: \"add-entity-type\",\n payload,\n });\n setOverlayOpen(false);\n };\n\n return h(\"div.add-type-container\", [\n h(\"div.add-type\", { onClick: () => setOverlayOpen(true) }, [\n h(\"p.add-type-text\", \"Add new type\"),\n h(Icon, { icon: \"plus\" }),\n ]),\n h(TypeOverlay, {\n setOverlayOpen,\n overlayOpen,\n title: \"Add New Type\",\n saveHandler,\n }),\n ]);\n}\n\nfunction EditType({ dispatch, type }) {\n const [editorOpen, setEditorOpen] = useState(false);\n\n const saveHandler = (payload) => {\n dispatch({\n type: \"update-entity-type\",\n payload,\n });\n setEditorOpen(false);\n };\n\n return h(\"div.edit-type\", [\n h(Icon, {\n icon: \"edit\",\n className: \"edit-icon\",\n onClick: (e) => {\n e.stopPropagation();\n setEditorOpen(true);\n },\n }),\n h(TypeOverlay, {\n setOverlayOpen: setEditorOpen,\n overlayOpen: editorOpen,\n originalType: type,\n title: \"Edit Type\",\n saveHandler,\n }),\n ]);\n}\n\nfunction TypeOverlay({\n setOverlayOpen,\n overlayOpen,\n originalType,\n title,\n saveHandler,\n}) {\n const { name, description, color, id } = originalType || {};\n\n const [nameInput, setNameInput] = useState(name || \"\");\n const [descriptionInput, setDescriptionInput] = useState(description || \"\");\n const [colorInput, setColorInput] = useState(color || \"#fff\");\n\n return h(\n Overlay2,\n {\n isOpen: overlayOpen,\n },\n h(\n \"div.overlay-container\",\n h(\"div.add-type-overlay\", [\n h(\"h2.title\", [\n title,\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(\"div.text-inputs\", [\n h(\"div.form-field.name\", [\n h(\"p.label\", \"Name\"),\n h(\"input\", {\n type: \"text\",\n placeholder: \"Enter type name\",\n onChange: (e) => setNameInput(e.target.value),\n value: nameInput,\n }),\n ]),\n h(\"div.form-field.form-description\", [\n h(\"p.label\", \"Description\"),\n h(\"input\", {\n type: \"text\",\n placeholder: \"Enter type description\",\n onChange: (e) => setDescriptionInput(e.target.value),\n value: descriptionInput,\n }),\n ]),\n ]),\n h(\"div.form-field.color\", [\n h(\"p.label\", \"Color\"),\n h(ColorPicker, {\n value: colorInput,\n onChange: (color) => setColorInput(color),\n style: { width: \"100%\" },\n }),\n ]),\n ]),\n h(\n SaveButton,\n {\n className: \"save-btn\",\n small: true,\n onClick: () =>\n saveHandler({\n name: nameInput,\n description: descriptionInput,\n color: colorInput,\n id,\n }),\n },\n \"Save changes\",\n ),\n ]),\n ),\n );\n}\n\nfunction TypeTag({\n type,\n luminance,\n selectedType,\n setSelectedType,\n dispatch,\n tree,\n selectedNodes,\n selected,\n isSelectedNodes,\n viewOnly,\n}) {\n const { color, name, id, description } = type;\n const darkMode = useInDarkMode();\n const isSelected = id === selected?.id && selectedNodes.length > 0;\n\n const style = getTagStyle(color, {\n active: isSelected,\n highlighted: selectedNodes.length === 0,\n });\n\n const payload = {\n id,\n name,\n color,\n description,\n };\n\n const ids = collectMatchingIds(tree, id);\n\n const handleTagClick = () => {\n if (!isSelectedNodes && selectedType === null) {\n if (ids.length > 0) {\n setSelectedType(type);\n dispatch({ type: \"toggle-node-selected\", payload: { ids } });\n }\n } else if (isSelectedNodes && selectedType === null) {\n if (id === selected?.id && selectedNodes.length > 0) {\n dispatch({\n type: \"toggle-node-selected\",\n payload: { ids: selectedNodes },\n });\n } else {\n dispatch({ type: \"select-entity-type\", payload });\n }\n } else if (isSelectedNodes && selectedType.id === id) {\n setSelectedType(null);\n dispatch({ type: \"toggle-node-selected\", payload: { ids } });\n } else if (isSelectedNodes && selectedType.id !== id) {\n if (ids.length > 0) {\n setSelectedType(type);\n const oldIds = collectMatchingIds(tree, selectedType.id);\n\n dispatch({ type: \"toggle-node-selected\", payload: { ids: oldIds } });\n dispatch({ type: \"toggle-node-selected\", payload: { ids } });\n }\n } else {\n console.warn(\"Unexpected state in TypeTag click handler\", {\n isSelectedNodes,\n selectedType,\n selectedNodes,\n ids,\n id,\n selected,\n });\n }\n };\n\n return h(\n Popover,\n {\n autoFocus: false,\n content: h(\"div.description\", description || \"No description available\"),\n interactionKind: \"hover\",\n },\n h(\n \"div.type-tag\",\n {\n onClick: handleTagClick,\n style: {\n cursor:\n (ids.length > 0 || (isSelectedNodes && !selectedType)) && !viewOnly\n ? \"pointer\"\n : \"\",\n color: \"black\",\n backgroundColor: style.backgroundColor,\n border: isSelected\n ? `1px solid var(--text-emphasized-color)`\n : `1px solid var(--background-color)`,\n },\n },\n h(\"div.type-container\", [\n h(\"div.type-name\", name),\n h.if(!viewOnly)(\"div.icons\", [\n h(EditType, {\n dispatch,\n type,\n }),\n h(Icon, {\n icon: \"cross\",\n className: \"delete-type-icon\",\n style: { color: \"red\", cursor: \"pointer\" },\n onClick: (e) => {\n e.stopPropagation();\n dispatch({\n type: \"delete-entity-type\",\n payload: { id },\n });\n },\n }),\n ]),\n ]),\n ),\n );\n}\n"],"names":["styles","color"],"mappings":"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"}
|
|
@@ -274,7 +274,7 @@ mark {
|
|
|
274
274
|
.bp6-omnibar{
|
|
275
275
|
background-color:#ffffff;
|
|
276
276
|
border-radius:4px;
|
|
277
|
-
box-shadow:0 0 0 1px rgba(17, 20, 24, 0.1), 0
|
|
277
|
+
box-shadow:0 0 0 1px rgba(17, 20, 24, 0.1), 0 25px 50px -12px rgba(0, 0, 0, 0.3);
|
|
278
278
|
left:calc(50% - 250px);
|
|
279
279
|
top:20vh;
|
|
280
280
|
width:500px;
|
|
@@ -299,7 +299,7 @@ mark {
|
|
|
299
299
|
}
|
|
300
300
|
.bp6-dark .bp6-omnibar, .bp6-omnibar.bp6-dark{
|
|
301
301
|
background-color:#2f343c;
|
|
302
|
-
box-shadow:inset 0 0 0 1px rgba(255, 255, 255, 0.2), 0
|
|
302
|
+
box-shadow:inset 0 0 0 1px rgba(255, 255, 255, 0.2), 0 25px 60px -12px rgba(0, 0, 0, 0.85), inset 0 0 0.5px 0 rgba(255, 255, 255, 0.3), inset 0 0.5px 0 0 rgba(255, 255, 255, 0.08);
|
|
303
303
|
}
|
|
304
304
|
|
|
305
305
|
.bp6-omnibar-overlay .bp6-overlay-backdrop{
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@macrostrat/feedback-components",
|
|
3
|
-
"version": "2.0.
|
|
3
|
+
"version": "2.0.2",
|
|
4
4
|
"description": "",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -9,9 +9,9 @@
|
|
|
9
9
|
},
|
|
10
10
|
"license": "MIT",
|
|
11
11
|
"author": "Daven Quinn",
|
|
12
|
-
"type": "module",
|
|
13
12
|
"source": "src/index.ts",
|
|
14
|
-
"main": "dist/index.
|
|
13
|
+
"main": "dist/index.cjs",
|
|
14
|
+
"module": "dist/index.js",
|
|
15
15
|
"node": "dist/index.cjs",
|
|
16
16
|
"types": "dist/index.d.ts",
|
|
17
17
|
"style": "dist/feedback-components.css",
|
|
@@ -25,9 +25,14 @@
|
|
|
25
25
|
"exports": {
|
|
26
26
|
".": {
|
|
27
27
|
"source": "./src/index.ts",
|
|
28
|
-
"import":
|
|
29
|
-
|
|
30
|
-
|
|
28
|
+
"import": {
|
|
29
|
+
"types": "./dist/index.d.ts",
|
|
30
|
+
"default": "./dist/index.js"
|
|
31
|
+
},
|
|
32
|
+
"require": {
|
|
33
|
+
"types": "./dist/index.d.ts",
|
|
34
|
+
"default": "./dist/index.cjs"
|
|
35
|
+
},
|
|
31
36
|
"style": "./dist/feedback-components.css"
|
|
32
37
|
},
|
|
33
38
|
"./package.json": "./package.json",
|
|
@@ -42,13 +47,13 @@
|
|
|
42
47
|
"react-dom": "^18.0.0||^19.0.0"
|
|
43
48
|
},
|
|
44
49
|
"dependencies": {
|
|
45
|
-
"@blueprintjs/core": "^6.
|
|
46
|
-
"@blueprintjs/select": "^6.
|
|
47
|
-
"@macrostrat/color-utils": "^1.2.
|
|
48
|
-
"@macrostrat/data-components": "^1.
|
|
49
|
-
"@macrostrat/data-sheet": "^3.0.
|
|
50
|
+
"@blueprintjs/core": "^6.11.3",
|
|
51
|
+
"@blueprintjs/select": "^6.1.8",
|
|
52
|
+
"@macrostrat/color-utils": "^1.2.1",
|
|
53
|
+
"@macrostrat/data-components": "^1.1.4",
|
|
54
|
+
"@macrostrat/data-sheet": "^3.0.3",
|
|
50
55
|
"@macrostrat/hyper": "^3.0.6",
|
|
51
|
-
"@macrostrat/ui-components": "^5.0.
|
|
56
|
+
"@macrostrat/ui-components": "^5.0.6",
|
|
52
57
|
"classnames": "^2.5.1",
|
|
53
58
|
"d3-force": "^3.0.0",
|
|
54
59
|
"immutability-helper": "^3.1.1",
|
|
@@ -57,7 +62,7 @@
|
|
|
57
62
|
"use-element-dimensions": "^2.1.3"
|
|
58
63
|
},
|
|
59
64
|
"devDependencies": {
|
|
60
|
-
"@macrostrat/web-components-bundler": "1.0.
|
|
65
|
+
"@macrostrat/web-components-bundler": "1.0.1"
|
|
61
66
|
},
|
|
62
67
|
"publishConfig": {
|
|
63
68
|
"access": "public"
|