1 |
|
2 | var STYLE_ELEMENT_ID = "__twind";
|
3 | var 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 |
|
15 | var 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 | };
|
25 | var 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 | };
|
39 | var 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 | };
|
50 | var getStyleTagProperties = (sheet) => ({
|
51 | id: STYLE_ELEMENT_ID,
|
52 | textContent: (Array.isArray(sheet) ? sheet : sheet.target).join("")
|
53 | });
|
54 | var 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 | };
|
59 | export {
|
60 | domSheet,
|
61 | getStyleTag,
|
62 | getStyleTagProperties,
|
63 | virtualSheet
|
64 | };
|
65 |
|