@bookklik/senangstart-css 0.2.4 → 0.2.6
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/.agent/skills/add-utility/scripts/scaffold-utility.js +209 -0
- package/.agent/skills/compiler-development/SKILL.md +272 -0
- package/.agent/skills/jit-engine/SKILL.md +241 -0
- package/.agent/skills/jit-engine/examples/add-visual-utility.js +117 -0
- package/.agent/skills/jit-engine/examples/scale-based-utilities.js +130 -0
- package/.agent/skills/jit-engine/examples/state-responsive-handling.js +177 -0
- package/.agent/skills/senangstart-architecture/SKILL.md +163 -0
- package/.agent/skills/tailwind-conversion/SKILL.md +264 -0
- package/.agent/workflows/add-utility.md +155 -0
- package/.agent/workflows/build.md +97 -0
- package/.agent/workflows/dev.md +58 -0
- package/.agent/workflows/docs.md +113 -0
- package/.agent/workflows/test.md +103 -0
- package/dist/senangstart-css.js +165 -20
- package/dist/senangstart-css.min.js +39 -26
- package/dist/senangstart-tw.js +262 -52
- package/dist/senangstart-tw.min.js +1 -1
- package/docs/.vitepress/config.js +10 -2
- package/docs/guide/cdn.md +1 -1
- package/docs/ms/guide/cdn.md +1 -1
- package/docs/ms/reference/layout/position.md +4 -4
- package/docs/ms/reference/layout/z-index.md +8 -8
- package/docs/ms/reference/space/gap.md +1 -1
- package/docs/ms/reference/space/height.md +42 -7
- package/docs/ms/reference/space/margin.md +1 -1
- package/docs/ms/reference/space/padding.md +1 -1
- package/docs/ms/reference/space/scale-reference.md +46 -17
- package/docs/ms/reference/space/width.md +40 -5
- package/docs/ms/reference/space.md +1 -1
- package/docs/ms/reference/spacing.md +103 -21
- package/docs/ms/reference/visual/animation-fill.md +8 -8
- package/docs/ms/reference/visual/backdrop-blur.md +4 -4
- package/docs/ms/reference/visual/backdrop-brightness.md +8 -8
- package/docs/ms/reference/visual/backdrop-grayscale.md +6 -6
- package/docs/ms/reference/visual/backdrop-sepia.md +6 -6
- package/docs/ms/reference/visual/background-clip.md +2 -2
- package/docs/ms/reference/visual/background-image.md +4 -4
- package/docs/ms/reference/visual/divide-reverse.md +66 -0
- package/docs/ms/reference/visual/divide-style.md +80 -0
- package/docs/ms/reference/visual/divide-width.md +89 -0
- package/docs/ms/reference/visual/divide.md +115 -0
- package/docs/ms/reference/visual/filter-brightness.md +4 -4
- package/docs/ms/reference/visual/filter-contrast.md +4 -4
- package/docs/ms/reference/visual/filter-drop-shadow.md +6 -6
- package/docs/ms/reference/visual/filter-grayscale.md +4 -4
- package/docs/ms/reference/visual/filter-hue-rotate.md +4 -4
- package/docs/ms/reference/visual/filter-invert.md +2 -2
- package/docs/ms/reference/visual/filter-saturate.md +4 -4
- package/docs/ms/reference/visual/filter-sepia.md +4 -4
- package/docs/ms/reference/visual/font-family.md +2 -2
- package/docs/ms/reference/visual/gradient-from.md +57 -57
- package/docs/ms/reference/visual/gradient-to.md +57 -57
- package/docs/ms/reference/visual/gradient-via.md +54 -54
- package/docs/ms/reference/visual/letter-spacing.md +2 -2
- package/docs/ms/reference/visual/line-clamp.md +2 -2
- package/docs/ms/reference/visual/line-height.md +2 -2
- package/docs/ms/reference/visual/outline.md +2 -2
- package/docs/ms/reference/visual/ring-color.md +29 -0
- package/docs/ms/reference/visual/ring-offset.md +30 -0
- package/docs/ms/reference/visual/ring.md +62 -0
- package/docs/ms/reference/visual/stroke-width.md +6 -6
- package/docs/ms/reference/visual/stroke.md +4 -4
- package/docs/ms/reference/visual/text-indent.md +2 -2
- package/docs/ms/reference/visual/text-overflow.md +2 -2
- package/docs/ms/reference/visual/text-size.md +2 -2
- package/docs/ms/reference/visual/text-wrap.md +2 -2
- package/docs/ms/reference/visual/transform-backface.md +4 -4
- package/docs/ms/reference/visual/transform-perspective-origin.md +6 -6
- package/docs/ms/reference/visual/transform-perspective.md +6 -6
- package/docs/ms/reference/visual/transform-rotate-3d.md +6 -6
- package/docs/ms/reference/visual/transform-style.md +4 -4
- package/docs/ms/reference/visual/transform-translate-z.md +6 -6
- package/docs/ms/reference/visual/transform-translate.md +2 -2
- package/docs/ms/reference/visual/whitespace.md +2 -2
- package/docs/ms/reference/visual/word-break.md +2 -2
- package/docs/public/assets/senangstart-css.min.js +39 -26
- package/docs/public/llms.txt +1756 -0
- package/docs/reference/layout/position.md +4 -4
- package/docs/reference/layout/z-index.md +8 -8
- package/docs/reference/space/gap.md +1 -1
- package/docs/reference/space/height.md +42 -7
- package/docs/reference/space/margin.md +1 -1
- package/docs/reference/space/padding.md +1 -1
- package/docs/reference/space/scale-reference.md +46 -17
- package/docs/reference/space/width.md +40 -5
- package/docs/reference/space.md +1 -1
- package/docs/reference/spacing.md +103 -21
- package/docs/reference/visual/animation-fill.md +8 -8
- package/docs/reference/visual/backdrop-blur.md +4 -4
- package/docs/reference/visual/backdrop-brightness.md +8 -8
- package/docs/reference/visual/backdrop-grayscale.md +6 -6
- package/docs/reference/visual/backdrop-sepia.md +6 -6
- package/docs/reference/visual/background-clip.md +2 -2
- package/docs/reference/visual/background-image.md +4 -4
- package/docs/reference/visual/divide-reverse.md +66 -0
- package/docs/reference/visual/divide-style.md +80 -0
- package/docs/reference/visual/divide-width.md +89 -0
- package/docs/reference/visual/divide.md +115 -0
- package/docs/reference/visual/filter-brightness.md +4 -4
- package/docs/reference/visual/filter-contrast.md +4 -4
- package/docs/reference/visual/filter-drop-shadow.md +6 -6
- package/docs/reference/visual/filter-grayscale.md +4 -4
- package/docs/reference/visual/filter-hue-rotate.md +4 -4
- package/docs/reference/visual/filter-invert.md +2 -2
- package/docs/reference/visual/filter-saturate.md +4 -4
- package/docs/reference/visual/filter-sepia.md +4 -4
- package/docs/reference/visual/font-family.md +2 -2
- package/docs/reference/visual/gradient-from.md +57 -57
- package/docs/reference/visual/gradient-to.md +57 -57
- package/docs/reference/visual/gradient-via.md +54 -54
- package/docs/reference/visual/letter-spacing.md +2 -2
- package/docs/reference/visual/line-clamp.md +2 -2
- package/docs/reference/visual/line-height.md +2 -2
- package/docs/reference/visual/outline.md +2 -2
- package/docs/reference/visual/ring-color.md +29 -0
- package/docs/reference/visual/ring-offset.md +30 -0
- package/docs/reference/visual/ring.md +62 -0
- package/docs/reference/visual/stroke-width.md +6 -6
- package/docs/reference/visual/stroke.md +4 -4
- package/docs/reference/visual/text-indent.md +2 -2
- package/docs/reference/visual/text-overflow.md +2 -2
- package/docs/reference/visual/text-size.md +2 -2
- package/docs/reference/visual/text-wrap.md +2 -2
- package/docs/reference/visual/transform-backface.md +4 -4
- package/docs/reference/visual/transform-perspective-origin.md +6 -6
- package/docs/reference/visual/transform-perspective.md +6 -6
- package/docs/reference/visual/transform-rotate-3d.md +6 -6
- package/docs/reference/visual/transform-style.md +4 -4
- package/docs/reference/visual/transform-translate-z.md +6 -6
- package/docs/reference/visual/transform-translate.md +2 -2
- package/docs/reference/visual/whitespace.md +2 -2
- package/docs/reference/visual/word-break.md +2 -2
- package/docs/reference/visual.md +8 -2
- package/package.json +4 -2
- package/scripts/build-dist.js +2 -2
- package/scripts/bundle-jit.js +3 -3
- package/scripts/convert-tailwind.js +250 -2
- package/scripts/generate-llms-txt.js +264 -0
- package/src/cdn/{jit.js → senangstart-engine.js} +184 -38
- package/src/cdn/tw-conversion-engine.js +282 -68
- package/src/compiler/generators/css.js +115 -2
- package/src/config/defaults.js +37 -11
- package/src/core/constants.js +37 -8
- package/src/definitions/index.js +3 -0
- package/src/definitions/space.js +97 -20
- package/src/definitions/visual-borders.js +80 -1
- package/src/definitions/visual-divide.js +225 -0
- package/src/definitions/visual-transform3d.js +16 -16
- package/src/definitions/visual-transforms.js +1 -1
- package/src/definitions/visual-transitions.js +4 -4
- package/src/definitions/visual-typography.js +6 -6
- package/src/definitions/visual.js +4 -4
- package/tests/unit/compiler/generators/css.test.js +267 -3
- package/tests/unit/convert-tailwind.test.js +59 -1
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Run tests including unit, integration, sync, and coverage reports
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
// turbo-all
|
|
6
|
+
|
|
7
|
+
# Testing Workflow
|
|
8
|
+
|
|
9
|
+
## Run All Tests
|
|
10
|
+
|
|
11
|
+
// turbo
|
|
12
|
+
1. Execute the full test suite:
|
|
13
|
+
```bash
|
|
14
|
+
npm test
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
## Unit Tests Only
|
|
18
|
+
|
|
19
|
+
// turbo
|
|
20
|
+
1. Run unit tests:
|
|
21
|
+
```bash
|
|
22
|
+
npm run test:unit
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
Unit tests cover:
|
|
26
|
+
- `tests/unit/compiler/` - CSS generators and parser tests
|
|
27
|
+
- `tests/unit/config/` - Configuration loading tests
|
|
28
|
+
- `tests/unit/convert-tailwind.test.js` - TW conversion tests
|
|
29
|
+
- `tests/unit/security.test.js` - Security validation tests
|
|
30
|
+
|
|
31
|
+
## Integration Tests
|
|
32
|
+
|
|
33
|
+
// turbo
|
|
34
|
+
1. Run integration tests:
|
|
35
|
+
```bash
|
|
36
|
+
npm run test:integration
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
Integration tests in `tests/integration/` verify end-to-end compilation.
|
|
40
|
+
|
|
41
|
+
## Sync Tests
|
|
42
|
+
|
|
43
|
+
// turbo
|
|
44
|
+
1. Run sync tests:
|
|
45
|
+
```bash
|
|
46
|
+
npm run test:sync
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
Sync tests in `tests/sync/` verify definition-to-engine parity.
|
|
50
|
+
|
|
51
|
+
## Watch Mode
|
|
52
|
+
|
|
53
|
+
// turbo
|
|
54
|
+
1. Run tests in watch mode for TDD:
|
|
55
|
+
```bash
|
|
56
|
+
npm run test:watch
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
## Coverage Report
|
|
60
|
+
|
|
61
|
+
1. Generate test coverage report:
|
|
62
|
+
```bash
|
|
63
|
+
npm run test:coverage
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
This creates:
|
|
67
|
+
- Console text report
|
|
68
|
+
- HTML report in `coverage/` directory
|
|
69
|
+
|
|
70
|
+
## Test File Structure
|
|
71
|
+
|
|
72
|
+
```
|
|
73
|
+
tests/
|
|
74
|
+
├── helpers/ # Test utilities
|
|
75
|
+
├── integration/ # End-to-end tests
|
|
76
|
+
├── sync/ # Definition sync tests
|
|
77
|
+
└── unit/
|
|
78
|
+
├── compiler/
|
|
79
|
+
│ ├── generators/
|
|
80
|
+
│ │ ├── 3d-transforms.test.js
|
|
81
|
+
│ │ ├── css.test.js
|
|
82
|
+
│ │ └── html.test.js
|
|
83
|
+
│ └── parser.test.js
|
|
84
|
+
├── config/
|
|
85
|
+
│ └── config.test.js
|
|
86
|
+
├── convert-tailwind.test.js
|
|
87
|
+
└── security.test.js
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
## Writing New Tests
|
|
91
|
+
|
|
92
|
+
1. Create test file in appropriate `tests/` subdirectory
|
|
93
|
+
2. Use Node.js built-in test runner:
|
|
94
|
+
```javascript
|
|
95
|
+
import { test, describe } from 'node:test';
|
|
96
|
+
import assert from 'node:assert';
|
|
97
|
+
|
|
98
|
+
describe('MyFeature', () => {
|
|
99
|
+
test('should do something', () => {
|
|
100
|
+
assert.strictEqual(actual, expected);
|
|
101
|
+
});
|
|
102
|
+
});
|
|
103
|
+
```
|
package/dist/senangstart-css.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
(() => {
|
|
3
3
|
// src/core/constants.js
|
|
4
4
|
var BREAKPOINTS = ["mob", "tab", "lap", "desk", "tw-sm", "tw-md", "tw-lg", "tw-xl", "tw-2xl"];
|
|
5
|
-
var STATES = ["hover", "focus", "active", "disabled", "dark"];
|
|
5
|
+
var STATES = ["hover", "focus", "focus-visible", "active", "disabled", "dark"];
|
|
6
6
|
var LAYOUT_KEYWORDS = [
|
|
7
7
|
"flex",
|
|
8
8
|
"grid",
|
|
@@ -171,22 +171,54 @@
|
|
|
171
171
|
return token;
|
|
172
172
|
}
|
|
173
173
|
|
|
174
|
-
// src/cdn/
|
|
174
|
+
// src/cdn/senangstart-engine.js
|
|
175
175
|
(function() {
|
|
176
176
|
"use strict";
|
|
177
177
|
const defaultConfig = {
|
|
178
178
|
theme: {
|
|
179
179
|
spacing: {
|
|
180
180
|
"none": "0px",
|
|
181
|
+
// No space
|
|
181
182
|
"thin": "1px",
|
|
183
|
+
// Hairline (for borders)
|
|
182
184
|
"regular": "2px",
|
|
185
|
+
// Standard border
|
|
183
186
|
"thick": "3px",
|
|
187
|
+
// Bold border
|
|
184
188
|
"tiny": "4px",
|
|
189
|
+
// Small offsets
|
|
190
|
+
"tiny-2x": "6px",
|
|
191
|
+
// Tiny multiplied
|
|
185
192
|
"small": "8px",
|
|
193
|
+
"small-2x": "10px",
|
|
194
|
+
"small-3x": "12px",
|
|
195
|
+
"small-4x": "14px",
|
|
186
196
|
"medium": "16px",
|
|
187
|
-
"
|
|
188
|
-
"
|
|
189
|
-
"
|
|
197
|
+
"medium-2x": "20px",
|
|
198
|
+
"medium-3x": "24px",
|
|
199
|
+
"medium-4x": "28px",
|
|
200
|
+
"large": "32px",
|
|
201
|
+
"large-2x": "36px",
|
|
202
|
+
"large-3x": "40px",
|
|
203
|
+
"large-4x": "44px",
|
|
204
|
+
"big": "48px",
|
|
205
|
+
"big-2x": "56px",
|
|
206
|
+
"big-3x": "64px",
|
|
207
|
+
"big-4x": "80px",
|
|
208
|
+
"giant": "96px",
|
|
209
|
+
"giant-2x": "112px",
|
|
210
|
+
"giant-3x": "128px",
|
|
211
|
+
"giant-4x": "144px",
|
|
212
|
+
"vast": "160px",
|
|
213
|
+
"vast-2x": "176px",
|
|
214
|
+
"vast-3x": "192px",
|
|
215
|
+
"vast-4x": "208px",
|
|
216
|
+
"vast-5x": "224px",
|
|
217
|
+
"vast-6x": "240px",
|
|
218
|
+
"vast-7x": "256px",
|
|
219
|
+
"vast-8x": "288px",
|
|
220
|
+
"vast-9x": "320px",
|
|
221
|
+
"vast-10x": "384px"
|
|
190
222
|
},
|
|
191
223
|
radius: {
|
|
192
224
|
"none": "0px",
|
|
@@ -559,6 +591,15 @@
|
|
|
559
591
|
"mid": "50",
|
|
560
592
|
"high": "100",
|
|
561
593
|
"top": "9999"
|
|
594
|
+
},
|
|
595
|
+
ring: {
|
|
596
|
+
"none": "0px",
|
|
597
|
+
"thin": "1px",
|
|
598
|
+
"regular": "2px",
|
|
599
|
+
"thick": "3px",
|
|
600
|
+
"small": "4px",
|
|
601
|
+
"medium": "6px",
|
|
602
|
+
"big": "8px"
|
|
562
603
|
}
|
|
563
604
|
},
|
|
564
605
|
// Dark mode configuration
|
|
@@ -581,7 +622,8 @@
|
|
|
581
622
|
fontWeight: { type: "object" },
|
|
582
623
|
screens: { type: "object" },
|
|
583
624
|
colors: { type: "object" },
|
|
584
|
-
zIndex: { type: "object" }
|
|
625
|
+
zIndex: { type: "object" },
|
|
626
|
+
ring: { type: "object" }
|
|
585
627
|
}
|
|
586
628
|
},
|
|
587
629
|
darkMode: { type: "string", enum: ["media", "selector"] },
|
|
@@ -675,6 +717,18 @@
|
|
|
675
717
|
css += ` --z-${key}: ${value};
|
|
676
718
|
`;
|
|
677
719
|
}
|
|
720
|
+
if (theme.ring) {
|
|
721
|
+
for (const [key, value] of Object.entries(theme.ring)) {
|
|
722
|
+
css += ` --ring-${key}: ${value};
|
|
723
|
+
`;
|
|
724
|
+
}
|
|
725
|
+
}
|
|
726
|
+
css += ` --ring-color: var(--c-primary);
|
|
727
|
+
`;
|
|
728
|
+
css += ` --ring-offset: 0px;
|
|
729
|
+
`;
|
|
730
|
+
css += ` --ring-offset-color: #fff;
|
|
731
|
+
`;
|
|
678
732
|
const twSpacing = {
|
|
679
733
|
"0": "0px",
|
|
680
734
|
"px": "1px",
|
|
@@ -1306,6 +1360,24 @@ img, video {
|
|
|
1306
1360
|
};
|
|
1307
1361
|
return autoMap[property] || "";
|
|
1308
1362
|
}
|
|
1363
|
+
const sizingSpecialValues = {
|
|
1364
|
+
"min": "min-content",
|
|
1365
|
+
"max": "max-content",
|
|
1366
|
+
"fit": "fit-content"
|
|
1367
|
+
};
|
|
1368
|
+
const sizingProps = ["w", "h", "min-w", "max-w", "min-h", "max-h"];
|
|
1369
|
+
if (sizingProps.includes(property) && sizingSpecialValues[value]) {
|
|
1370
|
+
const cssValue2 = sizingSpecialValues[value];
|
|
1371
|
+
const propMap = {
|
|
1372
|
+
"w": `width: ${cssValue2};`,
|
|
1373
|
+
"h": `height: ${cssValue2};`,
|
|
1374
|
+
"min-w": `min-width: ${cssValue2};`,
|
|
1375
|
+
"max-w": `max-width: ${cssValue2};`,
|
|
1376
|
+
"min-h": `min-height: ${cssValue2};`,
|
|
1377
|
+
"max-h": `max-height: ${cssValue2};`
|
|
1378
|
+
};
|
|
1379
|
+
return propMap[property] || "";
|
|
1380
|
+
}
|
|
1309
1381
|
let cssValue;
|
|
1310
1382
|
if (isArbitrary) {
|
|
1311
1383
|
cssValue = value;
|
|
@@ -2102,6 +2174,80 @@ img, video {
|
|
|
2102
2174
|
return `outline-offset: ${cssValue};`;
|
|
2103
2175
|
},
|
|
2104
2176
|
// ============================================
|
|
2177
|
+
// RING UTILITIES (Focus Ring)
|
|
2178
|
+
// ============================================
|
|
2179
|
+
"ring": () => {
|
|
2180
|
+
if (value === "none") {
|
|
2181
|
+
return `box-shadow: 0 0 0 0 transparent;`;
|
|
2182
|
+
}
|
|
2183
|
+
const cssValue = isArbitrary ? value : `var(--ring-${value})`;
|
|
2184
|
+
return `box-shadow: 0 0 0 var(--ring-offset) var(--ring-offset-color), 0 0 0 calc(${cssValue} + var(--ring-offset)) var(--ring-color);`;
|
|
2185
|
+
},
|
|
2186
|
+
"ring-color": () => {
|
|
2187
|
+
const cssValue = isArbitrary ? value : `var(--c-${value})`;
|
|
2188
|
+
return `--ring-color: ${cssValue};`;
|
|
2189
|
+
},
|
|
2190
|
+
"ring-offset": () => {
|
|
2191
|
+
const cssValue = isArbitrary ? value : `${value}px`;
|
|
2192
|
+
return `--ring-offset: ${cssValue};`;
|
|
2193
|
+
},
|
|
2194
|
+
"ring-offset-color": () => {
|
|
2195
|
+
const cssValue = isArbitrary ? value : `var(--c-${value})`;
|
|
2196
|
+
return `--ring-offset-color ${cssValue};`;
|
|
2197
|
+
},
|
|
2198
|
+
// ============================================
|
|
2199
|
+
// DIVIDE UTILITIES
|
|
2200
|
+
// ============================================
|
|
2201
|
+
"divide": () => {
|
|
2202
|
+
const cssValue = isArbitrary ? value : `var(--c-${value})`;
|
|
2203
|
+
return `border-color: ${cssValue}; border-style: solid;`;
|
|
2204
|
+
},
|
|
2205
|
+
"divide-x": () => {
|
|
2206
|
+
if (value === "reverse") {
|
|
2207
|
+
return "--ss-divide-x-reverse: 1;";
|
|
2208
|
+
}
|
|
2209
|
+
const cssValue = isArbitrary ? value : `var(--c-${value})`;
|
|
2210
|
+
return `border-left-color: ${cssValue}; border-right-color: ${cssValue}; border-left-style: solid; border-right-style: solid;`;
|
|
2211
|
+
},
|
|
2212
|
+
"divide-y": () => {
|
|
2213
|
+
if (value === "reverse") {
|
|
2214
|
+
return "--ss-divide-y-reverse: 1;";
|
|
2215
|
+
}
|
|
2216
|
+
const cssValue = isArbitrary ? value : `var(--c-${value})`;
|
|
2217
|
+
return `border-top-color: ${cssValue}; border-bottom-color: ${cssValue}; border-top-style: solid; border-bottom-style: solid;`;
|
|
2218
|
+
},
|
|
2219
|
+
"divide-w": () => {
|
|
2220
|
+
const cssValue = isArbitrary ? value : `var(--s-${value})`;
|
|
2221
|
+
return `border-width: ${cssValue}; border-style: solid;`;
|
|
2222
|
+
},
|
|
2223
|
+
"divide-x-w": () => {
|
|
2224
|
+
const cssValue = isArbitrary ? value : `var(--s-${value})`;
|
|
2225
|
+
return `
|
|
2226
|
+
border-right-width: calc(${cssValue} * var(--ss-divide-x-reverse, 0));
|
|
2227
|
+
border-left-width: calc(${cssValue} * (1 - var(--ss-divide-x-reverse, 0)));
|
|
2228
|
+
border-left-style: solid;
|
|
2229
|
+
border-right-style: solid;
|
|
2230
|
+
`;
|
|
2231
|
+
},
|
|
2232
|
+
"divide-y-w": () => {
|
|
2233
|
+
const cssValue = isArbitrary ? value : `var(--s-${value})`;
|
|
2234
|
+
return `
|
|
2235
|
+
border-bottom-width: calc(${cssValue} * var(--ss-divide-y-reverse, 0));
|
|
2236
|
+
border-top-width: calc(${cssValue} * (1 - var(--ss-divide-y-reverse, 0)));
|
|
2237
|
+
border-top-style: solid;
|
|
2238
|
+
border-bottom-style: solid;
|
|
2239
|
+
`;
|
|
2240
|
+
},
|
|
2241
|
+
"divide-x:reverse": () => {
|
|
2242
|
+
return "--ss-divide-x-reverse: 1;";
|
|
2243
|
+
},
|
|
2244
|
+
"divide-y:reverse": () => {
|
|
2245
|
+
return "--ss-divide-y-reverse: 1;";
|
|
2246
|
+
},
|
|
2247
|
+
"divide-style": () => {
|
|
2248
|
+
return `border-style: ${value};`;
|
|
2249
|
+
},
|
|
2250
|
+
// ============================================
|
|
2105
2251
|
// SVG UTILITIES
|
|
2106
2252
|
// ============================================
|
|
2107
2253
|
"stroke": () => {
|
|
@@ -2194,23 +2340,22 @@ img, video {
|
|
|
2194
2340
|
break;
|
|
2195
2341
|
}
|
|
2196
2342
|
if (!cssDeclaration) return "";
|
|
2197
|
-
|
|
2198
|
-
|
|
2199
|
-
|
|
2200
|
-
|
|
2201
|
-
|
|
2202
|
-
`;
|
|
2203
|
-
if (token.state === "dark") {
|
|
2204
|
-
rule = `:where(.dark) ${rule}`;
|
|
2343
|
+
const isDivide = raw.startsWith("divide") && !raw.includes(":reverse");
|
|
2344
|
+
let selector = "";
|
|
2345
|
+
if (isDivide) {
|
|
2346
|
+
selector = `[visual~="${raw}"] > :not([hidden]) ~ :not([hidden])`;
|
|
2347
|
+
} else {
|
|
2348
|
+
selector = `[${attrType}~="${raw}"]`;
|
|
2205
2349
|
}
|
|
2206
|
-
if (token.
|
|
2207
|
-
|
|
2208
|
-
|
|
2209
|
-
|
|
2210
|
-
`;
|
|
2350
|
+
if (token.state && token.state !== "dark") {
|
|
2351
|
+
if (isDivide) {
|
|
2352
|
+
selector = `[visual~="${raw}"] > :not([hidden]) ~ :not([hidden]):${token.state}`;
|
|
2353
|
+
} else {
|
|
2354
|
+
selector += `:${token.state}`;
|
|
2211
2355
|
}
|
|
2212
2356
|
}
|
|
2213
|
-
return
|
|
2357
|
+
return `${selector} { ${cssDeclaration} }
|
|
2358
|
+
`;
|
|
2214
2359
|
}
|
|
2215
2360
|
function scanDOM() {
|
|
2216
2361
|
const tokens = {
|