chai-tailwind-js 1.0.2 → 1.0.3

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