@macrostrat/feedback-components 1.0.1 → 1.1.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 +10 -0
- package/dist/esm/feedback-components.3b3a5357.js +137 -0
- package/dist/esm/feedback-components.3b3a5357.js.map +1 -0
- package/dist/esm/feedback-components.46a7a347.js +269 -0
- package/dist/esm/feedback-components.46a7a347.js.map +1 -0
- package/dist/esm/{node.28634e40.js → feedback-components.5509fab3.js} +11 -6
- package/dist/esm/feedback-components.5509fab3.js.map +1 -0
- package/dist/esm/feedback-components.586103e8.js +578 -0
- package/dist/esm/feedback-components.586103e8.js.map +1 -0
- package/dist/esm/{extractions.65bb73cc.js → feedback-components.5df2a926.js} +46 -18
- package/dist/esm/feedback-components.5df2a926.js.map +1 -0
- package/dist/esm/{main.module.cd706d67.js → feedback-components.6d32ee91.js} +1 -1
- package/dist/esm/{main.module.cd706d67.js.map → feedback-components.6d32ee91.js.map} +1 -1
- package/dist/esm/feedback-components.95dbe7d7.js +82 -0
- package/dist/esm/feedback-components.95dbe7d7.js.map +1 -0
- package/dist/esm/{type-selector.6e8952d6.js → feedback-components.ad9f284e.js} +6 -5
- package/dist/esm/feedback-components.ad9f284e.js.map +1 -0
- package/dist/esm/{main.module.8d366b6e.css → feedback-components.bf93773c.css} +1 -1
- package/dist/esm/{main.module.8d366b6e.css.map → feedback-components.bf93773c.css.map} +1 -1
- package/dist/esm/{main.module.2f2972c8.css → feedback-components.e273ed5b.css} +1 -1
- package/dist/esm/{main.module.2f2972c8.css.map → feedback-components.e273ed5b.css.map} +1 -1
- package/dist/esm/{main.module.d2fbdf09.js → feedback-components.f9850d85.js} +1 -1
- package/dist/esm/{main.module.d2fbdf09.js.map → feedback-components.f9850d85.js.map} +1 -1
- package/dist/esm/{edit-state.c39d8466.js → feedback-components.fa1d3641.js} +125 -7
- package/dist/esm/feedback-components.fa1d3641.js.map +1 -0
- package/dist/esm/feedback-components.fb60c70d.css +180 -0
- package/dist/esm/feedback-components.fb60c70d.css.map +1 -0
- package/dist/esm/index.d.ts +10 -64
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +2 -2
- package/dist/node/feedback-components.2f391fa4.js +2 -0
- package/dist/node/feedback-components.2f391fa4.js.map +1 -0
- package/dist/node/feedback-components.561466ac.js +2 -0
- package/dist/node/feedback-components.561466ac.js.map +1 -0
- package/dist/node/feedback-components.571ee23c.js +2 -0
- package/dist/node/feedback-components.571ee23c.js.map +1 -0
- package/dist/node/{main.module.ebdf985b.js → feedback-components.794f429b.js} +2 -2
- package/dist/node/feedback-components.794f429b.js.map +1 -0
- package/dist/node/{main.module.1fdfe813.css → feedback-components.83c21466.css} +1 -1
- package/dist/node/feedback-components.83c21466.css.map +1 -0
- package/dist/node/feedback-components.8b03e8be.js +2 -0
- package/dist/node/feedback-components.8b03e8be.js.map +1 -0
- package/dist/node/{main.module.6bc7d51b.css → feedback-components.9eb1d41a.css} +1 -1
- package/dist/node/feedback-components.9eb1d41a.css.map +1 -0
- package/dist/node/feedback-components.a39f7653.js +2 -0
- package/dist/node/feedback-components.a39f7653.js.map +1 -0
- package/dist/node/feedback-components.acac789b.js +2 -0
- package/dist/node/feedback-components.acac789b.js.map +1 -0
- package/dist/node/feedback-components.b7946db4.js +2 -0
- package/dist/node/feedback-components.b7946db4.js.map +1 -0
- package/dist/node/feedback-components.c459cc27.js +2 -0
- package/dist/node/feedback-components.c459cc27.js.map +1 -0
- package/dist/node/feedback-components.c88cb37f.css +2 -0
- package/dist/node/feedback-components.c88cb37f.css.map +1 -0
- package/dist/node/feedback-components.ec54a1e7.js +2 -0
- package/dist/node/feedback-components.ec54a1e7.js.map +1 -0
- package/dist/node/index.js +1 -1
- package/dist/node/index.js.map +1 -1
- package/package.json +7 -6
- package/src/extractions/index.ts +76 -21
- package/src/extractions/types.ts +6 -1
- package/src/feedback/edit-state.ts +184 -16
- package/src/feedback/feedback.module.sass +121 -9
- package/src/feedback/graph.ts +90 -32
- package/src/feedback/index.ts +553 -146
- package/src/feedback/node.ts +7 -1
- package/src/feedback/text-visualizer.ts +286 -49
- package/src/feedback/type-selector/index.ts +4 -2
- package/dist/esm/edit-state.c39d8466.js.map +0 -1
- package/dist/esm/extractions.65bb73cc.js.map +0 -1
- package/dist/esm/feedback.5c86878e.js +0 -252
- package/dist/esm/feedback.5c86878e.js.map +0 -1
- package/dist/esm/feedback.module.55921afe.css +0 -44
- package/dist/esm/feedback.module.55921afe.css.map +0 -1
- package/dist/esm/feedback.module.765b1e58.js +0 -28
- package/dist/esm/feedback.module.765b1e58.js.map +0 -1
- package/dist/esm/graph.f4f65d79.js +0 -83
- package/dist/esm/graph.f4f65d79.js.map +0 -1
- package/dist/esm/node.28634e40.js.map +0 -1
- package/dist/esm/text-visualizer.198e27ff.js +0 -101
- package/dist/esm/text-visualizer.198e27ff.js.map +0 -1
- package/dist/esm/type-selector.6e8952d6.js.map +0 -1
- package/dist/node/edit-state.f50ca728.js +0 -2
- package/dist/node/edit-state.f50ca728.js.map +0 -1
- package/dist/node/extractions.e6ea2eb9.js +0 -2
- package/dist/node/extractions.e6ea2eb9.js.map +0 -1
- package/dist/node/feedback.8d3d1219.js +0 -2
- package/dist/node/feedback.8d3d1219.js.map +0 -1
- package/dist/node/feedback.module.a8744203.js +0 -2
- package/dist/node/feedback.module.a8744203.js.map +0 -1
- package/dist/node/feedback.module.c4eab97d.css +0 -2
- package/dist/node/feedback.module.c4eab97d.css.map +0 -1
- package/dist/node/graph.ca5b649f.js +0 -2
- package/dist/node/graph.ca5b649f.js.map +0 -1
- package/dist/node/main.module.1857be22.js +0 -2
- package/dist/node/main.module.1857be22.js.map +0 -1
- package/dist/node/main.module.1fdfe813.css.map +0 -1
- package/dist/node/main.module.6bc7d51b.css.map +0 -1
- package/dist/node/main.module.ebdf985b.js.map +0 -1
- package/dist/node/node.33108ccc.js +0 -2
- package/dist/node/node.33108ccc.js.map +0 -1
- package/dist/node/text-visualizer.1e770afa.js +0 -2
- package/dist/node/text-visualizer.1e770afa.js.map +0 -1
- package/dist/node/type-selector.0035ef7d.js +0 -2
- package/dist/node/type-selector.0035ef7d.js.map +0 -1
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import"./feedback-components.794f429b.js";import t from"classnames";import{Tag as e}from"@blueprintjs/core";import{asChromaColor as n}from"@macrostrat/color-utils";import a from"@macrostrat/hyper";import{useDarkMode as r}from"@macrostrat/ui-components";function o(t,e,n,a){Object.defineProperty(t,e,{get:n,set:a,enumerable:!0,configurable:!0})}var i=globalThis,l={},c={},s=i.parcelRequirea149;null==s&&((s=function(t){if(t in l)return l[t].exports;if(t in c){var e=c[t];delete c[t];var n={id:t,exports:{}};return l[t]=n,e.call(n.exports,n,n.exports),n.exports}var a=Error("Cannot find module '"+t+"'");throw a.code="MODULE_NOT_FOUND",a}).register=function(t,e){c[t]=e},i.parcelRequirea149=s),s.register;var p={};o(p,"buildHighlights",()=>h),o(p,"enhanceData",()=>f),o(p,"getTagStyle",()=>m),o(p,"ExtractionContext",()=>g),o(p,"ModelInfo",()=>b),o(p,"EntityTag",()=>x);var d=s("2ptYq");let u=a.styled(d&&d.__esModule?d.default:d);function h(t,e){let n=[],a=[];for(let r of(null!=e&&(a=[e.id,...e.parents??[]]),t))n.push({start:r.indices[0],end:r.indices[1],text:r.name,backgroundColor:r.type?.color,tag:r.type?.name??"lith",id:r.id,parents:a}),n.push(...h(r.children??[],r));return n}function f(t,e,a){return{...t,model:e.get(t.model_id),entities:t.entities?.map(t=>(function t(e,a){return{...e,type:function(t,e=!1){let a=n(t.color??"#fff").brighten(e?1:2);return{...t,color:a.css()}}(a.get(e.type),null!=e.match),children:e.children?.map(e=>t(e,a))}})(t,a))}}function m(t,e){let a=n(t??"#fff"),{highlighted:o=!0,inDarkMode:i=r().isEnabled,active:l=!1}=e,c=o?.8:.5,s=o?.8:.2;l&&(c=1,s=1);let p="black",d=l?"#000":a.mix(p,c).hex(),u=o?a.mix(p,c/1.1).hex():"transparent",h=l?a.alpha(s).hex():function(t){let e=r().isEnabled?"#000000":"#ffffff",n=parseInt(t.slice(1,3),16),a=parseInt(t.slice(3,5),16),o=parseInt(t.slice(5,7),16),i=parseInt(t.slice(7,9),16)/255,l=parseInt(e.slice(1,3),16),c=parseInt(e.slice(3,5),16),s=parseInt(e.slice(5,7),16),p=(t,e)=>Math.round((1-i)*e+i*t),d=p(n,l),u=p(a,c),h=p(o,s);return"#"+d.toString(16).padStart(2,"0")+u.toString(16).padStart(2,"0")+h.toString(16).padStart(2,"0")}(a.alpha(s).hex());return i||"#ffffff"!==h||(console.log("Adjusting background color for light mode:",h),h="#f0f0f0"),{color:d,backgroundColor:h,boxSizing:"border-box",borderStyle:"solid",borderColor:u,borderWidth:"1.5px",fontWeight:l?"bold":"normal",fontSize:"0.9em"}}function g({data:t,entityTypes:e,matchComponent:n}){let a=h(t.entities,null);return u("div",[u("p",u($,{text:t.paragraph_text,highlights:a})),u(b,{data:t.model}),u("ul.entities",t.entities.map(t=>u(y,{data:t,matchComponent:n})))])}function b({data:t}){return u("p.model-name",["Model: ",u("code.bp5-code",t.name)])}function x({data:n,highlighted:a=!0,active:r=!1,onClickType:o,matchComponent:i=null}){let{name:l,type:c,match:s}=n,p=t({matched:null!=s,type:n.type?.name??"lith"},"entity"),d=m(c?.color,{highlighted:a,active:r}),h=null;return null!=s&&null!=i&&(h=u(i,{data:s})),u(e,{style:d,className:p},[u("span.entity-name",l)," ",u("code.entity-type.bp5-code",{onClick(t){r&&null!=o&&(o(c),t.stopPropagation())}},[c?.name,h])])}function y({data:t,matchComponent:e=null}){let n=t.children??[];return u("li.entity-row",[u(x,{data:t,matchComponent:e}),u.if(n.length>0)([u("ul.children",n.map(t=>u(y,{data:t,matchComponent:e})))])])}function $(t){let{text:e,highlights:n=[]}=t,a=[],r=0,o=n.sort((t,e)=>t.start-e.start);for(let t of o.map((t,e)=>{if(0===e)return t;let n=o[e-1];return t.start<n.end&&(t.start=n.end),t})){let{start:n,end:o,...i}=t;a.push(e.slice(r,n)),a.push(u("span.highlight",{style:i},e.slice(n,o))),r=o}return a.push(e.slice(r)),u("span",a)}export{h as buildHighlights,f as enhanceData,m as getTagStyle,g as ExtractionContext,b as ModelInfo,x as EntityTag};
|
|
2
|
+
//# sourceMappingURL=feedback-components.8b03e8be.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"mappings":"A,M,oD,A,Q,M,Y,A,Q,O,C,K,mB,A,Q,iB,C,K,yB,A,Q,M,mB,A,Q,e,C,K,2B,C,S,E,C,C,C,C,C,C,C,E,O,c,C,E,E,C,I,E,I,E,W,C,E,a,C,C,E,C,I,E,W,E,C,E,E,C,E,E,E,iB,A,O,I,A,C,E,S,C,E,G,K,E,O,C,C,E,C,O,C,G,K,E,C,I,E,C,C,E,A,Q,C,C,E,C,I,E,C,G,E,Q,C,C,E,O,C,C,E,C,E,E,I,C,E,O,C,E,E,O,E,E,O,A,C,I,E,A,M,uB,E,I,O,E,I,C,mB,C,C,E,Q,C,S,C,C,C,E,C,C,E,C,C,E,E,iB,C,G,E,Q,C,I,E,C,E,E,E,kB,I,G,E,E,c,I,G,E,E,c,I,G,E,E,oB,I,G,E,E,Y,I,G,E,E,Y,I,G,I,E,E,SCWA,IAAM,EAAI,AAAA,EAAM,MAAM,C,AAAC,G,AAAA,E,U,C,AAAA,E,O,CAAA,GAEhB,SAAS,EACd,CAAqB,CACrB,CAAwB,EAExB,IAAI,EAAa,EAAE,CACf,EAAU,EAAE,CAKhB,IAAK,IAAM,KAJP,AAAU,MAAV,GACF,CAAA,EAAU,CAAC,EAAO,EAAE,IAAM,EAAO,OAAO,EAAI,EAAE,CAAE,AAAA,EAG7B,GACnB,EAAW,IAAI,CAAC,CACd,MAAO,EAAO,OAAO,CAAC,EAAE,CACxB,IAAK,EAAO,OAAO,CAAC,EAAE,CACtB,KAAM,EAAO,IAAI,CACjB,gBAAiB,EAAO,IAAI,EAAE,MAC9B,IAAK,EAAO,IAAI,EAAE,MAAQ,OAC1B,GAAI,EAAO,EAAE,CACb,QAAA,CACF,GACA,EAAW,IAAI,IAAI,EAAgB,EAAO,QAAQ,EAAI,EAAE,CAAE,IAE5D,OAAO,CACT,CAEO,SAAS,EAAY,CAAc,CAAE,CAAM,CAAE,CAAW,EAC7D,MAAO,CACL,GAAG,CAAc,CACjB,MAAO,EAAO,GAAG,CAAC,EAAe,QAAQ,EACzC,SAAU,EAAe,QAAQ,EAAE,IAAI,AAAC,GACtC,AAqDN,CAAA,SAAS,EACP,CAAc,CACd,CAAoC,EAEpC,MAAO,CACL,GAAG,CAAM,CACT,KAAM,AAKV,SAAkB,CAAsB,CAAE,EAAQ,CAAA,CAAK,EACrD,IAAM,EAAQ,AAAA,EA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","sources":["<anon>","packages/feedback-components/src/extractions/index.ts"],"sourcesContent":["import \"./feedback-components.794f429b.js\";\nimport $78C1X$classnames from \"classnames\";\nimport {Tag as $78C1X$Tag} from \"@blueprintjs/core\";\nimport {asChromaColor as $78C1X$asChromaColor} from \"@macrostrat/color-utils\";\nimport $78C1X$macrostrathyper from \"@macrostrat/hyper\";\nimport {useDarkMode as $78C1X$useDarkMode} from \"@macrostrat/ui-components\";\n\n\nfunction $parcel$interopDefault(a) {\n return a && a.__esModule ? a.default : a;\n}\n\nfunction $parcel$export(e, n, v, s) {\n Object.defineProperty(e, n, {get: v, set: s, enumerable: true, configurable: true});\n}\n\n var $parcel$global = globalThis;\n \nvar $parcel$modules = {};\nvar $parcel$inits = {};\n\nvar parcelRequire = $parcel$global[\"parcelRequirea149\"];\n\nif (parcelRequire == null) {\n parcelRequire = function(id) {\n if (id in $parcel$modules) {\n return $parcel$modules[id].exports;\n }\n if (id in $parcel$inits) {\n var init = $parcel$inits[id];\n delete $parcel$inits[id];\n var module = {id: id, exports: {}};\n $parcel$modules[id] = module;\n init.call(module.exports, module, module.exports);\n return module.exports;\n }\n var err = new Error(\"Cannot find module '\" + id + \"'\");\n err.code = 'MODULE_NOT_FOUND';\n throw err;\n };\n\n parcelRequire.register = function register(id, init) {\n $parcel$inits[id] = init;\n };\n\n $parcel$global[\"parcelRequirea149\"] = parcelRequire;\n}\n\nvar parcelRegister = parcelRequire.register;\nvar $8c534c0378e15a46$exports = {};\n\n$parcel$export($8c534c0378e15a46$exports, \"buildHighlights\", () => $8c534c0378e15a46$export$c4b91360064ad200);\n$parcel$export($8c534c0378e15a46$exports, \"enhanceData\", () => $8c534c0378e15a46$export$d60b563f571177d);\n$parcel$export($8c534c0378e15a46$exports, \"getTagStyle\", () => $8c534c0378e15a46$export$35baa338324d8550);\n$parcel$export($8c534c0378e15a46$exports, \"ExtractionContext\", () => $8c534c0378e15a46$export$2b07158757c249e0);\n$parcel$export($8c534c0378e15a46$exports, \"ModelInfo\", () => $8c534c0378e15a46$export$4eb2a0ce903ce967);\n$parcel$export($8c534c0378e15a46$exports, \"EntityTag\", () => $8c534c0378e15a46$export$117e56c71b172cde);\n\nvar $2ptYq = parcelRequire(\"2ptYq\");\n\n\n\n\n\nconst $8c534c0378e15a46$var$h = (0, $78C1X$macrostrathyper).styled((0, (/*@__PURE__*/$parcel$interopDefault($2ptYq))));\nfunction $8c534c0378e15a46$export$c4b91360064ad200(entities, parent) {\n let highlights = [];\n let parents = [];\n if (parent != null) parents = [\n parent.id,\n ...parent.parents ?? []\n ];\n for (const entity of entities){\n highlights.push({\n start: entity.indices[0],\n end: entity.indices[1],\n text: entity.name,\n backgroundColor: entity.type?.color,\n tag: entity.type?.name ?? \"lith\",\n id: entity.id,\n parents: parents\n });\n highlights.push(...$8c534c0378e15a46$export$c4b91360064ad200(entity.children ?? [], entity));\n }\n return highlights;\n}\nfunction $8c534c0378e15a46$export$d60b563f571177d(extractionData, models, entityTypes) {\n return {\n ...extractionData,\n model: models.get(extractionData.model_id),\n entities: extractionData.entities?.map((d)=>$8c534c0378e15a46$var$enhanceEntity(d, entityTypes))\n };\n}\nfunction $8c534c0378e15a46$export$35baa338324d8550(baseColor, options) {\n const _baseColor = (0, $78C1X$asChromaColor)(baseColor ?? \"#fff\");\n const { highlighted: highlighted = true, inDarkMode: inDarkMode = (0, $78C1X$useDarkMode)().isEnabled, active: active = false } = options;\n let mixAmount = highlighted ? 0.8 : 0.5;\n let backgroundAlpha = highlighted ? 0.8 : 0.2;\n if (active) {\n mixAmount = 1;\n backgroundAlpha = 1;\n }\n const mixTarget = \"black\";\n const color = active ? \"#000\" : _baseColor.mix(mixTarget, mixAmount).hex();\n const borderColor = highlighted ? _baseColor.mix(mixTarget, mixAmount / 1.1).hex() : \"transparent\";\n let backgroundColor = active ? _baseColor.alpha(backgroundAlpha).hex() : $8c534c0378e15a46$var$normalizeColor(_baseColor.alpha(backgroundAlpha).hex());\n // handle white backgrounds in light mode\n if (!inDarkMode && backgroundColor === \"#ffffff\") {\n console.log(\"Adjusting background color for light mode:\", backgroundColor);\n backgroundColor = \"#f0f0f0\";\n }\n return {\n color: color,\n backgroundColor: backgroundColor,\n boxSizing: \"border-box\",\n borderStyle: \"solid\",\n borderColor: borderColor,\n borderWidth: \"1.5px\",\n fontWeight: active ? \"bold\" : \"normal\",\n fontSize: \"0.9em\"\n };\n}\nfunction $8c534c0378e15a46$var$enhanceEntity(entity, entityTypes) {\n return {\n ...entity,\n type: $8c534c0378e15a46$var$addColor(entityTypes.get(entity.type), entity.match != null),\n children: entity.children?.map((d)=>$8c534c0378e15a46$var$enhanceEntity(d, entityTypes))\n };\n}\nfunction $8c534c0378e15a46$var$addColor(entityType, match = false) {\n const color = (0, $78C1X$asChromaColor)(entityType.color ?? \"#fff\").brighten(match ? 1 : 2);\n return {\n ...entityType,\n color: color.css()\n };\n}\nfunction $8c534c0378e15a46$export$2b07158757c249e0({ data: data, entityTypes: entityTypes, matchComponent: matchComponent }) {\n const highlights = $8c534c0378e15a46$export$c4b91360064ad200(data.entities, null);\n return $8c534c0378e15a46$var$h(\"div\", [\n $8c534c0378e15a46$var$h(\"p\", $8c534c0378e15a46$var$h($8c534c0378e15a46$var$HighlightedText, {\n text: data.paragraph_text,\n highlights: highlights\n })),\n $8c534c0378e15a46$var$h($8c534c0378e15a46$export$4eb2a0ce903ce967, {\n data: data.model\n }),\n $8c534c0378e15a46$var$h(\"ul.entities\", data.entities.map((d)=>$8c534c0378e15a46$var$h($8c534c0378e15a46$var$ExtractionInfo, {\n data: d,\n matchComponent: matchComponent\n })))\n ]);\n}\nfunction $8c534c0378e15a46$export$4eb2a0ce903ce967({ data: data }) {\n return $8c534c0378e15a46$var$h(\"p.model-name\", [\n \"Model: \",\n $8c534c0378e15a46$var$h(\"code.bp5-code\", data.name)\n ]);\n}\nfunction $8c534c0378e15a46$export$117e56c71b172cde({ data: data, highlighted: highlighted = true, active: active = false, onClickType: onClickType, matchComponent: matchComponent = null }) {\n const { name: name, type: type, match: match } = data;\n const className = (0, $78C1X$classnames)({\n matched: match != null,\n type: data.type?.name ?? \"lith\"\n }, \"entity\");\n const style = $8c534c0378e15a46$export$35baa338324d8550(type?.color, {\n highlighted: highlighted,\n active: active\n });\n let _matchLink = null;\n if (match != null && matchComponent != null) _matchLink = $8c534c0378e15a46$var$h(matchComponent, {\n data: match\n });\n return $8c534c0378e15a46$var$h((0, $78C1X$Tag), {\n style: style,\n className: className\n }, [\n $8c534c0378e15a46$var$h(\"span.entity-name\", name),\n \" \",\n $8c534c0378e15a46$var$h(\"code.entity-type.bp5-code\", {\n onClick (evt) {\n if (active && onClickType != null) {\n onClickType(type);\n evt.stopPropagation();\n }\n }\n }, [\n type?.name,\n _matchLink\n ])\n ]);\n}\nfunction $8c534c0378e15a46$var$ExtractionInfo({ data: data, matchComponent: matchComponent = null }) {\n const children = data.children ?? [];\n return $8c534c0378e15a46$var$h(\"li.entity-row\", [\n $8c534c0378e15a46$var$h($8c534c0378e15a46$export$117e56c71b172cde, {\n data: data,\n matchComponent: matchComponent\n }),\n $8c534c0378e15a46$var$h.if(children.length > 0)([\n $8c534c0378e15a46$var$h(\"ul.children\", children.map((d)=>$8c534c0378e15a46$var$h($8c534c0378e15a46$var$ExtractionInfo, {\n data: d,\n matchComponent: matchComponent\n })))\n ])\n ]);\n}\nfunction $8c534c0378e15a46$var$HighlightedText(props) {\n const { text: text, highlights: highlights = [] } = props;\n const parts = [];\n let start = 0;\n const sortedHighlights = highlights.sort((a, b)=>a.start - b.start);\n const deconflictedHighlights = sortedHighlights.map((highlight, i)=>{\n if (i === 0) return highlight;\n const prev = sortedHighlights[i - 1];\n if (highlight.start < prev.end) highlight.start = prev.end;\n return highlight;\n });\n for (const highlight of deconflictedHighlights){\n const { start: s, end: end, ...rest } = highlight;\n parts.push(text.slice(start, s));\n parts.push($8c534c0378e15a46$var$h(\"span.highlight\", {\n style: rest\n }, text.slice(s, end)));\n start = end;\n }\n parts.push(text.slice(start));\n return $8c534c0378e15a46$var$h(\"span\", parts);\n}\nfunction $8c534c0378e15a46$var$normalizeColor(hex8) {\n const background = (0, $78C1X$useDarkMode)().isEnabled ? \"#000000\" : \"#ffffff\";\n const r = parseInt(hex8.slice(1, 3), 16);\n const g = parseInt(hex8.slice(3, 5), 16);\n const b = parseInt(hex8.slice(5, 7), 16);\n const a = parseInt(hex8.slice(7, 9), 16) / 255;\n const bgR = parseInt(background.slice(1, 3), 16);\n const bgG = parseInt(background.slice(3, 5), 16);\n const bgB = parseInt(background.slice(5, 7), 16);\n const blend = (fg, bg)=>Math.round((1 - a) * bg + a * fg);\n const blendedR = blend(r, bgR);\n const blendedG = blend(g, bgG);\n const blendedB = blend(b, bgB);\n return \"#\" + blendedR.toString(16).padStart(2, \"0\") + blendedG.toString(16).padStart(2, \"0\") + blendedB.toString(16).padStart(2, \"0\");\n}\nfunction $8c534c0378e15a46$var$isHighlighted(id, selectedNodes, nodes) {\n if (selectedNodes?.length === 0) return true;\n return selectedNodes?.includes(id) || nodes?.some((node)=>selectedNodes?.includes(node.id) && node.children.some((child)=>child.id === id));\n}\n\n\nexport {$8c534c0378e15a46$export$c4b91360064ad200 as buildHighlights, $8c534c0378e15a46$export$d60b563f571177d as enhanceData, $8c534c0378e15a46$export$35baa338324d8550 as getTagStyle, $8c534c0378e15a46$export$2b07158757c249e0 as ExtractionContext, $8c534c0378e15a46$export$4eb2a0ce903ce967 as ModelInfo, $8c534c0378e15a46$export$117e56c71b172cde as EntityTag};\n//# sourceMappingURL=feedback-components.8b03e8be.js.map\n","import styles from \"./main.module.sass\";\nimport classNames from \"classnames\";\nimport { Tag } from \"@blueprintjs/core\";\nimport type { Entity, EntityExt, Highlight, EntityType } from \"./types\";\nimport { CSSProperties } from \"react\";\nimport { asChromaColor } from \"@macrostrat/color-utils\";\nimport hyper from \"@macrostrat/hyper\";\nimport { useDarkMode } from \"@macrostrat/ui-components\";\n\nexport type { Entity, EntityExt };\n\nconst h = hyper.styled(styles);\n\nexport function buildHighlights(\n entities: EntityExt[],\n parent: EntityExt | null,\n): Highlight[] {\n let highlights = [];\n let parents = [];\n if (parent != null) {\n parents = [parent.id, ...(parent.parents ?? [])];\n }\n\n for (const entity of entities) {\n highlights.push({\n start: entity.indices[0],\n end: entity.indices[1],\n text: entity.name,\n backgroundColor: entity.type?.color,\n tag: entity.type?.name ?? \"lith\",\n id: entity.id,\n parents,\n });\n highlights.push(...buildHighlights(entity.children ?? [], entity));\n }\n return highlights;\n}\n\nexport function enhanceData(extractionData, models, entityTypes) {\n return {\n ...extractionData,\n model: models.get(extractionData.model_id),\n entities: extractionData.entities?.map((d) =>\n enhanceEntity(d, entityTypes),\n ),\n };\n}\n\nexport function getTagStyle(\n baseColor: string,\n options: { highlighted?: boolean; inDarkMode?: boolean; active?: boolean },\n): CSSProperties {\n const _baseColor = asChromaColor(baseColor ?? \"#fff\");\n const {\n highlighted = true,\n inDarkMode = useDarkMode().isEnabled,\n active = false,\n } = options;\n\n let mixAmount = highlighted ? 0.8 : 0.5;\n let backgroundAlpha = highlighted ? 0.8 : 0.2;\n\n if (active) {\n mixAmount = 1;\n backgroundAlpha = 1;\n }\n\n const mixTarget = \"black\";\n\n const color = active ? \"#000\" : _baseColor.mix(mixTarget, mixAmount).hex();\n const borderColor = highlighted\n ? _baseColor.mix(mixTarget, mixAmount / 1.1).hex()\n : \"transparent\";\n\n let backgroundColor = active\n ? _baseColor.alpha(backgroundAlpha).hex()\n : normalizeColor(_baseColor.alpha(backgroundAlpha).hex());\n\n // handle white backgrounds in light mode\n if (!inDarkMode && backgroundColor === \"#ffffff\") {\n console.log(\"Adjusting background color for light mode:\", backgroundColor);\n backgroundColor = \"#f0f0f0\";\n }\n\n return {\n color,\n backgroundColor,\n boxSizing: \"border-box\",\n borderStyle: \"solid\",\n borderColor,\n borderWidth: \"1.5px\",\n fontWeight: active ? \"bold\" : \"normal\",\n fontSize: \"0.9em\",\n };\n}\n\nfunction enhanceEntity(\n entity: Entity,\n entityTypes: Map<number, EntityType>,\n): EntityExt {\n return {\n ...entity,\n type: addColor(entityTypes.get(entity.type), entity.match != null),\n children: entity.children?.map((d) => enhanceEntity(d, entityTypes)),\n };\n}\n\nfunction addColor(entityType: EntityType, match = false) {\n const color = asChromaColor(entityType.color ?? \"#fff\").brighten(\n match ? 1 : 2,\n );\n\n return { ...entityType, color: color.css() };\n}\n\nexport function ExtractionContext({\n data,\n entityTypes,\n matchComponent,\n}: {\n data: any;\n entityTypes: Map<number, EntityType>;\n matchComponent: MatchComponent;\n}) {\n const highlights = buildHighlights(data.entities, null);\n\n return h(\"div\", [\n h(\"p\", h(HighlightedText, { text: data.paragraph_text, highlights })),\n h(ModelInfo, { data: data.model }),\n h(\n \"ul.entities\",\n data.entities.map((d) => h(ExtractionInfo, { data: d, matchComponent })),\n ),\n ]);\n}\n\nexport function ModelInfo({ data }) {\n return h(\"p.model-name\", [\"Model: \", h(\"code.bp5-code\", data.name)]);\n}\n\nexport type MatchComponent = (props: { data: any }) => any;\n\ntype EntityTagProps = {\n data: EntityExt;\n highlighted?: boolean;\n active?: boolean;\n onClickType?: (type: EntityType) => void;\n matchComponent?: MatchComponent;\n};\n\nexport function EntityTag({\n data,\n highlighted = true,\n active = false,\n onClickType,\n matchComponent = null,\n}: EntityTagProps) {\n const { name, type, match } = data;\n\n const className = classNames(\n {\n matched: match != null,\n type: data.type?.name ?? \"lith\",\n },\n \"entity\",\n );\n\n const style = getTagStyle(type?.color, { highlighted, active });\n\n let _matchLink = null;\n if (match != null && matchComponent != null) {\n _matchLink = h(matchComponent, { data: match });\n }\n\n return h(Tag, { style, className }, [\n h(\"span.entity-name\", name),\n \" \",\n h(\n \"code.entity-type.bp5-code\",\n {\n onClick(evt) {\n if (active && onClickType != null) {\n onClickType(type);\n evt.stopPropagation();\n }\n },\n },\n [type?.name, _matchLink],\n ),\n ]);\n}\n\nfunction ExtractionInfo({\n data,\n matchComponent = null,\n}: {\n data: EntityExt;\n matchComponent: MatchComponent;\n}) {\n const children = data.children ?? [];\n\n return h(\"li.entity-row\", [\n h(EntityTag, { data, matchComponent }),\n h.if(children.length > 0)([\n h(\n \"ul.children\",\n children.map((d) => h(ExtractionInfo, { data: d, matchComponent })),\n ),\n ]),\n ]);\n}\n\nfunction HighlightedText(props: { text: string; highlights: Highlight[] }) {\n const { text, highlights = [] } = props;\n const parts = [];\n let start = 0;\n\n const sortedHighlights = highlights.sort((a, b) => a.start - b.start);\n const deconflictedHighlights = sortedHighlights.map((highlight, i) => {\n if (i === 0) return highlight;\n const prev = sortedHighlights[i - 1];\n if (highlight.start < prev.end) {\n highlight.start = prev.end;\n }\n return highlight;\n });\n\n for (const highlight of deconflictedHighlights) {\n const { start: s, end, ...rest } = highlight;\n parts.push(text.slice(start, s));\n parts.push(h(\"span.highlight\", { style: rest }, text.slice(s, end)));\n start = end;\n }\n parts.push(text.slice(start));\n return h(\"span\", parts);\n}\n\nfunction normalizeColor(hex8) {\n const background = useDarkMode().isEnabled ? \"#000000\" : \"#ffffff\";\n\n const r = parseInt(hex8.slice(1, 3), 16);\n const g = parseInt(hex8.slice(3, 5), 16);\n const b = parseInt(hex8.slice(5, 7), 16);\n const a = parseInt(hex8.slice(7, 9), 16) / 255;\n\n const bgR = parseInt(background.slice(1, 3), 16);\n const bgG = parseInt(background.slice(3, 5), 16);\n const bgB = parseInt(background.slice(5, 7), 16);\n\n const blend = (fg, bg) => Math.round((1 - a) * bg + a * fg);\n\n const blendedR = blend(r, bgR);\n const blendedG = blend(g, bgG);\n const blendedB = blend(b, bgB);\n\n return (\n \"#\" +\n blendedR.toString(16).padStart(2, \"0\") +\n blendedG.toString(16).padStart(2, \"0\") +\n blendedB.toString(16).padStart(2, \"0\")\n );\n}\n\nfunction isHighlighted(id: number, selectedNodes: number[], nodes: any[]) {\n if (selectedNodes?.length === 0) return true;\n return (\n selectedNodes?.includes(id) ||\n nodes?.some(\n (node) =>\n selectedNodes?.includes(node.id) &&\n node.children.some((child) => child.id === id),\n )\n );\n}\n"],"names":["$78C1X$classnames","Tag","$78C1X$Tag","asChromaColor","$78C1X$asChromaColor","$78C1X$macrostrathyper","useDarkMode","$78C1X$useDarkMode","$parcel$export","e","n","v","s","Object","defineProperty","get","set","enumerable","configurable","$parcel$global","globalThis","$parcel$modules","$parcel$inits","parcelRequire","id","exports","init","module","call","err","Error","code","register","$8c534c0378e15a46$exports","$8c534c0378e15a46$export$c4b91360064ad200","$8c534c0378e15a46$export$d60b563f571177d","$8c534c0378e15a46$export$35baa338324d8550","$8c534c0378e15a46$export$2b07158757c249e0","$8c534c0378e15a46$export$4eb2a0ce903ce967","$8c534c0378e15a46$export$117e56c71b172cde","$2ptYq","$8c534c0378e15a46$var$h","styled","a","__esModule","default","entities","parent","highlights","parents","entity","push","start","indices","end","text","name","backgroundColor","type","color","tag","children","extractionData","models","entityTypes","model","model_id","map","d","$8c534c0378e15a46$var$enhanceEntity","$8c534c0378e15a46$var$addColor","entityType","match","brighten","css","baseColor","options","_baseColor","highlighted","inDarkMode","isEnabled","active","mixAmount","backgroundAlpha","mixTarget","mix","hex","borderColor","alpha","$8c534c0378e15a46$var$normalizeColor","hex8","background","r","parseInt","slice","g","b","bgR","bgG","bgB","blend","fg","bg","Math","round","blendedR","blendedG","blendedB","toString","padStart","console","log","boxSizing","borderStyle","borderWidth","fontWeight","fontSize","data","matchComponent","$8c534c0378e15a46$var$HighlightedText","paragraph_text","$8c534c0378e15a46$var$ExtractionInfo","onClickType","className","matched","style","_matchLink","onClick","evt","stopPropagation","if","length","props","parts","sortedHighlights","sort","highlight","i","prev","rest","buildHighlights","enhanceData","getTagStyle","ExtractionContext","ModelInfo","EntityTag"],"version":3,"file":"feedback-components.8b03e8be.js.map","sourceRoot":"../../../../"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
.WofFTa_item-container{align-items:center;gap:1em;min-height:40px;display:flex}.WofFTa_item-container.WofFTa_selected{background-color:var(--panel-background-color)}.WofFTa_swatch{border-radius:4px;width:30px;height:30px}
|
|
2
|
-
/*# sourceMappingURL=
|
|
2
|
+
/*# sourceMappingURL=feedback-components.9eb1d41a.css.map */
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"mappings":"ACAA,+EAME,sFAGF","sources":["feedback-components.9eb1d41a.css","packages/feedback-components/src/feedback/type-selector/main.module.sass"],"sourcesContent":[".WofFTa_item-container {\n align-items: center;\n gap: 1em;\n min-height: 40px;\n display: flex;\n}\n\n.WofFTa_item-container.WofFTa_selected {\n background-color: var(--panel-background-color);\n}\n\n.WofFTa_swatch {\n border-radius: 4px;\n width: 30px;\n height: 30px;\n}\n/*# sourceMappingURL=feedback-components.9eb1d41a.css.map */\n",".item-container\n min-height: 40px\n display: flex\n align-items: center\n gap: 1em\n\n &.selected\n background-color: var(--panel-background-color)\n\n.swatch\n width: 30px\n height: 30px\n border-radius: 4px\n"],"names":[],"version":3,"file":"feedback-components.9eb1d41a.css.map","sourceRoot":"../../../../"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import"./feedback-components.8b03e8be.js";import"./feedback-components.b7946db4.js";import"./feedback-components.c459cc27.js";import e from"@macrostrat/hyper";var t=globalThis,r={},a={},o=t.parcelRequirea149;null==o&&((o=function(e){if(e in r)return r[e].exports;if(e in a){var t=a[e];delete a[e];var o={id:e,exports:{}};return r[e]=o,t.call(o.exports,o,o.exports),o.exports}var n=Error("Cannot find module '"+e+"'");throw n.code="MODULE_NOT_FOUND",n}).register=function(e,t){a[e]=t},t.parcelRequirea149=o),o.register;var n=o("edvRb"),d=o("eedTh"),i=o("9wFEx");let l=e.styled(i&&i.__esModule?i.default:i);var c=function({node:e,style:t,dragHandle:r,tree:a,matchComponent:o}){let i=function e(t,r){if(0==r.selectedNodes.length)return!0;for(let e of r.selectedNodes){var a,o;if(a=t.data,o=e.data,a.id==o.id)return!0}return!!(null!=t.parent&&e(t.parent,r))}(e,a),c=function(e,t){for(let o of t.selectedNodes){var r,a;if(r=e.data,a=o.data,r.id==a.id)return!0}return!1}(e,a),s=(0,d.useTreeDispatch)();return e.data?.type||(e.data.type={name:"lith",color:"rgb(107, 255, 91)"}),l("div.node",{style:t,ref:r},l(n.EntityTag,{data:e.data,active:c,highlighted:i,matchComponent:o,onClickType(){s({type:"toggle-entity-type-selector"})}}))};export{c as default};
|
|
2
|
+
//# sourceMappingURL=feedback-components.a39f7653.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"mappings":"A,M,oD,A,O,oD,A,O,oD,A,Q,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,I,E,E,S,E,E,S,E,E,SCOA,IAAM,EAAI,AAAA,EAAM,MAAM,C,AAAC,G,AAAA,E,U,C,AAAA,E,O,CAAA,GA+DvB,IAAA,EA3BA,SAAc,CAAA,KAAE,CAAI,CAAA,MAAE,CAAK,CAAA,WAAE,CAAU,CAAA,KAAE,CAAI,CAAA,eAAE,CAAc,CAAO,EAClE,IAAI,EAAuB,AA9B7B,SAAS,EAAkB,CAAuB,CAAE,CAAuB,EAEzE,GAAI,AAA6B,GAA7B,EAAK,aAAa,CAAC,MAAM,CAC3B,MAAO,CAAA,EAGT,IAAK,IAAM,KAAgB,EAAK,aAAa,CAC3C,KAZgB,EAAsB,EAYtC,GAZgB,EAYD,EAAK,IAAI,CAZc,EAYZ,EAAa,IAAI,CAXtC,EAAW,EAAE,EAAI,EAAS,EAAE,CAY/B,MAAO,CAAA,CADT,SAME,CAAA,AAAe,MAAf,EAAK,MAAM,EAAY,EAAkB,EAAK,MAAM,CAAE,EAAA,CAK5D,EAY+C,EAAM,GAC/C,EAAkB,AAXxB,SAAsB,CAAuB,CAAE,CAAuB,EACpE,IAAK,IAAM,KAAgB,EAAK,aAAa,CAC3C,KA3BgB,EAAsB,EA2BtC,GA3BgB,EA2BD,EAAK,IAAI,CA3Bc,EA2BZ,EAAa,IAAI,CA1BtC,EAAW,EAAE,EAAI,EAAS,EAAE,CA2B/B,MAAO,CAAA,CADT,CAIF,MAAO,CAAA,CACT,EAIqC,EAAM,GAEnC,EAAW,AAAA,CAAA,EAAA,EAAA,eAAc,AAAd,IAQjB,OAJI,AAAC,EAAK,IAAI,EAAE,MACd,CAAA,EAAK,IAAI,CAAC,IAAI,CAAG,CAAE,KAAM,OAAQ,MAAO,mBAAoB,CAAA,EAGvD,EACL,WACA,CAAE,MAAA,EAAO,IAAK,CAAW,EACzB,EAAE,EAAA,SAAQ,CAAG,CACX,KAAM,EAAK,IAAI,CACf,OAAA,EACA,YAAA,EACA,eAAA,EACA,cACE,EAAS,CAAE,KAAM,6BAA8B,EACjD,CACF,GAEJ,S,K,O","sources":["<anon>","packages/feedback-components/src/feedback/node.ts"],"sourcesContent":["import \"./feedback-components.8b03e8be.js\";\nimport \"./feedback-components.b7946db4.js\";\nimport \"./feedback-components.c459cc27.js\";\nimport $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[\"parcelRequirea149\"];\n\nif (parcelRequire == null) {\n parcelRequire = function(id) {\n if (id in $parcel$modules) {\n return $parcel$modules[id].exports;\n }\n if (id in $parcel$inits) {\n var init = $parcel$inits[id];\n delete $parcel$inits[id];\n var module = {id: id, exports: {}};\n $parcel$modules[id] = module;\n init.call(module.exports, module, module.exports);\n return module.exports;\n }\n var err = new Error(\"Cannot find module '\" + id + \"'\");\n err.code = 'MODULE_NOT_FOUND';\n throw err;\n };\n\n parcelRequire.register = function register(id, init) {\n $parcel$inits[id] = init;\n };\n\n $parcel$global[\"parcelRequirea149\"] = parcelRequire;\n}\n\nvar parcelRegister = parcelRequire.register;\n\nvar $edvRb = parcelRequire(\"edvRb\");\n\nvar $eedTh = parcelRequire(\"eedTh\");\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, $eedTh.useTreeDispatch)();\n // console.log(\"Node render\", node.data, highlighted, active);\n if (!node.data?.type) node.data.type = {\n name: \"lith\",\n color: \"rgb(107, 255, 91)\"\n };\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\nexport {$2e9ede27ff2a3eea$export$2e2bcd8739ae039 as default};\n//# sourceMappingURL=feedback-components.a39f7653.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 // console.log(\"Node render\", node.data, highlighted, active);\n\n if (!node.data?.type) {\n node.data.type = { name: \"lith\", color: \"rgb(107, 255, 91)\" };\n }\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"],"names":["$hPIF3$macrostrathyper","$parcel$global","globalThis","$parcel$modules","$parcel$inits","parcelRequire","id","exports","init","module","call","err","Error","code","register","$edvRb","$eedTh","$9wFEx","$2e9ede27ff2a3eea$var$h","styled","a","__esModule","default","$2e9ede27ff2a3eea$export$2e2bcd8739ae039","node","style","dragHandle","tree","matchComponent","highlighted","$2e9ede27ff2a3eea$var$isNodeHighlighted","selectedNodes","length","selectedNode","searchNode","treeNode","data","parent","active","$2e9ede27ff2a3eea$var$isNodeActive","dispatch","useTreeDispatch","type","name","color","ref","EntityTag","onClickType"],"version":3,"file":"feedback-components.a39f7653.js.map","sourceRoot":"../../../../"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import"./feedback-components.2f391fa4.js";import e from"@macrostrat/hyper";import t from"classnames";import{Omnibar as r}from"@blueprintjs/select";import"@blueprintjs/select/lib/css/blueprint-select.css";var i=globalThis,o={},l={},n=i.parcelRequirea149;null==n&&((n=function(e){if(e in o)return o[e].exports;if(e in l){var t=l[e];delete l[e];var r={id:e,exports:{}};return o[e]=r,t.call(r.exports,r,r.exports),r.exports}var i=Error("Cannot find module '"+e+"'");throw i.code="MODULE_NOT_FOUND",i}).register=function(e,t){l[e]=t},i.parcelRequirea149=n),n.register;var s=n("l4zkY");let c=e.styled(s&&s.__esModule?s.default:s),a=e=>{let{active:r,selected:i,className:o,onSelect:l,item:n,children:s}=e;return o=t({active:r,selected:i},o),c("div.item-container",{key:n.id,className:o,onClick:()=>l(n)},[c("div.swatch",{style:{backgroundColor:n.color}}),c("div.item",{},n.name)])};function d(e){let{onSelectItem:t,items:i,isOpen:o,onClose:l,onQueryChange:n}=e;return c(r,{onItemSelect:t,items:i,onQueryChange:n,resetOnSelect:!1,isOpen:o,onClose:l,itemRenderer:(e,{handleClick:t,modifiers:r})=>c(a,{key:e.id,item:e,onSelect:t,active:r.active,selected:r.active})})}export{d as OmniboxSelector};
|
|
2
|
+
//# sourceMappingURL=feedback-components.acac789b.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"mappings":"A,M,oD,A,Q,M,mB,A,Q,M,Y,A,Q,W,C,K,qB,A,O,kD,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,CCEC,IAAA,EAAA,EAAA,SAUD,IAAM,EAAI,AAAA,EAAM,MAAM,C,AAAC,G,AAAA,E,U,C,AAAA,E,O,CAAA,GAajB,EAAoD,AAAC,IAEzD,GAAI,CAAA,OAAE,CAAM,CAAA,SAAE,CAAQ,CAAA,UAAE,CAAS,CAAA,SAAE,CAAQ,CAAA,KAAE,CAAI,CAAA,SAAE,CAAQ,CAAE,CAAG,SAChE,EAAY,AAAA,EAAW,CAAE,OAAA,EAAQ,SAAA,CAAS,EAAG,GAGtC,EACL,qBACA,CACE,IAAK,EAAK,EAAE,CACZ,UAAA,EACA,QAPY,IAAM,EAAS,EAQ7B,EACA,CACE,EAAE,aAAc,CAAE,MAAO,CAAE,gBAAiB,EAAK,KAAK,AAAC,CAAE,GACzD,EAAE,WAAY,CAAC,EAAG,EAAK,IAAI,EAC5B,CAEL,EAYO,SAAS,EAAmB,CAAsB,EAEvD,GAAM,CAAA,aAAE,CAAY,CAAA,MAAE,CAAK,CAAA,OAAE,CAAM,CAAA,QAAE,CAAO,CAAA,cAAE,CAAa,CAAE,CAAG,EAEhE,OAAO,EAAE,EAAS,CAChB,aAAc,EACd,MAAA,EACA,cAAA,EACA,cAAe,CAAA,EACf,OAAA,EACA,QAAA,EACA,aAAA,CAAa,EAAS,CAAA,YAAE,CAAW,CAAA,UAAE,CAAS,CAAE,GACvC,EAAE,EAAa,CACpB,IAAK,EAAK,EAAE,CACZ,KAAA,EACA,SAAU,EACV,OAAQ,EAAU,MAAM,CACxB,SAAU,EAAU,MAAM,AAC5B,EAEJ,EACF,Q,K,e","sources":["<anon>","packages/feedback-components/src/feedback/type-selector/index.ts"],"sourcesContent":["import \"./feedback-components.2f391fa4.js\";\nimport $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[\"parcelRequirea149\"];\n\nif (parcelRequire == null) {\n parcelRequire = function(id) {\n if (id in $parcel$modules) {\n return $parcel$modules[id].exports;\n }\n if (id in $parcel$inits) {\n var init = $parcel$inits[id];\n delete $parcel$inits[id];\n var module = {id: id, exports: {}};\n $parcel$modules[id] = module;\n init.call(module.exports, module, module.exports);\n return module.exports;\n }\n var err = new Error(\"Cannot find module '\" + id + \"'\");\n err.code = 'MODULE_NOT_FOUND';\n throw err;\n };\n\n parcelRequire.register = function register(id, init) {\n $parcel$inits[id] = init;\n };\n\n $parcel$global[\"parcelRequirea149\"] = parcelRequire;\n}\n\nvar parcelRegister = parcelRequire.register;\n/**\n * Entity type selector\n */ \nvar $l4zkY = parcelRequire(\"l4zkY\");\n\n\n\n\nconst $48d99b99dde7627d$var$h = (0, $16Zb4$macrostrathyper).styled((0, (/*@__PURE__*/$parcel$interopDefault($l4zkY))));\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, onQueryChange: onQueryChange } = props;\n return $48d99b99dde7627d$var$h((0, $16Zb4$Omnibar), {\n onItemSelect: onSelectItem,\n items: items,\n onQueryChange: onQueryChange,\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\nexport {$48d99b99dde7627d$export$d8660660a589068c as OmniboxSelector};\n//# sourceMappingURL=feedback-components.acac789b.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 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":["$16Zb4$macrostrathyper","$16Zb4$classnames","Omnibar","$16Zb4$Omnibar","$parcel$global","globalThis","$parcel$modules","$parcel$inits","parcelRequire","id","exports","init","module","call","err","Error","code","register","$l4zkY","$48d99b99dde7627d$var$h","styled","a","__esModule","default","$48d99b99dde7627d$var$TagListItem","props","active","selected","className","onSelect","item","children","key","onClick","style","backgroundColor","color","name","$48d99b99dde7627d$export$d8660660a589068c","onSelectItem","items","isOpen","onClose","onQueryChange","onItemSelect","resetOnSelect","itemRenderer","handleClick","modifiers","OmniboxSelector"],"version":3,"file":"feedback-components.acac789b.js.map","sourceRoot":"../../../../"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{useReducer as e,createContext as t,useContext as n}from"react";import l from"immutability-helper";var r,d=((r={}).Tree="tree",r.Graph="graph",r);function i(t,n){let l=n.values().next().value;return e(o,{initialTree:t,tree:t,selectedNodes:[],entityTypesMap:n,selectedEntityType:l,lastInternalId:0,isSelectingEntityType:!1,viewMode:"tree"})}let a=t(null);function s(){let e=n(a);if(null==e)throw Error("No dispatch context available");return e}function o(e,t){switch(t.type){case"add-entity-type":{let{name:n,description:l,color:r}=t.payload,d=e.lastInternalId-1,i={id:d,name:n,description:""===l?null:l,color:r},a=new Map(e.entityTypesMap);return a.set(d,i),{...e,entityTypesMap:a,selectedEntityType:i,lastInternalId:d}}case"update-entity-type":{let{id:n,name:l,description:r,color:d}=t.payload,i=new Map(e.entityTypesMap),a=i.get(n);if(!a)return console.warn(`Entity type with id ${n} not found`),e;let s={...a,name:l,description:""===r?null:r,color:d};i.set(n,s);let o=h(e.tree,a,s);return{...e,tree:o,entityTypesMap:i,selectedEntityType:s}}case"select-range":let n=t.payload.ids,r=n[0],d=n[1],i=function(e){let t=[];return!function e(n){for(let l of n)t.push(l),Array.isArray(l.children)&&l.children.length>0&&e(l.children)}(e),t.sort((e,t)=>e.indices[0]-t.indices[0])}(e.tree),a=i.findIndex(e=>e.id===r),s=i.findIndex(e=>e.id===d),o=i.slice(a,s+1);return console.log("Selecting range:",o),{...e,selectedNodes:o.map(e=>e.id)};case"move-node":let[u,g]=y(e.tree,t.payload.dragIds),T=[];t.payload.parentId&&(T=p(u,t.payload.parentId)).push("children");let m=c(T,{$splice:[[t.payload.index,0,...g]]});return{...e,tree:l(u,m)};case"delete-node":let[$,x]=y(e.tree,t.payload.ids),I=x.flatMap(e=>e.children??[]).filter(e=>!function e(t,n){for(let l of t)if(l.id==n)return!0;else if(l.children&&e(l.children,n))return!0;return!1}($,e.id));return{...e,tree:[...$,...I],selectedNodes:e.selectedNodes.filter(e=>!t.payload.ids.includes(e))};case"select-node":let{ids:M}=t.payload,N=t.payload.ids.length>0?f(e.tree,M[0])?.type:null;return{...e,selectedNodes:M,selectedEntityType:N};case"toggle-node-selected":let w=t.payload.ids.filter(t=>!e.selectedNodes.includes(t)),E=e.selectedNodes.filter(e=>!t.payload.ids.includes(e)),b=t.payload.ids.length>0?f(e.tree,t.payload.ids[0])?.type:null;return{...e,selectedNodes:[...E,...w],selectedEntityType:b};case"create-node":let v=e.lastInternalId-1,{text:S,start:C,end:D}=t.payload,A={id:v,name:S,children:[],indices:[C,D],type:e.selectedEntityType};return{...e,tree:[...e.tree,A],selectedNodes:[v],lastInternalId:v};case"delete-entity-type":{console.log("Deleting entity type:",t.payload.id);let{id:n}=t.payload,l=new Map(e.entityTypesMap),r=l.get(n);l.delete(n);let d=l.values().next().value,i=h(e.tree,r,d);return{...e,tree:i,entityTypesMap:l,selectedNodes:[]}}case"toggle-entity-type-selector":return{...e,isSelectingEntityType:t.payload??!e.isSelectingEntityType};case"select-entity-type":{let n=e.tree;for(let r of e.selectedNodes)n=l(n,c(p(e.tree,r),{type:{$set:t.payload}}));return{...e,tree:n,selectedEntityType:t.payload}}case"deselect":return{...e,selectedNodes:[]};case"reset":return{...e,tree:e.initialTree,selectedNodes:[]};case"set-view-mode":return{...e,viewMode:t.payload}}}function c(e,t){let n=t;for(let t=e.length-1;t>=0;t--)n={[e[t]]:n};return n}function p(e,t){for(let n=0;n<e.length;n++)if(e[n].id==t)return[n];else if(e[n].children){let l=p(e[n].children,t);if(null!=l)return[n,"children",...l]}return null}function y(e,t){let n=[],l=[];for(let r of e)if(t.includes(r.id))l.push(r);else{if(r.children){let[e,n]=y(r.children,t);r={...r,children:e},l.push(...n)}n.push(r)}return[n,l]}function u(e){let t=[],n=[],l=new Map;for(let r of e){if(l.has(r.id))continue;let{indices:e,id:d,name:i,type:a,children:s}=r,o={id:d,type:a.id,color:a.color,name:i,txt_range:[e],reasoning:null,match:r.match,children:s};if(l.set(r.id,r),t.push(o),r.children){for(let e of r.children)n.push({source:r.id,dest:e.id});let{nodes:e,edges:l}=u(r.children);t.push(...e),n.push(...l)}}return{nodes:t,edges:n}}function f(e,t){for(let n of e){if(n.id===t)return n;if(n.children){let e=f(n.children,t);if(e)return e}}return null}function h(e,t,n){return e.map(e=>(function(e,t,n){let l=e.type.id===t.id?n:e.type;return{...e,type:l,children:e.children?h(e.children,t,n):[]}})(e,t,n))}export{d as ViewMode,i as useUpdatableTree,a as TreeDispatchContext,s as useTreeDispatch,u as treeToGraph};
|
|
2
|
+
//# sourceMappingURL=feedback-components.b7946db4.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"mappings":"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","sources":["<anon>","packages/feedback-components/src/feedback/edit-state.ts"],"sourcesContent":["import {useReducer as $eGztG$useReducer, createContext as $eGztG$createContext, useContext as $eGztG$useContext} from \"react\";\nimport $eGztG$immutabilityhelper from \"immutability-helper\";\n\n\n\nvar $330ae695507d96f5$export$53ec42062883b2d4 = /*#__PURE__*/ function(ViewMode) {\n ViewMode[\"Tree\"] = \"tree\";\n ViewMode[\"Graph\"] = \"graph\";\n return ViewMode;\n}({});\nfunction $330ae695507d96f5$export$911bb4b9c8065d3d(initialTree, entityTypes) {\n // Get the first entity type\n // issue: grabs second entity instead of selected one\n const type = entityTypes.values().next().value;\n return (0, $eGztG$useReducer)($330ae695507d96f5$var$treeReducer, {\n initialTree: initialTree,\n tree: initialTree,\n selectedNodes: [],\n entityTypesMap: entityTypes,\n selectedEntityType: type,\n lastInternalId: 0,\n isSelectingEntityType: false,\n viewMode: \"tree\"\n });\n}\nconst $330ae695507d96f5$export$e5ce04c5b3f58533 = (0, $eGztG$createContext)(null);\nfunction $330ae695507d96f5$export$e1068f2d1c68f87e() {\n const dispatch = (0, $eGztG$useContext)($330ae695507d96f5$export$e5ce04c5b3f58533);\n if (dispatch == null) throw new Error(\"No dispatch context available\");\n return dispatch;\n}\nfunction $330ae695507d96f5$var$treeReducer(state, action) {\n switch(action.type){\n case \"add-entity-type\":\n {\n // Add a new entity type to the map\n const { name: name, description: description, color: color } = action.payload;\n const newId = state.lastInternalId - 1;\n const newType = {\n id: newId,\n name: name,\n description: description === \"\" ? null : description,\n color: color\n };\n const newEntityTypesMap = new Map(state.entityTypesMap);\n newEntityTypesMap.set(newId, newType);\n return {\n ...state,\n entityTypesMap: newEntityTypesMap,\n selectedEntityType: newType,\n lastInternalId: newId\n };\n }\n case \"update-entity-type\":\n {\n // Update an existing entity type in the map\n const { id: id, name: name, description: description, color: color } = action.payload;\n const newEntityTypesMap = new Map(state.entityTypesMap);\n const oldType = newEntityTypesMap.get(id);\n if (!oldType) {\n console.warn(`Entity type with id ${id} not found`);\n return state;\n }\n const updatedType = {\n ...oldType,\n name: name,\n description: description === \"\" ? null : description,\n color: color\n };\n newEntityTypesMap.set(id, updatedType);\n // Update the tree to reflect the new type\n const newTree = $330ae695507d96f5$var$updateTreeTypes(state.tree, oldType, updatedType);\n return {\n ...state,\n tree: newTree,\n entityTypesMap: newEntityTypesMap,\n selectedEntityType: updatedType\n };\n }\n case \"select-range\":\n // Select a range of nodes by their IDs\n const payloadIds = action.payload.ids;\n const node1 = payloadIds[0];\n const node2 = payloadIds[1];\n // make list of nodes in order\n const allNodes = $330ae695507d96f5$var$flattenAndSort(state.tree);\n // select all nodes between node1 and node2\n const startIndex = allNodes.findIndex((node)=>node.id === node1);\n const endIndex = allNodes.findIndex((node)=>node.id === node2);\n const selectedNodes = allNodes.slice(startIndex, endIndex + 1);\n console.log(\"Selecting range:\", selectedNodes);\n return {\n ...state,\n selectedNodes: selectedNodes.map((node)=>node.id)\n };\n case \"move-node\":\n // For each node in the tree, if the node is in the dragIds, remove it from the tree and collect it\n const [newTree, removedNodes] = $330ae695507d96f5$var$removeNodes(state.tree, action.payload.dragIds);\n let keyPath = [];\n if (action.payload.parentId) {\n keyPath = $330ae695507d96f5$var$findNode(newTree, action.payload.parentId);\n keyPath.push(\"children\");\n }\n // Add removed nodes to the new tree at the correct location\n let updateSpec = $330ae695507d96f5$var$buildNestedSpec(keyPath, {\n $splice: [\n [\n action.payload.index,\n 0,\n ...removedNodes\n ]\n ]\n });\n return {\n ...state,\n tree: (0, $eGztG$immutabilityhelper)(newTree, updateSpec)\n };\n case \"delete-node\":\n // For each node in the tree, if the node is in the ids, remove it from the tree\n const [newTree2, _removedNodes] = $330ae695507d96f5$var$removeNodes(state.tree, action.payload.ids);\n // Get children of the removed nodes\n // If children are not present elsewhere in the tree, insert them\n const children = _removedNodes.flatMap((node)=>node.children ?? []).filter((child)=>!$330ae695507d96f5$var$nodeIsInTree(newTree2, child.id));\n // Reset the selection\n return {\n ...state,\n tree: [\n ...newTree2,\n ...children\n ],\n selectedNodes: state.selectedNodes.filter((id)=>!action.payload.ids.includes(id))\n };\n case \"select-node\":\n const { ids: ids } = action.payload;\n const type = action.payload.ids.length > 0 ? $330ae695507d96f5$var$findNodeById(state.tree, ids[0])?.type : null;\n return {\n ...state,\n selectedNodes: ids,\n selectedEntityType: type\n };\n // otherwise fall through to toggle-node-selected for a single ID\n case \"toggle-node-selected\":\n const nodesToAdd = action.payload.ids.filter((id)=>!state.selectedNodes.includes(id));\n const nodesToKeep = state.selectedNodes.filter((id)=>!action.payload.ids.includes(id));\n const newType = action.payload.ids.length > 0 ? $330ae695507d96f5$var$findNodeById(state.tree, action.payload.ids[0])?.type : null;\n return {\n ...state,\n selectedNodes: [\n ...nodesToKeep,\n ...nodesToAdd\n ],\n selectedEntityType: newType\n };\n case \"create-node\":\n const newId = state.lastInternalId - 1;\n const { text: text, start: start, end: end } = action.payload;\n const node = {\n id: newId,\n name: text,\n children: [],\n indices: [\n start,\n end\n ],\n type: state.selectedEntityType\n };\n return {\n ...state,\n tree: [\n ...state.tree,\n node\n ],\n selectedNodes: [\n newId\n ],\n lastInternalId: newId\n };\n case \"delete-entity-type\":\n {\n // Remove the entity type from the map\n console.log(\"Deleting entity type:\", action.payload.id);\n const { id: id } = action.payload;\n const newEntityTypesMap = new Map(state.entityTypesMap);\n const oldType = newEntityTypesMap.get(id);\n newEntityTypesMap.delete(id);\n const defaultType = newEntityTypesMap.values().next().value;\n const newTree = $330ae695507d96f5$var$updateTreeTypes(state.tree, oldType, defaultType);\n return {\n ...state,\n tree: newTree,\n entityTypesMap: newEntityTypesMap,\n selectedNodes: []\n };\n }\n /** Entity type selection */ case \"toggle-entity-type-selector\":\n return {\n ...state,\n isSelectingEntityType: action.payload ?? !state.isSelectingEntityType\n };\n case \"select-entity-type\":\n {\n // For each selected node, update the type\n let newTree2 = state.tree;\n for (let id of state.selectedNodes){\n const keyPath = $330ae695507d96f5$var$findNode(state.tree, id);\n const nestedSpec = $330ae695507d96f5$var$buildNestedSpec(keyPath, {\n type: {\n $set: action.payload\n }\n });\n newTree2 = (0, $eGztG$immutabilityhelper)(newTree2, nestedSpec);\n }\n return {\n ...state,\n tree: newTree2,\n selectedEntityType: action.payload\n };\n }\n case \"deselect\":\n return {\n ...state,\n selectedNodes: []\n };\n case \"reset\":\n return {\n ...state,\n tree: state.initialTree,\n selectedNodes: []\n };\n case \"set-view-mode\":\n return {\n ...state,\n viewMode: action.payload\n };\n }\n}\nfunction $330ae695507d96f5$var$nodeIsInTree(tree, id) {\n for (let node of tree){\n if (node.id == id) return true;\n else if (node.children) {\n if ($330ae695507d96f5$var$nodeIsInTree(node.children, id)) return true;\n }\n }\n return false;\n}\nfunction $330ae695507d96f5$var$buildNestedSpec(keyPath, innerSpec) {\n // Build a nested object from a key path\n let spec = innerSpec;\n for(let i = keyPath.length - 1; i >= 0; i--)spec = {\n [keyPath[i]]: spec\n };\n return spec;\n// Since we don't have a \"children\" key at the root, we make the top-level spec an array\n}\nfunction $330ae695507d96f5$var$findNode(tree, id) {\n // Find the index of the node with the given id in the tree, returning the key path\n for(let i = 0; i < tree.length; i++){\n if (tree[i].id == id) return [\n i\n ];\n else if (tree[i].children) {\n let path = $330ae695507d96f5$var$findNode(tree[i].children, id);\n if (path != null) return [\n i,\n \"children\",\n ...path\n ];\n }\n }\n return null;\n}\nfunction $330ae695507d96f5$var$removeNodes(tree, ids) {\n /** Remove nodes with the given ids from the tree and return the new tree and the removed nodes */ let newTree = [];\n let removedNodes = [];\n for (let node of tree)if (ids.includes(node.id)) removedNodes.push(node);\n else {\n // Recurse into children\n if (node.children) {\n let [newChildren, removedChildren] = $330ae695507d96f5$var$removeNodes(node.children, ids);\n node = {\n ...node,\n children: newChildren\n };\n removedNodes.push(...removedChildren);\n }\n newTree.push(node);\n }\n return [\n newTree,\n removedNodes\n ];\n}\nfunction $330ae695507d96f5$export$8d9dbb7a64bf2a5e(tree) {\n // Convert the tree to a graph\n let nodes = [];\n let edges = [];\n const nodeMap = new Map();\n for (let node of tree){\n // If we've already found an instance of this node, we don't need to record\n // it again\n if (nodeMap.has(node.id)) continue;\n const { indices: indices, id: id, name: name, type: type, children: children } = node;\n const nodeData = {\n id: id,\n type: type.id,\n color: type.color,\n name: name,\n txt_range: [\n indices\n ],\n reasoning: null,\n match: node.match,\n children: children\n };\n nodeMap.set(node.id, node);\n nodes.push(nodeData);\n if (node.children) {\n for (let child of node.children)edges.push({\n source: node.id,\n dest: child.id\n });\n // Now process the children\n const { nodes: childNodes, edges: childEdges } = $330ae695507d96f5$export$8d9dbb7a64bf2a5e(node.children);\n nodes.push(...childNodes);\n edges.push(...childEdges);\n }\n }\n return {\n nodes: nodes,\n edges: edges\n };\n}\nfunction $330ae695507d96f5$var$findNodeById(tree, id) {\n for (const node of tree){\n if (node.id === id) return node;\n if (node.children) {\n const found = $330ae695507d96f5$var$findNodeById(node.children, id);\n if (found) return found;\n }\n }\n return null;\n}\nfunction $330ae695507d96f5$var$updateTreeTypes(tree, oldType, defaultType) {\n return tree.map((node)=>$330ae695507d96f5$var$updateNodeType(node, oldType, defaultType));\n}\nfunction $330ae695507d96f5$var$updateNodeType(node, oldType, defaultType) {\n const type = node.type.id === oldType.id ? defaultType : node.type;\n return {\n ...node,\n type: type,\n children: node.children ? $330ae695507d96f5$var$updateTreeTypes(node.children, oldType, defaultType) : []\n };\n}\nfunction $330ae695507d96f5$var$flattenAndSort(nodes) {\n const result = [];\n function traverse(nodeList) {\n for (const node of nodeList){\n result.push(node);\n if (Array.isArray(node.children) && node.children.length > 0) traverse(node.children);\n }\n }\n traverse(nodes);\n // sort by start\n return result.sort((a, b)=>a.indices[0] - b.indices[0]);\n}\n\n\nexport {$330ae695507d96f5$export$53ec42062883b2d4 as ViewMode, $330ae695507d96f5$export$911bb4b9c8065d3d as useUpdatableTree, $330ae695507d96f5$export$e5ce04c5b3f58533 as TreeDispatchContext, $330ae695507d96f5$export$e1068f2d1c68f87e as useTreeDispatch, $330ae695507d96f5$export$8d9dbb7a64bf2a5e as treeToGraph};\n//# sourceMappingURL=feedback-components.b7946db4.js.map\n","import { TreeData } from \"./types\";\nimport { createContext, Dispatch, useContext, useReducer } from \"react\";\nimport update, { Spec } from \"immutability-helper\";\nimport { EntityType } from \"../extractions/types\";\n\nexport enum ViewMode {\n Tree = \"tree\",\n Graph = \"graph\",\n}\n\ninterface TreeState {\n initialTree: TreeData[];\n tree: TreeData[];\n selectedNodes: number[];\n entityTypesMap: Map<number, EntityType>;\n selectedEntityType: EntityType;\n lastInternalId: number;\n isSelectingEntityType: boolean;\n viewMode: ViewMode;\n}\n\ntype TextRange = {\n start: number;\n end: number;\n text: string;\n};\n\ntype TreeAction =\n | {\n type: \"move-node\";\n payload: { dragIds: number[]; parentId: number; index: number };\n }\n | { type: \"delete-node\"; payload: { ids: number[] } }\n | { type: \"select-node\"; payload: { ids: number[] } }\n | { type: \"toggle-node-selected\"; payload: { ids: number[] } }\n | { type: \"set-view-mode\"; payload: ViewMode }\n | { type: \"create-node\"; payload: TextRange }\n | { type: \"select-entity-type\"; payload: EntityType }\n | { type: \"toggle-entity-type-selector\"; payload?: boolean | null }\n | { type: \"deselect\" }\n | { type: \"reset\" }\n | { type: \"delete-entity-type\"; payload: { id: number } }\n | {\n type: \"add-entity-type\";\n payload: { name: string; description: string; color: string };\n }\n | {\n type: \"update-entity-type\";\n payload: { id: number; name: string; description: string; color: string };\n }\n | { type: \"select-range\"; payload: { ids: number[] } };\n\nexport type TreeDispatch = Dispatch<TreeAction>;\n\nexport function useUpdatableTree(\n initialTree: TreeData[],\n entityTypes: Map<number, EntityType>,\n): [TreeState, TreeDispatch] {\n // Get the first entity type\n // issue: grabs second entity instead of selected one\n const type = entityTypes.values().next().value;\n\n return useReducer(treeReducer, {\n initialTree,\n tree: initialTree,\n selectedNodes: [],\n entityTypesMap: entityTypes,\n selectedEntityType: type,\n lastInternalId: 0,\n isSelectingEntityType: false,\n viewMode: ViewMode.Tree,\n });\n}\n\nexport const TreeDispatchContext = createContext<TreeDispatch | null>(null);\n\nexport function useTreeDispatch() {\n const dispatch = useContext(TreeDispatchContext);\n if (dispatch == null) {\n throw new Error(\"No dispatch context available\");\n }\n return dispatch;\n}\n\nfunction treeReducer(state: TreeState, action: TreeAction) {\n switch (action.type) {\n case \"add-entity-type\": {\n // Add a new entity type to the map\n const { name, description, color } = action.payload;\n const newId = state.lastInternalId - 1;\n const newType: EntityType = {\n id: newId,\n name,\n description: description === \"\" ? null : description,\n color,\n };\n\n const newEntityTypesMap = new Map(state.entityTypesMap);\n newEntityTypesMap.set(newId, newType);\n\n return {\n ...state,\n entityTypesMap: newEntityTypesMap,\n selectedEntityType: newType,\n lastInternalId: newId,\n };\n }\n case \"update-entity-type\": {\n // Update an existing entity type in the map\n const { id, name, description, color } = action.payload;\n const newEntityTypesMap = new Map(state.entityTypesMap);\n const oldType = newEntityTypesMap.get(id);\n\n if (!oldType) {\n console.warn(`Entity type with id ${id} not found`);\n return state;\n }\n\n const updatedType: EntityType = {\n ...oldType,\n name,\n description: description === \"\" ? null : description,\n color,\n };\n\n newEntityTypesMap.set(id, updatedType);\n\n // Update the tree to reflect the new type\n const newTree = updateTreeTypes(state.tree, oldType, updatedType);\n\n return {\n ...state,\n tree: newTree,\n entityTypesMap: newEntityTypesMap,\n selectedEntityType: updatedType,\n };\n }\n case \"select-range\":\n // Select a range of nodes by their IDs\n const payloadIds = action.payload.ids;\n const node1 = payloadIds[0];\n const node2 = payloadIds[1];\n\n // make list of nodes in order\n const allNodes = flattenAndSort(state.tree);\n\n // select all nodes between node1 and node2\n const startIndex = allNodes.findIndex((node) => node.id === node1);\n const endIndex = allNodes.findIndex((node) => node.id === node2);\n\n const selectedNodes = allNodes.slice(startIndex, endIndex + 1);\n\n console.log(\"Selecting range:\", selectedNodes);\n return {\n ...state,\n selectedNodes: selectedNodes.map((node) => node.id),\n };\n\n case \"move-node\":\n // For each node in the tree, if the node is in the dragIds, remove it from the tree and collect it\n const [newTree, removedNodes] = removeNodes(\n state.tree,\n action.payload.dragIds,\n );\n\n let keyPath: (number | \"children\")[] = [];\n if (action.payload.parentId) {\n keyPath = findNode(newTree, action.payload.parentId);\n keyPath.push(\"children\");\n }\n\n // Add removed nodes to the new tree at the correct location\n let updateSpec = buildNestedSpec(keyPath, {\n $splice: [[action.payload.index, 0, ...removedNodes]],\n });\n\n return { ...state, tree: update(newTree, updateSpec) };\n case \"delete-node\":\n // For each node in the tree, if the node is in the ids, remove it from the tree\n const [newTree2, _removedNodes] = removeNodes(\n state.tree,\n action.payload.ids,\n );\n // Get children of the removed nodes\n // If children are not present elsewhere in the tree, insert them\n\n const children = _removedNodes\n .flatMap((node) => node.children ?? [])\n .filter((child) => !nodeIsInTree(newTree2, child.id));\n\n // Reset the selection\n\n return {\n ...state,\n tree: [...newTree2, ...children],\n selectedNodes: state.selectedNodes.filter(\n (id) => !action.payload.ids.includes(id),\n ),\n };\n case \"select-node\":\n const { ids } = action.payload;\n\n const type =\n action.payload.ids.length > 0\n ? findNodeById(state.tree, ids[0])?.type\n : null;\n\n return { ...state, selectedNodes: ids, selectedEntityType: type };\n // otherwise fall through to toggle-node-selected for a single ID\n case \"toggle-node-selected\":\n const nodesToAdd = action.payload.ids.filter(\n (id) => !state.selectedNodes.includes(id),\n );\n const nodesToKeep = state.selectedNodes.filter(\n (id) => !action.payload.ids.includes(id),\n );\n\n const newType =\n action.payload.ids.length > 0\n ? findNodeById(state.tree, action.payload.ids[0])?.type\n : null;\n\n return {\n ...state,\n selectedNodes: [...nodesToKeep, ...nodesToAdd],\n selectedEntityType: newType,\n };\n\n case \"create-node\":\n const newId = state.lastInternalId - 1;\n const { text, start, end } = action.payload;\n const node: TreeData = {\n id: newId,\n name: text,\n children: [],\n indices: [start, end],\n type: state.selectedEntityType,\n };\n\n return {\n ...state,\n tree: [...state.tree, node],\n selectedNodes: [newId],\n lastInternalId: newId,\n };\n\n case \"delete-entity-type\": {\n // Remove the entity type from the map\n console.log(\"Deleting entity type:\", action.payload.id);\n const { id } = action.payload;\n const newEntityTypesMap = new Map(state.entityTypesMap);\n const oldType = newEntityTypesMap.get(id);\n newEntityTypesMap.delete(id);\n\n const defaultType = newEntityTypesMap.values().next().value;\n const newTree = updateTreeTypes(state.tree, oldType, defaultType);\n\n return {\n ...state,\n tree: newTree,\n entityTypesMap: newEntityTypesMap,\n selectedNodes: [],\n };\n }\n\n /** Entity type selection */\n case \"toggle-entity-type-selector\":\n return {\n ...state,\n isSelectingEntityType: action.payload ?? !state.isSelectingEntityType,\n };\n case \"select-entity-type\": {\n // For each selected node, update the type\n let newTree2 = state.tree;\n for (let id of state.selectedNodes) {\n const keyPath = findNode(state.tree, id);\n const nestedSpec = buildNestedSpec(keyPath, {\n type: { $set: action.payload },\n });\n newTree2 = update(newTree2, nestedSpec);\n }\n\n return {\n ...state,\n tree: newTree2,\n selectedEntityType: action.payload,\n };\n }\n case \"deselect\":\n return { ...state, selectedNodes: [] };\n case \"reset\":\n return {\n ...state,\n tree: state.initialTree,\n selectedNodes: [],\n };\n case \"set-view-mode\":\n return { ...state, viewMode: action.payload };\n }\n}\n\nfunction nodeIsInTree(tree: TreeData[], id: number): boolean {\n for (let node of tree) {\n if (node.id == id) {\n return true;\n } else if (node.children) {\n if (nodeIsInTree(node.children, id)) {\n return true;\n }\n }\n }\n return false;\n}\n\nfunction buildNestedSpec(\n keyPath: (number | \"children\")[],\n innerSpec: Spec<any>,\n): Spec<TreeData[]> {\n // Build a nested object from a key path\n\n let spec = innerSpec;\n for (let i = keyPath.length - 1; i >= 0; i--) {\n spec = { [keyPath[i]]: spec };\n }\n return spec as any;\n // Since we don't have a \"children\" key at the root, we make the top-level spec an array\n}\n\nfunction findNode(\n tree: TreeData[],\n id: number,\n): (number | \"children\")[] | null {\n // Find the index of the node with the given id in the tree, returning the key path\n for (let i = 0; i < tree.length; i++) {\n if (tree[i].id == id) {\n return [i];\n } else if (tree[i].children) {\n let path = findNode(tree[i].children, id);\n if (path != null) {\n return [i, \"children\", ...path];\n }\n }\n }\n return null;\n}\n\nfunction removeNodes(\n tree: TreeData[],\n ids: number[],\n): [TreeData[], TreeData[]] {\n /** Remove nodes with the given ids from the tree and return the new tree and the removed nodes */\n let newTree: TreeData[] = [];\n let removedNodes: TreeData[] = [];\n\n for (let node of tree) {\n if (ids.includes(node.id)) {\n removedNodes.push(node);\n } else {\n // Recurse into children\n if (node.children) {\n let [newChildren, removedChildren] = removeNodes(node.children, ids);\n node = { ...node, children: newChildren };\n removedNodes.push(...removedChildren);\n }\n newTree.push(node);\n }\n }\n\n return [newTree, removedNodes];\n}\n\nexport interface EntityOutput {\n id: number;\n type: number | null;\n txt_range: number[][];\n name: string;\n match: any | null;\n reasoning: string | null;\n color: string | null;\n children: any[] | null;\n}\n\nexport interface GraphData {\n nodes: EntityOutput[];\n edges: { source: number; dest: number }[];\n}\n\nexport function treeToGraph(tree: TreeData[]): GraphData {\n // Convert the tree to a graph\n let nodes: EntityOutput[] = [];\n let edges: { source: number; dest: number }[] = [];\n const nodeMap = new Map<number, TreeData>();\n\n for (let node of tree) {\n // If we've already found an instance of this node, we don't need to record\n // it again\n if (nodeMap.has(node.id)) {\n continue;\n }\n\n const { indices, id, name, type, children } = node;\n\n const nodeData: EntityOutput = {\n id,\n type: type.id,\n color: type.color,\n name,\n txt_range: [indices],\n reasoning: null,\n match: node.match,\n children,\n };\n\n nodeMap.set(node.id, node);\n nodes.push(nodeData);\n\n if (node.children) {\n for (let child of node.children) {\n edges.push({ source: node.id, dest: child.id });\n }\n\n // Now process the children\n const { nodes: childNodes, edges: childEdges } = treeToGraph(\n node.children,\n );\n nodes.push(...childNodes);\n edges.push(...childEdges);\n }\n }\n\n return { nodes, edges };\n}\n\nfunction findNodeById(tree, id) {\n for (const node of tree) {\n if (node.id === id) {\n return node;\n }\n if (node.children) {\n const found = findNodeById(node.children, id);\n if (found) return found;\n }\n }\n return null;\n}\n\nfunction updateTreeTypes(tree, oldType, defaultType) {\n return tree.map((node) => updateNodeType(node, oldType, defaultType));\n}\n\nfunction updateNodeType(node, oldType, defaultType) {\n const type = node.type.id === oldType.id ? defaultType : node.type;\n\n return {\n ...node,\n type,\n children: node.children\n ? updateTreeTypes(node.children, oldType, defaultType)\n : [],\n };\n}\n\nfunction flattenAndSort(nodes) {\n const result = [];\n\n function traverse(nodeList) {\n for (const node of nodeList) {\n result.push(node);\n if (Array.isArray(node.children) && node.children.length > 0) {\n traverse(node.children);\n }\n }\n }\n\n traverse(nodes);\n\n // sort by start\n return result.sort((a, b) => a.indices[0] - b.indices[0]);\n}\n"],"names":["useReducer","$eGztG$useReducer","createContext","$eGztG$createContext","useContext","$eGztG$useContext","$eGztG$immutabilityhelper","ViewMode","$330ae695507d96f5$export$53ec42062883b2d4","$330ae695507d96f5$export$911bb4b9c8065d3d","initialTree","entityTypes","type","values","next","value","$330ae695507d96f5$var$treeReducer","tree","selectedNodes","entityTypesMap","selectedEntityType","lastInternalId","isSelectingEntityType","viewMode","$330ae695507d96f5$export$e5ce04c5b3f58533","$330ae695507d96f5$export$e1068f2d1c68f87e","dispatch","Error","state","action","name","description","color","payload","newId","newType","id","newEntityTypesMap","Map","set","oldType","get","console","warn","updatedType","newTree","$330ae695507d96f5$var$updateTreeTypes","payloadIds","ids","node1","node2","allNodes","$330ae695507d96f5$var$flattenAndSort","nodes","result","traverse","nodeList","node","push","Array","isArray","children","length","sort","a","b","indices","startIndex","findIndex","endIndex","slice","log","map","removedNodes","$330ae695507d96f5$var$removeNodes","dragIds","keyPath","parentId","$330ae695507d96f5$var$findNode","updateSpec","$330ae695507d96f5$var$buildNestedSpec","$splice","index","newTree2","_removedNodes","flatMap","filter","child","$330ae695507d96f5$var$nodeIsInTree","includes","$330ae695507d96f5$var$findNodeById","nodesToAdd","nodesToKeep","text","start","end","delete","defaultType","$set","innerSpec","spec","i","path","newChildren","removedChildren","$330ae695507d96f5$export$8d9dbb7a64bf2a5e","edges","nodeMap","has","nodeData","txt_range","reasoning","match","source","dest","childNodes","childEdges","found","$330ae695507d96f5$var$updateNodeType","useUpdatableTree","TreeDispatchContext","useTreeDispatch","treeToGraph"],"version":3,"file":"feedback-components.b7946db4.js.map","sourceRoot":"../../../../"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
function e(e,t,o,n){Object.defineProperty(e,t,{get:o,set:n,enumerable:!0,configurable:!0})}var t,o,n,a,r,p,c,i,l,d,Q,W,X,_,y,f,s,b,g,k,u,x,h,m,v={};e(v,"add-type",()=>t,e=>t=e),e(v,"add-type-overlay",()=>o,e=>o=e),e(v,"control-content",()=>n,e=>n=e),e(v,"control-panel",()=>a,e=>a=e),e(v,"description",()=>r,e=>r=e),e(v,"entity-panel",()=>p,e=>p=e),e(v,"feedback-component",()=>c,e=>c=e),e(v,"feedback-container",()=>i,e=>i=e),e(v,"feedback-text",()=>l,e=>l=e),e(v,"feedback-text-wrapper",()=>d,e=>d=e),e(v,"form-group",()=>Q,e=>Q=e),e(v,"highlight",()=>W,e=>W=e),e(v,"icons",()=>X,e=>X=e),e(v,"node",()=>_,e=>_=e),e(v,"node-label",()=>y,e=>y=e),e(v,"overlay-container",()=>f,e=>f=e),e(v,"page-wrapper",()=>s,e=>s=e),e(v,"selected",()=>b,e=>b=e),e(v,"selection-tree",()=>g,e=>g=e),e(v,"text-inputs",()=>k,e=>k=e),e(v,"title",()=>u,e=>u=e),e(v,"type-container",()=>x,e=>x=e),e(v,"type-list",()=>h,e=>h=e),e(v,"type-tag",()=>m,e=>m=e),t="QoX8-W_add-type",o="QoX8-W_add-type-overlay",n="QoX8-W_control-content",a="QoX8-W_control-panel",r="QoX8-W_description",p="QoX8-W_entity-panel",c="QoX8-W_feedback-component",i="QoX8-W_feedback-container",l="QoX8-W_feedback-text",d="QoX8-W_feedback-text-wrapper",Q="QoX8-W_form-group",W="QoX8-W_highlight",X="QoX8-W_icons",_="QoX8-W_node",y="QoX8-W_node-label",f="QoX8-W_overlay-container",s="QoX8-W_page-wrapper",b="QoX8-W_selected",g="QoX8-W_selection-tree",k="QoX8-W_text-inputs",u="QoX8-W_title",x="QoX8-W_type-container",h="QoX8-W_type-list",m="QoX8-W_type-tag";export{v as default};
|
|
2
|
+
//# sourceMappingURL=feedback-components.c459cc27.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"mappings":"A,S,E,C,C,C,C,C,C,C,E,O,c,C,E,E,C,I,E,I,E,W,C,E,a,C,C,E,C,ICAA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,E,E,C,E,E,E,W,I,E,A,G,E,G,E,E,mB,I,E,A,G,E,G,E,E,kB,I,E,A,G,E,G,E,E,gB,I,E,A,G,E,G,E,E,c,I,E,A,G,E,G,E,E,e,I,E,A,G,E,G,E,E,qB,I,E,A,G,E,G,E,E,qB,I,E,A,G,E,G,E,E,gB,I,E,A,G,E,G,E,E,wB,I,E,A,G,E,G,E,E,a,I,E,A,G,E,G,E,E,Y,I,E,A,G,E,G,E,E,Q,I,E,A,G,E,G,E,E,O,I,E,A,G,E,G,E,E,a,I,E,A,G,E,G,E,E,oB,I,E,A,G,E,G,E,E,e,I,E,A,G,E,G,E,E,W,I,E,A,G,E,G,E,E,iB,I,E,A,G,E,G,E,E,c,I,E,A,G,E,G,E,E,Q,I,E,A,G,E,G,E,E,iB,I,E,A,G,E,G,E,E,Y,I,E,A,G,E,G,E,E,W,I,E,A,G,E,GAvBA,EAA6B,kBAC7B,EAAqC,0BACrC,EAAoC,yBACpC,EAAkC,uBAClC,EAAgC,qBAChC,EAAiC,sBACjC,EAAuC,4BACvC,EAAuC,4BACvC,EAAkC,uBAClC,EAA0C,+BAC1C,EAA+B,oBAC/B,EAA8B,mBAC9B,EAA0B,eAC1B,EAAyB,cACzB,EAA+B,oBAC/B,EAAsC,2BACtC,EAAiC,sBACjC,EAA6B,kBAC7B,EAAmC,wBACnC,EAAgC,qBAChC,EAA0B,eAC1B,EAAmC,wBACnC,EAA8B,mBAC9B,EAA6B,yB,K,O","sources":["<anon>","packages/feedback-components/src/feedback/feedback.module.sass"],"sourcesContent":["\nfunction $parcel$export(e, n, v, s) {\n Object.defineProperty(e, n, {get: v, set: s, enumerable: true, configurable: true});\n}\nvar $01ca2f1f49a3a114$exports = {};\n\n$parcel$export($01ca2f1f49a3a114$exports, \"add-type\", () => $01ca2f1f49a3a114$export$cb889aaddfa2926c, (v) => $01ca2f1f49a3a114$export$cb889aaddfa2926c = v);\n$parcel$export($01ca2f1f49a3a114$exports, \"add-type-overlay\", () => $01ca2f1f49a3a114$export$5f8f750fd71deeed, (v) => $01ca2f1f49a3a114$export$5f8f750fd71deeed = v);\n$parcel$export($01ca2f1f49a3a114$exports, \"control-content\", () => $01ca2f1f49a3a114$export$42e8b5293e69631e, (v) => $01ca2f1f49a3a114$export$42e8b5293e69631e = v);\n$parcel$export($01ca2f1f49a3a114$exports, \"control-panel\", () => $01ca2f1f49a3a114$export$a0a23f31d5562853, (v) => $01ca2f1f49a3a114$export$a0a23f31d5562853 = v);\n$parcel$export($01ca2f1f49a3a114$exports, \"description\", () => $01ca2f1f49a3a114$export$6d59db4903f20f7d, (v) => $01ca2f1f49a3a114$export$6d59db4903f20f7d = v);\n$parcel$export($01ca2f1f49a3a114$exports, \"entity-panel\", () => $01ca2f1f49a3a114$export$38f2cd12e45697e, (v) => $01ca2f1f49a3a114$export$38f2cd12e45697e = v);\n$parcel$export($01ca2f1f49a3a114$exports, \"feedback-component\", () => $01ca2f1f49a3a114$export$579bd45c78bf5510, (v) => $01ca2f1f49a3a114$export$579bd45c78bf5510 = v);\n$parcel$export($01ca2f1f49a3a114$exports, \"feedback-container\", () => $01ca2f1f49a3a114$export$23889d205b405f6e, (v) => $01ca2f1f49a3a114$export$23889d205b405f6e = v);\n$parcel$export($01ca2f1f49a3a114$exports, \"feedback-text\", () => $01ca2f1f49a3a114$export$890489be1870bed5, (v) => $01ca2f1f49a3a114$export$890489be1870bed5 = v);\n$parcel$export($01ca2f1f49a3a114$exports, \"feedback-text-wrapper\", () => $01ca2f1f49a3a114$export$6bd0fd0a746c88f, (v) => $01ca2f1f49a3a114$export$6bd0fd0a746c88f = v);\n$parcel$export($01ca2f1f49a3a114$exports, \"form-group\", () => $01ca2f1f49a3a114$export$55a1f87a143fb302, (v) => $01ca2f1f49a3a114$export$55a1f87a143fb302 = v);\n$parcel$export($01ca2f1f49a3a114$exports, \"highlight\", () => $01ca2f1f49a3a114$export$e4043f67d36cbb26, (v) => $01ca2f1f49a3a114$export$e4043f67d36cbb26 = v);\n$parcel$export($01ca2f1f49a3a114$exports, \"icons\", () => $01ca2f1f49a3a114$export$df03f54e09e486fa, (v) => $01ca2f1f49a3a114$export$df03f54e09e486fa = v);\n$parcel$export($01ca2f1f49a3a114$exports, \"node\", () => $01ca2f1f49a3a114$export$35059013cd4a06db, (v) => $01ca2f1f49a3a114$export$35059013cd4a06db = v);\n$parcel$export($01ca2f1f49a3a114$exports, \"node-label\", () => $01ca2f1f49a3a114$export$75d14899fb692bb6, (v) => $01ca2f1f49a3a114$export$75d14899fb692bb6 = v);\n$parcel$export($01ca2f1f49a3a114$exports, \"overlay-container\", () => $01ca2f1f49a3a114$export$6a1093e41947f68e, (v) => $01ca2f1f49a3a114$export$6a1093e41947f68e = v);\n$parcel$export($01ca2f1f49a3a114$exports, \"page-wrapper\", () => $01ca2f1f49a3a114$export$7c414e944018fb15, (v) => $01ca2f1f49a3a114$export$7c414e944018fb15 = v);\n$parcel$export($01ca2f1f49a3a114$exports, \"selected\", () => $01ca2f1f49a3a114$export$d90250155de6d7e7, (v) => $01ca2f1f49a3a114$export$d90250155de6d7e7 = v);\n$parcel$export($01ca2f1f49a3a114$exports, \"selection-tree\", () => $01ca2f1f49a3a114$export$3ae1b51693c80a9c, (v) => $01ca2f1f49a3a114$export$3ae1b51693c80a9c = v);\n$parcel$export($01ca2f1f49a3a114$exports, \"text-inputs\", () => $01ca2f1f49a3a114$export$bc7581b048bdc9d, (v) => $01ca2f1f49a3a114$export$bc7581b048bdc9d = v);\n$parcel$export($01ca2f1f49a3a114$exports, \"title\", () => $01ca2f1f49a3a114$export$fb184b623420d9be, (v) => $01ca2f1f49a3a114$export$fb184b623420d9be = v);\n$parcel$export($01ca2f1f49a3a114$exports, \"type-container\", () => $01ca2f1f49a3a114$export$b2d17fca990bb66c, (v) => $01ca2f1f49a3a114$export$b2d17fca990bb66c = v);\n$parcel$export($01ca2f1f49a3a114$exports, \"type-list\", () => $01ca2f1f49a3a114$export$915fe2ca68846e4c, (v) => $01ca2f1f49a3a114$export$915fe2ca68846e4c = v);\n$parcel$export($01ca2f1f49a3a114$exports, \"type-tag\", () => $01ca2f1f49a3a114$export$5e5acbc770fb0e4, (v) => $01ca2f1f49a3a114$export$5e5acbc770fb0e4 = v);\nvar $01ca2f1f49a3a114$export$cb889aaddfa2926c;\nvar $01ca2f1f49a3a114$export$5f8f750fd71deeed;\nvar $01ca2f1f49a3a114$export$42e8b5293e69631e;\nvar $01ca2f1f49a3a114$export$a0a23f31d5562853;\nvar $01ca2f1f49a3a114$export$6d59db4903f20f7d;\nvar $01ca2f1f49a3a114$export$38f2cd12e45697e;\nvar $01ca2f1f49a3a114$export$579bd45c78bf5510;\nvar $01ca2f1f49a3a114$export$23889d205b405f6e;\nvar $01ca2f1f49a3a114$export$890489be1870bed5;\nvar $01ca2f1f49a3a114$export$6bd0fd0a746c88f;\nvar $01ca2f1f49a3a114$export$55a1f87a143fb302;\nvar $01ca2f1f49a3a114$export$e4043f67d36cbb26;\nvar $01ca2f1f49a3a114$export$df03f54e09e486fa;\nvar $01ca2f1f49a3a114$export$35059013cd4a06db;\nvar $01ca2f1f49a3a114$export$75d14899fb692bb6;\nvar $01ca2f1f49a3a114$export$6a1093e41947f68e;\nvar $01ca2f1f49a3a114$export$7c414e944018fb15;\nvar $01ca2f1f49a3a114$export$d90250155de6d7e7;\nvar $01ca2f1f49a3a114$export$3ae1b51693c80a9c;\nvar $01ca2f1f49a3a114$export$bc7581b048bdc9d;\nvar $01ca2f1f49a3a114$export$fb184b623420d9be;\nvar $01ca2f1f49a3a114$export$b2d17fca990bb66c;\nvar $01ca2f1f49a3a114$export$915fe2ca68846e4c;\nvar $01ca2f1f49a3a114$export$5e5acbc770fb0e4;\n$01ca2f1f49a3a114$export$cb889aaddfa2926c = `QoX8-W_add-type`;\n$01ca2f1f49a3a114$export$5f8f750fd71deeed = `QoX8-W_add-type-overlay`;\n$01ca2f1f49a3a114$export$42e8b5293e69631e = `QoX8-W_control-content`;\n$01ca2f1f49a3a114$export$a0a23f31d5562853 = `QoX8-W_control-panel`;\n$01ca2f1f49a3a114$export$6d59db4903f20f7d = `QoX8-W_description`;\n$01ca2f1f49a3a114$export$38f2cd12e45697e = `QoX8-W_entity-panel`;\n$01ca2f1f49a3a114$export$579bd45c78bf5510 = `QoX8-W_feedback-component`;\n$01ca2f1f49a3a114$export$23889d205b405f6e = `QoX8-W_feedback-container`;\n$01ca2f1f49a3a114$export$890489be1870bed5 = `QoX8-W_feedback-text`;\n$01ca2f1f49a3a114$export$6bd0fd0a746c88f = `QoX8-W_feedback-text-wrapper`;\n$01ca2f1f49a3a114$export$55a1f87a143fb302 = `QoX8-W_form-group`;\n$01ca2f1f49a3a114$export$e4043f67d36cbb26 = `QoX8-W_highlight`;\n$01ca2f1f49a3a114$export$df03f54e09e486fa = `QoX8-W_icons`;\n$01ca2f1f49a3a114$export$35059013cd4a06db = `QoX8-W_node`;\n$01ca2f1f49a3a114$export$75d14899fb692bb6 = `QoX8-W_node-label`;\n$01ca2f1f49a3a114$export$6a1093e41947f68e = `QoX8-W_overlay-container`;\n$01ca2f1f49a3a114$export$7c414e944018fb15 = `QoX8-W_page-wrapper`;\n$01ca2f1f49a3a114$export$d90250155de6d7e7 = `QoX8-W_selected`;\n$01ca2f1f49a3a114$export$3ae1b51693c80a9c = `QoX8-W_selection-tree`;\n$01ca2f1f49a3a114$export$bc7581b048bdc9d = `QoX8-W_text-inputs`;\n$01ca2f1f49a3a114$export$fb184b623420d9be = `QoX8-W_title`;\n$01ca2f1f49a3a114$export$b2d17fca990bb66c = `QoX8-W_type-container`;\n$01ca2f1f49a3a114$export$915fe2ca68846e4c = `QoX8-W_type-list`;\n$01ca2f1f49a3a114$export$5e5acbc770fb0e4 = `QoX8-W_type-tag`;\n\n\nexport {$01ca2f1f49a3a114$exports as default};\n//# sourceMappingURL=feedback-components.c459cc27.js.map\n",null],"names":["$parcel$export","e","n","v","s","Object","defineProperty","get","set","enumerable","configurable","$01ca2f1f49a3a114$export$cb889aaddfa2926c","$01ca2f1f49a3a114$export$5f8f750fd71deeed","$01ca2f1f49a3a114$export$42e8b5293e69631e","$01ca2f1f49a3a114$export$a0a23f31d5562853","$01ca2f1f49a3a114$export$6d59db4903f20f7d","$01ca2f1f49a3a114$export$38f2cd12e45697e","$01ca2f1f49a3a114$export$579bd45c78bf5510","$01ca2f1f49a3a114$export$23889d205b405f6e","$01ca2f1f49a3a114$export$890489be1870bed5","$01ca2f1f49a3a114$export$6bd0fd0a746c88f","$01ca2f1f49a3a114$export$55a1f87a143fb302","$01ca2f1f49a3a114$export$e4043f67d36cbb26","$01ca2f1f49a3a114$export$df03f54e09e486fa","$01ca2f1f49a3a114$export$35059013cd4a06db","$01ca2f1f49a3a114$export$75d14899fb692bb6","$01ca2f1f49a3a114$export$6a1093e41947f68e","$01ca2f1f49a3a114$export$7c414e944018fb15","$01ca2f1f49a3a114$export$d90250155de6d7e7","$01ca2f1f49a3a114$export$3ae1b51693c80a9c","$01ca2f1f49a3a114$export$bc7581b048bdc9d","$01ca2f1f49a3a114$export$fb184b623420d9be","$01ca2f1f49a3a114$export$b2d17fca990bb66c","$01ca2f1f49a3a114$export$915fe2ca68846e4c","$01ca2f1f49a3a114$export$5e5acbc770fb0e4","$01ca2f1f49a3a114$exports","default"],"version":3,"file":"feedback-components.c459cc27.js.map","sourceRoot":"../../../../"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
:root{--text-line-height:3em;--main-extra-width:200px}.QoX8-W_page-wrapper{flex-direction:row;align-items:flex-start;gap:2em;display:flex;position:relative}.QoX8-W_feedback-container{flex:4}.QoX8-W_control-panel{flex:1;height:auto}.QoX8-W_control-content{position:sticky;top:0}.QoX8-W_feedback-component{width:800px;position:relative}.QoX8-W_feedback-component>svg{width:800px}.QoX8-W_node{cursor:pointer}circle{cursor:pointer;border:1px solid #000}.QoX8-W_selected{border:1px solid #fff}.QoX8-W_feedback-text{margin-bottom:2em}.QoX8-W_entity-panel{background:var(--panel-secondary-background-color);width:calc(100% - 2em);min-height:100px;max-height:600px;box-shadow:0 0 0 1px var(--panel-border-color)inset;border-radius:4px;flex:1;padding:1em;position:relative}.QoX8-W_selection-tree{margin:-1em 0;padding:1em 0}.QoX8-W_type-list{grid-template-rows:repeat(10,auto);grid-auto-flow:column;gap:.2em;display:grid}.QoX8-W_type-list .QoX8-W_type-tag{border-radius:.2em;padding:.2em .5em}.QoX8-W_description{max-width:300px;padding:.5em}mark{cursor:pointer;border-radius:.2em;color:#000!important}[role=treeitem]{width:auto!important}.QoX8-W_highlight{cursor:pointer;zIndex:10;border-radius:.2em;padding:.2em 0;position:relative}.QoX8-W_feedback-text-wrapper{z-index:0;line-height:var(--text-line-height);position:relative;overflow:visible}.QoX8-W_type-container{justify-content:space-between;align-items:center;column-gap:1em;display:flex}.QoX8-W_add-type{cursor:pointer;justify-content:space-between;align-items:center;padding:0 .5em;display:flex}.QoX8-W_add-type p{margin:0}.QoX8-W_overlay-container{justify-content:center;align-items:center;width:100vw;height:80vh;display:flex}.QoX8-W_overlay-container .QoX8-W_add-type-overlay{background-color:var(--secondary-color);border-radius:.2em;flex-direction:column;gap:1em;padding:.5em 1em;display:flex}.QoX8-W_overlay-container .QoX8-W_add-type-overlay .QoX8-W_title{justify-content:space-between;align-items:center;display:flex}.QoX8-W_overlay-container .QoX8-W_add-type-overlay h2{margin:0}.QoX8-W_overlay-container .QoX8-W_add-type-overlay .QoX8-W_form-group{gap:3em;display:flex}.QoX8-W_overlay-container .QoX8-W_add-type-overlay .QoX8-W_form-group .QoX8-W_text-inputs{flex-direction:column;gap:1em;display:flex}.QoX8-W_icons{gap:.25em;display:flex}.QoX8-W_node-label{fill:var(--text-emphasized-color);fontSize:10px;pointerEvents:none}
|
|
2
|
+
/*# sourceMappingURL=feedback-components.c88cb37f.css.map */
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"mappings":"ACAA,sDAIA,sGAOA,kCAGA,yCAIA,8CAIA,yDAIE,2CAGF,4BAGA,4CAIA,uCAGA,wCAGA,4OAYA,mDAIA,iGAME,wEAIF,iDAIA,4DAKA,qCAGA,+FAOA,+GAMA,oGAMA,6GAOE,4BAGF,yGAOE,0KAQE,+HAKA,+DAGA,2FAIE,qIAKN,qCAIA","sources":["feedback-components.c88cb37f.css","packages/feedback-components/src/feedback/feedback.module.sass"],"sourcesContent":[":root {\n --text-line-height: 3em;\n --main-extra-width: 200px;\n}\n\n.QoX8-W_page-wrapper {\n flex-direction: row;\n align-items: flex-start;\n gap: 2em;\n display: flex;\n position: relative;\n}\n\n.QoX8-W_feedback-container {\n flex: 4;\n}\n\n.QoX8-W_control-panel {\n flex: 1;\n height: auto;\n}\n\n.QoX8-W_control-content {\n position: sticky;\n top: 0;\n}\n\n.QoX8-W_feedback-component {\n width: 800px;\n position: relative;\n}\n\n.QoX8-W_feedback-component > svg {\n width: 800px;\n}\n\n.QoX8-W_node {\n cursor: pointer;\n}\n\ncircle {\n cursor: pointer;\n border: 1px solid #000;\n}\n\n.QoX8-W_selected {\n border: 1px solid #fff;\n}\n\n.QoX8-W_feedback-text {\n margin-bottom: 2em;\n}\n\n.QoX8-W_entity-panel {\n background: var(--panel-secondary-background-color);\n width: calc(100% - 2em);\n min-height: 100px;\n max-height: 600px;\n box-shadow: 0 0 0 1px var(--panel-border-color) inset;\n border-radius: 4px;\n flex: 1;\n padding: 1em;\n position: relative;\n}\n\n.QoX8-W_selection-tree {\n margin: -1em 0;\n padding: 1em 0;\n}\n\n.QoX8-W_type-list {\n grid-template-rows: repeat(10, auto);\n grid-auto-flow: column;\n gap: .2em;\n display: grid;\n}\n\n.QoX8-W_type-list .QoX8-W_type-tag {\n border-radius: .2em;\n padding: .2em .5em;\n}\n\n.QoX8-W_description {\n max-width: 300px;\n padding: .5em;\n}\n\nmark {\n cursor: pointer;\n border-radius: .2em;\n color: #000 !important;\n}\n\n[role=\"treeitem\"] {\n width: auto !important;\n}\n\n.QoX8-W_highlight {\n cursor: pointer;\n zIndex: 10;\n border-radius: .2em;\n padding: .2em 0;\n position: relative;\n}\n\n.QoX8-W_feedback-text-wrapper {\n z-index: 0;\n line-height: var(--text-line-height);\n position: relative;\n overflow: visible;\n}\n\n.QoX8-W_type-container {\n justify-content: space-between;\n align-items: center;\n column-gap: 1em;\n display: flex;\n}\n\n.QoX8-W_add-type {\n cursor: pointer;\n justify-content: space-between;\n align-items: center;\n padding: 0 .5em;\n display: flex;\n}\n\n.QoX8-W_add-type p {\n margin: 0;\n}\n\n.QoX8-W_overlay-container {\n justify-content: center;\n align-items: center;\n width: 100vw;\n height: 80vh;\n display: flex;\n}\n\n.QoX8-W_overlay-container .QoX8-W_add-type-overlay {\n background-color: var(--secondary-color);\n border-radius: .2em;\n flex-direction: column;\n gap: 1em;\n padding: .5em 1em;\n display: flex;\n}\n\n.QoX8-W_overlay-container .QoX8-W_add-type-overlay .QoX8-W_title {\n justify-content: space-between;\n align-items: center;\n display: flex;\n}\n\n.QoX8-W_overlay-container .QoX8-W_add-type-overlay h2 {\n margin: 0;\n}\n\n.QoX8-W_overlay-container .QoX8-W_add-type-overlay .QoX8-W_form-group {\n gap: 3em;\n display: flex;\n}\n\n.QoX8-W_overlay-container .QoX8-W_add-type-overlay .QoX8-W_form-group .QoX8-W_text-inputs {\n flex-direction: column;\n gap: 1em;\n display: flex;\n}\n\n.QoX8-W_icons {\n gap: .25em;\n display: flex;\n}\n\n.QoX8-W_node-label {\n fill: var(--text-emphasized-color);\n fontSize: 10px;\n pointerEvents: none;\n}\n/*# sourceMappingURL=feedback-components.c88cb37f.css.map */\n",":root\n --text-line-height: 3em\n --main-extra-width: 200px\n\n.page-wrapper\n display: flex\n flex-direction: row\n position: relative\n gap: 2em\n align-items: flex-start // makes control-content lose stick\n\n.feedback-container\n flex: 4\n\n.control-panel\n flex: 1\n height: auto\n\n.control-content\n position: sticky\n top: 0\n\n.feedback-component\n position: relative\n width: 800px\n\n & > svg\n width: 800px\n\n.node\n cursor: pointer\n\ncircle\n cursor: pointer\n border: 1px solid black\n\n.selected\n border: 1px solid white\n \n.feedback-text\n margin-bottom: 2em\n\n.entity-panel\n position: relative\n max-height: 600px\n width: calc(100% - 2em)\n flex: 1\n min-height: 100px\n padding: 1em\n background: var(--panel-secondary-background-color)\n border-radius: 4px\n // Inset box shadow\n box-shadow: 0 0 0 1px var(--panel-border-color) inset\n\n.selection-tree\n margin: -1em 0\n padding: 1em 0\n \n.type-list\n display: grid\n grid-auto-flow: column\n grid-template-rows: repeat(10, auto)\n gap: 0.2em\n\n .type-tag\n padding: .2em .5em\n border-radius: .2em\n\n.description\n max-width: 300px\n padding: .5em\n\nmark\n border-radius: .2em\n cursor: pointer\n color: black !important\n\n[role=\"treeitem\"]\n width: auto !important\n\n.highlight\n cursor: pointer\n padding: .2em 0\n border-radius: .2em\n position: relative\n zIndex: 10\n\n.feedback-text-wrapper \n position: relative\n z-index: 0\n overflow: visible\n line-height: var(--text-line-height)\n\n.type-container\n display: flex\n justify-content: space-between\n align-items: center\n column-gap: 1em\n\n.add-type\n cursor: pointer\n display: flex\n justify-content: space-between\n padding: 0 .5em\n align-items: center\n\n p\n margin: 0\n\n.overlay-container\n height: 80vh\n width: 100vw\n display: flex\n justify-content: center\n align-items: center\n\n .add-type-overlay\n background-color: var(--secondary-color)\n padding: .5em 1em\n display: flex\n flex-direction: column\n gap: 1em\n border-radius: .2em\n\n .title\n display: flex\n justify-content: space-between\n align-items: center\n\n h2\n margin: 0\n\n .form-group\n display: flex\n gap: 3em\n\n .text-inputs\n display: flex\n flex-direction: column\n gap: 1em\n\n.icons\n display: flex\n gap: .25em\n\n.node-label\n fill: var(--text-emphasized-color)\n fontSize: 10px\n pointerEvents: none"],"names":[],"version":3,"file":"feedback-components.c88cb37f.css.map","sourceRoot":"../../../../"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import"./feedback-components.c459cc27.js";import"./feedback-components.8b03e8be.js";import e from"@macrostrat/hyper";import{useRef as t,useEffect as n}from"react";var r=globalThis,o={},a={},l=r.parcelRequirea149;null==l&&((l=function(e){if(e in o)return o[e].exports;if(e in a){var t=a[e];delete a[e];var n={id:e,exports:{}};return o[e]=n,t.call(n.exports,n,n.exports),n.exports}var r=Error("Cannot find module '"+e+"'");throw r.code="MODULE_NOT_FOUND",r}).register=function(e,t){a[e]=t},r.parcelRequirea149=l),l.register;var s=l("9wFEx"),i=l("edvRb");let d=e.styled(s&&s.__esModule?s.default:s);function c(e){let{text:t,selectedNodes:n,nodes:r,dispatch:o,allowOverlap:a}=e;return d("div.feedback-text-wrapper",{tabIndex:0,onKeyDown:e=>{"Backspace"===e.key&&o({type:"delete-node",payload:{ids:n}})}},d(p,{text:t,allTags:function(e,t){let n=[],r=new Set;for(let a of e){var o;if(r.has(a.id))continue;let e=function(e,t){return 0===t.length||((t.includes(e.id)||e.parents?.some(e=>t.includes(e)))??!1)}(a,t),l=(o=a,t.includes(o.id)),s=(0,i.getTagStyle)(a.backgroundColor,{highlighted:e,active:l}),d={color:s.color,tagStyle:{display:"none"},markStyle:{backgroundColor:s.backgroundColor},...a,backgroundColor:s.backgroundColor};n.push(d),r.add(a.id)}return n}((0,i.buildHighlights)(r,null),n),allowOverlap:a,dispatch:o,selectedNodes:n}))}function p(e){let{text:r,allTags:o=[],dispatch:a,selectedNodes:l,allowOverlap:s}=e,i=function(e,t){let n=[];for(let e of t)n.push({pos:e.start,type:"start",tag:e}),n.push({pos:e.end,type:"end",tag:e});n.sort((e,t)=>e.pos!==t.pos?e.pos-t.pos:"end"===e.type&&"start"===t.type?-1:+("start"===e.type&&"end"===t.type));let r={children:[],textStart:0},o=[r],a=0;for(let{pos:t,type:r,tag:l}of n){let n=o[o.length-1];if(t>a){let r=e.slice(a,t);n.children.push(r)}if("start"===r){let e={tag:l,children:[],textStart:t};n.children.push(e),o.push(e)}else o.pop();a=t}return a<e.length&&o[o.length-1].children.push(e.slice(a)),r}(r,o),c=t(null);return n(()=>{let e=()=>{let e=function({container:e}){let t=window.getSelection();if(!t||t.isCollapsed||0===t.rangeCount||!e)return null;let n=t.getRangeAt(0);if(!e.contains(n.startContainer)||!e.contains(n.endContainer))return null;let r=document.createRange();r.setStart(e,0),r.setEnd(n.startContainer,n.startOffset);let o=r.toString().length,a=n.toString(),l=o+a.length;return{start:o,end:l,text:a}}({container:c.current});e&&function({tag:e,dispatch:t,text:n,allTags:r,allowOverlap:o}){let{start:a,end:l}=e;if(" "!=n[l-1]){for(;a>0&&/\w/.test(n[a-1]);)a--;for(;l<n.length&&/\w/.test(n[l]);)l++}let s={start:a,end:l,text:n.slice(a,l)};if(""===s.text.trim())return console.log("Blank tag found, ignoring");if(r.find(e=>e.start===s.start&&(e.end===s.end||e.end===s.end-1)))return console.log("Duplicate tag found, ignoring");s.text.endsWith(" ")&&(s.text=s.text.slice(0,-1),s.end-=1);let i=r.some(e=>e.start<=s.start&&e.end>=s.end),d=r.some(e=>e.start<s.end&&e.end>s.start);if((i||d)&&!o)return console.log("Tag is inside another tag, ignoring");t({type:"create-node",payload:s})}({tag:e,dispatch:a,text:r,allTags:o,allowOverlap:s})};return document.addEventListener("mouseup",e),()=>{document.removeEventListener("mouseup",e)}},[r,o,a,s]),d("span",{ref:c},i.children.map((e,t)=>(function e(t,n,r,o){if("string"==typeof t)return t;let{tag:a,children:l}=t,s=r?.includes(a.id),i=0===r.length||s,c={...a,zIndex:o?-1:1,border:"1px solid "+(i?a.color:"transparent"),margin:"-1px"},p=[];if(s){for(let e in l)if(Object.prototype.hasOwnProperty.call(l,e)){let t=l[e];t?.tag?p.push(t.children[0]):p.push(t)}}return d("span",{className:"highlight",style:c,onClick:e=>{e.stopPropagation(),e.ctrlKey||e.metaKey||r[0]===a.id&&1===r.length?(e.stopPropagation(),n({type:"toggle-node-selected",payload:{ids:[a.id]}})):e.shiftKey&&r.length>0?n({type:"select-range",payload:{ids:[r[r.length-1],a.id]}}):n({type:"select-node",payload:{ids:[a.id]}})}},s?p.flat():l.map((t,o)=>e(t,n,r,s)))})(e,a,l,!1)))}export{c as FeedbackText,p as HighlightedText};
|
|
2
|
+
//# sourceMappingURL=feedback-components.ec54a1e7.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"mappings":"A,M,oD,A,O,oD,A,Q,M,mB,A,Q,U,C,C,a,C,K,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,E,SCSA,IAAM,EAAI,AAAA,EAAM,MAAM,C,AAAC,G,AAAA,E,U,C,AAAA,E,O,CAAA,GAgEhB,SAAS,EAAa,CAAwB,EAEnD,GAAM,CAAA,KAAE,CAAI,CAAA,cAAE,CAAa,CAAA,MAAE,CAAK,CAAA,SAAE,CAAQ,CAAA,aAAE,CAAY,CAAE,CAAG,EAM/D,OAAO,EACL,4BACA,CACE,SAAU,EACV,UAAW,AAAC,IACN,AAAU,cAAV,EAAE,GAAG,EACP,EAAS,CACP,KAAM,cACN,QAAS,CAAE,IAAK,CAAc,CAChC,EAEJ,CACF,EACA,EAAE,EAAiB,CACjB,KAAA,EACA,QApBgC,AAvDtC,SACE,CAAuB,CACvB,CAAuB,EAEvB,IAAI,EAA2B,EAAE,CAE3B,EAAW,IAAI,IAErB,IAAK,IAAM,KAAa,EAAY,KA+BpB,EA7Bd,GAAI,EAAS,GAAG,CAAC,EAAU,EAAE,EAAG,SAEhC,IAAM,EAAc,AA+BxB,SAAuB,CAAc,CAAE,CAAuB,SAC5D,AAA6B,IAAzB,EAAc,MAAM,EAErB,CAAA,AAAA,CAAA,EAAc,QAAQ,CAAC,EAAI,EAAE,GAC5B,EAAI,OAAO,EAAE,KAAK,AAAC,GAAM,EAAc,QAAQ,CAAC,GAAA,GAClD,CAAA,CAHF,CAKF,EAtCsC,EAAW,GACvC,GA0BQ,EA1BU,EA2BnB,AA3B8B,EA2BhB,QAAQ,CAAC,EAAI,EAAE,GA1B5B,EAAW,AAAA,CAAA,EAAA,EAAA,WAAU,AAAV,EAAY,EAAU,eAAe,CAAE,CACtD,YAAA,EACA,OAAA,CACF,GAEM,EAAM,CACV,MAAO,EAAS,KAAK,CACrB,SAAU,CACR,QAAS,MACX,EACA,UAAW,CACT,gBAAiB,EAAS,eAAe,AAC3C,EACA,GAAG,CAAS,CACZ,gBAAiB,EAAS,eAAe,AAC3C,EAEA,EAAK,IAAI,CAAC,GAEV,EAAS,GAAG,CAAC,EAAU,EAAE,CAC3B,CAEA,OAAO,CACT,EAmBI,AAAA,CAAA,EAAA,EAAA,eAAc,AAAd,EAAgB,EAAO,MACvB,GAmBE,aAAA,EACA,SAAA,EACA,cAAA,CACF,GAEJ,CAwNO,SAAS,EAAgB,CAO/B,EACC,GAAM,CAAA,KAAE,CAAI,CAAA,QAAE,EAAU,EAAE,CAAA,SAAE,CAAQ,CAAA,cAAE,CAAa,CAAA,aAAE,CAAY,CAAE,CAAG,EAEhE,EAAO,AAtIf,SAAwB,CAAY,CAAE,CAAwB,EAC5D,IAAM,EAID,EAAE,CAEP,IAAK,IAAM,KAAO,EAChB,EAAO,IAAI,CAAC,CAAE,IAAK,EAAI,KAAK,CAAE,KAAM,QAAS,IAAA,CAAI,GACjD,EAAO,IAAI,CAAC,CAAE,IAAK,EAAI,GAAG,CAAE,KAAM,MAAO,IAAA,CAAI,GAG/C,EAAO,IAAI,CAAC,CAAC,EAAG,IACd,AAAI,EAAE,GAAG,GAAK,EAAE,GAAG,CAAS,EAAE,GAAG,CAAG,EAAE,GAAG,CACrC,AAAW,QAAX,EAAE,IAAI,EAAc,AAAW,UAAX,EAAE,IAAI,CAAqB,IAC/C,CAAA,AAAW,UAAX,EAAE,IAAI,EAAgB,AAAW,QAAX,EAAE,IAAI,AAAK,GAIvC,IAAM,EAAO,CAAE,SAAU,EAAE,CAAE,UAAW,CAAE,EACpC,EAAQ,CAAC,EAAK,CAChB,EAAU,EAEd,IAAK,GAAM,CAAA,IAAE,CAAG,CAAA,KAAE,CAAI,CAAA,IAAE,CAAG,CAAE,GAAI,EAAQ,CACvC,IAAM,EAAS,CAAK,CAAC,EAAM,MAAM,CAAG,EAAE,CAEtC,GAAI,EAAM,EAAS,CACjB,IAAM,EAAQ,EAAK,KAAK,CAAC,EAAS,GAClC,EAAO,QAAQ,CAAC,IAAI,CAAC,EACvB,CAEA,GAAI,AAAS,UAAT,EAAkB,CACpB,IAAM,EAAU,CAAE,IAAA,EAAK,SAAU,EAAE,CAAE,UAAW,CAAI,EACpD,EAAO,QAAQ,CAAC,IAAI,CAAC,GACrB,EAAM,IAAI,CAAC,EACb,MACE,EAAM,GAAG,GAGX,EAAU,CACZ,CAMA,OAJI,EAAU,EAAK,MAAM,EACvB,CAAK,CAAC,EAAM,MAAM,CAAG,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAK,KAAK,CAAC,IAG5C,CACT,EAuF8B,EAAM,GAE5B,EAAU,AAAA,EAAwB,MAexC,OAbA,AAAA,EAAU,KACR,IAAM,EAAgB,KACpB,IAAM,EAAM,AAtOlB,SAAgC,CAAA,UAC9B,CAAS,CAGV,EACC,IAAM,EAAY,OAAO,YAAY,GACrC,GACE,CAAC,GACD,EAAU,WAAW,EACrB,AAAyB,IAAzB,EAAU,UAAU,EACpB,CAAC,EAED,OAAO,KAET,IAAM,EAAQ,EAAU,UAAU,CAAC,GAEnC,GACE,CAAC,EAAU,QAAQ,CAAC,EAAM,cAAc,GACxC,CAAC,EAAU,QAAQ,CAAC,EAAM,YAAY,EAEtC,OAAO,KAGT,IAAM,EAAW,SAAS,WAAW,GACrC,EAAS,QAAQ,CAAC,EAAW,GAC7B,EAAS,MAAM,CAAC,EAAM,cAAc,CAAE,EAAM,WAAW,EACvD,IAAM,EAAQ,EAAS,QAAQ,GAAG,MAAM,CAElC,EAAe,EAAM,QAAQ,GAC7B,EAAM,EAAQ,EAAa,MAAM,CAEvC,MAAO,CACL,MAAA,EACA,IAAA,EACA,KAAM,CACR,CACF,EAkMyC,CAAE,UAAW,EAAQ,OAAO,AAAC,GAC3D,GACL,AAlMN,SAAgB,CAAA,IAAE,CAAG,CAAA,SAAE,CAAQ,CAAA,KAAE,CAAI,CAAA,QAAE,CAAO,CAAA,aAAE,CAAY,CAAE,EAC5D,GAAI,CAAA,MAAE,CAAK,CAAA,IAAE,CAAG,CAAE,CAAG,EAErB,GAAI,AAAiB,KAAjB,CAAI,CAAC,EAAM,EAAE,CAAS,CAExB,KAAO,EAAQ,GAAK,KAAK,IAAI,CAAC,CAAI,CAAC,EAAQ,EAAE,GAC3C,IAEF,KAAO,EAAM,EAAK,MAAM,EAAI,KAAK,IAAI,CAAC,CAAI,CAAC,EAAI,GAC7C,GAEJ,CAEA,IAAI,EAAU,CAAE,MAAA,EAAO,IAAA,EAAK,KAAM,EAAK,KAAK,CAAC,EAAO,EAAK,EAEzD,GAAI,AAAwB,KAAxB,EAAQ,IAAI,CAAC,IAAI,GAAW,OAC9B,QAAQ,GAAG,CAAC,6BAUd,GANkB,EAAQ,IAAI,CAC5B,AAAC,GACC,EAAE,KAAK,GAAK,EAAQ,KAAK,EACxB,CAAA,EAAE,GAAG,GAAK,EAAQ,GAAG,EAAI,EAAE,GAAG,GAAK,EAAQ,GAAG,CAAG,CAAA,GAGvC,OACb,QAAQ,GAAG,CAAC,iCAIV,EAAQ,IAAI,CAAC,QAAQ,CAAC,OACxB,EAAQ,IAAI,CAAG,EAAQ,IAAI,CAAC,KAAK,CAAC,EAAG,IACrC,EAAQ,GAAG,EAAI,GAGjB,IAAM,EAAS,EAAQ,IAAI,CACzB,AAAC,GAAM,EAAE,KAAK,EAAI,EAAQ,KAAK,EAAI,EAAE,GAAG,EAAI,EAAQ,GAAG,EAGnD,EAAU,EAAQ,IAAI,CAC1B,AAAC,GAAM,EAAE,KAAK,CAAG,EAAQ,GAAG,EAAI,EAAE,GAAG,CAAG,EAAQ,KAAK,EAGvD,GAAK,AAAA,CAAA,GAAU,CAAA,GAAY,CAAC,EAAc,OACxC,QAAQ,GAAG,CAAC,uCAId,EAAS,CAAE,KAAM,cAAe,QAAA,CAAQ,EAC1C,EAgJa,CAAE,IAAA,EAAK,SAAA,EAAU,KAAA,EAAM,QAAA,EAAS,aAAA,CAAa,EACtD,EAGA,OADA,SAAS,gBAAgB,CAAC,UAAW,GAC9B,KACL,SAAS,mBAAmB,CAAC,UAAW,EAC1C,CACF,EAAG,CAAC,EAAM,EAAS,EAAU,EAAa,EAEnC,EACL,OACA,CAAE,IAAK,CAAQ,EACf,EAAK,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAY,IAC7B,AA1GN,CAAA,SAAS,EACP,CAAS,CACT,CAAsB,CACtB,CAAuB,CACvB,CAAuB,EAEvB,GAAI,AAAgB,UAAhB,OAAO,EAAmB,OAAO,EAErC,GAAM,CAAA,IAAE,CAAG,CAAA,SAAE,CAAQ,CAAE,CAAG,EACpB,EAAa,GAAe,SAAS,EAAI,EAAE,EAC3C,EAAa,AAAyB,IAAzB,EAAc,MAAM,EAAU,EAE3C,EAAQ,CACZ,GAAG,CAAG,CACN,OAAQ,EAAiB,GAAK,EAC9B,OAAQ,aAAgB,CAAA,EAAa,EAAI,KAAK,CAAG,aAAA,EACjD,OAAQ,MACV,EAEI,EAAW,EAAE,CACjB,GAAI,EACF,CAAA,IAAK,IAAM,KAAO,EAChB,GAAI,OAAO,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,EAAU,GAAM,CACvD,IAAM,EAAQ,CAAQ,CAAC,EAAI,CACvB,GAAO,IACT,EAAS,IAAI,CAAC,EAAM,QAAQ,CAAC,EAAE,EAE/B,EAAS,IAAI,CAAC,EAElB,CAAA,CAIJ,OAAO,EACL,OACA,CACE,UAAW,YACX,MAAA,EACA,QAAS,AAAC,IACR,EAAE,eAAe,GAEf,EAAE,OAAO,EACT,EAAE,OAAO,EACR,CAAa,CAAC,EAAE,GAAK,EAAI,EAAE,EAAI,AAAyB,IAAzB,EAAc,MAAM,EAGpD,EAAE,eAAe,GACjB,EAAS,CACP,KAAM,uBACN,QAAS,CAAE,IAAK,CAAC,EAAI,EAAE,CAAC,AAAC,CAC3B,IACS,EAAE,QAAQ,EAAI,EAAc,MAAM,CAAG,EAI9C,EAAS,CACP,KAAM,eACN,QAAS,CAAE,IAAK,CAJG,CAAa,CAAC,EAAc,MAAM,CAAG,EAAE,CAI3B,EAAI,EAAE,CAAC,AAAC,CACzC,GAEA,EAAS,CACP,KAAM,cACN,QAAS,CAAE,IAAK,CAAC,EAAI,EAAE,CAAC,AAAC,CAC3B,EAEJ,CACF,EACA,EACI,EAAS,IAAI,GACb,EAAS,GAAG,CAAC,CAAC,EAAY,IACxB,EAAW,EAAO,EAAU,EAAe,IAGrD,CAAA,EAiCiB,EAAO,EAAU,EAAe,CAAA,IAGjD,Q,K,Y,C,K,e","sources":["<anon>","packages/feedback-components/src/feedback/text-visualizer.ts"],"sourcesContent":["import \"./feedback-components.c459cc27.js\";\nimport \"./feedback-components.8b03e8be.js\";\nimport $h8ona$macrostrathyper from \"@macrostrat/hyper\";\nimport {useRef as $h8ona$useRef, useEffect as $h8ona$useEffect} 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[\"parcelRequirea149\"];\n\nif (parcelRequire == null) {\n parcelRequire = function(id) {\n if (id in $parcel$modules) {\n return $parcel$modules[id].exports;\n }\n if (id in $parcel$inits) {\n var init = $parcel$inits[id];\n delete $parcel$inits[id];\n var module = {id: id, exports: {}};\n $parcel$modules[id] = module;\n init.call(module.exports, module, module.exports);\n return module.exports;\n }\n var err = new Error(\"Cannot find module '\" + id + \"'\");\n err.code = 'MODULE_NOT_FOUND';\n throw err;\n };\n\n parcelRequire.register = function register(id, init) {\n $parcel$inits[id] = init;\n };\n\n $parcel$global[\"parcelRequirea149\"] = parcelRequire;\n}\n\nvar parcelRegister = parcelRequire.register;\n\nvar $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 const tagStyle = (0, $edvRb.getTagStyle)(highlight.backgroundColor, {\n highlighted: highlighted,\n active: active\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 tags.push(tag);\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, allowOverlap: allowOverlap } = props;\n const allTags = $d6cf457c7790c03a$var$buildTags((0, $edvRb.buildHighlights)(nodes, null), selectedNodes);\n return $d6cf457c7790c03a$var$h(\"div.feedback-text-wrapper\", {\n tabIndex: 0,\n onKeyDown: (e)=>{\n if (e.key === \"Backspace\") dispatch({\n type: \"delete-node\",\n payload: {\n ids: selectedNodes\n }\n });\n }\n }, $d6cf457c7790c03a$var$h($d6cf457c7790c03a$export$190465bec6b893be, {\n text: text,\n allTags: allTags,\n allowOverlap: allowOverlap,\n dispatch: dispatch,\n selectedNodes: selectedNodes\n }));\n}\nfunction $d6cf457c7790c03a$var$createTagFromSelection({ container: container }) {\n const selection = window.getSelection();\n if (!selection || selection.isCollapsed || selection.rangeCount === 0 || !container) return null;\n const range = selection.getRangeAt(0);\n if (!container.contains(range.startContainer) || !container.contains(range.endContainer)) return null;\n const preRange = document.createRange();\n preRange.setStart(container, 0);\n preRange.setEnd(range.startContainer, range.startOffset);\n const start = preRange.toString().length;\n const selectedText = range.toString();\n const end = start + selectedText.length;\n return {\n start: start,\n end: end,\n text: selectedText\n };\n}\nfunction $d6cf457c7790c03a$var$addTag({ tag: tag, dispatch: dispatch, text: text, allTags: allTags, allowOverlap: allowOverlap }) {\n let { start: start, end: 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]))start--;\n while(end < text.length && /\\w/.test(text[end]))end++;\n }\n let payload = {\n start: start,\n end: end,\n text: text.slice(start, end)\n };\n if (payload.text.trim() === \"\") {\n console.log(\"Blank tag found, ignoring\");\n return;\n }\n const duplicate = allTags.find((t)=>t.start === payload.start && (t.end === payload.end || t.end === payload.end - 1));\n if (duplicate) {\n console.log(\"Duplicate tag found, ignoring\");\n return;\n }\n if (payload.text.endsWith(\" \")) {\n payload.text = payload.text.slice(0, -1);\n payload.end -= 1;\n }\n const inside = allTags.some((t)=>t.start <= payload.start && t.end >= payload.end);\n const overlap = allTags.some((t)=>t.start < payload.end && t.end > payload.start);\n if ((inside || overlap) && !allowOverlap) {\n console.log(\"Tag is inside another tag, ignoring\");\n return;\n }\n dispatch({\n type: \"create-node\",\n payload: payload\n });\n}\nfunction $d6cf457c7790c03a$var$nestHighlights(text, tags) {\n const events = [];\n for (const tag of tags){\n events.push({\n pos: tag.start,\n type: \"start\",\n tag: tag\n });\n events.push({\n pos: tag.end,\n type: \"end\",\n tag: 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 const root = {\n children: [],\n textStart: 0\n };\n const stack = [\n root\n ];\n let lastPos = 0;\n for (const { pos: pos, type: type, tag: tag } of events){\n const parent = stack[stack.length - 1];\n if (pos > lastPos) {\n const slice = text.slice(lastPos, pos);\n parent.children.push(slice);\n }\n if (type === \"start\") {\n const newNode = {\n tag: tag,\n children: [],\n textStart: pos\n };\n parent.children.push(newNode);\n stack.push(newNode);\n } else stack.pop();\n lastPos = pos;\n }\n if (lastPos < text.length) stack[stack.length - 1].children.push(text.slice(lastPos));\n return root;\n}\nfunction $d6cf457c7790c03a$var$renderNode(node, dispatch, selectedNodes, parentSelected) {\n if (typeof node === \"string\") return node;\n const { tag: tag, children: children } = node;\n const isSelected = selectedNodes?.includes(tag.id);\n const showBorder = selectedNodes.length === 0 || isSelected;\n const style = {\n ...tag,\n zIndex: parentSelected ? -1 : 1,\n border: \"1px solid \" + (showBorder ? tag.color : \"transparent\"),\n margin: \"-1px\"\n };\n let moveText = [];\n if (isSelected) {\n for(const key in children)if (Object.prototype.hasOwnProperty.call(children, key)) {\n const child = children[key];\n if (child?.tag) moveText.push(child.children[0]);\n else moveText.push(child);\n }\n }\n return $d6cf457c7790c03a$var$h(\"span\", {\n className: \"highlight\",\n style: style,\n onClick: (e)=>{\n e.stopPropagation();\n if (e.ctrlKey || e.metaKey || selectedNodes[0] === tag.id && selectedNodes.length === 1) {\n // Toggle selection on ctrl/cmd click or when node is only selected node\n e.stopPropagation();\n dispatch({\n type: \"toggle-node-selected\",\n payload: {\n ids: [\n tag.id\n ]\n }\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 dispatch({\n type: \"select-range\",\n payload: {\n ids: [\n lastSelected,\n tag.id\n ]\n }\n });\n } else dispatch({\n type: \"select-node\",\n payload: {\n ids: [\n tag.id\n ]\n }\n });\n }\n }, isSelected ? moveText.flat() : children.map((child, i)=>$d6cf457c7790c03a$var$renderNode(child, dispatch, selectedNodes, isSelected)));\n}\nfunction $d6cf457c7790c03a$export$190465bec6b893be(props) {\n const { text: text, allTags: allTags = [], dispatch: dispatch, selectedNodes: selectedNodes, allowOverlap: allowOverlap } = props;\n const tree = $d6cf457c7790c03a$var$nestHighlights(text, allTags);\n const spanRef = (0, $h8ona$useRef)(null);\n (0, $h8ona$useEffect)(()=>{\n const handleMouseUp = ()=>{\n const tag = $d6cf457c7790c03a$var$createTagFromSelection({\n container: spanRef.current\n });\n if (!tag) return;\n $d6cf457c7790c03a$var$addTag({\n tag: tag,\n dispatch: dispatch,\n text: text,\n allTags: allTags,\n allowOverlap: allowOverlap\n });\n };\n document.addEventListener(\"mouseup\", handleMouseUp);\n return ()=>{\n document.removeEventListener(\"mouseup\", handleMouseUp);\n };\n }, [\n text,\n allTags,\n dispatch,\n allowOverlap\n ]);\n return $d6cf457c7790c03a$var$h(\"span\", {\n ref: spanRef\n }, tree.children.map((child, i)=>$d6cf457c7790c03a$var$renderNode(child, dispatch, selectedNodes, false)));\n}\n\n\nexport {$d6cf457c7790c03a$export$6e107db9091b8219 as FeedbackText, $d6cf457c7790c03a$export$190465bec6b893be as HighlightedText};\n//# sourceMappingURL=feedback-components.ec54a1e7.js.map\n","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\";\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}\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 { text, selectedNodes, nodes, dispatch, allowOverlap } = 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 }),\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): 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\n const style = {\n ...tag,\n zIndex: parentSelected ? -1 : 1,\n border: \"1px solid \" + (showBorder ? tag.color : \"transparent\"),\n margin: \"-1px\",\n };\n\n let moveText = [];\n if (isSelected) {\n for (const key in children) {\n if (Object.prototype.hasOwnProperty.call(children, key)) {\n const child = children[key];\n if (child?.tag) {\n moveText.push(child.children[0]);\n } else {\n moveText.push(child);\n }\n }\n }\n }\n\n return h(\n \"span\",\n {\n className: \"highlight\",\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(child, dispatch, selectedNodes, isSelected),\n ),\n );\n}\n\nexport function HighlightedText(props: {\n text: string;\n allTags: AnnotateBlendTag[];\n lineHeight: string;\n allowOverlap?: boolean;\n dispatch: TreeDispatch;\n selectedNodes: number[];\n}) {\n const { text, allTags = [], dispatch, selectedNodes, allowOverlap } = 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),\n ),\n );\n}\n"],"names":["$h8ona$macrostrathyper","useRef","$h8ona$useRef","useEffect","$h8ona$useEffect","$parcel$global","globalThis","$parcel$modules","$parcel$inits","parcelRequire","id","exports","init","module","call","err","Error","code","register","$9wFEx","$edvRb","$d6cf457c7790c03a$var$h","styled","a","__esModule","default","$d6cf457c7790c03a$export$6e107db9091b8219","props","text","selectedNodes","nodes","dispatch","allowOverlap","tabIndex","onKeyDown","e","key","type","payload","ids","$d6cf457c7790c03a$export$190465bec6b893be","allTags","$d6cf457c7790c03a$var$buildTags","highlights","tags","entities","Set","highlight","tag","has","highlighted","$d6cf457c7790c03a$var$isHighlighted","length","includes","parents","some","d","active","tagStyle","getTagStyle","backgroundColor","color","display","markStyle","push","add","buildHighlights","tree","$d6cf457c7790c03a$var$nestHighlights","events","pos","start","end","sort","b","root","children","textStart","stack","lastPos","parent","slice","newNode","pop","spanRef","handleMouseUp","$d6cf457c7790c03a$var$createTagFromSelection","container","selection","window","getSelection","isCollapsed","rangeCount","range","getRangeAt","contains","startContainer","endContainer","preRange","document","createRange","setStart","setEnd","startOffset","toString","selectedText","current","$d6cf457c7790c03a$var$addTag","test","trim","console","log","find","t","endsWith","inside","overlap","addEventListener","removeEventListener","ref","map","child","i","$d6cf457c7790c03a$var$renderNode","node","parentSelected","isSelected","showBorder","style","zIndex","border","margin","moveText","Object","prototype","hasOwnProperty","className","onClick","stopPropagation","ctrlKey","metaKey","shiftKey","flat","FeedbackText","HighlightedText"],"version":3,"file":"feedback-components.ec54a1e7.js.map","sourceRoot":"../../../../"}
|
package/dist/node/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
var
|
|
1
|
+
import"./feedback-components.8b03e8be.js";import"./feedback-components.561466ac.js";function e(e,a){return Object.keys(a).forEach(function(t){"default"===t||"__esModule"===t||Object.prototype.hasOwnProperty.call(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:function(){return a[t]}})}),e}var a=globalThis,t={},r={},c=a.parcelRequirea149;null==c&&((c=function(e){if(e in t)return t[e].exports;if(e in r){var a=r[e];delete r[e];var c={id:e,exports:{}};return t[e]=c,a.call(c.exports,c,c.exports),c.exports}var o=Error("Cannot find module '"+e+"'");throw o.code="MODULE_NOT_FOUND",o}).register=function(e,a){r[e]=a},a.parcelRequirea149=c),c.register;var o={},n=c("edvRb"),d=c("aZPCw");e(o,n),e(o,d);export{$8c534c0378e15a46$export$c4b91360064ad200 as buildHighlights,$8c534c0378e15a46$export$d60b563f571177d as enhanceData,$8c534c0378e15a46$export$35baa338324d8550 as getTagStyle,$8c534c0378e15a46$export$2b07158757c249e0 as ExtractionContext,$8c534c0378e15a46$export$4eb2a0ce903ce967 as ModelInfo,$8c534c0378e15a46$export$117e56c71b172cde as EntityTag,$2c86488f2f3c1edd$export$a90600c9da52b40c as FeedbackComponent,$330ae695507d96f5$export$8d9dbb7a64bf2a5e as treeToGraph};
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
package/dist/node/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"mappings":"A,
|
|
1
|
+
{"mappings":"A,M,oD,A,O,oD,C,S,E,C,C,C,E,O,O,I,C,G,O,C,S,C,E,Y,G,A,e,G,O,S,C,c,C,I,C,E,I,O,c,C,E,E,C,W,C,E,I,W,O,C,C,E,A,C,E,G,C,C,I,E,W,E,C,E,E,C,E,E,E,iB,A,O,I,A,C,E,S,C,E,G,K,E,O,C,C,E,C,O,C,G,K,E,C,I,E,C,C,E,A,Q,C,C,E,C,I,E,C,G,E,Q,C,C,E,O,C,C,E,C,E,E,I,C,E,O,C,E,E,O,E,E,O,A,C,I,E,A,M,uB,E,I,O,E,I,C,mB,C,C,E,Q,C,S,C,C,C,E,C,C,E,C,C,E,E,iB,C,G,E,Q,C,I,E,C,E,E,E,S,E,E,S,E,E,G,E,E,U,6C,e,C,4C,W,C,6C,W,C,6C,iB,C,6C,S,C,6C,S,C,6C,iB,C,6C,W","sources":["<anon>","packages/feedback-components/src/index.ts"],"sourcesContent":["import \"./feedback-components.8b03e8be.js\";\nimport \"./feedback-components.561466ac.js\";\n\n\nfunction $parcel$exportWildcard(dest, source) {\n Object.keys(source).forEach(function(key) {\n if (key === 'default' || key === '__esModule' || Object.prototype.hasOwnProperty.call(dest, key)) {\n return;\n }\n\n Object.defineProperty(dest, key, {\n enumerable: true,\n get: function get() {\n return source[key];\n }\n });\n });\n\n return dest;\n}\n\n var $parcel$global = globalThis;\n \nvar $parcel$modules = {};\nvar $parcel$inits = {};\n\nvar parcelRequire = $parcel$global[\"parcelRequirea149\"];\n\nif (parcelRequire == null) {\n parcelRequire = function(id) {\n if (id in $parcel$modules) {\n return $parcel$modules[id].exports;\n }\n if (id in $parcel$inits) {\n var init = $parcel$inits[id];\n delete $parcel$inits[id];\n var module = {id: id, exports: {}};\n $parcel$modules[id] = module;\n init.call(module.exports, module, module.exports);\n return module.exports;\n }\n var err = new Error(\"Cannot find module '\" + id + \"'\");\n err.code = 'MODULE_NOT_FOUND';\n throw err;\n };\n\n parcelRequire.register = function register(id, init) {\n $parcel$inits[id] = init;\n };\n\n $parcel$global[\"parcelRequirea149\"] = parcelRequire;\n}\n\nvar parcelRegister = parcelRequire.register;\nvar $c688386f08592f9c$exports = {};\n\nvar $edvRb = parcelRequire(\"edvRb\");\n\nvar $aZPCw = parcelRequire(\"aZPCw\");\n$parcel$exportWildcard($c688386f08592f9c$exports, $edvRb);\n$parcel$exportWildcard($c688386f08592f9c$exports, $aZPCw);\n\n\nexport {$8c534c0378e15a46$export$c4b91360064ad200 as buildHighlights, $8c534c0378e15a46$export$d60b563f571177d as enhanceData, $8c534c0378e15a46$export$35baa338324d8550 as getTagStyle, $8c534c0378e15a46$export$2b07158757c249e0 as ExtractionContext, $8c534c0378e15a46$export$4eb2a0ce903ce967 as ModelInfo, $8c534c0378e15a46$export$117e56c71b172cde as EntityTag, $2c86488f2f3c1edd$export$a90600c9da52b40c as FeedbackComponent, $330ae695507d96f5$export$8d9dbb7a64bf2a5e as treeToGraph};\n//# sourceMappingURL=index.js.map\n","export * from \"./extractions\";\nexport * from \"./feedback\";\n"],"names":["$parcel$exportWildcard","dest","source","Object","keys","forEach","key","prototype","hasOwnProperty","call","defineProperty","enumerable","get","$parcel$global","globalThis","$parcel$modules","$parcel$inits","parcelRequire","id","exports","init","module","err","Error","code","register","$c688386f08592f9c$exports","$edvRb","$aZPCw","$8c534c0378e15a46$export$c4b91360064ad200","buildHighlights","$8c534c0378e15a46$export$d60b563f571177d","enhanceData","$8c534c0378e15a46$export$35baa338324d8550","getTagStyle","$8c534c0378e15a46$export$2b07158757c249e0","ExtractionContext","$8c534c0378e15a46$export$4eb2a0ce903ce967","ModelInfo","$8c534c0378e15a46$export$117e56c71b172cde","EntityTag","$2c86488f2f3c1edd$export$a90600c9da52b40c","FeedbackComponent","$330ae695507d96f5$export$8d9dbb7a64bf2a5e","treeToGraph"],"version":3,"file":"index.js.map","sourceRoot":"../../../../"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@macrostrat/feedback-components",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.1.1",
|
|
4
4
|
"description": "",
|
|
5
5
|
"source": "src/index.ts",
|
|
6
6
|
"type": "module",
|
|
@@ -35,9 +35,10 @@
|
|
|
35
35
|
"@babel/preset-react": "^7.18.6",
|
|
36
36
|
"@blueprintjs/core": "^5.10.2",
|
|
37
37
|
"@blueprintjs/select": "^5.3.10",
|
|
38
|
-
"@macrostrat/color-utils": "^1.
|
|
38
|
+
"@macrostrat/color-utils": "^1.1.1",
|
|
39
|
+
"@macrostrat/data-sheet": "^2.1.1",
|
|
39
40
|
"@macrostrat/hyper": "^3.0.6",
|
|
40
|
-
"@macrostrat/ui-components": "^4.
|
|
41
|
+
"@macrostrat/ui-components": "^4.3.2",
|
|
41
42
|
"@xyflow/react": "^12.3.6",
|
|
42
43
|
"classnames": "^2.5.1",
|
|
43
44
|
"d3-force": "^3.0.0",
|
|
@@ -47,8 +48,8 @@
|
|
|
47
48
|
"use-element-dimensions": "^2.1.3"
|
|
48
49
|
},
|
|
49
50
|
"peerDependencies": {
|
|
50
|
-
"react": "^17
|
|
51
|
-
"react-dom": "^17
|
|
51
|
+
"react": "^17||^18||^19",
|
|
52
|
+
"react-dom": "^17||^18||^19"
|
|
52
53
|
},
|
|
53
54
|
"repository": {
|
|
54
55
|
"type": "git",
|
|
@@ -56,6 +57,6 @@
|
|
|
56
57
|
"directory": "packages/feedback-components"
|
|
57
58
|
},
|
|
58
59
|
"devDependencies": {
|
|
59
|
-
"parcel": "^2.
|
|
60
|
+
"parcel": "^2.15.4"
|
|
60
61
|
}
|
|
61
62
|
}
|