UNPKG

@styled/typescript-styled-plugin

Version:

TypeScript language service plugin that adds IntelliSense for styled components

58 lines 2.3 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.StyledVirtualDocumentFactory = void 0; /** * Standard virtual document provider for styled content. * * Wraps content in a top level `:root { }` rule to make css language service happy * since styled allows properties to be top level elements. */ class StyledVirtualDocumentFactory { createVirtualDocument(context) { const contents = `${this.getVirtualDocumentWrapper(context)}${context.text}\n}`; return { uri: 'untitled://embedded.scss', languageId: 'scss', version: 1, getText: () => contents, positionAt: (offset) => { const pos = context.toPosition(this.fromVirtualDocOffset(offset, context)); return this.toVirtualDocPosition(pos); }, offsetAt: (p) => { const offset = context.toOffset(this.fromVirtualDocPosition(p)); return this.toVirtualDocOffset(offset, context); }, lineCount: contents.split(/\n/g).length + 1, }; } toVirtualDocPosition(position) { return { line: position.line + 1, character: position.character, }; } fromVirtualDocPosition(position) { return { line: position.line - 1, character: position.character, }; } toVirtualDocOffset(offset, context) { return offset + this.getVirtualDocumentWrapper(context).length; } fromVirtualDocOffset(offset, context) { return offset - this.getVirtualDocumentWrapper(context).length; } getVirtualDocumentWrapper(context) { var _a, _b; const tag = (_b = (_a = context.node.parent) === null || _a === void 0 ? void 0 : _a.tag) === null || _b === void 0 ? void 0 : _b.escapedText; return tag === 'keyframes' ? StyledVirtualDocumentFactory.wrapperPreKeyframes : StyledVirtualDocumentFactory.wrapperPreRoot; } } StyledVirtualDocumentFactory.wrapperPreRoot = ':root{\n'; StyledVirtualDocumentFactory.wrapperPreKeyframes = '@keyframes custom {\n'; exports.StyledVirtualDocumentFactory = StyledVirtualDocumentFactory; //# sourceMappingURL=_virtual-document-provider.js.map