chai-tailwind-js 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,255 @@
1
+ var chaiTailwind = (() => {
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+
20
+ // src/index.js
21
+ var index_exports = {};
22
+ __export(index_exports, {
23
+ default: () => chaiTailwind
24
+ });
25
+
26
+ // src/core/scanner.js
27
+ function scanDOM() {
28
+ const elements = document.querySelectorAll("[class]");
29
+ return elements;
30
+ }
31
+
32
+ // src/utils/config.js
33
+ var spacing = {};
34
+ for (let i = 0; i <= 20; i++) {
35
+ spacing[i] = `${i * 4}px`;
36
+ }
37
+ var config = {
38
+ spacing,
39
+ colors: {
40
+ red: {
41
+ 100: "#fee2e2",
42
+ 300: "#fca5a5",
43
+ 500: "#ef4444",
44
+ 700: "#b91c1c"
45
+ },
46
+ blue: {
47
+ 100: "#dbeafe",
48
+ 300: "#93c5fd",
49
+ 500: "#3b82f6",
50
+ 700: "#1d4ed8"
51
+ },
52
+ green: {
53
+ 100: "#dcfce7",
54
+ 300: "#86efac",
55
+ 500: "#22c55e",
56
+ 700: "#15803d"
57
+ },
58
+ yellow: {
59
+ 100: "#fef9c3",
60
+ 300: "#fde047",
61
+ 500: "#eab308",
62
+ 700: "#a16207"
63
+ },
64
+ purple: {
65
+ 100: "#f3e8ff",
66
+ 300: "#d8b4fe",
67
+ 500: "#a855f7",
68
+ 700: "#7e22ce"
69
+ },
70
+ pink: {
71
+ 100: "#fce7f3",
72
+ 300: "#f9a8d4",
73
+ 500: "#ec4899",
74
+ 700: "#be185d"
75
+ },
76
+ black: "black",
77
+ white: "white"
78
+ },
79
+ fontSize: {
80
+ xs: "12px",
81
+ sm: "14px",
82
+ base: "16px",
83
+ lg: "18px",
84
+ xl: "20px",
85
+ "2xl": "24px",
86
+ "3xl": "28px",
87
+ "4xl": "32px",
88
+ "5xl": "40px"
89
+ },
90
+ borderRadius: {
91
+ none: "0px",
92
+ sm: "4px",
93
+ DEFAULT: "8px",
94
+ md: "10px",
95
+ lg: "12px",
96
+ xl: "16px",
97
+ full: "9999px"
98
+ },
99
+ shadows: {
100
+ sm: "0 1px 3px rgba(0,0,0,0.1)",
101
+ DEFAULT: "0 4px 10px rgba(0,0,0,0.1)",
102
+ md: "0 6px 20px rgba(0,0,0,0.15)",
103
+ lg: "0 10px 30px rgba(0,0,0,0.2)"
104
+ }
105
+ };
106
+
107
+ // src/core/parser.js
108
+ function parseClass(cls) {
109
+ let hover = null;
110
+ let utility = cls;
111
+ if (cls.includes(":")) {
112
+ const parts2 = cls.split(":");
113
+ hover = parts2[0];
114
+ utility = parts2[1];
115
+ }
116
+ if (!utility.startsWith("chai-")) return null;
117
+ utility = utility.slice(5);
118
+ if (!utility.includes("-")) return null;
119
+ const parts = utility.split("-");
120
+ const prefix = parts[0];
121
+ const value = parts.slice(1).join("-");
122
+ return {
123
+ hover,
124
+ prefix,
125
+ value
126
+ };
127
+ }
128
+
129
+ // src/runtime/interpreter.js
130
+ var handlers = {
131
+ p: (element, value) => {
132
+ const spacing2 = config.spacing[value];
133
+ if (spacing2) element.style.padding = spacing2;
134
+ },
135
+ m: (element, value) => {
136
+ const spacing2 = config.spacing[value];
137
+ if (spacing2) element.style.margin = spacing2;
138
+ },
139
+ bg: (element, value) => {
140
+ const [color, shade] = value.split("-");
141
+ const colorValue = config.colors[color]?.[shade];
142
+ if (colorValue) {
143
+ element.style.backgroundColor = colorValue;
144
+ }
145
+ },
146
+ text: (element, value) => {
147
+ const parts = value.split("-");
148
+ if (parts.length === 1) {
149
+ const size = config.fontSize[value];
150
+ if (size) {
151
+ element.style.fontSize = size;
152
+ return;
153
+ }
154
+ const color = config.colors[value];
155
+ if (color) element.style.color = color;
156
+ } else {
157
+ const [color, shade] = parts;
158
+ const c = config.colors[color]?.[shade];
159
+ if (c) element.style.color = c;
160
+ }
161
+ },
162
+ rounded: (element, value) => {
163
+ if (value === "DEFAULT") return;
164
+ const radius = config.borderRadius[value || "DEFAULT"];
165
+ if (radius) element.style.borderRadius = radius;
166
+ },
167
+ shadow: (element, value) => {
168
+ if (value === "DEFAULT") return;
169
+ const s = config.shadows[value || "DEFAULT"];
170
+ if (s) element.style.boxShadow = s;
171
+ },
172
+ flex: (element, value) => {
173
+ if (!value) {
174
+ element.style.display = "flex";
175
+ return;
176
+ }
177
+ if (value === "row") {
178
+ element.style.display = "flex";
179
+ element.style.flexDirection = "row";
180
+ }
181
+ if (value === "col") {
182
+ element.style.display = "flex";
183
+ element.style.flexDirection = "column";
184
+ }
185
+ },
186
+ justify: (element, value) => {
187
+ const map = {
188
+ start: "flex-start",
189
+ center: "center",
190
+ end: "flex-end",
191
+ between: "space-between",
192
+ around: "space-around",
193
+ evenly: "space-evenly"
194
+ };
195
+ const justify = map[value];
196
+ if (justify) {
197
+ element.style.display = "flex";
198
+ element.style.justifyContent = justify;
199
+ }
200
+ },
201
+ items: (element, value) => {
202
+ const map = {
203
+ start: "flex-start",
204
+ center: "center",
205
+ end: "flex-end",
206
+ stretch: "stretch",
207
+ baseline: "baseline"
208
+ };
209
+ const align = map[value];
210
+ if (align) {
211
+ element.style.display = "flex";
212
+ element.style.alignItems = align;
213
+ }
214
+ }
215
+ };
216
+ function interpretClass(element, cls) {
217
+ const parsed = parseClass(cls);
218
+ if (!parsed) return;
219
+ const { hover, prefix, value } = parsed;
220
+ const handler = handlers[prefix];
221
+ if (!handler) return;
222
+ if (!hover) {
223
+ handler(element, value);
224
+ }
225
+ if (hover === "hover") {
226
+ let original = "";
227
+ element.addEventListener("mouseenter", () => {
228
+ original = element.style.backgroundColor;
229
+ handler(element, value);
230
+ });
231
+ element.addEventListener("mouseleave", () => {
232
+ element.style.backgroundColor = original;
233
+ });
234
+ }
235
+ }
236
+
237
+ // src/core/styler.js
238
+ function applyStyles(elements) {
239
+ elements.forEach((element) => {
240
+ element.classList.forEach((cls) => {
241
+ interpretClass(element, cls);
242
+ });
243
+ });
244
+ }
245
+
246
+ // src/index.js
247
+ function chaiTailwind() {
248
+ const elements = scanDOM();
249
+ applyStyles(elements);
250
+ }
251
+ if (typeof window !== "undefined") {
252
+ window.chaiTailwind = chaiTailwind;
253
+ }
254
+ return __toCommonJS(index_exports);
255
+ })();
@@ -0,0 +1,231 @@
1
+ // src/core/scanner.js
2
+ function scanDOM() {
3
+ const elements = document.querySelectorAll("[class]");
4
+ return elements;
5
+ }
6
+
7
+ // src/utils/config.js
8
+ var spacing = {};
9
+ for (let i = 0; i <= 20; i++) {
10
+ spacing[i] = `${i * 4}px`;
11
+ }
12
+ var config = {
13
+ spacing,
14
+ colors: {
15
+ red: {
16
+ 100: "#fee2e2",
17
+ 300: "#fca5a5",
18
+ 500: "#ef4444",
19
+ 700: "#b91c1c"
20
+ },
21
+ blue: {
22
+ 100: "#dbeafe",
23
+ 300: "#93c5fd",
24
+ 500: "#3b82f6",
25
+ 700: "#1d4ed8"
26
+ },
27
+ green: {
28
+ 100: "#dcfce7",
29
+ 300: "#86efac",
30
+ 500: "#22c55e",
31
+ 700: "#15803d"
32
+ },
33
+ yellow: {
34
+ 100: "#fef9c3",
35
+ 300: "#fde047",
36
+ 500: "#eab308",
37
+ 700: "#a16207"
38
+ },
39
+ purple: {
40
+ 100: "#f3e8ff",
41
+ 300: "#d8b4fe",
42
+ 500: "#a855f7",
43
+ 700: "#7e22ce"
44
+ },
45
+ pink: {
46
+ 100: "#fce7f3",
47
+ 300: "#f9a8d4",
48
+ 500: "#ec4899",
49
+ 700: "#be185d"
50
+ },
51
+ black: "black",
52
+ white: "white"
53
+ },
54
+ fontSize: {
55
+ xs: "12px",
56
+ sm: "14px",
57
+ base: "16px",
58
+ lg: "18px",
59
+ xl: "20px",
60
+ "2xl": "24px",
61
+ "3xl": "28px",
62
+ "4xl": "32px",
63
+ "5xl": "40px"
64
+ },
65
+ borderRadius: {
66
+ none: "0px",
67
+ sm: "4px",
68
+ DEFAULT: "8px",
69
+ md: "10px",
70
+ lg: "12px",
71
+ xl: "16px",
72
+ full: "9999px"
73
+ },
74
+ shadows: {
75
+ sm: "0 1px 3px rgba(0,0,0,0.1)",
76
+ DEFAULT: "0 4px 10px rgba(0,0,0,0.1)",
77
+ md: "0 6px 20px rgba(0,0,0,0.15)",
78
+ lg: "0 10px 30px rgba(0,0,0,0.2)"
79
+ }
80
+ };
81
+
82
+ // src/core/parser.js
83
+ function parseClass(cls) {
84
+ let hover = null;
85
+ let utility = cls;
86
+ if (cls.includes(":")) {
87
+ const parts2 = cls.split(":");
88
+ hover = parts2[0];
89
+ utility = parts2[1];
90
+ }
91
+ if (!utility.startsWith("chai-")) return null;
92
+ utility = utility.slice(5);
93
+ if (!utility.includes("-")) return null;
94
+ const parts = utility.split("-");
95
+ const prefix = parts[0];
96
+ const value = parts.slice(1).join("-");
97
+ return {
98
+ hover,
99
+ prefix,
100
+ value
101
+ };
102
+ }
103
+
104
+ // src/runtime/interpreter.js
105
+ var handlers = {
106
+ p: (element, value) => {
107
+ const spacing2 = config.spacing[value];
108
+ if (spacing2) element.style.padding = spacing2;
109
+ },
110
+ m: (element, value) => {
111
+ const spacing2 = config.spacing[value];
112
+ if (spacing2) element.style.margin = spacing2;
113
+ },
114
+ bg: (element, value) => {
115
+ const [color, shade] = value.split("-");
116
+ const colorValue = config.colors[color]?.[shade];
117
+ if (colorValue) {
118
+ element.style.backgroundColor = colorValue;
119
+ }
120
+ },
121
+ text: (element, value) => {
122
+ const parts = value.split("-");
123
+ if (parts.length === 1) {
124
+ const size = config.fontSize[value];
125
+ if (size) {
126
+ element.style.fontSize = size;
127
+ return;
128
+ }
129
+ const color = config.colors[value];
130
+ if (color) element.style.color = color;
131
+ } else {
132
+ const [color, shade] = parts;
133
+ const c = config.colors[color]?.[shade];
134
+ if (c) element.style.color = c;
135
+ }
136
+ },
137
+ rounded: (element, value) => {
138
+ if (value === "DEFAULT") return;
139
+ const radius = config.borderRadius[value || "DEFAULT"];
140
+ if (radius) element.style.borderRadius = radius;
141
+ },
142
+ shadow: (element, value) => {
143
+ if (value === "DEFAULT") return;
144
+ const s = config.shadows[value || "DEFAULT"];
145
+ if (s) element.style.boxShadow = s;
146
+ },
147
+ flex: (element, value) => {
148
+ if (!value) {
149
+ element.style.display = "flex";
150
+ return;
151
+ }
152
+ if (value === "row") {
153
+ element.style.display = "flex";
154
+ element.style.flexDirection = "row";
155
+ }
156
+ if (value === "col") {
157
+ element.style.display = "flex";
158
+ element.style.flexDirection = "column";
159
+ }
160
+ },
161
+ justify: (element, value) => {
162
+ const map = {
163
+ start: "flex-start",
164
+ center: "center",
165
+ end: "flex-end",
166
+ between: "space-between",
167
+ around: "space-around",
168
+ evenly: "space-evenly"
169
+ };
170
+ const justify = map[value];
171
+ if (justify) {
172
+ element.style.display = "flex";
173
+ element.style.justifyContent = justify;
174
+ }
175
+ },
176
+ items: (element, value) => {
177
+ const map = {
178
+ start: "flex-start",
179
+ center: "center",
180
+ end: "flex-end",
181
+ stretch: "stretch",
182
+ baseline: "baseline"
183
+ };
184
+ const align = map[value];
185
+ if (align) {
186
+ element.style.display = "flex";
187
+ element.style.alignItems = align;
188
+ }
189
+ }
190
+ };
191
+ function interpretClass(element, cls) {
192
+ const parsed = parseClass(cls);
193
+ if (!parsed) return;
194
+ const { hover, prefix, value } = parsed;
195
+ const handler = handlers[prefix];
196
+ if (!handler) return;
197
+ if (!hover) {
198
+ handler(element, value);
199
+ }
200
+ if (hover === "hover") {
201
+ let original = "";
202
+ element.addEventListener("mouseenter", () => {
203
+ original = element.style.backgroundColor;
204
+ handler(element, value);
205
+ });
206
+ element.addEventListener("mouseleave", () => {
207
+ element.style.backgroundColor = original;
208
+ });
209
+ }
210
+ }
211
+
212
+ // src/core/styler.js
213
+ function applyStyles(elements) {
214
+ elements.forEach((element) => {
215
+ element.classList.forEach((cls) => {
216
+ interpretClass(element, cls);
217
+ });
218
+ });
219
+ }
220
+
221
+ // src/index.js
222
+ function chaiTailwind() {
223
+ const elements = scanDOM();
224
+ applyStyles(elements);
225
+ }
226
+ if (typeof window !== "undefined") {
227
+ window.chaiTailwind = chaiTailwind;
228
+ }
229
+ export {
230
+ chaiTailwind as default
231
+ };
package/package.json ADDED
@@ -0,0 +1,18 @@
1
+ {
2
+ "name": "chai-tailwind-js",
3
+ "version": "1.0.0",
4
+ "main": "dist/chai-tailwind.js",
5
+ "type": "module",
6
+ "scripts": {
7
+ "build": "npm run build:esm && npm run build:global",
8
+ "build:esm": "esbuild src/index.js --bundle --format=esm --outfile=dist/chai-tailwind.js",
9
+ "build:global": "esbuild src/index.js --bundle --format=iife --global-name=chaiTailwind --outfile=dist/chai-tailwind.global.js"
10
+ },
11
+ "keywords": [],
12
+ "author": "",
13
+ "license": "ISC",
14
+ "description": "",
15
+ "devDependencies": {
16
+ "esbuild": "^0.27.4"
17
+ }
18
+ }