vzcode 0.41.0 → 0.42.0
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/dist/assets/{index-APrkOjkE.js → index-EvjpKQwB.js} +38 -38
- package/dist/assets/{index-7TYVtsYX.css → index-vD_kE3p2.css} +1 -1
- package/dist/assets/{worker-i-gsyYZ1.js → worker-5MYmBNqK.js} +64 -64
- package/dist/assets/{worker-hNl6wfTa.js → worker-pzCcKLRg.js} +1 -1
- package/dist/index.html +2 -2
- package/package.json +13 -7
- package/src/client/CodeEditor/json1PresenceDisplay.ts +75 -42
- package/src/client/CodeEditor/style.scss +8 -0
- package/src/client/CodeEditor/typeScriptCompletions.ts +10 -1
- package/src/client/themes/vizhubTheme/index.ts +8 -2
- package/src/client/usePrettier/worker.ts +7 -0
|
@@ -234,4 +234,4 @@ ${M.join(`
|
|
|
234
234
|
`;P=P.replace(n,"").replace(r,"").replace(v,"$1");let E="";for(;E!==P;)E=P,P=P.replace(_,`${m}$1 $2${m}`);P=P.replace(u,"").trimRight();let R=Object.create(null),q=P.replace(f,"").replace(u,"").trimRight(),j;for(;j=f.exec(P);){let $=j[2].replace(o,"");typeof R[j[1]]=="string"||Array.isArray(R[j[1]])?R[j[1]]=g.concat(R[j[1]],$):R[j[1]]=$}return{comments:q,pragmas:R}}function C({comments:P="",pragmas:m={}}){let E=`
|
|
235
235
|
`,R="/**",q=" *",j=" */",$=Object.keys(m),V=$.flatMap(X=>N(X,m[X])).map(X=>`${q} ${X}${E}`).join("");if(!P){if($.length===0)return"";if($.length===1&&!Array.isArray(m[$[0]])){let X=m[$[0]];return`${R} ${N($[0],X)[0]}${j}`}}let U=P.split(E).map(X=>`${q} ${X}`).join(E)+E;return R+E+(P?U:"")+(P&&$.length?q+E:"")+V+j}function N(P,m){return g.concat(m).map(E=>`@${P} ${E}`.trim())}}),eN={};ZT(eN,{parsers:()=>iC});var iC={};ZT(iC,{typescript:()=>$oe});var aoe=WP(noe(),1);function soe(t,r){let n=new SyntaxError(t+" ("+r.loc.start.line+":"+r.loc.start.column+")");return Object.assign(n,r)}var ooe=soe;function uoe(t){let r=[];for(let n of t)try{return n()}catch(a){r.push(a)}throw Object.assign(new Error("All combinations failed"),{errors:r})}var loe=uoe,tN=WP(ioe(),1);function coe(t){if(!t.startsWith("#!"))return"";let r=t.indexOf(`
|
|
236
236
|
`);return r===-1?t:t.slice(0,r)}var _oe=coe;function poe(t){let r=_oe(t);r&&(t=t.slice(r.length+1));let n=(0,tN.extract)(t),{pragmas:a,comments:o}=(0,tN.parseWithComments)(n);return{shebang:r,text:t,pragmas:a,comments:o}}function doe(t){let{pragmas:r}=poe(t);return Object.prototype.hasOwnProperty.call(r,"prettier")||Object.prototype.hasOwnProperty.call(r,"format")}function foe(t){return Array.isArray(t)&&t.length>0}var rN=foe;function _o(t){var r;let n=t.range?t.range[0]:t.start,a=((r=t.declaration)==null?void 0:r.decorators)??t.decorators;return rN(a)?Math.min(_o(a[0]),n):n}function nc(t){return t.range?t.range[1]:t.end}function moe(t){return t=typeof t=="function"?{parse:t}:t,{astFormat:"estree",hasPragma:doe,locStart:_o,locEnd:nc,...t}}var hoe=moe;function yoe(t){return t.charAt(0)==="#"&&t.charAt(1)==="!"?"//"+t.slice(2):t}var goe=yoe,Doe=(t,r,n)=>{if(!(t&&r==null))return Array.isArray(r)||typeof r=="string"?r[n<0?r.length+n:n]:r.at(n)},nN=Doe;function boe(t){return t=new Set(t),r=>t.has(r==null?void 0:r.type)}var xoe=boe,voe=xoe(["Block","CommentBlock","MultiLine"]),aC=voe;function Toe(t){return aC(t)&&t.value[0]==="*"&&/@(?:type|satisfies)\b/.test(t.value)}var Coe=Toe;function Soe(t){let r=`*${t.value}*`.split(`
|
|
237
|
-
`);return r.length>1&&r.every(n=>n.trimStart()[0]==="*")}var iN=Soe,Th=null;function Ch(t){if(Th!==null&&typeof Th.property){let r=Th;return Th=Ch.prototype=null,r}return Th=Ch.prototype=t??Object.create(null),new Ch}var Aoe=10;for(let t=0;t<=Aoe;t++)Ch();function Eoe(t){return Ch(t)}function woe(t,r="type"){Eoe(t);function n(a){let o=a[r],u=t[o];if(!Array.isArray(u))throw Object.assign(new Error(`Missing visitor keys for '${o}'.`),{node:a});return u}return n}var Foe=woe,koe={ArrayExpression:["elements"],AssignmentExpression:["left","right"],BinaryExpression:["left","right"],InterpreterDirective:[],Directive:["value"],DirectiveLiteral:[],BlockStatement:["directives","body"],BreakStatement:["label"],CallExpression:["callee","arguments","typeParameters","typeArguments"],CatchClause:["param","body"],ConditionalExpression:["test","consequent","alternate"],ContinueStatement:["label"],DebuggerStatement:[],DoWhileStatement:["test","body"],EmptyStatement:[],ExpressionStatement:["expression"],File:["program"],ForInStatement:["left","right","body"],ForStatement:["init","test","update","body"],FunctionDeclaration:["id","params","body","returnType","typeParameters","predicate"],FunctionExpression:["id","params","body","returnType","typeParameters"],Identifier:["typeAnnotation","decorators"],IfStatement:["test","consequent","alternate"],LabeledStatement:["label","body"],StringLiteral:[],NumericLiteral:[],NullLiteral:[],BooleanLiteral:[],RegExpLiteral:[],LogicalExpression:["left","right"],MemberExpression:["object","property"],NewExpression:["callee","arguments","typeParameters","typeArguments"],Program:["directives","body"],ObjectExpression:["properties"],ObjectMethod:["key","params","body","decorators","returnType","typeParameters"],ObjectProperty:["key","value","decorators"],RestElement:["argument","typeAnnotation","decorators"],ReturnStatement:["argument"],SequenceExpression:["expressions"],ParenthesizedExpression:["expression"],SwitchCase:["test","consequent"],SwitchStatement:["discriminant","cases"],ThisExpression:[],ThrowStatement:["argument"],TryStatement:["block","handler","finalizer"],UnaryExpression:["argument"],UpdateExpression:["argument"],VariableDeclaration:["declarations"],VariableDeclarator:["id","init"],WhileStatement:["test","body"],WithStatement:["object","body"],AssignmentPattern:["left","right","decorators","typeAnnotation"],ArrayPattern:["elements","typeAnnotation","decorators"],ArrowFunctionExpression:["params","body","returnType","typeParameters","predicate"],ClassBody:["body"],ClassExpression:["id","body","superClass","mixins","typeParameters","superTypeParameters","implements","decorators","superTypeArguments"],ClassDeclaration:["id","body","superClass","mixins","typeParameters","superTypeParameters","implements","decorators","superTypeArguments"],ExportAllDeclaration:["source","attributes","assertions","exported"],ExportDefaultDeclaration:["declaration"],ExportNamedDeclaration:["declaration","specifiers","source","attributes","assertions"],ExportSpecifier:["local","exported"],ForOfStatement:["left","right","body"],ImportDeclaration:["specifiers","source","attributes","assertions"],ImportDefaultSpecifier:["local"],ImportNamespaceSpecifier:["local"],ImportSpecifier:["local","imported"],ImportExpression:["source","options","attributes"],MetaProperty:["meta","property"],ClassMethod:["key","params","body","decorators","returnType","typeParameters"],ObjectPattern:["properties","typeAnnotation","decorators"],SpreadElement:["argument"],Super:[],TaggedTemplateExpression:["tag","quasi","typeParameters","typeArguments"],TemplateElement:[],TemplateLiteral:["quasis","expressions"],YieldExpression:["argument"],AwaitExpression:["argument"],Import:[],BigIntLiteral:[],ExportNamespaceSpecifier:["exported"],OptionalMemberExpression:["object","property"],OptionalCallExpression:["callee","arguments","typeParameters","typeArguments"],ClassProperty:["key","value","typeAnnotation","decorators","variance"],ClassAccessorProperty:["key","value","typeAnnotation","decorators"],ClassPrivateProperty:["key","value","decorators","typeAnnotation","variance"],ClassPrivateMethod:["key","params","body","decorators","returnType","typeParameters"],PrivateName:["id"],StaticBlock:["body"],AnyTypeAnnotation:[],ArrayTypeAnnotation:["elementType"],BooleanTypeAnnotation:[],BooleanLiteralTypeAnnotation:[],NullLiteralTypeAnnotation:[],ClassImplements:["id","typeParameters"],DeclareClass:["id","typeParameters","extends","mixins","implements","body"],DeclareFunction:["id","predicate"],DeclareInterface:["id","typeParameters","extends","body"],DeclareModule:["id","body"],DeclareModuleExports:["typeAnnotation"],DeclareTypeAlias:["id","typeParameters","right"],DeclareOpaqueType:["id","typeParameters","supertype"],DeclareVariable:["id"],DeclareExportDeclaration:["declaration","specifiers","source"],DeclareExportAllDeclaration:["source"],DeclaredPredicate:["value"],ExistsTypeAnnotation:[],FunctionTypeAnnotation:["typeParameters","params","rest","returnType","this"],FunctionTypeParam:["name","typeAnnotation"],GenericTypeAnnotation:["id","typeParameters"],InferredPredicate:[],InterfaceExtends:["id","typeParameters"],InterfaceDeclaration:["id","typeParameters","extends","body"],InterfaceTypeAnnotation:["extends","body"],IntersectionTypeAnnotation:["types"],MixedTypeAnnotation:[],EmptyTypeAnnotation:[],NullableTypeAnnotation:["typeAnnotation"],NumberLiteralTypeAnnotation:[],NumberTypeAnnotation:[],ObjectTypeAnnotation:["properties","indexers","callProperties","internalSlots"],ObjectTypeInternalSlot:["id","value","optional","static","method"],ObjectTypeCallProperty:["value"],ObjectTypeIndexer:["id","key","value","variance"],ObjectTypeProperty:["key","value","variance"],ObjectTypeSpreadProperty:["argument"],OpaqueType:["id","typeParameters","supertype","impltype"],QualifiedTypeIdentifier:["id","qualification"],StringLiteralTypeAnnotation:[],StringTypeAnnotation:[],SymbolTypeAnnotation:[],ThisTypeAnnotation:[],TupleTypeAnnotation:["types","elementTypes"],TypeofTypeAnnotation:["argument","typeArguments"],TypeAlias:["id","typeParameters","right"],TypeAnnotation:["typeAnnotation"],TypeCastExpression:["expression","typeAnnotation"],TypeParameter:["bound","default","variance"],TypeParameterDeclaration:["params"],TypeParameterInstantiation:["params"],UnionTypeAnnotation:["types"],Variance:[],VoidTypeAnnotation:[],EnumDeclaration:["id","body"],EnumBooleanBody:["members"],EnumNumberBody:["members"],EnumStringBody:["members"],EnumSymbolBody:["members"],EnumBooleanMember:["id","init"],EnumNumberMember:["id","init"],EnumStringMember:["id","init"],EnumDefaultedMember:["id"],IndexedAccessType:["objectType","indexType"],OptionalIndexedAccessType:["objectType","indexType"],JSXAttribute:["name","value"],JSXClosingElement:["name"],JSXElement:["openingElement","children","closingElement"],JSXEmptyExpression:[],JSXExpressionContainer:["expression"],JSXSpreadChild:["expression"],JSXIdentifier:[],JSXMemberExpression:["object","property"],JSXNamespacedName:["namespace","name"],JSXOpeningElement:["name","attributes","typeArguments","typeParameters"],JSXSpreadAttribute:["argument"],JSXText:[],JSXFragment:["openingFragment","children","closingFragment"],JSXOpeningFragment:[],JSXClosingFragment:[],Noop:[],Placeholder:[],V8IntrinsicIdentifier:[],ArgumentPlaceholder:[],BindExpression:["object","callee"],ImportAttribute:["key","value"],Decorator:["expression"],DoExpression:["body"],ExportDefaultSpecifier:["exported"],RecordExpression:["properties"],TupleExpression:["elements"],DecimalLiteral:[],ModuleExpression:["body"],TopicReference:[],PipelineTopicExpression:["expression"],PipelineBareFunction:["callee"],PipelinePrimaryTopicReference:[],TSParameterProperty:["parameter","decorators"],TSDeclareFunction:["id","typeParameters","params","returnType","body"],TSDeclareMethod:["decorators","key","typeParameters","params","returnType"],TSQualifiedName:["left","right"],TSCallSignatureDeclaration:["typeParameters","parameters","typeAnnotation","params","returnType"],TSConstructSignatureDeclaration:["typeParameters","parameters","typeAnnotation","params","returnType"],TSPropertySignature:["key","typeAnnotation"],TSMethodSignature:["key","typeParameters","parameters","typeAnnotation","params","returnType"],TSIndexSignature:["parameters","typeAnnotation"],TSAnyKeyword:[],TSBooleanKeyword:[],TSBigIntKeyword:[],TSIntrinsicKeyword:[],TSNeverKeyword:[],TSNullKeyword:[],TSNumberKeyword:[],TSObjectKeyword:[],TSStringKeyword:[],TSSymbolKeyword:[],TSUndefinedKeyword:[],TSUnknownKeyword:[],TSVoidKeyword:[],TSThisType:[],TSFunctionType:["typeParameters","parameters","typeAnnotation","params","returnType"],TSConstructorType:["typeParameters","parameters","typeAnnotation","params","returnType"],TSTypeReference:["typeName","typeParameters","typeArguments"],TSTypePredicate:["parameterName","typeAnnotation"],TSTypeQuery:["exprName","typeParameters","typeArguments"],TSTypeLiteral:["members"],TSArrayType:["elementType"],TSTupleType:["elementTypes"],TSOptionalType:["typeAnnotation"],TSRestType:["typeAnnotation"],TSNamedTupleMember:["label","elementType"],TSUnionType:["types"],TSIntersectionType:["types"],TSConditionalType:["checkType","extendsType","trueType","falseType"],TSInferType:["typeParameter"],TSParenthesizedType:["typeAnnotation"],TSTypeOperator:["typeAnnotation"],TSIndexedAccessType:["objectType","indexType"],TSMappedType:["typeParameter","typeAnnotation","nameType"],TSLiteralType:["literal"],TSExpressionWithTypeArguments:["expression","typeParameters"],TSInterfaceDeclaration:["id","typeParameters","extends","body"],TSInterfaceBody:["body"],TSTypeAliasDeclaration:["id","typeParameters","typeAnnotation"],TSInstantiationExpression:["expression","typeParameters","typeArguments"],TSAsExpression:["expression","typeAnnotation"],TSSatisfiesExpression:["expression","typeAnnotation"],TSTypeAssertion:["typeAnnotation","expression"],TSEnumDeclaration:["id","members"],TSEnumMember:["id","initializer"],TSModuleDeclaration:["id","body"],TSModuleBlock:["body"],TSImportType:["argument","qualifier","typeParameters","typeArguments"],TSImportEqualsDeclaration:["id","moduleReference"],TSExternalModuleReference:["expression"],TSNonNullExpression:["expression"],TSExportAssignment:["expression"],TSNamespaceExportDeclaration:["id"],TSTypeAnnotation:["typeAnnotation"],TSTypeParameterInstantiation:["params"],TSTypeParameterDeclaration:["params"],TSTypeParameter:["constraint","default","name"],ChainExpression:["expression"],ExperimentalRestProperty:["argument"],ExperimentalSpreadProperty:["argument"],Literal:[],MethodDefinition:["decorators","key","value"],PrivateIdentifier:[],Property:["key","value"],PropertyDefinition:["decorators","key","typeAnnotation","value","variance"],AccessorProperty:["decorators","key","typeAnnotation","value"],TSAbstractAccessorProperty:["decorators","key","typeAnnotation"],TSAbstractKeyword:[],TSAbstractMethodDefinition:["key","value"],TSAbstractPropertyDefinition:["decorators","key","typeAnnotation"],TSAsyncKeyword:[],TSClassImplements:["expression","typeArguments","typeParameters"],TSDeclareKeyword:[],TSEmptyBodyFunctionExpression:["id","typeParameters","params","returnType"],TSExportKeyword:[],TSInterfaceHeritage:["expression","typeArguments","typeParameters"],TSPrivateKeyword:[],TSProtectedKeyword:[],TSPublicKeyword:[],TSReadonlyKeyword:[],TSStaticKeyword:[],TSTemplateLiteralType:["quasis","types"],AsExpression:["expression","typeAnnotation"],BigIntLiteralTypeAnnotation:[],BigIntTypeAnnotation:[],ConditionalTypeAnnotation:["checkType","extendsType","trueType","falseType"],DeclareEnum:["id","body"],InferTypeAnnotation:["typeParameter"],KeyofTypeAnnotation:["argument"],ObjectTypeMappedTypeProperty:["keyTparam","propType","sourceType","variance"],QualifiedTypeofIdentifier:["qualification","id"],TupleTypeLabeledElement:["label","elementType","variance"],TupleTypeSpreadElement:["label","typeAnnotation"],TypeOperator:["typeAnnotation"],TypePredicate:["parameterName","typeAnnotation","asserts"],NGRoot:["node"],NGPipeExpression:["left","right","arguments"],NGChainedExpression:["expressions"],NGEmptyExpression:[],NGMicrosyntax:["body"],NGMicrosyntaxKey:[],NGMicrosyntaxExpression:["expression","alias"],NGMicrosyntaxKeyedExpression:["key","expression"],NGMicrosyntaxLet:["key","value"],NGMicrosyntaxAs:["key","alias"],JsExpressionRoot:["node"],JsonRoot:["node"],TSJSDocAllType:[],TSJSDocUnknownType:[],TSJSDocNullableType:["typeAnnotation"],TSJSDocNonNullableType:["typeAnnotation"],NeverTypeAnnotation:[],UndefinedTypeAnnotation:[],UnknownTypeAnnotation:[],AsConstExpression:["expression"],SatisfiesExpression:["expression","typeAnnotation"]},Poe=Foe(koe),Noe=Poe;function sC(t,r){if(!(t!==null&&typeof t=="object"))return t;if(Array.isArray(t)){for(let a=0;a<t.length;a++)t[a]=sC(t[a],r);return t}let n=Noe(t);for(let a=0;a<n.length;a++)t[n[a]]=sC(t[n[a]],r);return r(t)||t}var oC=sC;function Ioe(t,r){let{parser:n,text:a}=r;if(t.type==="File"&&t.program.interpreter){let{program:{interpreter:u},comments:_}=t;delete t.program.interpreter,_.unshift(u)}if(n==="babel"){let u=new Set;t=oC(t,_=>{var f;(f=_.leadingComments)!=null&&f.some(Coe)&&u.add(_o(_))}),t=oC(t,_=>{if(_.type==="ParenthesizedExpression"){let{expression:f}=_;if(f.type==="TypeCastExpression")return f.range=_.range,f;let v=_o(_);if(!u.has(v))return f.extra={...f.extra,parenthesized:!0},f}})}if(t=oC(t,u=>{switch(u.type){case"LogicalExpression":if(aN(u))return uC(u);break;case"VariableDeclaration":{let _=nN(!1,u.declarations,-1);_!=null&&_.init&&o(u,_);break}case"TSParenthesizedType":return u.typeAnnotation;case"TSTypeParameter":if(typeof u.name=="string"){let _=_o(u);u.name={type:"Identifier",name:u.name,range:[_,_+u.name.length]}}break;case"TopicReference":t.extra={...t.extra,__isUsingHackPipeline:!0};break;case"ExportAllDeclaration":{let{exported:_}=u;if(n==="meriyah"&&(_==null?void 0:_.type)==="Identifier"){let f=a.slice(_o(_),nc(_));(f.startsWith('"')||f.startsWith("'"))&&(u.exported={...u.exported,type:"Literal",value:u.exported.name,raw:f})}break}case"TSUnionType":case"TSIntersectionType":if(u.types.length===1)return u.types[0];break}}),rN(t.comments)){let u=nN(!1,t.comments,-1);for(let _=t.comments.length-2;_>=0;_--){let f=t.comments[_];nc(f)===_o(u)&&aC(f)&&aC(u)&&iN(f)&&iN(u)&&(t.comments.splice(_+1,1),f.value+="*//*"+u.value,f.range=[_o(f),nc(u)]),u=f}}return t.type==="Program"&&(t.range=[0,a.length]),t;function o(u,_){a[nc(_)]!==";"&&(u.range=[_o(u),nc(_)])}}function aN(t){return t.type==="LogicalExpression"&&t.right.type==="LogicalExpression"&&t.operator===t.right.operator}function uC(t){return aN(t)?uC({type:"LogicalExpression",operator:t.operator,left:uC({type:"LogicalExpression",operator:t.operator,left:t.left,right:t.right.left,range:[_o(t.left),nc(t.right.left)]}),right:t.right.right,range:[_o(t),nc(t)]}):t}var Boe=Ioe,lC={loc:!0,range:!0,comment:!0,tokens:!0,loggerFn:!1,project:[],suppressDeprecatedPropertyWarnings:!0};function Ooe(t){let{message:r,location:n}=t;if(!n)return t;let{start:a,end:o}=n;return ooe(r,{loc:{start:{line:a.line,column:a.column+1},end:{line:o.line,column:o.column+1}},cause:t})}var Loe=t=>/\.(?:js|mjs|cjs|jsx|ts|mts|cts|tsx)$/i.test(t);function Moe(t,r){let n=r==null?void 0:r.filepath;if(n&&Loe(n))return[{...lC,filePath:n}];let a=Roe(t);return[{...lC,jsx:a},{...lC,jsx:!a}]}function joe(t,r){let n=goe(t),a=Moe(t,r),o;try{o=loe(a.map(u=>()=>(0,aoe.parse)(n,u)))}catch({errors:[u]}){throw Ooe(u)}return Boe(o,{text:t})}function Roe(t){return new RegExp(["(?:^[^\"'`]*</)","|","(?:^[^/]{2}.*/>)"].join(""),"m").test(t)}var $oe=hoe(joe),Joe=eN,qoe=Object.freeze({__proto__:null,default:Joe,parsers:iC});const Uoe={js:"babel",jsx:"babel",mjs:"babel",cjs:"babel",ts:"typescript",tsx:"typescript",css:"css",html:"html",json:"json",json5:"json5",md:"markdown",markdown:"markdown"},zoe=[OU,vG,dZ,Vre,qoe,wse];onmessage=async({data:t})=>{const{fileExtension:r,fileText:n,fileId:a}=t,o=Uoe[r];if(!o){postMessage({fileId:a,error:`Unsupported file extension for Prettier: ${r}`});return}try{const u=await gv(n,{parser:o,plugins:zoe});postMessage({fileId:a,fileTextPrettified:u})}catch(u){postMessage({fileId:a,error:u.toString()})}}})();
|
|
237
|
+
`);return r.length>1&&r.every(n=>n.trimStart()[0]==="*")}var iN=Soe,Th=null;function Ch(t){if(Th!==null&&typeof Th.property){let r=Th;return Th=Ch.prototype=null,r}return Th=Ch.prototype=t??Object.create(null),new Ch}var Aoe=10;for(let t=0;t<=Aoe;t++)Ch();function Eoe(t){return Ch(t)}function woe(t,r="type"){Eoe(t);function n(a){let o=a[r],u=t[o];if(!Array.isArray(u))throw Object.assign(new Error(`Missing visitor keys for '${o}'.`),{node:a});return u}return n}var Foe=woe,koe={ArrayExpression:["elements"],AssignmentExpression:["left","right"],BinaryExpression:["left","right"],InterpreterDirective:[],Directive:["value"],DirectiveLiteral:[],BlockStatement:["directives","body"],BreakStatement:["label"],CallExpression:["callee","arguments","typeParameters","typeArguments"],CatchClause:["param","body"],ConditionalExpression:["test","consequent","alternate"],ContinueStatement:["label"],DebuggerStatement:[],DoWhileStatement:["test","body"],EmptyStatement:[],ExpressionStatement:["expression"],File:["program"],ForInStatement:["left","right","body"],ForStatement:["init","test","update","body"],FunctionDeclaration:["id","params","body","returnType","typeParameters","predicate"],FunctionExpression:["id","params","body","returnType","typeParameters"],Identifier:["typeAnnotation","decorators"],IfStatement:["test","consequent","alternate"],LabeledStatement:["label","body"],StringLiteral:[],NumericLiteral:[],NullLiteral:[],BooleanLiteral:[],RegExpLiteral:[],LogicalExpression:["left","right"],MemberExpression:["object","property"],NewExpression:["callee","arguments","typeParameters","typeArguments"],Program:["directives","body"],ObjectExpression:["properties"],ObjectMethod:["key","params","body","decorators","returnType","typeParameters"],ObjectProperty:["key","value","decorators"],RestElement:["argument","typeAnnotation","decorators"],ReturnStatement:["argument"],SequenceExpression:["expressions"],ParenthesizedExpression:["expression"],SwitchCase:["test","consequent"],SwitchStatement:["discriminant","cases"],ThisExpression:[],ThrowStatement:["argument"],TryStatement:["block","handler","finalizer"],UnaryExpression:["argument"],UpdateExpression:["argument"],VariableDeclaration:["declarations"],VariableDeclarator:["id","init"],WhileStatement:["test","body"],WithStatement:["object","body"],AssignmentPattern:["left","right","decorators","typeAnnotation"],ArrayPattern:["elements","typeAnnotation","decorators"],ArrowFunctionExpression:["params","body","returnType","typeParameters","predicate"],ClassBody:["body"],ClassExpression:["id","body","superClass","mixins","typeParameters","superTypeParameters","implements","decorators","superTypeArguments"],ClassDeclaration:["id","body","superClass","mixins","typeParameters","superTypeParameters","implements","decorators","superTypeArguments"],ExportAllDeclaration:["source","attributes","assertions","exported"],ExportDefaultDeclaration:["declaration"],ExportNamedDeclaration:["declaration","specifiers","source","attributes","assertions"],ExportSpecifier:["local","exported"],ForOfStatement:["left","right","body"],ImportDeclaration:["specifiers","source","attributes","assertions"],ImportDefaultSpecifier:["local"],ImportNamespaceSpecifier:["local"],ImportSpecifier:["local","imported"],ImportExpression:["source","options","attributes"],MetaProperty:["meta","property"],ClassMethod:["key","params","body","decorators","returnType","typeParameters"],ObjectPattern:["properties","typeAnnotation","decorators"],SpreadElement:["argument"],Super:[],TaggedTemplateExpression:["tag","quasi","typeParameters","typeArguments"],TemplateElement:[],TemplateLiteral:["quasis","expressions"],YieldExpression:["argument"],AwaitExpression:["argument"],Import:[],BigIntLiteral:[],ExportNamespaceSpecifier:["exported"],OptionalMemberExpression:["object","property"],OptionalCallExpression:["callee","arguments","typeParameters","typeArguments"],ClassProperty:["key","value","typeAnnotation","decorators","variance"],ClassAccessorProperty:["key","value","typeAnnotation","decorators"],ClassPrivateProperty:["key","value","decorators","typeAnnotation","variance"],ClassPrivateMethod:["key","params","body","decorators","returnType","typeParameters"],PrivateName:["id"],StaticBlock:["body"],AnyTypeAnnotation:[],ArrayTypeAnnotation:["elementType"],BooleanTypeAnnotation:[],BooleanLiteralTypeAnnotation:[],NullLiteralTypeAnnotation:[],ClassImplements:["id","typeParameters"],DeclareClass:["id","typeParameters","extends","mixins","implements","body"],DeclareFunction:["id","predicate"],DeclareInterface:["id","typeParameters","extends","body"],DeclareModule:["id","body"],DeclareModuleExports:["typeAnnotation"],DeclareTypeAlias:["id","typeParameters","right"],DeclareOpaqueType:["id","typeParameters","supertype"],DeclareVariable:["id"],DeclareExportDeclaration:["declaration","specifiers","source"],DeclareExportAllDeclaration:["source"],DeclaredPredicate:["value"],ExistsTypeAnnotation:[],FunctionTypeAnnotation:["typeParameters","params","rest","returnType","this"],FunctionTypeParam:["name","typeAnnotation"],GenericTypeAnnotation:["id","typeParameters"],InferredPredicate:[],InterfaceExtends:["id","typeParameters"],InterfaceDeclaration:["id","typeParameters","extends","body"],InterfaceTypeAnnotation:["extends","body"],IntersectionTypeAnnotation:["types"],MixedTypeAnnotation:[],EmptyTypeAnnotation:[],NullableTypeAnnotation:["typeAnnotation"],NumberLiteralTypeAnnotation:[],NumberTypeAnnotation:[],ObjectTypeAnnotation:["properties","indexers","callProperties","internalSlots"],ObjectTypeInternalSlot:["id","value","optional","static","method"],ObjectTypeCallProperty:["value"],ObjectTypeIndexer:["id","key","value","variance"],ObjectTypeProperty:["key","value","variance"],ObjectTypeSpreadProperty:["argument"],OpaqueType:["id","typeParameters","supertype","impltype"],QualifiedTypeIdentifier:["id","qualification"],StringLiteralTypeAnnotation:[],StringTypeAnnotation:[],SymbolTypeAnnotation:[],ThisTypeAnnotation:[],TupleTypeAnnotation:["types","elementTypes"],TypeofTypeAnnotation:["argument","typeArguments"],TypeAlias:["id","typeParameters","right"],TypeAnnotation:["typeAnnotation"],TypeCastExpression:["expression","typeAnnotation"],TypeParameter:["bound","default","variance"],TypeParameterDeclaration:["params"],TypeParameterInstantiation:["params"],UnionTypeAnnotation:["types"],Variance:[],VoidTypeAnnotation:[],EnumDeclaration:["id","body"],EnumBooleanBody:["members"],EnumNumberBody:["members"],EnumStringBody:["members"],EnumSymbolBody:["members"],EnumBooleanMember:["id","init"],EnumNumberMember:["id","init"],EnumStringMember:["id","init"],EnumDefaultedMember:["id"],IndexedAccessType:["objectType","indexType"],OptionalIndexedAccessType:["objectType","indexType"],JSXAttribute:["name","value"],JSXClosingElement:["name"],JSXElement:["openingElement","children","closingElement"],JSXEmptyExpression:[],JSXExpressionContainer:["expression"],JSXSpreadChild:["expression"],JSXIdentifier:[],JSXMemberExpression:["object","property"],JSXNamespacedName:["namespace","name"],JSXOpeningElement:["name","attributes","typeArguments","typeParameters"],JSXSpreadAttribute:["argument"],JSXText:[],JSXFragment:["openingFragment","children","closingFragment"],JSXOpeningFragment:[],JSXClosingFragment:[],Noop:[],Placeholder:[],V8IntrinsicIdentifier:[],ArgumentPlaceholder:[],BindExpression:["object","callee"],ImportAttribute:["key","value"],Decorator:["expression"],DoExpression:["body"],ExportDefaultSpecifier:["exported"],RecordExpression:["properties"],TupleExpression:["elements"],DecimalLiteral:[],ModuleExpression:["body"],TopicReference:[],PipelineTopicExpression:["expression"],PipelineBareFunction:["callee"],PipelinePrimaryTopicReference:[],TSParameterProperty:["parameter","decorators"],TSDeclareFunction:["id","typeParameters","params","returnType","body"],TSDeclareMethod:["decorators","key","typeParameters","params","returnType"],TSQualifiedName:["left","right"],TSCallSignatureDeclaration:["typeParameters","parameters","typeAnnotation","params","returnType"],TSConstructSignatureDeclaration:["typeParameters","parameters","typeAnnotation","params","returnType"],TSPropertySignature:["key","typeAnnotation"],TSMethodSignature:["key","typeParameters","parameters","typeAnnotation","params","returnType"],TSIndexSignature:["parameters","typeAnnotation"],TSAnyKeyword:[],TSBooleanKeyword:[],TSBigIntKeyword:[],TSIntrinsicKeyword:[],TSNeverKeyword:[],TSNullKeyword:[],TSNumberKeyword:[],TSObjectKeyword:[],TSStringKeyword:[],TSSymbolKeyword:[],TSUndefinedKeyword:[],TSUnknownKeyword:[],TSVoidKeyword:[],TSThisType:[],TSFunctionType:["typeParameters","parameters","typeAnnotation","params","returnType"],TSConstructorType:["typeParameters","parameters","typeAnnotation","params","returnType"],TSTypeReference:["typeName","typeParameters","typeArguments"],TSTypePredicate:["parameterName","typeAnnotation"],TSTypeQuery:["exprName","typeParameters","typeArguments"],TSTypeLiteral:["members"],TSArrayType:["elementType"],TSTupleType:["elementTypes"],TSOptionalType:["typeAnnotation"],TSRestType:["typeAnnotation"],TSNamedTupleMember:["label","elementType"],TSUnionType:["types"],TSIntersectionType:["types"],TSConditionalType:["checkType","extendsType","trueType","falseType"],TSInferType:["typeParameter"],TSParenthesizedType:["typeAnnotation"],TSTypeOperator:["typeAnnotation"],TSIndexedAccessType:["objectType","indexType"],TSMappedType:["typeParameter","typeAnnotation","nameType"],TSLiteralType:["literal"],TSExpressionWithTypeArguments:["expression","typeParameters"],TSInterfaceDeclaration:["id","typeParameters","extends","body"],TSInterfaceBody:["body"],TSTypeAliasDeclaration:["id","typeParameters","typeAnnotation"],TSInstantiationExpression:["expression","typeParameters","typeArguments"],TSAsExpression:["expression","typeAnnotation"],TSSatisfiesExpression:["expression","typeAnnotation"],TSTypeAssertion:["typeAnnotation","expression"],TSEnumDeclaration:["id","members"],TSEnumMember:["id","initializer"],TSModuleDeclaration:["id","body"],TSModuleBlock:["body"],TSImportType:["argument","qualifier","typeParameters","typeArguments"],TSImportEqualsDeclaration:["id","moduleReference"],TSExternalModuleReference:["expression"],TSNonNullExpression:["expression"],TSExportAssignment:["expression"],TSNamespaceExportDeclaration:["id"],TSTypeAnnotation:["typeAnnotation"],TSTypeParameterInstantiation:["params"],TSTypeParameterDeclaration:["params"],TSTypeParameter:["constraint","default","name"],ChainExpression:["expression"],ExperimentalRestProperty:["argument"],ExperimentalSpreadProperty:["argument"],Literal:[],MethodDefinition:["decorators","key","value"],PrivateIdentifier:[],Property:["key","value"],PropertyDefinition:["decorators","key","typeAnnotation","value","variance"],AccessorProperty:["decorators","key","typeAnnotation","value"],TSAbstractAccessorProperty:["decorators","key","typeAnnotation"],TSAbstractKeyword:[],TSAbstractMethodDefinition:["key","value"],TSAbstractPropertyDefinition:["decorators","key","typeAnnotation"],TSAsyncKeyword:[],TSClassImplements:["expression","typeArguments","typeParameters"],TSDeclareKeyword:[],TSEmptyBodyFunctionExpression:["id","typeParameters","params","returnType"],TSExportKeyword:[],TSInterfaceHeritage:["expression","typeArguments","typeParameters"],TSPrivateKeyword:[],TSProtectedKeyword:[],TSPublicKeyword:[],TSReadonlyKeyword:[],TSStaticKeyword:[],TSTemplateLiteralType:["quasis","types"],AsExpression:["expression","typeAnnotation"],BigIntLiteralTypeAnnotation:[],BigIntTypeAnnotation:[],ConditionalTypeAnnotation:["checkType","extendsType","trueType","falseType"],DeclareEnum:["id","body"],InferTypeAnnotation:["typeParameter"],KeyofTypeAnnotation:["argument"],ObjectTypeMappedTypeProperty:["keyTparam","propType","sourceType","variance"],QualifiedTypeofIdentifier:["qualification","id"],TupleTypeLabeledElement:["label","elementType","variance"],TupleTypeSpreadElement:["label","typeAnnotation"],TypeOperator:["typeAnnotation"],TypePredicate:["parameterName","typeAnnotation","asserts"],NGRoot:["node"],NGPipeExpression:["left","right","arguments"],NGChainedExpression:["expressions"],NGEmptyExpression:[],NGMicrosyntax:["body"],NGMicrosyntaxKey:[],NGMicrosyntaxExpression:["expression","alias"],NGMicrosyntaxKeyedExpression:["key","expression"],NGMicrosyntaxLet:["key","value"],NGMicrosyntaxAs:["key","alias"],JsExpressionRoot:["node"],JsonRoot:["node"],TSJSDocAllType:[],TSJSDocUnknownType:[],TSJSDocNullableType:["typeAnnotation"],TSJSDocNonNullableType:["typeAnnotation"],NeverTypeAnnotation:[],UndefinedTypeAnnotation:[],UnknownTypeAnnotation:[],AsConstExpression:["expression"],SatisfiesExpression:["expression","typeAnnotation"]},Poe=Foe(koe),Noe=Poe;function sC(t,r){if(!(t!==null&&typeof t=="object"))return t;if(Array.isArray(t)){for(let a=0;a<t.length;a++)t[a]=sC(t[a],r);return t}let n=Noe(t);for(let a=0;a<n.length;a++)t[n[a]]=sC(t[n[a]],r);return r(t)||t}var oC=sC;function Ioe(t,r){let{parser:n,text:a}=r;if(t.type==="File"&&t.program.interpreter){let{program:{interpreter:u},comments:_}=t;delete t.program.interpreter,_.unshift(u)}if(n==="babel"){let u=new Set;t=oC(t,_=>{var f;(f=_.leadingComments)!=null&&f.some(Coe)&&u.add(_o(_))}),t=oC(t,_=>{if(_.type==="ParenthesizedExpression"){let{expression:f}=_;if(f.type==="TypeCastExpression")return f.range=_.range,f;let v=_o(_);if(!u.has(v))return f.extra={...f.extra,parenthesized:!0},f}})}if(t=oC(t,u=>{switch(u.type){case"LogicalExpression":if(aN(u))return uC(u);break;case"VariableDeclaration":{let _=nN(!1,u.declarations,-1);_!=null&&_.init&&o(u,_);break}case"TSParenthesizedType":return u.typeAnnotation;case"TSTypeParameter":if(typeof u.name=="string"){let _=_o(u);u.name={type:"Identifier",name:u.name,range:[_,_+u.name.length]}}break;case"TopicReference":t.extra={...t.extra,__isUsingHackPipeline:!0};break;case"ExportAllDeclaration":{let{exported:_}=u;if(n==="meriyah"&&(_==null?void 0:_.type)==="Identifier"){let f=a.slice(_o(_),nc(_));(f.startsWith('"')||f.startsWith("'"))&&(u.exported={...u.exported,type:"Literal",value:u.exported.name,raw:f})}break}case"TSUnionType":case"TSIntersectionType":if(u.types.length===1)return u.types[0];break}}),rN(t.comments)){let u=nN(!1,t.comments,-1);for(let _=t.comments.length-2;_>=0;_--){let f=t.comments[_];nc(f)===_o(u)&&aC(f)&&aC(u)&&iN(f)&&iN(u)&&(t.comments.splice(_+1,1),f.value+="*//*"+u.value,f.range=[_o(f),nc(u)]),u=f}}return t.type==="Program"&&(t.range=[0,a.length]),t;function o(u,_){a[nc(_)]!==";"&&(u.range=[_o(u),nc(_)])}}function aN(t){return t.type==="LogicalExpression"&&t.right.type==="LogicalExpression"&&t.operator===t.right.operator}function uC(t){return aN(t)?uC({type:"LogicalExpression",operator:t.operator,left:uC({type:"LogicalExpression",operator:t.operator,left:t.left,right:t.right.left,range:[_o(t.left),nc(t.right.left)]}),right:t.right.right,range:[_o(t),nc(t)]}):t}var Boe=Ioe,lC={loc:!0,range:!0,comment:!0,tokens:!0,loggerFn:!1,project:[],suppressDeprecatedPropertyWarnings:!0};function Ooe(t){let{message:r,location:n}=t;if(!n)return t;let{start:a,end:o}=n;return ooe(r,{loc:{start:{line:a.line,column:a.column+1},end:{line:o.line,column:o.column+1}},cause:t})}var Loe=t=>/\.(?:js|mjs|cjs|jsx|ts|mts|cts|tsx)$/i.test(t);function Moe(t,r){let n=r==null?void 0:r.filepath;if(n&&Loe(n))return[{...lC,filePath:n}];let a=Roe(t);return[{...lC,jsx:a},{...lC,jsx:!a}]}function joe(t,r){let n=goe(t),a=Moe(t,r),o;try{o=loe(a.map(u=>()=>(0,aoe.parse)(n,u)))}catch({errors:[u]}){throw Ooe(u)}return Boe(o,{text:t})}function Roe(t){return new RegExp(["(?:^[^\"'`]*</)","|","(?:^[^/]{2}.*/>)"].join(""),"m").test(t)}var $oe=hoe(joe),Joe=eN,qoe=Object.freeze({__proto__:null,default:Joe,parsers:iC});const Uoe={js:"babel",jsx:"babel",mjs:"babel",cjs:"babel",ts:"typescript",tsx:"typescript",css:"css",html:"html",json:"json",json5:"json5",md:"markdown",markdown:"markdown"},zoe=[OU,vG,dZ,Vre,qoe,wse];onmessage=async({data:t})=>{const{fileExtension:r,fileText:n,fileId:a}=t,o=Uoe[r];if(!o){postMessage({fileId:a,error:`Unsupported file extension for Prettier: ${r}`});return}try{const u=await gv(n,{parser:o,plugins:zoe,proseWrap:"always",singleQuote:!0,printWidth:60});postMessage({fileId:a,fileTextPrettified:u})}catch(u){postMessage({fileId:a,error:u.toString()})}}})();
|
package/dist/index.html
CHANGED
|
@@ -24,8 +24,8 @@
|
|
|
24
24
|
href="https://unpkg.com/boxicons@2.0.7/css/boxicons.min.css"
|
|
25
25
|
rel="stylesheet"
|
|
26
26
|
/>
|
|
27
|
-
<script type="module" crossorigin src="/assets/index-
|
|
28
|
-
<link rel="stylesheet" crossorigin href="/assets/index-
|
|
27
|
+
<script type="module" crossorigin src="/assets/index-EvjpKQwB.js"></script>
|
|
28
|
+
<link rel="stylesheet" crossorigin href="/assets/index-vD_kE3p2.css">
|
|
29
29
|
</head>
|
|
30
30
|
<body>
|
|
31
31
|
<div id="root"></div>
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "vzcode",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.42.0",
|
|
4
4
|
"description": "Multiplayer code editor system",
|
|
5
5
|
"main": "src/index.ts",
|
|
6
6
|
"type": "module",
|
|
@@ -36,8 +36,14 @@
|
|
|
36
36
|
"Visualization"
|
|
37
37
|
],
|
|
38
38
|
"contributors": [
|
|
39
|
-
|
|
40
|
-
|
|
39
|
+
{
|
|
40
|
+
"name": "Curran Kelleher",
|
|
41
|
+
"url": "https://github.com/curran"
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
"name": "Anooj Pai",
|
|
45
|
+
"url": "https://github.com/Anooj-Pai"
|
|
46
|
+
}
|
|
41
47
|
],
|
|
42
48
|
"license": "MIT",
|
|
43
49
|
"bugs": {
|
|
@@ -51,7 +57,7 @@
|
|
|
51
57
|
"@codemirror/lang-javascript": "^6.2.1",
|
|
52
58
|
"@codemirror/lang-json": "^6.0.1",
|
|
53
59
|
"@codemirror/lang-markdown": "^6.2.3",
|
|
54
|
-
"@codemirror/state": "^6.3.
|
|
60
|
+
"@codemirror/state": "^6.3.3",
|
|
55
61
|
"@codemirror/theme-one-dark": "^6.1.2",
|
|
56
62
|
"@codemirror/view": "^6.22.1",
|
|
57
63
|
"@lezer/highlight": "^1.2.0",
|
|
@@ -85,7 +91,7 @@
|
|
|
85
91
|
"react": "^18.2.0",
|
|
86
92
|
"react-bootstrap": "^2.9.1",
|
|
87
93
|
"react-dom": "^18.2.0",
|
|
88
|
-
"sharedb": "^4.1.
|
|
94
|
+
"sharedb": "^4.1.2",
|
|
89
95
|
"sharedb-client-browser": "^4.4.0",
|
|
90
96
|
"vizhub-ui": "^3.10.0",
|
|
91
97
|
"ws": "^8.14.2"
|
|
@@ -96,8 +102,8 @@
|
|
|
96
102
|
"@vitejs/plugin-react": "^4.2.1",
|
|
97
103
|
"prettier": "^3.1.0",
|
|
98
104
|
"sass": "^1.69.5",
|
|
99
|
-
"typescript": "^5.3.
|
|
100
|
-
"vite": "^5.0.
|
|
105
|
+
"typescript": "^5.3.3",
|
|
106
|
+
"vite": "^5.0.6",
|
|
101
107
|
"vitest": "^1.0.1"
|
|
102
108
|
}
|
|
103
109
|
}
|
|
@@ -47,44 +47,58 @@ export const json1PresenceDisplay = ({
|
|
|
47
47
|
}
|
|
48
48
|
// Update decorations to reflect new presence state.
|
|
49
49
|
// TODO consider mutating this rather than recomputing it on each change.
|
|
50
|
+
|
|
51
|
+
const presenceDecorations = [];
|
|
52
|
+
|
|
53
|
+
// Object.keys(presenceState).map((id) => {
|
|
54
|
+
for (const id of Object.keys(presenceState)) {
|
|
55
|
+
const presence = presenceState[id];
|
|
56
|
+
const { start, end } = presence;
|
|
57
|
+
const from = start[start.length - 1];
|
|
58
|
+
const to = end[end.length - 1];
|
|
59
|
+
const userColor = new ColorHash().rgb(id);
|
|
60
|
+
const { username } = presence;
|
|
61
|
+
|
|
62
|
+
presenceDecorations.push({
|
|
63
|
+
from,
|
|
64
|
+
to: from,
|
|
65
|
+
value: Decoration.widget({
|
|
66
|
+
side: -1,
|
|
67
|
+
block: false,
|
|
68
|
+
widget: new PresenceWidget(
|
|
69
|
+
// TODO see if we can figure out why
|
|
70
|
+
// updateDOM was not being called when passing
|
|
71
|
+
// the presence id as the id
|
|
72
|
+
// id,
|
|
73
|
+
'' + Math.random(),
|
|
74
|
+
userColor,
|
|
75
|
+
username,
|
|
76
|
+
),
|
|
77
|
+
}),
|
|
78
|
+
});
|
|
79
|
+
|
|
80
|
+
// This is `true` when the presence is a cursor,
|
|
81
|
+
// with no selection.
|
|
82
|
+
if (from !== to) {
|
|
83
|
+
// This is the case when the presence is a selection.
|
|
84
|
+
presenceDecorations.push({
|
|
85
|
+
from,
|
|
86
|
+
to,
|
|
87
|
+
value: Decoration.mark({
|
|
88
|
+
class: 'cm-json1-presence',
|
|
89
|
+
attributes: {
|
|
90
|
+
style: `
|
|
91
|
+
background-color: rgba(${userColor}, 0.75);
|
|
92
|
+
mix-blend-mode: luminosity;
|
|
93
|
+
`,
|
|
94
|
+
},
|
|
95
|
+
}),
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
|
|
50
100
|
this.decorations = Decoration.set(
|
|
51
|
-
|
|
52
|
-
const presence = presenceState[id];
|
|
53
|
-
const { start, end } = presence;
|
|
54
|
-
const from = start[start.length - 1];
|
|
55
|
-
const to = end[end.length - 1];
|
|
56
|
-
const userColor = new ColorHash().rgb(id);
|
|
57
|
-
const { username } = presence;
|
|
58
|
-
if (from === to) {
|
|
59
|
-
return {
|
|
60
|
-
from,
|
|
61
|
-
to,
|
|
62
|
-
value: Decoration.widget({
|
|
63
|
-
side: -1,
|
|
64
|
-
block: false,
|
|
65
|
-
widget: new PresenceWidget(
|
|
66
|
-
id,
|
|
67
|
-
userColor,
|
|
68
|
-
username,
|
|
69
|
-
),
|
|
70
|
-
}),
|
|
71
|
-
};
|
|
72
|
-
} else {
|
|
73
|
-
return {
|
|
74
|
-
from,
|
|
75
|
-
to,
|
|
76
|
-
value: Decoration.mark({
|
|
77
|
-
class: 'cm-json1-presence',
|
|
78
|
-
attributes: {
|
|
79
|
-
style: `
|
|
80
|
-
background-color: rgba(${userColor}, 0.75);
|
|
81
|
-
mix-blend-mode: luminosity;
|
|
82
|
-
`,
|
|
83
|
-
},
|
|
84
|
-
}),
|
|
85
|
-
};
|
|
86
|
-
}
|
|
87
|
-
}),
|
|
101
|
+
presenceDecorations,
|
|
88
102
|
// Without this argument, we get the following error:
|
|
89
103
|
// Uncaught Error: Ranges must be added sorted by `from` position and `startSide`
|
|
90
104
|
true,
|
|
@@ -131,6 +145,7 @@ class PresenceWidget extends WidgetType {
|
|
|
131
145
|
id: string;
|
|
132
146
|
color: string;
|
|
133
147
|
username: Username;
|
|
148
|
+
timeout: number;
|
|
134
149
|
constructor(
|
|
135
150
|
id: string,
|
|
136
151
|
color: string,
|
|
@@ -144,9 +159,11 @@ class PresenceWidget extends WidgetType {
|
|
|
144
159
|
|
|
145
160
|
eq(other: PresenceWidget) {
|
|
146
161
|
return other.id === this.id;
|
|
162
|
+
// return false;
|
|
147
163
|
}
|
|
148
164
|
|
|
149
165
|
toDOM() {
|
|
166
|
+
// console.log('inside toDOM');
|
|
150
167
|
const span = document.createElement('span');
|
|
151
168
|
span.setAttribute('aria-hidden', 'true');
|
|
152
169
|
span.className = 'cm-json1-presence';
|
|
@@ -165,24 +182,40 @@ class PresenceWidget extends WidgetType {
|
|
|
165
182
|
userDiv.className = 'remote-cursor-username';
|
|
166
183
|
userDiv.style.top = `-20px`;
|
|
167
184
|
userDiv.style.height = `20px`;
|
|
168
|
-
userDiv.style.width = `${this.username.length *
|
|
185
|
+
userDiv.style.width = `${this.username.length * 12}px`;
|
|
169
186
|
userDiv.style.backgroundColor = `rgba(${this.color})`;
|
|
170
187
|
userDiv.style.color = `black`;
|
|
171
|
-
userDiv.style.textAlign = `center`;
|
|
188
|
+
// userDiv.style.textAlign = `center`;
|
|
172
189
|
userDiv.appendChild(
|
|
173
190
|
document.createTextNode(this.username),
|
|
174
191
|
);
|
|
175
192
|
span.appendChild(userDiv);
|
|
176
193
|
|
|
177
194
|
// after 2 seconds of inactivity, username is made less visible
|
|
178
|
-
setTimeout(() => {
|
|
179
|
-
userDiv.style.backgroundColor = `rgba(${this.color}, 0.2)`;
|
|
180
|
-
userDiv.style.color = 'rgba(0,0,0,0.2)';
|
|
195
|
+
this.timeout = window.setTimeout(() => {
|
|
196
|
+
// userDiv.style.backgroundColor = `rgba(${this.color}, 0.2)`;
|
|
197
|
+
// userDiv.style.color = 'rgba(0,0,0,0.2)';
|
|
198
|
+
userDiv.style.opacity = '0.3';
|
|
181
199
|
}, 2000);
|
|
182
200
|
|
|
183
201
|
return span;
|
|
184
202
|
}
|
|
185
203
|
|
|
204
|
+
// TODO try to use this instead of toDOM
|
|
205
|
+
// updateDOM(dom: HTMLElement, view: EditorView) {
|
|
206
|
+
// console.log('inside updateDOM');
|
|
207
|
+
// dom.style.opacity = '1';
|
|
208
|
+
// window.clearTimeout(this.timeout);
|
|
209
|
+
|
|
210
|
+
// // after 2 seconds of inactivity, username is made less visible
|
|
211
|
+
// this.timeout = window.setTimeout(() => {
|
|
212
|
+
// // userDiv.style.backgroundColor = `rgba(${this.color}, 0.2)`;
|
|
213
|
+
// // userDiv.style.color = 'rgba(0,0,0,0.2)';
|
|
214
|
+
// dom.style.opacity = '0.3';
|
|
215
|
+
// }, 2000);
|
|
216
|
+
|
|
217
|
+
// return false;
|
|
218
|
+
// }
|
|
186
219
|
ignoreEvent() {
|
|
187
220
|
return false;
|
|
188
221
|
}
|
|
@@ -12,4 +12,12 @@
|
|
|
12
12
|
font-family: var(--vzcode-font-family);
|
|
13
13
|
font-size: var(--vzcode-font-size);
|
|
14
14
|
}
|
|
15
|
+
|
|
16
|
+
.remote-cursor-username {
|
|
17
|
+
transition: opacity 1s ease-in-out;
|
|
18
|
+
display: flex;
|
|
19
|
+
align-items: center;
|
|
20
|
+
justify-content: center;
|
|
21
|
+
border-radius: 4px;
|
|
22
|
+
}
|
|
15
23
|
}
|
|
@@ -96,7 +96,6 @@ export const typeScriptCompletions = ({
|
|
|
96
96
|
completion.name.startsWith(lastWord),
|
|
97
97
|
);
|
|
98
98
|
}
|
|
99
|
-
|
|
100
99
|
return {
|
|
101
100
|
from: completionContext.pos,
|
|
102
101
|
// @ts-ignore
|
|
@@ -104,12 +103,22 @@ export const typeScriptCompletions = ({
|
|
|
104
103
|
label: completion.name,
|
|
105
104
|
// Applies autocompletions to be seen in the code Editor
|
|
106
105
|
apply: (view) => {
|
|
106
|
+
//Calculation to get the new cursor position after the autocompletion
|
|
107
|
+
const newPosition =
|
|
108
|
+
completionContext.pos +
|
|
109
|
+
completion.name.length -
|
|
110
|
+
lastWord.length;
|
|
107
111
|
view.dispatch({
|
|
108
112
|
changes: {
|
|
109
113
|
from,
|
|
110
114
|
to: completionContext.pos,
|
|
111
115
|
insert: completion.name,
|
|
112
116
|
},
|
|
117
|
+
// Move the cursor to the end of the autocompletion
|
|
118
|
+
selection: {
|
|
119
|
+
anchor: newPosition,
|
|
120
|
+
head: newPosition,
|
|
121
|
+
},
|
|
113
122
|
});
|
|
114
123
|
},
|
|
115
124
|
})),
|
|
@@ -30,6 +30,12 @@ import {
|
|
|
30
30
|
PANIC,
|
|
31
31
|
} from './colors';
|
|
32
32
|
|
|
33
|
+
// Use semi-bold weight for keywords and other important things
|
|
34
|
+
// const boldWeight = 'bold';
|
|
35
|
+
|
|
36
|
+
// This looks way better as we are pulling in the semi-bold font from Google Fonts
|
|
37
|
+
const boldWeight = '500';
|
|
38
|
+
|
|
33
39
|
const defaultSettingsVizhubTheme: CreateThemeOptions['settings'] =
|
|
34
40
|
{
|
|
35
41
|
background: backgroundColor,
|
|
@@ -97,7 +103,7 @@ function vizhubThemeInit(
|
|
|
97
103
|
},
|
|
98
104
|
{
|
|
99
105
|
tag: t.heading,
|
|
100
|
-
fontWeight:
|
|
106
|
+
fontWeight: boldWeight,
|
|
101
107
|
color: SKY,
|
|
102
108
|
},
|
|
103
109
|
{
|
|
@@ -145,7 +151,7 @@ function vizhubThemeInit(
|
|
|
145
151
|
color: AQUA,
|
|
146
152
|
},
|
|
147
153
|
{ tag: [t.angleBracket], color: AQUA },
|
|
148
|
-
{ tag: t.strong, fontWeight:
|
|
154
|
+
{ tag: t.strong, fontWeight: boldWeight },
|
|
149
155
|
{ tag: t.emphasis, fontStyle: 'italic' },
|
|
150
156
|
{
|
|
151
157
|
tag: t.strikethrough,
|
|
@@ -81,6 +81,13 @@ onmessage = async ({
|
|
|
81
81
|
const fileTextPrettified = await format(fileText, {
|
|
82
82
|
parser,
|
|
83
83
|
plugins,
|
|
84
|
+
|
|
85
|
+
// This helps with Markdown files
|
|
86
|
+
proseWrap: 'always',
|
|
87
|
+
|
|
88
|
+
// Opinionated code style for JavaScript
|
|
89
|
+
singleQuote: true,
|
|
90
|
+
printWidth: 60,
|
|
84
91
|
});
|
|
85
92
|
|
|
86
93
|
postMessage({
|