@bookklik/senangstart-css 0.2.9 → 0.2.10
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/dist/senangstart-css.js +254 -38
- package/dist/senangstart-css.min.js +191 -153
- package/dist/senangstart-tw.js +271 -5
- package/dist/senangstart-tw.min.js +1 -1
- package/docs/SYNTAX-REFERENCE.md +1731 -1590
- package/docs/guide/preflight.md +20 -1
- package/docs/ms/guide/preflight.md +19 -0
- package/docs/ms/reference/breakpoints.md +14 -0
- package/docs/ms/reference/visual/border-radius.md +50 -10
- package/docs/ms/reference/visual/contain.md +57 -0
- package/docs/ms/reference/visual/content-visibility.md +53 -0
- package/docs/ms/reference/visual/placeholder-color.md +92 -0
- package/docs/ms/reference/visual/writing-mode.md +53 -0
- package/docs/ms/reference/visual.md +6 -0
- package/docs/public/assets/senangstart-css.min.js +191 -153
- package/docs/public/llms.txt +35 -2
- package/docs/reference/breakpoints.md +14 -0
- package/docs/reference/visual/border-radius.md +50 -10
- package/docs/reference/visual/contain.md +57 -0
- package/docs/reference/visual/content-visibility.md +53 -0
- package/docs/reference/visual/placeholder-color.md +92 -0
- package/docs/reference/visual/writing-mode.md +53 -0
- package/docs/reference/visual.md +7 -0
- package/docs/syntax-reference.json +2185 -2009
- package/package.json +1 -1
- package/scripts/convert-tailwind.js +300 -26
- package/scripts/generate-docs.js +403 -403
- package/src/cdn/senangstart-engine.js +5 -5
- package/src/cdn/tw-conversion-engine.js +302 -5
- package/src/cli/commands/build.js +10 -0
- package/src/compiler/generators/css.js +102 -15
- package/src/compiler/generators/preflight.js +26 -13
- package/src/compiler/generators/typescript.js +3 -1
- package/src/compiler/index.js +27 -3
- package/src/compiler/parser.js +13 -6
- package/src/config/defaults.js +3 -0
- package/src/definitions/index.js +4 -1
- package/src/definitions/visual-performance.js +126 -0
- package/src/definitions/visual.js +25 -9
- package/src/utils/common.js +17 -5
- package/tests/unit/compiler/generators/css.test.js +102 -5
- package/tests/unit/convert-tailwind.test.js +15 -4
package/dist/senangstart-css.js
CHANGED
|
@@ -39,11 +39,16 @@
|
|
|
39
39
|
if (typeof value !== "string") {
|
|
40
40
|
return "";
|
|
41
41
|
}
|
|
42
|
+
let sanitized = value;
|
|
42
43
|
const dangerousChars = /[;]/g;
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
44
|
+
sanitized = sanitized.replace(dangerousChars, "_");
|
|
45
|
+
const atRules = /@import|@charset|@namespace|@supports|@keyframes/gi;
|
|
46
|
+
sanitized = sanitized.replace(atRules, "");
|
|
47
|
+
const expression = /expression\s*\(/gi;
|
|
48
|
+
sanitized = sanitized.replace(expression, "");
|
|
49
|
+
const dangerousUrls = /(url\s*\(\s*['"]?)(javascript:|data:)([^)]*\))/gi;
|
|
50
|
+
sanitized = sanitized.replace(dangerousUrls, "$1about:blank$3");
|
|
51
|
+
return sanitized;
|
|
47
52
|
}
|
|
48
53
|
|
|
49
54
|
// src/core/tokenizer-core.js
|
|
@@ -221,10 +226,13 @@ hr {
|
|
|
221
226
|
}
|
|
222
227
|
|
|
223
228
|
/*
|
|
224
|
-
*
|
|
229
|
+
* Set default placeholder color to a semi-transparent gray
|
|
230
|
+
* Uses theme variable for customization with fallback
|
|
225
231
|
*/
|
|
226
|
-
|
|
227
|
-
|
|
232
|
+
input::placeholder,
|
|
233
|
+
textarea::placeholder {
|
|
234
|
+
opacity: 1; /* 1 */
|
|
235
|
+
color: var(--placeholder-color, #9ca3af); /* 2 */
|
|
228
236
|
}
|
|
229
237
|
|
|
230
238
|
/*
|
|
@@ -367,10 +375,17 @@ input:where([type='submit']) {
|
|
|
367
375
|
}
|
|
368
376
|
|
|
369
377
|
/*
|
|
370
|
-
* Add the correct
|
|
378
|
+
* Add the correct text decoration in Chrome, Edge, and Safari
|
|
371
379
|
*/
|
|
372
|
-
|
|
373
|
-
|
|
380
|
+
abbr:where([title]) {
|
|
381
|
+
text-decoration: underline dotted;
|
|
382
|
+
}
|
|
383
|
+
|
|
384
|
+
/*
|
|
385
|
+
* Make sure links don't get underlined in headings
|
|
386
|
+
*/
|
|
387
|
+
h1, h2, h3, h4, h5, h6 {
|
|
388
|
+
text-decoration: none;
|
|
374
389
|
}
|
|
375
390
|
|
|
376
391
|
/*
|
|
@@ -442,14 +457,17 @@ legend {
|
|
|
442
457
|
}
|
|
443
458
|
|
|
444
459
|
/*
|
|
445
|
-
*
|
|
460
|
+
* 1. Use a more sensible default box-sizing strategy
|
|
446
461
|
*/
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
padding:
|
|
462
|
+
*,
|
|
463
|
+
::before,
|
|
464
|
+
::after {
|
|
465
|
+
box-sizing: border-box;
|
|
466
|
+
/* Support safe-area-inset for modern devices with notches */
|
|
467
|
+
padding-top: env(safe-area-inset-top);
|
|
468
|
+
padding-right: env(safe-area-inset-right);
|
|
469
|
+
padding-bottom: env(safe-area-inset-bottom);
|
|
470
|
+
padding-left: env(safe-area-inset-left);
|
|
453
471
|
}
|
|
454
472
|
|
|
455
473
|
/*
|
|
@@ -3151,11 +3169,12 @@ video {
|
|
|
3151
3169
|
var borderRadius = {
|
|
3152
3170
|
name: "border-radius",
|
|
3153
3171
|
property: "visual",
|
|
3154
|
-
syntax: 'visual="rounded:[value]"',
|
|
3155
|
-
description: "Set border radius",
|
|
3156
|
-
descriptionMs: "Tetapkan jejari sempadan",
|
|
3172
|
+
syntax: 'visual="rounded:[value]" | visual="rounded-{t|b|l|r|tl|tr|bl|br}:[value]"',
|
|
3173
|
+
description: "Set border radius for all corners or specific corners",
|
|
3174
|
+
descriptionMs: "Tetapkan jejari sempadan untuk semua bucu atau bucu tertentu",
|
|
3157
3175
|
category: "visual",
|
|
3158
3176
|
usesScale: "radius",
|
|
3177
|
+
supportsArbitrary: true,
|
|
3159
3178
|
values: [
|
|
3160
3179
|
{ value: "none", css: "border-radius: var(--r-none);", description: "No rounding", descriptionMs: "Tiada pembulatan" },
|
|
3161
3180
|
{ value: "small", css: "border-radius: var(--r-small);", description: "Small radius", descriptionMs: "Jejari kecil" },
|
|
@@ -3164,8 +3183,10 @@ video {
|
|
|
3164
3183
|
{ value: "round", css: "border-radius: var(--r-round);", description: "Fully round", descriptionMs: "Sepenuhnya bulat" }
|
|
3165
3184
|
],
|
|
3166
3185
|
examples: [
|
|
3167
|
-
{ code: '<div visual="rounded:medium">Rounded corners</div>', description: "
|
|
3168
|
-
{ code: '<div visual="rounded:round">Pill shape</div>', description: "
|
|
3186
|
+
{ code: '<div visual="rounded:medium">Rounded corners</div>', description: "All corners rounded" },
|
|
3187
|
+
{ code: '<div visual="rounded:round">Pill shape</div>', description: "Fully round" },
|
|
3188
|
+
{ code: '<div visual="rounded-t:medium">Top rounded</div>', description: "Top corners only" },
|
|
3189
|
+
{ code: '<div visual="rounded-tl:big rounded-br:big">Opposite corners</div>', description: "Specific corners" }
|
|
3169
3190
|
],
|
|
3170
3191
|
footnotes: [
|
|
3171
3192
|
{
|
|
@@ -3183,12 +3204,25 @@ video {
|
|
|
3183
3204
|
description: "Round element corners from subtle to pill-shaped",
|
|
3184
3205
|
descriptionMs: "Bulatkan sudut elemen dari halus hingga berbentuk pil",
|
|
3185
3206
|
html: `<div layout="flex" space="g:medium p:medium" visual="bg:neutral-100 dark:bg:neutral-900 rounded:medium">
|
|
3186
|
-
|
|
3187
|
-
|
|
3188
|
-
|
|
3189
|
-
|
|
3207
|
+
<div space="p:small" visual="bg:primary text:white rounded:none">none</div>
|
|
3208
|
+
<div space="p:small" visual="bg:primary text:white rounded:small">small</div>
|
|
3209
|
+
<div space="p:small" visual="bg:primary text:white rounded:medium">medium</div>
|
|
3210
|
+
<div space="p:small" visual="bg:primary text:white rounded:round">round</div>
|
|
3190
3211
|
</div>`,
|
|
3191
3212
|
highlightValue: "rounded:medium"
|
|
3213
|
+
},
|
|
3214
|
+
{
|
|
3215
|
+
title: "Directional Border Radius",
|
|
3216
|
+
titleMs: "Jejari Sempadan Arah",
|
|
3217
|
+
description: "Round specific corners for unique shapes",
|
|
3218
|
+
descriptionMs: "Bulatkan bucu tertentu untuk bentuk unik",
|
|
3219
|
+
html: `<div layout="flex" space="g:medium p:medium" visual="bg:neutral-100 dark:bg:neutral-900 rounded:medium">
|
|
3220
|
+
<div space="p:small" visual="bg:primary text:white rounded-t:medium">top</div>
|
|
3221
|
+
<div space="p:small" visual="bg:primary text:white rounded-b:medium">bottom</div>
|
|
3222
|
+
<div space="p:small" visual="bg:primary text:white rounded-l:medium">left</div>
|
|
3223
|
+
<div space="p:small" visual="bg:primary text:white rounded-r:medium">right</div>
|
|
3224
|
+
</div>`,
|
|
3225
|
+
highlightValue: "rounded-t:medium"
|
|
3192
3226
|
}
|
|
3193
3227
|
]
|
|
3194
3228
|
};
|
|
@@ -6828,6 +6862,112 @@ video {
|
|
|
6828
6862
|
};
|
|
6829
6863
|
var visual_svg_default = svgDefinitions;
|
|
6830
6864
|
|
|
6865
|
+
// src/definitions/visual-performance.js
|
|
6866
|
+
var contentVisibility = {
|
|
6867
|
+
name: "content-visibility",
|
|
6868
|
+
property: "visual",
|
|
6869
|
+
syntax: 'visual="content-visibility:[value]"',
|
|
6870
|
+
description: "Optimize rendering by skipping off-screen content",
|
|
6871
|
+
descriptionMs: "Optimumkan rendering dengan melangkau kandungan luar skrin",
|
|
6872
|
+
category: "visual",
|
|
6873
|
+
values: [
|
|
6874
|
+
{ value: "visible", css: "content-visibility: visible;", description: "Render all content", descriptionMs: "Render semua kandungan" },
|
|
6875
|
+
{ value: "auto", css: "content-visibility: auto;", description: "Skip when off-screen", descriptionMs: "Langkau bila luar skrin" },
|
|
6876
|
+
{ value: "hidden", css: "content-visibility: hidden;", description: "Never render off-screen", descriptionMs: "Jangan render luar skrin" }
|
|
6877
|
+
],
|
|
6878
|
+
examples: [
|
|
6879
|
+
{ code: '<section visual="content-visibility:auto">Large list</section>', description: "Auto-optimize large content" },
|
|
6880
|
+
{ code: '<div visual="content-visibility:hidden">Hidden until needed</div>', description: "Hide until revealed" }
|
|
6881
|
+
],
|
|
6882
|
+
preview: [
|
|
6883
|
+
{
|
|
6884
|
+
title: "Content Visibility",
|
|
6885
|
+
titleMs: "Ketampakan Kandungan",
|
|
6886
|
+
description: "Performance optimization for off-screen content",
|
|
6887
|
+
descriptionMs: "Pengoptimuman prestasi untuk kandungan luar skrin",
|
|
6888
|
+
html: `<div layout="flex" space="g:medium p:medium" visual="bg:neutral-100 dark:bg:neutral-900 rounded:medium">
|
|
6889
|
+
<div space="p:small" visual="bg:primary text:white rounded:small">visible</div>
|
|
6890
|
+
<div space="p:small" visual="bg:primary text:white rounded:small">auto</div>
|
|
6891
|
+
<div space="p:small" visual="bg:primary text:white rounded:small">hidden</div>
|
|
6892
|
+
</div>`,
|
|
6893
|
+
highlightValue: "content-visibility:auto"
|
|
6894
|
+
}
|
|
6895
|
+
]
|
|
6896
|
+
};
|
|
6897
|
+
var contain = {
|
|
6898
|
+
name: "contain",
|
|
6899
|
+
property: "visual",
|
|
6900
|
+
syntax: 'visual="contain:[value]"',
|
|
6901
|
+
description: "Isolate element rendering for performance",
|
|
6902
|
+
descriptionMs: "Pencil rendering elemen untuk prestasi",
|
|
6903
|
+
category: "visual",
|
|
6904
|
+
values: [
|
|
6905
|
+
{ value: "none", css: "contain: none;", description: "No containment", descriptionMs: "Tiada pengandungan" },
|
|
6906
|
+
{ value: "strict", css: "contain: strict;", description: "Full containment", descriptionMs: "Pengandungan penuh" },
|
|
6907
|
+
{ value: "content", css: "contain: content;", description: "Content containment", descriptionMs: "Pengandungan kandungan" },
|
|
6908
|
+
{ value: "size", css: "contain: size;", description: "Size containment", descriptionMs: "Pengandungan saiz" },
|
|
6909
|
+
{ value: "layout", css: "contain: layout;", description: "Layout containment", descriptionMs: "Pengandungan susun atur" },
|
|
6910
|
+
{ value: "style", css: "contain: style;", description: "Style containment", descriptionMs: "Pengandungan gaya" },
|
|
6911
|
+
{ value: "paint", css: "contain: paint;", description: "Paint containment", descriptionMs: "Pengandungan lukis" }
|
|
6912
|
+
],
|
|
6913
|
+
examples: [
|
|
6914
|
+
{ code: '<div visual="contain:strict">Isolated rendering</div>', description: "Full containment" },
|
|
6915
|
+
{ code: '<div visual="contain:content">Content isolation</div>', description: "Content only" }
|
|
6916
|
+
],
|
|
6917
|
+
preview: [
|
|
6918
|
+
{
|
|
6919
|
+
title: "Contain",
|
|
6920
|
+
titleMs: "Mengandung",
|
|
6921
|
+
description: "Isolate element from rest of page for performance",
|
|
6922
|
+
descriptionMs: "Pencil elemen dari halaman lain untuk prestasi",
|
|
6923
|
+
html: `<div layout="flex" space="g:medium p:medium" visual="bg:neutral-100 dark:bg:neutral-900 rounded:medium">
|
|
6924
|
+
<div space="p:small" visual="bg:primary text:white rounded:small">none</div>
|
|
6925
|
+
<div space="p:small" visual="bg:primary text:white rounded:small">content</div>
|
|
6926
|
+
<div space="p:small" visual="bg:primary text:white rounded:small">strict</div>
|
|
6927
|
+
</div>`,
|
|
6928
|
+
highlightValue: "contain:strict"
|
|
6929
|
+
}
|
|
6930
|
+
]
|
|
6931
|
+
};
|
|
6932
|
+
var writingMode = {
|
|
6933
|
+
name: "writing-mode",
|
|
6934
|
+
property: "visual",
|
|
6935
|
+
syntax: 'visual="writing-mode:[value]"',
|
|
6936
|
+
description: "Set writing direction for RTL/vertical text",
|
|
6937
|
+
descriptionMs: "Tetapkan arah penulisan untuk teks RTL/menegak",
|
|
6938
|
+
category: "visual",
|
|
6939
|
+
values: [
|
|
6940
|
+
{ value: "horizontal-tb", css: "writing-mode: horizontal-tb;", description: "Left to right", descriptionMs: "Kiri ke kanan" },
|
|
6941
|
+
{ value: "vertical-rl", css: "writing-mode: vertical-rl;", description: "Top to bottom RTL", descriptionMs: "Atas ke bawah RTL" },
|
|
6942
|
+
{ value: "vertical-lr", css: "writing-mode: vertical-lr;", description: "Top to bottom LTR", descriptionMs: "Atas ke bawah LTR" },
|
|
6943
|
+
{ value: "sideways-rl", css: "writing-mode: sideways-rl;", description: "Sideways RTL", descriptionMs: "Menyerong RTL" },
|
|
6944
|
+
{ value: "sideways-lr", css: "writing-mode: sideways-lr;", description: "Sideways LTR", descriptionMs: "Menyerong LTR" }
|
|
6945
|
+
],
|
|
6946
|
+
examples: [
|
|
6947
|
+
{ code: '<div visual="writing-mode:vertical-rl">Vertical text</div>', description: "Vertical text RTL" },
|
|
6948
|
+
{ code: '<div visual="writing-mode:horizontal-tb">Horizontal text</div>', description: "Horizontal text LTR" }
|
|
6949
|
+
],
|
|
6950
|
+
preview: [
|
|
6951
|
+
{
|
|
6952
|
+
title: "Writing Mode",
|
|
6953
|
+
titleMs: "Mod Penulisan",
|
|
6954
|
+
description: "Control text direction and orientation",
|
|
6955
|
+
descriptionMs: "Kawal arah dan orientasi teks",
|
|
6956
|
+
html: `<div layout="flex" space="g:medium p:medium" visual="bg:neutral-100 dark:bg:neutral-900 rounded:medium">
|
|
6957
|
+
<div space="p:small" visual="bg:primary text:white rounded:small">horizontal-tb</div>
|
|
6958
|
+
<div space="p:small" visual="bg:primary text:white rounded:small">vertical-rl</div>
|
|
6959
|
+
</div>`,
|
|
6960
|
+
highlightValue: "writing-mode:vertical-rl"
|
|
6961
|
+
}
|
|
6962
|
+
]
|
|
6963
|
+
};
|
|
6964
|
+
var performanceDefinitions = {
|
|
6965
|
+
contentVisibility,
|
|
6966
|
+
contain,
|
|
6967
|
+
writingMode
|
|
6968
|
+
};
|
|
6969
|
+
var visual_performance_default = performanceDefinitions;
|
|
6970
|
+
|
|
6831
6971
|
// src/definitions/index.js
|
|
6832
6972
|
var allVisualDefinitions = {
|
|
6833
6973
|
...visual_default,
|
|
@@ -6840,7 +6980,8 @@ video {
|
|
|
6840
6980
|
...visual_transforms_default,
|
|
6841
6981
|
...visual_borders_default,
|
|
6842
6982
|
...visual_divide_default,
|
|
6843
|
-
...visual_svg_default
|
|
6983
|
+
...visual_svg_default,
|
|
6984
|
+
...visual_performance_default
|
|
6844
6985
|
};
|
|
6845
6986
|
function buildAllMaps() {
|
|
6846
6987
|
return {
|
|
@@ -6898,6 +7039,16 @@ video {
|
|
|
6898
7039
|
css += ` --c-${key}: ${value};
|
|
6899
7040
|
`;
|
|
6900
7041
|
}
|
|
7042
|
+
if (theme.placeholder) {
|
|
7043
|
+
css += ` --placeholder-color: ${theme.placeholder};
|
|
7044
|
+
`;
|
|
7045
|
+
} else {
|
|
7046
|
+
css += " --placeholder-color: #9ca3af;\n";
|
|
7047
|
+
}
|
|
7048
|
+
css += " --gradient-from: transparent;\n";
|
|
7049
|
+
css += " --gradient-via: transparent;\n";
|
|
7050
|
+
css += " --gradient-to: transparent;\n";
|
|
7051
|
+
css += " --gradient-stops: var(--gradient-from), var(--gradient-via), var(--gradient-to);\n";
|
|
6901
7052
|
for (const [key, value] of Object.entries(theme.zIndex)) {
|
|
6902
7053
|
css += ` --z-${key}: ${value};
|
|
6903
7054
|
`;
|
|
@@ -7025,6 +7176,9 @@ video {
|
|
|
7025
7176
|
css += ` --tw-font-${key}: ${value};
|
|
7026
7177
|
`;
|
|
7027
7178
|
}
|
|
7179
|
+
css += " --ss-divide-x-reverse: 0;\n";
|
|
7180
|
+
css += " --ss-divide-y-reverse: 0;\n";
|
|
7181
|
+
css += " --ring-inset: 0 0 0 0;\n";
|
|
7028
7182
|
css += "}\n\n";
|
|
7029
7183
|
return css;
|
|
7030
7184
|
}
|
|
@@ -7130,6 +7284,31 @@ video {
|
|
|
7130
7284
|
const cssValue = isArbitrary ? value.replace(/_/g, " ") : value;
|
|
7131
7285
|
return `object-position: ${cssValue};`;
|
|
7132
7286
|
}
|
|
7287
|
+
if (property === "content-visibility") {
|
|
7288
|
+
return `content-visibility: ${value};`;
|
|
7289
|
+
}
|
|
7290
|
+
if (property === "contain") {
|
|
7291
|
+
const containMap = {
|
|
7292
|
+
"none": "none",
|
|
7293
|
+
"strict": "strict",
|
|
7294
|
+
"content": "content",
|
|
7295
|
+
"size": "size",
|
|
7296
|
+
"layout": "layout",
|
|
7297
|
+
"style": "style",
|
|
7298
|
+
"paint": "paint"
|
|
7299
|
+
};
|
|
7300
|
+
const cssValue = isArbitrary ? value : containMap[value] || value;
|
|
7301
|
+
return `contain: ${cssValue};`;
|
|
7302
|
+
}
|
|
7303
|
+
if (property === "writing") {
|
|
7304
|
+
const writingMap = {
|
|
7305
|
+
"horizontal-tb": "horizontal-tb",
|
|
7306
|
+
"vertical-rl": "vertical-rl",
|
|
7307
|
+
"vertical-lr": "vertical-lr"
|
|
7308
|
+
};
|
|
7309
|
+
const cssValue = isArbitrary ? value.replace(/_/g, " ") : writingMap[value] || value;
|
|
7310
|
+
return `writing-mode: ${cssValue};`;
|
|
7311
|
+
}
|
|
7133
7312
|
const positioningPercentages = {
|
|
7134
7313
|
"full": "100%",
|
|
7135
7314
|
"half": "50%",
|
|
@@ -7659,32 +7838,32 @@ video {
|
|
|
7659
7838
|
// Border width
|
|
7660
7839
|
"border-w": () => {
|
|
7661
7840
|
const cssValue = isArbitrary ? value : `var(--s-${value})`;
|
|
7662
|
-
return `border-width: ${cssValue}
|
|
7841
|
+
return `border-width: ${cssValue};`;
|
|
7663
7842
|
},
|
|
7664
7843
|
// Border width - directional
|
|
7665
7844
|
"border-t-w": () => {
|
|
7666
7845
|
const cssValue = isArbitrary ? value : `var(--s-${value})`;
|
|
7667
|
-
return `border-top-width: ${cssValue}
|
|
7846
|
+
return `border-top-width: ${cssValue};`;
|
|
7668
7847
|
},
|
|
7669
7848
|
"border-b-w": () => {
|
|
7670
7849
|
const cssValue = isArbitrary ? value : `var(--s-${value})`;
|
|
7671
|
-
return `border-bottom-width: ${cssValue}
|
|
7850
|
+
return `border-bottom-width: ${cssValue};`;
|
|
7672
7851
|
},
|
|
7673
7852
|
"border-l-w": () => {
|
|
7674
7853
|
const cssValue = isArbitrary ? value : `var(--s-${value})`;
|
|
7675
|
-
return `border-left-width: ${cssValue}
|
|
7854
|
+
return `border-left-width: ${cssValue};`;
|
|
7676
7855
|
},
|
|
7677
7856
|
"border-r-w": () => {
|
|
7678
7857
|
const cssValue = isArbitrary ? value : `var(--s-${value})`;
|
|
7679
|
-
return `border-right-width: ${cssValue}
|
|
7858
|
+
return `border-right-width: ${cssValue};`;
|
|
7680
7859
|
},
|
|
7681
7860
|
"border-x-w": () => {
|
|
7682
7861
|
const cssValue = isArbitrary ? value : `var(--s-${value})`;
|
|
7683
|
-
return `border-left-width: ${cssValue}; border-right-width: ${cssValue}
|
|
7862
|
+
return `border-left-width: ${cssValue}; border-right-width: ${cssValue};`;
|
|
7684
7863
|
},
|
|
7685
7864
|
"border-y-w": () => {
|
|
7686
7865
|
const cssValue = isArbitrary ? value : `var(--s-${value})`;
|
|
7687
|
-
return `border-top-width: ${cssValue}; border-bottom-width: ${cssValue}
|
|
7866
|
+
return `border-top-width: ${cssValue}; border-bottom-width: ${cssValue};`;
|
|
7688
7867
|
},
|
|
7689
7868
|
// Border style
|
|
7690
7869
|
"border-style": () => {
|
|
@@ -7694,6 +7873,39 @@ video {
|
|
|
7694
7873
|
"rounded": () => {
|
|
7695
7874
|
return `border-radius: var(--r-${value});`;
|
|
7696
7875
|
},
|
|
7876
|
+
// Directional border radius
|
|
7877
|
+
"rounded-t": () => {
|
|
7878
|
+
const cssValue = isArbitrary ? value : `var(--r-${value})`;
|
|
7879
|
+
return `border-top-left-radius: ${cssValue}; border-top-right-radius: ${cssValue};`;
|
|
7880
|
+
},
|
|
7881
|
+
"rounded-b": () => {
|
|
7882
|
+
const cssValue = isArbitrary ? value : `var(--r-${value})`;
|
|
7883
|
+
return `border-bottom-left-radius: ${cssValue}; border-bottom-right-radius: ${cssValue};`;
|
|
7884
|
+
},
|
|
7885
|
+
"rounded-l": () => {
|
|
7886
|
+
const cssValue = isArbitrary ? value : `var(--r-${value})`;
|
|
7887
|
+
return `border-top-left-radius: ${cssValue}; border-bottom-left-radius: ${cssValue};`;
|
|
7888
|
+
},
|
|
7889
|
+
"rounded-r": () => {
|
|
7890
|
+
const cssValue = isArbitrary ? value : `var(--r-${value})`;
|
|
7891
|
+
return `border-top-right-radius: ${cssValue}; border-bottom-right-radius: ${cssValue};`;
|
|
7892
|
+
},
|
|
7893
|
+
"rounded-tl": () => {
|
|
7894
|
+
const cssValue = isArbitrary ? value : `var(--r-${value})`;
|
|
7895
|
+
return `border-top-left-radius: ${cssValue};`;
|
|
7896
|
+
},
|
|
7897
|
+
"rounded-tr": () => {
|
|
7898
|
+
const cssValue = isArbitrary ? value : `var(--r-${value})`;
|
|
7899
|
+
return `border-top-right-radius: ${cssValue};`;
|
|
7900
|
+
},
|
|
7901
|
+
"rounded-bl": () => {
|
|
7902
|
+
const cssValue = isArbitrary ? value : `var(--r-${value})`;
|
|
7903
|
+
return `border-bottom-left-radius: ${cssValue};`;
|
|
7904
|
+
},
|
|
7905
|
+
"rounded-br": () => {
|
|
7906
|
+
const cssValue = isArbitrary ? value : `var(--r-${value})`;
|
|
7907
|
+
return `border-bottom-right-radius: ${cssValue};`;
|
|
7908
|
+
},
|
|
7697
7909
|
// =====================
|
|
7698
7910
|
// DIVIDE UTILITIES
|
|
7699
7911
|
// =====================
|
|
@@ -7720,16 +7932,16 @@ video {
|
|
|
7720
7932
|
// Divide width - all sides
|
|
7721
7933
|
"divide-w": () => {
|
|
7722
7934
|
const cssValue = isArbitrary ? value : `var(--s-${value})`;
|
|
7723
|
-
return `border-width: ${cssValue}; border-
|
|
7935
|
+
return `border-top-width: calc(${cssValue} * (1 - var(--ss-divide-y-reverse))); border-bottom-width: calc(${cssValue} * var(--ss-divide-y-reverse)); border-left-width: calc(${cssValue} * (1 - var(--ss-divide-x-reverse))); border-right-width: calc(${cssValue} * var(--ss-divide-x-reverse));`;
|
|
7724
7936
|
},
|
|
7725
7937
|
// Divide width - directional
|
|
7726
7938
|
"divide-x-w": () => {
|
|
7727
7939
|
const cssValue = isArbitrary ? value : `var(--s-${value})`;
|
|
7728
|
-
return `border-
|
|
7940
|
+
return `border-right-width: calc(${cssValue} * var(--ss-divide-x-reverse)); border-left-width: calc(${cssValue} * (1 - var(--ss-divide-x-reverse)));`;
|
|
7729
7941
|
},
|
|
7730
7942
|
"divide-y-w": () => {
|
|
7731
7943
|
const cssValue = isArbitrary ? value : `var(--s-${value})`;
|
|
7732
|
-
return `border-
|
|
7944
|
+
return `border-bottom-width: calc(${cssValue} * var(--ss-divide-y-reverse)); border-top-width: calc(${cssValue} * (1 - var(--ss-divide-y-reverse)));`;
|
|
7733
7945
|
},
|
|
7734
7946
|
// Divide style
|
|
7735
7947
|
"divide-style": () => {
|
|
@@ -7787,7 +7999,7 @@ video {
|
|
|
7787
7999
|
"big": "8px"
|
|
7788
8000
|
};
|
|
7789
8001
|
const width2 = isArbitrary ? value : ringPresets[value] || (parseInt(value) ? `${value}px` : `var(--s-${value})`);
|
|
7790
|
-
return `--ss-ring-width: ${width2}; box-shadow: var(--
|
|
8002
|
+
return `--ss-ring-width: ${width2}; box-shadow: var(--ring-inset) 0 0 0 calc(var(--ss-ring-width) + var(--ss-ring-offset-width, 0px)) var(--c-primary);`;
|
|
7791
8003
|
},
|
|
7792
8004
|
// Box shadow
|
|
7793
8005
|
"shadow": () => {
|
|
@@ -8953,6 +9165,8 @@ video {
|
|
|
8953
9165
|
// Laptop
|
|
8954
9166
|
"desk": "1280px",
|
|
8955
9167
|
// Desktop
|
|
9168
|
+
"print": "print",
|
|
9169
|
+
// Print media query
|
|
8956
9170
|
// Tailwind Compatibility
|
|
8957
9171
|
"tw-sm": "640px",
|
|
8958
9172
|
"tw-md": "768px",
|
|
@@ -8961,6 +9175,8 @@ video {
|
|
|
8961
9175
|
"tw-2xl": "1536px"
|
|
8962
9176
|
},
|
|
8963
9177
|
// 7. COLORS: Palette Scales
|
|
9178
|
+
// Placeholder color for form inputs
|
|
9179
|
+
placeholder: "#9ca3af",
|
|
8964
9180
|
colors: {
|
|
8965
9181
|
// Base colors
|
|
8966
9182
|
"white": "#FFFFFF",
|