UNPKG

twind

Version:

compiles tailwind like shorthand syntax into css at runtime

56 lines (55 loc) 1.58 kB
// src/shim/server/index.ts import htmlparser2Tokenizer from "htmlparser2/lib/Tokenizer"; import {tw as defaultTW} from "twind"; export * from "twind"; export * from "twind/sheets"; var Tokenizer = htmlparser2Tokenizer.default || htmlparser2Tokenizer; var noop = () => void 0; var shim = (markup, options = {}) => { const {tw = defaultTW} = typeof options == "function" ? {tw: options} : options; let lastAttribName = ""; let lastChunkStart = 0; const chunks = []; const tokenizer = new Tokenizer({ decodeEntities: false, xmlMode: false }, { onattribend: noop, onattribdata: (value) => { if (lastAttribName == "class") { const currentIndex = tokenizer.getAbsoluteIndex(); const startIndex = currentIndex - value.length; const parsedClassNames = tw(value); if (parsedClassNames !== value) { chunks.push(markup.slice(lastChunkStart, startIndex)); chunks.push(parsedClassNames); lastChunkStart = currentIndex; } } lastAttribName = ""; }, onattribname: (name) => { lastAttribName = name; }, oncdata: noop, onclosetag: noop, oncomment: noop, ondeclaration: noop, onend: noop, onerror: noop, onopentagend: noop, onopentagname: noop, onprocessinginstruction: noop, onselfclosingtag: noop, ontext: noop }); tokenizer.end(markup); if (!chunks.length) { return markup; } return chunks.join("") + markup.slice(lastChunkStart || 0, markup.length); }; export { shim }; //# sourceMappingURL=server.js.map