UNPKG

1.92 kBJavaScriptView Raw
1// src/internal/dom.ts
2var STYLE_ELEMENT_ID = "__twind";
3var getStyleElement = (nonce) => {
4 let element = self[STYLE_ELEMENT_ID];
5 if (!element) {
6 element = document.head.appendChild(document.createElement("style"));
7 element.id = STYLE_ELEMENT_ID;
8 nonce && (element.nonce = nonce);
9 element.appendChild(document.createTextNode(""));
10 }
11 return element;
12};
13
14// src/sheets/index.ts
15var domSheet = ({
16 nonce,
17 target = getStyleElement(nonce)
18} = {}) => {
19 const offset = target.childNodes.length;
20 return {
21 target,
22 insert: (rule, index) => target.insertBefore(document.createTextNode(rule), target.childNodes[offset + index])
23 };
24};
25var createStorage = () => {
26 const callbacks = [];
27 let state = [];
28 const invoke = (callback, index) => state[index] = callback(state[index]);
29 return {
30 init: (callback) => invoke(callback, callbacks.push(callback) - 1),
31 reset: (snapshot = []) => {
32 ;
33 [snapshot, state] = [state, snapshot];
34 callbacks.forEach(invoke);
35 return snapshot;
36 }
37 };
38};
39var virtualSheet = () => {
40 const storage = createStorage();
41 let target;
42 storage.init((value = []) => target = value);
43 return Object.defineProperties({
44 get target() {
45 return [...target];
46 },
47 insert: (rule, index) => target.splice(index, 0, rule)
48 }, Object.getOwnPropertyDescriptors(storage));
49};
50var getStyleTagProperties = (sheet) => ({
51 id: STYLE_ELEMENT_ID,
52 textContent: (Array.isArray(sheet) ? sheet : sheet.target).join("")
53});
54var getStyleTag = (sheet, attributes) => {
55 const {id, textContent} = getStyleTagProperties(sheet);
56 attributes = {...attributes, id};
57 return `<style${Object.keys(attributes).reduce((attrs, key) => `${attrs} ${key}=${JSON.stringify(attributes[key])}`, "")}>${textContent}</style>`;
58};
59export {
60 domSheet,
61 getStyleTag,
62 getStyleTagProperties,
63 virtualSheet
64};
65//# sourceMappingURL=sheets.esnext.js.map