chaincss 2.0.7 → 2.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +30 -0
- package/CODE_OF_CONDUCT.md +21 -0
- package/CONTRIBUTING.md +28 -0
- package/README.md +455 -226
- package/demo/demo/node_modules/caniuse-db/fulldata-json/data-2.0.json +1 -0
- package/demo/index.html +16 -0
- package/demo/package.json +20 -0
- package/demo/src/App.tsx +117 -0
- package/demo/src/chaincss-barrel.ts +9 -0
- package/demo/src/main.tsx +8 -0
- package/demo/src/styles.chain.ts +300 -0
- package/demo/vite.config.ts +46 -0
- package/dist/cli/commands/build.d.ts +0 -1
- package/dist/cli/commands/cache.d.ts +1 -0
- package/dist/cli/commands/init.d.ts +6 -3
- package/dist/cli/commands/timeline.d.ts +0 -1
- package/dist/cli/commands/watch.d.ts +0 -1
- package/dist/cli/index.d.ts +0 -1
- package/dist/cli/index.js +3213 -5296
- package/dist/cli/types.d.ts +51 -20
- package/dist/cli/utils/config-loader.d.ts +0 -1
- package/dist/cli/utils/file-utils.d.ts +27 -3
- package/dist/cli/utils/logger.d.ts +0 -1
- package/dist/compiler/Chain.d.ts +215 -0
- package/dist/compiler/animations.d.ts +76 -0
- package/dist/compiler/atomic-optimizer.d.ts +47 -12
- package/dist/compiler/breakpoints.d.ts +46 -0
- package/dist/compiler/btt.d.ts +36 -60
- package/dist/compiler/cache-manager.d.ts +58 -4
- package/dist/compiler/commonProps.d.ts +0 -1
- package/dist/compiler/content-addressable-cache.d.ts +78 -0
- package/dist/compiler/helpers.d.ts +54 -0
- package/dist/compiler/index.d.ts +16 -9
- package/dist/compiler/index.js +4450 -4316
- package/dist/compiler/prefixer.d.ts +17 -1
- package/dist/compiler/shorthands.d.ts +28 -0
- package/dist/compiler/suggestions.d.ts +43 -0
- package/dist/compiler/theme-contract.d.ts +16 -27
- package/dist/compiler/token-resolver.d.ts +69 -0
- package/dist/compiler/tokens.d.ts +33 -8
- package/dist/core/auto-detector.d.ts +34 -0
- package/dist/core/common-utils.d.ts +97 -0
- package/dist/core/compiler.d.ts +63 -23
- package/dist/core/constants.d.ts +137 -36
- package/dist/core/smart-chain.d.ts +3 -0
- package/dist/core/types.d.ts +122 -15
- package/dist/core/utils.d.ts +134 -17
- package/dist/index.d.ts +52 -8
- package/dist/index.js +7090 -5578
- package/dist/plugins/vite.d.ts +7 -5
- package/dist/plugins/vite.js +2964 -25641
- package/dist/plugins/webpack.d.ts +24 -1
- package/dist/plugins/webpack.js +209 -72
- package/dist/runtime/Chain.d.ts +32 -0
- package/dist/runtime/auto-hooks.d.ts +11 -0
- package/dist/runtime/hmr.d.ts +22 -2
- package/dist/runtime/index.d.ts +3 -2
- package/dist/runtime/index.js +3648 -301
- package/dist/runtime/injector.d.ts +39 -72
- package/dist/runtime/react.d.ts +17 -12
- package/dist/runtime/svelte.d.ts +15 -0
- package/dist/runtime/types.d.ts +126 -4
- package/dist/runtime/utils.d.ts +0 -1
- package/dist/runtime/vue.d.ts +34 -14
- package/package.json +59 -66
- package/src/cli/commands/build.ts +133 -0
- package/src/cli/commands/cache.ts +371 -0
- package/src/cli/commands/init.ts +230 -0
- package/src/cli/commands/timeline.ts +435 -0
- package/src/cli/commands/watch.ts +211 -0
- package/src/cli/index.ts +226 -0
- package/src/cli/types.ts +100 -0
- package/src/cli/utils/config-loader.ts +174 -0
- package/src/cli/utils/file-utils.ts +139 -0
- package/src/cli/utils/logger.ts +74 -0
- package/src/compiler/Chain.ts +831 -0
- package/src/compiler/animations.ts +517 -0
- package/src/compiler/atomic-optimizer.ts +786 -0
- package/src/compiler/breakpoints.ts +347 -0
- package/src/compiler/btt.ts +1147 -0
- package/src/compiler/cache-manager.ts +446 -0
- package/src/compiler/commonProps.ts +18 -0
- package/src/compiler/content-addressable-cache.ts +478 -0
- package/src/compiler/helpers.ts +407 -0
- package/src/compiler/index.ts +72 -0
- package/src/compiler/prefixer.ts +720 -0
- package/src/compiler/shorthands.ts +558 -0
- package/src/compiler/suggestions.ts +436 -0
- package/src/compiler/theme-contract.ts +197 -0
- package/src/compiler/token-resolver.ts +241 -0
- package/src/compiler/tokens.ts +612 -0
- package/src/core/auto-detector.ts +187 -0
- package/src/core/common-utils.ts +423 -0
- package/src/core/compiler.ts +835 -0
- package/src/core/constants.ts +424 -0
- package/src/core/index.ts +107 -0
- package/src/core/smart-chain.ts +163 -0
- package/src/core/types.ts +257 -0
- package/src/core/utils.ts +598 -0
- package/src/index.ts +208 -0
- package/src/plugins/vite.d.ts +316 -0
- package/src/plugins/vite.ts +424 -0
- package/src/plugins/webpack.d.ts +289 -0
- package/src/plugins/webpack.ts +416 -0
- package/src/runtime/Chain.ts +242 -0
- package/src/runtime/auto-hooks.tsx +127 -0
- package/src/runtime/auto-vue.ts +72 -0
- package/src/runtime/hmr.ts +212 -0
- package/src/runtime/index.ts +82 -0
- package/src/runtime/injector.ts +273 -0
- package/src/runtime/react.tsx +269 -0
- package/src/runtime/svelte.ts +15 -0
- package/src/runtime/types.ts +256 -0
- package/src/runtime/utils.ts +128 -0
- package/src/runtime/vite-env.d.ts +120 -0
- package/src/runtime/vue.ts +231 -0
- package/tsconfig.build.json +41 -0
- package/tsconfig.json +25 -0
- package/tsconfig.runtimes.json +18 -0
- package/dist/cli/cli.cjs +0 -7
- package/dist/cli/commands/build.d.ts.map +0 -1
- package/dist/cli/commands/compile.d.ts +0 -3
- package/dist/cli/commands/compile.d.ts.map +0 -1
- package/dist/cli/commands/init.d.ts.map +0 -1
- package/dist/cli/commands/timeline.d.ts.map +0 -1
- package/dist/cli/commands/watch.d.ts.map +0 -1
- package/dist/cli/index.d.ts.map +0 -1
- package/dist/cli/types.d.ts.map +0 -1
- package/dist/cli/utils/config-loader.d.ts.map +0 -1
- package/dist/cli/utils/file-utils.d.ts.map +0 -1
- package/dist/cli/utils/logger.d.ts.map +0 -1
- package/dist/compiler/atomic-optimizer.d.ts.map +0 -1
- package/dist/compiler/btt.d.ts.map +0 -1
- package/dist/compiler/cache-manager.d.ts.map +0 -1
- package/dist/compiler/commonProps.d.ts.map +0 -1
- package/dist/compiler/index.d.ts.map +0 -1
- package/dist/compiler/prefixer.d.ts.map +0 -1
- package/dist/compiler/theme-contract.d.ts.map +0 -1
- package/dist/compiler/tokens.d.ts.map +0 -1
- package/dist/compiler/types.d.ts +0 -57
- package/dist/compiler/types.d.ts.map +0 -1
- package/dist/core/compiler.d.ts.map +0 -1
- package/dist/core/constants.d.ts.map +0 -1
- package/dist/core/index.d.ts +0 -4
- package/dist/core/index.d.ts.map +0 -1
- package/dist/core/types.d.ts.map +0 -1
- package/dist/core/utils.d.ts.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/plugins/vite.d.ts.map +0 -1
- package/dist/plugins/webpack.d.ts.map +0 -1
- package/dist/runtime/hmr.d.ts.map +0 -1
- package/dist/runtime/index.d.ts.map +0 -1
- package/dist/runtime/injector.d.ts.map +0 -1
- package/dist/runtime/react.d.ts.map +0 -1
- package/dist/runtime/react.js +0 -324
- package/dist/runtime/types.d.ts.map +0 -1
- package/dist/runtime/utils.d.ts.map +0 -1
- package/dist/runtime/vue.d.ts.map +0 -1
- package/dist/runtime/vue.js +0 -286
package/dist/runtime/react.js
DELETED
|
@@ -1,324 +0,0 @@
|
|
|
1
|
-
// src/runtime/react.tsx
|
|
2
|
-
import React, { useMemo, useEffect, useRef, useState } from "react";
|
|
3
|
-
|
|
4
|
-
// src/runtime/injector.ts
|
|
5
|
-
var StyleInjector = class {
|
|
6
|
-
styleElement = null;
|
|
7
|
-
stylesCache = /* @__PURE__ */ new Map();
|
|
8
|
-
injectedStyles = /* @__PURE__ */ new Set();
|
|
9
|
-
constructor() {
|
|
10
|
-
this.initStyleElement();
|
|
11
|
-
}
|
|
12
|
-
initStyleElement() {
|
|
13
|
-
if (typeof document === "undefined")
|
|
14
|
-
return;
|
|
15
|
-
const existing = document.getElementById("chaincss-runtime-styles");
|
|
16
|
-
if (existing) {
|
|
17
|
-
this.styleElement = existing;
|
|
18
|
-
return;
|
|
19
|
-
}
|
|
20
|
-
const style = document.createElement("style");
|
|
21
|
-
style.id = "chaincss-runtime-styles";
|
|
22
|
-
style.setAttribute("data-chaincss", "runtime");
|
|
23
|
-
document.head.appendChild(style);
|
|
24
|
-
this.styleElement = style;
|
|
25
|
-
}
|
|
26
|
-
generateClassName(styleId) {
|
|
27
|
-
let hash = 0;
|
|
28
|
-
for (let i = 0; i < styleId.length; i++) {
|
|
29
|
-
hash = (hash << 5) - hash + styleId.charCodeAt(i);
|
|
30
|
-
hash |= 0;
|
|
31
|
-
}
|
|
32
|
-
return `c_${Math.abs(hash).toString(36)}`;
|
|
33
|
-
}
|
|
34
|
-
generateCSS(style, className) {
|
|
35
|
-
let css = "";
|
|
36
|
-
const selector = `.${className}`;
|
|
37
|
-
let normalStyles = "";
|
|
38
|
-
for (const [key, value] of Object.entries(style)) {
|
|
39
|
-
if (key === "selectors" || key === "hover")
|
|
40
|
-
continue;
|
|
41
|
-
const kebabKey = key.replace(/([A-Z])/g, "-$1").toLowerCase();
|
|
42
|
-
normalStyles += ` ${kebabKey}: ${value};
|
|
43
|
-
`;
|
|
44
|
-
}
|
|
45
|
-
if (normalStyles) {
|
|
46
|
-
css += `${selector} {
|
|
47
|
-
${normalStyles}}
|
|
48
|
-
`;
|
|
49
|
-
}
|
|
50
|
-
if (style.hover && typeof style.hover === "object") {
|
|
51
|
-
let hoverStyles = "";
|
|
52
|
-
for (const [key, value] of Object.entries(style.hover)) {
|
|
53
|
-
const kebabKey = key.replace(/([A-Z])/g, "-$1").toLowerCase();
|
|
54
|
-
hoverStyles += ` ${kebabKey}: ${value};
|
|
55
|
-
`;
|
|
56
|
-
}
|
|
57
|
-
if (hoverStyles) {
|
|
58
|
-
css += `${selector}:hover {
|
|
59
|
-
${hoverStyles}}
|
|
60
|
-
`;
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
return css;
|
|
64
|
-
}
|
|
65
|
-
inject(styleId, style) {
|
|
66
|
-
if (this.stylesCache.has(styleId)) {
|
|
67
|
-
return this.stylesCache.get(styleId);
|
|
68
|
-
}
|
|
69
|
-
const className = this.generateClassName(styleId);
|
|
70
|
-
const css = this.generateCSS(style, className);
|
|
71
|
-
this.stylesCache.set(styleId, className);
|
|
72
|
-
if (!this.injectedStyles.has(styleId) && this.styleElement && css) {
|
|
73
|
-
this.styleElement.textContent += css;
|
|
74
|
-
this.injectedStyles.add(styleId);
|
|
75
|
-
}
|
|
76
|
-
return className;
|
|
77
|
-
}
|
|
78
|
-
injectMultiple(styles) {
|
|
79
|
-
const result = {};
|
|
80
|
-
let allCSS = "";
|
|
81
|
-
for (const [styleId, style] of Object.entries(styles)) {
|
|
82
|
-
if (this.stylesCache.has(styleId)) {
|
|
83
|
-
result[styleId] = this.stylesCache.get(styleId);
|
|
84
|
-
continue;
|
|
85
|
-
}
|
|
86
|
-
const className = this.generateClassName(styleId);
|
|
87
|
-
const css = this.generateCSS(style, className);
|
|
88
|
-
this.stylesCache.set(styleId, className);
|
|
89
|
-
result[styleId] = className;
|
|
90
|
-
allCSS += css;
|
|
91
|
-
}
|
|
92
|
-
if (allCSS && this.styleElement) {
|
|
93
|
-
this.styleElement.textContent += allCSS;
|
|
94
|
-
}
|
|
95
|
-
return result;
|
|
96
|
-
}
|
|
97
|
-
update(styleId, style) {
|
|
98
|
-
this.injectedStyles.delete(styleId);
|
|
99
|
-
const className = this.generateClassName(styleId);
|
|
100
|
-
const css = this.generateCSS(style, className);
|
|
101
|
-
this.stylesCache.set(styleId, className);
|
|
102
|
-
if (this.styleElement) {
|
|
103
|
-
let allCSS = "";
|
|
104
|
-
for (const [id, className2] of this.stylesCache) {
|
|
105
|
-
}
|
|
106
|
-
this.styleElement.textContent = allCSS;
|
|
107
|
-
this.injectedStyles.add(styleId);
|
|
108
|
-
}
|
|
109
|
-
return className;
|
|
110
|
-
}
|
|
111
|
-
remove(styleId) {
|
|
112
|
-
this.injectedStyles.delete(styleId);
|
|
113
|
-
this.stylesCache.delete(styleId);
|
|
114
|
-
if (this.styleElement) {
|
|
115
|
-
let allCSS = "";
|
|
116
|
-
for (const [id, className] of this.stylesCache) {
|
|
117
|
-
}
|
|
118
|
-
this.styleElement.textContent = allCSS;
|
|
119
|
-
}
|
|
120
|
-
}
|
|
121
|
-
getStyleElement() {
|
|
122
|
-
return this.styleElement;
|
|
123
|
-
}
|
|
124
|
-
clear() {
|
|
125
|
-
this.stylesCache.clear();
|
|
126
|
-
this.injectedStyles.clear();
|
|
127
|
-
if (this.styleElement) {
|
|
128
|
-
this.styleElement.textContent = "";
|
|
129
|
-
}
|
|
130
|
-
}
|
|
131
|
-
};
|
|
132
|
-
var styleInjector = new StyleInjector();
|
|
133
|
-
function chainRuntime(useTokens = false) {
|
|
134
|
-
const catcher = {};
|
|
135
|
-
const handler = {
|
|
136
|
-
get: (target, prop) => {
|
|
137
|
-
if (prop === "$el") {
|
|
138
|
-
return (...selectors) => {
|
|
139
|
-
if (selectors.length === 0) {
|
|
140
|
-
const result2 = { ...catcher };
|
|
141
|
-
Object.keys(catcher).forEach((key) => delete catcher[key]);
|
|
142
|
-
return result2;
|
|
143
|
-
}
|
|
144
|
-
const result = {
|
|
145
|
-
selectors,
|
|
146
|
-
...catcher
|
|
147
|
-
};
|
|
148
|
-
Object.keys(catcher).forEach((key) => delete catcher[key]);
|
|
149
|
-
return result;
|
|
150
|
-
};
|
|
151
|
-
}
|
|
152
|
-
if (prop === "hover") {
|
|
153
|
-
return () => {
|
|
154
|
-
const hoverCatcher = {};
|
|
155
|
-
const hoverHandler = {
|
|
156
|
-
get: (_, hoverProp) => {
|
|
157
|
-
if (hoverProp === "end") {
|
|
158
|
-
return () => {
|
|
159
|
-
catcher.hover = { ...hoverCatcher };
|
|
160
|
-
Object.keys(hoverCatcher).forEach((key) => delete hoverCatcher[key]);
|
|
161
|
-
return proxy;
|
|
162
|
-
};
|
|
163
|
-
}
|
|
164
|
-
return (value) => {
|
|
165
|
-
hoverCatcher[hoverProp] = value;
|
|
166
|
-
return hoverProxy;
|
|
167
|
-
};
|
|
168
|
-
}
|
|
169
|
-
};
|
|
170
|
-
const hoverProxy = new Proxy({}, hoverHandler);
|
|
171
|
-
return hoverProxy;
|
|
172
|
-
};
|
|
173
|
-
}
|
|
174
|
-
if (prop === "end") {
|
|
175
|
-
return () => proxy;
|
|
176
|
-
}
|
|
177
|
-
return (value) => {
|
|
178
|
-
catcher[prop] = value;
|
|
179
|
-
return proxy;
|
|
180
|
-
};
|
|
181
|
-
}
|
|
182
|
-
};
|
|
183
|
-
const proxy = new Proxy({}, handler);
|
|
184
|
-
return proxy;
|
|
185
|
-
}
|
|
186
|
-
var $ = chainRuntime();
|
|
187
|
-
function compileRuntime(styles) {
|
|
188
|
-
return styleInjector.injectMultiple(styles);
|
|
189
|
-
}
|
|
190
|
-
|
|
191
|
-
// src/runtime/react.tsx
|
|
192
|
-
import { jsx } from "react/jsx-runtime";
|
|
193
|
-
var styleCache = /* @__PURE__ */ new Map();
|
|
194
|
-
function useChainStyles(styles, deps = [], options = {}) {
|
|
195
|
-
const { cache = true, namespace = "chain", watch = false } = options;
|
|
196
|
-
const id = useRef(`chain-${Math.random().toString(36).substr(2, 9)}`);
|
|
197
|
-
const [classNames, setClassNames] = useState({});
|
|
198
|
-
const processed = useMemo(() => {
|
|
199
|
-
const resolvedStyles = typeof styles === "function" ? styles() : styles;
|
|
200
|
-
if (!resolvedStyles || Object.keys(resolvedStyles).length === 0) {
|
|
201
|
-
return { classNames: {}, css: "" };
|
|
202
|
-
}
|
|
203
|
-
const cacheKey = JSON.stringify(resolvedStyles);
|
|
204
|
-
if (cache && styleCache.has(cacheKey)) {
|
|
205
|
-
return { classNames: styleCache.get(cacheKey), css: "" };
|
|
206
|
-
}
|
|
207
|
-
const compiledStyles = {};
|
|
208
|
-
const newClassNames = {};
|
|
209
|
-
for (const [key, styleDef] of Object.entries(resolvedStyles)) {
|
|
210
|
-
const className = `${namespace}-${key}-${id.current}`;
|
|
211
|
-
const styleObj = typeof styleDef === "function" ? styleDef() : styleDef;
|
|
212
|
-
newClassNames[key] = className;
|
|
213
|
-
compiledStyles[`${key}_${id.current}`] = {
|
|
214
|
-
selectors: [`.${className}`],
|
|
215
|
-
...styleObj
|
|
216
|
-
};
|
|
217
|
-
}
|
|
218
|
-
const result = compileRuntime(compiledStyles);
|
|
219
|
-
if (cache) {
|
|
220
|
-
styleCache.set(cacheKey, result);
|
|
221
|
-
}
|
|
222
|
-
return { classNames: result, css: "" };
|
|
223
|
-
}, [styles, namespace, id.current, ...deps]);
|
|
224
|
-
useEffect(() => {
|
|
225
|
-
setClassNames(processed.classNames);
|
|
226
|
-
return () => {
|
|
227
|
-
if (!watch) {
|
|
228
|
-
for (const key of Object.keys(processed.classNames)) {
|
|
229
|
-
styleInjector.remove(`${namespace}-${key}-${id.current}`);
|
|
230
|
-
}
|
|
231
|
-
}
|
|
232
|
-
};
|
|
233
|
-
}, [processed.classNames, watch]);
|
|
234
|
-
return classNames;
|
|
235
|
-
}
|
|
236
|
-
function useDynamicChainStyles(styleFactory, deps = [], options) {
|
|
237
|
-
const styles = useMemo(() => styleFactory(), deps);
|
|
238
|
-
return useChainStyles(styles, deps, options);
|
|
239
|
-
}
|
|
240
|
-
function useThemeChainStyles(styles, theme, options) {
|
|
241
|
-
const themedStyles = useMemo(() => {
|
|
242
|
-
if (typeof styles === "function")
|
|
243
|
-
return styles(theme);
|
|
244
|
-
return styles;
|
|
245
|
-
}, [styles, theme]);
|
|
246
|
-
return useChainStyles(themedStyles, [], options);
|
|
247
|
-
}
|
|
248
|
-
function ChainCSSGlobal({ styles }) {
|
|
249
|
-
useChainStyles(styles, [], { watch: true });
|
|
250
|
-
return null;
|
|
251
|
-
}
|
|
252
|
-
function cx(...classes) {
|
|
253
|
-
return classes.filter(Boolean).join(" ");
|
|
254
|
-
}
|
|
255
|
-
var debugEnabled = false;
|
|
256
|
-
function enableChainCSSDebug() {
|
|
257
|
-
if (typeof window !== "undefined") {
|
|
258
|
-
debugEnabled = true;
|
|
259
|
-
window.__CHAINCSS_DEBUG__ = true;
|
|
260
|
-
console.log("\u{1F50D} ChainCSS Debug Mode Enabled");
|
|
261
|
-
}
|
|
262
|
-
}
|
|
263
|
-
function disableChainCSSDebug() {
|
|
264
|
-
if (typeof window !== "undefined") {
|
|
265
|
-
debugEnabled = false;
|
|
266
|
-
window.__CHAINCSS_DEBUG__ = false;
|
|
267
|
-
console.log("\u{1F50D} ChainCSS Debug Mode Disabled");
|
|
268
|
-
}
|
|
269
|
-
}
|
|
270
|
-
function isDebugEnabled() {
|
|
271
|
-
return debugEnabled || typeof window !== "undefined" && window.__CHAINCSS_DEBUG__;
|
|
272
|
-
}
|
|
273
|
-
function withChainStyles(styles, options) {
|
|
274
|
-
return function WrappedComponent(props) {
|
|
275
|
-
const classNames = useChainStyles(
|
|
276
|
-
typeof styles === "function" ? styles(props) : styles,
|
|
277
|
-
[],
|
|
278
|
-
// ← Add empty deps array
|
|
279
|
-
options
|
|
280
|
-
);
|
|
281
|
-
const Component = props.component || props.wrappedComponent;
|
|
282
|
-
return /* @__PURE__ */ jsx(Component, { ...props, chainStyles: classNames });
|
|
283
|
-
};
|
|
284
|
-
}
|
|
285
|
-
function createStyledComponent(elementType, styles, options) {
|
|
286
|
-
const StyledComponent = (props) => {
|
|
287
|
-
const { className: additionalClassName, ...rest } = props;
|
|
288
|
-
const classNames = useChainStyles(styles, [], options);
|
|
289
|
-
const combinedClassName = [classNames.root, additionalClassName].filter(Boolean).join(" ");
|
|
290
|
-
return React.createElement(elementType, {
|
|
291
|
-
...rest,
|
|
292
|
-
className: combinedClassName
|
|
293
|
-
});
|
|
294
|
-
};
|
|
295
|
-
const displayName = typeof elementType === "string" ? elementType : elementType.displayName || "Component";
|
|
296
|
-
StyledComponent.displayName = `ChainCSS.${displayName}`;
|
|
297
|
-
return StyledComponent;
|
|
298
|
-
}
|
|
299
|
-
function createStyledComponents(components) {
|
|
300
|
-
const result = {};
|
|
301
|
-
for (const [name, config] of Object.entries(components)) {
|
|
302
|
-
const { element = "div", styles, options } = config;
|
|
303
|
-
result[name] = createStyledComponent(element, styles, options);
|
|
304
|
-
}
|
|
305
|
-
return result;
|
|
306
|
-
}
|
|
307
|
-
function useComputedStyles(styles, props, deps = [], options) {
|
|
308
|
-
const computedStyles = useMemo(() => styles(props), [props, ...deps]);
|
|
309
|
-
return useChainStyles(computedStyles, deps, options);
|
|
310
|
-
}
|
|
311
|
-
export {
|
|
312
|
-
ChainCSSGlobal,
|
|
313
|
-
createStyledComponent,
|
|
314
|
-
createStyledComponents,
|
|
315
|
-
cx,
|
|
316
|
-
disableChainCSSDebug,
|
|
317
|
-
enableChainCSSDebug,
|
|
318
|
-
isDebugEnabled,
|
|
319
|
-
useChainStyles,
|
|
320
|
-
useComputedStyles,
|
|
321
|
-
useDynamicChainStyles,
|
|
322
|
-
useThemeChainStyles,
|
|
323
|
-
withChainStyles
|
|
324
|
-
};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/runtime/types.ts"],"names":[],"mappings":"AAEA;;;GAGG;AAEH,MAAM,WAAW,sBAAsB;IACrC,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,CAAC;IACxC,CAAC,WAAW,EAAE,MAAM,GAAG,GAAG,CAAC;CAC5B;AAED,MAAM,WAAW,qBAAqB;IACpC,4BAA4B;IAC5B,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,iCAAiC;IACjC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,2CAA2C;IAC3C,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,qBAAqB;IACpC,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,sBAAsB,GAAG,MAAM,CAAC;IAC/D,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,sBAAsB,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACvF,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,sBAAsB,GAAG,MAAM,CAAC;IAC/D,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,KAAK,IAAI,IAAI,CAAC;IACd,eAAe,IAAI,gBAAgB,GAAG,IAAI,CAAC;CAC5C;AAGD,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,EAAE,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;IAC7B,EAAE,EAAE,CAAC,GAAG,KAAK,EAAE,MAAM,EAAE,KAAK,MAAM,CAAC;CACpC;AAGD,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,SAAS,EAAE,MAAM,CAAC;CACnB;AAGD,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,OAAO,CAAC;IACjB,GAAG,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,CAAC;IAC9B,IAAI,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,CAAC;IAC/B,KAAK,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,CAAC;CACjC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/runtime/utils.ts"],"names":[],"mappings":"AAEA;;GAEG;AAEH;;GAEG;AACH,wBAAgB,eAAe,CAAC,MAAM,GAAE,MAAgB,GAAG,MAAM,CAIhE;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAO9C;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAE7C;AAED;;GAEG;AACH,eAAO,MAAM,SAAS,SAAmE,CAAC;AAE1F;;GAEG;AACH,eAAO,MAAM,aAAa,SAAyC,CAAC;AAEpE;;GAEG;AACH,eAAO,MAAM,YAAY,SAAwC,CAAC;AAElE;;GAEG;AACH,wBAAgB,QAAQ,CAAC,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,EACxD,EAAE,EAAE,CAAC,EACL,KAAK,EAAE,MAAM,GACZ,CAAC,GAAG,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,KAAK,IAAI,CAOlC;AAED;;GAEG;AACH,wBAAgB,OAAO,CAAC,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,EACvD,EAAE,EAAE,CAAC,GACJ,CAAC,GAAG;IAAE,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,CAAA;CAAE,CAe3C;AAED;;GAEG;AACH,wBAAgB,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC,MAAM,GAAG,SAAS,GAAG,IAAI,GAAG,KAAK,CAAC,EAAE,GAAG,MAAM,CAE5E;AAED;;GAEG;AACH,wBAAgB,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI,CAI7D;AAED;;GAEG;AACH,wBAAgB,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI,CAI5D;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,KAAK,GAAG,IAAI,CAE7D;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM;mBAE1B,GAAG,EAAE;oBACJ,GAAG,EAAE;qBACJ,GAAG,EAAE;EAEzB"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"vue.d.ts","sourceRoot":"","sources":["../../src/runtime/vue.ts"],"names":[],"mappings":"AAEA,OAAO,EAA8E,GAAG,EAAE,MAAM,KAAK,CAAC;AAKtG,MAAM,WAAW,uBAAuB;IACtC,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,GAAG,EACX,OAAO,GAAE,uBAA4B;;eA+BxB,MAAM;mBACF,MAAM,EAAE;EAE1B;AAGD,eAAO,MAAM,cAAc;;;;;;;;iBAQZ,GAAG;CAIjB,CAAC;AAEF;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,MAAM,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,EACzD,GAAG,SAAQ;;;;;;;;iBAOI,GAAG,oBAAoB,GAAG;;;EAiB1C;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAS3F;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC7D,MAAM,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACzC,KAAK,EAAE,CAAC;;;EAST;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,GAAG,iBAI7C;AAED,wBAAgB,kBAAkB,kBAEjC"}
|
package/dist/runtime/vue.js
DELETED
|
@@ -1,286 +0,0 @@
|
|
|
1
|
-
// src/runtime/vue.ts
|
|
2
|
-
import { ref, computed, inject, provide, h } from "vue";
|
|
3
|
-
|
|
4
|
-
// src/runtime/injector.ts
|
|
5
|
-
var StyleInjector = class {
|
|
6
|
-
styleElement = null;
|
|
7
|
-
stylesCache = /* @__PURE__ */ new Map();
|
|
8
|
-
injectedStyles = /* @__PURE__ */ new Set();
|
|
9
|
-
constructor() {
|
|
10
|
-
this.initStyleElement();
|
|
11
|
-
}
|
|
12
|
-
initStyleElement() {
|
|
13
|
-
if (typeof document === "undefined")
|
|
14
|
-
return;
|
|
15
|
-
const existing = document.getElementById("chaincss-runtime-styles");
|
|
16
|
-
if (existing) {
|
|
17
|
-
this.styleElement = existing;
|
|
18
|
-
return;
|
|
19
|
-
}
|
|
20
|
-
const style = document.createElement("style");
|
|
21
|
-
style.id = "chaincss-runtime-styles";
|
|
22
|
-
style.setAttribute("data-chaincss", "runtime");
|
|
23
|
-
document.head.appendChild(style);
|
|
24
|
-
this.styleElement = style;
|
|
25
|
-
}
|
|
26
|
-
generateClassName(styleId) {
|
|
27
|
-
let hash = 0;
|
|
28
|
-
for (let i = 0; i < styleId.length; i++) {
|
|
29
|
-
hash = (hash << 5) - hash + styleId.charCodeAt(i);
|
|
30
|
-
hash |= 0;
|
|
31
|
-
}
|
|
32
|
-
return `c_${Math.abs(hash).toString(36)}`;
|
|
33
|
-
}
|
|
34
|
-
generateCSS(style, className) {
|
|
35
|
-
let css = "";
|
|
36
|
-
const selector = `.${className}`;
|
|
37
|
-
let normalStyles = "";
|
|
38
|
-
for (const [key, value] of Object.entries(style)) {
|
|
39
|
-
if (key === "selectors" || key === "hover")
|
|
40
|
-
continue;
|
|
41
|
-
const kebabKey = key.replace(/([A-Z])/g, "-$1").toLowerCase();
|
|
42
|
-
normalStyles += ` ${kebabKey}: ${value};
|
|
43
|
-
`;
|
|
44
|
-
}
|
|
45
|
-
if (normalStyles) {
|
|
46
|
-
css += `${selector} {
|
|
47
|
-
${normalStyles}}
|
|
48
|
-
`;
|
|
49
|
-
}
|
|
50
|
-
if (style.hover && typeof style.hover === "object") {
|
|
51
|
-
let hoverStyles = "";
|
|
52
|
-
for (const [key, value] of Object.entries(style.hover)) {
|
|
53
|
-
const kebabKey = key.replace(/([A-Z])/g, "-$1").toLowerCase();
|
|
54
|
-
hoverStyles += ` ${kebabKey}: ${value};
|
|
55
|
-
`;
|
|
56
|
-
}
|
|
57
|
-
if (hoverStyles) {
|
|
58
|
-
css += `${selector}:hover {
|
|
59
|
-
${hoverStyles}}
|
|
60
|
-
`;
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
return css;
|
|
64
|
-
}
|
|
65
|
-
inject(styleId, style) {
|
|
66
|
-
if (this.stylesCache.has(styleId)) {
|
|
67
|
-
return this.stylesCache.get(styleId);
|
|
68
|
-
}
|
|
69
|
-
const className = this.generateClassName(styleId);
|
|
70
|
-
const css = this.generateCSS(style, className);
|
|
71
|
-
this.stylesCache.set(styleId, className);
|
|
72
|
-
if (!this.injectedStyles.has(styleId) && this.styleElement && css) {
|
|
73
|
-
this.styleElement.textContent += css;
|
|
74
|
-
this.injectedStyles.add(styleId);
|
|
75
|
-
}
|
|
76
|
-
return className;
|
|
77
|
-
}
|
|
78
|
-
injectMultiple(styles) {
|
|
79
|
-
const result = {};
|
|
80
|
-
let allCSS = "";
|
|
81
|
-
for (const [styleId, style] of Object.entries(styles)) {
|
|
82
|
-
if (this.stylesCache.has(styleId)) {
|
|
83
|
-
result[styleId] = this.stylesCache.get(styleId);
|
|
84
|
-
continue;
|
|
85
|
-
}
|
|
86
|
-
const className = this.generateClassName(styleId);
|
|
87
|
-
const css = this.generateCSS(style, className);
|
|
88
|
-
this.stylesCache.set(styleId, className);
|
|
89
|
-
result[styleId] = className;
|
|
90
|
-
allCSS += css;
|
|
91
|
-
}
|
|
92
|
-
if (allCSS && this.styleElement) {
|
|
93
|
-
this.styleElement.textContent += allCSS;
|
|
94
|
-
}
|
|
95
|
-
return result;
|
|
96
|
-
}
|
|
97
|
-
update(styleId, style) {
|
|
98
|
-
this.injectedStyles.delete(styleId);
|
|
99
|
-
const className = this.generateClassName(styleId);
|
|
100
|
-
const css = this.generateCSS(style, className);
|
|
101
|
-
this.stylesCache.set(styleId, className);
|
|
102
|
-
if (this.styleElement) {
|
|
103
|
-
let allCSS = "";
|
|
104
|
-
for (const [id, className2] of this.stylesCache) {
|
|
105
|
-
}
|
|
106
|
-
this.styleElement.textContent = allCSS;
|
|
107
|
-
this.injectedStyles.add(styleId);
|
|
108
|
-
}
|
|
109
|
-
return className;
|
|
110
|
-
}
|
|
111
|
-
remove(styleId) {
|
|
112
|
-
this.injectedStyles.delete(styleId);
|
|
113
|
-
this.stylesCache.delete(styleId);
|
|
114
|
-
if (this.styleElement) {
|
|
115
|
-
let allCSS = "";
|
|
116
|
-
for (const [id, className] of this.stylesCache) {
|
|
117
|
-
}
|
|
118
|
-
this.styleElement.textContent = allCSS;
|
|
119
|
-
}
|
|
120
|
-
}
|
|
121
|
-
getStyleElement() {
|
|
122
|
-
return this.styleElement;
|
|
123
|
-
}
|
|
124
|
-
clear() {
|
|
125
|
-
this.stylesCache.clear();
|
|
126
|
-
this.injectedStyles.clear();
|
|
127
|
-
if (this.styleElement) {
|
|
128
|
-
this.styleElement.textContent = "";
|
|
129
|
-
}
|
|
130
|
-
}
|
|
131
|
-
};
|
|
132
|
-
var styleInjector = new StyleInjector();
|
|
133
|
-
function chainRuntime(useTokens = false) {
|
|
134
|
-
const catcher = {};
|
|
135
|
-
const handler = {
|
|
136
|
-
get: (target, prop) => {
|
|
137
|
-
if (prop === "$el") {
|
|
138
|
-
return (...selectors) => {
|
|
139
|
-
if (selectors.length === 0) {
|
|
140
|
-
const result2 = { ...catcher };
|
|
141
|
-
Object.keys(catcher).forEach((key) => delete catcher[key]);
|
|
142
|
-
return result2;
|
|
143
|
-
}
|
|
144
|
-
const result = {
|
|
145
|
-
selectors,
|
|
146
|
-
...catcher
|
|
147
|
-
};
|
|
148
|
-
Object.keys(catcher).forEach((key) => delete catcher[key]);
|
|
149
|
-
return result;
|
|
150
|
-
};
|
|
151
|
-
}
|
|
152
|
-
if (prop === "hover") {
|
|
153
|
-
return () => {
|
|
154
|
-
const hoverCatcher = {};
|
|
155
|
-
const hoverHandler = {
|
|
156
|
-
get: (_, hoverProp) => {
|
|
157
|
-
if (hoverProp === "end") {
|
|
158
|
-
return () => {
|
|
159
|
-
catcher.hover = { ...hoverCatcher };
|
|
160
|
-
Object.keys(hoverCatcher).forEach((key) => delete hoverCatcher[key]);
|
|
161
|
-
return proxy;
|
|
162
|
-
};
|
|
163
|
-
}
|
|
164
|
-
return (value) => {
|
|
165
|
-
hoverCatcher[hoverProp] = value;
|
|
166
|
-
return hoverProxy;
|
|
167
|
-
};
|
|
168
|
-
}
|
|
169
|
-
};
|
|
170
|
-
const hoverProxy = new Proxy({}, hoverHandler);
|
|
171
|
-
return hoverProxy;
|
|
172
|
-
};
|
|
173
|
-
}
|
|
174
|
-
if (prop === "end") {
|
|
175
|
-
return () => proxy;
|
|
176
|
-
}
|
|
177
|
-
return (value) => {
|
|
178
|
-
catcher[prop] = value;
|
|
179
|
-
return proxy;
|
|
180
|
-
};
|
|
181
|
-
}
|
|
182
|
-
};
|
|
183
|
-
const proxy = new Proxy({}, handler);
|
|
184
|
-
return proxy;
|
|
185
|
-
}
|
|
186
|
-
var $ = chainRuntime();
|
|
187
|
-
function compileRuntime(styles) {
|
|
188
|
-
return styleInjector.injectMultiple(styles);
|
|
189
|
-
}
|
|
190
|
-
|
|
191
|
-
// src/runtime/vue.ts
|
|
192
|
-
var CHAIN_CSS_KEY = Symbol("chaincss");
|
|
193
|
-
function useAtomicClasses(styles, options = {}) {
|
|
194
|
-
const { atomic = true, global = false } = options;
|
|
195
|
-
const id = `chain-${Math.random().toString(36).substr(2, 9)}`;
|
|
196
|
-
const classes = computed(() => {
|
|
197
|
-
const resolvedStyles = typeof styles === "function" ? styles() : styles?.value || styles;
|
|
198
|
-
if (!resolvedStyles)
|
|
199
|
-
return {};
|
|
200
|
-
const compiledStyles = {};
|
|
201
|
-
const classNames = {};
|
|
202
|
-
for (const [key, styleDef] of Object.entries(resolvedStyles)) {
|
|
203
|
-
const className = `${key}-${id}`;
|
|
204
|
-
const styleObj = typeof styleDef === "function" ? styleDef() : styleDef;
|
|
205
|
-
classNames[key] = className;
|
|
206
|
-
compiledStyles[`${key}_${id}`] = {
|
|
207
|
-
selectors: [`.${className}`],
|
|
208
|
-
...styleObj
|
|
209
|
-
};
|
|
210
|
-
}
|
|
211
|
-
return compileRuntime(compiledStyles);
|
|
212
|
-
});
|
|
213
|
-
return {
|
|
214
|
-
classes,
|
|
215
|
-
cx: (name) => classes.value[name],
|
|
216
|
-
cn: (...names) => names.map((name) => classes.value[name]).filter(Boolean).join(" ")
|
|
217
|
-
};
|
|
218
|
-
}
|
|
219
|
-
var ChainCSSGlobal = {
|
|
220
|
-
name: "ChainCSSGlobal",
|
|
221
|
-
props: {
|
|
222
|
-
styles: {
|
|
223
|
-
type: Object,
|
|
224
|
-
required: true
|
|
225
|
-
}
|
|
226
|
-
},
|
|
227
|
-
setup(props) {
|
|
228
|
-
useAtomicClasses(props.styles);
|
|
229
|
-
return () => null;
|
|
230
|
-
}
|
|
231
|
-
};
|
|
232
|
-
function createStyledComponent(styles, tag = "div") {
|
|
233
|
-
return {
|
|
234
|
-
name: "ChainCSSStyledComponent",
|
|
235
|
-
props: {
|
|
236
|
-
className: { type: String, default: "" }
|
|
237
|
-
},
|
|
238
|
-
setup(props, { slots, attrs }) {
|
|
239
|
-
const resolvedStyles = typeof styles === "function" ? styles() : styles;
|
|
240
|
-
const { classes } = useAtomicClasses({ root: resolvedStyles });
|
|
241
|
-
const combinedClass = computed(() => {
|
|
242
|
-
const rootClass = classes.value?.root || "";
|
|
243
|
-
return [rootClass, props.className].filter(Boolean).join(" ");
|
|
244
|
-
});
|
|
245
|
-
return () => {
|
|
246
|
-
return h(tag, {
|
|
247
|
-
class: combinedClass.value,
|
|
248
|
-
...attrs
|
|
249
|
-
}, slots.default?.());
|
|
250
|
-
};
|
|
251
|
-
}
|
|
252
|
-
};
|
|
253
|
-
}
|
|
254
|
-
function createStyledComponents(components) {
|
|
255
|
-
const result = {};
|
|
256
|
-
for (const [name, config] of Object.entries(components)) {
|
|
257
|
-
const { element = "div", styles } = config;
|
|
258
|
-
result[name] = createStyledComponent(styles, element);
|
|
259
|
-
}
|
|
260
|
-
return result;
|
|
261
|
-
}
|
|
262
|
-
function useComputedStyles(styles, props) {
|
|
263
|
-
const computedStyles = computed(() => ({ root: styles(props) }));
|
|
264
|
-
const { classes } = useAtomicClasses(computedStyles);
|
|
265
|
-
return {
|
|
266
|
-
classes,
|
|
267
|
-
rootClass: computed(() => classes.value?.root || "")
|
|
268
|
-
};
|
|
269
|
-
}
|
|
270
|
-
function provideStyleContext(theme) {
|
|
271
|
-
const themeRef = ref(theme);
|
|
272
|
-
provide(CHAIN_CSS_KEY, themeRef);
|
|
273
|
-
return themeRef;
|
|
274
|
-
}
|
|
275
|
-
function injectStyleContext() {
|
|
276
|
-
return inject(CHAIN_CSS_KEY, ref({}));
|
|
277
|
-
}
|
|
278
|
-
export {
|
|
279
|
-
ChainCSSGlobal,
|
|
280
|
-
createStyledComponent,
|
|
281
|
-
createStyledComponents,
|
|
282
|
-
injectStyleContext,
|
|
283
|
-
provideStyleContext,
|
|
284
|
-
useAtomicClasses,
|
|
285
|
-
useComputedStyles
|
|
286
|
-
};
|