styimat 4.2.1 → 4.3.0
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/README.md +35 -13
- package/bin/cli.js +1 -1
- package/dist/styimat.js +67 -20
- package/dist/styimat.min.js +22 -23
- package/dist/styimat.min.mjs +22 -23
- package/dist/styimat.mjs +68 -21
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -97,7 +97,7 @@ apply();
|
|
|
97
97
|
|
|
98
98
|
## 使用方法
|
|
99
99
|
|
|
100
|
-
###
|
|
100
|
+
### JavaScript调用
|
|
101
101
|
|
|
102
102
|
#### 1. 作为函数调用
|
|
103
103
|
```javascript
|
|
@@ -202,7 +202,7 @@ const designSystem = await styimat`
|
|
|
202
202
|
styimat.apply(designSystem);
|
|
203
203
|
```
|
|
204
204
|
|
|
205
|
-
###
|
|
205
|
+
### 命令行使用
|
|
206
206
|
|
|
207
207
|
```bash
|
|
208
208
|
# 基本用法
|
|
@@ -225,9 +225,9 @@ styimat input.css output.css
|
|
|
225
225
|
|
|
226
226
|
**更多使用方法请 `npx styimat -h`**
|
|
227
227
|
|
|
228
|
-
|
|
228
|
+
## Styimat语法
|
|
229
229
|
|
|
230
|
-
|
|
230
|
+
### 1. 变量定义
|
|
231
231
|
```css
|
|
232
232
|
/* 全局变量 */
|
|
233
233
|
$primary-color: lab(54.7 77.9 80.1);
|
|
@@ -245,7 +245,7 @@ $font-family: 'Inter', sans-serif;
|
|
|
245
245
|
}
|
|
246
246
|
```
|
|
247
247
|
|
|
248
|
-
|
|
248
|
+
### 2. 配置头语法
|
|
249
249
|
```css
|
|
250
250
|
#indent-size 4
|
|
251
251
|
#auto-process-style-tags true
|
|
@@ -272,7 +272,7 @@ body {
|
|
|
272
272
|
|
|
273
273
|
**注意**:配置头既支持驼峰命名也支持连字符命名,例如 `indent-size` 和 `indentSize` 效果相同。
|
|
274
274
|
|
|
275
|
-
|
|
275
|
+
### 3. 导入语法
|
|
276
276
|
```css
|
|
277
277
|
@import yourcss.css;
|
|
278
278
|
|
|
@@ -290,7 +290,7 @@ body {
|
|
|
290
290
|
}
|
|
291
291
|
```
|
|
292
292
|
|
|
293
|
-
|
|
293
|
+
### 4. 别名语法
|
|
294
294
|
```css
|
|
295
295
|
@alias bg background-color;
|
|
296
296
|
|
|
@@ -302,7 +302,7 @@ body {
|
|
|
302
302
|
}
|
|
303
303
|
```
|
|
304
304
|
|
|
305
|
-
|
|
305
|
+
### 5. 宏语法
|
|
306
306
|
```css
|
|
307
307
|
@macro grid($columns, $gap: 10px) {
|
|
308
308
|
display: grid;
|
|
@@ -312,10 +312,12 @@ body {
|
|
|
312
312
|
|
|
313
313
|
.container {
|
|
314
314
|
@grid(3, 20px);
|
|
315
|
+
// 也可以
|
|
316
|
+
@grid: 3 20px;
|
|
315
317
|
}
|
|
316
318
|
```
|
|
317
319
|
|
|
318
|
-
|
|
320
|
+
### 6. Math计算语法
|
|
319
321
|
```css
|
|
320
322
|
/* math() 函数 */
|
|
321
323
|
.element {
|
|
@@ -332,7 +334,7 @@ body {
|
|
|
332
334
|
}
|
|
333
335
|
```
|
|
334
336
|
|
|
335
|
-
|
|
337
|
+
### 7. Lab颜色语法
|
|
336
338
|
```css
|
|
337
339
|
/* 标准 lab() 函数 */
|
|
338
340
|
.element {
|
|
@@ -346,7 +348,7 @@ body {
|
|
|
346
348
|
}
|
|
347
349
|
```
|
|
348
350
|
|
|
349
|
-
|
|
351
|
+
### 8. LCH颜色语法
|
|
350
352
|
```css
|
|
351
353
|
/* 标准 lch() 函数 */
|
|
352
354
|
.element {
|
|
@@ -360,7 +362,7 @@ body {
|
|
|
360
362
|
}
|
|
361
363
|
```
|
|
362
364
|
|
|
363
|
-
|
|
365
|
+
### 9. 嵌套规则
|
|
364
366
|
```css
|
|
365
367
|
/* Sass 风格的嵌套 */
|
|
366
368
|
.container {
|
|
@@ -386,7 +388,7 @@ body {
|
|
|
386
388
|
}
|
|
387
389
|
```
|
|
388
390
|
|
|
389
|
-
|
|
391
|
+
### 10. 嵌套变量
|
|
390
392
|
```css
|
|
391
393
|
/* 变量可以引用其他变量 */
|
|
392
394
|
$base-color: lab(54.7 77.9 80.1);
|
|
@@ -452,6 +454,26 @@ styimat.imports.clearCache(); // 清除导入缓存
|
|
|
452
454
|
styimat.imports.setBaseUrl('/css/'); // 设置导入基础URL
|
|
453
455
|
styimat.imports.setCacheEnabled(false); // 禁用导入缓存
|
|
454
456
|
styimat.imports.setTimeout(10000); // 设置导入超时时间
|
|
457
|
+
|
|
458
|
+
// 设置插件
|
|
459
|
+
styimat.plugins.compress = {
|
|
460
|
+
enable: true,
|
|
461
|
+
convert: function(css, config) {
|
|
462
|
+
return css.replace(/[\n\b]/g, "");
|
|
463
|
+
},
|
|
464
|
+
created() {
|
|
465
|
+
// 创建时调用
|
|
466
|
+
},
|
|
467
|
+
deleted() {
|
|
468
|
+
// 删除时调用
|
|
469
|
+
}
|
|
470
|
+
};
|
|
471
|
+
|
|
472
|
+
delete styimat.plugins.compress; // 删除插件
|
|
473
|
+
|
|
474
|
+
for(const name in styimat.plugins) {
|
|
475
|
+
console.log(name);
|
|
476
|
+
}
|
|
455
477
|
```
|
|
456
478
|
|
|
457
479
|
### 配置选项
|
package/bin/cli.js
CHANGED
|
@@ -163,7 +163,7 @@ async function convertAndOutput(inputContent, outputFile) {
|
|
|
163
163
|
if (outputFile) {
|
|
164
164
|
fs.writeFileSync(outputFile, outputContent, 'utf8');
|
|
165
165
|
} else {
|
|
166
|
-
process.stdout.write(outputContent
|
|
166
|
+
process.stdout.write(outputContent);
|
|
167
167
|
}
|
|
168
168
|
} catch (error) {
|
|
169
169
|
console.error('转换错误:', error.message);
|
package/dist/styimat.js
CHANGED
|
@@ -34,7 +34,7 @@ const styimat = (function() {
|
|
|
34
34
|
importCache: true,
|
|
35
35
|
importTimeout: 5000,
|
|
36
36
|
enableAlias: true,
|
|
37
|
-
enableMacros: true
|
|
37
|
+
enableMacros: true
|
|
38
38
|
};
|
|
39
39
|
|
|
40
40
|
// 全局P3支持检测结果
|
|
@@ -49,6 +49,8 @@ const styimat = (function() {
|
|
|
49
49
|
// 宏定义存储
|
|
50
50
|
const macroRegistry = new Map();
|
|
51
51
|
|
|
52
|
+
const pluginMap = new Map();
|
|
53
|
+
|
|
52
54
|
/**
|
|
53
55
|
* 解析配置头
|
|
54
56
|
*/
|
|
@@ -386,7 +388,7 @@ const styimat = (function() {
|
|
|
386
388
|
/**
|
|
387
389
|
* 解析一行CSS
|
|
388
390
|
*/
|
|
389
|
-
function parseSingleLineCSS(cssString, aliases
|
|
391
|
+
function parseSingleLineCSS(cssString, aliases, macros) {
|
|
390
392
|
let str = cssString.trim();
|
|
391
393
|
|
|
392
394
|
if (str.endsWith(';')) {
|
|
@@ -459,6 +461,13 @@ const styimat = (function() {
|
|
|
459
461
|
property = aliases.get(property);
|
|
460
462
|
}
|
|
461
463
|
|
|
464
|
+
if (property.startsWith("@") && macros.get(property.slice(1))) {
|
|
465
|
+
const macro = macros.get(property.slice(1));
|
|
466
|
+
const args = parseMacroArguments(value.split(" ").join(","), macro.params);
|
|
467
|
+
property = applyMacro(macro.body, args, config);
|
|
468
|
+
value = "";
|
|
469
|
+
}
|
|
470
|
+
|
|
462
471
|
result.push({ [property]: value });
|
|
463
472
|
}
|
|
464
473
|
|
|
@@ -1143,7 +1152,7 @@ const styimat = (function() {
|
|
|
1143
1152
|
/**
|
|
1144
1153
|
* 解析嵌套规则
|
|
1145
1154
|
*/
|
|
1146
|
-
function parseNestedRules(cssText, config, aliases) {
|
|
1155
|
+
function parseNestedRules(cssText, config, aliases, macros) {
|
|
1147
1156
|
const lines = cssText.split('\n');
|
|
1148
1157
|
const stack = [];
|
|
1149
1158
|
const rootRules = [];
|
|
@@ -1188,11 +1197,12 @@ const styimat = (function() {
|
|
|
1188
1197
|
if (!trimmed.includes('{') && !trimmed.includes('}') && trimmed.includes(':')) {
|
|
1189
1198
|
if (stack.length > 0) {
|
|
1190
1199
|
const currentRule = stack[stack.length - 1];
|
|
1191
|
-
const parsed = parseSingleLineCSS(trimmed, aliases);
|
|
1200
|
+
const parsed = parseSingleLineCSS(trimmed, aliases, macros);
|
|
1192
1201
|
parsed.forEach(obj => {
|
|
1193
1202
|
const key = Object.keys(obj)[0];
|
|
1194
1203
|
const value = processCSSValue(obj[key], config);
|
|
1195
|
-
|
|
1204
|
+
|
|
1205
|
+
currentRule.properties.push(value === "" ? key : `${key}: ${value}`);
|
|
1196
1206
|
});
|
|
1197
1207
|
}
|
|
1198
1208
|
continue;
|
|
@@ -1210,13 +1220,13 @@ const styimat = (function() {
|
|
|
1210
1220
|
}
|
|
1211
1221
|
}
|
|
1212
1222
|
|
|
1213
|
-
return convertRulesToCSS(rootRules, config, '', aliases);
|
|
1223
|
+
return convertRulesToCSS(rootRules, config, '', aliases, macros);
|
|
1214
1224
|
}
|
|
1215
1225
|
|
|
1216
1226
|
/**
|
|
1217
1227
|
* 将规则树转换为CSS字符串
|
|
1218
1228
|
*/
|
|
1219
|
-
function convertRulesToCSS(rules, config, parentSelector = '', aliases
|
|
1229
|
+
function convertRulesToCSS(rules, config, parentSelector = '', aliases, macros) {
|
|
1220
1230
|
let result = '';
|
|
1221
1231
|
const isParentAt = parentSelector.startsWith("@");
|
|
1222
1232
|
|
|
@@ -1241,18 +1251,18 @@ const styimat = (function() {
|
|
|
1241
1251
|
if (rule.properties.length > 0) {
|
|
1242
1252
|
result += (isAt ? "" : fullSelector) + ' {\n';
|
|
1243
1253
|
for (const prop of rule.properties) {
|
|
1244
|
-
const parsed = parseSingleLineCSS(prop, aliases);
|
|
1254
|
+
const parsed = parseSingleLineCSS(prop, aliases, macros);
|
|
1245
1255
|
parsed.forEach(obj => {
|
|
1246
1256
|
const key = Object.keys(obj)[0];
|
|
1247
1257
|
const value = processCSSValue(obj[key], config);
|
|
1248
|
-
result += (isParentAt ? " ".repeat(config.indentSize) : '') + " ".repeat(config.indentSize)
|
|
1258
|
+
result += (isParentAt ? " ".repeat(config.indentSize) : '') + " ".repeat(config.indentSize) + (value === "" ? key : `${key}: ${value};\n`);
|
|
1249
1259
|
});
|
|
1250
1260
|
}
|
|
1251
1261
|
result += isParentAt ? " ".repeat(config.indentSize) + '}\n' : '}\n\n';
|
|
1252
1262
|
}
|
|
1253
1263
|
|
|
1254
1264
|
if (rule.children && rule.children.length > 0) {
|
|
1255
|
-
result += convertRulesToCSS(rule.children, config, fullSelector, aliases);
|
|
1265
|
+
result += convertRulesToCSS(rule.children, config, fullSelector, aliases, macros);
|
|
1256
1266
|
}
|
|
1257
1267
|
|
|
1258
1268
|
if (isParentAt){
|
|
@@ -1327,13 +1337,6 @@ const styimat = (function() {
|
|
|
1327
1337
|
}
|
|
1328
1338
|
|
|
1329
1339
|
if (trimmed === '}' && currentSelector) {
|
|
1330
|
-
if (selectorVariables.has(currentSelector)) {
|
|
1331
|
-
const vars = selectorVariables.get(currentSelector);
|
|
1332
|
-
const indent = line.match(/^(\s*)/)[0];
|
|
1333
|
-
for (const [varName, varValue] of Object.entries(vars)) {
|
|
1334
|
-
result += ' --' + varName + ': ' + varValue + ';\n';
|
|
1335
|
-
}
|
|
1336
|
-
}
|
|
1337
1340
|
currentSelector = null;
|
|
1338
1341
|
}
|
|
1339
1342
|
|
|
@@ -1489,7 +1492,7 @@ const styimat = (function() {
|
|
|
1489
1492
|
let processedCSS = cssWithoutVars.trim();
|
|
1490
1493
|
if (finalConfig.enableNesting && cssWithoutVars.includes('{')) {
|
|
1491
1494
|
try {
|
|
1492
|
-
processedCSS = parseNestedRules(cssWithoutVars, finalConfig, aliases);
|
|
1495
|
+
processedCSS = parseNestedRules(cssWithoutVars, finalConfig, aliases, macros);
|
|
1493
1496
|
} catch (error) {
|
|
1494
1497
|
console.warn('嵌套解析失败,使用原始CSS:', error);
|
|
1495
1498
|
}
|
|
@@ -1504,7 +1507,17 @@ const styimat = (function() {
|
|
|
1504
1507
|
|
|
1505
1508
|
finalCSS = replaceVariableUses(finalCSS, globalVariables, selectorVariables, finalConfig);
|
|
1506
1509
|
|
|
1507
|
-
|
|
1510
|
+
for (const [name, plugin] of pluginMap) {
|
|
1511
|
+
try {
|
|
1512
|
+
if(plugin.enable) finalCSS = plugin.convert(finalCSS, finalConfig);
|
|
1513
|
+
} catch (error) {
|
|
1514
|
+
console.error('插件处理失败:', error);
|
|
1515
|
+
}
|
|
1516
|
+
}
|
|
1517
|
+
|
|
1518
|
+
let fullCSS = rootRule + finalCSS;
|
|
1519
|
+
|
|
1520
|
+
return fullCSS;
|
|
1508
1521
|
};
|
|
1509
1522
|
|
|
1510
1523
|
const hasImports = cssText && /@import\s+([^;]+?)\s*;/g.test(cssText);
|
|
@@ -1632,6 +1645,40 @@ const styimat = (function() {
|
|
|
1632
1645
|
}
|
|
1633
1646
|
},
|
|
1634
1647
|
|
|
1648
|
+
plugins: new Proxy({},{
|
|
1649
|
+
set(target, name, plugin) {
|
|
1650
|
+
const createdFunc = plugin.created ?? (() => {});
|
|
1651
|
+
createdFunc();
|
|
1652
|
+
pluginMap.set(name, plugin);
|
|
1653
|
+
return true;
|
|
1654
|
+
},
|
|
1655
|
+
get(target, name) {
|
|
1656
|
+
return pluginMap.get(name);
|
|
1657
|
+
},
|
|
1658
|
+
deleteProperty(target, name) {
|
|
1659
|
+
pluginMap.get(name)?.deleted();
|
|
1660
|
+
pluginMap.delete(name);
|
|
1661
|
+
return true;
|
|
1662
|
+
},
|
|
1663
|
+
has(terget, name) {
|
|
1664
|
+
return pluginMap.has(name);
|
|
1665
|
+
},
|
|
1666
|
+
ownKeys() {
|
|
1667
|
+
return Array.from(pluginMap.keys());
|
|
1668
|
+
},
|
|
1669
|
+
getOwnPropertyDescriptor(target, prop) {
|
|
1670
|
+
if (pluginMap.has(prop)) {
|
|
1671
|
+
return {
|
|
1672
|
+
enumerable: true,
|
|
1673
|
+
configurable: true,
|
|
1674
|
+
writable: true,
|
|
1675
|
+
value: pluginMap.get(prop)
|
|
1676
|
+
};
|
|
1677
|
+
}
|
|
1678
|
+
return undefined;
|
|
1679
|
+
}
|
|
1680
|
+
}),
|
|
1681
|
+
|
|
1635
1682
|
aliases: {
|
|
1636
1683
|
add: function(alias, property) {
|
|
1637
1684
|
aliasMap.set(alias, property);
|
|
@@ -1918,7 +1965,7 @@ const styimat = (function() {
|
|
|
1918
1965
|
})();
|
|
1919
1966
|
|
|
1920
1967
|
if (typeof define === 'function' && define.amd) {
|
|
1921
|
-
define([],
|
|
1968
|
+
define([], _=>styimat);
|
|
1922
1969
|
} else if (typeof module === 'object' && module.exports) {
|
|
1923
1970
|
module.exports = styimat;
|
|
1924
1971
|
} else {
|
package/dist/styimat.min.js
CHANGED
|
@@ -1,34 +1,33 @@
|
|
|
1
1
|
/*!
|
|
2
2
|
* MIT License
|
|
3
3
|
* Copyright (c) 2025 王小玗
|
|
4
|
-
*/const styimat=(function(){let
|
|
5
|
-
`),s=[];for(let
|
|
6
|
-
`)}}function
|
|
7
|
-
`),s=[];for(let
|
|
8
|
-
`)}}function
|
|
9
|
-
`),
|
|
10
|
-
`)}),
|
|
11
|
-
`)}}function
|
|
12
|
-
`),s={},
|
|
13
|
-
`;continue}if(u==="}"){if(c&&a&&
|
|
14
|
-
`}c=!1,a=null}
|
|
15
|
-
`,i.includes("{")&&(l+=
|
|
16
|
-
`),r=[],
|
|
17
|
-
`),n&&(
|
|
18
|
-
`;for(const
|
|
19
|
-
`});r+=
|
|
4
|
+
*/const styimat=(function(){let g={rootSelector:":root",variablePrefix:"--",preserveOriginal:!1,indentSize:4,enableNesting:!0,autoProcessStyleTags:!0,styleTagAttribute:"e",convertLabToRGB:!0,convertLchToRGB:!0,enableP3:!0,enableMath:!0,mathPrecision:6,importBaseUrl:"",importCache:!0,importTimeout:5e3,enableAlias:!0,enableMacros:!0},F=null;const I=new Map,_=new Map,M=new Map,C=new Map;function ne(t){const e={...g},n=t.split(`
|
|
5
|
+
`),s=[];for(let o of n){const r=o.trim();if(r.startsWith("#")){const a=r.substring(1).trim(),c=a.indexOf(" ");if(c!==-1){const l=a.substring(0,c).trim(),i=a.substring(c+1).trim(),u=ae(l);u in e?i==="true"||i==="false"?e[u]=i==="true":!isNaN(i)&&i.trim()!==""?e[u]=Number(i):e[u]=i:console.warn(`\u672A\u77E5\u7684\u914D\u7F6E\u9879: ${l}`)}else console.warn(`\u65E0\u6548\u7684\u914D\u7F6E\u884C: ${r}`)}else s.push(o)}return{config:e,css:s.join(`
|
|
6
|
+
`)}}function re(t){const e=new Map,n=t.split(`
|
|
7
|
+
`),s=[];for(let o of n){const r=o.trim();if(r.startsWith("@alias")){const a=r.match(/^@alias\s+([a-zA-Z0-9_-]+)\s+(.+?)\s*;$/);if(a){const c=a[1],l=a[2];e.set(c,l);continue}}s.push(o)}return{aliases:e,css:s.join(`
|
|
8
|
+
`)}}function U(t,e){if(!e.enableMacros)return{macros:new Map,css:t};const n=new Map,s=t.split(`
|
|
9
|
+
`),o=[];let r=!1,a="",c=[],l=[],i=0;for(let u of s){const h=u.trim();if(!r&&h.startsWith("@macro")){const p=h.match(/^@macro\s+([a-zA-Z0-9_-]+)\s*\(([^)]*)\)\s*\{$/);if(p){r=!0,a=p[1],c=p[2].split(",").map(f=>f.trim()).filter(f=>f).map(f=>{const d=f.split(":").map(b=>b.trim());return{name:d[0].slice(1),defaultValue:d[1]||null}}),l=[],i=1;continue}}if(r){for(const p of u)p==="{"&&i++,p==="}"&&i--;i===0?(n.set(a,{params:c,body:l.join(`
|
|
10
|
+
`)}),r=!1,a="",c=[],l=[]):l.push(u);continue}o.push(u)}return{macros:n,css:o.join(`
|
|
11
|
+
`)}}function se(t,e,n){if(!n.enableMacros||e.size===0)return t;const s=Array.from(e.keys()).map(a=>a.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")).join("|"),o=new RegExp(`@(${s})\\s*\\(([^)]*)\\)\\s*;?`,"g");return(a=>{let c=a,l=!1;do l=!1,c=c.replace(o,(i,u,h)=>{l=!0;const p=e.get(u);if(!p)return console.warn(`\u672A\u5B9A\u4E49\u7684\u5B8F: ${u}`),i;const f=O(h,p.params);return k(p.body,f,n)});while(l);return c})(t)}function O(t,e){const n=new Map,s=oe(t);for(let o=0;o<e.length;o++){const r=e[o];let a;o<s.length?a=s[o]:r.defaultValue!==null?a=r.defaultValue:(console.warn(`\u5B8F\u8C03\u7528\u7F3A\u5C11\u5FC5\u9700\u53C2\u6570: ${r.name}`),a=""),n.set(r.name,a)}return s.length>e.length&&console.warn("\u5B8F\u8C03\u7528\u4F20\u9012\u4E86\u8FC7\u591A\u53C2\u6570\uFF0C\u591A\u4F59\u7684\u53C2\u6570\u5C06\u88AB\u5FFD\u7565"),n}function oe(t){const e=[];let n="",s=!1,o="",r=0,a=0;for(let c=0;c<t.length;c++){const l=t[c];(l==='"'||l==="'")&&!s?(s=!0,o=l):l===o&&s&&(s=!1,o=""),s||(l==="("&&r++,l===")"&&r--,l==="["&&a++,l==="]"&&a--),l===","&&!s&&r===0&&a===0?(e.push(n.trim()),n=""):n+=l}return n.trim()&&e.push(n.trim()),e}function k(t,e,n){let s=t;for(const[o,r]of e){const a=new RegExp(`\\$${o}`,"g");s=s.replace(a,r)}if(n.enableMacros){const o=Array.from(M.keys()).map(r=>r.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")).join("|");if(o){const r=new RegExp(`@(${o})\\s*\\(([^)]*)\\)\\s*;?`,"g");let a;do a=!1,s=s.replace(r,(c,l,i)=>{a=!0;const u=M.get(l);if(!u)return c;const h=O(i,u.params);return k(u.body,h,n)});while(a)}}return s=x(s,n),s}function ae(t){return t.replace(/-([a-z])/g,function(e,n){return n.toUpperCase()})}function Z(){if(F!==null)return F;if(typeof window>"u"||!window.CSS)return F=!1,!1;try{F=CSS.supports("color","color(display-p3 1 0 0)")}catch(t){console.warn("P3\u652F\u6301\u68C0\u6D4B\u5931\u8D25:",t),F=!1}return F}function X(t,e,n){let s=t.trim();if(s.endsWith(";")&&(s=s.slice(0,-1)),!s)return[];const o=[];let r="",a=0,c=!1,l="";for(let u=0;u<s.length;u++){const h=s[u];(h==='"'||h==="'")&&!c?(c=!0,l=h):h===l&&c&&(c=!1,l=""),c||(h==="("?a++:h===")"&&a--),h===";"&&!c&&a===0?r.trim()&&(o.push(r.trim()),r=""):r+=h}r.trim()&&o.push(r.trim());const i=[];for(const u of o){if(!u.trim())continue;const h=ce(u);if(h===-1){console.warn(`\u65E0\u6548\u7684CSS\u58F0\u660E: "${u}"`);continue}let p=u.substring(0,h).trim(),f=u.substring(h+1).trim();if(f.endsWith(";")&&(f=f.slice(0,-1).trim()),e.get(p)&&(p=e.get(p)),p.startsWith("@")&&n.get(p.slice(1))){const d=n.get(p.slice(1)),b=O(f.split(" ").join(","),d.params);p=k(d.body,b,te),f=""}i.push({[p]:f})}return i}function ce(t){let e=!1,n="";for(let s=0;s<t.length;s++){const o=t[s];if((o==='"'||o==="'")&&!e?(e=!0,n=o):o===n&&e&&(e=!1,n=""),o===":"&&!e)return s}return-1}function j(t,e){if(!e.enableMath)return`math(${t})`;try{let n=t.replace(/\s+/g,"");const s=q(n,e);return le(n)?ie(n,s):Y(s,e.mathPrecision)}catch(n){return console.warn("math()\u8868\u8FBE\u5F0F\u89E3\u6790\u5931\u8D25:",t,n),`math(${t})`}}function q(t,e){for(;t.includes("(")&&t.includes(")");){const n=t.lastIndexOf("("),s=t.indexOf(")",n);if(s===-1)break;const o=t.substring(n+1,s),r=q(o,e);t=t.substring(0,n)+r+t.substring(s+1)}return D(t,e)}function D(t,e){const n=[{regex:/([\d.]+(?:[a-zA-Z%]+)?)\*([\d.]+(?:[a-zA-Z%]+)?)/,handler:ue},{regex:/([\d.]+(?:[a-zA-Z%]+)?)\/([\d.]+(?:[a-zA-Z%]+)?)/,handler:fe},{regex:/([\d.]+(?:[a-zA-Z%]+)?)\+([\d.]+(?:[a-zA-Z%]+)?)/,handler:pe},{regex:/([\d.]+(?:[a-zA-Z%]+)?)-([\d.]+(?:[a-zA-Z%]+)?)/,handler:he}];let s=t;for(const r of n){let a;for(;(a=t.match(r.regex))!==null;){const c=T(a[1]),l=T(a[2]),i=r.handler(c,l);t=t.substring(0,a.index)+i.value+t.substring(a.index+a[0].length)}}return t!==s?D(t,e):T(t).value}function T(t){const e=t.match(/^([\d.]+)([a-zA-Z%]*)$/);if(!e)throw new Error(`\u65E0\u6CD5\u89E3\u6790\u503C: ${t}`);const n=parseFloat(e[1]),s=e[2]||"";return{value:n,unit:s}}function le(t){return/[a-zA-Z%]/.test(t)}function ie(t,e){const n=t.match(/([a-zA-Z%]+)(?!.*[a-zA-Z%])/);return n?e+n[1]:t.includes("%")?e+"%":e+"px"}function ue(t,e){return t.unit===e.unit||!t.unit&&!e.unit?{value:t.value*e.value,unit:t.unit||e.unit}:{value:`${t.value}${t.unit}*${e.value}${e.unit}`,unit:""}}function fe(t,e){if(e.value===0)throw new Error("\u9664\u4EE5\u96F6");return t.unit&&!e.unit?{value:t.value/e.value,unit:t.unit}:t.unit===e.unit?{value:t.value/e.value,unit:""}:{value:`${t.value}${t.unit}/${e.value}${e.unit}`,unit:""}}function pe(t,e){return t.unit===e.unit?{value:t.value+e.value,unit:t.unit}:{value:`${t.value}${t.unit}+${e.value}${e.unit}`,unit:""}}function he(t,e){return t.unit===e.unit?{value:t.value-e.value,unit:t.unit}:{value:`${t.value}${t.unit}-${e.value}${e.unit}`,unit:""}}function Y(t,e=6){const n=Math.pow(10,e),o=(Math.round(t*n)/n).toString();return o.includes(".")?o.replace(/(\.\d*?)0+$/,"$1").replace(/\.$/,""):o}function de(t,e){if(!e.enableMath)return t;let n=t;const s=/math\(([^)]+)\)/gi,o=a=>a.replace(s,(c,l)=>j(l,e));let r;do r=n,n=o(n);while(n!==r&&n.includes("math("));return n}function me(t,e){if(!e.convertLabToRGB&&!e.convertLchToRGB)return t;let n=t;n=ge(n,e);const s=/(lab|lch)\([^)]+\)/gi,o=new Map,r=c=>c.replace(s,l=>{if(o.has(l))return o.get(l);let i=l;return l.toLowerCase().startsWith("lab(")?e.convertLabToRGB&&(i=be(l,e)):l.toLowerCase().startsWith("lch(")&&e.convertLchToRGB&&(i=ye(l,e)),o.set(l,i),i});let a;do a=n,n=r(n);while(n!==a);return n}function ge(t,e){let n=t;const s=/lab#([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})/gi,o=/lch#([0-9a-f]{2})([0-9a-f]{2})(\d{1,3})/gi,r=new Map;return n=n.replace(s,(a,c,l,i)=>{if(r.has(a))return r.get(a);try{const u=parseInt(c,16)/255*100,h=(parseInt(l,16)-128)*1.5,p=(parseInt(i,16)-128)*1.5,f=R(u,h,p,e);return r.set(a,f),f}catch(u){return console.warn(`\u65E0\u6CD5\u89E3\u6790lab#\u5341\u516D\u8FDB\u5236\u989C\u8272: ${a}`,u),a}}),n=n.replace(o,(a,c,l,i)=>{if(r.has(a))return r.get(a);try{const u=parseInt(c,16)/255*100,h=parseInt(l,16)/255*150,p=parseInt(i)/100*360,f=L(u,h,p),d=R(f.L,f.a,f.b,e);return r.set(a,d),d}catch(u){return console.warn(`\u65E0\u6CD5\u89E3\u6790lch#\u5341\u516D\u8FDB\u5236\u989C\u8272: ${a}`,u),a}}),n}function be(t,e){const n=/lab\(\s*([\d.]+)(%?)\s+([\d.-]+)\s+([\d.-]+)(?:\s*\/\s*([\d.%]+))?\s*\)/i,s=t.match(n);if(!s)return t;try{let o=parseFloat(s[1]);s[2]==="%"?o=o:(o<0&&(o=0),o>100&&(o=100));const r=parseFloat(s[3]),a=parseFloat(s[4]),c=s[5]!==void 0?s[5].includes("%")?parseFloat(s[5])/100:parseFloat(s[5]):null;return R(o,r,a,e,c)}catch(o){return console.warn(`\u65E0\u6CD5\u8F6C\u6362LAB\u989C\u8272: ${t}`,o),t}}function ye(t,e){const n=/lch\(\s*([\d.]+)(%?)\s+([\d.]+)\s+([\d.]+)(deg)?(?:\s*\/\s*([\d.%]+))?\s*\)/i,s=t.match(n);if(!s)return t;try{let o=parseFloat(s[1]);s[2]==="%"?o=o:(o<0&&(o=0),o>100&&(o=100));const r=parseFloat(s[3]);let a=parseFloat(s[4]);r<0&&console.warn(`LCH\u4E2D\u7684C\u503C\u4E0D\u80FD\u4E3A\u8D1F: ${r}`),a=(a%360+360)%360;const c=L(o,r,a),l=s[6]!==void 0?s[6].includes("%")?parseFloat(s[6])/100:parseFloat(s[6]):null;return R(c.L,c.a,c.b,e,l)}catch(o){return console.warn(`\u65E0\u6CD5\u8F6C\u6362LCH\u989C\u8272: ${t}`,o),t}}function L(t,e,n){const s=n*Math.PI/180,o=e*Math.cos(s),r=e*Math.sin(s);return{L:t,a:o,b:r}}function A(t,e,n){const s=(m,y,$)=>{const E=(m+16)/116,B=y/500+E,G=E-$/200,Re=B**3>.008856?B**3:(116*B-16)/903.3,xe=m>903.3*.008856?((m+16)/116)**3:m/903.3,Pe=G**3>.008856?G**3:(116*G-16)/903.3;return[Re*.95047,xe*1,Pe*1.08883]},o=(m,y,$)=>{const w=[[3.2404542,-1.5371385,-.4985314],[-.969266,1.8760108,.041556],[.0556434,-.2040259,1.0572252]],v=w[0][0]*m+w[0][1]*y+w[0][2]*$,H=w[1][0]*m+w[1][1]*y+w[1][2]*$,S=w[2][0]*m+w[2][1]*y+w[2][2]*$;return[v,H,S]},r=m=>{const y=m<0?-1:1,$=Math.abs(m);return $<=.0031308?y*12.92*$:y*(1.055*Math.pow($,.4166666666666667)-.055)},a=m=>Math.max(0,Math.min(255,Math.round(m*255))),[c,l,i]=s(t,e,n),[u,h,p]=o(c,l,i),f=r(u),d=r(h),b=r(p);return{r:a(f),g:a(d),b:a(b)}}function V(t,e,n){const s=(c,l,i)=>{const b=(c+16)/116,m=l/500+b,y=b-i/200,$=m**3>.008856?m**3:(116*m-16)/903.3,w=c>903.3*.008856?((c+16)/116)**3:c/903.3,v=y**3>.008856?y**3:(116*y-16)/903.3;return[$*.95047,w*1,v*1.08883]},o=(c,l,i)=>{const u=[[2.493496911941425,-.9313836179191239,-.40271078445071684],[-.8294889695615747,1.7626640603183463,.023624685841943577],[.03584583024378447,-.07617238926804182,.9568845240076872]],h=u[0][0]*c+u[0][1]*l+u[0][2]*i,p=u[1][0]*c+u[1][1]*l+u[1][2]*i,f=u[2][0]*c+u[2][1]*l+u[2][2]*i;return[h,p,f]},r=c=>{const l=c<0?-1:1,i=Math.abs(c);return i<=.0031308?l*12.92*i:l*(1.055*Math.pow(i,.4166666666666667)-.055)},a=c=>Math.max(0,Math.min(255,Math.round(c*255)));try{const[c,l,i]=s(t,e,n),[u,h,p]=o(c,l,i),f=r(u),d=r(h),b=r(p);return{r:Math.max(0,Math.min(1,f)),g:Math.max(0,Math.min(1,d)),b:Math.max(0,Math.min(1,b))}}catch(c){console.warn("P3\u8F6C\u6362\u5931\u8D25:",c);const l=A(t,e,n);return{r:l.r/255,g:l.g/255,b:l.b/255}}}function R(t,e,n,s,o=null){if(!s.enableP3||!Z()){const r=A(t,e,n);return o!==null?`rgba(${r.r}, ${r.g}, ${r.b}, ${o})`:`rgb(${r.r}, ${r.g}, ${r.b})`}else{const r=V(t,e,n);return o!==null?`color(display-p3 ${r.r.toFixed(4)} ${r.g.toFixed(4)} ${r.b.toFixed(4)} / ${o})`:`color(display-p3 ${r.r.toFixed(4)} ${r.g.toFixed(4)} ${r.b.toFixed(4)})`}}function x(t,e){let n=t;return e.enableMath&&(n=de(n,e)),(e.convertLabToRGB||e.convertLchToRGB)&&(n=me(n,e)),n}function $e(t,e){const n=t.split(`
|
|
12
|
+
`),s={},o=new Map;let r="",a=null,c=!1,l=0;for(let i of n){const u=i.trim(),h=u.match(/^\$([a-zA-Z0-9_-]+)\s*:\s*(.+?);?$/);if(h){const[,p,f]=h,d=x(K(f.trim(),{...s,...a?o.get(a)||{}:{}}),e);a?(o.has(a)||o.set(a,{}),o.get(a)[p]=d):s[p]=d;continue}if(u.endsWith("{")){a=u.slice(0,-1).trim(),c=!0,r+=i+`
|
|
13
|
+
`;continue}if(u==="}"){if(c&&a&&o.has(a)){const p=o.get(a),f=" ".repeat(l);for(const[d,b]of Object.entries(p))r+=`${f} --${d}: ${b};
|
|
14
|
+
`}c=!1,a=null}r+=i+`
|
|
15
|
+
`,i.includes("{")&&(l+=e.indentSize),i.includes("}")&&(l=Math.max(0,l-e.indentSize))}return{globalVariables:s,selectorVariables:o,cssWithoutVars:r.trim()}}function we(t,e,n,s){const o=t.split(`
|
|
16
|
+
`),r=[],a=[];let c=0;for(let l=0;l<o.length;l++){const i=o[l],u=i.trim();if(!u)continue;const h=i.match(/^(\s*)/)[0].length;if(u==="}"){if(r.length>0){const p=r.pop();if(r.length>0){const f=r[r.length-1];f.children||(f.children=[]),f.children.push(p)}else a.push(p)}continue}if(u.endsWith("{")){const f={selector:u.slice(0,-1).trim(),properties:[],children:[]};r.push(f);continue}if(!u.includes("{")&&!u.includes("}")&&u.includes(":")){if(r.length>0){const p=r[r.length-1];X(u,n,s).forEach(d=>{const b=Object.keys(d)[0],m=x(d[b],e);p.properties.push(m===""?b:`${b}: ${m}`)})}continue}}for(;r.length>0;){const l=r.pop();if(r.length===0)a.push(l);else{const i=r[r.length-1];i.children||(i.children=[]),i.children.push(l)}}return Q(a,e,"",n,s)}function Q(t,e,n="",s,o){let r="";const a=n.startsWith("@");for(const c of t){const l=c.selector.startsWith("@");let i=(a?" ".repeat(e.indentSize):"")+c.selector;if(l&&(i=c.selector+` {
|
|
17
|
+
`),n&&(i.includes("&")?i=i.replace(/&/g,n):i.trim().startsWith(":")?i=n+i:i=n+(a?"":" ")+i),c.properties.length>0){r+=(l?"":i)+` {
|
|
18
|
+
`;for(const u of c.properties)X(u,s,o).forEach(p=>{const f=Object.keys(p)[0],d=x(p[f],e);r+=(a?" ".repeat(e.indentSize):"")+" ".repeat(e.indentSize)+(d===""?f:`${f}: ${d};
|
|
19
|
+
`)});r+=a?" ".repeat(e.indentSize)+`}
|
|
20
20
|
`:`}
|
|
21
21
|
|
|
22
|
-
`}
|
|
22
|
+
`}c.children&&c.children.length>0&&(r+=Q(c.children,e,i,s,o)),a&&(r+=`}
|
|
23
23
|
|
|
24
24
|
`)}return r.trim()+`
|
|
25
25
|
|
|
26
|
-
`}function
|
|
27
|
-
`);return`${
|
|
26
|
+
`}function K(t,e){return t.replace(/\$([a-zA-Z0-9_-]+)/g,(n,s)=>e[s]?`var(--${s})`:n)}function ve(t,e,n,s){let o=t;return o=o.replace(/(?:\$\$|\$)([a-zA-Z0-9_-]+)/g,(r,a)=>r.startsWith("$$")?`attr(${a})`:`var(--${a})`),o=x(o,s),o}function Me(t,e){if(Object.keys(t).length===0)return"";const n=Object.entries(t).map(([s,o])=>{const r=x(K(o,t),e);return" ".repeat(e.indentSize)+`--${s}: ${r};`}).join(`
|
|
27
|
+
`);return`${e.rootSelector} {
|
|
28
28
|
${n}
|
|
29
29
|
}
|
|
30
30
|
|
|
31
|
-
`}function
|
|
32
|
-
`);let
|
|
33
|
-
`}o=null}s
|
|
34
|
-
`}return s.trim()}async function Q(e,t){const n=/@import\s+([^;]+?)\s*;/g;return(async r=>{const o=[],a=r.replace(n,(c,l)=>{const i=Me(l,t).then(u=>Q(u,t)).catch(u=>(console.warn(`\u65E0\u6CD5\u5BFC\u5165CSS\u6587\u4EF6: ${l}`,u),""));return o.push(i),`__IMPORT_PLACEHOLDER_${o.length-1}__`});if(o.length>0){const c=await Promise.all(o);let l=a;for(let i=0;i<c.length;i++)l=l.replace(`__IMPORT_PLACEHOLDER_${i}__`,c[i]);return l}return a})(e)}async function Me(e,t){if(t.importCache&&V.has(e))return V.get(e);const n=t.importBaseUrl?new URL(e,t.importBaseUrl).href:e;let s;if(typeof process<"u"&&process.versions&&process.versions.node&&typeof require<"u")try{const o=require("fs"),a=require("path");let c=n;n.startsWith(".")&&(c=a.join(process.cwd(),n)),s=o.readFileSync(c,"utf-8")}catch(o){throw new Error(`Node.js\u6587\u4EF6\u8BFB\u53D6\u5931\u8D25: ${n} - ${o.message}`)}else try{const o=new AbortController,a=setTimeout(()=>o.abort(),t.importTimeout),c=await fetch(n,{signal:o.signal,headers:{Accept:"text/css"}});if(clearTimeout(a),!c.ok)throw new Error(`HTTP\u9519\u8BEF: ${c.status} ${c.statusText}`);s=await c.text()}catch(o){throw o.name==="AbortError"?new Error(`\u5BFC\u5165\u8D85\u65F6: ${n}`):new Error(`\u65E0\u6CD5\u83B7\u53D6CSS: ${n} - ${o.message}`)}return t.importCache&&V.set(e,s),s}function P(e,t={}){const n=(o,a)=>{const{config:c,css:l}=ee(o),i={...d,...t,...c};let u=l,p=new Map;if(i.enableAlias){const{aliases:S,css:F}=te(u);p=S,u=F}let f=u,h=new Map;if(i.enableMacros){const{macros:S,css:F}=N(f,i);h=S,f=F;for(const[J,I]of h)v.set(J,I)}let m=f;i.enableMacros&&h.size>0&&(m=ne(m,h,i));const{globalVariables:y,selectorVariables:g,cssWithoutVars:b}=be(m,i);let $=b.trim();if(i.enableNesting&&b.includes("{"))try{$=ye(b,i,p)}catch(S){console.warn("\u5D4C\u5957\u89E3\u6790\u5931\u8D25\uFF0C\u4F7F\u7528\u539F\u59CBCSS:",S)}const w=we(y,i);let M=$;return g.size>0&&(M=ve($,g,i)),M=$e(M,y,g,i),w+M},s=e&&/@import\s+([^;]+?)\s*;/g.test(e),r={...d,...t};return s?(async()=>{try{const o=await Q(e,r);return n(o,r)}catch(o){return console.error("@import\u5904\u7406\u5931\u8D25:",o),n(e,r)}})():n(e,r)}function K(e={}){const t={...d,...e},n=document.querySelectorAll(`style[${t.styleTagAttribute||"e"}]`);return n.forEach(s=>{let r=s.textContent;(async()=>{try{s.getAttribute("src")&&(r="@import "+s.getAttribute("src")+";");const a=await P(r,t),c=document.createElement("style");c.textContent=a,s.parentNode.insertBefore(c,s.nextSibling),t.preserveOriginal?s.style.display="none":s.remove()}catch(a){console.error("\u5904\u7406style\u6807\u7B7E\u5931\u8D25:",a)}})()}),n.length}function Ce(e={}){d={...d,...e}}function k(e,t={}){const n={...d,...t};if(e){if(/@import\s+([^;]+?)\s*;/g.test(e))return(async()=>{try{const r=await P(e,n),o=document.createElement("style");return o.textContent=r,document.head.appendChild(o),o}catch(r){return console.error("\u5E94\u7528CSS\u5931\u8D25:",r),null}})();{const r=P(e,n),o=document.createElement("style");return o.textContent=r,document.head.appendChild(o),o}}else document.readyState==="loading"?document.addEventListener("DOMContentLoaded",()=>{K(n)}):K(n)}const Se={convert:P,apply:k,config:Ce,supportsP3:O(),detectP3Support:O,imports:{clearCache:function(){V.clear()},setBaseUrl:function(e){d.importBaseUrl=e},setCacheEnabled:function(e){d.importCache=e},setTimeout:function(e){d.importTimeout=e}},aliases:{add:function(e,t){B.set(e,t)},remove:function(e){B.delete(e)},getAll:function(){return Array.from(B.entries())},clear:function(){B.clear()}},macros:{define:function(e,t,n=[]){if(typeof t=="function"){const r=t.toString().match(/{([\s\S]*)}/);r&&v.set(e,{params:n.map(o=>typeof o=="string"?{name:o}:o),body:r[1].trim()})}else v.set(e,{params:n.map(s=>typeof s=="string"?{name:s}:s),body:t})},call:function(e,...t){const n=v.get(e);if(!n)throw new Error(`\u672A\u5B9A\u4E49\u7684\u5B8F: ${e}`);const s=new Map;for(let r=0;r<n.params.length;r++){const o=n.params[r],a=r<t.length?t[r]:o.defaultValue;if(a===void 0&&o.defaultValue===null)throw new Error(`\u7F3A\u5C11\u5FC5\u9700\u53C2\u6570: ${o.name}`);s.set(o.name,a!==void 0?a:"")}return W(n.body,s,d)},getAll:function(){return Array.from(v.entries())},remove:function(e){v.delete(e)},clear:function(){v.clear()},parse:function(e){const{macros:t}=N(e,d);for(const[n,s]of t)v.set(n,s)}},math:{evaluate:function(e){return _(e,d)},parseUnit:z,round:q,test:function(e,t={}){const n={...d,...t};try{const s=_(e,n);return{success:!0,expression:e,result:s,parsed:z(s.replace(/^calc\(|\)$/g,""))}}catch(s){return{success:!1,expression:e,error:s.message}}}},colorUtils:{labToRGB:C,lchToLab:A,lchToRGB:function(e,t,n){const s=A(e,t,n);return C(s.L,s.a,s.b)},labToP3:E,lchToP3:function(e,t,n){const s=A(e,t,n);return E(s.L,s.a,s.b)},parseHexLab:function(e){const t=e.match(/lab#([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})/i);if(!t)return null;const n=t[1],s=t[2],r=t[3],o=parseInt(n,16)/255*100,a=(parseInt(s,16)-128)*1.5,c=(parseInt(r,16)-128)*1.5;return C(o,a,c)},parseHexLch:function(e){const t=e.match(/lch#([0-9a-f]{2})([0-9a-f]{2})(\d{1,3})/i);if(!t)return null;const n=t[1],s=t[2],r=t[3],o=parseInt(n,16)/255*100,a=parseInt(s,16)/255*150,c=parseInt(r)/100*360,l=A(o,a,c);return C(l.L,l.a,l.b)},generateColor:function(e,t,n,s=null,r=!0){return L(e,t,n,{enableP3:r},s)},parseColor:function(e){try{const t=e.match(/lab\(\s*([\d.]+)(%?)\s+([\d.-]+)\s+([\d.-]+)(?:\s*\/\s*([\d.%]+))?\s*\)/i);if(t){let s=parseFloat(t[1]);const r=parseFloat(t[3]),o=parseFloat(t[4]),a=t[5]?t[5].includes("%")?parseFloat(t[5])/100:parseFloat(t[5]):null,c=L(s,r,o,d,a);return{L:s,A:r,B:o,alpha:a,rgb:C(s,r,o),p3:E(s,r,o),colorString:c}}const n=e.match(/lch\(\s*([\d.]+)(%?)\s+([\d.]+)\s+([\d.]+)(deg)?(?:\s*\/\s*([\d.%]+))?\s*\)/i);if(n){let s=parseFloat(n[1]);const r=parseFloat(n[3]);let o=parseFloat(n[4]);const a=n[6]?n[6].includes("%")?parseFloat(n[6])/100:parseFloat(n[6]):null,c=A(s,r,o),l=L(c.L,c.a,c.b,d,a);return{L:s,C:r,H:o,alpha:a,lab:c,rgb:C(c.L,c.a,c.b),p3:E(c.L,c.a,c.b),colorString:l}}return null}catch(t){return console.warn("\u65E0\u6CD5\u89E3\u6790\u989C\u8272:",e,t),null}}}},T=function(...e){if(e.length>1||e[0]&&e[0].raw)return Ae(...e);const t=e[0];if(typeof t=="string"){const n=P(t,{...d,...e[1]});return n&&typeof n.then=="function",n}return typeof t=="object"&&t!==null?(d={...d,...t},T):e.length===0?k():T};function Ae(e,...t){let n=e[0];for(let r=0;r<t.length;r++){const o=t[r];let a="";typeof o=="function"?a=o():Array.isArray(o)?a=o.join(" "):a=String(o??""),n+=a+e[r+1]}const s=P(n,d);return s&&typeof s.then=="function",s}return Object.assign(T,Se),Object.setPrototypeOf(T,Function.prototype),typeof window<"u"&&(k(),Object.defineProperty(window.HTMLElement.prototype,"cssVar",{get(){const e=this;return new Proxy(()=>{},{get(t,n){const s=n.startsWith("--")?n:`--${n}`;return e.style.getPropertyValue(s)},set(t,n,s){const r=n.startsWith("--")?n:`--${n}`;return e.style.setProperty(r,s),!0},apply(t,n,s){const r=s[0],o=s[1],a=r.startsWith("--")?r:`--${r}`;if(o===void 0)return e.style.getPropertyValue(a);e.style.setProperty(a,o)}})}})),T})();if(typeof define=="function"&&define.amd)define([],()=>styimat);else if(typeof module=="object"&&module.exports)module.exports=styimat;else{const d=globalThis??(typeof self<"u"&&self)??(typeof window<"u"&&window)??global??{};d.styimat=styimat}
|
|
31
|
+
`}function Ce(t,e,n){let s="";const o=t.split(`
|
|
32
|
+
`);let r=null;for(let a of o){const c=a.trim();c.endsWith("{")&&(r=c.slice(0,-1).trim()),c==="}"&&r&&(r=null),s+=x(a,n)+`
|
|
33
|
+
`}return s.trim()}async function J(t,e){const n=/@import\s+([^;]+?)\s*;/g;return(async o=>{const r=[],a=o.replace(n,(c,l)=>{const i=Se(l,e).then(u=>J(u,e)).catch(u=>(console.warn(`\u65E0\u6CD5\u5BFC\u5165CSS\u6587\u4EF6: ${l}`,u),""));return r.push(i),`__IMPORT_PLACEHOLDER_${r.length-1}__`});if(r.length>0){const c=await Promise.all(r);let l=a;for(let i=0;i<c.length;i++)l=l.replace(`__IMPORT_PLACEHOLDER_${i}__`,c[i]);return l}return a})(t)}async function Se(t,e){if(e.importCache&&I.has(t))return I.get(t);const n=e.importBaseUrl?new URL(t,e.importBaseUrl).href:t;let s;if(typeof process<"u"&&process.versions&&process.versions.node&&typeof require<"u")try{const r=require("fs"),a=require("path");let c=n;n.startsWith(".")&&(c=a.join(process.cwd(),n)),s=r.readFileSync(c,"utf-8")}catch(r){throw new Error(`Node.js\u6587\u4EF6\u8BFB\u53D6\u5931\u8D25: ${n} - ${r.message}`)}else try{const r=new AbortController,a=setTimeout(()=>r.abort(),e.importTimeout),c=await fetch(n,{signal:r.signal,headers:{Accept:"text/css"}});if(clearTimeout(a),!c.ok)throw new Error(`HTTP\u9519\u8BEF: ${c.status} ${c.statusText}`);s=await c.text()}catch(r){throw r.name==="AbortError"?new Error(`\u5BFC\u5165\u8D85\u65F6: ${n}`):new Error(`\u65E0\u6CD5\u83B7\u53D6CSS: ${n} - ${r.message}`)}return e.importCache&&I.set(t,s),s}function z(t,e={}){const n=(r,a)=>{const{config:c,css:l}=ne(r),i={...g,...e,...c};let u=l,h=new Map;if(i.enableAlias){const{aliases:S,css:P}=re(u);h=S,u=P}let p=u,f=new Map;if(i.enableMacros){const{macros:S,css:P}=U(p,i);f=S,p=P;for(const[E,B]of f)M.set(E,B)}let d=p;i.enableMacros&&f.size>0&&(d=se(d,f,i));const{globalVariables:b,selectorVariables:m,cssWithoutVars:y}=$e(d,i);let $=y.trim();if(i.enableNesting&&y.includes("{"))try{$=we(y,i,h,f)}catch(S){console.warn("\u5D4C\u5957\u89E3\u6790\u5931\u8D25\uFF0C\u4F7F\u7528\u539F\u59CBCSS:",S)}const w=Me(b,i);let v=$;m.size>0&&(v=Ce($,m,i)),v=ve(v,b,m,i);for(const[S,P]of C)try{P.enable&&(v=P.convert(v,i))}catch(E){console.error("\u63D2\u4EF6\u5904\u7406\u5931\u8D25:",E)}return w+v},s=t&&/@import\s+([^;]+?)\s*;/g.test(t),o={...g,...e};return s?(async()=>{try{const r=await J(t,o);return n(r,o)}catch(r){return console.error("@import\u5904\u7406\u5931\u8D25:",r),n(t,o)}})():n(t,o)}function ee(t={}){const e={...g,...t},n=document.querySelectorAll(`style[${e.styleTagAttribute||"e"}]`);return n.forEach(s=>{let o=s.textContent;(async()=>{try{s.getAttribute("src")&&(o="@import "+s.getAttribute("src")+";");const a=await z(o,e),c=document.createElement("style");c.textContent=a,s.parentNode.insertBefore(c,s.nextSibling),e.preserveOriginal?s.style.display="none":s.remove()}catch(a){console.error("\u5904\u7406style\u6807\u7B7E\u5931\u8D25:",a)}})()}),n.length}function te(t={}){g={...g,...t}}function N(t,e={}){const n={...g,...e};if(t){if(/@import\s+([^;]+?)\s*;/g.test(t))return(async()=>{try{const o=await z(t,n),r=document.createElement("style");return r.textContent=o,document.head.appendChild(r),r}catch(o){return console.error("\u5E94\u7528CSS\u5931\u8D25:",o),null}})();{const o=z(t,n),r=document.createElement("style");return r.textContent=o,document.head.appendChild(r),r}}else document.readyState==="loading"?document.addEventListener("DOMContentLoaded",()=>{ee(n)}):ee(n)}const Ae={convert:z,apply:N,config:te,supportsP3:Z(),detectP3Support:Z,imports:{clearCache:function(){I.clear()},setBaseUrl:function(t){g.importBaseUrl=t},setCacheEnabled:function(t){g.importCache=t},setTimeout:function(t){g.importTimeout=t}},plugins:new Proxy({},{set(t,e,n){return(n.created??(()=>{}))(),C.set(e,n),!0},get(t,e){return C.get(e)},deleteProperty(t,e){return C.get(e)?.deleted(),C.delete(e),!0},has(t,e){return C.has(e)},ownKeys(){return Array.from(C.keys())},getOwnPropertyDescriptor(t,e){if(C.has(e))return{enumerable:!0,configurable:!0,writable:!0,value:C.get(e)}}}),aliases:{add:function(t,e){_.set(t,e)},remove:function(t){_.delete(t)},getAll:function(){return Array.from(_.entries())},clear:function(){_.clear()}},macros:{define:function(t,e,n=[]){if(typeof e=="function"){const o=e.toString().match(/{([\s\S]*)}/);o&&M.set(t,{params:n.map(r=>typeof r=="string"?{name:r}:r),body:o[1].trim()})}else M.set(t,{params:n.map(s=>typeof s=="string"?{name:s}:s),body:e})},call:function(t,...e){const n=M.get(t);if(!n)throw new Error(`\u672A\u5B9A\u4E49\u7684\u5B8F: ${t}`);const s=new Map;for(let o=0;o<n.params.length;o++){const r=n.params[o],a=o<e.length?e[o]:r.defaultValue;if(a===void 0&&r.defaultValue===null)throw new Error(`\u7F3A\u5C11\u5FC5\u9700\u53C2\u6570: ${r.name}`);s.set(r.name,a!==void 0?a:"")}return k(n.body,s,g)},getAll:function(){return Array.from(M.entries())},remove:function(t){M.delete(t)},clear:function(){M.clear()},parse:function(t){const{macros:e}=U(t,g);for(const[n,s]of e)M.set(n,s)}},math:{evaluate:function(t){return j(t,g)},parseUnit:T,round:Y,test:function(t,e={}){const n={...g,...e};try{const s=j(t,n);return{success:!0,expression:t,result:s,parsed:T(s.replace(/^calc\(|\)$/g,""))}}catch(s){return{success:!1,expression:t,error:s.message}}}},colorUtils:{labToRGB:A,lchToLab:L,lchToRGB:function(t,e,n){const s=L(t,e,n);return A(s.L,s.a,s.b)},labToP3:V,lchToP3:function(t,e,n){const s=L(t,e,n);return V(s.L,s.a,s.b)},parseHexLab:function(t){const e=t.match(/lab#([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})/i);if(!e)return null;const n=e[1],s=e[2],o=e[3],r=parseInt(n,16)/255*100,a=(parseInt(s,16)-128)*1.5,c=(parseInt(o,16)-128)*1.5;return A(r,a,c)},parseHexLch:function(t){const e=t.match(/lch#([0-9a-f]{2})([0-9a-f]{2})(\d{1,3})/i);if(!e)return null;const n=e[1],s=e[2],o=e[3],r=parseInt(n,16)/255*100,a=parseInt(s,16)/255*150,c=parseInt(o)/100*360,l=L(r,a,c);return A(l.L,l.a,l.b)},generateColor:function(t,e,n,s=null,o=!0){return R(t,e,n,{enableP3:o},s)},parseColor:function(t){try{const e=t.match(/lab\(\s*([\d.]+)(%?)\s+([\d.-]+)\s+([\d.-]+)(?:\s*\/\s*([\d.%]+))?\s*\)/i);if(e){let s=parseFloat(e[1]);const o=parseFloat(e[3]),r=parseFloat(e[4]),a=e[5]?e[5].includes("%")?parseFloat(e[5])/100:parseFloat(e[5]):null,c=R(s,o,r,g,a);return{L:s,A:o,B:r,alpha:a,rgb:A(s,o,r),p3:V(s,o,r),colorString:c}}const n=t.match(/lch\(\s*([\d.]+)(%?)\s+([\d.]+)\s+([\d.]+)(deg)?(?:\s*\/\s*([\d.%]+))?\s*\)/i);if(n){let s=parseFloat(n[1]);const o=parseFloat(n[3]);let r=parseFloat(n[4]);const a=n[6]?n[6].includes("%")?parseFloat(n[6])/100:parseFloat(n[6]):null,c=L(s,o,r),l=R(c.L,c.a,c.b,g,a);return{L:s,C:o,H:r,alpha:a,lab:c,rgb:A(c.L,c.a,c.b),p3:V(c.L,c.a,c.b),colorString:l}}return null}catch(e){return console.warn("\u65E0\u6CD5\u89E3\u6790\u989C\u8272:",t,e),null}}}},W=function(...t){if(t.length>1||t[0]&&t[0].raw)return Le(...t);const e=t[0];if(typeof e=="string"){const n=z(e,{...g,...t[1]});return n&&typeof n.then=="function",n}return typeof e=="object"&&e!==null?(g={...g,...e},W):t.length===0?N():W};function Le(t,...e){let n=t[0];for(let o=0;o<e.length;o++){const r=e[o];let a="";typeof r=="function"?a=r():Array.isArray(r)?a=r.join(" "):a=String(r??""),n+=a+t[o+1]}const s=z(n,g);return s&&typeof s.then=="function",s}return Object.assign(W,Ae),Object.setPrototypeOf(W,Function.prototype),typeof window<"u"&&(N(),Object.defineProperty(window.HTMLElement.prototype,"cssVar",{get(){const t=this;return new Proxy(()=>{},{get(e,n){const s=n.startsWith("--")?n:`--${n}`;return t.style.getPropertyValue(s)},set(e,n,s){const o=n.startsWith("--")?n:`--${n}`;return t.style.setProperty(o,s),!0},apply(e,n,s){const o=s[0],r=s[1],a=o.startsWith("--")?o:`--${o}`;if(r===void 0)return t.style.getPropertyValue(a);t.style.setProperty(a,r)}})}})),W})();if(typeof define=="function"&&define.amd)define([],g=>styimat);else if(typeof module=="object"&&module.exports)module.exports=styimat;else{const g=globalThis??(typeof self<"u"&&self)??(typeof window<"u"&&window)??global??{};g.styimat=styimat}
|
package/dist/styimat.min.mjs
CHANGED
|
@@ -1,34 +1,33 @@
|
|
|
1
1
|
/*!
|
|
2
2
|
* MIT License
|
|
3
3
|
* Copyright (c) 2025 王小玗
|
|
4
|
-
*/const
|
|
5
|
-
`),s=[];for(let
|
|
6
|
-
`)}}function
|
|
7
|
-
`),s=[];for(let
|
|
8
|
-
`)}}function
|
|
9
|
-
`),
|
|
10
|
-
`)}),
|
|
11
|
-
`)}}function
|
|
12
|
-
`),s={},
|
|
13
|
-
`;continue}if(u==="}"){if(c&&a&&
|
|
14
|
-
`}c=!1,a=null}
|
|
15
|
-
`,i.includes("{")&&(l+=
|
|
16
|
-
`),r=[],
|
|
17
|
-
`),n&&(
|
|
18
|
-
`;for(const
|
|
19
|
-
`});r+=
|
|
4
|
+
*/const I=(function(){let g={rootSelector:":root",variablePrefix:"--",preserveOriginal:!1,indentSize:4,enableNesting:!0,autoProcessStyleTags:!0,styleTagAttribute:"e",convertLabToRGB:!0,convertLchToRGB:!0,enableP3:!0,enableMath:!0,mathPrecision:6,importBaseUrl:"",importCache:!0,importTimeout:5e3,enableAlias:!0,enableMacros:!0},F=null;const _=new Map,k=new Map,M=new Map,C=new Map;function re(t){const e={...g},n=t.split(`
|
|
5
|
+
`),s=[];for(let o of n){const r=o.trim();if(r.startsWith("#")){const a=r.substring(1).trim(),c=a.indexOf(" ");if(c!==-1){const l=a.substring(0,c).trim(),i=a.substring(c+1).trim(),u=ce(l);u in e?i==="true"||i==="false"?e[u]=i==="true":!isNaN(i)&&i.trim()!==""?e[u]=Number(i):e[u]=i:console.warn(`\u672A\u77E5\u7684\u914D\u7F6E\u9879: ${l}`)}else console.warn(`\u65E0\u6548\u7684\u914D\u7F6E\u884C: ${r}`)}else s.push(o)}return{config:e,css:s.join(`
|
|
6
|
+
`)}}function se(t){const e=new Map,n=t.split(`
|
|
7
|
+
`),s=[];for(let o of n){const r=o.trim();if(r.startsWith("@alias")){const a=r.match(/^@alias\s+([a-zA-Z0-9_-]+)\s+(.+?)\s*;$/);if(a){const c=a[1],l=a[2];e.set(c,l);continue}}s.push(o)}return{aliases:e,css:s.join(`
|
|
8
|
+
`)}}function X(t,e){if(!e.enableMacros)return{macros:new Map,css:t};const n=new Map,s=t.split(`
|
|
9
|
+
`),o=[];let r=!1,a="",c=[],l=[],i=0;for(let u of s){const h=u.trim();if(!r&&h.startsWith("@macro")){const p=h.match(/^@macro\s+([a-zA-Z0-9_-]+)\s*\(([^)]*)\)\s*\{$/);if(p){r=!0,a=p[1],c=p[2].split(",").map(f=>f.trim()).filter(f=>f).map(f=>{const d=f.split(":").map(b=>b.trim());return{name:d[0].slice(1),defaultValue:d[1]||null}}),l=[],i=1;continue}}if(r){for(const p of u)p==="{"&&i++,p==="}"&&i--;i===0?(n.set(a,{params:c,body:l.join(`
|
|
10
|
+
`)}),r=!1,a="",c=[],l=[]):l.push(u);continue}o.push(u)}return{macros:n,css:o.join(`
|
|
11
|
+
`)}}function oe(t,e,n){if(!n.enableMacros||e.size===0)return t;const s=Array.from(e.keys()).map(a=>a.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")).join("|"),o=new RegExp(`@(${s})\\s*\\(([^)]*)\\)\\s*;?`,"g");return(a=>{let c=a,l=!1;do l=!1,c=c.replace(o,(i,u,h)=>{l=!0;const p=e.get(u);if(!p)return console.warn(`\u672A\u5B9A\u4E49\u7684\u5B8F: ${u}`),i;const f=Z(h,p.params);return O(p.body,f,n)});while(l);return c})(t)}function Z(t,e){const n=new Map,s=ae(t);for(let o=0;o<e.length;o++){const r=e[o];let a;o<s.length?a=s[o]:r.defaultValue!==null?a=r.defaultValue:(console.warn(`\u5B8F\u8C03\u7528\u7F3A\u5C11\u5FC5\u9700\u53C2\u6570: ${r.name}`),a=""),n.set(r.name,a)}return s.length>e.length&&console.warn("\u5B8F\u8C03\u7528\u4F20\u9012\u4E86\u8FC7\u591A\u53C2\u6570\uFF0C\u591A\u4F59\u7684\u53C2\u6570\u5C06\u88AB\u5FFD\u7565"),n}function ae(t){const e=[];let n="",s=!1,o="",r=0,a=0;for(let c=0;c<t.length;c++){const l=t[c];(l==='"'||l==="'")&&!s?(s=!0,o=l):l===o&&s&&(s=!1,o=""),s||(l==="("&&r++,l===")"&&r--,l==="["&&a++,l==="]"&&a--),l===","&&!s&&r===0&&a===0?(e.push(n.trim()),n=""):n+=l}return n.trim()&&e.push(n.trim()),e}function O(t,e,n){let s=t;for(const[o,r]of e){const a=new RegExp(`\\$${o}`,"g");s=s.replace(a,r)}if(n.enableMacros){const o=Array.from(M.keys()).map(r=>r.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")).join("|");if(o){const r=new RegExp(`@(${o})\\s*\\(([^)]*)\\)\\s*;?`,"g");let a;do a=!1,s=s.replace(r,(c,l,i)=>{a=!0;const u=M.get(l);if(!u)return c;const h=Z(i,u.params);return O(u.body,h,n)});while(a)}}return s=R(s,n),s}function ce(t){return t.replace(/-([a-z])/g,function(e,n){return n.toUpperCase()})}function j(){if(F!==null)return F;if(typeof window>"u"||!window.CSS)return F=!1,!1;try{F=CSS.supports("color","color(display-p3 1 0 0)")}catch(t){console.warn("P3\u652F\u6301\u68C0\u6D4B\u5931\u8D25:",t),F=!1}return F}function q(t,e,n){let s=t.trim();if(s.endsWith(";")&&(s=s.slice(0,-1)),!s)return[];const o=[];let r="",a=0,c=!1,l="";for(let u=0;u<s.length;u++){const h=s[u];(h==='"'||h==="'")&&!c?(c=!0,l=h):h===l&&c&&(c=!1,l=""),c||(h==="("?a++:h===")"&&a--),h===";"&&!c&&a===0?r.trim()&&(o.push(r.trim()),r=""):r+=h}r.trim()&&o.push(r.trim());const i=[];for(const u of o){if(!u.trim())continue;const h=le(u);if(h===-1){console.warn(`\u65E0\u6548\u7684CSS\u58F0\u660E: "${u}"`);continue}let p=u.substring(0,h).trim(),f=u.substring(h+1).trim();if(f.endsWith(";")&&(f=f.slice(0,-1).trim()),e.get(p)&&(p=e.get(p)),p.startsWith("@")&&n.get(p.slice(1))){const d=n.get(p.slice(1)),b=Z(f.split(" ").join(","),d.params);p=O(d.body,b,ne),f=""}i.push({[p]:f})}return i}function le(t){let e=!1,n="";for(let s=0;s<t.length;s++){const o=t[s];if((o==='"'||o==="'")&&!e?(e=!0,n=o):o===n&&e&&(e=!1,n=""),o===":"&&!e)return s}return-1}function N(t,e){if(!e.enableMath)return`math(${t})`;try{let n=t.replace(/\s+/g,"");const s=D(n,e);return ie(n)?ue(n,s):Q(s,e.mathPrecision)}catch(n){return console.warn("math()\u8868\u8FBE\u5F0F\u89E3\u6790\u5931\u8D25:",t,n),`math(${t})`}}function D(t,e){for(;t.includes("(")&&t.includes(")");){const n=t.lastIndexOf("("),s=t.indexOf(")",n);if(s===-1)break;const o=t.substring(n+1,s),r=D(o,e);t=t.substring(0,n)+r+t.substring(s+1)}return Y(t,e)}function Y(t,e){const n=[{regex:/([\d.]+(?:[a-zA-Z%]+)?)\*([\d.]+(?:[a-zA-Z%]+)?)/,handler:fe},{regex:/([\d.]+(?:[a-zA-Z%]+)?)\/([\d.]+(?:[a-zA-Z%]+)?)/,handler:pe},{regex:/([\d.]+(?:[a-zA-Z%]+)?)\+([\d.]+(?:[a-zA-Z%]+)?)/,handler:he},{regex:/([\d.]+(?:[a-zA-Z%]+)?)-([\d.]+(?:[a-zA-Z%]+)?)/,handler:de}];let s=t;for(const r of n){let a;for(;(a=t.match(r.regex))!==null;){const c=T(a[1]),l=T(a[2]),i=r.handler(c,l);t=t.substring(0,a.index)+i.value+t.substring(a.index+a[0].length)}}return t!==s?Y(t,e):T(t).value}function T(t){const e=t.match(/^([\d.]+)([a-zA-Z%]*)$/);if(!e)throw new Error(`\u65E0\u6CD5\u89E3\u6790\u503C: ${t}`);const n=parseFloat(e[1]),s=e[2]||"";return{value:n,unit:s}}function ie(t){return/[a-zA-Z%]/.test(t)}function ue(t,e){const n=t.match(/([a-zA-Z%]+)(?!.*[a-zA-Z%])/);return n?e+n[1]:t.includes("%")?e+"%":e+"px"}function fe(t,e){return t.unit===e.unit||!t.unit&&!e.unit?{value:t.value*e.value,unit:t.unit||e.unit}:{value:`${t.value}${t.unit}*${e.value}${e.unit}`,unit:""}}function pe(t,e){if(e.value===0)throw new Error("\u9664\u4EE5\u96F6");return t.unit&&!e.unit?{value:t.value/e.value,unit:t.unit}:t.unit===e.unit?{value:t.value/e.value,unit:""}:{value:`${t.value}${t.unit}/${e.value}${e.unit}`,unit:""}}function he(t,e){return t.unit===e.unit?{value:t.value+e.value,unit:t.unit}:{value:`${t.value}${t.unit}+${e.value}${e.unit}`,unit:""}}function de(t,e){return t.unit===e.unit?{value:t.value-e.value,unit:t.unit}:{value:`${t.value}${t.unit}-${e.value}${e.unit}`,unit:""}}function Q(t,e=6){const n=Math.pow(10,e),o=(Math.round(t*n)/n).toString();return o.includes(".")?o.replace(/(\.\d*?)0+$/,"$1").replace(/\.$/,""):o}function me(t,e){if(!e.enableMath)return t;let n=t;const s=/math\(([^)]+)\)/gi,o=a=>a.replace(s,(c,l)=>N(l,e));let r;do r=n,n=o(n);while(n!==r&&n.includes("math("));return n}function ge(t,e){if(!e.convertLabToRGB&&!e.convertLchToRGB)return t;let n=t;n=be(n,e);const s=/(lab|lch)\([^)]+\)/gi,o=new Map,r=c=>c.replace(s,l=>{if(o.has(l))return o.get(l);let i=l;return l.toLowerCase().startsWith("lab(")?e.convertLabToRGB&&(i=ye(l,e)):l.toLowerCase().startsWith("lch(")&&e.convertLchToRGB&&(i=$e(l,e)),o.set(l,i),i});let a;do a=n,n=r(n);while(n!==a);return n}function be(t,e){let n=t;const s=/lab#([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})/gi,o=/lch#([0-9a-f]{2})([0-9a-f]{2})(\d{1,3})/gi,r=new Map;return n=n.replace(s,(a,c,l,i)=>{if(r.has(a))return r.get(a);try{const u=parseInt(c,16)/255*100,h=(parseInt(l,16)-128)*1.5,p=(parseInt(i,16)-128)*1.5,f=x(u,h,p,e);return r.set(a,f),f}catch(u){return console.warn(`\u65E0\u6CD5\u89E3\u6790lab#\u5341\u516D\u8FDB\u5236\u989C\u8272: ${a}`,u),a}}),n=n.replace(o,(a,c,l,i)=>{if(r.has(a))return r.get(a);try{const u=parseInt(c,16)/255*100,h=parseInt(l,16)/255*150,p=parseInt(i)/100*360,f=L(u,h,p),d=x(f.L,f.a,f.b,e);return r.set(a,d),d}catch(u){return console.warn(`\u65E0\u6CD5\u89E3\u6790lch#\u5341\u516D\u8FDB\u5236\u989C\u8272: ${a}`,u),a}}),n}function ye(t,e){const n=/lab\(\s*([\d.]+)(%?)\s+([\d.-]+)\s+([\d.-]+)(?:\s*\/\s*([\d.%]+))?\s*\)/i,s=t.match(n);if(!s)return t;try{let o=parseFloat(s[1]);s[2]==="%"?o=o:(o<0&&(o=0),o>100&&(o=100));const r=parseFloat(s[3]),a=parseFloat(s[4]),c=s[5]!==void 0?s[5].includes("%")?parseFloat(s[5])/100:parseFloat(s[5]):null;return x(o,r,a,e,c)}catch(o){return console.warn(`\u65E0\u6CD5\u8F6C\u6362LAB\u989C\u8272: ${t}`,o),t}}function $e(t,e){const n=/lch\(\s*([\d.]+)(%?)\s+([\d.]+)\s+([\d.]+)(deg)?(?:\s*\/\s*([\d.%]+))?\s*\)/i,s=t.match(n);if(!s)return t;try{let o=parseFloat(s[1]);s[2]==="%"?o=o:(o<0&&(o=0),o>100&&(o=100));const r=parseFloat(s[3]);let a=parseFloat(s[4]);r<0&&console.warn(`LCH\u4E2D\u7684C\u503C\u4E0D\u80FD\u4E3A\u8D1F: ${r}`),a=(a%360+360)%360;const c=L(o,r,a),l=s[6]!==void 0?s[6].includes("%")?parseFloat(s[6])/100:parseFloat(s[6]):null;return x(c.L,c.a,c.b,e,l)}catch(o){return console.warn(`\u65E0\u6CD5\u8F6C\u6362LCH\u989C\u8272: ${t}`,o),t}}function L(t,e,n){const s=n*Math.PI/180,o=e*Math.cos(s),r=e*Math.sin(s);return{L:t,a:o,b:r}}function A(t,e,n){const s=(m,y,$)=>{const E=(m+16)/116,B=y/500+E,G=E-$/200,Re=B**3>.008856?B**3:(116*B-16)/903.3,Pe=m>903.3*.008856?((m+16)/116)**3:m/903.3,Fe=G**3>.008856?G**3:(116*G-16)/903.3;return[Re*.95047,Pe*1,Fe*1.08883]},o=(m,y,$)=>{const w=[[3.2404542,-1.5371385,-.4985314],[-.969266,1.8760108,.041556],[.0556434,-.2040259,1.0572252]],v=w[0][0]*m+w[0][1]*y+w[0][2]*$,U=w[1][0]*m+w[1][1]*y+w[1][2]*$,S=w[2][0]*m+w[2][1]*y+w[2][2]*$;return[v,U,S]},r=m=>{const y=m<0?-1:1,$=Math.abs(m);return $<=.0031308?y*12.92*$:y*(1.055*Math.pow($,.4166666666666667)-.055)},a=m=>Math.max(0,Math.min(255,Math.round(m*255))),[c,l,i]=s(t,e,n),[u,h,p]=o(c,l,i),f=r(u),d=r(h),b=r(p);return{r:a(f),g:a(d),b:a(b)}}function V(t,e,n){const s=(c,l,i)=>{const b=(c+16)/116,m=l/500+b,y=b-i/200,$=m**3>.008856?m**3:(116*m-16)/903.3,w=c>903.3*.008856?((c+16)/116)**3:c/903.3,v=y**3>.008856?y**3:(116*y-16)/903.3;return[$*.95047,w*1,v*1.08883]},o=(c,l,i)=>{const u=[[2.493496911941425,-.9313836179191239,-.40271078445071684],[-.8294889695615747,1.7626640603183463,.023624685841943577],[.03584583024378447,-.07617238926804182,.9568845240076872]],h=u[0][0]*c+u[0][1]*l+u[0][2]*i,p=u[1][0]*c+u[1][1]*l+u[1][2]*i,f=u[2][0]*c+u[2][1]*l+u[2][2]*i;return[h,p,f]},r=c=>{const l=c<0?-1:1,i=Math.abs(c);return i<=.0031308?l*12.92*i:l*(1.055*Math.pow(i,.4166666666666667)-.055)},a=c=>Math.max(0,Math.min(255,Math.round(c*255)));try{const[c,l,i]=s(t,e,n),[u,h,p]=o(c,l,i),f=r(u),d=r(h),b=r(p);return{r:Math.max(0,Math.min(1,f)),g:Math.max(0,Math.min(1,d)),b:Math.max(0,Math.min(1,b))}}catch(c){console.warn("P3\u8F6C\u6362\u5931\u8D25:",c);const l=A(t,e,n);return{r:l.r/255,g:l.g/255,b:l.b/255}}}function x(t,e,n,s,o=null){if(!s.enableP3||!j()){const r=A(t,e,n);return o!==null?`rgba(${r.r}, ${r.g}, ${r.b}, ${o})`:`rgb(${r.r}, ${r.g}, ${r.b})`}else{const r=V(t,e,n);return o!==null?`color(display-p3 ${r.r.toFixed(4)} ${r.g.toFixed(4)} ${r.b.toFixed(4)} / ${o})`:`color(display-p3 ${r.r.toFixed(4)} ${r.g.toFixed(4)} ${r.b.toFixed(4)})`}}function R(t,e){let n=t;return e.enableMath&&(n=me(n,e)),(e.convertLabToRGB||e.convertLchToRGB)&&(n=ge(n,e)),n}function we(t,e){const n=t.split(`
|
|
12
|
+
`),s={},o=new Map;let r="",a=null,c=!1,l=0;for(let i of n){const u=i.trim(),h=u.match(/^\$([a-zA-Z0-9_-]+)\s*:\s*(.+?);?$/);if(h){const[,p,f]=h,d=R(J(f.trim(),{...s,...a?o.get(a)||{}:{}}),e);a?(o.has(a)||o.set(a,{}),o.get(a)[p]=d):s[p]=d;continue}if(u.endsWith("{")){a=u.slice(0,-1).trim(),c=!0,r+=i+`
|
|
13
|
+
`;continue}if(u==="}"){if(c&&a&&o.has(a)){const p=o.get(a),f=" ".repeat(l);for(const[d,b]of Object.entries(p))r+=`${f} --${d}: ${b};
|
|
14
|
+
`}c=!1,a=null}r+=i+`
|
|
15
|
+
`,i.includes("{")&&(l+=e.indentSize),i.includes("}")&&(l=Math.max(0,l-e.indentSize))}return{globalVariables:s,selectorVariables:o,cssWithoutVars:r.trim()}}function ve(t,e,n,s){const o=t.split(`
|
|
16
|
+
`),r=[],a=[];let c=0;for(let l=0;l<o.length;l++){const i=o[l],u=i.trim();if(!u)continue;const h=i.match(/^(\s*)/)[0].length;if(u==="}"){if(r.length>0){const p=r.pop();if(r.length>0){const f=r[r.length-1];f.children||(f.children=[]),f.children.push(p)}else a.push(p)}continue}if(u.endsWith("{")){const f={selector:u.slice(0,-1).trim(),properties:[],children:[]};r.push(f);continue}if(!u.includes("{")&&!u.includes("}")&&u.includes(":")){if(r.length>0){const p=r[r.length-1];q(u,n,s).forEach(d=>{const b=Object.keys(d)[0],m=R(d[b],e);p.properties.push(m===""?b:`${b}: ${m}`)})}continue}}for(;r.length>0;){const l=r.pop();if(r.length===0)a.push(l);else{const i=r[r.length-1];i.children||(i.children=[]),i.children.push(l)}}return K(a,e,"",n,s)}function K(t,e,n="",s,o){let r="";const a=n.startsWith("@");for(const c of t){const l=c.selector.startsWith("@");let i=(a?" ".repeat(e.indentSize):"")+c.selector;if(l&&(i=c.selector+` {
|
|
17
|
+
`),n&&(i.includes("&")?i=i.replace(/&/g,n):i.trim().startsWith(":")?i=n+i:i=n+(a?"":" ")+i),c.properties.length>0){r+=(l?"":i)+` {
|
|
18
|
+
`;for(const u of c.properties)q(u,s,o).forEach(p=>{const f=Object.keys(p)[0],d=R(p[f],e);r+=(a?" ".repeat(e.indentSize):"")+" ".repeat(e.indentSize)+(d===""?f:`${f}: ${d};
|
|
19
|
+
`)});r+=a?" ".repeat(e.indentSize)+`}
|
|
20
20
|
`:`}
|
|
21
21
|
|
|
22
|
-
`}
|
|
22
|
+
`}c.children&&c.children.length>0&&(r+=K(c.children,e,i,s,o)),a&&(r+=`}
|
|
23
23
|
|
|
24
24
|
`)}return r.trim()+`
|
|
25
25
|
|
|
26
|
-
`}function
|
|
27
|
-
`);return`${
|
|
26
|
+
`}function J(t,e){return t.replace(/\$([a-zA-Z0-9_-]+)/g,(n,s)=>e[s]?`var(--${s})`:n)}function Me(t,e,n,s){let o=t;return o=o.replace(/(?:\$\$|\$)([a-zA-Z0-9_-]+)/g,(r,a)=>r.startsWith("$$")?`attr(${a})`:`var(--${a})`),o=R(o,s),o}function Ce(t,e){if(Object.keys(t).length===0)return"";const n=Object.entries(t).map(([s,o])=>{const r=R(J(o,t),e);return" ".repeat(e.indentSize)+`--${s}: ${r};`}).join(`
|
|
27
|
+
`);return`${e.rootSelector} {
|
|
28
28
|
${n}
|
|
29
29
|
}
|
|
30
30
|
|
|
31
|
-
`}function
|
|
32
|
-
`);let
|
|
33
|
-
`}o=null}s
|
|
34
|
-
`}return s.trim()}async function K(e,t){const n=/@import\s+([^;]+?)\s*;/g;return(async r=>{const o=[],a=r.replace(n,(c,l)=>{const i=Ce(l,t).then(u=>K(u,t)).catch(u=>(console.warn(`\u65E0\u6CD5\u5BFC\u5165CSS\u6587\u4EF6: ${l}`,u),""));return o.push(i),`__IMPORT_PLACEHOLDER_${o.length-1}__`});if(o.length>0){const c=await Promise.all(o);let l=a;for(let i=0;i<c.length;i++)l=l.replace(`__IMPORT_PLACEHOLDER_${i}__`,c[i]);return l}return a})(e)}async function Ce(e,t){if(t.importCache&&B.has(e))return B.get(e);const n=t.importBaseUrl?new URL(e,t.importBaseUrl).href:e;let s;if(typeof process<"u"&&process.versions&&process.versions.node&&typeof require<"u")try{const o=require("fs"),a=require("path");let c=n;n.startsWith(".")&&(c=a.join(process.cwd(),n)),s=o.readFileSync(c,"utf-8")}catch(o){throw new Error(`Node.js\u6587\u4EF6\u8BFB\u53D6\u5931\u8D25: ${n} - ${o.message}`)}else try{const o=new AbortController,a=setTimeout(()=>o.abort(),t.importTimeout),c=await fetch(n,{signal:o.signal,headers:{Accept:"text/css"}});if(clearTimeout(a),!c.ok)throw new Error(`HTTP\u9519\u8BEF: ${c.status} ${c.statusText}`);s=await c.text()}catch(o){throw o.name==="AbortError"?new Error(`\u5BFC\u5165\u8D85\u65F6: ${n}`):new Error(`\u65E0\u6CD5\u83B7\u53D6CSS: ${n} - ${o.message}`)}return t.importCache&&B.set(e,s),s}function P(e,t={}){const n=(o,a)=>{const{config:c,css:l}=te(o),i={...d,...t,...c};let u=l,p=new Map;if(i.enableAlias){const{aliases:S,css:F}=ne(u);p=S,u=F}let f=u,h=new Map;if(i.enableMacros){const{macros:S,css:F}=H(f,i);h=S,f=F;for(const[ee,W]of h)v.set(ee,W)}let m=f;i.enableMacros&&h.size>0&&(m=re(m,h,i));const{globalVariables:y,selectorVariables:g,cssWithoutVars:b}=ye(m,i);let $=b.trim();if(i.enableNesting&&b.includes("{"))try{$=$e(b,i,p)}catch(S){console.warn("\u5D4C\u5957\u89E3\u6790\u5931\u8D25\uFF0C\u4F7F\u7528\u539F\u59CBCSS:",S)}const w=ve(y,i);let M=$;return g.size>0&&(M=Me($,g,i)),M=we(M,y,g,i),w+M},s=e&&/@import\s+([^;]+?)\s*;/g.test(e),r={...d,...t};return s?(async()=>{try{const o=await K(e,r);return n(o,r)}catch(o){return console.error("@import\u5904\u7406\u5931\u8D25:",o),n(e,r)}})():n(e,r)}function J(e={}){const t={...d,...e},n=document.querySelectorAll(`style[${t.styleTagAttribute||"e"}]`);return n.forEach(s=>{let r=s.textContent;(async()=>{try{s.getAttribute("src")&&(r="@import "+s.getAttribute("src")+";");const a=await P(r,t),c=document.createElement("style");c.textContent=a,s.parentNode.insertBefore(c,s.nextSibling),t.preserveOriginal?s.style.display="none":s.remove()}catch(a){console.error("\u5904\u7406style\u6807\u7B7E\u5931\u8D25:",a)}})()}),n.length}function Se(e={}){d={...d,...e}}function Z(e,t={}){const n={...d,...t};if(e){if(/@import\s+([^;]+?)\s*;/g.test(e))return(async()=>{try{const r=await P(e,n),o=document.createElement("style");return o.textContent=r,document.head.appendChild(o),o}catch(r){return console.error("\u5E94\u7528CSS\u5931\u8D25:",r),null}})();{const r=P(e,n),o=document.createElement("style");return o.textContent=r,document.head.appendChild(o),o}}else document.readyState==="loading"?document.addEventListener("DOMContentLoaded",()=>{J(n)}):J(n)}const Ae={convert:P,apply:Z,config:Se,supportsP3:_(),detectP3Support:_,imports:{clearCache:function(){B.clear()},setBaseUrl:function(e){d.importBaseUrl=e},setCacheEnabled:function(e){d.importCache=e},setTimeout:function(e){d.importTimeout=e}},aliases:{add:function(e,t){I.set(e,t)},remove:function(e){I.delete(e)},getAll:function(){return Array.from(I.entries())},clear:function(){I.clear()}},macros:{define:function(e,t,n=[]){if(typeof t=="function"){const r=t.toString().match(/{([\s\S]*)}/);r&&v.set(e,{params:n.map(o=>typeof o=="string"?{name:o}:o),body:r[1].trim()})}else v.set(e,{params:n.map(s=>typeof s=="string"?{name:s}:s),body:t})},call:function(e,...t){const n=v.get(e);if(!n)throw new Error(`\u672A\u5B9A\u4E49\u7684\u5B8F: ${e}`);const s=new Map;for(let r=0;r<n.params.length;r++){const o=n.params[r],a=r<t.length?t[r]:o.defaultValue;if(a===void 0&&o.defaultValue===null)throw new Error(`\u7F3A\u5C11\u5FC5\u9700\u53C2\u6570: ${o.name}`);s.set(o.name,a!==void 0?a:"")}return O(n.body,s,d)},getAll:function(){return Array.from(v.entries())},remove:function(e){v.delete(e)},clear:function(){v.clear()},parse:function(e){const{macros:t}=H(e,d);for(const[n,s]of t)v.set(n,s)}},math:{evaluate:function(e){return k(e,d)},parseUnit:z,round:D,test:function(e,t={}){const n={...d,...t};try{const s=k(e,n);return{success:!0,expression:e,result:s,parsed:z(s.replace(/^calc\(|\)$/g,""))}}catch(s){return{success:!1,expression:e,error:s.message}}}},colorUtils:{labToRGB:C,lchToLab:A,lchToRGB:function(e,t,n){const s=A(e,t,n);return C(s.L,s.a,s.b)},labToP3:E,lchToP3:function(e,t,n){const s=A(e,t,n);return E(s.L,s.a,s.b)},parseHexLab:function(e){const t=e.match(/lab#([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})/i);if(!t)return null;const n=t[1],s=t[2],r=t[3],o=parseInt(n,16)/255*100,a=(parseInt(s,16)-128)*1.5,c=(parseInt(r,16)-128)*1.5;return C(o,a,c)},parseHexLch:function(e){const t=e.match(/lch#([0-9a-f]{2})([0-9a-f]{2})(\d{1,3})/i);if(!t)return null;const n=t[1],s=t[2],r=t[3],o=parseInt(n,16)/255*100,a=parseInt(s,16)/255*150,c=parseInt(r)/100*360,l=A(o,a,c);return C(l.L,l.a,l.b)},generateColor:function(e,t,n,s=null,r=!0){return L(e,t,n,{enableP3:r},s)},parseColor:function(e){try{const t=e.match(/lab\(\s*([\d.]+)(%?)\s+([\d.-]+)\s+([\d.-]+)(?:\s*\/\s*([\d.%]+))?\s*\)/i);if(t){let s=parseFloat(t[1]);const r=parseFloat(t[3]),o=parseFloat(t[4]),a=t[5]?t[5].includes("%")?parseFloat(t[5])/100:parseFloat(t[5]):null,c=L(s,r,o,d,a);return{L:s,A:r,B:o,alpha:a,rgb:C(s,r,o),p3:E(s,r,o),colorString:c}}const n=e.match(/lch\(\s*([\d.]+)(%?)\s+([\d.]+)\s+([\d.]+)(deg)?(?:\s*\/\s*([\d.%]+))?\s*\)/i);if(n){let s=parseFloat(n[1]);const r=parseFloat(n[3]);let o=parseFloat(n[4]);const a=n[6]?n[6].includes("%")?parseFloat(n[6])/100:parseFloat(n[6]):null,c=A(s,r,o),l=L(c.L,c.a,c.b,d,a);return{L:s,C:r,H:o,alpha:a,lab:c,rgb:C(c.L,c.a,c.b),p3:E(c.L,c.a,c.b),colorString:l}}return null}catch(t){return console.warn("\u65E0\u6CD5\u89E3\u6790\u989C\u8272:",e,t),null}}}},T=function(...e){if(e.length>1||e[0]&&e[0].raw)return Le(...e);const t=e[0];if(typeof t=="string"){const n=P(t,{...d,...e[1]});return n&&typeof n.then=="function",n}return typeof t=="object"&&t!==null?(d={...d,...t},T):e.length===0?Z():T};function Le(e,...t){let n=e[0];for(let r=0;r<t.length;r++){const o=t[r];let a="";typeof o=="function"?a=o():Array.isArray(o)?a=o.join(" "):a=String(o??""),n+=a+e[r+1]}const s=P(n,d);return s&&typeof s.then=="function",s}return Object.assign(T,Ae),Object.setPrototypeOf(T,Function.prototype),typeof window<"u"&&(Z(),Object.defineProperty(window.HTMLElement.prototype,"cssVar",{get(){const e=this;return new Proxy(()=>{},{get(t,n){const s=n.startsWith("--")?n:`--${n}`;return e.style.getPropertyValue(s)},set(t,n,s){const r=n.startsWith("--")?n:`--${n}`;return e.style.setProperty(r,s),!0},apply(t,n,s){const r=s[0],o=s[1],a=r.startsWith("--")?r:`--${r}`;if(o===void 0)return e.style.getPropertyValue(a);e.style.setProperty(a,o)}})}})),T})();if(typeof define=="function"&&define.amd)define([],()=>V);else if(typeof module=="object"&&module.exports)module.exports=V;else{const d=globalThis??(typeof self<"u"&&self)??(typeof window<"u"&&window)??global??{};d.styimat=V}export default V;export const{convert,apply,config,supportsP3,detectP3Support,imports,aliases,macros,math,colorUtils}=V;
|
|
31
|
+
`}function Se(t,e,n){let s="";const o=t.split(`
|
|
32
|
+
`);let r=null;for(let a of o){const c=a.trim();c.endsWith("{")&&(r=c.slice(0,-1).trim()),c==="}"&&r&&(r=null),s+=R(a,n)+`
|
|
33
|
+
`}return s.trim()}async function ee(t,e){const n=/@import\s+([^;]+?)\s*;/g;return(async o=>{const r=[],a=o.replace(n,(c,l)=>{const i=Ae(l,e).then(u=>ee(u,e)).catch(u=>(console.warn(`\u65E0\u6CD5\u5BFC\u5165CSS\u6587\u4EF6: ${l}`,u),""));return r.push(i),`__IMPORT_PLACEHOLDER_${r.length-1}__`});if(r.length>0){const c=await Promise.all(r);let l=a;for(let i=0;i<c.length;i++)l=l.replace(`__IMPORT_PLACEHOLDER_${i}__`,c[i]);return l}return a})(t)}async function Ae(t,e){if(e.importCache&&_.has(t))return _.get(t);const n=e.importBaseUrl?new URL(t,e.importBaseUrl).href:t;let s;if(typeof process<"u"&&process.versions&&process.versions.node&&typeof require<"u")try{const r=require("fs"),a=require("path");let c=n;n.startsWith(".")&&(c=a.join(process.cwd(),n)),s=r.readFileSync(c,"utf-8")}catch(r){throw new Error(`Node.js\u6587\u4EF6\u8BFB\u53D6\u5931\u8D25: ${n} - ${r.message}`)}else try{const r=new AbortController,a=setTimeout(()=>r.abort(),e.importTimeout),c=await fetch(n,{signal:r.signal,headers:{Accept:"text/css"}});if(clearTimeout(a),!c.ok)throw new Error(`HTTP\u9519\u8BEF: ${c.status} ${c.statusText}`);s=await c.text()}catch(r){throw r.name==="AbortError"?new Error(`\u5BFC\u5165\u8D85\u65F6: ${n}`):new Error(`\u65E0\u6CD5\u83B7\u53D6CSS: ${n} - ${r.message}`)}return e.importCache&&_.set(t,s),s}function z(t,e={}){const n=(r,a)=>{const{config:c,css:l}=re(r),i={...g,...e,...c};let u=l,h=new Map;if(i.enableAlias){const{aliases:S,css:P}=se(u);h=S,u=P}let p=u,f=new Map;if(i.enableMacros){const{macros:S,css:P}=X(p,i);f=S,p=P;for(const[E,B]of f)M.set(E,B)}let d=p;i.enableMacros&&f.size>0&&(d=oe(d,f,i));const{globalVariables:b,selectorVariables:m,cssWithoutVars:y}=we(d,i);let $=y.trim();if(i.enableNesting&&y.includes("{"))try{$=ve(y,i,h,f)}catch(S){console.warn("\u5D4C\u5957\u89E3\u6790\u5931\u8D25\uFF0C\u4F7F\u7528\u539F\u59CBCSS:",S)}const w=Ce(b,i);let v=$;m.size>0&&(v=Se($,m,i)),v=Me(v,b,m,i);for(const[S,P]of C)try{P.enable&&(v=P.convert(v,i))}catch(E){console.error("\u63D2\u4EF6\u5904\u7406\u5931\u8D25:",E)}return w+v},s=t&&/@import\s+([^;]+?)\s*;/g.test(t),o={...g,...e};return s?(async()=>{try{const r=await ee(t,o);return n(r,o)}catch(r){return console.error("@import\u5904\u7406\u5931\u8D25:",r),n(t,o)}})():n(t,o)}function te(t={}){const e={...g,...t},n=document.querySelectorAll(`style[${e.styleTagAttribute||"e"}]`);return n.forEach(s=>{let o=s.textContent;(async()=>{try{s.getAttribute("src")&&(o="@import "+s.getAttribute("src")+";");const a=await z(o,e),c=document.createElement("style");c.textContent=a,s.parentNode.insertBefore(c,s.nextSibling),e.preserveOriginal?s.style.display="none":s.remove()}catch(a){console.error("\u5904\u7406style\u6807\u7B7E\u5931\u8D25:",a)}})()}),n.length}function ne(t={}){g={...g,...t}}function H(t,e={}){const n={...g,...e};if(t){if(/@import\s+([^;]+?)\s*;/g.test(t))return(async()=>{try{const o=await z(t,n),r=document.createElement("style");return r.textContent=o,document.head.appendChild(r),r}catch(o){return console.error("\u5E94\u7528CSS\u5931\u8D25:",o),null}})();{const o=z(t,n),r=document.createElement("style");return r.textContent=o,document.head.appendChild(r),r}}else document.readyState==="loading"?document.addEventListener("DOMContentLoaded",()=>{te(n)}):te(n)}const Le={convert:z,apply:H,config:ne,supportsP3:j(),detectP3Support:j,imports:{clearCache:function(){_.clear()},setBaseUrl:function(t){g.importBaseUrl=t},setCacheEnabled:function(t){g.importCache=t},setTimeout:function(t){g.importTimeout=t}},plugins:new Proxy({},{set(t,e,n){return(n.created??(()=>{}))(),C.set(e,n),!0},get(t,e){return C.get(e)},deleteProperty(t,e){return C.get(e)?.deleted(),C.delete(e),!0},has(t,e){return C.has(e)},ownKeys(){return Array.from(C.keys())},getOwnPropertyDescriptor(t,e){if(C.has(e))return{enumerable:!0,configurable:!0,writable:!0,value:C.get(e)}}}),aliases:{add:function(t,e){k.set(t,e)},remove:function(t){k.delete(t)},getAll:function(){return Array.from(k.entries())},clear:function(){k.clear()}},macros:{define:function(t,e,n=[]){if(typeof e=="function"){const o=e.toString().match(/{([\s\S]*)}/);o&&M.set(t,{params:n.map(r=>typeof r=="string"?{name:r}:r),body:o[1].trim()})}else M.set(t,{params:n.map(s=>typeof s=="string"?{name:s}:s),body:e})},call:function(t,...e){const n=M.get(t);if(!n)throw new Error(`\u672A\u5B9A\u4E49\u7684\u5B8F: ${t}`);const s=new Map;for(let o=0;o<n.params.length;o++){const r=n.params[o],a=o<e.length?e[o]:r.defaultValue;if(a===void 0&&r.defaultValue===null)throw new Error(`\u7F3A\u5C11\u5FC5\u9700\u53C2\u6570: ${r.name}`);s.set(r.name,a!==void 0?a:"")}return O(n.body,s,g)},getAll:function(){return Array.from(M.entries())},remove:function(t){M.delete(t)},clear:function(){M.clear()},parse:function(t){const{macros:e}=X(t,g);for(const[n,s]of e)M.set(n,s)}},math:{evaluate:function(t){return N(t,g)},parseUnit:T,round:Q,test:function(t,e={}){const n={...g,...e};try{const s=N(t,n);return{success:!0,expression:t,result:s,parsed:T(s.replace(/^calc\(|\)$/g,""))}}catch(s){return{success:!1,expression:t,error:s.message}}}},colorUtils:{labToRGB:A,lchToLab:L,lchToRGB:function(t,e,n){const s=L(t,e,n);return A(s.L,s.a,s.b)},labToP3:V,lchToP3:function(t,e,n){const s=L(t,e,n);return V(s.L,s.a,s.b)},parseHexLab:function(t){const e=t.match(/lab#([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})/i);if(!e)return null;const n=e[1],s=e[2],o=e[3],r=parseInt(n,16)/255*100,a=(parseInt(s,16)-128)*1.5,c=(parseInt(o,16)-128)*1.5;return A(r,a,c)},parseHexLch:function(t){const e=t.match(/lch#([0-9a-f]{2})([0-9a-f]{2})(\d{1,3})/i);if(!e)return null;const n=e[1],s=e[2],o=e[3],r=parseInt(n,16)/255*100,a=parseInt(s,16)/255*150,c=parseInt(o)/100*360,l=L(r,a,c);return A(l.L,l.a,l.b)},generateColor:function(t,e,n,s=null,o=!0){return x(t,e,n,{enableP3:o},s)},parseColor:function(t){try{const e=t.match(/lab\(\s*([\d.]+)(%?)\s+([\d.-]+)\s+([\d.-]+)(?:\s*\/\s*([\d.%]+))?\s*\)/i);if(e){let s=parseFloat(e[1]);const o=parseFloat(e[3]),r=parseFloat(e[4]),a=e[5]?e[5].includes("%")?parseFloat(e[5])/100:parseFloat(e[5]):null,c=x(s,o,r,g,a);return{L:s,A:o,B:r,alpha:a,rgb:A(s,o,r),p3:V(s,o,r),colorString:c}}const n=t.match(/lch\(\s*([\d.]+)(%?)\s+([\d.]+)\s+([\d.]+)(deg)?(?:\s*\/\s*([\d.%]+))?\s*\)/i);if(n){let s=parseFloat(n[1]);const o=parseFloat(n[3]);let r=parseFloat(n[4]);const a=n[6]?n[6].includes("%")?parseFloat(n[6])/100:parseFloat(n[6]):null,c=L(s,o,r),l=x(c.L,c.a,c.b,g,a);return{L:s,C:o,H:r,alpha:a,lab:c,rgb:A(c.L,c.a,c.b),p3:V(c.L,c.a,c.b),colorString:l}}return null}catch(e){return console.warn("\u65E0\u6CD5\u89E3\u6790\u989C\u8272:",t,e),null}}}},W=function(...t){if(t.length>1||t[0]&&t[0].raw)return xe(...t);const e=t[0];if(typeof e=="string"){const n=z(e,{...g,...t[1]});return n&&typeof n.then=="function",n}return typeof e=="object"&&e!==null?(g={...g,...e},W):t.length===0?H():W};function xe(t,...e){let n=t[0];for(let o=0;o<e.length;o++){const r=e[o];let a="";typeof r=="function"?a=r():Array.isArray(r)?a=r.join(" "):a=String(r??""),n+=a+t[o+1]}const s=z(n,g);return s&&typeof s.then=="function",s}return Object.assign(W,Le),Object.setPrototypeOf(W,Function.prototype),typeof window<"u"&&(H(),Object.defineProperty(window.HTMLElement.prototype,"cssVar",{get(){const t=this;return new Proxy(()=>{},{get(e,n){const s=n.startsWith("--")?n:`--${n}`;return t.style.getPropertyValue(s)},set(e,n,s){const o=n.startsWith("--")?n:`--${n}`;return t.style.setProperty(o,s),!0},apply(e,n,s){const o=s[0],r=s[1],a=o.startsWith("--")?o:`--${o}`;if(r===void 0)return t.style.getPropertyValue(a);t.style.setProperty(a,r)}})}})),W})();if(typeof define=="function"&&define.amd)define([],g=>I);else if(typeof module=="object"&&module.exports)module.exports=I;else{const g=globalThis??(typeof self<"u"&&self)??(typeof window<"u"&&window)??global??{};g.styimat=I}export default I;export const{convert,apply,config,supportsP3,detectP3Support,imports,plugins,aliases,macros,math,colorUtils}=I;
|
package/dist/styimat.mjs
CHANGED
|
@@ -34,7 +34,7 @@ const styimat = (function() {
|
|
|
34
34
|
importCache: true,
|
|
35
35
|
importTimeout: 5000,
|
|
36
36
|
enableAlias: true,
|
|
37
|
-
enableMacros: true
|
|
37
|
+
enableMacros: true
|
|
38
38
|
};
|
|
39
39
|
|
|
40
40
|
// 全局P3支持检测结果
|
|
@@ -49,6 +49,8 @@ const styimat = (function() {
|
|
|
49
49
|
// 宏定义存储
|
|
50
50
|
const macroRegistry = new Map();
|
|
51
51
|
|
|
52
|
+
const pluginMap = new Map();
|
|
53
|
+
|
|
52
54
|
/**
|
|
53
55
|
* 解析配置头
|
|
54
56
|
*/
|
|
@@ -386,7 +388,7 @@ const styimat = (function() {
|
|
|
386
388
|
/**
|
|
387
389
|
* 解析一行CSS
|
|
388
390
|
*/
|
|
389
|
-
function parseSingleLineCSS(cssString, aliases
|
|
391
|
+
function parseSingleLineCSS(cssString, aliases, macros) {
|
|
390
392
|
let str = cssString.trim();
|
|
391
393
|
|
|
392
394
|
if (str.endsWith(';')) {
|
|
@@ -459,6 +461,13 @@ const styimat = (function() {
|
|
|
459
461
|
property = aliases.get(property);
|
|
460
462
|
}
|
|
461
463
|
|
|
464
|
+
if (property.startsWith("@") && macros.get(property.slice(1))) {
|
|
465
|
+
const macro = macros.get(property.slice(1));
|
|
466
|
+
const args = parseMacroArguments(value.split(" ").join(","), macro.params);
|
|
467
|
+
property = applyMacro(macro.body, args, config);
|
|
468
|
+
value = "";
|
|
469
|
+
}
|
|
470
|
+
|
|
462
471
|
result.push({ [property]: value });
|
|
463
472
|
}
|
|
464
473
|
|
|
@@ -1143,7 +1152,7 @@ const styimat = (function() {
|
|
|
1143
1152
|
/**
|
|
1144
1153
|
* 解析嵌套规则
|
|
1145
1154
|
*/
|
|
1146
|
-
function parseNestedRules(cssText, config, aliases) {
|
|
1155
|
+
function parseNestedRules(cssText, config, aliases, macros) {
|
|
1147
1156
|
const lines = cssText.split('\n');
|
|
1148
1157
|
const stack = [];
|
|
1149
1158
|
const rootRules = [];
|
|
@@ -1188,11 +1197,12 @@ const styimat = (function() {
|
|
|
1188
1197
|
if (!trimmed.includes('{') && !trimmed.includes('}') && trimmed.includes(':')) {
|
|
1189
1198
|
if (stack.length > 0) {
|
|
1190
1199
|
const currentRule = stack[stack.length - 1];
|
|
1191
|
-
const parsed = parseSingleLineCSS(trimmed, aliases);
|
|
1200
|
+
const parsed = parseSingleLineCSS(trimmed, aliases, macros);
|
|
1192
1201
|
parsed.forEach(obj => {
|
|
1193
1202
|
const key = Object.keys(obj)[0];
|
|
1194
1203
|
const value = processCSSValue(obj[key], config);
|
|
1195
|
-
|
|
1204
|
+
|
|
1205
|
+
currentRule.properties.push(value === "" ? key : `${key}: ${value}`);
|
|
1196
1206
|
});
|
|
1197
1207
|
}
|
|
1198
1208
|
continue;
|
|
@@ -1210,13 +1220,13 @@ const styimat = (function() {
|
|
|
1210
1220
|
}
|
|
1211
1221
|
}
|
|
1212
1222
|
|
|
1213
|
-
return convertRulesToCSS(rootRules, config, '', aliases);
|
|
1223
|
+
return convertRulesToCSS(rootRules, config, '', aliases, macros);
|
|
1214
1224
|
}
|
|
1215
1225
|
|
|
1216
1226
|
/**
|
|
1217
1227
|
* 将规则树转换为CSS字符串
|
|
1218
1228
|
*/
|
|
1219
|
-
function convertRulesToCSS(rules, config, parentSelector = '', aliases
|
|
1229
|
+
function convertRulesToCSS(rules, config, parentSelector = '', aliases, macros) {
|
|
1220
1230
|
let result = '';
|
|
1221
1231
|
const isParentAt = parentSelector.startsWith("@");
|
|
1222
1232
|
|
|
@@ -1241,18 +1251,18 @@ const styimat = (function() {
|
|
|
1241
1251
|
if (rule.properties.length > 0) {
|
|
1242
1252
|
result += (isAt ? "" : fullSelector) + ' {\n';
|
|
1243
1253
|
for (const prop of rule.properties) {
|
|
1244
|
-
const parsed = parseSingleLineCSS(prop, aliases);
|
|
1254
|
+
const parsed = parseSingleLineCSS(prop, aliases, macros);
|
|
1245
1255
|
parsed.forEach(obj => {
|
|
1246
1256
|
const key = Object.keys(obj)[0];
|
|
1247
1257
|
const value = processCSSValue(obj[key], config);
|
|
1248
|
-
result += (isParentAt ? " ".repeat(config.indentSize) : '') + " ".repeat(config.indentSize)
|
|
1258
|
+
result += (isParentAt ? " ".repeat(config.indentSize) : '') + " ".repeat(config.indentSize) + (value === "" ? key : `${key}: ${value};\n`);
|
|
1249
1259
|
});
|
|
1250
1260
|
}
|
|
1251
1261
|
result += isParentAt ? " ".repeat(config.indentSize) + '}\n' : '}\n\n';
|
|
1252
1262
|
}
|
|
1253
1263
|
|
|
1254
1264
|
if (rule.children && rule.children.length > 0) {
|
|
1255
|
-
result += convertRulesToCSS(rule.children, config, fullSelector, aliases);
|
|
1265
|
+
result += convertRulesToCSS(rule.children, config, fullSelector, aliases, macros);
|
|
1256
1266
|
}
|
|
1257
1267
|
|
|
1258
1268
|
if (isParentAt){
|
|
@@ -1327,13 +1337,6 @@ const styimat = (function() {
|
|
|
1327
1337
|
}
|
|
1328
1338
|
|
|
1329
1339
|
if (trimmed === '}' && currentSelector) {
|
|
1330
|
-
if (selectorVariables.has(currentSelector)) {
|
|
1331
|
-
const vars = selectorVariables.get(currentSelector);
|
|
1332
|
-
const indent = line.match(/^(\s*)/)[0];
|
|
1333
|
-
for (const [varName, varValue] of Object.entries(vars)) {
|
|
1334
|
-
result += ' --' + varName + ': ' + varValue + ';\n';
|
|
1335
|
-
}
|
|
1336
|
-
}
|
|
1337
1340
|
currentSelector = null;
|
|
1338
1341
|
}
|
|
1339
1342
|
|
|
@@ -1489,7 +1492,7 @@ const styimat = (function() {
|
|
|
1489
1492
|
let processedCSS = cssWithoutVars.trim();
|
|
1490
1493
|
if (finalConfig.enableNesting && cssWithoutVars.includes('{')) {
|
|
1491
1494
|
try {
|
|
1492
|
-
processedCSS = parseNestedRules(cssWithoutVars, finalConfig, aliases);
|
|
1495
|
+
processedCSS = parseNestedRules(cssWithoutVars, finalConfig, aliases, macros);
|
|
1493
1496
|
} catch (error) {
|
|
1494
1497
|
console.warn('嵌套解析失败,使用原始CSS:', error);
|
|
1495
1498
|
}
|
|
@@ -1504,7 +1507,17 @@ const styimat = (function() {
|
|
|
1504
1507
|
|
|
1505
1508
|
finalCSS = replaceVariableUses(finalCSS, globalVariables, selectorVariables, finalConfig);
|
|
1506
1509
|
|
|
1507
|
-
|
|
1510
|
+
for (const [name, plugin] of pluginMap) {
|
|
1511
|
+
try {
|
|
1512
|
+
if(plugin.enable) finalCSS = plugin.convert(finalCSS, finalConfig);
|
|
1513
|
+
} catch (error) {
|
|
1514
|
+
console.error('插件处理失败:', error);
|
|
1515
|
+
}
|
|
1516
|
+
}
|
|
1517
|
+
|
|
1518
|
+
let fullCSS = rootRule + finalCSS;
|
|
1519
|
+
|
|
1520
|
+
return fullCSS;
|
|
1508
1521
|
};
|
|
1509
1522
|
|
|
1510
1523
|
const hasImports = cssText && /@import\s+([^;]+?)\s*;/g.test(cssText);
|
|
@@ -1632,6 +1645,40 @@ const styimat = (function() {
|
|
|
1632
1645
|
}
|
|
1633
1646
|
},
|
|
1634
1647
|
|
|
1648
|
+
plugins: new Proxy({},{
|
|
1649
|
+
set(target, name, plugin) {
|
|
1650
|
+
const createdFunc = plugin.created ?? (() => {});
|
|
1651
|
+
createdFunc();
|
|
1652
|
+
pluginMap.set(name, plugin);
|
|
1653
|
+
return true;
|
|
1654
|
+
},
|
|
1655
|
+
get(target, name) {
|
|
1656
|
+
return pluginMap.get(name);
|
|
1657
|
+
},
|
|
1658
|
+
deleteProperty(target, name) {
|
|
1659
|
+
pluginMap.get(name)?.deleted();
|
|
1660
|
+
pluginMap.delete(name);
|
|
1661
|
+
return true;
|
|
1662
|
+
},
|
|
1663
|
+
has(terget, name) {
|
|
1664
|
+
return pluginMap.has(name);
|
|
1665
|
+
},
|
|
1666
|
+
ownKeys() {
|
|
1667
|
+
return Array.from(pluginMap.keys());
|
|
1668
|
+
},
|
|
1669
|
+
getOwnPropertyDescriptor(target, prop) {
|
|
1670
|
+
if (pluginMap.has(prop)) {
|
|
1671
|
+
return {
|
|
1672
|
+
enumerable: true,
|
|
1673
|
+
configurable: true,
|
|
1674
|
+
writable: true,
|
|
1675
|
+
value: pluginMap.get(prop)
|
|
1676
|
+
};
|
|
1677
|
+
}
|
|
1678
|
+
return undefined;
|
|
1679
|
+
}
|
|
1680
|
+
}),
|
|
1681
|
+
|
|
1635
1682
|
aliases: {
|
|
1636
1683
|
add: function(alias, property) {
|
|
1637
1684
|
aliasMap.set(alias, property);
|
|
@@ -1918,7 +1965,7 @@ const styimat = (function() {
|
|
|
1918
1965
|
})();
|
|
1919
1966
|
|
|
1920
1967
|
if (typeof define === 'function' && define.amd) {
|
|
1921
|
-
define([],
|
|
1968
|
+
define([], _=>styimat);
|
|
1922
1969
|
} else if (typeof module === 'object' && module.exports) {
|
|
1923
1970
|
module.exports = styimat;
|
|
1924
1971
|
} else {
|
|
@@ -1927,4 +1974,4 @@ if (typeof define === 'function' && define.amd) {
|
|
|
1927
1974
|
}
|
|
1928
1975
|
|
|
1929
1976
|
export default styimat;
|
|
1930
|
-
export const { convert, apply, config, supportsP3, detectP3Support, imports, aliases, macros, math, colorUtils } = styimat;
|
|
1977
|
+
export const { convert, apply, config, supportsP3, detectP3Support, imports, plugins, aliases, macros, math, colorUtils } = styimat;
|