Here is the new feature
Here is Variant A
{ "MyTestName" | getAbbyVariant | async }
``` Optionally, you can pass in a lookup object, to map your variants to a custom type: ```html{ "MyTestName" | getAbbyVariant: { A: 123, B: 456, C: 789 } | async }
``` #### getRemoteConfig You can use the `getRemoteConfig` Pipe in your template to get the value for a Remote Configuration variable. ```html ``` ================================================ FILE: apps/docs/pages/integrations/express.mdx ================================================ import { Tab, Tabs, Callout } from "nextra-theme-docs"; # Express Our Express package allows you to use Abby within all server-side applications. If you're using Node < 18 you will need to also install any fetch polyfill. ## Installation To get started make sure to install the packages using your favorite package manager.Here is the new feature
}This is our super boring page
{ variant } World!
``` ## useFeatureFlag The `useFeatureFlag` function returns a store providing a boolean value that indicates if the flag is active or not. ```svelte {#if $newFeature} my super secret feature {/if} ``` ## useRemoteConfig The `useRemoteConfig` function returns a store providing a custom value as specified in your `abby.config.ts`. The return type will automatically be inferred from your config. ```svelte ``` ================================================ FILE: apps/docs/pages/nextjs.mdx ================================================ import { Tab, Tabs } from "nextra-theme-docs"; # Using Abby with Next.js Abby was built to be the best solution for Feature Flags, A/B Testing and Remote Configuration variables in Next.js. It deeply integrates with Next.js and provides a seamless developer experience. ## Installation Install the `@tryabby/next` package using your favorite package manager:Darkmode is enabled
} > ); } ``` You can now go to the Abby dashboard and enable the `useDarkmode` flag for your project. You will see the text "Darkmode is enabled" on your homepage. #### Remote Configuration ```tsx // index.tsx import { useRemoteConfig } from "lib/abby"; export function HomePage() { const customButtonText = useRemoteConfig("customButtonText"); return ( <>angularRemoteConfig: {{ "angularRemoteConfig" | getAbbyRemoteConfig | async }}
``` ## Devtool Component The DevtoolsComponent is an Angular component provided by @tryabby/angular package that renders the Abby Devtools in your application. The component is used to wrap the HTML code that renders the Abby Devtools. The DevtoolsComponent won't work with Server Side Rendering using Angular Universal. ### Example ```html`?)[\\p{L}_][\\p{L}_\\p{N}\\p{M}]*(\\k)", "beginCaptures": { "0": { "name": "storage.modifier.attribute.swift" }, "1": { "name": "punctuation.definition.attribute.swift" }, "2": { "name": "punctuation.definition.identifier.swift" }, "3": { "name": "punctuation.definition.identifier.swift" } }, "comment": "any other attribute", "end": "(?!\\G\\()", "name": "meta.attribute.swift", "patterns": [ { "begin": "\\(", "beginCaptures": { "0": { "name": "punctuation.definition.arguments.begin.swift" } }, "end": "\\)", "endCaptures": { "0": { "name": "punctuation.definition.arguments.end.swift" } }, "name": "meta.arguments.attribute.swift", "patterns": [ { "include": "#expressions" } ] } ] } ] }, "builtin-functions": { "patterns": [ { "comment": "Member functions in the standard library in Swift 3 which may be used with trailing closures and no parentheses", "match": "(?<=\\.)(?:s(?:ort(?:ed)?|plit)|contains|index|partition|f(?:i(?:lter|rst)|orEach|latMap)|with(?:MutableCharacters|CString|U(?:nsafe(?:Mutable(?:BufferPointer|Pointer(?:s|To(?:Header|Elements)))|BufferPointer)|TF8Buffer))|m(?:in|a(?:p|x)))(?=\\s*[({])\\b", "name": "support.function.swift" }, { "comment": "Member functions in the standard library in Swift 3", "match": "(?<=\\.)(?:s(?:ymmetricDifference|t(?:oreBytes|arts|ride)|ortInPlace|u(?:ccessor|ffix|btract(?:ing|InPlace|WithOverflow)?)|quareRoot|amePosition)|h(?:oldsUnique(?:Reference|OrPinnedReference)|as(?:Suffix|Prefix))|ne(?:gate(?:d)?|xt)|c(?:o(?:untByEnumerating|py(?:Bytes)?)|lamp(?:ed)?|reate)|t(?:o(?:IntMax|Opaque|UIntMax)|ake(?:RetainedValue|UnretainedValue)|r(?:uncatingRemainder|a(?:nscodedLength|ilSurrogate)))|i(?:s(?:MutableAndUniquelyReferenced(?:OrPinned)?|S(?:trictSu(?:perset(?:Of)?|bset(?:Of)?)|u(?:perset(?:Of)?|bset(?:Of)?))|Continuation|T(?:otallyOrdered|railSurrogate)|Disjoint(?:With)?|Unique(?:Reference|lyReferenced(?:OrPinned)?)|Equal|Le(?:ss(?:ThanOrEqualTo)?|adSurrogate))|n(?:sert(?:ContentsOf)?|tersect(?:ion|InPlace)?|itialize(?:Memory|From)?|dex(?:Of|ForKey)))|o(?:verlaps|bjectAt)|d(?:i(?:stance(?:To)?|vide(?:d|WithOverflow)?)|e(?:s(?:cendant|troy)|code(?:CString)?|initialize|alloc(?:ate(?:Capacity)?)?)|rop(?:First|Last))|u(?:n(?:ion(?:InPlace)?|derestimateCount|wrappedOrError)|p(?:date(?:Value)?|percased))|join(?:ed|WithSeparator)|p(?:op(?:First|Last)|ass(?:Retained|Unretained)|re(?:decessor|fix))|e(?:scape(?:d)?|n(?:code|umerate(?:d)?)|lementsEqual|xclusiveOr(?:InPlace)?)|f(?:orm(?:Remainder|S(?:ymmetricDifference|quareRoot)|TruncatingRemainder|In(?:tersection|dex)|Union)|latten|rom(?:CString(?:RepairingIllFormedUTF8)?|Opaque))|w(?:i(?:thMemoryRebound|dth)|rite(?:To)?)|l(?:o(?:wercased|ad)|e(?:adSurrogate|xicographical(?:Compare|lyPrecedes)))|a(?:ss(?:ign(?:BackwardFrom|From)?|umingMemoryBound)|d(?:d(?:ing(?:Product)?|Product|WithOverflow)?|vanced(?:By)?)|utorelease|ppend(?:ContentsOf)?|lloc(?:ate)?|bs)|r(?:ound(?:ed)?|e(?:serveCapacity|tain|duce|place(?:Range|Subrange)?|verse(?:d)?|quest(?:NativeBuffer|UniqueMutableBackingBuffer)|lease|m(?:ove(?:Range|Subrange|Value(?:ForKey)?|First|Last|A(?:tIndex|ll))?|ainder(?:WithOverflow)?)))|ge(?:nerate|t(?:Objects|Element))|m(?:in(?:imum(?:Magnitude)?|Element)|ove(?:Initialize(?:Memory|BackwardFrom|From)?|Assign(?:From)?)?|ultipl(?:y(?:WithOverflow)?|ied)|easure|a(?:ke(?:Iterator|Description)|x(?:imum(?:Magnitude)?|Element)))|bindMemory)(?=\\s*\\()", "name": "support.function.swift" }, { "comment": "Member functions in the standard library in Swift 2 only", "match": "(?<=\\.)(?:s(?:uperclassMirror|amePositionIn|tartsWith)|nextObject|c(?:haracterAtIndex|o(?:untByEnumeratingWithState|pyWithZone)|ustom(?:Mirror|PlaygroundQuickLook))|is(?:EmptyInput|ASCII)|object(?:Enumerator|ForKey|AtIndex)|join|put|keyEnumerator|withUnsafeMutablePointerToValue|length|getMirror|m(?:oveInitializeAssignFrom|ember))(?=\\s*\\()", "name": "support.function.swift" } ] }, "builtin-global-functions": { "patterns": [ { "begin": "\\b(type)(\\()\\s*(of)(:)", "beginCaptures": { "1": { "name": "support.function.dynamic-type.swift" }, "2": { "name": "punctuation.definition.arguments.begin.swift" }, "3": { "name": "support.variable.parameter.swift" }, "4": { "name": "punctuation.separator.argument-label.begin.swift" } }, "end": "\\)", "endCaptures": { "0": { "name": "punctuation.definition.arguments.end.swift" } }, "patterns": [ { "include": "#expressions" } ] }, { "comment": "Global functions available in Swift 3 which may be used with trailing closures and no parentheses", "match": "\\b(?:anyGenerator|autoreleasepool)(?=\\s*[({])\\b", "name": "support.function.swift" }, { "comment": "Global functions available in Swift 3", "match": "\\b(?:s(?:tride(?:of(?:Value)?)?|izeof(?:Value)?|equence|wap)|numericCast|transcode|is(?:UniquelyReferenced(?:NonObjC)?|KnownUniquelyReferenced)|zip|d(?:ump|ebugPrint)|unsafe(?:BitCast|Downcast|Unwrap|Address(?:Of)?)|pr(?:int|econdition(?:Failure)?)|fatalError|with(?:Unsafe(?:MutablePointer|Pointer)|ExtendedLifetime|VaList)|a(?:ssert(?:ionFailure)?|lignof(?:Value)?|bs)|re(?:peatElement|adLine)|getVaList|m(?:in|ax))(?=\\s*\\()", "name": "support.function.swift" }, { "comment": "Global functions available in Swift 2 only", "match": "\\b(?:s(?:ort|uffix|pli(?:ce|t))|insert|overlaps|d(?:istance|rop(?:First|Last))|join|prefix|extend|withUnsafe(?:MutablePointers|Pointers)|lazy|advance|re(?:flect|move(?:Range|Last|A(?:tIndex|ll))))(?=\\s*\\()", "name": "support.function.swift" } ] }, "builtin-properties": { "patterns": [ { "comment": "The simpler (?<=\\bProcess\\.|\\bCommandLine\\.) breaks VS Code / Atom, see https://github.com/textmate/swift.tmbundle/issues/29", "match": "(?<=^Process\\.|\\WProcess\\.|^CommandLine\\.|\\WCommandLine\\.)(arguments|argc|unsafeArgv)", "name": "support.variable.swift" }, { "comment": "Properties in the standard library in Swift 3", "match": "(?<=\\.)(?:s(?:t(?:artIndex|ri(?:ngValue|de))|i(?:ze|gn(?:BitIndex|ificand(?:Bit(?:Count|Pattern)|Width)?|alingNaN)?)|u(?:perclassMirror|mmary|bscriptBaseAddress))|h(?:eader|as(?:hValue|PointerRepresentation))|n(?:ulTerminatedUTF8|ext(?:Down|Up)|a(?:n|tiveOwner))|c(?:haracters|ount(?:TrailingZeros)?|ustom(?:Mirror|PlaygroundQuickLook)|apacity)|i(?:s(?:S(?:ign(?:Minus|aling(?:NaN)?)|ubnormal)|N(?:ormal|aN)|Canonical|Infinite|Zero|Empty|Finite|ASCII)|n(?:dices|finity)|dentity)|owner|de(?:scription|bugDescription)|u(?:n(?:safelyUnwrapped|icodeScalar(?:s)?|derestimatedCount)|tf(?:16|8(?:Start|C(?:String|odeUnitCount))?)|intValue|ppercaseString|lp(?:OfOne)?)|p(?:i|ointee)|e(?:ndIndex|lements|xponent(?:Bit(?:Count|Pattern))?)|value(?:s)?|keys|quietNaN|f(?:irst(?:ElementAddress(?:IfContiguous)?)?|loatingPointClass)|l(?:ittleEndian|owercaseString|eastNo(?:nzeroMagnitude|rmalMagnitude)|a(?:st|zy))|a(?:l(?:ignment|l(?:ocatedElementCount|Zeros))|rray(?:PropertyIsNativeTypeChecked)?)|ra(?:dix|wValue)|greatestFiniteMagnitude|m(?:in|emory|ax)|b(?:yteS(?:ize|wapped)|i(?:nade|tPattern|gEndian)|uffer|ase(?:Address)?))\\b", "name": "support.variable.swift" }, { "comment": "Properties in the standard library in Swift 2 only", "match": "(?<=\\.)(?:boolValue|disposition|end|objectIdentifier|quickLookObject|start|valueType)\\b", "name": "support.variable.swift" }, { "comment": "Enum cases in the standard library - note that there is some overlap between these and the properties", "match": "(?<=\\.)(?:s(?:calarValue|i(?:ze|gnalingNaN)|o(?:und|me)|uppressed|prite|et)|n(?:one|egative(?:Subnormal|Normal|Infinity|Zero))|c(?:ol(?:or|lection)|ustomized)|t(?:o(?:NearestOr(?:Even|AwayFromZero)|wardZero)|uple|ext)|i(?:nt|mage)|optional|d(?:ictionary|o(?:uble|wn))|u(?:Int|p|rl)|p(?:o(?:sitive(?:Subnormal|Normal|Infinity|Zero)|int)|lus)|e(?:rror|mptyInput)|view|quietNaN|float|a(?:ttributedString|wayFromZero)|r(?:ectangle|ange)|generated|minus|b(?:ool|ezierPath))\\b", "name": "support.variable.swift" } ] }, "builtin-types": { "comment": "Types provided in the standard library", "patterns": [ { "include": "#builtin-class-type" }, { "include": "#builtin-enum-type" }, { "include": "#builtin-protocol-type" }, { "include": "#builtin-struct-type" }, { "include": "#builtin-typealias" }, { "match": "\\bAny\\b", "name": "support.type.any.swift" } ], "repository": { "builtin-class-type": { "comment": "Builtin class types", "match": "\\b(Managed(Buffer|ProtoBuffer)|NonObjectiveCBase|AnyGenerator)\\b", "name": "support.class.swift" }, "builtin-enum-type": { "patterns": [ { "comment": "CommandLine is an enum, but it acts like a constant", "match": "\\b(?:CommandLine|Process(?=\\.))\\b", "name": "support.constant.swift" }, { "comment": "The return type of a function that never returns", "match": "\\bNever\\b", "name": "support.constant.never.swift" }, { "comment": "Enum types in the standard library in Swift 3", "match": "\\b(?:ImplicitlyUnwrappedOptional|Representation|MemoryLayout|FloatingPointClassification|SetIndexRepresentation|SetIteratorRepresentation|FloatingPointRoundingRule|UnicodeDecodingResult|Optional|DictionaryIndexRepresentation|AncestorRepresentation|DisplayStyle|PlaygroundQuickLook|Never|FloatingPointSign|Bit|DictionaryIteratorRepresentation)\\b", "name": "support.type.swift" }, { "comment": "Enum types in the standard library in Swift 2 only", "match": "\\b(?:MirrorDisposition|QuickLookObject)\\b", "name": "support.type.swift" } ] }, "builtin-protocol-type": { "patterns": [ { "comment": "Protocols in the standard library in Swift 3", "match": "\\b(?:Ra(?:n(?:domAccess(?:Collection|Indexable)|geReplaceable(?:Collection|Indexable))|wRepresentable)|M(?:irrorPath|utable(?:Collection|Indexable))|Bi(?:naryFloatingPoint|twiseOperations|directional(?:Collection|Indexable))|S(?:tr(?:ideable|eamable)|igned(?:Number|Integer)|e(?:tAlgebra|quence))|Hashable|C(?:o(?:llection|mparable)|ustom(?:Reflectable|StringConvertible|DebugStringConvertible|PlaygroundQuickLookable|LeafReflectable)|VarArg)|TextOutputStream|I(?:n(?:teger(?:Arithmetic)?|dexable(?:Base)?)|teratorProtocol)|OptionSet|Un(?:signedInteger|icodeCodec)|E(?:quatable|rror|xpressibleBy(?:BooleanLiteral|String(?:Interpolation|Literal)|NilLiteral|IntegerLiteral|DictionaryLiteral|UnicodeScalarLiteral|ExtendedGraphemeClusterLiteral|FloatLiteral|ArrayLiteral))|FloatingPoint|L(?:osslessStringConvertible|azy(?:SequenceProtocol|CollectionProtocol))|A(?:nyObject|bsoluteValuable))\\b", "name": "support.type.swift" }, { "comment": "Protocols in the standard library in Swift 2 only", "match": "\\b(?:Ran(?:domAccessIndexType|geReplaceableCollectionType)|GeneratorType|M(?:irror(?:Type|PathType)|utable(?:Sliceable|CollectionType))|B(?:i(?:twiseOperationsType|directionalIndexType)|oolean(?:Type|LiteralConvertible))|S(?:tring(?:InterpolationConvertible|LiteralConvertible)|i(?:nkType|gned(?:NumberType|IntegerType))|e(?:tAlgebraType|quenceType)|liceable)|NilLiteralConvertible|C(?:ollectionType|VarArgType)|Inte(?:rvalType|ger(?:Type|LiteralConvertible|ArithmeticType))|O(?:utputStreamType|ptionSetType)|DictionaryLiteralConvertible|Un(?:signedIntegerType|icode(?:ScalarLiteralConvertible|CodecType))|E(?:rrorType|xten(?:sibleCollectionType|dedGraphemeClusterLiteralConvertible))|F(?:orwardIndexType|loat(?:ingPointType|LiteralConvertible))|A(?:nyCollectionType|rrayLiteralConvertible))\\b", "name": "support.type.swift" } ] }, "builtin-struct-type": { "patterns": [ { "comment": "Structs in the standard library in Swift 3", "match": "\\b(?:R(?:e(?:peat(?:ed)?|versed(?:RandomAccess(?:Collection|Index)|Collection|Index))|an(?:domAccessSlice|ge(?:Replaceable(?:RandomAccessSlice|BidirectionalSlice|Slice)|Generator)?))|Generator(?:Sequence|OfOne)|M(?:irror|utable(?:Ran(?:domAccessSlice|geReplaceable(?:RandomAccessSlice|BidirectionalSlice|Slice))|BidirectionalSlice|Slice)|anagedBufferPointer)|B(?:idirectionalSlice|ool)|S(?:t(?:aticString|ri(?:ng|deT(?:hrough(?:Generator|Iterator)?|o(?:Generator|Iterator)?)))|et(?:I(?:ndex|terator))?|lice)|HalfOpenInterval|C(?:haracter(?:View)?|o(?:ntiguousArray|untable(?:Range|ClosedRange)|llectionOfOne)|OpaquePointer|losed(?:Range(?:I(?:ndex|terator))?|Interval)|VaListPointer)|I(?:n(?:t(?:16|8|32|64)?|d(?:ices|ex(?:ing(?:Generator|Iterator))?))|terator(?:Sequence|OverOne)?)|Zip2(?:Sequence|Iterator)|O(?:paquePointer|bjectIdentifier)|D(?:ictionary(?:I(?:ndex|terator)|Literal)?|ouble|efault(?:RandomAccessIndices|BidirectionalIndices|Indices))|U(?:n(?:safe(?:RawPointer|Mutable(?:RawPointer|BufferPointer|Pointer)|BufferPointer(?:Generator|Iterator)?|Pointer)|icodeScalar(?:View)?|foldSequence|managed)|TF(?:16(?:View)?|8(?:View)?|32)|Int(?:16|8|32|64)?)|Join(?:Generator|ed(?:Sequence|Iterator))|PermutationGenerator|E(?:numerate(?:Generator|Sequence|d(?:Sequence|Iterator))|mpty(?:Generator|Collection|Iterator))|Fl(?:oat(?:80)?|atten(?:Generator|BidirectionalCollection(?:Index)?|Sequence|Collection(?:Index)?|Iterator))|L(?:egacyChildren|azy(?:RandomAccessCollection|Map(?:RandomAccessCollection|Generator|BidirectionalCollection|Sequence|Collection|Iterator)|BidirectionalCollection|Sequence|Collection|Filter(?:Generator|BidirectionalCollection|Sequence|Collection|I(?:ndex|terator))))|A(?:ny(?:RandomAccessCollection|Generator|BidirectionalCollection|Sequence|Hashable|Collection|I(?:ndex|terator))|utoreleasingUnsafeMutablePointer|rray(?:Slice)?))\\b", "name": "support.type.swift" }, { "comment": "Structs in the standard library in Swift 2 only", "match": "\\b(?:R(?:everse(?:RandomAccess(?:Collection|Index)|Collection|Index)|awByte)|Map(?:Generator|Sequence|Collection)|S(?:inkOf|etGenerator)|Zip2Generator|DictionaryGenerator|Filter(?:Generator|Sequence|Collection(?:Index)?)|LazyForwardCollection|Any(?:RandomAccessIndex|BidirectionalIndex|Forward(?:Collection|Index)))\\b", "name": "support.type.swift" } ] }, "builtin-typealias": { "patterns": [ { "comment": "Typealiases in the standard library in Swift 3", "match": "\\b(?:Raw(?:Significand|Exponent|Value)|B(?:ooleanLiteralType|uffer|ase)|S(?:t(?:orage|r(?:i(?:ngLiteralType|de)|eam(?:1|2)))|ubSequence)|NativeBuffer|C(?:hild(?:ren)?|Bool|S(?:hort|ignedChar)|odeUnit|Char(?:16|32)?|Int|Double|Unsigned(?:Short|Char|Int|Long(?:Long)?)|Float|WideChar|Long(?:Long)?)|I(?:n(?:t(?:Max|egerLiteralType)|d(?:ices|ex(?:Distance)?))|terator)|Distance|U(?:n(?:icodeScalar(?:Type|Index|View|LiteralType)|foldFirstSequence)|TF(?:16(?:Index|View)|8Index)|IntMax)|E(?:lement(?:s)?|x(?:tendedGraphemeCluster(?:Type|LiteralType)|ponent))|V(?:oid|alue)|Key|Float(?:32|LiteralType|64)|AnyClass)\\b", "name": "support.type.swift" }, { "comment": "Typealiases in the standard library in Swift 2 only", "match": "\\b(?:Generator|PlaygroundQuickLook|UWord|Word)\\b", "name": "support.type.swift" } ] } } }, "code-block": { "begin": "\\{", "beginCaptures": { "0": { "name": "punctuation.section.scope.begin.swift" } }, "end": "\\}", "endCaptures": { "0": { "name": "punctuation.section.scope.end.swift" } }, "patterns": [ { "include": "$self" } ] }, "comments": { "patterns": [ { "captures": { "1": { "name": "punctuation.definition.comment.swift" } }, "match": "\\A^(#!).*$\\n?", "name": "comment.line.number-sign.swift" }, { "begin": "/\\*\\*(?!/)", "beginCaptures": { "0": { "name": "punctuation.definition.comment.begin.swift" } }, "end": "\\*/", "endCaptures": { "0": { "name": "punctuation.definition.comment.end.swift" } }, "name": "comment.block.documentation.swift", "patterns": [ { "include": "#nested" } ] }, { "begin": "/\\*:", "beginCaptures": { "0": { "name": "punctuation.definition.comment.begin.swift" } }, "end": "\\*/", "endCaptures": { "0": { "name": "punctuation.definition.comment.end.swift" } }, "name": "comment.block.documentation.playground.swift", "patterns": [ { "include": "#nested" } ] }, { "begin": "/\\*", "beginCaptures": { "0": { "name": "punctuation.definition.comment.begin.swift" } }, "end": "\\*/", "endCaptures": { "0": { "name": "punctuation.definition.comment.end.swift" } }, "name": "comment.block.swift", "patterns": [ { "include": "#nested" } ] }, { "match": "\\*/", "name": "invalid.illegal.unexpected-end-of-block-comment.swift" }, { "begin": "(^[ \\t]+)?(?=//)", "beginCaptures": { "1": { "name": "punctuation.whitespace.comment.leading.swift" } }, "end": "(?!\\G)", "patterns": [ { "begin": "///", "beginCaptures": { "0": { "name": "punctuation.definition.comment.swift" } }, "end": "^", "name": "comment.line.triple-slash.documentation.swift" }, { "begin": "//:", "beginCaptures": { "0": { "name": "punctuation.definition.comment.swift" } }, "end": "^", "name": "comment.line.double-slash.documentation.swift" }, { "begin": "//", "beginCaptures": { "0": { "name": "punctuation.definition.comment.swift" } }, "end": "^", "name": "comment.line.double-slash.swift" } ] } ], "repository": { "nested": { "begin": "/\\*", "end": "\\*/", "patterns": [ { "include": "#nested" } ] } } }, "compiler-control": { "patterns": [ { "begin": "^\\s*(#)(if|elseif)\\s+(false)\\b.*?(?=$|//|/\\*)", "beginCaptures": { "0": { "name": "meta.preprocessor.conditional.swift" }, "1": { "name": "punctuation.definition.preprocessor.swift" }, "2": { "name": "keyword.control.preprocessor.conditional.swift" }, "3": { "name": "constant.language.boolean.swift" } }, "contentName": "comment.block.preprocessor.swift", "end": "(?=^\\s*(#(elseif|else|endif)\\b))" }, { "begin": "^\\s*(#)(if|elseif)\\s+", "captures": { "1": { "name": "punctuation.definition.preprocessor.swift" }, "2": { "name": "keyword.control.preprocessor.conditional.swift" } }, "end": "(?=\\s*(?://|/\\*))|$", "name": "meta.preprocessor.conditional.swift", "patterns": [ { "match": "(&&|\\|\\|)", "name": "keyword.operator.logical.swift" }, { "match": "\\b(true|false)\\b", "name": "constant.language.boolean.swift" }, { "captures": { "1": { "name": "keyword.other.condition.swift" }, "2": { "name": "punctuation.definition.parameters.begin.swift" }, "3": { "name": "support.constant.platform.architecture.swift" }, "4": { "name": "punctuation.definition.parameters.end.swift" } }, "match": "\\b(arch)\\s*(\\()\\s*(?:(arm|arm64|powerpc64|powerpc64le|i386|x86_64|s390x)|\\w+)\\s*(\\))" }, { "captures": { "1": { "name": "keyword.other.condition.swift" }, "2": { "name": "punctuation.definition.parameters.begin.swift" }, "3": { "name": "support.constant.platform.os.swift" }, "4": { "name": "punctuation.definition.parameters.end.swift" } }, "match": "\\b(os)\\s*(\\()\\s*(?:(macOS|OSX|iOS|tvOS|watchOS|Android|Linux|FreeBSD|Windows|PS4)|\\w+)\\s*(\\))" }, { "captures": { "1": { "name": "keyword.other.condition.swift" }, "2": { "name": "punctuation.definition.parameters.begin.swift" }, "3": { "name": "entity.name.type.module.swift" }, "4": { "name": "punctuation.definition.parameters.end.swift" } }, "match": "\\b(canImport)\\s*(\\()([\\p{L}_][\\p{L}_\\p{N}\\p{M}]*)(\\))" }, { "begin": "\\b(targetEnvironment)\\s*(\\()", "beginCaptures": { "1": { "name": "keyword.other.condition.swift" }, "2": { "name": "punctuation.definition.parameters.begin.swift" } }, "end": "(\\))|$", "endCaptures": { "1": { "name": "punctuation.definition.parameters.end.swift" } }, "patterns": [ { "match": "\\b(simulator|UIKitForMac)\\b", "name": "support.constant.platform.environment.swift" } ] }, { "begin": "\\b(swift|compiler)\\s*(\\()", "beginCaptures": { "1": { "name": "keyword.other.condition.swift" }, "2": { "name": "punctuation.definition.parameters.begin.swift" } }, "end": "(\\))|$", "endCaptures": { "1": { "name": "punctuation.definition.parameters.end.swift" } }, "patterns": [ { "match": ">=|<", "name": "keyword.operator.comparison.swift" }, { "match": "\\b[0-9]+(?:\\.[0-9]+)*\\b", "name": "constant.numeric.swift" } ] } ] }, { "captures": { "1": { "name": "punctuation.definition.preprocessor.swift" }, "2": { "name": "keyword.control.preprocessor.conditional.swift" }, "3": { "patterns": [ { "match": "\\S+", "name": "invalid.illegal.character-not-allowed-here.swift" } ] } }, "match": "^\\s*(#)(else|endif)(.*?)(?=$|//|/\\*)", "name": "meta.preprocessor.conditional.swift" }, { "captures": { "1": { "name": "punctuation.definition.preprocessor.swift" }, "2": { "name": "keyword.control.preprocessor.sourcelocation.swift" }, "4": { "name": "punctuation.definition.parameters.begin.swift" }, "5": { "patterns": [ { "begin": "(file)\\s*(:)\\s*(?=\")", "beginCaptures": { "1": { "name": "support.variable.parameter.swift" }, "2": { "name": "punctuation.separator.key-value.swift" } }, "end": "(?!\\G)", "patterns": [ { "include": "#literals" } ] }, { "captures": { "1": { "name": "support.variable.parameter.swift" }, "2": { "name": "punctuation.separator.key-value.swift" }, "3": { "name": "constant.numeric.integer.swift" } }, "match": "(line)\\s*(:)\\s*([0-9]+)" }, { "match": ",", "name": "punctuation.separator.parameters.swift" }, { "match": "\\S+", "name": "invalid.illegal.character-not-allowed-here.swift" } ] }, "6": { "name": "punctuation.definition.parameters.begin.swift" }, "7": { "patterns": [ { "match": "\\S+", "name": "invalid.illegal.character-not-allowed-here.swift" } ] } }, "match": "^\\s*(#)(sourceLocation)((\\()([^)]*)(\\)))(.*?)(?=$|//|/\\*)", "name": "meta.preprocessor.sourcelocation.swift" } ] }, "declarations": { "patterns": [ { "include": "#function" }, { "include": "#function-initializer" }, { "include": "#typed-variable-declaration" }, { "include": "#import" }, { "include": "#operator" }, { "include": "#precedencegroup" }, { "include": "#protocol" }, { "include": "#type" }, { "include": "#extension" }, { "include": "#typealias" } ], "repository": { "available-types": { "patterns": [ { "include": "#comments" }, { "include": "#builtin-types" }, { "include": "#attributes" }, { "match": "\\basync\\b", "name": "keyword.control.async.swift" }, { "match": "\\b(?:throws|rethrows)\\b", "name": "keyword.control.exception.swift" }, { "match": "\\bsome\\b", "name": "keyword.operator.type.opaque.swift" }, { "match": "\\bany\\b", "name": "keyword.operator.type.existential.swift" }, { "match": "\\b(?:inout|isolated)\\b", "name": "storage.modifier.swift" }, { "match": "\\bSelf\\b", "name": "variable.language.swift" }, { "captures": { "1": { "name": "keyword.operator.type.function.swift" } }, "match": "(?&|\\^~.])(->)(?![/=\\-+!*%<>&|\\^~.])" }, { "captures": { "1": { "name": "keyword.operator.type.composition.swift" } }, "comment": "Swift 3: A & B", "match": "(?&|\\^~.])(&)(?![/=\\-+!*%<>&|\\^~.])" }, { "match": "[?!]", "name": "keyword.operator.type.optional.swift" }, { "match": "\\.\\.\\.", "name": "keyword.operator.function.variadic-parameter.swift" }, { "comment": "Swift 2: protocol", "match": "\\bprotocol\\b", "name": "keyword.operator.type.composition.swift" }, { "match": "(?<=\\.)(?:Protocol|Type)\\b", "name": "keyword.operator.type.metatype.swift" }, { "include": "#tuple-type" }, { "include": "#collection-type" }, { "include": "#generic-argument-clause" } ], "repository": { "collection-type": { "begin": "\\[", "beginCaptures": { "0": { "name": "punctuation.section.collection-type.begin.swift" } }, "comment": "array and dictionary types [Value] and [Key: Value]", "end": "\\]|(?=[>){}])", "endCaptures": { "0": { "name": "punctuation.section.collection-type.end.swift" } }, "patterns": [ { "include": "#available-types" }, { "begin": ":", "beginCaptures": { "0": { "name": "punctuation.separator.key-value.swift" } }, "end": "(?=\\]|[>){}])", "patterns": [ { "match": ":", "name": "invalid.illegal.extra-colon-in-dictionary-type.swift" }, { "include": "#available-types" } ] } ] }, "tuple-type": { "begin": "\\(", "beginCaptures": { "0": { "name": "punctuation.section.tuple-type.begin.swift" } }, "end": "\\)|(?=[>\\]{}])", "endCaptures": { "0": { "name": "punctuation.section.tuple-type.end.swift" } }, "patterns": [ { "include": "#available-types" } ] } } }, "extension": { "begin": "\\b(extension)\\s+((?`?)[\\p{L}_][\\p{L}_\\p{N}\\p{M}]*(\\k))", "beginCaptures": { "1": { "name": "storage.type.$1.swift" }, "2": { "name": "entity.name.type.swift", "patterns": [ { "include": "#available-types" } ] }, "3": { "name": "punctuation.definition.identifier.swift" }, "4": { "name": "punctuation.definition.identifier.swift" } }, "end": "(?<=\\})", "name": "meta.definition.type.$1.swift", "patterns": [ { "include": "#comments" }, { "comment": "SE-0143: Conditional Conformances", "include": "#generic-where-clause" }, { "include": "#inheritance-clause" }, { "begin": "\\{", "beginCaptures": { "0": { "name": "punctuation.definition.type.begin.swift" } }, "end": "\\}", "endCaptures": { "0": { "name": "punctuation.definition.type.end.swift" } }, "name": "meta.definition.type.body.swift", "patterns": [ { "include": "$self" } ] } ] }, "function": { "begin": "(?x)\n\t\t\t\t\t\t\\b\n\t\t\t\t\t\t(?:(nonisolated)\\s+)?\n\t\t\t\t\t\t(func)\n\t\t\t\t\t\t\\s+\n\t\t\t\t\t\t(\n\t\t\t\t\t\t\t(?`?)[\\p{L}_][\\p{L}_\\p{N}\\p{M}]*(\\k)\n\t\t\t\t\t\t | (?:\n\t\t\t\t\t\t\t\t(\n\t\t\t\t\t\t\t\t\t(?\t\t\t\t\t\t\t\t# operator-head\n\t\t\t\t\t\t\t\t\t\t[/=\\-+!*%<>&|^~?]\n\t\t\t\t\t\t\t\t\t | [\\x{00A1}-\\x{00A7}]\n\t\t\t\t\t\t\t\t\t | [\\x{00A9}\\x{00AB}]\n\t\t\t\t\t\t\t\t\t | [\\x{00AC}\\x{00AE}]\n\t\t\t\t\t\t\t\t\t | [\\x{00B0}-\\x{00B1}\\x{00B6}\\x{00BB}\\x{00BF}\\x{00D7}\\x{00F7}]\n\t\t\t\t\t\t\t\t\t | [\\x{2016}-\\x{2017}\\x{2020}-\\x{2027}]\n\t\t\t\t\t\t\t\t\t | [\\x{2030}-\\x{203E}]\n\t\t\t\t\t\t\t\t\t | [\\x{2041}-\\x{2053}]\n\t\t\t\t\t\t\t\t\t | [\\x{2055}-\\x{205E}]\n\t\t\t\t\t\t\t\t\t | [\\x{2190}-\\x{23FF}]\n\t\t\t\t\t\t\t\t\t | [\\x{2500}-\\x{2775}]\n\t\t\t\t\t\t\t\t\t | [\\x{2794}-\\x{2BFF}]\n\t\t\t\t\t\t\t\t\t | [\\x{2E00}-\\x{2E7F}]\n\t\t\t\t\t\t\t\t\t | [\\x{3001}-\\x{3003}]\n\t\t\t\t\t\t\t\t\t | [\\x{3008}-\\x{3030}]\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t(\n\t\t\t\t\t\t\t\t\t\t\\g \n\t\t\t\t\t\t\t\t\t | (? \t\t\t\t\t\t\t\t# operator-character\n\t\t\t\t\t\t\t\t\t\t\t[\\x{0300}-\\x{036F}]\n\t\t\t\t\t\t\t\t\t\t | [\\x{1DC0}-\\x{1DFF}]\n\t\t\t\t\t\t\t\t\t\t | [\\x{20D0}-\\x{20FF}]\n\t\t\t\t\t\t\t\t\t\t | [\\x{FE00}-\\x{FE0F}]\n\t\t\t\t\t\t\t\t\t\t | [\\x{FE20}-\\x{FE2F}]\n\t\t\t\t\t\t\t\t\t\t | [\\x{E0100}-\\x{E01EF}]\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t)*\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t | ( \\. ( \\g | \\g | \\. )+ )\t\t\t# Dot operators\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t\t\t\\s*\n\t\t\t\t\t\t(?=\\(|<)\n\t\t\t\t\t", "beginCaptures": { "1": { "name": "storage.modifier.swift" }, "2": { "name": "storage.type.function.swift" }, "3": { "name": "entity.name.function.swift" }, "4": { "name": "punctuation.definition.identifier.swift" }, "5": { "name": "punctuation.definition.identifier.swift" } }, "end": "(?<=\\})|$(?# functions in protocol declarations or generated interfaces have no body)", "name": "meta.definition.function.swift", "patterns": [ { "include": "#comments" }, { "include": "#generic-parameter-clause" }, { "include": "#parameter-clause" }, { "include": "#function-result" }, { "include": "#async-throws" }, { "comment": "Swift 3: generic constraints after the parameters and return type", "include": "#generic-where-clause" }, { "begin": "(\\{)", "beginCaptures": { "1": { "name": "punctuation.section.function.begin.swift" } }, "end": "(\\})", "endCaptures": { "1": { "name": "punctuation.section.function.end.swift" } }, "name": "meta.definition.function.body.swift", "patterns": [ { "include": "$self" } ] } ] }, "function-initializer": { "begin": "(?&|\\^~.])(->)(?![/=\\-+!*%<>&|\\^~.])\\s*", "beginCaptures": { "1": { "name": "keyword.operator.function-result.swift" } }, "end": "(?!\\G)(?=\\{|\\bwhere\\b|;)|$", "name": "meta.function-result.swift", "patterns": [ { "include": "#available-types" } ] }, "generic-argument-clause": { "begin": "<", "beginCaptures": { "0": { "name": "punctuation.separator.generic-argument-clause.begin.swift" } }, "end": ">|(?=[)\\]{}])", "endCaptures": { "0": { "name": "punctuation.separator.generic-argument-clause.end.swift" } }, "name": "meta.generic-argument-clause.swift", "patterns": [ { "include": "#available-types" } ] }, "generic-parameter-clause": { "begin": "<", "beginCaptures": { "0": { "name": "punctuation.separator.generic-parameter-clause.begin.swift" } }, "end": ">|(?=[^\\w\\d:<>\\s,=&`])(?# characters besides these are never valid in a generic param list -- even if it's not really a valid clause, we should stop trying to parse it if we see one of them.)", "endCaptures": { "0": { "name": "punctuation.separator.generic-parameter-clause.end.swift" } }, "name": "meta.generic-parameter-clause.swift", "patterns": [ { "include": "#comments" }, { "comment": "Swift 2: constraints inside the generic param list", "include": "#generic-where-clause" }, { "captures": { "1": { "name": "variable.language.generic-parameter.swift" } }, "match": "\\b((?!\\d)\\w[\\w\\d]*)\\b" }, { "match": ",", "name": "punctuation.separator.generic-parameters.swift" }, { "begin": "(:)\\s*", "beginCaptures": { "1": { "name": "punctuation.separator.generic-parameter-constraint.swift" } }, "end": "(?=[,>]|(?!\\G)\\bwhere\\b)", "name": "meta.generic-parameter-constraint.swift", "patterns": [ { "begin": "\\G", "end": "(?=[,>]|(?!\\G)\\bwhere\\b)", "name": "entity.other.inherited-class.swift", "patterns": [ { "include": "#type-identifier" } ] } ] } ] }, "generic-where-clause": { "begin": "\\b(where)\\b\\s*", "beginCaptures": { "1": { "name": "keyword.other.generic-constraint-introducer.swift" } }, "end": "(?!\\G)$|(?=[>{};\\n]|//|/\\*)", "name": "meta.generic-where-clause.swift", "patterns": [ { "include": "#comments" }, { "include": "#requirement-list" } ], "repository": { "requirement-list": { "begin": "\\G|,\\s*", "end": "(?=[,>{};\\n]|//|/\\*)", "patterns": [ { "include": "#comments" }, { "include": "#constraint" }, { "include": "#available-types" }, { "begin": "(?&|\\^~.])(==)(?![/=\\-+!*%<>&|\\^~.])", "beginCaptures": { "1": { "name": "keyword.operator.generic-constraint.same-type.swift" } }, "end": "(?=\\s*[,>{};\\n]|//|/\\*)", "name": "meta.generic-where-clause.same-type-requirement.swift", "patterns": [ { "include": "#available-types" } ] }, { "begin": "(?&|\\^~.])(:)(?![/=\\-+!*%<>&|\\^~.])", "beginCaptures": { "1": { "name": "keyword.operator.generic-constraint.conforms-to.swift" } }, "end": "(?=\\s*[,>{};\\n]|//|/\\*)", "name": "meta.generic-where-clause.conformance-requirement.swift", "patterns": [ { "begin": "\\G\\s*", "contentName": "entity.other.inherited-class.swift", "end": "(?=\\s*[,>{};\\n]|//|/\\*)", "patterns": [ { "include": "#available-types" } ] } ] } ] } } }, "import": { "begin": "(?`?)[\\p{L}_][\\p{L}_\\p{N}\\p{M}]*(\\k )\n\t\t\t\t\t\t\t\t\t", "name": "entity.name.type.swift" }, { "match": "(?x)\n\t\t\t\t\t\t\t\t\t\t(?<=\\G|\\.)\n\t\t\t\t\t\t\t\t\t\t\\$[0-9]+\n\t\t\t\t\t\t\t\t\t", "name": "entity.name.type.swift" }, { "captures": { "1": { "patterns": [ { "match": "\\.", "name": "invalid.illegal.dot-not-allowed-here.swift" } ] } }, "match": "(?x)\n\t\t\t\t\t\t\t\t\t\t(?<=\\G|\\.)\n\t\t\t\t\t\t\t\t\t\t(?:\n\t\t\t\t\t\t\t\t\t\t\t(\n\t\t\t\t\t\t\t\t\t\t\t\t(?\t\t\t\t\t\t\t\t# operator-head\n\t\t\t\t\t\t\t\t\t\t\t\t\t[/=\\-+!*%<>&|^~?]\n\t\t\t\t\t\t\t\t\t\t\t\t | [\\x{00A1}-\\x{00A7}]\n\t\t\t\t\t\t\t\t\t\t\t\t | [\\x{00A9}\\x{00AB}]\n\t\t\t\t\t\t\t\t\t\t\t\t | [\\x{00AC}\\x{00AE}]\n\t\t\t\t\t\t\t\t\t\t\t\t | [\\x{00B0}-\\x{00B1}\\x{00B6}\\x{00BB}\\x{00BF}\\x{00D7}\\x{00F7}]\n\t\t\t\t\t\t\t\t\t\t\t\t | [\\x{2016}-\\x{2017}\\x{2020}-\\x{2027}]\n\t\t\t\t\t\t\t\t\t\t\t\t | [\\x{2030}-\\x{203E}]\n\t\t\t\t\t\t\t\t\t\t\t\t | [\\x{2041}-\\x{2053}]\n\t\t\t\t\t\t\t\t\t\t\t\t | [\\x{2055}-\\x{205E}]\n\t\t\t\t\t\t\t\t\t\t\t\t | [\\x{2190}-\\x{23FF}]\n\t\t\t\t\t\t\t\t\t\t\t\t | [\\x{2500}-\\x{2775}]\n\t\t\t\t\t\t\t\t\t\t\t\t | [\\x{2794}-\\x{2BFF}]\n\t\t\t\t\t\t\t\t\t\t\t\t | [\\x{2E00}-\\x{2E7F}]\n\t\t\t\t\t\t\t\t\t\t\t\t | [\\x{3001}-\\x{3003}]\n\t\t\t\t\t\t\t\t\t\t\t\t | [\\x{3008}-\\x{3030}]\n\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t\t(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\\g \n\t\t\t\t\t\t\t\t\t\t\t\t | (? \t\t\t\t\t\t\t\t# operator-character\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t[\\x{0300}-\\x{036F}]\n\t\t\t\t\t\t\t\t\t\t\t\t\t | [\\x{1DC0}-\\x{1DFF}]\n\t\t\t\t\t\t\t\t\t\t\t\t\t | [\\x{20D0}-\\x{20FF}]\n\t\t\t\t\t\t\t\t\t\t\t\t\t | [\\x{FE00}-\\x{FE0F}]\n\t\t\t\t\t\t\t\t\t\t\t\t\t | [\\x{FE20}-\\x{FE2F}]\n\t\t\t\t\t\t\t\t\t\t\t\t\t | [\\x{E0100}-\\x{E01EF}]\n\t\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t\t)*\n\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t | ( \\. ( \\g | \\g | \\. )+ )\t\t\t# Dot operators\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t(?=\\.|;|$|//|/\\*|\\s)\n\t\t\t\t\t\t\t\t\t", "name": "entity.name.type.swift" }, { "match": "\\.", "name": "punctuation.separator.import.swift" }, { "begin": "(?!\\s*(;|$|//|/\\*))", "end": "(?=\\s*(;|$|//|/\\*))", "name": "invalid.illegal.character-not-allowed-here.swift" } ] } ] }, "inheritance-clause": { "begin": "(:)(?=\\s*\\{)|(:)\\s*", "beginCaptures": { "1": { "name": "invalid.illegal.empty-inheritance-clause.swift" }, "2": { "name": "punctuation.separator.inheritance-clause.swift" } }, "end": "(?!\\G)$|(?=[={}]|(?!\\G)\\bwhere\\b)", "name": "meta.inheritance-clause.swift", "patterns": [ { "begin": "\\bclass\\b", "beginCaptures": { "0": { "name": "storage.type.class.swift" } }, "end": "(?=[={}]|(?!\\G)\\bwhere\\b)", "patterns": [ { "include": "#comments" }, { "include": "#more-types" } ] }, { "begin": "\\G", "end": "(?!\\G)$|(?=[={}]|(?!\\G)\\bwhere\\b)", "patterns": [ { "include": "#comments" }, { "include": "#inherited-type" }, { "include": "#more-types" } ] } ], "repository": { "inherited-type": { "begin": "(?=[`\\p{L}_])", "end": "(?!\\G)", "name": "entity.other.inherited-class.swift", "patterns": [ { "include": "#type-identifier" } ] }, "more-types": { "begin": ",\\s*", "end": "(?!\\G)(?!//|/\\*)|(?=[,={}]|(?!\\G)\\bwhere\\b)", "name": "meta.inheritance-list.more-types", "patterns": [ { "include": "#comments" }, { "include": "#inherited-type" }, { "include": "#more-types" } ] } } }, "operator": { "begin": "(?x)\n\t\t\t\t\t\t(?:\n\t\t\t\t\t\t\t\\b(prefix|infix|postfix)\n\t\t\t\t\t\t\t\\s+\n\t\t\t\t\t\t)?\n\t\t\t\t\t\t\\b\n\t\t\t\t\t\t(operator)\n\t\t\t\t\t\t\\s+\n\t\t\t\t\t\t(\n\t\t\t\t\t\t\t(\n\t\t\t\t\t\t\t\t(? \t\t\t\t\t\t\t\t\t# operator-head\n\t\t\t\t\t\t\t\t\t[/=\\-+!*%<>&|^~?]\n\t\t\t\t\t\t\t\t | [\\x{00A1}-\\x{00A7}]\n\t\t\t\t\t\t\t\t | [\\x{00A9}\\x{00AB}]\n\t\t\t\t\t\t\t\t | [\\x{00AC}\\x{00AE}]\n\t\t\t\t\t\t\t\t | [\\x{00B0}-\\x{00B1}\\x{00B6}\\x{00BB}\\x{00BF}\\x{00D7}\\x{00F7}]\n\t\t\t\t\t\t\t\t | [\\x{2016}-\\x{2017}\\x{2020}-\\x{2027}]\n\t\t\t\t\t\t\t\t | [\\x{2030}-\\x{203E}]\n\t\t\t\t\t\t\t\t | [\\x{2041}-\\x{2053}]\n\t\t\t\t\t\t\t\t | [\\x{2055}-\\x{205E}]\n\t\t\t\t\t\t\t\t | [\\x{2190}-\\x{23FF}]\n\t\t\t\t\t\t\t\t | [\\x{2500}-\\x{2775}]\n\t\t\t\t\t\t\t\t | [\\x{2794}-\\x{2BFF}]\n\t\t\t\t\t\t\t\t | [\\x{2E00}-\\x{2E7F}]\n\t\t\t\t\t\t\t\t | [\\x{3001}-\\x{3003}]\n\t\t\t\t\t\t\t\t | [\\x{3008}-\\x{3030}]\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t(\n\t\t\t\t\t\t\t\t\t\\g \n\t\t\t\t\t\t\t\t | \\.\t\t\t\t\t\t\t\t\t# Invalid dot\n\t\t\t\t\t\t\t\t | (? \t\t\t\t\t\t\t\t# operator-character\n\t\t\t\t\t\t\t\t\t\t[\\x{0300}-\\x{036F}]\n\t\t\t\t\t\t\t\t\t | [\\x{1DC0}-\\x{1DFF}]\n\t\t\t\t\t\t\t\t\t | [\\x{20D0}-\\x{20FF}]\n\t\t\t\t\t\t\t\t\t | [\\x{FE00}-\\x{FE0F}]\n\t\t\t\t\t\t\t\t\t | [\\x{FE20}-\\x{FE2F}]\n\t\t\t\t\t\t\t\t\t | [\\x{E0100}-\\x{E01EF}]\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t)*+\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t | ( \\. ( \\g | \\g | \\. )++ )\t\t\t# Dot operators\n\t\t\t\t\t\t)\n\t\t\t\t\t\t\\s*\n\t\t\t\t\t", "beginCaptures": { "1": { "name": "storage.modifier.swift" }, "2": { "name": "storage.type.function.operator.swift" }, "3": { "name": "entity.name.function.operator.swift" }, "4": { "patterns": [ { "match": "\\.", "name": "invalid.illegal.dot-not-allowed-here.swift" } ] } }, "end": "(;)|$\\n?|(?=//|/\\*)", "endCaptures": { "1": { "name": "punctuation.terminator.statement.swift" } }, "name": "meta.definition.operator.swift", "patterns": [ { "include": "#swift2" }, { "include": "#swift3" }, { "match": "((?!$|;|//|/\\*)\\S)+", "name": "invalid.illegal.character-not-allowed-here.swift" } ], "repository": { "swift2": { "begin": "\\G(\\{)", "beginCaptures": { "1": { "name": "punctuation.definition.operator.begin.swift" } }, "end": "(\\})", "endCaptures": { "1": { "name": "punctuation.definition.operator.end.swift" } }, "patterns": [ { "include": "#comments" }, { "captures": { "1": { "name": "storage.modifier.swift" }, "2": { "name": "keyword.other.operator.associativity.swift" } }, "match": "\\b(associativity)\\s+(left|right)\\b" }, { "captures": { "1": { "name": "storage.modifier.swift" }, "2": { "name": "constant.numeric.integer.swift" } }, "match": "\\b(precedence)\\s+([0-9]+)\\b" }, { "captures": { "1": { "name": "storage.modifier.swift" } }, "match": "\\b(assignment)\\b" } ] }, "swift3": { "captures": { "2": { "name": "entity.other.inherited-class.swift", "patterns": [ { "include": "#types-precedencegroup" } ] }, "3": { "name": "punctuation.definition.identifier.swift" }, "4": { "name": "punctuation.definition.identifier.swift" } }, "match": "\\G(:)\\s*((? `?)[\\p{L}_][\\p{L}_\\p{N}\\p{M}]*(\\k))" } } }, "parameter-clause": { "begin": "(\\()", "beginCaptures": { "1": { "name": "punctuation.definition.parameters.begin.swift" } }, "end": "(\\))(?:\\s*(async)\\b)?", "endCaptures": { "1": { "name": "punctuation.definition.parameters.end.swift" }, "2": { "name": "keyword.control.async.swift" } }, "name": "meta.parameter-clause.swift", "patterns": [ { "include": "#parameter-list" } ] }, "parameter-list": { "patterns": [ { "captures": { "1": { "name": "entity.name.function.swift" }, "2": { "name": "punctuation.definition.identifier.swift" }, "3": { "name": "punctuation.definition.identifier.swift" }, "4": { "name": "variable.parameter.function.swift" }, "5": { "name": "punctuation.definition.identifier.swift" }, "6": { "name": "punctuation.definition.identifier.swift" } }, "comment": "External parameter labels are considered part of the function name", "match": "((?`?)[\\p{L}_][\\p{L}_\\p{N}\\p{M}]*(\\k ))\\s+((? `?)[\\p{L}_][\\p{L}_\\p{N}\\p{M}]*(\\k ))(?=\\s*:)" }, { "captures": { "1": { "name": "variable.parameter.function.swift" }, "2": { "name": "entity.name.function.swift" }, "3": { "name": "punctuation.definition.identifier.swift" }, "4": { "name": "punctuation.definition.identifier.swift" } }, "comment": "If no external label is given, the name is both the external label and the internal variable name", "match": "(((? `?)[\\p{L}_][\\p{L}_\\p{N}\\p{M}]*(\\k)))(?=\\s*:)" }, { "begin": ":\\s*(?!\\s)", "end": "(?=[,)])", "patterns": [ { "include": "#available-types" }, { "match": ":", "name": "invalid.illegal.extra-colon-in-parameter-list.swift" }, { "begin": "=", "beginCaptures": { "0": { "name": "keyword.operator.assignment.swift" } }, "comment": "a parameter's default value", "end": "(?=[,)])", "patterns": [ { "include": "#expressions" } ] } ] } ] }, "precedencegroup": { "begin": "\\b(precedencegroup)\\s+((?`?)[\\p{L}_][\\p{L}_\\p{N}\\p{M}]*(\\k))\\s*(?=\\{)", "beginCaptures": { "1": { "name": "storage.type.precedencegroup.swift" }, "2": { "name": "entity.name.type.precedencegroup.swift" }, "3": { "name": "punctuation.definition.identifier.swift" }, "4": { "name": "punctuation.definition.identifier.swift" } }, "end": "(?!\\G)", "name": "meta.definition.precedencegroup.swift", "patterns": [ { "begin": "\\{", "beginCaptures": { "0": { "name": "punctuation.definition.precedencegroup.begin.swift" } }, "end": "\\}", "endCaptures": { "0": { "name": "punctuation.definition.precedencegroup.end.swift" } }, "patterns": [ { "include": "#comments" }, { "captures": { "1": { "name": "storage.modifier.swift" }, "2": { "name": "entity.other.inherited-class.swift", "patterns": [ { "include": "#types-precedencegroup" } ] }, "3": { "name": "punctuation.definition.identifier.swift" }, "4": { "name": "punctuation.definition.identifier.swift" } }, "match": "\\b(higherThan|lowerThan)\\s*:\\s*((?`?)[\\p{L}_][\\p{L}_\\p{N}\\p{M}]*(\\k))" }, { "captures": { "1": { "name": "storage.modifier.swift" }, "2": { "name": "keyword.other.operator.associativity.swift" } }, "match": "\\b(associativity)\\b(?:\\s*:\\s*(right|left|none)\\b)?" }, { "captures": { "1": { "name": "storage.modifier.swift" }, "2": { "name": "constant.language.boolean.swift" } }, "match": "\\b(assignment)\\b(?:\\s*:\\s*(true|false)\\b)?" } ] } ] }, "protocol": { "begin": "\\b(protocol)\\s+((?`?)[\\p{L}_][\\p{L}_\\p{N}\\p{M}]*(\\k))", "beginCaptures": { "1": { "name": "storage.type.$1.swift" }, "2": { "name": "entity.name.type.$1.swift" }, "3": { "name": "punctuation.definition.identifier.swift" }, "4": { "name": "punctuation.definition.identifier.swift" } }, "end": "(?<=\\})", "name": "meta.definition.type.protocol.swift", "patterns": [ { "include": "#comments" }, { "include": "#inheritance-clause" }, { "comment": "SE-0142: Permit where clauses to constrain associated types", "include": "#generic-where-clause" }, { "begin": "\\{", "beginCaptures": { "0": { "name": "punctuation.definition.type.begin.swift" } }, "end": "\\}", "endCaptures": { "0": { "name": "punctuation.definition.type.end.swift" } }, "name": "meta.definition.type.body.swift", "patterns": [ { "include": "#protocol-method" }, { "include": "#protocol-initializer" }, { "include": "#associated-type" }, { "include": "$self" } ] } ], "repository": { "associated-type": { "begin": "\\b(associatedtype)\\s+((?`?)[\\p{L}_][\\p{L}_\\p{N}\\p{M}]*(\\k))\\s*", "beginCaptures": { "1": { "name": "keyword.other.declaration-specifier.swift" }, "2": { "name": "variable.language.associatedtype.swift" }, "3": { "name": "punctuation.definition.identifier.swift" }, "4": { "name": "punctuation.definition.identifier.swift" } }, "end": "(?!\\G)$|(?=[;}]|$)", "name": "meta.definition.associatedtype.swift", "patterns": [ { "include": "#inheritance-clause" }, { "comment": "SE-0142: Permit where clauses to constrain associated types", "include": "#generic-where-clause" }, { "include": "#typealias-assignment" } ] }, "protocol-initializer": { "begin": "(?`?)[\\p{L}_][\\p{L}_\\p{N}\\p{M}]*(\\k)\n\t\t \t\t\t\t\t\t | (?:\n\t\t \t\t\t\t\t\t\t\t(\n\t\t \t\t\t\t\t\t\t\t\t(?\t\t\t\t\t\t\t\t# operator-head\n\t\t \t\t\t\t\t\t\t\t\t\t[/=\\-+!*%<>&|^~?]\n\t\t \t\t\t\t\t\t\t\t\t | [\\x{00A1}-\\x{00A7}]\n\t\t \t\t\t\t\t\t\t\t\t | [\\x{00A9}\\x{00AB}]\n\t\t \t\t\t\t\t\t\t\t\t | [\\x{00AC}\\x{00AE}]\n\t\t \t\t\t\t\t\t\t\t\t | [\\x{00B0}-\\x{00B1}\\x{00B6}\\x{00BB}\\x{00BF}\\x{00D7}\\x{00F7}]\n\t\t \t\t\t\t\t\t\t\t\t | [\\x{2016}-\\x{2017}\\x{2020}-\\x{2027}]\n\t\t \t\t\t\t\t\t\t\t\t | [\\x{2030}-\\x{203E}]\n\t\t \t\t\t\t\t\t\t\t\t | [\\x{2041}-\\x{2053}]\n\t\t \t\t\t\t\t\t\t\t\t | [\\x{2055}-\\x{205E}]\n\t\t \t\t\t\t\t\t\t\t\t | [\\x{2190}-\\x{23FF}]\n\t\t \t\t\t\t\t\t\t\t\t | [\\x{2500}-\\x{2775}]\n\t\t \t\t\t\t\t\t\t\t\t | [\\x{2794}-\\x{2BFF}]\n\t\t \t\t\t\t\t\t\t\t\t | [\\x{2E00}-\\x{2E7F}]\n\t\t \t\t\t\t\t\t\t\t\t | [\\x{3001}-\\x{3003}]\n\t\t \t\t\t\t\t\t\t\t\t | [\\x{3008}-\\x{3030}]\n\t\t \t\t\t\t\t\t\t\t\t)\n\t\t \t\t\t\t\t\t\t\t\t(\n\t\t \t\t\t\t\t\t\t\t\t\t\\g \n\t\t \t\t\t\t\t\t\t\t\t | (? \t\t\t\t\t\t\t\t# operator-character\n\t\t \t\t\t\t\t\t\t\t\t\t\t[\\x{0300}-\\x{036F}]\n\t\t \t\t\t\t\t\t\t\t\t\t | [\\x{1DC0}-\\x{1DFF}]\n\t\t \t\t\t\t\t\t\t\t\t\t | [\\x{20D0}-\\x{20FF}]\n\t\t \t\t\t\t\t\t\t\t\t\t | [\\x{FE00}-\\x{FE0F}]\n\t\t \t\t\t\t\t\t\t\t\t\t | [\\x{FE20}-\\x{FE2F}]\n\t\t \t\t\t\t\t\t\t\t\t\t | [\\x{E0100}-\\x{E01EF}]\n\t\t \t\t\t\t\t\t\t\t\t\t)\n\t\t \t\t\t\t\t\t\t\t\t)*\n\t\t \t\t\t\t\t\t\t\t)\n\t\t \t\t\t\t\t\t\t | ( \\. ( \\g | \\g | \\. )+ )\t\t\t# Dot operators\n\t\t \t\t\t\t\t\t\t)\n\t\t \t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\\s*\n\t\t\t\t\t\t\t\t(?=\\(|<)\n\t\t\t\t\t\t\t", "beginCaptures": { "1": { "name": "storage.type.function.swift" }, "2": { "name": "entity.name.function.swift" }, "3": { "name": "punctuation.definition.identifier.swift" }, "4": { "name": "punctuation.definition.identifier.swift" } }, "end": "$|(?=;|//|/\\*|\\})", "name": "meta.definition.function.swift", "patterns": [ { "include": "#comments" }, { "include": "#generic-parameter-clause" }, { "include": "#parameter-clause" }, { "include": "#function-result" }, { "include": "#async-throws" }, { "comment": "Swift 3: generic constraints after the parameters and return type", "include": "#generic-where-clause" }, { "begin": "\\{", "beginCaptures": { "0": { "name": "punctuation.section.function.begin.swift" } }, "end": "\\}", "endCaptures": { "0": { "name": "punctuation.section.function.end.swift" } }, "name": "invalid.illegal.function-body-not-allowed-in-protocol.swift", "patterns": [ { "include": "$self" } ] } ] } } }, "type": { "patterns": [ { "begin": "\\b(class(?!\\s+(?:func|var|let)\\b)|struct|actor)\\s+((? `?)[\\p{L}_][\\p{L}_\\p{N}\\p{M}]*(\\k))", "beginCaptures": { "1": { "name": "storage.type.$1.swift" }, "2": { "name": "entity.name.type.$1.swift" }, "3": { "name": "punctuation.definition.identifier.swift" }, "4": { "name": "punctuation.definition.identifier.swift" } }, "end": "(?<=\\})", "name": "meta.definition.type.$1.swift", "patterns": [ { "include": "#comments" }, { "include": "#generic-parameter-clause" }, { "comment": "Swift 3: generic constraints after the generic param list", "include": "#generic-where-clause" }, { "include": "#inheritance-clause" }, { "begin": "\\{", "beginCaptures": { "0": { "name": "punctuation.definition.type.begin.swift" } }, "end": "\\}", "endCaptures": { "0": { "name": "punctuation.definition.type.end.swift" } }, "name": "meta.definition.type.body.swift", "patterns": [ { "include": "$self" } ] } ] }, { "include": "#type-enum" } ] }, "type-enum": { "begin": "\\b(enum)\\s+((?`?)[\\p{L}_][\\p{L}_\\p{N}\\p{M}]*(\\k))", "beginCaptures": { "1": { "name": "storage.type.$1.swift" }, "2": { "name": "entity.name.type.$1.swift" }, "3": { "name": "punctuation.definition.identifier.swift" }, "4": { "name": "punctuation.definition.identifier.swift" } }, "end": "(?<=\\})", "name": "meta.definition.type.$1.swift", "patterns": [ { "include": "#comments" }, { "include": "#generic-parameter-clause" }, { "comment": "Swift 3: generic constraints after the generic param list", "include": "#generic-where-clause" }, { "include": "#inheritance-clause" }, { "begin": "\\{", "beginCaptures": { "0": { "name": "punctuation.definition.type.begin.swift" } }, "end": "\\}", "endCaptures": { "0": { "name": "punctuation.definition.type.end.swift" } }, "name": "meta.definition.type.body.swift", "patterns": [ { "include": "#enum-case-clause" }, { "include": "$self" } ] } ], "repository": { "associated-values": { "begin": "\\G\\(", "beginCaptures": { "0": { "name": "punctuation.definition.parameters.begin.swift" } }, "end": "\\)", "endCaptures": { "0": { "name": "punctuation.definition.parameters.end.swift" } }, "patterns": [ { "include": "#comments" }, { "begin": "(?x)\n\t\t\t\t\t\t\t\t\t\t(?:(_)|((?`?)[\\p{L}_][\\p{L}_\\p{N}\\p{M}]*\\k ))\n\t\t\t\t\t\t\t\t\t\t\\s+\n\t\t\t\t\t\t\t\t\t\t(((? `?)[\\p{L}_][\\p{L}_\\p{N}\\p{M}]*\\k ))\n\t\t\t\t\t\t\t\t\t\t\\s*(:)", "beginCaptures": { "1": { "name": "entity.name.function.swift" }, "2": { "name": "invalid.illegal.distinct-labels-not-allowed.swift" }, "5": { "name": "variable.parameter.function.swift" }, "7": { "name": "punctuation.separator.argument-label.swift" } }, "end": "(?=[,)\\]])", "patterns": [ { "include": "#available-types" } ] }, { "begin": "(((? `?)[\\p{L}_][\\p{L}_\\p{N}\\p{M}]*\\k))\\s*(:)", "beginCaptures": { "1": { "name": "entity.name.function.swift" }, "2": { "name": "variable.parameter.function.swift" }, "4": { "name": "punctuation.separator.argument-label.swift" } }, "end": "(?=[,)\\]])", "patterns": [ { "include": "#available-types" } ] }, { "begin": "(?![,)\\]])(?=\\S)", "comment": "an element without a label (i.e. anything else)", "end": "(?=[,)\\]])", "patterns": [ { "include": "#available-types" }, { "match": ":", "name": "invalid.illegal.extra-colon-in-parameter-list.swift" } ] } ] }, "enum-case": { "begin": "(?x)((?`?)[\\p{L}_][\\p{L}_\\p{N}\\p{M}]*(\\k))\\s*", "beginCaptures": { "1": { "name": "constant.other.swift" } }, "end": "(?<=\\))|(?![=(])", "patterns": [ { "include": "#comments" }, { "include": "#associated-values" }, { "include": "#raw-value-assignment" } ] }, "enum-case-clause": { "begin": "\\b(case)\\b\\s*", "beginCaptures": { "1": { "name": "storage.type.enum.case.swift" } }, "end": "(?=[;}])|(?!\\G)(?!//|/\\*)(?=[^\\s,])", "patterns": [ { "include": "#comments" }, { "include": "#enum-case" }, { "include": "#more-cases" } ] }, "more-cases": { "begin": ",\\s*", "end": "(?!\\G)(?!//|/\\*)(?=[;}]|[^\\s,])", "name": "meta.enum-case.more-cases", "patterns": [ { "include": "#comments" }, { "include": "#enum-case" }, { "include": "#more-cases" } ] }, "raw-value-assignment": { "begin": "(=)\\s*", "beginCaptures": { "1": { "name": "keyword.operator.assignment.swift" } }, "end": "(?!\\G)", "patterns": [ { "include": "#comments" }, { "include": "#literals" } ] } } }, "type-identifier": { "begin": "((?`?)[\\p{L}_][\\p{L}_\\p{N}\\p{M}]*(\\k))\\s*", "beginCaptures": { "1": { "name": "meta.type-name.swift", "patterns": [ { "include": "#builtin-types" } ] }, "2": { "name": "punctuation.definition.identifier.swift" }, "3": { "name": "punctuation.definition.identifier.swift" } }, "end": "(?!<)", "patterns": [ { "begin": "(?=<)", "end": "(?!\\G)", "patterns": [ { "include": "#generic-argument-clause" } ] } ] }, "typealias": { "begin": "\\b(typealias)\\s+((?`?)[\\p{L}_][\\p{L}_\\p{N}\\p{M}]*(\\k))\\s*", "beginCaptures": { "1": { "name": "keyword.other.declaration-specifier.swift" }, "2": { "name": "entity.name.type.typealias.swift" }, "3": { "name": "punctuation.definition.identifier.swift" }, "4": { "name": "punctuation.definition.identifier.swift" } }, "end": "(?!\\G)$|(?=;|//|/\\*|$)", "name": "meta.definition.typealias.swift", "patterns": [ { "begin": "\\G(?=<)", "end": "(?!\\G)", "patterns": [ { "include": "#generic-parameter-clause" } ] }, { "include": "#typealias-assignment" } ] }, "typealias-assignment": { "begin": "(=)\\s*", "beginCaptures": { "1": { "name": "keyword.operator.assignment.swift" } }, "end": "(?!\\G)$|(?=;|//|/\\*|$)", "patterns": [ { "include": "#available-types" } ] }, "typed-variable-declaration": { "begin": "(?x)\n\t\t\t\t\t\t\\b(?:(async)\\s+)?(let|var)\\b\\s+\n\t\t\t\t\t\t(?`?)[\\p{L}_][\\p{L}_\\p{N}\\p{M}]*(\\k)\\s*\n\t\t\t\t\t\t:\n\t\t\t\t\t", "beginCaptures": { "1": { "name": "keyword.control.async.swift" }, "2": { "name": "keyword.other.declaration-specifier.swift" } }, "end": "(?=$|[={])", "patterns": [ { "include": "#available-types" } ] }, "types-precedencegroup": { "patterns": [ { "comment": "Precedence groups in the standard library", "match": "\\b(?:BitwiseShift|Assignment|RangeFormation|Casting|Addition|NilCoalescing|Comparison|LogicalConjunction|LogicalDisjunction|Default|Ternary|Multiplication|FunctionArrow)Precedence\\b", "name": "support.type.swift" } ] } } }, "expressions": { "patterns": [ { "include": "#comments" }, { "include": "#code-block" }, { "include": "#attributes" }, { "include": "#closure-parameter" }, { "include": "#literals" }, { "include": "#operators" }, { "include": "#builtin-types" }, { "include": "#builtin-functions" }, { "include": "#builtin-global-functions" }, { "include": "#builtin-properties" }, { "include": "#compound-name" }, { "include": "#keywords" }, { "include": "#function-call-expression" }, { "include": "#subscript-expression" }, { "include": "#parenthesized-expression" }, { "include": "#member-reference" }, { "include": "#availability-condition" }, { "match": "\\b_\\b", "name": "support.variable.discard-value.swift" } ], "repository": { "availability-condition": { "begin": "\\B(#(?:un)?available)(\\()", "beginCaptures": { "1": { "name": "support.function.availability-condition.swift" }, "2": { "name": "punctuation.definition.arguments.begin.swift" } }, "end": "\\)", "endCaptures": { "0": { "name": "punctuation.definition.arguments.end.swift" } }, "patterns": [ { "captures": { "1": { "name": "keyword.other.platform.os.swift" }, "2": { "name": "constant.numeric.swift" } }, "match": "\\s*\\b((?:iOS|macOS|OSX|watchOS|tvOS|UIKitForMac)(?:ApplicationExtension)?)\\b(?:\\s+([0-9]+(?:\\.[0-9]+)*\\b))" }, { "captures": { "1": { "name": "keyword.other.platform.all.swift" }, "2": { "name": "invalid.illegal.character-not-allowed-here.swift" } }, "match": "(\\*)\\s*(.*?)(?=[,)])" }, { "match": "[^\\s,)]+", "name": "invalid.illegal.character-not-allowed-here.swift" } ] }, "closure-parameter": { "match": "\\$[0-9]+", "name": "variable.language.closure-parameter.swift" }, "compound-name": { "captures": { "1": { "name": "entity.name.function.compound-name.swift" }, "2": { "name": "punctuation.definition.entity.swift" }, "3": { "name": "punctuation.definition.entity.swift" }, "4": { "patterns": [ { "captures": { "1": { "name": "punctuation.definition.entity.swift" }, "2": { "name": "punctuation.definition.entity.swift" } }, "match": "(?`?)(?!_:)[\\p{L}_][\\p{L}_\\p{N}\\p{M}]*(\\k):", "name": "entity.name.function.compound-name.swift" } ] } }, "comment": "a reference to a function with disambiguating argument labels, such as foo(_:), foo(bar:), etc.", "match": "(?x)\n\t\t\t\t\t\t((?`?)[\\p{L}_][\\p{L}_\\p{N}\\p{M}]*(\\k )) \t\t# function name\n\t\t\t\t\t\t\\(\n\t\t\t\t\t\t\t(\n\t\t\t\t\t\t\t\t(\n\t\t\t\t\t\t\t\t\t((? `?)[\\p{L}_][\\p{L}_\\p{N}\\p{M}]*(\\k )) \t# argument label\n\t\t\t\t\t\t\t\t\t:\t\t\t\t\t\t\t\t\t\t\t\t# colon\n\t\t\t\t\t\t\t\t)+\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\\)\n\t\t\t\t\t" }, "expression-element-list": { "patterns": [ { "include": "#comments" }, { "begin": "((? `?)[\\p{L}_][\\p{L}_\\p{N}\\p{M}]*(\\k))\\s*(:)", "beginCaptures": { "1": { "name": "support.function.any-method.swift" }, "2": { "name": "punctuation.definition.identifier.swift" }, "3": { "name": "punctuation.definition.identifier.swift" }, "4": { "name": "punctuation.separator.argument-label.swift" } }, "comment": "an element with a label", "end": "(?=[,)\\]])", "patterns": [ { "include": "#expressions" } ] }, { "begin": "(?![,)\\]])(?=\\S)", "comment": "an element without a label (i.e. anything else)", "end": "(?=[,)\\]])", "patterns": [ { "include": "#expressions" } ] } ] }, "function-call-expression": { "patterns": [ { "begin": "((?`?)[\\p{L}_][\\p{L}_\\p{N}\\p{M}]*(\\k))\\s*(\\()", "beginCaptures": { "1": { "name": "support.function.any-method.swift" }, "2": { "name": "punctuation.definition.identifier.swift" }, "3": { "name": "punctuation.definition.identifier.swift" }, "4": { "name": "punctuation.definition.arguments.begin.swift" } }, "comment": "foo(args) -- a call whose callee is a highlightable name", "end": "\\)", "endCaptures": { "0": { "name": "punctuation.definition.arguments.end.swift" } }, "name": "meta.function-call.swift", "patterns": [ { "include": "#expression-element-list" } ] }, { "begin": "(?<=[`\\])}>\\p{L}_\\p{N}\\p{M}])\\s*(\\()", "beginCaptures": { "1": { "name": "punctuation.definition.arguments.begin.swift" } }, "comment": "[Int](args) -- a call whose callee is a more complicated expression", "end": "\\)", "endCaptures": { "0": { "name": "punctuation.definition.arguments.end.swift" } }, "name": "meta.function-call.swift", "patterns": [ { "include": "#expression-element-list" } ] } ] }, "member-reference": { "patterns": [ { "captures": { "1": { "name": "variable.other.swift" }, "2": { "name": "punctuation.definition.identifier.swift" }, "3": { "name": "punctuation.definition.identifier.swift" } }, "match": "(?<=\\.)((?`?)[\\p{L}_][\\p{L}_\\p{N}\\p{M}]*(\\k))" } ] }, "parenthesized-expression": { "begin": "\\(", "beginCaptures": { "0": { "name": "punctuation.section.tuple.begin.swift" } }, "comment": "correctly matching closure expressions is too hard (depends on trailing \"in\") so we just tack on some basics to the end of parenthesized-expression", "end": "(\\))\\s*((?:\\b(?:async|throws|rethrows)\\s)*)", "endCaptures": { "1": { "name": "punctuation.section.tuple.end.swift" }, "2": { "patterns": [ { "match": "\\brethrows\\b", "name": "invalid.illegal.rethrows-only-allowed-on-function-declarations.swift" }, { "include": "#async-throws" } ] } }, "patterns": [ { "include": "#expression-element-list" } ] }, "subscript-expression": { "begin": "(?<=[`\\p{L}_\\p{N}\\p{M}])\\s*(\\[)", "beginCaptures": { "1": { "name": "punctuation.definition.arguments.begin.swift" } }, "end": "\\]", "endCaptures": { "0": { "name": "punctuation.definition.arguments.end.swift" } }, "name": "meta.subscript-expression.swift", "patterns": [ { "include": "#expression-element-list" } ] } } }, "keywords": { "patterns": [ { "match": "(?\t\t\t\t\t\t\t\t# operator-head\n\t\t\t\t\t\t\t\t[/=\\-+!*%<>&|^~?]\n\t\t\t\t\t\t\t | [\\x{00A1}-\\x{00A7}]\n\t\t\t\t\t\t\t | [\\x{00A9}\\x{00AB}]\n\t\t\t\t\t\t\t | [\\x{00AC}\\x{00AE}]\n\t\t\t\t\t\t\t | [\\x{00B0}-\\x{00B1}\\x{00B6}\\x{00BB}\\x{00BF}\\x{00D7}\\x{00F7}]\n\t\t\t\t\t\t\t | [\\x{2016}-\\x{2017}\\x{2020}-\\x{2027}]\n\t\t\t\t\t\t\t | [\\x{2030}-\\x{203E}]\n\t\t\t\t\t\t\t | [\\x{2041}-\\x{2053}]\n\t\t\t\t\t\t\t | [\\x{2055}-\\x{205E}]\n\t\t\t\t\t\t\t | [\\x{2190}-\\x{23FF}]\n\t\t\t\t\t\t\t | [\\x{2500}-\\x{2775}]\n\t\t\t\t\t\t\t | [\\x{2794}-\\x{2BFF}]\n\t\t\t\t\t\t\t | [\\x{2E00}-\\x{2E7F}]\n\t\t\t\t\t\t\t | [\\x{3001}-\\x{3003}]\n\t\t\t\t\t\t\t | [\\x{3008}-\\x{3030}]\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t | \\.\n\t\t\t\t\t\t\t(\n\t\t\t\t\t\t\t\t\\g\t\t\t\t\t\t\t# operator-head\n\t\t\t\t\t\t\t | \\.\n\t\t\t\t\t\t\t | [\\x{0300}-\\x{036F}]\t\t\t\t# operator-character\n\t\t\t\t\t\t\t | [\\x{1DC0}-\\x{1DFF}]\n\t\t\t\t\t\t\t | [\\x{20D0}-\\x{20FF}]\n\t\t\t\t\t\t\t | [\\x{FE00}-\\x{FE0F}]\n\t\t\t\t\t\t\t | [\\x{FE20}-\\x{FE2F}]\n\t\t\t\t\t\t\t | [\\x{E0100}-\\x{E01EF}]\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t\t", "comment": "This rule helps us speed up the matching.", "end": "(?!\\G)", "patterns": [ { "captures": { "0": { "patterns": [ { "match": "\\G(\\+\\+|\\-\\-)$", "name": "keyword.operator.increment-or-decrement.swift" }, { "match": "\\G(\\+|\\-)$", "name": "keyword.operator.arithmetic.unary.swift" }, { "match": "\\G!$", "name": "keyword.operator.logical.not.swift" }, { "match": "\\G~$", "name": "keyword.operator.bitwise.not.swift" }, { "match": ".+", "name": "keyword.operator.custom.prefix.swift" } ] } }, "comment": "Prefix unary operator", "match": "(?x)\n\t\t\t\t\t\t\t\t\\G\t\t\t\t\t\t\t\t\t\t# Matching from the beginning ensures\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t# that we start with operator-head\n\t\t\t\t\t\t\t\t(?<=^|[\\s(\\[{,;:])\n\t\t\t\t\t\t\t\t(\n\t\t\t\t\t\t\t\t\t(?!(//|/\\*|\\*/))\n\t\t\t\t\t\t\t\t\t(\n\t\t\t\t\t\t\t\t\t\t[/=\\-+!*%<>&|^~?]\t\t\t\t# operator-head\n\t\t\t\t\t\t\t\t\t | [\\x{00A1}-\\x{00A7}]\n\t\t\t\t\t\t\t\t\t | [\\x{00A9}\\x{00AB}]\n\t\t\t\t\t\t\t\t\t | [\\x{00AC}\\x{00AE}]\n\t\t\t\t\t\t\t\t\t | [\\x{00B0}-\\x{00B1}\\x{00B6}\\x{00BB}\\x{00BF}\\x{00D7}\\x{00F7}]\n\t\t\t\t\t\t\t\t\t | [\\x{2016}-\\x{2017}\\x{2020}-\\x{2027}]\n\t\t\t\t\t\t\t\t\t | [\\x{2030}-\\x{203E}]\n\t\t\t\t\t\t\t\t\t | [\\x{2041}-\\x{2053}]\n\t\t\t\t\t\t\t\t\t | [\\x{2055}-\\x{205E}]\n\t\t\t\t\t\t\t\t\t | [\\x{2190}-\\x{23FF}]\n\t\t\t\t\t\t\t\t\t | [\\x{2500}-\\x{2775}]\n\t\t\t\t\t\t\t\t\t | [\\x{2794}-\\x{2BFF}]\n\t\t\t\t\t\t\t\t\t | [\\x{2E00}-\\x{2E7F}]\n\t\t\t\t\t\t\t\t\t | [\\x{3001}-\\x{3003}]\n\t\t\t\t\t\t\t\t\t | [\\x{3008}-\\x{3030}]\n\t\t\t\t\t\t\t\t \n\t\t\t\t\t\t\t\t\t | [\\x{0300}-\\x{036F}]\t\t\t\t# operator-character\n\t\t\t\t\t\t\t\t\t | [\\x{1DC0}-\\x{1DFF}]\n\t\t\t\t\t\t\t\t\t | [\\x{20D0}-\\x{20FF}]\n\t\t\t\t\t\t\t\t\t | [\\x{FE00}-\\x{FE0F}]\n\t\t\t\t\t\t\t\t\t | [\\x{FE20}-\\x{FE2F}]\n\t\t\t\t\t\t\t\t\t | [\\x{E0100}-\\x{E01EF}]\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t)++\n\t\t\t\t\t\t\t\t(?![\\s)\\]},;:]|\\z)\n\t\t\t\t\t\t\t" }, { "captures": { "0": { "patterns": [ { "match": "\\G(\\+\\+|\\-\\-)$", "name": "keyword.operator.increment-or-decrement.swift" }, { "match": "\\G!$", "name": "keyword.operator.increment-or-decrement.swift" }, { "match": ".+", "name": "keyword.operator.custom.postfix.swift" } ] } }, "comment": "Postfix unary operator", "match": "(?x)\n\t\t\t\t\t\t\t\t\\G\t\t\t\t\t\t\t\t\t\t# Matching from the beginning ensures\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t# that we start with operator-head\n\t\t\t\t\t\t\t\t(?&|^~?]\t\t\t\t# operator-head\n\t\t\t\t\t\t\t\t\t | [\\x{00A1}-\\x{00A7}]\n\t\t\t\t\t\t\t\t\t | [\\x{00A9}\\x{00AB}]\n\t\t\t\t\t\t\t\t\t | [\\x{00AC}\\x{00AE}]\n\t\t\t\t\t\t\t\t\t | [\\x{00B0}-\\x{00B1}\\x{00B6}\\x{00BB}\\x{00BF}\\x{00D7}\\x{00F7}]\n\t\t\t\t\t\t\t\t\t | [\\x{2016}-\\x{2017}\\x{2020}-\\x{2027}]\n\t\t\t\t\t\t\t\t\t | [\\x{2030}-\\x{203E}]\n\t\t\t\t\t\t\t\t\t | [\\x{2041}-\\x{2053}]\n\t\t\t\t\t\t\t\t\t | [\\x{2055}-\\x{205E}]\n\t\t\t\t\t\t\t\t\t | [\\x{2190}-\\x{23FF}]\n\t\t\t\t\t\t\t\t\t | [\\x{2500}-\\x{2775}]\n\t\t\t\t\t\t\t\t\t | [\\x{2794}-\\x{2BFF}]\n\t\t\t\t\t\t\t\t\t | [\\x{2E00}-\\x{2E7F}]\n\t\t\t\t\t\t\t\t\t | [\\x{3001}-\\x{3003}]\n\t\t\t\t\t\t\t\t\t | [\\x{3008}-\\x{3030}]\n\t\t\t\t\t\t\t\t \n\t\t\t\t\t\t\t\t\t | [\\x{0300}-\\x{036F}]\t\t\t\t# operator-character\n\t\t\t\t\t\t\t\t\t | [\\x{1DC0}-\\x{1DFF}]\n\t\t\t\t\t\t\t\t\t | [\\x{20D0}-\\x{20FF}]\n\t\t\t\t\t\t\t\t\t | [\\x{FE00}-\\x{FE0F}]\n\t\t\t\t\t\t\t\t\t | [\\x{FE20}-\\x{FE2F}]\n\t\t\t\t\t\t\t\t\t | [\\x{E0100}-\\x{E01EF}]\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t)++\n\t\t\t\t\t\t\t\t(?=[\\s)\\]},;:]|\\z)\n\t\t\t\t\t\t\t" }, { "captures": { "0": { "patterns": [ { "match": "\\G=$", "name": "keyword.operator.assignment.swift" }, { "match": "\\G(\\+|\\-|\\*|/|%|<<|>>|&|\\^|\\||&&|\\|\\|)=$", "name": "keyword.operator.assignment.compound.swift" }, { "match": "\\G(\\+|\\-|\\*|/)$", "name": "keyword.operator.arithmetic.swift" }, { "match": "\\G&(\\+|\\-|\\*)$", "name": "keyword.operator.arithmetic.overflow.swift" }, { "match": "\\G%$", "name": "keyword.operator.arithmetic.remainder.swift" }, { "match": "\\G(==|!=|>|<|>=|<=|~=)$", "name": "keyword.operator.comparison.swift" }, { "match": "\\G\\?\\?$", "name": "keyword.operator.coalescing.swift" }, { "match": "\\G(&&|\\|\\|)$", "name": "keyword.operator.logical.swift" }, { "match": "\\G(&|\\||\\^|<<|>>)$", "name": "keyword.operator.bitwise.swift" }, { "match": "\\G(===|!==)$", "name": "keyword.operator.bitwise.swift" }, { "match": "\\G\\?$", "name": "keyword.operator.ternary.swift" }, { "match": ".+", "name": "keyword.operator.custom.infix.swift" } ] } }, "comment": "Infix operator", "match": "(?x)\n\t\t\t\t\t\t\t\t\\G\t\t\t\t\t\t\t\t\t\t# Matching from the beginning ensures\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t# that we start with operator-head\n\t\t\t\t\t\t\t\t(\n\t\t\t\t\t\t\t\t\t(?!(//|/\\*|\\*/))\n\t\t\t\t\t\t\t\t\t(\n\t\t\t\t\t\t\t\t\t\t[/=\\-+!*%<>&|^~?]\t\t\t\t# operator-head\n\t\t\t\t\t\t\t\t\t | [\\x{00A1}-\\x{00A7}]\n\t\t\t\t\t\t\t\t\t | [\\x{00A9}\\x{00AB}]\n\t\t\t\t\t\t\t\t\t | [\\x{00AC}\\x{00AE}]\n\t\t\t\t\t\t\t\t\t | [\\x{00B0}-\\x{00B1}\\x{00B6}\\x{00BB}\\x{00BF}\\x{00D7}\\x{00F7}]\n\t\t\t\t\t\t\t\t\t | [\\x{2016}-\\x{2017}\\x{2020}-\\x{2027}]\n\t\t\t\t\t\t\t\t\t | [\\x{2030}-\\x{203E}]\n\t\t\t\t\t\t\t\t\t | [\\x{2041}-\\x{2053}]\n\t\t\t\t\t\t\t\t\t | [\\x{2055}-\\x{205E}]\n\t\t\t\t\t\t\t\t\t | [\\x{2190}-\\x{23FF}]\n\t\t\t\t\t\t\t\t\t | [\\x{2500}-\\x{2775}]\n\t\t\t\t\t\t\t\t\t | [\\x{2794}-\\x{2BFF}]\n\t\t\t\t\t\t\t\t\t | [\\x{2E00}-\\x{2E7F}]\n\t\t\t\t\t\t\t\t\t | [\\x{3001}-\\x{3003}]\n\t\t\t\t\t\t\t\t\t | [\\x{3008}-\\x{3030}]\n\t\t\t\t\t\t\t\t \n\t\t\t\t\t\t\t\t\t | [\\x{0300}-\\x{036F}]\t\t\t\t# operator-character\n\t\t\t\t\t\t\t\t\t | [\\x{1DC0}-\\x{1DFF}]\n\t\t\t\t\t\t\t\t\t | [\\x{20D0}-\\x{20FF}]\n\t\t\t\t\t\t\t\t\t | [\\x{FE00}-\\x{FE0F}]\n\t\t\t\t\t\t\t\t\t | [\\x{FE20}-\\x{FE2F}]\n\t\t\t\t\t\t\t\t\t | [\\x{E0100}-\\x{E01EF}]\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t)++\n\t\t\t\t\t\t\t" }, { "captures": { "0": { "patterns": [ { "match": ".+", "name": "keyword.operator.custom.prefix.dot.swift" } ] } }, "comment": "Dot prefix unary operator", "match": "(?x)\n\t\t\t\t\t\t\t\t\\G\t\t\t\t\t\t\t\t\t\t# Matching from the beginning ensures\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t# that we start with operator-head\n\t\t\t\t\t\t\t\t(?<=^|[\\s(\\[{,;:])\n\t\t\t\t\t\t\t\t\\.\t\t\t\t\t\t\t\t\t\t# dot\n\t\t\t\t\t\t\t\t(\n\t\t\t\t\t\t\t\t\t(?!(//|/\\*|\\*/))\n\t\t\t\t\t\t\t\t\t(\n\t\t\t\t\t\t\t\t\t\t\\.\t\t\t\t\t\t\t\t# dot\n\t\t\t\t\t\t\t\t\t | [/=\\-+!*%<>&|^~?]\t\t\t\t# operator-head\n\t\t\t\t\t\t\t\t\t | [\\x{00A1}-\\x{00A7}]\n\t\t\t\t\t\t\t\t\t | [\\x{00A9}\\x{00AB}]\n\t\t\t\t\t\t\t\t\t | [\\x{00AC}\\x{00AE}]\n\t\t\t\t\t\t\t\t\t | [\\x{00B0}-\\x{00B1}\\x{00B6}\\x{00BB}\\x{00BF}\\x{00D7}\\x{00F7}]\n\t\t\t\t\t\t\t\t\t | [\\x{2016}-\\x{2017}\\x{2020}-\\x{2027}]\n\t\t\t\t\t\t\t\t\t | [\\x{2030}-\\x{203E}]\n\t\t\t\t\t\t\t\t\t | [\\x{2041}-\\x{2053}]\n\t\t\t\t\t\t\t\t\t | [\\x{2055}-\\x{205E}]\n\t\t\t\t\t\t\t\t\t | [\\x{2190}-\\x{23FF}]\n\t\t\t\t\t\t\t\t\t | [\\x{2500}-\\x{2775}]\n\t\t\t\t\t\t\t\t\t | [\\x{2794}-\\x{2BFF}]\n\t\t\t\t\t\t\t\t\t | [\\x{2E00}-\\x{2E7F}]\n\t\t\t\t\t\t\t\t\t | [\\x{3001}-\\x{3003}]\n\t\t\t\t\t\t\t\t\t | [\\x{3008}-\\x{3030}]\n\t\t\t\t\t\t\t\t \n\t\t\t\t\t\t\t\t\t | [\\x{0300}-\\x{036F}]\t\t\t\t# operator-character\n\t\t\t\t\t\t\t\t\t | [\\x{1DC0}-\\x{1DFF}]\n\t\t\t\t\t\t\t\t\t | [\\x{20D0}-\\x{20FF}]\n\t\t\t\t\t\t\t\t\t | [\\x{FE00}-\\x{FE0F}]\n\t\t\t\t\t\t\t\t\t | [\\x{FE20}-\\x{FE2F}]\n\t\t\t\t\t\t\t\t\t | [\\x{E0100}-\\x{E01EF}]\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t)++\n\t\t\t\t\t\t\t\t(?![\\s)\\]},;:]|\\z)\n\t\t\t\t\t\t\t" }, { "captures": { "0": { "patterns": [ { "match": ".+", "name": "keyword.operator.custom.postfix.dot.swift" } ] } }, "comment": "Dot postfix unary operator", "match": "(?x)\n\t\t\t\t\t\t\t\t\\G\t\t\t\t\t\t\t\t\t\t# Matching from the beginning ensures\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t# that we start with operator-head\n\t\t\t\t\t\t\t\t(?&|^~?]\t\t\t\t# operator-head\n\t\t\t\t\t\t\t\t\t | [\\x{00A1}-\\x{00A7}]\n\t\t\t\t\t\t\t\t\t | [\\x{00A9}\\x{00AB}]\n\t\t\t\t\t\t\t\t\t | [\\x{00AC}\\x{00AE}]\n\t\t\t\t\t\t\t\t\t | [\\x{00B0}-\\x{00B1}\\x{00B6}\\x{00BB}\\x{00BF}\\x{00D7}\\x{00F7}]\n\t\t\t\t\t\t\t\t\t | [\\x{2016}-\\x{2017}\\x{2020}-\\x{2027}]\n\t\t\t\t\t\t\t\t\t | [\\x{2030}-\\x{203E}]\n\t\t\t\t\t\t\t\t\t | [\\x{2041}-\\x{2053}]\n\t\t\t\t\t\t\t\t\t | [\\x{2055}-\\x{205E}]\n\t\t\t\t\t\t\t\t\t | [\\x{2190}-\\x{23FF}]\n\t\t\t\t\t\t\t\t\t | [\\x{2500}-\\x{2775}]\n\t\t\t\t\t\t\t\t\t | [\\x{2794}-\\x{2BFF}]\n\t\t\t\t\t\t\t\t\t | [\\x{2E00}-\\x{2E7F}]\n\t\t\t\t\t\t\t\t\t | [\\x{3001}-\\x{3003}]\n\t\t\t\t\t\t\t\t\t | [\\x{3008}-\\x{3030}]\n\t\t\t\t\t\t\t\t \n\t\t\t\t\t\t\t\t\t | [\\x{0300}-\\x{036F}]\t\t\t\t# operator-character\n\t\t\t\t\t\t\t\t\t | [\\x{1DC0}-\\x{1DFF}]\n\t\t\t\t\t\t\t\t\t | [\\x{20D0}-\\x{20FF}]\n\t\t\t\t\t\t\t\t\t | [\\x{FE00}-\\x{FE0F}]\n\t\t\t\t\t\t\t\t\t | [\\x{FE20}-\\x{FE2F}]\n\t\t\t\t\t\t\t\t\t | [\\x{E0100}-\\x{E01EF}]\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t)++\n\t\t\t\t\t\t\t\t(?=[\\s)\\]},;:]|\\z)\n\t\t\t\t\t\t\t" }, { "captures": { "0": { "patterns": [ { "match": "\\G\\.\\.[.<]$", "name": "keyword.operator.range.swift" }, { "match": ".+", "name": "keyword.operator.custom.infix.dot.swift" } ] } }, "comment": "Dot infix operator", "match": "(?x)\n\t\t\t\t\t\t\t\t\\G\t\t\t\t\t\t\t\t\t\t# Matching from the beginning ensures\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t# that we start with operator-head\n\t\t\t\t\t\t\t\t\\.\t\t\t\t\t\t\t\t\t\t# dot\n\t\t\t\t\t\t\t\t(\n\t\t\t\t\t\t\t\t\t(?!(//|/\\*|\\*/))\n\t\t\t\t\t\t\t\t\t(\n\t\t\t\t\t\t\t\t\t\t\\.\t\t\t\t\t\t\t\t# dot\n\t\t\t\t\t\t\t\t\t | [/=\\-+!*%<>&|^~?]\t\t\t\t# operator-head\n\t\t\t\t\t\t\t\t\t | [\\x{00A1}-\\x{00A7}]\n\t\t\t\t\t\t\t\t\t | [\\x{00A9}\\x{00AB}]\n\t\t\t\t\t\t\t\t\t | [\\x{00AC}\\x{00AE}]\n\t\t\t\t\t\t\t\t\t | [\\x{00B0}-\\x{00B1}\\x{00B6}\\x{00BB}\\x{00BF}\\x{00D7}\\x{00F7}]\n\t\t\t\t\t\t\t\t\t | [\\x{2016}-\\x{2017}\\x{2020}-\\x{2027}]\n\t\t\t\t\t\t\t\t\t | [\\x{2030}-\\x{203E}]\n\t\t\t\t\t\t\t\t\t | [\\x{2041}-\\x{2053}]\n\t\t\t\t\t\t\t\t\t | [\\x{2055}-\\x{205E}]\n\t\t\t\t\t\t\t\t\t | [\\x{2190}-\\x{23FF}]\n\t\t\t\t\t\t\t\t\t | [\\x{2500}-\\x{2775}]\n\t\t\t\t\t\t\t\t\t | [\\x{2794}-\\x{2BFF}]\n\t\t\t\t\t\t\t\t\t | [\\x{2E00}-\\x{2E7F}]\n\t\t\t\t\t\t\t\t\t | [\\x{3001}-\\x{3003}]\n\t\t\t\t\t\t\t\t\t | [\\x{3008}-\\x{3030}]\n\t\t\t\t\t\t\t\t \n\t\t\t\t\t\t\t\t\t | [\\x{0300}-\\x{036F}]\t\t\t\t# operator-character\n\t\t\t\t\t\t\t\t\t | [\\x{1DC0}-\\x{1DFF}]\n\t\t\t\t\t\t\t\t\t | [\\x{20D0}-\\x{20FF}]\n\t\t\t\t\t\t\t\t\t | [\\x{FE00}-\\x{FE0F}]\n\t\t\t\t\t\t\t\t\t | [\\x{FE20}-\\x{FE2F}]\n\t\t\t\t\t\t\t\t\t | [\\x{E0100}-\\x{E01EF}]\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t)++\n\t\t\t\t\t\t\t" } ] }, { "match": ":", "name": "keyword.operator.ternary.swift" } ] }, "root": { "patterns": [ { "include": "#compiler-control" }, { "include": "#declarations" }, { "include": "#expressions" } ] } } } ================================================ FILE: apps/web/src/lib/shiki/languages/system-verilog.tmLanguage.json ================================================ { "fileTypes": ["sv", "SV", "v", "V", "svh", "SVH", "vh", "VH"], "hidden": true, "name": "system-verilog", "patterns": [ { "begin": "\\s*\\b(function|task)\\b(\\s+automatic)?", "beginCaptures": { "1": { "name": "keyword.control.systemverilog" }, "2": { "name": "keyword.control.systemverilog" } }, "end": ";", "patterns": [ { "match": "\\b([a-zA-Z_][a-zA-Z0-9_]*\\s+)?([a-zA-Z_][a-zA-Z0-9_:]*)\\s*(?=\\(|;)", "captures": { "1": { "name": "storage.type.systemverilog" }, "2": { "name": "entity.name.function.systemverilog" } } }, { "include": "#port-dir" }, { "include": "#base-grammar" } ], "name": "meta.function.systemverilog" }, { "match": "\\s*\\b(task)\\s+(automatic)?\\s*(\\w+)\\s*;", "captures": { "1": { "name": "keyword.control.systemverilog" }, "2": { "name": "keyword.control.systemverilog" }, "3": { "name": "entity.name.function.systemverilog" } }, "name": "meta.task.simple.systemverilog" }, { "begin": "\\s*\\b(typedef\\s+(struct|enum|union)\\b)\\s*(packed)?\\s*([a-zA-Z_][a-zA-Z0-9_]*)?", "beginCaptures": { "1": { "name": "keyword.control.systemverilog" }, "2": { "name": "keyword.control.systemverilog" }, "3": { "name": "keyword.control.systemverilog" }, "4": { "name": "storage.type.systemverilog" } }, "end": "(})\\s*([a-zA-Z_][a-zA-Z0-9_]*)\\s*;", "endCaptures": { "1": { "name": "keyword.operator.other.systemverilog" }, "2": { "name": "entity.name.function.systemverilog" } }, "patterns": [ { "include": "#struct-anonymous" }, { "include": "#base-grammar" } ], "name": "meta.typedef.struct.systemverilog" }, { "match": "\\s*\\b(typedef\\s+class)\\s+([a-zA-Z_][a-zA-Z0-9_]*)\\s*;", "captures": { "1": { "name": "keyword.control.systemverilog" }, "2": { "name": "entity.name.declaration.systemverilog" } }, "name": "meta.typedef.class.systemverilog" }, { "begin": "\\s*\\b(typedef)\\b", "beginCaptures": { "1": { "name": "keyword.control.systemverilog" } }, "end": "([a-zA-Z_][a-zA-Z0-9_]*)\\s*(?=(\\[[a-zA-Z0-9_:\\$\\-\\+]*\\])?;)", "endCaptures": { "1": { "name": "entity.name.function.systemverilog" } }, "patterns": [ { "match": "\\b([a-zA-Z_]\\w*)\\s*(#)\\(", "captures": { "1": { "name": "storage.type.userdefined.systemverilog" }, "2": { "name": "keyword.operator.param.systemverilog" } }, "name": "meta.typedef.class.systemverilog" }, { "include": "#base-grammar" }, { "include": "#module-binding" } ], "name": "meta.typedef.simple.systemverilog" }, { "begin": "\\s*(module)\\s+\\b([a-zA-Z_][a-zA-Z0-9_]*)\\b", "beginCaptures": { "1": { "name": "keyword.control.systemverilog" }, "2": { "name": "entity.name.type.module.systemverilog" } }, "end": ";", "endCaptures": { "1": { "name": "entity.name.function.systemverilog" } }, "patterns": [ { "include": "#port-dir" }, { "match": "\\s*(parameter)", "name": "keyword.other.systemverilog" }, { "include": "#base-grammar" }, { "include": "#ifmodport" }, { "match": "\\$\\b([a-zA-Z_][a-zA-Z0-9_]*)\\b", "name": "support.function.systemverilog" } ], "name": "meta.module.systemverilog" }, { "captures": { "1": { "name": "keyword.control.systemverilog" }, "2": { "name": "entity.name.function.systemverilog" } }, "match": "\\b(sequence)\\s+([a-zA-Z_][a-zA-Z0-9_]*)", "name": "meta.sequence.systemverilog" }, { "match": "\\b(bind)\\s+([a-zA-Z_][a-zA-Z0-9_\\.]*)\\b", "captures": { "1": { "name": "keyword.control.systemverilog" } } }, { "captures": { "0": { "name": "meta.section.begin.systemverilog" }, "1": { "name": "keyword.other.block.systemverilog" }, "3": { "name": "keyword.operator.systemverilog" }, "4": { "name": "entity.name.section.systemverilog" } }, "match": "\\s*(begin|fork)\\s*((:)\\s*([a-zA-Z_][a-zA-Z0-9_]*))\\b", "name": "meta.definition.systemverilog" }, { "match": "\\b(property)\\s+(\\w+)", "captures": { "1": { "name": "keyword.sva.systemverilog" }, "2": { "name": "entity.name.sva.systemverilog" } } }, { "match": "\\b(\\w+)\\s*(:)\\s*(assert)\\b", "captures": { "1": { "name": "entity.name.sva.systemverilog" }, "2": { "name": "keyword.operator.systemverilog" }, "3": { "name": "keyword.sva.systemverilog" } } }, { "begin": "\\s*(//)\\s*(psl)\\s+((\\w+)\\s*(:))?\\s*(default|assert|assume)", "beginCaptures": { "0": { "name": "meta.psl.systemverilog" }, "1": { "name": "comment.line.double-slash.systemverilog" }, "2": { "name": "keyword.psl.systemverilog" }, "4": { "name": "entity.psl.name.systemverilog" }, "5": { "name": "keyword.operator.systemverilog" }, "6": { "name": "keyword.psl.systemverilog" } }, "end": ";", "patterns": [ { "match": "\\b(never|always|default|clock|within|rose|fell|stable|until|before|next|eventually|abort|posedge)\\b", "name": "keyword.psl.systemverilog" }, { "include": "#operators" }, { "include": "#functions" }, { "include": "#constants" } ], "name": "meta.psl.systemverilog" }, { "begin": "\\s*(/\\*)\\s*(psl)", "beginCaptures": { "0": { "name": "meta.psl.systemverilog" }, "1": { "name": "comment.block.systemverilog" }, "2": { "name": "keyword.psl.systemverilog" } }, "end": "(\\*/)", "endCaptures": { "1": { "name": "comment.block.systemverilog" } }, "patterns": [ { "match": "^\\s*((\\w+)\\s*(:))?\\s*(default|assert|assume)", "captures": { "0": { "name": "meta.psl.systemverilog" }, "2": { "name": "entity.psl.name.systemverilog" }, "3": { "name": "keyword.operator.systemverilog" }, "4": { "name": "keyword.psl.systemverilog" } } }, { "match": "\\b(property)\\s+(\\w+)", "captures": { "1": { "name": "keyword.psl.systemverilog" }, "2": { "name": "entity.psl.name.systemverilog" } } }, { "match": "\\b(never|always|default|clock|within|rose|fell|stable|until|before|next|eventually|abort|posedge|negedge)\\b", "name": "keyword.psl.systemverilog" }, { "include": "#operators" }, { "include": "#functions" }, { "include": "#constants" } ], "name": "meta.psl.systemverilog" }, { "match": "\\s*\\b(automatic|cell|config|deassign|defparam|design|disable|edge|endconfig|endgenerate|endspecify|endtable|event|generate|genvar|ifnone|incdir|instance|liblist|library|macromodule|negedge|noshowcancelled|posedge|pulsestyle_onevent|pulsestyle_ondetect|scalared|showcancelled|specify|specparam|table|use|vectored)\\b", "captures": { "1": { "name": "keyword.other.systemverilog" } } }, { "match": "\\s*\\b(initial|always|wait|force|release|assign|always_comb|always_ff|always_latch|forever|repeat|while|for|if|iff|else|case|casex|casez|default|endcase|return|break|continue|do|foreach|with|inside|dist|clocking|cover|coverpoint|property|bins|binsof|illegal_bins|ignore_bins|randcase|modport|matches|solve|static|assert|assume|before|expect|cross|ref|first_match|srandom|struct|packed|final|chandle|alias|tagged|extern|throughout|timeprecision|timeunit|priority|type|union|uwire|wait_order|triggered|randsequence|import|export|context|pure|intersect|wildcard|within|new|typedef|enum|this|super|begin|fork|forkjoin|unique|unique0|priority)\\b", "captures": { "1": { "name": "keyword.control.systemverilog" } } }, { "match": "\\s*\\b(end|endtask|endmodule|endfunction|endprimitive|endclass|endpackage|endsequence|endprogram|endclocking|endproperty|endgroup|endinterface|join|join_any|join_none)\\b(\\s*(:)\\s*(\\w+))?", "captures": { "1": { "name": "keyword.control.systemverilog" }, "3": { "name": "keyword.operator.systemverilog" }, "4": { "name": "entity.label.systemverilog" } }, "name": "meta.object.end.systemverilog" }, { "match": "\\b(std)\\b::", "name": "support.class.systemverilog" }, { "captures": { "1": { "name": "constant.other.define.systemverilog" }, "2": { "name": "entity.name.type.define.systemverilog" } }, "match": "^\\s*(`define)\\s+([a-zA-Z_][a-zA-Z0-9_]*)", "name": "meta.define.systemverilog" }, { "captures": { "1": { "name": "constant.other.undef.systemverilog" }, "2": { "name": "entity.name.type.undef.systemverilog" } }, "match": "^\\s*(`undef)\\s+([a-zA-Z_][a-zA-Z0-9_]*)", "name": "meta.undef.systemverilog" }, { "include": "#comments" }, { "captures": { "1": { "name": "keyword.control.systemverilog" }, "2": { "name": "entity.name.type.class.systemverilog" } }, "match": "\\s*(primitive|package|constraint|interface|covergroup|program)\\s+\\b([a-zA-Z_][a-zA-Z0-9_]*)\\b", "name": "meta.definition.systemverilog" }, { "captures": { "2": { "name": "entity.name.type.class.systemverilog" }, "3": { "name": "keyword.operator.other.systemverilog" }, "4": { "name": "keyword.control.systemverilog" } }, "match": "(([a-zA-Z_][a-zA-Z0-9_]*)\\s*(:))?\\s*(coverpoint|cross)\\s+([a-zA-Z_][a-zA-Z0-9_]*)", "name": "meta.definition.systemverilog" }, { "captures": { "1": { "name": "keyword.control.systemverilog" }, "2": { "name": "keyword.control.systemverilog" }, "3": { "name": "entity.name.type.class.systemverilog" } }, "match": "\\b(virtual\\s+)?(class)\\s+\\b([a-zA-Z_][a-zA-Z0-9_]*)\\b", "name": "meta.definition.class.systemverilog" }, { "captures": { "1": { "name": "keyword.control.systemverilog" }, "2": { "name": "entity.other.inherited-class.systemverilog" } }, "match": "\\b(extends)\\s+([a-zA-Z_][a-zA-Z0-9_]*)\\b", "name": "meta.definition.systemverilog" }, { "include": "#all-types" }, { "include": "#operators" }, { "include": "#port-dir" }, { "match": "\\b(and|nand|nor|or|xor|xnor|buf|not|bufif[01]|notif[01]|r?[npc]mos|tran|r?tranif[01]|pullup|pulldown)\\b", "name": "support.type.systemverilog" }, { "include": "#strings" }, { "match": "\\$\\b([a-zA-Z_][a-zA-Z0-9_]*)\\b", "name": "support.function.systemverilog" }, { "match": "\\b([a-zA-Z_][a-zA-Z0-9_]*)(')(?=\\()", "name": "meta.cast.systemverilog", "captures": { "1": { "name": "storage.type.systemverilog" }, "2": { "name": "keyword.operator.cast.systemverilog" } } }, { "match": "^\\s*(localparam|parameter)\\s+([A-Z_][A-Z0-9_]*)\\b\\s*(?=(=))", "name": "meta.param.systemverilog", "captures": { "1": { "name": "keyword.other.systemverilog" }, "2": { "name": "constant.other.systemverilog" } } }, { "match": "^\\s*(localparam|parameter)\\s+([a-zA-Z_][a-zA-Z0-9_]*)\\b\\s*(?=(=))", "name": "meta.param.systemverilog", "captures": { "1": { "name": "keyword.other.systemverilog" } } }, { "match": "^\\s*(local\\s+|protected\\s+|localparam\\s+|parameter\\s+)?(const\\s+|virtual\\s+)?(rand\\s+|randc\\s+)?(([a-zA-Z_][a-zA-Z0-9_]*)(::))?([a-zA-Z_][a-zA-Z0-9_]*)\\b\\s*(?=(#\\s*\\([\\w,]+\\)\\s*)?([a-zA-Z][a-zA-Z0-9_\\s\\[\\]']*)(;|,|=|'\\{))", "name": "meta.userdefined.systemverilog", "captures": { "1": { "name": "keyword.other.systemverilog" }, "2": { "name": "keyword.other.systemverilog" }, "3": { "name": "storage.type.rand.systemverilog" }, "5": { "name": "support.type.scope.systemverilog" }, "6": { "name": "keyword.operator.scope.systemverilog" }, "7": { "name": "storage.type.userdefined.systemverilog" } } }, { "match": "\\s*\\b(option)\\.", "captures": { "1": { "name": "keyword.cover.systemverilog" } } }, { "match": "\\s*\\b(local|const|protected|virtual|localparam|parameter)\\b", "captures": { "1": { "name": "keyword.other.systemverilog" } } }, { "match": "\\s*\\b(rand|randc)\\b", "name": "storage.type.rand.systemverilog" }, { "begin": "^(\\s*(bind)\\s+([a-zA-Z_][\\w\\.]*))?\\s*([a-zA-Z_][a-zA-Z0-9_]*)\\s*(?=#[^#])", "beginCaptures": { "2": { "name": "keyword.control.systemverilog" }, "4": { "name": "storage.module.systemverilog" } }, "end": "(?=;|=|:)", "patterns": [ { "include": "#module-binding" }, { "include": "#module-param" }, { "include": "#comments" }, { "include": "#operators" }, { "include": "#constants" }, { "include": "#strings" }, { "match": "\\b([a-zA-Z_][a-zA-Z0-9_]*)\\b(?=\\s*(\\(|$))", "name": "entity.name.type.module.systemverilog" } ], "name": "meta.module.inst.param.systemverilog" }, { "begin": "\\b([a-zA-Z_][a-zA-Z0-9_]*)\\s+(?!intersect|and|or|throughout|within)([a-zA-Z_][a-zA-Z0-9_]*)\\s*(\\[(\\d+)(\\:(\\d+))?\\])?\\s*(\\(|$)", "beginCaptures": { "1": { "name": "storage.module.systemverilog" }, "2": { "name": "entity.name.type.module.systemverilog" }, "4": { "name": "constant.numeric.systemverilog" }, "6": { "name": "constant.numeric.systemverilog" } }, "end": ";", "patterns": [ { "include": "#module-binding" }, { "include": "#comments" }, { "include": "#strings" }, { "include": "#operators" }, { "include": "#constants" } ], "name": "meta.module.inst.systemverilog" }, { "name": "meta.struct.assign.systemverilog", "begin": "\\b\\s+(=)\\s*(\\'{)", "beginCaptures": { "1": { "name": "keyword.operator.other.systemverilog" }, "2": { "name": "keyword.operator.other.systemverilog" }, "3": { "name": "keyword.operator.other.systemverilog" } }, "end": ";", "patterns": [ { "match": "\\b(\\w+)\\s*(:)(?!:)", "captures": { "1": { "name": "support.function.field.systemverilog" }, "2": { "name": "keyword.operator.other.systemverilog" } } }, { "include": "#comments" }, { "include": "#strings" }, { "include": "#operators" }, { "include": "#constants" }, { "include": "#storage-scope-systemverilog" } ] }, { "include": "#storage-scope-systemverilog" }, { "include": "#functions" }, { "include": "#constants" } ], "repository": { "functions": { "match": "\\b(\\w+)(?=\\s*\\()", "name": "support.function.generic.systemverilog" }, "all-types": { "patterns": [ { "include": "#storage-type-systemverilog" }, { "include": "#storage-modifier-systemverilog" } ] }, "constants": { "patterns": [ { "match": "(\\b\\d+)?'(s?[bB]\\s*[0-1xXzZ?][0-1_xXzZ?]*|s?[oO]\\s*[0-7xXzZ?][0-7_xXzZ?]*|s?[dD]\\s*[0-9xXzZ?][0-9_xXzZ?]*|s?[hH]\\s*[0-9a-fA-FxXzZ?][0-9a-fA-F_xXzZ?]*)((e|E)(\\+|-)?[0-9]+)?(?!'|\\w)", "name": "constant.numeric.systemverilog" }, { "match": "'[01xXzZ]", "name": "constant.numeric.bit.systemverilog" }, { "match": "\\b((\\d[\\d_]*)(e|E)(\\+|-)?[0-9]+)\\b", "name": "constant.numeric.exp.systemverilog" }, { "match": "\\b(\\d[\\d_]*)\\b", "name": "constant.numeric.decimal.systemverilog" }, { "match": "\\b(\\d+(fs|ps|ns|us|ms|s)?)\\b", "name": "constant.numeric.time.systemverilog" }, { "match": "\\b([A-Z][A-Z0-9_]*)\\b", "name": "constant.other.net.systemverilog" }, { "match": "(`ifdef|`ifndef|`default_nettype)\\s+(\\w+)", "captures": { "1": { "name": "constant.other.preprocessor.systemverilog" }, "2": { "name": "support.variable.systemverilog" } } }, { "match": "`(celldefine|else|elsif|endcelldefine|endif|include|line|nounconnected_drive|resetall|timescale|unconnected_drive|undef|begin_\\w+|end_\\w+|remove_\\w+|restore_\\w+)\\b", "name": "constant.other.preprocessor.systemverilog" }, { "match": "`\\b([a-zA-Z_][a-zA-Z0-9_]*)\\b", "name": "constant.other.define.systemverilog" }, { "match": "\\b(null)\\b", "name": "support.constant.systemverilog" } ] }, "operators": { "patterns": [ { "match": "(=|==|===|!=|!==|<=|>=|<|>)", "name": "keyword.operator.comparison.systemverilog" }, { "match": "(\\-|\\+|\\*|\\/|%)", "name": "keyword.operator.arithmetic.systemverilog" }, { "match": "(!|&&|\\|\\||\\bor\\b)", "name": "keyword.operator.logical.systemverilog" }, { "match": "(&|\\||\\^|~|{|'{|}|<<|>>|\\?|:)", "name": "keyword.operator.bitwise.systemverilog" }, { "match": "(#|@)", "name": "keyword.operator.other.systemverilog" } ] }, "comments": { "patterns": [ { "begin": "/\\*", "captures": { "0": { "name": "punctuation.definition.comment.systemverilog" } }, "end": "\\*/", "name": "comment.block.systemverilog" }, { "captures": { "1": { "name": "punctuation.definition.comment.systemverilog" } }, "match": "(//).*$\\n?", "name": "comment.line.double-slash.systemverilog" } ] }, "port-dir": { "patterns": [ { "match": "\\s*\\b(output|input|inout|ref)\\s+(([a-zA-Z_][a-zA-Z0-9_]*)(::))?([a-zA-Z_][a-zA-Z0-9_]*)?\\s+(?=\\[[a-zA-Z0-9_\\-\\+]*:[a-zA-Z0-9_\\-\\+]*\\]\\s+[a-zA-Z_][a-zA-Z0-9_\\s]*)", "captures": { "1": { "name": "support.type.systemverilog" }, "3": { "name": "support.type.scope.systemverilog" }, "4": { "name": "keyword.operator.scope.systemverilog" }, "5": { "name": "storage.type.interface.systemverilog" } } }, { "match": "\\s*\\b(output|input|inout|ref)\\s+(([a-zA-Z_][a-zA-Z0-9_]*)(::))?([a-zA-Z_][a-zA-Z0-9_]*)?\\s+(?=[a-zA-Z_][a-zA-Z0-9_\\s]*)", "captures": { "1": { "name": "support.type.systemverilog" }, "3": { "name": "support.type.scope.systemverilog" }, "4": { "name": "keyword.operator.scope.systemverilog" }, "5": { "name": "storage.type.interface.systemverilog" } } }, { "match": "\\s*\\b(output|input|inout|ref)\\b", "name": "support.type.systemverilog" } ] }, "base-grammar": { "patterns": [ { "include": "#all-types" }, { "include": "#comments" }, { "include": "#operators" }, { "include": "#constants" }, { "include": "#strings" }, { "match": "^\\s*([a-zA-Z_][a-zA-Z0-9_]*)\\s+[a-zA-Z_][a-zA-Z0-9_,=\\s]*", "captures": { "1": { "name": "storage.type.interface.systemverilog" } } }, { "include": "#storage-scope-systemverilog" } ] }, "storage-type-systemverilog": { "patterns": [ { "match": "\\s*\\b(var|wire|tri|tri[01]|supply[01]|wand|triand|wor|trior|trireg|reg|integer|int|longint|shortint|logic|bit|byte|shortreal|string|time|realtime|real|process|void)\\b", "name": "storage.type.systemverilog" }, { "match": "\\s*\\b(uvm_transaction|uvm_component|uvm_monitor|uvm_driver|uvm_test|uvm_env|uvm_object|uvm_agent|uvm_sequence_base|uvm_sequence|uvm_sequence_item|uvm_sequence_state|uvm_sequencer|uvm_sequencer_base|uvm_component_registry|uvm_analysis_imp|uvm_analysis_port|uvm_analysis_export|uvm_config_db|uvm_active_passive_enum|uvm_phase|uvm_verbosity|uvm_tlm_analysis_fifo|uvm_tlm_fifo|uvm_report_server|uvm_objection|uvm_recorder|uvm_domain|uvm_reg_field|uvm_reg|uvm_reg_block|uvm_bitstream_t|uvm_radix_enum|uvm_printer|uvm_packer|uvm_comparer|uvm_scope_stack)\\b", "name": "storage.type.uvm.systemverilog" } ] }, "storage-scope-systemverilog": { "match": "\\b([a-zA-Z_][a-zA-Z0-9_]*)(::)", "captures": { "1": { "name": "support.type.systemverilog" }, "2": { "name": "keyword.operator.scope.systemverilog" } }, "name": "meta.scope.systemverilog" }, "storage-modifier-systemverilog": { "match": "\\b(signed|unsigned|small|medium|large|supply[01]|strong[01]|pull[01]|weak[01]|highz[01])\\b", "name": "storage.modifier.systemverilog" }, "ifmodport": { "match": "\\b([a-zA-Z_][a-zA-Z0-9_]*)\\.([a-zA-Z_][a-zA-Z0-9_]*)\\s+([a-zA-Z_][a-zA-Z0-9_]*)\\b", "captures": { "1": { "name": "storage.type.interface.systemverilog" }, "2": { "name": "support.modport.systemverilog" } } }, "strings": { "patterns": [ { "begin": "\"", "beginCaptures": { "0": { "name": "punctuation.definition.string.begin.systemverilog" } }, "end": "\"", "endCaptures": { "0": { "name": "punctuation.definition.string.end.systemverilog" } }, "name": "string.quoted.double.systemverilog", "patterns": [ { "match": "\\\\.", "name": "constant.character.escape.systemverilog" }, { "match": "(?x)%\n (\\d+\\$)? # field (argument #)\n [#0\\- +']* # flags\n [,;:_]? # separator character (AltiVec)\n ((-?\\d+)|\\*(-?\\d+\\$)?)? # minimum field width\n (\\.((-?\\d+)|\\*(-?\\d+\\$)?)?)? # precision\n (hh|h|ll|l|j|t|z|q|L|vh|vl|v|hv|hl)? # length modifier\n [bdiouxXhHDOUeEfFgGaACcSspnmt%] # conversion type\n ", "name": "constant.other.placeholder.systemverilog" }, { "match": "%", "name": "invalid.illegal.placeholder.systemverilog" } ] } ] }, "module-binding": { "begin": "\\.([a-zA-Z_][a-zA-Z0-9_]*)\\s*\\(", "beginCaptures": { "1": { "name": "support.function.port.systemverilog" } }, "end": "\\)", "patterns": [ { "include": "#constants" }, { "include": "#comments" }, { "include": "#operators" }, { "include": "#strings" }, { "include": "#constants" }, { "match": "\\b([a-zA-Z_]\\w*)(::)", "captures": { "1": { "name": "support.type.scope.systemverilog" }, "2": { "name": "keyword.operator.scope.systemverilog" } } }, { "match": "\\b([a-zA-Z_]\\w*)(')", "captures": { "1": { "name": "storage.type.interface.systemverilog" }, "2": { "name": "keyword.operator.cast.systemverilog" } } }, { "match": "\\$\\b([a-zA-Z_][a-zA-Z0-9_]*)\\b", "name": "support.function.systemverilog" }, { "match": "\\b(virtual)\\b", "name": "keyword.control.systemverilog" } ], "match": "\\.([a-zA-Z_][a-zA-Z0-9_]*)\\s*", "captures": { "1": { "name": "support.function.port.implicit.systemverilog" } } }, "module-param": { "name": "meta.module-param.systemverilog", "begin": "(#)\\s*\\(", "beginCaptures": { "1": { "name": "keyword.operator.param.systemverilog" } }, "end": "\\)", "patterns": [ { "include": "#comments" }, { "include": "#constants" }, { "include": "#operators" }, { "include": "#strings" }, { "include": "#module-binding" }, { "match": "\\b(virtual)\\b", "name": "keyword.control.systemverilog" } ] }, "struct-anonymous": { "begin": "\\s*\\b(struct|union)\\s*(packed)?\\s*", "beginCaptures": { "1": { "name": "keyword.control.systemverilog" }, "2": { "name": "keyword.control.systemverilog" } }, "end": "(})\\s*([a-zA-Z_]\\w*)\\s*;", "endCaptures": { "1": { "name": "keyword.operator.other.systemverilog" } }, "patterns": [ { "include": "#base-grammar" } ], "name": "meta.struct.anonymous.systemverilog" } }, "scopeName": "source.systemverilog", "uuid": "789be04c-8b74-352e-8f37-63d336001277" } ================================================ FILE: apps/web/src/lib/shiki/languages/tasl.tmLanguage.json ================================================ { "$schema": "https://raw.githubusercontent.com/martinring/tmlanguage/master/tmlanguage.json", "scopeName": "source.tasl", "name": "tasl", "fileTypes": ["tasl"], "patterns": [ { "include": "#comment" }, { "include": "#namespace" }, { "include": "#type" }, { "include": "#class" }, { "include": "#edge" } ], "repository": { "comment": { "match": "(#).*$", "name": "comment.line.number-sign.tasl", "captures": { "1": { "name": "punctuation.definition.comment.tasl" } } }, "namespace": { "match": "(?:^\\s*)(namespace)\\b(.*)", "captures": { "1": { "name": "keyword.control.tasl.namespace" }, "2": { "patterns": [ { "include": "#namespaceURI" }, { "match": "[a-zA-Z][a-zA-Z0-9]*\\b", "name": "entity.name" } ] } } }, "type": { "begin": "(?:^\\s*)(type)\\b", "beginCaptures": { "1": { "name": "keyword.control.tasl.type" } }, "end": "$", "patterns": [ { "include": "#expression" } ] }, "class": { "begin": "(?:^\\s*)(class)\\b", "beginCaptures": { "1": { "name": "keyword.control.tasl.class" } }, "end": "$", "patterns": [ { "include": "#key" }, { "include": "#export" }, { "include": "#expression" } ] }, "edge": { "begin": "(?:^\\s*)(edge)\\b", "beginCaptures": { "1": { "name": "keyword.control.tasl.edge" } }, "end": "$", "patterns": [ { "include": "#key" }, { "include": "#export" }, { "match": "=/", "name": "punctuation.separator.tasl.edge.source" }, { "match": "/=>", "name": "punctuation.separator.tasl.edge.target" }, { "match": "=>", "name": "punctuation.separator.tasl.edge" }, { "include": "#expression" } ] }, "export": { "match": "::", "name": "keyword.operator.tasl.export" }, "expression": { "patterns": [ { "include": "#literal" }, { "include": "#uri" }, { "include": "#product" }, { "include": "#coproduct" }, { "include": "#reference" }, { "include": "#optional" }, { "include": "#identifier" } ] }, "literal": { "patterns": [ { "include": "#datatype" } ] }, "uri": { "match": "<>", "name": "variable.other.constant" }, "product": { "begin": "{", "beginCaptures": { "0": { "name": "punctuation.definition.block.tasl.product" } }, "end": "}", "endCaptures": { "0": { "name": "punctuation.definition.block.tasl.product" } }, "patterns": [ { "include": "#comment" }, { "include": "#term" }, { "include": "#component" } ] }, "component": { "begin": "->", "end": "$", "beginCaptures": { "0": { "name": "punctuation.separator.tasl.component" } }, "patterns": [ { "include": "#expression" } ] }, "coproduct": { "begin": "\\[", "beginCaptures": { "0": { "name": "punctuation.definition.block.tasl.coproduct" } }, "end": "\\]", "endCaptures": { "0": { "name": "punctuation.definition.block.tasl.coproduct" } }, "patterns": [ { "include": "#comment" }, { "include": "#term" }, { "include": "#option" } ] }, "option": { "begin": "<-", "end": "$", "beginCaptures": { "0": { "name": "punctuation.separator.tasl.option" } }, "patterns": [ { "include": "#expression" } ] }, "reference": { "match": "(\\*)\\s*(.*)", "captures": { "1": { "name": "markup.bold keyword.operator" }, "2": { "patterns": [ { "include": "#key" } ] } } }, "identifier": { "match": "([a-zA-Z][a-zA-Z0-9]*)\\b", "captures": { "1": { "name": "variable" } } }, "optional": { "begin": "\\?", "beginCaptures": { "0": { "name": "keyword.operator" } }, "end": "$", "patterns": [ { "include": "#expression" } ] }, "namespaceURI": { "match": "[a-z]+:[a-zA-Z0-9-._~:\\/?#\\[\\]@!$&'()*+,;%=]+", "name": "markup.underline.link" }, "key": { "match": "[a-zA-Z][a-zA-Z0-9]*:(?:[A-Za-z0-9\\-._~!$&'()*+,;=:@/?]|%[0-9A-Fa-f]{2})+", "name": "markup.bold entity.name.class" }, "datatype": { "match": "[a-zA-Z][a-zA-Z0-9]*:(?:[A-Za-z0-9\\-._~!$&'()*+,;=:@/?]|%[0-9A-Fa-f]{2})+", "name": "string.regexp" }, "term": { "match": "[a-zA-Z][a-zA-Z0-9]*:(?:[A-Za-z0-9\\-._~!$&'()*+,;=:@/?]|%[0-9A-Fa-f]{2})+", "name": "entity.other.tasl.key" } } } ================================================ FILE: apps/web/src/lib/shiki/languages/tcl.tmLanguage.json ================================================ { "fileTypes": ["tcl"], "foldingStartMarker": "\\{\\s*$", "foldingStopMarker": "^\\s*\\}", "keyEquivalent": "^~T", "name": "tcl", "patterns": [ { "begin": "(?<=^|;)\\s*((#))", "beginCaptures": { "1": { "name": "comment.line.number-sign.tcl" }, "2": { "name": "punctuation.definition.comment.tcl" } }, "contentName": "comment.line.number-sign.tcl", "end": "\\n", "patterns": [ { "match": "(\\\\\\\\|\\\\\\n)" } ] }, { "captures": { "1": { "name": "keyword.control.tcl" } }, "match": "(?<=^|[\\[{;])\\s*(if|while|for|catch|default|return|break|continue|switch|exit|foreach|try|throw)\\b" }, { "captures": { "1": { "name": "keyword.control.tcl" } }, "match": "(?<=^|})\\s*(then|elseif|else)\\b" }, { "captures": { "1": { "name": "keyword.other.tcl" }, "2": { "name": "entity.name.function.tcl" } }, "match": "(?<=^|{)\\s*(proc)\\s+([^\\s]+)" }, { "captures": { "1": { "name": "keyword.other.tcl" } }, "match": "(?<=^|[\\[{;])\\s*(after|append|array|auto_execok|auto_import|auto_load|auto_mkindex|auto_mkindex_old|auto_qualify|auto_reset|bgerror|binary|cd|clock|close|concat|dde|encoding|eof|error|eval|exec|expr|fblocked|fconfigure|fcopy|file|fileevent|filename|flush|format|gets|glob|global|history|http|incr|info|interp|join|lappend|library|lindex|linsert|list|llength|load|lrange|lreplace|lsearch|lset|lsort|memory|msgcat|namespace|open|package|parray|pid|pkg::create|pkg_mkIndex|proc|puts|pwd|re_syntax|read|registry|rename|resource|scan|seek|set|socket|SafeBase|source|split|string|subst|Tcl|tcl_endOfWord|tcl_findLibrary|tcl_startOfNextWord|tcl_startOfPreviousWord|tcl_wordBreakAfter|tcl_wordBreakBefore|tcltest|tclvars|tell|time|trace|unknown|unset|update|uplevel|upvar|variable|vwait)\\b" }, { "begin": "(?<=^|[\\[{;])\\s*(regexp|regsub)\\b\\s*", "beginCaptures": { "1": { "name": "keyword.other.tcl" } }, "comment": "special-case regexp/regsub keyword in order to handle the expression", "end": "[\\n;\\]]", "patterns": [ { "match": "\\\\(?:.|\\n)", "name": "constant.character.escape.tcl" }, { "comment": "switch for regexp", "match": "-\\w+\\s*" }, { "applyEndPatternLast": 1, "begin": "--\\s*", "comment": "end of switches", "end": "", "patterns": [ { "include": "#regexp" } ] }, { "include": "#regexp" } ] }, { "include": "#escape" }, { "include": "#variable" }, { "include": "#operator" }, { "include": "#numeric" }, { "begin": "\"", "beginCaptures": { "0": { "name": "punctuation.definition.string.begin.tcl" } }, "end": "\"", "endCaptures": { "0": { "name": "punctuation.definition.string.end.tcl" } }, "name": "string.quoted.double.tcl", "patterns": [ { "include": "#escape" }, { "include": "#variable" }, { "include": "#embedded" } ] } ], "repository": { "bare-string": { "begin": "(?:^|(?<=\\s))\"", "comment": "matches a single quote-enclosed word without scoping", "end": "\"([^\\s\\]]*)", "endCaptures": { "1": { "name": "invalid.illegal.tcl" } }, "patterns": [ { "include": "#escape" }, { "include": "#variable" } ] }, "braces": { "begin": "(?:^|(?<=\\s))\\{", "comment": "matches a single brace-enclosed word", "end": "\\}([^\\s\\]]*)", "endCaptures": { "1": { "name": "invalid.illegal.tcl" } }, "patterns": [ { "match": "\\\\[{}\\n]", "name": "constant.character.escape.tcl" }, { "include": "#inner-braces" } ] }, "embedded": { "begin": "\\[", "beginCaptures": { "0": { "name": "punctuation.section.embedded.begin.tcl" } }, "end": "\\]", "endCaptures": { "0": { "name": "punctuation.section.embedded.end.tcl" } }, "name": "source.tcl.embedded", "patterns": [ { "include": "source.tcl" } ] }, "escape": { "match": "\\\\(\\d{1,3}|x[a-fA-F0-9]+|u[a-fA-F0-9]{1,4}|.|\\n)", "name": "constant.character.escape.tcl" }, "inner-braces": { "begin": "\\{", "comment": "matches a nested brace in a brace-enclosed word", "end": "\\}", "patterns": [ { "match": "\\\\[{}\\n]", "name": "constant.character.escape.tcl" }, { "include": "#inner-braces" } ] }, "regexp": { "begin": "(?=\\S)(?![\\n;\\]])", "comment": "matches a single word, named as a regexp, then swallows the rest of the command", "end": "(?=[\\n;\\]])", "patterns": [ { "begin": "(?=[^ \\t\\n;])", "end": "(?=[ \\t\\n;])", "name": "string.regexp.tcl", "patterns": [ { "include": "#braces" }, { "include": "#bare-string" }, { "include": "#escape" }, { "include": "#variable" } ] }, { "begin": "[ \\t]", "comment": "swallow the rest of the command", "end": "(?=[\\n;\\]])", "patterns": [ { "include": "#variable" }, { "include": "#embedded" }, { "include": "#escape" }, { "include": "#braces" }, { "include": "#string" } ] } ] }, "string": { "applyEndPatternLast": 1, "begin": "(?:^|(?<=\\s))(?=\")", "comment": "matches a single quote-enclosed word with scoping", "end": "", "name": "string.quoted.double.tcl", "patterns": [ { "include": "#bare-string" } ] }, "variable": { "captures": { "1": { "name": "punctuation.definition.variable.tcl" } }, "match": "(\\$)((?:[a-zA-Z0-9_]|::)+(\\([^\\)]+\\))?|\\{[^\\}]*\\})", "name": "support.function.tcl" }, "numeric": { "match": "(?{1,2}|\\*{1,2}|!|%|\\/|<=|>=|={1,2}|!=|\\^)(?= |\\d)", "name": "keyword.operator.tcl" } }, "scopeName": "source.tcl", "uuid": "62E11136-D9E5-461C-BE98-54E3A2A9E5E3" } ================================================ FILE: apps/web/src/lib/shiki/languages/tex.tmLanguage.json ================================================ { "information_for_contributors": [ "This file has been converted from https://github.com/jlelong/vscode-latex-basics/blob/master/syntaxes/TeX.tmLanguage.json", "If you want to provide a fix or improvement, please create a pull request against the original repository.", "Once accepted there, we are happy to receive an update request." ], "version": "https://github.com/jlelong/vscode-latex-basics/commit/8776a0856846b63d9e5765e8ec42a8a2f4f52219", "name": "tex", "scopeName": "text.tex", "patterns": [ { "captures": { "1": { "name": "punctuation.definition.keyword.tex" } }, "match": "(\\\\)(backmatter|else|fi|frontmatter|mainmatter|if(case|cat|dim|eof|false|hbox|hmode|inner|mmode|num|odd|true|undefined|vbox|vmode|void|x)?)(?![a-zA-Z@])", "name": "keyword.control.tex" }, { "captures": { "1": { "name": "keyword.control.catcode.tex" }, "2": { "name": "punctuation.definition.keyword.tex" }, "3": { "name": "punctuation.separator.key-value.tex" }, "4": { "name": "constant.numeric.category.tex" } }, "match": "((\\\\)catcode)`(?:\\\\)?.(=)(\\d+)", "name": "meta.catcode.tex" }, { "begin": "(^[ \\t]+)?(?=%)", "beginCaptures": { "1": { "name": "punctuation.whitespace.comment.leading.tex" } }, "end": "(?!\\G)", "patterns": [ { "begin": "%:", "beginCaptures": { "0": { "name": "punctuation.definition.comment.tex" } }, "end": "$\\n?", "name": "comment.line.percentage.tex" }, { "begin": "^(%!TEX) (\\S*) =", "beginCaptures": { "1": { "name": "punctuation.definition.comment.tex" } }, "end": "$\\n?", "name": "comment.line.percentage.directive.tex" }, { "begin": "%", "beginCaptures": { "0": { "name": "punctuation.definition.comment.tex" } }, "end": "$\\n?", "name": "comment.line.percentage.tex" } ] }, { "match": "[\\[\\]]", "name": "punctuation.definition.brackets.tex" }, { "begin": "(\\$\\$|\\$)", "beginCaptures": { "1": { "name": "punctuation.definition.string.begin.tex" } }, "end": "(\\1)", "endCaptures": { "1": { "name": "punctuation.definition.string.end.tex" } }, "name": "meta.math.block.tex support.class.math.block.tex", "patterns": [ { "match": "\\\\\\$", "name": "constant.character.escape.tex" }, { "include": "#math" }, { "include": "$self" } ] }, { "match": "\\\\\\\\", "name": "keyword.control.newline.tex" }, { "captures": { "1": { "name": "punctuation.definition.function.tex" } }, "match": "(\\\\)(?:[A-Za-z@]+|[,;])", "name": "support.function.general.tex" }, { "captures": { "1": { "name": "punctuation.definition.keyword.tex" } }, "match": "(\\\\)[^a-zA-Z@]", "name": "constant.character.escape.tex" } ], "repository": { "math": { "patterns": [ { "begin": "((\\\\)(?:text|mbox))(\\{)", "beginCaptures": { "1": { "name": "constant.other.math.tex" }, "2": { "name": "punctuation.definition.function.tex" }, "3": { "name": "punctuation.definition.arguments.begin.tex meta.text.normal.tex" } }, "contentName": "meta.text.normal.tex", "end": "\\}", "endCaptures": { "0": { "name": "punctuation.definition.arguments.end.tex meta.text.normal.tex" } }, "patterns": [ { "include": "#math" }, { "include": "$base" } ] }, { "match": "\\\\{|\\\\}", "name": "punctuation.math.bracket.pair.tex" }, { "match": "\\\\(left|right|((big|bigg|Big|Bigg)[lr]?))([\\(\\[\\<\\>\\]\\)\\.\\|]|\\\\[{}|]|\\\\[lr]?[Vv]ert|\\\\[lr]angle)", "name": "punctuation.math.bracket.pair.big.tex" }, { "captures": { "1": { "name": "punctuation.definition.constant.math.tex" } }, "match": "(\\\\)(s(s(earrow|warrow|lash)|h(ort(downarrow|uparrow|parallel|leftarrow|rightarrow|mid)|arp)|tar|i(gma|m(eq)?)|u(cc(sim|n(sim|approx)|curlyeq|eq|approx)?|pset(neq(q)?|plus(eq)?|eq(q)?)?|rd|m|bset(neq(q)?|plus(eq)?|eq(q)?)?)|p(hericalangle|adesuit)|e(tminus|arrow)|q(su(pset(eq)?|bset(eq)?)|c(up|ap)|uare)|warrow|m(ile|all(s(etminus|mile)|frown)))|h(slash|ook(leftarrow|rightarrow)|eartsuit|bar)|R(sh|ightarrow|e|bag)|Gam(e|ma)|n(s(hort(parallel|mid)|im|u(cc(eq)?|pseteq(q)?|bseteq))|Rightarrow|n(earrow|warrow)|cong|triangle(left(eq(slant)?)?|right(eq(slant)?)?)|i(plus)?|u|p(lus|arallel|rec(eq)?)|e(q|arrow|g|xists)|v(dash|Dash)|warrow|le(ss|q(slant|q)?|ft(arrow|rightarrow))|a(tural|bla)|VDash|rightarrow|g(tr|eq(slant|q)?)|mid|Left(arrow|rightarrow))|c(hi|irc(eq|le(d(circ|S|dash|ast)|arrow(left|right)))?|o(ng|prod|lon|mplement)|dot(s|p)?|u(p|r(vearrow(left|right)|ly(eq(succ|prec)|vee(downarrow|uparrow)?|wedge(downarrow|uparrow)?)))|enterdot|lubsuit|ap)|Xi|Maps(to(char)?|from(char)?)|B(ox|umpeq|bbk)|t(h(ick(sim|approx)|e(ta|refore))|imes|op|wohead(leftarrow|rightarrow)|a(u|lloblong)|riangle(down|q|left(eq(slant)?)?|right(eq(slant)?)?)?)|i(n(t(er(cal|leave))?|plus|fty)?|ota|math)|S(igma|u(pset|bset))|zeta|o(slash|times|int|dot|plus|vee|wedge|lessthan|greaterthan|m(inus|ega)|b(slash|long|ar))|d(i(v(ideontimes)?|a(g(down|up)|mond(suit)?)|gamma)|o(t(plus|eq(dot)?)|ublebarwedge|wn(harpoon(left|right)|downarrows|arrow))|d(ots|agger)|elta|a(sh(v|leftarrow|rightarrow)|leth|gger))|Y(down|up|left|right)|C(up|ap)|u(n(lhd|rhd)|p(silon|harpoon(left|right)|downarrow|uparrows|lus|arrow)|lcorner|rcorner)|jmath|Theta|Im|p(si|hi|i(tchfork)?|erp|ar(tial|allel)|r(ime|o(d|pto)|ec(sim|n(sim|approx)|curlyeq|eq|approx)?)|m)|e(t(h|a)|psilon|q(slant(less|gtr)|circ|uiv)|ll|xists|mptyset)|Omega|D(iamond|ownarrow|elta)|v(d(ots|ash)|ee(bar)?|Dash|ar(s(igma|u(psetneq(q)?|bsetneq(q)?))|nothing|curly(vee|wedge)|t(heta|imes|riangle(left|right)?)|o(slash|circle|times|dot|plus|vee|wedge|lessthan|ast|greaterthan|minus|b(slash|ar))|p(hi|i|ropto)|epsilon|kappa|rho|bigcirc))|kappa|Up(silon|downarrow|arrow)|Join|f(orall|lat|a(t(s(emi|lash)|bslash)|llingdotseq)|rown)|P(si|hi|i)|w(p|edge|r)|l(hd|n(sim|eq(q)?|approx)|ceil|times|ightning|o(ng(left(arrow|rightarrow)|rightarrow|maps(to|from))|zenge|oparrow(left|right))|dot(s|p)|e(ss(sim|dot|eq(qgtr|gtr)|approx|gtr)|q(slant|q)?|ft(slice|harpoon(down|up)|threetimes|leftarrows|arrow(t(ail|riangle))?|right(squigarrow|harpoons|arrow(s|triangle|eq)?))|adsto)|vertneqq|floor|l(c(orner|eil)|floor|l|bracket)?|a(ngle|mbda)|rcorner|bag)|a(s(ymp|t)|ngle|pprox(eq)?|l(pha|eph)|rrownot|malg)|V(dash|vdash)|r(h(o|d)|ceil|times|i(singdotseq|ght(s(quigarrow|lice)|harpoon(down|up)|threetimes|left(harpoons|arrows)|arrow(t(ail|riangle))?|rightarrows))|floor|angle|r(ceil|parenthesis|floor|bracket)|bag)|g(n(sim|eq(q)?|approx)|tr(sim|dot|eq(qless|less)|less|approx)|imel|eq(slant|q)?|vertneqq|amma|g(g)?)|Finv|xi|m(ho|i(nuso|d)|o(o|dels)|u(ltimap)?|p|e(asuredangle|rge)|aps(to|from(char)?))|b(i(n(dnasrepma|ampersand)|g(s(tar|qc(up|ap))|nplus|c(irc|u(p|rly(vee|wedge))|ap)|triangle(down|up)|interleave|o(times|dot|plus)|uplus|parallel|vee|wedge|box))|o(t|wtie|x(slash|circle|times|dot|plus|empty|ast|minus|b(slash|ox|ar)))|u(llet|mpeq)|e(cause|t(h|ween|a))|lack(square|triangle(down|left|right)?|lozenge)|a(ck(s(im(eq)?|lash)|prime|epsilon)|r(o|wedge))|bslash)|L(sh|ong(left(arrow|rightarrow)|rightarrow|maps(to|from))|eft(arrow|rightarrow)|leftarrow|ambda|bag)|Arrownot)(?=\\b|_)", "name": "constant.character.math.tex" }, { "captures": { "1": { "name": "punctuation.definition.constant.math.tex" } }, "match": "(\\\\)(sum|prod|coprod|int|oint|bigcap|bigcup|bigsqcup|bigvee|bigwedge|bigodot|bigotimes|bogoplus|biguplus)\\b", "name": "constant.character.math.tex" }, { "captures": { "1": { "name": "punctuation.definition.constant.math.tex" } }, "match": "(\\\\)(arccos|arcsin|arctan|arg|cos|cosh|cot|coth|csc|deg|det|dim|exp|gcd|hom|inf|ker|lg|lim|liminf|limsup|ln|log|max|min|pr|sec|sin|sinh|sup|tan|tanh)\\b", "name": "constant.other.math.tex" }, { "begin": "((\\\\)Sexpr(\\{))", "beginCaptures": { "1": { "name": "support.function.sexpr.math.tex" }, "2": { "name": "punctuation.definition.function.math.tex" }, "3": { "name": "punctuation.section.embedded.begin.math.tex" } }, "contentName": "support.function.sexpr.math.tex", "end": "(((\\})))", "endCaptures": { "1": { "name": "support.function.sexpr.math.tex" }, "2": { "name": "punctuation.section.embedded.end.math.tex" }, "3": { "name": "source.r" } }, "name": "meta.embedded.line.r", "patterns": [ { "begin": "\\G(?!\\})", "end": "(?=\\})", "name": "source.r", "patterns": [ { "include": "source.r" } ] } ] }, { "captures": { "1": { "name": "punctuation.definition.constant.math.tex" } }, "match": "(\\\\)(?!begin\\{|verb)([A-Za-z]+)", "name": "constant.other.general.math.tex" }, { "match": "(?)\n )) |\n ((async\\s*)?(\n ((<\\s*$)|([\\(]\\s*((([\\{\\[]\\s*)?$)|((\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})\\s*((:\\s*\\{?$)|((\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<([^<>]|\\<[^<>]+\\>)+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*)))|((\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])\\s*((:\\s*\\[?$)|((\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<([^<>]|\\<[^<>]+\\>)+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*)))))) |\n # sure shot arrow functions even if => is on new line\n(\n (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<])*\\>)*\\>)*>\\s*)?\n [(]\\s*(\\/\\*([^\\*]|(\\*[^\\/]))*\\*\\/\\s*)*\n (\n ([)]\\s*:) | # ():\n ((\\.\\.\\.\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\s*:) # [(]param: | [(]...param:\n )\n) |\n(\n [<]\\s*[_$[:alpha:]][_$[:alnum:]]*\\s+extends\\s*[^=>] # < typeparam extends\n) |\n# arrow function possible to detect only with => on same line\n(\n (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<])*\\>)*\\>)*>\\s*)? # typeparameters\n \\(\\s*(\\/\\*([^\\*]|(\\*[^\\/]))*\\*\\/\\s*)*(([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])|(\\.\\.\\.\\s*[_$[:alpha:]]))([^()\\'\\\"\\`]|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\'([^\\'\\\\]|\\\\.)*\\')|(\\\"([^\\\"\\\\]|\\\\.)*\\\")|(\\`([^\\`\\\\]|\\\\.)*\\`))*)?\\) # parameters\n (\\s*:\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<([^<>]|\\<[^<>]+\\>)+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+)? # return type\n \\s*=> # arrow operator\n)\n ))\n)) |\n# typeannotation is fn type: < | () | (... | (param: | (param, | (param? | (param= | (param) =>\n(:\\s*(\n (<) |\n ([(]\\s*(\n ([)]) |\n (\\.\\.\\.) |\n ([_$[:alnum:]]+\\s*(\n ([:,?=])|\n ([)]\\s*=>)\n ))\n ))\n)) |\n(:\\s*(?\\(\\)\\{\\}]|\\<([^<>]|\\<([^<>]|\\<[^<>]+\\>)+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*)))|((\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])\\s*((:\\s*\\[?$)|((\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<([^<>]|\\<[^<>]+\\>)+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*))))))) |\n(:\\s*(=>|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(<[^<>]*>)|[^<>(),=])+=\\s*(\n ((async\\s+)?(\n (function\\s*[(<*]) |\n (function\\s+) |\n ([_$[:alpha:]][_$[:alnum:]]*\\s*=>)\n )) |\n ((async\\s*)?(\n ((<\\s*$)|([\\(]\\s*((([\\{\\[]\\s*)?$)|((\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})\\s*((:\\s*\\{?$)|((\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<([^<>]|\\<[^<>]+\\>)+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*)))|((\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])\\s*((:\\s*\\[?$)|((\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<([^<>]|\\<[^<>]+\\>)+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*)))))) |\n # sure shot arrow functions even if => is on new line\n(\n (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<])*\\>)*\\>)*>\\s*)?\n [(]\\s*(\\/\\*([^\\*]|(\\*[^\\/]))*\\*\\/\\s*)*\n (\n ([)]\\s*:) | # ():\n ((\\.\\.\\.\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\s*:) # [(]param: | [(]...param:\n )\n) |\n(\n [<]\\s*[_$[:alpha:]][_$[:alnum:]]*\\s+extends\\s*[^=>] # < typeparam extends\n) |\n# arrow function possible to detect only with => on same line\n(\n (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<])*\\>)*\\>)*>\\s*)? # typeparameters\n \\(\\s*(\\/\\*([^\\*]|(\\*[^\\/]))*\\*\\/\\s*)*(([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])|(\\.\\.\\.\\s*[_$[:alpha:]]))([^()\\'\\\"\\`]|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\'([^\\'\\\\]|\\\\.)*\\')|(\\\"([^\\\"\\\\]|\\\\.)*\\\")|(\\`([^\\`\\\\]|\\\\.)*\\`))*)?\\) # parameters\n (\\s*:\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<([^<>]|\\<[^<>]+\\>)+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+)? # return type\n \\s*=> # arrow operator\n)\n ))\n)))", "beginCaptures": { "1": { "name": "meta.definition.variable.tsx entity.name.function.tsx" }, "2": { "name": "keyword.operator.definiteassignment.tsx" } }, "end": "(?=$|^|[;,=}]|((?)\n )) |\n ((async\\s*)?(\n ((<\\s*$)|([\\(]\\s*((([\\{\\[]\\s*)?$)|((\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})\\s*((:\\s*\\{?$)|((\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<([^<>]|\\<[^<>]+\\>)+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*)))|((\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])\\s*((:\\s*\\[?$)|((\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<([^<>]|\\<[^<>]+\\>)+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*)))))) |\n # sure shot arrow functions even if => is on new line\n(\n (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<])*\\>)*\\>)*>\\s*)?\n [(]\\s*(\\/\\*([^\\*]|(\\*[^\\/]))*\\*\\/\\s*)*\n (\n ([)]\\s*:) | # ():\n ((\\.\\.\\.\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\s*:) # [(]param: | [(]...param:\n )\n) |\n(\n [<]\\s*[_$[:alpha:]][_$[:alnum:]]*\\s+extends\\s*[^=>] # < typeparam extends\n) |\n# arrow function possible to detect only with => on same line\n(\n (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<])*\\>)*\\>)*>\\s*)? # typeparameters\n \\(\\s*(\\/\\*([^\\*]|(\\*[^\\/]))*\\*\\/\\s*)*(([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])|(\\.\\.\\.\\s*[_$[:alpha:]]))([^()\\'\\\"\\`]|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\'([^\\'\\\\]|\\\\.)*\\')|(\\\"([^\\\"\\\\]|\\\\.)*\\\")|(\\`([^\\`\\\\]|\\\\.)*\\`))*)?\\) # parameters\n (\\s*:\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<([^<>]|\\<[^<>]+\\>)+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+)? # return type\n \\s*=> # arrow operator\n)\n ))\n)) |\n# typeannotation is fn type: < | () | (... | (param: | (param, | (param? | (param= | (param) =>\n(:\\s*(\n (<) |\n ([(]\\s*(\n ([)]) |\n (\\.\\.\\.) |\n ([_$[:alnum:]]+\\s*(\n ([:,?=])|\n ([)]\\s*=>)\n ))\n ))\n)) |\n(:\\s*(?\\(\\)\\{\\}]|\\<([^<>]|\\<([^<>]|\\<[^<>]+\\>)+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*)))|((\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])\\s*((:\\s*\\[?$)|((\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<([^<>]|\\<[^<>]+\\>)+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*))))))) |\n(:\\s*(=>|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(<[^<>]*>)|[^<>(),=])+=\\s*(\n ((async\\s+)?(\n (function\\s*[(<*]) |\n (function\\s+) |\n ([_$[:alpha:]][_$[:alnum:]]*\\s*=>)\n )) |\n ((async\\s*)?(\n ((<\\s*$)|([\\(]\\s*((([\\{\\[]\\s*)?$)|((\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})\\s*((:\\s*\\{?$)|((\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<([^<>]|\\<[^<>]+\\>)+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*)))|((\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])\\s*((:\\s*\\[?$)|((\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<([^<>]|\\<[^<>]+\\>)+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*)))))) |\n # sure shot arrow functions even if => is on new line\n(\n (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<])*\\>)*\\>)*>\\s*)?\n [(]\\s*(\\/\\*([^\\*]|(\\*[^\\/]))*\\*\\/\\s*)*\n (\n ([)]\\s*:) | # ():\n ((\\.\\.\\.\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\s*:) # [(]param: | [(]...param:\n )\n) |\n(\n [<]\\s*[_$[:alpha:]][_$[:alnum:]]*\\s+extends\\s*[^=>] # < typeparam extends\n) |\n# arrow function possible to detect only with => on same line\n(\n (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<])*\\>)*\\>)*>\\s*)? # typeparameters\n \\(\\s*(\\/\\*([^\\*]|(\\*[^\\/]))*\\*\\/\\s*)*(([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])|(\\.\\.\\.\\s*[_$[:alpha:]]))([^()\\'\\\"\\`]|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\'([^\\'\\\\]|\\\\.)*\\')|(\\\"([^\\\"\\\\]|\\\\.)*\\\")|(\\`([^\\`\\\\]|\\\\.)*\\`))*)?\\) # parameters\n (\\s*:\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<([^<>]|\\<[^<>]+\\>)+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+)? # return type\n \\s*=> # arrow operator\n)\n ))\n)))", "beginCaptures": { "1": { "name": "meta.definition.variable.tsx variable.other.constant.tsx entity.name.function.tsx" } }, "end": "(?=$|^|[;,=}]|((?)\n )) |\n ((async\\s*)?(\n ((<\\s*$)|([\\(]\\s*((([\\{\\[]\\s*)?$)|((\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})\\s*((:\\s*\\{?$)|((\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<([^<>]|\\<[^<>]+\\>)+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*)))|((\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])\\s*((:\\s*\\[?$)|((\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<([^<>]|\\<[^<>]+\\>)+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*)))))) |\n # sure shot arrow functions even if => is on new line\n(\n (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<])*\\>)*\\>)*>\\s*)?\n [(]\\s*(\\/\\*([^\\*]|(\\*[^\\/]))*\\*\\/\\s*)*\n (\n ([)]\\s*:) | # ():\n ((\\.\\.\\.\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\s*:) # [(]param: | [(]...param:\n )\n) |\n(\n [<]\\s*[_$[:alpha:]][_$[:alnum:]]*\\s+extends\\s*[^=>] # < typeparam extends\n) |\n# arrow function possible to detect only with => on same line\n(\n (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<])*\\>)*\\>)*>\\s*)? # typeparameters\n \\(\\s*(\\/\\*([^\\*]|(\\*[^\\/]))*\\*\\/\\s*)*(([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])|(\\.\\.\\.\\s*[_$[:alpha:]]))([^()\\'\\\"\\`]|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\'([^\\'\\\\]|\\\\.)*\\')|(\\\"([^\\\"\\\\]|\\\\.)*\\\")|(\\`([^\\`\\\\]|\\\\.)*\\`))*)?\\) # parameters\n (\\s*:\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<([^<>]|\\<[^<>]+\\>)+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+)? # return type\n \\s*=> # arrow operator\n)\n ))\n)) |\n# typeannotation is fn type: < | () | (... | (param: | (param, | (param? | (param= | (param) =>\n(:\\s*(\n (<) |\n ([(]\\s*(\n ([)]) |\n (\\.\\.\\.) |\n ([_$[:alnum:]]+\\s*(\n ([:,?=])|\n ([)]\\s*=>)\n ))\n ))\n)) |\n(:\\s*(?\\(\\)\\{\\}]|\\<([^<>]|\\<([^<>]|\\<[^<>]+\\>)+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*)))|((\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])\\s*((:\\s*\\[?$)|((\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<([^<>]|\\<[^<>]+\\>)+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*))))))) |\n(:\\s*(=>|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(<[^<>]*>)|[^<>(),=])+=\\s*(\n ((async\\s+)?(\n (function\\s*[(<*]) |\n (function\\s+) |\n ([_$[:alpha:]][_$[:alnum:]]*\\s*=>)\n )) |\n ((async\\s*)?(\n ((<\\s*$)|([\\(]\\s*((([\\{\\[]\\s*)?$)|((\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})\\s*((:\\s*\\{?$)|((\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<([^<>]|\\<[^<>]+\\>)+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*)))|((\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])\\s*((:\\s*\\[?$)|((\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<([^<>]|\\<[^<>]+\\>)+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*)))))) |\n # sure shot arrow functions even if => is on new line\n(\n (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<])*\\>)*\\>)*>\\s*)?\n [(]\\s*(\\/\\*([^\\*]|(\\*[^\\/]))*\\*\\/\\s*)*\n (\n ([)]\\s*:) | # ():\n ((\\.\\.\\.\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\s*:) # [(]param: | [(]...param:\n )\n) |\n(\n [<]\\s*[_$[:alpha:]][_$[:alnum:]]*\\s+extends\\s*[^=>] # < typeparam extends\n) |\n# arrow function possible to detect only with => on same line\n(\n (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<])*\\>)*\\>)*>\\s*)? # typeparameters\n \\(\\s*(\\/\\*([^\\*]|(\\*[^\\/]))*\\*\\/\\s*)*(([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])|(\\.\\.\\.\\s*[_$[:alpha:]]))([^()\\'\\\"\\`]|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\'([^\\'\\\\]|\\\\.)*\\')|(\\\"([^\\\"\\\\]|\\\\.)*\\\")|(\\`([^\\`\\\\]|\\\\.)*\\`))*)?\\) # parameters\n (\\s*:\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<([^<>]|\\<[^<>]+\\>)+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+)? # return type\n \\s*=> # arrow operator\n)\n ))\n)))", "captures": { "1": { "name": "storage.modifier.tsx" }, "2": { "name": "keyword.operator.rest.tsx" }, "3": { "name": "entity.name.function.tsx variable.language.this.tsx" }, "4": { "name": "entity.name.function.tsx" }, "5": { "name": "keyword.operator.optional.tsx" } } }, { "match": "(?x)(?:(?)\n )) |\n ((async\\s*)?(\n ((<\\s*$)|([\\(]\\s*((([\\{\\[]\\s*)?$)|((\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})\\s*((:\\s*\\{?$)|((\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<([^<>]|\\<[^<>]+\\>)+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*)))|((\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])\\s*((:\\s*\\[?$)|((\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<([^<>]|\\<[^<>]+\\>)+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*)))))) |\n # sure shot arrow functions even if => is on new line\n(\n (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<])*\\>)*\\>)*>\\s*)?\n [(]\\s*(\\/\\*([^\\*]|(\\*[^\\/]))*\\*\\/\\s*)*\n (\n ([)]\\s*:) | # ():\n ((\\.\\.\\.\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\s*:) # [(]param: | [(]...param:\n )\n) |\n(\n [<]\\s*[_$[:alpha:]][_$[:alnum:]]*\\s+extends\\s*[^=>] # < typeparam extends\n) |\n# arrow function possible to detect only with => on same line\n(\n (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<])*\\>)*\\>)*>\\s*)? # typeparameters\n \\(\\s*(\\/\\*([^\\*]|(\\*[^\\/]))*\\*\\/\\s*)*(([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])|(\\.\\.\\.\\s*[_$[:alpha:]]))([^()\\'\\\"\\`]|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\'([^\\'\\\\]|\\\\.)*\\')|(\\\"([^\\\"\\\\]|\\\\.)*\\\")|(\\`([^\\`\\\\]|\\\\.)*\\`))*)?\\) # parameters\n (\\s*:\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<([^<>]|\\<[^<>]+\\>)+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+)? # return type\n \\s*=> # arrow operator\n)\n ))\n)) |\n# typeannotation is fn type: < | () | (... | (param: | (param, | (param? | (param= | (param) =>\n(:\\s*(\n (<) |\n ([(]\\s*(\n ([)]) |\n (\\.\\.\\.) |\n ([_$[:alnum:]]+\\s*(\n ([:,?=])|\n ([)]\\s*=>)\n ))\n ))\n)) |\n(:\\s*(?\\(\\)\\{\\}]|\\<([^<>]|\\<([^<>]|\\<[^<>]+\\>)+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*)))|((\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])\\s*((:\\s*\\[?$)|((\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<([^<>]|\\<[^<>]+\\>)+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*))))))) |\n(:\\s*(=>|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(<[^<>]*>)|[^<>(),=])+=\\s*(\n ((async\\s+)?(\n (function\\s*[(<*]) |\n (function\\s+) |\n ([_$[:alpha:]][_$[:alnum:]]*\\s*=>)\n )) |\n ((async\\s*)?(\n ((<\\s*$)|([\\(]\\s*((([\\{\\[]\\s*)?$)|((\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})\\s*((:\\s*\\{?$)|((\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<([^<>]|\\<[^<>]+\\>)+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*)))|((\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])\\s*((:\\s*\\[?$)|((\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<([^<>]|\\<[^<>]+\\>)+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*)))))) |\n # sure shot arrow functions even if => is on new line\n(\n (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<])*\\>)*\\>)*>\\s*)?\n [(]\\s*(\\/\\*([^\\*]|(\\*[^\\/]))*\\*\\/\\s*)*\n (\n ([)]\\s*:) | # ():\n ((\\.\\.\\.\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\s*:) # [(]param: | [(]...param:\n )\n) |\n(\n [<]\\s*[_$[:alpha:]][_$[:alnum:]]*\\s+extends\\s*[^=>] # < typeparam extends\n) |\n# arrow function possible to detect only with => on same line\n(\n (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<])*\\>)*\\>)*>\\s*)? # typeparameters\n \\(\\s*(\\/\\*([^\\*]|(\\*[^\\/]))*\\*\\/\\s*)*(([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])|(\\.\\.\\.\\s*[_$[:alpha:]]))([^()\\'\\\"\\`]|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\'([^\\'\\\\]|\\\\.)*\\')|(\\\"([^\\\"\\\\]|\\\\.)*\\\")|(\\`([^\\`\\\\]|\\\\.)*\\`))*)?\\) # parameters\n (\\s*:\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<([^<>]|\\<[^<>]+\\>)+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+)? # return type\n \\s*=> # arrow operator\n)\n ))\n)))", "captures": { "1": { "name": "meta.definition.property.tsx entity.name.function.tsx" }, "2": { "name": "keyword.operator.optional.tsx" }, "3": { "name": "keyword.operator.definiteassignment.tsx" } } }, { "name": "meta.definition.property.tsx variable.object.property.tsx", "match": "\\#?[_$[:alpha:]][_$[:alnum:]]*" }, { "name": "keyword.operator.optional.tsx", "match": "\\?" }, { "name": "keyword.operator.definiteassignment.tsx", "match": "\\!" } ] }, "variable-initializer": { "patterns": [ { "begin": "(?\\s*$)", "beginCaptures": { "1": { "name": "keyword.operator.assignment.tsx" } }, "end": "(?=$|^|[,);}\\]]|((?]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<])*\\>)*\\>)*>\\s*))?[\\(])", "beginCaptures": { "1": { "name": "storage.modifier.tsx" }, "2": { "name": "storage.modifier.tsx" }, "3": { "name": "storage.modifier.tsx" }, "4": { "name": "storage.modifier.async.tsx" }, "5": { "name": "keyword.operator.new.tsx" }, "6": { "name": "keyword.generator.asterisk.tsx" } }, "end": "(?=\\}|;|,|$)|(?<=\\})", "patterns": [ { "include": "#method-declaration-name" }, { "include": "#function-body" } ] }, { "name": "meta.method.declaration.tsx", "begin": "(?x)(?]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<])*\\>)*\\>)*>\\s*))?[\\(])", "beginCaptures": { "1": { "name": "storage.modifier.tsx" }, "2": { "name": "storage.modifier.tsx" }, "3": { "name": "storage.modifier.tsx" }, "4": { "name": "storage.modifier.async.tsx" }, "5": { "name": "storage.type.property.tsx" }, "6": { "name": "keyword.generator.asterisk.tsx" } }, "end": "(?=\\}|;|,|$)|(?<=\\})", "patterns": [ { "include": "#method-declaration-name" }, { "include": "#function-body" } ] } ] }, "object-literal-method-declaration": { "name": "meta.method.declaration.tsx", "begin": "(?x)(?]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<])*\\>)*\\>)*>\\s*))?[\\(])", "beginCaptures": { "1": { "name": "storage.modifier.async.tsx" }, "2": { "name": "storage.type.property.tsx" }, "3": { "name": "keyword.generator.asterisk.tsx" } }, "end": "(?=\\}|;|,)|(?<=\\})", "patterns": [ { "include": "#method-declaration-name" }, { "include": "#function-body" }, { "begin": "(?x)(?]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<])*\\>)*\\>)*>\\s*))?[\\(])", "beginCaptures": { "1": { "name": "storage.modifier.async.tsx" }, "2": { "name": "storage.type.property.tsx" }, "3": { "name": "keyword.generator.asterisk.tsx" } }, "end": "(?=\\(|\\<)", "patterns": [ { "include": "#method-declaration-name" } ] } ] }, "method-declaration-name": { "begin": "(?x)(?=((\\b(?)", "captures": { "1": { "name": "storage.modifier.async.tsx" }, "2": { "name": "variable.parameter.tsx" } } }, { "name": "meta.arrow.tsx", "begin": "(?x) (?:\n (? is on new line\n(\n (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<])*\\>)*\\>)*>\\s*)?\n [(]\\s*(\\/\\*([^\\*]|(\\*[^\\/]))*\\*\\/\\s*)*\n (\n ([)]\\s*:) | # ():\n ((\\.\\.\\.\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\s*:) # [(]param: | [(]...param:\n )\n) |\n(\n [<]\\s*[_$[:alpha:]][_$[:alnum:]]*\\s+extends\\s*[^=>] # < typeparam extends\n) |\n# arrow function possible to detect only with => on same line\n(\n (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<])*\\>)*\\>)*>\\s*)? # typeparameters\n \\(\\s*(\\/\\*([^\\*]|(\\*[^\\/]))*\\*\\/\\s*)*(([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])|(\\.\\.\\.\\s*[_$[:alpha:]]))([^()\\'\\\"\\`]|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\'([^\\'\\\\]|\\\\.)*\\')|(\\\"([^\\\"\\\\]|\\\\.)*\\\")|(\\`([^\\`\\\\]|\\\\.)*\\`))*)?\\) # parameters\n (\\s*:\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<([^<>]|\\<[^<>]+\\>)+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+)? # return type\n \\s*=> # arrow operator\n)\n )\n)", "beginCaptures": { "1": { "name": "storage.modifier.async.tsx" } }, "end": "(?==>|\\{|(^\\s*(export|function|class|interface|let|var|const|import|enum|namespace|module|type|abstract|declare)\\s+))", "patterns": [ { "include": "#comment" }, { "include": "#type-parameters" }, { "include": "#function-parameters" }, { "include": "#arrow-return-type" }, { "include": "#possibly-arrow-return-type" } ] }, { "name": "meta.arrow.tsx", "begin": "=>", "beginCaptures": { "0": { "name": "storage.type.function.arrow.tsx" } }, "end": "((?<=\\}|\\S)(?)|((?!\\{)(?=\\S)))(?!\\/[\\/\\*])", "patterns": [ { "include": "#single-line-comment-consuming-line-ending" }, { "include": "#decl-block" }, { "include": "#expression" } ] } ] }, "indexer-declaration": { "name": "meta.indexer.declaration.tsx", "begin": "(?:(?]|^await|[^\\._$[:alnum:]]await|^return|[^\\._$[:alnum:]]return|^yield|[^\\._$[:alnum:]]yield|^throw|[^\\._$[:alnum:]]throw|^in|[^\\._$[:alnum:]]in|^of|[^\\._$[:alnum:]]of|^typeof|[^\\._$[:alnum:]]typeof|&&|\\|\\||\\*)\\s*(\\{)", "beginCaptures": { "1": { "name": "punctuation.definition.block.tsx" } }, "end": "\\}", "endCaptures": { "0": { "name": "punctuation.definition.block.tsx" } }, "patterns": [ { "include": "#object-member" } ] }, "object-literal": { "name": "meta.objectliteral.tsx", "begin": "\\{", "beginCaptures": { "0": { "name": "punctuation.definition.block.tsx" } }, "end": "\\}", "endCaptures": { "0": { "name": "punctuation.definition.block.tsx" } }, "patterns": [ { "include": "#object-member" } ] }, "object-member": { "patterns": [ { "include": "#comment" }, { "include": "#object-literal-method-declaration" }, { "name": "meta.object.member.tsx meta.object-literal.key.tsx", "begin": "(?=\\[)", "end": "(?=:)|((?<=[\\]])(?=\\s*[\\(\\<]))", "patterns": [ { "include": "#comment" }, { "include": "#array-literal" } ] }, { "name": "meta.object.member.tsx meta.object-literal.key.tsx", "begin": "(?=[\\'\\\"\\`])", "end": "(?=:)|((?<=[\\'\\\"\\`])(?=((\\s*[\\(\\<,}])|(\\s+(as)\\s+))))", "patterns": [ { "include": "#comment" }, { "include": "#string" } ] }, { "name": "meta.object.member.tsx meta.object-literal.key.tsx", "begin": "(?x)(?=(\\b(?)\n )) |\n ((async\\s*)?(\n ((<\\s*$)|([\\(]\\s*((([\\{\\[]\\s*)?$)|((\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})\\s*((:\\s*\\{?$)|((\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<([^<>]|\\<[^<>]+\\>)+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*)))|((\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])\\s*((:\\s*\\[?$)|((\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<([^<>]|\\<[^<>]+\\>)+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*)))))) |\n # sure shot arrow functions even if => is on new line\n(\n (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<])*\\>)*\\>)*>\\s*)?\n [(]\\s*(\\/\\*([^\\*]|(\\*[^\\/]))*\\*\\/\\s*)*\n (\n ([)]\\s*:) | # ():\n ((\\.\\.\\.\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\s*:) # [(]param: | [(]...param:\n )\n) |\n(\n [<]\\s*[_$[:alpha:]][_$[:alnum:]]*\\s+extends\\s*[^=>] # < typeparam extends\n) |\n# arrow function possible to detect only with => on same line\n(\n (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<])*\\>)*\\>)*>\\s*)? # typeparameters\n \\(\\s*(\\/\\*([^\\*]|(\\*[^\\/]))*\\*\\/\\s*)*(([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])|(\\.\\.\\.\\s*[_$[:alpha:]]))([^()\\'\\\"\\`]|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\'([^\\'\\\\]|\\\\.)*\\')|(\\\"([^\\\"\\\\]|\\\\.)*\\\")|(\\`([^\\`\\\\]|\\\\.)*\\`))*)?\\) # parameters\n (\\s*:\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<([^<>]|\\<[^<>]+\\>)+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+)? # return type\n \\s*=> # arrow operator\n)\n ))\n)))", "captures": { "0": { "name": "meta.object-literal.key.tsx" }, "1": { "name": "entity.name.function.tsx" } } }, { "name": "meta.object.member.tsx", "match": "(?:[_$[:alpha:]][_$[:alnum:]]*)\\s*(?=(\\/\\*([^\\*]|(\\*[^\\/]))*\\*\\/\\s*)*:)", "captures": { "0": { "name": "meta.object-literal.key.tsx" } } }, { "name": "meta.object.member.tsx", "begin": "\\.\\.\\.", "beginCaptures": { "0": { "name": "keyword.operator.spread.tsx" } }, "end": "(?=,|\\})", "patterns": [ { "include": "#expression" } ] }, { "name": "meta.object.member.tsx", "match": "([_$[:alpha:]][_$[:alnum:]]*)\\s*(?=,|\\}|$|\\/\\/|\\/\\*)", "captures": { "1": { "name": "variable.other.readwrite.tsx" } } }, { "name": "meta.object.member.tsx", "match": "(?]|\\|\\||\\&\\&|\\!\\=\\=|$|^|((?]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<])*\\>)*\\>)*>\\s*)\\(\\s*((([\\{\\[]\\s*)?$)|((\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})\\s*((:\\s*\\{?$)|((\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<([^<>]|\\<[^<>]+\\>)+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*)))|((\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])\\s*((:\\s*\\[?$)|((\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<([^<>]|\\<[^<>]+\\>)+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*)))))", "beginCaptures": { "1": { "name": "storage.modifier.async.tsx" } }, "end": "(?<=\\))", "patterns": [ { "include": "#type-parameters" }, { "begin": "\\(", "beginCaptures": { "0": { "name": "meta.brace.round.tsx" } }, "end": "\\)", "endCaptures": { "0": { "name": "meta.brace.round.tsx" } }, "patterns": [ { "include": "#expression-inside-possibly-arrow-parens" } ] } ] }, { "begin": "(?<=:)\\s*(async)?\\s*(\\()(?=\\s*((([\\{\\[]\\s*)?$)|((\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})\\s*((:\\s*\\{?$)|((\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<([^<>]|\\<[^<>]+\\>)+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*)))|((\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])\\s*((:\\s*\\[?$)|((\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<([^<>]|\\<[^<>]+\\>)+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*)))))", "beginCaptures": { "1": { "name": "storage.modifier.async.tsx" }, "2": { "name": "meta.brace.round.tsx" } }, "end": "\\)", "endCaptures": { "0": { "name": "meta.brace.round.tsx" } }, "patterns": [ { "include": "#expression-inside-possibly-arrow-parens" } ] }, { "begin": "(?<=:)\\s*(async)?\\s*(?=\\<\\s*$)", "beginCaptures": { "1": { "name": "storage.modifier.async.tsx" } }, "end": "(?<=\\>)", "patterns": [ { "include": "#type-parameters" } ] }, { "begin": "(?<=\\>)\\s*(\\()(?=\\s*((([\\{\\[]\\s*)?$)|((\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})\\s*((:\\s*\\{?$)|((\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<([^<>]|\\<[^<>]+\\>)+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*)))|((\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])\\s*((:\\s*\\[?$)|((\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<([^<>]|\\<[^<>]+\\>)+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*)))))", "beginCaptures": { "1": { "name": "meta.brace.round.tsx" } }, "end": "\\)", "endCaptures": { "0": { "name": "meta.brace.round.tsx" } }, "patterns": [ { "include": "#expression-inside-possibly-arrow-parens" } ] }, { "include": "#possibly-arrow-return-type" }, { "include": "#expression" } ] }, { "include": "#punctuation-comma" } ] }, "ternary-expression": { "begin": "(?!\\?\\.\\s*[^[:digit:]])(\\?)(?!\\?)", "beginCaptures": { "1": { "name": "keyword.operator.ternary.tsx" } }, "end": "\\s*(:)", "endCaptures": { "1": { "name": "keyword.operator.ternary.tsx" } }, "patterns": [ { "include": "#expression" } ] }, "function-call": { "patterns": [ { "begin": "(?=(((([_$[:alpha:]][_$[:alnum:]]*)(\\s*\\??\\.\\s*(\\#?[_$[:alpha:]][_$[:alnum:]]*))*)|(\\??\\.\\s*\\#?[_$[:alpha:]][_$[:alnum:]]*))|(?<=[\\)]))\\s*(?:(\\?\\.\\s*)|(\\!))?((<\\s*(((keyof|infer|typeof|readonly)\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])|(\\'([^\\'\\\\]|\\\\.)*\\')|(\\\"([^\\\"\\\\]|\\\\.)*\\\")|(\\`([^\\`\\\\]|\\\\.)*\\`))(?=\\s*([\\<\\>\\,\\.\\[]|=>|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(?<==)\\>|\\<\\s*(((keyof|infer|typeof|readonly)\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])|(\\'([^\\'\\\\]|\\\\.)*\\')|(\\\"([^\\\"\\\\]|\\\\.)*\\\")|(\\`([^\\`\\\\]|\\\\.)*\\`))(?=\\s*([\\<\\>\\,\\.\\[]|=>|&(?!&)|\\|(?!\\|)))))(([^<>\\(]|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(?<==)\\>|\\<\\s*(((keyof|infer|typeof|readonly)\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])|(\\'([^\\'\\\\]|\\\\.)*\\')|(\\\"([^\\\"\\\\]|\\\\.)*\\\")|(\\`([^\\`\\\\]|\\\\.)*\\`))(?=\\s*([\\<\\>\\,\\.\\[]|=>|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(?<==)\\>)*(?))*(?)*(?\\s*)?\\())", "end": "(?<=\\))(?!(((([_$[:alpha:]][_$[:alnum:]]*)(\\s*\\??\\.\\s*(\\#?[_$[:alpha:]][_$[:alnum:]]*))*)|(\\??\\.\\s*\\#?[_$[:alpha:]][_$[:alnum:]]*))|(?<=[\\)]))\\s*(?:(\\?\\.\\s*)|(\\!))?((<\\s*(((keyof|infer|typeof|readonly)\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])|(\\'([^\\'\\\\]|\\\\.)*\\')|(\\\"([^\\\"\\\\]|\\\\.)*\\\")|(\\`([^\\`\\\\]|\\\\.)*\\`))(?=\\s*([\\<\\>\\,\\.\\[]|=>|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(?<==)\\>|\\<\\s*(((keyof|infer|typeof|readonly)\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])|(\\'([^\\'\\\\]|\\\\.)*\\')|(\\\"([^\\\"\\\\]|\\\\.)*\\\")|(\\`([^\\`\\\\]|\\\\.)*\\`))(?=\\s*([\\<\\>\\,\\.\\[]|=>|&(?!&)|\\|(?!\\|)))))(([^<>\\(]|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(?<==)\\>|\\<\\s*(((keyof|infer|typeof|readonly)\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])|(\\'([^\\'\\\\]|\\\\.)*\\')|(\\\"([^\\\"\\\\]|\\\\.)*\\\")|(\\`([^\\`\\\\]|\\\\.)*\\`))(?=\\s*([\\<\\>\\,\\.\\[]|=>|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(?<==)\\>)*(?))*(?)*(?\\s*)?\\())", "patterns": [ { "name": "meta.function-call.tsx", "begin": "(?=(([_$[:alpha:]][_$[:alnum:]]*)(\\s*\\??\\.\\s*(\\#?[_$[:alpha:]][_$[:alnum:]]*))*)|(\\??\\.\\s*\\#?[_$[:alpha:]][_$[:alnum:]]*))", "end": "(?=\\s*(?:(\\?\\.\\s*)|(\\!))?((<\\s*(((keyof|infer|typeof|readonly)\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])|(\\'([^\\'\\\\]|\\\\.)*\\')|(\\\"([^\\\"\\\\]|\\\\.)*\\\")|(\\`([^\\`\\\\]|\\\\.)*\\`))(?=\\s*([\\<\\>\\,\\.\\[]|=>|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(?<==)\\>|\\<\\s*(((keyof|infer|typeof|readonly)\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])|(\\'([^\\'\\\\]|\\\\.)*\\')|(\\\"([^\\\"\\\\]|\\\\.)*\\\")|(\\`([^\\`\\\\]|\\\\.)*\\`))(?=\\s*([\\<\\>\\,\\.\\[]|=>|&(?!&)|\\|(?!\\|)))))(([^<>\\(]|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(?<==)\\>|\\<\\s*(((keyof|infer|typeof|readonly)\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])|(\\'([^\\'\\\\]|\\\\.)*\\')|(\\\"([^\\\"\\\\]|\\\\.)*\\\")|(\\`([^\\`\\\\]|\\\\.)*\\`))(?=\\s*([\\<\\>\\,\\.\\[]|=>|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(?<==)\\>)*(?))*(?)*(?\\s*)?\\())", "patterns": [ { "include": "#function-call-target" } ] }, { "include": "#comment" }, { "include": "#function-call-optionals" }, { "include": "#type-arguments" }, { "include": "#paren-expression" } ] }, { "begin": "(?=(((([_$[:alpha:]][_$[:alnum:]]*)(\\s*\\??\\.\\s*(\\#?[_$[:alpha:]][_$[:alnum:]]*))*)|(\\??\\.\\s*\\#?[_$[:alpha:]][_$[:alnum:]]*))|(?<=[\\)]))(<\\s*[\\{\\[\\(]\\s*$))", "end": "(?<=\\>)(?!(((([_$[:alpha:]][_$[:alnum:]]*)(\\s*\\??\\.\\s*(\\#?[_$[:alpha:]][_$[:alnum:]]*))*)|(\\??\\.\\s*\\#?[_$[:alpha:]][_$[:alnum:]]*))|(?<=[\\)]))(<\\s*[\\{\\[\\(]\\s*$))", "patterns": [ { "name": "meta.function-call.tsx", "begin": "(?=(([_$[:alpha:]][_$[:alnum:]]*)(\\s*\\??\\.\\s*(\\#?[_$[:alpha:]][_$[:alnum:]]*))*)|(\\??\\.\\s*\\#?[_$[:alpha:]][_$[:alnum:]]*))", "end": "(?=(<\\s*[\\{\\[\\(]\\s*$))", "patterns": [ { "include": "#function-call-target" } ] }, { "include": "#comment" }, { "include": "#function-call-optionals" }, { "include": "#type-arguments" } ] } ] }, "function-call-target": { "patterns": [ { "include": "#support-function-call-identifiers" }, { "name": "entity.name.function.tsx", "match": "(\\#?[_$[:alpha:]][_$[:alnum:]]*)" } ] }, "function-call-optionals": { "patterns": [ { "name": "meta.function-call.tsx punctuation.accessor.optional.tsx", "match": "\\?\\." }, { "name": "meta.function-call.tsx keyword.operator.definiteassignment.tsx", "match": "\\!" } ] }, "support-function-call-identifiers": { "patterns": [ { "include": "#literal" }, { "include": "#support-objects" }, { "include": "#object-identifiers" }, { "include": "#punctuation-accessor" }, { "name": "keyword.operator.expression.import.tsx", "match": "(?:(?]|\\|\\||\\&\\&|\\!\\=\\=|$|((?]|\\|\\||\\&\\&|\\!\\=\\=|$|(([\\&\\~\\^\\|]\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\s+instanceof(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.)))|((?]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<])*\\>)*\\>)*>\\s*))?\\(\\s*((([\\{\\[]\\s*)?$)|((\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})\\s*((:\\s*\\{?$)|((\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<([^<>]|\\<[^<>]+\\>)+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*)))|((\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])\\s*((:\\s*\\[?$)|((\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<([^<>]|\\<[^<>]+\\>)+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*)))))", "beginCaptures": { "1": { "name": "storage.modifier.async.tsx" } }, "end": "(?<=\\))", "patterns": [ { "include": "#paren-expression-possibly-arrow-with-typeparameters" } ] }, { "begin": "(?<=[(=,]|=>|^return|[^\\._$[:alnum:]]return)\\s*(async)?(?=\\s*((((<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<])*\\>)*\\>)*>\\s*))?\\()|(<))\\s*$)", "beginCaptures": { "1": { "name": "storage.modifier.async.tsx" } }, "end": "(?<=\\))", "patterns": [ { "include": "#paren-expression-possibly-arrow-with-typeparameters" } ] }, { "include": "#possibly-arrow-return-type" } ] }, "paren-expression-possibly-arrow-with-typeparameters": { "patterns": [ { "include": "#type-parameters" }, { "begin": "\\(", "beginCaptures": { "0": { "name": "meta.brace.round.tsx" } }, "end": "\\)", "endCaptures": { "0": { "name": "meta.brace.round.tsx" } }, "patterns": [ { "include": "#expression-inside-possibly-arrow-parens" } ] } ] }, "expression-inside-possibly-arrow-parens": { "patterns": [ { "include": "#expressionWithoutIdentifiers" }, { "include": "#comment" }, { "include": "#string" }, { "include": "#decorator" }, { "include": "#destructuring-parameter" }, { "match": "(?)\n )) |\n ((async\\s*)?(\n ((<\\s*$)|([\\(]\\s*((([\\{\\[]\\s*)?$)|((\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})\\s*((:\\s*\\{?$)|((\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<([^<>]|\\<[^<>]+\\>)+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*)))|((\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])\\s*((:\\s*\\[?$)|((\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<([^<>]|\\<[^<>]+\\>)+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*)))))) |\n # sure shot arrow functions even if => is on new line\n(\n (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<])*\\>)*\\>)*>\\s*)?\n [(]\\s*(\\/\\*([^\\*]|(\\*[^\\/]))*\\*\\/\\s*)*\n (\n ([)]\\s*:) | # ():\n ((\\.\\.\\.\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\s*:) # [(]param: | [(]...param:\n )\n) |\n(\n [<]\\s*[_$[:alpha:]][_$[:alnum:]]*\\s+extends\\s*[^=>] # < typeparam extends\n) |\n# arrow function possible to detect only with => on same line\n(\n (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<])*\\>)*\\>)*>\\s*)? # typeparameters\n \\(\\s*(\\/\\*([^\\*]|(\\*[^\\/]))*\\*\\/\\s*)*(([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])|(\\.\\.\\.\\s*[_$[:alpha:]]))([^()\\'\\\"\\`]|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\'([^\\'\\\\]|\\\\.)*\\')|(\\\"([^\\\"\\\\]|\\\\.)*\\\")|(\\`([^\\`\\\\]|\\\\.)*\\`))*)?\\) # parameters\n (\\s*:\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<([^<>]|\\<[^<>]+\\>)+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+)? # return type\n \\s*=> # arrow operator\n)\n ))\n)) |\n# typeannotation is fn type: < | () | (... | (param: | (param, | (param? | (param= | (param) =>\n(:\\s*(\n (<) |\n ([(]\\s*(\n ([)]) |\n (\\.\\.\\.) |\n ([_$[:alnum:]]+\\s*(\n ([:,?=])|\n ([)]\\s*=>)\n ))\n ))\n)) |\n(:\\s*(?\\(\\)\\{\\}]|\\<([^<>]|\\<([^<>]|\\<[^<>]+\\>)+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*)))|((\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])\\s*((:\\s*\\[?$)|((\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<([^<>]|\\<[^<>]+\\>)+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*))))))) |\n(:\\s*(=>|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(<[^<>]*>)|[^<>(),=])+=\\s*(\n ((async\\s+)?(\n (function\\s*[(<*]) |\n (function\\s+) |\n ([_$[:alpha:]][_$[:alnum:]]*\\s*=>)\n )) |\n ((async\\s*)?(\n ((<\\s*$)|([\\(]\\s*((([\\{\\[]\\s*)?$)|((\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})\\s*((:\\s*\\{?$)|((\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<([^<>]|\\<[^<>]+\\>)+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*)))|((\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])\\s*((:\\s*\\[?$)|((\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<([^<>]|\\<[^<>]+\\>)+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*)))))) |\n # sure shot arrow functions even if => is on new line\n(\n (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<])*\\>)*\\>)*>\\s*)?\n [(]\\s*(\\/\\*([^\\*]|(\\*[^\\/]))*\\*\\/\\s*)*\n (\n ([)]\\s*:) | # ():\n ((\\.\\.\\.\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\s*:) # [(]param: | [(]...param:\n )\n) |\n(\n [<]\\s*[_$[:alpha:]][_$[:alnum:]]*\\s+extends\\s*[^=>] # < typeparam extends\n) |\n# arrow function possible to detect only with => on same line\n(\n (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<])*\\>)*\\>)*>\\s*)? # typeparameters\n \\(\\s*(\\/\\*([^\\*]|(\\*[^\\/]))*\\*\\/\\s*)*(([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])|(\\.\\.\\.\\s*[_$[:alpha:]]))([^()\\'\\\"\\`]|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\'([^\\'\\\\]|\\\\.)*\\')|(\\\"([^\\\"\\\\]|\\\\.)*\\\")|(\\`([^\\`\\\\]|\\\\.)*\\`))*)?\\) # parameters\n (\\s*:\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<([^<>]|\\<[^<>]+\\>)+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+)? # return type\n \\s*=> # arrow operator\n)\n ))\n)))", "captures": { "1": { "name": "storage.modifier.tsx" }, "2": { "name": "keyword.operator.rest.tsx" }, "3": { "name": "entity.name.function.tsx variable.language.this.tsx" }, "4": { "name": "entity.name.function.tsx" }, "5": { "name": "keyword.operator.optional.tsx" } } }, { "match": "(?x)(?:(?]|\\|\\||\\&\\&|\\!\\=\\=|$|((?>=|>>>=|\\|=" }, { "name": "keyword.operator.bitwise.shift.tsx", "match": "<<|>>>|>>" }, { "name": "keyword.operator.comparison.tsx", "match": "===|!==|==|!=" }, { "name": "keyword.operator.relational.tsx", "match": "<=|>=|<>|<|>" }, { "match": "(?<=[_$[:alnum:]])(\\!)\\s*(?:(/=)|(?:(/)(?![/*])))", "captures": { "1": { "name": "keyword.operator.logical.tsx" }, "2": { "name": "keyword.operator.assignment.compound.tsx" }, "3": { "name": "keyword.operator.arithmetic.tsx" } } }, { "name": "keyword.operator.logical.tsx", "match": "\\!|&&|\\|\\||\\?\\?" }, { "name": "keyword.operator.bitwise.tsx", "match": "\\&|~|\\^|\\|" }, { "name": "keyword.operator.assignment.tsx", "match": "\\=" }, { "name": "keyword.operator.decrement.tsx", "match": "--" }, { "name": "keyword.operator.increment.tsx", "match": "\\+\\+" }, { "name": "keyword.operator.arithmetic.tsx", "match": "%|\\*|/|-|\\+" }, { "begin": "(?<=[_$[:alnum:])\\]])\\s*(?=(\\/\\*([^\\*]|(\\*[^\\/]))*\\*\\/\\s*)+(?:(/=)|(?:(/)(?![/*]))))", "end": "(?:(/=)|(?:(/)(?!\\*([^\\*]|(\\*[^\\/]))*\\*\\/)))", "endCaptures": { "1": { "name": "keyword.operator.assignment.compound.tsx" }, "2": { "name": "keyword.operator.arithmetic.tsx" } }, "patterns": [ { "include": "#comment" } ] }, { "match": "(?<=[_$[:alnum:])\\]])\\s*(?:(/=)|(?:(/)(?![/*])))", "captures": { "1": { "name": "keyword.operator.assignment.compound.tsx" }, "2": { "name": "keyword.operator.arithmetic.tsx" } } } ] }, "typeof-operator": { "begin": "(?:&|{\\?]|$|;|^\\s*$|(?:^\\s*(?:abstract|async|class|const|declare|enum|export|function|import|interface|let|module|namespace|return|type|var)\\b))", "patterns": [ { "include": "#expression" } ] }, "literal": { "patterns": [ { "include": "#numeric-literal" }, { "include": "#boolean-literal" }, { "include": "#null-literal" }, { "include": "#undefined-literal" }, { "include": "#numericConstant-literal" }, { "include": "#array-literal" }, { "include": "#this-literal" }, { "include": "#super-literal" } ] }, "array-literal": { "name": "meta.array.literal.tsx", "begin": "\\s*(\\[)", "beginCaptures": { "1": { "name": "meta.brace.square.tsx" } }, "end": "\\]", "endCaptures": { "0": { "name": "meta.brace.square.tsx" } }, "patterns": [ { "include": "#expression" }, { "include": "#punctuation-comma" } ] }, "numeric-literal": { "patterns": [ { "name": "constant.numeric.hex.tsx", "match": "\\b(?]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<])*\\>)*\\>)*>\\s*)?\\())\n |\n (?:(EPSILON|MAX_SAFE_INTEGER|MAX_VALUE|MIN_SAFE_INTEGER|MIN_VALUE|NEGATIVE_INFINITY|POSITIVE_INFINITY)\\b(?!\\$)))", "captures": { "1": { "name": "punctuation.accessor.tsx" }, "2": { "name": "punctuation.accessor.optional.tsx" }, "3": { "name": "support.variable.property.tsx" }, "4": { "name": "support.constant.tsx" } } }, { "match": "(?)\n )) |\n ((async\\s*)?(\n ((<\\s*$)|([\\(]\\s*((([\\{\\[]\\s*)?$)|((\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})\\s*((:\\s*\\{?$)|((\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<([^<>]|\\<[^<>]+\\>)+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*)))|((\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])\\s*((:\\s*\\[?$)|((\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<([^<>]|\\<[^<>]+\\>)+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*)))))) |\n # sure shot arrow functions even if => is on new line\n(\n (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<])*\\>)*\\>)*>\\s*)?\n [(]\\s*(\\/\\*([^\\*]|(\\*[^\\/]))*\\*\\/\\s*)*\n (\n ([)]\\s*:) | # ():\n ((\\.\\.\\.\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\s*:) # [(]param: | [(]...param:\n )\n) |\n(\n [<]\\s*[_$[:alpha:]][_$[:alnum:]]*\\s+extends\\s*[^=>] # < typeparam extends\n) |\n# arrow function possible to detect only with => on same line\n(\n (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<])*\\>)*\\>)*>\\s*)? # typeparameters\n \\(\\s*(\\/\\*([^\\*]|(\\*[^\\/]))*\\*\\/\\s*)*(([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])|(\\.\\.\\.\\s*[_$[:alpha:]]))([^()\\'\\\"\\`]|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\'([^\\'\\\\]|\\\\.)*\\')|(\\\"([^\\\"\\\\]|\\\\.)*\\\")|(\\`([^\\`\\\\]|\\\\.)*\\`))*)?\\) # parameters\n (\\s*:\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<([^<>]|\\<[^<>]+\\>)+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+)? # return type\n \\s*=> # arrow operator\n)\n ))\n))", "captures": { "1": { "name": "punctuation.accessor.tsx" }, "2": { "name": "punctuation.accessor.optional.tsx" }, "3": { "name": "entity.name.function.tsx" } } }, { "match": "(?:(\\.)|(\\?\\.(?!\\s*[[:digit:]])))\\s*(\\#?[[:upper:]][_$[:digit:][:upper:]]*)(?![_$[:alnum:]])", "captures": { "1": { "name": "punctuation.accessor.tsx" }, "2": { "name": "punctuation.accessor.optional.tsx" }, "3": { "name": "variable.other.constant.property.tsx" } } }, { "match": "(?:(\\.)|(\\?\\.(?!\\s*[[:digit:]])))\\s*(\\#?[_$[:alpha:]][_$[:alnum:]]*)", "captures": { "1": { "name": "punctuation.accessor.tsx" }, "2": { "name": "punctuation.accessor.optional.tsx" }, "3": { "name": "variable.other.property.tsx" } } }, { "name": "variable.other.constant.tsx", "match": "([[:upper:]][_$[:digit:][:upper:]]*)(?![_$[:alnum:]])" }, { "name": "variable.other.readwrite.tsx", "match": "[_$[:alpha:]][_$[:alnum:]]*" } ] }, "object-identifiers": { "patterns": [ { "name": "support.class.tsx", "match": "([_$[:alpha:]][_$[:alnum:]]*)(?=\\s*\\??\\.\\s*prototype\\b(?!\\$))" }, { "match": "(?x)(?:(\\.)|(\\?\\.(?!\\s*[[:digit:]])))\\s*(?:\n (\\#?[[:upper:]][_$[:digit:][:upper:]]*) |\n (\\#?[_$[:alpha:]][_$[:alnum:]]*)\n)(?=\\s*\\??\\.\\s*\\#?[_$[:alpha:]][_$[:alnum:]]*)", "captures": { "1": { "name": "punctuation.accessor.tsx" }, "2": { "name": "punctuation.accessor.optional.tsx" }, "3": { "name": "variable.other.constant.object.property.tsx" }, "4": { "name": "variable.other.object.property.tsx" } } }, { "match": "(?x)(?:\n ([[:upper:]][_$[:digit:][:upper:]]*) |\n ([_$[:alpha:]][_$[:alnum:]]*)\n)(?=\\s*\\??\\.\\s*\\#?[_$[:alpha:]][_$[:alnum:]]*)", "captures": { "1": { "name": "variable.other.constant.object.tsx" }, "2": { "name": "variable.other.object.tsx" } } } ] }, "type-annotation": { "patterns": [ { "name": "meta.type.annotation.tsx", "begin": "(:)(?=\\s*\\S)", "beginCaptures": { "1": { "name": "keyword.operator.type.annotation.tsx" } }, "end": "(?])|((?<=[\\}>\\]\\)]|[_$[:alpha:]])\\s*(?=\\{)))", "patterns": [ { "include": "#type" } ] }, { "name": "meta.type.annotation.tsx", "begin": "(:)", "beginCaptures": { "1": { "name": "keyword.operator.type.annotation.tsx" } }, "end": "(?])|(?=^\\s*$)|((?<=\\S)(?=\\s*$))|((?<=[\\}>\\]\\)]|[_$[:alpha:]])\\s*(?=\\{)))", "patterns": [ { "include": "#type" } ] } ] }, "parameter-type-annotation": { "patterns": [ { "name": "meta.type.annotation.tsx", "begin": "(:)", "beginCaptures": { "1": { "name": "keyword.operator.type.annotation.tsx" } }, "end": "(?=[,)])|(?==[^>])", "patterns": [ { "include": "#type" } ] } ] }, "return-type": { "patterns": [ { "name": "meta.return.type.tsx", "begin": "(?<=\\))\\s*(:)(?=\\s*\\S)", "beginCaptures": { "1": { "name": "keyword.operator.type.annotation.tsx" } }, "end": "(?|\\{|(^\\s*(export|function|class|interface|let|var|const|import|enum|namespace|module|type|abstract|declare)\\s+))", "patterns": [ { "include": "#arrow-return-type-body" } ] }, "possibly-arrow-return-type": { "begin": "(?<=\\)|^)\\s*(:)(?=\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<([^<>]|\\<[^<>]+\\>)+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*=>)", "beginCaptures": { "1": { "name": "meta.arrow.tsx meta.return.type.arrow.tsx keyword.operator.type.annotation.tsx" } }, "end": "(?==>|\\{|(^\\s*(export|function|class|interface|let|var|const|import|enum|namespace|module|type|abstract|declare)\\s+))", "contentName": "meta.arrow.tsx meta.return.type.arrow.tsx", "patterns": [ { "include": "#arrow-return-type-body" } ] }, "arrow-return-type-body": { "patterns": [ { "begin": "(?<=[:])(?=\\s*\\{)", "end": "(?<=\\})", "patterns": [ { "include": "#type-object" } ] }, { "include": "#type-predicate-operator" }, { "include": "#type" } ] }, "type-parameters": { "name": "meta.type.parameters.tsx", "begin": "(<)", "beginCaptures": { "1": { "name": "punctuation.definition.typeparameters.begin.tsx" } }, "end": "(>)", "endCaptures": { "1": { "name": "punctuation.definition.typeparameters.end.tsx" } }, "patterns": [ { "include": "#comment" }, { "name": "storage.modifier.tsx", "match": "(?)" } ] }, "type-arguments": { "name": "meta.type.parameters.tsx", "begin": "\\<", "beginCaptures": { "0": { "name": "punctuation.definition.typeparameters.begin.tsx" } }, "end": "\\>", "endCaptures": { "0": { "name": "punctuation.definition.typeparameters.end.tsx" } }, "patterns": [ { "include": "#type-arguments-body" } ] }, "type-arguments-body": { "patterns": [ { "match": "(?)\n ))\n ))\n)) |\n(:\\s*(?\\(\\)\\{\\}]|\\<([^<>]|\\<([^<>]|\\<[^<>]+\\>)+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*)))|((\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])\\s*((:\\s*\\[?$)|((\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<([^<>]|\\<[^<>]+\\>)+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*))))))))", "captures": { "1": { "name": "storage.modifier.tsx" }, "2": { "name": "keyword.operator.rest.tsx" }, "3": { "name": "entity.name.function.tsx variable.language.this.tsx" }, "4": { "name": "entity.name.function.tsx" }, "5": { "name": "keyword.operator.optional.tsx" } } }, { "match": "(?x)(?:(?)", "patterns": [ { "include": "#comment" }, { "include": "#type-parameters" } ] }, { "name": "meta.type.constructor.tsx", "begin": "(?)\n ))\n )\n )\n)", "end": "(?<=\\))", "patterns": [ { "include": "#function-parameters" } ] } ] }, "type-function-return-type": { "patterns": [ { "name": "meta.type.function.return.tsx", "begin": "(=>)(?=\\s*\\S)", "beginCaptures": { "1": { "name": "storage.type.function.arrow.tsx" } }, "end": "(?)(?:\\?]|//|$)", "patterns": [ { "include": "#type-function-return-type-core" } ] }, { "name": "meta.type.function.return.tsx", "begin": "=>", "beginCaptures": { "0": { "name": "storage.type.function.arrow.tsx" } }, "end": "(?)(?]|//|^\\s*$)|((?<=\\S)(?=\\s*$)))", "patterns": [ { "include": "#type-function-return-type-core" } ] } ] }, "type-function-return-type-core": { "patterns": [ { "include": "#comment" }, { "begin": "(?<==>)(?=\\s*\\{)", "end": "(?<=\\})", "patterns": [ { "include": "#type-object" } ] }, { "include": "#type-predicate-operator" }, { "include": "#type" } ] }, "type-operators": { "patterns": [ { "include": "#typeof-operator" }, { "include": "#type-infer" }, { "begin": "([&|])(?=\\s*\\{)", "beginCaptures": { "0": { "name": "keyword.operator.type.tsx" } }, "end": "(?<=\\})", "patterns": [ { "include": "#type-object" } ] }, { "begin": "[&|]", "beginCaptures": { "0": { "name": "keyword.operator.type.tsx" } }, "end": "(?=\\S)" }, { "name": "keyword.operator.expression.keyof.tsx", "match": "(?)", "endCaptures": { "1": { "name": "meta.type.parameters.tsx punctuation.definition.typeparameters.end.tsx" } }, "contentName": "meta.type.parameters.tsx", "patterns": [ { "include": "#type-arguments-body" } ] }, { "begin": "([_$[:alpha:]][_$[:alnum:]]*)\\s*(<)", "beginCaptures": { "1": { "name": "entity.name.type.tsx" }, "2": { "name": "meta.type.parameters.tsx punctuation.definition.typeparameters.begin.tsx" } }, "end": "(>)", "endCaptures": { "1": { "name": "meta.type.parameters.tsx punctuation.definition.typeparameters.end.tsx" } }, "contentName": "meta.type.parameters.tsx", "patterns": [ { "include": "#type-arguments-body" } ] }, { "match": "([_$[:alpha:]][_$[:alnum:]]*)\\s*(?:(\\.)|(\\?\\.(?!\\s*[[:digit:]])))", "captures": { "1": { "name": "entity.name.type.module.tsx" }, "2": { "name": "punctuation.accessor.tsx" }, "3": { "name": "punctuation.accessor.optional.tsx" } } }, { "name": "entity.name.type.tsx", "match": "[_$[:alpha:]][_$[:alnum:]]*" } ] }, "punctuation-comma": { "name": "punctuation.separator.comma.tsx", "match": "," }, "punctuation-semicolon": { "name": "punctuation.terminator.statement.tsx", "match": ";" }, "punctuation-accessor": { "match": "(?:(\\.)|(\\?\\.(?!\\s*[[:digit:]])))", "captures": { "1": { "name": "punctuation.accessor.tsx" }, "2": { "name": "punctuation.accessor.optional.tsx" } } }, "string": { "patterns": [ { "include": "#qstring-single" }, { "include": "#qstring-double" }, { "include": "#template" } ] }, "qstring-double": { "name": "string.quoted.double.tsx", "begin": "\"", "beginCaptures": { "0": { "name": "punctuation.definition.string.begin.tsx" } }, "end": "(\")|((?:[^\\\\\\n])$)", "endCaptures": { "1": { "name": "punctuation.definition.string.end.tsx" }, "2": { "name": "invalid.illegal.newline.tsx" } }, "patterns": [ { "include": "#string-character-escape" } ] }, "qstring-single": { "name": "string.quoted.single.tsx", "begin": "'", "beginCaptures": { "0": { "name": "punctuation.definition.string.begin.tsx" } }, "end": "(\\')|((?:[^\\\\\\n])$)", "endCaptures": { "1": { "name": "punctuation.definition.string.end.tsx" }, "2": { "name": "invalid.illegal.newline.tsx" } }, "patterns": [ { "include": "#string-character-escape" } ] }, "string-character-escape": { "name": "constant.character.escape.tsx", "match": "\\\\(x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4}|u\\{[0-9A-Fa-f]+\\}|[0-2][0-7]{0,2}|3[0-6][0-7]?|37[0-7]?|[4-7][0-7]?|.|$)" }, "template": { "patterns": [ { "include": "#template-call" }, { "name": "string.template.tsx", "begin": "([_$[:alpha:]][_$[:alnum:]]*)?(`)", "beginCaptures": { "1": { "name": "entity.name.function.tagged-template.tsx" }, "2": { "name": "punctuation.definition.string.template.begin.tsx" } }, "end": "`", "endCaptures": { "0": { "name": "punctuation.definition.string.template.end.tsx" } }, "patterns": [ { "include": "#template-substitution-element" }, { "include": "#string-character-escape" } ] } ] }, "template-call": { "patterns": [ { "name": "string.template.tsx", "begin": "(?=(([_$[:alpha:]][_$[:alnum:]]*\\s*\\??\\.\\s*)*|(\\??\\.\\s*)?)([_$[:alpha:]][_$[:alnum:]]*)(<\\s*(((keyof|infer|typeof|readonly)\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])|(\\'([^\\'\\\\]|\\\\.)*\\')|(\\\"([^\\\"\\\\]|\\\\.)*\\\")|(\\`([^\\`\\\\]|\\\\.)*\\`))(?=\\s*([\\<\\>\\,\\.\\[]|=>|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(?<==)\\>|\\<\\s*(((keyof|infer|typeof|readonly)\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])|(\\'([^\\'\\\\]|\\\\.)*\\')|(\\\"([^\\\"\\\\]|\\\\.)*\\\")|(\\`([^\\`\\\\]|\\\\.)*\\`))(?=\\s*([\\<\\>\\,\\.\\[]|=>|&(?!&)|\\|(?!\\|)))))(([^<>\\(]|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(?<==)\\>|\\<\\s*(((keyof|infer|typeof|readonly)\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])|(\\'([^\\'\\\\]|\\\\.)*\\')|(\\\"([^\\\"\\\\]|\\\\.)*\\\")|(\\`([^\\`\\\\]|\\\\.)*\\`))(?=\\s*([\\<\\>\\,\\.\\[]|=>|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(?<==)\\>)*(?))*(?)*(?\\s*)?`)", "end": "(?=`)", "patterns": [ { "begin": "(?=(([_$[:alpha:]][_$[:alnum:]]*\\s*\\??\\.\\s*)*|(\\??\\.\\s*)?)([_$[:alpha:]][_$[:alnum:]]*))", "end": "(?=(<\\s*(((keyof|infer|typeof|readonly)\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])|(\\'([^\\'\\\\]|\\\\.)*\\')|(\\\"([^\\\"\\\\]|\\\\.)*\\\")|(\\`([^\\`\\\\]|\\\\.)*\\`))(?=\\s*([\\<\\>\\,\\.\\[]|=>|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(?<==)\\>|\\<\\s*(((keyof|infer|typeof|readonly)\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])|(\\'([^\\'\\\\]|\\\\.)*\\')|(\\\"([^\\\"\\\\]|\\\\.)*\\\")|(\\`([^\\`\\\\]|\\\\.)*\\`))(?=\\s*([\\<\\>\\,\\.\\[]|=>|&(?!&)|\\|(?!\\|)))))(([^<>\\(]|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(?<==)\\>|\\<\\s*(((keyof|infer|typeof|readonly)\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])|(\\'([^\\'\\\\]|\\\\.)*\\')|(\\\"([^\\\"\\\\]|\\\\.)*\\\")|(\\`([^\\`\\\\]|\\\\.)*\\`))(?=\\s*([\\<\\>\\,\\.\\[]|=>|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(?<==)\\>)*(?))*(?)*(?\\s*)?`)", "patterns": [ { "include": "#support-function-call-identifiers" }, { "name": "entity.name.function.tagged-template.tsx", "match": "([_$[:alpha:]][_$[:alnum:]]*)" } ] }, { "include": "#type-arguments" } ] }, { "name": "string.template.tsx", "begin": "([_$[:alpha:]][_$[:alnum:]]*)?\\s*(?=(<\\s*(((keyof|infer|typeof|readonly)\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])|(\\'([^\\'\\\\]|\\\\.)*\\')|(\\\"([^\\\"\\\\]|\\\\.)*\\\")|(\\`([^\\`\\\\]|\\\\.)*\\`))(?=\\s*([\\<\\>\\,\\.\\[]|=>|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(?<==)\\>|\\<\\s*(((keyof|infer|typeof|readonly)\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])|(\\'([^\\'\\\\]|\\\\.)*\\')|(\\\"([^\\\"\\\\]|\\\\.)*\\\")|(\\`([^\\`\\\\]|\\\\.)*\\`))(?=\\s*([\\<\\>\\,\\.\\[]|=>|&(?!&)|\\|(?!\\|)))))(([^<>\\(]|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(?<==)\\>|\\<\\s*(((keyof|infer|typeof|readonly)\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])|(\\'([^\\'\\\\]|\\\\.)*\\')|(\\\"([^\\\"\\\\]|\\\\.)*\\\")|(\\`([^\\`\\\\]|\\\\.)*\\`))(?=\\s*([\\<\\>\\,\\.\\[]|=>|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(?<==)\\>)*(?))*(?)*(?\\s*)`)", "beginCaptures": { "1": { "name": "entity.name.function.tagged-template.tsx" } }, "end": "(?=`)", "patterns": [ { "include": "#type-arguments" } ] } ] }, "template-substitution-element": { "name": "meta.template.expression.tsx", "begin": "\\$\\{", "beginCaptures": { "0": { "name": "punctuation.definition.template-expression.begin.tsx" } }, "end": "\\}", "endCaptures": { "0": { "name": "punctuation.definition.template-expression.end.tsx" } }, "patterns": [ { "include": "#expression" } ], "contentName": "meta.embedded.line.tsx" }, "type-string": { "patterns": [ { "include": "#qstring-single" }, { "include": "#qstring-double" }, { "include": "#template-type" } ] }, "template-type": { "patterns": [ { "include": "#template-call" }, { "name": "string.template.tsx", "begin": "([_$[:alpha:]][_$[:alnum:]]*)?(`)", "beginCaptures": { "1": { "name": "entity.name.function.tagged-template.tsx" }, "2": { "name": "punctuation.definition.string.template.begin.tsx" } }, "end": "`", "endCaptures": { "0": { "name": "punctuation.definition.string.template.end.tsx" } }, "patterns": [ { "include": "#template-type-substitution-element" }, { "include": "#string-character-escape" } ] } ] }, "template-type-substitution-element": { "name": "meta.template.expression.tsx", "begin": "\\$\\{", "beginCaptures": { "0": { "name": "punctuation.definition.template-expression.begin.tsx" } }, "end": "\\}", "endCaptures": { "0": { "name": "punctuation.definition.template-expression.end.tsx" } }, "patterns": [ { "include": "#type" } ], "contentName": "meta.embedded.line.tsx" }, "regex": { "patterns": [ { "name": "string.regexp.tsx", "begin": "(?|&&|\\|\\||\\*\\/)\\s*(\\/)(?![\\/*])(?=(?:[^\\/\\\\\\[\\()]|\\\\.|\\[([^\\]\\\\]|\\\\.)+\\]|\\(([^\\)\\\\]|\\\\.)+\\))+\\/([dgimsuy]+|(?![\\/\\*])|(?=\\/\\*))(?!\\s*[a-zA-Z0-9_$]))", "beginCaptures": { "1": { "name": "punctuation.definition.string.begin.tsx" } }, "end": "(/)([dgimsuy]*)", "endCaptures": { "1": { "name": "punctuation.definition.string.end.tsx" }, "2": { "name": "keyword.other.tsx" } }, "patterns": [ { "include": "#regexp" } ] }, { "name": "string.regexp.tsx", "begin": "((?", "captures": { "0": { "name": "keyword.other.back-reference.regexp" }, "1": { "name": "variable.other.regexp" } } }, { "name": "keyword.operator.quantifier.regexp", "match": "[?+*]|\\{(\\d+,\\d+|\\d+,|,\\d+|\\d+)\\}\\??" }, { "name": "keyword.operator.or.regexp", "match": "\\|" }, { "name": "meta.group.assertion.regexp", "begin": "(\\()((\\?=)|(\\?!)|(\\?<=)|(\\?))?", "beginCaptures": { "0": { "name": "punctuation.definition.group.regexp" }, "1": { "name": "punctuation.definition.group.no-capture.regexp" }, "2": { "name": "variable.other.regexp" } }, "end": "\\)", "endCaptures": { "0": { "name": "punctuation.definition.group.regexp" } }, "patterns": [ { "include": "#regexp" } ] }, { "name": "constant.other.character-class.set.regexp", "begin": "(\\[)(\\^)?", "beginCaptures": { "1": { "name": "punctuation.definition.character-class.regexp" }, "2": { "name": "keyword.operator.negation.regexp" } }, "end": "(\\])", "endCaptures": { "1": { "name": "punctuation.definition.character-class.regexp" } }, "patterns": [ { "name": "constant.other.character-class.range.regexp", "match": "(?:.|(\\\\(?:[0-7]{3}|x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4}))|(\\\\c[A-Z])|(\\\\.))\\-(?:[^\\]\\\\]|(\\\\(?:[0-7]{3}|x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4}))|(\\\\c[A-Z])|(\\\\.))", "captures": { "1": { "name": "constant.character.numeric.regexp" }, "2": { "name": "constant.character.control.regexp" }, "3": { "name": "constant.character.escape.backslash.regexp" }, "4": { "name": "constant.character.numeric.regexp" }, "5": { "name": "constant.character.control.regexp" }, "6": { "name": "constant.character.escape.backslash.regexp" } } }, { "include": "#regex-character-class" } ] }, { "include": "#regex-character-class" } ] }, "regex-character-class": { "patterns": [ { "name": "constant.other.character-class.regexp", "match": "\\\\[wWsSdDtrnvf]|\\." }, { "name": "constant.character.numeric.regexp", "match": "\\\\([0-7]{3}|x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4})" }, { "name": "constant.character.control.regexp", "match": "\\\\c[A-Z]" }, { "name": "constant.character.escape.backslash.regexp", "match": "\\\\." } ] }, "comment": { "patterns": [ { "name": "comment.block.documentation.tsx", "begin": "/\\*\\*(?!/)", "beginCaptures": { "0": { "name": "punctuation.definition.comment.tsx" } }, "end": "\\*/", "endCaptures": { "0": { "name": "punctuation.definition.comment.tsx" } }, "patterns": [ { "include": "#docblock" } ] }, { "name": "comment.block.tsx", "begin": "(/\\*)(?:\\s*((@)internal)(?=\\s|(\\*/)))?", "beginCaptures": { "1": { "name": "punctuation.definition.comment.tsx" }, "2": { "name": "storage.type.internaldeclaration.tsx" }, "3": { "name": "punctuation.decorator.internaldeclaration.tsx" } }, "end": "\\*/", "endCaptures": { "0": { "name": "punctuation.definition.comment.tsx" } } }, { "begin": "(^[ \\t]+)?((//)(?:\\s*((@)internal)(?=\\s|$))?)", "beginCaptures": { "1": { "name": "punctuation.whitespace.comment.leading.tsx" }, "2": { "name": "comment.line.double-slash.tsx" }, "3": { "name": "punctuation.definition.comment.tsx" }, "4": { "name": "storage.type.internaldeclaration.tsx" }, "5": { "name": "punctuation.decorator.internaldeclaration.tsx" } }, "end": "(?=$)", "contentName": "comment.line.double-slash.tsx" } ] }, "single-line-comment-consuming-line-ending": { "begin": "(^[ \\t]+)?((//)(?:\\s*((@)internal)(?=\\s|$))?)", "beginCaptures": { "1": { "name": "punctuation.whitespace.comment.leading.tsx" }, "2": { "name": "comment.line.double-slash.tsx" }, "3": { "name": "punctuation.definition.comment.tsx" }, "4": { "name": "storage.type.internaldeclaration.tsx" }, "5": { "name": "punctuation.decorator.internaldeclaration.tsx" } }, "end": "(?=^)", "contentName": "comment.line.double-slash.tsx" }, "directives": { "name": "comment.line.triple-slash.directive.tsx", "begin": "^(///)\\s*(?=<(reference|amd-dependency|amd-module)(\\s+(path|types|no-default-lib|lib|name|resolution-mode)\\s*=\\s*((\\'([^\\'\\\\]|\\\\.)*\\')|(\\\"([^\\\"\\\\]|\\\\.)*\\\")|(\\`([^\\`\\\\]|\\\\.)*\\`)))+\\s*/>\\s*$)", "beginCaptures": { "1": { "name": "punctuation.definition.comment.tsx" } }, "end": "(?=$)", "patterns": [ { "name": "meta.tag.tsx", "begin": "(<)(reference|amd-dependency|amd-module)", "beginCaptures": { "1": { "name": "punctuation.definition.tag.directive.tsx" }, "2": { "name": "entity.name.tag.directive.tsx" } }, "end": "/>", "endCaptures": { "0": { "name": "punctuation.definition.tag.directive.tsx" } }, "patterns": [ { "name": "entity.other.attribute-name.directive.tsx", "match": "path|types|no-default-lib|lib|name|resolution-mode" }, { "name": "keyword.operator.assignment.tsx", "match": "=" }, { "include": "#string" } ] } ] }, "docblock": { "patterns": [ { "match": "(?x)\n((@)(?:access|api))\n\\s+\n(private|protected|public)\n\\b", "captures": { "1": { "name": "storage.type.class.jsdoc" }, "2": { "name": "punctuation.definition.block.tag.jsdoc" }, "3": { "name": "constant.language.access-type.jsdoc" } } }, { "match": "(?x)\n((@)author)\n\\s+\n(\n [^@\\s<>*/]\n (?:[^@<>*/]|\\*[^/])*\n)\n(?:\n \\s*\n (<)\n ([^>\\s]+)\n (>)\n)?", "captures": { "1": { "name": "storage.type.class.jsdoc" }, "2": { "name": "punctuation.definition.block.tag.jsdoc" }, "3": { "name": "entity.name.type.instance.jsdoc" }, "4": { "name": "punctuation.definition.bracket.angle.begin.jsdoc" }, "5": { "name": "constant.other.email.link.underline.jsdoc" }, "6": { "name": "punctuation.definition.bracket.angle.end.jsdoc" } } }, { "match": "(?x)\n((@)borrows) \\s+\n((?:[^@\\s*/]|\\*[^/])+) # \n\\s+ (as) \\s+ # as\n((?:[^@\\s*/]|\\*[^/])+) # ", "captures": { "1": { "name": "storage.type.class.jsdoc" }, "2": { "name": "punctuation.definition.block.tag.jsdoc" }, "3": { "name": "entity.name.type.instance.jsdoc" }, "4": { "name": "keyword.operator.control.jsdoc" }, "5": { "name": "entity.name.type.instance.jsdoc" } } }, { "name": "meta.example.jsdoc", "begin": "((@)example)\\s+", "end": "(?=@|\\*/)", "beginCaptures": { "1": { "name": "storage.type.class.jsdoc" }, "2": { "name": "punctuation.definition.block.tag.jsdoc" } }, "patterns": [ { "match": "^\\s\\*\\s+" }, { "contentName": "constant.other.description.jsdoc", "begin": "\\G(<)caption(>)", "beginCaptures": { "0": { "name": "entity.name.tag.inline.jsdoc" }, "1": { "name": "punctuation.definition.bracket.angle.begin.jsdoc" }, "2": { "name": "punctuation.definition.bracket.angle.end.jsdoc" } }, "end": "()caption(>)|(?=\\*/)", "endCaptures": { "0": { "name": "entity.name.tag.inline.jsdoc" }, "1": { "name": "punctuation.definition.bracket.angle.begin.jsdoc" }, "2": { "name": "punctuation.definition.bracket.angle.end.jsdoc" } } }, { "match": "[^\\s@*](?:[^*]|\\*[^/])*", "captures": { "0": { "name": "source.embedded.tsx" } } } ] }, { "match": "(?x) ((@)kind) \\s+ (class|constant|event|external|file|function|member|mixin|module|namespace|typedef) \\b", "captures": { "1": { "name": "storage.type.class.jsdoc" }, "2": { "name": "punctuation.definition.block.tag.jsdoc" }, "3": { "name": "constant.language.symbol-type.jsdoc" } } }, { "match": "(?x)\n((@)see)\n\\s+\n(?:\n # URL\n (\n (?=https?://)\n (?:[^\\s*]|\\*[^/])+\n )\n |\n # JSDoc namepath\n (\n (?!\n # Avoid matching bare URIs (also acceptable as links)\n https?://\n |\n # Avoid matching {@inline tags}; we match those below\n (?:\\[[^\\[\\]]*\\])? # Possible description [preceding]{@tag}\n {@(?:link|linkcode|linkplain|tutorial)\\b\n )\n # Matched namepath\n (?:[^@\\s*/]|\\*[^/])+\n )\n)", "captures": { "1": { "name": "storage.type.class.jsdoc" }, "2": { "name": "punctuation.definition.block.tag.jsdoc" }, "3": { "name": "variable.other.link.underline.jsdoc" }, "4": { "name": "entity.name.type.instance.jsdoc" } } }, { "match": "(?x)\n((@)template)\n\\s+\n# One or more valid identifiers\n(\n [A-Za-z_$] # First character: non-numeric word character\n [\\w$.\\[\\]]* # Rest of identifier\n (?: # Possible list of additional identifiers\n \\s* , \\s*\n [A-Za-z_$]\n [\\w$.\\[\\]]*\n )*\n)", "captures": { "1": { "name": "storage.type.class.jsdoc" }, "2": { "name": "punctuation.definition.block.tag.jsdoc" }, "3": { "name": "variable.other.jsdoc" } } }, { "begin": "(?x)((@)template)\\s+(?={)", "beginCaptures": { "1": { "name": "storage.type.class.jsdoc" }, "2": { "name": "punctuation.definition.block.tag.jsdoc" } }, "end": "(?=\\s|\\*/|[^{}\\[\\]A-Za-z_$])", "patterns": [ { "include": "#jsdoctype" }, { "name": "variable.other.jsdoc", "match": "([A-Za-z_$][\\w$.\\[\\]]*)" } ] }, { "match": "(?x)\n(\n (@)\n (?:arg|argument|const|constant|member|namespace|param|var)\n)\n\\s+\n(\n [A-Za-z_$]\n [\\w$.\\[\\]]*\n)", "captures": { "1": { "name": "storage.type.class.jsdoc" }, "2": { "name": "punctuation.definition.block.tag.jsdoc" }, "3": { "name": "variable.other.jsdoc" } } }, { "begin": "((@)typedef)\\s+(?={)", "beginCaptures": { "1": { "name": "storage.type.class.jsdoc" }, "2": { "name": "punctuation.definition.block.tag.jsdoc" } }, "end": "(?=\\s|\\*/|[^{}\\[\\]A-Za-z_$])", "patterns": [ { "include": "#jsdoctype" }, { "name": "entity.name.type.instance.jsdoc", "match": "(?:[^@\\s*/]|\\*[^/])+" } ] }, { "begin": "((@)(?:arg|argument|const|constant|member|namespace|param|prop|property|var))\\s+(?={)", "beginCaptures": { "1": { "name": "storage.type.class.jsdoc" }, "2": { "name": "punctuation.definition.block.tag.jsdoc" } }, "end": "(?=\\s|\\*/|[^{}\\[\\]A-Za-z_$])", "patterns": [ { "include": "#jsdoctype" }, { "name": "variable.other.jsdoc", "match": "([A-Za-z_$][\\w$.\\[\\]]*)" }, { "name": "variable.other.jsdoc", "match": "(?x)\n(\\[)\\s*\n[\\w$]+\n(?:\n (?:\\[\\])? # Foo[ ].bar properties within an array\n \\. # Foo.Bar namespaced parameter\n [\\w$]+\n)*\n(?:\n \\s*\n (=) # [foo=bar] Default parameter value\n \\s*\n (\n # The inner regexes are to stop the match early at */ and to not stop at escaped quotes\n (?>\n \"(?:(?:\\*(?!/))|(?:\\\\(?!\"))|[^*\\\\])*?\" | # [foo=\"bar\"] Double-quoted\n '(?:(?:\\*(?!/))|(?:\\\\(?!'))|[^*\\\\])*?' | # [foo='bar'] Single-quoted\n \\[ (?:(?:\\*(?!/))|[^*])*? \\] | # [foo=[1,2]] Array literal\n (?:(?:\\*(?!/))|\\s(?!\\s*\\])|\\[.*?(?:\\]|(?=\\*/))|[^*\\s\\[\\]])* # Everything else\n )*\n )\n)?\n\\s*(?:(\\])((?:[^*\\s]|\\*[^\\s/])+)?|(?=\\*/))", "captures": { "1": { "name": "punctuation.definition.optional-value.begin.bracket.square.jsdoc" }, "2": { "name": "keyword.operator.assignment.jsdoc" }, "3": { "name": "source.embedded.tsx" }, "4": { "name": "punctuation.definition.optional-value.end.bracket.square.jsdoc" }, "5": { "name": "invalid.illegal.syntax.jsdoc" } } } ] }, { "begin": "(?x)\n(\n (@)\n (?:define|enum|exception|export|extends|lends|implements|modifies\n |namespace|private|protected|returns?|suppress|this|throws|type\n |yields?)\n)\n\\s+(?={)", "beginCaptures": { "1": { "name": "storage.type.class.jsdoc" }, "2": { "name": "punctuation.definition.block.tag.jsdoc" } }, "end": "(?=\\s|\\*/|[^{}\\[\\]A-Za-z_$])", "patterns": [ { "include": "#jsdoctype" } ] }, { "match": "(?x)\n(\n (@)\n (?:alias|augments|callback|constructs|emits|event|fires|exports?\n |extends|external|function|func|host|lends|listens|interface|memberof!?\n |method|module|mixes|mixin|name|requires|see|this|typedef|uses)\n)\n\\s+\n(\n (?:\n [^{}@\\s*] | \\*[^/]\n )+\n)", "captures": { "1": { "name": "storage.type.class.jsdoc" }, "2": { "name": "punctuation.definition.block.tag.jsdoc" }, "3": { "name": "entity.name.type.instance.jsdoc" } } }, { "contentName": "variable.other.jsdoc", "begin": "((@)(?:default(?:value)?|license|version))\\s+(([''\"]))", "beginCaptures": { "1": { "name": "storage.type.class.jsdoc" }, "2": { "name": "punctuation.definition.block.tag.jsdoc" }, "3": { "name": "variable.other.jsdoc" }, "4": { "name": "punctuation.definition.string.begin.jsdoc" } }, "end": "(\\3)|(?=$|\\*/)", "endCaptures": { "0": { "name": "variable.other.jsdoc" }, "1": { "name": "punctuation.definition.string.end.jsdoc" } } }, { "match": "((@)(?:default(?:value)?|license|tutorial|variation|version))\\s+([^\\s*]+)", "captures": { "1": { "name": "storage.type.class.jsdoc" }, "2": { "name": "punctuation.definition.block.tag.jsdoc" }, "3": { "name": "variable.other.jsdoc" } } }, { "name": "storage.type.class.jsdoc", "match": "(?x) (@) (?:abstract|access|alias|api|arg|argument|async|attribute|augments|author|beta|borrows|bubbles |callback|chainable|class|classdesc|code|config|const|constant|constructor|constructs|copyright |default|defaultvalue|define|deprecated|desc|description|dict|emits|enum|event|example|exception |exports?|extends|extension(?:_?for)?|external|externs|file|fileoverview|final|fires|for|func |function|generator|global|hideconstructor|host|ignore|implements|implicitCast|inherit[Dd]oc |inner|instance|interface|internal|kind|lends|license|listens|main|member|memberof!?|method |mixes|mixins?|modifies|module|name|namespace|noalias|nocollapse|nocompile|nosideeffects |override|overview|package|param|polymer(?:Behavior)?|preserve|private|prop|property|protected |public|read[Oo]nly|record|require[ds]|returns?|see|since|static|struct|submodule|summary |suppress|template|this|throws|todo|tutorial|type|typedef|unrestricted|uses|var|variation |version|virtual|writeOnce|yields?) \\b", "captures": { "1": { "name": "punctuation.definition.block.tag.jsdoc" } } }, { "include": "#inline-tags" }, { "match": "((@)(?:[_$[:alpha:]][_$[:alnum:]]*))(?=\\s+)", "captures": { "1": { "name": "storage.type.class.jsdoc" }, "2": { "name": "punctuation.definition.block.tag.jsdoc" } } } ] }, "brackets": { "patterns": [ { "begin": "{", "end": "}|(?=\\*/)", "patterns": [ { "include": "#brackets" } ] }, { "begin": "\\[", "end": "\\]|(?=\\*/)", "patterns": [ { "include": "#brackets" } ] } ] }, "inline-tags": { "patterns": [ { "name": "constant.other.description.jsdoc", "match": "(\\[)[^\\]]+(\\])(?={@(?:link|linkcode|linkplain|tutorial))", "captures": { "1": { "name": "punctuation.definition.bracket.square.begin.jsdoc" }, "2": { "name": "punctuation.definition.bracket.square.end.jsdoc" } } }, { "name": "entity.name.type.instance.jsdoc", "begin": "({)((@)(?:link(?:code|plain)?|tutorial))\\s*", "beginCaptures": { "1": { "name": "punctuation.definition.bracket.curly.begin.jsdoc" }, "2": { "name": "storage.type.class.jsdoc" }, "3": { "name": "punctuation.definition.inline.tag.jsdoc" } }, "end": "}|(?=\\*/)", "endCaptures": { "0": { "name": "punctuation.definition.bracket.curly.end.jsdoc" } }, "patterns": [ { "match": "\\G((?=https?://)(?:[^|}\\s*]|\\*[/])+)(\\|)?", "captures": { "1": { "name": "variable.other.link.underline.jsdoc" }, "2": { "name": "punctuation.separator.pipe.jsdoc" } } }, { "match": "\\G((?:[^{}@\\s|*]|\\*[^/])+)(\\|)?", "captures": { "1": { "name": "variable.other.description.jsdoc" }, "2": { "name": "punctuation.separator.pipe.jsdoc" } } } ] } ] }, "jsdoctype": { "patterns": [ { "contentName": "entity.name.type.instance.jsdoc", "begin": "\\G({)", "beginCaptures": { "0": { "name": "entity.name.type.instance.jsdoc" }, "1": { "name": "punctuation.definition.bracket.curly.begin.jsdoc" } }, "end": "((}))\\s*|(?=\\*/)", "endCaptures": { "1": { "name": "entity.name.type.instance.jsdoc" }, "2": { "name": "punctuation.definition.bracket.curly.end.jsdoc" } }, "patterns": [ { "include": "#brackets" } ] } ] }, "jsx": { "patterns": [ { "include": "#jsx-tag-without-attributes-in-expression" }, { "include": "#jsx-tag-in-expression" } ] }, "jsx-tag-without-attributes-in-expression": { "begin": "(?:*]|&&|\\|\\||\\?|\\*\\/|^await|[^\\._$[:alnum:]]await|^return|[^\\._$[:alnum:]]return|^default|[^\\._$[:alnum:]]default|^yield|[^\\._$[:alnum:]]yield|^)\\s*(?=(<)\\s*(?:([_$[:alpha:]][-_$[:alnum:].]*)(?))", "end": "(?!(<)\\s*(?:([_$[:alpha:]][-_$[:alnum:].]*)(?))", "patterns": [ { "include": "#jsx-tag-without-attributes" } ] }, "jsx-tag-without-attributes": { "name": "meta.tag.without-attributes.tsx", "begin": "(<)\\s*(?:([_$[:alpha:]][-_$[:alnum:].]*)(?)", "end": "()\\s*(?:([_$[:alpha:]][-_$[:alnum:].]*)(?)", "beginCaptures": { "1": { "name": "punctuation.definition.tag.begin.tsx" }, "2": { "name": "entity.name.tag.namespace.tsx" }, "3": { "name": "punctuation.separator.namespace.tsx" }, "4": { "name": "entity.name.tag.tsx" }, "5": { "name": "support.class.component.tsx" }, "6": { "name": "punctuation.definition.tag.end.tsx" } }, "endCaptures": { "1": { "name": "punctuation.definition.tag.begin.tsx" }, "2": { "name": "entity.name.tag.namespace.tsx" }, "3": { "name": "punctuation.separator.namespace.tsx" }, "4": { "name": "entity.name.tag.tsx" }, "5": { "name": "support.class.component.tsx" }, "6": { "name": "punctuation.definition.tag.end.tsx" } }, "contentName": "meta.jsx.children.tsx", "patterns": [ { "include": "#jsx-children" } ] }, "jsx-tag-in-expression": { "begin": "(?x)\n (?:*]|&&|\\|\\||\\?|\\*\\/|^await|[^\\._$[:alnum:]]await|^return|[^\\._$[:alnum:]]return|^default|[^\\._$[:alnum:]]default|^yield|[^\\._$[:alnum:]]yield|^)\\s*\n (?!<\\s*[_$[:alpha:]][_$[:alnum:]]*((\\s+extends\\s+[^=>])|,)) # look ahead is not type parameter of arrow\n (?=(<)\\s*(?:([_$[:alpha:]][-_$[:alnum:].]*)(?))", "end": "(?!(<)\\s*(?:([_$[:alpha:]][-_$[:alnum:].]*)(?))", "patterns": [ { "include": "#jsx-tag" } ] }, "jsx-tag": { "name": "meta.tag.tsx", "begin": "(?=(<)\\s*(?:([_$[:alpha:]][-_$[:alnum:].]*)(?))", "end": "(/>)|(?:()\\s*(?:([_$[:alpha:]][-_$[:alnum:].]*)(?))", "endCaptures": { "1": { "name": "punctuation.definition.tag.end.tsx" }, "2": { "name": "punctuation.definition.tag.begin.tsx" }, "3": { "name": "entity.name.tag.namespace.tsx" }, "4": { "name": "punctuation.separator.namespace.tsx" }, "5": { "name": "entity.name.tag.tsx" }, "6": { "name": "support.class.component.tsx" }, "7": { "name": "punctuation.definition.tag.end.tsx" } }, "patterns": [ { "begin": "(<)\\s*(?:([_$[:alpha:]][-_$[:alnum:].]*)(?)", "beginCaptures": { "1": { "name": "punctuation.definition.tag.begin.tsx" }, "2": { "name": "entity.name.tag.namespace.tsx" }, "3": { "name": "punctuation.separator.namespace.tsx" }, "4": { "name": "entity.name.tag.tsx" }, "5": { "name": "support.class.component.tsx" } }, "end": "(?=[/]?>)", "patterns": [ { "include": "#comment" }, { "include": "#type-arguments" }, { "include": "#jsx-tag-attributes" } ] }, { "begin": "(>)", "beginCaptures": { "1": { "name": "punctuation.definition.tag.end.tsx" } }, "end": "(?=)", "contentName": "meta.jsx.children.tsx", "patterns": [ { "include": "#jsx-children" } ] } ] }, "jsx-children": { "patterns": [ { "include": "#jsx-tag-without-attributes" }, { "include": "#jsx-tag" }, { "include": "#jsx-evaluated-code" }, { "include": "#jsx-entities" } ] }, "jsx-evaluated-code": { "contentName": "meta.embedded.expression.tsx", "begin": "\\{", "end": "\\}", "beginCaptures": { "0": { "name": "punctuation.section.embedded.begin.tsx" } }, "endCaptures": { "0": { "name": "punctuation.section.embedded.end.tsx" } }, "patterns": [ { "include": "#expression" } ] }, "jsx-entities": { "patterns": [ { "name": "constant.character.entity.tsx", "match": "(&)([a-zA-Z0-9]+|#[0-9]+|#x[0-9a-fA-F]+)(;)", "captures": { "1": { "name": "punctuation.definition.entity.tsx" }, "3": { "name": "punctuation.definition.entity.tsx" } } }, { "name": "invalid.illegal.bad-ampersand.tsx", "match": "&" } ] }, "jsx-tag-attributes": { "name": "meta.tag.attributes.tsx", "begin": "\\s+", "end": "(?=[/]?>)", "patterns": [ { "include": "#comment" }, { "include": "#jsx-tag-attribute-name" }, { "include": "#jsx-tag-attribute-assignment" }, { "include": "#jsx-string-double-quoted" }, { "include": "#jsx-string-single-quoted" }, { "include": "#jsx-evaluated-code" }, { "include": "#jsx-tag-attributes-illegal" } ] }, "jsx-tag-attribute-name": { "match": "(?x)\n \\s*\n (?:([_$[:alpha:]][-_$[:alnum:].]*)(:))?\n ([_$[:alpha:]][-_$[:alnum:]]*)\n (?=\\s|=|/?>|/\\*|//)", "captures": { "1": { "name": "entity.other.attribute-name.namespace.tsx" }, "2": { "name": "punctuation.separator.namespace.tsx" }, "3": { "name": "entity.other.attribute-name.tsx" } } }, "jsx-tag-attribute-assignment": { "name": "keyword.operator.assignment.tsx", "match": "=(?=\\s*(?:'|\"|{|/\\*|//|\\n))" }, "jsx-string-double-quoted": { "name": "string.quoted.double.tsx", "begin": "\"", "end": "\"", "beginCaptures": { "0": { "name": "punctuation.definition.string.begin.tsx" } }, "endCaptures": { "0": { "name": "punctuation.definition.string.end.tsx" } }, "patterns": [ { "include": "#jsx-entities" } ] }, "jsx-string-single-quoted": { "name": "string.quoted.single.tsx", "begin": "'", "end": "'", "beginCaptures": { "0": { "name": "punctuation.definition.string.begin.tsx" } }, "endCaptures": { "0": { "name": "punctuation.definition.string.end.tsx" } }, "patterns": [ { "include": "#jsx-entities" } ] }, "jsx-tag-attributes-illegal": { "name": "invalid.illegal.attribute.tsx", "match": "\\S+" } } } ================================================ FILE: apps/web/src/lib/shiki/languages/turtle.tmLanguage.json ================================================ { "name": "turtle", "scopeName": "source.turtle", "fileTypes": ["turtle", "ttl"], "patterns": [ { "include": "#rule-constraint" }, { "include": "#iriref" }, { "include": "#prefix" }, { "include": "#prefixed-name" }, { "include": "#comment" }, { "include": "#special-predicate" }, { "include": "#literals" }, { "include": "#language-tag" } ], "uuid": "230498230498sdfkj8909-34df-23dfs", "repository": { "prefix": { "name": "keyword.operator.turtle", "match": "(?i:@?base|@?prefix)\\s" }, "iriref": { "name": "entity.name.type.iriref.turtle", "match": "<[^\\x20-\\x20<>\"{}|^`\\\\]*>" }, "prefixed-name": { "name": "constant.complex.turtle", "match": "(\\w*:)(\\w*)", "captures": { "1": { "name": "storage.type.PNAME_NS.turtle" }, "2": { "name": "support.variable.PN_LOCAL.turtle" } } }, "comment": { "name": "comment.line.number-sign.turtle", "match": "#.*$" }, "special-predicate": { "name": "meta.specialPredicate.turtle", "match": "\\s(a)\\s", "captures": { "1": { "name": "keyword.control.turtle" } } }, "literals": { "patterns": [ { "include": "#string" }, { "include": "#numeric" }, { "include": "#boolean" } ] }, "string": { "patterns": [ { "include": "#single-squote-string-literal" }, { "include": "#single-dquote-string-literal" }, { "include": "#triple-squote-string-literal" }, { "include": "#triple-dquote-string-literal" }, { "include": "#triple-tick-string-literal" } ] }, "single-squote-string-literal": { "name": "string.quoted.single.turtle", "begin": "'", "beginCaptures": { "0": { "name": "punctuation.definition.string.begin.turtle" } }, "end": "'", "endCaptures": { "1": { "name": "punctuation.definition.string.end.turtle" }, "2": { "name": "invalid.illegal.newline.turtle" } }, "patterns": [ { "include": "#string-character-escape" } ] }, "single-dquote-string-literal": { "name": "string.quoted.double.turtle", "begin": "\"", "beginCaptures": { "0": { "name": "punctuation.definition.string.begin.turtle" } }, "end": "\"", "endCaptures": { "0": { "name": "punctuation.definition.string.end.turtle" } }, "patterns": [ { "include": "#string-character-escape" } ] }, "triple-squote-string-literal": { "name": "string.quoted.triple.turtle", "begin": "'''", "end": "'''", "beginCaptures": { "0": { "name": "punctuation.definition.string.begin.turtle" } }, "endCaptures": { "0": { "name": "punctuation.definition.string.end.turtle" } }, "patterns": [ { "include": "#string-character-escape" } ] }, "triple-dquote-string-literal": { "name": "string.quoted.triple.turtle", "begin": "\"\"\"", "end": "\"\"\"", "beginCaptures": { "0": { "name": "punctuation.definition.string.begin.turtle" } }, "endCaptures": { "0": { "name": "punctuation.definition.string.end.turtle" } }, "patterns": [ { "include": "#string-character-escape" } ] }, "triple-tick-string-literal": { "name": "string.quoted.triple.turtle", "begin": "```", "end": "```", "beginCaptures": { "0": { "name": "punctuation.definition.string.begin.turtle" } }, "endCaptures": { "0": { "name": "punctuation.definition.string.end.turtle" } }, "patterns": [ { "include": "#string-character-escape" } ] }, "string-character-escape": { "name": "constant.character.escape.turtle", "match": "\\\\(x\\h{2}|[0-2][0-7]{0,2}|3[0-6][0-7]?|37[0-7]?|[4-7][0-7]?|.|$)" }, "numeric": { "patterns": [ { "include": "#integer" } ] }, "integer": { "name": "constant.numeric.turtle", "match": "[+-]?(?:\\d+|[0-9]+\\.[0-9]*|\\.[0-9]+(?:[eE][+-]?\\d+)?)" }, "boolean": { "name": "constant.language.sparql", "match": "\\b(?i:true|false)\\b" }, "language-tag": { "name": "meta.string-literal-language-tag.turtle", "match": "@(\\w+)", "captures": { "1": { "name": "entity.name.class.turtle" } } }, "rule-constraint": { "name": "meta.rule-constraint.turtle", "begin": "(rule:content) (\"\"\")", "beginCaptures": { "1": { "patterns": [ { "include": "#prefixed-name" } ] }, "2": { "name": "string.quoted.triple.turtle" } }, "end": "\"\"\"", "endCaptures": { "0": { "name": "string.quoted.triple.turtle" } }, "patterns": [ { "include": "source.srs" } ] } } } ================================================ FILE: apps/web/src/lib/shiki/languages/twig.tmLanguage.json ================================================ { "fileTypes": ["twig", "html.twig"], "firstLineMatch": "\r\n |)$\r\n |\\{%\\s+(autoescape|block|embed|filter|for|if|macro|raw|sandbox|set|spaceless|trans|verbatim)\r\n )", "foldingStopMarker": "(?x)\r\n ((?i:body|div|dl|fieldset|form|head|li|ol|script|select|style|table|tbody|tfoot|thead|tr|ul)>\r\n |^(?!.*?$\r\n |\\{%\\s+end(autoescape|block|embed|filter|for|if|macro|raw|sandbox|set|spaceless|trans|verbatim)\r\n )", "keyEquivalent": "^~T", "name": "twig", "patterns": [ { "begin": "(<)([a-zA-Z0-9:]++)(?=[^>]*>\\2>)", "beginCaptures": { "1": { "name": "punctuation.definition.tag.html" }, "2": { "name": "entity.name.tag.html" } }, "end": "(>(<)/)(\\2)(>)", "endCaptures": { "1": { "name": "punctuation.definition.tag.html" }, "2": { "name": "meta.scope.between-tag-pair.html" }, "3": { "name": "entity.name.tag.html" }, "4": { "name": "punctuation.definition.tag.html" } }, "name": "meta.tag.any.html", "patterns": [ { "include": "#tag-stuff" } ] }, { "begin": "(<\\?)(xml)", "captures": { "1": { "name": "punctuation.definition.tag.html" }, "2": { "name": "entity.name.tag.xml.html" } }, "end": "(\\?>)", "name": "meta.tag.preprocessor.xml.html", "patterns": [ { "include": "#tag-generic-attribute" }, { "include": "#string-double-quoted" }, { "include": "#string-single-quoted" } ] }, { "begin": "", "captures": { "0": { "name": "punctuation.definition.comment.html" } } }, { "name": "meta.tag.sgml.html", "begin": "", "captures": { "0": { "name": "punctuation.definition.tag.html" } }, "patterns": [ { "name": "meta.tag.sgml.doctype.html", "begin": "(?i:DOCTYPE)", "end": "(?=>)", "captures": { "1": { "name": "entity.name.tag.doctype.html" } }, "patterns": [ { "name": "string.quoted.double.doctype.identifiers-and-DTDs.html", "match": "\"[^\">]*\"" } ] }, { "name": "constant.other.inline-data.html", "begin": "\\[CDATA\\[", "end": "]](?=>)" }, { "name": "invalid.illegal.bad-comments-or-CDATA.html", "match": "(\\s*)(?!--|>)\\S(\\s*)" } ] }, { "name": "meta.tag.block.any.html", "begin": "(?)([A-Z][a-zA-Z0-9:-]*\\b)", "beginCaptures": { "1": { "name": "punctuation.definition.tag.begin.html" }, "2": { "name": "support.class.component.html" } }, "end": "(>)", "endCaptures": { "1": { "name": "punctuation.definition.tag.end.html" } }, "patterns": [ { "include": "#tag-stuff" } ] }, { "name": "meta.tag.block.any.html", "begin": "(?)([a-z][a-zA-Z0-9:-]*\\b)", "beginCaptures": { "1": { "name": "punctuation.definition.tag.begin.html" }, "2": { "name": "entity.name.tag.block.any.html" } }, "end": "(>)", "endCaptures": { "1": { "name": "punctuation.definition.tag.end.html" } }, "patterns": [ { "include": "#tag-stuff" } ] }, { "name": "meta.tag.structure.any.html", "begin": "(?)((?i:body|head|html)\\b)", "end": "(>)", "endCaptures": { "1": { "name": "punctuation.definition.tag.end.html" } }, "captures": { "1": { "name": "punctuation.definition.tag.begin.html" }, "2": { "name": "entity.name.tag.structure.any.html" } }, "patterns": [ { "include": "#tag-stuff" } ] }, { "name": "meta.tag.block.any.html", "begin": "(?)((?i:address|blockquote|dd|div|dl|dt|fieldset|form|frame|frameset|h1|h2|h3|h4|h5|h6|iframe|noframes|object|ol|p|ul|applet|center|dir|hr|menu|pre)(?!-)\\b)", "beginCaptures": { "1": { "name": "punctuation.definition.tag.begin.html" }, "2": { "name": "entity.name.tag.block.any.html" } }, "end": "(>)", "endCaptures": { "1": { "name": "punctuation.definition.tag.end.html" } }, "patterns": [ { "include": "#tag-stuff" } ] }, { "name": "meta.tag.inline.any.html", "begin": "(?)((?i:a|abbr|acronym|area|b|base|basefont|bdo|big|br|button|caption|cite|code|col|colgroup|del|dfn|em|font|head|html|i|img|input|ins|isindex|kbd|label|legend|li|link|map|meta|noscript|optgroup|option|param|q|s|samp|script|select|small|span|strike|strong|style|sub|sup|table|tbody|td|textarea|tfoot|th|thead|title|tr|tt|u|var)(?!-)\\b)", "beginCaptures": { "1": { "name": "punctuation.definition.tag.begin.html" }, "2": { "name": "entity.name.tag.inline.any.html" } }, "end": "(/?>)", "endCaptures": { "1": { "name": "punctuation.definition.tag.end.html" } }, "patterns": [ { "include": "#tag-stuff" } ] }, { "name": "meta.tag.other.html", "begin": "(?)([a-zA-Z0-9:-]+)", "beginCaptures": { "1": { "name": "punctuation.definition.tag.begin.html" }, "2": { "name": "entity.name.tag.other.html" } }, "end": "(/?>)", "endCaptures": { "1": { "name": "punctuation.definition.tag.end.html" } }, "patterns": [ { "include": "#tag-stuff" } ] }, { "include": "#entities" }, { "name": "invalid.illegal.incomplete.html", "match": "<>" }, { "name": "invalid.illegal.bad-angle-bracket.html", "match": "<" } ], "repository": { "entities": { "patterns": [ { "name": "constant.character.entity.html", "match": "(&)([a-zA-Z0-9]+|#[0-9]+|#x[0-9a-fA-F]+)(;)", "captures": { "1": { "name": "punctuation.definition.entity.html" }, "3": { "name": "punctuation.definition.entity.html" } } }, { "name": "invalid.illegal.bad-ampersand.html", "match": "&" } ] }, "string-double-quoted": { "name": "string.quoted.double.html", "begin": "\"", "beginCaptures": { "0": { "name": "punctuation.definition.string.begin.html" } }, "end": "\"", "endCaptures": { "0": { "name": "punctuation.definition.string.end.html" } }, "patterns": [ { "include": "source.vue#vue-interpolations" }, { "include": "#entities" } ] }, "string-single-quoted": { "name": "string.quoted.single.html", "begin": "'", "beginCaptures": { "0": { "name": "punctuation.definition.string.begin.html" } }, "end": "'", "endCaptures": { "0": { "name": "punctuation.definition.string.end.html" } }, "patterns": [ { "include": "source.vue#vue-interpolations" }, { "include": "#entities" } ] }, "tag-generic-attribute": { "name": "entity.other.attribute-name.html", "match": "(?<=[^=])\\b([a-zA-Z0-9:\\-_]+)" }, "tag-id-attribute": { "name": "meta.attribute-with-value.id.html", "begin": "\\b(id)\\b\\s*(=)", "end": "(?!\\G)(?<='|\"|[^\\s<>/])", "captures": { "1": { "name": "entity.other.attribute-name.id.html" }, "2": { "name": "punctuation.separator.key-value.html" } }, "patterns": [ { "name": "string.quoted.double.html", "contentName": "meta.toc-list.id.html", "begin": "\"", "beginCaptures": { "0": { "name": "punctuation.definition.string.begin.html" } }, "end": "\"", "endCaptures": { "0": { "name": "punctuation.definition.string.end.html" } }, "patterns": [ { "include": "source.vue#vue-interpolations" }, { "include": "#entities" } ] }, { "name": "string.quoted.single.html", "contentName": "meta.toc-list.id.html", "begin": "'", "beginCaptures": { "0": { "name": "punctuation.definition.string.begin.html" } }, "end": "'", "endCaptures": { "0": { "name": "punctuation.definition.string.end.html" } }, "patterns": [ { "include": "source.vue#vue-interpolations" }, { "include": "#entities" } ] }, { "name": "string.unquoted.html", "match": "(?<==)(?:[^\\s<>/'\"]|/(?!>))+", "captures": { "0": { "name": "meta.toc-list.id.html" } } } ] }, "tag-stuff": { "patterns": [ { "include": "#vue-directives" }, { "include": "#tag-id-attribute" }, { "include": "#tag-generic-attribute" }, { "include": "#string-double-quoted" }, { "include": "#string-single-quoted" }, { "include": "#unquoted-attribute" } ] }, "unquoted-attribute": { "name": "string.unquoted.html", "match": "(?<==)(?:[^\\s<>/'\"]|/(?!>))+" }, "vue-directives": { "name": "meta.directive.vue", "begin": "(?:\\b(v-)|(:|@|#))([a-zA-Z0-9\\-_]+)(?:\\:([a-zA-Z\\-_]+))?(?:\\.([a-zA-Z\\-_]+))*\\s*(=)", "end": "(?<='|\")|(?=[\\s<>`])", "captures": { "1": { "name": "entity.other.attribute-name.html" }, "2": { "name": "punctuation.separator.key-value.html" }, "3": { "name": "entity.other.attribute-name.html" }, "4": { "name": "entity.other.attribute-name.html" }, "5": { "name": "entity.other.attribute-name.html" }, "6": { "name": "punctuation.separator.key-value.html" } }, "patterns": [ { "name": "source.directive.vue", "begin": "`", "beginCaptures": { "0": { "name": "punctuation.definition.string.begin.html" } }, "end": "`", "endCaptures": { "0": { "name": "punctuation.definition.string.end.html" } }, "patterns": [ { "include": "source.js#expression" } ] }, { "name": "source.directive.vue", "begin": "\"", "beginCaptures": { "0": { "name": "punctuation.definition.string.begin.html" } }, "end": "\"", "endCaptures": { "0": { "name": "punctuation.definition.string.end.html" } }, "patterns": [ { "include": "source.js#expression" } ] }, { "name": "source.directive.vue", "begin": "'", "beginCaptures": { "0": { "name": "punctuation.definition.string.begin.html" } }, "end": "'", "endCaptures": { "0": { "name": "punctuation.definition.string.end.html" } }, "patterns": [ { "include": "source.js#expression" } ] } ] } } } ================================================ FILE: apps/web/src/lib/shiki/languages/vue.tmLanguage.json ================================================ { "name": "vue", "scopeName": "source.vue", "fileTypes": ["vue"], "uuid": "5512c10d-4cc5-434c-b8fc-53b912f55ab3", "patterns": [ { "begin": "(<)(slim)", "beginCaptures": { "1": { "name": "punctuation.definition.tag.begin.html" }, "2": { "name": "entity.name.tag.style.html" } }, "end": "()(slim)(>)", "endCaptures": { "1": { "name": "punctuation.definition.tag.begin.html" }, "2": { "name": "entity.name.tag.style.html" }, "3": { "name": "punctuation.definition.tag.end.html" } }, "patterns": [ { "include": "#tag-stuff" }, { "begin": "(>)", "beginCaptures": { "1": { "name": "punctuation.definition.tag.end.html" } }, "end": "(?=)", "contentName": "text.slim", "patterns": [ { "include": "text.slim" } ] } ] }, { "begin": "(<)(i18n)", "beginCaptures": { "1": { "name": "punctuation.definition.tag.begin.html" }, "2": { "name": "entity.name.tag.style.html" } }, "end": "()(i18n)(>)", "endCaptures": { "1": { "name": "punctuation.definition.tag.begin.html" }, "2": { "name": "entity.name.tag.style.html" }, "3": { "name": "punctuation.definition.tag.end.html" } }, "patterns": [ { "include": "#tag-stuff" }, { "begin": "(>)", "beginCaptures": { "1": { "name": "punctuation.definition.tag.end.html" } }, "end": "(?=)", "contentName": "source.json", "patterns": [ { "include": "source.json" } ] } ] }, { "begin": "(<)(docs)", "beginCaptures": { "1": { "name": "punctuation.definition.tag.begin.html" }, "2": { "name": "entity.name.tag.style.html" } }, "end": "()(docs)(>)", "endCaptures": { "1": { "name": "punctuation.definition.tag.begin.html" }, "2": { "name": "entity.name.tag.style.html" }, "3": { "name": "punctuation.definition.tag.end.html" } }, "patterns": [ { "include": "#tag-stuff" }, { "begin": "(>)", "beginCaptures": { "1": { "name": "punctuation.definition.tag.end.html" } }, "end": "(?=)", "contentName": "text.html.markdown", "patterns": [ { "include": "text.html.markdown" } ] } ] }, { "name": "comment.block.html", "begin": "", "captures": { "0": { "name": "punctuation.definition.comment.html" } } }, { "begin": "(<)(?=template.*[^/>]*/>\\s*$)", "beginCaptures": { "1": { "name": "punctuation.definition.tag.begin.html" } }, "end": "(/>)", "endCaptures": { "1": { "name": "punctuation.definition.tag.end.html" } }, "patterns": [ { "begin": "(template)", "beginCaptures": { "1": { "name": "entity.name.tag.template.html" } }, "end": "(?=/>)", "patterns": [ { "include": "#tag-stuff" } ] } ] }, { "begin": "(<)(template)(?=[^>]*>[^/>]*)", "beginCaptures": { "1": { "name": "punctuation.definition.tag.begin.html" }, "2": { "name": "entity.name.tag.template.html" } }, "end": "()(template)(>)", "endCaptures": { "1": { "name": "punctuation.definition.tag.begin.html" }, "2": { "name": "entity.name.tag.template.html" }, "3": { "name": "punctuation.definition.tag.end.html" } }, "patterns": [ { "include": "#tag-stuff" }, { "begin": "(>)", "beginCaptures": { "1": { "name": "punctuation.definition.tag.end.html" } }, "end": "(?=)" } ] }, { "begin": "(<)(template)\\b(?=[^>]*lang=('jade'|\"jade\"|'pug'|\"pug\"))(?![^/>]*/>\\s*$)", "beginCaptures": { "1": { "name": "punctuation.definition.tag.begin.html" }, "2": { "name": "entity.name.tag.template.html" } }, "end": "()(template)(>)", "endCaptures": { "1": { "name": "punctuation.definition.tag.begin.html" }, "2": { "name": "entity.name.tag.template.html" }, "3": { "name": "punctuation.definition.tag.end.html" } }, "patterns": [ { "include": "#tag-stuff" }, { "contentName": "text.pug", "begin": "(>)", "beginCaptures": { "1": { "name": "punctuation.definition.tag.end.html" } }, "end": "(?=)", "patterns": [ { "include": "text.pug" } ] } ] }, { "begin": "(<)(template)\\b(?=[^>]*lang=('haml'|\"haml\"))(?![^/>]*/>\\s*$)", "beginCaptures": { "1": { "name": "punctuation.definition.tag.begin.html" }, "2": { "name": "entity.name.tag.template.html" } }, "end": "()(template)(>)", "endCaptures": { "1": { "name": "punctuation.definition.tag.begin.html" }, "2": { "name": "entity.name.tag.template.html" }, "3": { "name": "punctuation.definition.tag.end.html" } }, "patterns": [ { "include": "#tag-stuff" }, { "contentName": "text.haml", "begin": "(>)", "beginCaptures": { "1": { "name": "punctuation.definition.tag.end.html" } }, "end": "(?=)", "patterns": [ { "include": "text.haml" } ] } ] }, { "begin": "(<)(template)\\b(?=[^>]*lang=('slim'|\"slim\"))(?![^/>]*/>\\s*$)", "beginCaptures": { "1": { "name": "punctuation.definition.tag.begin.html" }, "2": { "name": "entity.name.tag.template.html" } }, "end": "()(template)(>)", "endCaptures": { "1": { "name": "punctuation.definition.tag.begin.html" }, "2": { "name": "entity.name.tag.template.html" }, "3": { "name": "punctuation.definition.tag.end.html" } }, "patterns": [ { "include": "#tag-stuff" }, { "contentName": "text.slim", "begin": "(>)", "beginCaptures": { "1": { "name": "punctuation.definition.tag.end.html" } }, "end": "(?=)", "patterns": [ { "include": "text.slim" } ] } ] }, { "begin": "(<)(template)\\b(?=[^>]*lang=('slm'|\"slm\"))(?![^/>]*/>\\s*$)", "beginCaptures": { "1": { "name": "punctuation.definition.tag.begin.html" }, "2": { "name": "entity.name.tag.template.html" } }, "end": "()(template)(>)", "endCaptures": { "1": { "name": "punctuation.definition.tag.begin.html" }, "2": { "name": "entity.name.tag.template.html" }, "3": { "name": "punctuation.definition.tag.end.html" } }, "patterns": [ { "include": "#tag-stuff" }, { "contentName": "text.jade.slm", "begin": "(>)", "beginCaptures": { "1": { "name": "punctuation.definition.tag.end.html" } }, "end": "(?=)", "patterns": [ { "include": "text.jade.slm" } ] } ] }, { "begin": "(<)(template)\\b(?=[^>]*lang=('liquid'|\"liquid\"))(?![^/>]*/>\\s*$)", "beginCaptures": { "1": { "name": "punctuation.definition.tag.begin.html" }, "2": { "name": "entity.name.tag.template.html" } }, "end": "()(template)(>)", "endCaptures": { "1": { "name": "punctuation.definition.tag.begin.html" }, "2": { "name": "entity.name.tag.template.html" }, "3": { "name": "punctuation.definition.tag.end.html" } }, "patterns": [ { "include": "#tag-stuff" }, { "contentName": "text.html.liquid", "begin": "(>)", "beginCaptures": { "1": { "name": "punctuation.definition.tag.end.html" } }, "end": "(?=)", "patterns": [ { "include": "text.html.liquid" } ] } ] }, { "begin": "(<)(template)(?![^/>]*/>\\s*$)", "beginCaptures": { "1": { "name": "punctuation.definition.tag.begin.html" }, "2": { "name": "entity.name.tag.template.html" } }, "end": "^()(template)(>)", "endCaptures": { "1": { "name": "punctuation.definition.tag.begin.html" }, "2": { "name": "entity.name.tag.template.html" }, "3": { "name": "punctuation.definition.tag.end.html" } }, "patterns": [ { "include": "#tag-stuff" }, { "contentName": "text.html.vue-html", "begin": "(>)", "beginCaptures": { "1": { "name": "punctuation.definition.tag.end.html" } }, "end": "(?=^)", "patterns": [ { "include": "text.html.vue-html" } ] } ] }, { "begin": "(<)(style)\\b(?=[^/>]*/>\\s*$)", "beginCaptures": { "1": { "name": "punctuation.definition.tag.begin.html" }, "2": { "name": "entity.name.tag.style.html" } }, "end": "(/>)", "endCaptures": { "1": { "name": "punctuation.definition.tag.end.html" } }, "patterns": [ { "include": "#tag-stuff" } ] }, { "begin": "(<)(style)(?=[^>]*>[^/>]*)", "beginCaptures": { "1": { "name": "punctuation.definition.tag.begin.html" }, "2": { "name": "entity.name.tag.style.html" } }, "end": "()(style)(>)", "endCaptures": { "1": { "name": "punctuation.definition.tag.begin.html" }, "2": { "name": "entity.name.tag.style.html" }, "3": { "name": "punctuation.definition.tag.end.html" } }, "patterns": [ { "include": "#tag-stuff" }, { "begin": "(>)", "beginCaptures": { "1": { "name": "punctuation.definition.tag.end.html" } }, "end": "(?=)" } ] }, { "begin": "(<)(style)\\b(?=[^>]*lang=('sass'|\"sass\"))(?![^/>]*/>\\s*$)", "beginCaptures": { "1": { "name": "punctuation.definition.tag.begin.html" }, "2": { "name": "entity.name.tag.style.html" } }, "end": "()(style)(>)", "endCaptures": { "1": { "name": "punctuation.definition.tag.begin.html" }, "2": { "name": "entity.name.tag.style.html" }, "3": { "name": "punctuation.definition.tag.end.html" } }, "patterns": [ { "include": "#tag-stuff" }, { "contentName": "source.sass", "begin": "(>)", "beginCaptures": { "1": { "name": "punctuation.definition.tag.end.html" } }, "end": "(?=)", "patterns": [ { "include": "source.sass" } ] } ] }, { "begin": "(<)(style)\\b(?=[^>]*lang=('scss'|\"scss\"))(?![^/>]*/>\\s*$)", "beginCaptures": { "1": { "name": "punctuation.definition.tag.begin.html" }, "2": { "name": "entity.name.tag.style.html" } }, "end": "()(style)(>)", "endCaptures": { "1": { "name": "punctuation.definition.tag.begin.html" }, "2": { "name": "entity.name.tag.style.html" }, "3": { "name": "punctuation.definition.tag.end.html" } }, "patterns": [ { "include": "#tag-stuff" }, { "contentName": "source.css.scss", "begin": "(>)", "beginCaptures": { "1": { "name": "punctuation.definition.tag.end.html" } }, "end": "(?=)", "patterns": [ { "include": "source.css.scss" } ] } ] }, { "begin": "(<)(style)\\b(?=[^>]*lang=('less'|\"less\"))(?![^/>]*/>\\s*$)", "beginCaptures": { "1": { "name": "punctuation.definition.tag.begin.html" }, "2": { "name": "entity.name.tag.style.html" } }, "end": "()(style)(>)", "endCaptures": { "1": { "name": "punctuation.definition.tag.begin.html" }, "2": { "name": "entity.name.tag.style.html" }, "3": { "name": "punctuation.definition.tag.end.html" } }, "patterns": [ { "include": "#tag-stuff" }, { "contentName": "source.css.less", "begin": "(>)", "beginCaptures": { "1": { "name": "punctuation.definition.tag.end.html" } }, "end": "(?=)", "patterns": [ { "include": "source.css.less" } ] } ] }, { "begin": "(<)(style)\\b(?=[^>]*lang=('stylus'|\"stylus\"))(?![^/>]*/>\\s*$)", "beginCaptures": { "1": { "name": "punctuation.definition.tag.begin.html" }, "2": { "name": "entity.name.tag.style.html" } }, "end": "()(style)(>)", "endCaptures": { "1": { "name": "punctuation.definition.tag.begin.html" }, "2": { "name": "entity.name.tag.style.html" }, "3": { "name": "punctuation.definition.tag.end.html" } }, "patterns": [ { "include": "#tag-stuff" }, { "contentName": "source.stylus", "begin": "(>)", "beginCaptures": { "1": { "name": "punctuation.definition.tag.end.html" } }, "end": "(?=)", "patterns": [ { "include": "source.stylus" } ] } ] }, { "begin": "(<)(style)\\b(?=[^>]*lang=('postcss'|\"postcss\"))(?![^/>]*/>\\s*$)", "beginCaptures": { "1": { "name": "punctuation.definition.tag.begin.html" }, "2": { "name": "entity.name.tag.style.html" } }, "end": "()(style)(>)", "endCaptures": { "1": { "name": "punctuation.definition.tag.begin.html" }, "2": { "name": "entity.name.tag.style.html" }, "3": { "name": "punctuation.definition.tag.end.html" } }, "patterns": [ { "include": "#tag-stuff" }, { "contentName": "source.css.postcss", "begin": "(>)", "beginCaptures": { "1": { "name": "punctuation.definition.tag.end.html" } }, "end": "(?=)", "patterns": [ { "include": "source.css.postcss" } ] } ] }, { "begin": "(<)(style)\\b(?=[^>]*lang=(['\"]sss['\"]))(?![^/>]*/>\\s*$)", "beginCaptures": { "1": { "name": "punctuation.definition.tag.begin.html" }, "2": { "name": "entity.name.tag.style.html" } }, "end": "()(style)(>)", "endCaptures": { "1": { "name": "punctuation.definition.tag.begin.html" }, "2": { "name": "entity.name.tag.style.html" }, "3": { "name": "punctuation.definition.tag.end.html" } }, "patterns": [ { "include": "#tag-stuff" }, { "contentName": "source.css.sugarss", "begin": "(>)", "beginCaptures": { "1": { "name": "punctuation.definition.tag.end.html" } }, "end": "(?=)", "patterns": [ { "include": "source.css.sugarss" } ] } ] }, { "begin": "(<)(style)(?![^/>]*/>\\s*$)", "beginCaptures": { "1": { "name": "punctuation.definition.tag.begin.html" }, "2": { "name": "entity.name.tag.style.html" } }, "end": "()(style)(>)", "endCaptures": { "1": { "name": "punctuation.definition.tag.begin.html" }, "2": { "name": "entity.name.tag.style.html" }, "3": { "name": "punctuation.definition.tag.end.html" } }, "patterns": [ { "include": "#tag-stuff" }, { "contentName": "source.css", "begin": "(>)", "beginCaptures": { "1": { "name": "punctuation.definition.tag.end.html" } }, "end": "(?=)", "patterns": [ { "include": "source.css" } ] } ] }, { "begin": "(<)(script)\\b(?=[^>]*/>$)", "beginCaptures": { "1": { "name": "punctuation.definition.tag.begin.html" }, "2": { "name": "entity.name.tag.script.html" } }, "end": "(/>)", "endCaptures": { "1": { "name": "punctuation.definition.tag.end.html" } }, "patterns": [ { "include": "#tag-stuff" } ] }, { "begin": "(<)(script)(?=[^>]*>[^/>]*)", "beginCaptures": { "1": { "name": "punctuation.definition.tag.begin.html" }, "2": { "name": "entity.name.tag.script.html" } }, "end": "()(script)(>)", "endCaptures": { "1": { "name": "punctuation.definition.tag.begin.html" }, "2": { "name": "entity.name.tag.script.html" }, "3": { "name": "punctuation.definition.tag.end.html" } }, "patterns": [ { "include": "#tag-stuff" }, { "begin": "(>)", "beginCaptures": { "1": { "name": "punctuation.definition.tag.end.html" } }, "end": "(?=)" } ] }, { "begin": "(<)(script)\\b(?=[^>]*lang=('ts'|\"ts\"))(?![^/>]*/>\\s*$)", "beginCaptures": { "1": { "name": "punctuation.definition.tag.begin.html" }, "2": { "name": "entity.name.tag.script.html" } }, "end": "()(script)(>)", "endCaptures": { "1": { "name": "punctuation.definition.tag.begin.html" }, "2": { "name": "entity.name.tag.script.html" }, "3": { "name": "punctuation.definition.tag.end.html" } }, "patterns": [ { "include": "#tag-stuff" }, { "contentName": "source.ts", "begin": "(>)", "beginCaptures": { "1": { "name": "punctuation.definition.tag.end.html" } }, "end": "(?=)", "patterns": [ { "include": "source.ts" } ] } ] }, { "begin": "(<)(script)\\b(?=[^>]*lang=('coffee'|\"coffee\"))(?![^/>]*/>\\s*$)", "beginCaptures": { "1": { "name": "punctuation.definition.tag.begin.html" }, "2": { "name": "entity.name.tag.script.html" } }, "end": "()(script)(>)", "endCaptures": { "1": { "name": "punctuation.definition.tag.begin.html" }, "2": { "name": "entity.name.tag.script.html" }, "3": { "name": "punctuation.definition.tag.end.html" } }, "patterns": [ { "include": "#tag-stuff" }, { "contentName": "source.coffee", "begin": "(>)", "beginCaptures": { "1": { "name": "punctuation.definition.tag.end.html" } }, "end": "(?=)", "patterns": [ { "include": "source.coffee" } ] } ] }, { "begin": "(<)(script)(?![^/>]*/>\\s*$)", "beginCaptures": { "1": { "name": "punctuation.definition.tag.begin.html" }, "2": { "name": "entity.name.tag.script.html" } }, "end": "()(script)(>)", "endCaptures": { "1": { "name": "punctuation.definition.tag.begin.html" }, "2": { "name": "entity.name.tag.script.html" }, "3": { "name": "punctuation.definition.tag.end.html" } }, "patterns": [ { "include": "#tag-stuff" }, { "contentName": "source.js", "begin": "(>)", "beginCaptures": { "1": { "name": "punctuation.definition.tag.end.html" } }, "end": "(?=)", "patterns": [ { "include": "source.js" } ] } ] } ], "repository": { "entities": { "patterns": [ { "name": "constant.character.entity.html", "match": "(&)([a-zA-Z0-9]+|#[0-9]+|#x[0-9a-fA-F]+)(;)", "captures": { "1": { "name": "punctuation.definition.entity.html" }, "3": { "name": "punctuation.definition.entity.html" } } }, { "name": "invalid.illegal.bad-ampersand.html", "match": "&" } ] }, "string-double-quoted": { "name": "string.quoted.double.html", "begin": "\"", "beginCaptures": { "0": { "name": "punctuation.definition.string.begin.html" } }, "end": "\"", "endCaptures": { "0": { "name": "punctuation.definition.string.end.html" } }, "patterns": [ { "include": "#vue-interpolations" }, { "include": "#entities" } ] }, "string-single-quoted": { "name": "string.quoted.single.html", "begin": "'", "beginCaptures": { "0": { "name": "punctuation.definition.string.begin.html" } }, "end": "'", "endCaptures": { "0": { "name": "punctuation.definition.string.end.html" } }, "patterns": [ { "include": "#vue-interpolations" }, { "include": "#entities" } ] }, "tag-generic-attribute": { "name": "entity.other.attribute-name.html", "match": "\\b([a-zA-Z\\-:_]+)" }, "tag-id-attribute": { "name": "meta.attribute-with-value.id.html", "begin": "\\b(id)\\b\\s*(=)", "end": "(?<='|\")", "captures": { "1": { "name": "entity.other.attribute-name.id.html" }, "2": { "name": "punctuation.separator.key-value.html" } }, "patterns": [ { "name": "string.quoted.double.html", "contentName": "meta.toc-list.id.html", "begin": "\"", "beginCaptures": { "0": { "name": "punctuation.definition.string.begin.html" } }, "end": "\"", "endCaptures": { "0": { "name": "punctuation.definition.string.end.html" } }, "patterns": [ { "include": "#vue-interpolations" }, { "include": "#entities" } ] }, { "name": "string.quoted.single.html", "contentName": "meta.toc-list.id.html", "begin": "'", "beginCaptures": { "0": { "name": "punctuation.definition.string.begin.html" } }, "end": "'", "endCaptures": { "0": { "name": "punctuation.definition.string.end.html" } }, "patterns": [ { "include": "#vue-interpolations" }, { "include": "#entities" } ] } ] }, "tag-stuff": { "patterns": [ { "include": "#vue-directives" }, { "include": "#tag-id-attribute" }, { "include": "#tag-generic-attribute" }, { "include": "#string-double-quoted" }, { "include": "#string-single-quoted" } ] }, "vue-directives": { "name": "meta.directive.vue", "begin": "(?:\\b(v-)|(:|@|#))([a-zA-Z0-9\\-_]+)(?:\\:([a-zA-Z\\-_]+))?(?:\\.([a-zA-Z\\-_]+))*\\s*(=)", "end": "(?<='|\")|(?=[\\s<>`])", "captures": { "1": { "name": "entity.other.attribute-name.html" }, "2": { "name": "punctuation.separator.key-value.html" }, "3": { "name": "entity.other.attribute-name.html" }, "4": { "name": "entity.other.attribute-name.html" }, "5": { "name": "entity.other.attribute-name.html" }, "6": { "name": "punctuation.separator.key-value.html" } }, "patterns": [ { "name": "source.directive.vue", "begin": "`", "beginCaptures": { "0": { "name": "punctuation.definition.string.begin.html" } }, "end": "`", "endCaptures": { "0": { "name": "punctuation.definition.string.end.html" } }, "patterns": [ { "include": "source.js#expression" } ] }, { "name": "source.directive.vue", "begin": "\"", "beginCaptures": { "0": { "name": "punctuation.definition.string.begin.html" } }, "end": "\"", "endCaptures": { "0": { "name": "punctuation.definition.string.end.html" } }, "patterns": [ { "include": "source.js#expression" } ] }, { "name": "source.directive.vue", "begin": "'", "beginCaptures": { "0": { "name": "punctuation.definition.string.begin.html" } }, "end": "'", "endCaptures": { "0": { "name": "punctuation.definition.string.end.html" } }, "patterns": [ { "include": "source.js#expression" } ] } ] }, "vue-interpolations": { "patterns": [ { "name": "expression.embedded.vue", "begin": "\\{\\{\\{?", "beginCaptures": { "0": { "name": "punctuation.definition.generic.begin.html" } }, "end": "\\}\\}\\}?", "endCaptures": { "0": { "name": "punctuation.definition.generic.end.html" } }, "patterns": [ { "include": "source.js#expression" } ] } ] } } } ================================================ FILE: apps/web/src/lib/shiki/languages/wasm.tmLanguage.json ================================================ { "name": "wasm", "scopeName": "source.wat", "patterns": [ { "include": "#comments" }, { "include": "#strings" }, { "include": "#instructions" }, { "include": "#types" }, { "include": "#modules" }, { "include": "#constants" }, { "include": "#invalid" } ], "repository": { "comments": { "patterns": [ { "comment": "Line comment", "name": "comment.line.wat", "match": "(;;).*$", "captures": { "1": { "name": "punctuation.definition.comment.wat" } } }, { "comment": "Block comment", "name": "comment.block.wat", "begin": "\\(;", "beginCaptures": { "0": { "name": "punctuation.definition.comment.wat" } }, "end": ";\\)", "endCaptures": { "0": { "name": "punctuation.definition.comment.wat" } } } ] }, "strings": { "comment": "String literal", "name": "string.quoted.double.wat", "begin": "\"", "end": "\"", "beginCaptures": { "0": { "name": "punctuation.definition.string.begin" } }, "endCaptures": { "0": { "name": "punctuation.definition.string.end" } }, "patterns": [ { "name": "constant.character.escape.wat", "match": "\\\\(n|t|\\\\|'|\"|[0-9a-fA-F]{2})" } ] }, "instructions": { "patterns": [ { "comment": "Non-trapping float-to-int conversions", "patterns": [ { "comment": "Conversion instruction [nontrapping-float-to-int-conversions]", "name": "keyword.operator.word.wat", "match": "\\b(i32|i64)\\.trunc_sat_f(?:32|64)_[su]\\b", "captures": { "1": { "name": "support.class.wat" } } } ] }, { "comment": "Sign-extension operators", "patterns": [ { "comment": "Numeric instruction (i32) [sign-extension-ops]", "name": "keyword.operator.word.wat", "match": "\\b(i32)\\.(?:extend(?:8|16)_s)\\b", "captures": { "1": { "name": "support.class.wat" } } }, { "comment": "Numeric instruction (i64) [sign-extension-ops]", "name": "keyword.operator.word.wat", "match": "\\b(i64)\\.(?:extend(?:8|16|32)_s)\\b", "captures": { "1": { "name": "support.class.wat" } } } ] }, { "comment": "Bulk memory operations", "patterns": [ { "comment": "Memory instruction [bulk-memory-operations]", "name": "keyword.operator.word.wat", "match": "\\b(memory)\\.(?:copy|fill|init|drop)\\b", "captures": { "1": { "name": "support.class.wat" } } } ] }, { "comment": "Fixed-width SIMD", "patterns": [ { "comment": "Vector instruction (v128) [simd]", "name": "keyword.operator.word.wat", "match": "\\b(v128)\\.(?:const|and|or|xor|not|andnot|bitselect|load|store)\\b", "captures": { "1": { "name": "support.class.wat" } } }, { "comment": "Vector instruction (i8x16) [simd]", "name": "keyword.operator.word.wat", "match": "\\b(i8x16)\\.(?:splat|replace_lane|add|sub|mul|neg|shl|shr_[su]|eq|ne|lt_[su]|le_[su]|gt_[su]|ge_[su]|min_[su]|max_[su]|any_true|all_true|extract_lane_[su]|add_saturate_[su]|sub_saturate_[su]|avgr_u|narrow_i16x8_[su])\\b", "captures": { "1": { "name": "support.class.wat" } } }, { "comment": "Vector instruction (i16x8) [simd]", "name": "keyword.operator.word.wat", "match": "\\b(i16x8)\\.(?:splat|replace_lane|add|sub|mul|neg|shl|shr_[su]|eq|ne|lt_[su]|le_[su]|gt_[su]|ge_[su]|min_[su]|max_[su]|any_true|all_true|extract_lane_[su]|add_saturate_[su]|sub_saturate_[su]|avgr_u|load8x8_[su]|narrow_i32x4_[su]|widen_(low|high)_i8x16_[su])\\b", "captures": { "1": { "name": "support.class.wat" } } }, { "comment": "Vector instruction (i32x4) [simd]", "name": "keyword.operator.word.wat", "match": "\\b(i32x4)\\.(?:splat|replace_lane|add|sub|mul|neg|shl|shr_[su]|eq|ne|lt_[su]|le_[su]|gt_[su]|ge_[su]|min_[su]|max_[su]|any_true|all_true|extract_lane|load16x4_[su]|trunc_sat_f32x4_[su]|widen_(low|high)_i16x8_[su])\\b", "captures": { "1": { "name": "support.class.wat" } } }, { "comment": "Vector instruction (i64x2) [simd]", "name": "keyword.operator.word.wat", "match": "\\b(i64x2)\\.(?:splat|replace_lane|add|sub|mul|neg|shl|shr_[su]|extract_lane|load32x2_[su])\\b", "captures": { "1": { "name": "support.class.wat" } } }, { "comment": "Vector instruction (f32x4) [simd]", "name": "keyword.operator.word.wat", "match": "\\b(f32x4)\\.(?:splat|replace_lane|add|sub|mul|neg|extract_lane|eq|ne|lt|le|gt|ge|abs|min|max|div|sqrt|convert_i32x4_[su])\\b", "captures": { "1": { "name": "support.class.wat" } } }, { "comment": "Vector instruction (f64x2) [simd]", "name": "keyword.operator.word.wat", "match": "\\b(f64x2)\\.(?:splat|replace_lane|add|sub|mul|neg|extract_lane|eq|ne|lt|le|gt|ge|abs|min|max|div|sqrt)\\b", "captures": { "1": { "name": "support.class.wat" } } }, { "comment": "Vector instruction (v8x16) [simd]", "name": "keyword.operator.word.wat", "match": "\\b(v8x16)\\.(?:load_splat|shuffle|swizzle)\\b", "captures": { "1": { "name": "support.class.wat" } } }, { "comment": "Vector instruction (v16x8) [simd]", "name": "keyword.operator.word.wat", "match": "\\b(v16x8)\\.load_splat\\b", "captures": { "1": { "name": "support.class.wat" } } }, { "comment": "Vector instruction (v32x4) [simd]", "name": "keyword.operator.word.wat", "match": "\\b(v32x4)\\.load_splat\\b", "captures": { "1": { "name": "support.class.wat" } } }, { "comment": "Vector instruction (v64x2) [simd]", "name": "keyword.operator.word.wat", "match": "\\b(v64x2)\\.load_splat\\b", "captures": { "1": { "name": "support.class.wat" } } } ] }, { "comment": "Threads", "patterns": [ { "comment": "Atomic instruction (i32) [threads]", "name": "keyword.operator.word.wat", "match": "\\b(i32)\\.(atomic)\\.(?:load(?:8_u|16_u)?|store(?:8|16)?|wait|(rmw)\\.(?:add|sub|and|or|xor|xchg|cmpxchg)|(rmw8|rmw16)\\.(?:add_u|sub_u|and_u|or_u|xor_u|xchg_u|cmpxchg_u))\\b", "captures": { "1": { "name": "support.class.wat" }, "2": { "name": "support.class.wat" }, "3": { "name": "support.class.wat" }, "4": { "name": "support.class.wat" } } }, { "comment": "Atomic instruction (i64) [threads]", "name": "keyword.operator.word.wat", "match": "\\b(i64)\\.(atomic)\\.(?:load(?:8_u|16_u|32_u)?|store(?:8|16|32)?|wait|(rmw)\\.(?:add|sub|and|or|xor|xchg|cmpxchg)|(rmw8|rmw16|rmw32)\\.(?:add_u|sub_u|and_u|or_u|xor_u|xchg_u|cmpxchg_u))\\b", "captures": { "1": { "name": "support.class.wat" }, "2": { "name": "support.class.wat" }, "3": { "name": "support.class.wat" }, "4": { "name": "support.class.wat" } } }, { "comment": "Atomic instruction [threads]", "name": "keyword.operator.word.wat", "match": "\\b(atomic)\\.(?:notify|fence)\\b", "captures": { "1": { "name": "support.class.wat" } } }, { "comment": "Shared modifier [threads]", "name": "storage.modifier.wat", "match": "\\bshared\\b" } ] }, { "comment": "Reference types", "patterns": [ { "comment": "Reference instruction [reference-types]", "name": "keyword.operator.word.wat", "match": "\\b(ref)\\.(?:null|is_null|func|extern)\\b", "captures": { "1": { "name": "support.class.wat" } } }, { "comment": "Table instruction [reference-types]", "name": "keyword.operator.word.wat", "match": "\\b(table)\\.(?:get|size|grow|fill|init|copy)\\b", "captures": { "1": { "name": "support.class.wat" } } }, { "comment": "Type name [reference-types]", "name": "entity.name.type.wat", "match": "\\b(?:externref|funcref|nullref)\\b" } ] }, { "comment": "Tail Call", "patterns": [ { "comment": "Control instruction [tail-call]", "name": "keyword.control.wat", "match": "\\breturn_call(?:_indirect)?\\b" } ] }, { "comment": "Exception handling", "patterns": [ { "comment": "Control instruction [exception-handling]", "name": "keyword.control.wat", "match": "\\b(?:try|catch|throw|rethrow|br_on_exn)\\b" }, { "comment": "Module element [exception-handling]", "name": "storage.type.wat", "match": "(?<=\\()event\\b" } ] }, { "comment": "Binaryen extensions", "patterns": [ { "comment": "Pseudo stack instruction [binaryen]", "name": "keyword.operator.word.wat", "match": "\\b(i32|i64|f32|f64|externref|funcref|nullref|exnref)\\.(?:push|pop)\\b", "captures": { "1": { "name": "support.class.wat" } } } ] }, { "comment": "MVP", "patterns": [ { "comment": "Memory instruction (i32) [mvp]", "name": "keyword.operator.word.wat", "match": "\\b(i32)\\.(?:load|load(?:8|16)(?:_[su])?|store(?:8|16)?)\\b", "captures": { "1": { "name": "support.class.type.wat" } } }, { "comment": "Memory instruction (i64) [mvp]", "name": "keyword.operator.word.wat", "match": "\\b(i64)\\.(?:load|load(?:8|16|32)(?:_[su])?|store(?:8|16|32)?)\\b", "captures": { "1": { "name": "support.class.type.wat" } } }, { "comment": "Memory instruction (f32/f64) [mvp]", "name": "keyword.operator.word.wat", "match": "\\b(f32|f64)\\.(?:load|store)\\b", "captures": { "1": { "name": "support.class.type.wat" } } }, { "comment": "Memory instruction [mvp]", "name": "keyword.operator.word.wat", "match": "\\b(memory)\\.(?:size|grow)\\b", "captures": { "1": { "name": "support.class.memory.wat" } } }, { "comment": "Memory instruction attribute [mvp]", "match": "\\b(offset|align)=\\b", "captures": { "1": { "name": "entity.other.attribute-name.wat" } } }, { "comment": "Variable instruction (local) [mvp]", "name": "keyword.operator.word.wat", "match": "\\b(local)\\.(?:get|set|tee)\\b", "captures": { "1": { "name": "support.class.local.wat" } } }, { "comment": "Variable instruction (global) [mvp]", "name": "keyword.operator.word.wat", "match": "\\b(global)\\.(?:get|set)\\b", "captures": { "1": { "name": "support.class.global.wat" } } }, { "comment": "Numeric instruction (i32/i64) [mvp]", "name": "keyword.operator.word.wat", "match": "\\b(i32|i64)\\.(const|eqz|eq|ne|lt_[su]|gt_[su]|le_[su]|ge_[su]|clz|ctz|popcnt|add|sub|mul|div_[su]|rem_[su]|and|or|xor|shl|shr_[su]|rotl|rotr)\\b", "captures": { "1": { "name": "support.class.type.wat" } } }, { "comment": "Numeric instruction (f32/f64) [mvp]", "name": "keyword.operator.word.wat", "match": "\\b(f32|f64)\\.(const|eq|ne|lt|gt|le|ge|abs|neg|ceil|floor|trunc|nearest|sqrt|add|sub|mul|div|min|max|copysign)\\b", "captures": { "1": { "name": "support.class.type.wat" } } }, { "comment": "Conversion instruction (i32) [mvp]", "name": "keyword.operator.word.wat", "match": "\\b(i32)\\.(wrap_i64|trunc_(f32|f64)_[su]|reinterpret_f32)\\b", "captures": { "1": { "name": "support.class.type.wat" } } }, { "comment": "Conversion instruction (i64) [mvp]", "name": "keyword.operator.word.wat", "match": "\\b(i64)\\.(extend_i32_[su]|trunc_f(32|64)_[su]|reinterpret_f64)\\b", "captures": { "1": { "name": "support.class.type.wat" } } }, { "comment": "Conversion instruction (f32) [mvp]", "name": "keyword.operator.word.wat", "match": "\\b(f32)\\.(convert_i(32|64)_[su]|demote_f64|reinterpret_i32)\\b", "captures": { "1": { "name": "support.class.type.wat" } } }, { "comment": "Conversion instruction (f64) [mvp]", "name": "keyword.operator.word.wat", "match": "\\b(f64)\\.(convert_i(32|64)_[su]|promote_f32|reinterpret_i64)\\b", "captures": { "1": { "name": "support.class.type.wat" } } }, { "comment": "Control instruction [mvp]", "name": "keyword.control.wat", "match": "\\b(?:unreachable|nop|block|loop|if|then|else|end|br|br_if|br_table|return|call|call_indirect)\\b" }, { "comment": "Parametric instruction [mvp]", "name": "keyword.operator.word.wat", "match": "\\b(?:drop|select)\\b" } ] } ] }, "types": { "patterns": [ { "comment": "Fixed-width SIMD", "patterns": [ { "comment": "Type name [simd]", "name": "entity.name.type.wat", "match": "\\bv128\\b(?!\\.)" } ] }, { "comment": "Reference types", "patterns": [ { "comment": "Type name [reference-types]", "name": "entity.name.type.wat", "match": "\\b(?:externref|funcref|nullref)\\b(?!\\.)" } ] }, { "comment": "Exception handling", "patterns": [ { "comment": "Type name [exception-handling]", "name": "entity.name.type.wat", "match": "\\bexnref\\b(?!\\.)" } ] }, { "comment": "MVP", "patterns": [ { "comment": "Type name [mvp]", "name": "entity.name.type.wat", "match": "\\b(?:i32|i64|f32|f64)\\b(?!\\.)" } ] } ] }, "modules": { "patterns": [ { "comment": "Bulk memory operations", "patterns": [ { "comment": "Passive modifier [bulk-memory-operations]", "match": "(?<=\\(data)\\s+(passive)\\b", "captures": { "1": { "name": "storage.modifier.wat" } } } ] }, { "comment": "MVP", "patterns": [ { "comment": "Module element [mvp]", "name": "storage.type.wat", "match": "(?<=\\()(?:module|import|export|memory|data|table|elem|start|func|type|param|result|global|local)\\b" }, { "comment": "Mutable global modifier [mvp]", "name": "storage.modifier.wat", "match": "(?<=\\()\\s*(mut)\\b", "captures": { "1": { "name": "storage.modifier.wat" } } }, { "comment": "Function name [mvp]", "match": "(?<=\\(func|\\(start|call|return_call|ref\\.func)\\s+(\\$[0-9A-Za-z!#$%&'*+\\-./:<=>?@\\\\^_`|~]*)", "captures": { "1": { "name": "entity.name.function.wat" } } }, { "comment": "Function name(s) (elem) [mvp]", "begin": "\\)\\s+(\\$[0-9A-Za-z!#$%&'*+\\-./:<=>?@\\\\^_`|~]*)", "beginCaptures": { "1": { "name": "entity.name.function.wat" } }, "end": "\\)", "patterns": [ { "name": "entity.name.function.wat", "match": "(?<=\\s)\\$[0-9A-Za-z!#$%&'*+\\-./:<=>?@\\\\^_`|~]*" } ] }, { "comment": "Function type [mvp]", "match": "(?<=\\(type)\\s+(\\$[0-9A-Za-z!#$%&'*+\\-./:<=>?@\\\\^_`|~]*)", "captures": { "1": { "name": "support.type.function.wat" } } }, { "comment": "Variable name or branch label [mvp]", "name": "variable.other.wat", "match": "\\$[0-9A-Za-z!#$%&'*+\\-./:<=>?@\\\\^_`|~]*\\b" } ] } ] }, "constants": { "patterns": [ { "comment": "Fixed-width SIMD", "patterns": [ { "comment": "Vector literal (i8x16) [simd]", "name": "constant.numeric.vector.wat", "match": "\\b(i8x16)(?:\\s+0x[0-9a-fA-F]{1,2}){16}\\b", "captures": { "1": { "name": "support.type.wat" } } }, { "comment": "Vector literal (i16x8) [simd]", "name": "constant.numeric.vector.wat", "match": "\\b(i16x8)(?:\\s+0x[0-9a-fA-F]{1,4}){8}\\b", "captures": { "1": { "name": "support.type.wat" } } }, { "comment": "Vector literal (i32x4) [simd]", "name": "constant.numeric.vector.wat", "match": "\\b(i32x4)(?:\\s+0x[0-9a-fA-F]{1,8}){4}\\b", "captures": { "1": { "name": "support.type.wat" } } }, { "comment": "Vector literal (i64x2) [simd]", "name": "constant.numeric.vector.wat", "match": "\\b(i64x2)(?:\\s+0x[0-9a-fA-F]{1,16}){2}\\b", "captures": { "1": { "name": "support.type.wat" } } } ] }, { "comment": "MVP", "patterns": [ { "comment": "Floating point literal", "name": "constant.numeric.float.wat", "match": "[+-]?\\b[0-9][0-9]*(?:\\.[0-9][0-9]*)?(?:[eE][+-]?[0-9]+)?\\b" }, { "comment": "Floating point hexadecimal literal", "name": "constant.numeric.float.wat", "match": "[+-]?\\b0x([0-9a-fA-F]*\\.[0-9a-fA-F]+|[0-9a-fA-F]+\\.?)[Pp][+-]?[0-9]+\\b" }, { "comment": "Floating point infinity", "name": "constant.numeric.float.wat", "match": "[+-]?\\binf\\b" }, { "comment": "Floating point literal (NaN)", "name": "constant.numeric.float.wat", "match": "[+-]?\\bnan:0x[0-9a-fA-F][0-9a-fA-F]*\\b" }, { "comment": "Integer literal", "name": "constant.numeric.integer.wat", "match": "[+-]?\\b(?:0x[0-9a-fA-F][0-9a-fA-F]*|\\d[\\d]*)\\b" } ] } ] }, "invalid": { "patterns": [ { "name": "invalid.wat", "match": "[^\\s()]+" } ] } } } ================================================ FILE: apps/web/src/lib/shiki/languages/wenyan.tmLanguage.json ================================================ { "$schema": "https://raw.githubusercontent.com/martinring/tmlanguage/master/tmlanguage.json", "scopeName": "source.wenyan", "name": "wenyan", "patterns": [ { "include": "#keywords" }, { "include": "#constants" }, { "include": "#operators" }, { "include": "#symbols" }, { "include": "#expression" }, { "include": "#comment-blocks" }, { "include": "#comment-lines" } ], "repository": { "expression": { "patterns": [ { "include": "#variables" } ] }, "keywords": { "patterns": [ { "name": "storage.type", "match": "數|列|言|術|爻|物|元" }, { "name": "keyword.control", "match": "乃行是術曰|若其不然者|乃歸空無|欲行是術|乃止是遍|若其然者|其物如是|乃得矣|之術也|必先得|是術曰|恆為是|之物也|乃得|是謂|云云|中之|為是|乃止|若非|或若|之長|其餘" }, { "name": "keyword.control", "match": "或云|蓋謂" }, { "name": "keyword.operator", "match": "中有陽乎|中無陰乎|所餘幾何|不等於|不大於|不小於|等於|大於|小於|加|減|乘|除|變|以|於" }, { "name": "keyword.other", "match": "不知何禍歟|不復存矣|姑妄行此|如事不諧|名之曰|吾嘗觀|之禍歟|乃作罷|吾有|今有|物之|書之|以施|昔之|是矣|之書|方悟|之義|嗚呼|之禍|有|施|曰|噫|取|今|夫|中|豈" }, { "name": "keyword.control", "match": "也|凡|遍|若|者|之|充|銜" } ] }, "comment-lines": { "name": "comment.line", "begin": "注曰|疏曰|批曰", "end": "$", "patterns": [ { "name": "constant.character", "match": "\\\\." } ] }, "comment-blocks": { "name": "comment.block", "begin": "(注曰|疏曰|批曰)。?(「「|『)", "end": "(」」|』)", "patterns": [ { "name": "constant.character", "match": "\\\\." } ] }, "constants": { "patterns": [ { "name": "constant.numeric", "match": "負|·|又|零|〇|一|二|三|四|五|六|七|八|九|十|百|千|萬|億|兆|京|垓|秭|穰|溝|澗|正|載|極|分|釐|毫|絲|忽|微|纖|沙|塵|埃|渺|漠" }, { "name": "constant.language", "match": "其|陰|陽" }, { "name": "string.quoted", "begin": "「「|『", "end": "」」|』", "patterns": [ { "name": "constant.character", "match": "\\\\." } ] } ] }, "symbols": { "patterns": [ { "name": "punctuation.separator", "match": "。|、" } ] }, "variables": { "name": "variable.other", "begin": "「", "end": "」", "patterns": [ { "name": "constant.character", "match": "\\\\." } ] } } } ================================================ FILE: apps/web/src/lib/shiki/languages/xml.tmLanguage.json ================================================ { "information_for_contributors": [ "This file has been converted from https://github.com/atom/language-xml/blob/master/grammars/xml.cson", "If you want to provide a fix or improvement, please create a pull request against the original repository.", "Once accepted there, we are happy to receive an update request." ], "version": "https://github.com/atom/language-xml/commit/7bc75dfe779ad5b35d9bf4013d9181864358cb49", "name": "xml", "scopeName": "text.xml", "patterns": [ { "begin": "(<\\?)\\s*([-_a-zA-Z0-9]+)", "captures": { "1": { "name": "punctuation.definition.tag.xml" }, "2": { "name": "entity.name.tag.xml" } }, "end": "(\\?>)", "name": "meta.tag.preprocessor.xml", "patterns": [ { "match": " ([a-zA-Z-]+)", "name": "entity.other.attribute-name.xml" }, { "include": "#doublequotedString" }, { "include": "#singlequotedString" } ] }, { "begin": "()", "name": "meta.tag.sgml.doctype.xml", "patterns": [ { "include": "#internalSubset" } ] }, { "include": "#comments" }, { "begin": "(<)((?:([-_a-zA-Z0-9]+)(:))?([-_a-zA-Z0-9:]+))(?=(\\s[^>]*)?>\\2>)", "beginCaptures": { "1": { "name": "punctuation.definition.tag.xml" }, "2": { "name": "entity.name.tag.xml" }, "3": { "name": "entity.name.tag.namespace.xml" }, "4": { "name": "punctuation.separator.namespace.xml" }, "5": { "name": "entity.name.tag.localname.xml" } }, "end": "(>)()((?:([-_a-zA-Z0-9]+)(:))?([-_a-zA-Z0-9:]+))(>)", "endCaptures": { "1": { "name": "punctuation.definition.tag.xml" }, "2": { "name": "punctuation.definition.tag.xml" }, "3": { "name": "entity.name.tag.xml" }, "4": { "name": "entity.name.tag.namespace.xml" }, "5": { "name": "punctuation.separator.namespace.xml" }, "6": { "name": "entity.name.tag.localname.xml" }, "7": { "name": "punctuation.definition.tag.xml" } }, "name": "meta.tag.no-content.xml", "patterns": [ { "include": "#tagStuff" } ] }, { "begin": "(?)(?:([-\\w\\.]+)((:)))?([-\\w\\.:]+)", "captures": { "1": { "name": "punctuation.definition.tag.xml" }, "2": { "name": "entity.name.tag.namespace.xml" }, "3": { "name": "entity.name.tag.xml" }, "4": { "name": "punctuation.separator.namespace.xml" }, "5": { "name": "entity.name.tag.localname.xml" } }, "end": "(/?>)", "name": "meta.tag.xml", "patterns": [ { "include": "#tagStuff" } ] }, { "include": "#entity" }, { "include": "#bare-ampersand" }, { "begin": "<%@", "beginCaptures": { "0": { "name": "punctuation.section.embedded.begin.xml" } }, "end": "%>", "endCaptures": { "0": { "name": "punctuation.section.embedded.end.xml" } }, "name": "source.java-props.embedded.xml", "patterns": [ { "match": "page|include|taglib", "name": "keyword.other.page-props.xml" } ] }, { "begin": "<%[!=]?(?!--)", "beginCaptures": { "0": { "name": "punctuation.section.embedded.begin.xml" } }, "end": "(?!--)%>", "endCaptures": { "0": { "name": "punctuation.section.embedded.end.xml" } }, "name": "source.java.embedded.xml", "patterns": [ { "include": "source.java" } ] }, { "begin": "", "endCaptures": { "0": { "name": "punctuation.definition.string.end.xml" } }, "name": "string.unquoted.cdata.xml" } ], "repository": { "EntityDecl": { "begin": "()", "patterns": [ { "include": "#doublequotedString" }, { "include": "#singlequotedString" } ] }, "bare-ampersand": { "match": "&", "name": "invalid.illegal.bad-ampersand.xml" }, "doublequotedString": { "begin": "\"", "beginCaptures": { "0": { "name": "punctuation.definition.string.begin.xml" } }, "end": "\"", "endCaptures": { "0": { "name": "punctuation.definition.string.end.xml" } }, "name": "string.quoted.double.xml", "patterns": [ { "include": "#entity" }, { "include": "#bare-ampersand" } ] }, "entity": { "captures": { "1": { "name": "punctuation.definition.constant.xml" }, "3": { "name": "punctuation.definition.constant.xml" } }, "match": "(&)([:a-zA-Z_][:a-zA-Z0-9_.-]*|#[0-9]+|#x[0-9a-fA-F]+)(;)", "name": "constant.character.entity.xml" }, "internalSubset": { "begin": "(\\[)", "captures": { "1": { "name": "punctuation.definition.constant.xml" } }, "end": "(\\])", "name": "meta.internalsubset.xml", "patterns": [ { "include": "#EntityDecl" }, { "include": "#parameterEntity" }, { "include": "#comments" } ] }, "parameterEntity": { "captures": { "1": { "name": "punctuation.definition.constant.xml" }, "3": { "name": "punctuation.definition.constant.xml" } }, "match": "(%)([:a-zA-Z_][:a-zA-Z0-9_.-]*)(;)", "name": "constant.character.parameter-entity.xml" }, "singlequotedString": { "begin": "'", "beginCaptures": { "0": { "name": "punctuation.definition.string.begin.xml" } }, "end": "'", "endCaptures": { "0": { "name": "punctuation.definition.string.end.xml" } }, "name": "string.quoted.single.xml", "patterns": [ { "include": "#entity" }, { "include": "#bare-ampersand" } ] }, "tagStuff": { "patterns": [ { "captures": { "1": { "name": "entity.other.attribute-name.namespace.xml" }, "2": { "name": "entity.other.attribute-name.xml" }, "3": { "name": "punctuation.separator.namespace.xml" }, "4": { "name": "entity.other.attribute-name.localname.xml" } }, "match": "(?:^|\\s+)(?:([-\\w.]+)((:)))?([-\\w.:]+)\\s*=" }, { "include": "#doublequotedString" }, { "include": "#singlequotedString" } ] }, "comments": { "patterns": [ { "begin": "<%--", "captures": { "0": { "name": "punctuation.definition.comment.xml" }, "end": "--%>", "name": "comment.block.xml" } }, { "begin": "", "name": "comment.block.xml", "patterns": [ { "begin": "--(?!>)", "captures": { "0": { "name": "invalid.illegal.bad-comments-or-CDATA.xml" } } } ] } ] } } } ================================================ FILE: apps/web/src/lib/shiki/languages/xsl.tmLanguage.json ================================================ { "information_for_contributors": [ "This file has been converted from https://github.com/atom/language-xml/blob/master/grammars/xsl.cson", "If you want to provide a fix or improvement, please create a pull request against the original repository.", "Once accepted there, we are happy to receive an update request." ], "version": "https://github.com/atom/language-xml/commit/507de2ee7daca60cf02e9e21fbeb92bbae73e280", "name": "xsl", "scopeName": "text.xml.xsl", "patterns": [ { "begin": "(<)(xsl)((:))(template)", "captures": { "1": { "name": "punctuation.definition.tag.xml" }, "2": { "name": "entity.name.tag.namespace.xml" }, "3": { "name": "entity.name.tag.xml" }, "4": { "name": "punctuation.separator.namespace.xml" }, "5": { "name": "entity.name.tag.localname.xml" } }, "end": "(>)", "name": "meta.tag.xml.template", "patterns": [ { "captures": { "1": { "name": "entity.other.attribute-name.namespace.xml" }, "2": { "name": "entity.other.attribute-name.xml" }, "3": { "name": "punctuation.separator.namespace.xml" }, "4": { "name": "entity.other.attribute-name.localname.xml" } }, "match": " (?:([-_a-zA-Z0-9]+)((:)))?([a-zA-Z-]+)" }, { "include": "#doublequotedString" }, { "include": "#singlequotedString" } ] }, { "include": "text.xml" } ], "repository": { "doublequotedString": { "begin": "\"", "beginCaptures": { "0": { "name": "punctuation.definition.string.begin.xml" } }, "end": "\"", "endCaptures": { "0": { "name": "punctuation.definition.string.end.xml" } }, "name": "string.quoted.double.xml" }, "singlequotedString": { "begin": "'", "beginCaptures": { "0": { "name": "punctuation.definition.string.begin.xml" } }, "end": "'", "endCaptures": { "0": { "name": "punctuation.definition.string.end.xml" } }, "name": "string.quoted.single.xml" } } } ================================================ FILE: apps/web/src/lib/shiki/languages/yaml.tmLanguage.json ================================================ { "information_for_contributors": [ "This file has been converted from https://github.com/textmate/yaml.tmbundle/blob/master/Syntaxes/YAML.tmLanguage", "If you want to provide a fix or improvement, please create a pull request against the original repository.", "Once accepted there, we are happy to receive an update request." ], "version": "https://github.com/textmate/yaml.tmbundle/commit/e54ceae3b719506dba7e481a77cea4a8b576ae46", "name": "yaml", "scopeName": "source.yaml", "patterns": [ { "include": "#comment" }, { "include": "#property" }, { "include": "#directive" }, { "match": "^---", "name": "entity.other.document.begin.yaml" }, { "match": "^\\.{3}", "name": "entity.other.document.end.yaml" }, { "include": "#node" } ], "repository": { "block-collection": { "patterns": [ { "include": "#block-sequence" }, { "include": "#block-mapping" } ] }, "block-mapping": { "patterns": [ { "include": "#block-pair" } ] }, "block-node": { "patterns": [ { "include": "#prototype" }, { "include": "#block-scalar" }, { "include": "#block-collection" }, { "include": "#flow-scalar-plain-out" }, { "include": "#flow-node" } ] }, "block-pair": { "patterns": [ { "begin": "\\?", "beginCaptures": { "1": { "name": "punctuation.definition.key-value.begin.yaml" } }, "end": "(?=\\?)|^ *(:)|(:)", "endCaptures": { "1": { "name": "punctuation.separator.key-value.mapping.yaml" }, "2": { "name": "invalid.illegal.expected-newline.yaml" } }, "name": "meta.block-mapping.yaml", "patterns": [ { "include": "#block-node" } ] }, { "begin": "(?x)\n (?=\n (?x:\n [^\\s[-?:,\\[\\]{}#&*!|>'\"%@`]]\n | [?:-] \\S\n )\n (\n [^\\s:]\n | : \\S\n | \\s+ (?![#\\s])\n )*\n \\s*\n :\n\t\t\t\t\t\t\t(\\s|$)\n )\n ", "end": "(?x)\n (?=\n \\s* $\n | \\s+ \\#\n | \\s* : (\\s|$)\n )\n ", "patterns": [ { "include": "#flow-scalar-plain-out-implicit-type" }, { "begin": "(?x)\n [^\\s[-?:,\\[\\]{}#&*!|>'\"%@`]]\n | [?:-] \\S\n ", "beginCaptures": { "0": { "name": "entity.name.tag.yaml" } }, "contentName": "entity.name.tag.yaml", "end": "(?x)\n (?=\n \\s* $\n | \\s+ \\#\n | \\s* : (\\s|$)\n )\n ", "name": "string.unquoted.plain.out.yaml" } ] }, { "match": ":(?=\\s|$)", "name": "punctuation.separator.key-value.mapping.yaml" } ] }, "block-scalar": { "begin": "(?:(\\|)|(>))([1-9])?([-+])?(.*\\n?)", "beginCaptures": { "1": { "name": "keyword.control.flow.block-scalar.literal.yaml" }, "2": { "name": "keyword.control.flow.block-scalar.folded.yaml" }, "3": { "name": "constant.numeric.indentation-indicator.yaml" }, "4": { "name": "storage.modifier.chomping-indicator.yaml" }, "5": { "patterns": [ { "include": "#comment" }, { "match": ".+", "name": "invalid.illegal.expected-comment-or-newline.yaml" } ] } }, "end": "^(?=\\S)|(?!\\G)", "patterns": [ { "begin": "^([ ]+)(?! )", "end": "^(?!\\1|\\s*$)", "name": "string.unquoted.block.yaml" } ] }, "block-sequence": { "match": "(-)(?!\\S)", "name": "punctuation.definition.block.sequence.item.yaml" }, "comment": { "begin": "(?:(^[ \\t]*)|[ \\t]+)(?=#\\p{Print}*$)", "beginCaptures": { "1": { "name": "punctuation.whitespace.comment.leading.yaml" } }, "end": "(?!\\G)", "patterns": [ { "begin": "#", "beginCaptures": { "0": { "name": "punctuation.definition.comment.yaml" } }, "end": "\\n", "name": "comment.line.number-sign.yaml" } ] }, "directive": { "begin": "^%", "beginCaptures": { "0": { "name": "punctuation.definition.directive.begin.yaml" } }, "end": "(?=$|[ \\t]+($|#))", "name": "meta.directive.yaml", "patterns": [ { "captures": { "1": { "name": "keyword.other.directive.yaml.yaml" }, "2": { "name": "constant.numeric.yaml-version.yaml" } }, "match": "\\G(YAML)[ \\t]+(\\d+\\.\\d+)" }, { "captures": { "1": { "name": "keyword.other.directive.tag.yaml" }, "2": { "name": "storage.type.tag-handle.yaml" }, "3": { "name": "support.type.tag-prefix.yaml" } }, "match": "(?x)\n \\G\n (TAG)\n (?:[ \\t]+\n ((?:!(?:[0-9A-Za-z\\-]*!)?))\n (?:[ \\t]+ (\n ! (?x: %[0-9A-Fa-f]{2} | [0-9A-Za-z\\-#;/?:@&=+$,_.!~*'()\\[\\]] )*\n | (?![,!\\[\\]{}]) (?x: %[0-9A-Fa-f]{2} | [0-9A-Za-z\\-#;/?:@&=+$,_.!~*'()\\[\\]] )+\n )\n )?\n )?\n " }, { "captures": { "1": { "name": "support.other.directive.reserved.yaml" }, "2": { "name": "string.unquoted.directive-name.yaml" }, "3": { "name": "string.unquoted.directive-parameter.yaml" } }, "match": "(?x) \\G (\\w+) (?:[ \\t]+ (\\w+) (?:[ \\t]+ (\\w+))? )?" }, { "match": "\\S+", "name": "invalid.illegal.unrecognized.yaml" } ] }, "flow-alias": { "captures": { "1": { "name": "keyword.control.flow.alias.yaml" }, "2": { "name": "punctuation.definition.alias.yaml" }, "3": { "name": "variable.other.alias.yaml" }, "4": { "name": "invalid.illegal.character.anchor.yaml" } }, "match": "((\\*))([^\\s\\[\\]/{/},]+)([^\\s\\]},]\\S*)?" }, "flow-collection": { "patterns": [ { "include": "#flow-sequence" }, { "include": "#flow-mapping" } ] }, "flow-mapping": { "begin": "\\{", "beginCaptures": { "0": { "name": "punctuation.definition.mapping.begin.yaml" } }, "end": "\\}", "endCaptures": { "0": { "name": "punctuation.definition.mapping.end.yaml" } }, "name": "meta.flow-mapping.yaml", "patterns": [ { "include": "#prototype" }, { "match": ",", "name": "punctuation.separator.mapping.yaml" }, { "include": "#flow-pair" } ] }, "flow-node": { "patterns": [ { "include": "#prototype" }, { "include": "#flow-alias" }, { "include": "#flow-collection" }, { "include": "#flow-scalar" } ] }, "flow-pair": { "patterns": [ { "begin": "\\?", "beginCaptures": { "0": { "name": "punctuation.definition.key-value.begin.yaml" } }, "end": "(?=[},\\]])", "name": "meta.flow-pair.explicit.yaml", "patterns": [ { "include": "#prototype" }, { "include": "#flow-pair" }, { "include": "#flow-node" }, { "begin": ":(?=\\s|$|[\\[\\]{},])", "beginCaptures": { "0": { "name": "punctuation.separator.key-value.mapping.yaml" } }, "end": "(?=[},\\]])", "patterns": [ { "include": "#flow-value" } ] } ] }, { "begin": "(?x)\n (?=\n (?:\n [^\\s[-?:,\\[\\]{}#&*!|>'\"%@`]]\n | [?:-] [^\\s[\\[\\]{},]]\n )\n (\n [^\\s:[\\[\\]{},]]\n | : [^\\s[\\[\\]{},]]\n | \\s+ (?![#\\s])\n )*\n \\s*\n :\n\t\t\t\t\t\t\t(\\s|$)\n )\n ", "end": "(?x)\n (?=\n \\s* $\n | \\s+ \\#\n | \\s* : (\\s|$)\n | \\s* : [\\[\\]{},]\n | \\s* [\\[\\]{},]\n )\n ", "name": "meta.flow-pair.key.yaml", "patterns": [ { "include": "#flow-scalar-plain-in-implicit-type" }, { "begin": "(?x)\n [^\\s[-?:,\\[\\]{}#&*!|>'\"%@`]]\n | [?:-] [^\\s[\\[\\]{},]]\n ", "beginCaptures": { "0": { "name": "entity.name.tag.yaml" } }, "contentName": "entity.name.tag.yaml", "end": "(?x)\n (?=\n \\s* $\n | \\s+ \\#\n | \\s* : (\\s|$)\n | \\s* : [\\[\\]{},]\n | \\s* [\\[\\]{},]\n )\n ", "name": "string.unquoted.plain.in.yaml" } ] }, { "include": "#flow-node" }, { "begin": ":(?=\\s|$|[\\[\\]{},])", "captures": { "0": { "name": "punctuation.separator.key-value.mapping.yaml" } }, "end": "(?=[},\\]])", "name": "meta.flow-pair.yaml", "patterns": [ { "include": "#flow-value" } ] } ] }, "flow-scalar": { "patterns": [ { "include": "#flow-scalar-double-quoted" }, { "include": "#flow-scalar-single-quoted" }, { "include": "#flow-scalar-plain-in" } ] }, "flow-scalar-double-quoted": { "begin": "\"", "beginCaptures": { "0": { "name": "punctuation.definition.string.begin.yaml" } }, "end": "\"", "endCaptures": { "0": { "name": "punctuation.definition.string.end.yaml" } }, "name": "string.quoted.double.yaml", "patterns": [ { "match": "\\\\([0abtnvfre \"/\\\\N_Lp]|x\\d\\d|u\\d{4}|U\\d{8})", "name": "constant.character.escape.yaml" }, { "match": "\\\\\\n", "name": "constant.character.escape.double-quoted.newline.yaml" } ] }, "flow-scalar-plain-in": { "patterns": [ { "include": "#flow-scalar-plain-in-implicit-type" }, { "begin": "(?x)\n [^\\s[-?:,\\[\\]{}#&*!|>'\"%@`]]\n | [?:-] [^\\s[\\[\\]{},]]\n ", "end": "(?x)\n (?=\n \\s* $\n | \\s+ \\#\n | \\s* : (\\s|$)\n | \\s* : [\\[\\]{},]\n | \\s* [\\[\\]{},]\n )\n ", "name": "string.unquoted.plain.in.yaml" } ] }, "flow-scalar-plain-in-implicit-type": { "patterns": [ { "captures": { "1": { "name": "constant.language.null.yaml" }, "2": { "name": "constant.language.boolean.yaml" }, "3": { "name": "constant.numeric.integer.yaml" }, "4": { "name": "constant.numeric.float.yaml" }, "5": { "name": "constant.other.timestamp.yaml" }, "6": { "name": "constant.language.value.yaml" }, "7": { "name": "constant.language.merge.yaml" } }, "match": "(?x)\n (?x:\n (null|Null|NULL|~)\n | (y|Y|yes|Yes|YES|n|N|no|No|NO|true|True|TRUE|false|False|FALSE|on|On|ON|off|Off|OFF)\n | (\n (?:\n [-+]? 0b [0-1_]+ # (base 2)\n | [-+]? 0 [0-7_]+ # (base 8)\n | [-+]? (?: 0|[1-9][0-9_]*) # (base 10)\n | [-+]? 0x [0-9a-fA-F_]+ # (base 16)\n | [-+]? [1-9] [0-9_]* (?: :[0-5]?[0-9])+ # (base 60)\n )\n )\n | (\n (?x:\n [-+]? (?: [0-9] [0-9_]*)? \\. [0-9.]* (?: [eE] [-+] [0-9]+)? # (base 10)\n | [-+]? [0-9] [0-9_]* (?: :[0-5]?[0-9])+ \\. [0-9_]* # (base 60)\n | [-+]? \\. (?: inf|Inf|INF) # (infinity)\n | \\. (?: nan|NaN|NAN) # (not a number)\n )\n )\n | (\n (?x:\n \\d{4} - \\d{2} - \\d{2} # (y-m-d)\n | \\d{4} # (year)\n - \\d{1,2} # (month)\n - \\d{1,2} # (day)\n (?: [Tt] | [ \\t]+) \\d{1,2} # (hour)\n : \\d{2} # (minute)\n : \\d{2} # (second)\n (?: \\.\\d*)? # (fraction)\n (?:\n (?:[ \\t]*) Z\n | [-+] \\d{1,2} (?: :\\d{1,2})?\n )? # (time zone)\n )\n )\n | (=)\n | (<<)\n )\n (?:\n (?=\n \\s* $\n | \\s+ \\#\n | \\s* : (\\s|$)\n | \\s* : [\\[\\]{},]\n | \\s* [\\[\\]{},]\n )\n )\n " } ] }, "flow-scalar-plain-out": { "patterns": [ { "include": "#flow-scalar-plain-out-implicit-type" }, { "begin": "(?x)\n [^\\s[-?:,\\[\\]{}#&*!|>'\"%@`]]\n | [?:-] \\S\n ", "end": "(?x)\n (?=\n \\s* $\n | \\s+ \\#\n | \\s* : (\\s|$)\n )\n ", "name": "string.unquoted.plain.out.yaml" } ] }, "flow-scalar-plain-out-implicit-type": { "patterns": [ { "captures": { "1": { "name": "constant.language.null.yaml" }, "2": { "name": "constant.language.boolean.yaml" }, "3": { "name": "constant.numeric.integer.yaml" }, "4": { "name": "constant.numeric.float.yaml" }, "5": { "name": "constant.other.timestamp.yaml" }, "6": { "name": "constant.language.value.yaml" }, "7": { "name": "constant.language.merge.yaml" } }, "match": "(?x)\n (?x:\n (null|Null|NULL|~)\n | (y|Y|yes|Yes|YES|n|N|no|No|NO|true|True|TRUE|false|False|FALSE|on|On|ON|off|Off|OFF)\n | (\n (?:\n [-+]? 0b [0-1_]+ # (base 2)\n | [-+]? 0 [0-7_]+ # (base 8)\n | [-+]? (?: 0|[1-9][0-9_]*) # (base 10)\n | [-+]? 0x [0-9a-fA-F_]+ # (base 16)\n | [-+]? [1-9] [0-9_]* (?: :[0-5]?[0-9])+ # (base 60)\n )\n )\n | (\n (?x:\n [-+]? (?: [0-9] [0-9_]*)? \\. [0-9.]* (?: [eE] [-+] [0-9]+)? # (base 10)\n | [-+]? [0-9] [0-9_]* (?: :[0-5]?[0-9])+ \\. [0-9_]* # (base 60)\n | [-+]? \\. (?: inf|Inf|INF) # (infinity)\n | \\. (?: nan|NaN|NAN) # (not a number)\n )\n )\n | (\n (?x:\n \\d{4} - \\d{2} - \\d{2} # (y-m-d)\n | \\d{4} # (year)\n - \\d{1,2} # (month)\n - \\d{1,2} # (day)\n (?: [Tt] | [ \\t]+) \\d{1,2} # (hour)\n : \\d{2} # (minute)\n : \\d{2} # (second)\n (?: \\.\\d*)? # (fraction)\n (?:\n (?:[ \\t]*) Z\n | [-+] \\d{1,2} (?: :\\d{1,2})?\n )? # (time zone)\n )\n )\n | (=)\n | (<<)\n )\n (?x:\n (?=\n \\s* $\n | \\s+ \\#\n | \\s* : (\\s|$)\n )\n )\n " } ] }, "flow-scalar-single-quoted": { "begin": "'", "beginCaptures": { "0": { "name": "punctuation.definition.string.begin.yaml" } }, "end": "'(?!')", "endCaptures": { "0": { "name": "punctuation.definition.string.end.yaml" } }, "name": "string.quoted.single.yaml", "patterns": [ { "match": "''", "name": "constant.character.escape.single-quoted.yaml" } ] }, "flow-sequence": { "begin": "\\[", "beginCaptures": { "0": { "name": "punctuation.definition.sequence.begin.yaml" } }, "end": "\\]", "endCaptures": { "0": { "name": "punctuation.definition.sequence.end.yaml" } }, "name": "meta.flow-sequence.yaml", "patterns": [ { "include": "#prototype" }, { "match": ",", "name": "punctuation.separator.sequence.yaml" }, { "include": "#flow-pair" }, { "include": "#flow-node" } ] }, "flow-value": { "patterns": [ { "begin": "\\G(?![},\\]])", "end": "(?=[},\\]])", "name": "meta.flow-pair.value.yaml", "patterns": [ { "include": "#flow-node" } ] } ] }, "node": { "patterns": [ { "include": "#block-node" } ] }, "property": { "begin": "(?=!|&)", "end": "(?!\\G)", "name": "meta.property.yaml", "patterns": [ { "captures": { "1": { "name": "keyword.control.property.anchor.yaml" }, "2": { "name": "punctuation.definition.anchor.yaml" }, "3": { "name": "entity.name.type.anchor.yaml" }, "4": { "name": "invalid.illegal.character.anchor.yaml" } }, "match": "\\G((&))([^\\s\\[\\]/{/},]+)(\\S+)?" }, { "match": "(?x)\n \\G\n (?:\n ! < (?: %[0-9A-Fa-f]{2} | [0-9A-Za-z\\-#;/?:@&=+$,_.!~*'()\\[\\]] )+ >\n | (?:!(?:[0-9A-Za-z\\-]*!)?) (?: %[0-9A-Fa-f]{2} | [0-9A-Za-z\\-#;/?:@&=+$_.~*'()] )+\n | !\n )\n (?=\\ |\\t|$)\n ", "name": "storage.type.tag-handle.yaml" }, { "match": "\\S+", "name": "invalid.illegal.tag-handle.yaml" } ] }, "prototype": { "patterns": [ { "include": "#comment" }, { "include": "#property" } ] } } } ================================================ FILE: apps/web/src/lib/shiki/languages/zenscript.tmLanguage.json ================================================ { "fileTypes": ["zs"], "name": "zenscript", "patterns": [ { "comment": "numbers", "name": "constant.numeric.zenscript", "match": "\\b((0(x|X)[0-9a-fA-F]*)|(([0-9]+\\.?[0-9]*)|(\\.[0-9]+))((e|E)(\\+|-)?[0-9]+)?)([LlFfUuDd]|UL|ul)?\\b" }, { "comment": "prefixedNumbers", "name": "constant.numeric.zenscript", "match": "\\b\\-?(0b|0x|0o|0B|0X|0O)(0|[1-9a-fA-F][0-9a-fA-F_]*)[a-zA-Z_]*\\b" }, { "include": "#code" }, { "comment": "arrays", "name": "storage.type.object.array.zenscript", "match": "\\b((?:[a-z]\\w*\\.)*[A-Z]+\\w*)(?=\\[)" } ], "repository": { "code": { "patterns": [ { "include": "#class" }, { "include": "#functions" }, { "include": "#dots" }, { "include": "#quotes" }, { "include": "#brackets" }, { "include": "#comments" }, { "include": "#var" }, { "include": "#keywords" }, { "include": "#constants" }, { "include": "#operators" } ] }, "class": { "comment": "class", "name": "meta.class.zenscript", "match": "(zenClass)\\s+(\\w+)", "captures": { "1": { "name": "storage.type.zenscript" }, "2": { "name": "entity.name.type.class.zenscript" } } }, "functions": { "comment": "functions", "name": "meta.function.zenscript", "match": "function\\s+([A-Za-z_$][\\w$]*)\\s*(?=\\()", "captures": { "0": { "name": "storage.type.function.zenscript" }, "1": { "name": "entity.name.function.zenscript" } } }, "dots": { "comment": "dots", "name": "plain.text.zenscript", "match": "\\b(\\w+)(\\.)(\\w+)((\\.)(\\w+))*", "captures": { "1": { "name": "storage.type.zenscript" }, "2": { "name": "keyword.control.zenscript" }, "5": { "name": "keyword.control.zenscript" } } }, "quotes": { "patterns": [ { "begin": "\"", "beginCaptures": { "0": { "name": "punctuation.definition.string.begin.zenscript" } }, "end": "\"", "endCaptures": { "0": { "name": "punctuation.definition.string.end.zenscript" } }, "name": "string.quoted.double.zenscript", "patterns": [ { "match": "\\\\.", "name": "constant.character.escape.zenscript" } ] }, { "begin": "'", "beginCaptures": { "0": { "name": "punctuation.definition.string.begin.zenscript" } }, "end": "'", "endCaptures": { "0": { "name": "punctuation.definition.string.end.zenscript" } }, "name": "string.quoted.single.zenscript", "patterns": [ { "match": "\\\\.", "name": "constant.character.escape.zenscript" } ] } ] }, "brackets": { "patterns": [ { "comment": "items and blocks", "name": "keyword.other.zenscript", "match": "(<)\\b(.*?)(:(.*?(:(\\*|\\d+)?)?)?)(>)", "captures": { "1": { "name": "keyword.control.zenscript" }, "2": { "name": "keyword.other.zenscript" }, "3": { "name": "keyword.control.zenscript" }, "4": { "name": "variable.other.zenscript" }, "5": { "name": "keyword.control.zenscript" }, "6": { "name": "constant.numeric.zenscript" }, "7": { "name": "keyword.control.zenscript" } } } ] }, "comments": { "patterns": [ { "comment": "inline comments", "name": "comment.line.double=slash", "match": "//[^\n]*" }, { "comment": "block comments", "name": "comment.block", "begin": "\\/\\*", "beginCaptures": { "0": { "name": "comment.block" } }, "end": "\\*\\/", "endCaptures": { "0": { "name": "comment.block" } } } ] }, "var": { "comment": "var", "match": "\\b(val|var)\\b", "name": "storage.type" }, "keywords": { "patterns": [ { "comment": "statement keywords", "name": "keyword.control.zenscript", "match": "\\b(instanceof|get|implements|set|import|function|override|const|if|else|do|while|for|throw|panic|lock|try|catch|finally|return|break|continue|switch|case|default|in|is|as|match|throws|super|new)\\b" }, { "comment": "storage keywords", "name": "storage.type.zenscript", "match": "\\b(zenClass|zenConstructor|alias|class|interface|enum|struct|expand|variant|set|void|bool|byte|sbyte|short|ushort|int|uint|long|ulong|usize|float|double|char|string)\\b" }, { "comment": "modifier keywords", "name": "storage.modifier.zenscript", "match": "\\b(variant|abstract|final|private|public|export|internal|static|protected|implicit|virtual|extern|immutable)\\b" }, { "comment": "annotation keywords", "name": "entity.other.attribute-name", "match": "\\b(Native|Precondition)\\b" }, { "comment": "language keywords", "name": "constant.language", "match": "\\b(null|true|false)\\b" } ] }, "operators": { "patterns": [ { "comment": "math operators", "name": "keyword.control", "match": "\\b(\\.|\\.\\.|\\.\\.\\.|,|\\+|\\+=|\\+\\+|-|-=|--|~|~=|\\*|\\*=|/|/=|%|%=|\\||\\|=|\\|\\||&|&=|&&|\\^|\\^=|\\?|\\?\\.|\\?\\?|<|<=|<<|<<=|>|>=|>>|>>=|>>>|>>>=|=>|=|==|===|!|!=|!==|\\$|`)\\b" }, { "comment": "colons", "name": "keyword.control", "match": "\\b(;|:)\\b" } ] } }, "scopeName": "source.zenscript" } ================================================ FILE: apps/web/src/lib/shiki/themes/css-variables.json ================================================ { "name": "css-variables", "type": "css", "colors": { "editor.foreground": "#000001", "editor.background": "#000002" }, "tokenColors": [ { "settings": { "foreground": "#000001" } }, { "scope": [ "keyword.operator.accessor", "meta.group.braces.round.function.arguments", "meta.template.expression", "markup.fenced_code meta.embedded.block" ], "settings": { "foreground": "#000001" } }, { "scope": "emphasis", "settings": { "fontStyle": "italic" } }, { "scope": ["strong", "markup.heading.markdown", "markup.bold.markdown"], "settings": { "fontStyle": "bold" } }, { "scope": ["markup.italic.markdown"], "settings": { "fontStyle": "italic" } }, { "scope": "meta.link.inline.markdown", "settings": { "fontStyle": "underline", "foreground": "#000004" } }, { "scope": ["string", "markup.fenced_code", "markup.inline"], "settings": { "foreground": "#000005" } }, { "scope": ["comment", "string.quoted.docstring.multi"], "settings": { "foreground": "#000006" } }, { "scope": [ "constant.numeric", "constant.language", "constant.other.placeholder", "constant.character.format.placeholder", "variable.language.this", "variable.other.object", "variable.other.class", "variable.other.constant", "meta.property-name", "meta.property-value", "support" ], "settings": { "foreground": "#000004" } }, { "scope": [ "keyword", "storage.modifier", "storage.type", "storage.control.clojure", "entity.name.function.clojure", "entity.name.tag.yaml", "support.function.node", "support.type.property-name.json", "punctuation.separator.key-value", "punctuation.definition.template-expression" ], "settings": { "foreground": "#000007" } }, { "scope": "variable.parameter.function", "settings": { "foreground": "#000008" } }, { "scope": [ "support.function", "entity.name.type", "entity.other.inherited-class", "meta.function-call", "meta.instance.constructor", "entity.other.attribute-name", "entity.name.function", "constant.keyword.clojure" ], "settings": { "foreground": "#000009" } }, { "scope": [ "entity.name.tag", "string.quoted", "string.regexp", "string.interpolated", "string.template", "string.unquoted.plain.out.yaml", "keyword.other.template" ], "settings": { "foreground": "#000010" } }, { "scope": [ "punctuation.definition.arguments", "punctuation.definition.dict", "punctuation.separator", "meta.function-call.arguments" ], "settings": { "foreground": "#000011" } }, { "name": "[Custom] Markdown links", "scope": [ "markup.underline.link", "punctuation.definition.metadata.markdown" ], "settings": { "foreground": "#000012" } }, { "name": "[Custom] Markdown list", "scope": ["beginning.punctuation.definition.list.markdown"], "settings": { "foreground": "#000005" } }, { "name": "[Custom] Markdown punctuation definition brackets", "scope": [ "punctuation.definition.string.begin.markdown", "punctuation.definition.string.end.markdown", "string.other.link.title.markdown", "string.other.link.description.markdown" ], "settings": { "foreground": "#000007" } } ] } ================================================ FILE: apps/web/src/lib/shiki/themes/dark-plus.json ================================================ { "$schema": "vscode://schemas/color-theme", "name": "dark-plus", "tokenColors": [ { "settings": { "foreground": "#D4D4D4" } }, { "scope": [ "meta.embedded", "source.groovy.embedded", "string meta.image.inline.markdown" ], "settings": { "foreground": "#D4D4D4" } }, { "scope": "emphasis", "settings": { "fontStyle": "italic" } }, { "scope": "strong", "settings": { "fontStyle": "bold" } }, { "scope": "header", "settings": { "foreground": "#000080" } }, { "scope": "comment", "settings": { "foreground": "#6A9955" } }, { "scope": "constant.language", "settings": { "foreground": "#569cd6" } }, { "scope": [ "constant.numeric", "variable.other.enummember", "keyword.operator.plus.exponent", "keyword.operator.minus.exponent" ], "settings": { "foreground": "#b5cea8" } }, { "scope": "constant.regexp", "settings": { "foreground": "#646695" } }, { "scope": "entity.name.tag", "settings": { "foreground": "#569cd6" } }, { "scope": "entity.name.tag.css", "settings": { "foreground": "#d7ba7d" } }, { "scope": "entity.other.attribute-name", "settings": { "foreground": "#9cdcfe" } }, { "scope": [ "entity.other.attribute-name.class.css", "entity.other.attribute-name.class.mixin.css", "entity.other.attribute-name.id.css", "entity.other.attribute-name.parent-selector.css", "entity.other.attribute-name.pseudo-class.css", "entity.other.attribute-name.pseudo-element.css", "source.css.less entity.other.attribute-name.id", "entity.other.attribute-name.scss" ], "settings": { "foreground": "#d7ba7d" } }, { "scope": "invalid", "settings": { "foreground": "#f44747" } }, { "scope": "markup.underline", "settings": { "fontStyle": "underline" } }, { "scope": "markup.bold", "settings": { "fontStyle": "bold", "foreground": "#569cd6" } }, { "scope": "markup.heading", "settings": { "fontStyle": "bold", "foreground": "#569cd6" } }, { "scope": "markup.italic", "settings": { "fontStyle": "italic" } }, { "scope": "markup.strikethrough", "settings": { "fontStyle": "strikethrough" } }, { "scope": "markup.inserted", "settings": { "foreground": "#b5cea8" } }, { "scope": "markup.deleted", "settings": { "foreground": "#ce9178" } }, { "scope": "markup.changed", "settings": { "foreground": "#569cd6" } }, { "scope": "punctuation.definition.quote.begin.markdown", "settings": { "foreground": "#6A9955" } }, { "scope": "punctuation.definition.list.begin.markdown", "settings": { "foreground": "#6796e6" } }, { "scope": "markup.inline.raw", "settings": { "foreground": "#ce9178" } }, { "name": "brackets of XML/HTML tags", "scope": "punctuation.definition.tag", "settings": { "foreground": "#808080" } }, { "scope": ["meta.preprocessor", "entity.name.function.preprocessor"], "settings": { "foreground": "#569cd6" } }, { "scope": "meta.preprocessor.string", "settings": { "foreground": "#ce9178" } }, { "scope": "meta.preprocessor.numeric", "settings": { "foreground": "#b5cea8" } }, { "scope": "meta.structure.dictionary.key.python", "settings": { "foreground": "#9cdcfe" } }, { "scope": "meta.diff.header", "settings": { "foreground": "#569cd6" } }, { "scope": "storage", "settings": { "foreground": "#569cd6" } }, { "scope": "storage.type", "settings": { "foreground": "#569cd6" } }, { "scope": ["storage.modifier", "keyword.operator.noexcept"], "settings": { "foreground": "#569cd6" } }, { "scope": ["string", "meta.embedded.assembly"], "settings": { "foreground": "#ce9178" } }, { "scope": "string.tag", "settings": { "foreground": "#ce9178" } }, { "scope": "string.value", "settings": { "foreground": "#ce9178" } }, { "scope": "string.regexp", "settings": { "foreground": "#d16969" } }, { "name": "String interpolation", "scope": [ "punctuation.definition.template-expression.begin", "punctuation.definition.template-expression.end", "punctuation.section.embedded" ], "settings": { "foreground": "#569cd6" } }, { "name": "Reset JavaScript string interpolation expression", "scope": ["meta.template.expression"], "settings": { "foreground": "#d4d4d4" } }, { "scope": [ "support.type.vendored.property-name", "support.type.property-name", "variable.css", "variable.scss", "variable.other.less", "source.coffee.embedded" ], "settings": { "foreground": "#9cdcfe" } }, { "scope": "keyword", "settings": { "foreground": "#569cd6" } }, { "scope": "keyword.control", "settings": { "foreground": "#569cd6" } }, { "scope": "keyword.operator", "settings": { "foreground": "#d4d4d4" } }, { "scope": [ "keyword.operator.new", "keyword.operator.expression", "keyword.operator.cast", "keyword.operator.sizeof", "keyword.operator.alignof", "keyword.operator.typeid", "keyword.operator.alignas", "keyword.operator.instanceof", "keyword.operator.logical.python", "keyword.operator.wordlike" ], "settings": { "foreground": "#569cd6" } }, { "scope": "keyword.other.unit", "settings": { "foreground": "#b5cea8" } }, { "scope": [ "punctuation.section.embedded.begin.php", "punctuation.section.embedded.end.php" ], "settings": { "foreground": "#569cd6" } }, { "scope": "support.function.git-rebase", "settings": { "foreground": "#9cdcfe" } }, { "scope": "constant.sha.git-rebase", "settings": { "foreground": "#b5cea8" } }, { "name": "coloring of the Java import and package identifiers", "scope": [ "storage.modifier.import.java", "variable.language.wildcard.java", "storage.modifier.package.java" ], "settings": { "foreground": "#d4d4d4" } }, { "name": "this.self", "scope": "variable.language", "settings": { "foreground": "#569cd6" } }, { "name": "Function declarations", "scope": [ "entity.name.function", "support.function", "support.constant.handlebars", "source.powershell variable.other.member", "entity.name.operator.custom-literal" ], "settings": { "foreground": "#DCDCAA" } }, { "name": "Types declaration and references", "scope": [ "support.class", "support.type", "entity.name.type", "entity.name.namespace", "entity.other.attribute", "entity.name.scope-resolution", "entity.name.class", "storage.type.numeric.go", "storage.type.byte.go", "storage.type.boolean.go", "storage.type.string.go", "storage.type.uintptr.go", "storage.type.error.go", "storage.type.rune.go", "storage.type.cs", "storage.type.generic.cs", "storage.type.modifier.cs", "storage.type.variable.cs", "storage.type.annotation.java", "storage.type.generic.java", "storage.type.java", "storage.type.object.array.java", "storage.type.primitive.array.java", "storage.type.primitive.java", "storage.type.token.java", "storage.type.groovy", "storage.type.annotation.groovy", "storage.type.parameters.groovy", "storage.type.generic.groovy", "storage.type.object.array.groovy", "storage.type.primitive.array.groovy", "storage.type.primitive.groovy" ], "settings": { "foreground": "#4EC9B0" } }, { "name": "Types declaration and references, TS grammar specific", "scope": [ "meta.type.cast.expr", "meta.type.new.expr", "support.constant.math", "support.constant.dom", "support.constant.json", "entity.other.inherited-class" ], "settings": { "foreground": "#4EC9B0" } }, { "name": "Control flow / Special keywords", "scope": [ "keyword.control", "source.cpp keyword.operator.new", "keyword.operator.delete", "keyword.other.using", "keyword.other.operator", "entity.name.operator" ], "settings": { "foreground": "#C586C0" } }, { "name": "Variable and parameter name", "scope": [ "variable", "meta.definition.variable.name", "support.variable", "entity.name.variable", "constant.other.placeholder" ], "settings": { "foreground": "#9CDCFE" } }, { "name": "Constants and enums", "scope": ["variable.other.constant", "variable.other.enummember"], "settings": { "foreground": "#4FC1FF" } }, { "name": "Object keys, TS grammar specific", "scope": ["meta.object-literal.key"], "settings": { "foreground": "#9CDCFE" } }, { "name": "CSS property value", "scope": [ "support.constant.property-value", "support.constant.font-name", "support.constant.media-type", "support.constant.media", "constant.other.color.rgb-value", "constant.other.rgb-value", "support.constant.color" ], "settings": { "foreground": "#CE9178" } }, { "name": "Regular expression groups", "scope": [ "punctuation.definition.group.regexp", "punctuation.definition.group.assertion.regexp", "punctuation.definition.character-class.regexp", "punctuation.character.set.begin.regexp", "punctuation.character.set.end.regexp", "keyword.operator.negation.regexp", "support.other.parenthesis.regexp" ], "settings": { "foreground": "#CE9178" } }, { "scope": [ "constant.character.character-class.regexp", "constant.other.character-class.set.regexp", "constant.other.character-class.regexp", "constant.character.set.regexp" ], "settings": { "foreground": "#d16969" } }, { "scope": ["keyword.operator.or.regexp", "keyword.control.anchor.regexp"], "settings": { "foreground": "#DCDCAA" } }, { "scope": "keyword.operator.quantifier.regexp", "settings": { "foreground": "#d7ba7d" } }, { "scope": "constant.character", "settings": { "foreground": "#569cd6" } }, { "scope": "constant.character.escape", "settings": { "foreground": "#d7ba7d" } }, { "scope": "entity.name.label", "settings": { "foreground": "#C8C8C8" } } ], "semanticTokenColors": { "newOperator": "#C586C0", "stringLiteral": "#ce9178", "customLiteral": "#DCDCAA", "numberLiteral": "#b5cea8" }, "colors": { "editor.background": "#1E1E1E", "editor.foreground": "#D4D4D4", "editor.inactiveSelectionBackground": "#3A3D41", "editorIndentGuide.background": "#404040", "editorIndentGuide.activeBackground": "#707070", "editor.selectionHighlightBackground": "#ADD6FF26", "list.dropBackground": "#383B3D", "activityBarBadge.background": "#007ACC", "sideBarTitle.foreground": "#BBBBBB", "input.placeholderForeground": "#A6A6A6", "menu.background": "#303031", "menu.foreground": "#CCCCCC", "statusBarItem.remoteForeground": "#FFF", "statusBarItem.remoteBackground": "#16825D", "ports.iconRunningProcessForeground": "#369432", "sideBarSectionHeader.background": "#0000", "sideBarSectionHeader.border": "#ccc3", "tab.lastPinnedBorder": "#ccc3", "list.activeSelectionIconForeground": "#FFF" } } ================================================ FILE: apps/web/src/lib/shiki/themes/dracula-soft.json ================================================ { "$schema": "vscode://schemas/color-theme", "name": "dracula-soft", "author": "Zeno Rocha", "maintainers": ["Derek P Sifford "], "semanticClass": "theme.dracula", "semanticHighlighting": true, "dracula": { "base": [ "#282A36", "#F8F8F2", "#44475A", "#6272A4", "#8BE9FD", "#50FA7B", "#FFB86C", "#FF79C6", "#BD93F9", "#FF5555", "#F1FA8C" ], "ansi": [ "#21222C", "#FF5555", "#50FA7B", "#F1FA8C", "#BD93F9", "#FF79C6", "#8BE9FD", "#F8F8F2", "#6272A4", "#FF6E6E", "#69FF94", "#FFFFA5", "#D6ACFF", "#FF92DF", "#A4FFFF", "#FFFFFF" ], "brightOther": ["#E9F284", "#8BE9FE"], "other": [ "#44475A75", "#FFFFFF1A", "#FFFFFF", "#44475A70", "#424450", "#343746", "#21222C", "#191A21" ] }, "colors": { "terminal.background": "#282A36", "terminal.foreground": "#f6f6f4", "terminal.ansiBrightBlack": "#7b7f8b", "terminal.ansiBrightRed": "#f07c7c", "terminal.ansiBrightGreen": "#78f09a", "terminal.ansiBrightYellow": "#f6f6ae", "terminal.ansiBrightBlue": "#d6b4f7", "terminal.ansiBrightMagenta": "#f49dda", "terminal.ansiBrightCyan": "#adf6f6", "terminal.ansiBrightWhite": "#ffffff", "terminal.ansiBlack": "#262626", "terminal.ansiRed": "#ee6666", "terminal.ansiGreen": "#62e884", "terminal.ansiYellow": "#e7ee98", "terminal.ansiBlue": "#bf9eee", "terminal.ansiMagenta": "#f286c4", "terminal.ansiCyan": "#97e1f1", "terminal.ansiWhite": "#f6f6f4", "focusBorder": "#7b7f8b", "foreground": "#f6f6f4", "selection.background": "#bf9eee", "errorForeground": "#ee6666", "button.background": "#44475A", "button.foreground": "#f6f6f4", "button.secondaryBackground": "#282A36", "button.secondaryForeground": "#f6f6f4", "button.secondaryHoverBackground": "#343746", "dropdown.background": "#343746", "dropdown.border": "#191A21", "dropdown.foreground": "#f6f6f4", "input.background": "#282A36", "input.foreground": "#f6f6f4", "input.border": "#191A21", "input.placeholderForeground": "#7b7f8b", "inputOption.activeBorder": "#bf9eee", "inputValidation.infoBorder": "#f286c4", "inputValidation.warningBorder": "#FFB86C", "inputValidation.errorBorder": "#ee6666", "badge.foreground": "#f6f6f4", "badge.background": "#44475A", "progressBar.background": "#f286c4", "list.activeSelectionBackground": "#44475A", "list.activeSelectionForeground": "#f6f6f4", "list.dropBackground": "#44475A", "list.focusBackground": "#44475A75", "list.highlightForeground": "#97e1f1", "list.hoverBackground": "#44475A75", "list.inactiveSelectionBackground": "#44475A75", "list.warningForeground": "#FFB86C", "list.errorForeground": "#ee6666", "activityBar.background": "#343746", "activityBar.inactiveForeground": "#7b7f8b", "activityBar.foreground": "#f6f6f4", "activityBar.activeBorder": "#FF79C680", "activityBar.activeBackground": "#BD93F910", "activityBarBadge.background": "#f286c4", "activityBarBadge.foreground": "#f6f6f4", "sideBar.background": "#262626", "sideBarTitle.foreground": "#f6f6f4", "sideBarSectionHeader.background": "#282A36", "sideBarSectionHeader.border": "#191A21", "editorGroup.border": "#bf9eee", "editorGroup.dropBackground": "#44475A70", "editorGroupHeader.tabsBackground": "#191A21", "tab.activeBackground": "#282A36", "tab.activeForeground": "#f6f6f4", "tab.border": "#191A21", "tab.activeBorderTop": "#FF79C680", "tab.inactiveBackground": "#262626", "tab.inactiveForeground": "#7b7f8b", "editor.foreground": "#f6f6f4", "editor.background": "#282A36", "editorLineNumber.foreground": "#7b7f8b", "editor.selectionBackground": "#44475A", "editor.selectionHighlightBackground": "#424450", "editor.foldBackground": "#21222C80", "editor.wordHighlightBackground": "#8BE9FD50", "editor.wordHighlightStrongBackground": "#50FA7B50", "editor.findMatchBackground": "#FFB86C80", "editor.findMatchHighlightBackground": "#FFFFFF40", "editor.findRangeHighlightBackground": "#44475A75", "editor.hoverHighlightBackground": "#8BE9FD50", "editor.lineHighlightBorder": "#44475A", "editorLink.activeForeground": "#97e1f1", "editor.rangeHighlightBackground": "#BD93F915", "editor.snippetTabstopHighlightBackground": "#282A36", "editor.snippetTabstopHighlightBorder": "#7b7f8b", "editor.snippetFinalTabstopHighlightBackground": "#282A36", "editor.snippetFinalTabstopHighlightBorder": "#62e884", "editorWhitespace.foreground": "#FFFFFF1A", "editorIndentGuide.background": "#FFFFFF1A", "editorIndentGuide.activeBackground": "#FFFFFF45", "editorRuler.foreground": "#FFFFFF1A", "editorCodeLens.foreground": "#7b7f8b", "editorBracketHighlight.foreground1": "#f6f6f4", "editorBracketHighlight.foreground2": "#f286c4", "editorBracketHighlight.foreground3": "#97e1f1", "editorBracketHighlight.foreground4": "#62e884", "editorBracketHighlight.foreground5": "#bf9eee", "editorBracketHighlight.foreground6": "#FFB86C", "editorBracketHighlight.unexpectedBracket.foreground": "#ee6666", "editorOverviewRuler.border": "#191A21", "editorOverviewRuler.selectionHighlightForeground": "#FFB86C", "editorOverviewRuler.wordHighlightForeground": "#97e1f1", "editorOverviewRuler.wordHighlightStrongForeground": "#62e884", "editorOverviewRuler.modifiedForeground": "#8BE9FD80", "editorOverviewRuler.addedForeground": "#50FA7B80", "editorOverviewRuler.deletedForeground": "#FF555580", "editorOverviewRuler.errorForeground": "#FF555580", "editorOverviewRuler.warningForeground": "#FFB86C80", "editorOverviewRuler.infoForeground": "#8BE9FD80", "editorError.foreground": "#ee6666", "editorWarning.foreground": "#97e1f1", "editorGutter.modifiedBackground": "#8BE9FD80", "editorGutter.addedBackground": "#50FA7B80", "editorGutter.deletedBackground": "#FF555580", "gitDecoration.modifiedResourceForeground": "#97e1f1", "gitDecoration.deletedResourceForeground": "#ee6666", "gitDecoration.untrackedResourceForeground": "#62e884", "gitDecoration.ignoredResourceForeground": "#7b7f8b", "gitDecoration.conflictingResourceForeground": "#FFB86C", "diffEditor.insertedTextBackground": "#50FA7B20", "diffEditor.removedTextBackground": "#FF555550", "editorWidget.background": "#262626", "editorSuggestWidget.background": "#262626", "editorSuggestWidget.foreground": "#f6f6f4", "editorSuggestWidget.selectedBackground": "#44475A", "editorHoverWidget.background": "#282A36", "editorHoverWidget.border": "#7b7f8b", "editorMarkerNavigation.background": "#262626", "peekView.border": "#44475A", "peekViewEditor.background": "#282A36", "peekViewEditor.matchHighlightBackground": "#F1FA8C80", "peekViewResult.background": "#262626", "peekViewResult.fileForeground": "#f6f6f4", "peekViewResult.lineForeground": "#f6f6f4", "peekViewResult.matchHighlightBackground": "#F1FA8C80", "peekViewResult.selectionBackground": "#44475A", "peekViewResult.selectionForeground": "#f6f6f4", "peekViewTitle.background": "#191A21", "peekViewTitleDescription.foreground": "#7b7f8b", "peekViewTitleLabel.foreground": "#f6f6f4", "merge.currentHeaderBackground": "#50FA7B90", "merge.incomingHeaderBackground": "#BD93F990", "editorOverviewRuler.currentContentForeground": "#62e884", "editorOverviewRuler.incomingContentForeground": "#bf9eee", "panel.background": "#282A36", "panel.border": "#bf9eee", "panelTitle.activeBorder": "#f286c4", "panelTitle.activeForeground": "#f6f6f4", "panelTitle.inactiveForeground": "#7b7f8b", "statusBar.background": "#191A21", "statusBar.foreground": "#f6f6f4", "statusBar.debuggingBackground": "#ee6666", "statusBar.debuggingForeground": "#191A21", "statusBar.noFolderBackground": "#191A21", "statusBar.noFolderForeground": "#f6f6f4", "statusBarItem.prominentBackground": "#ee6666", "statusBarItem.prominentHoverBackground": "#FFB86C", "statusBarItem.remoteForeground": "#282A36", "statusBarItem.remoteBackground": "#bf9eee", "titleBar.activeBackground": "#262626", "titleBar.activeForeground": "#f6f6f4", "titleBar.inactiveBackground": "#191A21", "titleBar.inactiveForeground": "#7b7f8b", "extensionButton.prominentForeground": "#f6f6f4", "extensionButton.prominentBackground": "#50FA7B90", "extensionButton.prominentHoverBackground": "#50FA7B60", "pickerGroup.border": "#bf9eee", "pickerGroup.foreground": "#97e1f1", "debugToolBar.background": "#262626", "walkThrough.embeddedEditorBackground": "#262626", "settings.headerForeground": "#f6f6f4", "settings.modifiedItemIndicator": "#FFB86C", "settings.dropdownBackground": "#262626", "settings.dropdownForeground": "#f6f6f4", "settings.dropdownBorder": "#191A21", "settings.checkboxBackground": "#262626", "settings.checkboxForeground": "#f6f6f4", "settings.checkboxBorder": "#191A21", "settings.textInputBackground": "#262626", "settings.textInputForeground": "#f6f6f4", "settings.textInputBorder": "#191A21", "settings.numberInputBackground": "#262626", "settings.numberInputForeground": "#f6f6f4", "settings.numberInputBorder": "#191A21", "breadcrumb.foreground": "#7b7f8b", "breadcrumb.background": "#282A36", "breadcrumb.focusForeground": "#f6f6f4", "breadcrumb.activeSelectionForeground": "#f6f6f4", "breadcrumbPicker.background": "#191A21", "listFilterWidget.background": "#343746", "listFilterWidget.outline": "#424450", "listFilterWidget.noMatchesOutline": "#ee6666" }, "tokenColors": [ { "scope": ["emphasis"], "settings": { "fontStyle": "italic" } }, { "scope": ["strong"], "settings": { "fontStyle": "bold" } }, { "scope": ["header"], "settings": { "foreground": "#bf9eee" } }, { "scope": ["meta.diff", "meta.diff.header"], "settings": { "foreground": "#7b7f8b" } }, { "scope": ["markup.inserted"], "settings": { "foreground": "#62e884" } }, { "scope": ["markup.deleted"], "settings": { "foreground": "#ee6666" } }, { "scope": ["markup.changed"], "settings": { "foreground": "#FFB86C" } }, { "scope": ["invalid"], "settings": { "foreground": "#ee6666", "fontStyle": "underline italic" } }, { "scope": ["invalid.deprecated"], "settings": { "foreground": "#f6f6f4", "fontStyle": "underline italic" } }, { "scope": ["entity.name.filename"], "settings": { "foreground": "#e7ee98" } }, { "scope": ["markup.error"], "settings": { "foreground": "#ee6666" } }, { "name": "Underlined markup", "scope": ["markup.underline"], "settings": { "fontStyle": "underline" } }, { "name": "Bold markup", "scope": ["markup.bold"], "settings": { "fontStyle": "bold", "foreground": "#FFB86C" } }, { "name": "Markup headings", "scope": ["markup.heading"], "settings": { "fontStyle": "bold", "foreground": "#bf9eee" } }, { "name": "Markup italic", "scope": ["markup.italic"], "settings": { "foreground": "#e7ee98", "fontStyle": "italic" } }, { "name": "Bullets, lists (prose)", "scope": [ "beginning.punctuation.definition.list.markdown", "beginning.punctuation.definition.quote.markdown", "punctuation.definition.link.restructuredtext" ], "settings": { "foreground": "#97e1f1" } }, { "name": "Inline code (prose)", "scope": ["markup.inline.raw", "markup.raw.restructuredtext"], "settings": { "foreground": "#62e884" } }, { "name": "Links (prose)", "scope": ["markup.underline.link", "markup.underline.link.image"], "settings": { "foreground": "#97e1f1" } }, { "name": "Link text, image alt text (prose)", "scope": [ "meta.link.reference.def.restructuredtext", "punctuation.definition.directive.restructuredtext", "string.other.link.description", "string.other.link.title" ], "settings": { "foreground": "#f286c4" } }, { "name": "Blockquotes (prose)", "scope": ["entity.name.directive.restructuredtext", "markup.quote"], "settings": { "foreground": "#e7ee98", "fontStyle": "italic" } }, { "name": "Horizontal rule (prose)", "scope": ["meta.separator.markdown"], "settings": { "foreground": "#7b7f8b" } }, { "name": "Code blocks", "scope": [ "fenced_code.block.language", "markup.raw.inner.restructuredtext", "markup.fenced_code.block.markdown punctuation.definition.markdown" ], "settings": { "foreground": "#62e884" } }, { "name": "Prose constants", "scope": ["punctuation.definition.constant.restructuredtext"], "settings": { "foreground": "#bf9eee" } }, { "name": "Braces in markdown headings", "scope": [ "markup.heading.markdown punctuation.definition.string.begin", "markup.heading.markdown punctuation.definition.string.end" ], "settings": { "foreground": "#bf9eee" } }, { "name": "Braces in markdown paragraphs", "scope": [ "meta.paragraph.markdown punctuation.definition.string.begin", "meta.paragraph.markdown punctuation.definition.string.end" ], "settings": { "foreground": "#f6f6f4" } }, { "name": "Braces in markdown blockquotes", "scope": [ "markup.quote.markdown meta.paragraph.markdown punctuation.definition.string.begin", "markup.quote.markdown meta.paragraph.markdown punctuation.definition.string.end" ], "settings": { "foreground": "#e7ee98" } }, { "name": "User-defined class names", "scope": ["entity.name.type.class", "entity.name.class"], "settings": { "foreground": "#97e1f1", "fontStyle": "normal" } }, { "name": "this, super, self, etc.", "scope": [ "keyword.expressions-and-types.swift", "keyword.other.this", "variable.language", "variable.language punctuation.definition.variable.php", "variable.other.readwrite.instance.ruby", "variable.parameter.function.language.special" ], "settings": { "foreground": "#bf9eee", "fontStyle": "italic" } }, { "name": "Inherited classes", "scope": ["entity.other.inherited-class"], "settings": { "fontStyle": "italic", "foreground": "#97e1f1" } }, { "name": "Comments", "scope": [ "comment", "punctuation.definition.comment", "unused.comment", "wildcard.comment" ], "settings": { "foreground": "#7b7f8b" } }, { "name": "JSDoc-style keywords", "scope": [ "comment keyword.codetag.notation", "comment.block.documentation keyword", "comment.block.documentation storage.type.class" ], "settings": { "foreground": "#f286c4" } }, { "name": "JSDoc-style types", "scope": ["comment.block.documentation entity.name.type"], "settings": { "foreground": "#97e1f1", "fontStyle": "italic" } }, { "name": "JSDoc-style type brackets", "scope": [ "comment.block.documentation entity.name.type punctuation.definition.bracket" ], "settings": { "foreground": "#97e1f1" } }, { "name": "JSDoc-style comment parameters", "scope": ["comment.block.documentation variable"], "settings": { "foreground": "#FFB86C", "fontStyle": "italic" } }, { "name": "Constants", "scope": ["constant", "variable.other.constant"], "settings": { "foreground": "#bf9eee" } }, { "name": "Constant escape sequences", "scope": [ "constant.character.escape", "constant.character.string.escape", "constant.regexp" ], "settings": { "foreground": "#f286c4" } }, { "name": "HTML tags", "scope": ["entity.name.tag"], "settings": { "foreground": "#f286c4" } }, { "name": "CSS attribute parent selectors ('&')", "scope": ["entity.other.attribute-name.parent-selector"], "settings": { "foreground": "#f286c4" } }, { "name": "HTML/CSS attribute names", "scope": ["entity.other.attribute-name"], "settings": { "foreground": "#62e884", "fontStyle": "italic" } }, { "name": "Function names", "scope": [ "entity.name.function", "meta.function-call.object", "meta.function-call.php", "meta.function-call.static", "meta.method-call.java meta.method", "meta.method.groovy", "support.function.any-method.lua", "keyword.operator.function.infix" ], "settings": { "foreground": "#62e884" } }, { "name": "Function parameters", "scope": [ "entity.name.variable.parameter", "meta.at-rule.function variable", "meta.at-rule.mixin variable", "meta.function.arguments variable.other.php", "meta.selectionset.graphql meta.arguments.graphql variable.arguments.graphql", "variable.parameter" ], "settings": { "fontStyle": "italic", "foreground": "#FFB86C" } }, { "name": "Decorators", "scope": [ "meta.decorator variable.other.readwrite", "meta.decorator variable.other.property" ], "settings": { "foreground": "#62e884", "fontStyle": "italic" } }, { "name": "Decorator Objects", "scope": ["meta.decorator variable.other.object"], "settings": { "foreground": "#62e884" } }, { "name": "Keywords", "scope": ["keyword", "punctuation.definition.keyword"], "settings": { "foreground": "#f286c4" } }, { "name": "Keyword \"new\"", "scope": ["keyword.control.new", "keyword.operator.new"], "settings": { "fontStyle": "bold" } }, { "name": "Generic selectors (CSS/SCSS/Less/Stylus)", "scope": ["meta.selector"], "settings": { "foreground": "#f286c4" } }, { "name": "Language Built-ins", "scope": ["support"], "settings": { "fontStyle": "italic", "foreground": "#97e1f1" } }, { "name": "Built-in magic functions and constants", "scope": [ "support.function.magic", "support.variable", "variable.other.predefined" ], "settings": { "fontStyle": "regular", "foreground": "#bf9eee" } }, { "name": "Built-in functions / properties", "scope": ["support.function", "support.type.property-name"], "settings": { "fontStyle": "regular" } }, { "name": "Separators (key/value, namespace, inheritance, pointer, hash, slice, etc)", "scope": [ "constant.other.symbol.hashkey punctuation.definition.constant.ruby", "entity.other.attribute-name.placeholder punctuation", "entity.other.attribute-name.pseudo-class punctuation", "entity.other.attribute-name.pseudo-element punctuation", "meta.group.double.toml", "meta.group.toml", "meta.object-binding-pattern-variable punctuation.destructuring", "punctuation.colon.graphql", "punctuation.definition.block.scalar.folded.yaml", "punctuation.definition.block.scalar.literal.yaml", "punctuation.definition.block.sequence.item.yaml", "punctuation.definition.entity.other.inherited-class", "punctuation.function.swift", "punctuation.separator.dictionary.key-value", "punctuation.separator.hash", "punctuation.separator.inheritance", "punctuation.separator.key-value", "punctuation.separator.key-value.mapping.yaml", "punctuation.separator.namespace", "punctuation.separator.pointer-access", "punctuation.separator.slice", "string.unquoted.heredoc punctuation.definition.string", "support.other.chomping-indicator.yaml", "punctuation.separator.annotation" ], "settings": { "foreground": "#f286c4" } }, { "name": "Brackets, braces, parens, etc.", "scope": [ "keyword.operator.other.powershell", "keyword.other.statement-separator.powershell", "meta.brace.round", "meta.function-call punctuation", "punctuation.definition.arguments.begin", "punctuation.definition.arguments.end", "punctuation.definition.entity.begin", "punctuation.definition.entity.end", "punctuation.definition.tag.cs", "punctuation.definition.type.begin", "punctuation.definition.type.end", "punctuation.section.scope.begin", "punctuation.section.scope.end", "punctuation.terminator.expression.php", "storage.type.generic.java", "string.template meta.brace", "string.template punctuation.accessor" ], "settings": { "foreground": "#f6f6f4" } }, { "name": "Variable interpolation operators", "scope": [ "meta.string-contents.quoted.double punctuation.definition.variable", "punctuation.definition.interpolation.begin", "punctuation.definition.interpolation.end", "punctuation.definition.template-expression.begin", "punctuation.definition.template-expression.end", "punctuation.section.embedded.begin", "punctuation.section.embedded.coffee", "punctuation.section.embedded.end", "punctuation.section.embedded.end source.php", "punctuation.section.embedded.end source.ruby", "punctuation.definition.variable.makefile" ], "settings": { "foreground": "#f286c4" } }, { "name": "Keys (serializable languages)", "scope": [ "entity.name.function.target.makefile", "entity.name.section.toml", "entity.name.tag.yaml", "variable.other.key.toml" ], "settings": { "foreground": "#97e1f1" } }, { "name": "Dates / timestamps (serializable languages)", "scope": ["constant.other.date", "constant.other.timestamp"], "settings": { "foreground": "#FFB86C" } }, { "name": "YAML aliases", "scope": ["variable.other.alias.yaml"], "settings": { "fontStyle": "italic underline", "foreground": "#62e884" } }, { "name": "Storage", "scope": [ "storage", "meta.implementation storage.type.objc", "meta.interface-or-protocol storage.type.objc", "source.groovy storage.type.def" ], "settings": { "fontStyle": "regular", "foreground": "#f286c4" } }, { "name": "Types", "scope": [ "entity.name.type", "keyword.primitive-datatypes.swift", "keyword.type.cs", "meta.protocol-list.objc", "meta.return-type.objc", "source.go storage.type", "source.groovy storage.type", "source.java storage.type", "source.powershell entity.other.attribute-name", "storage.class.std.rust", "storage.type.attribute.swift", "storage.type.c", "storage.type.core.rust", "storage.type.cs", "storage.type.groovy", "storage.type.objc", "storage.type.php", "storage.type.haskell", "storage.type.ocaml" ], "settings": { "fontStyle": "italic", "foreground": "#97e1f1" } }, { "name": "Generics, templates, and mapped type declarations", "scope": [ "entity.name.type.type-parameter", "meta.indexer.mappedtype.declaration entity.name.type", "meta.type.parameters entity.name.type" ], "settings": { "foreground": "#FFB86C" } }, { "name": "Modifiers", "scope": ["storage.modifier"], "settings": { "foreground": "#f286c4" } }, { "name": "RegExp string", "scope": [ "string.regexp", "constant.other.character-class.set.regexp", "constant.character.escape.backslash.regexp" ], "settings": { "foreground": "#e7ee98" } }, { "name": "Non-capture operators", "scope": ["punctuation.definition.group.capture.regexp"], "settings": { "foreground": "#f286c4" } }, { "name": "RegExp start and end characters", "scope": [ "string.regexp punctuation.definition.string.begin", "string.regexp punctuation.definition.string.end" ], "settings": { "foreground": "#ee6666" } }, { "name": "Character group", "scope": ["punctuation.definition.character-class.regexp"], "settings": { "foreground": "#97e1f1" } }, { "name": "Capture groups", "scope": ["punctuation.definition.group.regexp"], "settings": { "foreground": "#FFB86C" } }, { "name": "Assertion operators", "scope": [ "punctuation.definition.group.assertion.regexp", "keyword.operator.negation.regexp" ], "settings": { "foreground": "#ee6666" } }, { "name": "Positive lookaheads", "scope": ["meta.assertion.look-ahead.regexp"], "settings": { "foreground": "#62e884" } }, { "name": "Strings", "scope": ["string"], "settings": { "foreground": "#e7ee98" } }, { "name": "String quotes (temporary vscode fix)", "scope": [ "punctuation.definition.string.begin", "punctuation.definition.string.end" ], "settings": { "foreground": "#dee492" } }, { "name": "Property quotes (temporary vscode fix)", "scope": [ "punctuation.support.type.property-name.begin", "punctuation.support.type.property-name.end" ], "settings": { "foreground": "#97e2f2" } }, { "name": "Docstrings", "scope": [ "string.quoted.docstring.multi", "string.quoted.docstring.multi.python punctuation.definition.string.begin", "string.quoted.docstring.multi.python punctuation.definition.string.end", "string.quoted.docstring.multi.python constant.character.escape" ], "settings": { "foreground": "#7b7f8b" } }, { "name": "Variables and object properties", "scope": [ "variable", "constant.other.key.perl", "support.variable.property", "variable.other.constant.js", "variable.other.constant.ts", "variable.other.constant.tsx" ], "settings": { "foreground": "#f6f6f4" } }, { "name": "Destructuring / aliasing reference name (LHS)", "scope": [ "meta.import variable.other.readwrite", "meta.variable.assignment.destructured.object.coffee variable" ], "settings": { "fontStyle": "italic", "foreground": "#FFB86C" } }, { "name": "Destructuring / aliasing variable name (RHS)", "scope": [ "meta.import variable.other.readwrite.alias", "meta.export variable.other.readwrite.alias", "meta.variable.assignment.destructured.object.coffee variable variable" ], "settings": { "fontStyle": "normal", "foreground": "#f6f6f4" } }, { "name": "GraphQL keys", "scope": ["meta.selectionset.graphql variable"], "settings": { "foreground": "#e7ee98" } }, { "name": "GraphQL function arguments", "scope": ["meta.selectionset.graphql meta.arguments variable"], "settings": { "foreground": "#f6f6f4" } }, { "name": "GraphQL fragment name (definition)", "scope": ["entity.name.fragment.graphql", "variable.fragment.graphql"], "settings": { "foreground": "#97e1f1" } }, { "name": "Edge cases (foreground color resets)", "scope": [ "constant.other.symbol.hashkey.ruby", "keyword.operator.dereference.java", "keyword.operator.navigation.groovy", "meta.scope.for-loop.shell punctuation.definition.string.begin", "meta.scope.for-loop.shell punctuation.definition.string.end", "meta.scope.for-loop.shell string", "storage.modifier.import", "punctuation.section.embedded.begin.tsx", "punctuation.section.embedded.end.tsx", "punctuation.section.embedded.begin.jsx", "punctuation.section.embedded.end.jsx", "punctuation.separator.list.comma.css", "constant.language.empty-list.haskell" ], "settings": { "foreground": "#f6f6f4" } }, { "name": "Shell variables prefixed with \"$\" (edge case)", "scope": ["source.shell variable.other"], "settings": { "foreground": "#bf9eee" } }, { "name": "Powershell constants mistakenly scoped to `support`, rather than `constant` (edge)", "scope": ["support.constant"], "settings": { "fontStyle": "normal", "foreground": "#bf9eee" } }, { "name": "Makefile prerequisite names", "scope": ["meta.scope.prerequisites.makefile"], "settings": { "foreground": "#e7ee98" } }, { "name": "SCSS attibute selector strings", "scope": ["meta.attribute-selector.scss"], "settings": { "foreground": "#e7ee98" } }, { "name": "SCSS attribute selector brackets", "scope": [ "punctuation.definition.attribute-selector.end.bracket.square.scss", "punctuation.definition.attribute-selector.begin.bracket.square.scss" ], "settings": { "foreground": "#f6f6f4" } }, { "name": "Haskell Pragmas", "scope": ["meta.preprocessor.haskell"], "settings": { "foreground": "#7b7f8b" } }, { "name": "Log file error", "scope": ["log.error"], "settings": { "foreground": "#ee6666", "fontStyle": "bold" } }, { "name": "Log file warning", "scope": ["log.warning"], "settings": { "foreground": "#e7ee98", "fontStyle": "bold" } } ] } ================================================ FILE: apps/web/src/lib/shiki/themes/dracula.json ================================================ { "$schema": "vscode://schemas/color-theme", "name": "dracula", "author": "Zeno Rocha", "maintainers": ["Derek P Sifford "], "semanticClass": "theme.dracula", "semanticHighlighting": true, "dracula": { "base": [ "#282A36", "#F8F8F2", "#44475A", "#6272A4", "#8BE9FD", "#50FA7B", "#FFB86C", "#FF79C6", "#BD93F9", "#FF5555", "#F1FA8C" ], "ansi": [ "#21222C", "#FF5555", "#50FA7B", "#F1FA8C", "#BD93F9", "#FF79C6", "#8BE9FD", "#F8F8F2", "#6272A4", "#FF6E6E", "#69FF94", "#FFFFA5", "#D6ACFF", "#FF92DF", "#A4FFFF", "#FFFFFF" ], "brightOther": ["#E9F284", "#8BE9FE"], "other": [ "#44475A75", "#FFFFFF1A", "#FFFFFF", "#44475A70", "#424450", "#343746", "#21222C", "#191A21" ] }, "colors": { "terminal.background": "#282A36", "terminal.foreground": "#F8F8F2", "terminal.ansiBrightBlack": "#6272A4", "terminal.ansiBrightRed": "#FF6E6E", "terminal.ansiBrightGreen": "#69FF94", "terminal.ansiBrightYellow": "#FFFFA5", "terminal.ansiBrightBlue": "#D6ACFF", "terminal.ansiBrightMagenta": "#FF92DF", "terminal.ansiBrightCyan": "#A4FFFF", "terminal.ansiBrightWhite": "#FFFFFF", "terminal.ansiBlack": "#21222C", "terminal.ansiRed": "#FF5555", "terminal.ansiGreen": "#50FA7B", "terminal.ansiYellow": "#F1FA8C", "terminal.ansiBlue": "#BD93F9", "terminal.ansiMagenta": "#FF79C6", "terminal.ansiCyan": "#8BE9FD", "terminal.ansiWhite": "#F8F8F2", "focusBorder": "#6272A4", "foreground": "#F8F8F2", "selection.background": "#BD93F9", "errorForeground": "#FF5555", "button.background": "#44475A", "button.foreground": "#F8F8F2", "button.secondaryBackground": "#282A36", "button.secondaryForeground": "#F8F8F2", "button.secondaryHoverBackground": "#343746", "dropdown.background": "#343746", "dropdown.border": "#191A21", "dropdown.foreground": "#F8F8F2", "input.background": "#282A36", "input.foreground": "#F8F8F2", "input.border": "#191A21", "input.placeholderForeground": "#6272A4", "inputOption.activeBorder": "#BD93F9", "inputValidation.infoBorder": "#FF79C6", "inputValidation.warningBorder": "#FFB86C", "inputValidation.errorBorder": "#FF5555", "badge.foreground": "#F8F8F2", "badge.background": "#44475A", "progressBar.background": "#FF79C6", "list.activeSelectionBackground": "#44475A", "list.activeSelectionForeground": "#F8F8F2", "list.dropBackground": "#44475A", "list.focusBackground": "#44475A75", "list.highlightForeground": "#8BE9FD", "list.hoverBackground": "#44475A75", "list.inactiveSelectionBackground": "#44475A75", "list.warningForeground": "#FFB86C", "list.errorForeground": "#FF5555", "activityBar.background": "#343746", "activityBar.inactiveForeground": "#6272A4", "activityBar.foreground": "#F8F8F2", "activityBar.activeBorder": "#FF79C680", "activityBar.activeBackground": "#BD93F910", "activityBarBadge.background": "#FF79C6", "activityBarBadge.foreground": "#F8F8F2", "sideBar.background": "#21222C", "sideBarTitle.foreground": "#F8F8F2", "sideBarSectionHeader.background": "#282A36", "sideBarSectionHeader.border": "#191A21", "editorGroup.border": "#BD93F9", "editorGroup.dropBackground": "#44475A70", "editorGroupHeader.tabsBackground": "#191A21", "tab.activeBackground": "#282A36", "tab.activeForeground": "#F8F8F2", "tab.border": "#191A21", "tab.activeBorderTop": "#FF79C680", "tab.inactiveBackground": "#21222C", "tab.inactiveForeground": "#6272A4", "editor.foreground": "#F8F8F2", "editor.background": "#282A36", "editorLineNumber.foreground": "#6272A4", "editor.selectionBackground": "#44475A", "editor.selectionHighlightBackground": "#424450", "editor.foldBackground": "#21222C80", "editor.wordHighlightBackground": "#8BE9FD50", "editor.wordHighlightStrongBackground": "#50FA7B50", "editor.findMatchBackground": "#FFB86C80", "editor.findMatchHighlightBackground": "#FFFFFF40", "editor.findRangeHighlightBackground": "#44475A75", "editor.hoverHighlightBackground": "#8BE9FD50", "editor.lineHighlightBorder": "#44475A", "editorLink.activeForeground": "#8BE9FD", "editor.rangeHighlightBackground": "#BD93F915", "editor.snippetTabstopHighlightBackground": "#282A36", "editor.snippetTabstopHighlightBorder": "#6272A4", "editor.snippetFinalTabstopHighlightBackground": "#282A36", "editor.snippetFinalTabstopHighlightBorder": "#50FA7B", "editorWhitespace.foreground": "#FFFFFF1A", "editorIndentGuide.background": "#FFFFFF1A", "editorIndentGuide.activeBackground": "#FFFFFF45", "editorRuler.foreground": "#FFFFFF1A", "editorCodeLens.foreground": "#6272A4", "editorBracketHighlight.foreground1": "#F8F8F2", "editorBracketHighlight.foreground2": "#FF79C6", "editorBracketHighlight.foreground3": "#8BE9FD", "editorBracketHighlight.foreground4": "#50FA7B", "editorBracketHighlight.foreground5": "#BD93F9", "editorBracketHighlight.foreground6": "#FFB86C", "editorBracketHighlight.unexpectedBracket.foreground": "#FF5555", "editorOverviewRuler.border": "#191A21", "editorOverviewRuler.selectionHighlightForeground": "#FFB86C", "editorOverviewRuler.wordHighlightForeground": "#8BE9FD", "editorOverviewRuler.wordHighlightStrongForeground": "#50FA7B", "editorOverviewRuler.modifiedForeground": "#8BE9FD80", "editorOverviewRuler.addedForeground": "#50FA7B80", "editorOverviewRuler.deletedForeground": "#FF555580", "editorOverviewRuler.errorForeground": "#FF555580", "editorOverviewRuler.warningForeground": "#FFB86C80", "editorOverviewRuler.infoForeground": "#8BE9FD80", "editorError.foreground": "#FF5555", "editorWarning.foreground": "#8BE9FD", "editorGutter.modifiedBackground": "#8BE9FD80", "editorGutter.addedBackground": "#50FA7B80", "editorGutter.deletedBackground": "#FF555580", "gitDecoration.modifiedResourceForeground": "#8BE9FD", "gitDecoration.deletedResourceForeground": "#FF5555", "gitDecoration.untrackedResourceForeground": "#50FA7B", "gitDecoration.ignoredResourceForeground": "#6272A4", "gitDecoration.conflictingResourceForeground": "#FFB86C", "diffEditor.insertedTextBackground": "#50FA7B20", "diffEditor.removedTextBackground": "#FF555550", "editorWidget.background": "#21222C", "editorSuggestWidget.background": "#21222C", "editorSuggestWidget.foreground": "#F8F8F2", "editorSuggestWidget.selectedBackground": "#44475A", "editorHoverWidget.background": "#282A36", "editorHoverWidget.border": "#6272A4", "editorMarkerNavigation.background": "#21222C", "peekView.border": "#44475A", "peekViewEditor.background": "#282A36", "peekViewEditor.matchHighlightBackground": "#F1FA8C80", "peekViewResult.background": "#21222C", "peekViewResult.fileForeground": "#F8F8F2", "peekViewResult.lineForeground": "#F8F8F2", "peekViewResult.matchHighlightBackground": "#F1FA8C80", "peekViewResult.selectionBackground": "#44475A", "peekViewResult.selectionForeground": "#F8F8F2", "peekViewTitle.background": "#191A21", "peekViewTitleDescription.foreground": "#6272A4", "peekViewTitleLabel.foreground": "#F8F8F2", "merge.currentHeaderBackground": "#50FA7B90", "merge.incomingHeaderBackground": "#BD93F990", "editorOverviewRuler.currentContentForeground": "#50FA7B", "editorOverviewRuler.incomingContentForeground": "#BD93F9", "panel.background": "#282A36", "panel.border": "#BD93F9", "panelTitle.activeBorder": "#FF79C6", "panelTitle.activeForeground": "#F8F8F2", "panelTitle.inactiveForeground": "#6272A4", "statusBar.background": "#191A21", "statusBar.foreground": "#F8F8F2", "statusBar.debuggingBackground": "#FF5555", "statusBar.debuggingForeground": "#191A21", "statusBar.noFolderBackground": "#191A21", "statusBar.noFolderForeground": "#F8F8F2", "statusBarItem.prominentBackground": "#FF5555", "statusBarItem.prominentHoverBackground": "#FFB86C", "statusBarItem.remoteForeground": "#282A36", "statusBarItem.remoteBackground": "#BD93F9", "titleBar.activeBackground": "#21222C", "titleBar.activeForeground": "#F8F8F2", "titleBar.inactiveBackground": "#191A21", "titleBar.inactiveForeground": "#6272A4", "extensionButton.prominentForeground": "#F8F8F2", "extensionButton.prominentBackground": "#50FA7B90", "extensionButton.prominentHoverBackground": "#50FA7B60", "pickerGroup.border": "#BD93F9", "pickerGroup.foreground": "#8BE9FD", "debugToolBar.background": "#21222C", "walkThrough.embeddedEditorBackground": "#21222C", "settings.headerForeground": "#F8F8F2", "settings.modifiedItemIndicator": "#FFB86C", "settings.dropdownBackground": "#21222C", "settings.dropdownForeground": "#F8F8F2", "settings.dropdownBorder": "#191A21", "settings.checkboxBackground": "#21222C", "settings.checkboxForeground": "#F8F8F2", "settings.checkboxBorder": "#191A21", "settings.textInputBackground": "#21222C", "settings.textInputForeground": "#F8F8F2", "settings.textInputBorder": "#191A21", "settings.numberInputBackground": "#21222C", "settings.numberInputForeground": "#F8F8F2", "settings.numberInputBorder": "#191A21", "breadcrumb.foreground": "#6272A4", "breadcrumb.background": "#282A36", "breadcrumb.focusForeground": "#F8F8F2", "breadcrumb.activeSelectionForeground": "#F8F8F2", "breadcrumbPicker.background": "#191A21", "listFilterWidget.background": "#343746", "listFilterWidget.outline": "#424450", "listFilterWidget.noMatchesOutline": "#FF5555" }, "tokenColors": [ { "scope": ["emphasis"], "settings": { "fontStyle": "italic" } }, { "scope": ["strong"], "settings": { "fontStyle": "bold" } }, { "scope": ["header"], "settings": { "foreground": "#BD93F9" } }, { "scope": ["meta.diff", "meta.diff.header"], "settings": { "foreground": "#6272A4" } }, { "scope": ["markup.inserted"], "settings": { "foreground": "#50FA7B" } }, { "scope": ["markup.deleted"], "settings": { "foreground": "#FF5555" } }, { "scope": ["markup.changed"], "settings": { "foreground": "#FFB86C" } }, { "scope": ["invalid"], "settings": { "foreground": "#FF5555", "fontStyle": "underline italic" } }, { "scope": ["invalid.deprecated"], "settings": { "foreground": "#F8F8F2", "fontStyle": "underline italic" } }, { "scope": ["entity.name.filename"], "settings": { "foreground": "#F1FA8C" } }, { "scope": ["markup.error"], "settings": { "foreground": "#FF5555" } }, { "name": "Underlined markup", "scope": ["markup.underline"], "settings": { "fontStyle": "underline" } }, { "name": "Bold markup", "scope": ["markup.bold"], "settings": { "fontStyle": "bold", "foreground": "#FFB86C" } }, { "name": "Markup headings", "scope": ["markup.heading"], "settings": { "fontStyle": "bold", "foreground": "#BD93F9" } }, { "name": "Markup italic", "scope": ["markup.italic"], "settings": { "foreground": "#F1FA8C", "fontStyle": "italic" } }, { "name": "Bullets, lists (prose)", "scope": [ "beginning.punctuation.definition.list.markdown", "beginning.punctuation.definition.quote.markdown", "punctuation.definition.link.restructuredtext" ], "settings": { "foreground": "#8BE9FD" } }, { "name": "Inline code (prose)", "scope": ["markup.inline.raw", "markup.raw.restructuredtext"], "settings": { "foreground": "#50FA7B" } }, { "name": "Links (prose)", "scope": ["markup.underline.link", "markup.underline.link.image"], "settings": { "foreground": "#8BE9FD" } }, { "name": "Link text, image alt text (prose)", "scope": [ "meta.link.reference.def.restructuredtext", "punctuation.definition.directive.restructuredtext", "string.other.link.description", "string.other.link.title" ], "settings": { "foreground": "#FF79C6" } }, { "name": "Blockquotes (prose)", "scope": ["entity.name.directive.restructuredtext", "markup.quote"], "settings": { "foreground": "#F1FA8C", "fontStyle": "italic" } }, { "name": "Horizontal rule (prose)", "scope": ["meta.separator.markdown"], "settings": { "foreground": "#6272A4" } }, { "name": "Code blocks", "scope": [ "fenced_code.block.language", "markup.raw.inner.restructuredtext", "markup.fenced_code.block.markdown punctuation.definition.markdown" ], "settings": { "foreground": "#50FA7B" } }, { "name": "Prose constants", "scope": ["punctuation.definition.constant.restructuredtext"], "settings": { "foreground": "#BD93F9" } }, { "name": "Braces in markdown headings", "scope": [ "markup.heading.markdown punctuation.definition.string.begin", "markup.heading.markdown punctuation.definition.string.end" ], "settings": { "foreground": "#BD93F9" } }, { "name": "Braces in markdown paragraphs", "scope": [ "meta.paragraph.markdown punctuation.definition.string.begin", "meta.paragraph.markdown punctuation.definition.string.end" ], "settings": { "foreground": "#F8F8F2" } }, { "name": "Braces in markdown blockquotes", "scope": [ "markup.quote.markdown meta.paragraph.markdown punctuation.definition.string.begin", "markup.quote.markdown meta.paragraph.markdown punctuation.definition.string.end" ], "settings": { "foreground": "#F1FA8C" } }, { "name": "User-defined class names", "scope": ["entity.name.type.class", "entity.name.class"], "settings": { "foreground": "#8BE9FD", "fontStyle": "normal" } }, { "name": "this, super, self, etc.", "scope": [ "keyword.expressions-and-types.swift", "keyword.other.this", "variable.language", "variable.language punctuation.definition.variable.php", "variable.other.readwrite.instance.ruby", "variable.parameter.function.language.special" ], "settings": { "foreground": "#BD93F9", "fontStyle": "italic" } }, { "name": "Inherited classes", "scope": ["entity.other.inherited-class"], "settings": { "fontStyle": "italic", "foreground": "#8BE9FD" } }, { "name": "Comments", "scope": [ "comment", "punctuation.definition.comment", "unused.comment", "wildcard.comment" ], "settings": { "foreground": "#6272A4" } }, { "name": "JSDoc-style keywords", "scope": [ "comment keyword.codetag.notation", "comment.block.documentation keyword", "comment.block.documentation storage.type.class" ], "settings": { "foreground": "#FF79C6" } }, { "name": "JSDoc-style types", "scope": ["comment.block.documentation entity.name.type"], "settings": { "foreground": "#8BE9FD", "fontStyle": "italic" } }, { "name": "JSDoc-style type brackets", "scope": [ "comment.block.documentation entity.name.type punctuation.definition.bracket" ], "settings": { "foreground": "#8BE9FD" } }, { "name": "JSDoc-style comment parameters", "scope": ["comment.block.documentation variable"], "settings": { "foreground": "#FFB86C", "fontStyle": "italic" } }, { "name": "Constants", "scope": ["constant", "variable.other.constant"], "settings": { "foreground": "#BD93F9" } }, { "name": "Constant escape sequences", "scope": [ "constant.character.escape", "constant.character.string.escape", "constant.regexp" ], "settings": { "foreground": "#FF79C6" } }, { "name": "HTML tags", "scope": ["entity.name.tag"], "settings": { "foreground": "#FF79C6" } }, { "name": "CSS attribute parent selectors ('&')", "scope": ["entity.other.attribute-name.parent-selector"], "settings": { "foreground": "#FF79C6" } }, { "name": "HTML/CSS attribute names", "scope": ["entity.other.attribute-name"], "settings": { "foreground": "#50FA7B", "fontStyle": "italic" } }, { "name": "Function names", "scope": [ "entity.name.function", "meta.function-call.object", "meta.function-call.php", "meta.function-call.static", "meta.method-call.java meta.method", "meta.method.groovy", "support.function.any-method.lua", "keyword.operator.function.infix" ], "settings": { "foreground": "#50FA7B" } }, { "name": "Function parameters", "scope": [ "entity.name.variable.parameter", "meta.at-rule.function variable", "meta.at-rule.mixin variable", "meta.function.arguments variable.other.php", "meta.selectionset.graphql meta.arguments.graphql variable.arguments.graphql", "variable.parameter" ], "settings": { "fontStyle": "italic", "foreground": "#FFB86C" } }, { "name": "Decorators", "scope": [ "meta.decorator variable.other.readwrite", "meta.decorator variable.other.property" ], "settings": { "foreground": "#50FA7B", "fontStyle": "italic" } }, { "name": "Decorator Objects", "scope": ["meta.decorator variable.other.object"], "settings": { "foreground": "#50FA7B" } }, { "name": "Keywords", "scope": ["keyword", "punctuation.definition.keyword"], "settings": { "foreground": "#FF79C6" } }, { "name": "Keyword \"new\"", "scope": ["keyword.control.new", "keyword.operator.new"], "settings": { "fontStyle": "bold" } }, { "name": "Generic selectors (CSS/SCSS/Less/Stylus)", "scope": ["meta.selector"], "settings": { "foreground": "#FF79C6" } }, { "name": "Language Built-ins", "scope": ["support"], "settings": { "fontStyle": "italic", "foreground": "#8BE9FD" } }, { "name": "Built-in magic functions and constants", "scope": [ "support.function.magic", "support.variable", "variable.other.predefined" ], "settings": { "fontStyle": "regular", "foreground": "#BD93F9" } }, { "name": "Built-in functions / properties", "scope": ["support.function", "support.type.property-name"], "settings": { "fontStyle": "regular" } }, { "name": "Separators (key/value, namespace, inheritance, pointer, hash, slice, etc)", "scope": [ "constant.other.symbol.hashkey punctuation.definition.constant.ruby", "entity.other.attribute-name.placeholder punctuation", "entity.other.attribute-name.pseudo-class punctuation", "entity.other.attribute-name.pseudo-element punctuation", "meta.group.double.toml", "meta.group.toml", "meta.object-binding-pattern-variable punctuation.destructuring", "punctuation.colon.graphql", "punctuation.definition.block.scalar.folded.yaml", "punctuation.definition.block.scalar.literal.yaml", "punctuation.definition.block.sequence.item.yaml", "punctuation.definition.entity.other.inherited-class", "punctuation.function.swift", "punctuation.separator.dictionary.key-value", "punctuation.separator.hash", "punctuation.separator.inheritance", "punctuation.separator.key-value", "punctuation.separator.key-value.mapping.yaml", "punctuation.separator.namespace", "punctuation.separator.pointer-access", "punctuation.separator.slice", "string.unquoted.heredoc punctuation.definition.string", "support.other.chomping-indicator.yaml", "punctuation.separator.annotation" ], "settings": { "foreground": "#FF79C6" } }, { "name": "Brackets, braces, parens, etc.", "scope": [ "keyword.operator.other.powershell", "keyword.other.statement-separator.powershell", "meta.brace.round", "meta.function-call punctuation", "punctuation.definition.arguments.begin", "punctuation.definition.arguments.end", "punctuation.definition.entity.begin", "punctuation.definition.entity.end", "punctuation.definition.tag.cs", "punctuation.definition.type.begin", "punctuation.definition.type.end", "punctuation.section.scope.begin", "punctuation.section.scope.end", "punctuation.terminator.expression.php", "storage.type.generic.java", "string.template meta.brace", "string.template punctuation.accessor" ], "settings": { "foreground": "#F8F8F2" } }, { "name": "Variable interpolation operators", "scope": [ "meta.string-contents.quoted.double punctuation.definition.variable", "punctuation.definition.interpolation.begin", "punctuation.definition.interpolation.end", "punctuation.definition.template-expression.begin", "punctuation.definition.template-expression.end", "punctuation.section.embedded.begin", "punctuation.section.embedded.coffee", "punctuation.section.embedded.end", "punctuation.section.embedded.end source.php", "punctuation.section.embedded.end source.ruby", "punctuation.definition.variable.makefile" ], "settings": { "foreground": "#FF79C6" } }, { "name": "Keys (serializable languages)", "scope": [ "entity.name.function.target.makefile", "entity.name.section.toml", "entity.name.tag.yaml", "variable.other.key.toml" ], "settings": { "foreground": "#8BE9FD" } }, { "name": "Dates / timestamps (serializable languages)", "scope": ["constant.other.date", "constant.other.timestamp"], "settings": { "foreground": "#FFB86C" } }, { "name": "YAML aliases", "scope": ["variable.other.alias.yaml"], "settings": { "fontStyle": "italic underline", "foreground": "#50FA7B" } }, { "name": "Storage", "scope": [ "storage", "meta.implementation storage.type.objc", "meta.interface-or-protocol storage.type.objc", "source.groovy storage.type.def" ], "settings": { "fontStyle": "regular", "foreground": "#FF79C6" } }, { "name": "Types", "scope": [ "entity.name.type", "keyword.primitive-datatypes.swift", "keyword.type.cs", "meta.protocol-list.objc", "meta.return-type.objc", "source.go storage.type", "source.groovy storage.type", "source.java storage.type", "source.powershell entity.other.attribute-name", "storage.class.std.rust", "storage.type.attribute.swift", "storage.type.c", "storage.type.core.rust", "storage.type.cs", "storage.type.groovy", "storage.type.objc", "storage.type.php", "storage.type.haskell", "storage.type.ocaml" ], "settings": { "fontStyle": "italic", "foreground": "#8BE9FD" } }, { "name": "Generics, templates, and mapped type declarations", "scope": [ "entity.name.type.type-parameter", "meta.indexer.mappedtype.declaration entity.name.type", "meta.type.parameters entity.name.type" ], "settings": { "foreground": "#FFB86C" } }, { "name": "Modifiers", "scope": ["storage.modifier"], "settings": { "foreground": "#FF79C6" } }, { "name": "RegExp string", "scope": [ "string.regexp", "constant.other.character-class.set.regexp", "constant.character.escape.backslash.regexp" ], "settings": { "foreground": "#F1FA8C" } }, { "name": "Non-capture operators", "scope": ["punctuation.definition.group.capture.regexp"], "settings": { "foreground": "#FF79C6" } }, { "name": "RegExp start and end characters", "scope": [ "string.regexp punctuation.definition.string.begin", "string.regexp punctuation.definition.string.end" ], "settings": { "foreground": "#FF5555" } }, { "name": "Character group", "scope": ["punctuation.definition.character-class.regexp"], "settings": { "foreground": "#8BE9FD" } }, { "name": "Capture groups", "scope": ["punctuation.definition.group.regexp"], "settings": { "foreground": "#FFB86C" } }, { "name": "Assertion operators", "scope": [ "punctuation.definition.group.assertion.regexp", "keyword.operator.negation.regexp" ], "settings": { "foreground": "#FF5555" } }, { "name": "Positive lookaheads", "scope": ["meta.assertion.look-ahead.regexp"], "settings": { "foreground": "#50FA7B" } }, { "name": "Strings", "scope": ["string"], "settings": { "foreground": "#F1FA8C" } }, { "name": "String quotes (temporary vscode fix)", "scope": [ "punctuation.definition.string.begin", "punctuation.definition.string.end" ], "settings": { "foreground": "#E9F284" } }, { "name": "Property quotes (temporary vscode fix)", "scope": [ "punctuation.support.type.property-name.begin", "punctuation.support.type.property-name.end" ], "settings": { "foreground": "#8BE9FE" } }, { "name": "Docstrings", "scope": [ "string.quoted.docstring.multi", "string.quoted.docstring.multi.python punctuation.definition.string.begin", "string.quoted.docstring.multi.python punctuation.definition.string.end", "string.quoted.docstring.multi.python constant.character.escape" ], "settings": { "foreground": "#6272A4" } }, { "name": "Variables and object properties", "scope": [ "variable", "constant.other.key.perl", "support.variable.property", "variable.other.constant.js", "variable.other.constant.ts", "variable.other.constant.tsx" ], "settings": { "foreground": "#F8F8F2" } }, { "name": "Destructuring / aliasing reference name (LHS)", "scope": [ "meta.import variable.other.readwrite", "meta.variable.assignment.destructured.object.coffee variable" ], "settings": { "fontStyle": "italic", "foreground": "#FFB86C" } }, { "name": "Destructuring / aliasing variable name (RHS)", "scope": [ "meta.import variable.other.readwrite.alias", "meta.export variable.other.readwrite.alias", "meta.variable.assignment.destructured.object.coffee variable variable" ], "settings": { "fontStyle": "normal", "foreground": "#F8F8F2" } }, { "name": "GraphQL keys", "scope": ["meta.selectionset.graphql variable"], "settings": { "foreground": "#F1FA8C" } }, { "name": "GraphQL function arguments", "scope": ["meta.selectionset.graphql meta.arguments variable"], "settings": { "foreground": "#F8F8F2" } }, { "name": "GraphQL fragment name (definition)", "scope": ["entity.name.fragment.graphql", "variable.fragment.graphql"], "settings": { "foreground": "#8BE9FD" } }, { "name": "Edge cases (foreground color resets)", "scope": [ "constant.other.symbol.hashkey.ruby", "keyword.operator.dereference.java", "keyword.operator.navigation.groovy", "meta.scope.for-loop.shell punctuation.definition.string.begin", "meta.scope.for-loop.shell punctuation.definition.string.end", "meta.scope.for-loop.shell string", "storage.modifier.import", "punctuation.section.embedded.begin.tsx", "punctuation.section.embedded.end.tsx", "punctuation.section.embedded.begin.jsx", "punctuation.section.embedded.end.jsx", "punctuation.separator.list.comma.css", "constant.language.empty-list.haskell" ], "settings": { "foreground": "#F8F8F2" } }, { "name": "Shell variables prefixed with \"$\" (edge case)", "scope": ["source.shell variable.other"], "settings": { "foreground": "#BD93F9" } }, { "name": "Powershell constants mistakenly scoped to `support`, rather than `constant` (edge)", "scope": ["support.constant"], "settings": { "fontStyle": "normal", "foreground": "#BD93F9" } }, { "name": "Makefile prerequisite names", "scope": ["meta.scope.prerequisites.makefile"], "settings": { "foreground": "#F1FA8C" } }, { "name": "SCSS attibute selector strings", "scope": ["meta.attribute-selector.scss"], "settings": { "foreground": "#F1FA8C" } }, { "name": "SCSS attribute selector brackets", "scope": [ "punctuation.definition.attribute-selector.end.bracket.square.scss", "punctuation.definition.attribute-selector.begin.bracket.square.scss" ], "settings": { "foreground": "#F8F8F2" } }, { "name": "Haskell Pragmas", "scope": ["meta.preprocessor.haskell"], "settings": { "foreground": "#6272A4" } }, { "name": "Log file error", "scope": ["log.error"], "settings": { "foreground": "#FF5555", "fontStyle": "bold" } }, { "name": "Log file warning", "scope": ["log.warning"], "settings": { "foreground": "#F1FA8C", "fontStyle": "bold" } } ] } ================================================ FILE: apps/web/src/lib/shiki/themes/github-dark-dimmed.json ================================================ { "name": "github-dark-dimmed", "colors": { "focusBorder": "#316dca", "foreground": "#adbac7", "descriptionForeground": "#768390", "errorForeground": "#e5534b", "textLink.foreground": "#539bf5", "textLink.activeForeground": "#539bf5", "textBlockQuote.background": "#1c2128", "textBlockQuote.border": "#444c56", "textCodeBlock.background": "#636e7b66", "textPreformat.foreground": "#768390", "textSeparator.foreground": "#373e47", "icon.foreground": "#768390", "keybindingLabel.foreground": "#adbac7", "button.background": "#347d39", "button.foreground": "#ffffff", "button.hoverBackground": "#46954a", "button.secondaryBackground": "#3d444d", "button.secondaryForeground": "#adbac7", "button.secondaryHoverBackground": "#444c56", "checkbox.background": "#2d333b", "checkbox.border": "#444c56", "dropdown.background": "#2d333b", "dropdown.border": "#444c56", "dropdown.foreground": "#adbac7", "dropdown.listBackground": "#2d333b", "input.background": "#22272e", "input.border": "#444c56", "input.foreground": "#adbac7", "input.placeholderForeground": "#545d68", "badge.foreground": "#cdd9e5", "badge.background": "#316dca", "progressBar.background": "#316dca", "titleBar.activeForeground": "#768390", "titleBar.activeBackground": "#22272e", "titleBar.inactiveForeground": "#768390", "titleBar.inactiveBackground": "#1c2128", "titleBar.border": "#444c56", "activityBar.foreground": "#adbac7", "activityBar.inactiveForeground": "#768390", "activityBar.background": "#22272e", "activityBarBadge.foreground": "#cdd9e5", "activityBarBadge.background": "#316dca", "activityBar.activeBorder": "#ec775c", "activityBar.border": "#444c56", "sideBar.foreground": "#adbac7", "sideBar.background": "#1c2128", "sideBar.border": "#444c56", "sideBarTitle.foreground": "#adbac7", "sideBarSectionHeader.foreground": "#adbac7", "sideBarSectionHeader.background": "#1c2128", "sideBarSectionHeader.border": "#444c56", "list.hoverForeground": "#adbac7", "list.inactiveSelectionForeground": "#adbac7", "list.activeSelectionForeground": "#adbac7", "list.hoverBackground": "#636e7b1a", "list.inactiveSelectionBackground": "#636e7b66", "list.activeSelectionBackground": "#636e7b66", "list.focusForeground": "#adbac7", "list.focusBackground": "#4184e426", "list.inactiveFocusBackground": "#4184e426", "list.highlightForeground": "#539bf5", "tree.indentGuidesStroke": "#373e47", "notificationCenterHeader.foreground": "#768390", "notificationCenterHeader.background": "#2d333b", "notifications.foreground": "#adbac7", "notifications.background": "#2d333b", "notifications.border": "#444c56", "notificationsErrorIcon.foreground": "#e5534b", "notificationsWarningIcon.foreground": "#c69026", "notificationsInfoIcon.foreground": "#539bf5", "pickerGroup.border": "#444c56", "pickerGroup.foreground": "#768390", "quickInput.background": "#2d333b", "quickInput.foreground": "#adbac7", "statusBar.foreground": "#768390", "statusBar.background": "#22272e", "statusBar.border": "#444c56", "statusBar.focusBorder": "#316dca80", "statusBar.noFolderBackground": "#22272e", "statusBar.debuggingForeground": "#cdd9e5", "statusBar.debuggingBackground": "#c93c37", "statusBarItem.prominentBackground": "#636e7b66", "statusBarItem.remoteForeground": "#adbac7", "statusBarItem.remoteBackground": "#444c56", "statusBarItem.hoverBackground": "#adbac714", "statusBarItem.activeBackground": "#adbac71f", "statusBarItem.focusBorder": "#316dca", "editorGroupHeader.tabsBackground": "#1c2128", "editorGroupHeader.tabsBorder": "#444c56", "editorGroup.border": "#444c56", "tab.activeForeground": "#adbac7", "tab.inactiveForeground": "#768390", "tab.inactiveBackground": "#1c2128", "tab.activeBackground": "#22272e", "tab.hoverBackground": "#22272e", "tab.unfocusedHoverBackground": "#636e7b1a", "tab.border": "#444c56", "tab.unfocusedActiveBorderTop": "#444c56", "tab.activeBorder": "#22272e", "tab.unfocusedActiveBorder": "#22272e", "tab.activeBorderTop": "#ec775c", "breadcrumb.foreground": "#768390", "breadcrumb.focusForeground": "#adbac7", "breadcrumb.activeSelectionForeground": "#768390", "breadcrumbPicker.background": "#2d333b", "editor.foreground": "#adbac7", "editor.background": "#22272e", "editorWidget.background": "#2d333b", "editor.foldBackground": "#636e7b1a", "editor.lineHighlightBackground": "#636e7b1a", "editorLineNumber.foreground": "#636e7b", "editorLineNumber.activeForeground": "#adbac7", "editorIndentGuide.background": "#adbac71f", "editorIndentGuide.activeBackground": "#adbac73d", "editorWhitespace.foreground": "#545d68", "editorCursor.foreground": "#539bf5", "editor.findMatchBackground": "#966600", "editor.findMatchHighlightBackground": "#eac55f80", "editor.linkedEditingBackground": "#539bf512", "editor.selectionHighlightBackground": "#57ab5a40", "editor.wordHighlightBackground": "#636e7b80", "editor.wordHighlightBorder": "#636e7b99", "editor.wordHighlightStrongBackground": "#636e7b4d", "editor.wordHighlightStrongBorder": "#636e7b99", "editorBracketMatch.background": "#57ab5a40", "editorBracketMatch.border": "#57ab5a99", "editorInlayHint.background": "#76839033", "editorInlayHint.foreground": "#768390", "editorInlayHint.typeBackground": "#76839033", "editorInlayHint.typeForeground": "#768390", "editorInlayHint.paramBackground": "#76839033", "editorInlayHint.paramForeground": "#768390", "editorGutter.modifiedBackground": "#ae7c1466", "editorGutter.addedBackground": "#46954a66", "editorGutter.deletedBackground": "#e5534b66", "diffEditor.insertedLineBackground": "#347d3933", "diffEditor.insertedTextBackground": "#347d394d", "diffEditor.removedLineBackground": "#c93c3733", "diffEditor.removedTextBackground": "#c93c374d", "scrollbar.shadow": "#545d6833", "scrollbarSlider.background": "#636e7b33", "scrollbarSlider.hoverBackground": "#636e7b45", "scrollbarSlider.activeBackground": "#636e7b87", "editorOverviewRuler.border": "#1c2128", "panel.background": "#1c2128", "panel.border": "#444c56", "panelTitle.activeBorder": "#ec775c", "panelTitle.activeForeground": "#adbac7", "panelTitle.inactiveForeground": "#768390", "panelInput.border": "#444c56", "debugIcon.breakpointForeground": "#e5534b", "debugConsole.infoForeground": "#768390", "debugConsole.warningForeground": "#c69026", "debugConsole.errorForeground": "#ff938a", "debugConsole.sourceForeground": "#daaa3f", "debugConsoleInputIcon.foreground": "#b083f0", "debugTokenExpression.name": "#6cb6ff", "debugTokenExpression.value": "#96d0ff", "debugTokenExpression.string": "#96d0ff", "debugTokenExpression.boolean": "#6bc46d", "debugTokenExpression.number": "#6bc46d", "debugTokenExpression.error": "#ff938a", "symbolIcon.arrayForeground": "#e0823d", "symbolIcon.booleanForeground": "#539bf5", "symbolIcon.classForeground": "#e0823d", "symbolIcon.colorForeground": "#6cb6ff", "symbolIcon.constructorForeground": "#dcbdfb", "symbolIcon.enumeratorForeground": "#e0823d", "symbolIcon.enumeratorMemberForeground": "#539bf5", "symbolIcon.eventForeground": "#636e7b", "symbolIcon.fieldForeground": "#e0823d", "symbolIcon.fileForeground": "#c69026", "symbolIcon.folderForeground": "#c69026", "symbolIcon.functionForeground": "#b083f0", "symbolIcon.interfaceForeground": "#e0823d", "symbolIcon.keyForeground": "#539bf5", "symbolIcon.keywordForeground": "#f47067", "symbolIcon.methodForeground": "#b083f0", "symbolIcon.moduleForeground": "#f47067", "symbolIcon.namespaceForeground": "#f47067", "symbolIcon.nullForeground": "#539bf5", "symbolIcon.numberForeground": "#57ab5a", "symbolIcon.objectForeground": "#e0823d", "symbolIcon.operatorForeground": "#6cb6ff", "symbolIcon.packageForeground": "#e0823d", "symbolIcon.propertyForeground": "#e0823d", "symbolIcon.referenceForeground": "#539bf5", "symbolIcon.snippetForeground": "#539bf5", "symbolIcon.stringForeground": "#6cb6ff", "symbolIcon.structForeground": "#e0823d", "symbolIcon.textForeground": "#6cb6ff", "symbolIcon.typeParameterForeground": "#6cb6ff", "symbolIcon.unitForeground": "#539bf5", "symbolIcon.variableForeground": "#e0823d", "symbolIcon.constantForeground": [ "#b4f1b4", "#8ddb8c", "#6bc46d", "#57ab5a", "#46954a", "#347d39", "#2b6a30", "#245829", "#1b4721", "#113417" ], "terminal.foreground": "#adbac7", "terminal.ansiBlack": "#545d68", "terminal.ansiRed": "#f47067", "terminal.ansiGreen": "#57ab5a", "terminal.ansiYellow": "#c69026", "terminal.ansiBlue": "#539bf5", "terminal.ansiMagenta": "#b083f0", "terminal.ansiCyan": "#39c5cf", "terminal.ansiWhite": "#909dab", "terminal.ansiBrightBlack": "#636e7b", "terminal.ansiBrightRed": "#ff938a", "terminal.ansiBrightGreen": "#6bc46d", "terminal.ansiBrightYellow": "#daaa3f", "terminal.ansiBrightBlue": "#6cb6ff", "terminal.ansiBrightMagenta": "#dcbdfb", "terminal.ansiBrightCyan": "#56d4dd", "terminal.ansiBrightWhite": "#cdd9e5", "editorBracketHighlight.foreground1": "#6cb6ff", "editorBracketHighlight.foreground2": "#6bc46d", "editorBracketHighlight.foreground3": "#daaa3f", "editorBracketHighlight.foreground4": "#ff938a", "editorBracketHighlight.foreground5": "#fc8dc7", "editorBracketHighlight.foreground6": "#dcbdfb", "editorBracketHighlight.unexpectedBracket.foreground": "#768390", "gitDecoration.addedResourceForeground": "#57ab5a", "gitDecoration.modifiedResourceForeground": "#c69026", "gitDecoration.deletedResourceForeground": "#e5534b", "gitDecoration.untrackedResourceForeground": "#57ab5a", "gitDecoration.ignoredResourceForeground": "#545d68", "gitDecoration.conflictingResourceForeground": "#cc6b2c", "gitDecoration.submoduleResourceForeground": "#768390", "debugToolBar.background": "#2d333b", "editor.stackFrameHighlightBackground": "#ae7c1466", "editor.focusedStackFrameHighlightBackground": "#46954a66", "peekViewEditor.matchHighlightBackground": "#ae7c1466", "peekViewResult.matchHighlightBackground": "#ae7c1466", "peekViewEditor.background": "#636e7b1a", "peekViewResult.background": "#22272e", "settings.headerForeground": "#768390", "settings.modifiedItemIndicator": "#ae7c1466", "welcomePage.buttonBackground": "#373e47", "welcomePage.buttonHoverBackground": "#444c56" }, "semanticHighlighting": true, "tokenColors": [ { "scope": ["comment", "punctuation.definition.comment", "string.comment"], "settings": { "foreground": "#768390" } }, { "scope": [ "constant", "entity.name.constant", "variable.other.constant", "variable.other.enummember", "variable.language", "entity" ], "settings": { "foreground": "#6cb6ff" } }, { "scope": [ "entity.name", "meta.export.default", "meta.definition.variable" ], "settings": { "foreground": "#f69d50" } }, { "scope": [ "variable.parameter.function", "meta.jsx.children", "meta.block", "meta.tag.attributes", "entity.name.constant", "meta.object.member", "meta.embedded.expression" ], "settings": { "foreground": "#adbac7" } }, { "scope": "entity.name.function", "settings": { "foreground": "#dcbdfb" } }, { "scope": ["entity.name.tag", "support.class.component"], "settings": { "foreground": "#8ddb8c" } }, { "scope": "keyword", "settings": { "foreground": "#f47067" } }, { "scope": ["storage", "storage.type"], "settings": { "foreground": "#f47067" } }, { "scope": [ "storage.modifier.package", "storage.modifier.import", "storage.type.java" ], "settings": { "foreground": "#adbac7" } }, { "scope": ["string", "string punctuation.section.embedded source"], "settings": { "foreground": "#96d0ff" } }, { "scope": "support", "settings": { "foreground": "#6cb6ff" } }, { "scope": "meta.property-name", "settings": { "foreground": "#6cb6ff" } }, { "scope": "variable", "settings": { "foreground": "#f69d50" } }, { "scope": "variable.other", "settings": { "foreground": "#adbac7" } }, { "scope": "invalid.broken", "settings": { "fontStyle": "italic", "foreground": "#ff938a" } }, { "scope": "invalid.deprecated", "settings": { "fontStyle": "italic", "foreground": "#ff938a" } }, { "scope": "invalid.illegal", "settings": { "fontStyle": "italic", "foreground": "#ff938a" } }, { "scope": "invalid.unimplemented", "settings": { "fontStyle": "italic", "foreground": "#ff938a" } }, { "scope": "carriage-return", "settings": { "fontStyle": "italic underline", "background": "#f47067", "foreground": "#cdd9e5", "content": "^M" } }, { "scope": "message.error", "settings": { "foreground": "#ff938a" } }, { "scope": "string variable", "settings": { "foreground": "#6cb6ff" } }, { "scope": ["source.regexp", "string.regexp"], "settings": { "foreground": "#96d0ff" } }, { "scope": [ "string.regexp.character-class", "string.regexp constant.character.escape", "string.regexp source.ruby.embedded", "string.regexp string.regexp.arbitrary-repitition" ], "settings": { "foreground": "#96d0ff" } }, { "scope": "string.regexp constant.character.escape", "settings": { "fontStyle": "bold", "foreground": "#8ddb8c" } }, { "scope": "support.constant", "settings": { "foreground": "#6cb6ff" } }, { "scope": "support.variable", "settings": { "foreground": "#6cb6ff" } }, { "scope": "support.type.property-name.json", "settings": { "foreground": "#8ddb8c" } }, { "scope": "meta.module-reference", "settings": { "foreground": "#6cb6ff" } }, { "scope": "punctuation.definition.list.begin.markdown", "settings": { "foreground": "#f69d50" } }, { "scope": ["markup.heading", "markup.heading entity.name"], "settings": { "fontStyle": "bold", "foreground": "#6cb6ff" } }, { "scope": "markup.quote", "settings": { "foreground": "#8ddb8c" } }, { "scope": "markup.italic", "settings": { "fontStyle": "italic", "foreground": "#adbac7" } }, { "scope": "markup.bold", "settings": { "fontStyle": "bold", "foreground": "#adbac7" } }, { "scope": ["markup.underline"], "settings": { "fontStyle": "underline" } }, { "scope": ["markup.strikethrough"], "settings": { "fontStyle": "strikethrough" } }, { "scope": "markup.inline.raw", "settings": { "foreground": "#6cb6ff" } }, { "scope": [ "markup.deleted", "meta.diff.header.from-file", "punctuation.definition.deleted" ], "settings": { "background": "#5d0f12", "foreground": "#ff938a" } }, { "scope": ["punctuation.section.embedded"], "settings": { "foreground": "#f47067" } }, { "scope": [ "markup.inserted", "meta.diff.header.to-file", "punctuation.definition.inserted" ], "settings": { "background": "#113417", "foreground": "#8ddb8c" } }, { "scope": ["markup.changed", "punctuation.definition.changed"], "settings": { "background": "#682d0f", "foreground": "#f69d50" } }, { "scope": ["markup.ignored", "markup.untracked"], "settings": { "foreground": "#2d333b", "background": "#6cb6ff" } }, { "scope": "meta.diff.range", "settings": { "foreground": "#dcbdfb", "fontStyle": "bold" } }, { "scope": "meta.diff.header", "settings": { "foreground": "#6cb6ff" } }, { "scope": "meta.separator", "settings": { "fontStyle": "bold", "foreground": "#6cb6ff" } }, { "scope": "meta.output", "settings": { "foreground": "#6cb6ff" } }, { "scope": [ "brackethighlighter.tag", "brackethighlighter.curly", "brackethighlighter.round", "brackethighlighter.square", "brackethighlighter.angle", "brackethighlighter.quote" ], "settings": { "foreground": "#768390" } }, { "scope": "brackethighlighter.unmatched", "settings": { "foreground": "#ff938a" } }, { "scope": ["constant.other.reference.link", "string.other.link"], "settings": { "foreground": "#96d0ff", "fontStyle": "underline" } } ] } ================================================ FILE: apps/web/src/lib/shiki/themes/github-dark.json ================================================ { "name": "github-dark", "colors": { "focusBorder": "#1f6feb", "foreground": "#c9d1d9", "descriptionForeground": "#8b949e", "errorForeground": "#f85149", "textLink.foreground": "#58a6ff", "textLink.activeForeground": "#58a6ff", "textBlockQuote.background": "#010409", "textBlockQuote.border": "#30363d", "textCodeBlock.background": "#6e768166", "textPreformat.foreground": "#8b949e", "textSeparator.foreground": "#21262d", "icon.foreground": "#8b949e", "keybindingLabel.foreground": "#c9d1d9", "button.background": "#238636", "button.foreground": "#ffffff", "button.hoverBackground": "#2ea043", "button.secondaryBackground": "#282e33", "button.secondaryForeground": "#c9d1d9", "button.secondaryHoverBackground": "#30363d", "checkbox.background": "#161b22", "checkbox.border": "#30363d", "dropdown.background": "#161b22", "dropdown.border": "#30363d", "dropdown.foreground": "#c9d1d9", "dropdown.listBackground": "#161b22", "input.background": "#0d1117", "input.border": "#30363d", "input.foreground": "#c9d1d9", "input.placeholderForeground": "#484f58", "badge.foreground": "#f0f6fc", "badge.background": "#1f6feb", "progressBar.background": "#1f6feb", "titleBar.activeForeground": "#8b949e", "titleBar.activeBackground": "#0d1117", "titleBar.inactiveForeground": "#8b949e", "titleBar.inactiveBackground": "#010409", "titleBar.border": "#30363d", "activityBar.foreground": "#c9d1d9", "activityBar.inactiveForeground": "#8b949e", "activityBar.background": "#0d1117", "activityBarBadge.foreground": "#f0f6fc", "activityBarBadge.background": "#1f6feb", "activityBar.activeBorder": "#f78166", "activityBar.border": "#30363d", "sideBar.foreground": "#c9d1d9", "sideBar.background": "#010409", "sideBar.border": "#30363d", "sideBarTitle.foreground": "#c9d1d9", "sideBarSectionHeader.foreground": "#c9d1d9", "sideBarSectionHeader.background": "#010409", "sideBarSectionHeader.border": "#30363d", "list.hoverForeground": "#c9d1d9", "list.inactiveSelectionForeground": "#c9d1d9", "list.activeSelectionForeground": "#c9d1d9", "list.hoverBackground": "#6e76811a", "list.inactiveSelectionBackground": "#6e768166", "list.activeSelectionBackground": "#6e768166", "list.focusForeground": "#c9d1d9", "list.focusBackground": "#388bfd26", "list.inactiveFocusBackground": "#388bfd26", "list.highlightForeground": "#58a6ff", "tree.indentGuidesStroke": "#21262d", "notificationCenterHeader.foreground": "#8b949e", "notificationCenterHeader.background": "#161b22", "notifications.foreground": "#c9d1d9", "notifications.background": "#161b22", "notifications.border": "#30363d", "notificationsErrorIcon.foreground": "#f85149", "notificationsWarningIcon.foreground": "#d29922", "notificationsInfoIcon.foreground": "#58a6ff", "pickerGroup.border": "#30363d", "pickerGroup.foreground": "#8b949e", "quickInput.background": "#161b22", "quickInput.foreground": "#c9d1d9", "statusBar.foreground": "#8b949e", "statusBar.background": "#0d1117", "statusBar.border": "#30363d", "statusBar.focusBorder": "#1f6feb80", "statusBar.noFolderBackground": "#0d1117", "statusBar.debuggingForeground": "#f0f6fc", "statusBar.debuggingBackground": "#da3633", "statusBarItem.prominentBackground": "#6e768166", "statusBarItem.remoteForeground": "#c9d1d9", "statusBarItem.remoteBackground": "#30363d", "statusBarItem.hoverBackground": "#c9d1d914", "statusBarItem.activeBackground": "#c9d1d91f", "statusBarItem.focusBorder": "#1f6feb", "editorGroupHeader.tabsBackground": "#010409", "editorGroupHeader.tabsBorder": "#30363d", "editorGroup.border": "#30363d", "tab.activeForeground": "#c9d1d9", "tab.inactiveForeground": "#8b949e", "tab.inactiveBackground": "#010409", "tab.activeBackground": "#0d1117", "tab.hoverBackground": "#0d1117", "tab.unfocusedHoverBackground": "#6e76811a", "tab.border": "#30363d", "tab.unfocusedActiveBorderTop": "#30363d", "tab.activeBorder": "#0d1117", "tab.unfocusedActiveBorder": "#0d1117", "tab.activeBorderTop": "#f78166", "breadcrumb.foreground": "#8b949e", "breadcrumb.focusForeground": "#c9d1d9", "breadcrumb.activeSelectionForeground": "#8b949e", "breadcrumbPicker.background": "#161b22", "editor.foreground": "#c9d1d9", "editor.background": "#0d1117", "editorWidget.background": "#161b22", "editor.foldBackground": "#6e76811a", "editor.lineHighlightBackground": "#6e76811a", "editorLineNumber.foreground": "#6e7681", "editorLineNumber.activeForeground": "#c9d1d9", "editorIndentGuide.background": "#c9d1d91f", "editorIndentGuide.activeBackground": "#c9d1d93d", "editorWhitespace.foreground": "#484f58", "editorCursor.foreground": "#58a6ff", "editor.findMatchBackground": "#9e6a03", "editor.findMatchHighlightBackground": "#f2cc6080", "editor.linkedEditingBackground": "#58a6ff12", "editor.selectionHighlightBackground": "#3fb95040", "editor.wordHighlightBackground": "#6e768180", "editor.wordHighlightBorder": "#6e768199", "editor.wordHighlightStrongBackground": "#6e76814d", "editor.wordHighlightStrongBorder": "#6e768199", "editorBracketMatch.background": "#3fb95040", "editorBracketMatch.border": "#3fb95099", "editorInlayHint.background": "#8b949e33", "editorInlayHint.foreground": "#8b949e", "editorInlayHint.typeBackground": "#8b949e33", "editorInlayHint.typeForeground": "#8b949e", "editorInlayHint.paramBackground": "#8b949e33", "editorInlayHint.paramForeground": "#8b949e", "editorGutter.modifiedBackground": "#bb800966", "editorGutter.addedBackground": "#2ea04366", "editorGutter.deletedBackground": "#f8514966", "diffEditor.insertedLineBackground": "#23863633", "diffEditor.insertedTextBackground": "#2386364d", "diffEditor.removedLineBackground": "#da363333", "diffEditor.removedTextBackground": "#da36334d", "scrollbar.shadow": "#484f5833", "scrollbarSlider.background": "#6e768133", "scrollbarSlider.hoverBackground": "#6e768145", "scrollbarSlider.activeBackground": "#6e768187", "editorOverviewRuler.border": "#010409", "panel.background": "#010409", "panel.border": "#30363d", "panelTitle.activeBorder": "#f78166", "panelTitle.activeForeground": "#c9d1d9", "panelTitle.inactiveForeground": "#8b949e", "panelInput.border": "#30363d", "debugIcon.breakpointForeground": "#f85149", "debugConsole.infoForeground": "#8b949e", "debugConsole.warningForeground": "#d29922", "debugConsole.errorForeground": "#ffa198", "debugConsole.sourceForeground": "#e3b341", "debugConsoleInputIcon.foreground": "#bc8cff", "debugTokenExpression.name": "#79c0ff", "debugTokenExpression.value": "#a5d6ff", "debugTokenExpression.string": "#a5d6ff", "debugTokenExpression.boolean": "#56d364", "debugTokenExpression.number": "#56d364", "debugTokenExpression.error": "#ffa198", "symbolIcon.arrayForeground": "#f0883e", "symbolIcon.booleanForeground": "#58a6ff", "symbolIcon.classForeground": "#f0883e", "symbolIcon.colorForeground": "#79c0ff", "symbolIcon.constructorForeground": "#d2a8ff", "symbolIcon.enumeratorForeground": "#f0883e", "symbolIcon.enumeratorMemberForeground": "#58a6ff", "symbolIcon.eventForeground": "#6e7681", "symbolIcon.fieldForeground": "#f0883e", "symbolIcon.fileForeground": "#d29922", "symbolIcon.folderForeground": "#d29922", "symbolIcon.functionForeground": "#bc8cff", "symbolIcon.interfaceForeground": "#f0883e", "symbolIcon.keyForeground": "#58a6ff", "symbolIcon.keywordForeground": "#ff7b72", "symbolIcon.methodForeground": "#bc8cff", "symbolIcon.moduleForeground": "#ff7b72", "symbolIcon.namespaceForeground": "#ff7b72", "symbolIcon.nullForeground": "#58a6ff", "symbolIcon.numberForeground": "#3fb950", "symbolIcon.objectForeground": "#f0883e", "symbolIcon.operatorForeground": "#79c0ff", "symbolIcon.packageForeground": "#f0883e", "symbolIcon.propertyForeground": "#f0883e", "symbolIcon.referenceForeground": "#58a6ff", "symbolIcon.snippetForeground": "#58a6ff", "symbolIcon.stringForeground": "#79c0ff", "symbolIcon.structForeground": "#f0883e", "symbolIcon.textForeground": "#79c0ff", "symbolIcon.typeParameterForeground": "#79c0ff", "symbolIcon.unitForeground": "#58a6ff", "symbolIcon.variableForeground": "#f0883e", "symbolIcon.constantForeground": [ "#aff5b4", "#7ee787", "#56d364", "#3fb950", "#2ea043", "#238636", "#196c2e", "#0f5323", "#033a16", "#04260f" ], "terminal.foreground": "#c9d1d9", "terminal.ansiBlack": "#484f58", "terminal.ansiRed": "#ff7b72", "terminal.ansiGreen": "#3fb950", "terminal.ansiYellow": "#d29922", "terminal.ansiBlue": "#58a6ff", "terminal.ansiMagenta": "#bc8cff", "terminal.ansiCyan": "#39c5cf", "terminal.ansiWhite": "#b1bac4", "terminal.ansiBrightBlack": "#6e7681", "terminal.ansiBrightRed": "#ffa198", "terminal.ansiBrightGreen": "#56d364", "terminal.ansiBrightYellow": "#e3b341", "terminal.ansiBrightBlue": "#79c0ff", "terminal.ansiBrightMagenta": "#d2a8ff", "terminal.ansiBrightCyan": "#56d4dd", "terminal.ansiBrightWhite": "#f0f6fc", "editorBracketHighlight.foreground1": "#79c0ff", "editorBracketHighlight.foreground2": "#56d364", "editorBracketHighlight.foreground3": "#e3b341", "editorBracketHighlight.foreground4": "#ffa198", "editorBracketHighlight.foreground5": "#ff9bce", "editorBracketHighlight.foreground6": "#d2a8ff", "editorBracketHighlight.unexpectedBracket.foreground": "#8b949e", "gitDecoration.addedResourceForeground": "#3fb950", "gitDecoration.modifiedResourceForeground": "#d29922", "gitDecoration.deletedResourceForeground": "#f85149", "gitDecoration.untrackedResourceForeground": "#3fb950", "gitDecoration.ignoredResourceForeground": "#484f58", "gitDecoration.conflictingResourceForeground": "#db6d28", "gitDecoration.submoduleResourceForeground": "#8b949e", "debugToolBar.background": "#161b22", "editor.stackFrameHighlightBackground": "#bb800966", "editor.focusedStackFrameHighlightBackground": "#2ea04366", "peekViewEditor.matchHighlightBackground": "#bb800966", "peekViewResult.matchHighlightBackground": "#bb800966", "peekViewEditor.background": "#6e76811a", "peekViewResult.background": "#0d1117", "settings.headerForeground": "#8b949e", "settings.modifiedItemIndicator": "#bb800966", "welcomePage.buttonBackground": "#21262d", "welcomePage.buttonHoverBackground": "#30363d" }, "semanticHighlighting": true, "tokenColors": [ { "scope": ["comment", "punctuation.definition.comment", "string.comment"], "settings": { "foreground": "#8b949e" } }, { "scope": [ "constant", "entity.name.constant", "variable.other.constant", "variable.other.enummember", "variable.language", "entity" ], "settings": { "foreground": "#79c0ff" } }, { "scope": [ "entity.name", "meta.export.default", "meta.definition.variable" ], "settings": { "foreground": "#ffa657" } }, { "scope": [ "variable.parameter.function", "meta.jsx.children", "meta.block", "meta.tag.attributes", "entity.name.constant", "meta.object.member", "meta.embedded.expression" ], "settings": { "foreground": "#c9d1d9" } }, { "scope": "entity.name.function", "settings": { "foreground": "#d2a8ff" } }, { "scope": ["entity.name.tag", "support.class.component"], "settings": { "foreground": "#7ee787" } }, { "scope": "keyword", "settings": { "foreground": "#ff7b72" } }, { "scope": ["storage", "storage.type"], "settings": { "foreground": "#ff7b72" } }, { "scope": [ "storage.modifier.package", "storage.modifier.import", "storage.type.java" ], "settings": { "foreground": "#c9d1d9" } }, { "scope": ["string", "string punctuation.section.embedded source"], "settings": { "foreground": "#a5d6ff" } }, { "scope": "support", "settings": { "foreground": "#79c0ff" } }, { "scope": "meta.property-name", "settings": { "foreground": "#79c0ff" } }, { "scope": "variable", "settings": { "foreground": "#ffa657" } }, { "scope": "variable.other", "settings": { "foreground": "#c9d1d9" } }, { "scope": "invalid.broken", "settings": { "fontStyle": "italic", "foreground": "#ffa198" } }, { "scope": "invalid.deprecated", "settings": { "fontStyle": "italic", "foreground": "#ffa198" } }, { "scope": "invalid.illegal", "settings": { "fontStyle": "italic", "foreground": "#ffa198" } }, { "scope": "invalid.unimplemented", "settings": { "fontStyle": "italic", "foreground": "#ffa198" } }, { "scope": "carriage-return", "settings": { "fontStyle": "italic underline", "background": "#ff7b72", "foreground": "#f0f6fc", "content": "^M" } }, { "scope": "message.error", "settings": { "foreground": "#ffa198" } }, { "scope": "string variable", "settings": { "foreground": "#79c0ff" } }, { "scope": ["source.regexp", "string.regexp"], "settings": { "foreground": "#a5d6ff" } }, { "scope": [ "string.regexp.character-class", "string.regexp constant.character.escape", "string.regexp source.ruby.embedded", "string.regexp string.regexp.arbitrary-repitition" ], "settings": { "foreground": "#a5d6ff" } }, { "scope": "string.regexp constant.character.escape", "settings": { "fontStyle": "bold", "foreground": "#7ee787" } }, { "scope": "support.constant", "settings": { "foreground": "#79c0ff" } }, { "scope": "support.variable", "settings": { "foreground": "#79c0ff" } }, { "scope": "support.type.property-name.json", "settings": { "foreground": "#7ee787" } }, { "scope": "meta.module-reference", "settings": { "foreground": "#79c0ff" } }, { "scope": "punctuation.definition.list.begin.markdown", "settings": { "foreground": "#ffa657" } }, { "scope": ["markup.heading", "markup.heading entity.name"], "settings": { "fontStyle": "bold", "foreground": "#79c0ff" } }, { "scope": "markup.quote", "settings": { "foreground": "#7ee787" } }, { "scope": "markup.italic", "settings": { "fontStyle": "italic", "foreground": "#c9d1d9" } }, { "scope": "markup.bold", "settings": { "fontStyle": "bold", "foreground": "#c9d1d9" } }, { "scope": ["markup.underline"], "settings": { "fontStyle": "underline" } }, { "scope": ["markup.strikethrough"], "settings": { "fontStyle": "strikethrough" } }, { "scope": "markup.inline.raw", "settings": { "foreground": "#79c0ff" } }, { "scope": [ "markup.deleted", "meta.diff.header.from-file", "punctuation.definition.deleted" ], "settings": { "background": "#490202", "foreground": "#ffa198" } }, { "scope": ["punctuation.section.embedded"], "settings": { "foreground": "#ff7b72" } }, { "scope": [ "markup.inserted", "meta.diff.header.to-file", "punctuation.definition.inserted" ], "settings": { "background": "#04260f", "foreground": "#7ee787" } }, { "scope": ["markup.changed", "punctuation.definition.changed"], "settings": { "background": "#5a1e02", "foreground": "#ffa657" } }, { "scope": ["markup.ignored", "markup.untracked"], "settings": { "foreground": "#161b22", "background": "#79c0ff" } }, { "scope": "meta.diff.range", "settings": { "foreground": "#d2a8ff", "fontStyle": "bold" } }, { "scope": "meta.diff.header", "settings": { "foreground": "#79c0ff" } }, { "scope": "meta.separator", "settings": { "fontStyle": "bold", "foreground": "#79c0ff" } }, { "scope": "meta.output", "settings": { "foreground": "#79c0ff" } }, { "scope": [ "brackethighlighter.tag", "brackethighlighter.curly", "brackethighlighter.round", "brackethighlighter.square", "brackethighlighter.angle", "brackethighlighter.quote" ], "settings": { "foreground": "#8b949e" } }, { "scope": "brackethighlighter.unmatched", "settings": { "foreground": "#ffa198" } }, { "scope": ["constant.other.reference.link", "string.other.link"], "settings": { "foreground": "#a5d6ff", "fontStyle": "underline" } } ] } ================================================ FILE: apps/web/src/lib/shiki/themes/github-light.json ================================================ { "name": "github-light", "colors": { "focusBorder": "#0969da", "foreground": "#24292f", "descriptionForeground": "#57606a", "errorForeground": "#cf222e", "textLink.foreground": "#0969da", "textLink.activeForeground": "#0969da", "textBlockQuote.background": "#f6f8fa", "textBlockQuote.border": "#d0d7de", "textCodeBlock.background": "#afb8c133", "textPreformat.foreground": "#57606a", "textSeparator.foreground": "#d8dee4", "icon.foreground": "#57606a", "keybindingLabel.foreground": "#24292f", "button.background": "#2da44e", "button.foreground": "#ffffff", "button.hoverBackground": "#2c974b", "button.secondaryBackground": "#ebecf0", "button.secondaryForeground": "#24292f", "button.secondaryHoverBackground": "#f3f4f6", "checkbox.background": "#f6f8fa", "checkbox.border": "#d0d7de", "dropdown.background": "#ffffff", "dropdown.border": "#d0d7de", "dropdown.foreground": "#24292f", "dropdown.listBackground": "#ffffff", "input.background": "#ffffff", "input.border": "#d0d7de", "input.foreground": "#24292f", "input.placeholderForeground": "#6e7781", "badge.foreground": "#ffffff", "badge.background": "#0969da", "progressBar.background": "#0969da", "titleBar.activeForeground": "#57606a", "titleBar.activeBackground": "#ffffff", "titleBar.inactiveForeground": "#57606a", "titleBar.inactiveBackground": "#f6f8fa", "titleBar.border": "#d0d7de", "activityBar.foreground": "#24292f", "activityBar.inactiveForeground": "#57606a", "activityBar.background": "#ffffff", "activityBarBadge.foreground": "#ffffff", "activityBarBadge.background": "#0969da", "activityBar.activeBorder": "#fd8c73", "activityBar.border": "#d0d7de", "sideBar.foreground": "#24292f", "sideBar.background": "#f6f8fa", "sideBar.border": "#d0d7de", "sideBarTitle.foreground": "#24292f", "sideBarSectionHeader.foreground": "#24292f", "sideBarSectionHeader.background": "#f6f8fa", "sideBarSectionHeader.border": "#d0d7de", "list.hoverForeground": "#24292f", "list.inactiveSelectionForeground": "#24292f", "list.activeSelectionForeground": "#24292f", "list.hoverBackground": "#eaeef280", "list.inactiveSelectionBackground": "#afb8c133", "list.activeSelectionBackground": "#afb8c133", "list.focusForeground": "#24292f", "list.focusBackground": "#ddf4ff", "list.inactiveFocusBackground": "#ddf4ff", "list.highlightForeground": "#0969da", "tree.indentGuidesStroke": "#d8dee4", "notificationCenterHeader.foreground": "#57606a", "notificationCenterHeader.background": "#f6f8fa", "notifications.foreground": "#24292f", "notifications.background": "#ffffff", "notifications.border": "#d0d7de", "notificationsErrorIcon.foreground": "#cf222e", "notificationsWarningIcon.foreground": "#9a6700", "notificationsInfoIcon.foreground": "#0969da", "pickerGroup.border": "#d0d7de", "pickerGroup.foreground": "#57606a", "quickInput.background": "#ffffff", "quickInput.foreground": "#24292f", "statusBar.foreground": "#57606a", "statusBar.background": "#ffffff", "statusBar.border": "#d0d7de", "statusBar.focusBorder": "#0969da80", "statusBar.noFolderBackground": "#ffffff", "statusBar.debuggingForeground": "#ffffff", "statusBar.debuggingBackground": "#cf222e", "statusBarItem.prominentBackground": "#afb8c133", "statusBarItem.remoteForeground": "#24292f", "statusBarItem.remoteBackground": "#eaeef2", "statusBarItem.hoverBackground": "#24292f14", "statusBarItem.activeBackground": "#24292f1f", "statusBarItem.focusBorder": "#0969da", "editorGroupHeader.tabsBackground": "#f6f8fa", "editorGroupHeader.tabsBorder": "#d0d7de", "editorGroup.border": "#d0d7de", "tab.activeForeground": "#24292f", "tab.inactiveForeground": "#57606a", "tab.inactiveBackground": "#f6f8fa", "tab.activeBackground": "#ffffff", "tab.hoverBackground": "#ffffff", "tab.unfocusedHoverBackground": "#eaeef280", "tab.border": "#d0d7de", "tab.unfocusedActiveBorderTop": "#d0d7de", "tab.activeBorder": "#ffffff", "tab.unfocusedActiveBorder": "#ffffff", "tab.activeBorderTop": "#fd8c73", "breadcrumb.foreground": "#57606a", "breadcrumb.focusForeground": "#24292f", "breadcrumb.activeSelectionForeground": "#57606a", "breadcrumbPicker.background": "#ffffff", "editor.foreground": "#24292f", "editor.background": "#ffffff", "editorWidget.background": "#ffffff", "editor.foldBackground": "#6e77811a", "editor.lineHighlightBackground": "#eaeef280", "editorLineNumber.foreground": "#8c959f", "editorLineNumber.activeForeground": "#24292f", "editorIndentGuide.background": "#24292f1f", "editorIndentGuide.activeBackground": "#24292f3d", "editorWhitespace.foreground": "#afb8c1", "editorCursor.foreground": "#0969da", "editor.findMatchBackground": "#bf8700", "editor.findMatchHighlightBackground": "#fae17d80", "editor.linkedEditingBackground": "#0969da12", "editor.selectionHighlightBackground": "#4ac26b40", "editor.wordHighlightBackground": "#eaeef280", "editor.wordHighlightBorder": "#afb8c199", "editor.wordHighlightStrongBackground": "#afb8c14d", "editor.wordHighlightStrongBorder": "#afb8c199", "editorBracketMatch.background": "#4ac26b40", "editorBracketMatch.border": "#4ac26b99", "editorInlayHint.background": "#afb8c133", "editorInlayHint.foreground": "#57606a", "editorInlayHint.typeBackground": "#afb8c133", "editorInlayHint.typeForeground": "#57606a", "editorInlayHint.paramBackground": "#afb8c133", "editorInlayHint.paramForeground": "#57606a", "editorGutter.modifiedBackground": "#d4a72c66", "editorGutter.addedBackground": "#4ac26b66", "editorGutter.deletedBackground": "#ff818266", "diffEditor.insertedLineBackground": "#aceebb4d", "diffEditor.insertedTextBackground": "#6fdd8b66", "diffEditor.removedLineBackground": "#ffcecb4d", "diffEditor.removedTextBackground": "#ffaba866", "scrollbar.shadow": "#6e778133", "scrollbarSlider.background": "#8c959f33", "scrollbarSlider.hoverBackground": "#8c959f45", "scrollbarSlider.activeBackground": "#8c959f87", "editorOverviewRuler.border": "#ffffff", "panel.background": "#f6f8fa", "panel.border": "#d0d7de", "panelTitle.activeBorder": "#fd8c73", "panelTitle.activeForeground": "#24292f", "panelTitle.inactiveForeground": "#57606a", "panelInput.border": "#d0d7de", "debugIcon.breakpointForeground": "#cf222e", "debugConsole.infoForeground": "#57606a", "debugConsole.warningForeground": "#7d4e00", "debugConsole.errorForeground": "#cf222e", "debugConsole.sourceForeground": "#9a6700", "debugConsoleInputIcon.foreground": "#6639ba", "debugTokenExpression.name": "#0550ae", "debugTokenExpression.value": "#0a3069", "debugTokenExpression.string": "#0a3069", "debugTokenExpression.boolean": "#116329", "debugTokenExpression.number": "#116329", "debugTokenExpression.error": "#a40e26", "symbolIcon.arrayForeground": "#953800", "symbolIcon.booleanForeground": "#0550ae", "symbolIcon.classForeground": "#953800", "symbolIcon.colorForeground": "#0a3069", "symbolIcon.constructorForeground": "#3e1f79", "symbolIcon.enumeratorForeground": "#953800", "symbolIcon.enumeratorMemberForeground": "#0550ae", "symbolIcon.eventForeground": "#57606a", "symbolIcon.fieldForeground": "#953800", "symbolIcon.fileForeground": "#7d4e00", "symbolIcon.folderForeground": "#7d4e00", "symbolIcon.functionForeground": "#6639ba", "symbolIcon.interfaceForeground": "#953800", "symbolIcon.keyForeground": "#0550ae", "symbolIcon.keywordForeground": "#a40e26", "symbolIcon.methodForeground": "#6639ba", "symbolIcon.moduleForeground": "#a40e26", "symbolIcon.namespaceForeground": "#a40e26", "symbolIcon.nullForeground": "#0550ae", "symbolIcon.numberForeground": "#116329", "symbolIcon.objectForeground": "#953800", "symbolIcon.operatorForeground": "#0a3069", "symbolIcon.packageForeground": "#953800", "symbolIcon.propertyForeground": "#953800", "symbolIcon.referenceForeground": "#0550ae", "symbolIcon.snippetForeground": "#0550ae", "symbolIcon.stringForeground": "#0a3069", "symbolIcon.structForeground": "#953800", "symbolIcon.textForeground": "#0a3069", "symbolIcon.typeParameterForeground": "#0a3069", "symbolIcon.unitForeground": "#0550ae", "symbolIcon.variableForeground": "#953800", "symbolIcon.constantForeground": "#116329", "terminal.foreground": "#24292f", "terminal.ansiBlack": "#24292f", "terminal.ansiRed": "#cf222e", "terminal.ansiGreen": "#116329", "terminal.ansiYellow": "#4d2d00", "terminal.ansiBlue": "#0969da", "terminal.ansiMagenta": "#8250df", "terminal.ansiCyan": "#1b7c83", "terminal.ansiWhite": "#6e7781", "terminal.ansiBrightBlack": "#57606a", "terminal.ansiBrightRed": "#a40e26", "terminal.ansiBrightGreen": "#1a7f37", "terminal.ansiBrightYellow": "#633c01", "terminal.ansiBrightBlue": "#218bff", "terminal.ansiBrightMagenta": "#a475f9", "terminal.ansiBrightCyan": "#3192aa", "terminal.ansiBrightWhite": "#8c959f", "editorBracketHighlight.foreground1": "#0969da", "editorBracketHighlight.foreground2": "#1a7f37", "editorBracketHighlight.foreground3": "#9a6700", "editorBracketHighlight.foreground4": "#cf222e", "editorBracketHighlight.foreground5": "#bf3989", "editorBracketHighlight.foreground6": "#8250df", "editorBracketHighlight.unexpectedBracket.foreground": "#57606a", "gitDecoration.addedResourceForeground": "#1a7f37", "gitDecoration.modifiedResourceForeground": "#9a6700", "gitDecoration.deletedResourceForeground": "#cf222e", "gitDecoration.untrackedResourceForeground": "#1a7f37", "gitDecoration.ignoredResourceForeground": "#6e7781", "gitDecoration.conflictingResourceForeground": "#bc4c00", "gitDecoration.submoduleResourceForeground": "#57606a", "debugToolBar.background": "#ffffff", "editor.stackFrameHighlightBackground": "#d4a72c66", "editor.focusedStackFrameHighlightBackground": "#4ac26b66", "settings.headerForeground": "#57606a", "settings.modifiedItemIndicator": "#d4a72c66", "welcomePage.buttonBackground": "#f6f8fa", "welcomePage.buttonHoverBackground": "#f3f4f6" }, "semanticHighlighting": true, "tokenColors": [ { "scope": ["comment", "punctuation.definition.comment", "string.comment"], "settings": { "foreground": "#6e7781" } }, { "scope": [ "constant", "entity.name.constant", "variable.other.constant", "variable.other.enummember", "variable.language", "entity" ], "settings": { "foreground": "#0550ae" } }, { "scope": [ "entity.name", "meta.export.default", "meta.definition.variable" ], "settings": { "foreground": "#953800" } }, { "scope": [ "variable.parameter.function", "meta.jsx.children", "meta.block", "meta.tag.attributes", "entity.name.constant", "meta.object.member", "meta.embedded.expression" ], "settings": { "foreground": "#24292f" } }, { "scope": "entity.name.function", "settings": { "foreground": "#8250df" } }, { "scope": ["entity.name.tag", "support.class.component"], "settings": { "foreground": "#116329" } }, { "scope": "keyword", "settings": { "foreground": "#cf222e" } }, { "scope": ["storage", "storage.type"], "settings": { "foreground": "#cf222e" } }, { "scope": [ "storage.modifier.package", "storage.modifier.import", "storage.type.java" ], "settings": { "foreground": "#24292f" } }, { "scope": ["string", "string punctuation.section.embedded source"], "settings": { "foreground": "#0a3069" } }, { "scope": "support", "settings": { "foreground": "#0550ae" } }, { "scope": "meta.property-name", "settings": { "foreground": "#0550ae" } }, { "scope": "variable", "settings": { "foreground": "#953800" } }, { "scope": "variable.other", "settings": { "foreground": "#24292f" } }, { "scope": "invalid.broken", "settings": { "fontStyle": "italic", "foreground": "#82071e" } }, { "scope": "invalid.deprecated", "settings": { "fontStyle": "italic", "foreground": "#82071e" } }, { "scope": "invalid.illegal", "settings": { "fontStyle": "italic", "foreground": "#82071e" } }, { "scope": "invalid.unimplemented", "settings": { "fontStyle": "italic", "foreground": "#82071e" } }, { "scope": "carriage-return", "settings": { "fontStyle": "italic underline", "background": "#cf222e", "foreground": "#f6f8fa", "content": "^M" } }, { "scope": "message.error", "settings": { "foreground": "#82071e" } }, { "scope": "string variable", "settings": { "foreground": "#0550ae" } }, { "scope": ["source.regexp", "string.regexp"], "settings": { "foreground": "#0a3069" } }, { "scope": [ "string.regexp.character-class", "string.regexp constant.character.escape", "string.regexp source.ruby.embedded", "string.regexp string.regexp.arbitrary-repitition" ], "settings": { "foreground": "#0a3069" } }, { "scope": "string.regexp constant.character.escape", "settings": { "fontStyle": "bold", "foreground": "#116329" } }, { "scope": "support.constant", "settings": { "foreground": "#0550ae" } }, { "scope": "support.variable", "settings": { "foreground": "#0550ae" } }, { "scope": "support.type.property-name.json", "settings": { "foreground": "#116329" } }, { "scope": "meta.module-reference", "settings": { "foreground": "#0550ae" } }, { "scope": "punctuation.definition.list.begin.markdown", "settings": { "foreground": "#953800" } }, { "scope": ["markup.heading", "markup.heading entity.name"], "settings": { "fontStyle": "bold", "foreground": "#0550ae" } }, { "scope": "markup.quote", "settings": { "foreground": "#116329" } }, { "scope": "markup.italic", "settings": { "fontStyle": "italic", "foreground": "#24292f" } }, { "scope": "markup.bold", "settings": { "fontStyle": "bold", "foreground": "#24292f" } }, { "scope": ["markup.underline"], "settings": { "fontStyle": "underline" } }, { "scope": ["markup.strikethrough"], "settings": { "fontStyle": "strikethrough" } }, { "scope": "markup.inline.raw", "settings": { "foreground": "#0550ae" } }, { "scope": [ "markup.deleted", "meta.diff.header.from-file", "punctuation.definition.deleted" ], "settings": { "background": "#ffebe9", "foreground": "#82071e" } }, { "scope": ["punctuation.section.embedded"], "settings": { "foreground": "#cf222e" } }, { "scope": [ "markup.inserted", "meta.diff.header.to-file", "punctuation.definition.inserted" ], "settings": { "background": "#dafbe1", "foreground": "#116329" } }, { "scope": ["markup.changed", "punctuation.definition.changed"], "settings": { "background": "#ffd8b5", "foreground": "#953800" } }, { "scope": ["markup.ignored", "markup.untracked"], "settings": { "foreground": "#eaeef2", "background": "#0550ae" } }, { "scope": "meta.diff.range", "settings": { "foreground": "#8250df", "fontStyle": "bold" } }, { "scope": "meta.diff.header", "settings": { "foreground": "#0550ae" } }, { "scope": "meta.separator", "settings": { "fontStyle": "bold", "foreground": "#0550ae" } }, { "scope": "meta.output", "settings": { "foreground": "#0550ae" } }, { "scope": [ "brackethighlighter.tag", "brackethighlighter.curly", "brackethighlighter.round", "brackethighlighter.square", "brackethighlighter.angle", "brackethighlighter.quote" ], "settings": { "foreground": "#57606a" } }, { "scope": "brackethighlighter.unmatched", "settings": { "foreground": "#82071e" } }, { "scope": ["constant.other.reference.link", "string.other.link"], "settings": { "foreground": "#0a3069", "fontStyle": "underline" } } ] } ================================================ FILE: apps/web/src/lib/shiki/themes/hc_light.json ================================================ { "$schema": "vscode://schemas/color-theme", "name": "hc_light", "tokenColors": [ { "scope": ["meta.embedded", "source.groovy.embedded"], "settings": { "foreground": "#292929" } }, { "scope": "emphasis", "settings": { "fontStyle": "italic" } }, { "scope": "strong", "settings": { "fontStyle": "bold" } }, { "scope": "meta.diff.header", "settings": { "foreground": "#062F4A" } }, { "scope": "comment", "settings": { "foreground": "#515151" } }, { "scope": "constant.language", "settings": { "foreground": "#0F4A85" } }, { "scope": [ "constant.numeric", "variable.other.enummember", "keyword.operator.plus.exponent", "keyword.operator.minus.exponent" ], "settings": { "foreground": "#096d48" } }, { "scope": "constant.regexp", "settings": { "foreground": "#811F3F" } }, { "scope": "entity.name.tag", "settings": { "foreground": "#0F4A85" } }, { "scope": "entity.name.selector", "settings": { "foreground": "#0F4A85" } }, { "scope": "entity.other.attribute-name", "settings": { "foreground": "#264F78" } }, { "scope": [ "entity.other.attribute-name.class.css", "entity.other.attribute-name.class.mixin.css", "entity.other.attribute-name.id.css", "entity.other.attribute-name.parent-selector.css", "entity.other.attribute-name.pseudo-class.css", "entity.other.attribute-name.pseudo-element.css", "source.css.less entity.other.attribute-name.id", "entity.other.attribute-name.scss" ], "settings": { "foreground": "#0F4A85" } }, { "scope": "invalid", "settings": { "foreground": "#B5200D" } }, { "scope": "markup.underline", "settings": { "fontStyle": "underline" } }, { "scope": "markup.bold", "settings": { "foreground": "#000080", "fontStyle": "bold" } }, { "scope": "markup.heading", "settings": { "foreground": "#0F4A85", "fontStyle": "bold" } }, { "scope": "markup.italic", "settings": { "fontStyle": "italic" } }, { "scope": "markup.strikethrough", "settings": { "fontStyle": "strikethrough" } }, { "scope": "markup.inserted", "settings": { "foreground": "#096d48" } }, { "scope": "markup.deleted", "settings": { "foreground": "#5A5A5A" } }, { "scope": "markup.changed", "settings": { "foreground": "#0451A5" } }, { "scope": [ "punctuation.definition.quote.begin.markdown", "punctuation.definition.list.begin.markdown" ], "settings": { "foreground": "#0451A5" } }, { "scope": "markup.inline.raw", "settings": { "foreground": "#0F4A85" } }, { "scope": "punctuation.definition.tag", "settings": { "foreground": "#0F4A85" } }, { "scope": ["meta.preprocessor", "entity.name.function.preprocessor"], "settings": { "foreground": "#0F4A85" } }, { "scope": "meta.preprocessor.string", "settings": { "foreground": "#b5200d" } }, { "scope": "meta.preprocessor.numeric", "settings": { "foreground": "#096d48" } }, { "scope": "meta.structure.dictionary.key.python", "settings": { "foreground": "#0451A5" } }, { "scope": "storage", "settings": { "foreground": "#0F4A85" } }, { "scope": "storage.type", "settings": { "foreground": "#0F4A85" } }, { "scope": ["storage.modifier", "keyword.operator.noexcept"], "settings": { "foreground": "#0F4A85" } }, { "scope": ["string", "meta.embedded.assembly"], "settings": { "foreground": "#0F4A85" } }, { "scope": [ "string.comment.buffered.block.pug", "string.quoted.pug", "string.interpolated.pug", "string.unquoted.plain.in.yaml", "string.unquoted.plain.out.yaml", "string.unquoted.block.yaml", "string.quoted.single.yaml", "string.quoted.double.xml", "string.quoted.single.xml", "string.unquoted.cdata.xml", "string.quoted.double.html", "string.quoted.single.html", "string.unquoted.html", "string.quoted.single.handlebars", "string.quoted.double.handlebars" ], "settings": { "foreground": "#0F4A85" } }, { "scope": "string.regexp", "settings": { "foreground": "#811F3F" } }, { "scope": [ "punctuation.definition.template-expression.begin", "punctuation.definition.template-expression.end", "punctuation.section.embedded" ], "settings": { "foreground": "#0F4A85" } }, { "scope": ["meta.template.expression"], "settings": { "foreground": "#000000" } }, { "scope": [ "support.constant.property-value", "support.constant.font-name", "support.constant.media-type", "support.constant.media", "constant.other.color.rgb-value", "constant.other.rgb-value", "support.constant.color" ], "settings": { "foreground": "#0451A5" } }, { "scope": [ "support.type.vendored.property-name", "support.type.property-name", "variable.css", "variable.scss", "variable.other.less", "source.coffee.embedded" ], "settings": { "foreground": "#264F78" } }, { "scope": ["support.type.property-name.json"], "settings": { "foreground": "#0451A5" } }, { "scope": "keyword", "settings": { "foreground": "#0F4A85" } }, { "scope": "keyword.control", "settings": { "foreground": "#0F4A85" } }, { "scope": "keyword.operator", "settings": { "foreground": "#000000" } }, { "scope": [ "keyword.operator.new", "keyword.operator.expression", "keyword.operator.cast", "keyword.operator.sizeof", "keyword.operator.alignof", "keyword.operator.typeid", "keyword.operator.alignas", "keyword.operator.instanceof", "keyword.operator.logical.python", "keyword.operator.wordlike" ], "settings": { "foreground": "#0F4A85" } }, { "scope": "keyword.other.unit", "settings": { "foreground": "#096d48" } }, { "scope": [ "punctuation.section.embedded.begin.php", "punctuation.section.embedded.end.php" ], "settings": { "foreground": "#0F4A85" } }, { "scope": "support.function.git-rebase", "settings": { "foreground": "#0451A5" } }, { "scope": "constant.sha.git-rebase", "settings": { "foreground": "#096d48" } }, { "scope": [ "storage.modifier.import.java", "variable.language.wildcard.java", "storage.modifier.package.java" ], "settings": { "foreground": "#000000" } }, { "scope": "variable.language", "settings": { "foreground": "#0F4A85" } }, { "scope": [ "entity.name.function", "support.function", "support.constant.handlebars", "source.powershell variable.other.member", "entity.name.operator.custom-literal" ], "settings": { "foreground": "#5e2cbc" } }, { "scope": [ "support.class", "support.type", "entity.name.type", "entity.name.namespace", "entity.other.attribute", "entity.name.scope-resolution", "entity.name.class", "storage.type.numeric.go", "storage.type.byte.go", "storage.type.boolean.go", "storage.type.string.go", "storage.type.uintptr.go", "storage.type.error.go", "storage.type.rune.go", "storage.type.cs", "storage.type.generic.cs", "storage.type.modifier.cs", "storage.type.variable.cs", "storage.type.annotation.java", "storage.type.generic.java", "storage.type.java", "storage.type.object.array.java", "storage.type.primitive.array.java", "storage.type.primitive.java", "storage.type.token.java", "storage.type.groovy", "storage.type.annotation.groovy", "storage.type.parameters.groovy", "storage.type.generic.groovy", "storage.type.object.array.groovy", "storage.type.primitive.array.groovy", "storage.type.primitive.groovy" ], "settings": { "foreground": "#185E73" } }, { "scope": [ "meta.type.cast.expr", "meta.type.new.expr", "support.constant.math", "support.constant.dom", "support.constant.json", "entity.other.inherited-class" ], "settings": { "foreground": "#185E73" } }, { "scope": [ "keyword.control", "source.cpp keyword.operator.new", "source.cpp keyword.operator.delete", "keyword.other.using", "keyword.other.operator", "entity.name.operator" ], "settings": { "foreground": "#b5200d" } }, { "scope": [ "variable", "meta.definition.variable.name", "support.variable", "entity.name.variable", "constant.other.placeholder" ], "settings": { "foreground": "#001080" } }, { "scope": ["variable.other.constant", "variable.other.enummember"], "settings": { "foreground": "#02715D" } }, { "scope": ["meta.object-literal.key"], "settings": { "foreground": "#001080" } }, { "scope": [ "support.constant.property-value", "support.constant.font-name", "support.constant.media-type", "support.constant.media", "constant.other.color.rgb-value", "constant.other.rgb-value", "support.constant.color" ], "settings": { "foreground": "#0451A5" } }, { "scope": [ "punctuation.definition.group.regexp", "punctuation.definition.group.assertion.regexp", "punctuation.definition.character-class.regexp", "punctuation.character.set.begin.regexp", "punctuation.character.set.end.regexp", "keyword.operator.negation.regexp", "support.other.parenthesis.regexp" ], "settings": { "foreground": "#D16969" } }, { "scope": [ "constant.character.character-class.regexp", "constant.other.character-class.set.regexp", "constant.other.character-class.regexp", "constant.character.set.regexp" ], "settings": { "foreground": "#811F3F" } }, { "scope": "keyword.operator.quantifier.regexp", "settings": { "foreground": "#000000" } }, { "scope": ["keyword.operator.or.regexp", "keyword.control.anchor.regexp"], "settings": { "foreground": "#EE0000" } }, { "scope": "constant.character", "settings": { "foreground": "#0F4A85" } }, { "scope": "constant.character.escape", "settings": { "foreground": "#EE0000" } }, { "scope": "entity.name.label", "settings": { "foreground": "#000000" } }, { "scope": "token.info-token", "settings": { "foreground": "#316BCD" } }, { "scope": "token.warn-token", "settings": { "foreground": "#CD9731" } }, { "scope": "token.error-token", "settings": { "foreground": "#CD3131" } }, { "scope": "token.debug-token", "settings": { "foreground": "#800080" } } ] } ================================================ FILE: apps/web/src/lib/shiki/themes/light-plus.json ================================================ { "$schema": "vscode://schemas/color-theme", "name": "light-plus", "tokenColors": [ { "settings": { "foreground": "#000000" } }, { "scope": [ "meta.embedded", "source.groovy.embedded", "string meta.image.inline.markdown" ], "settings": { "foreground": "#000000ff" } }, { "scope": "emphasis", "settings": { "fontStyle": "italic" } }, { "scope": "strong", "settings": { "fontStyle": "bold" } }, { "scope": "meta.diff.header", "settings": { "foreground": "#000080" } }, { "scope": "comment", "settings": { "foreground": "#008000" } }, { "scope": "constant.language", "settings": { "foreground": "#0000ff" } }, { "scope": [ "constant.numeric", "variable.other.enummember", "keyword.operator.plus.exponent", "keyword.operator.minus.exponent" ], "settings": { "foreground": "#098658" } }, { "scope": "constant.regexp", "settings": { "foreground": "#811f3f" } }, { "name": "css tags in selectors, xml tags", "scope": "entity.name.tag", "settings": { "foreground": "#800000" } }, { "scope": "entity.name.selector", "settings": { "foreground": "#800000" } }, { "scope": "entity.other.attribute-name", "settings": { "foreground": "#ff0000" } }, { "scope": [ "entity.other.attribute-name.class.css", "entity.other.attribute-name.class.mixin.css", "entity.other.attribute-name.id.css", "entity.other.attribute-name.parent-selector.css", "entity.other.attribute-name.pseudo-class.css", "entity.other.attribute-name.pseudo-element.css", "source.css.less entity.other.attribute-name.id", "entity.other.attribute-name.scss" ], "settings": { "foreground": "#800000" } }, { "scope": "invalid", "settings": { "foreground": "#cd3131" } }, { "scope": "markup.underline", "settings": { "fontStyle": "underline" } }, { "scope": "markup.bold", "settings": { "fontStyle": "bold", "foreground": "#000080" } }, { "scope": "markup.heading", "settings": { "fontStyle": "bold", "foreground": "#800000" } }, { "scope": "markup.italic", "settings": { "fontStyle": "italic" } }, { "scope": "markup.strikethrough", "settings": { "fontStyle": "strikethrough" } }, { "scope": "markup.inserted", "settings": { "foreground": "#098658" } }, { "scope": "markup.deleted", "settings": { "foreground": "#a31515" } }, { "scope": "markup.changed", "settings": { "foreground": "#0451a5" } }, { "scope": [ "punctuation.definition.quote.begin.markdown", "punctuation.definition.list.begin.markdown" ], "settings": { "foreground": "#0451a5" } }, { "scope": "markup.inline.raw", "settings": { "foreground": "#800000" } }, { "name": "brackets of XML/HTML tags", "scope": "punctuation.definition.tag", "settings": { "foreground": "#800000" } }, { "scope": ["meta.preprocessor", "entity.name.function.preprocessor"], "settings": { "foreground": "#0000ff" } }, { "scope": "meta.preprocessor.string", "settings": { "foreground": "#a31515" } }, { "scope": "meta.preprocessor.numeric", "settings": { "foreground": "#098658" } }, { "scope": "meta.structure.dictionary.key.python", "settings": { "foreground": "#0451a5" } }, { "scope": "storage", "settings": { "foreground": "#0000ff" } }, { "scope": "storage.type", "settings": { "foreground": "#0000ff" } }, { "scope": ["storage.modifier", "keyword.operator.noexcept"], "settings": { "foreground": "#0000ff" } }, { "scope": ["string", "meta.embedded.assembly"], "settings": { "foreground": "#a31515" } }, { "scope": [ "string.comment.buffered.block.pug", "string.quoted.pug", "string.interpolated.pug", "string.unquoted.plain.in.yaml", "string.unquoted.plain.out.yaml", "string.unquoted.block.yaml", "string.quoted.single.yaml", "string.quoted.double.xml", "string.quoted.single.xml", "string.unquoted.cdata.xml", "string.quoted.double.html", "string.quoted.single.html", "string.unquoted.html", "string.quoted.single.handlebars", "string.quoted.double.handlebars" ], "settings": { "foreground": "#0000ff" } }, { "scope": "string.regexp", "settings": { "foreground": "#811f3f" } }, { "name": "String interpolation", "scope": [ "punctuation.definition.template-expression.begin", "punctuation.definition.template-expression.end", "punctuation.section.embedded" ], "settings": { "foreground": "#0000ff" } }, { "name": "Reset JavaScript string interpolation expression", "scope": ["meta.template.expression"], "settings": { "foreground": "#000000" } }, { "scope": [ "support.constant.property-value", "support.constant.font-name", "support.constant.media-type", "support.constant.media", "constant.other.color.rgb-value", "constant.other.rgb-value", "support.constant.color" ], "settings": { "foreground": "#0451a5" } }, { "scope": [ "support.type.vendored.property-name", "support.type.property-name", "variable.css", "variable.scss", "variable.other.less", "source.coffee.embedded" ], "settings": { "foreground": "#ff0000" } }, { "scope": ["support.type.property-name.json"], "settings": { "foreground": "#0451a5" } }, { "scope": "keyword", "settings": { "foreground": "#0000ff" } }, { "scope": "keyword.control", "settings": { "foreground": "#0000ff" } }, { "scope": "keyword.operator", "settings": { "foreground": "#000000" } }, { "scope": [ "keyword.operator.new", "keyword.operator.expression", "keyword.operator.cast", "keyword.operator.sizeof", "keyword.operator.alignof", "keyword.operator.typeid", "keyword.operator.alignas", "keyword.operator.instanceof", "keyword.operator.logical.python", "keyword.operator.wordlike" ], "settings": { "foreground": "#0000ff" } }, { "scope": "keyword.other.unit", "settings": { "foreground": "#098658" } }, { "scope": [ "punctuation.section.embedded.begin.php", "punctuation.section.embedded.end.php" ], "settings": { "foreground": "#800000" } }, { "scope": "support.function.git-rebase", "settings": { "foreground": "#0451a5" } }, { "scope": "constant.sha.git-rebase", "settings": { "foreground": "#098658" } }, { "name": "coloring of the Java import and package identifiers", "scope": [ "storage.modifier.import.java", "variable.language.wildcard.java", "storage.modifier.package.java" ], "settings": { "foreground": "#000000" } }, { "name": "this.self", "scope": "variable.language", "settings": { "foreground": "#0000ff" } }, { "name": "Function declarations", "scope": [ "entity.name.function", "support.function", "support.constant.handlebars", "source.powershell variable.other.member", "entity.name.operator.custom-literal" ], "settings": { "foreground": "#795E26" } }, { "name": "Types declaration and references", "scope": [ "support.class", "support.type", "entity.name.type", "entity.name.namespace", "entity.other.attribute", "entity.name.scope-resolution", "entity.name.class", "storage.type.numeric.go", "storage.type.byte.go", "storage.type.boolean.go", "storage.type.string.go", "storage.type.uintptr.go", "storage.type.error.go", "storage.type.rune.go", "storage.type.cs", "storage.type.generic.cs", "storage.type.modifier.cs", "storage.type.variable.cs", "storage.type.annotation.java", "storage.type.generic.java", "storage.type.java", "storage.type.object.array.java", "storage.type.primitive.array.java", "storage.type.primitive.java", "storage.type.token.java", "storage.type.groovy", "storage.type.annotation.groovy", "storage.type.parameters.groovy", "storage.type.generic.groovy", "storage.type.object.array.groovy", "storage.type.primitive.array.groovy", "storage.type.primitive.groovy" ], "settings": { "foreground": "#267f99" } }, { "name": "Types declaration and references, TS grammar specific", "scope": [ "meta.type.cast.expr", "meta.type.new.expr", "support.constant.math", "support.constant.dom", "support.constant.json", "entity.other.inherited-class" ], "settings": { "foreground": "#267f99" } }, { "name": "Control flow / Special keywords", "scope": [ "keyword.control", "source.cpp keyword.operator.new", "source.cpp keyword.operator.delete", "keyword.other.using", "keyword.other.operator", "entity.name.operator" ], "settings": { "foreground": "#AF00DB" } }, { "name": "Variable and parameter name", "scope": [ "variable", "meta.definition.variable.name", "support.variable", "entity.name.variable", "constant.other.placeholder" ], "settings": { "foreground": "#001080" } }, { "name": "Constants and enums", "scope": ["variable.other.constant", "variable.other.enummember"], "settings": { "foreground": "#0070C1" } }, { "name": "Object keys, TS grammar specific", "scope": ["meta.object-literal.key"], "settings": { "foreground": "#001080" } }, { "name": "CSS property value", "scope": [ "support.constant.property-value", "support.constant.font-name", "support.constant.media-type", "support.constant.media", "constant.other.color.rgb-value", "constant.other.rgb-value", "support.constant.color" ], "settings": { "foreground": "#0451a5" } }, { "name": "Regular expression groups", "scope": [ "punctuation.definition.group.regexp", "punctuation.definition.group.assertion.regexp", "punctuation.definition.character-class.regexp", "punctuation.character.set.begin.regexp", "punctuation.character.set.end.regexp", "keyword.operator.negation.regexp", "support.other.parenthesis.regexp" ], "settings": { "foreground": "#d16969" } }, { "scope": [ "constant.character.character-class.regexp", "constant.other.character-class.set.regexp", "constant.other.character-class.regexp", "constant.character.set.regexp" ], "settings": { "foreground": "#811f3f" } }, { "scope": "keyword.operator.quantifier.regexp", "settings": { "foreground": "#000000" } }, { "scope": ["keyword.operator.or.regexp", "keyword.control.anchor.regexp"], "settings": { "foreground": "#EE0000" } }, { "scope": "constant.character", "settings": { "foreground": "#0000ff" } }, { "scope": "constant.character.escape", "settings": { "foreground": "#EE0000" } }, { "scope": "entity.name.label", "settings": { "foreground": "#000000" } } ], "semanticHighlighting": true, "semanticTokenColors": { "newOperator": "#AF00DB", "stringLiteral": "#a31515", "customLiteral": "#795E26", "numberLiteral": "#098658" }, "colors": { "editor.background": "#FFFFFF", "editor.foreground": "#000000", "editor.inactiveSelectionBackground": "#E5EBF1", "editorIndentGuide.background": "#D3D3D3", "editorIndentGuide.activeBackground": "#939393", "editor.selectionHighlightBackground": "#ADD6FF80", "editorSuggestWidget.background": "#F3F3F3", "activityBarBadge.background": "#007ACC", "sideBarTitle.foreground": "#6F6F6F", "list.hoverBackground": "#E8E8E8", "input.placeholderForeground": "#767676", "searchEditor.textInputBorder": "#CECECE", "settings.textInputBorder": "#CECECE", "settings.numberInputBorder": "#CECECE", "statusBarItem.remoteForeground": "#FFF", "statusBarItem.remoteBackground": "#16825D", "ports.iconRunningProcessForeground": "#369432", "sideBarSectionHeader.background": "#0000", "sideBarSectionHeader.border": "#61616130", "tab.lastPinnedBorder": "#61616130", "notebook.cellBorderColor": "#E8E8E8", "notebook.selectedCellBackground": "#c8ddf150", "statusBarItem.errorBackground": "#c72e0f", "list.activeSelectionIconForeground": "#FFF", "list.focusAndSelectionOutline": "#90C2F9" } } ================================================ FILE: apps/web/src/lib/shiki/themes/material-darker.json ================================================ { "name": "material-darker", "semanticHighlighting": true, "tokenColors": [ { "name": "Global settings", "settings": { "background": "#212121", "foreground": "#EEFFFF" } }, { "name": "String", "scope": "string", "settings": { "foreground": "#C3E88D" } }, { "name": "Punctuation", "scope": "punctuation, constant.other.symbol", "settings": { "foreground": "#89DDFF" } }, { "name": "String Escape", "scope": "constant.character.escape, text.html constant.character.entity.named", "settings": { "foreground": "#EEFFFF" } }, { "name": "Boolean", "scope": "constant.language.boolean", "settings": { "foreground": "#ff9cac" } }, { "name": "Number", "scope": "constant.numeric", "settings": { "foreground": "#F78C6C" } }, { "name": "Variable", "scope": "variable, variable.parameter, support.variable, variable.language, support.constant, meta.definition.variable entity.name.function, meta.function-call.arguments", "settings": { "foreground": "#EEFFFF" } }, { "name": "Other Keyword", "scope": "keyword.other", "settings": { "foreground": "#F78C6C" } }, { "name": "Keyword", "scope": "keyword, modifier, variable.language.this, support.type.object, constant.language", "settings": { "foreground": "#89DDFF" } }, { "name": "Function call", "scope": "entity.name.function, support.function", "settings": { "foreground": "#82AAFF" } }, { "name": "Storage", "scope": "storage.type, storage.modifier, storage.control", "settings": { "foreground": "#C792EA" } }, { "name": "Modules", "scope": "support.module, support.node", "settings": { "foreground": "#f07178", "fontStyle": "italic" } }, { "name": "Type", "scope": "support.type, constant.other.key", "settings": { "foreground": "#FFCB6B" } }, { "name": "Type", "scope": "entity.name.type, entity.other.inherited-class, entity.other", "settings": { "foreground": "#FFCB6B" } }, { "name": "Comment", "scope": "comment", "settings": { "foreground": "#545454", "fontStyle": "italic" } }, { "name": "Comment", "scope": "comment punctuation.definition.comment, string.quoted.docstring", "settings": { "foreground": "#545454", "fontStyle": "italic" } }, { "name": "Punctuation", "scope": "punctuation", "settings": { "foreground": "#89DDFF" } }, { "name": "Class", "scope": "entity.name, entity.name.type.class, support.type, support.class, meta.use", "settings": { "foreground": "#FFCB6B" } }, { "name": "Class variable", "scope": "variable.object.property, meta.field.declaration entity.name.function", "settings": { "foreground": "#f07178" } }, { "name": "Class method", "scope": "meta.definition.method entity.name.function", "settings": { "foreground": "#f07178" } }, { "name": "Function definition", "scope": "meta.function entity.name.function", "settings": { "foreground": "#82AAFF" } }, { "name": "Template expression", "scope": "template.expression.begin, template.expression.end, punctuation.definition.template-expression.begin, punctuation.definition.template-expression.end", "settings": { "foreground": "#89DDFF" } }, { "name": "Reset embedded/template expression colors", "scope": "meta.embedded, source.groovy.embedded, meta.template.expression", "settings": { "foreground": "#EEFFFF" } }, { "name": "YAML key", "scope": "entity.name.tag.yaml", "settings": { "foreground": "#f07178" } }, { "name": "JSON key", "scope": "meta.object-literal.key, meta.object-literal.key string, support.type.property-name.json", "settings": { "foreground": "#f07178" } }, { "name": "JSON constant", "scope": "constant.language.json", "settings": { "foreground": "#89DDFF" } }, { "name": "CSS class", "scope": "entity.other.attribute-name.class", "settings": { "foreground": "#FFCB6B" } }, { "name": "CSS ID", "scope": "entity.other.attribute-name.id", "settings": { "foreground": "#F78C6C" } }, { "name": "CSS tag", "scope": "source.css entity.name.tag", "settings": { "foreground": "#FFCB6B" } }, { "name": "CSS properties", "scope": "support.type.property-name.css", "settings": { "foreground": "#B2CCD6" } }, { "name": "HTML tag outer", "scope": "meta.tag, punctuation.definition.tag", "settings": { "foreground": "#89DDFF" } }, { "name": "HTML tag inner", "scope": "entity.name.tag", "settings": { "foreground": "#f07178" } }, { "name": "HTML tag attribute", "scope": "entity.other.attribute-name", "settings": { "foreground": "#C792EA" } }, { "name": "HTML entities", "scope": "punctuation.definition.entity.html", "settings": { "foreground": "#EEFFFF" } }, { "name": "Markdown heading", "scope": "markup.heading", "settings": { "foreground": "#89DDFF" } }, { "name": "Markdown link text", "scope": "text.html.markdown meta.link.inline, meta.link.reference", "settings": { "foreground": "#f07178" } }, { "name": "Markdown list item", "scope": "text.html.markdown beginning.punctuation.definition.list", "settings": { "foreground": "#89DDFF" } }, { "name": "Markdown italic", "scope": "markup.italic", "settings": { "foreground": "#f07178", "fontStyle": "italic" } }, { "name": "Markdown bold", "scope": "markup.bold", "settings": { "foreground": "#f07178", "fontStyle": "bold" } }, { "name": "Markdown bold italic", "scope": "markup.bold markup.italic, markup.italic markup.bold", "settings": { "foreground": "#f07178", "fontStyle": "italic bold" } }, { "name": "Markdown code block", "scope": "markup.fenced_code.block.markdown punctuation.definition.markdown", "settings": { "foreground": "#C3E88D" } }, { "name": "Markdown inline code", "scope": "markup.inline.raw.string.markdown", "settings": { "foreground": "#C3E88D" } }, { "name": "INI property name", "scope": "keyword.other.definition.ini", "settings": { "foreground": "#f07178" } }, { "name": "INI section title", "scope": "entity.name.section.group-title.ini", "settings": { "foreground": "#89DDFF" } }, { "name": "C# class", "scope": "source.cs meta.class.identifier storage.type", "settings": { "foreground": "#FFCB6B" } }, { "name": "C# class method", "scope": "source.cs meta.method.identifier entity.name.function", "settings": { "foreground": "#f07178" } }, { "name": "C# function call", "scope": "source.cs meta.method-call meta.method, source.cs entity.name.function", "settings": { "foreground": "#82AAFF" } }, { "name": "C# type", "scope": "source.cs storage.type", "settings": { "foreground": "#FFCB6B" } }, { "name": "C# return type", "scope": "source.cs meta.method.return-type", "settings": { "foreground": "#FFCB6B" } }, { "name": "C# preprocessor", "scope": "source.cs meta.preprocessor", "settings": { "foreground": "#545454" } }, { "name": "C# namespace", "scope": "source.cs entity.name.type.namespace", "settings": { "foreground": "#EEFFFF" } }, { "name": "JSX Text", "scope": "meta.jsx.children, SXNested", "settings": { "foreground": "#EEFFFF" } }, { "name": "JSX Components name", "scope": "support.class.component", "settings": { "foreground": "#FFCB6B" } }, { "name": "C-related Block Level Variables", "scope": "source.cpp meta.block variable.other", "settings": { "foreground": "#EEFFFF" } }, { "name": "Member Access Meta", "scope": "source.python meta.member.access.python", "settings": { "foreground": "#f07178" } }, { "name": "Function Call", "scope": "source.python meta.function-call.python, meta.function-call.arguments", "settings": { "foreground": "#82AAFF" } }, { "name": "Blocks", "scope": "meta.block", "settings": { "foreground": "#f07178" } }, { "name": "Function Call", "scope": "entity.name.function.call", "settings": { "foreground": "#82AAFF" } }, { "name": "Namespaces", "scope": "source.php support.other.namespace, source.php meta.use support.class", "settings": { "foreground": "#EEFFFF" } }, { "name": "Constant keywords", "scope": "constant.keyword", "settings": { "foreground": "#89DDFF", "fontStyle": "italic" } }, { "name": "Entity name", "scope": "entity.name.function", "settings": { "foreground": "#82AAFF" } }, { "name": "Global settings", "settings": { "background": "#212121", "foreground": "#EEFFFF" } }, { "name": "Markup Deleted", "scope": ["markup.deleted"], "settings": { "foreground": "#f07178" } }, { "name": "Markup Inserted", "scope": ["markup.inserted"], "settings": { "foreground": "#C3E88D" } }, { "name": "Markup Underline", "scope": ["markup.underline"], "settings": { "fontStyle": "underline" } }, { "name": "Keyword Control", "scope": ["keyword.control"], "settings": { "foreground": "#89DDFF", "fontStyle": "italic" } }, { "name": "Parameter", "scope": ["variable.parameter"], "settings": { "fontStyle": "italic" } }, { "name": "Python - Self Parameter", "scope": ["variable.parameter.function.language.special.self.python"], "settings": { "foreground": "#f07178", "fontStyle": "italic" } }, { "name": "Python - Format Placeholder", "scope": ["constant.character.format.placeholder.other.python"], "settings": { "foreground": "#F78C6C" } }, { "name": "Markdown - Blockquote", "scope": ["markup.quote"], "settings": { "fontStyle": "italic", "foreground": "#89DDFF" } }, { "name": "Markdown - Fenced Language", "scope": ["markup.fenced_code.block"], "settings": { "foreground": "#EEFFFF90" } }, { "name": "Markdown - Blockquote Punctuation", "scope": ["punctuation.definition.quote"], "settings": { "foreground": "#ff9cac" } }, { "name": "JSON Key - Level 0", "scope": [ "meta.structure.dictionary.json support.type.property-name.json" ], "settings": { "foreground": "#C792EA" } }, { "name": "JSON Key - Level 1", "scope": [ "meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json support.type.property-name.json" ], "settings": { "foreground": "#FFCB6B" } }, { "name": "JSON Key - Level 2", "scope": [ "meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json support.type.property-name.json" ], "settings": { "foreground": "#F78C6C" } }, { "name": "JSON Key - Level 3", "scope": [ "meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json support.type.property-name.json" ], "settings": { "foreground": "#f07178" } }, { "name": "JSON Key - Level 4", "scope": [ "meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json support.type.property-name.json" ], "settings": { "foreground": "#916b53" } }, { "name": "JSON Key - Level 5", "scope": [ "meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json support.type.property-name.json" ], "settings": { "foreground": "#82AAFF" } }, { "name": "JSON Key - Level 6", "scope": [ "meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json support.type.property-name.json" ], "settings": { "foreground": "#ff9cac" } }, { "name": "JSON Key - Level 7", "scope": [ "meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json support.type.property-name.json" ], "settings": { "foreground": "#C792EA" } }, { "name": "JSON Key - Level 8", "scope": [ "meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json support.type.property-name.json" ], "settings": { "foreground": "#C3E88D" } } ], "colors": { "focusBorder": "#FFFFFF00", "foreground": "#EEFFFF", "button.background": "#61616150", "button.foreground": "#ffffff", "dropdown.background": "#212121", "input.background": "#2B2B2B", "inputOption.activeBorder": "#EEFFFF30", "list.activeSelectionBackground": "#212121", "list.activeSelectionForeground": "#80CBC4", "list.dropBackground": "#f0717880", "list.focusBackground": "#EEFFFF20", "list.focusForeground": "#EEFFFF", "list.highlightForeground": "#80CBC4", "list.hoverBackground": "#212121", "list.inactiveSelectionBackground": "#00000030", "activityBar.background": "#212121", "activityBar.dropBackground": "#f0717880", "activityBarBadge.background": "#80CBC4", "activityBarBadge.foreground": "#000000", "badge.background": "#00000030", "badge.foreground": "#545454", "sideBar.background": "#212121", "sideBarSectionHeader.background": "#212121", "editorGroup.dropBackground": "#f0717880", "editorGroup.focusedEmptyBorder": "#f07178", "editorGroupHeader.tabsBackground": "#212121", "tab.border": "#212121", "tab.activeBorder": "#80CBC4", "tab.inactiveBackground": "#212121", "tab.activeModifiedBorder": "#616161", "tab.inactiveModifiedBorder": "#904348", "tab.unfocusedActiveModifiedBorder": "#c05a60", "tab.unfocusedInactiveModifiedBorder": "#904348", "editor.background": "#212121", "editor.foreground": "#EEFFFF", "editorLineNumber.foreground": "#424242", "editorLineNumber.activeForeground": "#616161", "editorCursor.foreground": "#FFCC00", "editor.selectionBackground": "#61616150", "editor.selectionHighlightBackground": "#FFCC0020", "editor.wordHighlightBackground": "#ff9cac30", "editor.wordHighlightStrongBackground": "#C3E88D30", "editor.findMatchHighlight": "#EEFFFF", "editor.findRangeHighlightBackground": "#FFCB6B30", "editor.lineHighlightBorder": "#00000000", "editor.rangeHighlightBackground": "#FFFFFF0d", "editorWhitespace.foreground": "#EEFFFF40", "editorWidget.background": "#212121", "editorHoverWidget.background": "#212121", "editorMarkerNavigation.background": "#EEFFFF05", "peekView.border": "#00000030", "peekViewEditor.background": "#EEFFFF05", "peekViewResult.background": "#EEFFFF05", "peekViewTitle.background": "#EEFFFF05", "panel.background": "#212121", "panel.border": "#21212160", "panelTitle.activeBorder": "#80CBC4", "panelTitle.inactiveForeground": "#EEFFFF", "statusBar.background": "#212121", "statusBar.debuggingBackground": "#C792EA", "statusBar.debuggingForeground": "#ffffff", "statusBar.noFolderBackground": "#212121", "statusBarItem.activeBackground": "#f0717880", "statusBarItem.hoverBackground": "#54545420", "statusBarItem.remoteBackground": "#80CBC4", "statusBarItem.remoteForeground": "#000000", "titleBar.activeBackground": "#212121", "pickerGroup.border": "#FFFFFF1a", "terminal.ansiBlack": "#000000", "terminal.ansiBlue": "#82AAFF", "terminal.ansiBrightBlack": "#545454", "terminal.ansiBrightBlue": "#82AAFF", "terminal.ansiBrightCyan": "#89DDFF", "terminal.ansiBrightGreen": "#C3E88D", "terminal.ansiBrightMagenta": "#C792EA", "terminal.ansiBrightRed": "#f07178", "terminal.ansiBrightWhite": "#ffffff", "terminal.ansiBrightYellow": "#FFCB6B", "terminal.ansiCyan": "#89DDFF", "terminal.ansiGreen": "#C3E88D", "terminal.ansiMagenta": "#C792EA", "terminal.ansiRed": "#f07178", "terminal.ansiWhite": "#ffffff", "terminal.ansiYellow": "#FFCB6B", "debugToolBar.background": "#212121", "debugConsole.errorForeground": "#f07178", "debugConsole.infoForeground": "#89DDFF", "debugConsole.warningForeground": "#FFCB6B", "selection.background": "#00000080", "editorRuler.foreground": "#424242", "widget.shadow": "#00000030", "scrollbar.shadow": "#00000030", "editorLink.activeForeground": "#EEFFFF", "progressBar.background": "#80CBC4", "pickerGroup.foreground": "#80CBC4", "tree.indentGuidesStroke": "#424242", "terminalCursor.foreground": "#FFCB6B", "terminalCursor.background": "#000000", "inputOption.activeBackground": "#EEFFFF30", "textLink.foreground": "#80CBC4", "textLink.activeForeground": "#EEFFFF", "sideBar.foreground": "#616161", "sideBar.border": "#21212160", "sideBarTitle.foreground": "#EEFFFF", "sideBarSectionHeader.border": "#21212160", "panel.dropBackground": "#EEFFFF", "panelTitle.activeForeground": "#FFFFFF", "editor.lineHighlightBackground": "#00000050", "editor.findMatchBackground": "#000000", "editor.findMatchHighlightBackground": "#00000050", "editor.findMatchBorder": "#80CBC4", "editor.findMatchHighlightBorder": "#ffffff30", "editorIndentGuide.background": "#42424270", "editorIndentGuide.activeBackground": "#424242", "editorGroup.border": "#00000030", "editorGutter.modifiedBackground": "#82AAFF60", "editorGutter.addedBackground": "#C3E88D60", "editorGutter.deletedBackground": "#f0717860", "activityBar.border": "#21212160", "activityBar.foreground": "#EEFFFF", "activityBar.activeBorder": "#80CBC4", "extensionBadge.remoteForeground": "#EEFFFF", "scrollbarSlider.background": "#EEFFFF20", "scrollbarSlider.hoverBackground": "#EEFFFF10", "scrollbarSlider.activeBackground": "#80CBC4", "tab.unfocusedActiveBorder": "#545454", "tab.activeForeground": "#FFFFFF", "tab.inactiveForeground": "#616161", "tab.activeBackground": "#212121", "tab.unfocusedActiveForeground": "#EEFFFF", "editorWidget.resizeBorder": "#80CBC4", "editorWidget.border": "#80CBC4", "notebook.focusedCellBorder": "#80CBC4", "notebook.inactiveFocusedCellBorder": "#80CBC450", "statusBar.border": "#21212160", "statusBar.foreground": "#616161", "editorBracketMatch.border": "#FFCC0050", "editorBracketMatch.background": "#212121", "editorOverviewRuler.findMatchForeground": "#80CBC4", "editorOverviewRuler.border": "#212121", "editorOverviewRuler.errorForeground": "#f0717840", "editorOverviewRuler.infoForeground": "#82AAFF40", "editorOverviewRuler.warningForeground": "#FFCB6B40", "editorInfo.foreground": "#82AAFF70", "editorWarning.foreground": "#FFCB6B70", "editorError.foreground": "#f0717870", "editorHoverWidget.border": "#FFFFFF10", "titleBar.activeForeground": "#EEFFFF", "titleBar.inactiveBackground": "#212121", "titleBar.inactiveForeground": "#616161", "titleBar.border": "#21212160", "input.foreground": "#EEFFFF", "input.placeholderForeground": "#EEFFFF60", "input.border": "#FFFFFF10", "inputValidation.errorBorder": "#f07178", "inputValidation.infoBorder": "#82AAFF", "inputValidation.warningBorder": "#FFCB6B", "dropdown.border": "#FFFFFF10", "quickInput.background": "#212121", "quickInput.foreground": "#616161", "list.hoverForeground": "#FFFFFF", "list.inactiveSelectionForeground": "#80CBC4", "quickInput.list.focusBackground": "#EEFFFF20", "editorSuggestWidget.background": "#212121", "editorSuggestWidget.foreground": "#EEFFFF", "editorSuggestWidget.highlightForeground": "#80CBC4", "editorSuggestWidget.selectedBackground": "#00000050", "editorSuggestWidget.border": "#FFFFFF10", "diffEditor.insertedTextBackground": "#89DDFF20", "diffEditor.removedTextBackground": "#ff9cac20", "notifications.background": "#212121", "notifications.foreground": "#EEFFFF", "notificationLink.foreground": "#80CBC4", "extensionButton.prominentBackground": "#C3E88D90", "extensionButton.prominentHoverBackground": "#C3E88D", "extensionButton.prominentForeground": "#000000", "peekViewEditorGutter.background": "#EEFFFF05", "peekViewTitleDescription.foreground": "#EEFFFF60", "peekViewResult.matchHighlightBackground": "#61616150", "peekViewEditor.matchHighlightBackground": "#61616150", "peekViewResult.selectionBackground": "#61616170", "gitDecoration.deletedResourceForeground": "#f0717890", "gitDecoration.conflictingResourceForeground": "#FFCB6B90", "gitDecoration.modifiedResourceForeground": "#82AAFF90", "gitDecoration.untrackedResourceForeground": "#C3E88D90", "gitDecoration.ignoredResourceForeground": "#61616190", "breadcrumb.background": "#212121", "breadcrumb.foreground": "#616161", "breadcrumb.focusForeground": "#EEFFFF", "breadcrumb.activeSelectionForeground": "#80CBC4", "breadcrumbPicker.background": "#212121", "menu.background": "#212121", "menu.foreground": "#EEFFFF", "menu.selectionBackground": "#00000050", "menu.selectionForeground": "#80CBC4", "menu.selectionBorder": "#00000030", "menu.separatorBackground": "#EEFFFF", "menubar.selectionBackground": "#00000030", "menubar.selectionForeground": "#80CBC4", "menubar.selectionBorder": "#00000030", "settings.dropdownForeground": "#EEFFFF", "settings.dropdownBackground": "#212121", "settings.numberInputForeground": "#EEFFFF", "settings.numberInputBackground": "#212121", "settings.textInputForeground": "#EEFFFF", "settings.textInputBackground": "#212121", "settings.headerForeground": "#80CBC4", "settings.modifiedItemIndicator": "#80CBC4", "settings.checkboxBackground": "#212121", "settings.checkboxForeground": "#EEFFFF", "listFilterWidget.background": "#00000030", "listFilterWidget.outline": "#00000030", "listFilterWidget.noMatchesOutline": "#00000030" } } ================================================ FILE: apps/web/src/lib/shiki/themes/material-default.json ================================================ { "name": "material-default", "semanticHighlighting": true, "tokenColors": [ { "name": "Global settings", "settings": { "background": "#263238", "foreground": "#EEFFFF" } }, { "name": "String", "scope": "string", "settings": { "foreground": "#C3E88D" } }, { "name": "Punctuation", "scope": "punctuation, constant.other.symbol", "settings": { "foreground": "#89DDFF" } }, { "name": "String Escape", "scope": "constant.character.escape, text.html constant.character.entity.named", "settings": { "foreground": "#EEFFFF" } }, { "name": "Boolean", "scope": "constant.language.boolean", "settings": { "foreground": "#ff9cac" } }, { "name": "Number", "scope": "constant.numeric", "settings": { "foreground": "#F78C6C" } }, { "name": "Variable", "scope": "variable, variable.parameter, support.variable, variable.language, support.constant, meta.definition.variable entity.name.function, meta.function-call.arguments", "settings": { "foreground": "#EEFFFF" } }, { "name": "Other Keyword", "scope": "keyword.other", "settings": { "foreground": "#F78C6C" } }, { "name": "Keyword", "scope": "keyword, modifier, variable.language.this, support.type.object, constant.language", "settings": { "foreground": "#89DDFF" } }, { "name": "Function call", "scope": "entity.name.function, support.function", "settings": { "foreground": "#82AAFF" } }, { "name": "Storage", "scope": "storage.type, storage.modifier, storage.control", "settings": { "foreground": "#C792EA" } }, { "name": "Modules", "scope": "support.module, support.node", "settings": { "foreground": "#f07178", "fontStyle": "italic" } }, { "name": "Type", "scope": "support.type, constant.other.key", "settings": { "foreground": "#FFCB6B" } }, { "name": "Type", "scope": "entity.name.type, entity.other.inherited-class, entity.other", "settings": { "foreground": "#FFCB6B" } }, { "name": "Comment", "scope": "comment", "settings": { "foreground": "#546E7A", "fontStyle": "italic" } }, { "name": "Comment", "scope": "comment punctuation.definition.comment, string.quoted.docstring", "settings": { "foreground": "#546E7A", "fontStyle": "italic" } }, { "name": "Punctuation", "scope": "punctuation", "settings": { "foreground": "#89DDFF" } }, { "name": "Class", "scope": "entity.name, entity.name.type.class, support.type, support.class, meta.use", "settings": { "foreground": "#FFCB6B" } }, { "name": "Class variable", "scope": "variable.object.property, meta.field.declaration entity.name.function", "settings": { "foreground": "#f07178" } }, { "name": "Class method", "scope": "meta.definition.method entity.name.function", "settings": { "foreground": "#f07178" } }, { "name": "Function definition", "scope": "meta.function entity.name.function", "settings": { "foreground": "#82AAFF" } }, { "name": "Template expression", "scope": "template.expression.begin, template.expression.end, punctuation.definition.template-expression.begin, punctuation.definition.template-expression.end", "settings": { "foreground": "#89DDFF" } }, { "name": "Reset embedded/template expression colors", "scope": "meta.embedded, source.groovy.embedded, meta.template.expression", "settings": { "foreground": "#EEFFFF" } }, { "name": "YAML key", "scope": "entity.name.tag.yaml", "settings": { "foreground": "#f07178" } }, { "name": "JSON key", "scope": "meta.object-literal.key, meta.object-literal.key string, support.type.property-name.json", "settings": { "foreground": "#f07178" } }, { "name": "JSON constant", "scope": "constant.language.json", "settings": { "foreground": "#89DDFF" } }, { "name": "CSS class", "scope": "entity.other.attribute-name.class", "settings": { "foreground": "#FFCB6B" } }, { "name": "CSS ID", "scope": "entity.other.attribute-name.id", "settings": { "foreground": "#F78C6C" } }, { "name": "CSS tag", "scope": "source.css entity.name.tag", "settings": { "foreground": "#FFCB6B" } }, { "name": "CSS properties", "scope": "support.type.property-name.css", "settings": { "foreground": "#B2CCD6" } }, { "name": "HTML tag outer", "scope": "meta.tag, punctuation.definition.tag", "settings": { "foreground": "#89DDFF" } }, { "name": "HTML tag inner", "scope": "entity.name.tag", "settings": { "foreground": "#f07178" } }, { "name": "HTML tag attribute", "scope": "entity.other.attribute-name", "settings": { "foreground": "#C792EA" } }, { "name": "HTML entities", "scope": "punctuation.definition.entity.html", "settings": { "foreground": "#EEFFFF" } }, { "name": "Markdown heading", "scope": "markup.heading", "settings": { "foreground": "#89DDFF" } }, { "name": "Markdown link text", "scope": "text.html.markdown meta.link.inline, meta.link.reference", "settings": { "foreground": "#f07178" } }, { "name": "Markdown list item", "scope": "text.html.markdown beginning.punctuation.definition.list", "settings": { "foreground": "#89DDFF" } }, { "name": "Markdown italic", "scope": "markup.italic", "settings": { "foreground": "#f07178", "fontStyle": "italic" } }, { "name": "Markdown bold", "scope": "markup.bold", "settings": { "foreground": "#f07178", "fontStyle": "bold" } }, { "name": "Markdown bold italic", "scope": "markup.bold markup.italic, markup.italic markup.bold", "settings": { "foreground": "#f07178", "fontStyle": "italic bold" } }, { "name": "Markdown code block", "scope": "markup.fenced_code.block.markdown punctuation.definition.markdown", "settings": { "foreground": "#C3E88D" } }, { "name": "Markdown inline code", "scope": "markup.inline.raw.string.markdown", "settings": { "foreground": "#C3E88D" } }, { "name": "INI property name", "scope": "keyword.other.definition.ini", "settings": { "foreground": "#f07178" } }, { "name": "INI section title", "scope": "entity.name.section.group-title.ini", "settings": { "foreground": "#89DDFF" } }, { "name": "C# class", "scope": "source.cs meta.class.identifier storage.type", "settings": { "foreground": "#FFCB6B" } }, { "name": "C# class method", "scope": "source.cs meta.method.identifier entity.name.function", "settings": { "foreground": "#f07178" } }, { "name": "C# function call", "scope": "source.cs meta.method-call meta.method, source.cs entity.name.function", "settings": { "foreground": "#82AAFF" } }, { "name": "C# type", "scope": "source.cs storage.type", "settings": { "foreground": "#FFCB6B" } }, { "name": "C# return type", "scope": "source.cs meta.method.return-type", "settings": { "foreground": "#FFCB6B" } }, { "name": "C# preprocessor", "scope": "source.cs meta.preprocessor", "settings": { "foreground": "#546E7A" } }, { "name": "C# namespace", "scope": "source.cs entity.name.type.namespace", "settings": { "foreground": "#EEFFFF" } }, { "name": "JSX Text", "scope": "meta.jsx.children, SXNested", "settings": { "foreground": "#EEFFFF" } }, { "name": "JSX Components name", "scope": "support.class.component", "settings": { "foreground": "#FFCB6B" } }, { "name": "C-related Block Level Variables", "scope": "source.cpp meta.block variable.other", "settings": { "foreground": "#EEFFFF" } }, { "name": "Member Access Meta", "scope": "source.python meta.member.access.python", "settings": { "foreground": "#f07178" } }, { "name": "Function Call", "scope": "source.python meta.function-call.python, meta.function-call.arguments", "settings": { "foreground": "#82AAFF" } }, { "name": "Blocks", "scope": "meta.block", "settings": { "foreground": "#f07178" } }, { "name": "Function Call", "scope": "entity.name.function.call", "settings": { "foreground": "#82AAFF" } }, { "name": "Namespaces", "scope": "source.php support.other.namespace, source.php meta.use support.class", "settings": { "foreground": "#EEFFFF" } }, { "name": "Constant keywords", "scope": "constant.keyword", "settings": { "foreground": "#89DDFF", "fontStyle": "italic" } }, { "name": "Entity name", "scope": "entity.name.function", "settings": { "foreground": "#82AAFF" } }, { "name": "Global settings", "settings": { "background": "#263238", "foreground": "#EEFFFF" } }, { "name": "Markup Deleted", "scope": ["markup.deleted"], "settings": { "foreground": "#f07178" } }, { "name": "Markup Inserted", "scope": ["markup.inserted"], "settings": { "foreground": "#C3E88D" } }, { "name": "Markup Underline", "scope": ["markup.underline"], "settings": { "fontStyle": "underline" } }, { "name": "Keyword Control", "scope": ["keyword.control"], "settings": { "foreground": "#89DDFF", "fontStyle": "italic" } }, { "name": "Parameter", "scope": ["variable.parameter"], "settings": { "fontStyle": "italic" } }, { "name": "Python - Self Parameter", "scope": ["variable.parameter.function.language.special.self.python"], "settings": { "foreground": "#f07178", "fontStyle": "italic" } }, { "name": "Python - Format Placeholder", "scope": ["constant.character.format.placeholder.other.python"], "settings": { "foreground": "#F78C6C" } }, { "name": "Markdown - Blockquote", "scope": ["markup.quote"], "settings": { "fontStyle": "italic", "foreground": "#89DDFF" } }, { "name": "Markdown - Fenced Language", "scope": ["markup.fenced_code.block"], "settings": { "foreground": "#EEFFFF90" } }, { "name": "Markdown - Blockquote Punctuation", "scope": ["punctuation.definition.quote"], "settings": { "foreground": "#ff9cac" } }, { "name": "JSON Key - Level 0", "scope": [ "meta.structure.dictionary.json support.type.property-name.json" ], "settings": { "foreground": "#C792EA" } }, { "name": "JSON Key - Level 1", "scope": [ "meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json support.type.property-name.json" ], "settings": { "foreground": "#FFCB6B" } }, { "name": "JSON Key - Level 2", "scope": [ "meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json support.type.property-name.json" ], "settings": { "foreground": "#F78C6C" } }, { "name": "JSON Key - Level 3", "scope": [ "meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json support.type.property-name.json" ], "settings": { "foreground": "#f07178" } }, { "name": "JSON Key - Level 4", "scope": [ "meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json support.type.property-name.json" ], "settings": { "foreground": "#916b53" } }, { "name": "JSON Key - Level 5", "scope": [ "meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json support.type.property-name.json" ], "settings": { "foreground": "#82AAFF" } }, { "name": "JSON Key - Level 6", "scope": [ "meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json support.type.property-name.json" ], "settings": { "foreground": "#ff9cac" } }, { "name": "JSON Key - Level 7", "scope": [ "meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json support.type.property-name.json" ], "settings": { "foreground": "#C792EA" } }, { "name": "JSON Key - Level 8", "scope": [ "meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json support.type.property-name.json" ], "settings": { "foreground": "#C3E88D" } } ], "colors": { "focusBorder": "#FFFFFF00", "foreground": "#EEFFFF", "button.background": "#80CBC420", "button.foreground": "#ffffff", "dropdown.background": "#263238", "input.background": "#303C41", "inputOption.activeBorder": "#EEFFFF30", "list.activeSelectionBackground": "#263238", "list.activeSelectionForeground": "#80CBC4", "list.dropBackground": "#f0717880", "list.focusBackground": "#EEFFFF20", "list.focusForeground": "#EEFFFF", "list.highlightForeground": "#80CBC4", "list.hoverBackground": "#263238", "list.inactiveSelectionBackground": "#00000030", "activityBar.background": "#263238", "activityBar.dropBackground": "#f0717880", "activityBarBadge.background": "#80CBC4", "activityBarBadge.foreground": "#000000", "badge.background": "#00000030", "badge.foreground": "#546E7A", "sideBar.background": "#263238", "sideBarSectionHeader.background": "#263238", "editorGroup.dropBackground": "#f0717880", "editorGroup.focusedEmptyBorder": "#f07178", "editorGroupHeader.tabsBackground": "#263238", "tab.border": "#263238", "tab.activeBorder": "#80CBC4", "tab.inactiveBackground": "#263238", "tab.activeModifiedBorder": "#607a86", "tab.inactiveModifiedBorder": "#904348", "tab.unfocusedActiveModifiedBorder": "#c05a60", "tab.unfocusedInactiveModifiedBorder": "#904348", "editor.background": "#263238", "editor.foreground": "#EEFFFF", "editorLineNumber.foreground": "#37474F", "editorLineNumber.activeForeground": "#607a86", "editorCursor.foreground": "#FFCC00", "editor.selectionBackground": "#80CBC420", "editor.selectionHighlightBackground": "#FFCC0020", "editor.wordHighlightBackground": "#ff9cac30", "editor.wordHighlightStrongBackground": "#C3E88D30", "editor.findMatchHighlight": "#EEFFFF", "editor.findRangeHighlightBackground": "#FFCB6B30", "editor.lineHighlightBorder": "#00000000", "editor.rangeHighlightBackground": "#FFFFFF0d", "editorWhitespace.foreground": "#EEFFFF40", "editorWidget.background": "#263238", "editorHoverWidget.background": "#263238", "editorMarkerNavigation.background": "#EEFFFF05", "peekView.border": "#00000030", "peekViewEditor.background": "#EEFFFF05", "peekViewResult.background": "#EEFFFF05", "peekViewTitle.background": "#EEFFFF05", "panel.background": "#263238", "panel.border": "#26323860", "panelTitle.activeBorder": "#80CBC4", "panelTitle.inactiveForeground": "#EEFFFF", "statusBar.background": "#263238", "statusBar.debuggingBackground": "#C792EA", "statusBar.debuggingForeground": "#ffffff", "statusBar.noFolderBackground": "#263238", "statusBarItem.activeBackground": "#f0717880", "statusBarItem.hoverBackground": "#546E7A20", "statusBarItem.remoteBackground": "#80CBC4", "statusBarItem.remoteForeground": "#000000", "titleBar.activeBackground": "#263238", "pickerGroup.border": "#FFFFFF1a", "terminal.ansiBlack": "#000000", "terminal.ansiBlue": "#82AAFF", "terminal.ansiBrightBlack": "#546E7A", "terminal.ansiBrightBlue": "#82AAFF", "terminal.ansiBrightCyan": "#89DDFF", "terminal.ansiBrightGreen": "#C3E88D", "terminal.ansiBrightMagenta": "#C792EA", "terminal.ansiBrightRed": "#f07178", "terminal.ansiBrightWhite": "#ffffff", "terminal.ansiBrightYellow": "#FFCB6B", "terminal.ansiCyan": "#89DDFF", "terminal.ansiGreen": "#C3E88D", "terminal.ansiMagenta": "#C792EA", "terminal.ansiRed": "#f07178", "terminal.ansiWhite": "#ffffff", "terminal.ansiYellow": "#FFCB6B", "debugToolBar.background": "#263238", "debugConsole.errorForeground": "#f07178", "debugConsole.infoForeground": "#89DDFF", "debugConsole.warningForeground": "#FFCB6B", "selection.background": "#00000080", "editorRuler.foreground": "#37474F", "widget.shadow": "#00000030", "scrollbar.shadow": "#00000030", "editorLink.activeForeground": "#EEFFFF", "progressBar.background": "#80CBC4", "pickerGroup.foreground": "#80CBC4", "tree.indentGuidesStroke": "#37474F", "terminalCursor.foreground": "#FFCB6B", "terminalCursor.background": "#000000", "inputOption.activeBackground": "#EEFFFF30", "textLink.foreground": "#80CBC4", "textLink.activeForeground": "#EEFFFF", "sideBar.foreground": "#607a86", "sideBar.border": "#26323860", "sideBarTitle.foreground": "#EEFFFF", "sideBarSectionHeader.border": "#26323860", "panel.dropBackground": "#EEFFFF", "panelTitle.activeForeground": "#FFFFFF", "editor.lineHighlightBackground": "#00000050", "editor.findMatchBackground": "#000000", "editor.findMatchHighlightBackground": "#00000050", "editor.findMatchBorder": "#80CBC4", "editor.findMatchHighlightBorder": "#ffffff30", "editorIndentGuide.background": "#37474F70", "editorIndentGuide.activeBackground": "#37474F", "editorGroup.border": "#00000030", "editorGutter.modifiedBackground": "#82AAFF60", "editorGutter.addedBackground": "#C3E88D60", "editorGutter.deletedBackground": "#f0717860", "activityBar.border": "#26323860", "activityBar.foreground": "#EEFFFF", "activityBar.activeBorder": "#80CBC4", "extensionBadge.remoteForeground": "#EEFFFF", "scrollbarSlider.background": "#EEFFFF20", "scrollbarSlider.hoverBackground": "#EEFFFF10", "scrollbarSlider.activeBackground": "#80CBC4", "tab.unfocusedActiveBorder": "#546E7A", "tab.activeForeground": "#FFFFFF", "tab.inactiveForeground": "#607a86", "tab.activeBackground": "#263238", "tab.unfocusedActiveForeground": "#EEFFFF", "editorWidget.resizeBorder": "#80CBC4", "editorWidget.border": "#80CBC4", "notebook.focusedCellBorder": "#80CBC4", "notebook.inactiveFocusedCellBorder": "#80CBC450", "statusBar.border": "#26323860", "statusBar.foreground": "#546E7A", "editorBracketMatch.border": "#FFCC0050", "editorBracketMatch.background": "#263238", "editorOverviewRuler.findMatchForeground": "#80CBC4", "editorOverviewRuler.border": "#263238", "editorOverviewRuler.errorForeground": "#f0717840", "editorOverviewRuler.infoForeground": "#82AAFF40", "editorOverviewRuler.warningForeground": "#FFCB6B40", "editorInfo.foreground": "#82AAFF70", "editorWarning.foreground": "#FFCB6B70", "editorError.foreground": "#f0717870", "editorHoverWidget.border": "#FFFFFF10", "titleBar.activeForeground": "#EEFFFF", "titleBar.inactiveBackground": "#263238", "titleBar.inactiveForeground": "#607a86", "titleBar.border": "#26323860", "input.foreground": "#EEFFFF", "input.placeholderForeground": "#EEFFFF60", "input.border": "#FFFFFF10", "inputValidation.errorBorder": "#f07178", "inputValidation.infoBorder": "#82AAFF", "inputValidation.warningBorder": "#FFCB6B", "dropdown.border": "#FFFFFF10", "quickInput.background": "#263238", "quickInput.foreground": "#607a86", "list.hoverForeground": "#FFFFFF", "list.inactiveSelectionForeground": "#80CBC4", "quickInput.list.focusBackground": "#EEFFFF20", "editorSuggestWidget.background": "#263238", "editorSuggestWidget.foreground": "#EEFFFF", "editorSuggestWidget.highlightForeground": "#80CBC4", "editorSuggestWidget.selectedBackground": "#00000050", "editorSuggestWidget.border": "#FFFFFF10", "diffEditor.insertedTextBackground": "#89DDFF20", "diffEditor.removedTextBackground": "#ff9cac20", "notifications.background": "#263238", "notifications.foreground": "#EEFFFF", "notificationLink.foreground": "#80CBC4", "extensionButton.prominentBackground": "#C3E88D90", "extensionButton.prominentHoverBackground": "#C3E88D", "extensionButton.prominentForeground": "#000000", "peekViewEditorGutter.background": "#EEFFFF05", "peekViewTitleDescription.foreground": "#EEFFFF60", "peekViewResult.matchHighlightBackground": "#80CBC420", "peekViewEditor.matchHighlightBackground": "#80CBC420", "peekViewResult.selectionBackground": "#607a8670", "gitDecoration.deletedResourceForeground": "#f0717890", "gitDecoration.conflictingResourceForeground": "#FFCB6B90", "gitDecoration.modifiedResourceForeground": "#82AAFF90", "gitDecoration.untrackedResourceForeground": "#C3E88D90", "gitDecoration.ignoredResourceForeground": "#607a8690", "breadcrumb.background": "#263238", "breadcrumb.foreground": "#607a86", "breadcrumb.focusForeground": "#EEFFFF", "breadcrumb.activeSelectionForeground": "#80CBC4", "breadcrumbPicker.background": "#263238", "menu.background": "#263238", "menu.foreground": "#EEFFFF", "menu.selectionBackground": "#00000050", "menu.selectionForeground": "#80CBC4", "menu.selectionBorder": "#00000030", "menu.separatorBackground": "#EEFFFF", "menubar.selectionBackground": "#00000030", "menubar.selectionForeground": "#80CBC4", "menubar.selectionBorder": "#00000030", "settings.dropdownForeground": "#EEFFFF", "settings.dropdownBackground": "#263238", "settings.numberInputForeground": "#EEFFFF", "settings.numberInputBackground": "#263238", "settings.textInputForeground": "#EEFFFF", "settings.textInputBackground": "#263238", "settings.headerForeground": "#80CBC4", "settings.modifiedItemIndicator": "#80CBC4", "settings.checkboxBackground": "#263238", "settings.checkboxForeground": "#EEFFFF", "listFilterWidget.background": "#00000030", "listFilterWidget.outline": "#00000030", "listFilterWidget.noMatchesOutline": "#00000030" } } ================================================ FILE: apps/web/src/lib/shiki/themes/material-lighter.json ================================================ { "name": "material-lighter", "semanticHighlighting": true, "tokenColors": [ { "name": "Global settings", "settings": { "background": "#FAFAFA", "foreground": "#90A4AE" } }, { "name": "String", "scope": "string", "settings": { "foreground": "#91B859" } }, { "name": "Punctuation", "scope": "punctuation, constant.other.symbol", "settings": { "foreground": "#39ADB5" } }, { "name": "String Escape", "scope": "constant.character.escape, text.html constant.character.entity.named", "settings": { "foreground": "#90A4AE" } }, { "name": "Boolean", "scope": "constant.language.boolean", "settings": { "foreground": "#FF5370" } }, { "name": "Number", "scope": "constant.numeric", "settings": { "foreground": "#F76D47" } }, { "name": "Variable", "scope": "variable, variable.parameter, support.variable, variable.language, support.constant, meta.definition.variable entity.name.function, meta.function-call.arguments", "settings": { "foreground": "#90A4AE" } }, { "name": "Other Keyword", "scope": "keyword.other", "settings": { "foreground": "#F76D47" } }, { "name": "Keyword", "scope": "keyword, modifier, variable.language.this, support.type.object, constant.language", "settings": { "foreground": "#39ADB5" } }, { "name": "Function call", "scope": "entity.name.function, support.function", "settings": { "foreground": "#6182B8" } }, { "name": "Storage", "scope": "storage.type, storage.modifier, storage.control", "settings": { "foreground": "#9C3EDA" } }, { "name": "Modules", "scope": "support.module, support.node", "settings": { "foreground": "#E53935", "fontStyle": "italic" } }, { "name": "Type", "scope": "support.type, constant.other.key", "settings": { "foreground": "#E2931D" } }, { "name": "Type", "scope": "entity.name.type, entity.other.inherited-class, entity.other", "settings": { "foreground": "#E2931D" } }, { "name": "Comment", "scope": "comment", "settings": { "foreground": "#90A4AE", "fontStyle": "italic" } }, { "name": "Comment", "scope": "comment punctuation.definition.comment, string.quoted.docstring", "settings": { "foreground": "#90A4AE", "fontStyle": "italic" } }, { "name": "Punctuation", "scope": "punctuation", "settings": { "foreground": "#39ADB5" } }, { "name": "Class", "scope": "entity.name, entity.name.type.class, support.type, support.class, meta.use", "settings": { "foreground": "#E2931D" } }, { "name": "Class variable", "scope": "variable.object.property, meta.field.declaration entity.name.function", "settings": { "foreground": "#E53935" } }, { "name": "Class method", "scope": "meta.definition.method entity.name.function", "settings": { "foreground": "#E53935" } }, { "name": "Function definition", "scope": "meta.function entity.name.function", "settings": { "foreground": "#6182B8" } }, { "name": "Template expression", "scope": "template.expression.begin, template.expression.end, punctuation.definition.template-expression.begin, punctuation.definition.template-expression.end", "settings": { "foreground": "#39ADB5" } }, { "name": "Reset embedded/template expression colors", "scope": "meta.embedded, source.groovy.embedded, meta.template.expression", "settings": { "foreground": "#90A4AE" } }, { "name": "YAML key", "scope": "entity.name.tag.yaml", "settings": { "foreground": "#E53935" } }, { "name": "JSON key", "scope": "meta.object-literal.key, meta.object-literal.key string, support.type.property-name.json", "settings": { "foreground": "#E53935" } }, { "name": "JSON constant", "scope": "constant.language.json", "settings": { "foreground": "#39ADB5" } }, { "name": "CSS class", "scope": "entity.other.attribute-name.class", "settings": { "foreground": "#E2931D" } }, { "name": "CSS ID", "scope": "entity.other.attribute-name.id", "settings": { "foreground": "#F76D47" } }, { "name": "CSS tag", "scope": "source.css entity.name.tag", "settings": { "foreground": "#E2931D" } }, { "name": "CSS properties", "scope": "support.type.property-name.css", "settings": { "foreground": "#8796B0" } }, { "name": "HTML tag outer", "scope": "meta.tag, punctuation.definition.tag", "settings": { "foreground": "#39ADB5" } }, { "name": "HTML tag inner", "scope": "entity.name.tag", "settings": { "foreground": "#E53935" } }, { "name": "HTML tag attribute", "scope": "entity.other.attribute-name", "settings": { "foreground": "#9C3EDA" } }, { "name": "HTML entities", "scope": "punctuation.definition.entity.html", "settings": { "foreground": "#90A4AE" } }, { "name": "Markdown heading", "scope": "markup.heading", "settings": { "foreground": "#39ADB5" } }, { "name": "Markdown link text", "scope": "text.html.markdown meta.link.inline, meta.link.reference", "settings": { "foreground": "#E53935" } }, { "name": "Markdown list item", "scope": "text.html.markdown beginning.punctuation.definition.list", "settings": { "foreground": "#39ADB5" } }, { "name": "Markdown italic", "scope": "markup.italic", "settings": { "foreground": "#E53935", "fontStyle": "italic" } }, { "name": "Markdown bold", "scope": "markup.bold", "settings": { "foreground": "#E53935", "fontStyle": "bold" } }, { "name": "Markdown bold italic", "scope": "markup.bold markup.italic, markup.italic markup.bold", "settings": { "foreground": "#E53935", "fontStyle": "italic bold" } }, { "name": "Markdown code block", "scope": "markup.fenced_code.block.markdown punctuation.definition.markdown", "settings": { "foreground": "#91B859" } }, { "name": "Markdown inline code", "scope": "markup.inline.raw.string.markdown", "settings": { "foreground": "#91B859" } }, { "name": "INI property name", "scope": "keyword.other.definition.ini", "settings": { "foreground": "#E53935" } }, { "name": "INI section title", "scope": "entity.name.section.group-title.ini", "settings": { "foreground": "#39ADB5" } }, { "name": "C# class", "scope": "source.cs meta.class.identifier storage.type", "settings": { "foreground": "#E2931D" } }, { "name": "C# class method", "scope": "source.cs meta.method.identifier entity.name.function", "settings": { "foreground": "#E53935" } }, { "name": "C# function call", "scope": "source.cs meta.method-call meta.method, source.cs entity.name.function", "settings": { "foreground": "#6182B8" } }, { "name": "C# type", "scope": "source.cs storage.type", "settings": { "foreground": "#E2931D" } }, { "name": "C# return type", "scope": "source.cs meta.method.return-type", "settings": { "foreground": "#E2931D" } }, { "name": "C# preprocessor", "scope": "source.cs meta.preprocessor", "settings": { "foreground": "#90A4AE" } }, { "name": "C# namespace", "scope": "source.cs entity.name.type.namespace", "settings": { "foreground": "#90A4AE" } }, { "name": "JSX Text", "scope": "meta.jsx.children, SXNested", "settings": { "foreground": "#90A4AE" } }, { "name": "JSX Components name", "scope": "support.class.component", "settings": { "foreground": "#E2931D" } }, { "name": "C-related Block Level Variables", "scope": "source.cpp meta.block variable.other", "settings": { "foreground": "#90A4AE" } }, { "name": "Member Access Meta", "scope": "source.python meta.member.access.python", "settings": { "foreground": "#E53935" } }, { "name": "Function Call", "scope": "source.python meta.function-call.python, meta.function-call.arguments", "settings": { "foreground": "#6182B8" } }, { "name": "Blocks", "scope": "meta.block", "settings": { "foreground": "#E53935" } }, { "name": "Function Call", "scope": "entity.name.function.call", "settings": { "foreground": "#6182B8" } }, { "name": "Namespaces", "scope": "source.php support.other.namespace, source.php meta.use support.class", "settings": { "foreground": "#90A4AE" } }, { "name": "Constant keywords", "scope": "constant.keyword", "settings": { "foreground": "#39ADB5", "fontStyle": "italic" } }, { "name": "Entity name", "scope": "entity.name.function", "settings": { "foreground": "#6182B8" } }, { "name": "Global settings", "settings": { "background": "#FAFAFA", "foreground": "#90A4AE" } }, { "name": "Markup Deleted", "scope": ["markup.deleted"], "settings": { "foreground": "#E53935" } }, { "name": "Markup Inserted", "scope": ["markup.inserted"], "settings": { "foreground": "#91B859" } }, { "name": "Markup Underline", "scope": ["markup.underline"], "settings": { "fontStyle": "underline" } }, { "name": "Keyword Control", "scope": ["keyword.control"], "settings": { "foreground": "#39ADB5", "fontStyle": "italic" } }, { "name": "Parameter", "scope": ["variable.parameter"], "settings": { "fontStyle": "italic" } }, { "name": "Python - Self Parameter", "scope": ["variable.parameter.function.language.special.self.python"], "settings": { "foreground": "#E53935", "fontStyle": "italic" } }, { "name": "Python - Format Placeholder", "scope": ["constant.character.format.placeholder.other.python"], "settings": { "foreground": "#F76D47" } }, { "name": "Markdown - Blockquote", "scope": ["markup.quote"], "settings": { "fontStyle": "italic", "foreground": "#39ADB5" } }, { "name": "Markdown - Fenced Language", "scope": ["markup.fenced_code.block"], "settings": { "foreground": "#90A4AE90" } }, { "name": "Markdown - Blockquote Punctuation", "scope": ["punctuation.definition.quote"], "settings": { "foreground": "#FF5370" } }, { "name": "JSON Key - Level 0", "scope": [ "meta.structure.dictionary.json support.type.property-name.json" ], "settings": { "foreground": "#9C3EDA" } }, { "name": "JSON Key - Level 1", "scope": [ "meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json support.type.property-name.json" ], "settings": { "foreground": "#E2931D" } }, { "name": "JSON Key - Level 2", "scope": [ "meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json support.type.property-name.json" ], "settings": { "foreground": "#F76D47" } }, { "name": "JSON Key - Level 3", "scope": [ "meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json support.type.property-name.json" ], "settings": { "foreground": "#E53935" } }, { "name": "JSON Key - Level 4", "scope": [ "meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json support.type.property-name.json" ], "settings": { "foreground": "#916b53" } }, { "name": "JSON Key - Level 5", "scope": [ "meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json support.type.property-name.json" ], "settings": { "foreground": "#6182B8" } }, { "name": "JSON Key - Level 6", "scope": [ "meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json support.type.property-name.json" ], "settings": { "foreground": "#FF5370" } }, { "name": "JSON Key - Level 7", "scope": [ "meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json support.type.property-name.json" ], "settings": { "foreground": "#9C3EDA" } }, { "name": "JSON Key - Level 8", "scope": [ "meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json support.type.property-name.json" ], "settings": { "foreground": "#91B859" } } ], "colors": { "focusBorder": "#FFFFFF00", "foreground": "#90A4AE", "button.background": "#80CBC440", "button.foreground": "#ffffff", "dropdown.background": "#FAFAFA", "input.background": "#EEEEEE", "inputOption.activeBorder": "#90A4AE30", "list.activeSelectionBackground": "#FAFAFA", "list.activeSelectionForeground": "#80CBC4", "list.dropBackground": "#E5393580", "list.focusBackground": "#90A4AE20", "list.focusForeground": "#90A4AE", "list.highlightForeground": "#80CBC4", "list.hoverBackground": "#FAFAFA", "list.inactiveSelectionBackground": "#CCD7DA50", "activityBar.background": "#FAFAFA", "activityBar.dropBackground": "#E5393580", "activityBarBadge.background": "#80CBC4", "activityBarBadge.foreground": "#000000", "badge.background": "#CCD7DA30", "badge.foreground": "#90A4AE", "sideBar.background": "#FAFAFA", "sideBarSectionHeader.background": "#FAFAFA", "editorGroup.dropBackground": "#E5393580", "editorGroup.focusedEmptyBorder": "#E53935", "editorGroupHeader.tabsBackground": "#FAFAFA", "tab.border": "#FAFAFA", "tab.activeBorder": "#80CBC4", "tab.inactiveBackground": "#FAFAFA", "tab.activeModifiedBorder": "#7E939E", "tab.inactiveModifiedBorder": "#89221f", "tab.unfocusedActiveModifiedBorder": "#b72d2a", "tab.unfocusedInactiveModifiedBorder": "#89221f", "editor.background": "#FAFAFA", "editor.foreground": "#90A4AE", "editorLineNumber.foreground": "#CFD8DC", "editorLineNumber.activeForeground": "#7E939E", "editorCursor.foreground": "#272727", "editor.selectionBackground": "#80CBC440", "editor.selectionHighlightBackground": "#27272720", "editor.wordHighlightBackground": "#FF537030", "editor.wordHighlightStrongBackground": "#91B85930", "editor.findMatchHighlight": "#90A4AE", "editor.findRangeHighlightBackground": "#E2931D30", "editor.lineHighlightBorder": "#CCD7DA00", "editor.rangeHighlightBackground": "#FFFFFF0d", "editorWhitespace.foreground": "#90A4AE40", "editorWidget.background": "#FAFAFA", "editorHoverWidget.background": "#FAFAFA", "editorMarkerNavigation.background": "#90A4AE05", "peekView.border": "#00000020", "peekViewEditor.background": "#90A4AE05", "peekViewResult.background": "#90A4AE05", "peekViewTitle.background": "#90A4AE05", "panel.background": "#FAFAFA", "panel.border": "#FAFAFA60", "panelTitle.activeBorder": "#80CBC4", "panelTitle.inactiveForeground": "#90A4AE", "statusBar.background": "#FAFAFA", "statusBar.debuggingBackground": "#9C3EDA", "statusBar.debuggingForeground": "#FFFFFF", "statusBar.noFolderBackground": "#FAFAFA", "statusBarItem.activeBackground": "#E5393580", "statusBarItem.hoverBackground": "#90A4AE20", "statusBarItem.remoteBackground": "#80CBC4", "statusBarItem.remoteForeground": "#000000", "titleBar.activeBackground": "#FAFAFA", "pickerGroup.border": "#FFFFFF1a", "terminal.ansiBlack": "#000000", "terminal.ansiBlue": "#6182B8", "terminal.ansiBrightBlack": "#90A4AE", "terminal.ansiBrightBlue": "#6182B8", "terminal.ansiBrightCyan": "#39ADB5", "terminal.ansiBrightGreen": "#91B859", "terminal.ansiBrightMagenta": "#9C3EDA", "terminal.ansiBrightRed": "#E53935", "terminal.ansiBrightWhite": "#FFFFFF", "terminal.ansiBrightYellow": "#E2931D", "terminal.ansiCyan": "#39ADB5", "terminal.ansiGreen": "#91B859", "terminal.ansiMagenta": "#9C3EDA", "terminal.ansiRed": "#E53935", "terminal.ansiWhite": "#FFFFFF", "terminal.ansiYellow": "#E2931D", "debugToolBar.background": "#FAFAFA", "debugConsole.errorForeground": "#E53935", "debugConsole.infoForeground": "#39ADB5", "debugConsole.warningForeground": "#E2931D", "selection.background": "#CCD7DA80", "editorRuler.foreground": "#B0BEC5", "widget.shadow": "#00000020", "scrollbar.shadow": "#00000020", "editorLink.activeForeground": "#90A4AE", "progressBar.background": "#80CBC4", "pickerGroup.foreground": "#80CBC4", "tree.indentGuidesStroke": "#B0BEC5", "terminalCursor.foreground": "#E2931D", "terminalCursor.background": "#000000", "inputOption.activeBackground": "#90A4AE30", "textLink.foreground": "#80CBC4", "textLink.activeForeground": "#90A4AE", "sideBar.foreground": "#7E939E", "sideBar.border": "#FAFAFA60", "sideBarTitle.foreground": "#90A4AE", "sideBarSectionHeader.border": "#FAFAFA60", "panel.dropBackground": "#90A4AE", "panelTitle.activeForeground": "#000000", "editor.lineHighlightBackground": "#CCD7DA50", "editor.findMatchBackground": "#00000020", "editor.findMatchHighlightBackground": "#00000010", "editor.findMatchBorder": "#80CBC4", "editor.findMatchHighlightBorder": "#00000030", "editorIndentGuide.background": "#B0BEC570", "editorIndentGuide.activeBackground": "#B0BEC5", "editorGroup.border": "#00000020", "editorGutter.modifiedBackground": "#6182B860", "editorGutter.addedBackground": "#91B85960", "editorGutter.deletedBackground": "#E5393560", "activityBar.border": "#FAFAFA60", "activityBar.foreground": "#90A4AE", "activityBar.activeBorder": "#80CBC4", "extensionBadge.remoteForeground": "#90A4AE", "scrollbarSlider.background": "#90A4AE20", "scrollbarSlider.hoverBackground": "#90A4AE10", "scrollbarSlider.activeBackground": "#80CBC4", "tab.unfocusedActiveBorder": "#90A4AE", "tab.activeForeground": "#000000", "tab.inactiveForeground": "#7E939E", "tab.activeBackground": "#FAFAFA", "tab.unfocusedActiveForeground": "#90A4AE", "editorWidget.resizeBorder": "#80CBC4", "editorWidget.border": "#80CBC4", "notebook.focusedCellBorder": "#80CBC4", "notebook.inactiveFocusedCellBorder": "#80CBC450", "statusBar.border": "#FAFAFA60", "statusBar.foreground": "#7E939E", "editorBracketMatch.border": "#27272750", "editorBracketMatch.background": "#FAFAFA", "editorOverviewRuler.findMatchForeground": "#80CBC4", "editorOverviewRuler.border": "#FAFAFA", "editorOverviewRuler.errorForeground": "#E5393540", "editorOverviewRuler.infoForeground": "#6182B840", "editorOverviewRuler.warningForeground": "#E2931D40", "editorInfo.foreground": "#6182B870", "editorWarning.foreground": "#E2931D70", "editorError.foreground": "#E5393570", "editorHoverWidget.border": "#00000010", "titleBar.activeForeground": "#90A4AE", "titleBar.inactiveBackground": "#FAFAFA", "titleBar.inactiveForeground": "#7E939E", "titleBar.border": "#FAFAFA60", "input.foreground": "#90A4AE", "input.placeholderForeground": "#90A4AE60", "input.border": "#00000010", "inputValidation.errorBorder": "#E53935", "inputValidation.infoBorder": "#6182B8", "inputValidation.warningBorder": "#E2931D", "dropdown.border": "#00000010", "quickInput.background": "#FAFAFA", "quickInput.foreground": "#7E939E", "list.hoverForeground": "#B1C7D3", "list.inactiveSelectionForeground": "#80CBC4", "quickInput.list.focusBackground": "#90A4AE20", "editorSuggestWidget.background": "#FAFAFA", "editorSuggestWidget.foreground": "#90A4AE", "editorSuggestWidget.highlightForeground": "#80CBC4", "editorSuggestWidget.selectedBackground": "#CCD7DA50", "editorSuggestWidget.border": "#00000010", "diffEditor.insertedTextBackground": "#39ADB520", "diffEditor.removedTextBackground": "#FF537020", "notifications.background": "#FAFAFA", "notifications.foreground": "#90A4AE", "notificationLink.foreground": "#80CBC4", "extensionButton.prominentBackground": "#91B85990", "extensionButton.prominentHoverBackground": "#91B859", "extensionButton.prominentForeground": "#000000", "peekViewEditorGutter.background": "#90A4AE05", "peekViewTitleDescription.foreground": "#90A4AE60", "peekViewResult.matchHighlightBackground": "#80CBC440", "peekViewEditor.matchHighlightBackground": "#80CBC440", "peekViewResult.selectionBackground": "#7E939E70", "gitDecoration.deletedResourceForeground": "#E5393590", "gitDecoration.conflictingResourceForeground": "#E2931D90", "gitDecoration.modifiedResourceForeground": "#6182B890", "gitDecoration.untrackedResourceForeground": "#91B85990", "gitDecoration.ignoredResourceForeground": "#7E939E90", "breadcrumb.background": "#FAFAFA", "breadcrumb.foreground": "#7E939E", "breadcrumb.focusForeground": "#90A4AE", "breadcrumb.activeSelectionForeground": "#80CBC4", "breadcrumbPicker.background": "#FAFAFA", "menu.background": "#FAFAFA", "menu.foreground": "#90A4AE", "menu.selectionBackground": "#CCD7DA50", "menu.selectionForeground": "#80CBC4", "menu.selectionBorder": "#CCD7DA50", "menu.separatorBackground": "#90A4AE", "menubar.selectionBackground": "#CCD7DA50", "menubar.selectionForeground": "#80CBC4", "menubar.selectionBorder": "#CCD7DA50", "settings.dropdownForeground": "#90A4AE", "settings.dropdownBackground": "#FAFAFA", "settings.numberInputForeground": "#90A4AE", "settings.numberInputBackground": "#FAFAFA", "settings.textInputForeground": "#90A4AE", "settings.textInputBackground": "#FAFAFA", "settings.headerForeground": "#80CBC4", "settings.modifiedItemIndicator": "#80CBC4", "settings.checkboxBackground": "#FAFAFA", "settings.checkboxForeground": "#90A4AE", "listFilterWidget.background": "#CCD7DA50", "listFilterWidget.outline": "#CCD7DA50", "listFilterWidget.noMatchesOutline": "#CCD7DA50" } } ================================================ FILE: apps/web/src/lib/shiki/themes/material-ocean.json ================================================ { "name": "material-ocean", "semanticHighlighting": true, "tokenColors": [ { "name": "Global settings", "settings": { "background": "#0F111A", "foreground": "#A6ACCD" } }, { "name": "String", "scope": "string", "settings": { "foreground": "#C3E88D" } }, { "name": "Punctuation", "scope": "punctuation, constant.other.symbol", "settings": { "foreground": "#89DDFF" } }, { "name": "String Escape", "scope": "constant.character.escape, text.html constant.character.entity.named", "settings": { "foreground": "#A6ACCD" } }, { "name": "Boolean", "scope": "constant.language.boolean", "settings": { "foreground": "#ff9cac" } }, { "name": "Number", "scope": "constant.numeric", "settings": { "foreground": "#F78C6C" } }, { "name": "Variable", "scope": "variable, variable.parameter, support.variable, variable.language, support.constant, meta.definition.variable entity.name.function, meta.function-call.arguments", "settings": { "foreground": "#A6ACCD" } }, { "name": "Other Keyword", "scope": "keyword.other", "settings": { "foreground": "#F78C6C" } }, { "name": "Keyword", "scope": "keyword, modifier, variable.language.this, support.type.object, constant.language", "settings": { "foreground": "#89DDFF" } }, { "name": "Function call", "scope": "entity.name.function, support.function", "settings": { "foreground": "#82AAFF" } }, { "name": "Storage", "scope": "storage.type, storage.modifier, storage.control", "settings": { "foreground": "#C792EA" } }, { "name": "Modules", "scope": "support.module, support.node", "settings": { "foreground": "#f07178", "fontStyle": "italic" } }, { "name": "Type", "scope": "support.type, constant.other.key", "settings": { "foreground": "#FFCB6B" } }, { "name": "Type", "scope": "entity.name.type, entity.other.inherited-class, entity.other", "settings": { "foreground": "#FFCB6B" } }, { "name": "Comment", "scope": "comment", "settings": { "foreground": "#464B5D", "fontStyle": "italic" } }, { "name": "Comment", "scope": "comment punctuation.definition.comment, string.quoted.docstring", "settings": { "foreground": "#464B5D", "fontStyle": "italic" } }, { "name": "Punctuation", "scope": "punctuation", "settings": { "foreground": "#89DDFF" } }, { "name": "Class", "scope": "entity.name, entity.name.type.class, support.type, support.class, meta.use", "settings": { "foreground": "#FFCB6B" } }, { "name": "Class variable", "scope": "variable.object.property, meta.field.declaration entity.name.function", "settings": { "foreground": "#f07178" } }, { "name": "Class method", "scope": "meta.definition.method entity.name.function", "settings": { "foreground": "#f07178" } }, { "name": "Function definition", "scope": "meta.function entity.name.function", "settings": { "foreground": "#82AAFF" } }, { "name": "Template expression", "scope": "template.expression.begin, template.expression.end, punctuation.definition.template-expression.begin, punctuation.definition.template-expression.end", "settings": { "foreground": "#89DDFF" } }, { "name": "Reset embedded/template expression colors", "scope": "meta.embedded, source.groovy.embedded, meta.template.expression", "settings": { "foreground": "#A6ACCD" } }, { "name": "YAML key", "scope": "entity.name.tag.yaml", "settings": { "foreground": "#f07178" } }, { "name": "JSON key", "scope": "meta.object-literal.key, meta.object-literal.key string, support.type.property-name.json", "settings": { "foreground": "#f07178" } }, { "name": "JSON constant", "scope": "constant.language.json", "settings": { "foreground": "#89DDFF" } }, { "name": "CSS class", "scope": "entity.other.attribute-name.class", "settings": { "foreground": "#FFCB6B" } }, { "name": "CSS ID", "scope": "entity.other.attribute-name.id", "settings": { "foreground": "#F78C6C" } }, { "name": "CSS tag", "scope": "source.css entity.name.tag", "settings": { "foreground": "#FFCB6B" } }, { "name": "CSS properties", "scope": "support.type.property-name.css", "settings": { "foreground": "#B2CCD6" } }, { "name": "HTML tag outer", "scope": "meta.tag, punctuation.definition.tag", "settings": { "foreground": "#89DDFF" } }, { "name": "HTML tag inner", "scope": "entity.name.tag", "settings": { "foreground": "#f07178" } }, { "name": "HTML tag attribute", "scope": "entity.other.attribute-name", "settings": { "foreground": "#C792EA" } }, { "name": "HTML entities", "scope": "punctuation.definition.entity.html", "settings": { "foreground": "#A6ACCD" } }, { "name": "Markdown heading", "scope": "markup.heading", "settings": { "foreground": "#89DDFF" } }, { "name": "Markdown link text", "scope": "text.html.markdown meta.link.inline, meta.link.reference", "settings": { "foreground": "#f07178" } }, { "name": "Markdown list item", "scope": "text.html.markdown beginning.punctuation.definition.list", "settings": { "foreground": "#89DDFF" } }, { "name": "Markdown italic", "scope": "markup.italic", "settings": { "foreground": "#f07178", "fontStyle": "italic" } }, { "name": "Markdown bold", "scope": "markup.bold", "settings": { "foreground": "#f07178", "fontStyle": "bold" } }, { "name": "Markdown bold italic", "scope": "markup.bold markup.italic, markup.italic markup.bold", "settings": { "foreground": "#f07178", "fontStyle": "italic bold" } }, { "name": "Markdown code block", "scope": "markup.fenced_code.block.markdown punctuation.definition.markdown", "settings": { "foreground": "#C3E88D" } }, { "name": "Markdown inline code", "scope": "markup.inline.raw.string.markdown", "settings": { "foreground": "#C3E88D" } }, { "name": "INI property name", "scope": "keyword.other.definition.ini", "settings": { "foreground": "#f07178" } }, { "name": "INI section title", "scope": "entity.name.section.group-title.ini", "settings": { "foreground": "#89DDFF" } }, { "name": "C# class", "scope": "source.cs meta.class.identifier storage.type", "settings": { "foreground": "#FFCB6B" } }, { "name": "C# class method", "scope": "source.cs meta.method.identifier entity.name.function", "settings": { "foreground": "#f07178" } }, { "name": "C# function call", "scope": "source.cs meta.method-call meta.method, source.cs entity.name.function", "settings": { "foreground": "#82AAFF" } }, { "name": "C# type", "scope": "source.cs storage.type", "settings": { "foreground": "#FFCB6B" } }, { "name": "C# return type", "scope": "source.cs meta.method.return-type", "settings": { "foreground": "#FFCB6B" } }, { "name": "C# preprocessor", "scope": "source.cs meta.preprocessor", "settings": { "foreground": "#464B5D" } }, { "name": "C# namespace", "scope": "source.cs entity.name.type.namespace", "settings": { "foreground": "#A6ACCD" } }, { "name": "JSX Text", "scope": "meta.jsx.children, SXNested", "settings": { "foreground": "#A6ACCD" } }, { "name": "JSX Components name", "scope": "support.class.component", "settings": { "foreground": "#FFCB6B" } }, { "name": "C-related Block Level Variables", "scope": "source.cpp meta.block variable.other", "settings": { "foreground": "#A6ACCD" } }, { "name": "Member Access Meta", "scope": "source.python meta.member.access.python", "settings": { "foreground": "#f07178" } }, { "name": "Function Call", "scope": "source.python meta.function-call.python, meta.function-call.arguments", "settings": { "foreground": "#82AAFF" } }, { "name": "Blocks", "scope": "meta.block", "settings": { "foreground": "#f07178" } }, { "name": "Function Call", "scope": "entity.name.function.call", "settings": { "foreground": "#82AAFF" } }, { "name": "Namespaces", "scope": "source.php support.other.namespace, source.php meta.use support.class", "settings": { "foreground": "#A6ACCD" } }, { "name": "Constant keywords", "scope": "constant.keyword", "settings": { "foreground": "#89DDFF", "fontStyle": "italic" } }, { "name": "Entity name", "scope": "entity.name.function", "settings": { "foreground": "#82AAFF" } }, { "name": "Global settings", "settings": { "background": "#0F111A", "foreground": "#A6ACCD" } }, { "name": "Markup Deleted", "scope": ["markup.deleted"], "settings": { "foreground": "#f07178" } }, { "name": "Markup Inserted", "scope": ["markup.inserted"], "settings": { "foreground": "#C3E88D" } }, { "name": "Markup Underline", "scope": ["markup.underline"], "settings": { "fontStyle": "underline" } }, { "name": "Keyword Control", "scope": ["keyword.control"], "settings": { "foreground": "#89DDFF", "fontStyle": "italic" } }, { "name": "Parameter", "scope": ["variable.parameter"], "settings": { "fontStyle": "italic" } }, { "name": "Python - Self Parameter", "scope": ["variable.parameter.function.language.special.self.python"], "settings": { "foreground": "#f07178", "fontStyle": "italic" } }, { "name": "Python - Format Placeholder", "scope": ["constant.character.format.placeholder.other.python"], "settings": { "foreground": "#F78C6C" } }, { "name": "Markdown - Blockquote", "scope": ["markup.quote"], "settings": { "fontStyle": "italic", "foreground": "#89DDFF" } }, { "name": "Markdown - Fenced Language", "scope": ["markup.fenced_code.block"], "settings": { "foreground": "#A6ACCD90" } }, { "name": "Markdown - Blockquote Punctuation", "scope": ["punctuation.definition.quote"], "settings": { "foreground": "#ff9cac" } }, { "name": "JSON Key - Level 0", "scope": [ "meta.structure.dictionary.json support.type.property-name.json" ], "settings": { "foreground": "#C792EA" } }, { "name": "JSON Key - Level 1", "scope": [ "meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json support.type.property-name.json" ], "settings": { "foreground": "#FFCB6B" } }, { "name": "JSON Key - Level 2", "scope": [ "meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json support.type.property-name.json" ], "settings": { "foreground": "#F78C6C" } }, { "name": "JSON Key - Level 3", "scope": [ "meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json support.type.property-name.json" ], "settings": { "foreground": "#f07178" } }, { "name": "JSON Key - Level 4", "scope": [ "meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json support.type.property-name.json" ], "settings": { "foreground": "#916b53" } }, { "name": "JSON Key - Level 5", "scope": [ "meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json support.type.property-name.json" ], "settings": { "foreground": "#82AAFF" } }, { "name": "JSON Key - Level 6", "scope": [ "meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json support.type.property-name.json" ], "settings": { "foreground": "#ff9cac" } }, { "name": "JSON Key - Level 7", "scope": [ "meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json support.type.property-name.json" ], "settings": { "foreground": "#C792EA" } }, { "name": "JSON Key - Level 8", "scope": [ "meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json support.type.property-name.json" ], "settings": { "foreground": "#C3E88D" } } ], "colors": { "focusBorder": "#FFFFFF00", "foreground": "#A6ACCD", "button.background": "#717CB450", "button.foreground": "#ffffff", "dropdown.background": "#0F111A", "input.background": "#1A1C25", "inputOption.activeBorder": "#A6ACCD30", "list.activeSelectionBackground": "#0F111A", "list.activeSelectionForeground": "#80CBC4", "list.dropBackground": "#f0717880", "list.focusBackground": "#A6ACCD20", "list.focusForeground": "#A6ACCD", "list.highlightForeground": "#80CBC4", "list.hoverBackground": "#0F111A", "list.inactiveSelectionBackground": "#00000030", "activityBar.background": "#0F111A", "activityBar.dropBackground": "#f0717880", "activityBarBadge.background": "#80CBC4", "activityBarBadge.foreground": "#000000", "badge.background": "#00000030", "badge.foreground": "#464B5D", "sideBar.background": "#0F111A", "sideBarSectionHeader.background": "#0F111A", "editorGroup.dropBackground": "#f0717880", "editorGroup.focusedEmptyBorder": "#f07178", "editorGroupHeader.tabsBackground": "#0F111A", "tab.border": "#0F111A", "tab.activeBorder": "#80CBC4", "tab.inactiveBackground": "#0F111A", "tab.activeModifiedBorder": "#525975", "tab.inactiveModifiedBorder": "#904348", "tab.unfocusedActiveModifiedBorder": "#c05a60", "tab.unfocusedInactiveModifiedBorder": "#904348", "editor.background": "#0F111A", "editor.foreground": "#A6ACCD", "editorLineNumber.foreground": "#3B3F5180", "editorLineNumber.activeForeground": "#525975", "editorCursor.foreground": "#FFCC00", "editor.selectionBackground": "#717CB450", "editor.selectionHighlightBackground": "#FFCC0020", "editor.wordHighlightBackground": "#ff9cac30", "editor.wordHighlightStrongBackground": "#C3E88D30", "editor.findMatchHighlight": "#A6ACCD", "editor.findRangeHighlightBackground": "#FFCB6B30", "editor.lineHighlightBorder": "#00000000", "editor.rangeHighlightBackground": "#FFFFFF0d", "editorWhitespace.foreground": "#A6ACCD40", "editorWidget.background": "#0F111A", "editorHoverWidget.background": "#0F111A", "editorMarkerNavigation.background": "#A6ACCD05", "peekView.border": "#00000030", "peekViewEditor.background": "#A6ACCD05", "peekViewResult.background": "#A6ACCD05", "peekViewTitle.background": "#A6ACCD05", "panel.background": "#0F111A", "panel.border": "#0F111A60", "panelTitle.activeBorder": "#80CBC4", "panelTitle.inactiveForeground": "#A6ACCD", "statusBar.background": "#0F111A", "statusBar.debuggingBackground": "#C792EA", "statusBar.debuggingForeground": "#ffffff", "statusBar.noFolderBackground": "#0F111A", "statusBarItem.activeBackground": "#f0717880", "statusBarItem.hoverBackground": "#464B5D20", "statusBarItem.remoteBackground": "#80CBC4", "statusBarItem.remoteForeground": "#000000", "titleBar.activeBackground": "#0F111A", "pickerGroup.border": "#FFFFFF1a", "terminal.ansiBlack": "#000000", "terminal.ansiBlue": "#82AAFF", "terminal.ansiBrightBlack": "#464B5D", "terminal.ansiBrightBlue": "#82AAFF", "terminal.ansiBrightCyan": "#89DDFF", "terminal.ansiBrightGreen": "#C3E88D", "terminal.ansiBrightMagenta": "#C792EA", "terminal.ansiBrightRed": "#f07178", "terminal.ansiBrightWhite": "#ffffff", "terminal.ansiBrightYellow": "#FFCB6B", "terminal.ansiCyan": "#89DDFF", "terminal.ansiGreen": "#C3E88D", "terminal.ansiMagenta": "#C792EA", "terminal.ansiRed": "#f07178", "terminal.ansiWhite": "#ffffff", "terminal.ansiYellow": "#FFCB6B", "debugToolBar.background": "#0F111A", "debugConsole.errorForeground": "#f07178", "debugConsole.infoForeground": "#89DDFF", "debugConsole.warningForeground": "#FFCB6B", "selection.background": "#00000080", "editorRuler.foreground": "#3B3F51", "widget.shadow": "#00000030", "scrollbar.shadow": "#00000030", "editorLink.activeForeground": "#A6ACCD", "progressBar.background": "#80CBC4", "pickerGroup.foreground": "#80CBC4", "tree.indentGuidesStroke": "#3B3F51", "terminalCursor.foreground": "#FFCB6B", "terminalCursor.background": "#000000", "inputOption.activeBackground": "#A6ACCD30", "textLink.foreground": "#80CBC4", "textLink.activeForeground": "#A6ACCD", "sideBar.foreground": "#525975", "sideBar.border": "#0F111A60", "sideBarTitle.foreground": "#A6ACCD", "sideBarSectionHeader.border": "#0F111A60", "panel.dropBackground": "#A6ACCD", "panelTitle.activeForeground": "#FFFFFF", "editor.lineHighlightBackground": "#00000050", "editor.findMatchBackground": "#000000", "editor.findMatchHighlightBackground": "#00000050", "editor.findMatchBorder": "#80CBC4", "editor.findMatchHighlightBorder": "#ffffff30", "editorIndentGuide.background": "#3B3F5170", "editorIndentGuide.activeBackground": "#3B3F51", "editorGroup.border": "#00000030", "editorGutter.modifiedBackground": "#82AAFF60", "editorGutter.addedBackground": "#C3E88D60", "editorGutter.deletedBackground": "#f0717860", "activityBar.border": "#0F111A60", "activityBar.foreground": "#A6ACCD", "activityBar.activeBorder": "#80CBC4", "extensionBadge.remoteForeground": "#A6ACCD", "scrollbarSlider.background": "#8F93A220", "scrollbarSlider.hoverBackground": "#8F93A210", "scrollbarSlider.activeBackground": "#80CBC4", "tab.unfocusedActiveBorder": "#464B5D", "tab.activeForeground": "#FFFFFF", "tab.inactiveForeground": "#525975", "tab.activeBackground": "#0F111A", "tab.unfocusedActiveForeground": "#A6ACCD", "editorWidget.resizeBorder": "#80CBC4", "editorWidget.border": "#80CBC4", "notebook.focusedCellBorder": "#80CBC4", "notebook.inactiveFocusedCellBorder": "#80CBC450", "statusBar.border": "#0F111A60", "statusBar.foreground": "#4B526D", "editorBracketMatch.border": "#FFCC0050", "editorBracketMatch.background": "#0F111A", "editorOverviewRuler.findMatchForeground": "#80CBC4", "editorOverviewRuler.border": "#0F111A", "editorOverviewRuler.errorForeground": "#f0717840", "editorOverviewRuler.infoForeground": "#82AAFF40", "editorOverviewRuler.warningForeground": "#FFCB6B40", "editorInfo.foreground": "#82AAFF70", "editorWarning.foreground": "#FFCB6B70", "editorError.foreground": "#f0717870", "editorHoverWidget.border": "#FFFFFF10", "titleBar.activeForeground": "#A6ACCD", "titleBar.inactiveBackground": "#0F111A", "titleBar.inactiveForeground": "#525975", "titleBar.border": "#0F111A60", "input.foreground": "#A6ACCD", "input.placeholderForeground": "#A6ACCD60", "input.border": "#FFFFFF10", "inputValidation.errorBorder": "#f07178", "inputValidation.infoBorder": "#82AAFF", "inputValidation.warningBorder": "#FFCB6B", "dropdown.border": "#FFFFFF10", "quickInput.background": "#0F111A", "quickInput.foreground": "#525975", "list.hoverForeground": "#FFFFFF", "list.inactiveSelectionForeground": "#80CBC4", "quickInput.list.focusBackground": "#A6ACCD20", "editorSuggestWidget.background": "#0F111A", "editorSuggestWidget.foreground": "#A6ACCD", "editorSuggestWidget.highlightForeground": "#80CBC4", "editorSuggestWidget.selectedBackground": "#00000050", "editorSuggestWidget.border": "#FFFFFF10", "diffEditor.insertedTextBackground": "#89DDFF20", "diffEditor.removedTextBackground": "#ff9cac20", "notifications.background": "#0F111A", "notifications.foreground": "#A6ACCD", "notificationLink.foreground": "#80CBC4", "extensionButton.prominentBackground": "#C3E88D90", "extensionButton.prominentHoverBackground": "#C3E88D", "extensionButton.prominentForeground": "#000000", "peekViewEditorGutter.background": "#A6ACCD05", "peekViewTitleDescription.foreground": "#A6ACCD60", "peekViewResult.matchHighlightBackground": "#717CB450", "peekViewEditor.matchHighlightBackground": "#717CB450", "peekViewResult.selectionBackground": "#52597570", "gitDecoration.deletedResourceForeground": "#f0717890", "gitDecoration.conflictingResourceForeground": "#FFCB6B90", "gitDecoration.modifiedResourceForeground": "#82AAFF90", "gitDecoration.untrackedResourceForeground": "#C3E88D90", "gitDecoration.ignoredResourceForeground": "#52597590", "breadcrumb.background": "#0F111A", "breadcrumb.foreground": "#525975", "breadcrumb.focusForeground": "#A6ACCD", "breadcrumb.activeSelectionForeground": "#80CBC4", "breadcrumbPicker.background": "#0F111A", "menu.background": "#0F111A", "menu.foreground": "#A6ACCD", "menu.selectionBackground": "#00000050", "menu.selectionForeground": "#80CBC4", "menu.selectionBorder": "#00000030", "menu.separatorBackground": "#A6ACCD", "menubar.selectionBackground": "#00000030", "menubar.selectionForeground": "#80CBC4", "menubar.selectionBorder": "#00000030", "settings.dropdownForeground": "#A6ACCD", "settings.dropdownBackground": "#0F111A", "settings.numberInputForeground": "#A6ACCD", "settings.numberInputBackground": "#0F111A", "settings.textInputForeground": "#A6ACCD", "settings.textInputBackground": "#0F111A", "settings.headerForeground": "#80CBC4", "settings.modifiedItemIndicator": "#80CBC4", "settings.checkboxBackground": "#0F111A", "settings.checkboxForeground": "#A6ACCD", "listFilterWidget.background": "#00000030", "listFilterWidget.outline": "#00000030", "listFilterWidget.noMatchesOutline": "#00000030" } } ================================================ FILE: apps/web/src/lib/shiki/themes/material-palenight.json ================================================ { "name": "material-palenight", "semanticHighlighting": true, "tokenColors": [ { "name": "Global settings", "settings": { "background": "#292D3E", "foreground": "#A6ACCD" } }, { "name": "String", "scope": "string", "settings": { "foreground": "#C3E88D" } }, { "name": "Punctuation", "scope": "punctuation, constant.other.symbol", "settings": { "foreground": "#89DDFF" } }, { "name": "String Escape", "scope": "constant.character.escape, text.html constant.character.entity.named", "settings": { "foreground": "#A6ACCD" } }, { "name": "Boolean", "scope": "constant.language.boolean", "settings": { "foreground": "#ff9cac" } }, { "name": "Number", "scope": "constant.numeric", "settings": { "foreground": "#F78C6C" } }, { "name": "Variable", "scope": "variable, variable.parameter, support.variable, variable.language, support.constant, meta.definition.variable entity.name.function, meta.function-call.arguments", "settings": { "foreground": "#A6ACCD" } }, { "name": "Other Keyword", "scope": "keyword.other", "settings": { "foreground": "#F78C6C" } }, { "name": "Keyword", "scope": "keyword, modifier, variable.language.this, support.type.object, constant.language", "settings": { "foreground": "#89DDFF" } }, { "name": "Function call", "scope": "entity.name.function, support.function", "settings": { "foreground": "#82AAFF" } }, { "name": "Storage", "scope": "storage.type, storage.modifier, storage.control", "settings": { "foreground": "#C792EA" } }, { "name": "Modules", "scope": "support.module, support.node", "settings": { "foreground": "#f07178", "fontStyle": "italic" } }, { "name": "Type", "scope": "support.type, constant.other.key", "settings": { "foreground": "#FFCB6B" } }, { "name": "Type", "scope": "entity.name.type, entity.other.inherited-class, entity.other", "settings": { "foreground": "#FFCB6B" } }, { "name": "Comment", "scope": "comment", "settings": { "foreground": "#676E95", "fontStyle": "italic" } }, { "name": "Comment", "scope": "comment punctuation.definition.comment, string.quoted.docstring", "settings": { "foreground": "#676E95", "fontStyle": "italic" } }, { "name": "Punctuation", "scope": "punctuation", "settings": { "foreground": "#89DDFF" } }, { "name": "Class", "scope": "entity.name, entity.name.type.class, support.type, support.class, meta.use", "settings": { "foreground": "#FFCB6B" } }, { "name": "Class variable", "scope": "variable.object.property, meta.field.declaration entity.name.function", "settings": { "foreground": "#f07178" } }, { "name": "Class method", "scope": "meta.definition.method entity.name.function", "settings": { "foreground": "#f07178" } }, { "name": "Function definition", "scope": "meta.function entity.name.function", "settings": { "foreground": "#82AAFF" } }, { "name": "Template expression", "scope": "template.expression.begin, template.expression.end, punctuation.definition.template-expression.begin, punctuation.definition.template-expression.end", "settings": { "foreground": "#89DDFF" } }, { "name": "Reset embedded/template expression colors", "scope": "meta.embedded, source.groovy.embedded, meta.template.expression", "settings": { "foreground": "#A6ACCD" } }, { "name": "YAML key", "scope": "entity.name.tag.yaml", "settings": { "foreground": "#f07178" } }, { "name": "JSON key", "scope": "meta.object-literal.key, meta.object-literal.key string, support.type.property-name.json", "settings": { "foreground": "#f07178" } }, { "name": "JSON constant", "scope": "constant.language.json", "settings": { "foreground": "#89DDFF" } }, { "name": "CSS class", "scope": "entity.other.attribute-name.class", "settings": { "foreground": "#FFCB6B" } }, { "name": "CSS ID", "scope": "entity.other.attribute-name.id", "settings": { "foreground": "#F78C6C" } }, { "name": "CSS tag", "scope": "source.css entity.name.tag", "settings": { "foreground": "#FFCB6B" } }, { "name": "CSS properties", "scope": "support.type.property-name.css", "settings": { "foreground": "#B2CCD6" } }, { "name": "HTML tag outer", "scope": "meta.tag, punctuation.definition.tag", "settings": { "foreground": "#89DDFF" } }, { "name": "HTML tag inner", "scope": "entity.name.tag", "settings": { "foreground": "#f07178" } }, { "name": "HTML tag attribute", "scope": "entity.other.attribute-name", "settings": { "foreground": "#C792EA" } }, { "name": "HTML entities", "scope": "punctuation.definition.entity.html", "settings": { "foreground": "#A6ACCD" } }, { "name": "Markdown heading", "scope": "markup.heading", "settings": { "foreground": "#89DDFF" } }, { "name": "Markdown link text", "scope": "text.html.markdown meta.link.inline, meta.link.reference", "settings": { "foreground": "#f07178" } }, { "name": "Markdown list item", "scope": "text.html.markdown beginning.punctuation.definition.list", "settings": { "foreground": "#89DDFF" } }, { "name": "Markdown italic", "scope": "markup.italic", "settings": { "foreground": "#f07178", "fontStyle": "italic" } }, { "name": "Markdown bold", "scope": "markup.bold", "settings": { "foreground": "#f07178", "fontStyle": "bold" } }, { "name": "Markdown bold italic", "scope": "markup.bold markup.italic, markup.italic markup.bold", "settings": { "foreground": "#f07178", "fontStyle": "italic bold" } }, { "name": "Markdown code block", "scope": "markup.fenced_code.block.markdown punctuation.definition.markdown", "settings": { "foreground": "#C3E88D" } }, { "name": "Markdown inline code", "scope": "markup.inline.raw.string.markdown", "settings": { "foreground": "#C3E88D" } }, { "name": "INI property name", "scope": "keyword.other.definition.ini", "settings": { "foreground": "#f07178" } }, { "name": "INI section title", "scope": "entity.name.section.group-title.ini", "settings": { "foreground": "#89DDFF" } }, { "name": "C# class", "scope": "source.cs meta.class.identifier storage.type", "settings": { "foreground": "#FFCB6B" } }, { "name": "C# class method", "scope": "source.cs meta.method.identifier entity.name.function", "settings": { "foreground": "#f07178" } }, { "name": "C# function call", "scope": "source.cs meta.method-call meta.method, source.cs entity.name.function", "settings": { "foreground": "#82AAFF" } }, { "name": "C# type", "scope": "source.cs storage.type", "settings": { "foreground": "#FFCB6B" } }, { "name": "C# return type", "scope": "source.cs meta.method.return-type", "settings": { "foreground": "#FFCB6B" } }, { "name": "C# preprocessor", "scope": "source.cs meta.preprocessor", "settings": { "foreground": "#676E95" } }, { "name": "C# namespace", "scope": "source.cs entity.name.type.namespace", "settings": { "foreground": "#A6ACCD" } }, { "name": "JSX Text", "scope": "meta.jsx.children, SXNested", "settings": { "foreground": "#A6ACCD" } }, { "name": "JSX Components name", "scope": "support.class.component", "settings": { "foreground": "#FFCB6B" } }, { "name": "C-related Block Level Variables", "scope": "source.cpp meta.block variable.other", "settings": { "foreground": "#A6ACCD" } }, { "name": "Member Access Meta", "scope": "source.python meta.member.access.python", "settings": { "foreground": "#f07178" } }, { "name": "Function Call", "scope": "source.python meta.function-call.python, meta.function-call.arguments", "settings": { "foreground": "#82AAFF" } }, { "name": "Blocks", "scope": "meta.block", "settings": { "foreground": "#f07178" } }, { "name": "Function Call", "scope": "entity.name.function.call", "settings": { "foreground": "#82AAFF" } }, { "name": "Namespaces", "scope": "source.php support.other.namespace, source.php meta.use support.class", "settings": { "foreground": "#A6ACCD" } }, { "name": "Constant keywords", "scope": "constant.keyword", "settings": { "foreground": "#89DDFF", "fontStyle": "italic" } }, { "name": "Entity name", "scope": "entity.name.function", "settings": { "foreground": "#82AAFF" } }, { "name": "Global settings", "settings": { "background": "#292D3E", "foreground": "#A6ACCD" } }, { "name": "Markup Deleted", "scope": ["markup.deleted"], "settings": { "foreground": "#f07178" } }, { "name": "Markup Inserted", "scope": ["markup.inserted"], "settings": { "foreground": "#C3E88D" } }, { "name": "Markup Underline", "scope": ["markup.underline"], "settings": { "fontStyle": "underline" } }, { "name": "Keyword Control", "scope": ["keyword.control"], "settings": { "foreground": "#89DDFF", "fontStyle": "italic" } }, { "name": "Parameter", "scope": ["variable.parameter"], "settings": { "fontStyle": "italic" } }, { "name": "Python - Self Parameter", "scope": ["variable.parameter.function.language.special.self.python"], "settings": { "foreground": "#f07178", "fontStyle": "italic" } }, { "name": "Python - Format Placeholder", "scope": ["constant.character.format.placeholder.other.python"], "settings": { "foreground": "#F78C6C" } }, { "name": "Markdown - Blockquote", "scope": ["markup.quote"], "settings": { "fontStyle": "italic", "foreground": "#89DDFF" } }, { "name": "Markdown - Fenced Language", "scope": ["markup.fenced_code.block"], "settings": { "foreground": "#A6ACCD90" } }, { "name": "Markdown - Blockquote Punctuation", "scope": ["punctuation.definition.quote"], "settings": { "foreground": "#ff9cac" } }, { "name": "JSON Key - Level 0", "scope": [ "meta.structure.dictionary.json support.type.property-name.json" ], "settings": { "foreground": "#C792EA" } }, { "name": "JSON Key - Level 1", "scope": [ "meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json support.type.property-name.json" ], "settings": { "foreground": "#FFCB6B" } }, { "name": "JSON Key - Level 2", "scope": [ "meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json support.type.property-name.json" ], "settings": { "foreground": "#F78C6C" } }, { "name": "JSON Key - Level 3", "scope": [ "meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json support.type.property-name.json" ], "settings": { "foreground": "#f07178" } }, { "name": "JSON Key - Level 4", "scope": [ "meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json support.type.property-name.json" ], "settings": { "foreground": "#916b53" } }, { "name": "JSON Key - Level 5", "scope": [ "meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json support.type.property-name.json" ], "settings": { "foreground": "#82AAFF" } }, { "name": "JSON Key - Level 6", "scope": [ "meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json support.type.property-name.json" ], "settings": { "foreground": "#ff9cac" } }, { "name": "JSON Key - Level 7", "scope": [ "meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json support.type.property-name.json" ], "settings": { "foreground": "#C792EA" } }, { "name": "JSON Key - Level 8", "scope": [ "meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json support.type.property-name.json" ], "settings": { "foreground": "#C3E88D" } } ], "colors": { "focusBorder": "#FFFFFF00", "foreground": "#A6ACCD", "button.background": "#717CB450", "button.foreground": "#ffffff", "dropdown.background": "#292D3E", "input.background": "#333747", "inputOption.activeBorder": "#A6ACCD30", "list.activeSelectionBackground": "#292D3E", "list.activeSelectionForeground": "#80CBC4", "list.dropBackground": "#f0717880", "list.focusBackground": "#A6ACCD20", "list.focusForeground": "#A6ACCD", "list.highlightForeground": "#80CBC4", "list.hoverBackground": "#292D3E", "list.inactiveSelectionBackground": "#00000030", "activityBar.background": "#292D3E", "activityBar.dropBackground": "#f0717880", "activityBarBadge.background": "#80CBC4", "activityBarBadge.foreground": "#000000", "badge.background": "#00000030", "badge.foreground": "#676E95", "sideBar.background": "#292D3E", "sideBarSectionHeader.background": "#292D3E", "editorGroup.dropBackground": "#f0717880", "editorGroup.focusedEmptyBorder": "#f07178", "editorGroupHeader.tabsBackground": "#292D3E", "tab.border": "#292D3E", "tab.activeBorder": "#80CBC4", "tab.inactiveBackground": "#292D3E", "tab.activeModifiedBorder": "#676E95", "tab.inactiveModifiedBorder": "#904348", "tab.unfocusedActiveModifiedBorder": "#c05a60", "tab.unfocusedInactiveModifiedBorder": "#904348", "editor.background": "#292D3E", "editor.foreground": "#A6ACCD", "editorLineNumber.foreground": "#3A3F58", "editorLineNumber.activeForeground": "#676E95", "editorCursor.foreground": "#FFCC00", "editor.selectionBackground": "#717CB450", "editor.selectionHighlightBackground": "#FFCC0020", "editor.wordHighlightBackground": "#ff9cac30", "editor.wordHighlightStrongBackground": "#C3E88D30", "editor.findMatchHighlight": "#A6ACCD", "editor.findRangeHighlightBackground": "#FFCB6B30", "editor.lineHighlightBorder": "#00000000", "editor.rangeHighlightBackground": "#FFFFFF0d", "editorWhitespace.foreground": "#A6ACCD40", "editorWidget.background": "#292D3E", "editorHoverWidget.background": "#292D3E", "editorMarkerNavigation.background": "#A6ACCD05", "peekView.border": "#00000030", "peekViewEditor.background": "#A6ACCD05", "peekViewResult.background": "#A6ACCD05", "peekViewTitle.background": "#A6ACCD05", "panel.background": "#292D3E", "panel.border": "#292D3E60", "panelTitle.activeBorder": "#80CBC4", "panelTitle.inactiveForeground": "#A6ACCD", "statusBar.background": "#292D3E", "statusBar.debuggingBackground": "#C792EA", "statusBar.debuggingForeground": "#ffffff", "statusBar.noFolderBackground": "#292D3E", "statusBarItem.activeBackground": "#f0717880", "statusBarItem.hoverBackground": "#676E9520", "statusBarItem.remoteBackground": "#80CBC4", "statusBarItem.remoteForeground": "#000000", "titleBar.activeBackground": "#292D3E", "pickerGroup.border": "#FFFFFF1a", "terminal.ansiBlack": "#000000", "terminal.ansiBlue": "#82AAFF", "terminal.ansiBrightBlack": "#676E95", "terminal.ansiBrightBlue": "#82AAFF", "terminal.ansiBrightCyan": "#89DDFF", "terminal.ansiBrightGreen": "#C3E88D", "terminal.ansiBrightMagenta": "#C792EA", "terminal.ansiBrightRed": "#f07178", "terminal.ansiBrightWhite": "#ffffff", "terminal.ansiBrightYellow": "#FFCB6B", "terminal.ansiCyan": "#89DDFF", "terminal.ansiGreen": "#C3E88D", "terminal.ansiMagenta": "#C792EA", "terminal.ansiRed": "#f07178", "terminal.ansiWhite": "#ffffff", "terminal.ansiYellow": "#FFCB6B", "debugToolBar.background": "#292D3E", "debugConsole.errorForeground": "#f07178", "debugConsole.infoForeground": "#89DDFF", "debugConsole.warningForeground": "#FFCB6B", "selection.background": "#00000080", "editorRuler.foreground": "#4E5579", "widget.shadow": "#00000030", "scrollbar.shadow": "#00000030", "editorLink.activeForeground": "#A6ACCD", "progressBar.background": "#80CBC4", "pickerGroup.foreground": "#80CBC4", "tree.indentGuidesStroke": "#4E5579", "terminalCursor.foreground": "#FFCB6B", "terminalCursor.background": "#000000", "inputOption.activeBackground": "#A6ACCD30", "textLink.foreground": "#80CBC4", "textLink.activeForeground": "#A6ACCD", "sideBar.foreground": "#676E95", "sideBar.border": "#292D3E60", "sideBarTitle.foreground": "#A6ACCD", "sideBarSectionHeader.border": "#292D3E60", "panel.dropBackground": "#A6ACCD", "panelTitle.activeForeground": "#FFFFFF", "editor.lineHighlightBackground": "#00000050", "editor.findMatchBackground": "#000000", "editor.findMatchHighlightBackground": "#00000050", "editor.findMatchBorder": "#80CBC4", "editor.findMatchHighlightBorder": "#ffffff30", "editorIndentGuide.background": "#4E557970", "editorIndentGuide.activeBackground": "#4E5579", "editorGroup.border": "#00000030", "editorGutter.modifiedBackground": "#82AAFF60", "editorGutter.addedBackground": "#C3E88D60", "editorGutter.deletedBackground": "#f0717860", "activityBar.border": "#292D3E60", "activityBar.foreground": "#A6ACCD", "activityBar.activeBorder": "#80CBC4", "extensionBadge.remoteForeground": "#A6ACCD", "scrollbarSlider.background": "#A6ACCD20", "scrollbarSlider.hoverBackground": "#A6ACCD10", "scrollbarSlider.activeBackground": "#80CBC4", "tab.unfocusedActiveBorder": "#676E95", "tab.activeForeground": "#FFFFFF", "tab.inactiveForeground": "#676E95", "tab.activeBackground": "#292D3E", "tab.unfocusedActiveForeground": "#A6ACCD", "editorWidget.resizeBorder": "#80CBC4", "editorWidget.border": "#80CBC4", "notebook.focusedCellBorder": "#80CBC4", "notebook.inactiveFocusedCellBorder": "#80CBC450", "statusBar.border": "#292D3E60", "statusBar.foreground": "#676E95", "editorBracketMatch.border": "#FFCC0050", "editorBracketMatch.background": "#292D3E", "editorOverviewRuler.findMatchForeground": "#80CBC4", "editorOverviewRuler.border": "#292D3E", "editorOverviewRuler.errorForeground": "#f0717840", "editorOverviewRuler.infoForeground": "#82AAFF40", "editorOverviewRuler.warningForeground": "#FFCB6B40", "editorInfo.foreground": "#82AAFF70", "editorWarning.foreground": "#FFCB6B70", "editorError.foreground": "#f0717870", "editorHoverWidget.border": "#FFFFFF10", "titleBar.activeForeground": "#A6ACCD", "titleBar.inactiveBackground": "#292D3E", "titleBar.inactiveForeground": "#676E95", "titleBar.border": "#292D3E60", "input.foreground": "#A6ACCD", "input.placeholderForeground": "#A6ACCD60", "input.border": "#FFFFFF10", "inputValidation.errorBorder": "#f07178", "inputValidation.infoBorder": "#82AAFF", "inputValidation.warningBorder": "#FFCB6B", "dropdown.border": "#FFFFFF10", "quickInput.background": "#292D3E", "quickInput.foreground": "#676E95", "list.hoverForeground": "#FFFFFF", "list.inactiveSelectionForeground": "#80CBC4", "quickInput.list.focusBackground": "#A6ACCD20", "editorSuggestWidget.background": "#292D3E", "editorSuggestWidget.foreground": "#A6ACCD", "editorSuggestWidget.highlightForeground": "#80CBC4", "editorSuggestWidget.selectedBackground": "#00000050", "editorSuggestWidget.border": "#FFFFFF10", "diffEditor.insertedTextBackground": "#89DDFF20", "diffEditor.removedTextBackground": "#ff9cac20", "notifications.background": "#292D3E", "notifications.foreground": "#A6ACCD", "notificationLink.foreground": "#80CBC4", "extensionButton.prominentBackground": "#C3E88D90", "extensionButton.prominentHoverBackground": "#C3E88D", "extensionButton.prominentForeground": "#000000", "peekViewEditorGutter.background": "#A6ACCD05", "peekViewTitleDescription.foreground": "#A6ACCD60", "peekViewResult.matchHighlightBackground": "#717CB450", "peekViewEditor.matchHighlightBackground": "#717CB450", "peekViewResult.selectionBackground": "#676E9570", "gitDecoration.deletedResourceForeground": "#f0717890", "gitDecoration.conflictingResourceForeground": "#FFCB6B90", "gitDecoration.modifiedResourceForeground": "#82AAFF90", "gitDecoration.untrackedResourceForeground": "#C3E88D90", "gitDecoration.ignoredResourceForeground": "#676E9590", "breadcrumb.background": "#292D3E", "breadcrumb.foreground": "#676E95", "breadcrumb.focusForeground": "#A6ACCD", "breadcrumb.activeSelectionForeground": "#80CBC4", "breadcrumbPicker.background": "#292D3E", "menu.background": "#292D3E", "menu.foreground": "#A6ACCD", "menu.selectionBackground": "#00000050", "menu.selectionForeground": "#80CBC4", "menu.selectionBorder": "#00000030", "menu.separatorBackground": "#A6ACCD", "menubar.selectionBackground": "#00000030", "menubar.selectionForeground": "#80CBC4", "menubar.selectionBorder": "#00000030", "settings.dropdownForeground": "#A6ACCD", "settings.dropdownBackground": "#292D3E", "settings.numberInputForeground": "#A6ACCD", "settings.numberInputBackground": "#292D3E", "settings.textInputForeground": "#A6ACCD", "settings.textInputBackground": "#292D3E", "settings.headerForeground": "#80CBC4", "settings.modifiedItemIndicator": "#80CBC4", "settings.checkboxBackground": "#292D3E", "settings.checkboxForeground": "#A6ACCD", "listFilterWidget.background": "#00000030", "listFilterWidget.outline": "#00000030", "listFilterWidget.noMatchesOutline": "#00000030" } } ================================================ FILE: apps/web/src/lib/shiki/themes/min-dark.json ================================================ { "name": "min-dark", "type": "dark", "colors": { "editorIndentGuide.activeBackground": "#383838", "editorIndentGuide.background": "#2A2A2A", "editorRuler.foreground": "#2A2A2A", "editorLineNumber.foreground": "#727272", "activityBar.background": "#1A1A1A", "activityBar.foreground": "#7D7D7D", "activityBarBadge.background": "#383838", "badge.background": "#383838", "badge.foreground": "#C1C1C1", "button.background": "#333", "editor.background": "#1f1f1f", "editor.lineHighlightBorder": "#303030", "editorGroupHeader.tabsBackground": "#1A1A1A", "editorGroupHeader.tabsBorder": "#1A1A1A", "editorSuggestWidget.background": "#1A1A1A", "focusBorder": "#444", "foreground": "#888888", "gitDecoration.ignoredResourceForeground": "#444444", "input.background": "#2A2A2A", "input.foreground": "#E0E0E0", "list.activeSelectionBackground": "#212121", "list.activeSelectionForeground": "#F5F5F5", "list.focusBackground": "#292929", "list.highlightForeground": "#EAEAEA", "list.hoverBackground": "#262626", "list.hoverForeground": "#9E9E9E", "list.inactiveSelectionBackground": "#212121", "list.inactiveSelectionForeground": "#F5F5F5", "panelTitle.activeBorder": "#1f1f1f", "panelTitle.activeForeground": "#FAFAFA", "panelTitle.inactiveForeground": "#484848", "peekView.border": "#444", "peekViewEditor.background": "#242424", "pickerGroup.border": "#363636", "pickerGroup.foreground": "#EAEAEA", "progressBar.background": "#FAFAFA", "scrollbar.shadow": "#1f1f1f", "sideBar.background": "#1A1A1A", "sideBarSectionHeader.background": "#202020", "statusBar.background": "#1A1A1A", "statusBar.debuggingBackground": "#1A1A1A", "statusBar.foreground": "#7E7E7E", "statusBar.noFolderBackground": "#1A1A1A", "statusBarItem.remoteForeground": "#7E7E7E", "statusBarItem.remoteBackground": "#1a1a1a00", "statusBarItem.prominentBackground": "#fafafa1a", "tab.activeBorder": "#1e1e1e", "tab.activeForeground": "#FAFAFA", "tab.border": "#1A1A1A", "tab.inactiveBackground": "#1A1A1A", "tab.inactiveForeground": "#727272", "textLink.foreground": "#CCC", "textLink.activeForeground": "#fafafa", "titleBar.activeBackground": "#1A1A1A", "titleBar.border": "#00000000", "terminal.ansiBrightBlack": "#5c5c5c", "inputOption.activeBackground": "#3a3a3a", "debugIcon.continueForeground": "#FF7A84", "debugIcon.disconnectForeground": "#FF7A84", "debugIcon.pauseForeground": "#FF7A84", "debugIcon.restartForeground": "#79b8ff", "debugIcon.startForeground": "#79b8ff", "debugIcon.stepBackForeground": "#FF7A84", "debugIcon.stepIntoForeground": "#FF7A84", "debugIcon.stepOutForeground": "#FF7A84", "debugIcon.stepOverForeground": "#FF7A84", "debugIcon.stopForeground": "#79b8ff", "debugIcon.breakpointCurrentStackframeForeground": "#79b8ff", "debugIcon.breakpointDisabledForeground": "#848484", "debugIcon.breakpointForeground": "#FF7A84", "debugIcon.breakpointStackframeForeground": "#79b8ff", "debugIcon.breakpointUnverifiedForeground": "#848484", "symbolIcon.classForeground": "#FF9800", "symbolIcon.enumeratorForeground": "#FF9800", "symbolIcon.eventForeground": "#FF9800", "symbolIcon.methodForeground": "#b392f0", "symbolIcon.constructorForeground": "#b392f0", "symbolIcon.functionForeground": "#b392f0", "symbolIcon.fieldForeground": "#79b8ff", "symbolIcon.interfaceForeground": "#79b8ff", "symbolIcon.variableForeground": "#79b8ff", "symbolIcon.enumeratorMemberForeground": "#79b8ff", "diffEditor.insertedTextBackground": "#3a632a4b", "diffEditor.removedTextBackground": "#88063852" }, "tokenColors": [ { "settings": { "foreground": "#b392f0" } }, { "scope": [ "support.function", "keyword.operator.accessor", "meta.group.braces.round.function.arguments", "meta.template.expression", "markup.fenced_code meta.embedded.block" ], "settings": { "foreground": "#b392f0" } }, { "scope": "emphasis", "settings": { "fontStyle": "italic" } }, { "scope": ["strong", "markup.heading.markdown", "markup.bold.markdown"], "settings": { "fontStyle": "bold", "foreground": "#FF7A84" } }, { "scope": ["markup.italic.markdown"], "settings": { "fontStyle": "italic" } }, { "scope": "meta.link.inline.markdown", "settings": { "fontStyle": "underline", "foreground": "#1976D2" } }, { "scope": ["string", "markup.fenced_code", "markup.inline"], "settings": { "foreground": "#9db1c5" } }, { "scope": ["comment", "string.quoted.docstring.multi"], "settings": { "foreground": "#6b737c" } }, { "scope": [ "constant.language", "variable.language.this", "variable.other.object", "variable.other.class", "variable.other.constant", "meta.property-name", "support", "string.other.link.title.markdown" ], "settings": { "foreground": "#79b8ff" } }, { "scope": [ "constant.numeric", "constant.other.placeholder", "constant.character.format.placeholder", "meta.property-value", "keyword.other.unit", "keyword.other.template", "entity.name.tag.yaml", "entity.other.attribute-name", "support.type.property-name.json" ], "settings": { "foreground": "#f8f8f8" } }, { "scope": [ "keyword", "storage.modifier", "storage.type", "storage.control.clojure", "entity.name.function.clojure", "support.function.node", "punctuation.separator.key-value", "punctuation.definition.template-expression" ], "settings": { "foreground": "#f97583" } }, { "scope": "variable.parameter.function", "settings": { "foreground": "#FF9800" } }, { "scope": [ "entity.name.type", "entity.other.inherited-class", "meta.function-call", "meta.instance.constructor", "entity.other.attribute-name", "entity.name.function", "constant.keyword.clojure" ], "settings": { "foreground": "#b392f0" } }, { "scope": [ "entity.name.tag", "string.quoted", "string.regexp", "string.interpolated", "string.template", "string.unquoted.plain.out.yaml", "keyword.other.template" ], "settings": { "foreground": "#ffab70" } }, { "scope": "token.info-token", "settings": { "foreground": "#316bcd" } }, { "scope": "token.warn-token", "settings": { "foreground": "#cd9731" } }, { "scope": "token.error-token", "settings": { "foreground": "#cd3131" } }, { "scope": "token.debug-token", "settings": { "foreground": "#800080" } }, { "scope": [ "punctuation.definition.arguments", "punctuation.definition.dict", "punctuation.separator", "meta.function-call.arguments" ], "settings": { "foreground": "#bbbbbb" } }, { "name": "[Custom] Markdown links", "scope": "markup.underline.link", "settings": { "foreground": "#ffab70" } }, { "name": "[Custom] Markdown list", "scope": ["beginning.punctuation.definition.list.markdown"], "settings": { "foreground": "#FF7A84" } }, { "name": "[Custom] Markdown punctuation definition", "scope": "punctuation.definition.metadata.markdown", "settings": { "foreground": "#ffab70" } }, { "name": "[Custom] Markdown punctuation definition brackets", "scope": [ "punctuation.definition.string.begin.markdown", "punctuation.definition.string.end.markdown" ], "settings": { "foreground": "#79b8ff" } } ], "semanticHighlighting": true } ================================================ FILE: apps/web/src/lib/shiki/themes/min-light.json ================================================ { "name": "min-light", "type": "light", "colors": { "activityBar.background": "#f6f6f6", "activityBar.foreground": "#9E9E9E", "activityBarBadge.background": "#616161", "badge.background": "#E0E0E0", "badge.foreground": "#616161", "button.background": "#757575", "button.hoverBackground": "#616161", "editor.background": "#ffffff", "editor.foreground": "#212121", "editor.lineHighlightBorder": "#f2f2f2", "editorBracketMatch.background": "#E7F3FF", "editorBracketMatch.border": "#c8e1ff", "editorGroupHeader.tabsBackground": "#f6f6f6", "editorGroupHeader.tabsBorder": "#fff", "editorIndentGuide.background": "#EEE", "editorLineNumber.activeForeground": "#757575", "editorLineNumber.foreground": "#CCC", "editorSuggestWidget.background": "#F3F3F3", "extensionButton.prominentBackground": "#000000AA", "extensionButton.prominentHoverBackground": "#000000BB", "focusBorder": "#D0D0D0", "foreground": "#757575", "gitDecoration.ignoredResourceForeground": "#AAAAAA", "input.border": "#E9E9E9", "list.activeSelectionBackground": "#EEE", "list.activeSelectionForeground": "#212121", "list.focusBackground": "#ddd", "list.focusForeground": "#212121", "list.highlightForeground": "#212121", "list.inactiveSelectionBackground": "#E0E0E0", "list.inactiveSelectionForeground": "#212121", "panel.background": "#fff", "panel.border": "#f4f4f4", "panelTitle.activeBorder": "#fff", "panelTitle.inactiveForeground": "#BDBDBD", "peekView.border": "#E0E0E0", "peekViewEditor.background": "#f8f8f8", "pickerGroup.foreground": "#000", "progressBar.background": "#000", "scrollbar.shadow": "#FFF", "sideBar.background": "#f6f6f6", "sideBar.border": "#f6f6f6", "sideBarSectionHeader.background": "#EEE", "sideBarTitle.foreground": "#999", "statusBar.background": "#f6f6f6", "statusBar.border": "#f6f6f6", "statusBar.debuggingBackground": "#f6f6f6", "statusBar.foreground": "#7E7E7E", "statusBar.noFolderBackground": "#f6f6f6", "statusBarItem.remoteForeground": "#7E7E7E", "statusBarItem.remoteBackground": "#f6f6f600", "statusBarItem.prominentBackground": "#0000001a", "tab.activeBorder": "#FFF", "tab.activeForeground": "#424242", "tab.border": "#f6f6f6", "tab.inactiveBackground": "#f6f6f6", "tab.inactiveForeground": "#BDBDBD", "tab.unfocusedActiveBorder": "#fff", "terminal.ansiBlack": "#333", "terminal.ansiBlue": "#e0e0e0", "terminal.ansiBrightBlack": "#a1a1a1", "terminal.ansiBrightBlue": "#6871ff", "terminal.ansiBrightCyan": "#57d9ad", "terminal.ansiBrightGreen": "#a3d900", "terminal.ansiBrightMagenta": "#a37acc", "terminal.ansiBrightRed": "#d6656a", "terminal.ansiBrightWhite": "#7E7E7E", "terminal.ansiBrightYellow": "#e7c547", "terminal.ansiCyan": "#4dbf99", "terminal.ansiGreen": "#77cc00", "terminal.ansiMagenta": "#9966cc", "terminal.ansiRed": "#D32F2F", "terminal.ansiWhite": "#c7c7c7", "terminal.ansiYellow": "#f29718", "terminal.background": "#fff", "textLink.activeForeground": "#000", "textLink.foreground": "#000", "titleBar.activeBackground": "#f6f6f6", "titleBar.border": "#FFFFFF00", "titleBar.inactiveBackground": "#f6f6f6", "inputOption.activeBackground": "#EDEDED", "debugIcon.continueForeground": "#6f42c1", "debugIcon.disconnectForeground": "#6f42c1", "debugIcon.pauseForeground": "#6f42c1", "debugIcon.restartForeground": "#1976D2", "debugIcon.startForeground": "#1976D2", "debugIcon.stepBackForeground": "#6f42c1", "debugIcon.stepIntoForeground": "#6f42c1", "debugIcon.stepOutForeground": "#6f42c1", "debugIcon.stepOverForeground": "#6f42c1", "debugIcon.stopForeground": "#1976D2", "debugIcon.breakpointCurrentStackframeForeground": "#1976D2", "debugIcon.breakpointDisabledForeground": "#848484", "debugIcon.breakpointForeground": "#D32F2F", "debugIcon.breakpointStackframeForeground": "#1976D2", "symbolIcon.classForeground": "#dd8500", "symbolIcon.enumeratorForeground": "#dd8500", "symbolIcon.eventForeground": "#dd8500", "symbolIcon.methodForeground": "#6f42c1", "symbolIcon.constructorForeground": "#6f42c1", "symbolIcon.functionForeground": "#6f42c1", "symbolIcon.fieldForeground": "#1976D2", "symbolIcon.interfaceForeground": "#1976D2", "symbolIcon.variableForeground": "#1976D2", "symbolIcon.enumeratorMemberForeground": "#1976D2", "diffEditor.removedTextBackground": "#e597af52", "diffEditor.insertedTextBackground": "#b7e7a44b" }, "tokenColors": [ { "settings": { "foreground": "#24292eff" } }, { "scope": [ "keyword.operator.accessor", "meta.group.braces.round.function.arguments", "meta.template.expression", "markup.fenced_code meta.embedded.block" ], "settings": { "foreground": "#24292eff" } }, { "scope": "emphasis", "settings": { "fontStyle": "italic" } }, { "scope": ["strong", "markup.heading.markdown", "markup.bold.markdown"], "settings": { "fontStyle": "bold" } }, { "scope": ["markup.italic.markdown"], "settings": { "fontStyle": "italic" } }, { "scope": "meta.link.inline.markdown", "settings": { "fontStyle": "underline", "foreground": "#1976D2" } }, { "scope": ["string", "markup.fenced_code", "markup.inline"], "settings": { "foreground": "#2b5581" } }, { "scope": ["comment", "string.quoted.docstring.multi"], "settings": { "foreground": "#c2c3c5" } }, { "scope": [ "constant.numeric", "constant.language", "constant.other.placeholder", "constant.character.format.placeholder", "variable.language.this", "variable.other.object", "variable.other.class", "variable.other.constant", "meta.property-name", "meta.property-value", "support" ], "settings": { "foreground": "#1976D2" } }, { "scope": [ "keyword", "storage.modifier", "storage.type", "storage.control.clojure", "entity.name.function.clojure", "entity.name.tag.yaml", "support.function.node", "support.type.property-name.json", "punctuation.separator.key-value", "punctuation.definition.template-expression" ], "settings": { "foreground": "#D32F2F" } }, { "scope": "variable.parameter.function", "settings": { "foreground": "#FF9800" } }, { "scope": [ "support.function", "entity.name.type", "entity.other.inherited-class", "meta.function-call", "meta.instance.constructor", "entity.other.attribute-name", "entity.name.function", "constant.keyword.clojure" ], "settings": { "foreground": "#6f42c1" } }, { "scope": [ "entity.name.tag", "string.quoted", "string.regexp", "string.interpolated", "string.template", "string.unquoted.plain.out.yaml", "keyword.other.template" ], "settings": { "foreground": "#22863a" } }, { "scope": "token.info-token", "settings": { "foreground": "#316bcd" } }, { "scope": "token.warn-token", "settings": { "foreground": "#cd9731" } }, { "scope": "token.error-token", "settings": { "foreground": "#cd3131" } }, { "scope": "token.debug-token", "settings": { "foreground": "#800080" } }, { "scope": ["strong", "markup.heading.markdown", "markup.bold.markdown"], "settings": { "foreground": "#6f42c1" } }, { "scope": [ "punctuation.definition.arguments", "punctuation.definition.dict", "punctuation.separator", "meta.function-call.arguments" ], "settings": { "foreground": "#212121" } }, { "name": "[Custom] Markdown links", "scope": [ "markup.underline.link", "punctuation.definition.metadata.markdown" ], "settings": { "foreground": "#22863a" } }, { "name": "[Custom] Markdown list", "scope": ["beginning.punctuation.definition.list.markdown"], "settings": { "foreground": "#6f42c1" } }, { "name": "[Custom] Markdown punctuation definition brackets", "scope": [ "punctuation.definition.string.begin.markdown", "punctuation.definition.string.end.markdown", "string.other.link.title.markdown", "string.other.link.description.markdown" ], "settings": { "foreground": "#d32f2f" } } ] } ================================================ FILE: apps/web/src/lib/shiki/themes/monokai.json ================================================ { "type": "dark", "colors": { "dropdown.background": "#414339", "list.activeSelectionBackground": "#75715E", "quickInputList.focusBackground": "#414339", "dropdown.listBackground": "#1e1f1c", "list.inactiveSelectionBackground": "#414339", "list.hoverBackground": "#3e3d32", "list.dropBackground": "#414339", "list.highlightForeground": "#f8f8f2", "button.background": "#75715E", "editor.background": "#272822", "editor.foreground": "#f8f8f2", "selection.background": "#878b9180", "editor.selectionHighlightBackground": "#575b6180", "editor.selectionBackground": "#878b9180", "minimap.selectionHighlight": "#878b9180", "editor.wordHighlightBackground": "#4a4a7680", "editor.wordHighlightStrongBackground": "#6a6a9680", "editor.lineHighlightBackground": "#3e3d32", "editorLineNumber.activeForeground": "#c2c2bf", "editorCursor.foreground": "#f8f8f0", "editorWhitespace.foreground": "#464741", "editorIndentGuide.background": "#464741", "editorIndentGuide.activeBackground": "#767771", "editorGroupHeader.tabsBackground": "#1e1f1c", "editorGroup.dropBackground": "#41433980", "tab.inactiveBackground": "#34352f", "tab.border": "#1e1f1c", "tab.inactiveForeground": "#ccccc7", "tab.lastPinnedBorder": "#414339", "widget.shadow": "#00000098", "progressBar.background": "#75715E", "badge.background": "#75715E", "badge.foreground": "#f8f8f2", "editorLineNumber.foreground": "#90908a", "panelTitle.activeForeground": "#f8f8f2", "panelTitle.activeBorder": "#75715E", "panelTitle.inactiveForeground": "#75715E", "panel.border": "#414339", "settings.focusedRowBackground": "#4143395A", "titleBar.activeBackground": "#1e1f1c", "statusBar.background": "#414339", "statusBar.noFolderBackground": "#414339", "statusBar.debuggingBackground": "#75715E", "statusBarItem.remoteBackground": "#AC6218", "ports.iconRunningProcessForeground": "#ccccc7", "activityBar.background": "#272822", "activityBar.foreground": "#f8f8f2", "sideBar.background": "#1e1f1c", "sideBarSectionHeader.background": "#272822", "menu.background": "#1e1f1c", "menu.foreground": "#cccccc", "pickerGroup.foreground": "#75715E", "input.background": "#414339", "inputOption.activeBorder": "#75715E", "focusBorder": "#75715E", "editorWidget.background": "#1e1f1c", "debugToolBar.background": "#1e1f1c", "diffEditor.insertedTextBackground": "#4b661680", "diffEditor.removedTextBackground": "#90274A70", "inputValidation.errorBackground": "#90274A", "inputValidation.errorBorder": "#f92672", "inputValidation.warningBackground": "#848528", "inputValidation.warningBorder": "#e2e22e", "inputValidation.infoBackground": "#546190", "inputValidation.infoBorder": "#819aff", "editorHoverWidget.background": "#414339", "editorHoverWidget.border": "#75715E", "editorSuggestWidget.background": "#272822", "editorSuggestWidget.border": "#75715E", "editorGroup.border": "#34352f", "peekView.border": "#75715E", "peekViewEditor.background": "#272822", "peekViewResult.background": "#1e1f1c", "peekViewTitle.background": "#1e1f1c", "peekViewResult.selectionBackground": "#414339", "peekViewResult.matchHighlightBackground": "#75715E", "peekViewEditor.matchHighlightBackground": "#75715E", "terminal.ansiBlack": "#333333", "terminal.ansiRed": "#C4265E", "terminal.ansiGreen": "#86B42B", "terminal.ansiYellow": "#B3B42B", "terminal.ansiBlue": "#6A7EC8", "terminal.ansiMagenta": "#8C6BC8", "terminal.ansiCyan": "#56ADBC", "terminal.ansiWhite": "#e3e3dd", "terminal.ansiBrightBlack": "#666666", "terminal.ansiBrightRed": "#f92672", "terminal.ansiBrightGreen": "#A6E22E", "terminal.ansiBrightYellow": "#e2e22e", "terminal.ansiBrightBlue": "#819aff", "terminal.ansiBrightMagenta": "#AE81FF", "terminal.ansiBrightCyan": "#66D9EF", "terminal.ansiBrightWhite": "#f8f8f2" }, "tokenColors": [ { "settings": { "foreground": "#F8F8F2" } }, { "scope": [ "meta.embedded", "source.groovy.embedded", "string meta.image.inline.markdown" ], "settings": { "foreground": "#F8F8F2" } }, { "name": "Comment", "scope": "comment", "settings": { "foreground": "#88846f" } }, { "name": "String", "scope": "string", "settings": { "foreground": "#E6DB74" } }, { "name": "Template Definition", "scope": [ "punctuation.definition.template-expression", "punctuation.section.embedded" ], "settings": { "foreground": "#F92672" } }, { "name": "Reset JavaScript string interpolation expression", "scope": ["meta.template.expression"], "settings": { "foreground": "#F8F8F2" } }, { "name": "Number", "scope": "constant.numeric", "settings": { "foreground": "#AE81FF" } }, { "name": "Built-in constant", "scope": "constant.language", "settings": { "foreground": "#AE81FF" } }, { "name": "User-defined constant", "scope": "constant.character, constant.other", "settings": { "foreground": "#AE81FF" } }, { "name": "Variable", "scope": "variable", "settings": { "fontStyle": "", "foreground": "#F8F8F2" } }, { "name": "Keyword", "scope": "keyword", "settings": { "foreground": "#F92672" } }, { "name": "Storage", "scope": "storage", "settings": { "fontStyle": "", "foreground": "#F92672" } }, { "name": "Storage type", "scope": "storage.type", "settings": { "fontStyle": "italic", "foreground": "#66D9EF" } }, { "name": "Class name", "scope": "entity.name.type, entity.name.class, entity.name.namespace, entity.name.scope-resolution", "settings": { "fontStyle": "underline", "foreground": "#A6E22E" } }, { "name": "Inherited class", "scope": "entity.other.inherited-class", "settings": { "fontStyle": "italic underline", "foreground": "#A6E22E" } }, { "name": "Function name", "scope": "entity.name.function", "settings": { "fontStyle": "", "foreground": "#A6E22E" } }, { "name": "Function argument", "scope": "variable.parameter", "settings": { "fontStyle": "italic", "foreground": "#FD971F" } }, { "name": "Tag name", "scope": "entity.name.tag", "settings": { "fontStyle": "", "foreground": "#F92672" } }, { "name": "Tag attribute", "scope": "entity.other.attribute-name", "settings": { "fontStyle": "", "foreground": "#A6E22E" } }, { "name": "Library function", "scope": "support.function", "settings": { "fontStyle": "", "foreground": "#66D9EF" } }, { "name": "Library constant", "scope": "support.constant", "settings": { "fontStyle": "", "foreground": "#66D9EF" } }, { "name": "Library class/type", "scope": "support.type, support.class", "settings": { "fontStyle": "italic", "foreground": "#66D9EF" } }, { "name": "Library variable", "scope": "support.other.variable", "settings": { "fontStyle": "" } }, { "name": "Invalid", "scope": "invalid", "settings": { "fontStyle": "", "foreground": "#F44747" } }, { "name": "Invalid deprecated", "scope": "invalid.deprecated", "settings": { "foreground": "#F44747" } }, { "name": "JSON String", "scope": "meta.structure.dictionary.json string.quoted.double.json", "settings": { "foreground": "#CFCFC2" } }, { "name": "diff.header", "scope": "meta.diff, meta.diff.header", "settings": { "foreground": "#75715E" } }, { "name": "diff.deleted", "scope": "markup.deleted", "settings": { "foreground": "#F92672" } }, { "name": "diff.inserted", "scope": "markup.inserted", "settings": { "foreground": "#A6E22E" } }, { "name": "diff.changed", "scope": "markup.changed", "settings": { "foreground": "#E6DB74" } }, { "scope": "constant.numeric.line-number.find-in-files - match", "settings": { "foreground": "#AE81FFA0" } }, { "scope": "entity.name.filename.find-in-files", "settings": { "foreground": "#E6DB74" } }, { "name": "Markup Quote", "scope": "markup.quote", "settings": { "foreground": "#F92672" } }, { "name": "Markup Lists", "scope": "markup.list", "settings": { "foreground": "#E6DB74" } }, { "name": "Markup Styling", "scope": "markup.bold, markup.italic", "settings": { "foreground": "#66D9EF" } }, { "name": "Markup Inline", "scope": "markup.inline.raw", "settings": { "fontStyle": "", "foreground": "#FD971F" } }, { "name": "Markup Headings", "scope": "markup.heading", "settings": { "foreground": "#A6E22E" } }, { "name": "Markup Setext Header", "scope": "markup.heading.setext", "settings": { "foreground": "#A6E22E", "fontStyle": "bold" } }, { "name": "Markup Headings", "scope": "markup.heading.markdown", "settings": { "fontStyle": "bold" } }, { "name": "Markdown Quote", "scope": "markup.quote.markdown", "settings": { "fontStyle": "italic", "foreground": "#75715E" } }, { "name": "Markdown Bold", "scope": "markup.bold.markdown", "settings": { "fontStyle": "bold" } }, { "name": "Markdown Link Title/Description", "scope": "string.other.link.title.markdown,string.other.link.description.markdown", "settings": { "foreground": "#AE81FF" } }, { "name": "Markdown Underline Link/Image", "scope": "markup.underline.link.markdown,markup.underline.link.image.markdown", "settings": { "foreground": "#E6DB74" } }, { "name": "Markdown Emphasis", "scope": "markup.italic.markdown", "settings": { "fontStyle": "italic" } }, { "scope": "markup.strikethrough", "settings": { "fontStyle": "strikethrough" } }, { "name": "Markdown Punctuation Definition Link", "scope": "markup.list.unnumbered.markdown, markup.list.numbered.markdown", "settings": { "foreground": "#f8f8f2" } }, { "name": "Markdown List Punctuation", "scope": ["punctuation.definition.list.begin.markdown"], "settings": { "foreground": "#A6E22E" } }, { "scope": "token.info-token", "settings": { "foreground": "#6796e6" } }, { "scope": "token.warn-token", "settings": { "foreground": "#cd9731" } }, { "scope": "token.error-token", "settings": { "foreground": "#f44747" } }, { "scope": "token.debug-token", "settings": { "foreground": "#b267e6" } }, { "name": "this.self", "scope": "variable.language", "settings": { "foreground": "#FD971F" } } ], "semanticHighlighting": true, "name": "monokai" } ================================================ FILE: apps/web/src/lib/shiki/themes/nord.json ================================================ { "name": "nord", "type": "dark", "semanticHighlighting": true, "colors": { "focusBorder": "#3b4252", "foreground": "#d8dee9", "activityBar.background": "#2e3440", "activityBar.dropBackground": "#3b4252", "activityBar.foreground": "#d8dee9", "activityBar.activeBorder": "#88c0d0", "activityBar.activeBackground": "#3b4252", "activityBarBadge.background": "#88c0d0", "activityBarBadge.foreground": "#2e3440", "badge.foreground": "#2e3440", "badge.background": "#88c0d0", "button.background": "#88c0d0ee", "button.foreground": "#2e3440", "button.hoverBackground": "#88c0d0", "button.secondaryBackground": "#434c5e", "button.secondaryForeground": "#d8dee9", "button.secondaryHoverBackground": "#4c566a", "charts.red": "#bf616a", "charts.blue": "#81a1c1", "charts.yellow": "#ebcb8b", "charts.orange": "#d08770", "charts.green": "#a3be8c", "charts.purple": "#b48ead", "charts.foreground": "#d8dee9", "charts.lines": "#88c0d0", "debugConsole.infoForeground": "#88c0d0", "debugConsole.warningForeground": "#ebcb8b", "debugConsole.errorForeground": "#bf616a", "debugConsole.sourceForeground": "#616e88", "debugConsoleInputIcon.foreground": "#81a1c1", "debugExceptionWidget.background": "#4c566a", "debugExceptionWidget.border": "#2e3440", "debugToolBar.background": "#3b4252", "descriptionForeground": "#d8dee9e6", "diffEditor.insertedTextBackground": "#81a1c133", "diffEditor.removedTextBackground": "#bf616a4d", "dropdown.background": "#3b4252", "dropdown.border": "#3b4252", "dropdown.foreground": "#d8dee9", "editorActiveLineNumber.foreground": "#d8dee9cc", "editorCursor.foreground": "#d8dee9", "editorHint.border": "#ebcb8b00", "editorHint.foreground": "#ebcb8b", "editorIndentGuide.background": "#434c5eb3", "editorIndentGuide.activeBackground": "#4c566a", "editorInlayHint.background": "#434c5e", "editorInlayHint.foreground": "#d8dee9", "editorLineNumber.foreground": "#4c566a", "editorLineNumber.activeForeground": "#d8dee9", "editorWhitespace.foreground": "#4c566ab3", "editorWidget.background": "#2e3440", "editorWidget.border": "#3b4252", "editor.background": "#2e3440", "editor.foreground": "#d8dee9", "editor.hoverHighlightBackground": "#3b4252", "editor.findMatchBackground": "#88c0d066", "editor.findMatchHighlightBackground": "#88c0d033", "editor.findRangeHighlightBackground": "#88c0d033", "editor.lineHighlightBackground": "#3b4252", "editor.lineHighlightBorder": "#3b4252", "editor.inactiveSelectionBackground": "#434c5ecc", "editor.inlineValuesBackground": "#4c566a", "editor.inlineValuesForeground": "#eceff4", "editor.selectionBackground": "#434c5ecc", "editor.selectionHighlightBackground": "#434c5ecc", "editor.rangeHighlightBackground": "#434c5e52", "editor.wordHighlightBackground": "#81a1c166", "editor.wordHighlightStrongBackground": "#81a1c199", "editor.stackFrameHighlightBackground": "#5e81ac", "editor.focusedStackFrameHighlightBackground": "#5e81ac", "editorError.foreground": "#bf616a", "editorError.border": "#bf616a00", "editorWarning.foreground": "#ebcb8b", "editorWarning.border": "#ebcb8b00", "editorBracketMatch.background": "#2e344000", "editorBracketMatch.border": "#88c0d0", "editorBracketHighlight.foreground1": "#8fbcbb", "editorBracketHighlight.foreground2": "#88c0d0", "editorBracketHighlight.foreground3": "#81a1c1", "editorBracketHighlight.foreground4": "#5e81ac", "editorBracketHighlight.foreground5": "#8fbcbb", "editorBracketHighlight.foreground6": "#88c0d0", "editorBracketHighlight.unexpectedBracket.foreground": "#bf616a", "editorCodeLens.foreground": "#4c566a", "editorGroup.background": "#2e3440", "editorGroup.border": "#3b425201", "editorGroup.dropBackground": "#3b425299", "editorGroupHeader.border": "#3b425200", "editorGroupHeader.noTabsBackground": "#2e3440", "editorGroupHeader.tabsBackground": "#2e3440", "editorGroupHeader.tabsBorder": "#3b425200", "editorGutter.background": "#2e3440", "editorGutter.modifiedBackground": "#ebcb8b", "editorGutter.addedBackground": "#a3be8c", "editorGutter.deletedBackground": "#bf616a", "editorHoverWidget.background": "#3b4252", "editorHoverWidget.border": "#3b4252", "editorLink.activeForeground": "#88c0d0", "editorMarkerNavigation.background": "#5e81acc0", "editorMarkerNavigationError.background": "#bf616ac0", "editorMarkerNavigationWarning.background": "#ebcb8bc0", "editorOverviewRuler.border": "#3b4252", "editorOverviewRuler.currentContentForeground": "#3b4252", "editorOverviewRuler.incomingContentForeground": "#3b4252", "editorOverviewRuler.findMatchForeground": "#88c0d066", "editorOverviewRuler.rangeHighlightForeground": "#88c0d066", "editorOverviewRuler.selectionHighlightForeground": "#88c0d066", "editorOverviewRuler.wordHighlightForeground": "#88c0d066", "editorOverviewRuler.wordHighlightStrongForeground": "#88c0d066", "editorOverviewRuler.modifiedForeground": "#ebcb8b", "editorOverviewRuler.addedForeground": "#a3be8c", "editorOverviewRuler.deletedForeground": "#bf616a", "editorOverviewRuler.errorForeground": "#bf616a", "editorOverviewRuler.warningForeground": "#ebcb8b", "editorOverviewRuler.infoForeground": "#81a1c1", "editorRuler.foreground": "#434c5e", "editorSuggestWidget.background": "#2e3440", "editorSuggestWidget.border": "#3b4252", "editorSuggestWidget.foreground": "#d8dee9", "editorSuggestWidget.focusHighlightForeground": "#88c0d0", "editorSuggestWidget.highlightForeground": "#88c0d0", "editorSuggestWidget.selectedBackground": "#434c5e", "editorSuggestWidget.selectedForeground": "#d8dee9", "extensionButton.prominentForeground": "#d8dee9", "extensionButton.prominentBackground": "#434c5e", "extensionButton.prominentHoverBackground": "#4c566a", "errorForeground": "#bf616a", "gitDecoration.modifiedResourceForeground": "#ebcb8b", "gitDecoration.deletedResourceForeground": "#bf616a", "gitDecoration.untrackedResourceForeground": "#a3be8c", "gitDecoration.ignoredResourceForeground": "#d8dee966", "gitDecoration.conflictingResourceForeground": "#5e81ac", "gitDecoration.submoduleResourceForeground": "#8fbcbb", "gitDecoration.stageDeletedResourceForeground": "#bf616a", "gitDecoration.stageModifiedResourceForeground": "#ebcb8b", "input.background": "#3b4252", "input.foreground": "#d8dee9", "input.placeholderForeground": "#d8dee999", "input.border": "#3b4252", "inputOption.activeBackground": "#5e81ac", "inputOption.activeBorder": "#5e81ac", "inputOption.activeForeground": "#eceff4", "inputValidation.errorBackground": "#bf616a", "inputValidation.errorBorder": "#bf616a", "inputValidation.infoBackground": "#81a1c1", "inputValidation.infoBorder": "#81a1c1", "inputValidation.warningBackground": "#d08770", "inputValidation.warningBorder": "#d08770", "keybindingLabel.background": "#4c566a", "keybindingLabel.border": "#4c566a", "keybindingLabel.bottomBorder": "#4c566a", "keybindingLabel.foreground": "#d8dee9", "list.activeSelectionBackground": "#88c0d0", "list.activeSelectionForeground": "#2e3440", "list.inactiveSelectionBackground": "#434c5e", "list.inactiveSelectionForeground": "#d8dee9", "list.inactiveFocusBackground": "#434c5ecc", "list.hoverForeground": "#eceff4", "list.focusForeground": "#d8dee9", "list.focusBackground": "#88c0d099", "list.focusHighlightForeground": "#eceff4", "list.hoverBackground": "#3b4252", "list.dropBackground": "#88c0d099", "list.highlightForeground": "#88c0d0", "list.errorForeground": "#bf616a", "list.warningForeground": "#ebcb8b", "merge.currentHeaderBackground": "#81a1c166", "merge.currentContentBackground": "#81a1c14d", "merge.incomingHeaderBackground": "#8fbcbb66", "merge.incomingContentBackground": "#8fbcbb4d", "merge.border": "#3b425200", "minimap.background": "#2e3440", "minimap.errorHighlight": "#bf616acc", "minimap.findMatchHighlight": "#88c0d0", "minimap.selectionHighlight": "#88c0d0cc", "minimap.warningHighlight": "#ebcb8bcc", "minimapGutter.addedBackground": "#a3be8c", "minimapGutter.deletedBackground": "#bf616a", "minimapGutter.modifiedBackground": "#ebcb8b", "minimapSlider.activeBackground": "#434c5eaa", "minimapSlider.background": "#434c5e99", "minimapSlider.hoverBackground": "#434c5eaa", "notification.background": "#3b4252", "notification.buttonBackground": "#434c5e", "notification.buttonForeground": "#d8dee9", "notification.buttonHoverBackground": "#4c566a", "notification.errorBackground": "#bf616a", "notification.errorForeground": "#2e3440", "notification.foreground": "#d8dee9", "notification.infoBackground": "#88c0d0", "notification.infoForeground": "#2e3440", "notification.warningBackground": "#ebcb8b", "notification.warningForeground": "#2e3440", "notificationCenter.border": "#3b425200", "notificationCenterHeader.background": "#2e3440", "notificationCenterHeader.foreground": "#88c0d0", "notificationLink.foreground": "#88c0d0", "notifications.background": "#3b4252", "notifications.border": "#2e3440", "notifications.foreground": "#d8dee9", "notificationToast.border": "#3b425200", "panel.background": "#2e3440", "panel.border": "#3b4252", "panelTitle.activeBorder": "#88c0d000", "panelTitle.activeForeground": "#88c0d0", "panelTitle.inactiveForeground": "#d8dee9", "peekView.border": "#4c566a", "peekViewEditor.background": "#2e3440", "peekViewEditorGutter.background": "#2e3440", "peekViewEditor.matchHighlightBackground": "#88c0d04d", "peekViewResult.background": "#2e3440", "peekViewResult.fileForeground": "#88c0d0", "peekViewResult.lineForeground": "#d8dee966", "peekViewResult.matchHighlightBackground": "#88c0d0cc", "peekViewResult.selectionBackground": "#434c5e", "peekViewResult.selectionForeground": "#d8dee9", "peekViewTitle.background": "#3b4252", "peekViewTitleDescription.foreground": "#d8dee9", "peekViewTitleLabel.foreground": "#88c0d0", "pickerGroup.border": "#3b4252", "pickerGroup.foreground": "#88c0d0", "progressBar.background": "#88c0d0", "quickInputList.focusBackground": "#88c0d0", "quickInputList.focusForeground": "#2e3440", "sash.hoverBorder": "#88c0d0", "scrollbar.shadow": "#00000066", "scrollbarSlider.activeBackground": "#434c5eaa", "scrollbarSlider.background": "#434c5e99", "scrollbarSlider.hoverBackground": "#434c5eaa", "selection.background": "#88c0d099", "sideBar.background": "#2e3440", "sideBar.foreground": "#d8dee9", "sideBar.border": "#3b4252", "sideBarSectionHeader.background": "#3b4252", "sideBarSectionHeader.foreground": "#d8dee9", "sideBarTitle.foreground": "#d8dee9", "statusBar.background": "#3b4252", "statusBar.debuggingBackground": "#5e81ac", "statusBar.debuggingForeground": "#d8dee9", "statusBar.noFolderForeground": "#d8dee9", "statusBar.noFolderBackground": "#3b4252", "statusBar.foreground": "#d8dee9", "statusBarItem.activeBackground": "#4c566a", "statusBarItem.hoverBackground": "#434c5e", "statusBarItem.prominentBackground": "#3b4252", "statusBarItem.prominentHoverBackground": "#434c5e", "statusBarItem.errorBackground": "#3b4252", "statusBarItem.errorForeground": "#bf616a", "statusBarItem.warningBackground": "#ebcb8b", "statusBarItem.warningForeground": "#2e3440", "statusBar.border": "#3b425200", "tab.activeBackground": "#3b4252", "tab.activeForeground": "#d8dee9", "tab.border": "#3b425200", "tab.activeBorder": "#88c0d000", "tab.unfocusedActiveBorder": "#88c0d000", "tab.inactiveBackground": "#2e3440", "tab.inactiveForeground": "#d8dee966", "tab.unfocusedActiveForeground": "#d8dee999", "tab.unfocusedInactiveForeground": "#d8dee966", "tab.hoverBackground": "#3b4252cc", "tab.unfocusedHoverBackground": "#3b4252b3", "tab.hoverBorder": "#88c0d000", "tab.unfocusedHoverBorder": "#88c0d000", "tab.activeBorderTop": "#88c0d000", "tab.unfocusedActiveBorderTop": "#88c0d000", "tab.lastPinnedBorder": "#4c566a", "terminal.background": "#2e3440", "terminal.foreground": "#d8dee9", "terminal.ansiBlack": "#3b4252", "terminal.ansiRed": "#bf616a", "terminal.ansiGreen": "#a3be8c", "terminal.ansiYellow": "#ebcb8b", "terminal.ansiBlue": "#81a1c1", "terminal.ansiMagenta": "#b48ead", "terminal.ansiCyan": "#88c0d0", "terminal.ansiWhite": "#e5e9f0", "terminal.ansiBrightBlack": "#4c566a", "terminal.ansiBrightRed": "#bf616a", "terminal.ansiBrightGreen": "#a3be8c", "terminal.ansiBrightYellow": "#ebcb8b", "terminal.ansiBrightBlue": "#81a1c1", "terminal.ansiBrightMagenta": "#b48ead", "terminal.ansiBrightCyan": "#8fbcbb", "terminal.ansiBrightWhite": "#eceff4", "terminal.tab.activeBorder": "#88c0d0", "textBlockQuote.background": "#3b4252", "textBlockQuote.border": "#81a1c1", "textCodeBlock.background": "#4c566a", "textLink.activeForeground": "#88c0d0", "textLink.foreground": "#88c0d0", "textPreformat.foreground": "#8fbcbb", "textSeparator.foreground": "#eceff4", "titleBar.activeBackground": "#2e3440", "titleBar.activeForeground": "#d8dee9", "titleBar.border": "#2e344000", "titleBar.inactiveBackground": "#2e3440", "titleBar.inactiveForeground": "#d8dee966", "tree.indentGuidesStroke": "#616e88", "walkThrough.embeddedEditorBackground": "#2e3440", "welcomePage.buttonBackground": "#434c5e", "welcomePage.buttonHoverBackground": "#4c566a", "widget.shadow": "#00000066" }, "tokenColors": [ { "settings": { "foreground": "#d8dee9ff", "background": "#2e3440ff" } }, { "scope": "emphasis", "settings": { "fontStyle": "italic" } }, { "scope": "strong", "settings": { "fontStyle": "bold" } }, { "name": "Comment", "scope": "comment", "settings": { "foreground": "#616E88" } }, { "name": "Constant Character", "scope": "constant.character", "settings": { "foreground": "#EBCB8B" } }, { "name": "Constant Character Escape", "scope": "constant.character.escape", "settings": { "foreground": "#EBCB8B" } }, { "name": "Constant Language", "scope": "constant.language", "settings": { "foreground": "#81A1C1" } }, { "name": "Constant Numeric", "scope": "constant.numeric", "settings": { "foreground": "#B48EAD" } }, { "name": "Constant Regexp", "scope": "constant.regexp", "settings": { "foreground": "#EBCB8B" } }, { "name": "Entity Name Class/Type", "scope": ["entity.name.class", "entity.name.type.class"], "settings": { "foreground": "#8FBCBB" } }, { "name": "Entity Name Function", "scope": "entity.name.function", "settings": { "foreground": "#88C0D0" } }, { "name": "Entity Name Tag", "scope": "entity.name.tag", "settings": { "foreground": "#81A1C1" } }, { "name": "Entity Other Attribute Name", "scope": "entity.other.attribute-name", "settings": { "foreground": "#8FBCBB" } }, { "name": "Entity Other Inherited Class", "scope": "entity.other.inherited-class", "settings": { "fontStyle": "bold", "foreground": "#8FBCBB" } }, { "name": "Invalid Deprecated", "scope": "invalid.deprecated", "settings": { "foreground": "#D8DEE9", "background": "#EBCB8B" } }, { "name": "Invalid Illegal", "scope": "invalid.illegal", "settings": { "foreground": "#D8DEE9", "background": "#BF616A" } }, { "name": "Keyword", "scope": "keyword", "settings": { "foreground": "#81A1C1" } }, { "name": "Keyword Operator", "scope": "keyword.operator", "settings": { "foreground": "#81A1C1" } }, { "name": "Keyword Other New", "scope": "keyword.other.new", "settings": { "foreground": "#81A1C1" } }, { "name": "Markup Bold", "scope": "markup.bold", "settings": { "fontStyle": "bold" } }, { "name": "Markup Changed", "scope": "markup.changed", "settings": { "foreground": "#EBCB8B" } }, { "name": "Markup Deleted", "scope": "markup.deleted", "settings": { "foreground": "#BF616A" } }, { "name": "Markup Inserted", "scope": "markup.inserted", "settings": { "foreground": "#A3BE8C" } }, { "name": "Meta Preprocessor", "scope": "meta.preprocessor", "settings": { "foreground": "#5E81AC" } }, { "name": "Punctuation", "scope": "punctuation", "settings": { "foreground": "#ECEFF4" } }, { "name": "Punctuation Definition Parameters", "scope": [ "punctuation.definition.method-parameters", "punctuation.definition.function-parameters", "punctuation.definition.parameters" ], "settings": { "foreground": "#ECEFF4" } }, { "name": "Punctuation Definition Tag", "scope": "punctuation.definition.tag", "settings": { "foreground": "#81A1C1" } }, { "name": "Punctuation Definition Comment", "scope": [ "punctuation.definition.comment", "punctuation.end.definition.comment", "punctuation.start.definition.comment" ], "settings": { "foreground": "#616E88" } }, { "name": "Punctuation Section", "scope": "punctuation.section", "settings": { "foreground": "#ECEFF4" } }, { "name": "Punctuation Section Embedded", "scope": [ "punctuation.section.embedded.begin", "punctuation.section.embedded.end" ], "settings": { "foreground": "#81A1C1" } }, { "name": "Punctuation Terminator", "scope": "punctuation.terminator", "settings": { "foreground": "#81A1C1" } }, { "name": "Punctuation Variable", "scope": "punctuation.definition.variable", "settings": { "foreground": "#81A1C1" } }, { "name": "Storage", "scope": "storage", "settings": { "foreground": "#81A1C1" } }, { "name": "String", "scope": "string", "settings": { "foreground": "#A3BE8C" } }, { "name": "String Regexp", "scope": "string.regexp", "settings": { "foreground": "#EBCB8B" } }, { "name": "Support Class", "scope": "support.class", "settings": { "foreground": "#8FBCBB" } }, { "name": "Support Constant", "scope": "support.constant", "settings": { "foreground": "#81A1C1" } }, { "name": "Support Function", "scope": "support.function", "settings": { "foreground": "#88C0D0" } }, { "name": "Support Function Construct", "scope": "support.function.construct", "settings": { "foreground": "#81A1C1" } }, { "name": "Support Type", "scope": "support.type", "settings": { "foreground": "#8FBCBB" } }, { "name": "Support Type Exception", "scope": "support.type.exception", "settings": { "foreground": "#8FBCBB" } }, { "name": "Token Debug", "scope": "token.debug-token", "settings": { "foreground": "#b48ead" } }, { "name": "Token Error", "scope": "token.error-token", "settings": { "foreground": "#bf616a" } }, { "name": "Token Info", "scope": "token.info-token", "settings": { "foreground": "#88c0d0" } }, { "name": "Token Warning", "scope": "token.warn-token", "settings": { "foreground": "#ebcb8b" } }, { "name": "Variable", "scope": "variable.other", "settings": { "foreground": "#D8DEE9" } }, { "name": "Variable Language", "scope": "variable.language", "settings": { "foreground": "#81A1C1" } }, { "name": "Variable Parameter", "scope": "variable.parameter", "settings": { "foreground": "#D8DEE9" } }, { "name": "[C/CPP] Punctuation Separator Pointer-Access", "scope": "punctuation.separator.pointer-access.c", "settings": { "foreground": "#81A1C1" } }, { "name": "[C/CPP] Meta Preprocessor Include", "scope": [ "source.c meta.preprocessor.include", "source.c string.quoted.other.lt-gt.include" ], "settings": { "foreground": "#8FBCBB" } }, { "name": "[C/CPP] Conditional Directive", "scope": [ "source.cpp keyword.control.directive.conditional", "source.cpp punctuation.definition.directive", "source.c keyword.control.directive.conditional", "source.c punctuation.definition.directive" ], "settings": { "foreground": "#5E81AC", "fontStyle": "bold" } }, { "name": "[CSS] Constant Other Color RGB Value", "scope": "source.css constant.other.color.rgb-value", "settings": { "foreground": "#B48EAD" } }, { "name": "[CSS](Function) Meta Property-Value", "scope": "source.css meta.property-value", "settings": { "foreground": "#88C0D0" } }, { "name": "[CSS] Media Queries", "scope": [ "source.css keyword.control.at-rule.media", "source.css keyword.control.at-rule.media punctuation.definition.keyword" ], "settings": { "foreground": "#D08770" } }, { "name": "[CSS] Punctuation Definition Keyword", "scope": "source.css punctuation.definition.keyword", "settings": { "foreground": "#81A1C1" } }, { "name": "[CSS] Support Type Property Name", "scope": "source.css support.type.property-name", "settings": { "foreground": "#D8DEE9" } }, { "name": "[diff] Meta Range Context", "scope": "source.diff meta.diff.range.context", "settings": { "foreground": "#8FBCBB" } }, { "name": "[diff] Meta Header From-File", "scope": "source.diff meta.diff.header.from-file", "settings": { "foreground": "#8FBCBB" } }, { "name": "[diff] Punctuation Definition From-File", "scope": "source.diff punctuation.definition.from-file", "settings": { "foreground": "#8FBCBB" } }, { "name": "[diff] Punctuation Definition Range", "scope": "source.diff punctuation.definition.range", "settings": { "foreground": "#8FBCBB" } }, { "name": "[diff] Punctuation Definition Separator", "scope": "source.diff punctuation.definition.separator", "settings": { "foreground": "#81A1C1" } }, { "name": "[Elixir](JakeBecker.elixir-ls) module names", "scope": "entity.name.type.module.elixir", "settings": { "foreground": "#8FBCBB" } }, { "name": "[Elixir](JakeBecker.elixir-ls) module attributes", "scope": "variable.other.readwrite.module.elixir", "settings": { "foreground": "#D8DEE9", "fontStyle": "bold" } }, { "name": "[Elixir](JakeBecker.elixir-ls) atoms", "scope": "constant.other.symbol.elixir", "settings": { "foreground": "#D8DEE9", "fontStyle": "bold" } }, { "name": "[Elixir](JakeBecker.elixir-ls) modules", "scope": "variable.other.constant.elixir", "settings": { "foreground": "#8FBCBB" } }, { "name": "[Go] String Format Placeholder", "scope": "source.go constant.other.placeholder.go", "settings": { "foreground": "#EBCB8B" } }, { "name": "[Java](JavaDoc) Comment Block Documentation HTML Entities", "scope": "source.java comment.block.documentation.javadoc punctuation.definition.entity.html", "settings": { "foreground": "#81A1C1" } }, { "name": "[Java](JavaDoc) Constant Other", "scope": "source.java constant.other", "settings": { "foreground": "#D8DEE9" } }, { "name": "[Java](JavaDoc) Keyword Other Documentation", "scope": "source.java keyword.other.documentation", "settings": { "foreground": "#8FBCBB" } }, { "name": "[Java](JavaDoc) Keyword Other Documentation Author", "scope": "source.java keyword.other.documentation.author.javadoc", "settings": { "foreground": "#8FBCBB" } }, { "name": "[Java](JavaDoc) Keyword Other Documentation Directive/Custom", "scope": [ "source.java keyword.other.documentation.directive", "source.java keyword.other.documentation.custom" ], "settings": { "foreground": "#8FBCBB" } }, { "name": "[Java](JavaDoc) Keyword Other Documentation See", "scope": "source.java keyword.other.documentation.see.javadoc", "settings": { "foreground": "#8FBCBB" } }, { "name": "[Java] Meta Method-Call", "scope": "source.java meta.method-call meta.method", "settings": { "foreground": "#88C0D0" } }, { "name": "[Java](JavaDoc) Meta Tag Template Link", "scope": [ "source.java meta.tag.template.link.javadoc", "source.java string.other.link.title.javadoc" ], "settings": { "foreground": "#8FBCBB" } }, { "name": "[Java](JavaDoc) Meta Tag Template Value", "scope": "source.java meta.tag.template.value.javadoc", "settings": { "foreground": "#88C0D0" } }, { "name": "[Java](JavaDoc) Punctuation Definition Keyword", "scope": "source.java punctuation.definition.keyword.javadoc", "settings": { "foreground": "#8FBCBB" } }, { "name": "[Java](JavaDoc) Punctuation Definition Tag", "scope": [ "source.java punctuation.definition.tag.begin.javadoc", "source.java punctuation.definition.tag.end.javadoc" ], "settings": { "foreground": "#616E88" } }, { "name": "[Java] Storage Modifier Import", "scope": "source.java storage.modifier.import", "settings": { "foreground": "#8FBCBB" } }, { "name": "[Java] Storage Modifier Package", "scope": "source.java storage.modifier.package", "settings": { "foreground": "#8FBCBB" } }, { "name": "[Java] Storage Type", "scope": "source.java storage.type", "settings": { "foreground": "#8FBCBB" } }, { "name": "[Java] Storage Type Annotation", "scope": "source.java storage.type.annotation", "settings": { "foreground": "#D08770" } }, { "name": "[Java] Storage Type Generic", "scope": "source.java storage.type.generic", "settings": { "foreground": "#8FBCBB" } }, { "name": "[Java] Storage Type Primitive", "scope": "source.java storage.type.primitive", "settings": { "foreground": "#81A1C1" } }, { "name": "[JavaScript] Decorator", "scope": [ "source.js punctuation.decorator", "source.js meta.decorator variable.other.readwrite", "source.js meta.decorator entity.name.function" ], "settings": { "foreground": "#D08770" } }, { "name": "[JavaScript] Meta Object-Literal Key", "scope": "source.js meta.object-literal.key", "settings": { "foreground": "#88C0D0" } }, { "name": "[JavaScript](JSDoc) Storage Type Class", "scope": "source.js storage.type.class.jsdoc", "settings": { "foreground": "#8FBCBB" } }, { "name": "[JavaScript] String Template Literals Punctuation", "scope": [ "source.js string.quoted.template punctuation.quasi.element.begin", "source.js string.quoted.template punctuation.quasi.element.end", "source.js string.template punctuation.definition.template-expression" ], "settings": { "foreground": "#81A1C1" } }, { "name": "[JavaScript] Interpolated String Template Punctuation Functions", "scope": "source.js string.quoted.template meta.method-call.with-arguments", "settings": { "foreground": "#ECEFF4" } }, { "name": "[JavaScript] String Template Literal Variable", "scope": [ "source.js string.template meta.template.expression support.variable.property", "source.js string.template meta.template.expression variable.other.object" ], "settings": { "foreground": "#D8DEE9" } }, { "name": "[JavaScript] Support Type Primitive", "scope": "source.js support.type.primitive", "settings": { "foreground": "#81A1C1" } }, { "name": "[JavaScript] Variable Other Object", "scope": "source.js variable.other.object", "settings": { "foreground": "#D8DEE9" } }, { "name": "[JavaScript] Variable Other Read-Write Alias", "scope": "source.js variable.other.readwrite.alias", "settings": { "foreground": "#8FBCBB" } }, { "name": "[JavaScript] Parentheses in Template Strings", "scope": [ "source.js meta.embedded.line meta.brace.square", "source.js meta.embedded.line meta.brace.round", "source.js string.quoted.template meta.brace.square", "source.js string.quoted.template meta.brace.round" ], "settings": { "foreground": "#ECEFF4" } }, { "name": "[HTML] Constant Character Entity", "scope": "text.html.basic constant.character.entity.html", "settings": { "foreground": "#EBCB8B" } }, { "name": "[HTML] Constant Other Inline-Data", "scope": "text.html.basic constant.other.inline-data", "settings": { "foreground": "#D08770", "fontStyle": "italic" } }, { "name": "[HTML] Meta Tag SGML Doctype", "scope": "text.html.basic meta.tag.sgml.doctype", "settings": { "foreground": "#5E81AC" } }, { "name": "[HTML] Punctuation Definition Entity", "scope": "text.html.basic punctuation.definition.entity", "settings": { "foreground": "#81A1C1" } }, { "name": "[INI] Entity Name Section Group-Title", "scope": "source.properties entity.name.section.group-title.ini", "settings": { "foreground": "#88C0D0" } }, { "name": "[INI] Punctuation Separator Key-Value", "scope": "source.properties punctuation.separator.key-value.ini", "settings": { "foreground": "#81A1C1" } }, { "name": "[Markdown] Markup Fenced Code Block", "scope": [ "text.html.markdown markup.fenced_code.block", "text.html.markdown markup.fenced_code.block punctuation.definition" ], "settings": { "foreground": "#8FBCBB" } }, { "name": "[Markdown] Markup Heading", "scope": "markup.heading", "settings": { "foreground": "#88C0D0" } }, { "name": "[Markdown] Markup Inline", "scope": [ "text.html.markdown markup.inline.raw", "text.html.markdown markup.inline.raw punctuation.definition.raw" ], "settings": { "foreground": "#8FBCBB" } }, { "name": "[Markdown] Markup Italic", "scope": "text.html.markdown markup.italic", "settings": { "fontStyle": "italic" } }, { "name": "[Markdown] Markup Link", "scope": "text.html.markdown markup.underline.link", "settings": { "fontStyle": "underline" } }, { "name": "[Markdown] Markup List Numbered/Unnumbered", "scope": "text.html.markdown beginning.punctuation.definition.list", "settings": { "foreground": "#81A1C1" } }, { "name": "[Markdown] Markup Quote Punctuation Definition", "scope": "text.html.markdown beginning.punctuation.definition.quote", "settings": { "foreground": "#8FBCBB" } }, { "name": "[Markdown] Markup Quote Punctuation Definition", "scope": "text.html.markdown markup.quote", "settings": { "foreground": "#616E88" } }, { "name": "[Markdown] Markup Math Constant", "scope": "text.html.markdown constant.character.math.tex", "settings": { "foreground": "#81A1C1" } }, { "name": "[Markdown] Markup Math Definition Marker", "scope": [ "text.html.markdown punctuation.definition.math.begin", "text.html.markdown punctuation.definition.math.end" ], "settings": { "foreground": "#5E81AC" } }, { "name": "[Markdown] Markup Math Function Definition Marker", "scope": "text.html.markdown punctuation.definition.function.math.tex", "settings": { "foreground": "#88C0D0" } }, { "name": "[Markdown] Markup Math Operator", "scope": "text.html.markdown punctuation.math.operator.latex", "settings": { "foreground": "#81A1C1" } }, { "name": "[Markdown] Punctuation Definition Heading", "scope": "text.html.markdown punctuation.definition.heading", "settings": { "foreground": "#81A1C1" } }, { "name": "[Markdown] Punctuation Definition Constant/String", "scope": [ "text.html.markdown punctuation.definition.constant", "text.html.markdown punctuation.definition.string" ], "settings": { "foreground": "#81A1C1" } }, { "name": "[Markdown] String Other Link Description/Title", "scope": [ "text.html.markdown constant.other.reference.link", "text.html.markdown string.other.link.description", "text.html.markdown string.other.link.title" ], "settings": { "foreground": "#88C0D0" } }, { "name": "[Perl] Perl Sigils", "scope": "source.perl punctuation.definition.variable", "settings": { "foreground": "#D8DEE9" } }, { "name": "[PHP] Meta Function-Call Object", "scope": [ "source.php meta.function-call", "source.php meta.function-call.object" ], "settings": { "foreground": "#88C0D0" } }, { "name": "[Python] Decorator", "scope": [ "source.python entity.name.function.decorator", "source.python meta.function.decorator support.type" ], "settings": { "foreground": "#D08770" } }, { "name": "[Python] Function Call", "scope": "source.python meta.function-call.generic", "settings": { "foreground": "#88C0D0" } }, { "name": "[Python] Support Type", "scope": "source.python support.type", "settings": { "foreground": "#88C0D0" } }, { "name": "[Python] Function Parameter", "scope": ["source.python variable.parameter.function.language"], "settings": { "foreground": "#D8DEE9" } }, { "name": "[Python] Function Parameter Special", "scope": [ "source.python meta.function.parameters variable.parameter.function.language.special.self" ], "settings": { "foreground": "#81A1C1" } }, { "name": "[Rust] Entity types", "scope": "source.rust entity.name.type", "settings": { "foreground": "#8FBCBB" } }, { "name": "[Rust] Macro", "scope": "source.rust meta.macro entity.name.function", "settings": { "fontStyle": "bold", "foreground": "#88C0D0" } }, { "name": "[Rust] Attributes", "scope": [ "source.rust meta.attribute", "source.rust meta.attribute punctuation", "source.rust meta.attribute keyword.operator" ], "settings": { "foreground": "#5E81AC" } }, { "name": "[Rust] Traits", "scope": "source.rust entity.name.type.trait", "settings": { "fontStyle": "bold" } }, { "name": "[Rust] Interpolation Bracket Curly", "scope": "source.rust punctuation.definition.interpolation", "settings": { "foreground": "#EBCB8B" } }, { "name": "[SCSS] Punctuation Definition Interpolation Bracket Curly", "scope": [ "source.css.scss punctuation.definition.interpolation.begin.bracket.curly", "source.css.scss punctuation.definition.interpolation.end.bracket.curly" ], "settings": { "foreground": "#81A1C1" } }, { "name": "[SCSS] Variable Interpolation", "scope": "source.css.scss variable.interpolation", "settings": { "foreground": "#D8DEE9", "fontStyle": "italic" } }, { "name": "[TypeScript] Decorators", "scope": [ "source.ts punctuation.decorator", "source.ts meta.decorator variable.other.readwrite", "source.ts meta.decorator entity.name.function", "source.tsx punctuation.decorator", "source.tsx meta.decorator variable.other.readwrite", "source.tsx meta.decorator entity.name.function" ], "settings": { "foreground": "#D08770" } }, { "name": "[TypeScript] Object-literal keys", "scope": [ "source.ts meta.object-literal.key", "source.tsx meta.object-literal.key" ], "settings": { "foreground": "#D8DEE9" } }, { "name": "[TypeScript] Object-literal functions", "scope": [ "source.ts meta.object-literal.key entity.name.function", "source.tsx meta.object-literal.key entity.name.function" ], "settings": { "foreground": "#88C0D0" } }, { "name": "[TypeScript] Type/Class", "scope": [ "source.ts support.class", "source.ts support.type", "source.ts entity.name.type", "source.ts entity.name.class", "source.tsx support.class", "source.tsx support.type", "source.tsx entity.name.type", "source.tsx entity.name.class" ], "settings": { "foreground": "#8FBCBB" } }, { "name": "[TypeScript] Static Class Support", "scope": [ "source.ts support.constant.math", "source.ts support.constant.dom", "source.ts support.constant.json", "source.tsx support.constant.math", "source.tsx support.constant.dom", "source.tsx support.constant.json" ], "settings": { "foreground": "#8FBCBB" } }, { "name": "[TypeScript] Variables", "scope": ["source.ts support.variable", "source.tsx support.variable"], "settings": { "foreground": "#D8DEE9" } }, { "name": "[TypeScript] Parentheses in Template Strings", "scope": [ "source.ts meta.embedded.line meta.brace.square", "source.ts meta.embedded.line meta.brace.round", "source.tsx meta.embedded.line meta.brace.square", "source.tsx meta.embedded.line meta.brace.round" ], "settings": { "foreground": "#ECEFF4" } }, { "name": "[XML] Entity Name Tag Namespace", "scope": "text.xml entity.name.tag.namespace", "settings": { "foreground": "#8FBCBB" } }, { "name": "[XML] Keyword Other Doctype", "scope": "text.xml keyword.other.doctype", "settings": { "foreground": "#5E81AC" } }, { "name": "[XML] Meta Tag Preprocessor", "scope": "text.xml meta.tag.preprocessor entity.name.tag", "settings": { "foreground": "#5E81AC" } }, { "name": "[XML] Entity Name Tag Namespace", "scope": [ "text.xml string.unquoted.cdata", "text.xml string.unquoted.cdata punctuation.definition.string" ], "settings": { "foreground": "#D08770", "fontStyle": "italic" } }, { "name": "[YAML] Entity Name Tag", "scope": "source.yaml entity.name.tag", "settings": { "foreground": "#8FBCBB" } } ] } ================================================ FILE: apps/web/src/lib/shiki/themes/one-dark-pro.json ================================================ { "name": "one-dark-pro", "type": "dark", "semanticHighlighting": true, "semanticTokenColors": { "enumMember": { "foreground": "#56b6c2" }, "variable.constant": { "foreground": "#d19a66" }, "variable.defaultLibrary": { "foreground": "#e5c07b" }, "variable:dart": { "foreground": "#d19a66" }, "property:dart": { "foreground": "#d19a66" }, "annotation:dart": { "foreground": "#d19a66" }, "parameter.label:dart": { "foreground": "#abb2bf" }, "macro": { "foreground": "#d19a66" } }, "tokenColors": [ { "scope": "meta.embedded", "settings": { "foreground": "#abb2bf" } }, { "name": "unison punctuation", "scope": "punctuation.definition.delayed.unison,punctuation.definition.list.begin.unison,punctuation.definition.list.end.unison,punctuation.definition.ability.begin.unison,punctuation.definition.ability.end.unison,punctuation.operator.assignment.as.unison,punctuation.separator.pipe.unison,punctuation.separator.delimiter.unison,punctuation.definition.hash.unison", "settings": { "foreground": "#e06c75" } }, { "name": "haskell variable generic-type", "scope": "variable.other.generic-type.haskell", "settings": { "foreground": "#c678dd" } }, { "name": "haskell storage type", "scope": "storage.type.haskell", "settings": { "foreground": "#d19a66" } }, { "name": "support.variable.magic.python", "scope": "support.variable.magic.python", "settings": { "foreground": "#e06c75" } }, { "name": "punctuation.separator.parameters.python", "scope": "punctuation.separator.period.python,punctuation.separator.element.python,punctuation.parenthesis.begin.python,punctuation.parenthesis.end.python", "settings": { "foreground": "#abb2bf" } }, { "name": "variable.parameter.function.language.special.self.python", "scope": "variable.parameter.function.language.special.self.python", "settings": { "foreground": "#e5c07b" } }, { "name": "variable.parameter.function.language.special.cls.python", "scope": "variable.parameter.function.language.special.cls.python", "settings": { "foreground": "#e5c07b" } }, { "name": "storage.modifier.lifetime.rust", "scope": "storage.modifier.lifetime.rust", "settings": { "foreground": "#abb2bf" } }, { "name": "support.function.std.rust", "scope": "support.function.std.rust", "settings": { "foreground": "#61afef" } }, { "name": "entity.name.lifetime.rust", "scope": "entity.name.lifetime.rust", "settings": { "foreground": "#e5c07b" } }, { "name": "variable.language.rust", "scope": "variable.language.rust", "settings": { "foreground": "#e06c75" } }, { "name": "support.constant.edge", "scope": "support.constant.edge", "settings": { "foreground": "#c678dd" } }, { "name": "regexp constant character-class", "scope": "constant.other.character-class.regexp", "settings": { "foreground": "#e06c75" } }, { "name": "keyword.operator", "scope": ["keyword.operator.word"], "settings": { "foreground": "#c678dd" } }, { "name": "regexp operator.quantifier", "scope": "keyword.operator.quantifier.regexp", "settings": { "foreground": "#d19a66" } }, { "name": "Text", "scope": "variable.parameter.function", "settings": { "foreground": "#abb2bf" } }, { "name": "Comment Markup Link", "scope": "comment markup.link", "settings": { "foreground": "#5c6370" } }, { "name": "markup diff", "scope": "markup.changed.diff", "settings": { "foreground": "#e5c07b" } }, { "name": "diff", "scope": "meta.diff.header.from-file,meta.diff.header.to-file,punctuation.definition.from-file.diff,punctuation.definition.to-file.diff", "settings": { "foreground": "#61afef" } }, { "name": "inserted.diff", "scope": "markup.inserted.diff", "settings": { "foreground": "#98c379" } }, { "name": "deleted.diff", "scope": "markup.deleted.diff", "settings": { "foreground": "#e06c75" } }, { "name": "c++ function", "scope": "meta.function.c,meta.function.cpp", "settings": { "foreground": "#e06c75" } }, { "name": "c++ block", "scope": "punctuation.section.block.begin.bracket.curly.cpp,punctuation.section.block.end.bracket.curly.cpp,punctuation.terminator.statement.c,punctuation.section.block.begin.bracket.curly.c,punctuation.section.block.end.bracket.curly.c,punctuation.section.parens.begin.bracket.round.c,punctuation.section.parens.end.bracket.round.c,punctuation.section.parameters.begin.bracket.round.c,punctuation.section.parameters.end.bracket.round.c", "settings": { "foreground": "#abb2bf" } }, { "name": "js/ts punctuation separator key-value", "scope": "punctuation.separator.key-value", "settings": { "foreground": "#abb2bf" } }, { "name": "js/ts import keyword", "scope": "keyword.operator.expression.import", "settings": { "foreground": "#61afef" } }, { "name": "math js/ts", "scope": "support.constant.math", "settings": { "foreground": "#e5c07b" } }, { "name": "math property js/ts", "scope": "support.constant.property.math", "settings": { "foreground": "#d19a66" } }, { "name": "js/ts variable.other.constant", "scope": "variable.other.constant", "settings": { "foreground": "#e5c07b" } }, { "name": "java type", "scope": [ "storage.type.annotation.java", "storage.type.object.array.java" ], "settings": { "foreground": "#e5c07b" } }, { "name": "java source", "scope": "source.java", "settings": { "foreground": "#e06c75" } }, { "name": "java modifier.import", "scope": "punctuation.section.block.begin.java,punctuation.section.block.end.java,punctuation.definition.method-parameters.begin.java,punctuation.definition.method-parameters.end.java,meta.method.identifier.java,punctuation.section.method.begin.java,punctuation.section.method.end.java,punctuation.terminator.java,punctuation.section.class.begin.java,punctuation.section.class.end.java,punctuation.section.inner-class.begin.java,punctuation.section.inner-class.end.java,meta.method-call.java,punctuation.section.class.begin.bracket.curly.java,punctuation.section.class.end.bracket.curly.java,punctuation.section.method.begin.bracket.curly.java,punctuation.section.method.end.bracket.curly.java,punctuation.separator.period.java,punctuation.bracket.angle.java,punctuation.definition.annotation.java,meta.method.body.java", "settings": { "foreground": "#abb2bf" } }, { "name": "java modifier.import", "scope": "meta.method.java", "settings": { "foreground": "#61afef" } }, { "name": "java modifier.import", "scope": "storage.modifier.import.java,storage.type.java,storage.type.generic.java", "settings": { "foreground": "#e5c07b" } }, { "name": "java instanceof", "scope": "keyword.operator.instanceof.java", "settings": { "foreground": "#c678dd" } }, { "name": "java variable.name", "scope": "meta.definition.variable.name.java", "settings": { "foreground": "#e06c75" } }, { "name": "operator logical", "scope": "keyword.operator.logical", "settings": { "foreground": "#56b6c2" } }, { "name": "operator bitwise", "scope": "keyword.operator.bitwise", "settings": { "foreground": "#56b6c2" } }, { "name": "operator channel", "scope": "keyword.operator.channel", "settings": { "foreground": "#56b6c2" } }, { "name": "support.constant.property-value.scss", "scope": "support.constant.property-value.scss,support.constant.property-value.css", "settings": { "foreground": "#d19a66" } }, { "name": "CSS/SCSS/LESS Operators", "scope": "keyword.operator.css,keyword.operator.scss,keyword.operator.less", "settings": { "foreground": "#56b6c2" } }, { "name": "css color standard name", "scope": "support.constant.color.w3c-standard-color-name.css,support.constant.color.w3c-standard-color-name.scss", "settings": { "foreground": "#d19a66" } }, { "name": "css comma", "scope": "punctuation.separator.list.comma.css", "settings": { "foreground": "#abb2bf" } }, { "name": "css attribute-name.id", "scope": "support.constant.color.w3c-standard-color-name.css", "settings": { "foreground": "#d19a66" } }, { "name": "css property-name", "scope": "support.type.vendored.property-name.css", "settings": { "foreground": "#56b6c2" } }, { "name": "js/ts module", "scope": "support.module.node,support.type.object.module,support.module.node", "settings": { "foreground": "#e5c07b" } }, { "name": "entity.name.type.module", "scope": "entity.name.type.module", "settings": { "foreground": "#e5c07b" } }, { "name": "js variable readwrite", "scope": "variable.other.readwrite,meta.object-literal.key,support.variable.property,support.variable.object.process,support.variable.object.node", "settings": { "foreground": "#e06c75" } }, { "name": "js/ts json", "scope": "support.constant.json", "settings": { "foreground": "#d19a66" } }, { "name": "js/ts Keyword", "scope": [ "keyword.operator.expression.instanceof", "keyword.operator.new", "keyword.operator.ternary", "keyword.operator.optional", "keyword.operator.expression.keyof" ], "settings": { "foreground": "#c678dd" } }, { "name": "js/ts console", "scope": "support.type.object.console", "settings": { "foreground": "#e06c75" } }, { "name": "js/ts support.variable.property.process", "scope": "support.variable.property.process", "settings": { "foreground": "#d19a66" } }, { "name": "js console function", "scope": "entity.name.function,support.function.console", "settings": { "foreground": "#61afef" } }, { "name": "keyword.operator.misc.rust", "scope": "keyword.operator.misc.rust", "settings": { "foreground": "#abb2bf" } }, { "name": "keyword.operator.sigil.rust", "scope": "keyword.operator.sigil.rust", "settings": { "foreground": "#c678dd" } }, { "name": "operator", "scope": "keyword.operator.delete", "settings": { "foreground": "#c678dd" } }, { "name": "js dom", "scope": "support.type.object.dom", "settings": { "foreground": "#56b6c2" } }, { "name": "js dom variable", "scope": "support.variable.dom,support.variable.property.dom", "settings": { "foreground": "#e06c75" } }, { "name": "keyword.operator", "scope": "keyword.operator.arithmetic,keyword.operator.comparison,keyword.operator.decrement,keyword.operator.increment,keyword.operator.relational", "settings": { "foreground": "#56b6c2" } }, { "name": "C operator assignment", "scope": "keyword.operator.assignment.c,keyword.operator.comparison.c,keyword.operator.c,keyword.operator.increment.c,keyword.operator.decrement.c,keyword.operator.bitwise.shift.c,keyword.operator.assignment.cpp,keyword.operator.comparison.cpp,keyword.operator.cpp,keyword.operator.increment.cpp,keyword.operator.decrement.cpp,keyword.operator.bitwise.shift.cpp", "settings": { "foreground": "#c678dd" } }, { "name": "Punctuation", "scope": "punctuation.separator.delimiter", "settings": { "foreground": "#abb2bf" } }, { "name": "Other punctuation .c", "scope": "punctuation.separator.c,punctuation.separator.cpp", "settings": { "foreground": "#c678dd" } }, { "name": "C type posix-reserved", "scope": "support.type.posix-reserved.c,support.type.posix-reserved.cpp", "settings": { "foreground": "#56b6c2" } }, { "name": "keyword.operator.sizeof.c", "scope": "keyword.operator.sizeof.c,keyword.operator.sizeof.cpp", "settings": { "foreground": "#c678dd" } }, { "name": "python parameter", "scope": "variable.parameter.function.language.python", "settings": { "foreground": "#d19a66" } }, { "name": "python type", "scope": "support.type.python", "settings": { "foreground": "#56b6c2" } }, { "name": "python logical", "scope": "keyword.operator.logical.python", "settings": { "foreground": "#c678dd" } }, { "name": "pyCs", "scope": "variable.parameter.function.python", "settings": { "foreground": "#d19a66" } }, { "name": "python block", "scope": "punctuation.definition.arguments.begin.python,punctuation.definition.arguments.end.python,punctuation.separator.arguments.python,punctuation.definition.list.begin.python,punctuation.definition.list.end.python", "settings": { "foreground": "#abb2bf" } }, { "name": "python function-call.generic", "scope": "meta.function-call.generic.python", "settings": { "foreground": "#61afef" } }, { "name": "python placeholder reset to normal string", "scope": "constant.character.format.placeholder.other.python", "settings": { "foreground": "#d19a66" } }, { "name": "Operators", "scope": "keyword.operator", "settings": { "foreground": "#abb2bf" } }, { "name": "Compound Assignment Operators", "scope": "keyword.operator.assignment.compound", "settings": { "foreground": "#c678dd" } }, { "name": "Compound Assignment Operators js/ts", "scope": "keyword.operator.assignment.compound.js,keyword.operator.assignment.compound.ts", "settings": { "foreground": "#56b6c2" } }, { "name": "Keywords", "scope": "keyword", "settings": { "foreground": "#c678dd" } }, { "name": "Namespaces", "scope": "entity.name.namespace", "settings": { "foreground": "#e5c07b" } }, { "name": "Variables", "scope": "variable", "settings": { "foreground": "#e06c75" } }, { "name": "Variables", "scope": "variable.c", "settings": { "foreground": "#abb2bf" } }, { "name": "Language variables", "scope": "variable.language", "settings": { "foreground": "#e5c07b" } }, { "name": "Java Variables", "scope": "token.variable.parameter.java", "settings": { "foreground": "#abb2bf" } }, { "name": "Java Imports", "scope": "import.storage.java", "settings": { "foreground": "#e5c07b" } }, { "name": "Packages", "scope": "token.package.keyword", "settings": { "foreground": "#c678dd" } }, { "name": "Packages", "scope": "token.package", "settings": { "foreground": "#abb2bf" } }, { "name": "Functions", "scope": [ "entity.name.function", "meta.require", "support.function.any-method", "variable.function" ], "settings": { "foreground": "#61afef" } }, { "name": "Classes", "scope": "entity.name.type.namespace", "settings": { "foreground": "#e5c07b" } }, { "name": "Classes", "scope": "support.class, entity.name.type.class", "settings": { "foreground": "#e5c07b" } }, { "name": "Class name", "scope": "entity.name.class.identifier.namespace.type", "settings": { "foreground": "#e5c07b" } }, { "name": "Class name", "scope": [ "entity.name.class", "variable.other.class.js", "variable.other.class.ts" ], "settings": { "foreground": "#e5c07b" } }, { "name": "Class name php", "scope": "variable.other.class.php", "settings": { "foreground": "#e06c75" } }, { "name": "Type Name", "scope": "entity.name.type", "settings": { "foreground": "#e5c07b" } }, { "name": "Keyword Control", "scope": "keyword.control", "settings": { "foreground": "#c678dd" } }, { "name": "Control Elements", "scope": "control.elements, keyword.operator.less", "settings": { "foreground": "#d19a66" } }, { "name": "Methods", "scope": "keyword.other.special-method", "settings": { "foreground": "#61afef" } }, { "name": "Storage", "scope": "storage", "settings": { "foreground": "#c678dd" } }, { "name": "Storage JS TS", "scope": "token.storage", "settings": { "foreground": "#c678dd" } }, { "name": "Source Js Keyword Operator Delete,source Js Keyword Operator In,source Js Keyword Operator Of,source Js Keyword Operator Instanceof,source Js Keyword Operator New,source Js Keyword Operator Typeof,source Js Keyword Operator Void", "scope": "keyword.operator.expression.delete,keyword.operator.expression.in,keyword.operator.expression.of,keyword.operator.expression.instanceof,keyword.operator.new,keyword.operator.expression.typeof,keyword.operator.expression.void", "settings": { "foreground": "#c678dd" } }, { "name": "Java Storage", "scope": "token.storage.type.java", "settings": { "foreground": "#e5c07b" } }, { "name": "Support", "scope": "support.function", "settings": { "foreground": "#56b6c2" } }, { "name": "Support type", "scope": "support.type.property-name", "settings": { "foreground": "#abb2bf" } }, { "name": "Support type", "scope": "support.constant.property-value", "settings": { "foreground": "#abb2bf" } }, { "name": "Support type", "scope": "support.constant.font-name", "settings": { "foreground": "#d19a66" } }, { "name": "Meta tag", "scope": "meta.tag", "settings": { "foreground": "#abb2bf" } }, { "name": "Strings", "scope": "string", "settings": { "foreground": "#98c379" } }, { "name": "Constant other symbol", "scope": "constant.other.symbol", "settings": { "foreground": "#56b6c2" } }, { "name": "Integers", "scope": "constant.numeric", "settings": { "foreground": "#d19a66" } }, { "name": "Constants", "scope": "constant", "settings": { "foreground": "#d19a66" } }, { "name": "Constants", "scope": "punctuation.definition.constant", "settings": { "foreground": "#d19a66" } }, { "name": "Tags", "scope": "entity.name.tag", "settings": { "foreground": "#e06c75" } }, { "name": "Attributes", "scope": "entity.other.attribute-name", "settings": { "foreground": "#d19a66" } }, { "name": "Attribute IDs", "scope": "entity.other.attribute-name.id", "settings": { "foreground": "#61afef" } }, { "name": "Attribute class", "scope": "entity.other.attribute-name.class.css", "settings": { "foreground": "#d19a66" } }, { "name": "Selector", "scope": "meta.selector", "settings": { "foreground": "#c678dd" } }, { "name": "Headings", "scope": "markup.heading", "settings": { "foreground": "#e06c75" } }, { "name": "Headings", "scope": "markup.heading punctuation.definition.heading, entity.name.section", "settings": { "foreground": "#61afef" } }, { "name": "Units", "scope": "keyword.other.unit", "settings": { "foreground": "#e06c75" } }, { "name": "Bold", "scope": "markup.bold,todo.bold", "settings": { "foreground": "#d19a66" } }, { "name": "Bold", "scope": "punctuation.definition.bold", "settings": { "foreground": "#e5c07b" } }, { "name": "markup Italic", "scope": "markup.italic, punctuation.definition.italic,todo.emphasis", "settings": { "foreground": "#c678dd" } }, { "name": "emphasis md", "scope": "emphasis md", "settings": { "foreground": "#c678dd" } }, { "name": "[VSCODE-CUSTOM] Markdown headings", "scope": "entity.name.section.markdown", "settings": { "foreground": "#e06c75" } }, { "name": "[VSCODE-CUSTOM] Markdown heading Punctuation Definition", "scope": "punctuation.definition.heading.markdown", "settings": { "foreground": "#e06c75" } }, { "name": "punctuation.definition.list.begin.markdown", "scope": "punctuation.definition.list.begin.markdown", "settings": { "foreground": "#e5c07b" } }, { "name": "[VSCODE-CUSTOM] Markdown heading setext", "scope": "markup.heading.setext", "settings": { "foreground": "#abb2bf" } }, { "name": "[VSCODE-CUSTOM] Markdown Punctuation Definition Bold", "scope": "punctuation.definition.bold.markdown", "settings": { "foreground": "#d19a66" } }, { "name": "[VSCODE-CUSTOM] Markdown Inline Raw", "scope": "markup.inline.raw.markdown", "settings": { "foreground": "#98c379" } }, { "name": "[VSCODE-CUSTOM] Markdown Inline Raw", "scope": "markup.inline.raw.string.markdown", "settings": { "foreground": "#98c379" } }, { "name": "[VSCODE-CUSTOM] Markdown Inline Raw punctuation", "scope": "punctuation.definition.raw.markdown", "settings": { "foreground": "#e5c07b" } }, { "name": "[VSCODE-CUSTOM] Markdown List Punctuation Definition", "scope": "punctuation.definition.list.markdown", "settings": { "foreground": "#e5c07b" } }, { "name": "[VSCODE-CUSTOM] Markdown Punctuation Definition String", "scope": [ "punctuation.definition.string.begin.markdown", "punctuation.definition.string.end.markdown", "punctuation.definition.metadata.markdown" ], "settings": { "foreground": "#e06c75" } }, { "name": "beginning.punctuation.definition.list.markdown", "scope": ["beginning.punctuation.definition.list.markdown"], "settings": { "foreground": "#e06c75" } }, { "name": "[VSCODE-CUSTOM] Markdown Punctuation Definition Link", "scope": "punctuation.definition.metadata.markdown", "settings": { "foreground": "#e06c75" } }, { "name": "[VSCODE-CUSTOM] Markdown Underline Link/Image", "scope": "markup.underline.link.markdown,markup.underline.link.image.markdown", "settings": { "foreground": "#c678dd" } }, { "name": "[VSCODE-CUSTOM] Markdown Link Title/Description", "scope": "string.other.link.title.markdown,string.other.link.description.markdown", "settings": { "foreground": "#61afef" } }, { "name": "[VSCODE-CUSTOM] Asciidoc Inline Raw", "scope": "markup.raw.monospace.asciidoc", "settings": { "foreground": "#98c379" } }, { "name": "[VSCODE-CUSTOM] Asciidoc Inline Raw Punctuation Definition", "scope": "punctuation.definition.asciidoc", "settings": { "foreground": "#e5c07b" } }, { "name": "[VSCODE-CUSTOM] Asciidoc List Punctuation Definition", "scope": "markup.list.asciidoc", "settings": { "foreground": "#e5c07b" } }, { "name": "[VSCODE-CUSTOM] Asciidoc underline link", "scope": "markup.link.asciidoc,markup.other.url.asciidoc", "settings": { "foreground": "#c678dd" } }, { "name": "[VSCODE-CUSTOM] Asciidoc link name", "scope": "string.unquoted.asciidoc,markup.other.url.asciidoc", "settings": { "foreground": "#61afef" } }, { "name": "Regular Expressions", "scope": "string.regexp", "settings": { "foreground": "#56b6c2" } }, { "name": "Embedded", "scope": "punctuation.section.embedded, variable.interpolation", "settings": { "foreground": "#e06c75" } }, { "name": "Embedded", "scope": "punctuation.section.embedded.begin,punctuation.section.embedded.end", "settings": { "foreground": "#c678dd" } }, { "name": "illegal", "scope": "invalid.illegal", "settings": { "foreground": "#ffffff" } }, { "name": "illegal", "scope": "invalid.illegal.bad-ampersand.html", "settings": { "foreground": "#abb2bf" } }, { "scope": "invalid.illegal.unrecognized-tag.html", "settings": { "foreground": "#e06c75" } }, { "name": "Broken", "scope": "invalid.broken", "settings": { "foreground": "#ffffff" } }, { "name": "Deprecated", "scope": "invalid.deprecated", "settings": { "foreground": "#ffffff" } }, { "name": "html Deprecated", "scope": "invalid.deprecated.entity.other.attribute-name.html", "settings": { "foreground": "#d19a66" } }, { "name": "Unimplemented", "scope": "invalid.unimplemented", "settings": { "foreground": "#ffffff" } }, { "name": "Source Json Meta Structure Dictionary Json > String Quoted Json", "scope": "source.json meta.structure.dictionary.json > string.quoted.json", "settings": { "foreground": "#e06c75" } }, { "name": "Source Json Meta Structure Dictionary Json > String Quoted Json > Punctuation String", "scope": "source.json meta.structure.dictionary.json > string.quoted.json > punctuation.string", "settings": { "foreground": "#e06c75" } }, { "name": "Source Json Meta Structure Dictionary Json > Value Json > String Quoted Json,source Json Meta Structure Array Json > Value Json > String Quoted Json,source Json Meta Structure Dictionary Json > Value Json > String Quoted Json > Punctuation,source Json Meta Structure Array Json > Value Json > String Quoted Json > Punctuation", "scope": "source.json meta.structure.dictionary.json > value.json > string.quoted.json,source.json meta.structure.array.json > value.json > string.quoted.json,source.json meta.structure.dictionary.json > value.json > string.quoted.json > punctuation,source.json meta.structure.array.json > value.json > string.quoted.json > punctuation", "settings": { "foreground": "#98c379" } }, { "name": "Source Json Meta Structure Dictionary Json > Constant Language Json,source Json Meta Structure Array Json > Constant Language Json", "scope": "source.json meta.structure.dictionary.json > constant.language.json,source.json meta.structure.array.json > constant.language.json", "settings": { "foreground": "#56b6c2" } }, { "name": "[VSCODE-CUSTOM] JSON Property Name", "scope": "support.type.property-name.json", "settings": { "foreground": "#e06c75" } }, { "name": "[VSCODE-CUSTOM] JSON Punctuation for Property Name", "scope": "support.type.property-name.json punctuation", "settings": { "foreground": "#e06c75" } }, { "name": "laravel blade tag", "scope": "text.html.laravel-blade source.php.embedded.line.html entity.name.tag.laravel-blade", "settings": { "foreground": "#c678dd" } }, { "name": "laravel blade @", "scope": "text.html.laravel-blade source.php.embedded.line.html support.constant.laravel-blade", "settings": { "foreground": "#c678dd" } }, { "name": "use statement for other classes", "scope": "support.other.namespace.use.php,support.other.namespace.use-as.php,entity.other.alias.php,meta.interface.php", "settings": { "foreground": "#e5c07b" } }, { "name": "error suppression", "scope": "keyword.operator.error-control.php", "settings": { "foreground": "#c678dd" } }, { "name": "php instanceof", "scope": "keyword.operator.type.php", "settings": { "foreground": "#c678dd" } }, { "name": "style double quoted array index normal begin", "scope": "punctuation.section.array.begin.php", "settings": { "foreground": "#abb2bf" } }, { "name": "style double quoted array index normal end", "scope": "punctuation.section.array.end.php", "settings": { "foreground": "#abb2bf" } }, { "name": "php illegal.non-null-typehinted", "scope": "invalid.illegal.non-null-typehinted.php", "settings": { "foreground": "#f44747" } }, { "name": "php types", "scope": "storage.type.php,meta.other.type.phpdoc.php,keyword.other.type.php,keyword.other.array.phpdoc.php", "settings": { "foreground": "#e5c07b" } }, { "name": "php call-function", "scope": "meta.function-call.php,meta.function-call.object.php,meta.function-call.static.php", "settings": { "foreground": "#61afef" } }, { "name": "php function-resets", "scope": "punctuation.definition.parameters.begin.bracket.round.php,punctuation.definition.parameters.end.bracket.round.php,punctuation.separator.delimiter.php,punctuation.section.scope.begin.php,punctuation.section.scope.end.php,punctuation.terminator.expression.php,punctuation.definition.arguments.begin.bracket.round.php,punctuation.definition.arguments.end.bracket.round.php,punctuation.definition.storage-type.begin.bracket.round.php,punctuation.definition.storage-type.end.bracket.round.php,punctuation.definition.array.begin.bracket.round.php,punctuation.definition.array.end.bracket.round.php,punctuation.definition.begin.bracket.round.php,punctuation.definition.end.bracket.round.php,punctuation.definition.begin.bracket.curly.php,punctuation.definition.end.bracket.curly.php,punctuation.definition.section.switch-block.end.bracket.curly.php,punctuation.definition.section.switch-block.start.bracket.curly.php,punctuation.definition.section.switch-block.begin.bracket.curly.php,punctuation.definition.section.switch-block.end.bracket.curly.php", "settings": { "foreground": "#abb2bf" } }, { "name": "support php constants", "scope": "support.constant.core.rust", "settings": { "foreground": "#d19a66" } }, { "name": "support php constants", "scope": "support.constant.ext.php,support.constant.std.php,support.constant.core.php,support.constant.parser-token.php", "settings": { "foreground": "#d19a66" } }, { "name": "php goto", "scope": "entity.name.goto-label.php,support.other.php", "settings": { "foreground": "#61afef" } }, { "name": "php logical/bitwise operator", "scope": "keyword.operator.logical.php,keyword.operator.bitwise.php,keyword.operator.arithmetic.php", "settings": { "foreground": "#56b6c2" } }, { "name": "php regexp operator", "scope": "keyword.operator.regexp.php", "settings": { "foreground": "#c678dd" } }, { "name": "php comparison", "scope": "keyword.operator.comparison.php", "settings": { "foreground": "#56b6c2" } }, { "name": "php heredoc/nowdoc", "scope": "keyword.operator.heredoc.php,keyword.operator.nowdoc.php", "settings": { "foreground": "#c678dd" } }, { "name": "python function decorator @", "scope": "meta.function.decorator.python", "settings": { "foreground": "#61afef" } }, { "name": "python function support", "scope": "support.token.decorator.python,meta.function.decorator.identifier.python", "settings": { "foreground": "#56b6c2" } }, { "name": "parameter function js/ts", "scope": "function.parameter", "settings": { "foreground": "#abb2bf" } }, { "name": "brace function", "scope": "function.brace", "settings": { "foreground": "#abb2bf" } }, { "name": "parameter function ruby cs", "scope": "function.parameter.ruby, function.parameter.cs", "settings": { "foreground": "#abb2bf" } }, { "name": "constant.language.symbol.ruby", "scope": "constant.language.symbol.ruby", "settings": { "foreground": "#56b6c2" } }, { "name": "rgb-value", "scope": "rgb-value", "settings": { "foreground": "#56b6c2" } }, { "name": "rgb value", "scope": "inline-color-decoration rgb-value", "settings": { "foreground": "#d19a66" } }, { "name": "rgb value less", "scope": "less rgb-value", "settings": { "foreground": "#d19a66" } }, { "name": "sass selector", "scope": "selector.sass", "settings": { "foreground": "#e06c75" } }, { "name": "ts primitive/builtin types", "scope": "support.type.primitive.ts,support.type.builtin.ts,support.type.primitive.tsx,support.type.builtin.tsx", "settings": { "foreground": "#e5c07b" } }, { "name": "block scope", "scope": "block.scope.end,block.scope.begin", "settings": { "foreground": "#abb2bf" } }, { "name": "cs storage type", "scope": "storage.type.cs", "settings": { "foreground": "#e5c07b" } }, { "name": "cs local variable", "scope": "entity.name.variable.local.cs", "settings": { "foreground": "#e06c75" } }, { "scope": "token.info-token", "settings": { "foreground": "#61afef" } }, { "scope": "token.warn-token", "settings": { "foreground": "#d19a66" } }, { "scope": "token.error-token", "settings": { "foreground": "#f44747" } }, { "scope": "token.debug-token", "settings": { "foreground": "#c678dd" } }, { "name": "String interpolation", "scope": [ "punctuation.definition.template-expression.begin", "punctuation.definition.template-expression.end", "punctuation.section.embedded" ], "settings": { "foreground": "#c678dd" } }, { "name": "Reset JavaScript string interpolation expression", "scope": ["meta.template.expression"], "settings": { "foreground": "#abb2bf" } }, { "name": "Import module JS", "scope": ["keyword.operator.module"], "settings": { "foreground": "#c678dd" } }, { "name": "js Flowtype", "scope": ["support.type.type.flowtype"], "settings": { "foreground": "#61afef" } }, { "name": "js Flow", "scope": ["support.type.primitive"], "settings": { "foreground": "#e5c07b" } }, { "name": "js class prop", "scope": ["meta.property.object"], "settings": { "foreground": "#e06c75" } }, { "name": "js func parameter", "scope": ["variable.parameter.function.js"], "settings": { "foreground": "#e06c75" } }, { "name": "js template literals begin", "scope": ["keyword.other.template.begin"], "settings": { "foreground": "#98c379" } }, { "name": "js template literals end", "scope": ["keyword.other.template.end"], "settings": { "foreground": "#98c379" } }, { "name": "js template literals variable braces begin", "scope": ["keyword.other.substitution.begin"], "settings": { "foreground": "#98c379" } }, { "name": "js template literals variable braces end", "scope": ["keyword.other.substitution.end"], "settings": { "foreground": "#98c379" } }, { "name": "js operator.assignment", "scope": ["keyword.operator.assignment"], "settings": { "foreground": "#56b6c2" } }, { "name": "go operator", "scope": ["keyword.operator.assignment.go"], "settings": { "foreground": "#e5c07b" } }, { "name": "go operator", "scope": [ "keyword.operator.arithmetic.go", "keyword.operator.address.go" ], "settings": { "foreground": "#c678dd" } }, { "name": "Go package name", "scope": ["entity.name.package.go"], "settings": { "foreground": "#e5c07b" } }, { "name": "elm prelude", "scope": ["support.type.prelude.elm"], "settings": { "foreground": "#56b6c2" } }, { "name": "elm constant", "scope": ["support.constant.elm"], "settings": { "foreground": "#d19a66" } }, { "name": "template literal", "scope": ["punctuation.quasi.element"], "settings": { "foreground": "#c678dd" } }, { "name": "html/pug (jade) escaped characters and entities", "scope": ["constant.character.entity"], "settings": { "foreground": "#e06c75" } }, { "name": "styling css pseudo-elements/classes to be able to differentiate from classes which are the same colour", "scope": [ "entity.other.attribute-name.pseudo-element", "entity.other.attribute-name.pseudo-class" ], "settings": { "foreground": "#56b6c2" } }, { "name": "Clojure globals", "scope": ["entity.global.clojure"], "settings": { "foreground": "#e5c07b" } }, { "name": "Clojure symbols", "scope": ["meta.symbol.clojure"], "settings": { "foreground": "#e06c75" } }, { "name": "Clojure constants", "scope": ["constant.keyword.clojure"], "settings": { "foreground": "#56b6c2" } }, { "name": "CoffeeScript Function Argument", "scope": ["meta.arguments.coffee", "variable.parameter.function.coffee"], "settings": { "foreground": "#e06c75" } }, { "name": "Ini Default Text", "scope": ["source.ini"], "settings": { "foreground": "#98c379" } }, { "name": "Makefile prerequisities", "scope": ["meta.scope.prerequisites.makefile"], "settings": { "foreground": "#e06c75" } }, { "name": "Makefile text colour", "scope": ["source.makefile"], "settings": { "foreground": "#e5c07b" } }, { "name": "Groovy import names", "scope": ["storage.modifier.import.groovy"], "settings": { "foreground": "#e5c07b" } }, { "name": "Groovy Methods", "scope": ["meta.method.groovy"], "settings": { "foreground": "#61afef" } }, { "name": "Groovy Variables", "scope": ["meta.definition.variable.name.groovy"], "settings": { "foreground": "#e06c75" } }, { "name": "Groovy Inheritance", "scope": ["meta.definition.class.inherited.classes.groovy"], "settings": { "foreground": "#98c379" } }, { "name": "HLSL Semantic", "scope": ["support.variable.semantic.hlsl"], "settings": { "foreground": "#e5c07b" } }, { "name": "HLSL Types", "scope": [ "support.type.texture.hlsl", "support.type.sampler.hlsl", "support.type.object.hlsl", "support.type.object.rw.hlsl", "support.type.fx.hlsl", "support.type.object.hlsl" ], "settings": { "foreground": "#c678dd" } }, { "name": "SQL Variables", "scope": ["text.variable", "text.bracketed"], "settings": { "foreground": "#e06c75" } }, { "name": "types", "scope": ["support.type.swift", "support.type.vb.asp"], "settings": { "foreground": "#e5c07b" } }, { "name": "heading 1, keyword", "scope": ["entity.name.function.xi"], "settings": { "foreground": "#e5c07b" } }, { "name": "heading 2, callable", "scope": ["entity.name.class.xi"], "settings": { "foreground": "#56b6c2" } }, { "name": "heading 3, property", "scope": ["constant.character.character-class.regexp.xi"], "settings": { "foreground": "#e06c75" } }, { "name": "heading 4, type, class, interface", "scope": ["constant.regexp.xi"], "settings": { "foreground": "#c678dd" } }, { "name": "heading 5, enums, preprocessor, constant, decorator", "scope": ["keyword.control.xi"], "settings": { "foreground": "#56b6c2" } }, { "name": "heading 6, number", "scope": ["invalid.xi"], "settings": { "foreground": "#abb2bf" } }, { "name": "string", "scope": ["beginning.punctuation.definition.quote.markdown.xi"], "settings": { "foreground": "#98c379" } }, { "name": "comments", "scope": ["beginning.punctuation.definition.list.markdown.xi"], "settings": { "foreground": "#7f848e" } }, { "name": "link", "scope": ["constant.character.xi"], "settings": { "foreground": "#61afef" } }, { "name": "accent", "scope": ["accent.xi"], "settings": { "foreground": "#61afef" } }, { "name": "wikiword", "scope": ["wikiword.xi"], "settings": { "foreground": "#d19a66" } }, { "name": "language operators like '+', '-' etc", "scope": ["constant.other.color.rgb-value.xi"], "settings": { "foreground": "#ffffff" } }, { "name": "elements to dim", "scope": ["punctuation.definition.tag.xi"], "settings": { "foreground": "#5c6370" } }, { "name": "C++/C#", "scope": [ "entity.name.label.cs", "entity.name.scope-resolution.function.call", "entity.name.scope-resolution.function.definition" ], "settings": { "foreground": "#e5c07b" } }, { "name": "Markdown underscore-style headers", "scope": [ "entity.name.label.cs", "markup.heading.setext.1.markdown", "markup.heading.setext.2.markdown" ], "settings": { "foreground": "#e06c75" } }, { "name": "meta.brace.square", "scope": [" meta.brace.square"], "settings": { "foreground": "#abb2bf" } }, { "name": "Comments", "scope": "comment, punctuation.definition.comment", "settings": { "foreground": "#7f848e", "fontStyle": "italic" } }, { "name": "[VSCODE-CUSTOM] Markdown Quote", "scope": "markup.quote.markdown", "settings": { "foreground": "#5c6370" } }, { "name": "punctuation.definition.block.sequence.item.yaml", "scope": "punctuation.definition.block.sequence.item.yaml", "settings": { "foreground": "#abb2bf" } }, { "scope": [ "constant.language.symbol.elixir", "constant.language.symbol.double-quoted.elixir" ], "settings": { "foreground": "#56b6c2" } }, { "scope": ["entity.name.variable.parameter.cs"], "settings": { "foreground": "#e5c07b" } }, { "scope": ["entity.name.variable.field.cs"], "settings": { "foreground": "#e06c75" } }, { "name": "Deleted", "scope": "markup.deleted", "settings": { "foreground": "#e06c75" } }, { "name": "Inserted", "scope": "markup.inserted", "settings": { "foreground": "#98c379" } }, { "name": "Underline", "scope": "markup.underline", "settings": { "fontStyle": "underline" } }, { "name": "punctuation.section.embedded.begin.php", "scope": [ "punctuation.section.embedded.begin.php", "punctuation.section.embedded.end.php" ], "settings": { "foreground": "#BE5046" } }, { "name": "support.other.namespace.php", "scope": ["support.other.namespace.php"], "settings": { "foreground": "#abb2bf" } }, { "name": "variable.other.object", "scope": ["variable.other.object"], "settings": { "foreground": "#e5c07b" } }, { "name": "variable.other.constant.property", "scope": ["variable.other.constant.property"], "settings": { "foreground": "#e06c75" } }, { "name": "entity.other.inherited-class", "scope": ["entity.other.inherited-class"], "settings": { "foreground": "#e5c07b" } }, { "name": "c variable readwrite", "scope": "variable.other.readwrite.c", "settings": { "foreground": "#e06c75" } }, { "name": "php scope", "scope": "entity.name.variable.parameter.php,punctuation.separator.colon.php,constant.other.php", "settings": { "foreground": "#abb2bf" } }, { "name": "Assembly", "scope": ["constant.numeric.decimal.asm.x86_64"], "settings": { "foreground": "#c678dd" } }, { "scope": ["support.other.parenthesis.regexp"], "settings": { "foreground": "#d19a66" } }, { "scope": ["constant.character.escape"], "settings": { "foreground": "#56b6c2" } }, { "scope": ["string.regexp"], "settings": { "foreground": "#e06c75" } }, { "name": "js/ts italic", "scope": "entity.other.attribute-name.js,entity.other.attribute-name.ts,entity.other.attribute-name.jsx,entity.other.attribute-name.tsx,variable.parameter,variable.language.super", "settings": { "fontStyle": "italic" } }, { "name": "comment", "scope": "comment.line.double-slash,comment.block.documentation", "settings": { "fontStyle": "italic" } }, { "name": "Python Keyword Control", "scope": "keyword.control.import.python,keyword.control.flow.python,keyword.operator.logical.python", "settings": { "fontStyle": "italic" } }, { "name": "markup.italic.markdown", "scope": "markup.italic.markdown", "settings": { "fontStyle": "italic" } } ], "colors": { "activityBar.background": "#282c34", "activityBar.foreground": "#d7dae0", "activityBarBadge.background": "#4d78cc", "activityBarBadge.foreground": "#f8fafd", "badge.background": "#282c34", "button.background": "#404754", "button.secondaryBackground": "#30333d", "button.secondaryForeground": "#c0bdbd", "checkbox.border": "#404754", "debugToolBar.background": "#21252b", "descriptionForeground": "#abb2bf", "diffEditor.insertedTextBackground": "#00809b33", "dropdown.background": "#21252b", "dropdown.border": "#21252b", "editor.background": "#282c34", "editor.findMatchBackground": "#42557b", "editor.findMatchBorder": "#457dff", "editor.findMatchHighlightBackground": "#6199ff2f", "editor.foreground": "#abb2bf", "editorBracketHighlight.foreground1": "#d19a66", "editorBracketHighlight.foreground2": "#c678dd", "editorBracketHighlight.foreground3": "#56b6c2", "editorHoverWidget.highlightForeground": "#61afef", "editorInlayHint.foreground": "#abb2bf", "editorInlayHint.background": "#2c313c", "editor.lineHighlightBackground": "#2c313c", "editorLineNumber.activeForeground": "#abb2bf", "editorGutter.addedBackground": "#109868", "editorGutter.deletedBackground": "#9A353D", "editorGutter.modifiedBackground": "#948B60", "editorOverviewRuler.addedBackground": "#109868", "editorOverviewRuler.deletedBackground": "#9A353D", "editorOverviewRuler.modifiedBackground": "#948B60", "editor.selectionBackground": "#67769660", "editor.selectionHighlightBackground": "#ffffff10", "editor.selectionHighlightBorder": "#dddddd", "editor.wordHighlightBackground": "#d2e0ff2f", "editor.wordHighlightBorder": "#7f848e", "editor.wordHighlightStrongBackground": "#abb2bf26", "editor.wordHighlightStrongBorder": "#7f848e", "editorBracketMatch.background": "#515a6b", "editorBracketMatch.border": "#515a6b", "editorCursor.background": "#ffffffc9", "editorCursor.foreground": "#528bff", "editorError.foreground": "#c24038", "editorGroup.background": "#181a1f", "editorGroup.border": "#181a1f", "editorGroupHeader.tabsBackground": "#21252b", "editorHoverWidget.background": "#21252b", "editorHoverWidget.border": "#181a1f", "editorIndentGuide.activeBackground": "#c8c8c859", "editorIndentGuide.background": "#3b4048", "editorLineNumber.foreground": "#495162", "editorMarkerNavigation.background": "#21252b", "editorRuler.foreground": "#abb2bf26", "editorSuggestWidget.background": "#21252b", "editorSuggestWidget.border": "#181a1f", "editorSuggestWidget.selectedBackground": "#2c313a", "editorWarning.foreground": "#d19a66", "editorWhitespace.foreground": "#ffffff1d", "editorWidget.background": "#21252b", "focusBorder": "#3e4452", "gitDecoration.ignoredResourceForeground": "#636b78", "input.background": "#1d1f23", "input.foreground": "#abb2bf", "list.activeSelectionBackground": "#2c313a", "list.activeSelectionForeground": "#d7dae0", "list.focusBackground": "#323842", "list.focusForeground": "#f0f0f0", "list.highlightForeground": "#c5c5c5", "list.hoverBackground": "#2c313a", "list.hoverForeground": "#abb2bf", "list.inactiveSelectionBackground": "#323842", "list.inactiveSelectionForeground": "#d7dae0", "list.warningForeground": "#d19a66", "menu.foreground": "#abb2bf", "menu.separatorBackground": "#343a45", "minimapGutter.addedBackground": "#109868", "minimapGutter.deletedBackground": "#9A353D", "minimapGutter.modifiedBackground": "#948B60", "panel.border": "#3e4452", "panelSectionHeader.background": "#21252b", "peekViewEditor.background": "#1b1d23", "peekViewEditor.matchHighlightBackground": "#29244b", "peekViewResult.background": "#22262b", "scrollbar.shadow": "#23252c", "scrollbarSlider.activeBackground": "#747d9180", "scrollbarSlider.background": "#4e566660", "scrollbarSlider.hoverBackground": "#5a637580", "settings.focusedRowBackground": "#282c34", "settings.headerForeground": "#fff", "sideBar.background": "#21252b", "sideBar.foreground": "#abb2bf", "sideBarSectionHeader.background": "#282c34", "sideBarSectionHeader.foreground": "#abb2bf", "statusBar.background": "#21252b", "statusBar.debuggingBackground": "#cc6633", "statusBar.debuggingBorder": "#ff000000", "statusBar.debuggingForeground": "#ffffff", "statusBar.foreground": "#9da5b4", "statusBar.noFolderBackground": "#21252b", "statusBarItem.remoteBackground": "#4d78cc", "statusBarItem.remoteForeground": "#f8fafd", "tab.activeBackground": "#282c34", "tab.activeBorder": "#b4b4b4", "tab.activeForeground": "#dcdcdc", "tab.border": "#181a1f", "tab.hoverBackground": "#323842", "tab.inactiveBackground": "#21252b", "tab.unfocusedHoverBackground": "#323842", "terminal.ansiBlack": "#3f4451", "terminal.ansiBlue": "#4aa5f0", "terminal.ansiBrightBlack": "#4f5666", "terminal.ansiBrightBlue": "#4dc4ff", "terminal.ansiBrightCyan": "#4cd1e0", "terminal.ansiBrightGreen": "#a5e075", "terminal.ansiBrightMagenta": "#de73ff", "terminal.ansiBrightRed": "#ff616e", "terminal.ansiBrightWhite": "#e6e6e6", "terminal.ansiBrightYellow": "#f0a45d", "terminal.ansiCyan": "#42b3c2", "terminal.ansiGreen": "#8cc265", "terminal.ansiMagenta": "#c162de", "terminal.ansiRed": "#e05561", "terminal.ansiWhite": "#d7dae0", "terminal.ansiYellow": "#d18f52", "terminal.background": "#282c34", "terminal.border": "#3e4452", "terminal.foreground": "#abb2bf", "terminal.selectionBackground": "#abb2bf30", "textBlockQuote.background": "#2e3440", "textBlockQuote.border": "#4b5362", "textLink.foreground": "#61afef", "textPreformat.foreground": "#d19a66", "titleBar.activeBackground": "#282c34", "titleBar.activeForeground": "#9da5b4", "titleBar.inactiveBackground": "#21252b", "titleBar.inactiveForeground": "#6b717d", "tree.indentGuidesStroke": "#ffffff1d", "walkThrough.embeddedEditorBackground": "#2e3440", "welcomePage.buttonHoverBackground": "#404754" } } ================================================ FILE: apps/web/src/lib/shiki/themes/poimandres.json ================================================ { "name": "poimandres", "type": "dark", "colors": { "activityBar.background": "#1b1e28", "activityBar.foreground": "#a6accd", "activityBarBadge.background": "#303340", "activityBarBadge.foreground": "#e4f0fb", "badge.background": "#303340", "badge.foreground": "#e4f0fb", "button.background": "#303340", "diffEditor.insertedTextBackground": "#50647715", "diffEditor.removedTextBackground": "#d0679d20", "dropdown.background": "#1b1e28", "dropdown.border": "#ffffff10", "editor.background": "#1b1e28", "editor.findMatchBackground": "#ADD7FF40", "editor.findMatchBorder": "#ADD7FF", "editor.findMatchHighlightBackground": "#ADD7FF40", "editor.foreground": "#a6accd", "editor.lineHighlightBackground": "#717cb425", "editor.lineHighlightBorder": "#00000000", "editor.selectionBackground": "#717cb425", "editor.selectionHighlightBackground": "#00000000", "editor.selectionHighlightBorder": "#ADD7FF80", "editor.wordHighlightBackground": "#ADD7FF20", "editor.wordHighlightStrongBackground": "#ADD7FF40", "editorBracketMatch.border": "#e4f0fb40", "editorCursor.foreground": "#a6accd", "editorGroup.border": "#00000030", "editorGroupHeader.tabsBackground": "#1b1e28", "editorHoverWidget.background": "#1b1e28", "editorHoverWidget.border": "#ffffff10", "editorIndentGuide.background": "#303340", "editorLineNumber.foreground": "#767c9d50", "editorLink.activeForeground": "#ADD7FF", "editorSuggestWidget.background": "#1b1e28", "editorSuggestWidget.border": "#ffffff10", "editorSuggestWidget.foreground": "#a6accd", "editorSuggestWidget.highlightForeground": "#5DE4c7", "editorSuggestWidget.selectedBackground": "#00000050", "editorWidget.background": "#1b1e28", "editor.findRangeHighlightBackground": "#ADD7FF40", "editor.focusedStackFrameHighlightBackground": "#7abd7a4d", "editor.foldBackground": "#717cb40b", "editor.hoverHighlightBackground": "#264f7840", "editor.inactiveSelectionBackground": "#717cb425", "editor.linkedEditingBackground": "#d0679d4d", "editor.rangeHighlightBackground": "#ffffff0b", "editor.snippetFinalTabstopHighlightBorder": "#525252", "editor.snippetTabstopHighlightBackground": "#7c7c7c4d", "editor.stackFrameHighlightBackground": "#ffff0033", "editor.symbolHighlightBackground": "#89ddff60", "editorBracketMatch.background": "#00000000", "editorCodeLens.foreground": "#a6accd", "editorError.foreground": "#d0679d", "editorGroup.dropBackground": "#7390AA80", "editorGroupHeader.noTabsBackground": "#1b1e28", "editorGutter.background": "#1b1e28", "editorGutter.commentRangeForeground": "#a6accd", "editorGutter.foldingControlForeground": "#a6accd", "editorGutter.addedBackground": "#5fb3a140", "editorGutter.deletedBackground": "#d0679d40", "editorGutter.modifiedBackground": "#ADD7FF20", "editorHint.foreground": "#7390AAb3", "editorHoverWidget.foreground": "#a6accd", "editorHoverWidget.statusBarBackground": "#202430", "editorIndentGuide.activeBackground": "#e3e4e229", "editorInfo.foreground": "#ADD7FF", "editorInlineHint.background": "#a6accd", "editorInlineHint.foreground": "#1b1e28", "editorLightBulb.foreground": "#fffac2", "editorLightBulbAutoFix.foreground": "#ADD7FF", "editorLineNumber.activeForeground": "#a6accd", "editorMarkerNavigation.background": "#2d2d30", "editorMarkerNavigationError.background": "#d0679d", "editorMarkerNavigationInfo.background": "#ADD7FF", "editorMarkerNavigationWarning.background": "#fffac2", "editorOverviewRuler.addedForeground": "#5fb3a199", "editorOverviewRuler.border": "#00000000", "editorOverviewRuler.bracketMatchForeground": "#a0a0a0", "editorOverviewRuler.commonContentForeground": "#a6accd66", "editorOverviewRuler.currentContentForeground": "#5fb3a180", "editorOverviewRuler.deletedForeground": "#d0679d99", "editorOverviewRuler.errorForeground": "#d0679db3", "editorOverviewRuler.findMatchForeground": "#e4f0fb20", "editorOverviewRuler.incomingContentForeground": "#89ddff80", "editorOverviewRuler.infoForeground": "#ADD7FF", "editorOverviewRuler.modifiedForeground": "#89ddff99", "editorOverviewRuler.rangeHighlightForeground": "#89ddff99", "editorOverviewRuler.selectionHighlightForeground": "#a0a0a0cc", "editorOverviewRuler.warningForeground": "#fffac2", "editorOverviewRuler.wordHighlightForeground": "#a0a0a0cc", "editorOverviewRuler.wordHighlightStrongForeground": "#89ddffcc", "editorPane.background": "#1b1e28", "editorRuler.foreground": "#e4f0fb10", "editorUnnecessaryCode.opacity": "#000000aa", "editorWarning.foreground": "#fffac2", "editorWhitespace.foreground": "#303340", "editorWidget.border": "#a6accd", "editorWidget.foreground": "#a6accd", "extensionButton.prominentBackground": "#30334090", "extensionButton.prominentHoverBackground": "#303340", "focusBorder": "#00000000", "input.background": "#ffffff05", "input.border": "#ffffff10", "input.foreground": "#e4f0fb", "input.placeholderForeground": "#a6accd60", "inputValidation.errorBorder": "#d0679d", "inputValidation.errorForeground": "#d0679d", "inputValidation.infoBorder": "#89ddff", "inputValidation.warningBorder": "#fffac2", "notifications.background": "#1b1e28", "notifications.foreground": "#e4f0fb", "panel.border": "#00000030", "panelTitle.activeForeground": "#a6accd", "peekView.border": "#00000030", "peekViewEditor.background": "#a6accd05", "peekViewEditorGutter.background": "#a6accd05", "peekViewResult.background": "#a6accd05", "peekViewTitle.background": "#a6accd05", "peekViewTitleDescription.foreground": "#a6accd60", "scrollbar.shadow": "#00000000", "scrollbarSlider.activeBackground": "#a6accd25", "scrollbarSlider.background": "#00000080", "scrollbarSlider.hoverBackground": "#a6accd25", "selection.background": "#a6accd", "sideBar.background": "#1b1e28", "sideBar.foreground": "#767c9d", "sideBarSectionHeader.background": "#1b1e28", "sideBarTitle.foreground": "#a6accd", "statusBar.background": "#1b1e28", "statusBar.foreground": "#a6accd", "statusBar.noFolderBackground": "#1b1e28", "tab.activeBackground": "#30334080", "tab.activeForeground": "#e4f0fb", "tab.border": "#00000000", "tab.inactiveBackground": "#1b1e28", "tab.inactiveForeground": "#767c9d", "tab.unfocusedActiveForeground": "#a6accd", "tab.activeModifiedBorder": "#ADD7FF", "tab.inactiveModifiedBorder": "#ADD7FF80", "tab.lastPinnedBorder": "#00000000", "tab.unfocusedActiveBackground": "#1b1e28", "tab.unfocusedActiveModifiedBorder": "#ADD7FF40", "tab.unfocusedInactiveBackground": "#1b1e28", "tab.unfocusedInactiveForeground": "#a6accd80", "tab.unfocusedInactiveModifiedBorder": "#ADD7FF40", "terminal.ansiBlack": "#1b1e28", "terminal.ansiBlue": "#89ddff", "terminal.ansiBrightBlack": "#a6accd", "terminal.ansiBrightBlue": "#ADD7FF", "terminal.ansiBrightCyan": "#ADD7FF", "terminal.ansiBrightGreen": "#5DE4c7", "terminal.ansiBrightMagenta": "#f087bd", "terminal.ansiBrightRed": "#d0679d", "terminal.ansiBrightWhite": "#ffffff", "terminal.ansiBrightYellow": "#fffac2", "terminal.ansiCyan": "#89ddff", "terminal.ansiGreen": "#5DE4c7", "terminal.ansiMagenta": "#f087bd", "terminal.ansiRed": "#d0679d", "terminal.ansiWhite": "#ffffff", "terminal.ansiYellow": "#fffac2", "textLink.activeForeground": "#ADD7FF", "textLink.foreground": "#ADD7FF", "titleBar.activeBackground": "#1b1e28", "titleBar.activeForeground": "#a6accd", "titleBar.inactiveBackground": "#1b1e28", "titleBar.inactiveForeground": "#767c9d", "tree.indentGuidesStroke": "#00000000", "widget.shadow": "#00000030", "activityBar.activeBorder": "#a6accd", "activityBar.dropBorder": "#a6accd", "activityBar.inactiveForeground": "#a6accd66", "breadcrumb.activeSelectionForeground": "#e4f0fb", "breadcrumb.background": "#00000000", "breadcrumb.focusForeground": "#e4f0fb", "breadcrumb.foreground": "#767c9dcc", "breadcrumbPicker.background": "#1b1e28", "button.foreground": "#ffffff", "button.hoverBackground": "#50647750", "button.secondaryBackground": "#a6accd", "button.secondaryForeground": "#ffffff", "button.secondaryHoverBackground": "#a6accd", "charts.blue": "#ADD7FF", "charts.foreground": "#a6accd", "charts.green": "#5DE4c7", "charts.lines": "#a6accd80", "charts.orange": "#89ddff", "charts.purple": "#f087bd", "charts.red": "#d0679d", "charts.yellow": "#fffac2", "checkbox.background": "#1b1e28", "checkbox.border": "#ffffff10", "checkbox.foreground": "#e4f0fb", "debugConsole.errorForeground": "#d0679d", "debugConsole.infoForeground": "#ADD7FF", "debugConsole.sourceForeground": "#a6accd", "debugConsole.warningForeground": "#fffac2", "debugConsoleInputIcon.foreground": "#a6accd", "debugExceptionWidget.background": "#d0679d", "debugExceptionWidget.border": "#d0679d", "debugIcon.breakpointCurrentStackframeForeground": "#fffac2", "debugIcon.breakpointDisabledForeground": "#7390AA", "debugIcon.breakpointForeground": "#d0679d", "debugIcon.breakpointStackframeForeground": "#5fb3a1", "debugIcon.breakpointUnverifiedForeground": "#7390AA", "debugIcon.continueForeground": "#ADD7FF", "debugIcon.disconnectForeground": "#d0679d", "debugIcon.pauseForeground": "#ADD7FF", "debugIcon.restartForeground": "#5fb3a1", "debugIcon.startForeground": "#5fb3a1", "debugIcon.stepBackForeground": "#ADD7FF", "debugIcon.stepIntoForeground": "#ADD7FF", "debugIcon.stepOutForeground": "#ADD7FF", "debugIcon.stepOverForeground": "#ADD7FF", "debugIcon.stopForeground": "#d0679d", "debugTokenExpression.boolean": "#89ddff", "debugTokenExpression.error": "#d0679d", "debugTokenExpression.name": "#e4f0fb", "debugTokenExpression.number": "#5fb3a1", "debugTokenExpression.string": "#89ddff", "debugTokenExpression.value": "#a6accd99", "debugToolBar.background": "#303340", "debugView.exceptionLabelBackground": "#d0679d", "debugView.exceptionLabelForeground": "#e4f0fb", "debugView.stateLabelBackground": "#303340", "debugView.stateLabelForeground": "#a6accd", "debugView.valueChangedHighlight": "#89ddff", "descriptionForeground": "#a6accdb3", "diffEditor.diagonalFill": "#a6accd33", "dropdown.foreground": "#e4f0fb", "errorForeground": "#d0679d", "extensionBadge.remoteBackground": "#303340", "extensionBadge.remoteForeground": "#e4f0fb", "extensionButton.prominentForeground": "#ffffff", "extensionIcon.starForeground": "#fffac2", "foreground": "#a6accd", "gitDecoration.addedResourceForeground": "#5fb3a1", "gitDecoration.conflictingResourceForeground": "#d0679d", "gitDecoration.deletedResourceForeground": "#d0679d", "gitDecoration.ignoredResourceForeground": "#767c9d70", "gitDecoration.modifiedResourceForeground": "#ADD7FF", "gitDecoration.renamedResourceForeground": "#5DE4c7", "gitDecoration.stageDeletedResourceForeground": "#d0679d", "gitDecoration.stageModifiedResourceForeground": "#ADD7FF", "gitDecoration.submoduleResourceForeground": "#89ddff", "gitDecoration.untrackedResourceForeground": "#5DE4c7", "icon.foreground": "#a6accd", "imagePreview.border": "#303340", "inputOption.activeBackground": "#00000000", "inputOption.activeBorder": "#00000000", "inputOption.activeForeground": "#ffffff", "inputValidation.errorBackground": "#1b1e28", "inputValidation.infoBackground": "#506477", "inputValidation.warningBackground": "#506477", "list.deemphasizedForeground": "#767c9d", "list.dropBackground": "#506477", "list.filterMatchBackground": "#89ddff60", "list.focusOutline": "#00000000", "list.invalidItemForeground": "#fffac2", "list.warningForeground": "#fffac2", "listFilterWidget.background": "#303340", "listFilterWidget.noMatchesOutline": "#d0679d", "listFilterWidget.outline": "#00000000", "list.activeSelectionBackground": "#30334080", "list.activeSelectionForeground": "#e4f0fb", "list.errorForeground": "#d0679d", "list.focusBackground": "#30334080", "list.focusForeground": "#a6accd", "list.highlightForeground": "#5fb3a1", "list.hoverBackground": "#30334080", "list.hoverForeground": "#e4f0fb", "list.inactiveSelectionBackground": "#00000000", "list.inactiveSelectionForeground": "#e4f0fb", "menu.background": "#1b1e28", "menu.foreground": "#e4f0fb", "menu.selectionBackground": "#00000000", "menu.selectionForeground": "#7390AA", "menu.separatorBackground": "#767c9d", "menubar.selectionBackground": "#717cb425", "menubar.selectionForeground": "#a6accd", "merge.commonContentBackground": "#a6accd29", "merge.commonHeaderBackground": "#a6accd66", "merge.currentContentBackground": "#5fb3a133", "merge.currentHeaderBackground": "#5fb3a180", "merge.incomingContentBackground": "#89ddff33", "merge.incomingHeaderBackground": "#89ddff80", "minimap.errorHighlight": "#d0679d", "minimap.findMatchHighlight": "#ADD7FF", "minimap.selectionHighlight": "#e4f0fb40", "minimap.warningHighlight": "#fffac2", "minimapGutter.addedBackground": "#5fb3a180", "minimapGutter.deletedBackground": "#d0679d80", "minimapGutter.modifiedBackground": "#ADD7FF80", "minimapSlider.activeBackground": "#a6accd30", "minimapSlider.background": "#a6accd20", "minimapSlider.hoverBackground": "#a6accd30", "notebook.cellBorderColor": "#1b1e28", "notebook.cellInsertionIndicator": "#00000000", "notebook.cellStatusBarItemHoverBackground": "#ffffff26", "notebook.cellToolbarSeparator": "#303340", "notebook.focusedCellBorder": "#00000000", "notebook.focusedEditorBorder": "#00000000", "notebook.focusedRowBorder": "#00000000", "notebook.inactiveFocusedCellBorder": "#00000000", "notebook.outputContainerBackgroundColor": "#1b1e28", "notebook.rowHoverBackground": "#30334000", "notebook.selectedCellBackground": "#303340", "notebook.selectedCellBorder": "#1b1e28", "notebook.symbolHighlightBackground": "#ffffff0b", "notebookScrollbarSlider.activeBackground": "#a6accd25", "notebookScrollbarSlider.background": "#00000050", "notebookScrollbarSlider.hoverBackground": "#a6accd25", "notebookStatusErrorIcon.foreground": "#d0679d", "notebookStatusRunningIcon.foreground": "#a6accd", "notebookStatusSuccessIcon.foreground": "#5fb3a1", "notificationCenterHeader.background": "#303340", "notificationLink.foreground": "#ADD7FF", "notifications.border": "#303340", "notificationsErrorIcon.foreground": "#d0679d", "notificationsInfoIcon.foreground": "#ADD7FF", "notificationsWarningIcon.foreground": "#fffac2", "panel.background": "#1b1e28", "panel.dropBorder": "#a6accd", "panelSection.border": "#1b1e28", "panelSection.dropBackground": "#7390AA80", "panelSectionHeader.background": "#303340", "panelTitle.activeBorder": "#a6accd", "panelTitle.inactiveForeground": "#a6accd99", "peekViewEditor.matchHighlightBackground": "#303340", "peekViewResult.fileForeground": "#ffffff", "peekViewResult.lineForeground": "#a6accd", "peekViewResult.matchHighlightBackground": "#303340", "peekViewResult.selectionBackground": "#717cb425", "peekViewResult.selectionForeground": "#ffffff", "peekViewTitleLabel.foreground": "#ffffff", "pickerGroup.border": "#a6accd", "pickerGroup.foreground": "#89ddff", "problemsErrorIcon.foreground": "#d0679d", "problemsInfoIcon.foreground": "#ADD7FF", "problemsWarningIcon.foreground": "#fffac2", "progressBar.background": "#89ddff", "quickInput.background": "#1b1e28", "quickInput.foreground": "#a6accd", "quickInputList.focusBackground": "#a6accd10", "quickInputTitle.background": "#ffffff1b", "sash.hoverBorder": "#00000000", "scm.providerBorder": "#e4f0fb10", "searchEditor.findMatchBackground": "#ADD7FF50", "searchEditor.textInputBorder": "#ffffff10", "settings.checkboxBackground": "#1b1e28", "settings.checkboxBorder": "#ffffff10", "settings.checkboxForeground": "#e4f0fb", "settings.dropdownBackground": "#1b1e28", "settings.dropdownBorder": "#ffffff10", "settings.dropdownForeground": "#e4f0fb", "settings.dropdownListBorder": "#e4f0fb10", "settings.focusedRowBackground": "#00000000", "settings.headerForeground": "#e4f0fb", "settings.modifiedItemIndicator": "#ADD7FF", "settings.numberInputBackground": "#ffffff05", "settings.numberInputBorder": "#ffffff10", "settings.numberInputForeground": "#e4f0fb", "settings.textInputBackground": "#ffffff05", "settings.textInputBorder": "#ffffff10", "settings.textInputForeground": "#e4f0fb", "sideBar.dropBackground": "#7390AA80", "sideBarSectionHeader.foreground": "#a6accd", "statusBar.debuggingBackground": "#303340", "statusBar.debuggingForeground": "#ffffff", "statusBar.noFolderForeground": "#a6accd", "statusBarItem.activeBackground": "#ffffff2e", "statusBarItem.errorBackground": "#d0679d", "statusBarItem.errorForeground": "#ffffff", "statusBarItem.hoverBackground": "#ffffff1f", "statusBarItem.prominentBackground": "#00000080", "statusBarItem.prominentForeground": "#a6accd", "statusBarItem.prominentHoverBackground": "#0000004d", "statusBarItem.remoteBackground": "#303340", "statusBarItem.remoteForeground": "#e4f0fb", "symbolIcon.arrayForeground": "#a6accd", "symbolIcon.booleanForeground": "#a6accd", "symbolIcon.classForeground": "#fffac2", "symbolIcon.colorForeground": "#a6accd", "symbolIcon.constantForeground": "#a6accd", "symbolIcon.constructorForeground": "#f087bd", "symbolIcon.enumeratorForeground": "#fffac2", "symbolIcon.enumeratorMemberForeground": "#ADD7FF", "symbolIcon.eventForeground": "#fffac2", "symbolIcon.fieldForeground": "#ADD7FF", "symbolIcon.fileForeground": "#a6accd", "symbolIcon.folderForeground": "#a6accd", "symbolIcon.functionForeground": "#f087bd", "symbolIcon.interfaceForeground": "#ADD7FF", "symbolIcon.keyForeground": "#a6accd", "symbolIcon.keywordForeground": "#a6accd", "symbolIcon.methodForeground": "#f087bd", "symbolIcon.moduleForeground": "#a6accd", "symbolIcon.namespaceForeground": "#a6accd", "symbolIcon.nullForeground": "#a6accd", "symbolIcon.numberForeground": "#a6accd", "symbolIcon.objectForeground": "#a6accd", "symbolIcon.operatorForeground": "#a6accd", "symbolIcon.packageForeground": "#a6accd", "symbolIcon.propertyForeground": "#a6accd", "symbolIcon.referenceForeground": "#a6accd", "symbolIcon.snippetForeground": "#a6accd", "symbolIcon.stringForeground": "#a6accd", "symbolIcon.structForeground": "#a6accd", "symbolIcon.textForeground": "#a6accd", "symbolIcon.typeParameterForeground": "#a6accd", "symbolIcon.unitForeground": "#a6accd", "symbolIcon.variableForeground": "#ADD7FF", "terminal.border": "#00000000", "terminal.foreground": "#a6accd", "terminal.selectionBackground": "#717cb425", "testing.iconErrored": "#d0679d", "testing.iconFailed": "#d0679d", "testing.iconPassed": "#5DE4c7", "testing.iconQueued": "#fffac2", "testing.iconSkipped": "#7390AA", "testing.iconUnset": "#7390AA", "testing.message.error.decorationForeground": "#d0679d", "testing.message.error.lineBackground": "#d0679d33", "testing.message.hint.decorationForeground": "#7390AAb3", "testing.message.info.decorationForeground": "#ADD7FF", "testing.message.info.lineBackground": "#89ddff33", "testing.message.warning.decorationForeground": "#fffac2", "testing.message.warning.lineBackground": "#fffac233", "testing.peekBorder": "#d0679d", "testing.runAction": "#5DE4c7", "textBlockQuote.background": "#7390AA1a", "textBlockQuote.border": "#89ddff80", "textCodeBlock.background": "#00000050", "textPreformat.foreground": "#e4f0fb", "textSeparator.foreground": "#ffffff2e", "tree.tableColumnsBorder": "#a6accd20", "welcomePage.progress.background": "#ffffff05", "welcomePage.progress.foreground": "#5fb3a1", "welcomePage.tileBackground": "#1b1e28", "welcomePage.tileHoverBackground": "#303340" }, "tokenColors": [ { "scope": ["comment", "punctuation.definition.comment"], "settings": { "foreground": "#767c9dB0", "fontStyle": "italic" } }, { "scope": "meta.parameters comment.block", "settings": { "foreground": "#a6accd", "fontStyle": "italic" } }, { "scope": [ "variable.other.constant.object", "variable.other.readwrite.alias", "meta.import variable.other.readwrite" ], "settings": { "foreground": "#ADD7FF" } }, { "scope": ["variable.other", "support.type.object"], "settings": { "foreground": "#e4f0fb" } }, { "scope": [ "variable.other.object.property", "variable.other.property", "support.variable.property" ], "settings": { "foreground": "#e4f0fb" } }, { "scope": [ "entity.name.function.method", "string.unquoted", "meta.object.member" ], "settings": { "foreground": "#ADD7FF" } }, { "scope": [ "variable - meta.import", "constant.other.placeholder", "meta.object-literal.key-meta.object.member" ], "settings": { "foreground": "#e4f0fb" } }, { "scope": ["keyword.control.flow"], "settings": { "foreground": "#5DE4c7c0" } }, { "scope": ["keyword.operator.new", "keyword.control.new"], "settings": { "foreground": "#5DE4c7" } }, { "scope": [ "variable.language.this", "storage.modifier.async", "storage.modifier", "variable.language.super" ], "settings": { "foreground": "#5DE4c7" } }, { "scope": [ "support.class.error", "keyword.control.trycatch", "keyword.operator.expression.delete", "keyword.operator.expression.void", "keyword.operator.void", "keyword.operator.delete", "constant.language.null", "constant.language.boolean.false", "constant.language.undefined" ], "settings": { "foreground": "#d0679d" } }, { "scope": [ "variable.parameter", "variable.other.readwrite.js", "meta.definition.variable variable.other.constant", "meta.definition.variable variable.other.readwrite" ], "settings": { "foreground": "#e4f0fb" } }, { "scope": ["constant.other.color"], "settings": { "foreground": "#ffffff" } }, { "scope": ["invalid", "invalid.illegal"], "settings": { "foreground": "#d0679d" } }, { "scope": ["invalid.deprecated"], "settings": { "foreground": "#d0679d" } }, { "scope": ["keyword.control", "keyword"], "settings": { "foreground": "#a6accd" } }, { "scope": ["keyword.operator", "storage.type"], "settings": { "foreground": "#91B4D5" } }, { "scope": [ "keyword.control.module", "keyword.control.import", "keyword.control.export", "keyword.control.default", "meta.import", "meta.export" ], "settings": { "foreground": "#5DE4c7" } }, { "scope": ["Keyword", "Storage"], "settings": { "fontStyle": "italic" } }, { "scope": ["keyword-meta.export"], "settings": { "foreground": "#ADD7FF" } }, { "scope": ["meta.brace", "punctuation", "keyword.operator.existential"], "settings": { "foreground": "#a6accd" } }, { "scope": [ "constant.other.color", "meta.tag", "punctuation.definition.tag", "punctuation.separator.inheritance.php", "punctuation.definition.tag.html", "punctuation.definition.tag.begin.html", "punctuation.definition.tag.end.html", "punctuation.section.embedded", "keyword.other.template", "keyword.other.substitution", "meta.objectliteral" ], "settings": { "foreground": "#e4f0fb" } }, { "scope": ["support.class.component"], "settings": { "foreground": "#5DE4c7" } }, { "scope": [ "entity.name.tag", "entity.name.tag", "meta.tag.sgml", "markup.deleted.git_gutter" ], "settings": { "foreground": "#5DE4c7" } }, { "name": "Function Call", "scope": "variable.function, source meta.function-call entity.name.function, source meta.function-call entity.name.function, source meta.method-call entity.name.function, meta.class meta.group.braces.curly meta.function-call variable.function, meta.class meta.field.declaration meta.function-call entity.name.function, variable.function.constructor, meta.block meta.var.expr meta.function-call entity.name.function, support.function.console, meta.function-call support.function, meta.property.class variable.other.class, punctuation.definition.entity.css", "settings": { "foreground": "#e4f0fbd0" } }, { "name": "Function/Class Name", "scope": "entity.name.function, meta.class entity.name.class, meta.class entity.name.type.class, meta.class meta.function-call variable.function, keyword.other.important", "settings": { "foreground": "#ADD7FF" } }, { "scope": ["source.cpp meta.block variable.other"], "settings": { "foreground": "#ADD7FF" } }, { "scope": ["support.other.variable", "string.other.link"], "settings": { "foreground": "#5DE4c7" } }, { "scope": [ "constant.numeric", "support.constant", "constant.character", "constant.escape", "keyword.other.unit", "keyword.other", "string", "constant.language", "constant.other.symbol", "constant.other.key", "markup.heading", "markup.inserted.git_gutter", "meta.group.braces.curly constant.other.object.key.js string.unquoted.label.js", "text.html.derivative" ], "settings": { "foreground": "#5DE4c7" } }, { "scope": ["entity.other.inherited-class"], "settings": { "foreground": "#ADD7FF" } }, { "scope": ["meta.type.declaration"], "settings": { "foreground": "#ADD7FF" } }, { "scope": ["entity.name.type.alias"], "settings": { "foreground": "#a6accd" } }, { "scope": ["keyword.control.as", "entity.name.type", "support.type"], "settings": { "foreground": "#a6accdC0" } }, { "scope": [ "entity.name", "support.orther.namespace.use.php", "meta.use.php", "support.other.namespace.php", "markup.changed.git_gutter", "support.type.sys-types" ], "settings": { "foreground": "#91B4D5" } }, { "scope": [ "support.class", "support.constant", "variable.other.constant.object" ], "settings": { "foreground": "#ADD7FF" } }, { "scope": [ "source.css support.type.property-name", "source.sass support.type.property-name", "source.scss support.type.property-name", "source.less support.type.property-name", "source.stylus support.type.property-name", "source.postcss support.type.property-name" ], "settings": { "foreground": "#ADD7FF" } }, { "scope": [ "entity.name.module.js", "variable.import.parameter.js", "variable.other.class.js" ], "settings": { "foreground": "#e4f0fb" } }, { "scope": ["variable.language"], "settings": { "foreground": "#ADD7FF", "fontStyle": "italic" } }, { "scope": ["entity.name.method.js"], "settings": { "foreground": "#91B4D5", "fontStyle": "italic" } }, { "scope": [ "meta.class-method.js entity.name.function.js", "variable.function.constructor" ], "settings": { "foreground": "#91B4D5" } }, { "scope": ["entity.other.attribute-name"], "settings": { "foreground": "#91B4D5", "fontStyle": "italic" } }, { "scope": [ "text.html.basic entity.other.attribute-name.html", "text.html.basic entity.other.attribute-name" ], "settings": { "foreground": "#5fb3a1", "fontStyle": "italic" } }, { "scope": ["entity.other.attribute-name.class"], "settings": { "foreground": "#5fb3a1" } }, { "scope": ["source.sass keyword.control"], "settings": { "foreground": "#42675A" } }, { "scope": ["markup.inserted"], "settings": { "foreground": "#ADD7FF" } }, { "scope": ["markup.deleted"], "settings": { "foreground": "#506477" } }, { "scope": ["markup.changed"], "settings": { "foreground": "#91B4D5" } }, { "scope": ["string.regexp"], "settings": { "foreground": "#5fb3a1" } }, { "scope": ["constant.character.escape"], "settings": { "foreground": "#5fb3a1" } }, { "scope": ["*url*", "*link*", "*uri*"], "settings": { "foreground": "#ADD7FF", "fontStyle": "underline" } }, { "scope": [ "tag.decorator.js entity.name.tag.js", "tag.decorator.js punctuation.definition.tag.js" ], "settings": { "foreground": "#42675A", "fontStyle": "italic" } }, { "scope": [ "source.js constant.other.object.key.js string.unquoted.label.js" ], "settings": { "foreground": "#5fb3a1", "fontStyle": "italic" } }, { "scope": [ "source.json meta.structure.dictionary.json support.type.property-name.json" ], "settings": { "foreground": "#e4f0fb" } }, { "scope": [ "source.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json support.type.property-name.json" ], "settings": { "foreground": "#ADD7FF" } }, { "scope": [ "source.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json support.type.property-name.json" ], "settings": { "foreground": "#91B4D5" } }, { "scope": [ "source.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json support.type.property-name.json" ], "settings": { "foreground": "#7390AA" } }, { "scope": [ "source.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json support.type.property-name.json" ], "settings": { "foreground": "#e4f0fb" } }, { "scope": [ "source.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json support.type.property-name.json" ], "settings": { "foreground": "#ADD7FF" } }, { "scope": [ "source.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json support.type.property-name.json" ], "settings": { "foreground": "#91B4D5" } }, { "scope": [ "source.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json support.type.property-name.json" ], "settings": { "foreground": "#7390AA" } }, { "scope": [ "source.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json support.type.property-name.json" ], "settings": { "foreground": "#e4f0fb" } }, { "scope": [ "text.html.markdown", "punctuation.definition.list_item.markdown" ], "settings": { "foreground": "#e4f0fb" } }, { "scope": ["text.html.markdown markup.inline.raw.markdown"], "settings": { "foreground": "#ADD7FF" } }, { "scope": [ "text.html.markdown markup.inline.raw.markdown punctuation.definition.raw.markdown" ], "settings": { "foreground": "#91B4D5" } }, { "scope": [ "markdown.heading", "markup.heading | markup.heading entity.name", "markup.heading.markdown punctuation.definition.heading.markdown" ], "settings": { "foreground": "#e4f0fb" } }, { "scope": ["markup.italic"], "settings": { "foreground": "#7390AA", "fontStyle": "italic" } }, { "scope": ["markup.bold", "markup.bold string"], "settings": { "foreground": "#7390AA", "fontStyle": "bold" } }, { "scope": [ "markup.bold markup.italic", "markup.italic markup.bold", "markup.quote markup.bold", "markup.bold markup.italic string", "markup.italic markup.bold string", "markup.quote markup.bold string" ], "settings": { "foreground": "#7390AA", "fontStyle": "bold" } }, { "scope": ["markup.underline"], "settings": { "foreground": "#7390AA", "fontStyle": "underline" } }, { "scope": ["markup.strike"], "settings": { "fontStyle": "italic" } }, { "scope": ["markup.quote punctuation.definition.blockquote.markdown"], "settings": { "foreground": "#5DE4c7" } }, { "scope": ["markup.quote"], "settings": { "fontStyle": "italic" } }, { "scope": ["string.other.link.title.markdown"], "settings": { "foreground": "#ADD7FF" } }, { "scope": ["string.other.link.description.title.markdown"], "settings": { "foreground": "#ADD7FF" } }, { "scope": ["constant.other.reference.link.markdown"], "settings": { "foreground": "#ADD7FF" } }, { "scope": ["markup.raw.block"], "settings": { "foreground": "#ADD7FF" } }, { "scope": ["markup.raw.block.fenced.markdown"], "settings": { "foreground": "#50647750" } }, { "scope": ["punctuation.definition.fenced.markdown"], "settings": { "foreground": "#50647750" } }, { "scope": [ "markup.raw.block.fenced.markdown", "variable.language.fenced.markdown", "punctuation.section.class.end" ], "settings": { "foreground": "#91B4D5" } }, { "scope": ["variable.language.fenced.markdown"], "settings": { "foreground": "#91B4D5" } }, { "scope": ["meta.separator"], "settings": { "foreground": "#7390AA", "fontStyle": "bold" } }, { "scope": ["markup.table"], "settings": { "foreground": "#ADD7FF" } }, { "scope": "token.info-token", "settings": { "foreground": "#89ddff" } }, { "scope": "token.warn-token", "settings": { "foreground": "#fffac2" } }, { "scope": "token.error-token", "settings": { "foreground": "#d0679d" } }, { "scope": "token.debug-token", "settings": { "foreground": "#e4f0fb" } }, { "scope": [ "entity.name.section.markdown", "markup.heading.setext.1.markdown", "markup.heading.setext.2.markdown" ], "settings": { "foreground": "#e4f0fb", "fontStyle": "bold" } }, { "scope": "meta.paragraph.markdown", "settings": { "foreground": "#e4f0fbd0" } }, { "scope": [ "punctuation.definition.from-file.diff", "meta.diff.header.from-file" ], "settings": { "foreground": "#506477" } }, { "scope": "markup.inline.raw.string.markdown", "settings": { "foreground": "#7390AA" } }, { "scope": "meta.separator.markdown", "settings": { "foreground": "#767c9d" } }, { "scope": "markup.bold.markdown", "settings": { "fontStyle": "bold" } }, { "scope": "markup.italic.markdown", "settings": { "fontStyle": "italic" } }, { "scope": [ "beginning.punctuation.definition.list.markdown", "punctuation.definition.list.begin.markdown", "markup.list.unnumbered.markdown" ], "settings": { "foreground": "#ADD7FF" } }, { "scope": [ "string.other.link.description.title.markdown punctuation.definition.string.markdown", "meta.link.inline.markdown string.other.link.description.title.markdown", "string.other.link.description.title.markdown punctuation.definition.string.begin.markdown", "string.other.link.description.title.markdown punctuation.definition.string.end.markdown", "meta.image.inline.markdown string.other.link.description.title.markdown" ], "settings": { "foreground": "#ADD7FF", "fontStyle": "" } }, { "scope": [ "meta.link.inline.markdown string.other.link.title.markdown", "meta.link.reference.markdown string.other.link.title.markdown", "meta.link.reference.def.markdown markup.underline.link.markdown" ], "settings": { "foreground": "#ADD7FF", "fontStyle": "underline" } }, { "scope": [ "markup.underline.link.markdown", "string.other.link.description.title.markdown" ], "settings": { "foreground": "#5DE4c7" } }, { "scope": ["fenced_code.block.language", "markup.inline.raw.markdown"], "settings": { "foreground": "#ADD7FF" } }, { "scope": [ "punctuation.definition.markdown", "punctuation.definition.raw.markdown", "punctuation.definition.heading.markdown", "punctuation.definition.bold.markdown", "punctuation.definition.italic.markdown" ], "settings": { "foreground": "#ADD7FF" } }, { "scope": ["source.ignore", "log.error", "log.exception"], "settings": { "foreground": "#d0679d" } }, { "scope": ["log.verbose"], "settings": { "foreground": "#a6accd" } } ] } ================================================ FILE: apps/web/src/lib/shiki/themes/rose-pine-dawn.json ================================================ { "name": "rose-pine-dawn", "type": "light", "colors": { "activityBar.activeBorder": "#575279", "activityBar.background": "#faf4ed", "activityBar.dropBorder": "#f2e9e1", "activityBar.foreground": "#575279", "activityBar.inactiveForeground": "#797593", "activityBarBadge.background": "#d7827e", "activityBarBadge.foreground": "#faf4ed", "badge.background": "#d7827e", "badge.foreground": "#faf4ed", "banner.background": "#fffaf3", "banner.foreground": "#575279", "banner.iconForeground": "#797593", "breadcrumb.activeSelectionForeground": "#d7827e", "breadcrumb.background": "#faf4ed", "breadcrumb.focusForeground": "#797593", "breadcrumb.foreground": "#9893a5", "breadcrumbPicker.background": "#fffaf3", "button.background": "#d7827e", "button.foreground": "#faf4ed", "button.hoverBackground": "#d7827ee6", "button.secondaryBackground": "#fffaf3", "button.secondaryForeground": "#575279", "button.secondaryHoverBackground": "#f2e9e1", "charts.blue": "#56949f", "charts.foreground": "#575279", "charts.green": "#286983", "charts.lines": "#797593", "charts.orange": "#d7827e", "charts.purple": "#907aa9", "charts.red": "#b4637a", "charts.yellow": "#ea9d34", "checkbox.background": "#fffaf3", "checkbox.border": "#6e6a8614", "checkbox.foreground": "#575279", "debugExceptionWidget.background": "#fffaf3", "debugExceptionWidget.border": "#6e6a8614", "debugIcon.breakpointCurrentStackframeForeground": "#797593", "debugIcon.breakpointDisabledForeground": "#797593", "debugIcon.breakpointForeground": "#797593", "debugIcon.breakpointStackframeForeground": "#797593", "debugIcon.breakpointUnverifiedForeground": "#797593", "debugIcon.continueForeground": "#797593", "debugIcon.disconnectForeground": "#797593", "debugIcon.pauseForeground": "#797593", "debugIcon.restartForeground": "#797593", "debugIcon.startForeground": "#797593", "debugIcon.stepBackForeground": "#797593", "debugIcon.stepIntoForeground": "#797593", "debugIcon.stepOutForeground": "#797593", "debugIcon.stepOverForeground": "#797593", "debugIcon.stopForeground": "#b4637a", "debugToolBar.background": "#fffaf3", "debugToolBar.border": "#f2e9e1", "descriptionForeground": "#797593", "diffEditor.border": "#f2e9e1", "diffEditor.diagonalFill": "#6e6a8626", "diffEditor.insertedTextBackground": "#56949f26", "diffEditor.removedTextBackground": "#b4637a26", "diffEditorOverview.insertedForeground": "#56949f80", "diffEditorOverview.removedForeground": "#b4637a80", "dropdown.background": "#fffaf3", "dropdown.border": "#6e6a8614", "dropdown.foreground": "#575279", "dropdown.listBackground": "#fffaf3", "editor.background": "#faf4ed", "editor.findMatchBackground": "#6e6a8626", "editor.findMatchHighlightBackground": "#6e6a8626", "editor.findRangeHighlightBackground": "#6e6a8626", "editor.findRangeHighlightBorder": "#0000", "editor.focusedStackFrameHighlightBackground": "#6e6a8614", "editor.foldBackground": "#fffaf3", "editor.foreground": "#575279", "editor.hoverHighlightBackground": "#0000", "editor.inactiveSelectionBackground": "#6e6a860d", "editor.inlineValuesBackground": "#0000", "editor.inlineValuesForeground": "#797593", "editor.lineHighlightBackground": "#6e6a860d", "editor.lineHighlightBorder": "#0000", "editor.linkedEditingBackground": "#fffaf3", "editor.rangeHighlightBackground": "#6e6a860d", "editor.rangeHighlightBorder": "#0000", "editor.selectionBackground": "#6e6a8614", "editor.selectionForeground": "#575279", "editor.selectionHighlightBackground": "#6e6a8614", "editor.selectionHighlightBorder": "#0000", "editor.snippetFinalTabstopHighlightBackground": "#6e6a8614", "editor.snippetFinalTabstopHighlightBorder": "#fffaf3", "editor.snippetTabstopHighlightBackground": "#6e6a8614", "editor.snippetTabstopHighlightBorder": "#fffaf3", "editor.stackFrameHighlightBackground": "#6e6a8614", "editor.symbolHighlightBackground": "#6e6a8614", "editor.symbolHighlightBorder": "#0000", "editor.wordHighlightBackground": "#6e6a8614", "editor.wordHighlightBorder": "#0000", "editor.wordHighlightStrongBackground": "#6e6a8614", "editor.wordHighlightStrongBorder": "#6e6a8614", "editorBracketHighlight.foreground1": "#b4637a80", "editorBracketHighlight.foreground2": "#28698380", "editorBracketHighlight.foreground3": "#ea9d3480", "editorBracketHighlight.foreground4": "#56949f80", "editorBracketHighlight.foreground5": "#d7827e80", "editorBracketHighlight.foreground6": "#907aa980", "editorBracketMatch.background": "#0000", "editorBracketMatch.border": "#797593", "editorBracketPairGuide.activeBackground1": "#286983", "editorBracketPairGuide.activeBackground2": "#d7827e", "editorBracketPairGuide.activeBackground3": "#907aa9", "editorBracketPairGuide.activeBackground4": "#56949f", "editorBracketPairGuide.activeBackground5": "#ea9d34", "editorBracketPairGuide.activeBackground6": "#b4637a", "editorBracketPairGuide.background1": "#28698380", "editorBracketPairGuide.background2": "#d7827e80", "editorBracketPairGuide.background3": "#907aa980", "editorBracketPairGuide.background4": "#56949f80", "editorBracketPairGuide.background5": "#ea9d3480", "editorBracketPairGuide.background6": "#b4637a80", "editorCodeLens.foreground": "#d7827e", "editorCursor.background": "#575279", "editorCursor.foreground": "#9893a5", "editorError.border": "#0000", "editorError.foreground": "#b4637a", "editorGhostText.foreground": "#797593", "editorGroup.border": "#0000", "editorGroup.dropBackground": "#fffaf3", "editorGroup.emptyBackground": "#0000", "editorGroup.focusedEmptyBorder": "#0000", "editorGroupHeader.noTabsBackground": "#0000", "editorGroupHeader.tabsBackground": "#0000", "editorGroupHeader.tabsBorder": "#0000", "editorGutter.addedBackground": "#56949f", "editorGutter.background": "#0000", "editorGutter.commentRangeForeground": "#797593", "editorGutter.deletedBackground": "#b4637a", "editorGutter.foldingControlForeground": "#907aa9", "editorGutter.modifiedBackground": "#d7827e", "editorHint.border": "#0000", "editorHint.foreground": "#797593", "editorHoverWidget.background": "#fffaf3", "editorHoverWidget.border": "#9893a580", "editorHoverWidget.foreground": "#797593", "editorHoverWidget.highlightForeground": "#575279", "editorHoverWidget.statusBarBackground": "#0000", "editorIndentGuide.activeBackground": "#9893a5", "editorIndentGuide.background": "#6e6a8626", "editorInfo.border": "#f2e9e1", "editorInfo.foreground": "#56949f", "editorInlayHint.background": "#f2e9e1", "editorInlayHint.foreground": "#797593", "editorInlayHint.parameterBackground": "#f2e9e1", "editorInlayHint.parameterForeground": "#907aa9", "editorInlayHint.typeBackground": "#f2e9e1", "editorInlayHint.typeForeground": "#56949f", "editorLightBulb.foreground": "#286983", "editorLightBulbAutoFix.foreground": "#d7827e", "editorLineNumber.activeForeground": "#575279", "editorLineNumber.foreground": "#797593", "editorLink.activeForeground": "#d7827e", "editorMarkerNavigation.background": "#fffaf3", "editorMarkerNavigationError.background": "#fffaf3", "editorMarkerNavigationInfo.background": "#fffaf3", "editorMarkerNavigationWarning.background": "#fffaf3", "editorOverviewRuler.addedForeground": "#56949f80", "editorOverviewRuler.background": "#faf4ed", "editorOverviewRuler.border": "#6e6a8626", "editorOverviewRuler.bracketMatchForeground": "#797593", "editorOverviewRuler.commonContentForeground": "#6e6a860d", "editorOverviewRuler.currentContentForeground": "#6e6a8614", "editorOverviewRuler.deletedForeground": "#b4637a80", "editorOverviewRuler.errorForeground": "#b4637a80", "editorOverviewRuler.findMatchForeground": "#6e6a8626", "editorOverviewRuler.incomingContentForeground": "#907aa980", "editorOverviewRuler.infoForeground": "#56949f80", "editorOverviewRuler.modifiedForeground": "#d7827e80", "editorOverviewRuler.rangeHighlightForeground": "#6e6a8626", "editorOverviewRuler.selectionHighlightForeground": "#6e6a8626", "editorOverviewRuler.warningForeground": "#ea9d3480", "editorOverviewRuler.wordHighlightForeground": "#6e6a8614", "editorOverviewRuler.wordHighlightStrongForeground": "#6e6a8626", "editorPane.background": "#0000", "editorRuler.foreground": "#6e6a8626", "editorSuggestWidget.background": "#fffaf3", "editorSuggestWidget.border": "#0000", "editorSuggestWidget.focusHighlightForeground": "#d7827e", "editorSuggestWidget.foreground": "#797593", "editorSuggestWidget.highlightForeground": "#d7827e", "editorSuggestWidget.selectedBackground": "#6e6a8614", "editorSuggestWidget.selectedForeground": "#575279", "editorSuggestWidget.selectedIconForeground": "#575279", "editorUnnecessaryCode.border": "#0000", "editorUnnecessaryCode.opacity": "#00000080", "editorWarning.border": "#0000", "editorWarning.foreground": "#ea9d34", "editorWhitespace.foreground": "#9893a5", "editorWidget.background": "#fffaf3", "editorWidget.border": "#f2e9e1", "editorWidget.foreground": "#797593", "editorWidget.resizeBorder": "#9893a5", "errorForeground": "#b4637a", "extensionBadge.remoteBackground": "#907aa9", "extensionBadge.remoteForeground": "#faf4ed", "extensionButton.prominentBackground": "#d7827e", "extensionButton.prominentForeground": "#faf4ed", "extensionButton.prominentHoverBackground": "#d7827ee6", "extensionIcon.starForeground": "#d7827e", "extensionIcon.verifiedForeground": "#907aa9", "focusBorder": "#6e6a8614", "foreground": "#575279", "gitDecoration.addedResourceForeground": "#56949f", "gitDecoration.conflictingResourceForeground": "#b4637a", "gitDecoration.deletedResourceForeground": "#797593", "gitDecoration.ignoredResourceForeground": "#9893a5", "gitDecoration.modifiedResourceForeground": "#d7827e", "gitDecoration.renamedResourceForeground": "#286983", "gitDecoration.stageDeletedResourceForeground": "#b4637a", "gitDecoration.stageModifiedResourceForeground": "#907aa9", "gitDecoration.submoduleResourceForeground": "#ea9d34", "gitDecoration.untrackedResourceForeground": "#ea9d34", "icon.foreground": "#797593", "input.background": "#f2e9e180", "input.border": "#6e6a8614", "input.foreground": "#575279", "input.placeholderForeground": "#797593", "inputOption.activeBackground": "#d7827e", "inputOption.activeBorder": "#0000", "inputOption.activeForeground": "#faf4ed", "inputValidation.errorBackground": "#fffaf3", "inputValidation.errorBorder": "#6e6a8626", "inputValidation.errorForeground": "#b4637a", "inputValidation.infoBackground": "#fffaf3", "inputValidation.infoBorder": "#6e6a8626", "inputValidation.infoForeground": "#56949f", "inputValidation.warningBackground": "#fffaf3", "inputValidation.warningBorder": "#6e6a8626", "inputValidation.warningForeground": "#56949f80", "keybindingLabel.background": "#f2e9e1", "keybindingLabel.border": "#6e6a8626", "keybindingLabel.bottomBorder": "#6e6a8626", "keybindingLabel.foreground": "#907aa9", "keybindingTable.headerBackground": "#f2e9e1", "keybindingTable.rowsBackground": "#fffaf3", "list.activeSelectionBackground": "#6e6a8614", "list.activeSelectionForeground": "#575279", "list.activeSelectionIconForeground": "#575279", "list.deemphasizedForeground": "#797593", "list.dropBackground": "#fffaf3", "list.errorForeground": "#b4637a", "list.filterMatchBackground": "#fffaf3", "list.filterMatchBorder": "#d7827e", "list.focusBackground": "#6e6a8626", "list.focusForeground": "#575279", "list.focusOutline": "#6e6a8614", "list.highlightForeground": "#d7827e", "list.hoverBackground": "#6e6a860d", "list.hoverForeground": "#575279", "list.inactiveFocusBackground": "#6e6a860d", "list.inactiveSelectionBackground": "#fffaf3", "list.inactiveSelectionForeground": "#575279", "list.inactiveSelectionIconForeground": "#797593", "list.invalidItemForeground": "#b4637a", "list.warningForeground": "#ea9d34", "listFilterWidget.background": "#fffaf3", "listFilterWidget.noMatchesOutline": "#b4637a", "listFilterWidget.outline": "#f2e9e1", "menu.background": "#fffaf3", "menu.border": "#6e6a860d", "menu.foreground": "#575279", "menu.selectionBackground": "#6e6a8614", "menu.selectionBorder": "#f2e9e1", "menu.selectionForeground": "#575279", "menu.separatorBackground": "#6e6a8626", "menubar.selectionBackground": "#6e6a8614", "menubar.selectionBorder": "#6e6a860d", "menubar.selectionForeground": "#575279", "merge.border": "#f2e9e1", "merge.commonContentBackground": "#6e6a8614", "merge.commonHeaderBackground": "#6e6a8614", "merge.currentContentBackground": "#ea9d3480", "merge.currentHeaderBackground": "#ea9d3480", "merge.incomingContentBackground": "#56949f80", "merge.incomingHeaderBackground": "#56949f80", "minimap.background": "#fffaf3", "minimap.errorHighlight": "#b4637a80", "minimap.findMatchHighlight": "#6e6a8614", "minimap.selectionHighlight": "#6e6a8614", "minimap.warningHighlight": "#ea9d3480", "minimapGutter.addedBackground": "#56949f", "minimapGutter.deletedBackground": "#b4637a", "minimapGutter.modifiedBackground": "#d7827e", "minimapSlider.activeBackground": "#6e6a8626", "minimapSlider.background": "#6e6a8614", "minimapSlider.hoverBackground": "#6e6a8614", "notificationCenter.border": "#6e6a8614", "notificationCenterHeader.background": "#fffaf3", "notificationCenterHeader.foreground": "#797593", "notificationLink.foreground": "#907aa9", "notifications.background": "#fffaf3", "notifications.border": "#6e6a8614", "notifications.foreground": "#575279", "notificationsErrorIcon.foreground": "#b4637a", "notificationsInfoIcon.foreground": "#56949f", "notificationsWarningIcon.foreground": "#ea9d34", "notificationToast.border": "#6e6a8614", "panel.background": "#fffaf3", "panel.border": "#0000", "panel.dropBorder": "#f2e9e1", "panelInput.border": "#fffaf3", "panelSection.dropBackground": "#6e6a8614", "panelSectionHeader.background": "#fffaf3", "panelSectionHeader.foreground": "#575279", "panelTitle.activeBorder": "#6e6a8626", "panelTitle.activeForeground": "#575279", "panelTitle.inactiveForeground": "#797593", "peekView.border": "#f2e9e1", "peekViewEditor.background": "#fffaf3", "peekViewEditor.matchHighlightBackground": "#6e6a8626", "peekViewResult.background": "#fffaf3", "peekViewResult.fileForeground": "#797593", "peekViewResult.lineForeground": "#797593", "peekViewResult.matchHighlightBackground": "#6e6a8626", "peekViewResult.selectionBackground": "#6e6a8614", "peekViewResult.selectionForeground": "#575279", "peekViewTitle.background": "#f2e9e1", "peekViewTitleDescription.foreground": "#797593", "pickerGroup.border": "#6e6a8626", "pickerGroup.foreground": "#907aa9", "ports.iconRunningProcessForeground": "#d7827e", "problemsErrorIcon.foreground": "#b4637a", "problemsInfoIcon.foreground": "#56949f", "problemsWarningIcon.foreground": "#ea9d34", "progressBar.background": "#d7827e", "quickInput.background": "#fffaf3", "quickInput.foreground": "#797593", "quickInputList.focusBackground": "#6e6a8614", "quickInputList.focusForeground": "#575279", "quickInputList.focusIconForeground": "#575279", "scrollbar.shadow": "#0000", "scrollbarSlider.activeBackground": "#28698380", "scrollbarSlider.background": "#6e6a8614", "scrollbarSlider.hoverBackground": "#6e6a8626", "searchEditor.findMatchBackground": "#6e6a8614", "selection.background": "#6e6a8626", "settings.focusedRowBackground": "#fffaf3", "settings.headerForeground": "#575279", "settings.modifiedItemIndicator": "#d7827e", "settings.focusedRowBorder": "#6e6a8614", "settings.rowHoverBackground": "#fffaf3", "sideBar.background": "#faf4ed", "sideBar.dropBackground": "#fffaf3", "sideBar.foreground": "#797593", "sideBarSectionHeader.background": "#0000", "sideBarSectionHeader.border": "#6e6a8614", "statusBar.background": "#faf4ed", "statusBar.debuggingBackground": "#907aa9", "statusBar.debuggingForeground": "#faf4ed", "statusBar.foreground": "#797593", "statusBar.noFolderBackground": "#faf4ed", "statusBar.noFolderForeground": "#797593", "statusBarItem.activeBackground": "#6e6a8626", "statusBarItem.hoverBackground": "#6e6a8614", "statusBarItem.prominentBackground": "#f2e9e1", "statusBarItem.prominentForeground": "#575279", "statusBarItem.prominentHoverBackground": "#6e6a8614", "statusBarItem.remoteBackground": "#faf4ed", "statusBarItem.remoteForeground": "#ea9d34", "statusBarItem.errorBackground": "#faf4ed", "statusBarItem.errorForeground": "#b4637a", "symbolIcon.arrayForeground": "#797593", "symbolIcon.classForeground": "#797593", "symbolIcon.colorForeground": "#797593", "symbolIcon.constantForeground": "#797593", "symbolIcon.constructorForeground": "#797593", "symbolIcon.enumeratorForeground": "#797593", "symbolIcon.enumeratorMemberForeground": "#797593", "symbolIcon.eventForeground": "#797593", "symbolIcon.fieldForeground": "#797593", "symbolIcon.fileForeground": "#797593", "symbolIcon.folderForeground": "#797593", "symbolIcon.functionForeground": "#797593", "symbolIcon.interfaceForeground": "#797593", "symbolIcon.keyForeground": "#797593", "symbolIcon.keywordForeground": "#797593", "symbolIcon.methodForeground": "#797593", "symbolIcon.moduleForeground": "#797593", "symbolIcon.namespaceForeground": "#797593", "symbolIcon.nullForeground": "#797593", "symbolIcon.numberForeground": "#797593", "symbolIcon.objectForeground": "#797593", "symbolIcon.operatorForeground": "#797593", "symbolIcon.packageForeground": "#797593", "symbolIcon.propertyForeground": "#797593", "symbolIcon.referenceForeground": "#797593", "symbolIcon.snippetForeground": "#797593", "symbolIcon.stringForeground": "#797593", "symbolIcon.structForeground": "#797593", "symbolIcon.textForeground": "#797593", "symbolIcon.typeParameterForeground": "#797593", "symbolIcon.unitForeground": "#797593", "symbolIcon.variableForeground": "#797593", "tab.activeBackground": "#6e6a860d", "tab.activeForeground": "#575279", "tab.activeModifiedBorder": "#56949f", "tab.border": "#0000", "tab.hoverBackground": "#6e6a8614", "tab.inactiveBackground": "#0000", "tab.inactiveForeground": "#797593", "tab.inactiveModifiedBorder": "#56949f80", "tab.lastPinnedBorder": "#9893a5", "tab.unfocusedActiveBackground": "#0000", "tab.unfocusedHoverBackground": "#0000", "tab.unfocusedInactiveBackground": "#0000", "tab.unfocusedInactiveModifiedBorder": "#56949f80", "terminal.ansiBlack": "#f2e9e1", "terminal.ansiBlue": "#56949f", "terminal.ansiBrightBlack": "#797593", "terminal.ansiBrightBlue": "#56949f", "terminal.ansiBrightCyan": "#d7827e", "terminal.ansiBrightGreen": "#286983", "terminal.ansiBrightMagenta": "#907aa9", "terminal.ansiBrightRed": "#b4637a", "terminal.ansiBrightWhite": "#575279", "terminal.ansiBrightYellow": "#ea9d34", "terminal.ansiCyan": "#d7827e", "terminal.ansiGreen": "#286983", "terminal.ansiMagenta": "#907aa9", "terminal.ansiRed": "#b4637a", "terminal.ansiWhite": "#575279", "terminal.ansiYellow": "#ea9d34", "terminal.dropBackground": "#6e6a8614", "terminal.foreground": "#575279", "terminal.selectionBackground": "#6e6a8614", "terminal.tab.activeBorder": "#575279", "terminalCursor.background": "#575279", "terminalCursor.foreground": "#9893a5", "textBlockQuote.background": "#fffaf3", "textBlockQuote.border": "#6e6a8614", "textCodeBlock.background": "#fffaf3", "textLink.activeForeground": "#907aa9e6", "textLink.foreground": "#907aa9", "textPreformat.foreground": "#ea9d34", "textSeparator.foreground": "#797593", "titleBar.activeBackground": "#faf4ed", "titleBar.activeForeground": "#797593", "titleBar.inactiveBackground": "#fffaf3", "titleBar.inactiveForeground": "#797593", "toolbar.activeBackground": "#6e6a8626", "toolbar.hoverBackground": "#6e6a8614", "tree.indentGuidesStroke": "#797593", "walkThrough.embeddedEditorBackground": "#faf4ed", "welcomePage.background": "#faf4ed", "welcomePage.buttonBackground": "#fffaf3", "welcomePage.buttonHoverBackground": "#f2e9e1", "widget.shadow": "#f2e9de4d", "window.activeBorder": "#fffaf3", "window.inactiveBorder": "#fffaf3" }, "tokenColors": [ { "scope": ["comment"], "settings": { "foreground": "#9893a5", "fontStyle": "italic" } }, { "scope": ["constant"], "settings": { "foreground": "#286983" } }, { "scope": [ "constant.numeric", "constant.language", "constant.charcter.escape" ], "settings": { "foreground": "#d7827e" } }, { "scope": ["entity.name"], "settings": { "foreground": "#d7827e" } }, { "scope": [ "entity.name.section", "entity.name.tag", "entity.name.namespace", "entity.name.type" ], "settings": { "foreground": "#56949f" } }, { "scope": ["entity.other.attribute-name", "entity.other.inherited-class"], "settings": { "foreground": "#907aa9", "fontStyle": "italic" } }, { "scope": ["invalid"], "settings": { "foreground": "#b4637a" } }, { "scope": ["invalid.deprecated"], "settings": { "foreground": "#797593" } }, { "scope": ["keyword"], "settings": { "foreground": "#286983" } }, { "scope": ["markup.inserted.diff"], "settings": { "foreground": "#56949f" } }, { "scope": ["markup.deleted.diff"], "settings": { "foreground": "#b4637a" } }, { "scope": ["meta.diff.range"], "settings": { "foreground": "#907aa9" } }, { "scope": ["meta.tag", "meta.brace"], "settings": { "foreground": "#575279" } }, { "scope": ["meta.import", "meta.export"], "settings": { "foreground": "#286983" } }, { "scope": "meta.directive.vue", "settings": { "foreground": "#907aa9", "fontStyle": "italic" } }, { "scope": "meta.property-name.css", "settings": { "foreground": "#56949f" } }, { "scope": "meta.property-value.css", "settings": { "foreground": "#ea9d34" } }, { "scope": "meta.tag.other.html", "settings": { "foreground": "#797593" } }, { "scope": ["punctuation"], "settings": { "foreground": "#797593" } }, { "scope": ["punctuation.accessor"], "settings": { "foreground": "#286983" } }, { "scope": ["punctuation.definition.string"], "settings": { "foreground": "#ea9d34" } }, { "scope": ["punctuation.definition.tag"], "settings": { "foreground": "#9893a5" } }, { "scope": ["storage.type", "storage.modifier"], "settings": { "foreground": "#286983" } }, { "scope": ["string"], "settings": { "foreground": "#ea9d34" } }, { "scope": ["support"], "settings": { "foreground": "#56949f" } }, { "scope": ["support.constant"], "settings": { "foreground": "#ea9d34" } }, { "scope": ["support.function"], "settings": { "foreground": "#b4637a", "fontStyle": "italic" } }, { "scope": ["variable"], "settings": { "foreground": "#d7827e", "fontStyle": "italic" } }, { "scope": [ "variable.other", "variable.language", "variable.function", "variable.argument" ], "settings": { "foreground": "#575279" } }, { "scope": ["variable.parameter"], "settings": { "foreground": "#907aa9" } } ] } ================================================ FILE: apps/web/src/lib/shiki/themes/rose-pine-moon.json ================================================ { "name": "rose-pine-moon", "type": "dark", "colors": { "activityBar.activeBorder": "#e0def4", "activityBar.background": "#232136", "activityBar.dropBorder": "#393552", "activityBar.foreground": "#e0def4", "activityBar.inactiveForeground": "#908caa", "activityBarBadge.background": "#ea9a97", "activityBarBadge.foreground": "#232136", "badge.background": "#ea9a97", "badge.foreground": "#232136", "banner.background": "#2a273f", "banner.foreground": "#e0def4", "banner.iconForeground": "#908caa", "breadcrumb.activeSelectionForeground": "#ea9a97", "breadcrumb.background": "#232136", "breadcrumb.focusForeground": "#908caa", "breadcrumb.foreground": "#6e6a86", "breadcrumbPicker.background": "#2a273f", "button.background": "#ea9a97", "button.foreground": "#232136", "button.hoverBackground": "#ea9a97e6", "button.secondaryBackground": "#2a273f", "button.secondaryForeground": "#e0def4", "button.secondaryHoverBackground": "#393552", "charts.blue": "#9ccfd8", "charts.foreground": "#e0def4", "charts.green": "#3e8fb0", "charts.lines": "#908caa", "charts.orange": "#ea9a97", "charts.purple": "#c4a7e7", "charts.red": "#eb6f92", "charts.yellow": "#f6c177", "checkbox.background": "#2a273f", "checkbox.border": "#817c9c26", "checkbox.foreground": "#e0def4", "debugExceptionWidget.background": "#2a273f", "debugExceptionWidget.border": "#817c9c26", "debugIcon.breakpointCurrentStackframeForeground": "#908caa", "debugIcon.breakpointDisabledForeground": "#908caa", "debugIcon.breakpointForeground": "#908caa", "debugIcon.breakpointStackframeForeground": "#908caa", "debugIcon.breakpointUnverifiedForeground": "#908caa", "debugIcon.continueForeground": "#908caa", "debugIcon.disconnectForeground": "#908caa", "debugIcon.pauseForeground": "#908caa", "debugIcon.restartForeground": "#908caa", "debugIcon.startForeground": "#908caa", "debugIcon.stepBackForeground": "#908caa", "debugIcon.stepIntoForeground": "#908caa", "debugIcon.stepOutForeground": "#908caa", "debugIcon.stepOverForeground": "#908caa", "debugIcon.stopForeground": "#eb6f92", "debugToolBar.background": "#2a273f", "debugToolBar.border": "#393552", "descriptionForeground": "#908caa", "diffEditor.border": "#393552", "diffEditor.diagonalFill": "#817c9c4d", "diffEditor.insertedTextBackground": "#9ccfd826", "diffEditor.removedTextBackground": "#eb6f9226", "diffEditorOverview.insertedForeground": "#9ccfd880", "diffEditorOverview.removedForeground": "#eb6f9280", "dropdown.background": "#2a273f", "dropdown.border": "#817c9c26", "dropdown.foreground": "#e0def4", "dropdown.listBackground": "#2a273f", "editor.background": "#232136", "editor.findMatchBackground": "#817c9c4d", "editor.findMatchHighlightBackground": "#817c9c4d", "editor.findRangeHighlightBackground": "#817c9c4d", "editor.findRangeHighlightBorder": "#0000", "editor.focusedStackFrameHighlightBackground": "#817c9c26", "editor.foldBackground": "#2a273f", "editor.foreground": "#e0def4", "editor.hoverHighlightBackground": "#0000", "editor.inactiveSelectionBackground": "#817c9c14", "editor.inlineValuesBackground": "#0000", "editor.inlineValuesForeground": "#908caa", "editor.lineHighlightBackground": "#817c9c14", "editor.lineHighlightBorder": "#0000", "editor.linkedEditingBackground": "#2a273f", "editor.rangeHighlightBackground": "#817c9c14", "editor.rangeHighlightBorder": "#0000", "editor.selectionBackground": "#817c9c26", "editor.selectionForeground": "#e0def4", "editor.selectionHighlightBackground": "#817c9c26", "editor.selectionHighlightBorder": "#0000", "editor.snippetFinalTabstopHighlightBackground": "#817c9c26", "editor.snippetFinalTabstopHighlightBorder": "#2a273f", "editor.snippetTabstopHighlightBackground": "#817c9c26", "editor.snippetTabstopHighlightBorder": "#2a273f", "editor.stackFrameHighlightBackground": "#817c9c26", "editor.symbolHighlightBackground": "#817c9c26", "editor.symbolHighlightBorder": "#0000", "editor.wordHighlightBackground": "#817c9c26", "editor.wordHighlightBorder": "#0000", "editor.wordHighlightStrongBackground": "#817c9c26", "editor.wordHighlightStrongBorder": "#817c9c26", "editorBracketHighlight.foreground1": "#eb6f9280", "editorBracketHighlight.foreground2": "#3e8fb080", "editorBracketHighlight.foreground3": "#f6c17780", "editorBracketHighlight.foreground4": "#9ccfd880", "editorBracketHighlight.foreground5": "#ea9a9780", "editorBracketHighlight.foreground6": "#c4a7e780", "editorBracketMatch.background": "#0000", "editorBracketMatch.border": "#908caa", "editorBracketPairGuide.activeBackground1": "#3e8fb0", "editorBracketPairGuide.activeBackground2": "#ea9a97", "editorBracketPairGuide.activeBackground3": "#c4a7e7", "editorBracketPairGuide.activeBackground4": "#9ccfd8", "editorBracketPairGuide.activeBackground5": "#f6c177", "editorBracketPairGuide.activeBackground6": "#eb6f92", "editorBracketPairGuide.background1": "#3e8fb080", "editorBracketPairGuide.background2": "#ea9a9780", "editorBracketPairGuide.background3": "#c4a7e780", "editorBracketPairGuide.background4": "#9ccfd880", "editorBracketPairGuide.background5": "#f6c17780", "editorBracketPairGuide.background6": "#eb6f9280", "editorCodeLens.foreground": "#ea9a97", "editorCursor.background": "#e0def4", "editorCursor.foreground": "#6e6a86", "editorError.border": "#0000", "editorError.foreground": "#eb6f92", "editorGhostText.foreground": "#908caa", "editorGroup.border": "#0000", "editorGroup.dropBackground": "#2a273f", "editorGroup.emptyBackground": "#0000", "editorGroup.focusedEmptyBorder": "#0000", "editorGroupHeader.noTabsBackground": "#0000", "editorGroupHeader.tabsBackground": "#0000", "editorGroupHeader.tabsBorder": "#0000", "editorGutter.addedBackground": "#9ccfd8", "editorGutter.background": "#0000", "editorGutter.commentRangeForeground": "#908caa", "editorGutter.deletedBackground": "#eb6f92", "editorGutter.foldingControlForeground": "#c4a7e7", "editorGutter.modifiedBackground": "#ea9a97", "editorHint.border": "#0000", "editorHint.foreground": "#908caa", "editorHoverWidget.background": "#2a273f", "editorHoverWidget.border": "#6e6a8680", "editorHoverWidget.foreground": "#908caa", "editorHoverWidget.highlightForeground": "#e0def4", "editorHoverWidget.statusBarBackground": "#0000", "editorIndentGuide.activeBackground": "#6e6a86", "editorIndentGuide.background": "#817c9c4d", "editorInfo.border": "#393552", "editorInfo.foreground": "#9ccfd8", "editorInlayHint.background": "#393552", "editorInlayHint.foreground": "#908caa", "editorInlayHint.parameterBackground": "#393552", "editorInlayHint.parameterForeground": "#c4a7e7", "editorInlayHint.typeBackground": "#393552", "editorInlayHint.typeForeground": "#9ccfd8", "editorLightBulb.foreground": "#3e8fb0", "editorLightBulbAutoFix.foreground": "#ea9a97", "editorLineNumber.activeForeground": "#e0def4", "editorLineNumber.foreground": "#908caa", "editorLink.activeForeground": "#ea9a97", "editorMarkerNavigation.background": "#2a273f", "editorMarkerNavigationError.background": "#2a273f", "editorMarkerNavigationInfo.background": "#2a273f", "editorMarkerNavigationWarning.background": "#2a273f", "editorOverviewRuler.addedForeground": "#9ccfd880", "editorOverviewRuler.background": "#232136", "editorOverviewRuler.border": "#817c9c4d", "editorOverviewRuler.bracketMatchForeground": "#908caa", "editorOverviewRuler.commonContentForeground": "#817c9c14", "editorOverviewRuler.currentContentForeground": "#817c9c26", "editorOverviewRuler.deletedForeground": "#eb6f9280", "editorOverviewRuler.errorForeground": "#eb6f9280", "editorOverviewRuler.findMatchForeground": "#817c9c4d", "editorOverviewRuler.incomingContentForeground": "#c4a7e780", "editorOverviewRuler.infoForeground": "#9ccfd880", "editorOverviewRuler.modifiedForeground": "#ea9a9780", "editorOverviewRuler.rangeHighlightForeground": "#817c9c4d", "editorOverviewRuler.selectionHighlightForeground": "#817c9c4d", "editorOverviewRuler.warningForeground": "#f6c17780", "editorOverviewRuler.wordHighlightForeground": "#817c9c26", "editorOverviewRuler.wordHighlightStrongForeground": "#817c9c4d", "editorPane.background": "#0000", "editorRuler.foreground": "#817c9c4d", "editorSuggestWidget.background": "#2a273f", "editorSuggestWidget.border": "#0000", "editorSuggestWidget.focusHighlightForeground": "#ea9a97", "editorSuggestWidget.foreground": "#908caa", "editorSuggestWidget.highlightForeground": "#ea9a97", "editorSuggestWidget.selectedBackground": "#817c9c26", "editorSuggestWidget.selectedForeground": "#e0def4", "editorSuggestWidget.selectedIconForeground": "#e0def4", "editorUnnecessaryCode.border": "#0000", "editorUnnecessaryCode.opacity": "#00000080", "editorWarning.border": "#0000", "editorWarning.foreground": "#f6c177", "editorWhitespace.foreground": "#6e6a86", "editorWidget.background": "#2a273f", "editorWidget.border": "#393552", "editorWidget.foreground": "#908caa", "editorWidget.resizeBorder": "#6e6a86", "errorForeground": "#eb6f92", "extensionBadge.remoteBackground": "#c4a7e7", "extensionBadge.remoteForeground": "#232136", "extensionButton.prominentBackground": "#ea9a97", "extensionButton.prominentForeground": "#232136", "extensionButton.prominentHoverBackground": "#ea9a97e6", "extensionIcon.starForeground": "#ea9a97", "extensionIcon.verifiedForeground": "#c4a7e7", "focusBorder": "#817c9c26", "foreground": "#e0def4", "gitDecoration.addedResourceForeground": "#9ccfd8", "gitDecoration.conflictingResourceForeground": "#eb6f92", "gitDecoration.deletedResourceForeground": "#908caa", "gitDecoration.ignoredResourceForeground": "#6e6a86", "gitDecoration.modifiedResourceForeground": "#ea9a97", "gitDecoration.renamedResourceForeground": "#3e8fb0", "gitDecoration.stageDeletedResourceForeground": "#eb6f92", "gitDecoration.stageModifiedResourceForeground": "#c4a7e7", "gitDecoration.submoduleResourceForeground": "#f6c177", "gitDecoration.untrackedResourceForeground": "#f6c177", "icon.foreground": "#908caa", "input.background": "#39355280", "input.border": "#817c9c26", "input.foreground": "#e0def4", "input.placeholderForeground": "#908caa", "inputOption.activeBackground": "#ea9a97", "inputOption.activeBorder": "#0000", "inputOption.activeForeground": "#232136", "inputValidation.errorBackground": "#2a273f", "inputValidation.errorBorder": "#817c9c4d", "inputValidation.errorForeground": "#eb6f92", "inputValidation.infoBackground": "#2a273f", "inputValidation.infoBorder": "#817c9c4d", "inputValidation.infoForeground": "#9ccfd8", "inputValidation.warningBackground": "#2a273f", "inputValidation.warningBorder": "#817c9c4d", "inputValidation.warningForeground": "#9ccfd880", "keybindingLabel.background": "#393552", "keybindingLabel.border": "#817c9c4d", "keybindingLabel.bottomBorder": "#817c9c4d", "keybindingLabel.foreground": "#c4a7e7", "keybindingTable.headerBackground": "#393552", "keybindingTable.rowsBackground": "#2a273f", "list.activeSelectionBackground": "#817c9c26", "list.activeSelectionForeground": "#e0def4", "list.activeSelectionIconForeground": "#e0def4", "list.deemphasizedForeground": "#908caa", "list.dropBackground": "#2a273f", "list.errorForeground": "#eb6f92", "list.filterMatchBackground": "#2a273f", "list.filterMatchBorder": "#ea9a97", "list.focusBackground": "#817c9c4d", "list.focusForeground": "#e0def4", "list.focusOutline": "#817c9c26", "list.highlightForeground": "#ea9a97", "list.hoverBackground": "#817c9c14", "list.hoverForeground": "#e0def4", "list.inactiveFocusBackground": "#817c9c14", "list.inactiveSelectionBackground": "#2a273f", "list.inactiveSelectionForeground": "#e0def4", "list.inactiveSelectionIconForeground": "#908caa", "list.invalidItemForeground": "#eb6f92", "list.warningForeground": "#f6c177", "listFilterWidget.background": "#2a273f", "listFilterWidget.noMatchesOutline": "#eb6f92", "listFilterWidget.outline": "#393552", "menu.background": "#2a273f", "menu.border": "#817c9c14", "menu.foreground": "#e0def4", "menu.selectionBackground": "#817c9c26", "menu.selectionBorder": "#393552", "menu.selectionForeground": "#e0def4", "menu.separatorBackground": "#817c9c4d", "menubar.selectionBackground": "#817c9c26", "menubar.selectionBorder": "#817c9c14", "menubar.selectionForeground": "#e0def4", "merge.border": "#393552", "merge.commonContentBackground": "#817c9c26", "merge.commonHeaderBackground": "#817c9c26", "merge.currentContentBackground": "#f6c17780", "merge.currentHeaderBackground": "#f6c17780", "merge.incomingContentBackground": "#9ccfd880", "merge.incomingHeaderBackground": "#9ccfd880", "minimap.background": "#2a273f", "minimap.errorHighlight": "#eb6f9280", "minimap.findMatchHighlight": "#817c9c26", "minimap.selectionHighlight": "#817c9c26", "minimap.warningHighlight": "#f6c17780", "minimapGutter.addedBackground": "#9ccfd8", "minimapGutter.deletedBackground": "#eb6f92", "minimapGutter.modifiedBackground": "#ea9a97", "minimapSlider.activeBackground": "#817c9c4d", "minimapSlider.background": "#817c9c26", "minimapSlider.hoverBackground": "#817c9c26", "notificationCenter.border": "#817c9c26", "notificationCenterHeader.background": "#2a273f", "notificationCenterHeader.foreground": "#908caa", "notificationLink.foreground": "#c4a7e7", "notifications.background": "#2a273f", "notifications.border": "#817c9c26", "notifications.foreground": "#e0def4", "notificationsErrorIcon.foreground": "#eb6f92", "notificationsInfoIcon.foreground": "#9ccfd8", "notificationsWarningIcon.foreground": "#f6c177", "notificationToast.border": "#817c9c26", "panel.background": "#2a273f", "panel.border": "#0000", "panel.dropBorder": "#393552", "panelInput.border": "#2a273f", "panelSection.dropBackground": "#817c9c26", "panelSectionHeader.background": "#2a273f", "panelSectionHeader.foreground": "#e0def4", "panelTitle.activeBorder": "#817c9c4d", "panelTitle.activeForeground": "#e0def4", "panelTitle.inactiveForeground": "#908caa", "peekView.border": "#393552", "peekViewEditor.background": "#2a273f", "peekViewEditor.matchHighlightBackground": "#817c9c4d", "peekViewResult.background": "#2a273f", "peekViewResult.fileForeground": "#908caa", "peekViewResult.lineForeground": "#908caa", "peekViewResult.matchHighlightBackground": "#817c9c4d", "peekViewResult.selectionBackground": "#817c9c26", "peekViewResult.selectionForeground": "#e0def4", "peekViewTitle.background": "#393552", "peekViewTitleDescription.foreground": "#908caa", "pickerGroup.border": "#817c9c4d", "pickerGroup.foreground": "#c4a7e7", "ports.iconRunningProcessForeground": "#ea9a97", "problemsErrorIcon.foreground": "#eb6f92", "problemsInfoIcon.foreground": "#9ccfd8", "problemsWarningIcon.foreground": "#f6c177", "progressBar.background": "#ea9a97", "quickInput.background": "#2a273f", "quickInput.foreground": "#908caa", "quickInputList.focusBackground": "#817c9c26", "quickInputList.focusForeground": "#e0def4", "quickInputList.focusIconForeground": "#e0def4", "scrollbar.shadow": "#0000", "scrollbarSlider.activeBackground": "#3e8fb080", "scrollbarSlider.background": "#817c9c26", "scrollbarSlider.hoverBackground": "#817c9c4d", "searchEditor.findMatchBackground": "#817c9c26", "selection.background": "#817c9c4d", "settings.focusedRowBackground": "#2a273f", "settings.headerForeground": "#e0def4", "settings.modifiedItemIndicator": "#ea9a97", "settings.focusedRowBorder": "#817c9c26", "settings.rowHoverBackground": "#2a273f", "sideBar.background": "#232136", "sideBar.dropBackground": "#2a273f", "sideBar.foreground": "#908caa", "sideBarSectionHeader.background": "#0000", "sideBarSectionHeader.border": "#817c9c26", "statusBar.background": "#232136", "statusBar.debuggingBackground": "#c4a7e7", "statusBar.debuggingForeground": "#232136", "statusBar.foreground": "#908caa", "statusBar.noFolderBackground": "#232136", "statusBar.noFolderForeground": "#908caa", "statusBarItem.activeBackground": "#817c9c4d", "statusBarItem.hoverBackground": "#817c9c26", "statusBarItem.prominentBackground": "#393552", "statusBarItem.prominentForeground": "#e0def4", "statusBarItem.prominentHoverBackground": "#817c9c26", "statusBarItem.remoteBackground": "#232136", "statusBarItem.remoteForeground": "#f6c177", "statusBarItem.errorBackground": "#232136", "statusBarItem.errorForeground": "#eb6f92", "symbolIcon.arrayForeground": "#908caa", "symbolIcon.classForeground": "#908caa", "symbolIcon.colorForeground": "#908caa", "symbolIcon.constantForeground": "#908caa", "symbolIcon.constructorForeground": "#908caa", "symbolIcon.enumeratorForeground": "#908caa", "symbolIcon.enumeratorMemberForeground": "#908caa", "symbolIcon.eventForeground": "#908caa", "symbolIcon.fieldForeground": "#908caa", "symbolIcon.fileForeground": "#908caa", "symbolIcon.folderForeground": "#908caa", "symbolIcon.functionForeground": "#908caa", "symbolIcon.interfaceForeground": "#908caa", "symbolIcon.keyForeground": "#908caa", "symbolIcon.keywordForeground": "#908caa", "symbolIcon.methodForeground": "#908caa", "symbolIcon.moduleForeground": "#908caa", "symbolIcon.namespaceForeground": "#908caa", "symbolIcon.nullForeground": "#908caa", "symbolIcon.numberForeground": "#908caa", "symbolIcon.objectForeground": "#908caa", "symbolIcon.operatorForeground": "#908caa", "symbolIcon.packageForeground": "#908caa", "symbolIcon.propertyForeground": "#908caa", "symbolIcon.referenceForeground": "#908caa", "symbolIcon.snippetForeground": "#908caa", "symbolIcon.stringForeground": "#908caa", "symbolIcon.structForeground": "#908caa", "symbolIcon.textForeground": "#908caa", "symbolIcon.typeParameterForeground": "#908caa", "symbolIcon.unitForeground": "#908caa", "symbolIcon.variableForeground": "#908caa", "tab.activeBackground": "#817c9c14", "tab.activeForeground": "#e0def4", "tab.activeModifiedBorder": "#9ccfd8", "tab.border": "#0000", "tab.hoverBackground": "#817c9c26", "tab.inactiveBackground": "#0000", "tab.inactiveForeground": "#908caa", "tab.inactiveModifiedBorder": "#9ccfd880", "tab.lastPinnedBorder": "#6e6a86", "tab.unfocusedActiveBackground": "#0000", "tab.unfocusedHoverBackground": "#0000", "tab.unfocusedInactiveBackground": "#0000", "tab.unfocusedInactiveModifiedBorder": "#9ccfd880", "terminal.ansiBlack": "#393552", "terminal.ansiBlue": "#9ccfd8", "terminal.ansiBrightBlack": "#908caa", "terminal.ansiBrightBlue": "#9ccfd8", "terminal.ansiBrightCyan": "#ea9a97", "terminal.ansiBrightGreen": "#3e8fb0", "terminal.ansiBrightMagenta": "#c4a7e7", "terminal.ansiBrightRed": "#eb6f92", "terminal.ansiBrightWhite": "#e0def4", "terminal.ansiBrightYellow": "#f6c177", "terminal.ansiCyan": "#ea9a97", "terminal.ansiGreen": "#3e8fb0", "terminal.ansiMagenta": "#c4a7e7", "terminal.ansiRed": "#eb6f92", "terminal.ansiWhite": "#e0def4", "terminal.ansiYellow": "#f6c177", "terminal.dropBackground": "#817c9c26", "terminal.foreground": "#e0def4", "terminal.selectionBackground": "#817c9c26", "terminal.tab.activeBorder": "#e0def4", "terminalCursor.background": "#e0def4", "terminalCursor.foreground": "#6e6a86", "textBlockQuote.background": "#2a273f", "textBlockQuote.border": "#817c9c26", "textCodeBlock.background": "#2a273f", "textLink.activeForeground": "#c4a7e7e6", "textLink.foreground": "#c4a7e7", "textPreformat.foreground": "#f6c177", "textSeparator.foreground": "#908caa", "titleBar.activeBackground": "#232136", "titleBar.activeForeground": "#908caa", "titleBar.inactiveBackground": "#2a273f", "titleBar.inactiveForeground": "#908caa", "toolbar.activeBackground": "#817c9c4d", "toolbar.hoverBackground": "#817c9c26", "tree.indentGuidesStroke": "#908caa", "walkThrough.embeddedEditorBackground": "#232136", "welcomePage.background": "#232136", "welcomePage.buttonBackground": "#2a273f", "welcomePage.buttonHoverBackground": "#393552", "widget.shadow": "#1917244d", "window.activeBorder": "#2a273f", "window.inactiveBorder": "#2a273f" }, "tokenColors": [ { "scope": ["comment"], "settings": { "foreground": "#6e6a86", "fontStyle": "italic" } }, { "scope": ["constant"], "settings": { "foreground": "#3e8fb0" } }, { "scope": [ "constant.numeric", "constant.language", "constant.charcter.escape" ], "settings": { "foreground": "#ea9a97" } }, { "scope": ["entity.name"], "settings": { "foreground": "#ea9a97" } }, { "scope": [ "entity.name.section", "entity.name.tag", "entity.name.namespace", "entity.name.type" ], "settings": { "foreground": "#9ccfd8" } }, { "scope": ["entity.other.attribute-name", "entity.other.inherited-class"], "settings": { "foreground": "#c4a7e7", "fontStyle": "italic" } }, { "scope": ["invalid"], "settings": { "foreground": "#eb6f92" } }, { "scope": ["invalid.deprecated"], "settings": { "foreground": "#908caa" } }, { "scope": ["keyword"], "settings": { "foreground": "#3e8fb0" } }, { "scope": ["markup.inserted.diff"], "settings": { "foreground": "#9ccfd8" } }, { "scope": ["markup.deleted.diff"], "settings": { "foreground": "#eb6f92" } }, { "scope": ["meta.diff.range"], "settings": { "foreground": "#c4a7e7" } }, { "scope": ["meta.tag", "meta.brace"], "settings": { "foreground": "#e0def4" } }, { "scope": ["meta.import", "meta.export"], "settings": { "foreground": "#3e8fb0" } }, { "scope": "meta.directive.vue", "settings": { "foreground": "#c4a7e7", "fontStyle": "italic" } }, { "scope": "meta.property-name.css", "settings": { "foreground": "#9ccfd8" } }, { "scope": "meta.property-value.css", "settings": { "foreground": "#f6c177" } }, { "scope": "meta.tag.other.html", "settings": { "foreground": "#908caa" } }, { "scope": ["punctuation"], "settings": { "foreground": "#908caa" } }, { "scope": ["punctuation.accessor"], "settings": { "foreground": "#3e8fb0" } }, { "scope": ["punctuation.definition.string"], "settings": { "foreground": "#f6c177" } }, { "scope": ["punctuation.definition.tag"], "settings": { "foreground": "#6e6a86" } }, { "scope": ["storage.type", "storage.modifier"], "settings": { "foreground": "#3e8fb0" } }, { "scope": ["string"], "settings": { "foreground": "#f6c177" } }, { "scope": ["support"], "settings": { "foreground": "#9ccfd8" } }, { "scope": ["support.constant"], "settings": { "foreground": "#f6c177" } }, { "scope": ["support.function"], "settings": { "foreground": "#eb6f92", "fontStyle": "italic" } }, { "scope": ["variable"], "settings": { "foreground": "#ea9a97", "fontStyle": "italic" } }, { "scope": [ "variable.other", "variable.language", "variable.function", "variable.argument" ], "settings": { "foreground": "#e0def4" } }, { "scope": ["variable.parameter"], "settings": { "foreground": "#c4a7e7" } } ] } ================================================ FILE: apps/web/src/lib/shiki/themes/rose-pine.json ================================================ { "name": "rose-pine", "type": "dark", "colors": { "activityBar.activeBorder": "#e0def4", "activityBar.background": "#191724", "activityBar.dropBorder": "#26233a", "activityBar.foreground": "#e0def4", "activityBar.inactiveForeground": "#908caa", "activityBarBadge.background": "#ebbcba", "activityBarBadge.foreground": "#191724", "badge.background": "#ebbcba", "badge.foreground": "#191724", "banner.background": "#1f1d2e", "banner.foreground": "#e0def4", "banner.iconForeground": "#908caa", "breadcrumb.activeSelectionForeground": "#ebbcba", "breadcrumb.background": "#191724", "breadcrumb.focusForeground": "#908caa", "breadcrumb.foreground": "#6e6a86", "breadcrumbPicker.background": "#1f1d2e", "button.background": "#ebbcba", "button.foreground": "#191724", "button.hoverBackground": "#ebbcbae6", "button.secondaryBackground": "#1f1d2e", "button.secondaryForeground": "#e0def4", "button.secondaryHoverBackground": "#26233a", "charts.blue": "#9ccfd8", "charts.foreground": "#e0def4", "charts.green": "#31748f", "charts.lines": "#908caa", "charts.orange": "#ebbcba", "charts.purple": "#c4a7e7", "charts.red": "#eb6f92", "charts.yellow": "#f6c177", "checkbox.background": "#1f1d2e", "checkbox.border": "#6e6a8633", "checkbox.foreground": "#e0def4", "debugExceptionWidget.background": "#1f1d2e", "debugExceptionWidget.border": "#6e6a8633", "debugIcon.breakpointCurrentStackframeForeground": "#908caa", "debugIcon.breakpointDisabledForeground": "#908caa", "debugIcon.breakpointForeground": "#908caa", "debugIcon.breakpointStackframeForeground": "#908caa", "debugIcon.breakpointUnverifiedForeground": "#908caa", "debugIcon.continueForeground": "#908caa", "debugIcon.disconnectForeground": "#908caa", "debugIcon.pauseForeground": "#908caa", "debugIcon.restartForeground": "#908caa", "debugIcon.startForeground": "#908caa", "debugIcon.stepBackForeground": "#908caa", "debugIcon.stepIntoForeground": "#908caa", "debugIcon.stepOutForeground": "#908caa", "debugIcon.stepOverForeground": "#908caa", "debugIcon.stopForeground": "#eb6f92", "debugToolBar.background": "#1f1d2e", "debugToolBar.border": "#26233a", "descriptionForeground": "#908caa", "diffEditor.border": "#26233a", "diffEditor.diagonalFill": "#6e6a8666", "diffEditor.insertedTextBackground": "#9ccfd826", "diffEditor.removedTextBackground": "#eb6f9226", "diffEditorOverview.insertedForeground": "#9ccfd880", "diffEditorOverview.removedForeground": "#eb6f9280", "dropdown.background": "#1f1d2e", "dropdown.border": "#6e6a8633", "dropdown.foreground": "#e0def4", "dropdown.listBackground": "#1f1d2e", "editor.background": "#191724", "editor.findMatchBackground": "#6e6a8666", "editor.findMatchHighlightBackground": "#6e6a8666", "editor.findRangeHighlightBackground": "#6e6a8666", "editor.findRangeHighlightBorder": "#0000", "editor.focusedStackFrameHighlightBackground": "#6e6a8633", "editor.foldBackground": "#1f1d2e", "editor.foreground": "#e0def4", "editor.hoverHighlightBackground": "#0000", "editor.inactiveSelectionBackground": "#6e6a861a", "editor.inlineValuesBackground": "#0000", "editor.inlineValuesForeground": "#908caa", "editor.lineHighlightBackground": "#6e6a861a", "editor.lineHighlightBorder": "#0000", "editor.linkedEditingBackground": "#1f1d2e", "editor.rangeHighlightBackground": "#6e6a861a", "editor.rangeHighlightBorder": "#0000", "editor.selectionBackground": "#6e6a8633", "editor.selectionForeground": "#e0def4", "editor.selectionHighlightBackground": "#6e6a8633", "editor.selectionHighlightBorder": "#0000", "editor.snippetFinalTabstopHighlightBackground": "#6e6a8633", "editor.snippetFinalTabstopHighlightBorder": "#1f1d2e", "editor.snippetTabstopHighlightBackground": "#6e6a8633", "editor.snippetTabstopHighlightBorder": "#1f1d2e", "editor.stackFrameHighlightBackground": "#6e6a8633", "editor.symbolHighlightBackground": "#6e6a8633", "editor.symbolHighlightBorder": "#0000", "editor.wordHighlightBackground": "#6e6a8633", "editor.wordHighlightBorder": "#0000", "editor.wordHighlightStrongBackground": "#6e6a8633", "editor.wordHighlightStrongBorder": "#6e6a8633", "editorBracketHighlight.foreground1": "#eb6f9280", "editorBracketHighlight.foreground2": "#31748f80", "editorBracketHighlight.foreground3": "#f6c17780", "editorBracketHighlight.foreground4": "#9ccfd880", "editorBracketHighlight.foreground5": "#ebbcba80", "editorBracketHighlight.foreground6": "#c4a7e780", "editorBracketMatch.background": "#0000", "editorBracketMatch.border": "#908caa", "editorBracketPairGuide.activeBackground1": "#31748f", "editorBracketPairGuide.activeBackground2": "#ebbcba", "editorBracketPairGuide.activeBackground3": "#c4a7e7", "editorBracketPairGuide.activeBackground4": "#9ccfd8", "editorBracketPairGuide.activeBackground5": "#f6c177", "editorBracketPairGuide.activeBackground6": "#eb6f92", "editorBracketPairGuide.background1": "#31748f80", "editorBracketPairGuide.background2": "#ebbcba80", "editorBracketPairGuide.background3": "#c4a7e780", "editorBracketPairGuide.background4": "#9ccfd880", "editorBracketPairGuide.background5": "#f6c17780", "editorBracketPairGuide.background6": "#eb6f9280", "editorCodeLens.foreground": "#ebbcba", "editorCursor.background": "#e0def4", "editorCursor.foreground": "#6e6a86", "editorError.border": "#0000", "editorError.foreground": "#eb6f92", "editorGhostText.foreground": "#908caa", "editorGroup.border": "#0000", "editorGroup.dropBackground": "#1f1d2e", "editorGroup.emptyBackground": "#0000", "editorGroup.focusedEmptyBorder": "#0000", "editorGroupHeader.noTabsBackground": "#0000", "editorGroupHeader.tabsBackground": "#0000", "editorGroupHeader.tabsBorder": "#0000", "editorGutter.addedBackground": "#9ccfd8", "editorGutter.background": "#0000", "editorGutter.commentRangeForeground": "#908caa", "editorGutter.deletedBackground": "#eb6f92", "editorGutter.foldingControlForeground": "#c4a7e7", "editorGutter.modifiedBackground": "#ebbcba", "editorHint.border": "#0000", "editorHint.foreground": "#908caa", "editorHoverWidget.background": "#1f1d2e", "editorHoverWidget.border": "#6e6a8680", "editorHoverWidget.foreground": "#908caa", "editorHoverWidget.highlightForeground": "#e0def4", "editorHoverWidget.statusBarBackground": "#0000", "editorIndentGuide.activeBackground": "#6e6a86", "editorIndentGuide.background": "#6e6a8666", "editorInfo.border": "#26233a", "editorInfo.foreground": "#9ccfd8", "editorInlayHint.background": "#26233a", "editorInlayHint.foreground": "#908caa", "editorInlayHint.parameterBackground": "#26233a", "editorInlayHint.parameterForeground": "#c4a7e7", "editorInlayHint.typeBackground": "#26233a", "editorInlayHint.typeForeground": "#9ccfd8", "editorLightBulb.foreground": "#31748f", "editorLightBulbAutoFix.foreground": "#ebbcba", "editorLineNumber.activeForeground": "#e0def4", "editorLineNumber.foreground": "#908caa", "editorLink.activeForeground": "#ebbcba", "editorMarkerNavigation.background": "#1f1d2e", "editorMarkerNavigationError.background": "#1f1d2e", "editorMarkerNavigationInfo.background": "#1f1d2e", "editorMarkerNavigationWarning.background": "#1f1d2e", "editorOverviewRuler.addedForeground": "#9ccfd880", "editorOverviewRuler.background": "#191724", "editorOverviewRuler.border": "#6e6a8666", "editorOverviewRuler.bracketMatchForeground": "#908caa", "editorOverviewRuler.commonContentForeground": "#6e6a861a", "editorOverviewRuler.currentContentForeground": "#6e6a8633", "editorOverviewRuler.deletedForeground": "#eb6f9280", "editorOverviewRuler.errorForeground": "#eb6f9280", "editorOverviewRuler.findMatchForeground": "#6e6a8666", "editorOverviewRuler.incomingContentForeground": "#c4a7e780", "editorOverviewRuler.infoForeground": "#9ccfd880", "editorOverviewRuler.modifiedForeground": "#ebbcba80", "editorOverviewRuler.rangeHighlightForeground": "#6e6a8666", "editorOverviewRuler.selectionHighlightForeground": "#6e6a8666", "editorOverviewRuler.warningForeground": "#f6c17780", "editorOverviewRuler.wordHighlightForeground": "#6e6a8633", "editorOverviewRuler.wordHighlightStrongForeground": "#6e6a8666", "editorPane.background": "#0000", "editorRuler.foreground": "#6e6a8666", "editorSuggestWidget.background": "#1f1d2e", "editorSuggestWidget.border": "#0000", "editorSuggestWidget.focusHighlightForeground": "#ebbcba", "editorSuggestWidget.foreground": "#908caa", "editorSuggestWidget.highlightForeground": "#ebbcba", "editorSuggestWidget.selectedBackground": "#6e6a8633", "editorSuggestWidget.selectedForeground": "#e0def4", "editorSuggestWidget.selectedIconForeground": "#e0def4", "editorUnnecessaryCode.border": "#0000", "editorUnnecessaryCode.opacity": "#00000080", "editorWarning.border": "#0000", "editorWarning.foreground": "#f6c177", "editorWhitespace.foreground": "#6e6a86", "editorWidget.background": "#1f1d2e", "editorWidget.border": "#26233a", "editorWidget.foreground": "#908caa", "editorWidget.resizeBorder": "#6e6a86", "errorForeground": "#eb6f92", "extensionBadge.remoteBackground": "#c4a7e7", "extensionBadge.remoteForeground": "#191724", "extensionButton.prominentBackground": "#ebbcba", "extensionButton.prominentForeground": "#191724", "extensionButton.prominentHoverBackground": "#ebbcbae6", "extensionIcon.starForeground": "#ebbcba", "extensionIcon.verifiedForeground": "#c4a7e7", "focusBorder": "#6e6a8633", "foreground": "#e0def4", "gitDecoration.addedResourceForeground": "#9ccfd8", "gitDecoration.conflictingResourceForeground": "#eb6f92", "gitDecoration.deletedResourceForeground": "#908caa", "gitDecoration.ignoredResourceForeground": "#6e6a86", "gitDecoration.modifiedResourceForeground": "#ebbcba", "gitDecoration.renamedResourceForeground": "#31748f", "gitDecoration.stageDeletedResourceForeground": "#eb6f92", "gitDecoration.stageModifiedResourceForeground": "#c4a7e7", "gitDecoration.submoduleResourceForeground": "#f6c177", "gitDecoration.untrackedResourceForeground": "#f6c177", "icon.foreground": "#908caa", "input.background": "#26233a80", "input.border": "#6e6a8633", "input.foreground": "#e0def4", "input.placeholderForeground": "#908caa", "inputOption.activeBackground": "#ebbcba", "inputOption.activeBorder": "#0000", "inputOption.activeForeground": "#191724", "inputValidation.errorBackground": "#1f1d2e", "inputValidation.errorBorder": "#6e6a8666", "inputValidation.errorForeground": "#eb6f92", "inputValidation.infoBackground": "#1f1d2e", "inputValidation.infoBorder": "#6e6a8666", "inputValidation.infoForeground": "#9ccfd8", "inputValidation.warningBackground": "#1f1d2e", "inputValidation.warningBorder": "#6e6a8666", "inputValidation.warningForeground": "#9ccfd880", "keybindingLabel.background": "#26233a", "keybindingLabel.border": "#6e6a8666", "keybindingLabel.bottomBorder": "#6e6a8666", "keybindingLabel.foreground": "#c4a7e7", "keybindingTable.headerBackground": "#26233a", "keybindingTable.rowsBackground": "#1f1d2e", "list.activeSelectionBackground": "#6e6a8633", "list.activeSelectionForeground": "#e0def4", "list.activeSelectionIconForeground": "#e0def4", "list.deemphasizedForeground": "#908caa", "list.dropBackground": "#1f1d2e", "list.errorForeground": "#eb6f92", "list.filterMatchBackground": "#1f1d2e", "list.filterMatchBorder": "#ebbcba", "list.focusBackground": "#6e6a8666", "list.focusForeground": "#e0def4", "list.focusOutline": "#6e6a8633", "list.highlightForeground": "#ebbcba", "list.hoverBackground": "#6e6a861a", "list.hoverForeground": "#e0def4", "list.inactiveFocusBackground": "#6e6a861a", "list.inactiveSelectionBackground": "#1f1d2e", "list.inactiveSelectionForeground": "#e0def4", "list.inactiveSelectionIconForeground": "#908caa", "list.invalidItemForeground": "#eb6f92", "list.warningForeground": "#f6c177", "listFilterWidget.background": "#1f1d2e", "listFilterWidget.noMatchesOutline": "#eb6f92", "listFilterWidget.outline": "#26233a", "menu.background": "#1f1d2e", "menu.border": "#6e6a861a", "menu.foreground": "#e0def4", "menu.selectionBackground": "#6e6a8633", "menu.selectionBorder": "#26233a", "menu.selectionForeground": "#e0def4", "menu.separatorBackground": "#6e6a8666", "menubar.selectionBackground": "#6e6a8633", "menubar.selectionBorder": "#6e6a861a", "menubar.selectionForeground": "#e0def4", "merge.border": "#26233a", "merge.commonContentBackground": "#6e6a8633", "merge.commonHeaderBackground": "#6e6a8633", "merge.currentContentBackground": "#f6c17780", "merge.currentHeaderBackground": "#f6c17780", "merge.incomingContentBackground": "#9ccfd880", "merge.incomingHeaderBackground": "#9ccfd880", "minimap.background": "#1f1d2e", "minimap.errorHighlight": "#eb6f9280", "minimap.findMatchHighlight": "#6e6a8633", "minimap.selectionHighlight": "#6e6a8633", "minimap.warningHighlight": "#f6c17780", "minimapGutter.addedBackground": "#9ccfd8", "minimapGutter.deletedBackground": "#eb6f92", "minimapGutter.modifiedBackground": "#ebbcba", "minimapSlider.activeBackground": "#6e6a8666", "minimapSlider.background": "#6e6a8633", "minimapSlider.hoverBackground": "#6e6a8633", "notificationCenter.border": "#6e6a8633", "notificationCenterHeader.background": "#1f1d2e", "notificationCenterHeader.foreground": "#908caa", "notificationLink.foreground": "#c4a7e7", "notifications.background": "#1f1d2e", "notifications.border": "#6e6a8633", "notifications.foreground": "#e0def4", "notificationsErrorIcon.foreground": "#eb6f92", "notificationsInfoIcon.foreground": "#9ccfd8", "notificationsWarningIcon.foreground": "#f6c177", "notificationToast.border": "#6e6a8633", "panel.background": "#1f1d2e", "panel.border": "#0000", "panel.dropBorder": "#26233a", "panelInput.border": "#1f1d2e", "panelSection.dropBackground": "#6e6a8633", "panelSectionHeader.background": "#1f1d2e", "panelSectionHeader.foreground": "#e0def4", "panelTitle.activeBorder": "#6e6a8666", "panelTitle.activeForeground": "#e0def4", "panelTitle.inactiveForeground": "#908caa", "peekView.border": "#26233a", "peekViewEditor.background": "#1f1d2e", "peekViewEditor.matchHighlightBackground": "#6e6a8666", "peekViewResult.background": "#1f1d2e", "peekViewResult.fileForeground": "#908caa", "peekViewResult.lineForeground": "#908caa", "peekViewResult.matchHighlightBackground": "#6e6a8666", "peekViewResult.selectionBackground": "#6e6a8633", "peekViewResult.selectionForeground": "#e0def4", "peekViewTitle.background": "#26233a", "peekViewTitleDescription.foreground": "#908caa", "pickerGroup.border": "#6e6a8666", "pickerGroup.foreground": "#c4a7e7", "ports.iconRunningProcessForeground": "#ebbcba", "problemsErrorIcon.foreground": "#eb6f92", "problemsInfoIcon.foreground": "#9ccfd8", "problemsWarningIcon.foreground": "#f6c177", "progressBar.background": "#ebbcba", "quickInput.background": "#1f1d2e", "quickInput.foreground": "#908caa", "quickInputList.focusBackground": "#6e6a8633", "quickInputList.focusForeground": "#e0def4", "quickInputList.focusIconForeground": "#e0def4", "scrollbar.shadow": "#0000", "scrollbarSlider.activeBackground": "#31748f80", "scrollbarSlider.background": "#6e6a8633", "scrollbarSlider.hoverBackground": "#6e6a8666", "searchEditor.findMatchBackground": "#6e6a8633", "selection.background": "#6e6a8666", "settings.focusedRowBackground": "#1f1d2e", "settings.headerForeground": "#e0def4", "settings.modifiedItemIndicator": "#ebbcba", "settings.focusedRowBorder": "#6e6a8633", "settings.rowHoverBackground": "#1f1d2e", "sideBar.background": "#191724", "sideBar.dropBackground": "#1f1d2e", "sideBar.foreground": "#908caa", "sideBarSectionHeader.background": "#0000", "sideBarSectionHeader.border": "#6e6a8633", "statusBar.background": "#191724", "statusBar.debuggingBackground": "#c4a7e7", "statusBar.debuggingForeground": "#191724", "statusBar.foreground": "#908caa", "statusBar.noFolderBackground": "#191724", "statusBar.noFolderForeground": "#908caa", "statusBarItem.activeBackground": "#6e6a8666", "statusBarItem.hoverBackground": "#6e6a8633", "statusBarItem.prominentBackground": "#26233a", "statusBarItem.prominentForeground": "#e0def4", "statusBarItem.prominentHoverBackground": "#6e6a8633", "statusBarItem.remoteBackground": "#191724", "statusBarItem.remoteForeground": "#f6c177", "statusBarItem.errorBackground": "#191724", "statusBarItem.errorForeground": "#eb6f92", "symbolIcon.arrayForeground": "#908caa", "symbolIcon.classForeground": "#908caa", "symbolIcon.colorForeground": "#908caa", "symbolIcon.constantForeground": "#908caa", "symbolIcon.constructorForeground": "#908caa", "symbolIcon.enumeratorForeground": "#908caa", "symbolIcon.enumeratorMemberForeground": "#908caa", "symbolIcon.eventForeground": "#908caa", "symbolIcon.fieldForeground": "#908caa", "symbolIcon.fileForeground": "#908caa", "symbolIcon.folderForeground": "#908caa", "symbolIcon.functionForeground": "#908caa", "symbolIcon.interfaceForeground": "#908caa", "symbolIcon.keyForeground": "#908caa", "symbolIcon.keywordForeground": "#908caa", "symbolIcon.methodForeground": "#908caa", "symbolIcon.moduleForeground": "#908caa", "symbolIcon.namespaceForeground": "#908caa", "symbolIcon.nullForeground": "#908caa", "symbolIcon.numberForeground": "#908caa", "symbolIcon.objectForeground": "#908caa", "symbolIcon.operatorForeground": "#908caa", "symbolIcon.packageForeground": "#908caa", "symbolIcon.propertyForeground": "#908caa", "symbolIcon.referenceForeground": "#908caa", "symbolIcon.snippetForeground": "#908caa", "symbolIcon.stringForeground": "#908caa", "symbolIcon.structForeground": "#908caa", "symbolIcon.textForeground": "#908caa", "symbolIcon.typeParameterForeground": "#908caa", "symbolIcon.unitForeground": "#908caa", "symbolIcon.variableForeground": "#908caa", "tab.activeBackground": "#6e6a861a", "tab.activeForeground": "#e0def4", "tab.activeModifiedBorder": "#9ccfd8", "tab.border": "#0000", "tab.hoverBackground": "#6e6a8633", "tab.inactiveBackground": "#0000", "tab.inactiveForeground": "#908caa", "tab.inactiveModifiedBorder": "#9ccfd880", "tab.lastPinnedBorder": "#6e6a86", "tab.unfocusedActiveBackground": "#0000", "tab.unfocusedHoverBackground": "#0000", "tab.unfocusedInactiveBackground": "#0000", "tab.unfocusedInactiveModifiedBorder": "#9ccfd880", "terminal.ansiBlack": "#26233a", "terminal.ansiBlue": "#9ccfd8", "terminal.ansiBrightBlack": "#908caa", "terminal.ansiBrightBlue": "#9ccfd8", "terminal.ansiBrightCyan": "#ebbcba", "terminal.ansiBrightGreen": "#31748f", "terminal.ansiBrightMagenta": "#c4a7e7", "terminal.ansiBrightRed": "#eb6f92", "terminal.ansiBrightWhite": "#e0def4", "terminal.ansiBrightYellow": "#f6c177", "terminal.ansiCyan": "#ebbcba", "terminal.ansiGreen": "#31748f", "terminal.ansiMagenta": "#c4a7e7", "terminal.ansiRed": "#eb6f92", "terminal.ansiWhite": "#e0def4", "terminal.ansiYellow": "#f6c177", "terminal.dropBackground": "#6e6a8633", "terminal.foreground": "#e0def4", "terminal.selectionBackground": "#6e6a8633", "terminal.tab.activeBorder": "#e0def4", "terminalCursor.background": "#e0def4", "terminalCursor.foreground": "#6e6a86", "textBlockQuote.background": "#1f1d2e", "textBlockQuote.border": "#6e6a8633", "textCodeBlock.background": "#1f1d2e", "textLink.activeForeground": "#c4a7e7e6", "textLink.foreground": "#c4a7e7", "textPreformat.foreground": "#f6c177", "textSeparator.foreground": "#908caa", "titleBar.activeBackground": "#191724", "titleBar.activeForeground": "#908caa", "titleBar.inactiveBackground": "#1f1d2e", "titleBar.inactiveForeground": "#908caa", "toolbar.activeBackground": "#6e6a8666", "toolbar.hoverBackground": "#6e6a8633", "tree.indentGuidesStroke": "#908caa", "walkThrough.embeddedEditorBackground": "#191724", "welcomePage.background": "#191724", "welcomePage.buttonBackground": "#1f1d2e", "welcomePage.buttonHoverBackground": "#26233a", "widget.shadow": "#0101011a", "window.activeBorder": "#1f1d2e", "window.inactiveBorder": "#1f1d2e" }, "tokenColors": [ { "scope": ["comment"], "settings": { "foreground": "#6e6a86", "fontStyle": "italic" } }, { "scope": ["constant"], "settings": { "foreground": "#31748f" } }, { "scope": [ "constant.numeric", "constant.language", "constant.charcter.escape" ], "settings": { "foreground": "#ebbcba" } }, { "scope": ["entity.name"], "settings": { "foreground": "#ebbcba" } }, { "scope": [ "entity.name.section", "entity.name.tag", "entity.name.namespace", "entity.name.type" ], "settings": { "foreground": "#9ccfd8" } }, { "scope": ["entity.other.attribute-name", "entity.other.inherited-class"], "settings": { "foreground": "#c4a7e7", "fontStyle": "italic" } }, { "scope": ["invalid"], "settings": { "foreground": "#eb6f92" } }, { "scope": ["invalid.deprecated"], "settings": { "foreground": "#908caa" } }, { "scope": ["keyword"], "settings": { "foreground": "#31748f" } }, { "scope": ["markup.inserted.diff"], "settings": { "foreground": "#9ccfd8" } }, { "scope": ["markup.deleted.diff"], "settings": { "foreground": "#eb6f92" } }, { "scope": ["meta.diff.range"], "settings": { "foreground": "#c4a7e7" } }, { "scope": ["meta.tag", "meta.brace"], "settings": { "foreground": "#e0def4" } }, { "scope": ["meta.import", "meta.export"], "settings": { "foreground": "#31748f" } }, { "scope": "meta.directive.vue", "settings": { "foreground": "#c4a7e7", "fontStyle": "italic" } }, { "scope": "meta.property-name.css", "settings": { "foreground": "#9ccfd8" } }, { "scope": "meta.property-value.css", "settings": { "foreground": "#f6c177" } }, { "scope": "meta.tag.other.html", "settings": { "foreground": "#908caa" } }, { "scope": ["punctuation"], "settings": { "foreground": "#908caa" } }, { "scope": ["punctuation.accessor"], "settings": { "foreground": "#31748f" } }, { "scope": ["punctuation.definition.string"], "settings": { "foreground": "#f6c177" } }, { "scope": ["punctuation.definition.tag"], "settings": { "foreground": "#6e6a86" } }, { "scope": ["storage.type", "storage.modifier"], "settings": { "foreground": "#31748f" } }, { "scope": ["string"], "settings": { "foreground": "#f6c177" } }, { "scope": ["support"], "settings": { "foreground": "#9ccfd8" } }, { "scope": ["support.constant"], "settings": { "foreground": "#f6c177" } }, { "scope": ["support.function"], "settings": { "foreground": "#eb6f92", "fontStyle": "italic" } }, { "scope": ["variable"], "settings": { "foreground": "#ebbcba", "fontStyle": "italic" } }, { "scope": [ "variable.other", "variable.language", "variable.function", "variable.argument" ], "settings": { "foreground": "#e0def4" } }, { "scope": ["variable.parameter"], "settings": { "foreground": "#c4a7e7" } } ] } ================================================ FILE: apps/web/src/lib/shiki/themes/slack-dark.json ================================================ { "name": "slack-dark", "type": "dark", "colors": { "activityBarBadge.background": "#1D978D", "editor.background": "#222222", "editor.foreground": "#E6E6E6", "editor.inactiveSelectionBackground": "#3a3d41", "editor.selectionHighlightBackground": "#add6ff26", "editorIndentGuide.activeBackground": "#707070", "editorIndentGuide.background": "#404040", "input.placeholderForeground": "#7A7A7A", "list.dropBackground": "#383b3d", "list.activeSelectionBackground": "#222222", "list.focusBackground": "#0077B5", "menu.background": "#252526", "menu.foreground": "#E6E6E6", "settings.numberInputBackground": "#292929", "settings.textInputBackground": "#292929", "sideBarTitle.foreground": "#E6E6E6", "statusBar.background": "#222222", "statusBar.noFolderBackground": "#141414", "statusBar.debuggingBackground": "#1D978D", "list.hoverBackground": "#222222", "gitDecoration.modifiedResourceForeground": "#ECB22E", "gitDecoration.deletedResourceForeground": "#FFF", "gitDecoration.untrackedResourceForeground": "#ECB22E", "gitDecoration.ignoredResourceForeground": "#877583", "gitDecoration.addedResourceForeground": "#ECB22E", "gitDecoration.conflictingResourceForeground": "#FFF", "editor.lineHighlightBorder": "#141414", "editor.lineHighlightBackground": "#141414", "editorSuggestWidget.selectedBackground": "#0077B5", "sideBarSectionHeader.background": "#222222", "activityBar.background": "#222222", "button.background": "#0077B5", "button.foreground": "#FFF", "button.hoverBackground": "#005076", "extensionButton.prominentBackground": "#0077B5", "extensionButton.prominentForeground": "#FFF", "extensionButton.prominentHoverBackground": "#005076", "debugExceptionWidget.background": "#141414", "debugExceptionWidget.border": "#FFF", "debugToolBar.background": "#141414", "titleBar.activeBackground": "#222222", "titleBar.activeForeground": "#E6E6E6", "titleBar.inactiveBackground": "#222222", "titleBar.inactiveForeground": "#7A7A7A", "focusBorder": "#0077B5", "textLink.activeForeground": "#0077B5", "textLink.foreground": "#0077B5", "editorLink.activeForeground": "#0077B5", "notificationLink.foreground": "#0077B5" }, "tokenColors": [ { "scope": ["meta.embedded", "source.groovy.embedded"], "settings": { "foreground": "#D4D4D4" } }, { "scope": "emphasis", "settings": { "fontStyle": "italic" } }, { "scope": "strong", "settings": { "fontStyle": "bold" } }, { "scope": "header", "settings": { "foreground": "#000080" } }, { "scope": "comment", "settings": { "foreground": "#6A9955" } }, { "scope": "constant.language", "settings": { "foreground": "#569cd6" } }, { "scope": ["constant.numeric"], "settings": { "foreground": "#b5cea8" } }, { "scope": "constant.regexp", "settings": { "foreground": "#646695" } }, { "scope": "entity.name.tag", "settings": { "foreground": "#569cd6" } }, { "scope": "entity.name.tag.css", "settings": { "foreground": "#d7ba7d" } }, { "scope": "entity.other.attribute-name", "settings": { "foreground": "#9cdcfe" } }, { "scope": [ "entity.other.attribute-name.class.css", "entity.other.attribute-name.class.mixin.css", "entity.other.attribute-name.id.css", "entity.other.attribute-name.parent-selector.css", "entity.other.attribute-name.pseudo-class.css", "entity.other.attribute-name.pseudo-element.css", "source.css.less entity.other.attribute-name.id", "entity.other.attribute-name.attribute.scss", "entity.other.attribute-name.scss" ], "settings": { "foreground": "#d7ba7d" } }, { "scope": "invalid", "settings": { "foreground": "#f44747" } }, { "scope": "markup.underline", "settings": { "fontStyle": "underline" } }, { "scope": "markup.bold", "settings": { "fontStyle": "bold", "foreground": "#569cd6" } }, { "scope": "markup.heading", "settings": { "fontStyle": "bold", "foreground": "#569cd6" } }, { "scope": "markup.italic", "settings": { "fontStyle": "italic" } }, { "scope": "markup.inserted", "settings": { "foreground": "#b5cea8" } }, { "scope": "markup.deleted", "settings": { "foreground": "#ce9178" } }, { "scope": "markup.changed", "settings": { "foreground": "#569cd6" } }, { "scope": "punctuation.definition.quote.begin.markdown", "settings": { "foreground": "#6A9955" } }, { "scope": "punctuation.definition.list.begin.markdown", "settings": { "foreground": "#6796e6" } }, { "scope": "markup.inline.raw", "settings": { "foreground": "#ce9178" } }, { "name": "brackets of XML/HTML tags", "scope": "punctuation.definition.tag", "settings": { "foreground": "#808080" } }, { "scope": "meta.preprocessor", "settings": { "foreground": "#569cd6" } }, { "scope": "meta.preprocessor.string", "settings": { "foreground": "#ce9178" } }, { "scope": "meta.preprocessor.numeric", "settings": { "foreground": "#b5cea8" } }, { "scope": "meta.structure.dictionary.key.python", "settings": { "foreground": "#9cdcfe" } }, { "scope": "meta.diff.header", "settings": { "foreground": "#569cd6" } }, { "scope": "storage", "settings": { "foreground": "#569cd6" } }, { "scope": "storage.type", "settings": { "foreground": "#569cd6" } }, { "scope": "storage.modifier", "settings": { "foreground": "#569cd6" } }, { "scope": "string", "settings": { "foreground": "#ce9178" } }, { "scope": "string.tag", "settings": { "foreground": "#ce9178" } }, { "scope": "string.value", "settings": { "foreground": "#ce9178" } }, { "scope": "string.regexp", "settings": { "foreground": "#d16969" } }, { "name": "String interpolation", "scope": [ "punctuation.definition.template-expression.begin", "punctuation.definition.template-expression.end", "punctuation.section.embedded" ], "settings": { "foreground": "#569cd6" } }, { "name": "Reset JavaScript string interpolation expression", "scope": ["meta.template.expression"], "settings": { "foreground": "#d4d4d4" } }, { "scope": [ "support.type.vendored.property-name", "support.type.property-name", "variable.css", "variable.scss", "variable.other.less", "source.coffee.embedded" ], "settings": { "foreground": "#9cdcfe" } }, { "scope": "keyword", "settings": { "foreground": "#569cd6" } }, { "scope": "keyword.control", "settings": { "foreground": "#569cd6" } }, { "scope": "keyword.operator", "settings": { "foreground": "#d4d4d4" } }, { "scope": [ "keyword.operator.new", "keyword.operator.expression", "keyword.operator.cast", "keyword.operator.sizeof", "keyword.operator.instanceof", "keyword.operator.logical.python" ], "settings": { "foreground": "#569cd6" } }, { "scope": "keyword.other.unit", "settings": { "foreground": "#b5cea8" } }, { "scope": [ "punctuation.section.embedded.begin.php", "punctuation.section.embedded.end.php" ], "settings": { "foreground": "#569cd6" } }, { "scope": "support.function.git-rebase", "settings": { "foreground": "#9cdcfe" } }, { "scope": "constant.sha.git-rebase", "settings": { "foreground": "#b5cea8" } }, { "name": "coloring of the Java import and package identifiers", "scope": [ "storage.modifier.import.java", "variable.language.wildcard.java", "storage.modifier.package.java" ], "settings": { "foreground": "#d4d4d4" } }, { "name": "this.self", "scope": "variable.language", "settings": { "foreground": "#569cd6" } }, { "name": "Function declarations", "scope": [ "entity.name.function", "support.function", "support.constant.handlebars" ], "settings": { "foreground": "#DCDCAA" } }, { "name": "Types declaration and references", "scope": [ "meta.return-type", "support.class", "support.type", "entity.name.type", "entity.name.class", "storage.type.numeric.go", "storage.type.byte.go", "storage.type.boolean.go", "storage.type.string.go", "storage.type.uintptr.go", "storage.type.error.go", "storage.type.rune.go", "storage.type.cs", "storage.type.generic.cs", "storage.type.modifier.cs", "storage.type.variable.cs", "storage.type.annotation.java", "storage.type.generic.java", "storage.type.java", "storage.type.object.array.java", "storage.type.primitive.array.java", "storage.type.primitive.java", "storage.type.token.java", "storage.type.groovy", "storage.type.annotation.groovy", "storage.type.parameters.groovy", "storage.type.generic.groovy", "storage.type.object.array.groovy", "storage.type.primitive.array.groovy", "storage.type.primitive.groovy" ], "settings": { "foreground": "#4EC9B0" } }, { "name": "Types declaration and references, TS grammar specific", "scope": [ "meta.type.cast.expr", "meta.type.new.expr", "support.constant.math", "support.constant.dom", "support.constant.json", "entity.other.inherited-class" ], "settings": { "foreground": "#4EC9B0" } }, { "name": "Control flow keywords", "scope": "keyword.control", "settings": { "foreground": "#C586C0" } }, { "name": "Variable and parameter name", "scope": [ "variable", "meta.definition.variable.name", "support.variable", "entity.name.variable" ], "settings": { "foreground": "#9CDCFE" } }, { "name": "Object keys, TS grammar specific", "scope": ["meta.object-literal.key"], "settings": { "foreground": "#9CDCFE" } }, { "name": "CSS property value", "scope": [ "support.constant.property-value", "support.constant.font-name", "support.constant.media-type", "support.constant.media", "constant.other.color.rgb-value", "constant.other.rgb-value", "support.constant.color" ], "settings": { "foreground": "#CE9178" } }, { "name": "Regular expression groups", "scope": [ "punctuation.definition.group.regexp", "punctuation.definition.group.assertion.regexp", "punctuation.definition.character-class.regexp", "punctuation.character.set.begin.regexp", "punctuation.character.set.end.regexp", "keyword.operator.negation.regexp", "support.other.parenthesis.regexp" ], "settings": { "foreground": "#CE9178" } }, { "scope": [ "constant.character.character-class.regexp", "constant.other.character-class.set.regexp", "constant.other.character-class.regexp", "constant.character.set.regexp" ], "settings": { "foreground": "#d16969" } }, { "scope": ["keyword.operator.or.regexp", "keyword.control.anchor.regexp"], "settings": { "foreground": "#DCDCAA" } }, { "scope": "keyword.operator.quantifier.regexp", "settings": { "foreground": "#d7ba7d" } }, { "scope": "constant.character", "settings": { "foreground": "#569cd6" } }, { "scope": "constant.character.escape", "settings": { "foreground": "#d7ba7d" } }, { "scope": "token.info-token", "settings": { "foreground": "#6796e6" } }, { "scope": "token.warn-token", "settings": { "foreground": "#cd9731" } }, { "scope": "token.error-token", "settings": { "foreground": "#f44747" } }, { "scope": "token.debug-token", "settings": { "foreground": "#b267e6" } } ] } ================================================ FILE: apps/web/src/lib/shiki/themes/slack-ochin.json ================================================ { "name": "slack-ochin", "type": "dark", "colors": { "foreground": "#616161", "focusBorder": "#161F26", "widget.shadow": "#161F2694", "input.background": "#FFF", "input.border": "#161F26", "input.foreground": "#000", "input.placeholderForeground": "#a0a0a0", "inputOption.activeBorder": "#3E313C", "inputValidation.errorBackground": "#F44C5E", "inputValidation.errorForeground": "#FFF", "inputValidation.infoBackground": "#6182b8", "inputValidation.infoForeground": "#FFF", "inputValidation.warningBackground": "#F6B555", "inputValidation.warningForeground": "#000", "list.activeSelectionBackground": "#5899C5", "list.activeSelectionForeground": "#fff", "list.hoverBackground": "#d5e1ea", "list.hoverForeground": "#fff", "list.focusBackground": "#d5e1ea", "list.focusForeground": "#fff", "list.inactiveSelectionBackground": "#5899C5", "list.inactiveSelectionForeground": "#fff", "list.highlightForeground": "#2D3E4C", "list.inactiveFocusBackground": "#161F26", "list.invalidItemForeground": "#fff", "button.background": "#475663", "button.foreground": "#FFF", "button.hoverBackground": "#161F26", "scrollbar.shadow": "#ffffff00", "scrollbarSlider.activeBackground": "#161F267e", "scrollbarSlider.background": "#161F267e", "scrollbarSlider.hoverBackground": "#161F267e", "badge.background": "#8AE773", "progressBar.background": "#8AE773", "editor.background": "#FFF", "editor.foreground": "#000", "editor.lineHighlightBackground": "#EEEEEE", "editor.wordHighlightStrongBackground": "#EEEEEE", "editor.selectionBackground": "#AED4FB", "editorLineNumber.foreground": "#b9b9b9", "editorActiveLineNumber.foreground": "#475663", "editor.findMatchBackground": "#AED4FB", "editorHint.foreground": "#F9F9F9", "editorHint.border": "#F9F9F9", "editor.wordHighlightBackground": "#AED4FB", "terminal.border": "#2D3E4C", "terminal.foreground": "#161F26", "terminal.ansiBlack": "#000000", "terminal.ansiBlue": "#6182b8", "terminal.ansiBrightBlack": "#90a4ae", "terminal.ansiBrightBlue": "#6182b8", "terminal.ansiBrightCyan": "#39adb5", "terminal.ansiBrightGreen": "#91b859", "terminal.ansiBrightMagenta": "#7c4dff", "terminal.ansiBrightRed": "#e53935", "terminal.ansiBrightWhite": "#ffffff", "terminal.ansiBrightYellow": "#ffb62c", "terminal.ansiCyan": "#39adb5", "terminal.ansiGreen": "#91b859", "terminal.ansiMagenta": "#7c4dff", "terminal.ansiRed": "#e53935", "terminal.ansiWhite": "#ffffff", "terminal.ansiYellow": "#ffb62c", "terminal.selectionBackground": "#0006", "panelTitle.activeForeground": "#161F26", "activityBar.background": "#161F26", "activityBar.foreground": "#FFF", "activityBar.dropBackground": "#FFF", "activityBarBadge.background": "#8AE773", "activityBarBadge.foreground": "#FFF", "panel.border": "#2D3E4C", "dropdown.background": "#FFF", "dropdown.listBackground": "#FFF", "dropdown.border": "#DCDEDF", "dropdown.foreground": "#DCDEDF", "sideBar.background": "#2D3E4C", "sideBar.foreground": "#DCDEDF", "sideBarTitle.foreground": "#FFF", "sideBarSectionHeader.foreground": "#FFF", "sideBarSectionHeader.background": "#161F26", "debugToolBar.background": "#161F26", "tab.border": "#F3F3F3", "tab.activeBackground": "#FFF", "tab.inactiveForeground": "#686868", "tab.inactiveBackground": "#F3F3F3", "tab.activeForeground": "#000", "editorGroupHeader.tabsBackground": "#2D3E4C", "statusBar.foreground": "#FFF", "statusBar.background": "#5899C5", "statusBar.debuggingBackground": "#8AE773", "statusBar.noFolderBackground": "#161F26", "extensionButton.prominentBackground": "#475663", "extensionButton.prominentForeground": "#F6F6F6", "extensionButton.prominentHoverBackground": "#161F26", "gitDecoration.modifiedResourceForeground": "#ECB22E", "gitDecoration.deletedResourceForeground": "#FFF", "gitDecoration.untrackedResourceForeground": "#ECB22E", "gitDecoration.ignoredResourceForeground": "#877583", "gitDecoration.addedResourceForeground": "#ECB22E", "gitDecoration.conflictingResourceForeground": "#FFF", "notificationCenter.border": "#161F26", "notificationToast.border": "#161F26", "notifications.foreground": "#FFF", "notifications.background": "#161F26", "notifications.border": "#161F26", "notificationCenterHeader.foreground": "#FFF", "notificationLink.foreground": "#FFF", "titleBar.activeBackground": "#2D3E4C", "titleBar.activeForeground": "#FFF", "titleBar.inactiveBackground": "#161F26", "titleBar.inactiveForeground": "#685C66", "titleBar.border": "#2D3E4C", "welcomePage.buttonBackground": "#F3F3F3", "welcomePage.buttonHoverBackground": "#ECECEC", "editorWidget.background": "#F9F9F9", "editorWidget.border": "#dbdbdb", "editorSuggestWidget.foreground": "#2D3E4C", "editorSuggestWidget.highlightForeground": "#2D3E4C", "editorSuggestWidget.selectedBackground": "#b9b9b9", "editorGroup.emptyBackground": "#2D3E4C", "editorGroup.focusedEmptyBorder": "#2D3E4C", "editorPane.background": "#2D3E4C", "breadcrumb.foreground": "#161F26", "breadcrumb.focusForeground": "#475663", "settings.headerForeground": "#161F26", "settings.dropdownForeground": "#161F26", "settings.dropdownBorder": "#161F26", "menu.separatorBackground": "#F9FAFA", "menu.background": "#161F26", "menu.foreground": "#F9FAFA", "textPreformat.foreground": "#161F26", "editorIndentGuide.background": "#F3F3F3", "editorIndentGuide.activeBackground": "#dbdbdb", "debugExceptionWidget.background": "#AED4FB", "debugExceptionWidget.border": "#161F26", "editorMarkerNavigation.background": "#F9F9F9", "editorMarkerNavigationInfo.background": "#6182b8", "editorMarkerNavigationError.background": "#F44C5E", "editorMarkerNavigationWarning.background": "#F6B555" }, "tokenColors": [ { "settings": { "foreground": "#002339" } }, { "scope": [ "meta.paragraph.markdown", "string.other.link.description.title.markdown" ], "settings": { "foreground": "#110000" } }, { "scope": [ "entity.name.section.markdown", "punctuation.definition.heading.markdown" ], "settings": { "foreground": "#034c7c" } }, { "scope": [ "punctuation.definition.string.begin.markdown", "punctuation.definition.string.end.markdown", "markup.quote.markdown" ], "settings": { "foreground": "#00AC8F" } }, { "scope": ["markup.quote.markdown"], "settings": { "fontStyle": "italic", "foreground": "#003494" } }, { "scope": ["markup.bold.markdown", "punctuation.definition.bold.markdown"], "settings": { "fontStyle": "bold", "foreground": "#4e76b5" } }, { "scope": [ "markup.italic.markdown", "punctuation.definition.italic.markdown" ], "settings": { "fontStyle": "italic", "foreground": "#C792EA" } }, { "scope": [ "markup.inline.raw.string.markdown", "markup.fenced_code.block.markdown" ], "settings": { "fontStyle": "italic", "foreground": "#0460b1" } }, { "scope": ["punctuation.definition.metadata.markdown"], "settings": { "foreground": "#00AC8F" } }, { "scope": [ "markup.underline.link.image.markdown", "markup.underline.link.markdown" ], "settings": { "foreground": "#924205" } }, { "name": "Comment", "scope": "comment", "settings": { "fontStyle": "italic", "foreground": "#357b42" } }, { "name": "String", "scope": "string", "settings": { "foreground": "#a44185" } }, { "name": "Number", "scope": "constant.numeric", "settings": { "foreground": "#174781" } }, { "name": "Constant", "scope": "constant", "settings": { "foreground": "#174781" } }, { "name": "Built-in constant", "scope": "language.method", "settings": { "foreground": "#174781" } }, { "name": "User-defined constant", "scope": ["constant.character", "constant.other"], "settings": { "foreground": "#174781" } }, { "name": "Variable", "scope": "variable", "settings": { "fontStyle": "", "foreground": "#2f86d2" } }, { "name": "Variable", "scope": "variable.language.this", "settings": { "fontStyle": "", "foreground": "#000000" } }, { "name": "Keyword", "scope": "keyword", "settings": { "fontStyle": "", "foreground": "#7b30d0" } }, { "name": "Storage", "scope": "storage", "settings": { "fontStyle": "", "foreground": "#da5221" } }, { "name": "Storage type", "scope": "storage.type", "settings": { "foreground": "#0991b6", "fontStyle": "" } }, { "name": "Class name", "scope": "entity.name.class", "settings": { "foreground": "#1172c7" } }, { "name": "Inherited class", "scope": "entity.other.inherited-class", "settings": { "fontStyle": "", "foreground": "#b02767" } }, { "name": "Function name", "scope": "entity.name.function", "settings": { "fontStyle": "", "foreground": "#7eb233" } }, { "name": "Function argument", "scope": "variable.parameter", "settings": { "foreground": "#b1108e", "fontStyle": "" } }, { "name": "Tag name", "scope": "entity.name.tag", "settings": { "fontStyle": "", "foreground": "#0444ac" } }, { "name": "Html Other", "scope": "text.html.basic", "settings": { "fontStyle": "", "foreground": "#0071ce" } }, { "name": "Entity Name Type", "scope": "entity.name.type", "settings": { "foreground": "#0444ac" } }, { "name": "Tag attribute", "scope": "entity.other.attribute-name", "settings": { "fontStyle": "italic", "foreground": "#df8618" } }, { "name": "Library function", "scope": "support.function", "settings": { "fontStyle": "", "foreground": "#1ab394" } }, { "name": "Library constant", "scope": "support.constant", "settings": { "fontStyle": "", "foreground": "#174781" } }, { "name": "Library class/type", "scope": ["support.type", "support.class"], "settings": { "foreground": "#dc3eb7" } }, { "name": "Library variable", "scope": "support.other.variable", "settings": { "foreground": "#224555" } }, { "name": "Invalid", "scope": "invalid", "settings": { "fontStyle": " italic bold underline", "foreground": "#207bb8" } }, { "name": "Invalid deprecated", "scope": "invalid.deprecated", "settings": { "foreground": "#207bb8", "fontStyle": " bold italic underline" } }, { "name": "[JSON] - Support", "scope": "source.json support", "settings": { "foreground": "#6dbdfa" } }, { "name": "[JSON] - String", "scope": [ "source.json string", "source.json punctuation.definition.string" ], "settings": { "foreground": "#00820f" } }, { "name": "Lists", "scope": "markup.list", "settings": { "foreground": "#207bb8" } }, { "name": "Headings", "scope": [ "markup.heading punctuation.definition.heading", "entity.name.section" ], "settings": { "fontStyle": "", "foreground": "#4FB4D8" } }, { "name": "Support", "scope": [ "text.html.markdown meta.paragraph meta.link.inline", "text.html.markdown meta.paragraph meta.link.inline punctuation.definition.string.begin.markdown", "text.html.markdown meta.paragraph meta.link.inline punctuation.definition.string.end.markdown" ], "settings": { "foreground": "#87429A" } }, { "name": "Quotes", "scope": "markup.quote", "settings": { "foreground": "#87429A" } }, { "name": "Bold", "scope": "markup.bold", "settings": { "fontStyle": "bold", "foreground": "#08134A" } }, { "name": "Italic", "scope": ["markup.italic", "punctuation.definition.italic"], "settings": { "fontStyle": "italic", "foreground": "#174781" } }, { "name": "Link Url", "scope": "meta.link", "settings": { "foreground": "#87429A" } } ] } ================================================ FILE: apps/web/src/lib/shiki/themes/solarized-dark.json ================================================ { "name": "solarized-dark", "tokenColors": [ { "settings": { "foreground": "#839496" } }, { "scope": [ "meta.embedded", "source.groovy.embedded", "string meta.image.inline.markdown" ], "settings": { "foreground": "#839496" } }, { "name": "Comment", "scope": "comment", "settings": { "fontStyle": "italic", "foreground": "#586E75" } }, { "name": "String", "scope": "string", "settings": { "foreground": "#2AA198" } }, { "name": "Regexp", "scope": "string.regexp", "settings": { "foreground": "#DC322F" } }, { "name": "Number", "scope": "constant.numeric", "settings": { "foreground": "#D33682" } }, { "name": "Variable", "scope": ["variable.language", "variable.other"], "settings": { "foreground": "#268BD2" } }, { "name": "Keyword", "scope": "keyword", "settings": { "foreground": "#859900" } }, { "name": "Storage", "scope": "storage", "settings": { "fontStyle": "bold", "foreground": "#93A1A1" } }, { "name": "Class name", "scope": [ "entity.name.class", "entity.name.type", "entity.name.namespace", "entity.name.scope-resolution" ], "settings": { "fontStyle": "", "foreground": "#CB4B16" } }, { "name": "Function name", "scope": "entity.name.function", "settings": { "foreground": "#268BD2" } }, { "name": "Variable start", "scope": "punctuation.definition.variable", "settings": { "foreground": "#859900" } }, { "name": "Embedded code markers", "scope": [ "punctuation.section.embedded.begin", "punctuation.section.embedded.end" ], "settings": { "foreground": "#DC322F" } }, { "name": "Built-in constant", "scope": ["constant.language", "meta.preprocessor"], "settings": { "foreground": "#B58900" } }, { "name": "Support.construct", "scope": ["support.function.construct", "keyword.other.new"], "settings": { "foreground": "#CB4B16" } }, { "name": "User-defined constant", "scope": ["constant.character", "constant.other"], "settings": { "foreground": "#CB4B16" } }, { "name": "Inherited class", "scope": "entity.other.inherited-class", "settings": { "foreground": "#6C71C4" } }, { "name": "Function argument", "scope": "variable.parameter", "settings": {} }, { "name": "Tag name", "scope": "entity.name.tag", "settings": { "foreground": "#268BD2" } }, { "name": "Tag start/end", "scope": "punctuation.definition.tag", "settings": { "foreground": "#586E75" } }, { "name": "Tag attribute", "scope": "entity.other.attribute-name", "settings": { "foreground": "#93A1A1" } }, { "name": "Library function", "scope": "support.function", "settings": { "foreground": "#268BD2" } }, { "name": "Continuation", "scope": "punctuation.separator.continuation", "settings": { "foreground": "#DC322F" } }, { "name": "Library constant", "scope": ["support.constant", "support.variable"], "settings": {} }, { "name": "Library class/type", "scope": ["support.type", "support.class"], "settings": { "foreground": "#859900" } }, { "name": "Library Exception", "scope": "support.type.exception", "settings": { "foreground": "#CB4B16" } }, { "name": "Library variable", "scope": "support.other.variable", "settings": {} }, { "name": "Invalid", "scope": "invalid", "settings": { "foreground": "#DC322F" } }, { "name": "diff: header", "scope": ["meta.diff", "meta.diff.header"], "settings": { "fontStyle": "italic", "foreground": "#268BD2" } }, { "name": "diff: deleted", "scope": "markup.deleted", "settings": { "fontStyle": "", "foreground": "#DC322F" } }, { "name": "diff: changed", "scope": "markup.changed", "settings": { "fontStyle": "", "foreground": "#CB4B16" } }, { "name": "diff: inserted", "scope": "markup.inserted", "settings": { "foreground": "#859900" } }, { "name": "Markup Quote", "scope": "markup.quote", "settings": { "foreground": "#859900" } }, { "name": "Markup Lists", "scope": "markup.list", "settings": { "foreground": "#B58900" } }, { "name": "Markup Styling", "scope": ["markup.bold", "markup.italic"], "settings": { "foreground": "#D33682" } }, { "name": "Markup: Strong", "scope": "markup.bold", "settings": { "fontStyle": "bold" } }, { "name": "Markup: Emphasis", "scope": "markup.italic", "settings": { "fontStyle": "italic" } }, { "scope": "markup.strikethrough", "settings": { "fontStyle": "strikethrough" } }, { "name": "Markup Inline", "scope": "markup.inline.raw", "settings": { "fontStyle": "", "foreground": "#2AA198" } }, { "name": "Markup Headings", "scope": "markup.heading", "settings": { "fontStyle": "bold", "foreground": "#268BD2" } }, { "name": "Markup Setext Header", "scope": "markup.heading.setext", "settings": { "fontStyle": "", "foreground": "#268BD2" } } ], "colors": { "focusBorder": "#2AA19899", "selection.background": "#2AA19899", "input.background": "#003847", "input.foreground": "#93A1A1", "input.placeholderForeground": "#93A1A1AA", "inputOption.activeBorder": "#2AA19899", "inputValidation.infoBorder": "#363b5f", "inputValidation.infoBackground": "#052730", "inputValidation.warningBackground": "#5d5938", "inputValidation.warningBorder": "#9d8a5e", "inputValidation.errorBackground": "#571b26", "inputValidation.errorBorder": "#a92049", "errorForeground": "#ffeaea", "badge.background": "#047aa6", "progressBar.background": "#047aa6", "dropdown.background": "#00212B", "dropdown.border": "#2AA19899", "button.background": "#2AA19899", "list.activeSelectionBackground": "#005A6F", "quickInputList.focusBackground": "#005A6F", "list.hoverBackground": "#004454AA", "list.inactiveSelectionBackground": "#00445488", "list.dropBackground": "#00445488", "list.highlightForeground": "#1ebcc5", "editor.background": "#002B36", "editor.foreground": "#839496", "editorWidget.background": "#00212B", "editorCursor.foreground": "#D30102", "editorWhitespace.foreground": "#93A1A180", "editor.lineHighlightBackground": "#073642", "editorLineNumber.activeForeground": "#949494", "editor.selectionBackground": "#274642", "minimap.selectionHighlight": "#274642", "editorIndentGuide.background": "#93A1A180", "editorIndentGuide.activeBackground": "#C3E1E180", "editorHoverWidget.background": "#004052", "editorMarkerNavigationError.background": "#AB395B", "editorMarkerNavigationWarning.background": "#5B7E7A", "editor.selectionHighlightBackground": "#005A6FAA", "editor.wordHighlightBackground": "#004454AA", "editor.wordHighlightStrongBackground": "#005A6FAA", "editorBracketHighlight.foreground1": "#cdcdcdff", "editorBracketHighlight.foreground2": "#b58900ff", "editorBracketHighlight.foreground3": "#d33682ff", "peekViewResult.background": "#00212B", "peekViewEditor.background": "#10192c", "peekViewTitle.background": "#00212B", "peekView.border": "#2b2b4a", "peekViewEditor.matchHighlightBackground": "#7744AA40", "titleBar.activeBackground": "#002C39", "editorGroup.border": "#00212B", "editorGroup.dropBackground": "#2AA19844", "editorGroupHeader.tabsBackground": "#004052", "tab.activeForeground": "#d6dbdb", "tab.activeBackground": "#002B37", "tab.inactiveForeground": "#93A1A1", "tab.inactiveBackground": "#004052", "tab.border": "#003847", "tab.lastPinnedBorder": "#2AA19844", "activityBar.background": "#003847", "panel.border": "#2b2b4a", "sideBar.background": "#00212B", "sideBarTitle.foreground": "#93A1A1", "statusBar.foreground": "#93A1A1", "statusBar.background": "#00212B", "statusBar.debuggingBackground": "#00212B", "statusBar.noFolderBackground": "#00212B", "statusBarItem.remoteBackground": "#2AA19899", "ports.iconRunningProcessForeground": "#369432", "statusBarItem.prominentBackground": "#003847", "statusBarItem.prominentHoverBackground": "#003847", "debugToolBar.background": "#00212B", "debugExceptionWidget.background": "#00212B", "debugExceptionWidget.border": "#AB395B", "pickerGroup.foreground": "#2AA19899", "pickerGroup.border": "#2AA19899", "terminal.ansiBlack": "#073642", "terminal.ansiRed": "#dc322f", "terminal.ansiGreen": "#859900", "terminal.ansiYellow": "#b58900", "terminal.ansiBlue": "#268bd2", "terminal.ansiMagenta": "#d33682", "terminal.ansiCyan": "#2aa198", "terminal.ansiWhite": "#eee8d5", "terminal.ansiBrightBlack": "#002b36", "terminal.ansiBrightRed": "#cb4b16", "terminal.ansiBrightGreen": "#586e75", "terminal.ansiBrightYellow": "#657b83", "terminal.ansiBrightBlue": "#839496", "terminal.ansiBrightMagenta": "#6c71c4", "terminal.ansiBrightCyan": "#93a1a1", "terminal.ansiBrightWhite": "#fdf6e3" }, "semanticHighlighting": true } ================================================ FILE: apps/web/src/lib/shiki/themes/solarized-light.json ================================================ { "name": "solarized-light", "tokenColors": [ { "settings": { "foreground": "#657B83" } }, { "scope": [ "meta.embedded", "source.groovy.embedded", "string meta.image.inline.markdown" ], "settings": { "foreground": "#657B83" } }, { "name": "Comment", "scope": "comment", "settings": { "fontStyle": "italic", "foreground": "#93A1A1" } }, { "name": "String", "scope": "string", "settings": { "foreground": "#2AA198" } }, { "name": "Regexp", "scope": "string.regexp", "settings": { "foreground": "#DC322F" } }, { "name": "Number", "scope": "constant.numeric", "settings": { "foreground": "#D33682" } }, { "name": "Variable", "scope": ["variable.language", "variable.other"], "settings": { "foreground": "#268BD2" } }, { "name": "Keyword", "scope": "keyword", "settings": { "foreground": "#859900" } }, { "name": "Storage", "scope": "storage", "settings": { "fontStyle": "bold", "foreground": "#586E75" } }, { "name": "Class name", "scope": [ "entity.name.class", "entity.name.type", "entity.name.namespace", "entity.name.scope-resolution" ], "settings": { "fontStyle": "", "foreground": "#CB4B16" } }, { "name": "Function name", "scope": "entity.name.function", "settings": { "foreground": "#268BD2" } }, { "name": "Variable start", "scope": "punctuation.definition.variable", "settings": { "foreground": "#859900" } }, { "name": "Embedded code markers", "scope": [ "punctuation.section.embedded.begin", "punctuation.section.embedded.end" ], "settings": { "foreground": "#DC322F" } }, { "name": "Built-in constant", "scope": ["constant.language", "meta.preprocessor"], "settings": { "foreground": "#B58900" } }, { "name": "Support.construct", "scope": ["support.function.construct", "keyword.other.new"], "settings": { "foreground": "#CB4B16" } }, { "name": "User-defined constant", "scope": ["constant.character", "constant.other"], "settings": { "foreground": "#CB4B16" } }, { "name": "Inherited class", "scope": "entity.other.inherited-class", "settings": { "foreground": "#6C71C4" } }, { "name": "Function argument", "scope": "variable.parameter", "settings": {} }, { "name": "Tag name", "scope": "entity.name.tag", "settings": { "foreground": "#268BD2" } }, { "name": "Tag start/end", "scope": "punctuation.definition.tag", "settings": { "foreground": "#93A1A1" } }, { "name": "Tag attribute", "scope": "entity.other.attribute-name", "settings": { "foreground": "#93A1A1" } }, { "name": "Library function", "scope": "support.function", "settings": { "foreground": "#268BD2" } }, { "name": "Continuation", "scope": "punctuation.separator.continuation", "settings": { "foreground": "#DC322F" } }, { "name": "Library constant", "scope": ["support.constant", "support.variable"], "settings": {} }, { "name": "Library class/type", "scope": ["support.type", "support.class"], "settings": { "foreground": "#859900" } }, { "name": "Library Exception", "scope": "support.type.exception", "settings": { "foreground": "#CB4B16" } }, { "name": "Library variable", "scope": "support.other.variable", "settings": {} }, { "name": "Invalid", "scope": "invalid", "settings": { "foreground": "#DC322F" } }, { "name": "diff: header", "scope": ["meta.diff", "meta.diff.header"], "settings": { "fontStyle": "italic", "foreground": "#268BD2" } }, { "name": "diff: deleted", "scope": "markup.deleted", "settings": { "fontStyle": "", "foreground": "#DC322F" } }, { "name": "diff: changed", "scope": "markup.changed", "settings": { "fontStyle": "", "foreground": "#CB4B16" } }, { "name": "diff: inserted", "scope": "markup.inserted", "settings": { "foreground": "#859900" } }, { "name": "Markup Quote", "scope": "markup.quote", "settings": { "foreground": "#859900" } }, { "name": "Markup Lists", "scope": "markup.list", "settings": { "foreground": "#B58900" } }, { "name": "Markup Styling", "scope": ["markup.bold", "markup.italic"], "settings": { "foreground": "#D33682" } }, { "name": "Markup: Strong", "scope": "markup.bold", "settings": { "fontStyle": "bold" } }, { "name": "Markup: Emphasis", "scope": "markup.italic", "settings": { "fontStyle": "italic" } }, { "scope": "markup.strikethrough", "settings": { "fontStyle": "strikethrough" } }, { "name": "Markup Inline", "scope": "markup.inline.raw", "settings": { "fontStyle": "", "foreground": "#2AA198" } }, { "name": "Markup Headings", "scope": "markup.heading", "settings": { "fontStyle": "bold", "foreground": "#268BD2" } }, { "name": "Markup Setext Header", "scope": "markup.heading.setext", "settings": { "fontStyle": "", "foreground": "#268BD2" } } ], "colors": { "focusBorder": "#D3AF86", "input.background": "#DDD6C1", "input.foreground": "#586E75", "input.placeholderForeground": "#586E75AA", "inputOption.activeBorder": "#D3AF86", "badge.background": "#B58900AA", "progressBar.background": "#B58900", "dropdown.background": "#EEE8D5", "dropdown.border": "#D3AF86", "button.background": "#AC9D57", "selection.background": "#878b9180", "list.activeSelectionBackground": "#DFCA88", "list.activeSelectionForeground": "#6C6C6C", "quickInputList.focusBackground": "#DFCA8866", "list.hoverBackground": "#DFCA8844", "list.inactiveSelectionBackground": "#D1CBB8", "list.highlightForeground": "#B58900", "editor.background": "#FDF6E3", "editor.foreground": "#657B83", "notebook.cellEditorBackground": "#F7F0E0", "editorWidget.background": "#EEE8D5", "editorCursor.foreground": "#657B83", "editorWhitespace.foreground": "#586E7580", "editor.lineHighlightBackground": "#EEE8D5", "editor.selectionBackground": "#EEE8D5", "minimap.selectionHighlight": "#EEE8D5", "editorIndentGuide.background": "#586E7580", "editorIndentGuide.activeBackground": "#081E2580", "editorHoverWidget.background": "#CCC4B0", "editorLineNumber.activeForeground": "#567983", "peekViewResult.background": "#EEE8D5", "peekViewEditor.background": "#FFFBF2", "peekViewTitle.background": "#EEE8D5", "peekView.border": "#B58900", "peekViewEditor.matchHighlightBackground": "#7744AA40", "titleBar.activeBackground": "#EEE8D5", "editorGroup.border": "#DDD6C1", "editorGroup.dropBackground": "#DDD6C1AA", "editorGroupHeader.tabsBackground": "#D9D2C2", "tab.border": "#DDD6C1", "tab.activeBackground": "#FDF6E3", "tab.inactiveForeground": "#586E75", "tab.inactiveBackground": "#D3CBB7", "tab.activeModifiedBorder": "#cb4b16", "tab.lastPinnedBorder": "#FDF6E3", "activityBar.background": "#DDD6C1", "activityBar.foreground": "#584c27", "activityBarBadge.background": "#B58900", "panel.border": "#DDD6C1", "sideBar.background": "#EEE8D5", "sideBarTitle.foreground": "#586E75", "statusBar.foreground": "#586E75", "statusBar.background": "#EEE8D5", "statusBar.debuggingBackground": "#EEE8D5", "statusBar.noFolderBackground": "#EEE8D5", "statusBarItem.remoteBackground": "#AC9D57", "ports.iconRunningProcessForeground": "#2AA19899", "statusBarItem.prominentBackground": "#DDD6C1", "statusBarItem.prominentHoverBackground": "#DDD6C199", "debugToolBar.background": "#DDD6C1", "debugExceptionWidget.background": "#DDD6C1", "debugExceptionWidget.border": "#AB395B", "pickerGroup.border": "#2AA19899", "pickerGroup.foreground": "#2AA19899", "extensionButton.prominentBackground": "#b58900", "extensionButton.prominentHoverBackground": "#584c27aa", "terminal.ansiBlack": "#073642", "terminal.ansiRed": "#dc322f", "terminal.ansiGreen": "#859900", "terminal.ansiYellow": "#b58900", "terminal.ansiBlue": "#268bd2", "terminal.ansiMagenta": "#d33682", "terminal.ansiCyan": "#2aa198", "terminal.ansiWhite": "#eee8d5", "terminal.ansiBrightBlack": "#002b36", "terminal.ansiBrightRed": "#cb4b16", "terminal.ansiBrightGreen": "#586e75", "terminal.ansiBrightYellow": "#657b83", "terminal.ansiBrightBlue": "#839496", "terminal.ansiBrightMagenta": "#6c71c4", "terminal.ansiBrightCyan": "#93a1a1", "terminal.ansiBrightWhite": "#fdf6e3", "terminal.background": "#FDF6E3", "walkThrough.embeddedEditorBackground": "#00000014" }, "semanticHighlighting": true } ================================================ FILE: apps/web/src/lib/shiki/themes/vitesse-dark.json ================================================ { "name": "vitesse-dark", "base": "vs-dark", "colors": { "focusBorder": "#00000000", "foreground": "#dbd7caee", "descriptionForeground": "#dedcd590", "errorForeground": "#cb7676", "textLink.foreground": "#4d9375", "textLink.activeForeground": "#4d9375", "textBlockQuote.background": "#121212", "textBlockQuote.border": "#191919", "textCodeBlock.background": "#121212", "textPreformat.foreground": "#d1d5da", "textSeparator.foreground": "#586069", "button.background": "#4d9375", "button.foreground": "#121212", "button.hoverBackground": "#4d9375", "checkbox.background": "#181818", "checkbox.border": "#2f363d", "dropdown.background": "#121212", "dropdown.border": "#191919", "dropdown.foreground": "#dbd7caee", "dropdown.listBackground": "#181818", "input.background": "#181818", "input.border": "#191919", "input.foreground": "#dbd7caee", "input.placeholderForeground": "#dedcd590", "inputOption.activeBackground": "#dedcd530", "badge.foreground": "#121212", "badge.background": "#dedcd590", "progressBar.background": "#4d9375", "titleBar.activeForeground": "#bfbaaa", "titleBar.activeBackground": "#121212", "titleBar.inactiveForeground": "#959da5", "titleBar.inactiveBackground": "#121212", "titleBar.border": "#181818", "activityBar.foreground": "#dbd7caee", "activityBar.inactiveForeground": "#dedcd530", "activityBar.background": "#121212", "activityBarBadge.foreground": "#121212", "activityBarBadge.background": "#bfbaaa", "activityBar.activeBorder": "#4d9375", "activityBar.border": "#191919", "sideBar.foreground": "#bfbaaa", "sideBar.background": "#121212", "sideBar.border": "#191919", "sideBarTitle.foreground": "#dbd7caee", "sideBarSectionHeader.foreground": "#dbd7caee", "sideBarSectionHeader.background": "#121212", "sideBarSectionHeader.border": "#191919", "list.hoverForeground": "#dbd7caee", "list.inactiveSelectionForeground": "#dbd7caee", "list.activeSelectionForeground": "#dbd7caee", "list.hoverBackground": "#181818", "list.inactiveSelectionBackground": "#181818", "list.activeSelectionBackground": "#181818", "list.inactiveFocusBackground": "#121212", "list.focusBackground": "#181818", "tree.indentGuidesStroke": "#2f363d", "notificationCenterHeader.foreground": "#959da5", "notificationCenterHeader.background": "#121212", "notifications.foreground": "#dbd7caee", "notifications.background": "#121212", "notifications.border": "#191919", "notificationsErrorIcon.foreground": "#cb7676", "notificationsWarningIcon.foreground": "#d4976c", "notificationsInfoIcon.foreground": "#6394bf", "pickerGroup.border": "#444d56", "pickerGroup.foreground": "#dbd7caee", "quickInput.background": "#121212", "quickInput.foreground": "#dbd7caee", "statusBar.foreground": "#bfbaaa", "statusBar.background": "#121212", "statusBar.border": "#191919", "statusBar.noFolderBackground": "#121212", "statusBar.debuggingBackground": "#181818", "statusBar.debuggingForeground": "#bfbaaa", "statusBarItem.prominentBackground": "#181818", "editorGroupHeader.tabsBackground": "#121212", "editorGroupHeader.tabsBorder": "#191919", "editorGroup.border": "#191919", "tab.activeForeground": "#dbd7caee", "tab.inactiveForeground": "#959da5", "tab.inactiveBackground": "#121212", "tab.activeBackground": "#121212", "tab.hoverBackground": "#181818", "tab.unfocusedHoverBackground": "#121212", "tab.border": "#191919", "tab.unfocusedActiveBorderTop": "#191919", "tab.activeBorder": "#191919", "tab.unfocusedActiveBorder": "#191919", "tab.activeBorderTop": "#dedcd590", "breadcrumb.foreground": "#959da5", "breadcrumb.focusForeground": "#dbd7caee", "breadcrumb.activeSelectionForeground": "#eeeeee15", "breadcrumbPicker.background": "#121212", "editor.foreground": "#dbd7caee", "editor.background": "#121212", "editorWidget.background": "#121212", "editor.foldBackground": "#eeeeee10", "editor.lineHighlightBackground": "#181818", "editorLineNumber.foreground": "#dedcd530", "editorLineNumber.activeForeground": "#bfbaaa", "editorIndentGuide.background": "#ffffff15", "editorIndentGuide.activeBackground": "#ffffff30", "editorWhitespace.foreground": "#ffffff15", "editor.findMatchBackground": "#e6cc7722", "editor.findMatchHighlightBackground": "#e6cc7744", "editor.inactiveSelectionBackground": "#eeeeee08", "editor.selectionBackground": "#eeeeee15", "editor.selectionHighlightBackground": "#eeeeee08", "editor.wordHighlightBackground": "#1c6b4805", "editor.wordHighlightStrongBackground": "#1c6b4810", "editorBracketMatch.background": "#4d937520", "diffEditor.insertedTextBackground": "#4d937522", "diffEditor.removedTextBackground": "#ab595922", "scrollbar.shadow": "#0008", "scrollbarSlider.background": "#dedcd510", "scrollbarSlider.hoverBackground": "#dedcd530", "scrollbarSlider.activeBackground": "#dedcd530", "editorOverviewRuler.border": "#111", "panel.background": "#121212", "panel.border": "#191919", "panelTitle.activeBorder": "#4d9375", "panelTitle.activeForeground": "#dbd7caee", "panelTitle.inactiveForeground": "#959da5", "panelInput.border": "#2f363d", "terminal.foreground": "#dbd7caee", "terminal.selectionBackground": "#eeeeee15", "terminal.ansiBrightBlack": "#777777", "terminal.ansiBrightBlue": "#6394bf", "terminal.ansiBrightCyan": "#5eaab5", "terminal.ansiBrightGreen": "#4d9375", "terminal.ansiBrightMagenta": "#d9739f", "terminal.ansiBrightRed": "#cb7676", "terminal.ansiBrightWhite": "#ffffff", "terminal.ansiBrightYellow": "#e6cc77", "terminal.ansiBlack": "#393a34", "terminal.ansiBlue": "#6394bf", "terminal.ansiCyan": "#5eaab5", "terminal.ansiGreen": "#4d9375", "terminal.ansiMagenta": "#d9739f", "terminal.ansiRed": "#cb7676", "terminal.ansiWhite": "#dbd7caee", "terminal.ansiYellow": "#e6cc77", "gitDecoration.addedResourceForeground": "#4d9375", "gitDecoration.modifiedResourceForeground": "#6394bf", "gitDecoration.deletedResourceForeground": "#cb7676", "gitDecoration.untrackedResourceForeground": "#5eaab5", "gitDecoration.ignoredResourceForeground": "#dedcd530", "gitDecoration.conflictingResourceForeground": "#d4976c", "gitDecoration.submoduleResourceForeground": "#dedcd590", "editorGutter.modifiedBackground": "#6394bf", "editorGutter.addedBackground": "#4d9375", "editorGutter.deletedBackground": "#cb7676", "editorBracketHighlight.foreground1": "#5eaab5", "editorBracketHighlight.foreground2": "#4d9375", "editorBracketHighlight.foreground3": "#d4976c", "editorBracketHighlight.foreground4": "#d9739f", "editorBracketHighlight.foreground5": "#e6cc77", "editorBracketHighlight.foreground6": "#6394bf", "debugToolBar.background": "#121212", "editor.stackFrameHighlightBackground": "#a707", "editor.focusedStackFrameHighlightBackground": "#b808", "peekViewEditor.matchHighlightBackground": "#ffd33d33", "peekViewResult.matchHighlightBackground": "#ffd33d33", "peekViewEditor.background": "#121212", "peekViewResult.background": "#121212", "settings.headerForeground": "#dbd7caee", "settings.modifiedItemIndicator": "#4d9375", "welcomePage.buttonBackground": "#2f363d", "welcomePage.buttonHoverBackground": "#444d56", "problemsErrorIcon.foreground": "#cb7676", "problemsWarningIcon.foreground": "#d4976c", "problemsInfoIcon.foreground": "#6394bf", "editorError.foreground": "#cb7676", "editorWarning.foreground": "#d4976c", "editorInfo.foreground": "#6394bf", "editorHint.foreground": "#4d9375", "editorGutter.commentRangeForeground": "#dedcd530", "editorGutter.foldingControlForeground": "#dedcd590", "editorInlayHint.foreground": "#666666", "editorInlayHint.background": "#00000000" }, "semanticHighlighting": true, "semanticTokenColors": { "namespace": "#db889a", "property": "#b8a965", "interface": "#5DA994", "type": "#5DA994", "class": "#6893BF" }, "tokenColors": [ { "scope": ["comment", "punctuation.definition.comment", "string.comment"], "settings": { "foreground": "#758575dd" } }, { "scope": [ "delimiter.bracket", "delimiter", "invalid.illegal.character-not-allowed-here.html", "keyword.operator.assignment", "keyword.operator.assignment", "keyword.operator.rest", "keyword.operator.spread", "keyword.operator.type.annotation", "meta.brace", "meta.tag.block.any.html", "meta.tag.inline.any.html", "meta.tag.structure.input.void.html", "meta.type.annotation", "storage.type.function.arrow", "keyword.operator.type", "punctuation" ], "settings": { "foreground": "#666666" } }, { "scope": [ "constant", "entity.name.constant", "variable.language", "meta.definition.variable" ], "settings": { "foreground": "#c99076" } }, { "scope": ["entity", "entity.name"], "settings": { "foreground": "#80a665" } }, { "scope": "variable.parameter.function", "settings": { "foreground": "#dbd7caee" } }, { "scope": ["entity.name.tag", "tag.html"], "settings": { "foreground": "#4d9375" } }, { "scope": "entity.name.function", "settings": { "foreground": "#80a665" } }, { "scope": ["keyword", "storage.type.class.jsdoc"], "settings": { "foreground": "#4d9375" } }, { "scope": [ "storage", "storage.type", "support.type.builtin", "constant.language.undefined", "constant.language.null" ], "settings": { "foreground": "#cb7676" } }, { "scope": [ "storage.modifier.package", "storage.modifier.import", "storage.type.java" ], "settings": { "foreground": "#dbd7caee" } }, { "scope": [ "string", "string punctuation.section.embedded source", "attribute.value" ], "settings": { "foreground": "#c98a7d" } }, { "scope": ["punctuation.definition.string"], "settings": { "foreground": "#c98a7daa" } }, { "scope": ["punctuation.support.type.property-name"], "settings": { "foreground": "#b8a965aa" } }, { "scope": "support", "settings": { "foreground": "#b8a965" } }, { "scope": [ "property", "meta.property-name", "meta.object-literal.key", "entity.name.tag.yaml", "attribute.name" ], "settings": { "foreground": "#b8a965" } }, { "scope": [ "entity.other.attribute-name", "invalid.deprecated.entity.other.attribute-name.html" ], "settings": { "foreground": "#bd976a" } }, { "scope": ["variable", "identifier"], "settings": { "foreground": "#bd976a" } }, { "scope": ["support.type.primitive", "entity.name.type"], "settings": { "foreground": "#5da9a7" } }, { "scope": "namespace", "settings": { "foreground": "#db889a" } }, { "scope": ["keyword.operator", "meta.var.expr.ts"], "settings": { "foreground": "#cb7676" } }, { "scope": "invalid.broken", "settings": { "fontStyle": "italic", "foreground": "#fdaeb7" } }, { "scope": "invalid.deprecated", "settings": { "fontStyle": "italic", "foreground": "#fdaeb7" } }, { "scope": "invalid.illegal", "settings": { "fontStyle": "italic", "foreground": "#fdaeb7" } }, { "scope": "invalid.unimplemented", "settings": { "fontStyle": "italic", "foreground": "#fdaeb7" } }, { "scope": "carriage-return", "settings": { "fontStyle": "italic underline", "background": "#f97583", "foreground": "#24292e", "content": "^M" } }, { "scope": "message.error", "settings": { "foreground": "#fdaeb7" } }, { "scope": "string source", "settings": { "foreground": "#dbd7caee" } }, { "scope": "string variable", "settings": { "foreground": "#c98a7d" } }, { "scope": ["source.regexp", "string.regexp"], "settings": { "foreground": "#c4704f" } }, { "scope": [ "string.regexp.character-class", "string.regexp constant.character.escape", "string.regexp source.ruby.embedded", "string.regexp string.regexp.arbitrary-repitition" ], "settings": { "foreground": "#c98a7d" } }, { "scope": "string.regexp constant.character.escape", "settings": { "foreground": "#e6cc77" } }, { "scope": ["support.constant"], "settings": { "foreground": "#c99076" } }, { "scope": ["constant.numeric", "number"], "settings": { "foreground": "#4C9A91" } }, { "scope": ["keyword.other.unit"], "settings": { "foreground": "#cb7676" } }, { "scope": ["constant.language.boolean", "constant.language"], "settings": { "foreground": "#4d9375" } }, { "scope": "meta.module-reference", "settings": { "foreground": "#4d9375" } }, { "scope": "punctuation.definition.list.begin.markdown", "settings": { "foreground": "#d4976c" } }, { "scope": ["markup.heading", "markup.heading entity.name"], "settings": { "fontStyle": "bold", "foreground": "#4d9375" } }, { "scope": "markup.quote", "settings": { "foreground": "#5DA994" } }, { "scope": "markup.italic", "settings": { "fontStyle": "italic", "foreground": "#dbd7caee" } }, { "scope": "markup.bold", "settings": { "fontStyle": "bold", "foreground": "#dbd7caee" } }, { "scope": "markup.raw", "settings": { "foreground": "#4d9375" } }, { "scope": [ "markup.deleted", "meta.diff.header.from-file", "punctuation.definition.deleted" ], "settings": { "background": "#86181d", "foreground": "#fdaeb7" } }, { "scope": [ "markup.inserted", "meta.diff.header.to-file", "punctuation.definition.inserted" ], "settings": { "background": "#144620", "foreground": "#85e89d" } }, { "scope": ["markup.changed", "punctuation.definition.changed"], "settings": { "background": "#c24e00", "foreground": "#ffab70" } }, { "scope": ["markup.ignored", "markup.untracked"], "settings": { "foreground": "#2f363d", "background": "#79b8ff" } }, { "scope": "meta.diff.range", "settings": { "foreground": "#b392f0", "fontStyle": "bold" } }, { "scope": "meta.diff.header", "settings": { "foreground": "#79b8ff" } }, { "scope": "meta.separator", "settings": { "fontStyle": "bold", "foreground": "#79b8ff" } }, { "scope": "meta.output", "settings": { "foreground": "#79b8ff" } }, { "scope": [ "brackethighlighter.tag", "brackethighlighter.curly", "brackethighlighter.round", "brackethighlighter.square", "brackethighlighter.angle", "brackethighlighter.quote" ], "settings": { "foreground": "#d1d5da" } }, { "scope": "brackethighlighter.unmatched", "settings": { "foreground": "#fdaeb7" } }, { "scope": [ "constant.other.reference.link", "string.other.link", "punctuation.definition.string.begin.markdown", "punctuation.definition.string.end.markdown" ], "settings": { "foreground": "#c98a7d" } }, { "scope": ["markup.underline.link.markdown"], "settings": { "foreground": "#dedcd590", "fontStyle": "underline" } }, { "scope": ["type.identifier"], "settings": { "foreground": "#6893BF" } }, { "scope": ["entity.other.attribute-name.html.vue"], "settings": { "foreground": "#80a665" } }, { "scope": ["invalid.illegal.unrecognized-tag.html"], "settings": { "fontStyle": "normal" } } ], "rules": [ { "token": "comment", "foreground": "758575dd" }, { "token": "punctuation.definition.comment", "foreground": "758575dd" }, { "token": "string.comment", "foreground": "758575dd" }, { "token": "delimiter.bracket", "foreground": "666666" }, { "token": "delimiter", "foreground": "666666" }, { "token": "invalid.illegal.character-not-allowed-here.html", "foreground": "666666" }, { "token": "keyword.operator.assignment", "foreground": "666666" }, { "token": "keyword.operator.assignment", "foreground": "666666" }, { "token": "keyword.operator.rest", "foreground": "666666" }, { "token": "keyword.operator.spread", "foreground": "666666" }, { "token": "keyword.operator.type.annotation", "foreground": "666666" }, { "token": "meta.brace", "foreground": "666666" }, { "token": "meta.tag.block.any.html", "foreground": "666666" }, { "token": "meta.tag.inline.any.html", "foreground": "666666" }, { "token": "meta.tag.structure.input.void.html", "foreground": "666666" }, { "token": "meta.type.annotation", "foreground": "666666" }, { "token": "storage.type.function.arrow", "foreground": "666666" }, { "token": "keyword.operator.type", "foreground": "666666" }, { "token": "punctuation", "foreground": "666666" }, { "token": "constant", "foreground": "c99076" }, { "token": "entity.name.constant", "foreground": "c99076" }, { "token": "variable.language", "foreground": "c99076" }, { "token": "meta.definition.variable", "foreground": "c99076" }, { "token": "entity", "foreground": "80a665" }, { "token": "entity.name", "foreground": "80a665" }, { "token": "variable.parameter.function", "foreground": "dbd7caee" }, { "token": "entity.name.tag", "foreground": "4d9375" }, { "token": "tag.html", "foreground": "4d9375" }, { "token": "entity.name.function", "foreground": "80a665" }, { "token": "keyword", "foreground": "4d9375" }, { "token": "storage.type.class.jsdoc", "foreground": "4d9375" }, { "token": "storage", "foreground": "cb7676" }, { "token": "storage.type", "foreground": "cb7676" }, { "token": "support.type.builtin", "foreground": "cb7676" }, { "token": "constant.language.undefined", "foreground": "cb7676" }, { "token": "constant.language.null", "foreground": "cb7676" }, { "token": "storage.modifier.package", "foreground": "dbd7caee" }, { "token": "storage.modifier.import", "foreground": "dbd7caee" }, { "token": "storage.type.java", "foreground": "dbd7caee" }, { "token": "string", "foreground": "c98a7d" }, { "token": "string punctuation.section.embedded source", "foreground": "c98a7d" }, { "token": "attribute.value", "foreground": "c98a7d" }, { "token": "punctuation.definition.string", "foreground": "c98a7daa" }, { "token": "punctuation.support.type.property-name", "foreground": "b8a965aa" }, { "token": "support", "foreground": "b8a965" }, { "token": "property", "foreground": "b8a965" }, { "token": "meta.property-name", "foreground": "b8a965" }, { "token": "meta.object-literal.key", "foreground": "b8a965" }, { "token": "entity.name.tag.yaml", "foreground": "b8a965" }, { "token": "attribute.name", "foreground": "b8a965" }, { "token": "entity.other.attribute-name", "foreground": "bd976a" }, { "token": "invalid.deprecated.entity.other.attribute-name.html", "foreground": "bd976a" }, { "token": "variable", "foreground": "bd976a" }, { "token": "identifier", "foreground": "bd976a" }, { "token": "support.type.primitive", "foreground": "5da9a7" }, { "token": "entity.name.type", "foreground": "5da9a7" }, { "token": "namespace", "foreground": "db889a" }, { "token": "keyword.operator", "foreground": "cb7676" }, { "token": "meta.var.expr.ts", "foreground": "cb7676" }, { "token": "invalid.broken", "foreground": "fdaeb7" }, { "token": "invalid.deprecated", "foreground": "fdaeb7" }, { "token": "invalid.illegal", "foreground": "fdaeb7" }, { "token": "invalid.unimplemented", "foreground": "fdaeb7" }, { "token": "carriage-return", "foreground": "24292e" }, { "token": "message.error", "foreground": "fdaeb7" }, { "token": "string source", "foreground": "dbd7caee" }, { "token": "string variable", "foreground": "c98a7d" }, { "token": "source.regexp", "foreground": "c4704f" }, { "token": "string.regexp", "foreground": "c4704f" }, { "token": "string.regexp.character-class", "foreground": "c98a7d" }, { "token": "string.regexp constant.character.escape", "foreground": "c98a7d" }, { "token": "string.regexp source.ruby.embedded", "foreground": "c98a7d" }, { "token": "string.regexp string.regexp.arbitrary-repitition", "foreground": "c98a7d" }, { "token": "string.regexp constant.character.escape", "foreground": "e6cc77" }, { "token": "support.constant", "foreground": "c99076" }, { "token": "constant.numeric", "foreground": "4C9A91" }, { "token": "number", "foreground": "4C9A91" }, { "token": "keyword.other.unit", "foreground": "cb7676" }, { "token": "constant.language.boolean", "foreground": "4d9375" }, { "token": "constant.language", "foreground": "4d9375" }, { "token": "meta.module-reference", "foreground": "4d9375" }, { "token": "punctuation.definition.list.begin.markdown", "foreground": "d4976c" }, { "token": "markup.heading", "foreground": "4d9375" }, { "token": "markup.heading entity.name", "foreground": "4d9375" }, { "token": "markup.quote", "foreground": "5DA994" }, { "token": "markup.italic", "foreground": "dbd7caee" }, { "token": "markup.bold", "foreground": "dbd7caee" }, { "token": "markup.raw", "foreground": "4d9375" }, { "token": "markup.deleted", "foreground": "fdaeb7" }, { "token": "meta.diff.header.from-file", "foreground": "fdaeb7" }, { "token": "punctuation.definition.deleted", "foreground": "fdaeb7" }, { "token": "markup.inserted", "foreground": "85e89d" }, { "token": "meta.diff.header.to-file", "foreground": "85e89d" }, { "token": "punctuation.definition.inserted", "foreground": "85e89d" }, { "token": "markup.changed", "foreground": "ffab70" }, { "token": "punctuation.definition.changed", "foreground": "ffab70" }, { "token": "markup.ignored", "foreground": "2f363d" }, { "token": "markup.untracked", "foreground": "2f363d" }, { "token": "meta.diff.range", "foreground": "b392f0" }, { "token": "meta.diff.header", "foreground": "79b8ff" }, { "token": "meta.separator", "foreground": "79b8ff" }, { "token": "meta.output", "foreground": "79b8ff" }, { "token": "brackethighlighter.tag", "foreground": "d1d5da" }, { "token": "brackethighlighter.curly", "foreground": "d1d5da" }, { "token": "brackethighlighter.round", "foreground": "d1d5da" }, { "token": "brackethighlighter.square", "foreground": "d1d5da" }, { "token": "brackethighlighter.angle", "foreground": "d1d5da" }, { "token": "brackethighlighter.quote", "foreground": "d1d5da" }, { "token": "brackethighlighter.unmatched", "foreground": "fdaeb7" }, { "token": "constant.other.reference.link", "foreground": "c98a7d" }, { "token": "string.other.link", "foreground": "c98a7d" }, { "token": "punctuation.definition.string.begin.markdown", "foreground": "c98a7d" }, { "token": "punctuation.definition.string.end.markdown", "foreground": "c98a7d" }, { "token": "markup.underline.link.markdown", "foreground": "dedcd590" }, { "token": "type.identifier", "foreground": "6893BF" }, { "token": "entity.other.attribute-name.html.vue", "foreground": "80a665" }, { "token": "invalid.illegal.unrecognized-tag.html" } ] } ================================================ FILE: apps/web/src/lib/shiki/themes/vitesse-light.json ================================================ { "name": "vitesse-light", "base": "vs", "colors": { "focusBorder": "#00000000", "foreground": "#393a34", "descriptionForeground": "#393a3490", "errorForeground": "#ab5959", "textLink.foreground": "#1c6b48", "textLink.activeForeground": "#1c6b48", "textBlockQuote.background": "#ffffff", "textBlockQuote.border": "#f0f0f0", "textCodeBlock.background": "#ffffff", "textPreformat.foreground": "#586069", "textSeparator.foreground": "#d1d5da", "button.background": "#1c6b48", "button.foreground": "#ffffff", "button.hoverBackground": "#1c6b48", "checkbox.background": "#f5f5f5", "checkbox.border": "#d1d5da", "dropdown.background": "#ffffff", "dropdown.border": "#f0f0f0", "dropdown.foreground": "#393a34", "dropdown.listBackground": "#f5f5f5", "input.background": "#f5f5f5", "input.border": "#f0f0f0", "input.foreground": "#393a34", "input.placeholderForeground": "#393a3490", "inputOption.activeBackground": "#393a3450", "badge.foreground": "#ffffff", "badge.background": "#393a3490", "progressBar.background": "#1c6b48", "titleBar.activeForeground": "#4e4f47", "titleBar.activeBackground": "#ffffff", "titleBar.inactiveForeground": "#6a737d", "titleBar.inactiveBackground": "#ffffff", "titleBar.border": "#f5f5f5", "activityBar.foreground": "#393a34", "activityBar.inactiveForeground": "#393a3450", "activityBar.background": "#ffffff", "activityBarBadge.foreground": "#ffffff", "activityBarBadge.background": "#4e4f47", "activityBar.activeBorder": "#1c6b48", "activityBar.border": "#f0f0f0", "sideBar.foreground": "#4e4f47", "sideBar.background": "#ffffff", "sideBar.border": "#f0f0f0", "sideBarTitle.foreground": "#393a34", "sideBarSectionHeader.foreground": "#393a34", "sideBarSectionHeader.background": "#ffffff", "sideBarSectionHeader.border": "#f0f0f0", "list.hoverForeground": "#393a34", "list.inactiveSelectionForeground": "#393a34", "list.activeSelectionForeground": "#393a34", "list.hoverBackground": "#f5f5f5", "list.inactiveSelectionBackground": "#f5f5f5", "list.activeSelectionBackground": "#f5f5f5", "list.inactiveFocusBackground": "#ffffff", "list.focusBackground": "#f5f5f5", "tree.indentGuidesStroke": "#e1e4e8", "notificationCenterHeader.foreground": "#6a737d", "notificationCenterHeader.background": "#ffffff", "notifications.foreground": "#393a34", "notifications.background": "#ffffff", "notifications.border": "#f0f0f0", "notificationsErrorIcon.foreground": "#ab5959", "notificationsWarningIcon.foreground": "#a65e2b", "notificationsInfoIcon.foreground": "#296aa3", "pickerGroup.border": "#e1e4e8", "pickerGroup.foreground": "#393a34", "quickInput.background": "#ffffff", "quickInput.foreground": "#393a34", "statusBar.foreground": "#4e4f47", "statusBar.background": "#ffffff", "statusBar.border": "#f0f0f0", "statusBar.noFolderBackground": "#ffffff", "statusBar.debuggingBackground": "#f5f5f5", "statusBar.debuggingForeground": "#4e4f47", "statusBarItem.prominentBackground": "#f5f5f5", "editorGroupHeader.tabsBackground": "#ffffff", "editorGroupHeader.tabsBorder": "#f0f0f0", "editorGroup.border": "#f0f0f0", "tab.activeForeground": "#393a34", "tab.inactiveForeground": "#6a737d", "tab.inactiveBackground": "#ffffff", "tab.activeBackground": "#ffffff", "tab.hoverBackground": "#f5f5f5", "tab.unfocusedHoverBackground": "#ffffff", "tab.border": "#f0f0f0", "tab.unfocusedActiveBorderTop": "#f0f0f0", "tab.activeBorder": "#f0f0f0", "tab.unfocusedActiveBorder": "#f0f0f0", "tab.activeBorderTop": "#393a3490", "breadcrumb.foreground": "#6a737d", "breadcrumb.focusForeground": "#393a34", "breadcrumb.activeSelectionForeground": "#22222215", "breadcrumbPicker.background": "#ffffff", "editor.foreground": "#393a34", "editor.background": "#ffffff", "editorWidget.background": "#ffffff", "editor.foldBackground": "#22222210", "editor.lineHighlightBackground": "#f5f5f5", "editorLineNumber.foreground": "#393a3450", "editorLineNumber.activeForeground": "#4e4f47", "editorIndentGuide.background": "#00000015", "editorIndentGuide.activeBackground": "#00000030", "editorWhitespace.foreground": "#00000015", "editor.findMatchBackground": "#e6cc7744", "editor.findMatchHighlightBackground": "#e6cc7766", "editor.inactiveSelectionBackground": "#22222208", "editor.selectionBackground": "#22222215", "editor.selectionHighlightBackground": "#22222208", "editor.wordHighlightBackground": "#1c6b4805", "editor.wordHighlightStrongBackground": "#1c6b4810", "editorBracketMatch.background": "#1c6b4820", "diffEditor.insertedTextBackground": "#1c6b4815", "diffEditor.removedTextBackground": "#ab595910", "scrollbar.shadow": "#6a737d33", "scrollbarSlider.background": "#393a3410", "scrollbarSlider.hoverBackground": "#393a3450", "scrollbarSlider.activeBackground": "#393a3450", "editorOverviewRuler.border": "#fff", "panel.background": "#ffffff", "panel.border": "#f0f0f0", "panelTitle.activeBorder": "#1c6b48", "panelTitle.activeForeground": "#393a34", "panelTitle.inactiveForeground": "#6a737d", "panelInput.border": "#e1e4e8", "terminal.foreground": "#393a34", "terminal.selectionBackground": "#22222215", "terminal.ansiBrightBlack": "#aaaaaa", "terminal.ansiBrightBlue": "#296aa3", "terminal.ansiBrightCyan": "#2993a3", "terminal.ansiBrightGreen": "#1e754f", "terminal.ansiBrightMagenta": "#a13865", "terminal.ansiBrightRed": "#ab5959", "terminal.ansiBrightWhite": "#dddddd", "terminal.ansiBrightYellow": "#bda437", "terminal.ansiBlack": "#121212", "terminal.ansiBlue": "#296aa3", "terminal.ansiCyan": "#2993a3", "terminal.ansiGreen": "#1e754f", "terminal.ansiMagenta": "#a13865", "terminal.ansiRed": "#ab5959", "terminal.ansiWhite": "#dbd7caee", "terminal.ansiYellow": "#bda437", "gitDecoration.addedResourceForeground": "#1e754f", "gitDecoration.modifiedResourceForeground": "#296aa3", "gitDecoration.deletedResourceForeground": "#ab5959", "gitDecoration.untrackedResourceForeground": "#2993a3", "gitDecoration.ignoredResourceForeground": "#393a3450", "gitDecoration.conflictingResourceForeground": "#a65e2b", "gitDecoration.submoduleResourceForeground": "#393a3490", "editorGutter.modifiedBackground": "#296aa3", "editorGutter.addedBackground": "#1e754f", "editorGutter.deletedBackground": "#ab5959", "editorBracketHighlight.foreground1": "#2993a3", "editorBracketHighlight.foreground2": "#1e754f", "editorBracketHighlight.foreground3": "#a65e2b", "editorBracketHighlight.foreground4": "#a13865", "editorBracketHighlight.foreground5": "#bda437", "editorBracketHighlight.foreground6": "#296aa3", "debugToolBar.background": "#ffffff", "editor.stackFrameHighlightBackground": "#fffbdd", "editor.focusedStackFrameHighlightBackground": "#fff5b1", "peekViewEditor.background": "#ffffff", "peekViewResult.background": "#ffffff", "settings.headerForeground": "#393a34", "settings.modifiedItemIndicator": "#1c6b48", "welcomePage.buttonBackground": "#f6f8fa", "welcomePage.buttonHoverBackground": "#e1e4e8", "problemsErrorIcon.foreground": "#ab5959", "problemsWarningIcon.foreground": "#a65e2b", "problemsInfoIcon.foreground": "#296aa3", "editorError.foreground": "#ab5959", "editorWarning.foreground": "#a65e2b", "editorInfo.foreground": "#296aa3", "editorHint.foreground": "#1e754f", "editorGutter.commentRangeForeground": "#393a3450", "editorGutter.foldingControlForeground": "#393a3490", "editorInlayHint.foreground": "#999999", "editorInlayHint.background": "#00000000" }, "semanticHighlighting": true, "semanticTokenColors": { "namespace": "#b05a78", "property": "#998418", "interface": "#2e8f82", "type": "#2e8f82", "class": "#5a6aa6" }, "tokenColors": [ { "scope": ["comment", "punctuation.definition.comment", "string.comment"], "settings": { "foreground": "#a0ada0" } }, { "scope": [ "delimiter.bracket", "delimiter", "invalid.illegal.character-not-allowed-here.html", "keyword.operator.assignment", "keyword.operator.assignment", "keyword.operator.rest", "keyword.operator.spread", "keyword.operator.type.annotation", "meta.brace", "meta.tag.block.any.html", "meta.tag.inline.any.html", "meta.tag.structure.input.void.html", "meta.type.annotation", "storage.type.function.arrow", "keyword.operator.type", "punctuation" ], "settings": { "foreground": "#999999" } }, { "scope": [ "constant", "entity.name.constant", "variable.language", "meta.definition.variable" ], "settings": { "foreground": "#a65e2b" } }, { "scope": ["entity", "entity.name"], "settings": { "foreground": "#59873a" } }, { "scope": "variable.parameter.function", "settings": { "foreground": "#393a34" } }, { "scope": ["entity.name.tag", "tag.html"], "settings": { "foreground": "#1e754f" } }, { "scope": "entity.name.function", "settings": { "foreground": "#59873a" } }, { "scope": ["keyword", "storage.type.class.jsdoc"], "settings": { "foreground": "#1e754f" } }, { "scope": [ "storage", "storage.type", "support.type.builtin", "constant.language.undefined", "constant.language.null" ], "settings": { "foreground": "#ab5959" } }, { "scope": [ "storage.modifier.package", "storage.modifier.import", "storage.type.java" ], "settings": { "foreground": "#393a34" } }, { "scope": [ "string", "string punctuation.section.embedded source", "attribute.value" ], "settings": { "foreground": "#b56959" } }, { "scope": ["punctuation.definition.string"], "settings": { "foreground": "#b56959aa" } }, { "scope": ["punctuation.support.type.property-name"], "settings": { "foreground": "#998418aa" } }, { "scope": "support", "settings": { "foreground": "#998418" } }, { "scope": [ "property", "meta.property-name", "meta.object-literal.key", "entity.name.tag.yaml", "attribute.name" ], "settings": { "foreground": "#998418" } }, { "scope": [ "entity.other.attribute-name", "invalid.deprecated.entity.other.attribute-name.html" ], "settings": { "foreground": "#b07d48" } }, { "scope": ["variable", "identifier"], "settings": { "foreground": "#b07d48" } }, { "scope": ["support.type.primitive", "entity.name.type"], "settings": { "foreground": "#2e808f" } }, { "scope": "namespace", "settings": { "foreground": "#b05a78" } }, { "scope": ["keyword.operator", "meta.var.expr.ts"], "settings": { "foreground": "#ab5959" } }, { "scope": "invalid.broken", "settings": { "fontStyle": "italic", "foreground": "#b31d28" } }, { "scope": "invalid.deprecated", "settings": { "fontStyle": "italic", "foreground": "#b31d28" } }, { "scope": "invalid.illegal", "settings": { "fontStyle": "italic", "foreground": "#b31d28" } }, { "scope": "invalid.unimplemented", "settings": { "fontStyle": "italic", "foreground": "#b31d28" } }, { "scope": "carriage-return", "settings": { "fontStyle": "italic underline", "background": "#d73a49", "foreground": "#fafbfc", "content": "^M" } }, { "scope": "message.error", "settings": { "foreground": "#b31d28" } }, { "scope": "string source", "settings": { "foreground": "#393a34" } }, { "scope": "string variable", "settings": { "foreground": "#b56959" } }, { "scope": ["source.regexp", "string.regexp"], "settings": { "foreground": "#ab5e3f" } }, { "scope": [ "string.regexp.character-class", "string.regexp constant.character.escape", "string.regexp source.ruby.embedded", "string.regexp string.regexp.arbitrary-repitition" ], "settings": { "foreground": "#b56959" } }, { "scope": "string.regexp constant.character.escape", "settings": { "foreground": "#bda437" } }, { "scope": ["support.constant"], "settings": { "foreground": "#a65e2b" } }, { "scope": ["constant.numeric", "number"], "settings": { "foreground": "#2f798a" } }, { "scope": ["keyword.other.unit"], "settings": { "foreground": "#ab5959" } }, { "scope": ["constant.language.boolean", "constant.language"], "settings": { "foreground": "#1e754f" } }, { "scope": "meta.module-reference", "settings": { "foreground": "#1c6b48" } }, { "scope": "punctuation.definition.list.begin.markdown", "settings": { "foreground": "#a65e2b" } }, { "scope": ["markup.heading", "markup.heading entity.name"], "settings": { "fontStyle": "bold", "foreground": "#1c6b48" } }, { "scope": "markup.quote", "settings": { "foreground": "#2e8f82" } }, { "scope": "markup.italic", "settings": { "fontStyle": "italic", "foreground": "#393a34" } }, { "scope": "markup.bold", "settings": { "fontStyle": "bold", "foreground": "#393a34" } }, { "scope": "markup.raw", "settings": { "foreground": "#1c6b48" } }, { "scope": [ "markup.deleted", "meta.diff.header.from-file", "punctuation.definition.deleted" ], "settings": { "background": "#ffeef0", "foreground": "#b31d28" } }, { "scope": [ "markup.inserted", "meta.diff.header.to-file", "punctuation.definition.inserted" ], "settings": { "background": "#f0fff4", "foreground": "#22863a" } }, { "scope": ["markup.changed", "punctuation.definition.changed"], "settings": { "background": "#ffebda", "foreground": "#e36209" } }, { "scope": ["markup.ignored", "markup.untracked"], "settings": { "foreground": "#f6f8fa", "background": "#005cc5" } }, { "scope": "meta.diff.range", "settings": { "foreground": "#6f42c1", "fontStyle": "bold" } }, { "scope": "meta.diff.header", "settings": { "foreground": "#005cc5" } }, { "scope": "meta.separator", "settings": { "fontStyle": "bold", "foreground": "#005cc5" } }, { "scope": "meta.output", "settings": { "foreground": "#005cc5" } }, { "scope": [ "brackethighlighter.tag", "brackethighlighter.curly", "brackethighlighter.round", "brackethighlighter.square", "brackethighlighter.angle", "brackethighlighter.quote" ], "settings": { "foreground": "#586069" } }, { "scope": "brackethighlighter.unmatched", "settings": { "foreground": "#b31d28" } }, { "scope": [ "constant.other.reference.link", "string.other.link", "punctuation.definition.string.begin.markdown", "punctuation.definition.string.end.markdown" ], "settings": { "foreground": "#b56959" } }, { "scope": ["markup.underline.link.markdown"], "settings": { "foreground": "#393a3490", "fontStyle": "underline" } }, { "scope": ["type.identifier"], "settings": { "foreground": "#5a6aa6" } }, { "scope": ["entity.other.attribute-name.html.vue"], "settings": { "foreground": "#59873a" } }, { "scope": ["invalid.illegal.unrecognized-tag.html"], "settings": { "fontStyle": "normal" } } ], "rules": [ { "token": "comment", "foreground": "a0ada0" }, { "token": "punctuation.definition.comment", "foreground": "a0ada0" }, { "token": "string.comment", "foreground": "a0ada0" }, { "token": "delimiter.bracket", "foreground": "999999" }, { "token": "delimiter", "foreground": "999999" }, { "token": "invalid.illegal.character-not-allowed-here.html", "foreground": "999999" }, { "token": "keyword.operator.assignment", "foreground": "999999" }, { "token": "keyword.operator.assignment", "foreground": "999999" }, { "token": "keyword.operator.rest", "foreground": "999999" }, { "token": "keyword.operator.spread", "foreground": "999999" }, { "token": "keyword.operator.type.annotation", "foreground": "999999" }, { "token": "meta.brace", "foreground": "999999" }, { "token": "meta.tag.block.any.html", "foreground": "999999" }, { "token": "meta.tag.inline.any.html", "foreground": "999999" }, { "token": "meta.tag.structure.input.void.html", "foreground": "999999" }, { "token": "meta.type.annotation", "foreground": "999999" }, { "token": "storage.type.function.arrow", "foreground": "999999" }, { "token": "keyword.operator.type", "foreground": "999999" }, { "token": "punctuation", "foreground": "999999" }, { "token": "constant", "foreground": "a65e2b" }, { "token": "entity.name.constant", "foreground": "a65e2b" }, { "token": "variable.language", "foreground": "a65e2b" }, { "token": "meta.definition.variable", "foreground": "a65e2b" }, { "token": "entity", "foreground": "59873a" }, { "token": "entity.name", "foreground": "59873a" }, { "token": "variable.parameter.function", "foreground": "393a34" }, { "token": "entity.name.tag", "foreground": "1e754f" }, { "token": "tag.html", "foreground": "1e754f" }, { "token": "entity.name.function", "foreground": "59873a" }, { "token": "keyword", "foreground": "1e754f" }, { "token": "storage.type.class.jsdoc", "foreground": "1e754f" }, { "token": "storage", "foreground": "ab5959" }, { "token": "storage.type", "foreground": "ab5959" }, { "token": "support.type.builtin", "foreground": "ab5959" }, { "token": "constant.language.undefined", "foreground": "ab5959" }, { "token": "constant.language.null", "foreground": "ab5959" }, { "token": "storage.modifier.package", "foreground": "393a34" }, { "token": "storage.modifier.import", "foreground": "393a34" }, { "token": "storage.type.java", "foreground": "393a34" }, { "token": "string", "foreground": "b56959" }, { "token": "string punctuation.section.embedded source", "foreground": "b56959" }, { "token": "attribute.value", "foreground": "b56959" }, { "token": "punctuation.definition.string", "foreground": "b56959aa" }, { "token": "punctuation.support.type.property-name", "foreground": "998418aa" }, { "token": "support", "foreground": "998418" }, { "token": "property", "foreground": "998418" }, { "token": "meta.property-name", "foreground": "998418" }, { "token": "meta.object-literal.key", "foreground": "998418" }, { "token": "entity.name.tag.yaml", "foreground": "998418" }, { "token": "attribute.name", "foreground": "998418" }, { "token": "entity.other.attribute-name", "foreground": "b07d48" }, { "token": "invalid.deprecated.entity.other.attribute-name.html", "foreground": "b07d48" }, { "token": "variable", "foreground": "b07d48" }, { "token": "identifier", "foreground": "b07d48" }, { "token": "support.type.primitive", "foreground": "2e808f" }, { "token": "entity.name.type", "foreground": "2e808f" }, { "token": "namespace", "foreground": "b05a78" }, { "token": "keyword.operator", "foreground": "ab5959" }, { "token": "meta.var.expr.ts", "foreground": "ab5959" }, { "token": "invalid.broken", "foreground": "b31d28" }, { "token": "invalid.deprecated", "foreground": "b31d28" }, { "token": "invalid.illegal", "foreground": "b31d28" }, { "token": "invalid.unimplemented", "foreground": "b31d28" }, { "token": "carriage-return", "foreground": "fafbfc" }, { "token": "message.error", "foreground": "b31d28" }, { "token": "string source", "foreground": "393a34" }, { "token": "string variable", "foreground": "b56959" }, { "token": "source.regexp", "foreground": "ab5e3f" }, { "token": "string.regexp", "foreground": "ab5e3f" }, { "token": "string.regexp.character-class", "foreground": "b56959" }, { "token": "string.regexp constant.character.escape", "foreground": "b56959" }, { "token": "string.regexp source.ruby.embedded", "foreground": "b56959" }, { "token": "string.regexp string.regexp.arbitrary-repitition", "foreground": "b56959" }, { "token": "string.regexp constant.character.escape", "foreground": "bda437" }, { "token": "support.constant", "foreground": "a65e2b" }, { "token": "constant.numeric", "foreground": "2f798a" }, { "token": "number", "foreground": "2f798a" }, { "token": "keyword.other.unit", "foreground": "ab5959" }, { "token": "constant.language.boolean", "foreground": "1e754f" }, { "token": "constant.language", "foreground": "1e754f" }, { "token": "meta.module-reference", "foreground": "1c6b48" }, { "token": "punctuation.definition.list.begin.markdown", "foreground": "a65e2b" }, { "token": "markup.heading", "foreground": "1c6b48" }, { "token": "markup.heading entity.name", "foreground": "1c6b48" }, { "token": "markup.quote", "foreground": "2e8f82" }, { "token": "markup.italic", "foreground": "393a34" }, { "token": "markup.bold", "foreground": "393a34" }, { "token": "markup.raw", "foreground": "1c6b48" }, { "token": "markup.deleted", "foreground": "b31d28" }, { "token": "meta.diff.header.from-file", "foreground": "b31d28" }, { "token": "punctuation.definition.deleted", "foreground": "b31d28" }, { "token": "markup.inserted", "foreground": "22863a" }, { "token": "meta.diff.header.to-file", "foreground": "22863a" }, { "token": "punctuation.definition.inserted", "foreground": "22863a" }, { "token": "markup.changed", "foreground": "e36209" }, { "token": "punctuation.definition.changed", "foreground": "e36209" }, { "token": "markup.ignored", "foreground": "f6f8fa" }, { "token": "markup.untracked", "foreground": "f6f8fa" }, { "token": "meta.diff.range", "foreground": "6f42c1" }, { "token": "meta.diff.header", "foreground": "005cc5" }, { "token": "meta.separator", "foreground": "005cc5" }, { "token": "meta.output", "foreground": "005cc5" }, { "token": "brackethighlighter.tag", "foreground": "586069" }, { "token": "brackethighlighter.curly", "foreground": "586069" }, { "token": "brackethighlighter.round", "foreground": "586069" }, { "token": "brackethighlighter.square", "foreground": "586069" }, { "token": "brackethighlighter.angle", "foreground": "586069" }, { "token": "brackethighlighter.quote", "foreground": "586069" }, { "token": "brackethighlighter.unmatched", "foreground": "b31d28" }, { "token": "constant.other.reference.link", "foreground": "b56959" }, { "token": "string.other.link", "foreground": "b56959" }, { "token": "punctuation.definition.string.begin.markdown", "foreground": "b56959" }, { "token": "punctuation.definition.string.end.markdown", "foreground": "b56959" }, { "token": "markup.underline.link.markdown", "foreground": "393a3490" }, { "token": "type.identifier", "foreground": "5a6aa6" }, { "token": "entity.other.attribute-name.html.vue", "foreground": "59873a" }, { "token": "invalid.illegal.unrecognized-tag.html" } ] } ================================================ FILE: apps/web/src/lib/stripe.ts ================================================ import type { Project } from "@prisma/client"; import { loadStripe } from "@stripe/stripe-js"; import { env } from "env/client.mjs"; import { PLANS, type PlanName } from "server/common/plans"; import { trpc } from "utils/trpc"; export const useAbbyStripe = () => { const { mutateAsync: createCheckoutSession } = trpc.project.createStripeCheckoutSession.useMutation(); const { mutateAsync: createBillingPortalUrl } = trpc.project.createStripeBillingPortalUrl.useMutation(); const redirectToCheckout = (projectId: string, plan: PlanName) => Promise.all([ loadStripe(env.NEXT_PUBLIC_STRIPE_PUBLISHABLE_KEY), createCheckoutSession({ plan, projectId, }), ]).then(([stripe, sessionId]) => { if (!stripe || !sessionId) return; stripe.redirectToCheckout({ sessionId, }); }); const redirectToBillingPortal = async (projectId: string) => { const url = await createBillingPortalUrl({ projectId }); if (!url) return; window.location.assign(url); }; return { redirectToBillingPortal, redirectToCheckout }; }; const MILLISECONDS_IN_A_DAY = 86_400_000; export const BETA_PRICE_ID = "BETA"; export const isBetaPlan = (project: Project) => project.stripePriceId === BETA_PRICE_ID; /** * @returns the project's paid plan or null if the project is a free one * * @example * ```ts * const project = await prisma.project.findFirst(...) * const plan = getProjectPaidPlan(project) * ``` */ export const getProjectPaidPlan = (project: T | null) => { // beta plans last for ever and have special rules if (project !== null && isBetaPlan(project)) return BETA_PRICE_ID; if ( !project || !project.stripePriceId || !project.currentPeriodEnd || // We give projects a grace period of 24 hours to pay their invoices project.currentPeriodEnd.getTime() + MILLISECONDS_IN_A_DAY < Date.now() ) { return null; } const plan = Object.keys(PLANS).find( (plan) => PLANS[plan as PlanName] === project.stripePriceId ); return (plan as PlanName) ?? null; }; ================================================ FILE: apps/web/src/lib/tracking.ts ================================================ import { useOpenPanel } from "@openpanel/nextjs"; import { usePlausible } from "next-plausible"; import { useCallback } from "react"; import type { EventOptionsTuple } from "server/common/tracking"; import type { PlausibleEvents } from "types/plausible-events"; export const useTracking = () => { const trackPlausible = usePlausible (); const { track: trackOpenPanel } = useOpenPanel(); return useCallback( ( eventName: N, ...rest: PlausibleEvents[N] extends never ? [] : EventOptionsTuple ) => { trackPlausible(eventName, ...rest); trackOpenPanel(eventName, ...rest); }, [trackPlausible, trackOpenPanel] ); }; ================================================ FILE: apps/web/src/lib/utils.ts ================================================ import { type ClassValue, clsx } from "clsx"; import { twMerge } from "tailwind-merge"; export function cn(...inputs: ClassValue[]) { return twMerge(clsx(inputs)); } ================================================ FILE: apps/web/src/middleware.ts ================================================ import { withAuth } from "next-auth/middleware"; import { type NextMiddleware, NextResponse } from "next/server"; export default withAuth( // `withAuth` augments your `Request` with the user's token. async function middleware(req) { const projectId = req.nextUrl.searchParams.get("projectId"); const pathName = req.nextUrl.pathname; // redirect to /welcome if user has not completed onboarding if ( pathName.startsWith("/projects") && req.nextauth.token?.user && // required check since old sessions don't have this field "hasCompletedOnboarding" in req.nextauth.token.user && req.nextauth.token.user.hasCompletedOnboarding === false ) { const newUrl = new URL(req.nextUrl); newUrl.pathname = "/welcome"; return NextResponse.redirect(newUrl); } if (pathName === "/projects" && !projectId) { const newUrl = new URL(req.nextUrl); const tokenUser = req.nextauth.token?.user; newUrl.pathname = `/projects/${ tokenUser?.lastOpenProjectId ?? tokenUser?.projectIds[0] }/flags`; return NextResponse.redirect(newUrl); } }, { callbacks: { authorized: ({ token, req }) => { const pathName = req.nextUrl.pathname; // onboarding needs authentification if (pathName === "/welcome") return token !== null; // basic auth check for /profile if (pathName.startsWith("/profile")) return token !== null; if (!pathName.startsWith("/projects")) return true; const projectId = req.nextUrl.pathname.split("/")[2]; if (!projectId) { // If the path is /projects, we want to allow it. // because we redirect afterwards if (pathName === "/projects") return true; return false; } return token?.user.projectIds.includes(projectId) ?? false; }, }, } ) as NextMiddleware; export const config = { matcher: [ "/projects/:path*", "/marketing", "/profile", "/profile/generate-token", "/welcome", ], }; ================================================ FILE: apps/web/src/pages/_app.tsx ================================================ import type { Session } from "next-auth"; import { SessionProvider } from "next-auth/react"; import { DefaultSeo } from "next-seo"; import { ThemeProvider } from "next-themes"; import type { AppProps, AppType } from "next/app"; import { Toaster } from "react-hot-toast"; import { trpc } from "../utils/trpc"; import { OpenPanelComponent } from "@openpanel/nextjs"; import { TooltipProvider } from "components/Tooltip"; import { env } from "env/client.mjs"; import { AbbyDevtools, AbbyProvider, withAbby } from "lib/abby"; import type { NextPage } from "next"; import { useRouter } from "next/router"; import type { ReactElement, ReactNode } from "react"; import "@fontsource/martian-mono/600.css"; import "../styles/shadcn.css"; import "@code-hike/mdx/dist/index.css"; import PlausibleProvider from "next-plausible"; export type NextPageWithLayout = NextPage
& { getLayout?: (page: ReactElement) => ReactNode; }; type AppPropsWithLayout = AppProps & { Component: NextPageWithLayout; }; const seoDescription = "Discover the benefits of using Abby, the open-source feature management and A/B testing SaaS. Increase transparency, collaboration, and trust. Try it now!"; const MyApp: AppType<{ session: Session | null }> = ({ Component, pageProps: { session, __ABBY_PROJECT_DATA__, ...pageProps }, }: AppPropsWithLayout) => { const router = useRouter(); const currentPageUrl = `https://www.tryabby.com${router.asPath}`; // Use the layout defined at the page level, if available const getLayout = Component.getLayout ?? ((page) => page); return ( <> {env.NEXT_PUBLIC_OPENPANEL_CLIENT_ID && (
)} {/* we render different devtools on the landing page */} {router.asPath !== "/" && > ); }; export default trpc.withTRPC(withAbby(MyApp)); ================================================ FILE: apps/web/src/pages/_document.tsx ================================================ import { Head, Html, Main, NextScript } from "next/document"; export default function Document() { return (} {getLayout( )} ); } ================================================ FILE: apps/web/src/pages/_error.jsx ================================================ import * as Sentry from "@sentry/nextjs"; // biome-ignore lint/suspicious/noShadowRestrictedNames: import Error from "next/error"; const CustomErrorComponent = (props) => { return ; }; CustomErrorComponent.getInitialProps = async (contextData) => { // In case this is running in a serverless function, await this in order to give Sentry // time to send the error before the lambda exits await Sentry.captureUnderscoreErrorException(contextData); // This will contain the status code of the response return Error.getInitialProps(contextData); }; export default CustomErrorComponent; ================================================ FILE: apps/web/src/pages/api/[[...route]].ts ================================================ import { handle } from "@hono/node-server/vercel"; import { app } from "api"; export default handle(app); export const config = { api: { bodyParser: false, }, }; ================================================ FILE: apps/web/src/pages/api/auth/[...nextauth].ts ================================================ import { PrismaAdapter } from "@next-auth/prisma-adapter"; import NextAuth, { type NextAuthOptions } from "next-auth"; import EmailProvider from "next-auth/providers/email"; import GithubProvider from "next-auth/providers/github"; import GoogleProvider from "next-auth/providers/google"; import { trackSignup } from "lib/logsnag"; import { env } from "../../../env/server.mjs"; import { prisma } from "../../../server/db/client"; import { ProjectService } from "../../../server/services/ProjectService"; import type { NextApiRequest, NextApiResponse } from "next"; export const authOptions: NextAuthOptions = { pages: { signIn: "/login", newUser: "/welcome", }, session: { strategy: "jwt", }, callbacks: { // Include user.id on session session({ session, token }) { if (token.user) { session.user = { ...session.user, id: token.user.id, image: token.user.image, projectIds: token.user.projectIds, hasCompletedOnboarding: token.user.hasCompletedOnboarding, lastOpenProjectId: session.user?.lastOpenProjectId ? session.user?.lastOpenProjectId : token.user.projectIds[0], }; } return session; }, async jwt({ token, user, trigger, session }) { if (trigger === "update" && session) { if ("lastOpenProjectId" in session) { token.user.lastOpenProjectId = session.lastOpenProjectId; } if ("projectIds" in session) { token.user.projectIds = session.projectIds; } if ("hasCompletedOnboarding" in session) { token.user.hasCompletedOnboarding = session.hasCompletedOnboarding; } if ("name" in session) { token.name = session.name; } } if (user) { const dbUser = await prisma.user.findUnique({ where: { id: user.id }, include: { projects: { select: { projectId: true }, }, }, }); token.user = { ...(token.user ?? {}), id: user.id, image: user.image ?? `https://avatars.dicebear.com/api/initials/${user?.email}.svg`, hasCompletedOnboarding: dbUser?.hasCompletedOnboarding ?? false, projectIds: (dbUser?.projects ?? []).map( (project) => project.projectId ), }; } return token; }, }, events: { async createUser({ user }) { await ProjectService.createProject({ userId: user.id, projectName: "My Project", }); await trackSignup(); }, }, // Configure one or more authentication providers adapter: PrismaAdapter(prisma), providers: [ GithubProvider({ clientId: env.GITHUB_ID, clientSecret: env.GITHUB_SECRET, }), EmailProvider({ from: `Abby <${env.ABBY_FROM_EMAIL}>`, server: env.EMAIL_SERVER, }), // conditionally add Google provider if client ID and secret are set ...(env.GOOGLE_CLIENT_ID && env.GOOGLE_CLIENT_SECRET ? [ GoogleProvider({ clientId: env.GOOGLE_CLIENT_ID, clientSecret: env.GOOGLE_CLIENT_SECRET, }), ] : []), // ...add more providers here ], }; export default (req: NextApiRequest, res: NextApiResponse) => { if ( req.url && new URL(req.url, "https://tryabby.com").pathname === "/api/auth/callback/email" && req.method !== "GET" ) { console.log("Suspicous request to /api/auth/callback/email", req.method); return res.status(200).end(); } return NextAuth(authOptions)(req, res); }; ================================================ FILE: apps/web/src/pages/api/checkout/index.ts ================================================ import { type Stripe, loadStripe } from "@stripe/stripe-js"; let stripePromise: Promise | null = null; const getStripe = () => { if (!stripePromise) { if (!process.env.NEXT_PUBLIC_STRIPE_PUBLISHABLE_KEY) return; stripePromise = loadStripe(process.env.NEXT_PUBLIC_STRIPE_PUBLISHABLE_KEY); } return stripePromise as Promise ; }; export async function checkout({ lineItems, }: { lineItems: { price: string; quantity: number }[]; }) { const stripe = await getStripe(); if (!stripe) return; await stripe.redirectToCheckout({ mode: "payment", lineItems, successUrl: `${window.location.origin}?session_id={CHECKOUT_SESSION_ID}`, cancelUrl: window.location.origin, }); } ================================================ FILE: apps/web/src/pages/api/invalidate-limits.ts ================================================ import dayjs from "dayjs"; import type { NextApiRequest, NextApiResponse } from "next"; import { PLANS } from "server/common/plans"; import { prisma } from "server/db/client"; import { RequestCache } from "server/services/RequestCache"; import { z } from "zod"; const incomingQuerySchema = z.object({ secretKey: z.literal("yfMWV3TC0xyLvEKoHjslTp8GeKFEFRDtfVckg3Y2LHA="), }); export default async function invalidateProjectLimitsHandler( req: NextApiRequest, res: NextApiResponse ) { const { success } = await incomingQuerySchema.spa(req.query); if (!success) { // fail silently console.warn("Invalid request to invalidate project limits"); return res.status(200); } const nonStripeProjectsToUpdate = await prisma.project.findMany({ where: { OR: [ { stripePriceId: { equals: null } }, { stripePriceId: { equals: PLANS.BETA } }, { stripePriceId: { equals: PLANS.STARTUP_LIFETIME } }, ], currentPeriodEnd: { lte: new Date(), }, }, }); if (nonStripeProjectsToUpdate.length === 0) { console.info("No projects to update"); return res.end(); } console.info( `Updating plan for ${nonStripeProjectsToUpdate.length} projects` ); await prisma.project.updateMany({ where: { id: { in: nonStripeProjectsToUpdate.map((p) => p.id), }, }, data: { currentPeriodEnd: dayjs().add(30, "days").toISOString(), }, }); await RequestCache.reset(nonStripeProjectsToUpdate.map((p) => p.id)); res.end(); } ================================================ FILE: apps/web/src/pages/api/stripe.ts ================================================ import dayjs from "dayjs"; import { env as serverEnv } from "env/server.mjs"; import { buffer } from "micro"; import type { NextApiRequest, NextApiResponse } from "next"; import { stripe } from "server/common/stripe"; import { prisma } from "server/db/client"; import { RequestCache } from "server/services/RequestCache"; import type Stripe from "stripe"; const secondsToMsDate = (seconds: number) => new Date(seconds * 1000); // Replace this endpoint secret with your endpoint's unique secret // If you are testing with the CLI, find the secret by running 'stripe listen' // If you are using an endpoint defined with the API or dashboard, look in your webhook settings // at https://dashboard.stripe.com/webhooks const endpointSecret = serverEnv.STRIPE_WEBHOOK_SECRET; interface StripeSession { id: string; customer: string; current_period_end: number; metadata: { projectId: string; }; subscription: string; items: { data: { price: { id: string; }; }[]; }; } export default async function handleStripeWebhook( req: NextApiRequest, res: NextApiResponse ) { const sig = req.headers["stripe-signature"]; if (!sig) { return res.status(400).send("Webhook Error: Missing signature"); } let event: Stripe.Event; try { event = stripe.webhooks.constructEvent( await buffer(req), sig, endpointSecret ); } catch (err) { console.error(err); // On error, log and return the error message console.log( `❌ Error message: ${err instanceof Error ? err.message : err}` ); return res .status(400) .send(`Webhook Error: ${err instanceof Error ? err.message : err}`); } const session = event.data?.object as StripeSession; // Handle the event switch (event.type) { case "checkout.session.completed": { const subscription = await stripe.subscriptions.retrieve( session.subscription ); await RequestCache.reset(session.metadata.projectId); await prisma.project.update({ where: { id: session.metadata.projectId, }, data: { currentPeriodEnd: secondsToMsDate(subscription.current_period_end), stripeSubscriptionId: subscription.id, stripeCustomerId: session.customer, stripePriceId: subscription.items.data[0]?.price.id, }, }); break; } case "customer.subscription.deleted": { await prisma.project.update({ where: { stripeSubscriptionId: session.id, }, data: { currentPeriodEnd: dayjs().add(30, "days").toISOString(), stripePriceId: null, }, }); break; } default: { // Unexpected event type console.log(`Unhandled event type ${event.type}.`); } } // Return a 200 response to acknowledge receipt of the event res.end(); } export const config = { api: { bodyParser: false, }, }; ================================================ FILE: apps/web/src/pages/api/trpc/[trpc].ts ================================================ import { createNextApiHandler } from "@trpc/server/adapters/next"; import { env } from "../../../env/server.mjs"; import { createContext } from "../../../server/trpc/context"; import { appRouter } from "../../../server/trpc/router/_app"; // export API handler export default createNextApiHandler({ router: appRouter, batching: { enabled: false }, createContext, onError: env.NODE_ENV === "development" ? ({ path, error }) => { console.error(`❌ tRPC failed on ${path}: ${error}`); } : undefined, }); ================================================ FILE: apps/web/src/pages/checkout/index.tsx ================================================ import type { NextPage } from "next"; import { checkout } from "pages/api/checkout"; const Projects: NextPage = () => { return ( <> > ); }; export default Projects; ================================================ FILE: apps/web/src/pages/contact.tsx ================================================ import clsx from "clsx"; import { Button } from "components/ui/button"; import { Input } from "components/ui/input"; import { Label } from "components/ui/label"; import { useForm } from "react-hook-form"; import { toast } from "react-hot-toast"; import { trpc } from "utils/trpc"; import { MarketingLayout } from "../components/MarketingLayout"; export default function ContactPage() { const { register, handleSubmit, formState } = useForm<{ mailadress: string; message: string; name: string; surname: string; }>(); const sendDataMutation = trpc.misc.contactPageEmail.useMutation(); const sendData = async (values: { mailadress: string; message: string; name: string; surname: string; }) => { await sendDataMutation.mutateAsync(values); }; const onSubmit = handleSubmit(async (values) => { try { const { name, mailadress, surname, message } = values; await sendData({ name, mailadress, surname, message }); toast.success("Send!"); } catch (_error) { toast.error("Please try again!"); } }); const _inputFieldStyle = "text border-2 border-width border-solid rounded w-full pl-2 mr-5 py-1 bg-inherit text-sm"; return ( <> > ); } ================================================ FILE: apps/web/src/pages/devtools.tsx ================================================ import { HttpService } from "@tryabby/core"; import abbyDevtools from "@tryabby/devtools"; import { createAbby } from "@tryabby/next"; import { DevtoolsArrow } from "components/DevtoolsArrow"; import { MarketingLayout } from "components/MarketingLayout"; import { SignupButton } from "components/SignupButton"; import { cn } from "lib/utils"; import type { InferGetStaticPropsType } from "next"; import type { NextPageWithLayout } from "./_app"; const { useAbby, AbbyProvider, useFeatureFlag, withDevtools, __abby__ } = createAbby({ projectId: "clha6feng0002l709segjhb2d", currentEnvironment: process.env.NODE_ENV, environments: ["development", "production"], tests: { MarketingButton: { variants: ["Dark", "Funky", "Light"], }, }, flags: ["ToggleMeIfYoureExcited", "showEasterEgg", "showHeading"], cookies: { disableByDefault: true, expiresInDays: 30 }, }); export const AbbyProdDevtools = withDevtools(abbyDevtools, { dangerouslyForceShow: true, }); const DevtoolsPage = () => { const showEasterEgg = useFeatureFlag("showEasterEgg"); const showHeading = useFeatureFlag("showHeading"); const isExcited = useFeatureFlag("ToggleMeIfYoureExcited"); const { variant } = useAbby("MarketingButton"); return ( <> By submitting this form you agree to our{" "} Terms of use {" "} and{" "} Privacy PolicyContact us
Drop your email and we'll get back to you soon.Quit the console.("Flag is " + isOn)
Psst: If you're already too excited, just look at the bottom right{" "} {isExcited && ( <>Debugging is already hard, Debugging a Service is even harder 😮💨
Abby is here to help you with that
I knew it ! (you can see the other stuff at the bottom of the page. Scroll down) > )}Your Developers:
(results may differ)Before Abby Devtools
![]()
VS.
After Abby Devtools
![]()
And the best thing: You're just one{" "}
npm i @tryabby/devtools{" "} awayBut let' be honest, you just don't add something to your application, right? No worries
{showHeading && (You just toggled me!
)} {isExcited && (and it appears like you actually it
)} {showEasterEgg && ()}![]()
You just got rickrolled
Ready to dive in?
Sign up for Abby for free and start to enjoy a Feature Flag & A/B Testing solution that was made for developers
> ); }; const OuterPage: NextPageWithLayout< InferGetStaticPropsType > = ({ abbyData }) => { return ( ); }; OuterPage.getLayout = (page) => ( {page} ); export const getStaticProps = async () => { const config = __abby__.getConfig(); const data = await HttpService.getProjectData({ projectId: config.projectId, environment: config.currentEnvironment, }); return { props: { abbyData: data }, }; }; export default OuterPage; ================================================ FILE: apps/web/src/pages/imprint.mdx ================================================ import { MarketingLayout } from "components/MarketingLayout"; # Imprint **dynabase Technologies GmbH** Von-Werth-Str. 37 50670 Köln Telefon: [+49-221-588-307-0](tel:+49-221-588-307-0) Telefax: [+49-221-588-307-0](fax:+49-221-588-307-00) E-Mail: [mail@dynabase.de](mailto:mail@dynabase.de) Geschäftsführer: Daniel Angileri, Norman Wenk Registergericht: Amtsgericht Köln Registernummer: HRB 91004 - USt-IdNr.: DE312712619 Inhaltlich Verantwortliche: Daniel Angileri, Norman Wenk export default ({ children }) => ({children} ); export const getStaticProps = () => { return { props: {}, }; }; ================================================ FILE: apps/web/src/pages/index.tsx ================================================ import { DOCS_URL, HttpService } from "@tryabby/core"; import DevtoolsFactory from "@tryabby/devtools"; import { createAbby } from "@tryabby/next"; import { BaseCodeSnippet } from "components/CodeSnippet"; import { DevtoolsArrow } from "components/DevtoolsArrow"; import { Divider } from "components/Divider"; import { EventCounter } from "components/EventCounter"; import { Feature } from "components/Feature"; import { Integrations } from "components/Integrations"; import { MarketingLayout } from "components/MarketingLayout"; import { PricingTable } from "components/Pricing"; import { UsedBy } from "components/UsedBy"; import { useTracking } from "lib/tracking"; import { Blocks, Clock, Code2, ExternalLink, FlaskConical, Server, Shield, } from "lucide-react"; import type { InferGetStaticPropsType } from "next"; import { useTheme } from "next-themes"; import Image from "next/image"; import Link from "next/link"; import { useEffect } from "react"; import { FaQuestion } from "react-icons/fa"; import { twMerge } from "tailwind-merge"; import { generateCodeSnippets } from "utils/snippets"; import abbyScreenshot from "../../public/screenshot.png"; import type { NextPageWithLayout } from "./_app"; const { useAbby, AbbyProvider, useFeatureFlag, __abby__, withDevtools } = createAbby({ projectId: "clk8ld04v0000l0085dqsxpsr", currentEnvironment: "production", environments: ["production", "development"], tests: { SignupButton: { variants: ["A", "B", "C"], }, heroMedia: { variants: ["Image", "Video"], }, }, flags: ["ForceDarkTheme"], cookies: { disableByDefault: false, expiresInDays: 365 }, }); const Devtools = withDevtools(DevtoolsFactory, { dangerouslyForceShow: true, }); const AmpersandIcon = ({ className }: { className?: string }) => ( ); const Home: NextPageWithLayout< Omit, "abbyData"> > = ({ codeSnippet }) => { const { setTheme } = useTheme(); const { onAct, variant } = useAbby("SignupButton"); const { variant: heroMediaVariant, onAct: onHeroMediaAct } = useAbby("heroMedia"); const forceDarkTheme = useFeatureFlag("ForceDarkTheme"); const trackEvent = useTracking(); useEffect(() => { if (forceDarkTheme) { setTheme("dark"); } else { setTheme("light"); } }, [forceDarkTheme, setTheme]); return ( <> Type-Safe Feature Flags
&
Flexible Remote ConfigAbby is Open Source and fully typed with SDKs for{" "} React and Next.js.
Test in different environments, debug with devtools.
Cut through feature deployment complexity with one service, built for developers.{ trackEvent("Sign Up Clicked"); onAct(); onHeroMediaAct(); }} className={twMerge( "mt-12 rounded-xl bg-ab_accent-background px-6 py-2 text-xl font-semibold text-ab_accent-foreground no-underline transition-transform duration-150 ease-in-out hover:scale-110" )} > {variant === "A" && "Test Now"} {variant === "B" && "Sign Up for Free"} {variant === "C" && "Get Started"} Start free, scale at a fair price.{heroMediaVariant === "Image" && ( )} {heroMediaVariant === "Video" && ( )} Why choose Abby?
Born out of an engineer's frustration internally, and now adopted by engineering teams at fast-growing startups and enterprises.
SDKs for different frameworks, including React and Next.js. All of them fully type-safe. Support for SSR or SSG included out of the box for a snappy user experience. Utilize different environments for each feature flag or remote config variable. Create various environments to test features before they go live. SDKs with built in fallbacks to reduce the risk of downtime and ensure a stable testing environment. Fully open source, anonymized data, with the option to self-host (if you really wanted to). Install Abby's devtools to debug feature flags and remote config variables on the fly. First-Party CLI in Beta. Painless Debugging with Abby Devtools
Debugging your feature flags & remote config variables has never been easier. Simply install the optional Devtools and get started.
Simple. Framework Agnostic.Learn More about our DevtoolsCan't wait to try it out?
Skip the Docs and get right into the code. Define your tests and enjoy the magic.
Fully typed. Easy to use. Read the Docs{" "}Fair pricing that scales with usage, not seats.
Start using feature flags and remote config variables for free. Scale up at reasonable pricing for small engineering teams and enterprises.
Still have questions?
Integrations, pricing, programming memes. Our engineers respond pretty quickly.
Contact usWhen you hear feature flags, do you think of flag lore?
If you're not yet familiar with website optimization and feature testing you can learn more about the terms and background of A/B tests (also known as Split tests) here.
Discover Tips & Insights> ); }; const HomeWrapper: NextPageWithLayout< InferGetStaticPropsType > = ({ codeSnippet, abbyData }) => ( ); HomeWrapper.getLayout = (page) => {page} ; export const getStaticProps = async () => { const config = __abby__.getConfig(); const data = await HttpService.getProjectData({ projectId: config.projectId, environment: config.currentEnvironment, }); const codeSnippet = await generateCodeSnippets({ projectId: "", tests: [ { name: "footer", options: [ { identifier: "oldFooter", }, { identifier: "newFooter", }, ], }, { name: "ctaButton", options: [ { identifier: "dark", }, { identifier: "light", }, { identifier: "cyberpunk", }, ], }, ], flags: [ { name: "showPrices", type: "BOOLEAN", }, { name: "userLimit", type: "NUMBER", }, { name: "appMode", type: "STRING", }, ], }); return { props: { abbyData: data, codeSnippet, }, }; }; export default HomeWrapper; ================================================ FILE: apps/web/src/pages/integrations/[integration]/index.tsx ================================================ import { DOCS_URL } from "@tryabby/core"; import { INTEGRATIONS } from "components/Integrations"; import { MarketingLayout } from "components/MarketingLayout"; import { SignupButton } from "components/SignupButton"; import type { GetStaticPaths, GetStaticProps, InferGetStaticPropsType, } from "next"; import { NextSeo } from "next-seo"; import Link from "next/link"; import type { NextPageWithLayout } from "pages/_app"; const IntegrationPage: NextPageWithLayout< InferGetStaticPropsType > = (props) => { const integration = INTEGRATIONS.find( (i) => i.docsUrlSlug === props.integrationSlug ); if (!integration) { return null; } return ( <> > ); }; IntegrationPage.getLayout = (page) => { return Abby {integration.name} SDK
Statically typed Feature Flags, Remote Config & A/B testing for{" "} {integration.name}
{integration.logo}SDK Features
- Feature Flags
- Remote Config
- A/B Testing
- Full Typescript Support
- Fully typed without a build step
- Devtools for managing flags, configs, and experiments
{integration.additionalFeatures?.map((feature) => (- {feature}
))}Installation
npm install{" "} @tryabby/{integration.npmPackage}SDK DocsAbout Abby
Abby is an open-source Feature Flagging, Remote Config, and A/B Testing service. Abby' {integration.name} SDK is fully typed and open source.
Abby is the easiest way to manage your features and experiments for Developers and Product Managers. Start now with our forever free plan.{page} ; }; export default IntegrationPage; export const getStaticProps = ((ctx) => { const integrationSlug = ctx.params?.integration; if (typeof integrationSlug !== "string") { return { notFound: true, }; } return { props: { integrationSlug, }, }; }) satisfies GetStaticProps; export const getStaticPaths: GetStaticPaths = () => { return { paths: INTEGRATIONS.map((i) => ({ params: { integration: i.docsUrlSlug, }, })), fallback: false, }; }; ================================================ FILE: apps/web/src/pages/integrations/index.tsx ================================================ import { INTEGRATIONS } from "components/Integrations"; import { MarketingLayout } from "components/MarketingLayout"; import { Button } from "components/ui/button"; import Link from "next/link"; import type { NextPageWithLayout } from "../_app"; const IntegrationsMainPage: NextPageWithLayout = () => { return (); }; IntegrationsMainPage.getLayout = (page) => { return ( Our Integrations and SDKs
We provide a wide range of integrations and SDKs to help you get the most out of our service.
{INTEGRATIONS.map((integration) => ())}{integration.logo}{integration.name}
{integration.description}
{page} ); }; export default IntegrationsMainPage; ================================================ FILE: apps/web/src/pages/invites/[inviteId].tsx ================================================ import type { GetServerSideProps, NextPage } from "next"; import { getSession, useSession } from "next-auth/react"; import { useRouter } from "next/router"; import { prisma } from "../../server/db/client"; import Link from "next/link"; import { trpc } from "utils/trpc"; export const getServerSideProps: GetServerSideProps = async (ctx) => { const session = await getSession(ctx); const user = await prisma.user.findUnique({ where: { email: session?.user?.email ?? "" }, }); // no logged in user, required to accept invite if (!user || !user.email) return { props: {}, redirect: { destination: "/" } }; // TODO: check if user is already in project or invite is expired const invite = await prisma.projectInvite.findFirst({ where: { id: ctx.params?.inviteId as string, email: user.email }, include: { project: true }, }); if (!invite) { return { props: {}, redirect: { destination: "/", }, }; } return { props: {}, }; }; const Projects: NextPage = () => { const { data: session } = useSession(); const router = useRouter(); const { inviteId } = router.query; const { data, isLoading } = trpc.invite.getInviteData.useQuery({ inviteId: inviteId as string, }); const projectInviteMutation = trpc.invite.acceptInvite.useMutation(); const acceptInvite = async () => { await projectInviteMutation.mutateAsync({ inviteId: inviteId as string, }); router.push(`/projects/${data?.project?.id}`); }; if (isLoading || !session) return null; return (); }; export default Projects; ================================================ FILE: apps/web/src/pages/invites/index.tsx ================================================ import type { GetServerSideProps, NextPage } from "next"; export const getServerSideProps: GetServerSideProps = async (_ctx) => { return { props: {}, redirect: { destination: "/", }, }; }; const Invite: NextPage = () => { return null; }; export default Invite; ================================================ FILE: apps/web/src/pages/login.tsx ================================================ import Link from "next/link"; import Logo from "components/Logo"; import { UserAuthForm } from "components/UserAuthForm"; import { buttonVariants } from "components/ui/button"; import { cn } from "lib/utils"; import { useRouter } from "next/router"; const DEFAULT_CALLBACK_URL = "/projects"; export default function AuthenticationPage() { const router = useRouter(); const callbackUrl = typeof router.query.callbackUrl === "string" ? router.query.callbackUrl : DEFAULT_CALLBACK_URL; return ( <> ![]()
You have been invited to
{data?.project?.name}
or
Go back to projectsSign Up> ); } ================================================ FILE: apps/web/src/pages/nextjs.mdx ================================================ import { MarketingLayout } from "components/MarketingLayout"; import { SignupButton } from "components/SignupButton"; import { AsyncCodeExample } from "components/AsyncCodeExample"; import { DOCS_URL } from "@tryabby/core"; import Image from "next/image"; import CoverImage from "../../public/abby_next.png"; # Abby + Next.js“Feature Flagging & Remote Config for the rest of us.”
{/* */}Login to your account
Enter your email below to login
By clicking continue, you agree to our{" "} Terms of Service {" "} and{" "} Privacy Policy .
Abby is an Open-Source tool for A/B Testing and Feature Flags. The motivation behind building Abby was to provide a simple and easy to use tool for A/B Testing and Feature Flags that flawlessly integrates with Next.js. This means the following: ### 1. Ease of use Next.js is an amazing framework that offers the best Developer Experience and makes building highly scalable applications a breeze. Abby is built with the same philosophy in mind. It should be easy to use and integrate with your existing Next.js application. You should be able to set it up once in under a minute and forget about it. ### 2. Type Safety Abby is built with TypeScript and offers full type safety. This means that you can use Abby without worrying about typos or other mistakes that can be easily made when using a tool like Abby. Other third party tools often offer outdated or incomplete type definitions or are embedded via a script. Abby is a package that is properly versioned, typed and can be installed with your favorite package manager. **Example:** ### 3. Deeply Integrate with Next.js There are many possible ways of creating pages in Next.js. You can render the pages on the server, on the client, or even statically. Abby works with all of the ways and makes sure that the A/B Testing and Feature Flags are applied to the pages correctly. All of this while keeping the Developer Experience as good as possible. export default ({ children }) => ( {children} ); export const getStaticProps = () => { return { props: {}, }; }; ================================================ FILE: apps/web/src/pages/privacy.mdx ================================================ import { MarketingLayout } from "components/MarketingLayout"; # Privacy Policy / Datenschutzerklärung ## Einleitung Mit der folgenden Datenschutzerklärung möchten wir Sie darüber aufklären, welche Arten Ihrer personenbezogenen Daten (nachfolgend auch kurz als "Daten“ bezeichnet) wir zu welchen Zwecken und in welchem Umfang verarbeiten. Die Datenschutzerklärung gilt für alle von uns durchgeführten Verarbeitungen personenbezogener Daten, sowohl im Rahmen der Erbringung unserer Leistungen als auch insbesondere auf unseren Webseiten, in mobilen Applikationen sowie innerhalb externer Onlinepräsenzen, wie z.B. unserer Social-Media-Profile (nachfolgend zusammenfassend bezeichnet als "Onlineangebot“). Die verwendeten Begriffe sind nicht geschlechtsspezifisch. Stand: 1. Januar 2023 ## Verantwortlicher Name/Fa.: dynabase Technologies GmbH Straße Nr.: Von-Werth-Str. 37 PLZ, Ort, Land: 50670 Köln, Deutschland Vertretungsberechtigte Personen: Daniel Angileri, Norman Wenk E-Mail-Adresse: mail@dynabase.de Telefon: +49-221-588-307-0 Impressum: https://www.tryabby.com/imprint Kontakt Datenschutzbeauftragter Legaltrust GmbH Ansprechpartner: Herr Michael Michalak Lietzenburger Str. 94 10719 Berlin Tel. 030 / 887 27 609 Fax. 030 / 887 27 606 E-Mail: datenschutz@prive.eu https://app.prive.eu ## Übersicht der Verarbeitungen Die nachfolgende Übersicht fasst die Arten der verarbeiteten Daten und die Zwecke ihrer Verarbeitung zusammen und verweist auf die betroffenen Personen. ### Arten der verarbeiteten Daten Bestandsdaten (z.B. Namen, Adressen). Inhaltsdaten (z.B. Texteingaben, Fotografien, Videos). Kontaktdaten (z.B. E-Mail, Telefonnummern). Meta-/Kommunikationsdaten (z.B. Geräte-Informationen, IP-Adressen). Nutzungsdaten (z.B. besuchte Webseiten, Interesse an Inhalten, Zugriffszeiten). Standortdaten (Daten, die den Standort des Endgeräts eines Endnutzers angeben). Vertragsdaten (z.B. Vertragsgegenstand, Laufzeit, Kundenkategorie). Zahlungsdaten (z.B. Bankverbindungen, Rechnungen, Zahlungshistorie). ### Kategorien betroffener Personen Geschäfts- und Vertragspartner. Interessenten. Kunden. Nutzer (z.B. Webseitenbesucher, Nutzer von Onlinediensten). ### Zwecke der Verarbeitung Anmeldeverfahren. Bereitstellung unseres Onlineangebotes und Nutzerfreundlichkeit. Büro- und Organisationsverfahren. Content Delivery Network (CDN). Kontaktanfragen und Kommunikation. Sicherheitsmaßnahmen. Vertragliche Leistungen und Service. Verwaltung und Beantwortung von Anfragen. ### Maßgebliche Rechtsgrundlagen Im Folgenden teilen wir die Rechtsgrundlagen der Datenschutzgrundverordnung (DSGVO), auf deren Basis wir die personenbezogenen Daten verarbeiten, mit. Bitte beachten Sie, dass zusätzlich zu den Regelungen der DSGVO die nationalen Datenschutzvorgaben in Ihrem bzw. unserem Wohn- und Sitzland gelten können. Sollten ferner im Einzelfall speziellere Rechtsgrundlagen maßgeblich sein, teilen wir Ihnen diese in der Datenschutzerklärung mit. Einwilligung (Art. 6 Abs. 1 S. 1 lit. a DSGVO) - Die betroffene Person hat ihre Einwilligung in die Verarbeitung der sie betreffenden personenbezogenen Daten für einen spezifischen Zweck oder mehrere bestimmte Zwecke gegeben. Vertragserfüllung und vorvertragliche Anfragen (Art. 6 Abs. 1 S. 1 lit. b. DSGVO) - Die Verarbeitung ist für die Erfüllung eines Vertrags, dessen Vertragspartei die betroffene Person ist, oder zur Durchführung vorvertraglicher Maßnahmen erforderlich, die auf Anfrage der betroffenen Person erfolgen. Rechtliche Verpflichtung (Art. 6 Abs. 1 S. 1 lit. c. DSGVO) - Die Verarbeitung ist zur Erfüllung einer rechtlichen Verpflichtung erforderlich, der der Verantwortliche unterliegt. Berechtigte Interessen (Art. 6 Abs. 1 S. 1 lit. f. DSGVO) - Die Verarbeitung ist zur Wahrung der berechtigten Interessen des Verantwortlichen oder eines Dritten erforderlich, sofern nicht die Interessen oder Grundrechte und Grundfreiheiten der betroffenen Person, die den Schutz personenbezogener Daten erfordern, überwiegen. Nationale Datenschutzregelungen in Deutschland: Zusätzlich zu den Datenschutzregelungen der Datenschutz-Grundverordnung gelten nationale Regelungen zum Datenschutz in Deutschland. Hierzu gehört insbesondere das Gesetz zum Schutz vor Missbrauch personenbezogener Daten bei der Datenverarbeitung (Bundesdatenschutzgesetz – BDSG). Das BDSG enthält insbesondere Spezialregelungen zum Recht auf Auskunft, zum Recht auf Löschung, zum Widerspruchsrecht, zur Verarbeitung besonderer Kategorien personenbezogener Daten, zur Verarbeitung für andere Zwecke und zur Übermittlung sowie automatisierten Entscheidungsfindung im Einzelfall einschließlich Profiling. Des Weiteren regelt es die Datenverarbeitung für Zwecke des Beschäftigungsverhältnisses (§ 26 BDSG), insbesondere im Hinblick auf die Begründung, Durchführung oder Beendigung von Beschäftigungsverhältnissen sowie die Einwilligung von Beschäftigten. Ferner können Landesdatenschutzgesetze der einzelnen Bundesländer zur Anwendung gelangen. ## Sicherheitsmaßnahmen Wir treffen nach Maßgabe der gesetzlichen Vorgaben unter Berücksichtigung des Stands der Technik, der Implementierungskosten und der Art, des Umfangs, der Umstände und der Zwecke der Verarbeitung sowie der unterschiedlichen Eintrittswahrscheinlichkeiten und des Ausmaßes der Bedrohung der Rechte und Freiheiten natürlicher Personen geeignete technische und organisatorische Maßnahmen, um ein dem Risiko angemessenes Schutzniveau zu gewährleisten. Zu den Maßnahmen gehören insbesondere die Sicherung der Vertraulichkeit, Integrität und Verfügbarkeit von Daten durch Kontrolle des physischen und elektronischen Zugangs zu den Daten als auch des sie betreffenden Zugriffs, der Eingabe, der Weitergabe, der Sicherung der Verfügbarkeit und ihrer Trennung. Des Weiteren haben wir Verfahren eingerichtet, die eine Wahrnehmung von Betroffenenrechten, die Löschung von Daten und Reaktionen auf die Gefährdung der Daten gewährleisten. Ferner berücksichtigen wir den Schutz personenbezogener Daten bereits bei der Entwicklung bzw. Auswahl von Hardware, Software sowie Verfahren entsprechend dem Prinzip des Datenschutzes, durch Technikgestaltung und durch datenschutzfreundliche Voreinstellungen. ## Übermittlung und Offenbarung von personenbezogenen Daten Im Rahmen unserer Verarbeitung von personenbezogenen Daten kommt es vor, dass die Daten an andere Stellen, Unternehmen, rechtlich selbstständige Organisationseinheiten oder Personen übermittelt oder sie ihnen gegenüber offengelegt werden. Zu den Empfängern dieser Daten können z.B. Zahlungsinstitute im Rahmen von Zahlungsvorgängen, mit IT-Aufgaben beauftragte Dienstleister oder Anbieter von Diensten und Inhalten, die in eine Webseite eingebunden werden, gehören. In solchen Fall beachten wir die gesetzlichen Vorgaben und schließen insbesondere entsprechende Verträge bzw. Vereinbarungen, die dem Schutz Ihrer Daten dienen, mit den Empfängern Ihrer Daten ab. ## Datenverarbeitung in Drittländern Sofern wir Daten in einem Drittland (d.h., außerhalb der Europäischen Union (EU), des Europäischen Wirtschaftsraums (EWR)) verarbeiten oder die Verarbeitung im Rahmen der Inanspruchnahme von Diensten Dritter oder der Offenlegung bzw. Übermittlung von Daten an andere Personen, Stellen oder Unternehmen stattfindet, erfolgt dies nur im Einklang mit den gesetzlichen Vorgaben. Vorbehaltlich ausdrücklicher Einwilligung oder vertraglich oder gesetzlich erforderlicher Übermittlung verarbeiten oder lassen wir die Daten nur in Drittländern mit einem anerkannten Datenschutzniveau, vertraglichen Verpflichtung durch sogenannte Standardschutzklauseln der EU-Kommission, beim Vorliegen von Zertifizierungen oder verbindlicher internen Datenschutzvorschriften verarbeiten (Art. 44 bis 49 DSGVO, Informationsseite der EU-Kommission: https://ec.europa.eu/info/law/law-topic/data-protection/international-dimension-data-protection_de ). ## Einsatz von Cookies Cookies sind Textdateien, die Daten von besuchten Websites oder Domains enthalten und von einem Browser auf dem Computer des Benutzers gespeichert werden. Ein Cookie dient in erster Linie dazu, die Informationen über einen Benutzer während oder nach seinem Besuch innerhalb eines Onlineangebotes zu speichern. Zu den gespeicherten Angaben können z.B. die Spracheinstellungen auf einer Webseite, der Loginstatus, ein Warenkorb oder die Stelle, an der ein Video geschaut wurde, gehören. Zu dem Begriff der Cookies zählen wir ferner andere Technologien, die die gleichen Funktionen wie Cookies erfüllen (z.B., wenn Angaben der Nutzer anhand pseudonymer Onlinekennzeichnungen gespeichert werden, auch als "Nutzer-IDs" bezeichnet) Die folgenden Cookie-Typen und Funktionen werden unterschieden: Temporäre Cookies (auch: Session- oder Sitzungs-Cookies): Temporäre Cookies werden spätestens gelöscht, nachdem ein Nutzer ein Online-Angebot verlassen und seinen Browser geschlossen hat. Permanente Cookies: Permanente Cookies bleiben auch nach dem Schließen des Browsers gespeichert. So kann beispielsweise der Login-Status gespeichert oder bevorzugte Inhalte direkt angezeigt werden, wenn der Nutzer eine Website erneut besucht. Ebenso können die Interessen von Nutzern, die zur Reichweitenmessung oder zu Marketingzwecken verwendet werden, in einem solchen Cookie gespeichert werden. First-Party-Cookies: First-Party-Cookies werden von uns selbst gesetzt. Third-Party-Cookies (auch: Drittanbieter-Cookies): Drittanbieter-Cookies werden hauptsächlich von Werbetreibenden (sog. Dritten) verwendet, um Benutzerinformationen zu verarbeiten. Notwendige (auch: essentielle oder unbedingt erforderliche) Cookies: Cookies können zum einen für den Betrieb einer Webseite unbedingt erforderlich sein (z.B. um Logins oder andere Nutzereingaben zu speichern oder aus Gründen der Sicherheit). Statistik-, Marketing- und Personalisierungs-Cookies: Ferner werden Cookies im Regelfall auch im Rahmen der Reichweitenmessung eingesetzt sowie dann, wenn die Interessen eines Nutzers oder sein Verhalten (z.B. Betrachten bestimmter Inhalte, Nutzen von Funktionen etc.) auf einzelnen Webseiten in einem Nutzerprofil gespeichert werden. Solche Profile dienen dazu, den Nutzern z.B. Inhalte anzuzeigen, die ihren potentiellen Interessen entsprechen. Dieses Verfahren wird auch als "Tracking", d.h., Nachverfolgung der potentiellen Interessen der Nutzer bezeichnet. Soweit wir Cookies oder "Tracking"-Technologien einsetzen, informieren wir Sie gesondert in unserer Datenschutzerklärung oder im Rahmen der Einholung einer Einwilligung. Hinweise zu Rechtsgrundlagen: Auf welcher Rechtsgrundlage wir Ihre personenbezogenen Daten mit Hilfe von Cookies verarbeiten, hängt davon ab, ob wir Sie um eine Einwilligung bitten. Falls dies zutrifft und Sie in die Nutzung von Cookies einwilligen, ist die Rechtsgrundlage der Verarbeitung Ihrer Daten die erklärte Einwilligung. Andernfalls werden die mithilfe von Cookies verarbeiteten Daten auf Grundlage unserer berechtigten Interessen (z.B. an einem betriebswirtschaftlichen Betrieb unseres Onlineangebotes und dessen Verbesserung) verarbeitet oder, wenn der Einsatz von Cookies erforderlich ist, um unsere vertraglichen Verpflichtungen zu erfüllen. Speicherdauer: Sofern wir Ihnen keine expliziten Angaben zur Speicherdauer von permanenten Cookies mitteilen (z. B. im Rahmen eines sog. Cookie-Opt-Ins), gehen Sie bitte davon aus, dass die Speicherdauer bis zu zwei Jahre betragen kann. Allgemeine Hinweise zum Widerruf und Widerspruch (Opt-Out): Abhängig davon, ob die Verarbeitung auf Grundlage einer Einwilligung oder gesetzlichen Erlaubnis erfolgt, haben Sie jederzeit die Möglichkeit, eine erteilte Einwilligung zu widerrufen oder der Verarbeitung Ihrer Daten durch Cookie-Technologien zu widersprechen (zusammenfassend als "Opt-Out" bezeichnet). Sie können Ihren Widerspruch zunächst mittels der Einstellungen Ihres Browsers erklären, z.B., indem Sie die Nutzung von Cookies deaktivieren (wobei hierdurch auch die Funktionsfähigkeit unseres Onlineangebotes eingeschränkt werden kann). Ein Widerspruch gegen den Einsatz von Cookies zu Zwecken des Onlinemarketings kann auch mittels einer Vielzahl von Diensten, vor allem im Fall des Trackings, über die Webseiten https://optout.aboutads.info und https://www.youronlinechoices.com/ erklärt werden. Daneben können Sie weitere Widerspruchshinweise im Rahmen der Angaben zu den eingesetzten Dienstleistern und Cookies erhalten. Verarbeitete Datenarten: Nutzungsdaten (z.B. besuchte Webseiten, Interesse an Inhalten, Zugriffszeiten), Meta-/Kommunikationsdaten (z.B. Geräte-Informationen, IP-Adressen). Betroffene Personen: Nutzer (z.B. Webseitenbesucher, Nutzer von Onlinediensten). Rechtsgrundlagen: Einwilligung (Art. 6 Abs. 1 S. 1 lit. a DSGVO), Berechtigte Interessen (Art. 6 Abs. 1 S. 1 lit. f. DSGVO). ## Kommerzielle und geschäftliche Leistungen Wir verarbeiten Daten unserer Vertrags- und Geschäftspartner, z.B. Kunden und Interessenten (zusammenfassend bezeichnet als "Vertragspartner") im Rahmen von vertraglichen und vergleichbaren Rechtsverhältnissen sowie damit verbundenen Maßnahmen und im Rahmen der Kommunikation mit den Vertragspartnern (oder vorvertraglich), z.B., um Anfragen zu beantworten. Diese Daten verarbeiten wir zur Erfüllung unserer vertraglichen Pflichten, zur Sicherung unserer Rechte und zu Zwecken der mit diesen Angaben einhergehenden Verwaltungsaufgaben sowie der unternehmerischen Organisation. Die Daten der Vertragspartner geben wir im Rahmen des geltenden Rechts nur insoweit an Dritte weiter, als dies zu den vorgenannten Zwecken oder zur Erfüllung gesetzlicher Pflichten erforderlich ist oder mit Einwilligung der betroffenen Personen erfolgt (z.B. an beteiligte Telekommunikations-, Transport- und sonstige Hilfsdienste sowie Subunternehmer, Banken, Steuer- und Rechtsberater, Zahlungsdienstleister oder Steuerbehörden). Über weitere Verarbeitungsformen, z.B. zu Zwecken des Marketings, werden die Vertragspartner im Rahmen dieser Datenschutzerklärung informiert. Welche Daten für die vorgenannten Zwecke erforderlich sind, teilen wir den Vertragspartnern vor oder im Rahmen der Datenerhebung, z.B. in Onlineformularen, durch besondere Kennzeichnung (z.B. Farben) bzw. Symbole (z.B. Sternchen o.ä.), oder persönlich mit. Wir löschen die Daten nach Ablauf gesetzlicher Gewährleistungs- und vergleichbarer Pflichten, d.h., grundsätzlich nach Ablauf von 4 Jahren, es sei denn, dass die Daten in einem Kundenkonto gespeichert werden, z.B., solange sie aus gesetzlichen Gründen der Archivierung aufbewahrt werden müssen (z.B. für Steuerzwecke im Regelfall 10 Jahre). Daten, die uns im Rahmen eines Auftrags durch den Vertragspartner offengelegt wurden, löschen wir entsprechend den Vorgaben des Auftrags, grundsätzlich nach Ende des Auftrags. Soweit wir zur Erbringung unserer Leistungen Drittanbieter oder Plattformen einsetzen, gelten im Verhältnis zwischen den Nutzern und den Anbietern die Geschäftsbedingungen und Datenschutzhinweise der jeweiligen Drittanbieter oder Plattformen. Kundenkonto: Vertragspartner können innerhalb unseres Onlineangebotes ein Konto anlegen (z.B. Kunden- bzw. Nutzerkonto, kurz "Kundenkonto"). Falls die Registrierung eines Kundenkontos erforderlich ist, werden Vertragspartner hierauf ebenso hingewiesen wie auf die für die Registrierung erforderlichen Angaben. Die Kundenkonten sind nicht öffentlich und können von Suchmaschinen nicht indexiert werden. Im Rahmen der Registrierung sowie anschließender Anmeldungen und Nutzungen des Kundenkontos speichern wir die IP-Adressen der Kunden nebst den Zugriffszeitpunkten, um die Registrierung nachweisen und etwaigem Missbrauch des Kundenkontos vorbeugen zu können. Wenn Kunden ihr Kundenkonto gekündigt haben, werden die das Kundenkonto betreffenden Daten gelöscht, vorbehaltlich, deren Aufbewahrung ist aus gesetzlichen Gründen erforderlich. Es obliegt den Kunden, ihre Daten bei erfolgter Kündigung des Kundenkontos zu sichern. Weitere Informationen zu kommerziellen Dienstleistungen: Wir verarbeiten die Daten unserer Kunden sowie Auftraggeber (nachfolgend einheitlich als "Kunden" bezeichnet), um ihnen die Auswahl, den Erwerb bzw. die Beauftragung der gewählten Leistungen oder Werke sowie verbundener Tätigkeiten als auch deren Bezahlung und Zustellung bzw. Ausführung oder Erbringung zu ermöglichen. Die erforderlichen Angaben sind als solche im Rahmen des Auftrags-, Bestell- bzw. vergleichbaren Vertragsschlusses gekennzeichnet und umfassen die zur Leistungserbringung und Abrechnung benötigten Angaben sowie Kontaktinformationen, um etwaige Rücksprachen halten zu können. Verarbeitete Datenarten: Bestandsdaten (z.B. Namen, Adressen), Zahlungsdaten (z.B. Bankverbindungen, Rechnungen, Zahlungshistorie), Kontaktdaten (z.B. E-Mail, Telefonnummern), Vertragsdaten (z.B. Vertragsgegenstand, Laufzeit, Kundenkategorie), Nutzungsdaten (z.B. besuchte Webseiten, Interesse an Inhalten, Zugriffszeiten), Meta-/Kommunikationsdaten (z.B. Geräte-Informationen, IP-Adressen). Betroffene Personen: Interessenten, Geschäfts- und Vertragspartner, Kunden. Zwecke der Verarbeitung: Vertragliche Leistungen und Service, Kontaktanfragen und Kommunikation, Büro- und Organisationsverfahren, Verwaltung und Beantwortung von Anfragen, Sicherheitsmaßnahmen. Rechtsgrundlagen: Vertragserfüllung und vorvertragliche Anfragen (Art. 6 Abs. 1 S. 1 lit. b. DSGVO), Rechtliche Verpflichtung (Art. 6 Abs. 1 S. 1 lit. c. DSGVO), Berechtigte Interessen (Art. 6 Abs. 1 S. 1 lit. f. DSGVO). ## Bereitstellung des Onlineangebotes und Webhosting Um unser Onlineangebot sicher und effizient bereitstellen zu können, nehmen wir die Leistungen von einem oder mehreren Webhosting-Anbietern in Anspruch, von deren Servern (bzw. von ihnen verwalteten Servern) das Onlineangebot abgerufen werden kann. Zu diesen Zwecken können wir Infrastruktur- und Plattformdienstleistungen, Rechenkapazität, Speicherplatz und Datenbankdienste sowie Sicherheitsleistungen und technische Wartungsleistungen in Anspruch nehmen. Zu den im Rahmen der Bereitstellung des Hostingangebotes verarbeiteten Daten können alle die Nutzer unseres Onlineangebotes betreffenden Angaben gehören, die im Rahmen der Nutzung und der Kommunikation anfallen. Hierzu gehören regelmäßig die IP-Adresse, die notwendig ist, um die Inhalte von Onlineangeboten an Browser ausliefern zu können, und alle innerhalb unseres Onlineangebotes oder von Webseiten getätigten Eingaben. Erhebung von Zugriffsdaten und Logfiles: Wir selbst (bzw. unser Webhostinganbieter) erheben Daten zu jedem Zugriff auf den Server (sogenannte Serverlogfiles). Zu den Serverlogfiles können die Adresse und Name der abgerufenen Webseiten und Dateien, Datum und Uhrzeit des Abrufs, übertragene Datenmengen, Meldung über erfolgreichen Abruf, Browsertyp nebst Version, das Betriebssystem des Nutzers, Referrer URL (die zuvor besuchte Seite) und im Regelfall IP-Adressen und der anfragende Provider gehören. Die Serverlogfiles können zum einen zu Zwecken der Sicherheit eingesetzt werden, z.B., um eine Überlastung der Server zu vermeiden (insbesondere im Fall von missbräuchlichen Angriffen, sogenannten DDoS-Attacken) und zum anderen, um die Auslastung der Server und ihre Stabilität sicherzustellen. Content-Delivery-Network: Wir setzen ein "Content-Delivery-Network" (CDN) ein. Ein CDN ist ein Dienst, mit dessen Hilfe Inhalte eines Onlineangebotes, insbesondere große Mediendateien, wie Grafiken oder Programm-Skripte, mit Hilfe regional verteilter und über das Internet verbundener Server schneller und sicherer ausgeliefert werden können. Verarbeitete Datenarten: Inhaltsdaten (z.B. Texteingaben, Fotografien, Videos), Nutzungsdaten (z.B. besuchte Webseiten, Interesse an Inhalten, Zugriffszeiten), Meta-/Kommunikationsdaten (z.B. Geräte-Informationen, IP-Adressen). Betroffene Personen: Nutzer (z.B. Webseitenbesucher, Nutzer von Onlinediensten), Kunden. Zwecke der Verarbeitung: Content Delivery Network (CDN), Vertragliche Leistungen und Service, Sicherheitsmaßnahmen. Rechtsgrundlagen: Berechtigte Interessen (Art. 6 Abs. 1 S. 1 lit. f. DSGVO), Vertragserfüllung und vorvertragliche Anfragen (Art. 6 Abs. 1 S. 1 lit. b. DSGVO). Eingesetzte Dienste und Diensteanbieter: Sentry: Überwachung der Systemstabilität und Ermittlung von Codefehlern - Angaben zum Gerät oder Fehlerzeitpunkt werden pseudonym erhoben und werden anschließend gelöscht; Dienstanbieter: Functional Software Inc., Sentry, 132 Hawthorne Street, San Francisco, California 94107, USA; Website: https://sentry.io; Sicherheitsmaßnahmen: IP-Masking (Pseudonymisierung der IP-Adresse); Datenschutzerklärung: https://sentry.io/privacy. ## Besondere Hinweise zu Applikationen (Apps) Wir verarbeiten die Daten der Nutzer unserer Applikation, soweit diese erforderlich sind, um den Nutzern die Applikation sowie deren Funktionalitäten bereitstellen, deren Sicherheit überwachen und sie weiterentwickeln zu können. Wir können ferner Nutzer unter Beachtung der gesetzlichen Vorgaben kontaktieren, sofern die Kommunikation zu Zwecken der Administration oder Nutzung der Applikation erforderlich ist. Im Übrigen verweisen wir im Hinblick auf die Verarbeitung der Daten der Nutzer auf die Datenschutzhinweise in dieser Datenschutzerklärung. Rechtsgrundlagen: Die Verarbeitung von Daten, die für die Bereitstellung der Funktionalitäten der Applikation erforderlich ist, dient der Erfüllung von vertraglichen Pflichten. Dies gilt auch, wenn die Bereitstellung der Funktionen eine Berechtigung der Nutzer (z. B. Freigaben von Gerätefunktionen) voraussetzt. Sofern die Verarbeitung von Daten für die Bereitstellung der Funktionalitäten der Applikation nicht erforderlich ist, aber der Sicherheit der Applikation oder unseren betriebswirtschaftlichen Interessen dient (z. B. Erhebung von Daten zu Zwecken der Optimierung der Applikation oder Sicherheitszwecken), erfolgt sie auf Grundlage unserer berechtigten Interessen. Sofern Nutzer ausdrücklich deren Einwilligung in die Verarbeitung ihrer Daten gebeten werden, erfolgt die Verarbeitung der von der Einwilligung umfassten Daten auf Grundlage der Einwilligung. Kein Standortverlauf und keine Bewegungsprofile: Die Standortdaten werden lediglich punktuell eingesetzt und nicht zur Bildung eines Standortverlaufs oder eines Bewegungsprofils der verwendeten Geräte, bzw. ihrer Nutzer verarbeitet. Verarbeitete Datenarten: Bestandsdaten (z.B. Namen, Adressen), Meta-/Kommunikationsdaten (z.B. Geräte-Informationen, IP-Adressen), Standortdaten (Daten, die den Standort des Endgeräts eines Endnutzers angeben). Zwecke der Verarbeitung: Vertragliche Leistungen und Service. Rechtsgrundlagen: Einwilligung (Art. 6 Abs. 1 S. 1 lit. a DSGVO), Vertragserfüllung und vorvertragliche Anfragen (Art. 6 Abs. 1 S. 1 lit. b. DSGVO), Berechtigte Interessen (Art. 6 Abs. 1 S. 1 lit. f. DSGVO). ## Registrierung, Anmeldung und Nutzerkonto Nutzer können ein Nutzerkonto anlegen. Im Rahmen der Registrierung werden den Nutzern die erforderlichen Pflichtangaben mitgeteilt und zu Zwecken der Bereitstellung des Nutzerkontos auf Grundlage vertraglicher Pflichterfüllung verarbeitet. Zu den verarbeiteten Daten gehören insbesondere die Login-Informationen (Name, Passwort sowie eine E-Mail-Adresse). Die im Rahmen der Registrierung eingegebenen Daten werden für die Zwecke der Nutzung des Nutzerkontos und dessen Zwecks verwendet. Die Nutzer können über Vorgänge, die für deren Nutzerkonto relevant sind, wie z.B. technische Änderungen, per E-Mail informiert werden. Wenn Nutzer ihr Nutzerkonto gekündigt haben, werden deren Daten im Hinblick auf das Nutzerkonto, vorbehaltlich einer gesetzlichen Aufbewahrungspflicht, gelöscht. Es obliegt den Nutzern, ihre Daten bei erfolgter Kündigung vor dem Vertragsende zu sichern. Wir sind berechtigt, sämtliche während der Vertragsdauer gespeicherte Daten des Nutzers unwiederbringlich zu löschen. Im Rahmen der Inanspruchnahme unserer Registrierungs- und Anmeldefunktionen sowie der Nutzung des Nutzerkontos speichern wir die IP-Adresse und den Zeitpunkt der jeweiligen Nutzerhandlung. Die Speicherung erfolgt auf Grundlage unserer berechtigten Interessen als auch jener der Nutzer an einem Schutz vor Missbrauch und sonstiger unbefugter Nutzung. Eine Weitergabe dieser Daten an Dritte erfolgt grundsätzlich nicht, es sei denn, sie ist zur Verfolgung unserer Ansprüche erforderlich oder es besteht eine gesetzliche Verpflichtung hierzu. Verarbeitete Datenarten: Bestandsdaten (z.B. Namen, Adressen), Kontaktdaten (z.B. E-Mail, Telefonnummern), Inhaltsdaten (z.B. Texteingaben, Fotografien, Videos), Meta-/Kommunikationsdaten (z.B. Geräte-Informationen, IP-Adressen). Betroffene Personen: Nutzer (z.B. Webseitenbesucher, Nutzer von Onlinediensten). Zwecke der Verarbeitung: Vertragliche Leistungen und Service, Sicherheitsmaßnahmen, Verwaltung und Beantwortung von Anfragen. Rechtsgrundlagen: Einwilligung (Art. 6 Abs. 1 S. 1 lit. a DSGVO), Vertragserfüllung und vorvertragliche Anfragen (Art. 6 Abs. 1 S. 1 lit. b. DSGVO), Berechtigte Interessen (Art. 6 Abs. 1 S. 1 lit. f. DSGVO). ## Single-Sign-On-Anmeldung Als "Single-Sign-On“ oder "Single-Sign-On-Anmeldung bzw. "-Authentifizierung“ werden Verfahren bezeichnet, die es Nutzern erlauben, sich mit Hilfe eines Nutzerkontos bei einem Anbieter von Single-Sign-On-Verfahren (z.B. einem sozialen Netzwerk), auch bei unserem Onlineangebot, anzumelden. Voraussetzung der Single-Sign-On-Authentifizierung ist, dass die Nutzer bei dem jeweiligen Single-Sign-On-Anbieter registriert sind und die erforderlichen Zugangsdaten in dem dafür vorgesehenen Onlineformular eingeben, bzw. schon bei dem Single-Sign-On-Anbieter angemeldet sind und die Single-Sign-On-Anmeldung via Schaltfläche bestätigen. Die Authentifizierung erfolgt direkt bei dem jeweiligen Single-Sign-On-Anbieter. Im Rahmen einer solchen Authentifizierung erhalten wir eine Nutzer-ID mit der Information, dass der Nutzer unter dieser Nutzer-ID beim jeweiligen Single-Sign-On-Anbieter eingeloggt ist und eine für uns für andere Zwecke nicht weiter nutzbare ID (sog "User Handle“). Ob uns zusätzliche Daten übermittelt werden, hängt allein von dem genutzten Single-Sign-On-Verfahren ab, von den gewählten Datenfreigaben im Rahmen der Authentifizierung und zudem davon, welche Daten Nutzer in den Privatsphäre- oder sonstigen Einstellungen des Nutzerkontos beim Single-Sign-On-Anbieter freigegeben haben. Es können je nach Single-Sign-On-Anbieter und der Wahl der Nutzer verschiedene Daten sein, in der Regel sind es die E-Mail-Adresse und der Benutzername. Das im Rahmen des Single-Sign-On-Verfahrens eingegebene Passwort bei dem Single-Sign-On-Anbieter ist für uns weder einsehbar, noch wird es von uns gespeichert. Die Nutzer werden gebeten, zu beachten, dass deren bei uns gespeicherte Angaben automatisch mit ihrem Nutzerkonto beim Single-Sign-On-Anbieter abgeglichen werden können, dies jedoch nicht immer möglich ist oder tatsächlich erfolgt. Ändern sich z.B. die E-Mail-Adressen der Nutzer, müssen sie diese manuell in ihrem Nutzerkonto bei uns ändern. Die Single-Sign-On-Anmeldung können wir, sofern mit den Nutzern vereinbart, im Rahmen der oder vor der Vertragserfüllung einsetzen, soweit die Nutzer darum gebeten wurden, im Rahmen einer Einwilligung verarbeiten und setzen sie ansonsten auf Grundlage der berechtigten Interessen unsererseits und der Interessen der Nutzer an einem effektiven und sicheren Anmeldesystem ein. Sollten Nutzer sich einmal entscheiden, die Verknüpfung ihres Nutzerkontos beim Single-Sign-On-Anbieter nicht mehr für das Single-Sign-On-Verfahren nutzen zu wollen, müssen sie diese Verbindung innerhalb ihres Nutzerkontos beim Single-Sign-On-Anbieter aufheben. Möchten Nutzer deren Daten bei uns löschen, müssen sie ihre Registrierung bei uns kündigen. Verarbeitete Datenarten: Bestandsdaten (z.B. Namen, Adressen), Kontaktdaten (z.B. E-Mail, Telefonnummern). Betroffene Personen: Nutzer (z.B. Webseitenbesucher, Nutzer von Onlinediensten). Zwecke der Verarbeitung: Vertragliche Leistungen und Service, Anmeldeverfahren. Rechtsgrundlagen: Einwilligung (Art. 6 Abs. 1 S. 1 lit. a DSGVO), Vertragserfüllung und vorvertragliche Anfragen (Art. 6 Abs. 1 S. 1 lit. b. DSGVO), Berechtigte Interessen (Art. 6 Abs. 1 S. 1 lit. f. DSGVO). Eingesetzte Dienste und Diensteanbieter: Google Single-Sign-On: Authentifizierungsdienst; Dienstanbieter: Google Ireland Limited, Gordon House, Barrow Street, Dublin 4, Irland, Mutterunternehmen: Google LLC, 1600 Amphitheatre Parkway, Mountain View, CA 94043, USA; Website: https://www.google.de; Datenschutzerklärung: https://policies.google.com/privacy; Widerspruchsmöglichkeit (Opt-Out): Einstellungen für die Darstellung von Werbeeinblendungen: https://adssettings.google.com/authenticated. ## Plugins und eingebettete Funktionen sowie Inhalte Wir binden in unser Onlineangebot Funktions- und Inhaltselemente ein, die von den Servern ihrer jeweiligen Anbieter (nachfolgend bezeichnet als "Drittanbieter”) bezogen werden. Dabei kann es sich zum Beispiel um Grafiken, Videos oder Social-Media-Schaltflächen sowie Beiträge handeln (nachfolgend einheitlich bezeichnet als "Inhalte”). Die Einbindung setzt immer voraus, dass die Drittanbieter dieser Inhalte die IP-Adresse der Nutzer verarbeiten, da sie ohne die IP-Adresse die Inhalte nicht an deren Browser senden könnten. Die IP-Adresse ist damit für die Darstellung dieser Inhalte oder Funktionen erforderlich. Wir bemühen uns, nur solche Inhalte zu verwenden, deren jeweilige Anbieter die IP-Adresse lediglich zur Auslieferung der Inhalte verwenden. Drittanbieter können ferner sogenannte Pixel-Tags (unsichtbare Grafiken, auch als "Web Beacons" bezeichnet) für statistische oder Marketingzwecke verwenden. Durch die "Pixel-Tags" können Informationen, wie der Besucherverkehr auf den Seiten dieser Webseite, ausgewertet werden. Die pseudonymen Informationen können ferner in Cookies auf dem Gerät der Nutzer gespeichert werden und unter anderem technische Informationen zum Browser und zum Betriebssystem, zu verweisenden Webseiten, zur Besuchszeit sowie weitere Angaben zur Nutzung unseres Onlineangebotes enthalten als auch mit solchen Informationen aus anderen Quellen verbunden werden. Hinweise zu Rechtsgrundlagen: Sofern wir die Nutzer um deren Einwilligung in den Einsatz der Drittanbieter bitten, ist die Rechtsgrundlage der Verarbeitung von Daten die Einwilligung. Ansonsten werden die Daten der Nutzer auf Grundlage unserer berechtigten Interessen (d.h. Interesse an effizienten, wirtschaftlichen und empfängerfreundlichen Leistungen) verarbeitet. In diesem Zusammenhang möchten wir Sie auch auf die Informationen zur Verwendung von Cookies in dieser Datenschutzerklärung hinweisen. Verarbeitete Datenarten: Nutzungsdaten (z.B. besuchte Webseiten, Interesse an Inhalten, Zugriffszeiten), Meta-/Kommunikationsdaten (z.B. Geräte-Informationen, IP-Adressen). Betroffene Personen: Nutzer (z.B. Webseitenbesucher, Nutzer von Onlinediensten). Zwecke der Verarbeitung: Bereitstellung unseres Onlineangebotes und Nutzerfreundlichkeit, Vertragliche Leistungen und Service. Rechtsgrundlagen: Berechtigte Interessen (Art. 6 Abs. 1 S. 1 lit. f. DSGVO). Eingesetzte Dienste und Diensteanbieter: Google Fonts: Wir binden die Schriftarten ("Google Fonts") des Anbieters Google ein, wobei die Daten der Nutzer allein zu Zwecken der Darstellung der Schriftarten im Browser der Nutzer verwendet werden. Die Einbindung erfolgt auf Grundlage unserer berechtigten Interessen an einer technisch sicheren, wartungsfreien und effizienten Nutzung von Schriftarten, deren einheitlicher Darstellung sowie unter Berücksichtigung möglicher lizenzrechtlicher Restriktionen für deren Einbindung. Dienstanbieter: Google Ireland Limited, Gordon House, Barrow Street, Dublin 4, Irland, Mutterunternehmen: Google LLC, 1600 Amphitheatre Parkway, Mountain View, CA 94043, USA; Website: https://fonts.google.com/; Datenschutzerklärung: https://policies.google.com/privacy. ## Löschung von Daten Die von uns verarbeiteten Daten werden nach Maßgabe der gesetzlichen Vorgaben gelöscht, sobald deren zur Verarbeitung erlaubten Einwilligungen widerrufen werden oder sonstige Erlaubnisse entfallen (z.B., wenn der Zweck der Verarbeitung dieser Daten entfallen ist oder sie für den Zweck nicht erforderlich sind). Sofern die Daten nicht gelöscht werden, weil sie für andere und gesetzlich zulässige Zwecke erforderlich sind, wird deren Verarbeitung auf diese Zwecke beschränkt. D.h., die Daten werden gesperrt und nicht für andere Zwecke verarbeitet. Das gilt z.B. für Daten, die aus handels- oder steuerrechtlichen Gründen aufbewahrt werden müssen oder deren Speicherung zur Geltendmachung, Ausübung oder Verteidigung von Rechtsansprüchen oder zum Schutz der Rechte einer anderen natürlichen oder juristischen Person erforderlich ist. Weitere Hinweise zu der Löschung von personenbezogenen Daten können ferner im Rahmen der einzelnen Datenschutzhinweise dieser Datenschutzerklärung erfolgen. ## Änderung und Aktualisierung der Datenschutzerklärung Wir bitten Sie, sich regelmäßig über den Inhalt unserer Datenschutzerklärung zu informieren. Wir passen die Datenschutzerklärung an, sobald die Änderungen der von uns durchgeführten Datenverarbeitungen dies erforderlich machen. Wir informieren Sie, sobald durch die Änderungen eine Mitwirkungshandlung Ihrerseits (z.B. Einwilligung) oder eine sonstige individuelle Benachrichtigung erforderlich wird. Sofern wir in dieser Datenschutzerklärung Adressen und Kontaktinformationen von Unternehmen und Organisationen angeben, bitten wir zu beachten, dass die Adressen sich über die Zeit ändern können und bitten die Angaben vor Kontaktaufnahme zu prüfen. ## Rechte der betroffenen Personen Ihnen stehen als Betroffene nach der DSGVO verschiedene Rechte zu, die sich insbesondere aus Art. 15 bis 21 DSGVO ergeben: Widerspruchsrecht: Sie haben das Recht, aus Gründen, die sich aus Ihrer besonderen Situation ergeben, jederzeit gegen die Verarbeitung der Sie betreffenden personenbezogenen Daten, die aufgrund von Art. 6 Abs. 1 lit. e oder f DSGVO erfolgt, Widerspruch einzulegen; dies gilt auch für ein auf diese Bestimmungen gestütztes Profiling. Werden die Sie betreffenden personenbezogenen Daten verarbeitet, um Direktwerbung zu betreiben, haben Sie das Recht, jederzeit Widerspruch gegen die Verarbeitung der Sie betreffenden personenbezogenen Daten zum Zwecke derartiger Werbung einzulegen; dies gilt auch für das Profiling, soweit es mit solcher Direktwerbung in Verbindung steht. Widerrufsrecht bei Einwilligungen: Sie haben das Recht, erteilte Einwilligungen jederzeit zu widerrufen. Auskunftsrecht: Sie haben das Recht, eine Bestätigung darüber zu verlangen, ob betreffende Daten verarbeitet werden und auf Auskunft über diese Daten sowie auf weitere Informationen und Kopie der Daten entsprechend den gesetzlichen Vorgaben. Recht auf Berichtigung: Sie haben entsprechend den gesetzlichen Vorgaben das Recht, die Vervollständigung der Sie betreffenden Daten oder die Berichtigung der Sie betreffenden unrichtigen Daten zu verlangen. Recht auf Löschung und Einschränkung der Verarbeitung: Sie haben nach Maßgabe der gesetzlichen Vorgaben das Recht, zu verlangen, dass Sie betreffende Daten unverzüglich gelöscht werden, bzw. alternativ nach Maßgabe der gesetzlichen Vorgaben eine Einschränkung der Verarbeitung der Daten zu verlangen. Recht auf Datenübertragbarkeit: Sie haben das Recht, Sie betreffende Daten, die Sie uns bereitgestellt haben, nach Maßgabe der gesetzlichen Vorgaben in einem strukturierten, gängigen und maschinenlesbaren Format zu erhalten oder deren Übermittlung an einen anderen Verantwortlichen zu fordern. Beschwerde bei Aufsichtsbehörde: Sie haben ferner nach Maßgabe der gesetzlichen Vorgaben das Recht, bei einer Aufsichtsbehörde, insbesondere in dem Mitgliedstaat Ihres gewöhnlichen Aufenthaltsorts, Ihres Arbeitsplatzes oder des Orts des mutmaßlichen Verstoßes Beschwerde einzulegen, wenn Sie der Ansicht sind, dass die Verarbeitung der Sie betreffenden personenbezogenen Daten gegen die DSGVO verstößt. ## Begriffsdefinitionen In diesem Abschnitt erhalten Sie eine Übersicht über die in dieser Datenschutzerklärung verwendeten Begrifflichkeiten. Viele der Begriffe sind dem Gesetz entnommen und vor allem im Art. 4 DSGVO definiert. Die gesetzlichen Definitionen sind verbindlich. Die nachfolgenden Erläuterungen sollen dagegen vor allem dem Verständnis dienen. Die Begriffe sind alphabetisch sortiert. Content Delivery Network (CDN): Ein "Content Delivery Network" (CDN) ist ein Dienst, mit dessen Hilfe Inhalte eines Onlineangebotes, insbesondere große Mediendateien, wie Grafiken oder Programm-Skripte mit Hilfe regional verteilter und über das Internet verbundener Server, schneller und sicherer ausgeliefert werden können. IP-Masking: Als "IP-Masking” wird eine Methode bezeichnet, bei der das letzte Oktett, d.h., die letzten beiden Zahlen einer IP-Adresse, gelöscht wird, damit die IP-Adresse nicht mehr der eindeutigen Identifizierung einer Person dienen kann. Daher ist das IP-Masking ein Mittel zur Pseudonymisierung von Verarbeitungsverfahren, insbesondere im Onlinemarketing Personenbezogene Daten: "Personenbezogene Daten“ sind alle Informationen, die sich auf eine identifizierte oder identifizierbare natürliche Person (im Folgenden "betroffene Person“) beziehen; als identifizierbar wird eine natürliche Person angesehen, die direkt oder indirekt, insbesondere mittels Zuordnung zu einer Kennung wie einem Namen, zu einer Kennnummer, zu Standortdaten, zu einer Online-Kennung (z.B. Cookie) oder zu einem oder mehreren besonderen Merkmalen identifiziert werden kann, die Ausdruck der physischen, physiologischen, genetischen, psychischen, wirtschaftlichen, kulturellen oder sozialen Identität dieser natürlichen Person sind. Verantwortlicher: Als "Verantwortlicher“ wird die natürliche oder juristische Person, Behörde, Einrichtung oder andere Stelle, die allein oder gemeinsam mit anderen über die Zwecke und Mittel der Verarbeitung von personenbezogenen Daten entscheidet, bezeichnet. Verarbeitung: "Verarbeitung" ist jeder mit oder ohne Hilfe automatisierter Verfahren ausgeführte Vorgang oder jede solche Vorgangsreihe im Zusammenhang mit personenbezogenen Daten. Der Begriff reicht weit und umfasst praktisch jeden Umgang mit Daten, sei es das Erheben, das Auswerten, das Speichern, das Übermitteln oder das Löschen. export default ({ children }) => (
Abby is an Open Source SaaS for developers to streamline A/B testing and feature flagging.
Make data-driven decisions and improve user experience with ease.
Made for developers, by developers.{children} ); ================================================ FILE: apps/web/src/pages/profile/generate-token.tsx ================================================ import { useQuery } from "@tanstack/react-query"; import type { CreateNextContextOptions } from "@trpc/server/adapters/next"; import { Layout } from "components/Layout"; import Logo from "components/Logo"; import type { GetServerSideProps, InferGetServerSidePropsType } from "next"; import { createContext } from "server/trpc/context"; import { appRouter } from "server/trpc/router/_app"; import { match } from "ts-pattern"; import type { NextPageWithLayout } from "../_app"; const GenerateTokenPage: NextPageWithLayout< InferGetServerSidePropsType> = ({ token, callbackUrl }) => { const { status } = useQuery(["generate-token"], () => { const url = new URL(callbackUrl as string); url.searchParams.set("token", token); return fetch(url); }); return ( ); }; GenerateTokenPage.getLayout = (page) => {match(status) .with("loading", () =>Loading...
) .with("error", () =>Something went wrong!
) .with("success", () =>You can safely close this tab now!
) .exhaustive()}{page} ; export const getServerSideProps = (async (ctx) => { const trpc = appRouter.createCaller( await createContext(ctx as unknown as CreateNextContextOptions) ); const token = await trpc.apikey.createApiKey({ name: "CLI Token", }); if (typeof ctx.query.callbackUrl !== "string") { throw new Error("Missing callbackUrl"); } return { props: { token, callbackUrl: ctx.query.callbackUrl, }, }; }) satisfies GetServerSideProps; export default GenerateTokenPage; ================================================ FILE: apps/web/src/pages/profile/index.tsx ================================================ import type { CreateNextContextOptions } from "@trpc/server/adapters/next"; import { Avatar } from "components/Avatar"; import { DashboardButton } from "components/DashboardButton"; import { DashboardSection, DashboardSectionSubtitle, DashboardSectionTitle, } from "components/DashboardSection"; import { Input } from "components/Input"; import { Layout } from "components/Layout"; import { FullPageLoadingSpinner } from "components/LoadingSpinner"; import { Modal } from "components/Modal"; import { Button } from "components/ui/button"; import { ArrowLeft } from "lucide-react"; import type { GetServerSideProps } from "next"; import { useRouter } from "next/router"; import { useRef, useState } from "react"; import { toast } from "react-hot-toast"; import { BsX } from "react-icons/bs"; import { getSSRTrpc } from "server/trpc/helpers"; import { trpc } from "utils/trpc"; import type { NextPageWithLayout } from "../_app"; const CreateApiKeyModal = ({ isOpen, onClose, apiKey, }: { isOpen: boolean; onClose: () => void; name: string; apiKey: string; }) => { const [isHovered, setIsHovered] = useState(false); return ({ navigator.clipboard.writeText(apiKey); onClose(); toast.success("API Key copied"); }} size="full" isOpen={isOpen} onClose={onClose} > ); }; const RevokeApiKeyModal = ({ isOpen, onClose, apiKey, }: { isOpen: boolean; onClose: () => void; apiKey?: string; }) => { const trpcContext = trpc.useContext(); const { mutate: revokeApiKey } = trpc.apikey.revokeApiKey.useMutation({ onSuccess() { toast.success("API Key revoked"); onClose(); trpcContext.user.getApiKeyData.invalidate(); }, }); return (Ensure you copy your personal access token promptly as you won't have another opportunity to view it.setIsHovered(true)} onMouseLeave={() => setIsHovered(false)} className="py-3 focus:ring-green-400 dark:focus:ring-green-500" onClick={() => { navigator.clipboard.writeText(apiKey).then(() => { toast.success("API Key copied"); }); }} />Expires in 365 Days | Hover to reveal{ if (!apiKey) return; revokeApiKey({ id: apiKey }); }} size="full" isOpen={isOpen} onClose={onClose} > ); }; const ProfilePage: NextPageWithLayout = () => { const [apiKeyToRevoke, setApiKeyToRevoke] = useStateWanna really revoke this API Key?( undefined ); const [isCreateApiKeyModalOpen, setIsCreateApiKeyModalOpen] = useState(false); const [isRevokeApiKeyModalOpen, setIsRevokeApiKeyModalOpen] = useState(false); const [newApiKeyInfo, setNewApiKeyInfo] = useState<{ name: string; apiKey: string; } | null>(null); const apiKeyNameRef = useRef (null); const trpcContext = trpc.useContext(); const { data, isLoading } = trpc.user.me.useQuery(); const { data: apiKeyData, isLoading: isAPIKeyDataLoading, isError: isAPIKeyDataError, } = trpc.user.getApiKeyData.useQuery(); const updateProfileMutation = trpc.user.updateProfile.useMutation(); const router = useRouter(); const onSubmit = async (e: React.FormEvent ) => { e.preventDefault(); const formData = new FormData(e.currentTarget); const name = formData.get("name") as string; await updateProfileMutation.mutateAsync({ name }); trpcContext.user.me.invalidate(); toast.success("Profile updated successfully"); }; const { mutateAsync: createApiKey } = trpc.apikey.createApiKey.useMutation({ onSuccess() { setIsCreateApiKeyModalOpen(true); trpcContext.user.getApiKeyData.invalidate(); }, }); if (isLoading) return ; return ( <> router.back()} > Go Back Account Settings
API Keys API Keys are used to authenticate with the API. {isAPIKeyDataLoading || isAPIKeyDataError ? () : ( <> {apiKeyData.apiKeys.map( ({ name: apiKeyName, id: apiKeyId }) => ( ) )} > )}{apiKeyName}{ setIsCreateApiKeyModalOpen(false); setNewApiKeyInfo(null); }} /> { setIsRevokeApiKeyModalOpen(false); setApiKeyToRevoke(undefined); }} /> > ); }; ProfilePage.getLayout = (page) => {page} ; export const getServerSideProps: GetServerSideProps = async (ctx) => { const trpc = await getSSRTrpc(ctx as unknown as CreateNextContextOptions); await trpc.user.me.prefetch(); return { props: { trpcState: trpc.dehydrate(), }, }; }; export default ProfilePage; ================================================ FILE: apps/web/src/pages/projects/[projectId]/environments.tsx ================================================ import { DndContext, type DragEndEvent, PointerSensor, closestCenter, useSensor, useSensors, } from "@dnd-kit/core"; import { SortableContext, arrayMove, useSortable, verticalListSortingStrategy, } from "@dnd-kit/sortable"; import { CSS } from "@dnd-kit/utilities"; import { type Environment, FeatureFlagType } from "@prisma/client"; import { CreateEnvironmentModal } from "components/CreateEnvironmentModal"; import { DashboardHeader } from "components/DashboardHeader"; import { Layout } from "components/Layout"; import { FullPageLoadingSpinner } from "components/LoadingSpinner"; import { Modal } from "components/Modal"; import { Button } from "components/ui/button"; import { Card, CardContent, CardHeader } from "components/ui/card"; import { EnvironmentBadge } from "components/ui/environment-badge"; import { useProjectId } from "lib/hooks/useProjectId"; import { GripVertical, Pencil, Trash } from "lucide-react"; import type { GetStaticPaths, GetStaticProps } from "next"; import type { NextPageWithLayout } from "pages/_app"; import { useState } from "react"; import { toast } from "react-hot-toast"; import { trpc } from "utils/trpc"; function EnvironmentItem({ environment, projectId, setDeleteState, }: { environment: Environment; projectId: string; setDeleteState: () => void; }) { const trpcContext = trpc.useContext(); const { mutate: renameEnvironment } = trpc.environments.updateName.useMutation({ onSuccess: () => { trpcContext.flags.getFlags.invalidate({ projectId }); }, }); const { attributes, listeners, setNodeRef, transform, transition } = useSortable({ id: environment.id }); const style = { transform: CSS.Transform.toString(transform), transition, }; return (); } const DeleteEnvironmentModal = ({ isOpen, onClose, environment, projectId, }: { isOpen: boolean; onClose: () => void; environment: Environment; projectId: string; }) => { const trpcContext = trpc.useContext(); const { mutate: deleteEnvironment } = trpc.environments.deleteEnvironment.useMutation({ onSuccess: async () => { await trpcContext.flags.getFlags.invalidate({ projectId }); toast.success("Deleted environment"); onClose(); }, onError() { toast.error("Failed to delete environment"); }, }); return ( deleteEnvironment({ environmentId: environment.id })} isOpen={isOpen} onClose={onClose} > ); }; const EnvironmentPage: NextPageWithLayout = () => { const trpcContext = trpc.useContext(); const [environments, setEnvironments] = useStateAre you sure that you want to delete the environment{" "}
? >([]); const [isCreateEnvironmentModalOpen, setIsCreateEnvironmentModalOpen] = useState(false); const [activeEnvironmentInfo, setActiveEnvironmentInfo] = useState<{ id: string; action: "delete"; } | null>(null); const projectId = useProjectId(); const { data, isLoading, isError } = trpc.flags.getFlags.useQuery( { projectId, types: Object.values(FeatureFlagType), }, { onSuccess: (data) => { setEnvironments(data.environments); }, } ); const activeEnvironment = data?.environments.find( (environment) => environment.id === activeEnvironmentInfo?.id ); const { mutate } = trpc.environments.updateEnvironmentSort.useMutation({ onSuccess: async () => { await trpcContext.flags.getFlags.invalidate({ projectId }); toast.success("Successfully updated environment order"); }, }); const handleDragEnd = (event: DragEndEvent) => { const { active, over } = event; if (active.id !== over?.id) { const oldIndex = environments.findIndex((el) => el.id === active.id); const newIndex = environments.findIndex((el) => el.id === over?.id); const newEnvs = arrayMove(environments, oldIndex, newIndex); setEnvironments(newEnvs); mutate({ environments: newEnvs.map((env, i) => ({ id: env.id, sortIndex: i, })), }); } }; const dndSensors = useSensors( useSensor(PointerSensor, { activationConstraint: { distance: 8, }, }) ); if (isLoading || isError) return ; if (data.environments.length === 0) return ( ); return (You don't have any environments set up!
setIsCreateEnvironmentModalOpen(false)} projectId={projectId} /> ); }; EnvironmentPage.getLayout = (page) => { return (Manage Environments
Create and organize environments for your feature flags. Drag to reorder.
{environments.map((environment) => ({ setActiveEnvironmentInfo({ id: environment.id, action: "delete", }); }} /> ))} setIsCreateEnvironmentModalOpen(false)} projectId={projectId} /> {activeEnvironment && ( setActiveEnvironmentInfo(null)} /> )} ); }; export const getStaticProps: GetStaticProps = async () => { return { props: {}, }; }; export const getStaticPaths: GetStaticPaths = async () => { return { paths: [], fallback: true, }; }; export default EnvironmentPage; ================================================ FILE: apps/web/src/pages/projects/[projectId]/events.tsx ================================================ import { DashboardHeader } from "components/DashboardHeader"; import { Layout } from "components/Layout"; import { FullPageLoadingSpinner } from "components/LoadingSpinner"; import { Avatar } from "components/Avatar"; import { Tooltip, TooltipContent, TooltipTrigger } from "components/Tooltip"; import { Button } from "components/ui/button"; import { Table, TableBody, TableCaption, TableCell, TableHead, TableHeader, TableRow, } from "components/ui/table"; import dayjs from "dayjs"; import relativeTime from "dayjs/plugin/relativeTime"; import { useProjectId } from "lib/hooks/useProjectId"; import type { GetStaticPaths, GetStaticProps } from "next"; import type { NextPageWithLayout } from "pages/_app"; import toast from "react-hot-toast"; import { trpc } from "utils/trpc"; dayjs.extend(relativeTime); function getValueClass(value: string | null) { if (value === "true") return "text-green-500"; if (value === "false") return "text-red-500"; return "text-gray-500 font-medium"; } const EventsPage: NextPageWithLayout = () => { const projectId = useProjectId(); const getEventLogsQuery = trpc.project.getEventLogs.useInfiniteQuery( { projectId, }, { enabled: !!projectId, getNextPageParam: (lastPage) => lastPage.nextCursor, } ); if (getEventLogsQuery.isLoading || getEventLogsQuery.isError) return {page} ; return ( ); }; EventsPage.getLayout = (page) => { return (
Flag Environment Change User Event Date {getEventLogsQuery.data.pages.flatMap((p) => p.items.map((event) => ( )) )} {event.flagValue.flag.name} {event.flagValue.environment.name} {event.oldValue ?? "unset"} {" "} →{" "} {event.newValue ?? "unset"} {event.user.name ?? event.user.email ?? "Deleted User"} { try { await navigator.clipboard.writeText( event.createdAt.toISOString() ); toast.success("Copied date to clipboard"); } catch (_e) { toast.error("Failed to copy date to clipboard"); } }} > {dayjs(event.createdAt).fromNow()} {event.createdAt.toLocaleString()} ); }; export const getStaticProps: GetStaticProps = async () => { return { props: {}, }; }; export const getStaticPaths: GetStaticPaths = async () => { return { paths: [], fallback: true, }; }; export default EventsPage; ================================================ FILE: apps/web/src/pages/projects/[projectId]/flags/[flagId].tsx ================================================ import type { ValidatorType } from "@tryabby/core"; import type { FlagRuleSet } from "@tryabby/core/schema"; import { Avatar } from "components/Avatar"; import { DashboardHeader } from "components/DashboardHeader"; import { getHistoryEventDescription } from "components/FeatureFlag"; import { Layout } from "components/Layout"; import { FlagRulesEditor } from "components/flags/RuleSetEditor"; import { Button } from "components/ui/button"; import { Card, CardContent, CardHeader, CardTitle } from "components/ui/card"; import { Label } from "components/ui/label"; import dayjs from "dayjs"; import relativeTime from "dayjs/plugin/relativeTime"; import { getEnvironmentStyle } from "lib/environment-styles"; import { cn } from "lib/utils"; import { AlertCircle, Plus } from "lucide-react"; import { useRouter } from "next/router"; import type { NextPageWithLayout } from "pages/_app"; import toast from "react-hot-toast"; import { trpc } from "utils/trpc"; dayjs.extend(relativeTime); const FlagDetailPage: NextPageWithLayout = () => { const router = useRouter(); const flagId = router.query.flagId as string; const flagQuery = trpc.flags.getFlagByValueId.useQuery({ flagValueId: flagId, }); const updateFlagMutation = trpc.flags.updateFlagRuleSet.useMutation({ onSuccess: () => { toast.success("Flag rules updated"); }, onError: () => { toast.error("Could not save flag rules"); }, }); if (flagQuery.isLoading) { return {page} Loading...; } if (flagQuery.error || !flagQuery.data) { returnError...; } const userSchema = flagQuery.data.flag.project.userSegments[0]?.schema; return ( Environment: {(() => { const style = getEnvironmentStyle(flagQuery.data.environment.name); return ({flagQuery.data.environment.name}); })()}); }; FlagDetailPage.getLayout = (page) =>Value Configuration {flagQuery.data.flag.description && ({flagQuery.data.value}Type: {flagQuery.data.flag.type.toLowerCase()}{userSchema ? ()}dangerouslySetInnerHTML={{ __html: flagQuery.data.flag.description, }} />} flagValue={flagQuery.data.value} flagType={flagQuery.data.flag.type} onSave={(ruleSet) => { updateFlagMutation.mutate({ flagValueId: flagId, ruleSet, ruleSetId: flagQuery.data?.ruleSets[0]?.id, }); }} initialData={flagQuery.data.ruleSets[0]?.rules as FlagRuleSet} /> ) : ( )} No User Definitions Available
You need to set up user definitions first to create custom rules for this flag.
History {flagQuery.data.history.length}{" "} {flagQuery.data.history.length === 1 ? "change" : "changes"} {flagQuery.data.history.map((history) => ())}{history.user.name ?? history.user.email} {" "} {getHistoryEventDescription(history)}
{dayjs(history.createdAt).fromNow()}
{page} ; export default FlagDetailPage; ================================================ FILE: apps/web/src/pages/projects/[projectId]/flags/index.tsx ================================================ import { DashboardHeader } from "components/DashboardHeader"; import { Layout } from "components/Layout"; import { FullPageLoadingSpinner } from "components/LoadingSpinner"; import { useProjectId } from "lib/hooks/useProjectId"; import type { NextPageWithLayout } from "pages/_app"; import { trpc } from "utils/trpc"; import { FeatureFlagPageContent } from "components/FlagPage"; import type { GetStaticPaths, GetStaticProps } from "next"; const FeatureFlagsPage: NextPageWithLayout = () => { const projectId = useProjectId(); const { data, isLoading, isError } = trpc.flags.getFlags.useQuery( { projectId, types: ["BOOLEAN"], }, { enabled: !!projectId, } ); if (isLoading || isError) return; return ; }; FeatureFlagsPage.getLayout = (page) => ( ); export const getStaticProps: GetStaticProps = async () => { return { props: {}, }; }; export const getStaticPaths: GetStaticPaths = async () => { return { paths: [], fallback: true, }; }; export default FeatureFlagsPage; ================================================ FILE: apps/web/src/pages/projects/[projectId]/index.tsx ================================================ import type { inferRouterOutputs } from "@trpc/server"; import { AddABTestModal } from "components/AddABTestModal"; import { DashboardHeader } from "components/DashboardHeader"; import { Layout } from "components/Layout"; import { FullPageLoadingSpinner } from "components/LoadingSpinner"; import Section from "components/Test/Section"; import { Button } from "components/ui/button"; import { Input } from "components/ui/input"; import Fuse from "fuse.js"; import { useProjectId } from "lib/hooks/useProjectId"; import { Search } from "lucide-react"; import type { GetStaticPaths, GetStaticProps } from "next"; import type { NextPageWithLayout } from "pages/_app"; import { useMemo, useState } from "react"; import { AiOutlinePlus } from "react-icons/ai"; import type { AppRouter } from "server/trpc/router/_app"; import { trpc } from "utils/trpc"; export type ProjectClientEvents = inferRouterOutputs {page} ["project"]["getProjectData"]["project"]["tests"][number]["pingEvents"]; const Projects: NextPageWithLayout = () => { const [isCreateTestModalOpen, setIsCreateTestModalOpen] = useState(false); const [query, setQuery] = useState (""); const projectId = useProjectId(); const { data, isLoading, isError } = trpc.project.getProjectData.useQuery({ projectId: projectId, }); const fuse = useMemo( () => new Fuse(data?.project.tests ?? [], { keys: ["name"] }), [data?.project?.tests] ); const filteredTests = useMemo(() => { if (!query) return data?.project.tests ?? []; const results = fuse.search(query); return results.map((result) => result.item); }, [query, fuse.search, data?.project.tests]); if (isLoading || isError) return ; if (data.project.tests.length === 0) return ( ); return ( <>You don't have any A/B tests yet!
setIsCreateTestModalOpen(false)} projectId={projectId} /> > ); }; Projects.getLayout = (page) => ({ setQuery(e.target.value); }} /> setIsCreateTestModalOpen(false)} projectId={projectId} /> {filteredTests.map((test) => ( ))}); export const getStaticProps: GetStaticProps = async () => { return { props: {}, }; }; export const getStaticPaths: GetStaticPaths = async () => { return { paths: [], fallback: true, }; }; export default Projects; ================================================ FILE: apps/web/src/pages/projects/[projectId]/redeem.tsx ================================================ import { DashboardHeader } from "components/DashboardHeader"; import { Layout } from "components/Layout"; import { Button } from "components/ui/button"; import { Input } from "components/ui/input"; import { useProjectId } from "lib/hooks/useProjectId"; import { cn } from "lib/utils"; import { useRouter } from "next/router"; import type { NextPageWithLayout } from "pages/_app"; import { useForm } from "react-hook-form"; import { toast } from "react-hot-toast"; import { trpc } from "utils/trpc"; const CodeRedemptionPage: NextPageWithLayout = () => { const projectId = useProjectId(); const router = useRouter(); const { data: project } = trpc.project.getProjectData.useQuery({ projectId }); const { register, handleSubmit, formState } = useForm<{ code: string; }>(); const redeemCodeMutation = trpc.coupons.redeemCode.useMutation(); const onSubmit = handleSubmit(async (values) => { const toastId = toast.loading("Redeeming..."); try { await redeemCodeMutation.mutateAsync({ code: values.code, projectId, }); toast.success("Code redeemed!", { id: toastId }); router.push(`/projects/${projectId}/settings`); } catch (_e) { toast.error("Invalid Code", { id: toastId }); } }); return ( {page} ); }; CodeRedemptionPage.getLayout = (page) => { return (Redeem your Code for {project?.project.name}
); }; export default CodeRedemptionPage; ================================================ FILE: apps/web/src/pages/projects/[projectId]/remote-config.tsx ================================================ import { DashboardHeader } from "components/DashboardHeader"; import { Layout } from "components/Layout"; import { FullPageLoadingSpinner } from "components/LoadingSpinner"; import { useProjectId } from "lib/hooks/useProjectId"; import type { NextPageWithLayout } from "pages/_app"; import { trpc } from "utils/trpc"; import { FeatureFlagPageContent } from "components/FlagPage"; const RemoteConfigPage: NextPageWithLayout = () => { const projectId = useProjectId(); const { data, isLoading, isError } = trpc.flags.getFlags.useQuery( { projectId, types: ["JSON", "STRING", "NUMBER"], }, { enabled: !!projectId, } ); if (isLoading || isError) return {page} ; return ; }; RemoteConfigPage.getLayout = (page) => ( ); export default RemoteConfigPage; ================================================ FILE: apps/web/src/pages/projects/[projectId]/settings.tsx ================================================ import { ROLE, type User } from "@prisma/client"; import { GitHubLogoIcon } from "@radix-ui/react-icons"; import clsx from "clsx"; import { DashboardButton } from "components/DashboardButton"; import { DashboardSection, DashboardSectionSubtitle, DashboardSectionTitle, } from "components/DashboardSection"; import { DeleteProjectModal } from "components/DeleteProjectModal"; import { Layout } from "components/Layout"; import { FullPageLoadingSpinner } from "components/LoadingSpinner"; import { Progress } from "components/Progress"; import { RemoveUserModal } from "components/RemoveUserModal"; import { Integrations } from "components/settings/Integrations"; import { UserSegmentDisplay } from "components/settings/Segments"; import { Button } from "components/ui/button"; import { Input } from "components/ui/input"; import { Tabs, TabsContent, TabsList, TabsTrigger } from "components/ui/tabs"; import dayjs from "dayjs"; import { getFlagCount } from "lib/flags"; import { getProjectPaidPlan, useAbbyStripe } from "lib/stripe"; import { useTracking } from "lib/tracking"; import type { GetStaticPaths, GetStaticProps } from "next"; import { useSession } from "next-auth/react"; import Link from "next/link"; import { useRouter } from "next/router"; import { parseAsStringLiteral, useQueryState } from "nuqs"; import type { NextPageWithLayout } from "pages/_app"; import { type FormEvent, useRef, useState } from "react"; import { toast } from "react-hot-toast"; import { getLimitByPlan } from "server/common/plans"; import { trpc } from "utils/trpc"; const SETTINGS_TABS = { General: "general", Team: "team", Billing: "billing", Segments: "segments", Integrations: "integrations", Danger: "danger", } as const; const SettingsPage: NextPageWithLayout = () => { const [userToRemove, setUserToRemove] = useState {page} (null); const [isShowDeleteModal, setisShowDeleteModal] = useState(false); const inviteEmailRef = useRef (null); const [currentTab, setCurrentTab] = useQueryState( "tab", parseAsStringLiteral([ SETTINGS_TABS.General, SETTINGS_TABS.Team, SETTINGS_TABS.Billing, SETTINGS_TABS.Segments, SETTINGS_TABS.Danger, SETTINGS_TABS.Integrations, ] as const).withDefault(SETTINGS_TABS.General) ); const router = useRouter(); const trackEvent = useTracking(); const projectId = router.query.projectId as string; const projectNameRef = useRef (null); const trpcContext = trpc.useContext(); const { data, isLoading, isError } = trpc.project.getProjectData.useQuery( { projectId, }, { enabled: !!projectId, } ); const session = useSession(); const user = data?.project.users.find( (projectUser) => projectUser.user.id === session.data?.user?.id ); const projectPlan = data ? getProjectPaidPlan(data.project) : null; const limits = data ? getLimitByPlan(projectPlan) : null; const { mutate: updateProjectName } = trpc.project.updateName.useMutation({ onSuccess() { toast.success("Project name updated"); trpcContext.project.getProjectData.invalidate(); trpcContext.user.getProjects.invalidate(); }, }); const { mutateAsync } = trpc.invite.createInvite.useMutation(); const { redirectToCheckout, redirectToBillingPortal } = useAbbyStripe(); const deleteProject = async () => { if (!projectId) return; setisShowDeleteModal(true); }; const onInvite = async (e: FormEvent) => { e.preventDefault(); const email = inviteEmailRef.current?.value; if (!email) return; toast.promise( (async () => { await mutateAsync({ projectId, email, }); if (!inviteEmailRef.current) return; inviteEmailRef.current.value = ""; })(), { error: "Failed to send invite", loading: "Sending invite...", success: "Invite sent", } ); }; const isPlanWithStripe = projectPlan !== null && projectPlan !== "BETA"; return ( ); }; SettingsPage.getLayout = (page) => Project Settings
{isLoading || isError ? () : ( setCurrentTab( newTab as (typeof SETTINGS_TABS)[keyof typeof SETTINGS_TABS] ) } className="w-full h-full" > )}{Object.entries(SETTINGS_TABS).map(([key, value]) => ( {key} ))}General Details Members Members have access to this project {data.project.users.map(({ user, role }) => ())}{user.email} {role.toLowerCase()}{role !== ROLE.ADMIN && ( )}User Segments User segments let you target specific groups of users with different feature flags and experiments. Define rules based on user properties to create powerful, targeted experiences. {data.project.userSegments[0] ? () : (Your active user segment will be applied to all feature flags and experiments that use segmentation.
)}No user segments configured yet
User segments help you target specific users with different features based on properties like role, location, or any custom attributes.
Learn how to set up user segments in our docs →Integrations Manage your integrations {data.project.integrations.length === 0 ? () : ()} Usage Current Billing Cycle ( {dayjs(data.project.currentPeriodEnd) .subtract(30, "days") .format("MMM DD")}{" "} - {dayjs(data.project.currentPeriodEnd).format("MMM DD")}) Current Plan:
{projectPlan ?? "Free"}{ trackEvent("Plan Upgrade Clicked", { props: { Plan: "STARTUP" }, }); redirectToCheckout(projectId, "STARTUP"); }} > Upgrade to Startup { trackEvent("Plan Upgrade Clicked", { props: { Plan: "PRO" }, }); redirectToCheckout(projectId, "PRO"); }} > Upgrade to Pro Redeem Coupon {data.project.stripeCustomerId !== null && projectPlan !== null && ({ redirectToBillingPortal(projectId); }} > Manage )}A/B Tests:
{data.project.tests.length} /{" "} {limits?.tests === Number.POSITIVE_INFINITY ? "∞" : limits?.tests}{" "} A/B Test {data.project.tests.length === 1 ? "" : "s"} used
Flags:
{getFlagCount(data.project.featureFlags ?? [])} /{" "} {limits?.flags === Number.POSITIVE_INFINITY ? "∞" : limits?.flags}{" "} Flag {getFlagCount(data.project.featureFlags ?? []) === 1 ? "" : "s"}{" "} used
Environments:
{data.project.environments.length} /{" "} {limits?.environments === Number.POSITIVE_INFINITY ? "∞" : limits?.environments}{" "} Environment {data.project.environments.length === 1 ? "" : "s"} used
Monthly Events:
{data.project.eventsThisPeriod} /{" "} {limits?.eventsPerMonth === Number.POSITIVE_INFINITY ? "∞" : limits?.eventsPerMonth}{" "} Events
Danger Zone Delete this project and all of its data {isPlanWithStripe && (You must downgrade to the free plan before deleting this project.
)} {session.data?.user?.projectIds.length === 1 && (You must create a new project before deleting this project.
)}setUserToRemove(null)} user={userToRemove ?? undefined} /> setisShowDeleteModal(false)} /> {page} ; export const getStaticProps: GetStaticProps = async () => { return { props: {}, }; }; export const getStaticPaths: GetStaticPaths = async () => { return { paths: [], fallback: true, }; }; export default SettingsPage; ================================================ FILE: apps/web/src/pages/projects/[projectId]/tests/[testId].tsx ================================================ import { Layout } from "components/Layout"; import { LoadingSpinner } from "components/LoadingSpinner"; import { EventGraph } from "components/analytics/EventGraph"; import { Button } from "components/ui/button"; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from "components/ui/select"; import { INTERVALS, isValidInterval } from "lib/events"; import { useProjectId } from "lib/hooks/useProjectId"; import { useQueryParam, useUnsafeQueryParam } from "lib/hooks/useQueryParam"; import Link from "next/link"; import { useRouter } from "next/router"; import type { NextPageWithLayout } from "pages/_app"; import { BiArrowBack } from "react-icons/bi"; import { trpc } from "utils/trpc"; const INTERVAL_PARAM_NAME = "interval"; const TestDetailPage: NextPageWithLayout = () => { const router = useRouter(); const projectId = useProjectId(); const testId = useUnsafeQueryParam("testId"); const intervalParam = useQueryParam(INTERVAL_PARAM_NAME); const interval = intervalParam !== undefined && isValidInterval(intervalParam) ? intervalParam : INTERVALS[1].value; const getEventsQuery = trpc.events.getEventsByTestId.useQuery( { testId, interval, }, { enabled: !!testId, } ); if (getEventsQuery.isLoading || getEventsQuery.isError) { return; } /** * needed for the graph * 1. list of all events. sorted by date * 2. each entry has a key for each variant and the number of events for that variant */ return ( ); }; TestDetailPage.getLayout = (page) =>{getEventsQuery.data.currentTest.name}
{page} ; export default TestDetailPage; ================================================ FILE: apps/web/src/pages/redeem.tsx ================================================ import { MarketingLayout } from "components/MarketingLayout"; import Link from "next/link"; import type { NextPageWithLayout } from "./_app"; const RedemptionPage: NextPageWithLayout = () => { return (); }; RedemptionPage.getLayout = (page) => ( Hey there 👋
You are awesome 🥳
Thank you very much for believing in Abby and buying a Lifetime License. In order to redeem your license, you need to create an account first.
You can do this for free{" "} here
After you signed up, you can then enter redeem your code at the bottom of the Settings page.
Important: If you already have a subscription, make sure to cancel it first as it will be overridden.
{page} ); export default RedemptionPage; ================================================ FILE: apps/web/src/pages/signup.tsx ================================================ import Link from "next/link"; import Logo from "components/Logo"; import { UserAuthForm } from "components/UserAuthForm"; import { buttonVariants } from "components/ui/button"; import { cn } from "lib/utils"; const DEFAULT_CALLBACK_URL = "/projects"; export default function AuthenticationPage() { return ( <>Login> ); } ================================================ FILE: apps/web/src/pages/terms.mdx ================================================ import { MarketingLayout } from "components/MarketingLayout"; # Terms of Service / Nutzungsbedingungen Die dynabase Technologies GmbH, Von-Wert-Str. 37, 50670 Köln („Betreiber“), betreibt das Content-Management-Portal „a/bby“ und stellt den Nutzern die auf dem Internetportal tryabby.com angebotenen Dienste unter der Geltung der nachfolgenden Nutzungsbedingungen zur Verfügung. Für die Nutzung von a/bby gelten im Verhältnis zwischen dem Nutzer und dem Betreiber die folgenden Nutzungsbedingungen. Die Nutzung von a/bby ist nur zulässig, wenn der Nutzer diese Nutzungsbedingungen akzeptiert. 1. Umfang des Online-Angebots 1.1 Der Betreiber stellt eine Online Plattform zur Verfügung, auf der Nutzer A/B-Tests und Content-Toggles konfigurieren können. Die geschieht durch das Anlegen von Projekten, in denen Content auf anderen Webseiten verändert werden kann. Diese anderen Webseiten kommunizieren mit diesem Portal und nutzen entsprechend die getätigten Konfigurationen. 1.2 Die Nutzung der Plattform ist grundsätzlich kostenfrei, erforderlich ist aber eine Mitgliedschaft. Zur Nutzung muss sich der Nutzer daher registrieren. Der Nutzer kann seine persönlichen Daten selbst verwalten und jederzeit ändern. Es besteht kein Rechtsanspruch auf die Nutzung von a/bby. Der Betreiber kann den Zugang des Nutzers zum Dienst vorübergehend einschränken oder unterbrechen. Der Betreiber stellt die Anwendung nach Best Effort zur Verfügung und übernimmt keine darüber hinausgehenden Leistungspflichten. Insbesondere besteht kein Anspruch des Nutzers auf eine ständige Verfügbarkeit des Dienstes. 1.3 Der Betreiber stellt nur die Plattform zur Verfügung. Die Verantwortung für Inhalte liegt allein bei den jeweiligen Nutzern bzw. den jeweiligen Autoren. 1.4 Das Angebot der Plattform erfolgt zunächst komplett auf Englisch. Der Betreiber kann später weitere Sprachversionen nach eigenem Ermessen hinzufügen. 1.5 Der Besuch der Plattform kann erfolgen, ohne dass Cookies gesetzt werden. Ein Cookie wird aber gesetzt, sobald ein Login durchgeführt wird. Ein Login ist ohne dieses erforderliche Cookie nicht möglich. Auf der Plattform werden keinerlei optionale Cookies gesetzt, da keine Analyse-Tools oder Werbung eingesetzt werden. 1.6 Alle Änderungen, die ein eingeloggter Benutzer an Projekten vornimmt, werden in einer Log-Datei aufgezeichnet. Ohne eine solche Historie ist unserer Ansicht nach eine professionelle Zusammenarbeit nicht möglich. Bei Anfragen auf Einsicht in das Log entscheidet der Betreiber nach billigem Ermessen, ob eine solche gewährt wird (z.B. zum Nachweis von Rechtsverstößen oder bei Manipulationsverdacht). An Dritte, die nicht Projektmitglieder sind, werden Log-Daten nur zur Erfüllung gesetzlicher Pflichten herausgegeben. 2. Registrierung und Nutzerkonten 2.1 Um die Plattform a/bby verwenden zu können, können Sie sich entweder über ein bestehendes Nutzerkonto bei GitHub anmelden oder sich auf https://www.tryabby.com registrieren und dort ein Nutzerkonto einrichten. Für die Registrierung benötigen Sie Namen und Ihre Email-Adresse. Eine Registrierung setzt Ihre Zustimmung unserer AGBs und Datenschutzrichtlinien voraus. Die Aktivierung des Kontos erfolgt über einen Aktivierungslink, welcher über eine E-Mail übermittelt wird. 2.2 Die Registrierung auf a/bby ist volljährigen natürlichen Personen erlaubt. Minderjährige und unbefugte Personen dürfen die Plattform nicht verwenden. Jede Person darf nur ein Nutzerkonto unterhalten. Das Führen mehrerer Nutzerkonten durch die gleiche Person führt zur permanenten Sperre der Person auf der Plattform. 2.3 Die bei der Registrierung mitgeteilten Daten sind vollständig und wahrheitsgemäß auszufüllen. Eine Änderung von Daten ist unverzüglich im Nutzerkonto anzugeben und zu aktualisieren. Ein grob fährlässiger oder vorsätzlicher Verstoß hiergegen kann mit Sperrung des Nutzerkontos geahndet werden. Ein Nutzerkonto gilt als erstellt, wenn das Anmeldeformular wahrheitsgemäß und vollständig ausgefüllt und abgesendet und das Nutzerkonto durch den Betreiber freigeschaltet worden ist. 2.4 Sie sind dazu verpflichtet, alle Zugangsdaten streng vertraulich zu behandeln und sicher aufzubewahren. Falls Sie Grund zu der Annahme haben, dass Ihr Nutzerkonto bei a/bby missbraucht wurde oder dass ein nicht autorisierter Dritter Ihre Zugangsdaten besitzt, sollten Sie uns dies unverzüglich mitteilen und Ihr Passwort ändern. Gleiches gilt für Ihr Konto auf GitHub, nur dass dann GitHub unverzüglich informiert werden sollte. 2.5 Der Betreiber kann die Nutzung der Plattform nach eigenem Ermessen insgesamt oder teilweise, im Einzelfall oder Allgemein, an bestimmte Voraussetzungen knüpfen, wie z.B. Prüfung der Anmeldedaten, Nutzungsdauer, Art des Nutzerkontos (privat/gewerblich) oder von der Vorlage bestimmter Nachweise (z.B. der Geschäftsfähigkeit) abhängig machen. Stand der Nutzungsbedingungen: 01.01.2023 2.6 Der Betreiber behält sich das Recht vor, das Nutzerkonto zu löschen, wenn Sie über die von Ihnen angegeben Daten nicht erreichbar sind oder gegen die Richtlinien unter 5. verstoßen. 2.7 Die Übertragung eines Nutzerkontos auf Dritte ist nicht zulässig. 3. Löschung, Sperrung, Kündigung des Nutzerkontos 3.1 Sie können jederzeit Ihren Account bei a/bby löschen. Dazu schreiben Sie bitte eine Email an a/bby. 3.2 Der Betreiber hat das Recht, den Zugang zu einzelnen Nutzerinhalten und/oder ein Nutzerkonto nach eigenem Ermessen vorläufig oder dauerhaft zu sperren oder zu löschen, wenn wir Gründe zu der Annahme haben, dass Sie Ihr Nutzerkonto auf verbotene Weise nutzen oder auf andere Weise gegen diese Nutzungsbedingungen oder geltendes Recht verstoßen. Bevor wir Ihr Nutzerkonto dauerhaft sperren oder löschen, werden wir Sie ggf. per E-Mail kontaktieren und Ihnen angemessene Gelegenheit zur Stellungnahme geben. Sollten wir Ihr Nutzerkonto dauerhaft sperren oder löschen, ist eine erneute Registrierung für Sie ausgeschlossen. 4. Identitätsprüfung und Verifikation 4.1 Der Betreiber kann die Identität seiner registrierten Nutzer nach eigenem Ermessen prüfen. 4.2 Der Nutzer weiß, dass eine zweifelsfreie Identifizierung von Personen letztendlich nur von Angesicht zu Angesicht möglich ist, und nimmt zur Kenntnis, dass der Betreiber trotz aller angemessenen Maßnahmen insoweit auch für die Identität einzelner Nutzer nicht haftet. 4.3 Wenn der Betreiber Unregelmäßigkeiten bei einem Nutzer feststellt, kann dieser anlassbezogen einer weiteren probaten Identitätsüberprüfung nach Ermessen des Betreibers unterzogen werden. 4.4 Der Betreiber kann ebenfalls nach eigenem Ermessen ohne Vorankündigung Nutzer sperren, falls diese falsche Angaben bezüglich ihrer Identität gemacht haben. 5. Pflichten der Nutzer 5.1 Die Nutzer erklären sich damit einverstanden: 5.1.1 Die Vorgaben dieser Nutzungsbedingungen und der Gesetze einzuhalten. 5.1.2 Alle Verpflichtungen gegenüber anderen Nutzern und gegenüber dem Betreiber einzuhalten bzw. ohne schuldhaftes Zögern durchzuführen. 5.1.3 Keine nicht-öffentlichen Inhalte von der Plattform a/bby an Dritte weiterzugeben. 5.1.4 Keine Informationen auf a/bby zu veröffentlichen, die geeignet sind, dem Betreiber oder einer Person in wirtschaftlicher oder persönlicher Hinsicht zu schaden; die falsch, irreführend, ungenau oder täuschend sind; die Rechte Dritter verletzen (z.B. Urheberrecht, Markenrecht, Patente, Wettbewerbsrecht, usw.); die sonst illegal sind; die verleumderisch, nötigend oder belästigend sind; die obszönes, sittenwidriges, beleidigendes, rassistisches, pornographisches oder sonst rechtswidriges Inhalt haben; in sonstiger Form einen Straftatbestand erfüllen oder eine Ordnungswidrigkeit darstellen 5.2 Nicht zulässig ist die Verwendung von Code, der die bestimmungsgemäße Funktion der Webseite umgehen, beinträchtigen oder stilllegen soll, oder unberechtigte Zugang zu Informationen verschaffen soll. 5.3 Der Betreiber entscheidet aufgrund der in diesen Nutzungsbedingungen festgelegten Vorausaussetzungen nach eigenem Ermessen, ob ein Verstoß gegen Nutzungsbedingungen vorliegt und ergreift für diesen Fall angemessene Maßnahmen – von der Abänderung der entsprechenden Beiträge über die Erteilung einer Rüge (Strike), oder vorübergehende bis hin zu permanenter Sperrung eines Nutzerkontos. Weitere rechtliche Schritte bleiben bei straf- oder zivilrechtlicher Verantwortlichkeit von Nutzern ausdrücklich vorbehalten. 5.4 Der Nutzer ist verpflichtet, dem Betreiber den durch Verletzungen gegen die in diesem Abschnitt geregelten Pflichten entstandenen Schaden zu ersetzen. 6. Haftung und Verantwortung 6.1 Der Betreiber übernimmt keine Haftung, Garantie oder Gewährleistung für die Richtigkeit, Vollständigkeit, Verlässlichkeit, Aktualität und Brauchbarkeit der von Nutzern bereit gestellten Inhalte oder von deren persönlichen Daten. 6.2 Der Betreiber überwacht öffentlich zugängliche, von Nutzern auf der Plattform eingestellte Beiträge nicht. Der Betreiber wird nur nach Mitteilung zu angeblichen Verstößen tätig. 6.3.1 Schadensersatzansprüche des Nutzers sind ausgeschlossen, soweit in 6.3.2 nichts anderes bestimmt ist. Der vorstehende Haftungsausschluss gilt auch zugunsten der gesetzlichen Vertreter und Erfüllungsgehilfen des Betreibers, sofern der Nutzer Ansprüche gegen diese geltend macht. 6.3.2 Von dem in 6.3.1 bestimmten Haftungsausschluss ausgenommen sind Schadensersatzansprüche aufgrund einer Verletzung des Lebens, des Körpers, der Gesundheit und Schadensersatzansprüche aus der Verletzung wesentlicher Vertragspflichten. Wesentliche Vertragspflichten sind solche, deren Erfüllung zur Erreichung des Ziels des Vertrags notwendig ist. Von dem Haftungsausschluss ebenfalls ausgenommen ist die Haftung für Schäden, die auf einer vorsätzlichen oder grob fahrlässigen Pflichtverletzung des Anbieters, seiner gesetzlichen Vertreter oder Erfüllungsgehilfen beruhen. 7. Urheberrechte und Markenschutz 7.1 Der Betreiber verfügt über die ausschließlichen urheberrechtlichen Nutzungsrechte an allen, die Websites ausmachenden urheberrechtlichen Werken wie Grafiken, Style-sheets, Layout, Farbgestaltung, Einbindung der Grafiken in das gesamte Layout, Computerbilder, Logos, Webdesign oder sonstige gestalterische Elemente, sowie an der Website als Datenbankwerk gemäß § 4 Abs. 2 UrhG und als Datenbank gemäß § 87a UrhG. 7.2 Die Elemente des Webauftritts von a/bby sind zugunsten des Betreibers markenrechtlich geschützt. Dies gilt insbesondere für Logos und Embleme. Der Betreiber wird mit aller Schärfe des Gesetzes gegen jede Person vorgehen, die Layout, Bilder, Logos, Texte, Daten, Grafiken oder ähnliches Material oder gestalterische Elemente von der Website unbefugt kopiert oder vervielfältigt, verbreitet, öffentlich zugänglich macht oder sonst urheberrechtlich oder markenrechtlich unbefugt nutzt. 7.3 Soweit erforderlich, räumt Ihnen der Betreiber zur Nutzung von a/bby ein einfaches, zeitlich auf die Dauer der Nutzung der Plattform beschränktes sowie örtlich unbeschränktes Nutzungsrecht an den in 7.1 und 7.2 beschriebenen Rechten zur Nutzung in eigenen Projekten ein. Stand der Nutzungsbedingungen: 01.01.2023 export default ({ children }) => (“Feature Flagging & Remote Config for the rest of us.”
{/* */}Create an account
Enter your email below to create your account
By clicking continue, you agree to our{" "} Terms of Service {" "} and{" "} Privacy Policy .
{children} ); export const getStaticProps = () => { return { props: {}, }; }; ================================================ FILE: apps/web/src/pages/tips-and-insights/a-b-nextjs.mdx ================================================ import { BlogLayout } from "components/BlogLayout"; export const meta = { title: "A/B Testing in Next.js using Edge Middleware", imageUrl: "/img/abby-next.png", publishedAt: "2023-04-28", }; A/B testing, also known as split testing, is an essential method to improve the user experience and conversion rates on your website. By comparing two or more variations of a page or feature, developers can make informed decisions about which version performs best. In this blog post, we'll explore how to implement A/B testing in Next.js using Edge Middleware and how Abby, a developer-focused A/B testing SaaS, can streamline the process. ## The Concept of A/B Testing A/B testing involves creating multiple versions of a webpage, each with a different element or set of elements, and then measuring their performance. This could be anything from different layouts, colors, or copy. Visitors are randomly assigned to one of these versions, and their interactions are tracked to determine which version yields better results. Benefits of A/B testing include: 1. _Data-driven decision-making_: By basing decisions on quantifiable data, you eliminate guesswork and reduce the risk of suboptimal changes. 2. _Improved conversion rates_: A/B testing enables you to fine-tune your website to encourage specific user actions, increasing conversions. 3. _Better user experience_: By identifying elements that resonate with your audience, you can create a more engaging and satisfying experience for your users. ## Next.js and Edge Middleware [Next.js](https://nextjs.org/) is a popular React framework that simplifies the creation of server-rendered applications. One of its key features is Edge Middleware, which runs custom code before a request reaches the actual page or API route. This makes it an ideal solution for implementing A/B testing, as it allows for easy variation assignment and tracking. ## Implementing A/B Testing in Next.js To set up A/B testing with Next.js and Edge Middleware, follow these steps: 1. _Create variations_: Design and develop different versions of your webpage or feature. 2. _Implement Edge Middleware_: In your Next.js application, create a new Edge Middleware function that assigns visitors to a variation. 3. _Track performance_: Measure the performance of each variation using the desired metrics, such as conversion rates or user engagement. In conclusion, A/B testing is a powerful tool to enhance user experience and boost conversion rates. With Next.js and Edge Middleware, implementing A/B testing is straightforward and efficient. And with Abby, developers can take advantage of a tailor-made solution that simplifies the entire A/B testing process. export default ({ children }) => ({children} ); ================================================ FILE: apps/web/src/pages/tips-and-insights/a-b-react.mdx ================================================ import { BlogLayout } from "components/BlogLayout"; export const meta = { title: "A/B Testing in React using Hooks", imageUrl: "/img/abby-react.png", publishedAt: "2023-04-04", }; A/B testing, also known as split testing, is a widely used technique for optimizing user experiences by comparing the performance of two or more variations of a product or feature. In this blog post, we'll cover the basics of A/B testing, discuss its benefits, and explore how to implement A/B tests in React using the `useAbby` hook. We'll also introduce you to Abby, a powerful SaaS solution for A/B testing, designed specifically for developers. ## What is A/B Testing? A/B testing is an experimental approach to determining the most effective version of a product, webpage, or feature by exposing different variations to users and measuring their engagement. By comparing key performance indicators (KPIs) such as conversion rates, bounce rates, and average session duration, developers can identify the most successful version and implement it for all users. ## Benefits of A/B Testing A/B testing offers several benefits to developers and organizations, including: 1. _Data-driven decision-making_: A/B testing allows you to base your decisions on concrete data, eliminating guesswork and reducing the risk of introducing underperforming features. 2. _Improved user experience_: By testing different variations of your product or feature, you can identify what resonates best with your users and create an experience tailored to their preferences. 3. _Increased revenue_: Optimized user experiences often lead to higher conversion rates, longer session durations, and increased customer loyalty, ultimately boosting revenue. ## Implementing A/B Testing in React with the useAbby Hook To implement A/B testing in your React application, we'll use the `useAbby` hook. This custom hook makes it easy to create and manage A/B tests in your React components. Here's an example of how to use the hook: ```js import { useAbby } from "lib/abby"; function MyComponent() { const { variant } = useAbby("my-test"); return ({variant === "control" &&); } ``` In this example, we define an A/B test called "my-test" with two variants: "control" and "variant-1". The `useAbby` hook randomly assigns users to one of the variants and renders the corresponding component. To track the performance of each variant, you can use your preferred analytics tool or a dedicated A/B testing platform like Abby. ## Introducing Abby: A SaaS Solution for A/B Testing Made for Developers [Abby](https://www.tryabby.com) is a developer-focused SaaS platform for A/B testing, offering an intuitive and easy-to-use solution for creating, managing, and analyzing A/B tests. With Abby, you can: - _Effortlessly create and manage A/B tests_: Abby's simple API allows you to define your A/B tests and variants quickly, giving you more time to focus on building your product. - _Integrate with your favorite tools_: Abby seamlessly integrates with popular analytics platforms and data visualization tools, making it easy to analyze your A/B test results and make data-driven decisions. - _Optimize your application with confidence_: Abby's robust statistical analysis ensures you have accurate, reliable results, so you can confidently implement the winning variant in your application. Experience the power of Abby today by visiting [tryabby.com](https://www.tryabby.com) and signing up for a free trial. Transform your A/B testing workflow and make data-driven decisions with ease. ## Advanced A/B Testing Scenarios with Abby and useAbby In addition to simple A/B tests, Abby and the `useAbby` hook enable you to handle more advanced scenarios, such as multivariate testing and feature flagging. ### Multivariate Testing Multivariate testing allows you to test multiple variations of your components simultaneously, providing more granular insights into the impact of different changes. To implement a multivariate test with the `useAbby` hook, simply add more variants: ```javascript import { useAbby } from "lib/abby"; function MyComponent() { const { variant } = useAbby("multivariate-test"); return (} {variant === "variant-1" && } {variant === "control" &&); } ``` ## Conclusion A/B testing is a powerful method for optimizing user experiences and driving data-driven decision-making. By leveraging the `useAbby` hook in React, you can easily implement A/B tests and benefit from a flexible, scalable solution for various testing scenarios. To supercharge your A/B testing workflow, consider using [Abby](https://www.tryabby.com), a developer-focused SaaS platform built specifically for A/B testing. With its simple API, seamless integrations, and robust statistical analysis, Abby empowers you to optimize your application with confidence. Visit [https://tryabby.com](https://www.tryabby.com) to sign up for a free trial and experience the benefits of Abby today. export default ({ children }) => (} {variant === "variant-1" && } {variant === "variant-2" && } {variant === "variant-3" && } {children} ); ================================================ FILE: apps/web/src/pages/tips-and-insights/feature-flagging-in-modern-development-teams.mdx ================================================ import { BlogLayout } from "components/BlogLayout"; export const meta = { title: "Feature Flagging in Modern Software Development Teams: A Guide to Streamlining Development and Deployment", imageUrl: "/img/modern-feature-flags.png", publishedAt: "2023-09-28", }; In the fast-paced world of modern software development, staying ahead of the competition often means delivering new features and improvements to your software at an unprecedented pace. However, rapid development and deployment can lead to a host of challenges, including increased risks, higher complexity, and potential customer dissatisfaction due to bugs and errors. This is where feature flagging comes into play. In this comprehensive guide, we'll explore what feature flagging is, why it's crucial for today's software development teams, and how to implement it effectively. ## What Is Feature Flagging? Feature flagging, also known as feature toggles or feature switches, is a software development technique that allows developers to enable or disable specific features or code blocks within an application at runtime. These feature flags act as conditional statements that control the visibility and behavior of certain parts of the software. Feature flagging provides developers with greater control and flexibility over the release process and allows them to: 1. **Enable Progressive Rollouts:** Developers can release new features to a small subset of users or specific environments, gradually expanding the release as confidence in the feature grows. 2. **Perform A/B Testing:** By toggling features on and off for different user groups, developers can gather data on how users respond to different variations of the software and make data-driven decisions. 3. **Mitigate Risks:** Feature flags enable developers to quickly disable a feature if it causes critical issues in production, reducing the impact of bugs and errors. 4. **Improve Collaboration:** Cross-functional teams can work collaboratively, with designers, product managers, and developers all contributing to feature development and rollout decisions. ## Why Is Feature Flagging Crucial? In today's software development landscape, feature flagging has become a cornerstone of agile and DevOps practices. Here are some key reasons why it's crucial for modern software development teams: ### 1. Continuous Delivery and Deployment Feature flagging empowers teams to adopt continuous delivery and deployment practices. Instead of bundling multiple features into a monolithic release, teams can release features incrementally, reducing the risk associated with large releases and accelerating time to market. ### 2. Risk Management Software development is never without risks. Feature flags provide a safety net by allowing teams to turn off features that are causing issues in production. This minimizes the impact on end-users and helps maintain a positive user experience. ### 3. A/B Testing and User Feedback Feature flagging facilitates A/B testing, enabling teams to gather valuable user feedback and make data-driven decisions about which features to fully enable or enhance. This ensures that the software meets users' expectations and needs. ### 4. Faster Bug Fixes When bugs or issues are detected in a feature, developers can quickly disable it using feature flags while they work on a fix. This allows teams to maintain a stable application while addressing problems efficiently. ### 5. Team Collaboration Feature flags encourage collaboration among different teams within an organization. Product managers, designers, and developers can work together to plan and execute feature releases, ensuring alignment with business goals and user needs. ## Implementing Feature Flagging Effectively Now that we understand the importance of feature flagging let's delve into how to implement it effectively in your software development process: ### 1. Define Clear Objectives Before implementing feature flags, establish clear objectives for their use. Determine what you want to achieve with feature flagging, whether it's reducing deployment risks, enabling A/B testing, or improving collaboration. Clear objectives will guide your implementation strategy. ### 2. Choose the Right Feature Flagging System There are various feature flagging tools and libraries available, such as LaunchDarkly, Split.io, and Rollout.io, which provide feature flagging as a service. Evaluate these options to find the one that best fits your needs, taking into account scalability, ease of use, and integration capabilities. ### 3. Develop a Feature Flagging Strategy Create a feature flagging strategy that outlines how and where you'll use feature flags in your application. Decide whether you'll use feature flags for front-end or back-end changes, what flags will control, and how they'll be named and documented. ### 4. Implement Monitoring and Analytics Integrate monitoring and analytics into your feature flagging solution. This will allow you to track the performance of different feature variations and gather valuable insights from user interactions. ### 5. Document Your Flags Thoroughly document your feature flags to ensure that your team members understand their purpose and usage. Clear documentation helps prevent misunderstandings and misconfigurations. ### 6. Test Rigorously Before deploying feature flags in production, thoroughly test them in various environments, including staging and testing environments. This helps identify potential issues and ensures that the flags work as expected. ### 7. Monitor and Iterate Continuously monitor the performance and impact of your feature flags in production. Collect feedback from users and stakeholders, and be prepared to iterate on your feature flagging strategy based on this feedback. ## Conclusion Feature flagging is a powerful technique that empowers modern software development teams to deliver features faster, mitigate risks, and make data-driven decisions. By implementing feature flagging effectively, you can streamline your development and deployment processes, enhance collaboration across teams, and ultimately deliver a better user experience. Embrace feature flagging as a key practice in your software development toolkit to stay competitive and agile in today's ever-evolving tech landscape. export default ({ children }) => ({children} ); ================================================ FILE: apps/web/src/pages/tips-and-insights/feature-flags-for-project-managers.mdx ================================================ import { BlogLayout } from "components/BlogLayout"; export const meta = { title: "Why you as a Project Manager should know about Feature Flags", imageUrl: "/img/featureflags-for-pms.png", publishedAt: "2023-10-06", excerpt: "Discover the power of Feature Flags and Remote Config for agile software development. Control feature releases, toggle functionalities, and enhance collaboration between Devs and PMs. Find the perfect solution for your team's needs and make your developers happy with Feature Flags. Try Abby, the Open Source Feature Flagging Tool, at tryabby.com.", }; ## Prologue Your team is a modern, agile software development team that develops an online shop for furniture. You work in sprints and release a new version at the end of a two-week sprint. Your team is working hard to finish all the new features within this sprint so it can be released in time. You've set up a staging environment besides your production deployment so that you can safely test features before the release that you can be sure that there will never be bugs on production (obviously your team never produces bugs either way 😉) This sprint your team worked on two major things along smaller bugs & features. The first one being a new payment provider which users can use to buy products and the second one is a new suggestion algorithm for products which hopefully highly increases your sales. The first week passes and both features are implemented in a breeze. The code is written, approved, and merged which means you can check it out on the staging environment. It's Wednesday and you're checking out a couple of bugs that have been fixed as well as the new big features. The bugs seem to be fixed, some of them were bugging you for quite some time so you're happy to release them to production tomorrow. You start to test the new suggestion algorithm and it quite frankly doesn't seem right. Are we sure that people that bought a dining room table also bought another dining room table as well as a sofa? I thought we should recommend chairs here along the table. You also try to pay with the new payment provider which just gives you a "something went wrong, please try again later." Bummer! "We can't release this," you think. "But we really need to deploy the bugfixes; we're dropping paying customers with them!" And so you mentally prepare yourself to either ask the devs to roll back the new features or postpone the release. Both options don't feel right you think. What if there would be only one way that I can have the power of what is released and what not. And then you remember that you read a blog post about "Why you as a Project Manager should know about Feature Flags & Remote Config." ## Introducing Feature Flags There aren't many things that both Devs and PMs like equally as much. Feature Flags might be one of them. And they're pretty simple. Just like the name suggests, they are pretty much just a toggle to turn a feature on or off. The easiest version of that would just adding a block in your code which then does exactly this. This is the easiest version of Feature Flags and has been around for quite some time. This gives the developers (and unfortunately only the developers) the chance to quickly toggle between different implementations of their code and enable or disable features and test out new algorithms. Even though this approach is super easy and doesn't require any additional services, it has some downsides: - You need a new release to enable or disable features - It requires a dev to toggle it - You can't easily get an overview of what feature is enabled or disabled - The flag is turned on / off for every environment But I wouldn't be writing about this if this was the only solution since this solution probably doesn't make you happy and doesn't fully satisfy your needs. ## Feature Flags, but better Because you're not the first one not to be satisfied with this approach, there have been many people thinking how you can solve this and the solution to this problem is quite simple: An online dashboard which allows you to easily see what features are enabled or disabled but also gives you the opportunity to remote toggle each flag by yourself! Some tools even give you the option to define and model your environments in their dashboard. So you can go ahead and add Staging and Production in there and toggle the features on or off for each environment. Doesn't that sound lovely? Let's have a look at the downsides of the old solution: - You need a new release to enable or disable features → Nope! - It requires a dev to toggle it → Nope, You can do it! - You can't easily get an overview of what feature is enabled or disabled → Oh, you can now! - The flag is turned on / off for every environment → Nope, you decide! So this could have been the end of the blog post since it's the perfect solution, right? But there is actually more to it. The service obviously has some downsides to it as well - Costs money 🤑 - You devs might not like it ## Better Feature Flags, but better The first downside is undeniable. Someone will charge for their service and if they are not charging you, you will probably pay with your data. So I guess we just need to swallow that pill to enjoy the improvements that a service like this gives us. And also consider the dev time you saved 😉 But the other downside is in fact optional since this problem can be solved. But first of all let me explain why your devs might not like it: Every time you integrate a new service or a new tool you will need to install some kind of SDK (Software Development Kit) in your code to use it. This is always a bit tricky since you're adding a "blackbox" to your code because you're essentially putting someone else's code into yours. The other downside is that the SDK might just be bad at all (Fun exercise: Ask your devs about some third party SDKs they have to use and if they like them) So you know that you will need to find a service which makes your devs happy as well since I've claimed the following at the beginning of this post: > There aren't many things that both Devs and PMs like equally as much. Feature Flags might be one of them. And I'm sure that you will find a nice solution together which will fully satisfy your needs and makes the devs happy. Because happy devs means happy life (doesn't rhyme, but still true) And if you can't find anything or just want to see a tool which checks all those marks, you should check out my Open Source Feature Flagging Tool Abby. It is built for developers and PMs like you by combining an amazing SDK that Devs love as well as a super simple interface with just the features you need and nothing more that clutters it and makes you less productive. You can try it out for free at [https://www.tryabby.com](http://www.tryabby.com). export default ({ children }) => ({children} ); ================================================ FILE: apps/web/src/pages/tips-and-insights/feature-flags-next.mdx ================================================ import { BlogLayout } from "components/BlogLayout"; export const meta = { title: "Feature Flags in Next.js", imageUrl: "/img/feature-flags-next.png", publishedAt: "2023-04-29", }; ## What are Feature Flags Feature Flags (or Feature Toggles) are an important tool when it comes to deploying changes and updates to an application. With a Feature Flag, developers can easily toggle on or off different features and updates, allowing for easier testing and deployment of changes. This technique is especially useful for applications that are constantly being updated and changed and has become popular with [Trunk Based Development](https://trunkbaseddevelopment.com/feature-flags/). Feature Flags are used to selectively enable or disable certain features of an application. This makes it easy to test new features and updates without having to actually deploy them to production. With Feature Flags, developers can easily turn off certain features if they are causing problems or if they are not ready for production yet. ## Stages of Feature Flags ### Hardcoded Feature Flags can be used in a variety of different ways, depending on the needs of the application. The most basic way to use a Feature Flag is by just using a boolean variable that is either true or false and hard coded: ```ts const featureFlag = true; function MyButton() { // lets try if an actual button works, too if (featureFlag) { return ; } // TODO: use a real button here returnClick Me; } ``` #### Pros The pros of using a hardcoded Feature Flag are that it is very simple and easy to implement. They don't require any additional libraries or dependencies and can be used in any application. #### Cons The cons of using a hardcoded Feature Flag are that it is not very flexible. You will need to update the code every time you want to change the value of the Feature Flag and therefore re-deploy the application. This also means that only developers can change the value of the Feature Flag, which can be a problem if you want to give non-developers access to the Feature Flag. This way of implementing Feature Flags will also give you the same results for all environments, which can be a problem if you want to test the Feature Flag in different environments. ### Environment Variables Another way to implement Feature Flags is by using environment variables. This way of implementing Feature Flags is very similar to the hardcoded way, but instead of using a boolean variable, we will use an environment variable: ```ts const featureFlag = process.env.FEATURE_FLAG === "true"; function MyButton() { // lets try if an actual button works, too if (featureFlag) { return ; } // TODO: use a real button here returnClick Me; } ``` #### Pros The pros of using environment variables for Feature Flags are that they are very flexible. You can easily change the value of the Feature Flag without having to re-deploy the application. This way of implementing Feature Flags will also give you different results for different environments, which can be useful if you want to test the Feature Flag in different environments. #### Cons This implementation is a good middleground between the hardcoded way and the full-services way, but it still has some drawbacks. The biggest drawback is that you will need to update the environment variable every time you want to change the value of the Feature Flag. This can be a problem if you want to give non-developers access to the Feature Flag. It can also be a problem if there is no simple way of updating environment variables in your application. This implementation also relies on the environment variables being set correctly, which can lead to errors when having typos in either the name of the variable or the value. ### Services The most flexible way of implementing Feature Flags is by using a Service such as [Abby](https://www.tryabby.com). This way of implementing Feature Flags is very similar to the environment variable way, but instead of using an environment variable, we will use a service: ```ts import { useFeatureFlag, getFeatureFlagValue } from "lib/abby"; function MyButton() { const featureFlag = useFeatureFlag("FEATURE_FLAG"); // lets try if an actual button works, too if (featureFlag) { return ; } // TODO: use a real button here returnClick Me; } ``` #### Pros The pros of using a service for Feature Flags are that they are very flexible. It gives you the ability to change the value of the Feature Flag without having to re-deploy the application. You can also define different values for different environments, which can be useful if you want to test the Feature Flag in different environments. Toggling is Feature Flag in a Service like Abby is also a breeze, as you can just toggle it on or off in the dashboard which means that non-devs can also easily toggle the Feature Flag. The biggest benefit of using Abby is the developer experience and tight integration with Next.js. Abby is fully typed and provides a hook to easily use Feature Flags in your application. It also allows include your Feature Flags on the Server whether you are using SSR or SSG. #### Cons The cons of using a service for Feature Flags are that it requires you to use a third-party service. It also means that you will need to pay for the service, which can be a problem if you are on a tight budget. Abby offers a generous free tier, but if you need more than that, you will need to pay for it. Using Feature Flags with the `useFeatureFlag` hook from Abby is a great way to quickly and easily deploy changes and updates to a Next.js application. With this hook, developers can easily toggle on or off different features and updates, allowing for easier testing and deployment of changes. export default ({ children }) => ({children} ); ================================================ FILE: apps/web/src/pages/tips-and-insights/honest-marketing.mdx ================================================ import { BlogLayout } from "components/BlogLayout"; export const meta = { title: "Honest Marketing: Why you should or should not use Abby", imageUrl: "/img/cut-the-bs.png", publishedAt: "2023-12-17", excerpt: "Abby's Founder Tim shares his honest thoughts about Abby and why you should or should not use it.", }; # My Honest Thoughts about Abby This might sound weird to you since being brutally honest probably isn’t the most common marketing strategy, but it’s a strategy I like and want to have for my product. ## Abby's Core Features ### Feature Flags I think feature flags are amazing. They help me to feel sane when developing features within teams I’ve worked in. The fact that you can merge a feature into your main branch and release it without being blocked is just amazing. It makes me feel good and also helps to keep the team’s velocity up. Your QA engineer is happy since he can test features safely without any pressure since they can just test whenever there is time and toggle that feature on or off. It also helps you with testing out features in prod and when something goes wrong (which obviously never happens) you could just toggle that flag off again and go back to the old behavior. Using feature flags made me feel better and made me feel better when it was my time on-call. It’s like a little safety net. However, adding feature flags will add a little complexity to your process and code as well. You will need to: 1. identify that a feature will be behind a feature flag when creating the ticket 2. add the feature flag into your code and maybe even keep the old code around 3. remove the feature flag at some point (I feel like this needs more awareness) I personally think that you will need to think about the effort-to-value ratio here. Adding feature flags can be extremely useful but also feel like a lot of overhead. I would say choose wisely but choose feature flags! ### Remote Config The Remote Config is kinda like the Feature Flags’s sibling. They’re similar but different. They both provide you with a way of remotely altering parts of your code. While feature flags are just simple booleans, remote config variables allow you to have Strings, Numbers, and also JSON objects. I personally found this to be a more niche feature. Remote Config Variables are more powerful but with great power comes great complexity. Remote Config Variables shift the focus more towards Abby. Rather than two values (true/false) you can now have potentially unlimited values (Note: There are so many limitations such as a maximum integer size, but there are way more than two potential values). They are almost like a super rudimentary CMS. They obviously lack features you might expect from a CMS but they come with simplicity and if you have feature flags enabled it’s quite easy to understand Remote Config Variables. I like to think about them as Environment Variables on Steroids with a small runtime overhead but type safety! ### A/B Tests Fun Fact: A/B Tests were the main thing when I first started Abby. Back then it was called A/BBY including the A/B wordplay. I think A/B tests are truly amazing in theory. The fact that you can use them to make data-driven decisions is quite cool and can potentially eliminate a lot of time arguing what to do and what’s the best way of doing that. But: There are some caveats with A/B testing. First of all: You will need a certain amount of users to get significant results. There is some fancy math in this but just ask yourself: Do you fully trust the ratings on Amazon if there are only 10 of them with 5 stars overall? I wouldn’t! But that’s a general issue with A/B Testing. It’s not something Abby has. But Abby offers you something that most tools don’t. Abby has a radical approach. We don’t have a fancy WYSIWYG editor where non-technical people can implement A/B Tests by altering the content on your landing page. With Abby you can define an A/B test and then it’s part of the development process to implement them. Right in the code. You can programmatically change what you want to get displayed based on the current variant. This approach will cost you a little more developer time upfront but it has two main benefits: - Your tests are more robust: Since those are actually part of your code you’re not reliant on some funky selectors which are often used tools - Happy Developers: I haven’t met a single developer to that day who likes any external script that alters their code in production. It’s hell to debug as well ### Open Source & Privacy I really don’t like putting my personal information in someone else’s tool not knowing what will happen to that data. Getting the next unwanted newsletter. And because I don’t like that I tried to be as open and respectful as possible with Abby. Abby’s code is fully open-source. It means you can just go ahead and have a look into the repo and see my code. This can help to ensure that your data and your user’s data will be safe. It can also make your day by having a good laugh when you see my code. Abby’s license gives you the option to self-host it as well. While I personally think that self-hosting isn’t worth it for most people, there are definitely some cases where it makes sense and I’m super happy to help you with that :) ## Conclusion I built Abby and will always continue building it because I think it provides value. I’ve built feature flags in-house for multiple projects and the repetitive work was draining and expensive. I was unsatisfied with the way A/B tests work but I think the idea behind them is cool. Therefore I integrated them in Abby to make them cool. When you decide to use Abby professionally you will probably need a paid plan at some point. But I hope that the value it provides is higher than the cost. Abby is a SaaS. Like every one SaaS it means that you are reliant on another service. Even though Abby has an integrated client-side fallback system which means that your application will never crash if Abby is ever down (even though it hasn’t since we launched). But your application will behave differently as if Abby was running. Best, Tim export default ({ children }) => ({children} ); ================================================ FILE: apps/web/src/pages/tips-and-insights/index.tsx ================================================ import fs from "node:fs/promises"; import path from "node:path"; import { MarketingLayout } from "components/MarketingLayout"; import dayjs from "dayjs"; import type { GetStaticProps } from "next"; import Image from "next/image"; import Link from "next/link"; import type { NextPageWithLayout } from "../_app"; export type PostMeta = { title: string; imageUrl: string; publishedAt: string; slug: string; excerpt?: string; }; type Props = { posts: PostMeta[]; }; const BlogPage: NextPageWithLayout= ({ posts }) => { return ( ); }; BlogPage.getLayout = (page) => { returnAbby Blog
Stay up to date with the latest news and updates
{posts.map((p) => ( {dayjs(p.publishedAt).format("MMMM, DD, YYYY")}{p.title}
))}{page} ; }; export const getStaticProps: GetStaticProps = async () => { const files = await fs.readdir( path.resolve(process.cwd(), "src", "pages", "tips-and-insights") ); const posts: Array= await Promise.all( files .filter((file) => file.endsWith(".mdx")) .map(async (post) => { const meta = await import(`./${post}`).then((mod) => mod.meta); return { ...meta, slug: post.replace(".mdx", ""), }; }) ); return { props: { posts: posts.sort((a, b) => b.publishedAt.localeCompare(a.publishedAt)), }, }; }; export default BlogPage; ================================================ FILE: apps/web/src/pages/welcome.tsx ================================================ import Cal, { getCalApi } from "@calcom/embed-react"; import { DISCORD_INVITE_URL } from "components/Footer"; import { Input } from "components/Input"; import { RadioGroupComponent } from "components/RadioGroup"; import { Button } from "components/ui/button"; import { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, } from "components/ui/card"; import { Label } from "components/ui/label"; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from "components/ui/select"; import { AnimatePresence, motion } from "framer-motion"; import { cn } from "lib/utils"; import { ChevronRight } from "lucide-react"; import type { GetServerSideProps, InferGetServerSidePropsType } from "next"; import { useSession } from "next-auth/react"; import Link from "next/link"; import { useEffect } from "react"; import { BsCodeSlash } from "react-icons/bs"; import { FaAngular, FaPhp, FaReact, FaVuejs, FaWordpress, } from "react-icons/fa"; import { TbBrandNextjs, TbBrandSvelte } from "react-icons/tb"; import { Wizard, useWizard } from "react-use-wizard"; import { getServerAuthSession } from "server/common/get-server-auth-session"; import { prisma } from "server/db/client"; import { trpc } from "utils/trpc"; import { create } from "zustand"; const ROLES = [ "Frontend Engineer", "Backend Engineer", "Fullstack Engineer", "DevOps Engineer", "Product Manager", "Designer", "Data Scientist", "Marketing", "Other", ] as const; const useOnboardingStore = create<{ name: string; profession: string; technologies: string[]; experienceLevelFlags: number; experienceLevelTests: number; setName: (name: string) => void; setProfession: (profession: string) => void; toggleTechnology: (technology: string) => void; setExperienceLevelFlags: (experienceLevelFlags: number) => void; setExperienceLevelTests: (experienceLevelTests: number) => void; }>((set, get) => ({ name: "", profession: ROLES[0], technologies: [], experienceLevelFlags: 1, experienceLevelTests: 1, setName: (name: string) => set({ name }), setProfession: (profession: string) => set({ profession }), toggleTechnology: (technology: string) => { const currentTechnologies = get().technologies; if (currentTechnologies.includes(technology)) { set({ technologies: currentTechnologies.filter((t) => t !== technology), }); } else { set({ technologies: [...currentTechnologies, technology] }); } }, setExperienceLevelFlags: (experienceLevelFlags: number) => set({ experienceLevelFlags }), setExperienceLevelTests: (experienceLevelTests: number) => set({ experienceLevelTests }), })); const FormItem = ({ children, labelText, }: { children: React.ReactNode; labelText: string }) => ( {children}); function WizardFooter() { const { previousStep, nextStep, isFirstStep, isLastStep, activeStep } = useWizard(); const { name, technologies } = useOnboardingStore(); // Variable to check if next button should be disabled on current step const nextDisabled = (activeStep === 0 && name.length < 2) || (activeStep === 2 && technologies.length === 0); return (); } function Step1() { const { name, setName } = useOnboardingStore(); return ( ); } const oneToFiveOptions = Array.from({ length: 5 }, (_, i) => i + 1).map( (i) => ({ label: i.toString(), value: i.toString(), }) ); function Step2() { const { profession, setProfession, experienceLevelFlags, experienceLevelTests, setExperienceLevelTests, setExperienceLevelFlags, } = useOnboardingStore(); return ( Welcome to Abby Thank you very much for signing up for Abby ); } const TECHNOLOGIES = [ { name: "React (CRA/Vite)", icon: FaReact, }, { name: "Next.js", icon: TbBrandNextjs, }, { name: "Vue", icon: FaVuejs, }, { name: "Angular", icon: FaAngular, }, { name: "Svelte", icon: TbBrandSvelte, }, { name: "Wordpress", icon: FaWordpress, }, { name: "PHP", icon: FaPhp, }, { name: "Other", icon: BsCodeSlash, }, ] satisfies Array<{ name: string; icon: About you Tell us more about you setExperienceLevelFlags(Number(value))} /> 1 is no experience - 5 is very frequent usage setExperienceLevelTests(Number(value))} /> 1 is no experience - 5 is very frequent usage ( props: P ) => React.ReactElement
> | null; }>; function Step3() { const { handleStep } = useWizard(); const { technologies, toggleTechnology } = useOnboardingStore(); const onboardUserMutation = trpc.user.onboardUser.useMutation(); const { update } = useSession(); handleStep(async () => { await update({ name: useOnboardingStore.getState().name, hasCompletedOnboarding: true, }); return onboardUserMutation.mutateAsync(useOnboardingStore.getState()); }); return (
); } function Step4() { return ( Technical Background What technologies do you use currently? {TECHNOLOGIES.map(({ name, icon: Icon }) => ( ))}); } export default function WelcomePage( props: InferGetServerSidePropsType You're ready to go! Thank you very much for signing up to Abby. You're now ready to start using Abby. If you have any questions, feel free to join our{" "} Discord {" "} or book a free 1:1 onboarding session with us.
) { useEffect(() => { useOnboardingStore.getState().setName(props.user.name ?? ""); }, [props.user.name]); useEffect(() => { (async () => { const cal = await getCalApi({ namespace: "abby-onboarding" }); cal("ui", { theme: "dark", styles: { branding: { brandColor: "#f9a8d4" } }, hideEventTypeDetails: false, layout: "month_view", }); })(); }, []); return ( ); } export const getServerSideProps = (async (ctx) => { const session = await getServerAuthSession(ctx); if (!session?.user) { throw new Error("No session"); } try { const user = await prisma.user.findUnique({ where: { id: session.user.id, }, }); if (!user) { throw new Error("No user"); } if (user.hasCompletedOnboarding) { return { redirect: { destination: "/projects", permanent: false, }, }; } return { props: { user: { name: user.name, }, }, }; } catch (_error) { return { redirect: { destination: "/login", permanent: false, }, }; } }) satisfies GetServerSideProps; ================================================ FILE: apps/web/src/seo/SeoDescriptions.ts ================================================ type SeoProps = { metaDescription: string; metaTitle: string; }; type Layouts = "Marketing" | "Blog" | "Integrations" | "DashBoard" | "Docs"; export function getSeo(pageName: string, layoutName: Layouts) { switch (layoutName) { case "Blog": return getBlogLayout(pageName); default: return getMarketingSeo(pageName); } } export function getMarketingSeo(pageName: string): SeoProps { const normalizedKey = pageName.startsWith("/") ? pageName : `/${pageName}`; switch (normalizedKey) { case "/": return { metaTitle: "Type-Safe Feature Flags and Flexible Remote Config | Abby ", metaDescription: "Unlock Agile Development with Abby: The Ultimate Open Source Feature Flagging Solution. Elevate Your Coding with Privacy-Centric, User-Friendly Tools & Advanced APIs!", }; case "/login": return { metaTitle: "Type-Safe Feature Flags and Flexible Remote Config| Abby Log in", metaDescription: "Log in to our free feature flagging tool designed specifically for developers. With open source software, it offers easy and fast implementation, allowing you to perform feature testing and utilize feature flags. Start optimizing your website or application with our free tool today.", }; case "/signup": return { metaTitle: "Feature Flags and feature testing | Abby Log in", metaDescription: "Sign Up to our free feature flagging tool designed specifically for developers. With open source software, it offers easy and fast implementation, allowing you to perform feature testing and utilize feature flags. Start optimizing your website or application with our free tool today.", }; case "/devtools": return { metaTitle: "Learn about A/B testing tools and feature flags | Abby Documentation", metaDescription: "Learn about the implementation of Abbys, open-source software that is easy and fast to implement. Discover how feature flags can help you with feature testing and explore various developer tools.", }; case "/imprint": return { metaTitle: "Type-Safe Feature Flags and Flexible Remote Config | Abby Legal Information", metaDescription: "Official imprint of Abby, the open-source feature flagging tool. Find our legal information and get in touch. We offer feature flagging and ab testing solutions with clear analytics.", }; case "/tips-and-insights": return { metaTitle: "Type-Safe Feature Flags and Flexible Remote Config| Abby Tips&Insights", metaDescription: "Discover tips and insights about open-source software, feature flags, Next.js, and A/B testing in React. Learn how to effectively use these dev tools for feature testing and optimizing your software development process.", }; case "/tips-and-insights/a-b-react": return { metaTitle: "A/B Testing in React using Hooks | Abby Tips & Insights", metaDescription: "Learn about implementing A/B testing in React using hooks with Abby. Understand the benefits of A/B testing and how to use the use Abby hook for improved user experience and data-driven decision-making.", }; case "/contact": return { metaTitle: "Q&A regarding Abby | Abby Contact", metaDescription: "Contact Abby, an open-source feature flagging tool, for all your questions and needs related to feature flags, and feature testing. Optimize your software with confidence.", }; case "/docs/integrations/react": return { metaTitle: "A/B tests & Feature Flags with React | Abby Documentation", metaDescription: "Integrating A/B tests with React and leveraging feature flags for feature testing can greatly enhance your development process. Learn how to effectively implement A/B tests with Abby and improve your React applications with this comprehensive guide.", }; case "/docs/integrations/svelte": return { metaTitle: "Integrating A/B tests & Feature Flags with Svelte | Abby Documentation", metaDescription: "Integrating an A/B testing tool with Svelte can help you optimize your web application's user experience. Learn how to seamlessly incorporate Abby an A/B testing software into your Svelte projects for better insights and data-driven decision making.", }; case "/docs/integrations/nextjs": return { metaTitle: "Integrating A/B tests with Next.js | Abby Documentation", metaDescription: "Integrating A/B tests like Abby with Next.js allows developers to effectively conduct feature testing and utilize feature flags. Discover the benefits and best practices for implementing Split tests and feature flags in Next.js.", }; case "/tips-and-insights/a-b-nextjs": return { metaTitle: "A/B Testing in Next.js using Edge Middleware | Abby Tips & Insights", metaDescription: "A/B testing in Next.js using edge middleware allows you to experiment and optimize your website by testing different versions of your content. Learn the tips and insights on how to effectively conduct A/B tests in Next.js using edge middleware with Abby.", }; case "/tips-and-insights/abby-open-source": return { metaTitle: "Open-Source A/B Test Transparency & Self-Hosted | Abby Tips&Insights", metaDescription: "Open-sourcing A/B tests and using feature flags for feature testing can improve transparency, collaboration, and self-hosting capabilities. Discover valuable tips and insights on implementing A/B tests and feature testing strategies with Abby.", }; case "/tips-and-insights/feature-flags-next": return { metaTitle: "Using Feature Flags in Next.js Applications | Abby Tips & Insights", metaDescription: "Learn how to effectively use feature flags in Next.js applications to conduct A/B tests and perform feature testing. Get valuable tips and insights in this Abby article to optimize your software development process.", }; case "/terms": return { metaTitle: "A/B Testing and Feature Flags - | Abby Terms of Service", metaDescription: "Discover the benefits of A/B testing and feature flags in improving product development and user experience. Learn about Abby's Terms of Service and how they ensure fair and transparent testing practices for your business.", }; case "/privacy": return { metaTitle: "Privacy Policy and Data Protection | Abby", metaDescription: "Learn about Abby's privacy policy and data protection measures for conducting A/B tests, using feature flags, and feature testing.", }; case "/nextjs": return { metaTitle: "A/B test for Next.js - Streamline A/B Tests & Feature Flags | Abby", metaDescription: "Abby is a powerful A/B testing tool for Next.js applications that streamlines the process of conducting split tests and feature flagging. Learn how to optimize your Next.js projects with Abby's efficient and user-friendly platform.", }; case "/docs/integrations/angular": return { metaTitle: "Integrating A/B testing and feature testing into Angular applications | Abby Documentation", metaDescription: "Integrating A/B testing and feature testing into Angular applications can provide valuable insights and enhance the development process. This page provides information and resources for developers looking to implement these techniques in their Angular projects.", }; case "/docs/environments": return { metaTitle: "Understanding and managing different environments in application development | Abby Documentation", metaDescription: "Understanding and managing different environments in application development is crucial for developers. Learn about environments, split testing, and how to effectively utilize them in this informative guide.", }; case "/docs/a-b-testing": return { metaTitle: "AB tests in software development | Abby Documentation", metaDescription: "AB tests in software development provide valuable insights for developers. This documentation provides detailed information on implementing.", }; case "/docs/feature-flags": return { metaTitle: "Feature flag documentation for developers | Abby Documentation", metaDescription: "Feature flag documentation for developers provides a comprehensive guide on how to effectively implement and test feature flags in different development environments. Learn how to optimize your development process and improve feature release management.", }; case "/docs/reference/nextjs": return { metaTitle: "API Reference in Next.js for AB test | Abby Documentation", metaDescription: "Learn how to implement API references in Next.js for conducting A/B tests with our comprehensive documentation for developers. Get step-by-step instructions and code snippets for ensuring accurate and efficient implementation.", }; case "/docs/reference/http": return { metaTitle: "API Reference (HTTP API) for conducting A/B tests | Abby Documentation", metaDescription: "Our API Reference (HTTP API) page provides developers with the essential code and documentation needed to utilize our API for conducting A/B tests. Explore our comprehensive guide to seamlessly integrate our API and enhance your development process.", }; case "/docs/reference/angular": return { metaTitle: "Using AbbyModule in Angular projects for seamless testing and optimization | Abby Documentation", metaDescription: "AbbyModule is an Angular module that provides useful directives for developers, including an AB test integration. This documentation will guide you on how to use and integrate AbbyModule into your Angular projects for seamless testing and optimization.", }; case "/docs/reference/svelte": return { metaTitle: "API Reference for Svelte developers | Abby Documentation", metaDescription: "The API Reference for Svelte is a comprehensive guide that provides documentation and examples for developers using the Svelte framework. Learn how to leverage the features and functionalities of Svelte through this detailed API reference guide.", }; case "/docs/reference/react": return { metaTitle: "API reference for React developers | Abby Documentation", metaDescription: "The API reference for React provides detailed documentation for developers looking to implement AB testing in their React applications. Explore this comprehensive guide to understand how to integrate and utilize the API effectively.", }; default: return { metaTitle: "Open Source A/B Tests, Feature Flags and feature testing", metaDescription: "Looking for a free and easy-to-implement A/B testing tool for developers? Check out our open-source software that includes feature flags and allows for fast and efficient feature testing. Start optimizing your website or application today!", }; } } function getBlogLayout(pageName: string): SeoProps { switch (pageName) { case "/": return { metaDescription: "", metaTitle: "", }; default: return { metaDescription: "", metaTitle: "", }; } } ================================================ FILE: apps/web/src/server/common/auth.ts ================================================ import { TRPCError } from "@trpc/server"; import { prisma } from "server/db/client"; export async function assertUserHasAcessToProject( projectId: string, userId: string ) { const project = await prisma.project.findFirst({ where: { id: projectId, users: { some: { userId: userId, }, }, }, }); if (!project) { throw new TRPCError({ code: "UNAUTHORIZED" }); } return project; } ================================================ FILE: apps/web/src/server/common/config-cache.ts ================================================ import type { AbbyDataResponse } from "@tryabby/core"; import createCache from "./memory-cache"; const configCache = createCache } wrapper={ } > ({ name: "configCache", // expire after 24 hours expireAfterMilliseconds: 1000 * 60 * 60 * 24, }); type ConfigCacheKey = { environment: string; projectId: string; }; export abstract class ConfigCache { static getConfig({ environment, projectId }: ConfigCacheKey) { return configCache.get(projectId + environment); } static setConfig({ environment, projectId, value, }: ConfigCacheKey & { value: AbbyDataResponse; }) { configCache.set(projectId + environment, value); } static deleteConfig({ environment, projectId }: ConfigCacheKey) { configCache.delete(projectId + environment); } } ================================================ FILE: apps/web/src/server/common/get-server-auth-session.ts ================================================ import type { GetServerSidePropsContext } from "next"; import { unstable_getServerSession } from "next-auth"; import { authOptions } from "../../pages/api/auth/[...nextauth]"; /** * Wrapper for unstable_getServerSession https://next-auth.js.org/configuration/nextjs * See example usage in trpc createContext or the restricted API route */ export const getServerAuthSession = async (ctx: { req: GetServerSidePropsContext["req"]; res: GetServerSidePropsContext["res"]; }) => { return await unstable_getServerSession(ctx.req, ctx.res, authOptions); }; ================================================ FILE: apps/web/src/server/common/getRequestOrigin.ts ================================================ import type { IncomingMessage } from "node:http"; /** * Reliably get a request's origin, even when deployed on serverless functions * * @example * ```ts * const route = (req, res) => { * const origin = getRequestOrigin(req) * } * ``` */ export const getRequestOrigin = (req: IncomingMessage): string => // The x-forwarded-proto header is the only reliable way to determine HTTP vs HTTPS // with Vercel serverless functions and Netlify functions. `${req.headers["x-forwarded-proto"] === "https" ? "https" : "http"}://${ req.headers.host }`; ================================================ FILE: apps/web/src/server/common/github-app.ts ================================================ import memoize from "memoize"; import { App } from "octokit"; import { env } from "../../env/server.mjs"; if ( env.ENABLE_GITHUB_APP && (!env.GITHUB_APP_ID || !env.GITHUB_APP_PRIVATE_KEY) ) { throw new Error("Missing required environment variables for GitHub App"); } export const getGithubApp = () => new App({ // biome-ignore lint/style/noNonNullAssertion: we check above appId: env.GITHUB_APP_ID!, // biome-ignore lint/style/noNonNullAssertion: we check above privateKey: env.GITHUB_APP_PRIVATE_KEY!, }); const PER_PAGE = 100; export const getAllRepositoriesForInstallation = memoize( async (installationId: number) => { const gh = await getGithubApp().getInstallationOctokit(installationId); let count = 0; const res = await gh.request("GET /installation/repositories", { installation_id: installationId, per_page: 100, }); count += res.data.repositories.length; const repositories = res.data.repositories; let hasMore = res.data.total_count > count; while (hasMore) { const res = await gh.request("GET /installation/repositories", { installation_id: installationId, per_page: 100, page: Math.ceil(count / PER_PAGE) + 1, }); count += res.data.repositories.length; hasMore = res.data.total_count > count; repositories.push(...res.data.repositories); } return repositories.toSorted((a, b) => { return a.full_name.localeCompare(b.full_name); }); }, { maxAge: 1000 * 60, } ); ================================================ FILE: apps/web/src/server/common/integrations.ts ================================================ import { z } from "zod"; export const githubIntegrationSettingsSchema = z .object({ installationId: z.number(), repositoryIds: z.array(z.number()), }) .strict(); export type GithubIntegrationSettings = z.infer< typeof githubIntegrationSettingsSchema >; ================================================ FILE: apps/web/src/server/common/memory-cache.ts ================================================ import createCacheRealm from "@databases/cache"; const { createCache } = createCacheRealm({ maximumSize: 10_000 }); export default createCache; ================================================ FILE: apps/web/src/server/common/plans.ts ================================================ import { env } from "env/client.mjs"; import { z } from "zod"; export const planNameSchema = z.enum([ "STARTUP", "PRO", "ENTERPRISE", "BETA", "STARTUP_LIFETIME", ]); export type PlanName = z.infer ; export const PLANS: Record = { STARTUP: env.NEXT_PUBLIC_STRIPE_STARTER_PLAN_PRICE_ID, STARTUP_LIFETIME: "STARTUP_LIFETIME", PRO: env.NEXT_PUBLIC_STRIPE_PRO_PLAN_PRICE_ID, ENTERPRISE: "ENTERPRISE", BETA: "BETA", }; export type Limit = { tests: number; eventsPerMonth: number; environments: number; flags: number; }; export const getLimitByPlan = (plan: PlanName | null): Limit => { switch (plan) { case "STARTUP_LIFETIME": case "STARTUP": return { eventsPerMonth: 10_000, tests: 10, environments: 5, flags: 30, }; case "PRO": return { eventsPerMonth: 100_000, tests: 10, environments: 10, flags: 50, }; case "BETA": case "ENTERPRISE": { return { eventsPerMonth: Number.POSITIVE_INFINITY, tests: Number.POSITIVE_INFINITY, environments: Number.POSITIVE_INFINITY, flags: Number.POSITIVE_INFINITY, }; } // free plan default: { return { eventsPerMonth: 1000, tests: 1, environments: 5, flags: 3, }; } } }; ================================================ FILE: apps/web/src/server/common/ratelimit.ts ================================================ import { RateLimiterRedis } from "rate-limiter-flexible"; import { redis } from "server/db/redis"; export const rateLimiter = new RateLimiterRedis({ storeClient: redis, keyPrefix: "rateLimiter", points: 10, // Number of points duration: 10, // Per 10 seconds }); export const checkRateLimit = async (ip: string) => { try { await rateLimiter.consume(ip); return true; } catch (_rateLimiterRes) { return false; } }; ================================================ FILE: apps/web/src/server/common/stripe.ts ================================================ import { env } from "env/server.mjs"; import Stripe from "stripe"; if (process.browser) throw new Error( "DO NOT USE stripe/server.ts IN THE BROWSER AS YOU WILL EXPOSE FULL CONTROL OVER YOUR STRIPE ACCOUNT!" ); if (!env.STRIPE_SECRET_KEY) throw new Error("Please provide a STRIPE_SECRET_KEY environment variable!"); const stripe = new Stripe(env.STRIPE_SECRET_KEY, { // @ts-ignore The Stripe docs state that null denotes the Stripe account's default version and to use ts-ignore apiVersion: null, }); export { stripe }; ================================================ FILE: apps/web/src/server/common/tracking.ts ================================================ import { OpenPanel } from "@openpanel/nextjs"; import { env } from "env/server.mjs"; import type { ServerEvents } from "types/plausible-events"; export type EventProps = Record | never; export type EventOptionsTuple = P extends never ? [Omit
, "props">?] : [EventOptions ]; export type EventOptions
= { props: P; revenue?: { currency: string; amount: number; }; u?: string; callback?: VoidFunction; }; class TrackingService { private instance: OpenPanel | null = null; constructor() { if (env.OPENPANEL_CLIENT_SECRET && env.NEXT_PUBLIC_OPENPANEL_CLIENT_ID) { this.instance = new OpenPanel({ clientId: "your-client-id", clientSecret: "your-client-secret", }); } } public trackEvent
( eventName: N, ...eventProperties: ServerEvents[N] extends never ? [] : [EventOptionsTuple [0]["props"]] ) { if (env.NODE_ENV === "development") { console.log(`Tracking event: ${eventName}`, eventProperties[0]); return; } this.instance?.track(eventName, eventProperties[0]); } } export const serverTrackingService = new TrackingService(); ================================================ FILE: apps/web/src/server/db/client.ts ================================================ import { PrismaClient } from "@prisma/client"; import { env } from "../../env/server.mjs"; declare global { var prisma: PrismaClient | undefined; } // biome-ignore lint/suspicious/noRedeclare:> export const prisma = global.prisma || new PrismaClient({ log: ["error"], }); if (env.NODE_ENV !== "production") { global.prisma = prisma; } ================================================ FILE: apps/web/src/server/db/redis.ts ================================================ import Redis from "ioredis"; import { env } from "../../env/server.mjs"; declare global { var redis: Redis | undefined; } // biome-ignore lint/suspicious/noRedeclare:> export const redis = global.redis || new Redis(env.REDIS_URL); if (env.NODE_ENV !== "production") { global.redis = redis; } ================================================ FILE: apps/web/src/server/queue/AfterDataRequest.ts ================================================ import type { ApiVersion } from "@prisma/client"; import { Worker } from "bullmq"; import { env } from "env/server.mjs"; import { trackPlanOverage } from "lib/logsnag"; import { EventService } from "server/services/EventService"; import { RequestCache } from "server/services/RequestCache"; import { RequestService } from "server/services/RequestService"; import { afterDataRequestQueue, getQueueingRedisConnection } from "./queues"; export type AfterRequestJobPayload = { functionDuration: number; projectId: string; apiVersion: ApiVersion; }; const afterDataRequestWorker = new Worker ( afterDataRequestQueue.name, async ({ data: { apiVersion, functionDuration, projectId } }) => { const { events, planLimits, plan, is80PercentOfLimit } = await EventService.getEventsForCurrentPeriod(projectId); if (events > planLimits.eventsPerMonth) { // TODO: send email // TODO: send email if 80% of limit reached await trackPlanOverage(projectId, plan); } else if (is80PercentOfLimit) { await trackPlanOverage(projectId, plan, is80PercentOfLimit); } await Promise.all([ RequestCache.increment(projectId), RequestService.storeRequest({ projectId, type: "GET_CONFIG", durationInMs: functionDuration, apiVersion, }), ]); }, { connection: getQueueingRedisConnection(), concurrency: 50, removeOnComplete: { count: 100 }, } ); afterDataRequestWorker.on("ready", () => { console.log(`[${afterDataRequestQueue.name}]: Worker is ready`); }); afterDataRequestWorker.on("completed", (job) => { if (env.NODE_ENV === "development") { console.log(`[${afterDataRequestQueue.name}]: Job completed`, job.id); } }); afterDataRequestWorker.on("failed", (job) => { console.log( `[${afterDataRequestQueue.name}]: Job failed`, job?.id, job?.failedReason ); }); afterDataRequestWorker.on("error", (error) => { console.log(`[${afterDataRequestQueue.name}]: Error`, error); }); export default afterDataRequestWorker; ================================================ FILE: apps/web/src/server/queue/event.ts ================================================ import type { ApiRequestType } from "@prisma/client"; import { type AbbyEvent, AbbyEventType } from "@tryabby/core"; import { Worker } from "bullmq"; import { env } from "env/server.mjs"; import { trackPlanOverage } from "lib/logsnag"; import { EventService } from "server/services/EventService"; import { RequestCache } from "server/services/RequestCache"; import { RequestService } from "server/services/RequestService"; import { eventQueue, getQueueingRedisConnection } from "./queues"; export type EventJobPayload = AbbyEvent & { functionDuration: number; ipAddress: string; userAgent: string; }; const EventTypeToRequestType = { [AbbyEventType.ACT]: "TRACK_CONVERSION", [AbbyEventType.PING]: "TRACK_VIEW", } satisfies Record ; const eventWorker = new Worker ( eventQueue.name, async ({ data: event }) => { switch (event.type) { case AbbyEventType.PING: case AbbyEventType.ACT: { await EventService.createEvent(event); break; } default: { event.type satisfies never; } } const { events, planLimits, plan, is80PercentOfLimit } = await EventService.getEventsForCurrentPeriod(event.projectId); if (events > planLimits.eventsPerMonth) { // TODO: send email // TODO: send email if 80% of limit reached await trackPlanOverage(event.projectId, plan); } else if (is80PercentOfLimit) { await trackPlanOverage(event.projectId, plan, is80PercentOfLimit); } await Promise.all([ RequestCache.increment(event.projectId), RequestService.storeRequest({ projectId: event.projectId, type: EventTypeToRequestType[event.type], durationInMs: event.functionDuration, apiVersion: "V1", }), ]); }, { connection: getQueueingRedisConnection(), concurrency: 50, removeOnComplete: { count: 100 }, } ); eventWorker.on("ready", () => { console.log(`[${eventQueue.name}]: Worker is ready`); }); eventWorker.on("completed", (job) => { if (env.NODE_ENV === "development") { console.log(`[${eventQueue.name}]: Job completed`, job.id); } }); eventWorker.on("failed", (job) => { console.log(`[${eventQueue.name}]: Job failed`, job?.id, job?.failedReason); }); eventWorker.on("error", (error) => { console.log(`[${eventWorker.name}]: Error`, error); }); export default eventWorker; ================================================ FILE: apps/web/src/server/queue/queues.ts ================================================ import { Queue } from "bullmq"; import { env } from "env/server.mjs"; import { Redis } from "ioredis"; import type { AfterRequestJobPayload } from "./AfterDataRequest"; import type { EventJobPayload } from "./event"; // enforce the queue names to be in the format {name} // https://docs.bullmq.io/guide/redis-tm-compatibility/dragonfly const QUEUE_NAMES = { events: "{events}", afterDataRequestQueue: "{afterDataRequestQueue}", } satisfies Record ; export const getQueueingRedisConnection = () => new Redis(env.REDIS_URL, { maxRetriesPerRequest: null }); export const eventQueue = new Queue (QUEUE_NAMES.events, { connection: getQueueingRedisConnection(), defaultJobOptions: { attempts: 3, backoff: { type: "exponential", delay: 1000, }, }, }); export const afterDataRequestQueue = new Queue ( QUEUE_NAMES.afterDataRequestQueue, { connection: getQueueingRedisConnection(), defaultJobOptions: { attempts: 3, backoff: { type: "exponential", delay: 1000, }, }, } ); [afterDataRequestQueue, eventQueue].forEach((queue) => { queue.on("error", (error) => { console.error(`[${queue.name}]: Error`, error); }); }); ================================================ FILE: apps/web/src/server/services/AiFlagRemovalService.ts ================================================ import type { OpenAI } from "openai"; export class AIFlagRemovalService { constructor(private openai: OpenAI) {} async removeFlagFromCode(code: string, flagName: string) { const response = await this.openai.chat.completions.create({ model: "gpt-4o-mini", messages: [ { role: "system", content: `You are an expert in code refactoring and have been assigned to update a codebase to remove calls to the useFeatureFlag hook where the parameter is ${flagName}. Your task is to ensure that all code paths that depend on the truthiness of this hook are always executed. But don't just replace the result of the function with true but rather remove the variable (if used). and update the code as if there was never a flag that prevented certain paths. You should only include the code without any other information or formatting. You should never update any other code that isnt related to the flag with the name ${flagName}. You should keep the formatting and line ending of the original code.`, }, { role: "user", content: [ { type: "text", text: code, }, ], }, ], temperature: 1, max_tokens: 16383, top_p: 1, frequency_penalty: 0, presence_penalty: 0, }); return response.choices[0]?.message.content; } } ================================================ FILE: apps/web/src/server/services/ConfigService.ts ================================================ import { FeatureFlagType } from "@prisma/client"; import type { AbbyConfigFile, PullAbbyConfigResponse, RemoteConfigValueString, } from "@tryabby/core"; import { getDefaultFlagValue, stringifyFlagValue, transformClientFlagToDBType, transformDBFlagTypeToclient, } from "lib/flags"; import { prisma } from "server/db/client"; import type { FlagValueString } from "types/flags"; import { FlagService } from "./FlagService"; import { TestService } from "./TestService"; export async function handleGET({ projectId }: { projectId: string }) { const projectData = await prisma.project.findUnique({ where: { id: projectId, }, include: { environments: true, tests: { include: { options: true, }, }, featureFlags: true, }, }); if (!projectData) throw new Error("Cant find project"); const config = { environments: projectData.environments.map( (environment) => environment.name ), tests: projectData.tests.reduce( (acc, test) => { acc[test.name] = { variants: test.options.map((option) => option.identifier), }; return acc; }, {} as NonNullable ), flags: projectData.featureFlags .filter((flag) => flag.type === FeatureFlagType.BOOLEAN) .map((flag) => flag.name), remoteConfig: projectData.featureFlags.reduce( (acc, flag) => { if (flag.type !== FeatureFlagType.BOOLEAN) { acc[flag.name] = transformDBFlagTypeToclient(flag.type) as Exclude< FlagValueString, "Boolean" >; } return acc; }, {} as Record ), } satisfies PullAbbyConfigResponse; return config; } export async function handlePUT({ config, projectId, userId, }: { userId: string; projectId: string; config: AbbyConfigFile; }) { await prisma.project.findFirstOrThrow({ where: { id: projectId, users: { some: { userId, }, }, }, }); // create all missing environments if (config.environments) { const currentEnvironments = await prisma.environment.findMany({ where: { projectId, }, }); const missingEnvironments = config.environments.filter( (env) => !currentEnvironments.find((currentEnv) => currentEnv.name === env) ); await prisma.environment.createMany({ data: missingEnvironments.map((envName) => ({ name: envName, projectId, })), }); } if (config.tests) { await Promise.all( Object.entries(config.tests).map(async ([testName, test]) => { const testData = await prisma.test.findUnique({ where: { projectId_name: { name: testName, projectId, }, }, }); const variants: Array = test.variants; const weightedVariants = variants.map((variant) => ({ name: variant, weight: 1 / variants.length, })); if (testData) { return; } return TestService.createTest( projectId, weightedVariants, testName, userId ); }) ); } const featureFlags = (config.flags ?? []).map((flag) => ({ name: flag, type: "Boolean" as const, })); const remoteConfig = Object.entries(config.remoteConfig ?? {}).map( (config) => ({ name: config[0], type: config[1], }) ); const flags = [...featureFlags, ...remoteConfig]; await Promise.all( flags.map(async ({ name, type }) => { const flagValue = getDefaultFlagValue(type); const flagData = await prisma.featureFlag.findUnique({ where: { projectId_name: { name, projectId, }, }, }); if (flagData) { return; } return FlagService.createFlag({ projectId, flagName: name, userId, type: transformClientFlagToDBType(type), value: stringifyFlagValue(flagValue), }); }) ); await prisma.userSegment.upsert({ where: { projectId_name: { projectId, name: "default", }, }, create: { name: "default", schema: config.user ?? "null", projectId }, update: { schema: config.user }, }); } ================================================ FILE: apps/web/src/server/services/EventService.ts ================================================ import crypto from "node:crypto"; import { getEventsByTestIdForAllTime, getEventsByTestIdForDay, getEventsByTestIdForLast30Days, } from "@prisma/client/sql"; import type { AbbyEvent, AbbyEventType } from "@tryabby/core"; import dayjs from "dayjs"; import timezone from "dayjs/plugin/timezone"; import utc from "dayjs/plugin/utc"; import { env } from "env/server.mjs"; import { TIME_INTERVAL, isSpecialTimeInterval } from "lib/events"; import { PLANS, type PlanName, getLimitByPlan } from "server/common/plans"; import { prisma } from "server/db/client"; import { RequestCache } from "./RequestCache"; dayjs.extend(utc); dayjs.extend(timezone); export abstract class EventService { private static hashUserInfo(ipAddress: string, userAgent: string) { return crypto .createHmac("sha256", env.HASHING_SECRET) .update(`${ipAddress}-${userAgent}`) .digest("hex"); } static async createEvent({ projectId, selectedVariant, testName, type, ipAddress, userAgent, }: AbbyEvent & { ipAddress: string; userAgent: string; }) { return prisma.event.create({ data: { selectedVariant, type, anonymousId: EventService.hashUserInfo(ipAddress, userAgent), test: { connect: { projectId_name: { projectId, name: testName, }, }, }, }, }); } static async getEventsByProjectId(projectId: string) { return prisma.event.findMany({ where: { test: { projectId, }, }, }); } static async getEventsByTestId( testId: string, timeInterval: string, eventType: AbbyEventType // all function should have the same type ): Promise