jasmincss 1.0.6 → 1.0.8
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/JASMINCSS-GUIDE.md +33 -3
- package/bin/jasmin.js +0 -0
- package/dist/index.js +165 -87
- package/dist/index.mjs +165 -87
- package/dist/jasmin.css +4533 -3991
- package/dist/jasmin.min.css +1 -1
- package/dist/plugins/jasmin-loader.js +165 -87
- package/dist/plugins/jasmin-loader.mjs +165 -87
- package/dist/plugins/nextjs.js +168 -88
- package/dist/plugins/nextjs.mjs +168 -87
- package/dist/plugins/vite.js +168 -88
- package/dist/plugins/vite.mjs +168 -87
- package/package.json +1 -1
- package/src/cli/init.js +172 -9
- package/src/cli/run.js +18 -0
- package/src/components/buttons.js +1 -1
- package/src/components/forms.js +6 -6
- package/src/config/defaults.js +4 -1
- package/src/core/compiler.js +96 -5
- package/src/core/utilities/icons.js +0 -1
- package/src/core/utilities/index.js +8 -6
- package/src/core/utilities/layout.js +27 -27
- package/src/core/utilities/spacing.js +33 -33
- package/src/core/utilities/transforms.js +8 -8
package/JASMINCSS-GUIDE.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
> **Complete reference of all available utility classes and components**
|
|
4
4
|
>
|
|
5
|
-
> Generated automatically from JasminCSS v1.0.
|
|
5
|
+
> Generated automatically from JasminCSS v1.0.8
|
|
6
6
|
|
|
7
7
|
## Table of Contents
|
|
8
8
|
|
|
@@ -387,7 +387,7 @@
|
|
|
387
387
|
| `aspect-auto` | `aspect-ratio: auto;` |
|
|
388
388
|
| `aspect-square` | `aspect-ratio: 1 / 1;` |
|
|
389
389
|
| `aspect-video` | `aspect-ratio: 16 / 9;` |
|
|
390
|
-
| `aspect-4
|
|
390
|
+
| `aspect-4/3` | `aspect-ratio: 4 / 3;` |
|
|
391
391
|
| `visible` | `visibility: visible;` |
|
|
392
392
|
| `invisible` | `visibility: hidden;` |
|
|
393
393
|
| `collapse` | `visibility: collapse;` |
|
|
@@ -1017,6 +1017,8 @@
|
|
|
1017
1017
|
| `rounded-xl` | `border-radius: 1rem;` |
|
|
1018
1018
|
| `rounded-2xl` | `border-radius: 1.5rem;` |
|
|
1019
1019
|
| `rounded-full` | `border-radius: 9999px;` |
|
|
1020
|
+
| `rounded-buttons` | `border-radius: 0.5rem;` |
|
|
1021
|
+
| `rounded-inputs` | `border-radius: 0.5rem;` |
|
|
1020
1022
|
| `rounded-t-none` | `border-top-left-radius: 0; border-top-right-radius: 0;` |
|
|
1021
1023
|
| `rounded-r-none` | `border-top-right-radius: 0; border-bottom-right-radius: 0;` |
|
|
1022
1024
|
| `rounded-b-none` | `border-bottom-left-radius: 0; border-bottom-right-radius: 0;` |
|
|
@@ -1129,6 +1131,34 @@
|
|
|
1129
1131
|
| `rounded-se-full` | `border-start-end-radius: 9999px;` |
|
|
1130
1132
|
| `rounded-ee-full` | `border-end-end-radius: 9999px;` |
|
|
1131
1133
|
| `rounded-es-full` | `border-end-start-radius: 9999px;` |
|
|
1134
|
+
| `rounded-t-buttons` | `border-top-left-radius: 0.5rem; border-top-right-radius: 0.5rem;` |
|
|
1135
|
+
| `rounded-r-buttons` | `border-top-right-radius: 0.5rem; border-bottom-right-radius: 0.5rem;` |
|
|
1136
|
+
| `rounded-b-buttons` | `border-bottom-left-radius: 0.5rem; border-bottom-right-radius: 0.5rem;` |
|
|
1137
|
+
| `rounded-l-buttons` | `border-top-left-radius: 0.5rem; border-bottom-left-radius: 0.5rem;` |
|
|
1138
|
+
| `rounded-tl-buttons` | `border-top-left-radius: 0.5rem;` |
|
|
1139
|
+
| `rounded-tr-buttons` | `border-top-right-radius: 0.5rem;` |
|
|
1140
|
+
| `rounded-br-buttons` | `border-bottom-right-radius: 0.5rem;` |
|
|
1141
|
+
| `rounded-bl-buttons` | `border-bottom-left-radius: 0.5rem;` |
|
|
1142
|
+
| `rounded-s-buttons` | `border-start-start-radius: 0.5rem; border-end-start-radius: 0.5rem;` |
|
|
1143
|
+
| `rounded-e-buttons` | `border-start-end-radius: 0.5rem; border-end-end-radius: 0.5rem;` |
|
|
1144
|
+
| `rounded-ss-buttons` | `border-start-start-radius: 0.5rem;` |
|
|
1145
|
+
| `rounded-se-buttons` | `border-start-end-radius: 0.5rem;` |
|
|
1146
|
+
| `rounded-ee-buttons` | `border-end-end-radius: 0.5rem;` |
|
|
1147
|
+
| `rounded-es-buttons` | `border-end-start-radius: 0.5rem;` |
|
|
1148
|
+
| `rounded-t-inputs` | `border-top-left-radius: 0.5rem; border-top-right-radius: 0.5rem;` |
|
|
1149
|
+
| `rounded-r-inputs` | `border-top-right-radius: 0.5rem; border-bottom-right-radius: 0.5rem;` |
|
|
1150
|
+
| `rounded-b-inputs` | `border-bottom-left-radius: 0.5rem; border-bottom-right-radius: 0.5rem;` |
|
|
1151
|
+
| `rounded-l-inputs` | `border-top-left-radius: 0.5rem; border-bottom-left-radius: 0.5rem;` |
|
|
1152
|
+
| `rounded-tl-inputs` | `border-top-left-radius: 0.5rem;` |
|
|
1153
|
+
| `rounded-tr-inputs` | `border-top-right-radius: 0.5rem;` |
|
|
1154
|
+
| `rounded-br-inputs` | `border-bottom-right-radius: 0.5rem;` |
|
|
1155
|
+
| `rounded-bl-inputs` | `border-bottom-left-radius: 0.5rem;` |
|
|
1156
|
+
| `rounded-s-inputs` | `border-start-start-radius: 0.5rem; border-end-start-radius: 0.5rem;` |
|
|
1157
|
+
| `rounded-e-inputs` | `border-start-end-radius: 0.5rem; border-end-end-radius: 0.5rem;` |
|
|
1158
|
+
| `rounded-ss-inputs` | `border-start-start-radius: 0.5rem;` |
|
|
1159
|
+
| `rounded-se-inputs` | `border-start-end-radius: 0.5rem;` |
|
|
1160
|
+
| `rounded-ee-inputs` | `border-end-end-radius: 0.5rem;` |
|
|
1161
|
+
| `rounded-es-inputs` | `border-end-start-radius: 0.5rem;` |
|
|
1132
1162
|
| `border-0` | `border-width: 0px;` |
|
|
1133
1163
|
| `border` | `border-width: 1px;` |
|
|
1134
1164
|
| `border-2` | `border-width: 2px;` |
|
|
@@ -2393,6 +2423,6 @@ export default withJasminCSS({});
|
|
|
2393
2423
|
|
|
2394
2424
|
---
|
|
2395
2425
|
|
|
2396
|
-
**Total utility classes: 5,
|
|
2426
|
+
**Total utility classes: 5,956**
|
|
2397
2427
|
|
|
2398
2428
|
Generated on 2026-01-16
|
package/bin/jasmin.js
CHANGED
|
File without changes
|
package/dist/index.js
CHANGED
|
@@ -46,6 +46,7 @@ var import_fs2 = __toESM(require("fs"), 1);
|
|
|
46
46
|
var import_fast_glob = __toESM(require("fast-glob"), 1);
|
|
47
47
|
var import_postcss = __toESM(require("postcss"), 1);
|
|
48
48
|
var import_cssnano = __toESM(require("cssnano"), 1);
|
|
49
|
+
var import_picocolors = __toESM(require("picocolors"), 1);
|
|
49
50
|
|
|
50
51
|
// src/config/loader.js
|
|
51
52
|
var import_fs = __toESM(require("fs"), 1);
|
|
@@ -94,7 +95,12 @@ var defaultConfig = {
|
|
|
94
95
|
lg: "0.75rem",
|
|
95
96
|
xl: "1rem",
|
|
96
97
|
"2xl": "1.5rem",
|
|
97
|
-
full: "9999px"
|
|
98
|
+
full: "9999px",
|
|
99
|
+
// Component-specific border radius
|
|
100
|
+
buttons: "0.5rem",
|
|
101
|
+
// Separate radius for buttons
|
|
102
|
+
inputs: "0.5rem"
|
|
103
|
+
// Separate radius for form inputs, cards, etc.
|
|
98
104
|
},
|
|
99
105
|
shadows: {
|
|
100
106
|
sm: "0 1px 2px 0 rgb(0 0 0 / 0.05)",
|
|
@@ -498,10 +504,10 @@ function generateLayoutUtilities(config) {
|
|
|
498
504
|
});
|
|
499
505
|
const spacing = config.spacing || {};
|
|
500
506
|
Object.entries(spacing).forEach(([key, value]) => {
|
|
501
|
-
const safeName = key.replace(
|
|
502
|
-
classes.push({ name: `gap-${
|
|
503
|
-
classes.push({ name: `gap-x-${
|
|
504
|
-
classes.push({ name: `gap-y-${
|
|
507
|
+
const safeName = key.replace(/\./g, "\\.");
|
|
508
|
+
classes.push({ name: `gap-${key}`, css: `.gap-${safeName} { gap: ${value}; }` });
|
|
509
|
+
classes.push({ name: `gap-x-${key}`, css: `.gap-x-${safeName} { column-gap: ${value}; }` });
|
|
510
|
+
classes.push({ name: `gap-y-${key}`, css: `.gap-y-${safeName} { row-gap: ${value}; }` });
|
|
505
511
|
});
|
|
506
512
|
for (let i = 1; i <= 12; i++) {
|
|
507
513
|
classes.push({
|
|
@@ -555,20 +561,20 @@ function generateLayoutUtilities(config) {
|
|
|
555
561
|
});
|
|
556
562
|
const insetValues = { "0": "0", "auto": "auto", "full": "100%", "1/2": "50%", "1/3": "33.333333%", "2/3": "66.666667%", "1/4": "25%", "3/4": "75%" };
|
|
557
563
|
Object.entries({ ...spacing, ...insetValues }).forEach(([key, value]) => {
|
|
558
|
-
const safeName = key.replace(
|
|
559
|
-
classes.push({ name: `inset-${
|
|
560
|
-
classes.push({ name: `inset-x-${
|
|
561
|
-
classes.push({ name: `inset-y-${
|
|
562
|
-
classes.push({ name: `top-${
|
|
563
|
-
classes.push({ name: `right-${
|
|
564
|
-
classes.push({ name: `bottom-${
|
|
565
|
-
classes.push({ name: `left-${
|
|
564
|
+
const safeName = key.replace(/\//g, "\\/").replace(/\./g, "\\.");
|
|
565
|
+
classes.push({ name: `inset-${key}`, css: `.inset-${safeName} { inset: ${value}; }` });
|
|
566
|
+
classes.push({ name: `inset-x-${key}`, css: `.inset-x-${safeName} { left: ${value}; right: ${value}; }` });
|
|
567
|
+
classes.push({ name: `inset-y-${key}`, css: `.inset-y-${safeName} { top: ${value}; bottom: ${value}; }` });
|
|
568
|
+
classes.push({ name: `top-${key}`, css: `.top-${safeName} { top: ${value}; }` });
|
|
569
|
+
classes.push({ name: `right-${key}`, css: `.right-${safeName} { right: ${value}; }` });
|
|
570
|
+
classes.push({ name: `bottom-${key}`, css: `.bottom-${safeName} { bottom: ${value}; }` });
|
|
571
|
+
classes.push({ name: `left-${key}`, css: `.left-${safeName} { left: ${value}; }` });
|
|
566
572
|
if (key !== "auto" && key !== "full" && !key.includes("/")) {
|
|
567
|
-
classes.push({ name: `-inset-${
|
|
568
|
-
classes.push({ name: `-top-${
|
|
569
|
-
classes.push({ name: `-right-${
|
|
570
|
-
classes.push({ name: `-bottom-${
|
|
571
|
-
classes.push({ name: `-left-${
|
|
573
|
+
classes.push({ name: `-inset-${key}`, css: `.-inset-${safeName} { inset: -${value}; }` });
|
|
574
|
+
classes.push({ name: `-top-${key}`, css: `.-top-${safeName} { top: -${value}; }` });
|
|
575
|
+
classes.push({ name: `-right-${key}`, css: `.-right-${safeName} { right: -${value}; }` });
|
|
576
|
+
classes.push({ name: `-bottom-${key}`, css: `.-bottom-${safeName} { bottom: -${value}; }` });
|
|
577
|
+
classes.push({ name: `-left-${key}`, css: `.-left-${safeName} { left: -${value}; }` });
|
|
572
578
|
}
|
|
573
579
|
});
|
|
574
580
|
["auto", "0", "10", "20", "30", "40", "50"].forEach((z) => {
|
|
@@ -619,8 +625,8 @@ function generateLayoutUtilities(config) {
|
|
|
619
625
|
"11/12": "91.666667%"
|
|
620
626
|
};
|
|
621
627
|
Object.entries({ ...spacing, ...widthSizes }).forEach(([key, value]) => {
|
|
622
|
-
const safeName = key.replace(
|
|
623
|
-
classes.push({ name: `w-${
|
|
628
|
+
const safeName = key.replace(/\//g, "\\/").replace(/\./g, "\\.");
|
|
629
|
+
classes.push({ name: `w-${key}`, css: `.w-${safeName} { width: ${value}; }` });
|
|
624
630
|
});
|
|
625
631
|
const heightSizes = {
|
|
626
632
|
"0": "0",
|
|
@@ -648,8 +654,8 @@ function generateLayoutUtilities(config) {
|
|
|
648
654
|
"5/6": "83.333333%"
|
|
649
655
|
};
|
|
650
656
|
Object.entries({ ...spacing, ...heightSizes }).forEach(([key, value]) => {
|
|
651
|
-
const safeName = key.replace(
|
|
652
|
-
classes.push({ name: `h-${
|
|
657
|
+
const safeName = key.replace(/\//g, "\\/").replace(/\./g, "\\.");
|
|
658
|
+
classes.push({ name: `h-${key}`, css: `.h-${safeName} { height: ${value}; }` });
|
|
653
659
|
});
|
|
654
660
|
const minMaxWidths = { "0": "0", "none": "none", "xs": "20rem", "sm": "24rem", "md": "28rem", "lg": "32rem", "xl": "36rem", "2xl": "42rem", "3xl": "48rem", "4xl": "56rem", "5xl": "64rem", "6xl": "72rem", "7xl": "80rem", "full": "100%", "min": "min-content", "max": "max-content", "fit": "fit-content", "prose": "65ch", "screen-sm": "640px", "screen-md": "768px", "screen-lg": "1024px", "screen-xl": "1280px", "screen-2xl": "1536px" };
|
|
655
661
|
Object.entries(minMaxWidths).forEach(([key, value]) => {
|
|
@@ -662,14 +668,14 @@ function generateLayoutUtilities(config) {
|
|
|
662
668
|
classes.push({ name: `max-h-${key}`, css: `.max-h-${key} { max-height: ${value}; }` });
|
|
663
669
|
});
|
|
664
670
|
Object.entries(spacing).forEach(([key, value]) => {
|
|
665
|
-
const safeName = key.replace(
|
|
666
|
-
classes.push({ name: `min-h-${
|
|
667
|
-
classes.push({ name: `max-h-${
|
|
671
|
+
const safeName = key.replace(/\./g, "\\.");
|
|
672
|
+
classes.push({ name: `min-h-${key}`, css: `.min-h-${safeName} { min-height: ${value}; }` });
|
|
673
|
+
classes.push({ name: `max-h-${key}`, css: `.max-h-${safeName} { max-height: ${value}; }` });
|
|
668
674
|
});
|
|
669
675
|
Object.entries({ ...spacing, ...widthSizes }).forEach(([key, value]) => {
|
|
670
676
|
if (key !== "screen" && key !== "svw" && key !== "lvw" && key !== "dvw") {
|
|
671
|
-
const safeName = key.replace(
|
|
672
|
-
classes.push({ name: `size-${
|
|
677
|
+
const safeName = key.replace(/\//g, "\\/").replace(/\./g, "\\.");
|
|
678
|
+
classes.push({ name: `size-${key}`, css: `.size-${safeName} { width: ${value}; height: ${value}; }` });
|
|
673
679
|
}
|
|
674
680
|
});
|
|
675
681
|
["auto", "hidden", "clip", "visible", "scroll"].forEach((o) => {
|
|
@@ -686,7 +692,7 @@ function generateLayoutUtilities(config) {
|
|
|
686
692
|
classes.push({ name: "aspect-auto", css: ".aspect-auto { aspect-ratio: auto; }" });
|
|
687
693
|
classes.push({ name: "aspect-square", css: ".aspect-square { aspect-ratio: 1 / 1; }" });
|
|
688
694
|
classes.push({ name: "aspect-video", css: ".aspect-video { aspect-ratio: 16 / 9; }" });
|
|
689
|
-
classes.push({ name: "aspect-4
|
|
695
|
+
classes.push({ name: "aspect-4/3", css: ".aspect-4\\/3 { aspect-ratio: 4 / 3; }" });
|
|
690
696
|
classes.push({ name: "visible", css: ".visible { visibility: visible; }" });
|
|
691
697
|
classes.push({ name: "invisible", css: ".invisible { visibility: hidden; }" });
|
|
692
698
|
classes.push({ name: "collapse", css: ".collapse { visibility: collapse; }" });
|
|
@@ -814,28 +820,28 @@ function generateSpacingUtilities(config, options = {}) {
|
|
|
814
820
|
const spacing = config.spacing || {};
|
|
815
821
|
const { usedClasses } = options;
|
|
816
822
|
Object.entries(spacing).forEach(([key, value]) => {
|
|
817
|
-
const safeName = key.replace(
|
|
818
|
-
classes.push({ name: `p-${
|
|
819
|
-
classes.push({ name: `pt-${
|
|
820
|
-
classes.push({ name: `pr-${
|
|
821
|
-
classes.push({ name: `pb-${
|
|
822
|
-
classes.push({ name: `pl-${
|
|
823
|
-
classes.push({ name: `px-${
|
|
824
|
-
classes.push({ name: `py-${
|
|
825
|
-
classes.push({ name: `ps-${
|
|
826
|
-
classes.push({ name: `pe-${
|
|
823
|
+
const safeName = key.replace(/\./g, "\\.");
|
|
824
|
+
classes.push({ name: `p-${key}`, css: `.p-${safeName} { padding: ${value}; }` });
|
|
825
|
+
classes.push({ name: `pt-${key}`, css: `.pt-${safeName} { padding-top: ${value}; }` });
|
|
826
|
+
classes.push({ name: `pr-${key}`, css: `.pr-${safeName} { padding-right: ${value}; }` });
|
|
827
|
+
classes.push({ name: `pb-${key}`, css: `.pb-${safeName} { padding-bottom: ${value}; }` });
|
|
828
|
+
classes.push({ name: `pl-${key}`, css: `.pl-${safeName} { padding-left: ${value}; }` });
|
|
829
|
+
classes.push({ name: `px-${key}`, css: `.px-${safeName} { padding-left: ${value}; padding-right: ${value}; }` });
|
|
830
|
+
classes.push({ name: `py-${key}`, css: `.py-${safeName} { padding-top: ${value}; padding-bottom: ${value}; }` });
|
|
831
|
+
classes.push({ name: `ps-${key}`, css: `.ps-${safeName} { padding-inline-start: ${value}; }` });
|
|
832
|
+
classes.push({ name: `pe-${key}`, css: `.pe-${safeName} { padding-inline-end: ${value}; }` });
|
|
827
833
|
});
|
|
828
834
|
Object.entries(spacing).forEach(([key, value]) => {
|
|
829
|
-
const safeName = key.replace(
|
|
830
|
-
classes.push({ name: `m-${
|
|
831
|
-
classes.push({ name: `mt-${
|
|
832
|
-
classes.push({ name: `mr-${
|
|
833
|
-
classes.push({ name: `mb-${
|
|
834
|
-
classes.push({ name: `ml-${
|
|
835
|
-
classes.push({ name: `mx-${
|
|
836
|
-
classes.push({ name: `my-${
|
|
837
|
-
classes.push({ name: `ms-${
|
|
838
|
-
classes.push({ name: `me-${
|
|
835
|
+
const safeName = key.replace(/\./g, "\\.");
|
|
836
|
+
classes.push({ name: `m-${key}`, css: `.m-${safeName} { margin: ${value}; }` });
|
|
837
|
+
classes.push({ name: `mt-${key}`, css: `.mt-${safeName} { margin-top: ${value}; }` });
|
|
838
|
+
classes.push({ name: `mr-${key}`, css: `.mr-${safeName} { margin-right: ${value}; }` });
|
|
839
|
+
classes.push({ name: `mb-${key}`, css: `.mb-${safeName} { margin-bottom: ${value}; }` });
|
|
840
|
+
classes.push({ name: `ml-${key}`, css: `.ml-${safeName} { margin-left: ${value}; }` });
|
|
841
|
+
classes.push({ name: `mx-${key}`, css: `.mx-${safeName} { margin-left: ${value}; margin-right: ${value}; }` });
|
|
842
|
+
classes.push({ name: `my-${key}`, css: `.my-${safeName} { margin-top: ${value}; margin-bottom: ${value}; }` });
|
|
843
|
+
classes.push({ name: `ms-${key}`, css: `.ms-${safeName} { margin-inline-start: ${value}; }` });
|
|
844
|
+
classes.push({ name: `me-${key}`, css: `.me-${safeName} { margin-inline-end: ${value}; }` });
|
|
839
845
|
});
|
|
840
846
|
classes.push({ name: "m-auto", css: ".m-auto { margin: auto; }" });
|
|
841
847
|
classes.push({ name: "mx-auto", css: ".mx-auto { margin-left: auto; margin-right: auto; }" });
|
|
@@ -849,32 +855,32 @@ function generateSpacingUtilities(config, options = {}) {
|
|
|
849
855
|
Object.entries(spacing).forEach(([key, value]) => {
|
|
850
856
|
if (key === "0" || key === "px")
|
|
851
857
|
return;
|
|
852
|
-
const safeName = key.replace(
|
|
853
|
-
classes.push({ name: `-m-${
|
|
854
|
-
classes.push({ name: `-mt-${
|
|
855
|
-
classes.push({ name: `-mr-${
|
|
856
|
-
classes.push({ name: `-mb-${
|
|
857
|
-
classes.push({ name: `-ml-${
|
|
858
|
-
classes.push({ name: `-mx-${
|
|
859
|
-
classes.push({ name: `-my-${
|
|
858
|
+
const safeName = key.replace(/\./g, "\\.");
|
|
859
|
+
classes.push({ name: `-m-${key}`, css: `.-m-${safeName} { margin: -${value}; }` });
|
|
860
|
+
classes.push({ name: `-mt-${key}`, css: `.-mt-${safeName} { margin-top: -${value}; }` });
|
|
861
|
+
classes.push({ name: `-mr-${key}`, css: `.-mr-${safeName} { margin-right: -${value}; }` });
|
|
862
|
+
classes.push({ name: `-mb-${key}`, css: `.-mb-${safeName} { margin-bottom: -${value}; }` });
|
|
863
|
+
classes.push({ name: `-ml-${key}`, css: `.-ml-${safeName} { margin-left: -${value}; }` });
|
|
864
|
+
classes.push({ name: `-mx-${key}`, css: `.-mx-${safeName} { margin-left: -${value}; margin-right: -${value}; }` });
|
|
865
|
+
classes.push({ name: `-my-${key}`, css: `.-my-${safeName} { margin-top: -${value}; margin-bottom: -${value}; }` });
|
|
860
866
|
});
|
|
861
867
|
Object.entries(spacing).forEach(([key, value]) => {
|
|
862
|
-
const safeName = key.replace(
|
|
868
|
+
const safeName = key.replace(/\./g, "\\.");
|
|
863
869
|
classes.push({
|
|
864
|
-
name: `space-x-${
|
|
870
|
+
name: `space-x-${key}`,
|
|
865
871
|
css: `.space-x-${safeName} > :not([hidden]) ~ :not([hidden]) { margin-left: ${value}; }`
|
|
866
872
|
});
|
|
867
873
|
classes.push({
|
|
868
|
-
name: `space-y-${
|
|
874
|
+
name: `space-y-${key}`,
|
|
869
875
|
css: `.space-y-${safeName} > :not([hidden]) ~ :not([hidden]) { margin-top: ${value}; }`
|
|
870
876
|
});
|
|
871
877
|
if (key !== "0" && key !== "px") {
|
|
872
878
|
classes.push({
|
|
873
|
-
name: `-space-x-${
|
|
879
|
+
name: `-space-x-${key}`,
|
|
874
880
|
css: `.-space-x-${safeName} > :not([hidden]) ~ :not([hidden]) { margin-left: -${value}; }`
|
|
875
881
|
});
|
|
876
882
|
classes.push({
|
|
877
|
-
name: `-space-y-${
|
|
883
|
+
name: `-space-y-${key}`,
|
|
878
884
|
css: `.-space-y-${safeName} > :not([hidden]) ~ :not([hidden]) { margin-top: -${value}; }`
|
|
879
885
|
});
|
|
880
886
|
}
|
|
@@ -1723,19 +1729,19 @@ function generateTransformUtilities(config) {
|
|
|
1723
1729
|
"full": "100%"
|
|
1724
1730
|
};
|
|
1725
1731
|
Object.entries(translateValues).forEach(([key, value]) => {
|
|
1726
|
-
const safeName = key.replace(
|
|
1727
|
-
classes.push({ name: `translate-x-${
|
|
1728
|
-
classes.push({ name: `translate-y-${
|
|
1732
|
+
const safeName = key.replace(/\//g, "\\/").replace(/\./g, "\\.");
|
|
1733
|
+
classes.push({ name: `translate-x-${key}`, css: `.translate-x-${safeName} { --j-translate-x: ${value}; transform: translateX(${value}); }` });
|
|
1734
|
+
classes.push({ name: `translate-y-${key}`, css: `.translate-y-${safeName} { --j-translate-y: ${value}; transform: translateY(${value}); }` });
|
|
1729
1735
|
if (!key.includes("/")) {
|
|
1730
|
-
classes.push({ name: `-translate-x-${
|
|
1731
|
-
classes.push({ name: `-translate-y-${
|
|
1736
|
+
classes.push({ name: `-translate-x-${key}`, css: `.-translate-x-${safeName} { --j-translate-x: -${value}; transform: translateX(-${value}); }` });
|
|
1737
|
+
classes.push({ name: `-translate-y-${key}`, css: `.-translate-y-${safeName} { --j-translate-y: -${value}; transform: translateY(-${value}); }` });
|
|
1732
1738
|
}
|
|
1733
1739
|
});
|
|
1734
1740
|
["1/2", "1/3", "2/3", "1/4", "3/4", "full"].forEach((key) => {
|
|
1735
1741
|
const value = translateValues[key];
|
|
1736
|
-
const safeName = key.replace(
|
|
1737
|
-
classes.push({ name: `-translate-x-${
|
|
1738
|
-
classes.push({ name: `-translate-y-${
|
|
1742
|
+
const safeName = key.replace(/\//g, "\\/");
|
|
1743
|
+
classes.push({ name: `-translate-x-${key}`, css: `.-translate-x-${safeName} { --j-translate-x: -${value}; transform: translateX(-${value}); }` });
|
|
1744
|
+
classes.push({ name: `-translate-y-${key}`, css: `.-translate-y-${safeName} { --j-translate-y: -${value}; transform: translateY(-${value}); }` });
|
|
1739
1745
|
});
|
|
1740
1746
|
const skews = [0, 1, 2, 3, 6, 12];
|
|
1741
1747
|
skews.forEach((s) => {
|
|
@@ -3540,12 +3546,13 @@ function generateResponsiveUtilities(config, selectedUtilities, usedClasses, inc
|
|
|
3540
3546
|
const { classes } = generator(config);
|
|
3541
3547
|
for (const cls of classes) {
|
|
3542
3548
|
const escapedBp = escapeCssSelector(bp);
|
|
3543
|
-
const escapedName = cls.name.replace(/\./g, "\\.");
|
|
3549
|
+
const escapedName = cls.name.replace(/\//g, "\\/").replace(/\./g, "\\.");
|
|
3544
3550
|
const responsiveClassName = `${escapedBp}\\:${escapedName}`;
|
|
3545
3551
|
const shouldInclude = includeAll || !usedClasses || usedClasses.has(`${bp}:${cls.name}`);
|
|
3546
3552
|
if (shouldInclude) {
|
|
3553
|
+
const regexSafeName = escapedName.replace(/\\/g, "\\\\");
|
|
3547
3554
|
bpClasses.push(cls.css.replace(
|
|
3548
|
-
new RegExp(`\\.${
|
|
3555
|
+
new RegExp(`\\.${regexSafeName}(?=[^-\\w])`, "g"),
|
|
3549
3556
|
`.${responsiveClassName}`
|
|
3550
3557
|
));
|
|
3551
3558
|
}
|
|
@@ -3584,7 +3591,7 @@ function generateStateUtilities(config, selectedUtilities, usedClasses, includeA
|
|
|
3584
3591
|
for (const cls of classes) {
|
|
3585
3592
|
if (cls.css.includes("@media") || cls.css.includes("@keyframes"))
|
|
3586
3593
|
continue;
|
|
3587
|
-
const escapedName = cls.name.replace(/\./g, "\\.");
|
|
3594
|
+
const escapedName = cls.name.replace(/\//g, "\\/").replace(/\./g, "\\.");
|
|
3588
3595
|
const stateClassName = `${state}\\:${escapedName}`;
|
|
3589
3596
|
const shouldInclude = includeAll || !usedClasses || usedClasses.has(`${state}:${cls.name}`);
|
|
3590
3597
|
if (shouldInclude) {
|
|
@@ -3611,7 +3618,7 @@ function generateStateUtilities(config, selectedUtilities, usedClasses, includeA
|
|
|
3611
3618
|
for (const cls of classes) {
|
|
3612
3619
|
if (cls.css.includes("@media") || cls.css.includes("@keyframes"))
|
|
3613
3620
|
continue;
|
|
3614
|
-
const escapedName = cls.name.replace(/\./g, "\\.");
|
|
3621
|
+
const escapedName = cls.name.replace(/\//g, "\\/").replace(/\./g, "\\.");
|
|
3615
3622
|
const stateClassName = `group-hover\\:${escapedName}`;
|
|
3616
3623
|
const shouldInclude = includeAll || !usedClasses || usedClasses.has(`group-hover:${cls.name}`);
|
|
3617
3624
|
if (shouldInclude) {
|
|
@@ -3636,7 +3643,7 @@ function generateStateUtilities(config, selectedUtilities, usedClasses, includeA
|
|
|
3636
3643
|
for (const cls of classes) {
|
|
3637
3644
|
if (cls.css.includes("@media") || cls.css.includes("@keyframes"))
|
|
3638
3645
|
continue;
|
|
3639
|
-
const escapedName = cls.name.replace(/\./g, "\\.");
|
|
3646
|
+
const escapedName = cls.name.replace(/\//g, "\\/").replace(/\./g, "\\.");
|
|
3640
3647
|
const darkClassName = `dark\\:${escapedName}`;
|
|
3641
3648
|
const shouldInclude = includeAll || !usedClasses || usedClasses.has(`dark:${cls.name}`);
|
|
3642
3649
|
if (shouldInclude) {
|
|
@@ -3653,9 +3660,6 @@ function generateStateUtilities(config, selectedUtilities, usedClasses, includeA
|
|
|
3653
3660
|
}
|
|
3654
3661
|
return parts.join("\n");
|
|
3655
3662
|
}
|
|
3656
|
-
function escapeRegex(string) {
|
|
3657
|
-
return string.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
3658
|
-
}
|
|
3659
3663
|
function escapeCssSelector(name) {
|
|
3660
3664
|
if (/^\d/.test(name)) {
|
|
3661
3665
|
const firstChar = name.charCodeAt(0).toString(16);
|
|
@@ -3676,7 +3680,7 @@ function generateButtonStyles(config) {
|
|
|
3676
3680
|
font-size: 0.875rem;
|
|
3677
3681
|
font-weight: 500;
|
|
3678
3682
|
line-height: 1.25rem;
|
|
3679
|
-
border-radius: var(--j-radius-default, 0.5rem);
|
|
3683
|
+
border-radius: var(--j-radius-buttons, var(--j-radius-default, 0.5rem));
|
|
3680
3684
|
border: 1px solid transparent;
|
|
3681
3685
|
cursor: pointer;
|
|
3682
3686
|
transition: all 150ms ease-in-out;
|
|
@@ -4434,7 +4438,7 @@ function generateFormStyles(config) {
|
|
|
4434
4438
|
color: var(--j-text);
|
|
4435
4439
|
background-color: var(--j-bg);
|
|
4436
4440
|
border: 1px solid var(--j-border);
|
|
4437
|
-
border-radius: var(--j-radius-default, 0.5rem);
|
|
4441
|
+
border-radius: var(--j-radius-inputs, var(--j-radius-default, 0.5rem));
|
|
4438
4442
|
transition: border-color 150ms ease-in-out, box-shadow 150ms ease-in-out;
|
|
4439
4443
|
appearance: none;
|
|
4440
4444
|
}
|
|
@@ -4818,7 +4822,7 @@ input[type="range"].form-control::-webkit-slider-thumb:hover {
|
|
|
4818
4822
|
|
|
4819
4823
|
/* Square Switch */
|
|
4820
4824
|
.form-switch-square .form-switch-input {
|
|
4821
|
-
border-radius: var(--j-radius-default, 0.375rem);
|
|
4825
|
+
border-radius: var(--j-radius-inputs, var(--j-radius-default, 0.375rem));
|
|
4822
4826
|
}
|
|
4823
4827
|
|
|
4824
4828
|
.form-switch-square .form-switch-input::before {
|
|
@@ -4864,12 +4868,12 @@ input[type="range"].form-control::-webkit-slider-thumb:hover {
|
|
|
4864
4868
|
|
|
4865
4869
|
.input-group-text:first-child {
|
|
4866
4870
|
border-right: none;
|
|
4867
|
-
border-radius: var(--j-radius-
|
|
4871
|
+
border-radius: var(--j-radius-inputs, 0.5rem) 0 0 var(--j-radius-inputs, 0.5rem);
|
|
4868
4872
|
}
|
|
4869
4873
|
|
|
4870
4874
|
.input-group-text:last-child {
|
|
4871
4875
|
border-left: none;
|
|
4872
|
-
border-radius: 0 var(--j-radius-
|
|
4876
|
+
border-radius: 0 var(--j-radius-inputs, 0.5rem) var(--j-radius-inputs, 0.5rem) 0;
|
|
4873
4877
|
}
|
|
4874
4878
|
|
|
4875
4879
|
.input-group > .btn:first-child {
|
|
@@ -4906,7 +4910,7 @@ input[type="range"].form-control::-webkit-slider-thumb:hover {
|
|
|
4906
4910
|
|
|
4907
4911
|
.form-floating > .form-control:focus ~ .form-label,
|
|
4908
4912
|
.form-floating > .form-control:not(:placeholder-shown) ~ .form-label {
|
|
4909
|
-
transform: scale(0.85) translateY(-0.5rem);
|
|
4913
|
+
transform: scale(0.85) translateY(-0.5rem));
|
|
4910
4914
|
color: var(--j-primary);
|
|
4911
4915
|
}
|
|
4912
4916
|
|
|
@@ -4920,7 +4924,7 @@ input[type="range"].form-control::-webkit-slider-thumb:hover {
|
|
|
4920
4924
|
/* Fieldset */
|
|
4921
4925
|
fieldset {
|
|
4922
4926
|
border: 1px solid var(--j-border);
|
|
4923
|
-
border-radius: var(--j-radius-default, 0.5rem);
|
|
4927
|
+
border-radius: var(--j-radius-inputs, var(--j-radius-default, 0.5rem));
|
|
4924
4928
|
padding: 1.5rem;
|
|
4925
4929
|
margin-bottom: 1.5rem;
|
|
4926
4930
|
}
|
|
@@ -14741,9 +14745,81 @@ code, kbd, samp, pre {
|
|
|
14741
14745
|
}
|
|
14742
14746
|
|
|
14743
14747
|
// src/core/compiler.js
|
|
14748
|
+
var COMPONENT_CLASS_PREFIXES = {
|
|
14749
|
+
"accordion": "accordion",
|
|
14750
|
+
"alert": "alerts",
|
|
14751
|
+
"avatar": "avatars",
|
|
14752
|
+
"badge": "badges",
|
|
14753
|
+
"btn": "buttons",
|
|
14754
|
+
"card": "cards",
|
|
14755
|
+
"carousel": "carousel",
|
|
14756
|
+
"chip": "chips",
|
|
14757
|
+
"command-palette": "command-palette",
|
|
14758
|
+
"datepicker": "datepicker",
|
|
14759
|
+
"calendar": "datepicker",
|
|
14760
|
+
"dropdown": "dropdown",
|
|
14761
|
+
"form-": "forms",
|
|
14762
|
+
"input-group": "forms",
|
|
14763
|
+
"modal": "modals",
|
|
14764
|
+
"navbar": "navigation",
|
|
14765
|
+
"nav-": "navigation",
|
|
14766
|
+
"breadcrumb": "navigation",
|
|
14767
|
+
"pagination": "navigation",
|
|
14768
|
+
"tabs": "navigation",
|
|
14769
|
+
"tab": "navigation",
|
|
14770
|
+
"offcanvas": "offcanvas",
|
|
14771
|
+
"popover": "popover",
|
|
14772
|
+
"progress": "progress",
|
|
14773
|
+
"rating": "rating",
|
|
14774
|
+
"skeleton": "skeleton",
|
|
14775
|
+
"spinner": "spinner",
|
|
14776
|
+
"stepper": "stepper",
|
|
14777
|
+
"table": "tables",
|
|
14778
|
+
"timeline": "timeline",
|
|
14779
|
+
"timepicker": "timepicker",
|
|
14780
|
+
"tooltip": "tooltips",
|
|
14781
|
+
"upload": "upload"
|
|
14782
|
+
};
|
|
14783
|
+
function detectUsedComponents(usedClasses) {
|
|
14784
|
+
const detectedComponents = /* @__PURE__ */ new Set();
|
|
14785
|
+
if (!usedClasses)
|
|
14786
|
+
return detectedComponents;
|
|
14787
|
+
for (const className of usedClasses) {
|
|
14788
|
+
for (const [prefix, component] of Object.entries(COMPONENT_CLASS_PREFIXES)) {
|
|
14789
|
+
if (className.startsWith(prefix) || className === prefix.replace(/-$/, "")) {
|
|
14790
|
+
detectedComponents.add(component);
|
|
14791
|
+
}
|
|
14792
|
+
}
|
|
14793
|
+
}
|
|
14794
|
+
return detectedComponents;
|
|
14795
|
+
}
|
|
14796
|
+
function getMissingComponents(configComponents, detectedComponents) {
|
|
14797
|
+
const missing = [];
|
|
14798
|
+
for (const comp of detectedComponents) {
|
|
14799
|
+
if (!configComponents || !configComponents.includes(comp)) {
|
|
14800
|
+
missing.push(comp);
|
|
14801
|
+
}
|
|
14802
|
+
}
|
|
14803
|
+
return missing;
|
|
14804
|
+
}
|
|
14744
14805
|
async function compileCSS(config, options = {}) {
|
|
14745
|
-
const { usedClasses, minify = false, includeAll = false } = options;
|
|
14806
|
+
const { usedClasses, minify = false, includeAll = false, autoDetectComponents = true } = options;
|
|
14746
14807
|
const resolvedConfig = resolveConfig(config);
|
|
14808
|
+
let selectedComponents = config.components || [];
|
|
14809
|
+
let detectedComponents = /* @__PURE__ */ new Set();
|
|
14810
|
+
let missingComponents = [];
|
|
14811
|
+
if (usedClasses && autoDetectComponents) {
|
|
14812
|
+
detectedComponents = detectUsedComponents(usedClasses);
|
|
14813
|
+
missingComponents = getMissingComponents(selectedComponents, detectedComponents);
|
|
14814
|
+
if (missingComponents.length > 0) {
|
|
14815
|
+
console.log(import_picocolors.default.yellow(`
|
|
14816
|
+
\u26A0\uFE0F Auto-detected ${missingComponents.length} additional component(s):`));
|
|
14817
|
+
console.log(import_picocolors.default.dim(` ${missingComponents.join(", ")}`));
|
|
14818
|
+
console.log(import_picocolors.default.dim(` Adding them to this build automatically.
|
|
14819
|
+
`));
|
|
14820
|
+
selectedComponents = [.../* @__PURE__ */ new Set([...selectedComponents, ...missingComponents])];
|
|
14821
|
+
}
|
|
14822
|
+
}
|
|
14747
14823
|
const parts = [];
|
|
14748
14824
|
parts.push(generateBase(resolvedConfig));
|
|
14749
14825
|
const utilities = generateUtilities(resolvedConfig, {
|
|
@@ -14752,7 +14828,7 @@ async function compileCSS(config, options = {}) {
|
|
|
14752
14828
|
});
|
|
14753
14829
|
parts.push(utilities.css);
|
|
14754
14830
|
const components2 = generateComponents(resolvedConfig, {
|
|
14755
|
-
selected:
|
|
14831
|
+
selected: selectedComponents,
|
|
14756
14832
|
usedClasses,
|
|
14757
14833
|
includeAll
|
|
14758
14834
|
});
|
|
@@ -14775,7 +14851,9 @@ async function compileCSS(config, options = {}) {
|
|
|
14775
14851
|
minified,
|
|
14776
14852
|
stats: {
|
|
14777
14853
|
utilities: utilities.count,
|
|
14778
|
-
components: components2.count
|
|
14854
|
+
components: components2.count,
|
|
14855
|
+
autoDetected: missingComponents,
|
|
14856
|
+
totalComponents: selectedComponents.length
|
|
14779
14857
|
}
|
|
14780
14858
|
};
|
|
14781
14859
|
}
|