@gaurav009/chai-ui 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.
- package/demo/index.html +0 -0
- package/dist/chai-ui.esm.js +325 -0
- package/dist/chai-ui.esm.js.map +7 -0
- package/dist/chai-ui.js +2 -0
- package/dist/chai-ui.js.map +7 -0
- package/package.json +24 -0
- package/readme.md +272 -0
- package/scripts/build.mjs +29 -0
- package/src/core/01-engine.js +23 -0
- package/src/core/02-parser.js +10 -0
- package/src/core/03-resolver.js +17 -0
- package/src/core/04-apply.js +4 -0
- package/src/index.js +5 -0
- package/src/theme/theme.js +15 -0
- package/src/utilities/border.js +32 -0
- package/src/utilities/colors.js +29 -0
- package/src/utilities/display.js +10 -0
- package/src/utilities/effects.js +26 -0
- package/src/utilities/layout.js +36 -0
- package/src/utilities/size.js +30 -0
- package/src/utilities/spacing.js +85 -0
- package/src/utilities/typography.js +24 -0
package/demo/index.html
ADDED
|
File without changes
|
|
@@ -0,0 +1,325 @@
|
|
|
1
|
+
// src/core/02-parser.js
|
|
2
|
+
function parse(cssStringClass) {
|
|
3
|
+
if (!cssStringClass) {
|
|
4
|
+
return [];
|
|
5
|
+
}
|
|
6
|
+
if (typeof cssStringClass !== "string") {
|
|
7
|
+
return [];
|
|
8
|
+
}
|
|
9
|
+
return cssStringClass.trim().split(/\s+/).filter(Boolean);
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
// src/utilities/spacing.js
|
|
13
|
+
function spacing(token) {
|
|
14
|
+
const match = token.match(
|
|
15
|
+
/^(p|m|px|py|mx|my|gap|kinare-se|kinare-x-se|kinare-y-se|bahar-se|upar-se|niche-se|daaye-se|baaye-se|fasla)-(\d+)$/
|
|
16
|
+
);
|
|
17
|
+
if (!match) {
|
|
18
|
+
return null;
|
|
19
|
+
}
|
|
20
|
+
const kind = match[1];
|
|
21
|
+
const value = Number(match[2]) * 4 + "px";
|
|
22
|
+
if (kind === "p")
|
|
23
|
+
return {
|
|
24
|
+
padding: value
|
|
25
|
+
};
|
|
26
|
+
if (kind === "kinare-se")
|
|
27
|
+
return {
|
|
28
|
+
padding: value
|
|
29
|
+
};
|
|
30
|
+
if (kind === "m")
|
|
31
|
+
return {
|
|
32
|
+
margin: value
|
|
33
|
+
};
|
|
34
|
+
if (kind === "bahar-se")
|
|
35
|
+
return {
|
|
36
|
+
margin: value
|
|
37
|
+
};
|
|
38
|
+
if (kind === "px")
|
|
39
|
+
return {
|
|
40
|
+
paddingLeft: value,
|
|
41
|
+
paddingRight: value
|
|
42
|
+
};
|
|
43
|
+
if (kind === "kinare-x-se")
|
|
44
|
+
return {
|
|
45
|
+
paddingLeft: value,
|
|
46
|
+
paddingRight: value
|
|
47
|
+
};
|
|
48
|
+
if (kind === "py")
|
|
49
|
+
return {
|
|
50
|
+
paddingTop: value,
|
|
51
|
+
paddingBottom: value
|
|
52
|
+
};
|
|
53
|
+
if (kind === "kinare-y-se")
|
|
54
|
+
return {
|
|
55
|
+
paddingTop: value,
|
|
56
|
+
paddingBottom: value
|
|
57
|
+
};
|
|
58
|
+
if (kind === "mx")
|
|
59
|
+
return {
|
|
60
|
+
marginLeft: value,
|
|
61
|
+
marginRight: value
|
|
62
|
+
};
|
|
63
|
+
if (kind === "baaye-se")
|
|
64
|
+
return {
|
|
65
|
+
marginLeft: value
|
|
66
|
+
};
|
|
67
|
+
if (kind === "daaye-se")
|
|
68
|
+
return {
|
|
69
|
+
marginRight: value
|
|
70
|
+
};
|
|
71
|
+
if (kind === "my")
|
|
72
|
+
return {
|
|
73
|
+
marginTop: value,
|
|
74
|
+
marginBottom: value
|
|
75
|
+
};
|
|
76
|
+
if (kind === "upar-se")
|
|
77
|
+
return {
|
|
78
|
+
marginTop: value
|
|
79
|
+
};
|
|
80
|
+
if (kind === "niche-se")
|
|
81
|
+
return {
|
|
82
|
+
marginBottom: value
|
|
83
|
+
};
|
|
84
|
+
if (kind === "gap")
|
|
85
|
+
return {
|
|
86
|
+
gap: value
|
|
87
|
+
};
|
|
88
|
+
if (kind === "fasla")
|
|
89
|
+
return {
|
|
90
|
+
gap: value
|
|
91
|
+
};
|
|
92
|
+
return null;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
// src/utilities/layout.js
|
|
96
|
+
var map = {
|
|
97
|
+
flex: {
|
|
98
|
+
display: "flex"
|
|
99
|
+
},
|
|
100
|
+
lacheela: {
|
|
101
|
+
display: "flex"
|
|
102
|
+
},
|
|
103
|
+
"flex-col": {
|
|
104
|
+
flexDirection: "column"
|
|
105
|
+
},
|
|
106
|
+
"lacheela-kolam": {
|
|
107
|
+
flexDirection: "column"
|
|
108
|
+
},
|
|
109
|
+
"items-center": {
|
|
110
|
+
alignItems: "center"
|
|
111
|
+
},
|
|
112
|
+
"saman-beech": {
|
|
113
|
+
alignItems: "center"
|
|
114
|
+
},
|
|
115
|
+
"justify-center": {
|
|
116
|
+
justifyContent: "center"
|
|
117
|
+
},
|
|
118
|
+
"beech-mein": {
|
|
119
|
+
justifyContent: "center"
|
|
120
|
+
},
|
|
121
|
+
"justify-between": {
|
|
122
|
+
justifyContent: "space-between"
|
|
123
|
+
},
|
|
124
|
+
"dono-kinare": {
|
|
125
|
+
justifyContent: "space-between"
|
|
126
|
+
}
|
|
127
|
+
};
|
|
128
|
+
function layout(token) {
|
|
129
|
+
return map[token] || null;
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
// src/theme/theme.js
|
|
133
|
+
var theme = {
|
|
134
|
+
colors: {
|
|
135
|
+
chai: "#8b5e3c",
|
|
136
|
+
cream: "#f6e7d0",
|
|
137
|
+
masala: "#5a3d2b",
|
|
138
|
+
white: "#ffffff"
|
|
139
|
+
},
|
|
140
|
+
border: {
|
|
141
|
+
base: "#d9c3a5"
|
|
142
|
+
},
|
|
143
|
+
effects: {
|
|
144
|
+
chaiShadow: "0 12px 24px rgba(90, 61, 43, 0.22)",
|
|
145
|
+
softShadow: "0 6px 16px rgba(90, 61, 43, 0.12)"
|
|
146
|
+
}
|
|
147
|
+
};
|
|
148
|
+
|
|
149
|
+
// src/utilities/colors.js
|
|
150
|
+
var aliases = {
|
|
151
|
+
"pichhe-chai": "bg-chai",
|
|
152
|
+
"pichhe-cream": "bg-cream",
|
|
153
|
+
"pichhe-masala": "bg-masala",
|
|
154
|
+
"likhawat-chai": "text-chai",
|
|
155
|
+
"likhawat-masala": "text-masala",
|
|
156
|
+
"likhawat-safed": "text-white"
|
|
157
|
+
};
|
|
158
|
+
function colors(token) {
|
|
159
|
+
const normalizedToken = aliases[token] || token;
|
|
160
|
+
const bgMatch = normalizedToken.match(/^bg-(chai|cream|masala)$/);
|
|
161
|
+
if (bgMatch) {
|
|
162
|
+
return {
|
|
163
|
+
backgroundColor: theme.colors[bgMatch[1]]
|
|
164
|
+
};
|
|
165
|
+
}
|
|
166
|
+
const textMatch = normalizedToken.match(/^text-(chai|masala|white)$/);
|
|
167
|
+
if (textMatch) {
|
|
168
|
+
return {
|
|
169
|
+
color: theme.colors[textMatch[1]]
|
|
170
|
+
};
|
|
171
|
+
}
|
|
172
|
+
return null;
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
// src/utilities/typography.js
|
|
176
|
+
var map2 = {
|
|
177
|
+
"text-sm": { fontSize: "14px" },
|
|
178
|
+
"akshar-chhota": { fontSize: "14px" },
|
|
179
|
+
"text-base": { fontSize: "16px" },
|
|
180
|
+
"akshar-samanya": { fontSize: "16px" },
|
|
181
|
+
"text-lg": { fontSize: "18px" },
|
|
182
|
+
"akshar-bada": { fontSize: "18px" },
|
|
183
|
+
"text-xl": { fontSize: "20px" },
|
|
184
|
+
"akshar-xl": { fontSize: "20px" },
|
|
185
|
+
"font-light": { fontWeight: "300" },
|
|
186
|
+
"font-patla": { fontWeight: "300" },
|
|
187
|
+
"font-bold": { fontWeight: "700" },
|
|
188
|
+
"font-mota": { fontWeight: "700" },
|
|
189
|
+
"text-center": { textAlign: "center" },
|
|
190
|
+
"likhawat-beech": { textAlign: "center" },
|
|
191
|
+
"text-left": { textAlign: "left" },
|
|
192
|
+
"likhawat-baaye": { textAlign: "left" },
|
|
193
|
+
"text-right": { textAlign: "right" },
|
|
194
|
+
"likhawat-daaye": { textAlign: "right" }
|
|
195
|
+
};
|
|
196
|
+
function typography(token) {
|
|
197
|
+
return map2[token] || null;
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
// src/utilities/border.js
|
|
201
|
+
var map3 = {
|
|
202
|
+
"border": {
|
|
203
|
+
border: `1px solid ${theme.border.base}`
|
|
204
|
+
},
|
|
205
|
+
"kinara-rekha": {
|
|
206
|
+
border: `1px solid ${theme.border.base}`
|
|
207
|
+
},
|
|
208
|
+
"rounded": {
|
|
209
|
+
borderRadius: "8px"
|
|
210
|
+
},
|
|
211
|
+
"gol-kinara": {
|
|
212
|
+
borderRadius: "8px"
|
|
213
|
+
},
|
|
214
|
+
"rounded-2": {
|
|
215
|
+
borderRadius: "12px"
|
|
216
|
+
},
|
|
217
|
+
"gol-kinara-2": {
|
|
218
|
+
borderRadius: "12px"
|
|
219
|
+
},
|
|
220
|
+
"rounded-full": {
|
|
221
|
+
borderRadius: "9999px"
|
|
222
|
+
},
|
|
223
|
+
"poora-gola": {
|
|
224
|
+
borderRadius: "9999px"
|
|
225
|
+
}
|
|
226
|
+
};
|
|
227
|
+
function border(token) {
|
|
228
|
+
return map3[token] || null;
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
// src/utilities/effects.js
|
|
232
|
+
var map4 = {
|
|
233
|
+
"chai-shadow": {
|
|
234
|
+
boxShadow: theme.effects.chaiShadow
|
|
235
|
+
},
|
|
236
|
+
"chai-parchai": {
|
|
237
|
+
boxShadow: theme.effects.chaiShadow
|
|
238
|
+
},
|
|
239
|
+
"soft-shadow": {
|
|
240
|
+
boxShadow: theme.effects.softShadow
|
|
241
|
+
},
|
|
242
|
+
"halki-parchai": {
|
|
243
|
+
boxShadow: theme.effects.softShadow
|
|
244
|
+
},
|
|
245
|
+
"sheesha-chai": {
|
|
246
|
+
backgroundColor: "rgba(246, 231, 208, 0.45)",
|
|
247
|
+
border: `1px solid ${theme.border.base}`,
|
|
248
|
+
backdropFilter: "blur(8px)",
|
|
249
|
+
WebkitBackdropFilter: "blur(8px)"
|
|
250
|
+
}
|
|
251
|
+
};
|
|
252
|
+
function effects(token) {
|
|
253
|
+
return map4[token] || null;
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
// src/utilities/size.js
|
|
257
|
+
var map5 = {
|
|
258
|
+
"w-full": {
|
|
259
|
+
width: "100%"
|
|
260
|
+
},
|
|
261
|
+
"chaudai-poori": {
|
|
262
|
+
width: "100%"
|
|
263
|
+
},
|
|
264
|
+
"h-full": {
|
|
265
|
+
height: "100%"
|
|
266
|
+
},
|
|
267
|
+
"unchai-poori": {
|
|
268
|
+
height: "100%"
|
|
269
|
+
},
|
|
270
|
+
"w-screen": {
|
|
271
|
+
width: "100vw"
|
|
272
|
+
},
|
|
273
|
+
"chaudai-screen": {
|
|
274
|
+
width: "100vw"
|
|
275
|
+
},
|
|
276
|
+
"h-screen": {
|
|
277
|
+
height: "100vh"
|
|
278
|
+
},
|
|
279
|
+
"unchai-screen": {
|
|
280
|
+
height: "100vh"
|
|
281
|
+
}
|
|
282
|
+
};
|
|
283
|
+
function size(token) {
|
|
284
|
+
return map5[token] || null;
|
|
285
|
+
}
|
|
286
|
+
|
|
287
|
+
// src/utilities/display.js
|
|
288
|
+
var map6 = {
|
|
289
|
+
block: { display: "block" },
|
|
290
|
+
dikhao: { display: "block" },
|
|
291
|
+
hidden: { display: "none" },
|
|
292
|
+
chhupao: { display: "none" }
|
|
293
|
+
};
|
|
294
|
+
function display(token) {
|
|
295
|
+
return map6[token] || null;
|
|
296
|
+
}
|
|
297
|
+
|
|
298
|
+
// src/core/03-resolver.js
|
|
299
|
+
function resolve(token) {
|
|
300
|
+
return spacing(token) || layout(token) || colors(token) || typography(token) || border(token) || effects(token) || size(token) || display(token) || null;
|
|
301
|
+
}
|
|
302
|
+
|
|
303
|
+
// src/core/04-apply.js
|
|
304
|
+
function applyStyles(el, styles) {
|
|
305
|
+
Object.assign(el.style, styles);
|
|
306
|
+
}
|
|
307
|
+
|
|
308
|
+
// src/core/01-engine.js
|
|
309
|
+
function init() {
|
|
310
|
+
const elements = document.querySelectorAll("[chaiCss]");
|
|
311
|
+
elements.forEach((el) => {
|
|
312
|
+
const tokens = parse(el.getAttribute("chaiCss") || "");
|
|
313
|
+
tokens.forEach((token) => {
|
|
314
|
+
const styles = resolve(token);
|
|
315
|
+
if (styles)
|
|
316
|
+
applyStyles(el, styles);
|
|
317
|
+
});
|
|
318
|
+
});
|
|
319
|
+
}
|
|
320
|
+
|
|
321
|
+
// src/index.js
|
|
322
|
+
document.addEventListener("DOMContentLoaded", () => {
|
|
323
|
+
init();
|
|
324
|
+
});
|
|
325
|
+
//# sourceMappingURL=chai-ui.esm.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/core/02-parser.js", "../src/utilities/spacing.js", "../src/utilities/layout.js", "../src/theme/theme.js", "../src/utilities/colors.js", "../src/utilities/typography.js", "../src/utilities/border.js", "../src/utilities/effects.js", "../src/utilities/size.js", "../src/utilities/display.js", "../src/core/03-resolver.js", "../src/core/04-apply.js", "../src/core/01-engine.js", "../src/index.js"],
|
|
4
|
+
"sourcesContent": ["// \"p-4 bg-chai\" \u2192 [\"p-4\", \"bg-chai\"]\r\nexport function parse(cssStringClass) {\r\n if (!cssStringClass) {\r\n return [];\r\n }\r\n if (typeof cssStringClass !== \"string\") {\r\n return [];\r\n }\r\n return cssStringClass.trim().split(/\\s+/).filter(Boolean);\r\n}\r\n", "export function spacing(token) {\r\n const match = token.match(\r\n /^(p|m|px|py|mx|my|gap|kinare-se|kinare-x-se|kinare-y-se|bahar-se|upar-se|niche-se|daaye-se|baaye-se|fasla)-(\\d+)$/,\r\n );\r\n\r\n if (!match) {\r\n return null;\r\n }\r\n\r\n const kind = match[1];\r\n const value = Number(match[2]) * 4 + \"px\";\r\n\r\n if (kind === \"p\") \r\n return { \r\n padding: value \r\n };\r\n if (kind === \"kinare-se\") \r\n return { \r\n padding: value \r\n };\r\n if (kind === \"m\") \r\n return { \r\n margin: value \r\n };\r\n if (kind === \"bahar-se\") \r\n return { \r\n margin: value \r\n };\r\n if (kind === \"px\") \r\n return { \r\n paddingLeft: value, \r\n paddingRight: value \r\n };\r\n if (kind === \"kinare-x-se\")\r\n return { \r\n paddingLeft: value, \r\n paddingRight: value \r\n };\r\n if (kind === \"py\") \r\n return { \r\n paddingTop: value, \r\n paddingBottom: value \r\n };\r\n if (kind === \"kinare-y-se\")\r\n return { \r\n paddingTop: value, \r\n paddingBottom: value \r\n };\r\n if (kind === \"mx\") \r\n return { \r\n marginLeft: value, \r\n marginRight: value \r\n };\r\n if (kind === \"baaye-se\") \r\n return { \r\n marginLeft: value \r\n };\r\n if (kind === \"daaye-se\") \r\n return { \r\n marginRight: value \r\n };\r\n if (kind === \"my\") \r\n return { \r\n marginTop: value, \r\n marginBottom: value \r\n };\r\n if (kind === \"upar-se\") \r\n return { \r\n marginTop: value \r\n };\r\n if (kind === \"niche-se\") \r\n return { \r\n marginBottom: value \r\n };\r\n if (kind === \"gap\") \r\n return { \r\n gap: value \r\n };\r\n if (kind === \"fasla\") \r\n return { \r\n gap: value \r\n };\r\n\r\n return null;\r\n}\r\n", "const map = {\r\n flex: { \r\n display: \"flex\" \r\n },\r\n lacheela: { \r\n display: \"flex\" \r\n },\r\n \"flex-col\": { \r\n flexDirection: \"column\" \r\n },\r\n \"lacheela-kolam\": { \r\n flexDirection: \"column\" \r\n },\r\n \"items-center\": { \r\n alignItems: \"center\" \r\n },\r\n \"saman-beech\": { \r\n alignItems: \"center\" \r\n },\r\n \"justify-center\": { \r\n justifyContent: \"center\" \r\n },\r\n \"beech-mein\": { \r\n justifyContent: \"center\" \r\n },\r\n \"justify-between\": { \r\n justifyContent: \"space-between\" \r\n },\r\n \"dono-kinare\": { \r\n justifyContent: \"space-between\" \r\n },\r\n};\r\n\r\nexport function layout(token) {\r\n return map[token] || null;\r\n}\r\n", "export const theme = {\r\n colors: {\r\n chai: \"#8b5e3c\",\r\n cream: \"#f6e7d0\",\r\n masala: \"#5a3d2b\",\r\n white: \"#ffffff\",\r\n },\r\n border: {\r\n base: \"#d9c3a5\",\r\n },\r\n effects: {\r\n chaiShadow: \"0 12px 24px rgba(90, 61, 43, 0.22)\",\r\n softShadow: \"0 6px 16px rgba(90, 61, 43, 0.12)\",\r\n },\r\n};\r\n", "import { theme } from \"../theme/theme.js\";\r\n\r\nconst aliases = {\r\n \"pichhe-chai\": \"bg-chai\",\r\n \"pichhe-cream\": \"bg-cream\",\r\n \"pichhe-masala\": \"bg-masala\",\r\n \"likhawat-chai\": \"text-chai\",\r\n \"likhawat-masala\": \"text-masala\",\r\n \"likhawat-safed\": \"text-white\",\r\n};\r\n\r\nexport function colors(token) {\r\n const normalizedToken = aliases[token] || token;\r\n const bgMatch = normalizedToken.match(/^bg-(chai|cream|masala)$/);\r\n if (bgMatch) {\r\n return { \r\n backgroundColor: theme.colors[bgMatch[1]] \r\n };\r\n }\r\n\r\n const textMatch = normalizedToken.match(/^text-(chai|masala|white)$/);\r\n if (textMatch) {\r\n return { \r\n color: theme.colors[textMatch[1]] \r\n };\r\n }\r\n\r\n return null;\r\n}\r\n", "const map = {\r\n \"text-sm\": { fontSize: \"14px\" },\r\n \"akshar-chhota\": { fontSize: \"14px\" },\r\n \"text-base\": { fontSize: \"16px\" },\r\n \"akshar-samanya\": { fontSize: \"16px\" },\r\n \"text-lg\": { fontSize: \"18px\" },\r\n \"akshar-bada\": { fontSize: \"18px\" },\r\n \"text-xl\": { fontSize: \"20px\" },\r\n \"akshar-xl\": { fontSize: \"20px\" },\r\n \"font-light\": { fontWeight: \"300\" },\r\n \"font-patla\": { fontWeight: \"300\" },\r\n \"font-bold\": { fontWeight: \"700\" },\r\n \"font-mota\": { fontWeight: \"700\" },\r\n \"text-center\": { textAlign: \"center\" },\r\n \"likhawat-beech\": { textAlign: \"center\" },\r\n \"text-left\": { textAlign: \"left\" },\r\n \"likhawat-baaye\": { textAlign: \"left\" },\r\n \"text-right\": { textAlign: \"right\" },\r\n \"likhawat-daaye\": { textAlign: \"right\" },\r\n};\r\n\r\nexport function typography(token) {\r\n return map[token] || null;\r\n}\r\n", "import { theme } from \"../theme/theme.js\";\r\n\r\nconst map = {\r\n \"border\": { \r\n border: `1px solid ${theme.border.base}` \r\n },\r\n \"kinara-rekha\": { \r\n border: `1px solid ${theme.border.base}` \r\n },\r\n \"rounded\": { \r\n borderRadius: \"8px\" \r\n },\r\n \"gol-kinara\": { \r\n borderRadius: \"8px\" \r\n },\r\n \"rounded-2\": { \r\n borderRadius: \"12px\" \r\n },\r\n \"gol-kinara-2\": { \r\n borderRadius: \"12px\" \r\n },\r\n \"rounded-full\": { \r\n borderRadius: \"9999px\" \r\n },\r\n \"poora-gola\": { \r\n borderRadius: \"9999px\" \r\n },\r\n};\r\n\r\nexport function border(token) {\r\n return map[token] || null;\r\n}\r\n", "import { theme } from \"../theme/theme.js\";\r\n\r\nconst map = {\r\n \"chai-shadow\": { \r\n boxShadow: theme.effects.chaiShadow \r\n },\r\n \"chai-parchai\": { \r\n boxShadow: theme.effects.chaiShadow \r\n },\r\n \"soft-shadow\": { \r\n boxShadow: theme.effects.softShadow \r\n },\r\n \"halki-parchai\": { \r\n boxShadow: theme.effects.softShadow \r\n },\r\n \"sheesha-chai\": {\r\n backgroundColor: \"rgba(246, 231, 208, 0.45)\",\r\n border: `1px solid ${theme.border.base}`,\r\n backdropFilter: \"blur(8px)\",\r\n WebkitBackdropFilter: \"blur(8px)\",\r\n },\r\n};\r\n\r\nexport function effects(token) {\r\n return map[token] || null;\r\n}\r\n", "const map = {\r\n \"w-full\": { \r\n width: \"100%\" \r\n },\r\n \"chaudai-poori\": { \r\n width: \"100%\" \r\n },\r\n \"h-full\": { \r\n height: \"100%\" \r\n },\r\n \"unchai-poori\": { \r\n height: \"100%\" \r\n },\r\n \"w-screen\": { \r\n width: \"100vw\" \r\n },\r\n \"chaudai-screen\": {\r\n width: \"100vw\"\r\n },\r\n \"h-screen\": { \r\n height: \"100vh\" \r\n },\r\n \"unchai-screen\": { \r\n height: \"100vh\" \r\n },\r\n};\r\n\r\nexport function size(token) {\r\n return map[token] || null;\r\n}\r\n", "const map = {\r\n block: { display: \"block\" },\r\n dikhao: { display: \"block\" },\r\n hidden: { display: \"none\" },\r\n chhupao: { display: \"none\" },\r\n};\r\n\r\nexport function display(token) {\r\n return map[token] || null;\r\n}\r\n", "import { spacing } from \"../utilities/spacing.js\";\r\nimport { layout } from \"../utilities/layout.js\";\r\nimport { colors } from \"../utilities/colors.js\";\r\nimport { typography } from \"../utilities/typography.js\";\r\nimport { border } from \"../utilities/border.js\";\r\nimport { effects } from \"../utilities/effects.js\";\r\nimport { size } from \"../utilities/size.js\";\r\nimport { display } from \"../utilities/display.js\";\r\n\r\n// Kaunsi utility kis function ko handle karegi?\u201D\r\nexport function resolve(token) {\r\n return (\r\n spacing(token) || layout(token) || colors(token) ||\r\n typography(token) || border(token) || effects(token) ||\r\n size(token) || display(token) || null\r\n );\r\n}\r\n", "// Yahan actual styling hoti hai\r\nexport function applyStyles(el, styles) {\r\n Object.assign(el.style, styles);\r\n}", "import { parse } from \"./02-parser.js\";\r\nimport { resolve } from \"./03-resolver.js\";\r\nimport { applyStyles } from \"./04-apply.js\";\r\n\r\nexport function init() {\r\n // 1. sare css applied ellements ko pick karo\r\n const elements = document.querySelectorAll(\"[chaiCss]\");\r\n\r\n elements.forEach((el) => {\r\n // 2. \"kinare-se-4 gol-kinara\" => [\"kinare-se-4\", \"gol-kinara\"]\r\n const tokens = parse(el.getAttribute(\"chaiCss\") || \"\");\r\n\r\n // 3. harr tokean ka matlab kya hai?\r\n tokens.forEach((token) => {\r\n // 4. kaun si utility kisko handover karni hai?\r\n const styles = resolve(token);\r\n\r\n if (styles)\r\n // 5. apply the css\r\n applyStyles(el, styles);\r\n });\r\n });\r\n}\r\n", "import { init } from \"./core/01-engine.js\";\r\n\r\ndocument.addEventListener(\"DOMContentLoaded\", () => {\r\n init();\r\n});"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["map", "map", "map", "map", "map"]
|
|
7
|
+
}
|
package/dist/chai-ui.js
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
var chaiUi=(()=>{function n(e){return e?typeof e!="string"?[]:e.trim().split(/\s+/).filter(Boolean):[]}function s(e){let o=e.match(/^(p|m|px|py|mx|my|gap|kinare-se|kinare-x-se|kinare-y-se|bahar-se|upar-se|niche-se|daaye-se|baaye-se|fasla)-(\d+)$/);if(!o)return null;let r=o[1],t=Number(o[2])*4+"px";return r==="p"?{padding:t}:r==="kinare-se"?{padding:t}:r==="m"?{margin:t}:r==="bahar-se"?{margin:t}:r==="px"?{paddingLeft:t,paddingRight:t}:r==="kinare-x-se"?{paddingLeft:t,paddingRight:t}:r==="py"?{paddingTop:t,paddingBottom:t}:r==="kinare-y-se"?{paddingTop:t,paddingBottom:t}:r==="mx"?{marginLeft:t,marginRight:t}:r==="baaye-se"?{marginLeft:t}:r==="daaye-se"?{marginRight:t}:r==="my"?{marginTop:t,marginBottom:t}:r==="upar-se"?{marginTop:t}:r==="niche-se"?{marginBottom:t}:r==="gap"?{gap:t}:r==="fasla"?{gap:t}:null}var b={flex:{display:"flex"},lacheela:{display:"flex"},"flex-col":{flexDirection:"column"},"lacheela-kolam":{flexDirection:"column"},"items-center":{alignItems:"center"},"saman-beech":{alignItems:"center"},"justify-center":{justifyContent:"center"},"beech-mein":{justifyContent:"center"},"justify-between":{justifyContent:"space-between"},"dono-kinare":{justifyContent:"space-between"}};function c(e){return b[e]||null}var a={colors:{chai:"#8b5e3c",cream:"#f6e7d0",masala:"#5a3d2b",white:"#ffffff"},border:{base:"#d9c3a5"},effects:{chaiShadow:"0 12px 24px rgba(90, 61, 43, 0.22)",softShadow:"0 6px 16px rgba(90, 61, 43, 0.12)"}};var y={"pichhe-chai":"bg-chai","pichhe-cream":"bg-cream","pichhe-masala":"bg-masala","likhawat-chai":"text-chai","likhawat-masala":"text-masala","likhawat-safed":"text-white"};function l(e){let o=y[e]||e,r=o.match(/^bg-(chai|cream|masala)$/);if(r)return{backgroundColor:a.colors[r[1]]};let t=o.match(/^text-(chai|masala|white)$/);return t?{color:a.colors[t[1]]}:null}var w={"text-sm":{fontSize:"14px"},"akshar-chhota":{fontSize:"14px"},"text-base":{fontSize:"16px"},"akshar-samanya":{fontSize:"16px"},"text-lg":{fontSize:"18px"},"akshar-bada":{fontSize:"18px"},"text-xl":{fontSize:"20px"},"akshar-xl":{fontSize:"20px"},"font-light":{fontWeight:"300"},"font-patla":{fontWeight:"300"},"font-bold":{fontWeight:"700"},"font-mota":{fontWeight:"700"},"text-center":{textAlign:"center"},"likhawat-beech":{textAlign:"center"},"text-left":{textAlign:"left"},"likhawat-baaye":{textAlign:"left"},"text-right":{textAlign:"right"},"likhawat-daaye":{textAlign:"right"}};function p(e){return w[e]||null}var k={border:{border:`1px solid ${a.border.base}`},"kinara-rekha":{border:`1px solid ${a.border.base}`},rounded:{borderRadius:"8px"},"gol-kinara":{borderRadius:"8px"},"rounded-2":{borderRadius:"12px"},"gol-kinara-2":{borderRadius:"12px"},"rounded-full":{borderRadius:"9999px"},"poora-gola":{borderRadius:"9999px"}};function f(e){return k[e]||null}var S={"chai-shadow":{boxShadow:a.effects.chaiShadow},"chai-parchai":{boxShadow:a.effects.chaiShadow},"soft-shadow":{boxShadow:a.effects.softShadow},"halki-parchai":{boxShadow:a.effects.softShadow},"sheesha-chai":{backgroundColor:"rgba(246, 231, 208, 0.45)",border:`1px solid ${a.border.base}`,backdropFilter:"blur(8px)",WebkitBackdropFilter:"blur(8px)"}};function h(e){return S[e]||null}var z={"w-full":{width:"100%"},"chaudai-poori":{width:"100%"},"h-full":{height:"100%"},"unchai-poori":{height:"100%"},"w-screen":{width:"100vw"},"chaudai-screen":{width:"100vw"},"h-screen":{height:"100vh"},"unchai-screen":{height:"100vh"}};function d(e){return z[e]||null}var R={block:{display:"block"},dikhao:{display:"block"},hidden:{display:"none"},chhupao:{display:"none"}};function m(e){return R[e]||null}function u(e){return s(e)||c(e)||l(e)||p(e)||f(e)||h(e)||d(e)||m(e)||null}function x(e,o){Object.assign(e.style,o)}function g(){document.querySelectorAll("[chaiCss]").forEach(o=>{n(o.getAttribute("chaiCss")||"").forEach(t=>{let i=u(t);i&&x(o,i)})})}document.addEventListener("DOMContentLoaded",()=>{g()});})();
|
|
2
|
+
//# sourceMappingURL=chai-ui.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/core/02-parser.js", "../src/utilities/spacing.js", "../src/utilities/layout.js", "../src/theme/theme.js", "../src/utilities/colors.js", "../src/utilities/typography.js", "../src/utilities/border.js", "../src/utilities/effects.js", "../src/utilities/size.js", "../src/utilities/display.js", "../src/core/03-resolver.js", "../src/core/04-apply.js", "../src/core/01-engine.js", "../src/index.js"],
|
|
4
|
+
"sourcesContent": ["// \"p-4 bg-chai\" \u2192 [\"p-4\", \"bg-chai\"]\r\nexport function parse(cssStringClass) {\r\n if (!cssStringClass) {\r\n return [];\r\n }\r\n if (typeof cssStringClass !== \"string\") {\r\n return [];\r\n }\r\n return cssStringClass.trim().split(/\\s+/).filter(Boolean);\r\n}\r\n", "export function spacing(token) {\r\n const match = token.match(\r\n /^(p|m|px|py|mx|my|gap|kinare-se|kinare-x-se|kinare-y-se|bahar-se|upar-se|niche-se|daaye-se|baaye-se|fasla)-(\\d+)$/,\r\n );\r\n\r\n if (!match) {\r\n return null;\r\n }\r\n\r\n const kind = match[1];\r\n const value = Number(match[2]) * 4 + \"px\";\r\n\r\n if (kind === \"p\") \r\n return { \r\n padding: value \r\n };\r\n if (kind === \"kinare-se\") \r\n return { \r\n padding: value \r\n };\r\n if (kind === \"m\") \r\n return { \r\n margin: value \r\n };\r\n if (kind === \"bahar-se\") \r\n return { \r\n margin: value \r\n };\r\n if (kind === \"px\") \r\n return { \r\n paddingLeft: value, \r\n paddingRight: value \r\n };\r\n if (kind === \"kinare-x-se\")\r\n return { \r\n paddingLeft: value, \r\n paddingRight: value \r\n };\r\n if (kind === \"py\") \r\n return { \r\n paddingTop: value, \r\n paddingBottom: value \r\n };\r\n if (kind === \"kinare-y-se\")\r\n return { \r\n paddingTop: value, \r\n paddingBottom: value \r\n };\r\n if (kind === \"mx\") \r\n return { \r\n marginLeft: value, \r\n marginRight: value \r\n };\r\n if (kind === \"baaye-se\") \r\n return { \r\n marginLeft: value \r\n };\r\n if (kind === \"daaye-se\") \r\n return { \r\n marginRight: value \r\n };\r\n if (kind === \"my\") \r\n return { \r\n marginTop: value, \r\n marginBottom: value \r\n };\r\n if (kind === \"upar-se\") \r\n return { \r\n marginTop: value \r\n };\r\n if (kind === \"niche-se\") \r\n return { \r\n marginBottom: value \r\n };\r\n if (kind === \"gap\") \r\n return { \r\n gap: value \r\n };\r\n if (kind === \"fasla\") \r\n return { \r\n gap: value \r\n };\r\n\r\n return null;\r\n}\r\n", "const map = {\r\n flex: { \r\n display: \"flex\" \r\n },\r\n lacheela: { \r\n display: \"flex\" \r\n },\r\n \"flex-col\": { \r\n flexDirection: \"column\" \r\n },\r\n \"lacheela-kolam\": { \r\n flexDirection: \"column\" \r\n },\r\n \"items-center\": { \r\n alignItems: \"center\" \r\n },\r\n \"saman-beech\": { \r\n alignItems: \"center\" \r\n },\r\n \"justify-center\": { \r\n justifyContent: \"center\" \r\n },\r\n \"beech-mein\": { \r\n justifyContent: \"center\" \r\n },\r\n \"justify-between\": { \r\n justifyContent: \"space-between\" \r\n },\r\n \"dono-kinare\": { \r\n justifyContent: \"space-between\" \r\n },\r\n};\r\n\r\nexport function layout(token) {\r\n return map[token] || null;\r\n}\r\n", "export const theme = {\r\n colors: {\r\n chai: \"#8b5e3c\",\r\n cream: \"#f6e7d0\",\r\n masala: \"#5a3d2b\",\r\n white: \"#ffffff\",\r\n },\r\n border: {\r\n base: \"#d9c3a5\",\r\n },\r\n effects: {\r\n chaiShadow: \"0 12px 24px rgba(90, 61, 43, 0.22)\",\r\n softShadow: \"0 6px 16px rgba(90, 61, 43, 0.12)\",\r\n },\r\n};\r\n", "import { theme } from \"../theme/theme.js\";\r\n\r\nconst aliases = {\r\n \"pichhe-chai\": \"bg-chai\",\r\n \"pichhe-cream\": \"bg-cream\",\r\n \"pichhe-masala\": \"bg-masala\",\r\n \"likhawat-chai\": \"text-chai\",\r\n \"likhawat-masala\": \"text-masala\",\r\n \"likhawat-safed\": \"text-white\",\r\n};\r\n\r\nexport function colors(token) {\r\n const normalizedToken = aliases[token] || token;\r\n const bgMatch = normalizedToken.match(/^bg-(chai|cream|masala)$/);\r\n if (bgMatch) {\r\n return { \r\n backgroundColor: theme.colors[bgMatch[1]] \r\n };\r\n }\r\n\r\n const textMatch = normalizedToken.match(/^text-(chai|masala|white)$/);\r\n if (textMatch) {\r\n return { \r\n color: theme.colors[textMatch[1]] \r\n };\r\n }\r\n\r\n return null;\r\n}\r\n", "const map = {\r\n \"text-sm\": { fontSize: \"14px\" },\r\n \"akshar-chhota\": { fontSize: \"14px\" },\r\n \"text-base\": { fontSize: \"16px\" },\r\n \"akshar-samanya\": { fontSize: \"16px\" },\r\n \"text-lg\": { fontSize: \"18px\" },\r\n \"akshar-bada\": { fontSize: \"18px\" },\r\n \"text-xl\": { fontSize: \"20px\" },\r\n \"akshar-xl\": { fontSize: \"20px\" },\r\n \"font-light\": { fontWeight: \"300\" },\r\n \"font-patla\": { fontWeight: \"300\" },\r\n \"font-bold\": { fontWeight: \"700\" },\r\n \"font-mota\": { fontWeight: \"700\" },\r\n \"text-center\": { textAlign: \"center\" },\r\n \"likhawat-beech\": { textAlign: \"center\" },\r\n \"text-left\": { textAlign: \"left\" },\r\n \"likhawat-baaye\": { textAlign: \"left\" },\r\n \"text-right\": { textAlign: \"right\" },\r\n \"likhawat-daaye\": { textAlign: \"right\" },\r\n};\r\n\r\nexport function typography(token) {\r\n return map[token] || null;\r\n}\r\n", "import { theme } from \"../theme/theme.js\";\r\n\r\nconst map = {\r\n \"border\": { \r\n border: `1px solid ${theme.border.base}` \r\n },\r\n \"kinara-rekha\": { \r\n border: `1px solid ${theme.border.base}` \r\n },\r\n \"rounded\": { \r\n borderRadius: \"8px\" \r\n },\r\n \"gol-kinara\": { \r\n borderRadius: \"8px\" \r\n },\r\n \"rounded-2\": { \r\n borderRadius: \"12px\" \r\n },\r\n \"gol-kinara-2\": { \r\n borderRadius: \"12px\" \r\n },\r\n \"rounded-full\": { \r\n borderRadius: \"9999px\" \r\n },\r\n \"poora-gola\": { \r\n borderRadius: \"9999px\" \r\n },\r\n};\r\n\r\nexport function border(token) {\r\n return map[token] || null;\r\n}\r\n", "import { theme } from \"../theme/theme.js\";\r\n\r\nconst map = {\r\n \"chai-shadow\": { \r\n boxShadow: theme.effects.chaiShadow \r\n },\r\n \"chai-parchai\": { \r\n boxShadow: theme.effects.chaiShadow \r\n },\r\n \"soft-shadow\": { \r\n boxShadow: theme.effects.softShadow \r\n },\r\n \"halki-parchai\": { \r\n boxShadow: theme.effects.softShadow \r\n },\r\n \"sheesha-chai\": {\r\n backgroundColor: \"rgba(246, 231, 208, 0.45)\",\r\n border: `1px solid ${theme.border.base}`,\r\n backdropFilter: \"blur(8px)\",\r\n WebkitBackdropFilter: \"blur(8px)\",\r\n },\r\n};\r\n\r\nexport function effects(token) {\r\n return map[token] || null;\r\n}\r\n", "const map = {\r\n \"w-full\": { \r\n width: \"100%\" \r\n },\r\n \"chaudai-poori\": { \r\n width: \"100%\" \r\n },\r\n \"h-full\": { \r\n height: \"100%\" \r\n },\r\n \"unchai-poori\": { \r\n height: \"100%\" \r\n },\r\n \"w-screen\": { \r\n width: \"100vw\" \r\n },\r\n \"chaudai-screen\": {\r\n width: \"100vw\"\r\n },\r\n \"h-screen\": { \r\n height: \"100vh\" \r\n },\r\n \"unchai-screen\": { \r\n height: \"100vh\" \r\n },\r\n};\r\n\r\nexport function size(token) {\r\n return map[token] || null;\r\n}\r\n", "const map = {\r\n block: { display: \"block\" },\r\n dikhao: { display: \"block\" },\r\n hidden: { display: \"none\" },\r\n chhupao: { display: \"none\" },\r\n};\r\n\r\nexport function display(token) {\r\n return map[token] || null;\r\n}\r\n", "import { spacing } from \"../utilities/spacing.js\";\r\nimport { layout } from \"../utilities/layout.js\";\r\nimport { colors } from \"../utilities/colors.js\";\r\nimport { typography } from \"../utilities/typography.js\";\r\nimport { border } from \"../utilities/border.js\";\r\nimport { effects } from \"../utilities/effects.js\";\r\nimport { size } from \"../utilities/size.js\";\r\nimport { display } from \"../utilities/display.js\";\r\n\r\n// Kaunsi utility kis function ko handle karegi?\u201D\r\nexport function resolve(token) {\r\n return (\r\n spacing(token) || layout(token) || colors(token) ||\r\n typography(token) || border(token) || effects(token) ||\r\n size(token) || display(token) || null\r\n );\r\n}\r\n", "// Yahan actual styling hoti hai\r\nexport function applyStyles(el, styles) {\r\n Object.assign(el.style, styles);\r\n}", "import { parse } from \"./02-parser.js\";\r\nimport { resolve } from \"./03-resolver.js\";\r\nimport { applyStyles } from \"./04-apply.js\";\r\n\r\nexport function init() {\r\n // 1. sare css applied ellements ko pick karo\r\n const elements = document.querySelectorAll(\"[chaiCss]\");\r\n\r\n elements.forEach((el) => {\r\n // 2. \"kinare-se-4 gol-kinara\" => [\"kinare-se-4\", \"gol-kinara\"]\r\n const tokens = parse(el.getAttribute(\"chaiCss\") || \"\");\r\n\r\n // 3. harr tokean ka matlab kya hai?\r\n tokens.forEach((token) => {\r\n // 4. kaun si utility kisko handover karni hai?\r\n const styles = resolve(token);\r\n\r\n if (styles)\r\n // 5. apply the css\r\n applyStyles(el, styles);\r\n });\r\n });\r\n}\r\n", "import { init } from \"./core/01-engine.js\";\r\n\r\ndocument.addEventListener(\"DOMContentLoaded\", () => {\r\n init();\r\n});"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["parse", "cssStringClass", "spacing", "token", "match", "kind", "value", "map", "layout", "token", "theme", "aliases", "colors", "token", "normalizedToken", "bgMatch", "theme", "textMatch", "map", "typography", "token", "map", "theme", "border", "token", "map", "theme", "effects", "token", "map", "size", "token", "map", "display", "token", "resolve", "token", "spacing", "layout", "colors", "typography", "border", "effects", "size", "display", "applyStyles", "el", "styles", "init", "el", "parse", "token", "styles", "resolve", "applyStyles", "init"]
|
|
7
|
+
}
|
package/package.json
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@gaurav009/chai-ui",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "A lightweight, **JavaScript-powered utility-first styling library** that brings a warm, chai-inspired design system to the browser — without any build tools.",
|
|
5
|
+
"homepage": "https://github.com/gaurav0973/css-utility-library#readme",
|
|
6
|
+
"bugs": {
|
|
7
|
+
"url": "https://github.com/gaurav0973/css-utility-library/issues"
|
|
8
|
+
},
|
|
9
|
+
"repository": {
|
|
10
|
+
"type": "git",
|
|
11
|
+
"url": "git+https://github.com/gaurav0973/css-utility-library.git"
|
|
12
|
+
},
|
|
13
|
+
"license": "ISC",
|
|
14
|
+
"author": "",
|
|
15
|
+
"type": "module",
|
|
16
|
+
"main": "index.js",
|
|
17
|
+
"scripts": {
|
|
18
|
+
"test": "echo \"Error: no test specified\" && exit 1"
|
|
19
|
+
},
|
|
20
|
+
"dependencies": {
|
|
21
|
+
"esbuild": "^0.25.12"
|
|
22
|
+
},
|
|
23
|
+
"devDependencies": {}
|
|
24
|
+
}
|
package/readme.md
ADDED
|
@@ -0,0 +1,272 @@
|
|
|
1
|
+
# ☕ chaiUi
|
|
2
|
+
|
|
3
|
+
A lightweight, **JavaScript-powered utility-first styling library** that brings a warm, chai-inspired design system to the browser — without any build tools.
|
|
4
|
+
|
|
5
|
+
Retro spirit, modern utility flow: old-school look, runtime-first engine.
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## 📦 NPM Quick Start
|
|
10
|
+
|
|
11
|
+
```bash
|
|
12
|
+
npm install @gaurav009/chaiui
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
```html
|
|
16
|
+
<script type="module">
|
|
17
|
+
import "@gaurav009/chaiui";
|
|
18
|
+
</script>
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
CDN (after publish):
|
|
22
|
+
|
|
23
|
+
```html
|
|
24
|
+
<script src="https://unpkg.com/@gaurav009/chaiui/dist/chai-ui.js"></script>
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
---
|
|
28
|
+
|
|
29
|
+
## 🛠️ Build For dist
|
|
30
|
+
|
|
31
|
+
```bash
|
|
32
|
+
npm install
|
|
33
|
+
npm run build
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
Build output:
|
|
37
|
+
|
|
38
|
+
- `dist/chai-ui.esm.js` (ES module for npm import)
|
|
39
|
+
- `dist/chai-ui.js` (browser IIFE for CDN)
|
|
40
|
+
|
|
41
|
+
---
|
|
42
|
+
|
|
43
|
+
## 🚀 Publish To npm
|
|
44
|
+
|
|
45
|
+
```bash
|
|
46
|
+
npm login
|
|
47
|
+
npm version patch
|
|
48
|
+
npm publish
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
Tip: `prepublishOnly` script automatically runs build before publish.
|
|
52
|
+
|
|
53
|
+
---
|
|
54
|
+
|
|
55
|
+
## 🧠 What is chaiUi?
|
|
56
|
+
|
|
57
|
+
chaiUi is a **runtime utility library** that lets you style elements using small, composable utility tokens — similar to Tailwind — but powered entirely by **JavaScript + DOM manipulation**.
|
|
58
|
+
|
|
59
|
+
No bundlers. No compilation. Just plug and play.
|
|
60
|
+
|
|
61
|
+
---
|
|
62
|
+
|
|
63
|
+
## 🎯 Why chaiUi?
|
|
64
|
+
|
|
65
|
+
Modern CSS frameworks rely on build steps.
|
|
66
|
+
|
|
67
|
+
chaiUi takes a different approach:
|
|
68
|
+
|
|
69
|
+
- ⚡ Works directly in the browser
|
|
70
|
+
- 🧩 Utility-first (compose styles like LEGO)
|
|
71
|
+
- ☕ Comes with a unique **chai-themed design language**
|
|
72
|
+
- 🛠 Built using only **JavaScript + DOM**
|
|
73
|
+
|
|
74
|
+
---
|
|
75
|
+
|
|
76
|
+
## 🚀 Example
|
|
77
|
+
|
|
78
|
+
```html
|
|
79
|
+
<div chaiCss="kinare-se-4 pichhe-chai likhawat-safed gol-kinara chai-parchai">
|
|
80
|
+
☕ Sip the code
|
|
81
|
+
</div>
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
chaiUi will parse the `chaiCss` attribute and apply styles dynamically.
|
|
85
|
+
|
|
86
|
+
---
|
|
87
|
+
|
|
88
|
+
## 🕹️ Old School Use Case
|
|
89
|
+
|
|
90
|
+
```html
|
|
91
|
+
<section chaiCss="kinare-se-4 pichhe-cream kinara-rekha gol-kinara-2">
|
|
92
|
+
<h2 chaiCss="akshar-xl font-mota niche-se-2">chaiUi Control Panel</h2>
|
|
93
|
+
<p chaiCss="akshar-samanya niche-se-2">
|
|
94
|
+
Classic dashboard vibes with no CSS file.
|
|
95
|
+
</p>
|
|
96
|
+
|
|
97
|
+
<div chaiCss="lacheela fasla-2">
|
|
98
|
+
<button
|
|
99
|
+
chaiCss="kinare-x-se-3 kinare-y-se-2 pichhe-chai likhawat-safed gol-kinara"
|
|
100
|
+
>
|
|
101
|
+
Brew
|
|
102
|
+
</button>
|
|
103
|
+
<button
|
|
104
|
+
chaiCss="kinare-x-se-3 kinare-y-se-2 pichhe-masala likhawat-safed gol-kinara"
|
|
105
|
+
>
|
|
106
|
+
Export
|
|
107
|
+
</button>
|
|
108
|
+
</div>
|
|
109
|
+
</section>
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
---
|
|
113
|
+
|
|
114
|
+
## 🧩 Core Concept
|
|
115
|
+
|
|
116
|
+
Instead of writing CSS:
|
|
117
|
+
|
|
118
|
+
```css
|
|
119
|
+
.card {
|
|
120
|
+
padding: 16px;
|
|
121
|
+
background: brown;
|
|
122
|
+
border-radius: 8px;
|
|
123
|
+
}
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
You compose utilities:
|
|
127
|
+
|
|
128
|
+
```html
|
|
129
|
+
<div chaiCss="kinare-se-4 pichhe-chai gol-kinara"></div>
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
Each token is a **utility** that does one thing.
|
|
133
|
+
|
|
134
|
+
---
|
|
135
|
+
|
|
136
|
+
## 🏗️ How It Works
|
|
137
|
+
|
|
138
|
+
chaiUi follows a simple pipeline:
|
|
139
|
+
|
|
140
|
+
```
|
|
141
|
+
[chaiCss] → Parser → Resolver → Apply → DOM
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
1. **Parser** → splits utility tokens
|
|
145
|
+
2. **Resolver** → maps tokens to styles
|
|
146
|
+
3. **Apply** → applies styles using `element.style`
|
|
147
|
+
|
|
148
|
+
---
|
|
149
|
+
|
|
150
|
+
## 🧱 Utility Categories (V1)
|
|
151
|
+
|
|
152
|
+
chaiUi provides a minimal, focused set of utilities:
|
|
153
|
+
|
|
154
|
+
### 📦 Layout
|
|
155
|
+
|
|
156
|
+
- `lacheela` → `display: flex`
|
|
157
|
+
- `lacheela-kolam` → `flex-direction: column`
|
|
158
|
+
- `saman-beech` → `align-items: center`
|
|
159
|
+
- `beech-mein` → `justify-content: center`
|
|
160
|
+
- `dono-kinare` → `justify-content: space-between`
|
|
161
|
+
|
|
162
|
+
Compatibility aliases: `flex`, `flex-col`, `items-center`, `justify-center`, `justify-between`
|
|
163
|
+
|
|
164
|
+
### 📏 Spacing
|
|
165
|
+
|
|
166
|
+
- `kinare-se-*` → padding (example: `kinare-se-2`)
|
|
167
|
+
- `kinare-x-se-*`, `kinare-y-se-*` → horizontal/vertical padding
|
|
168
|
+
- `bahar-se-*` → margin
|
|
169
|
+
- `upar-se-*`, `niche-se-*` → top/bottom margin
|
|
170
|
+
- `baaye-se-*`, `daaye-se-*` → left/right margin
|
|
171
|
+
- `fasla-*` → gap
|
|
172
|
+
|
|
173
|
+
Compatibility aliases (still supported): `p-*`, `m-*`, `px-*`, `py-*`, `mx-*`, `my-*`, `gap-*`
|
|
174
|
+
|
|
175
|
+
> Scale: `1 = 4px`
|
|
176
|
+
|
|
177
|
+
Example:
|
|
178
|
+
|
|
179
|
+
```html
|
|
180
|
+
<div chaiCss="kinare-se-2 upar-se-2 fasla-2"></div>
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
---
|
|
184
|
+
|
|
185
|
+
### 🎨 Colors (Chai Theme ☕)
|
|
186
|
+
|
|
187
|
+
- `pichhe-chai`, `pichhe-cream`, `pichhe-masala`
|
|
188
|
+
- `likhawat-chai`, `likhawat-masala`, `likhawat-safed`
|
|
189
|
+
|
|
190
|
+
Compatibility aliases: `bg-chai`, `bg-cream`, `bg-masala`, `text-chai`, `text-masala`, `text-white`
|
|
191
|
+
|
|
192
|
+
---
|
|
193
|
+
|
|
194
|
+
### ✍️ Typography
|
|
195
|
+
|
|
196
|
+
- `akshar-chhota`, `akshar-samanya`, `akshar-bada`, `akshar-xl`
|
|
197
|
+
- `font-patla`, `font-mota`
|
|
198
|
+
- `likhawat-beech`, `likhawat-baaye`, `likhawat-daaye`
|
|
199
|
+
|
|
200
|
+
Compatibility aliases: `text-sm`, `text-base`, `text-lg`, `text-xl`, `font-light`, `font-bold`, `text-center`, `text-left`, `text-right`
|
|
201
|
+
|
|
202
|
+
---
|
|
203
|
+
|
|
204
|
+
### 🔲 Borders & Radius
|
|
205
|
+
|
|
206
|
+
- `kinara-rekha`
|
|
207
|
+
- `gol-kinara`, `gol-kinara-2`, `poora-gola`
|
|
208
|
+
|
|
209
|
+
Compatibility aliases: `border`, `rounded`, `rounded-2`, `rounded-full`
|
|
210
|
+
|
|
211
|
+
---
|
|
212
|
+
|
|
213
|
+
### 🌫️ Effects (Chai Identity 🔥)
|
|
214
|
+
|
|
215
|
+
- `chai-parchai`
|
|
216
|
+
- `halki-parchai`
|
|
217
|
+
- `sheesha-chai`
|
|
218
|
+
|
|
219
|
+
Compatibility aliases: `chai-shadow`, `soft-shadow`, `glass-chai`
|
|
220
|
+
|
|
221
|
+
---
|
|
222
|
+
|
|
223
|
+
### 📐 Size
|
|
224
|
+
|
|
225
|
+
- `chaudai-poori`, `unchai-poori`
|
|
226
|
+
- `chaudai-screen`, `unchai-screen`
|
|
227
|
+
|
|
228
|
+
Compatibility aliases: `w-full`, `h-full`, `w-screen`, `h-screen`
|
|
229
|
+
|
|
230
|
+
---
|
|
231
|
+
|
|
232
|
+
### 🧱 Display
|
|
233
|
+
|
|
234
|
+
- `dikhao`, `chhupao`
|
|
235
|
+
|
|
236
|
+
Compatibility aliases: `block`, `hidden`
|
|
237
|
+
|
|
238
|
+
---
|
|
239
|
+
|
|
240
|
+
## ☕ Chai Design Philosophy
|
|
241
|
+
|
|
242
|
+
chaiUi is not just utilities — it has a **personality**:
|
|
243
|
+
|
|
244
|
+
- Warm colors
|
|
245
|
+
- Soft shadows
|
|
246
|
+
- Cozy UI feel
|
|
247
|
+
- Minimal and expressive
|
|
248
|
+
|
|
249
|
+
> “Build interfaces that feel like a cup of chai.”
|
|
250
|
+
|
|
251
|
+
---
|
|
252
|
+
|
|
253
|
+
## ⚠️ What’s NOT Included (V1)
|
|
254
|
+
|
|
255
|
+
To keep things simple and focused:
|
|
256
|
+
|
|
257
|
+
- ❌ No hover states
|
|
258
|
+
- ❌ No responsive utilities
|
|
259
|
+
- ❌ No animations
|
|
260
|
+
- ❌ No components (button, card, etc.)
|
|
261
|
+
|
|
262
|
+
chaiUi focuses purely on **utilities**.
|
|
263
|
+
|
|
264
|
+
---
|
|
265
|
+
|
|
266
|
+
## 🧠 Philosophy
|
|
267
|
+
|
|
268
|
+
chaiUi follows the principle:
|
|
269
|
+
|
|
270
|
+
> “Don’t give components. Give building blocks.”
|
|
271
|
+
|
|
272
|
+
Instead of prebuilt UI, you compose everything using utilities.
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { mkdirSync } from "node:fs";
|
|
2
|
+
import { build } from "esbuild";
|
|
3
|
+
|
|
4
|
+
mkdirSync("dist", { recursive: true });
|
|
5
|
+
|
|
6
|
+
const shared = {
|
|
7
|
+
entryPoints: ["src/index.js"],
|
|
8
|
+
bundle: true,
|
|
9
|
+
target: ["es2018"],
|
|
10
|
+
legalComments: "none",
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
await build({
|
|
14
|
+
...shared,
|
|
15
|
+
format: "esm",
|
|
16
|
+
outfile: "dist/chai-ui.esm.js",
|
|
17
|
+
sourcemap: true,
|
|
18
|
+
});
|
|
19
|
+
|
|
20
|
+
await build({
|
|
21
|
+
...shared,
|
|
22
|
+
format: "iife",
|
|
23
|
+
globalName: "chaiUi",
|
|
24
|
+
outfile: "dist/chai-ui.js",
|
|
25
|
+
sourcemap: true,
|
|
26
|
+
minify: true,
|
|
27
|
+
});
|
|
28
|
+
|
|
29
|
+
console.log("Build complete: dist/chai-ui.esm.js and dist/chai-ui.js");
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { parse } from "./02-parser.js";
|
|
2
|
+
import { resolve } from "./03-resolver.js";
|
|
3
|
+
import { applyStyles } from "./04-apply.js";
|
|
4
|
+
|
|
5
|
+
export function init() {
|
|
6
|
+
// 1. sare css applied ellements ko pick karo
|
|
7
|
+
const elements = document.querySelectorAll("[chaiCss]");
|
|
8
|
+
|
|
9
|
+
elements.forEach((el) => {
|
|
10
|
+
// 2. "kinare-se-4 gol-kinara" => ["kinare-se-4", "gol-kinara"]
|
|
11
|
+
const tokens = parse(el.getAttribute("chaiCss") || "");
|
|
12
|
+
|
|
13
|
+
// 3. harr tokean ka matlab kya hai?
|
|
14
|
+
tokens.forEach((token) => {
|
|
15
|
+
// 4. kaun si utility kisko handover karni hai?
|
|
16
|
+
const styles = resolve(token);
|
|
17
|
+
|
|
18
|
+
if (styles)
|
|
19
|
+
// 5. apply the css
|
|
20
|
+
applyStyles(el, styles);
|
|
21
|
+
});
|
|
22
|
+
});
|
|
23
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { spacing } from "../utilities/spacing.js";
|
|
2
|
+
import { layout } from "../utilities/layout.js";
|
|
3
|
+
import { colors } from "../utilities/colors.js";
|
|
4
|
+
import { typography } from "../utilities/typography.js";
|
|
5
|
+
import { border } from "../utilities/border.js";
|
|
6
|
+
import { effects } from "../utilities/effects.js";
|
|
7
|
+
import { size } from "../utilities/size.js";
|
|
8
|
+
import { display } from "../utilities/display.js";
|
|
9
|
+
|
|
10
|
+
// Kaunsi utility kis function ko handle karegi?”
|
|
11
|
+
export function resolve(token) {
|
|
12
|
+
return (
|
|
13
|
+
spacing(token) || layout(token) || colors(token) ||
|
|
14
|
+
typography(token) || border(token) || effects(token) ||
|
|
15
|
+
size(token) || display(token) || null
|
|
16
|
+
);
|
|
17
|
+
}
|
package/src/index.js
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export const theme = {
|
|
2
|
+
colors: {
|
|
3
|
+
chai: "#8b5e3c",
|
|
4
|
+
cream: "#f6e7d0",
|
|
5
|
+
masala: "#5a3d2b",
|
|
6
|
+
white: "#ffffff",
|
|
7
|
+
},
|
|
8
|
+
border: {
|
|
9
|
+
base: "#d9c3a5",
|
|
10
|
+
},
|
|
11
|
+
effects: {
|
|
12
|
+
chaiShadow: "0 12px 24px rgba(90, 61, 43, 0.22)",
|
|
13
|
+
softShadow: "0 6px 16px rgba(90, 61, 43, 0.12)",
|
|
14
|
+
},
|
|
15
|
+
};
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { theme } from "../theme/theme.js";
|
|
2
|
+
|
|
3
|
+
const map = {
|
|
4
|
+
"border": {
|
|
5
|
+
border: `1px solid ${theme.border.base}`
|
|
6
|
+
},
|
|
7
|
+
"kinara-rekha": {
|
|
8
|
+
border: `1px solid ${theme.border.base}`
|
|
9
|
+
},
|
|
10
|
+
"rounded": {
|
|
11
|
+
borderRadius: "8px"
|
|
12
|
+
},
|
|
13
|
+
"gol-kinara": {
|
|
14
|
+
borderRadius: "8px"
|
|
15
|
+
},
|
|
16
|
+
"rounded-2": {
|
|
17
|
+
borderRadius: "12px"
|
|
18
|
+
},
|
|
19
|
+
"gol-kinara-2": {
|
|
20
|
+
borderRadius: "12px"
|
|
21
|
+
},
|
|
22
|
+
"rounded-full": {
|
|
23
|
+
borderRadius: "9999px"
|
|
24
|
+
},
|
|
25
|
+
"poora-gola": {
|
|
26
|
+
borderRadius: "9999px"
|
|
27
|
+
},
|
|
28
|
+
};
|
|
29
|
+
|
|
30
|
+
export function border(token) {
|
|
31
|
+
return map[token] || null;
|
|
32
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { theme } from "../theme/theme.js";
|
|
2
|
+
|
|
3
|
+
const aliases = {
|
|
4
|
+
"pichhe-chai": "bg-chai",
|
|
5
|
+
"pichhe-cream": "bg-cream",
|
|
6
|
+
"pichhe-masala": "bg-masala",
|
|
7
|
+
"likhawat-chai": "text-chai",
|
|
8
|
+
"likhawat-masala": "text-masala",
|
|
9
|
+
"likhawat-safed": "text-white",
|
|
10
|
+
};
|
|
11
|
+
|
|
12
|
+
export function colors(token) {
|
|
13
|
+
const normalizedToken = aliases[token] || token;
|
|
14
|
+
const bgMatch = normalizedToken.match(/^bg-(chai|cream|masala)$/);
|
|
15
|
+
if (bgMatch) {
|
|
16
|
+
return {
|
|
17
|
+
backgroundColor: theme.colors[bgMatch[1]]
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
const textMatch = normalizedToken.match(/^text-(chai|masala|white)$/);
|
|
22
|
+
if (textMatch) {
|
|
23
|
+
return {
|
|
24
|
+
color: theme.colors[textMatch[1]]
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
return null;
|
|
29
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { theme } from "../theme/theme.js";
|
|
2
|
+
|
|
3
|
+
const map = {
|
|
4
|
+
"chai-shadow": {
|
|
5
|
+
boxShadow: theme.effects.chaiShadow
|
|
6
|
+
},
|
|
7
|
+
"chai-parchai": {
|
|
8
|
+
boxShadow: theme.effects.chaiShadow
|
|
9
|
+
},
|
|
10
|
+
"soft-shadow": {
|
|
11
|
+
boxShadow: theme.effects.softShadow
|
|
12
|
+
},
|
|
13
|
+
"halki-parchai": {
|
|
14
|
+
boxShadow: theme.effects.softShadow
|
|
15
|
+
},
|
|
16
|
+
"sheesha-chai": {
|
|
17
|
+
backgroundColor: "rgba(246, 231, 208, 0.45)",
|
|
18
|
+
border: `1px solid ${theme.border.base}`,
|
|
19
|
+
backdropFilter: "blur(8px)",
|
|
20
|
+
WebkitBackdropFilter: "blur(8px)",
|
|
21
|
+
},
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
export function effects(token) {
|
|
25
|
+
return map[token] || null;
|
|
26
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
const map = {
|
|
2
|
+
flex: {
|
|
3
|
+
display: "flex"
|
|
4
|
+
},
|
|
5
|
+
lacheela: {
|
|
6
|
+
display: "flex"
|
|
7
|
+
},
|
|
8
|
+
"flex-col": {
|
|
9
|
+
flexDirection: "column"
|
|
10
|
+
},
|
|
11
|
+
"lacheela-kolam": {
|
|
12
|
+
flexDirection: "column"
|
|
13
|
+
},
|
|
14
|
+
"items-center": {
|
|
15
|
+
alignItems: "center"
|
|
16
|
+
},
|
|
17
|
+
"saman-beech": {
|
|
18
|
+
alignItems: "center"
|
|
19
|
+
},
|
|
20
|
+
"justify-center": {
|
|
21
|
+
justifyContent: "center"
|
|
22
|
+
},
|
|
23
|
+
"beech-mein": {
|
|
24
|
+
justifyContent: "center"
|
|
25
|
+
},
|
|
26
|
+
"justify-between": {
|
|
27
|
+
justifyContent: "space-between"
|
|
28
|
+
},
|
|
29
|
+
"dono-kinare": {
|
|
30
|
+
justifyContent: "space-between"
|
|
31
|
+
},
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
export function layout(token) {
|
|
35
|
+
return map[token] || null;
|
|
36
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
const map = {
|
|
2
|
+
"w-full": {
|
|
3
|
+
width: "100%"
|
|
4
|
+
},
|
|
5
|
+
"chaudai-poori": {
|
|
6
|
+
width: "100%"
|
|
7
|
+
},
|
|
8
|
+
"h-full": {
|
|
9
|
+
height: "100%"
|
|
10
|
+
},
|
|
11
|
+
"unchai-poori": {
|
|
12
|
+
height: "100%"
|
|
13
|
+
},
|
|
14
|
+
"w-screen": {
|
|
15
|
+
width: "100vw"
|
|
16
|
+
},
|
|
17
|
+
"chaudai-screen": {
|
|
18
|
+
width: "100vw"
|
|
19
|
+
},
|
|
20
|
+
"h-screen": {
|
|
21
|
+
height: "100vh"
|
|
22
|
+
},
|
|
23
|
+
"unchai-screen": {
|
|
24
|
+
height: "100vh"
|
|
25
|
+
},
|
|
26
|
+
};
|
|
27
|
+
|
|
28
|
+
export function size(token) {
|
|
29
|
+
return map[token] || null;
|
|
30
|
+
}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
export function spacing(token) {
|
|
2
|
+
const match = token.match(
|
|
3
|
+
/^(p|m|px|py|mx|my|gap|kinare-se|kinare-x-se|kinare-y-se|bahar-se|upar-se|niche-se|daaye-se|baaye-se|fasla)-(\d+)$/,
|
|
4
|
+
);
|
|
5
|
+
|
|
6
|
+
if (!match) {
|
|
7
|
+
return null;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
const kind = match[1];
|
|
11
|
+
const value = Number(match[2]) * 4 + "px";
|
|
12
|
+
|
|
13
|
+
if (kind === "p")
|
|
14
|
+
return {
|
|
15
|
+
padding: value
|
|
16
|
+
};
|
|
17
|
+
if (kind === "kinare-se")
|
|
18
|
+
return {
|
|
19
|
+
padding: value
|
|
20
|
+
};
|
|
21
|
+
if (kind === "m")
|
|
22
|
+
return {
|
|
23
|
+
margin: value
|
|
24
|
+
};
|
|
25
|
+
if (kind === "bahar-se")
|
|
26
|
+
return {
|
|
27
|
+
margin: value
|
|
28
|
+
};
|
|
29
|
+
if (kind === "px")
|
|
30
|
+
return {
|
|
31
|
+
paddingLeft: value,
|
|
32
|
+
paddingRight: value
|
|
33
|
+
};
|
|
34
|
+
if (kind === "kinare-x-se")
|
|
35
|
+
return {
|
|
36
|
+
paddingLeft: value,
|
|
37
|
+
paddingRight: value
|
|
38
|
+
};
|
|
39
|
+
if (kind === "py")
|
|
40
|
+
return {
|
|
41
|
+
paddingTop: value,
|
|
42
|
+
paddingBottom: value
|
|
43
|
+
};
|
|
44
|
+
if (kind === "kinare-y-se")
|
|
45
|
+
return {
|
|
46
|
+
paddingTop: value,
|
|
47
|
+
paddingBottom: value
|
|
48
|
+
};
|
|
49
|
+
if (kind === "mx")
|
|
50
|
+
return {
|
|
51
|
+
marginLeft: value,
|
|
52
|
+
marginRight: value
|
|
53
|
+
};
|
|
54
|
+
if (kind === "baaye-se")
|
|
55
|
+
return {
|
|
56
|
+
marginLeft: value
|
|
57
|
+
};
|
|
58
|
+
if (kind === "daaye-se")
|
|
59
|
+
return {
|
|
60
|
+
marginRight: value
|
|
61
|
+
};
|
|
62
|
+
if (kind === "my")
|
|
63
|
+
return {
|
|
64
|
+
marginTop: value,
|
|
65
|
+
marginBottom: value
|
|
66
|
+
};
|
|
67
|
+
if (kind === "upar-se")
|
|
68
|
+
return {
|
|
69
|
+
marginTop: value
|
|
70
|
+
};
|
|
71
|
+
if (kind === "niche-se")
|
|
72
|
+
return {
|
|
73
|
+
marginBottom: value
|
|
74
|
+
};
|
|
75
|
+
if (kind === "gap")
|
|
76
|
+
return {
|
|
77
|
+
gap: value
|
|
78
|
+
};
|
|
79
|
+
if (kind === "fasla")
|
|
80
|
+
return {
|
|
81
|
+
gap: value
|
|
82
|
+
};
|
|
83
|
+
|
|
84
|
+
return null;
|
|
85
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
const map = {
|
|
2
|
+
"text-sm": { fontSize: "14px" },
|
|
3
|
+
"akshar-chhota": { fontSize: "14px" },
|
|
4
|
+
"text-base": { fontSize: "16px" },
|
|
5
|
+
"akshar-samanya": { fontSize: "16px" },
|
|
6
|
+
"text-lg": { fontSize: "18px" },
|
|
7
|
+
"akshar-bada": { fontSize: "18px" },
|
|
8
|
+
"text-xl": { fontSize: "20px" },
|
|
9
|
+
"akshar-xl": { fontSize: "20px" },
|
|
10
|
+
"font-light": { fontWeight: "300" },
|
|
11
|
+
"font-patla": { fontWeight: "300" },
|
|
12
|
+
"font-bold": { fontWeight: "700" },
|
|
13
|
+
"font-mota": { fontWeight: "700" },
|
|
14
|
+
"text-center": { textAlign: "center" },
|
|
15
|
+
"likhawat-beech": { textAlign: "center" },
|
|
16
|
+
"text-left": { textAlign: "left" },
|
|
17
|
+
"likhawat-baaye": { textAlign: "left" },
|
|
18
|
+
"text-right": { textAlign: "right" },
|
|
19
|
+
"likhawat-daaye": { textAlign: "right" },
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
export function typography(token) {
|
|
23
|
+
return map[token] || null;
|
|
24
|
+
}
|