@melcanz85/chaincss 1.11.2 → 1.11.4
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 +132 -130
- package/browser/rtt.js +93 -39
- package/node/strVal.js +2 -2
- package/package.json +1 -1
- package/node/css-properties.json +0 -633
package/README.md
CHANGED
|
@@ -4,25 +4,54 @@
|
|
|
4
4
|
[](https://www.npmjs.com/package/@melcanz85/chaincss)
|
|
5
5
|
[](https://opensource.org/licenses/MIT)
|
|
6
6
|
|
|
7
|
-
[](https://
|
|
7
|
+
[](https://chaincss.dev)
|
|
8
8
|
|
|
9
9
|
**Write CSS with JavaScript. Lets you CHOOSE your runtime cost. DUAL MODE**
|
|
10
10
|
|
|
11
|
-
**Build-time compilation** → Pure CSS, zero JavaScript in browser
|
|
11
|
+
* **Build-time compilation** → Pure CSS, zero JavaScript in browser
|
|
12
12
|
|
|
13
|
-
**Runtime hooks** → Dynamic, prop-based styles when you need them
|
|
13
|
+
* **Runtime hooks** → Dynamic, prop-based styles when you need them
|
|
14
14
|
|
|
15
|
-
|
|
15
|
+
### Requirements
|
|
16
16
|
|
|
17
|
-
*
|
|
17
|
+
* Node.js 18.x or higher [download.](https://nodejs.org/en/download)
|
|
18
|
+
|
|
19
|
+
* For React: React 16.8+ (hooks support required)
|
|
20
|
+
|
|
21
|
+
## Installation & Setup
|
|
22
|
+
|
|
23
|
+
### For Static/Build-time Usage
|
|
18
24
|
|
|
19
25
|
```bash
|
|
20
26
|
|
|
21
27
|
npm install @melcanz85/chaincss
|
|
22
28
|
```
|
|
23
29
|
|
|
24
|
-
|
|
25
|
-
|
|
30
|
+
### For React with Runtime Hooks
|
|
31
|
+
|
|
32
|
+
```bash
|
|
33
|
+
npm install @melcanz85/chaincss
|
|
34
|
+
# React hooks are included in the main package
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
## Quick Start
|
|
38
|
+
|
|
39
|
+
**Syntax**
|
|
40
|
+
|
|
41
|
+
1. Create your first .jcss file
|
|
42
|
+
|
|
43
|
+
```javascript
|
|
44
|
+
// main.jcss
|
|
45
|
+
<@
|
|
46
|
+
const text = $().color('blue').textAlign('center').block('p');
|
|
47
|
+
|
|
48
|
+
//text.fontSize = '2rem';
|
|
49
|
+
|
|
50
|
+
run(text);
|
|
51
|
+
@>
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
2. Add the stylesheet link to your HTML
|
|
26
55
|
|
|
27
56
|
```html
|
|
28
57
|
<!-- index.html -->
|
|
@@ -38,32 +67,53 @@ stylesheet for your entire webpage. You dont need to touch this css file.
|
|
|
38
67
|
</html>
|
|
39
68
|
```
|
|
40
69
|
|
|
41
|
-
|
|
70
|
+
3. Run the compiler
|
|
71
|
+
|
|
72
|
+
```bash
|
|
73
|
+
npx chaincss ./src/main.jcss ./style --watch
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
* *Note: The first run creates ./chaincss.config.js with default values. Edit this file to customize your build.*
|
|
77
|
+
|
|
78
|
+
```javascript
|
|
79
|
+
|
|
80
|
+
module.exports = {
|
|
81
|
+
atomic: {
|
|
82
|
+
enabled: true, // enable this for
|
|
83
|
+
threshold: 3,
|
|
84
|
+
naming: 'hash',
|
|
85
|
+
cache: true,
|
|
86
|
+
cachePath: './.chaincss-cache',
|
|
87
|
+
minify: true
|
|
88
|
+
},
|
|
89
|
+
prefixer: {
|
|
90
|
+
mode: 'auto',
|
|
91
|
+
browsers: ['> 0.5%', 'last 2 versions', 'not dead'],
|
|
92
|
+
enabled: true,
|
|
93
|
+
sourceMap: true,
|
|
94
|
+
sourceMapInline: false
|
|
95
|
+
}
|
|
96
|
+
};
|
|
97
|
+
|
|
98
|
+
````
|
|
99
|
+
|
|
100
|
+
4. Open index.html in your browser — your styles should be applied!
|
|
101
|
+
|
|
102
|
+
* To modify or add styles just add a property to the newly created style object before the run() function. They become javascript regular objects.
|
|
42
103
|
|
|
43
104
|
```javascript
|
|
44
105
|
// main.jcss
|
|
45
106
|
<@
|
|
46
107
|
const text = $().color('blue').textAlign('center').block('p');
|
|
47
108
|
|
|
48
|
-
|
|
109
|
+
text.fontSize = '2rem';
|
|
110
|
+
text.padding = '10px';
|
|
111
|
+
text.backgroundColor = 'rgb(106, 90, 205)';
|
|
49
112
|
|
|
50
113
|
run(text);
|
|
51
114
|
@>
|
|
52
115
|
```
|
|
53
116
|
|
|
54
|
-
* To apply this styles run this in your terminal / command prompt.
|
|
55
|
-
|
|
56
|
-
```bash
|
|
57
|
-
npx chaincss ./src/main.jcss ./style --watch
|
|
58
|
-
````
|
|
59
|
-
|
|
60
|
-
* Open your index.html in the browser.
|
|
61
|
-
|
|
62
|
-
* To make changes uncomment styles between text variable declaration and run() method.
|
|
63
|
-
|
|
64
|
-
* Thats how you add or modify the style block you treat them as a regular javascript object.
|
|
65
|
-
|
|
66
|
-
|
|
67
117
|
### File Structure
|
|
68
118
|
|
|
69
119
|
```text
|
|
@@ -104,15 +154,6 @@ stylesheet for your entire webpage. You dont need to touch this css file.
|
|
|
104
154
|
compile(button);
|
|
105
155
|
@>
|
|
106
156
|
```
|
|
107
|
-
..then run this in terminal/command prompt
|
|
108
|
-
|
|
109
|
-
```bash
|
|
110
|
-
npx chaincss ./src/main.jcss ./style --watch
|
|
111
|
-
# ./style/global.css generated!
|
|
112
|
-
````
|
|
113
|
-
* Note: running `npx chaincss ./src/main.jcss ./style --watch ` for the first time will
|
|
114
|
-
generate ./chaincss.config.js with default values. You can edit this to
|
|
115
|
-
customize your build!.
|
|
116
157
|
|
|
117
158
|
### Mode 2: Runtime (React Hooks)
|
|
118
159
|
|
|
@@ -176,14 +217,16 @@ stylesheet for your entire webpage. You dont need to touch this css file.
|
|
|
176
217
|
|
|
177
218
|
## Use BOTH in the Same Project!
|
|
178
219
|
|
|
179
|
-
```
|
|
220
|
+
```javascript
|
|
180
221
|
// Best of both worlds:
|
|
181
222
|
// - Layout styles → Build-time (zero cost)
|
|
182
223
|
// - Interactive styles → Runtime (dynamic)
|
|
183
224
|
|
|
184
225
|
// chaincss/layout.jcss (build-time)
|
|
185
226
|
const grid = $().display('grid').gap('1rem').block('.grid');
|
|
227
|
+
```
|
|
186
228
|
|
|
229
|
+
```jsx
|
|
187
230
|
// components/Card.jsx (runtime)
|
|
188
231
|
function Card({ isHighlighted }) {
|
|
189
232
|
const styles = useChainStyles(() => {
|
|
@@ -239,30 +282,6 @@ stylesheet for your entire webpage. You dont need to touch this css file.
|
|
|
239
282
|
.block('.btn');
|
|
240
283
|
````
|
|
241
284
|
|
|
242
|
-
### Basic Example
|
|
243
|
-
|
|
244
|
-
**chaincss/button.jcss**
|
|
245
|
-
|
|
246
|
-
```javascript
|
|
247
|
-
const button = $()
|
|
248
|
-
.backgroundColor('#667eea')
|
|
249
|
-
.color('white')
|
|
250
|
-
.padding('0.75rem 1.5rem')
|
|
251
|
-
.borderRadius('0.375rem')
|
|
252
|
-
.fontWeight('600')
|
|
253
|
-
.block('.btn');
|
|
254
|
-
|
|
255
|
-
module.exports = button;
|
|
256
|
-
```
|
|
257
|
-
**chaincss/main.jcss**
|
|
258
|
-
|
|
259
|
-
```javascript
|
|
260
|
-
<@
|
|
261
|
-
const button = get('./button.jcss');
|
|
262
|
-
compile({ button });
|
|
263
|
-
@>
|
|
264
|
-
````
|
|
265
|
-
|
|
266
285
|
## Advanced Features
|
|
267
286
|
|
|
268
287
|
### Design Tokens
|
|
@@ -283,8 +302,11 @@ stylesheet for your entire webpage. You dont need to touch this css file.
|
|
|
283
302
|
lg: '1.5rem'
|
|
284
303
|
}
|
|
285
304
|
});
|
|
305
|
+
```
|
|
286
306
|
|
|
287
|
-
|
|
307
|
+
**In your styles**
|
|
308
|
+
|
|
309
|
+
```javascript
|
|
288
310
|
const button = $()
|
|
289
311
|
.color('$colors.primary') // ← Token syntax!
|
|
290
312
|
.padding('$spacing.md')
|
|
@@ -307,65 +329,6 @@ stylesheet for your entire webpage. You dont need to touch this css file.
|
|
|
307
329
|
**After (atomic CSS):** 499 chars → **90% smaller!**
|
|
308
330
|
|
|
309
331
|
|
|
310
|
-
## Quick Start Guides
|
|
311
|
-
|
|
312
|
-
### With Node.js (Vanilla)
|
|
313
|
-
|
|
314
|
-
```bash
|
|
315
|
-
# 1. Install
|
|
316
|
-
npm install @melcanz85/chaincss
|
|
317
|
-
|
|
318
|
-
# 2. Create your first .jcss file
|
|
319
|
-
mkdir chaincss
|
|
320
|
-
echo "const hello = $().color('red').block('.hello');
|
|
321
|
-
compile({ hello });" > chaincss/main.jcss
|
|
322
|
-
|
|
323
|
-
# 3. Build
|
|
324
|
-
npx chaincss ./src/main.jcss ./style --watch & node server.js
|
|
325
|
-
# ./style/global.css generated!
|
|
326
|
-
```
|
|
327
|
-
|
|
328
|
-
### With React + Vite
|
|
329
|
-
|
|
330
|
-
```bash
|
|
331
|
-
# 1. Create React app
|
|
332
|
-
npm create vite@latest my-app -- --template react
|
|
333
|
-
cd my-app
|
|
334
|
-
|
|
335
|
-
# 2. Install ChainCSS
|
|
336
|
-
npm install @melcanz85/chaincss
|
|
337
|
-
|
|
338
|
-
# 3. Create component with styles
|
|
339
|
-
mkdir -p src/components/Button
|
|
340
|
-
```
|
|
341
|
-
|
|
342
|
-
**src/components/Button/Button.jsx**
|
|
343
|
-
|
|
344
|
-
```jsx
|
|
345
|
-
|
|
346
|
-
import { useChainStyles } from '@melcanz85/chaincss';
|
|
347
|
-
|
|
348
|
-
export function Button({ variant = 'primary', children }) {
|
|
349
|
-
const styles = useChainStyles(() => {
|
|
350
|
-
const button = $()
|
|
351
|
-
.backgroundColor(variant === 'primary' ? '#667eea' : '#48bb78')
|
|
352
|
-
.color('white')
|
|
353
|
-
.padding('0.5rem 1rem')
|
|
354
|
-
.borderRadius('0.375rem')
|
|
355
|
-
.hover()
|
|
356
|
-
.transform('translateY(-2px)')
|
|
357
|
-
.boxShadow('0 4px 6px rgba(0,0,0,0.1)')
|
|
358
|
-
.block()
|
|
359
|
-
return { button };
|
|
360
|
-
});
|
|
361
|
-
return <button className={styles.button}>{children}</button>;
|
|
362
|
-
}
|
|
363
|
-
```
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
See ChainCSS in action! Visit our interactive demo site - [https://melcanz08.github.io/chaincss_react_website/](https://melcanz08.github.io/chaincss_react_website/)
|
|
367
|
-
|
|
368
|
-
|
|
369
332
|
## Performance Comparison
|
|
370
333
|
|
|
371
334
|
Approach Runtime Cost Bundle Size Dynamic Styles Learning Curve
|
|
@@ -382,40 +345,42 @@ See ChainCSS in action! Visit our interactive demo site - [https://melcanz08.git
|
|
|
382
345
|
|
|
383
346
|
CSS Modules Zero Just CSS None Low
|
|
384
347
|
|
|
385
|
-
**ChainCSS a "DUAL MODE
|
|
348
|
+
**ChainCSS a "DUAL MODE" css-in-js library**
|
|
349
|
+
|
|
386
350
|
|
|
387
351
|
## API Reference
|
|
388
352
|
|
|
353
|
+
|
|
389
354
|
### Core Functions
|
|
390
355
|
|
|
391
|
-
|
|
356
|
+
Function Description
|
|
392
357
|
|
|
393
|
-
|
|
358
|
+
`$()` Create a new chain builder
|
|
394
359
|
|
|
395
|
-
|
|
360
|
+
`.block(selector)` End chain and assign selector(s)
|
|
396
361
|
|
|
397
|
-
|
|
362
|
+
`compile(styles)` Compile style objects to CSS
|
|
398
363
|
|
|
399
|
-
|
|
364
|
+
`run(...styles)` Process inline styles
|
|
400
365
|
|
|
401
|
-
|
|
366
|
+
`get(filename)` Import `.jcss` files
|
|
402
367
|
|
|
403
|
-
|
|
368
|
+
`processor(input, output)` Build-time processor
|
|
404
369
|
|
|
405
370
|
|
|
406
371
|
### React Hooks
|
|
407
372
|
|
|
408
|
-
|
|
373
|
+
Hook Description
|
|
409
374
|
|
|
410
|
-
|
|
375
|
+
`useChainStyles(styles, options)` Basic styles hook
|
|
411
376
|
|
|
412
|
-
|
|
377
|
+
`useDynamicChainStyles(factory, deps)` Styles that depend on props/state
|
|
413
378
|
|
|
414
|
-
|
|
379
|
+
`useThemeChainStyles(styles, theme)` Theme-aware styles
|
|
415
380
|
|
|
416
|
-
|
|
381
|
+
`ChainCSSGlobal` Global styles component
|
|
417
382
|
|
|
418
|
-
|
|
383
|
+
`cx(...classes)` Conditional class merging
|
|
419
384
|
|
|
420
385
|
|
|
421
386
|
## Editor Support
|
|
@@ -442,6 +407,43 @@ See ChainCSS in action! Visit our interactive demo site - [https://melcanz08.git
|
|
|
442
407
|
au BufRead,BufNewFile `*.jcss` setfiletype javascript
|
|
443
408
|
```
|
|
444
409
|
|
|
410
|
+
### Troubleshooting
|
|
411
|
+
|
|
412
|
+
**Q: My styles aren't appearing in the browser**
|
|
413
|
+
|
|
414
|
+
* Ensure your HTML includes `<link rel="stylesheet" href="style/global.css">`
|
|
415
|
+
|
|
416
|
+
* Run `npx chaincss` at least once to generate the initial CSS file
|
|
417
|
+
|
|
418
|
+
* Check that your `.jcss` files are in the correct directory
|
|
419
|
+
|
|
420
|
+
* Verify the path in your `npx chaincss` command matches your file structure
|
|
421
|
+
|
|
422
|
+
**Q: React hooks aren't working**
|
|
423
|
+
|
|
424
|
+
* Verify you're using React 16.8 or newer
|
|
425
|
+
|
|
426
|
+
* Import from `@melcanz85/chaincss` (not a subpath)
|
|
427
|
+
|
|
428
|
+
**Q: The `get()` function returns undefined**
|
|
429
|
+
|
|
430
|
+
* Ensure the imported file exports something (`use module.exports = ...`)
|
|
431
|
+
|
|
432
|
+
* Check that the file path is correct relative to your `main.jcss`
|
|
433
|
+
|
|
434
|
+
**Q: Changes aren't reflected after saving**
|
|
435
|
+
|
|
436
|
+
* Make sure the `--watch` flag is active
|
|
437
|
+
|
|
438
|
+
* If not using watch mode, re-run the build command
|
|
439
|
+
|
|
440
|
+
* Clear your browser cache or do a hard refresh
|
|
441
|
+
|
|
442
|
+
|
|
443
|
+
## See ChainCSS in Action
|
|
444
|
+
|
|
445
|
+
Visit our interactive demo site: [https://www.chaincss.dev/](https://www.chaincss.dev)
|
|
446
|
+
|
|
445
447
|
## Contributing
|
|
446
448
|
|
|
447
449
|
Contributions are welcome! Whether it's:
|
package/browser/rtt.js
CHANGED
|
@@ -2,23 +2,18 @@ import { tokens, createTokens, responsive } from '../shared/tokens.mjs';
|
|
|
2
2
|
|
|
3
3
|
let cssProperties = [];
|
|
4
4
|
|
|
5
|
-
// Instead of using dynamic import with unsupported options
|
|
6
|
-
// Use a try-catch with proper dynamic import syntax
|
|
7
5
|
const loadCSSProperties = async () => {
|
|
8
6
|
try {
|
|
9
|
-
// Remove the unsupported 'ignore' option
|
|
10
7
|
const module = await import('../node/css-properties.json', {
|
|
11
8
|
assert: { type: 'json' }
|
|
12
9
|
});
|
|
13
10
|
return module.default;
|
|
14
11
|
} catch (e) {
|
|
15
|
-
// If the file doesn't exist in the package, fallback to CDN
|
|
16
12
|
console.log('CSS properties file not found in package, will fetch from CDN');
|
|
17
13
|
return null;
|
|
18
14
|
}
|
|
19
15
|
};
|
|
20
16
|
|
|
21
|
-
// Initialize asynchronously
|
|
22
17
|
const chain = {
|
|
23
18
|
cssOutput: undefined,
|
|
24
19
|
catcher: {},
|
|
@@ -28,21 +23,18 @@ const chain = {
|
|
|
28
23
|
return;
|
|
29
24
|
}
|
|
30
25
|
|
|
31
|
-
// Try to load from local file first
|
|
32
26
|
const localProperties = await loadCSSProperties();
|
|
33
27
|
if (localProperties && localProperties.length > 0) {
|
|
34
28
|
this.cachedValidProperties = localProperties;
|
|
35
29
|
return;
|
|
36
30
|
}
|
|
37
31
|
|
|
38
|
-
// Fallback to CDN
|
|
39
32
|
try {
|
|
40
33
|
console.log('Loading CSS properties from CDN...');
|
|
41
34
|
const response = await fetch('https://raw.githubusercontent.com/mdn/data/main/css/properties.json');
|
|
42
35
|
const data = await response.json();
|
|
43
36
|
const allProperties = Object.keys(data);
|
|
44
37
|
|
|
45
|
-
// Strip vendor prefixes and remove duplicates
|
|
46
38
|
const baseProperties = new Set();
|
|
47
39
|
allProperties.forEach(prop => {
|
|
48
40
|
const baseProp = prop.replace(/^-(webkit|moz|ms|o)-/, '');
|
|
@@ -59,10 +51,8 @@ const chain = {
|
|
|
59
51
|
}
|
|
60
52
|
};
|
|
61
53
|
|
|
62
|
-
// Start initialization but don't await (non-blocking)
|
|
63
54
|
chain.initializeProperties();
|
|
64
55
|
|
|
65
|
-
// Rest of your code remains the same...
|
|
66
56
|
const resolveToken = (value, useTokens) => {
|
|
67
57
|
if (!useTokens || typeof value !== 'string' || !value.startsWith('$')) {
|
|
68
58
|
return value;
|
|
@@ -75,37 +65,77 @@ const resolveToken = (value, useTokens) => {
|
|
|
75
65
|
return tokenValue;
|
|
76
66
|
};
|
|
77
67
|
|
|
78
|
-
function $(useTokens = true){
|
|
79
|
-
const
|
|
68
|
+
function $(useTokens = true) {
|
|
69
|
+
const regularStyles = {};
|
|
70
|
+
const hoverStyles = {};
|
|
71
|
+
let isBuildingHover = false;
|
|
72
|
+
|
|
80
73
|
const validProperties = chain.cachedValidProperties;
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
74
|
+
|
|
75
|
+
// Create the main proxy
|
|
76
|
+
const createProxy = () => {
|
|
77
|
+
const handler = {
|
|
78
|
+
get: (target, prop) => {
|
|
79
|
+
// Handle .block()
|
|
80
|
+
if (prop === 'block') {
|
|
81
|
+
return (...args) => {
|
|
82
|
+
const result = { ...regularStyles };
|
|
83
|
+
|
|
84
|
+
// Add hover styles if any exist
|
|
85
|
+
if (Object.keys(hoverStyles).length > 0) {
|
|
86
|
+
result.hover = { ...hoverStyles };
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
if (args.length > 0) {
|
|
90
|
+
result.selectors = args;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
// Clear for next use
|
|
94
|
+
Object.keys(regularStyles).forEach(key => delete regularStyles[key]);
|
|
95
|
+
Object.keys(hoverStyles).forEach(key => delete hoverStyles[key]);
|
|
96
|
+
isBuildingHover = false;
|
|
97
|
+
|
|
88
98
|
return result;
|
|
89
|
-
}
|
|
90
|
-
const result = {
|
|
91
|
-
selectors: args,
|
|
92
|
-
...catcher
|
|
93
99
|
};
|
|
94
|
-
|
|
95
|
-
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
// Handle .hover()
|
|
103
|
+
if (prop === 'hover') {
|
|
104
|
+
return () => {
|
|
105
|
+
isBuildingHover = true;
|
|
106
|
+
return proxy; // Return the same proxy, just with hover mode on
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
if(prop==='end'){
|
|
111
|
+
return () => {
|
|
112
|
+
isBuildingHover = false;
|
|
113
|
+
return proxy; // Return the same proxy, but end of hover mode
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
// Handle regular CSS properties
|
|
118
|
+
const cssProperty = prop.replace(/([A-Z])/g, '-$1').toLowerCase();
|
|
119
|
+
if (validProperties && validProperties.length > 0 && !validProperties.includes(cssProperty)) {
|
|
120
|
+
console.warn(`Warning: '${cssProperty}' may not be a valid CSS property`);
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
return (value) => {
|
|
124
|
+
console.log(`📦 ${prop} = ${value}, isBuildingHover = ${isBuildingHover}`);
|
|
125
|
+
if (isBuildingHover) {
|
|
126
|
+
hoverStyles[prop] = resolveToken(value, useTokens);
|
|
127
|
+
} else {
|
|
128
|
+
regularStyles[prop] = resolveToken(value, useTokens);
|
|
129
|
+
}
|
|
130
|
+
return proxy;
|
|
96
131
|
};
|
|
97
132
|
}
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
}
|
|
102
|
-
return function(value) {
|
|
103
|
-
catcher[prop] = resolveToken(value, useTokens);
|
|
104
|
-
return proxy;
|
|
105
|
-
};
|
|
106
|
-
}
|
|
133
|
+
};
|
|
134
|
+
|
|
135
|
+
return new Proxy({}, handler);
|
|
107
136
|
};
|
|
108
|
-
|
|
137
|
+
|
|
138
|
+
const proxy = createProxy();
|
|
109
139
|
return proxy;
|
|
110
140
|
}
|
|
111
141
|
|
|
@@ -134,14 +164,38 @@ const compile = (obj) => {
|
|
|
134
164
|
if (obj.hasOwnProperty(key)) {
|
|
135
165
|
const element = obj[key];
|
|
136
166
|
let selectors = element.selectors || [];
|
|
137
|
-
|
|
167
|
+
|
|
168
|
+
// Generate normal styles
|
|
169
|
+
let normalCSS = '';
|
|
170
|
+
let hoverCSS = '';
|
|
171
|
+
|
|
138
172
|
for (let prop in element) {
|
|
139
|
-
if (element.hasOwnProperty(prop) && prop !== 'selectors') {
|
|
173
|
+
if (element.hasOwnProperty(prop) && prop !== 'selectors' && prop !== 'hover') {
|
|
140
174
|
const kebabKey = prop.replace(/([A-Z])/g, '-$1').toLowerCase();
|
|
141
|
-
|
|
175
|
+
normalCSS += ` ${kebabKey}: ${element[prop]};\n`;
|
|
142
176
|
}
|
|
143
177
|
}
|
|
144
|
-
|
|
178
|
+
|
|
179
|
+
// Generate hover styles if present
|
|
180
|
+
if (element.hover && typeof element.hover === 'object') {
|
|
181
|
+
for (let prop in element.hover) {
|
|
182
|
+
if (element.hover.hasOwnProperty(prop)) {
|
|
183
|
+
const kebabKey = prop.replace(/([A-Z])/g, '-$1').toLowerCase();
|
|
184
|
+
hoverCSS += ` ${kebabKey}: ${element.hover[prop]};\n`;
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
// Add normal styles
|
|
190
|
+
if (normalCSS) {
|
|
191
|
+
cssString += `${selectors.join(', ')} {\n${normalCSS}}\n`;
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
// Add hover styles as separate rule
|
|
195
|
+
if (hoverCSS) {
|
|
196
|
+
const hoverSelectors = selectors.map(s => `${s}:hover`);
|
|
197
|
+
cssString += `${hoverSelectors.join(', ')} {\n${hoverCSS}}\n`;
|
|
198
|
+
}
|
|
145
199
|
}
|
|
146
200
|
}
|
|
147
201
|
chain.cssOutput = cssString.trim();
|
package/node/strVal.js
CHANGED
|
@@ -2,7 +2,7 @@ const strVal = {
|
|
|
2
2
|
userConf: `// Project Configuration
|
|
3
3
|
module.exports = {
|
|
4
4
|
atomic: {
|
|
5
|
-
enabled:
|
|
5
|
+
enabled: true,
|
|
6
6
|
threshold: 3,
|
|
7
7
|
naming: 'hash',
|
|
8
8
|
cache: true,
|
|
@@ -13,7 +13,7 @@ module.exports = {
|
|
|
13
13
|
mode: 'auto',
|
|
14
14
|
browsers: ['> 0.5%', 'last 2 versions', 'not dead'],
|
|
15
15
|
enabled: true,
|
|
16
|
-
sourceMap:
|
|
16
|
+
sourceMap: true,
|
|
17
17
|
sourceMapInline: false
|
|
18
18
|
}
|
|
19
19
|
};
|
package/package.json
CHANGED
package/node/css-properties.json
DELETED
|
@@ -1,633 +0,0 @@
|
|
|
1
|
-
[
|
|
2
|
-
"--*",
|
|
3
|
-
"accelerator",
|
|
4
|
-
"accent-color",
|
|
5
|
-
"align-content",
|
|
6
|
-
"align-items",
|
|
7
|
-
"align-self",
|
|
8
|
-
"align-tracks",
|
|
9
|
-
"alignment-baseline",
|
|
10
|
-
"all",
|
|
11
|
-
"anchor-name",
|
|
12
|
-
"anchor-scope",
|
|
13
|
-
"animation",
|
|
14
|
-
"animation-composition",
|
|
15
|
-
"animation-delay",
|
|
16
|
-
"animation-direction",
|
|
17
|
-
"animation-duration",
|
|
18
|
-
"animation-fill-mode",
|
|
19
|
-
"animation-iteration-count",
|
|
20
|
-
"animation-name",
|
|
21
|
-
"animation-play-state",
|
|
22
|
-
"animation-range",
|
|
23
|
-
"animation-range-end",
|
|
24
|
-
"animation-range-start",
|
|
25
|
-
"animation-timeline",
|
|
26
|
-
"animation-timing-function",
|
|
27
|
-
"animation-trigger",
|
|
28
|
-
"appearance",
|
|
29
|
-
"aspect-ratio",
|
|
30
|
-
"backdrop-filter",
|
|
31
|
-
"backface-visibility",
|
|
32
|
-
"background",
|
|
33
|
-
"background-attachment",
|
|
34
|
-
"background-blend-mode",
|
|
35
|
-
"background-clip",
|
|
36
|
-
"background-color",
|
|
37
|
-
"background-image",
|
|
38
|
-
"background-origin",
|
|
39
|
-
"background-position",
|
|
40
|
-
"background-position-x",
|
|
41
|
-
"background-position-y",
|
|
42
|
-
"background-repeat",
|
|
43
|
-
"background-size",
|
|
44
|
-
"baseline-shift",
|
|
45
|
-
"baseline-source",
|
|
46
|
-
"binding",
|
|
47
|
-
"block-progression",
|
|
48
|
-
"block-size",
|
|
49
|
-
"border",
|
|
50
|
-
"border-before",
|
|
51
|
-
"border-before-color",
|
|
52
|
-
"border-before-style",
|
|
53
|
-
"border-before-width",
|
|
54
|
-
"border-block",
|
|
55
|
-
"border-block-color",
|
|
56
|
-
"border-block-end",
|
|
57
|
-
"border-block-end-color",
|
|
58
|
-
"border-block-end-style",
|
|
59
|
-
"border-block-end-width",
|
|
60
|
-
"border-block-start",
|
|
61
|
-
"border-block-start-color",
|
|
62
|
-
"border-block-start-style",
|
|
63
|
-
"border-block-start-width",
|
|
64
|
-
"border-block-style",
|
|
65
|
-
"border-block-width",
|
|
66
|
-
"border-bottom",
|
|
67
|
-
"border-bottom-color",
|
|
68
|
-
"border-bottom-colors",
|
|
69
|
-
"border-bottom-left-radius",
|
|
70
|
-
"border-bottom-right-radius",
|
|
71
|
-
"border-bottom-style",
|
|
72
|
-
"border-bottom-width",
|
|
73
|
-
"border-collapse",
|
|
74
|
-
"border-color",
|
|
75
|
-
"border-end-end-radius",
|
|
76
|
-
"border-end-start-radius",
|
|
77
|
-
"border-image",
|
|
78
|
-
"border-image-outset",
|
|
79
|
-
"border-image-repeat",
|
|
80
|
-
"border-image-slice",
|
|
81
|
-
"border-image-source",
|
|
82
|
-
"border-image-width",
|
|
83
|
-
"border-inline",
|
|
84
|
-
"border-inline-color",
|
|
85
|
-
"border-inline-end",
|
|
86
|
-
"border-inline-end-color",
|
|
87
|
-
"border-inline-end-style",
|
|
88
|
-
"border-inline-end-width",
|
|
89
|
-
"border-inline-start",
|
|
90
|
-
"border-inline-start-color",
|
|
91
|
-
"border-inline-start-style",
|
|
92
|
-
"border-inline-start-width",
|
|
93
|
-
"border-inline-style",
|
|
94
|
-
"border-inline-width",
|
|
95
|
-
"border-left",
|
|
96
|
-
"border-left-color",
|
|
97
|
-
"border-left-colors",
|
|
98
|
-
"border-left-style",
|
|
99
|
-
"border-left-width",
|
|
100
|
-
"border-radius",
|
|
101
|
-
"border-right",
|
|
102
|
-
"border-right-color",
|
|
103
|
-
"border-right-colors",
|
|
104
|
-
"border-right-style",
|
|
105
|
-
"border-right-width",
|
|
106
|
-
"border-spacing",
|
|
107
|
-
"border-start-end-radius",
|
|
108
|
-
"border-start-start-radius",
|
|
109
|
-
"border-style",
|
|
110
|
-
"border-top",
|
|
111
|
-
"border-top-color",
|
|
112
|
-
"border-top-colors",
|
|
113
|
-
"border-top-left-radius",
|
|
114
|
-
"border-top-right-radius",
|
|
115
|
-
"border-top-style",
|
|
116
|
-
"border-top-width",
|
|
117
|
-
"border-width",
|
|
118
|
-
"bottom",
|
|
119
|
-
"box-align",
|
|
120
|
-
"box-decoration-break",
|
|
121
|
-
"box-direction",
|
|
122
|
-
"box-flex",
|
|
123
|
-
"box-flex-group",
|
|
124
|
-
"box-lines",
|
|
125
|
-
"box-ordinal-group",
|
|
126
|
-
"box-orient",
|
|
127
|
-
"box-pack",
|
|
128
|
-
"box-reflect",
|
|
129
|
-
"box-shadow",
|
|
130
|
-
"box-sizing",
|
|
131
|
-
"break-after",
|
|
132
|
-
"break-before",
|
|
133
|
-
"break-inside",
|
|
134
|
-
"caption-side",
|
|
135
|
-
"caret",
|
|
136
|
-
"caret-animation",
|
|
137
|
-
"caret-color",
|
|
138
|
-
"caret-shape",
|
|
139
|
-
"clear",
|
|
140
|
-
"clip",
|
|
141
|
-
"clip-path",
|
|
142
|
-
"clip-rule",
|
|
143
|
-
"color",
|
|
144
|
-
"color-interpolation-filters",
|
|
145
|
-
"color-scheme",
|
|
146
|
-
"column-count",
|
|
147
|
-
"column-fill",
|
|
148
|
-
"column-gap",
|
|
149
|
-
"column-height",
|
|
150
|
-
"column-rule",
|
|
151
|
-
"column-rule-color",
|
|
152
|
-
"column-rule-style",
|
|
153
|
-
"column-rule-width",
|
|
154
|
-
"column-span",
|
|
155
|
-
"column-width",
|
|
156
|
-
"column-wrap",
|
|
157
|
-
"columns",
|
|
158
|
-
"contain",
|
|
159
|
-
"contain-intrinsic-block-size",
|
|
160
|
-
"contain-intrinsic-height",
|
|
161
|
-
"contain-intrinsic-inline-size",
|
|
162
|
-
"contain-intrinsic-size",
|
|
163
|
-
"contain-intrinsic-width",
|
|
164
|
-
"container",
|
|
165
|
-
"container-name",
|
|
166
|
-
"container-type",
|
|
167
|
-
"content",
|
|
168
|
-
"content-visibility",
|
|
169
|
-
"content-zoom-chaining",
|
|
170
|
-
"content-zoom-limit",
|
|
171
|
-
"content-zoom-limit-max",
|
|
172
|
-
"content-zoom-limit-min",
|
|
173
|
-
"content-zoom-snap",
|
|
174
|
-
"content-zoom-snap-points",
|
|
175
|
-
"content-zoom-snap-type",
|
|
176
|
-
"content-zooming",
|
|
177
|
-
"context-properties",
|
|
178
|
-
"corner-block-end-shape",
|
|
179
|
-
"corner-block-start-shape",
|
|
180
|
-
"corner-bottom-left-shape",
|
|
181
|
-
"corner-bottom-right-shape",
|
|
182
|
-
"corner-bottom-shape",
|
|
183
|
-
"corner-end-end-shape",
|
|
184
|
-
"corner-end-start-shape",
|
|
185
|
-
"corner-inline-end-shape",
|
|
186
|
-
"corner-inline-start-shape",
|
|
187
|
-
"corner-left-shape",
|
|
188
|
-
"corner-right-shape",
|
|
189
|
-
"corner-shape",
|
|
190
|
-
"corner-start-end-shape",
|
|
191
|
-
"corner-start-start-shape",
|
|
192
|
-
"corner-top-left-shape",
|
|
193
|
-
"corner-top-right-shape",
|
|
194
|
-
"corner-top-shape",
|
|
195
|
-
"counter-increment",
|
|
196
|
-
"counter-reset",
|
|
197
|
-
"counter-set",
|
|
198
|
-
"cursor",
|
|
199
|
-
"cx",
|
|
200
|
-
"cy",
|
|
201
|
-
"d",
|
|
202
|
-
"direction",
|
|
203
|
-
"display",
|
|
204
|
-
"dominant-baseline",
|
|
205
|
-
"dynamic-range-limit",
|
|
206
|
-
"empty-cells",
|
|
207
|
-
"field-sizing",
|
|
208
|
-
"fill",
|
|
209
|
-
"fill-opacity",
|
|
210
|
-
"fill-rule",
|
|
211
|
-
"filter",
|
|
212
|
-
"flex",
|
|
213
|
-
"flex-basis",
|
|
214
|
-
"flex-direction",
|
|
215
|
-
"flex-flow",
|
|
216
|
-
"flex-grow",
|
|
217
|
-
"flex-shrink",
|
|
218
|
-
"flex-wrap",
|
|
219
|
-
"float",
|
|
220
|
-
"float-edge",
|
|
221
|
-
"flood-color",
|
|
222
|
-
"flood-opacity",
|
|
223
|
-
"flow-from",
|
|
224
|
-
"flow-into",
|
|
225
|
-
"font",
|
|
226
|
-
"font-family",
|
|
227
|
-
"font-feature-settings",
|
|
228
|
-
"font-kerning",
|
|
229
|
-
"font-language-override",
|
|
230
|
-
"font-optical-sizing",
|
|
231
|
-
"font-palette",
|
|
232
|
-
"font-size",
|
|
233
|
-
"font-size-adjust",
|
|
234
|
-
"font-smooth",
|
|
235
|
-
"font-stretch",
|
|
236
|
-
"font-style",
|
|
237
|
-
"font-synthesis",
|
|
238
|
-
"font-synthesis-position",
|
|
239
|
-
"font-synthesis-small-caps",
|
|
240
|
-
"font-synthesis-style",
|
|
241
|
-
"font-synthesis-weight",
|
|
242
|
-
"font-variant",
|
|
243
|
-
"font-variant-alternates",
|
|
244
|
-
"font-variant-caps",
|
|
245
|
-
"font-variant-east-asian",
|
|
246
|
-
"font-variant-emoji",
|
|
247
|
-
"font-variant-ligatures",
|
|
248
|
-
"font-variant-numeric",
|
|
249
|
-
"font-variant-position",
|
|
250
|
-
"font-variation-settings",
|
|
251
|
-
"font-weight",
|
|
252
|
-
"font-width",
|
|
253
|
-
"force-broken-image-icon",
|
|
254
|
-
"forced-color-adjust",
|
|
255
|
-
"gap",
|
|
256
|
-
"grid",
|
|
257
|
-
"grid-area",
|
|
258
|
-
"grid-auto-columns",
|
|
259
|
-
"grid-auto-flow",
|
|
260
|
-
"grid-auto-rows",
|
|
261
|
-
"grid-column",
|
|
262
|
-
"grid-column-end",
|
|
263
|
-
"grid-column-gap",
|
|
264
|
-
"grid-column-start",
|
|
265
|
-
"grid-columns",
|
|
266
|
-
"grid-gap",
|
|
267
|
-
"grid-row",
|
|
268
|
-
"grid-row-end",
|
|
269
|
-
"grid-row-gap",
|
|
270
|
-
"grid-row-start",
|
|
271
|
-
"grid-rows",
|
|
272
|
-
"grid-template",
|
|
273
|
-
"grid-template-areas",
|
|
274
|
-
"grid-template-columns",
|
|
275
|
-
"grid-template-rows",
|
|
276
|
-
"hanging-punctuation",
|
|
277
|
-
"height",
|
|
278
|
-
"high-contrast-adjust",
|
|
279
|
-
"hyphenate-character",
|
|
280
|
-
"hyphenate-limit-chars",
|
|
281
|
-
"hyphenate-limit-lines",
|
|
282
|
-
"hyphenate-limit-zone",
|
|
283
|
-
"hyphens",
|
|
284
|
-
"image-orientation",
|
|
285
|
-
"image-rendering",
|
|
286
|
-
"image-resolution",
|
|
287
|
-
"ime-align",
|
|
288
|
-
"ime-mode",
|
|
289
|
-
"initial-letter",
|
|
290
|
-
"initial-letter-align",
|
|
291
|
-
"inline-size",
|
|
292
|
-
"inset",
|
|
293
|
-
"inset-block",
|
|
294
|
-
"inset-block-end",
|
|
295
|
-
"inset-block-start",
|
|
296
|
-
"inset-inline",
|
|
297
|
-
"inset-inline-end",
|
|
298
|
-
"inset-inline-start",
|
|
299
|
-
"interactivity",
|
|
300
|
-
"interest-delay",
|
|
301
|
-
"interest-delay-end",
|
|
302
|
-
"interest-delay-start",
|
|
303
|
-
"interpolate-size",
|
|
304
|
-
"isolation",
|
|
305
|
-
"justify-content",
|
|
306
|
-
"justify-items",
|
|
307
|
-
"justify-self",
|
|
308
|
-
"justify-tracks",
|
|
309
|
-
"left",
|
|
310
|
-
"letter-spacing",
|
|
311
|
-
"lighting-color",
|
|
312
|
-
"line-break",
|
|
313
|
-
"line-clamp",
|
|
314
|
-
"line-height",
|
|
315
|
-
"line-height-step",
|
|
316
|
-
"list-style",
|
|
317
|
-
"list-style-image",
|
|
318
|
-
"list-style-position",
|
|
319
|
-
"list-style-type",
|
|
320
|
-
"margin",
|
|
321
|
-
"margin-block",
|
|
322
|
-
"margin-block-end",
|
|
323
|
-
"margin-block-start",
|
|
324
|
-
"margin-bottom",
|
|
325
|
-
"margin-inline",
|
|
326
|
-
"margin-inline-end",
|
|
327
|
-
"margin-inline-start",
|
|
328
|
-
"margin-left",
|
|
329
|
-
"margin-right",
|
|
330
|
-
"margin-top",
|
|
331
|
-
"margin-trim",
|
|
332
|
-
"marker",
|
|
333
|
-
"marker-end",
|
|
334
|
-
"marker-mid",
|
|
335
|
-
"marker-start",
|
|
336
|
-
"mask",
|
|
337
|
-
"mask-attachment",
|
|
338
|
-
"mask-border",
|
|
339
|
-
"mask-border-mode",
|
|
340
|
-
"mask-border-outset",
|
|
341
|
-
"mask-border-repeat",
|
|
342
|
-
"mask-border-slice",
|
|
343
|
-
"mask-border-source",
|
|
344
|
-
"mask-border-width",
|
|
345
|
-
"mask-clip",
|
|
346
|
-
"mask-composite",
|
|
347
|
-
"mask-image",
|
|
348
|
-
"mask-mode",
|
|
349
|
-
"mask-origin",
|
|
350
|
-
"mask-position",
|
|
351
|
-
"mask-position-x",
|
|
352
|
-
"mask-position-y",
|
|
353
|
-
"mask-repeat",
|
|
354
|
-
"mask-repeat-x",
|
|
355
|
-
"mask-repeat-y",
|
|
356
|
-
"mask-size",
|
|
357
|
-
"mask-type",
|
|
358
|
-
"masonry-auto-flow",
|
|
359
|
-
"math-depth",
|
|
360
|
-
"math-shift",
|
|
361
|
-
"math-style",
|
|
362
|
-
"max-block-size",
|
|
363
|
-
"max-height",
|
|
364
|
-
"max-inline-size",
|
|
365
|
-
"max-lines",
|
|
366
|
-
"max-width",
|
|
367
|
-
"min-block-size",
|
|
368
|
-
"min-height",
|
|
369
|
-
"min-inline-size",
|
|
370
|
-
"min-width",
|
|
371
|
-
"mix-blend-mode",
|
|
372
|
-
"object-fit",
|
|
373
|
-
"object-position",
|
|
374
|
-
"object-view-box",
|
|
375
|
-
"offset",
|
|
376
|
-
"offset-anchor",
|
|
377
|
-
"offset-distance",
|
|
378
|
-
"offset-path",
|
|
379
|
-
"offset-position",
|
|
380
|
-
"offset-rotate",
|
|
381
|
-
"opacity",
|
|
382
|
-
"order",
|
|
383
|
-
"orient",
|
|
384
|
-
"orphans",
|
|
385
|
-
"outline",
|
|
386
|
-
"outline-color",
|
|
387
|
-
"outline-offset",
|
|
388
|
-
"outline-radius",
|
|
389
|
-
"outline-radius-bottomleft",
|
|
390
|
-
"outline-radius-bottomright",
|
|
391
|
-
"outline-radius-topleft",
|
|
392
|
-
"outline-radius-topright",
|
|
393
|
-
"outline-style",
|
|
394
|
-
"outline-width",
|
|
395
|
-
"overflow",
|
|
396
|
-
"overflow-anchor",
|
|
397
|
-
"overflow-block",
|
|
398
|
-
"overflow-clip-box",
|
|
399
|
-
"overflow-clip-margin",
|
|
400
|
-
"overflow-inline",
|
|
401
|
-
"overflow-scrolling",
|
|
402
|
-
"overflow-style",
|
|
403
|
-
"overflow-wrap",
|
|
404
|
-
"overflow-x",
|
|
405
|
-
"overflow-y",
|
|
406
|
-
"overlay",
|
|
407
|
-
"overscroll-behavior",
|
|
408
|
-
"overscroll-behavior-block",
|
|
409
|
-
"overscroll-behavior-inline",
|
|
410
|
-
"overscroll-behavior-x",
|
|
411
|
-
"overscroll-behavior-y",
|
|
412
|
-
"padding",
|
|
413
|
-
"padding-block",
|
|
414
|
-
"padding-block-end",
|
|
415
|
-
"padding-block-start",
|
|
416
|
-
"padding-bottom",
|
|
417
|
-
"padding-inline",
|
|
418
|
-
"padding-inline-end",
|
|
419
|
-
"padding-inline-start",
|
|
420
|
-
"padding-left",
|
|
421
|
-
"padding-right",
|
|
422
|
-
"padding-top",
|
|
423
|
-
"page",
|
|
424
|
-
"page-break-after",
|
|
425
|
-
"page-break-before",
|
|
426
|
-
"page-break-inside",
|
|
427
|
-
"paint-order",
|
|
428
|
-
"perspective",
|
|
429
|
-
"perspective-origin",
|
|
430
|
-
"place-content",
|
|
431
|
-
"place-items",
|
|
432
|
-
"place-self",
|
|
433
|
-
"pointer-events",
|
|
434
|
-
"position",
|
|
435
|
-
"position-anchor",
|
|
436
|
-
"position-area",
|
|
437
|
-
"position-try",
|
|
438
|
-
"position-try-fallbacks",
|
|
439
|
-
"position-try-order",
|
|
440
|
-
"position-visibility",
|
|
441
|
-
"print-color-adjust",
|
|
442
|
-
"quotes",
|
|
443
|
-
"r",
|
|
444
|
-
"reading-flow",
|
|
445
|
-
"reading-order",
|
|
446
|
-
"resize",
|
|
447
|
-
"right",
|
|
448
|
-
"rotate",
|
|
449
|
-
"row-gap",
|
|
450
|
-
"ruby-align",
|
|
451
|
-
"ruby-merge",
|
|
452
|
-
"ruby-overhang",
|
|
453
|
-
"ruby-position",
|
|
454
|
-
"rx",
|
|
455
|
-
"ry",
|
|
456
|
-
"scale",
|
|
457
|
-
"scroll-behavior",
|
|
458
|
-
"scroll-chaining",
|
|
459
|
-
"scroll-initial-target",
|
|
460
|
-
"scroll-limit",
|
|
461
|
-
"scroll-limit-x-max",
|
|
462
|
-
"scroll-limit-x-min",
|
|
463
|
-
"scroll-limit-y-max",
|
|
464
|
-
"scroll-limit-y-min",
|
|
465
|
-
"scroll-margin",
|
|
466
|
-
"scroll-margin-block",
|
|
467
|
-
"scroll-margin-block-end",
|
|
468
|
-
"scroll-margin-block-start",
|
|
469
|
-
"scroll-margin-bottom",
|
|
470
|
-
"scroll-margin-inline",
|
|
471
|
-
"scroll-margin-inline-end",
|
|
472
|
-
"scroll-margin-inline-start",
|
|
473
|
-
"scroll-margin-left",
|
|
474
|
-
"scroll-margin-right",
|
|
475
|
-
"scroll-margin-top",
|
|
476
|
-
"scroll-marker-group",
|
|
477
|
-
"scroll-padding",
|
|
478
|
-
"scroll-padding-block",
|
|
479
|
-
"scroll-padding-block-end",
|
|
480
|
-
"scroll-padding-block-start",
|
|
481
|
-
"scroll-padding-bottom",
|
|
482
|
-
"scroll-padding-inline",
|
|
483
|
-
"scroll-padding-inline-end",
|
|
484
|
-
"scroll-padding-inline-start",
|
|
485
|
-
"scroll-padding-left",
|
|
486
|
-
"scroll-padding-right",
|
|
487
|
-
"scroll-padding-top",
|
|
488
|
-
"scroll-rails",
|
|
489
|
-
"scroll-snap-align",
|
|
490
|
-
"scroll-snap-coordinate",
|
|
491
|
-
"scroll-snap-destination",
|
|
492
|
-
"scroll-snap-points-x",
|
|
493
|
-
"scroll-snap-points-y",
|
|
494
|
-
"scroll-snap-stop",
|
|
495
|
-
"scroll-snap-type",
|
|
496
|
-
"scroll-snap-type-x",
|
|
497
|
-
"scroll-snap-type-y",
|
|
498
|
-
"scroll-snap-x",
|
|
499
|
-
"scroll-snap-y",
|
|
500
|
-
"scroll-target-group",
|
|
501
|
-
"scroll-timeline",
|
|
502
|
-
"scroll-timeline-axis",
|
|
503
|
-
"scroll-timeline-name",
|
|
504
|
-
"scroll-translation",
|
|
505
|
-
"scrollbar-3dlight-color",
|
|
506
|
-
"scrollbar-arrow-color",
|
|
507
|
-
"scrollbar-base-color",
|
|
508
|
-
"scrollbar-color",
|
|
509
|
-
"scrollbar-darkshadow-color",
|
|
510
|
-
"scrollbar-face-color",
|
|
511
|
-
"scrollbar-gutter",
|
|
512
|
-
"scrollbar-highlight-color",
|
|
513
|
-
"scrollbar-shadow-color",
|
|
514
|
-
"scrollbar-track-color",
|
|
515
|
-
"scrollbar-width",
|
|
516
|
-
"shape-image-threshold",
|
|
517
|
-
"shape-margin",
|
|
518
|
-
"shape-outside",
|
|
519
|
-
"shape-rendering",
|
|
520
|
-
"speak-as",
|
|
521
|
-
"stack-sizing",
|
|
522
|
-
"stop-color",
|
|
523
|
-
"stop-opacity",
|
|
524
|
-
"stroke",
|
|
525
|
-
"stroke-color",
|
|
526
|
-
"stroke-dasharray",
|
|
527
|
-
"stroke-dashoffset",
|
|
528
|
-
"stroke-linecap",
|
|
529
|
-
"stroke-linejoin",
|
|
530
|
-
"stroke-miterlimit",
|
|
531
|
-
"stroke-opacity",
|
|
532
|
-
"stroke-width",
|
|
533
|
-
"tab-size",
|
|
534
|
-
"table-layout",
|
|
535
|
-
"tap-highlight-color",
|
|
536
|
-
"text-align",
|
|
537
|
-
"text-align-last",
|
|
538
|
-
"text-anchor",
|
|
539
|
-
"text-autospace",
|
|
540
|
-
"text-blink",
|
|
541
|
-
"text-box",
|
|
542
|
-
"text-box-edge",
|
|
543
|
-
"text-box-trim",
|
|
544
|
-
"text-combine-upright",
|
|
545
|
-
"text-decoration",
|
|
546
|
-
"text-decoration-color",
|
|
547
|
-
"text-decoration-inset",
|
|
548
|
-
"text-decoration-line",
|
|
549
|
-
"text-decoration-skip",
|
|
550
|
-
"text-decoration-skip-ink",
|
|
551
|
-
"text-decoration-style",
|
|
552
|
-
"text-decoration-thickness",
|
|
553
|
-
"text-emphasis",
|
|
554
|
-
"text-emphasis-color",
|
|
555
|
-
"text-emphasis-position",
|
|
556
|
-
"text-emphasis-style",
|
|
557
|
-
"text-fill-color",
|
|
558
|
-
"text-indent",
|
|
559
|
-
"text-justify",
|
|
560
|
-
"text-orientation",
|
|
561
|
-
"text-overflow",
|
|
562
|
-
"text-rendering",
|
|
563
|
-
"text-shadow",
|
|
564
|
-
"text-size-adjust",
|
|
565
|
-
"text-spacing-trim",
|
|
566
|
-
"text-stroke",
|
|
567
|
-
"text-stroke-color",
|
|
568
|
-
"text-stroke-width",
|
|
569
|
-
"text-transform",
|
|
570
|
-
"text-underline-offset",
|
|
571
|
-
"text-underline-position",
|
|
572
|
-
"text-wrap",
|
|
573
|
-
"text-wrap-mode",
|
|
574
|
-
"text-wrap-style",
|
|
575
|
-
"timeline-scope",
|
|
576
|
-
"timeline-trigger",
|
|
577
|
-
"timeline-trigger-activation-range",
|
|
578
|
-
"timeline-trigger-activation-range-end",
|
|
579
|
-
"timeline-trigger-activation-range-start",
|
|
580
|
-
"timeline-trigger-active-range",
|
|
581
|
-
"timeline-trigger-active-range-end",
|
|
582
|
-
"timeline-trigger-active-range-start",
|
|
583
|
-
"timeline-trigger-name",
|
|
584
|
-
"timeline-trigger-source",
|
|
585
|
-
"top",
|
|
586
|
-
"touch-action",
|
|
587
|
-
"touch-callout",
|
|
588
|
-
"touch-select",
|
|
589
|
-
"transform",
|
|
590
|
-
"transform-box",
|
|
591
|
-
"transform-origin",
|
|
592
|
-
"transform-style",
|
|
593
|
-
"transition",
|
|
594
|
-
"transition-behavior",
|
|
595
|
-
"transition-delay",
|
|
596
|
-
"transition-duration",
|
|
597
|
-
"transition-property",
|
|
598
|
-
"transition-timing-function",
|
|
599
|
-
"translate",
|
|
600
|
-
"trigger-scope",
|
|
601
|
-
"unicode-bidi",
|
|
602
|
-
"user-focus",
|
|
603
|
-
"user-input",
|
|
604
|
-
"user-modify",
|
|
605
|
-
"user-select",
|
|
606
|
-
"vector-effect",
|
|
607
|
-
"vertical-align",
|
|
608
|
-
"view-timeline",
|
|
609
|
-
"view-timeline-axis",
|
|
610
|
-
"view-timeline-inset",
|
|
611
|
-
"view-timeline-name",
|
|
612
|
-
"view-transition-class",
|
|
613
|
-
"view-transition-name",
|
|
614
|
-
"visibility",
|
|
615
|
-
"white-space",
|
|
616
|
-
"white-space-collapse",
|
|
617
|
-
"widows",
|
|
618
|
-
"width",
|
|
619
|
-
"will-change",
|
|
620
|
-
"window-dragging",
|
|
621
|
-
"window-shadow",
|
|
622
|
-
"word-break",
|
|
623
|
-
"word-spacing",
|
|
624
|
-
"word-wrap",
|
|
625
|
-
"wrap-flow",
|
|
626
|
-
"wrap-margin",
|
|
627
|
-
"wrap-through",
|
|
628
|
-
"writing-mode",
|
|
629
|
-
"x",
|
|
630
|
-
"y",
|
|
631
|
-
"z-index",
|
|
632
|
-
"zoom"
|
|
633
|
-
]
|